aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorViet-Hoa Do <viet-hoa.do@arm.com>2024-01-18 16:10:46 +0000
committerViet-Hoa Do <viet-hoa.do@arm.com>2024-01-23 09:52:40 +0000
commitfdf56fb9d414a754e7cedfdc1351ab0ce2866a0c (patch)
tree75b48446e9b4041ae9c520070e432d32b9748ef7 /src
parente812c0cafc6f224ec9caca30c2e97ec062012d53 (diff)
downloadComputeLibrary-fdf56fb9d414a754e7cedfdc1351ab0ce2866a0c.tar.gz
Make GpuWorkloadContext own all tensor info objects
* The tensor info objects created by calling create_tensor_info is now solely owned by the context object. The user only receives pointers to those objects. - Internally pointers to tensor info objects are used in various places. It's safer for dynamic fusion to manage these objects directly rather than relying on the users. - The validation test is updated to use the modified API. * Make various changes in dynamic fusion API to make it more friendly (e.g. making some of the objects moveable). Partially resolves: COMPMID-6707 Signed-off-by: Viet-Hoa Do <viet-hoa.do@arm.com> Change-Id: Ifee70e53c05f8e7b72bf9ef123701ff291c5ee80 Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/10990 Tested-by: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: Jakub Sujak <jakub.sujak@arm.com> Comments-Addressed: Arm Jenkins <bsgcomp@arm.com> Benchmark: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'src')
-rw-r--r--src/dynamic_fusion/runtime/gpu/cl/ClWorkloadRuntime.cpp6
-rw-r--r--src/dynamic_fusion/sketch/gpu/GpuWorkloadContext.cpp14
-rw-r--r--src/dynamic_fusion/sketch/gpu/GpuWorkloadContextImpl.h8
-rw-r--r--src/dynamic_fusion/sketch/gpu/GpuWorkloadSketch.cpp14
-rw-r--r--src/dynamic_fusion/sketch/gpu/GpuWorkloadSketchImpl.h13
5 files changed, 39 insertions, 16 deletions
diff --git a/src/dynamic_fusion/runtime/gpu/cl/ClWorkloadRuntime.cpp b/src/dynamic_fusion/runtime/gpu/cl/ClWorkloadRuntime.cpp
index ba39ff4c9d..3500a0e60d 100644
--- a/src/dynamic_fusion/runtime/gpu/cl/ClWorkloadRuntime.cpp
+++ b/src/dynamic_fusion/runtime/gpu/cl/ClWorkloadRuntime.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022-2023 Arm Limited.
+ * Copyright (c) 2022-2024 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -289,6 +289,10 @@ ClWorkloadRuntime::ClWorkloadRuntime() : _impl{std::make_unique<Implementation>(
ClWorkloadRuntime::~ClWorkloadRuntime() = default;
+ClWorkloadRuntime::ClWorkloadRuntime(ClWorkloadRuntime &&) = default;
+
+ClWorkloadRuntime &ClWorkloadRuntime::operator=(ClWorkloadRuntime &&) = default;
+
Status ClWorkloadRuntime::configure(const GpuWorkloadSketch &sketch)
{
ARM_COMPUTE_RETURN_ERROR_ON_MSG(_impl->_is_configured, "ClWorkloadRuntime cannot be re-configured");
diff --git a/src/dynamic_fusion/sketch/gpu/GpuWorkloadContext.cpp b/src/dynamic_fusion/sketch/gpu/GpuWorkloadContext.cpp
index 36cad790c7..fab18aabb4 100644
--- a/src/dynamic_fusion/sketch/gpu/GpuWorkloadContext.cpp
+++ b/src/dynamic_fusion/sketch/gpu/GpuWorkloadContext.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022-2023 Arm Limited.
+ * Copyright (c) 2022-2024 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -60,9 +60,9 @@ const CLCompileContext *GpuWorkloadContext::cl_compile_context() const
return _impl->cl_compile_context();
}
-void GpuWorkloadContext::register_user_tensor(ITensorInfo &tensor_info)
+void GpuWorkloadContext::register_user_tensor(std::unique_ptr<TensorInfo> &&tensor_info)
{
- _impl->register_user_tensor(tensor_info);
+ _impl->register_user_tensor(std::move(tensor_info));
}
GpuWorkloadContext::Impl &GpuWorkloadContext::implementation()
@@ -99,17 +99,17 @@ const MemoryDescriptorMap &GpuWorkloadContext::Impl::mem_map() const
return _mem_map;
}
-void GpuWorkloadContext::Impl::register_user_tensor(ITensorInfo &tensor_info)
+void GpuWorkloadContext::Impl::register_user_tensor(std::unique_ptr<TensorInfo> &&tensor_info)
{
- ARM_COMPUTE_ERROR_ON(tensor_info.has_valid_id());
+ ARM_COMPUTE_ERROR_ON(tensor_info->has_valid_id());
const auto tensor_id = next_tensor_id();
- tensor_info.set_id(tensor_id);
+ tensor_info->set_id(tensor_id);
_mem_map[tensor_id] = MemoryDescriptor{MemoryType::User};
// Save a *copy* of the user tensor info in workload context for future reference
// Note that this means if the user modifies the @p tensor_info, the change will not be reflected in the context
- _managed_tensor_info.emplace(tensor_info.id(), std::make_unique<TensorInfo>(tensor_info));
+ _managed_tensor_info.emplace(tensor_info->id(), std::move(tensor_info));
}
ITensorInfo *GpuWorkloadContext::Impl::create_virtual_tensor()
diff --git a/src/dynamic_fusion/sketch/gpu/GpuWorkloadContextImpl.h b/src/dynamic_fusion/sketch/gpu/GpuWorkloadContextImpl.h
index 7d9699031f..b3571a6480 100644
--- a/src/dynamic_fusion/sketch/gpu/GpuWorkloadContextImpl.h
+++ b/src/dynamic_fusion/sketch/gpu/GpuWorkloadContextImpl.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Arm Limited.
+ * Copyright (c) 2023-2024 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -64,9 +64,11 @@ public:
/** Set a new ID and register the user tensor info.
*
- * @param[in, out] tensor_info The tensor info to be registered.
+ * The ownership of the tensor info object will be transfered to this context object.
+ *
+ * @param[in] tensor_info The tensor info to be registered.
*/
- void register_user_tensor(ITensorInfo &tensor_info);
+ void register_user_tensor(std::unique_ptr<TensorInfo> &&tensor_info);
/** Create a virtual (see @ref MemoryType) tensor info and save it
*
diff --git a/src/dynamic_fusion/sketch/gpu/GpuWorkloadSketch.cpp b/src/dynamic_fusion/sketch/gpu/GpuWorkloadSketch.cpp
index 973f7c747f..357cb48a84 100644
--- a/src/dynamic_fusion/sketch/gpu/GpuWorkloadSketch.cpp
+++ b/src/dynamic_fusion/sketch/gpu/GpuWorkloadSketch.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022-2023 Arm Limited.
+ * Copyright (c) 2022-2024 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -31,22 +31,34 @@ namespace experimental
{
namespace dynamic_fusion
{
+
GpuWorkloadSketch::GpuWorkloadSketch(Context *context) : _impl{std::make_unique<Implementation>(context)}
{
}
+
GpuWorkloadSketch::~GpuWorkloadSketch()
{
}
+GpuWorkloadSketch::GpuWorkloadSketch(GpuWorkloadSketch &&) = default;
+
+GpuWorkloadSketch &GpuWorkloadSketch::operator=(GpuWorkloadSketch &&) = default;
+
const GpuWorkloadSketch::Context *GpuWorkloadSketch::gpu_context() const
{
return _impl->context();
}
+GpuWorkloadSketch::Context *GpuWorkloadSketch::gpu_context()
+{
+ return _impl->context();
+}
+
GpuWorkloadSketch::Implementation &GpuWorkloadSketch::implementation()
{
return *_impl;
}
+
const GpuWorkloadSketch::Implementation &GpuWorkloadSketch::implementation() const
{
return *_impl;
diff --git a/src/dynamic_fusion/sketch/gpu/GpuWorkloadSketchImpl.h b/src/dynamic_fusion/sketch/gpu/GpuWorkloadSketchImpl.h
index fea4fe9577..04e294eacc 100644
--- a/src/dynamic_fusion/sketch/gpu/GpuWorkloadSketchImpl.h
+++ b/src/dynamic_fusion/sketch/gpu/GpuWorkloadSketchImpl.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022-2023 Arm Limited.
+ * Copyright (c) 2022-2024 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -21,8 +21,8 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-#ifndef SRC_DYNAMIC_FUSION_SKETCH_GPU_GPUWORKLOADSKETCHIMPL
-#define SRC_DYNAMIC_FUSION_SKETCH_GPU_GPUWORKLOADSKETCHIMPL
+#ifndef ACL_SRC_DYNAMIC_FUSION_SKETCH_GPU_GPUWORKLOADSKETCHIMPL_H
+#define ACL_SRC_DYNAMIC_FUSION_SKETCH_GPU_GPUWORKLOADSKETCHIMPL_H
#include "arm_compute/dynamic_fusion/sketch/gpu/GpuWorkloadSketch.h"
#include "arm_compute/dynamic_fusion/sketch/MemoryDescriptor.h"
@@ -63,6 +63,11 @@ public:
{
return _context;
}
+ /** Get workload context */
+ Context *context()
+ {
+ return _context;
+ }
/** Get component graph */
const GpuKernelComponentGraph &component_graph() const
{
@@ -126,4 +131,4 @@ private:
} // namespace dynamic_fusion
} // namespace experimental
} // namespace arm_compute
-#endif /* SRC_DYNAMIC_FUSION_SKETCH_GPU_GPUWORKLOADSKETCHIMPL */
+#endif // ACL_SRC_DYNAMIC_FUSION_SKETCH_GPU_GPUWORKLOADSKETCHIMPL_H