aboutsummaryrefslogtreecommitdiff
path: root/src/core/experimental
diff options
context:
space:
mode:
authorSiCong Li <sicong.li@arm.com>2022-04-07 17:41:51 +0100
committerSiCong Li <sicong.li@arm.com>2022-04-14 12:59:27 +0000
commit0a486cf66c70b4bd9b0ea8ba9dc5b42f52ed16c3 (patch)
tree88eea0a182ea6dd8ec45b6aca7843d98cfd73764 /src/core/experimental
parentca364dfd87cab4cdb9179b68c42f10ff16e55002 (diff)
downloadComputeLibrary-0a486cf66c70b4bd9b0ea8ba9dc5b42f52ed16c3.tar.gz
Enable dynamic cl tuning for dynamically fused kernels
* Add new tune_kernel_dynamic interface * Add generate_config_id Resolves: COMPMID-5154 Signed-off-by: SiCong Li <sicong.li@arm.com> Change-Id: I39870e59fceda875487970061ceb2048995c5a45 Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/7400 Comments-Addressed: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: Giorgio Arena <giorgio.arena@arm.com> Tested-by: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'src/core/experimental')
-rw-r--r--src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/Common.h23
-rw-r--r--src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/components/ClElementwiseAddKernelComponent.cpp14
-rw-r--r--src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/components/ClElementwiseAddKernelComponent.h1
-rw-r--r--src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/components/ClGemmNativeKernelComponent.cpp26
-rw-r--r--src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/components/ClGemmNativeKernelComponent.h1
5 files changed, 64 insertions, 1 deletions
diff --git a/src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/Common.h b/src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/Common.h
index e24c742fd7..aa27572746 100644
--- a/src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/Common.h
+++ b/src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/Common.h
@@ -316,6 +316,15 @@ public:
return "";
}
+ /** Generate config id of the component
+ *
+ * @return std::string
+ */
+ virtual std::string generate_config_id() const
+ {
+ return "";
+ }
+
virtual CLBuildOptions generate_build_options() const
{
return CLBuildOptions{};
@@ -537,9 +546,21 @@ public:
return code;
}
+ /** Generate config id of the entire kernel
+ *
+ * Format: kernel_name--comp0_config_id--comp1_config_id--...
+ *
+ * @return std::string
+ */
std::string build_config_id() const
{
- return "";
+ std::string config_id = build_kernel_name();
+ traverse([&](std::stack<ComponentID> stack)
+ {
+ config_id += "--" + _components.find(stack.top())->second->generate_config_id() + "--";
+ });
+
+ return config_id;
}
CLBuildOptions build_options() const
diff --git a/src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/components/ClElementwiseAddKernelComponent.cpp b/src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/components/ClElementwiseAddKernelComponent.cpp
index 34b735edc9..84e4003d5d 100644
--- a/src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/components/ClElementwiseAddKernelComponent.cpp
+++ b/src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/components/ClElementwiseAddKernelComponent.cpp
@@ -128,6 +128,20 @@ CLBuildOptions ClElementwiseAddKernelComponent::generate_build_options() const
return build_opts;
}
+std::string ClElementwiseAddKernelComponent::generate_config_id() const
+{
+ auto t_dst_info = _blueprint->impl().get_kernel_argument_info(_blueprint->impl().get_dst_id());
+ std::string config_id{};
+ config_id += lower_string(string_from_data_type(t_dst_info->data_type()));
+ config_id += "_";
+ config_id += support::cpp11::to_string(t_dst_info->dimension(0));
+ config_id += "_";
+ config_id += support::cpp11::to_string(t_dst_info->dimension(1));
+ config_id += "_";
+ config_id += lower_string(string_from_data_layout(t_dst_info->data_layout()));
+ return config_id;
+}
+
ClElementwiseAddKernelComponent::TagLUT ClElementwiseAddKernelComponent::allocate_vars(SharedVarTable &vtable) const
{
// Determine which argument is the accumulator
diff --git a/src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/components/ClElementwiseAddKernelComponent.h b/src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/components/ClElementwiseAddKernelComponent.h
index c259811a98..35c9538b8d 100644
--- a/src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/components/ClElementwiseAddKernelComponent.h
+++ b/src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/components/ClElementwiseAddKernelComponent.h
@@ -47,6 +47,7 @@ public:
std::string get_component_code() const override;
Window get_window() const override;
CLBuildOptions generate_build_options() const override;
+ std::string generate_config_id() const override;
virtual std::vector<Link> get_links() const override
{
diff --git a/src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/components/ClGemmNativeKernelComponent.cpp b/src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/components/ClGemmNativeKernelComponent.cpp
index 7d23128276..45b81b424d 100644
--- a/src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/components/ClGemmNativeKernelComponent.cpp
+++ b/src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/components/ClGemmNativeKernelComponent.cpp
@@ -470,6 +470,32 @@ CLBuildOptions ClGemmNativeKernelComponent::generate_build_options() const
return build_opts;
}
+std::string ClGemmNativeKernelComponent::generate_config_id() const
+{
+ auto t_dst_info = _blueprint->impl().get_kernel_argument_info(_blueprint->impl().get_dst_id());
+ std::string config_id{};
+ config_id += (_bias.is_empty() ? "add_bias_" : "");
+ config_id += (_desc.broadcast_bias ? "broadcast_bias_" : "");
+ config_id += (_desc.reinterpret_input_as_3d ? "3di_" : "");
+ config_id += (_desc.depth_output_gemm3d > 0 ? "3do_" : "");
+ config_id += lower_string(string_from_data_type(t_dst_info->data_type()));
+ config_id += "_";
+ config_id += support::cpp11::to_string(t_dst_info->dimension(1));
+ config_id += "_";
+ config_id += support::cpp11::to_string(t_dst_info->dimension(0));
+ config_id += "_";
+ config_id += support::cpp11::to_string(_desc.k);
+ config_id += "_";
+ config_id += support::cpp11::to_string(t_dst_info->dimension(2));
+ config_id += "_";
+ config_id += support::cpp11::to_string(_desc.lhs_info.m0);
+ config_id += "_";
+ config_id += support::cpp11::to_string(_desc.rhs_info.n0);
+ config_id += "_";
+ config_id += support::cpp11::to_string(_desc.rhs_info.k0);
+ return config_id;
+}
+
ClGemmNativeKernelComponent::TagLUT ClGemmNativeKernelComponent::allocate_vars(SharedVarTable &vtable) const
{
TagLUT lut{};
diff --git a/src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/components/ClGemmNativeKernelComponent.h b/src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/components/ClGemmNativeKernelComponent.h
index 1a1e3e3ce6..b282856b56 100644
--- a/src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/components/ClGemmNativeKernelComponent.h
+++ b/src/core/experimental/dynamic_fusion/ClKernelBuildingImpl/components/ClGemmNativeKernelComponent.h
@@ -53,6 +53,7 @@ public:
Window get_window() const override;
ClKernelArgList get_args();
CLBuildOptions generate_build_options() const override;
+ std::string generate_config_id() const override;
virtual std::vector<Link> get_links() const override
{