diff options
author | Ryo Suzuki <ryo.suzuki@arm.com> | 2024-06-19 09:37:24 +0000 |
---|---|---|
committer | Ryo Suzuki <ryo.suzuki@arm.com> | 2024-06-25 11:36:57 +0000 |
commit | 232c9adefedf62aef591e9cd6316266ee0f29a27 (patch) | |
tree | a95fb64de3aec60a8e8239c431c11d2cc4943928 /src | |
parent | fc94f4d23abd4bc427b701f54ad85282e9ec7872 (diff) | |
download | ComputeLibrary-232c9adefedf62aef591e9cd6316266ee0f29a27.tar.gz |
Provide a wrapper class to expose cpu::CpuGemm
This wrapper allows us to utilize the functionality of CpuGemm
without directly exposing the source code.
Change-Id: I408630f52acd610c912e5c5fa02bfee5f884471e
Signed-off-by: Ryo Suzuki <ryo.suzuki@arm.com>
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/11607
Reviewed-by: Gunes Bayir <gunes.bayir@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Benchmark: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/BUILD.bazel | 3 | ||||
-rw-r--r-- | src/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/runtime/experimental/operators/CpuGemm.cpp | 96 |
3 files changed, 99 insertions, 1 deletions
diff --git a/src/BUILD.bazel b/src/BUILD.bazel index 8cb84b3533..22521d1744 100644 --- a/src/BUILD.bazel +++ b/src/BUILD.bazel @@ -1021,7 +1021,8 @@ filegroup( "runtime/SubTensor.cpp", "runtime/Tensor.cpp", "runtime/TensorAllocator.cpp", - "runtime/Utils.cpp"] + + "runtime/Utils.cpp", + "runtime/experimental/operators/CpuGemm.cpp"] + glob(["**/*.h", "**/*.hpp", "**/*.inl"]), diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9b6a57c3c7..0285245cfb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1013,4 +1013,5 @@ target_sources( runtime/Tensor.cpp runtime/TensorAllocator.cpp runtime/Utils.cpp + runtime/experimental/operators/CpuGemm.cpp )
\ No newline at end of file diff --git a/src/runtime/experimental/operators/CpuGemm.cpp b/src/runtime/experimental/operators/CpuGemm.cpp new file mode 100644 index 0000000000..9111367d51 --- /dev/null +++ b/src/runtime/experimental/operators/CpuGemm.cpp @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2024 Arm Limited. + * + * SPDX-License-Identifier: MIT + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "arm_compute/runtime/experimental/operators/CpuGemm.h" + +#include "src/cpu/operators/CpuGemm.h" + +namespace arm_compute +{ + +namespace experimental +{ +namespace ops +{ + +struct CpuGemm::Impl +{ + std::unique_ptr<arm_compute::cpu::CpuGemm> cpu_gemm{nullptr}; +}; + +CpuGemm::CpuGemm() : _impl(std::make_unique<Impl>()) +{ + _impl->cpu_gemm = std::make_unique<cpu::CpuGemm>(); +} + +CpuGemm::~CpuGemm() = default; + +void CpuGemm::configure(const ITensorInfo *a, + const ITensorInfo *b, + const ITensorInfo *c, + ITensorInfo *d, + float alpha, + float beta, + const GEMMInfo &gemm_info) +{ + _impl->cpu_gemm->configure(a, b, c, d, alpha, beta, gemm_info); +} + +Status CpuGemm::validate(const ITensorInfo *a, + const ITensorInfo *b, + const ITensorInfo *c, + const ITensorInfo *d, + float alpha, + float beta, + const GEMMInfo &gemm_info) +{ + return cpu::CpuGemm::validate(a, b, c, d, alpha, beta, gemm_info); +} + +Status CpuGemm::has_opt_impl(arm_compute::WeightFormat &weight_format, + const ITensorInfo *a, + const ITensorInfo *b, + const ITensorInfo *c, + const ITensorInfo *d, + const GEMMInfo &gemm_info) +{ + return cpu::CpuGemm::has_opt_impl(weight_format, a, b, c, d, gemm_info); +} + +void CpuGemm::run(ITensorPack &tensors) +{ + _impl->cpu_gemm->run(tensors); +} +void CpuGemm::prepare(ITensorPack &constants) +{ + _impl->cpu_gemm->prepare(constants); +} +experimental::MemoryRequirements CpuGemm::workspace() const +{ + return _impl->cpu_gemm->workspace(); +} + +} // namespace ops +} // namespace experimental +} // namespace arm_compute |