aboutsummaryrefslogtreecommitdiff
path: root/arm_compute/core
diff options
context:
space:
mode:
authorMichele Di Giorgio <michele.digiorgio@arm.com>2018-04-25 11:58:07 +0100
committerAnthony Barbier <anthony.barbier@arm.com>2018-11-02 16:51:50 +0000
commitb8fc60fc9fe9ad6c48d9618fc65753fbe5813216 (patch)
treea9f271d73f573686ba29c724bb3a3cee4b6b203b /arm_compute/core
parent62385bce6baacfa194cff9e6be6d8eaa73bc3fab (diff)
downloadComputeLibrary-b8fc60fc9fe9ad6c48d9618fc65753fbe5813216.tar.gz
COMPMID-1086: Optimizing GCGEMM - Add helpers to get target GPU information
This patch moves some of the helper functions in CLHelpers.[h,cpp] to GPUTarget.[h,cpp] in order to make them avaialable to both CL and GLES backends. Change-Id: Ib89b05a2084b73eb643b32fac13b8367cc80b6a5 Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/128988 Tested-by: Jenkins <bsgcomp@arm.com> Reviewed-by: Anthony Barbier <anthony.barbier@arm.com>
Diffstat (limited to 'arm_compute/core')
-rw-r--r--arm_compute/core/CL/CLHelpers.h79
-rw-r--r--arm_compute/core/CL/ICLKernel.h1
-rw-r--r--arm_compute/core/GLES_COMPUTE/GCHelpers.h38
-rw-r--r--arm_compute/core/GLES_COMPUTE/IGCKernel.h20
-rw-r--r--arm_compute/core/GPUTarget.h54
-rw-r--r--arm_compute/core/Helpers.h27
6 files changed, 110 insertions, 109 deletions
diff --git a/arm_compute/core/CL/CLHelpers.h b/arm_compute/core/CL/CLHelpers.h
index fe2d833148..feb44ce04b 100644
--- a/arm_compute/core/CL/CLHelpers.h
+++ b/arm_compute/core/CL/CLHelpers.h
@@ -24,7 +24,9 @@
#ifndef __ARM_COMPUTE_CLHELPERS_H__
#define __ARM_COMPUTE_CLHELPERS_H__
+#include "arm_compute/core/CL/CLTypes.h"
#include "arm_compute/core/CL/OpenCL.h"
+#include "arm_compute/core/GPUTarget.h"
#include "arm_compute/core/Helpers.h"
#include "support/ToolchainSupport.h"
@@ -33,14 +35,6 @@
namespace arm_compute
{
enum class DataType;
-enum class GPUTarget;
-
-/** Enable bitwise operations on GPUTarget enumerations */
-template <>
-struct enable_bitwise_ops<arm_compute::GPUTarget>
-{
- static constexpr bool value = true; /**< Enabled. */
-};
/** Max vector width of an OpenCL vector */
static constexpr unsigned int max_cl_vector_width = 16;
@@ -69,48 +63,6 @@ std::string get_data_size_from_data_type(const DataType &dt);
*/
std::string get_underlying_cl_type_from_data_type(const DataType &dt);
-/** Translates a given gpu device target to string.
- *
- * @param[in] target Given gpu target.
- *
- * @return The string describing the target.
- */
-const std::string &string_from_target(GPUTarget target);
-
-/** Helper function to create and return a unique_ptr pointed to a CL kernel object
- * It also calls the kernel's configuration.
- *
- * @param[in] args All the arguments that need pass to kernel's configuration.
- *
- * @return A unique pointer pointed to a CL kernel object
- */
-template <typename Kernel, typename... T>
-std::unique_ptr<Kernel> create_configure_kernel(T &&... args)
-{
- std::unique_ptr<Kernel> k = arm_compute::support::cpp14::make_unique<Kernel>();
- k->configure(std::forward<T>(args)...);
- return k;
-}
-
-/** Helper function to create and return a unique_ptr pointed to a CL kernel object
- *
- * @return A unique pointer pointed to a CL kernel object
- */
-template <typename Kernel>
-std::unique_ptr<Kernel> create_kernel()
-{
- std::unique_ptr<Kernel> k = arm_compute::support::cpp14::make_unique<Kernel>();
- return k;
-}
-
-/** Helper function to get the GPU target from a device name
- *
- * @param[in] device_name A device name
- *
- * @return the GPU target
- */
-GPUTarget get_target_from_name(const std::string &device_name);
-
/** Helper function to get the GPU target from CL device
*
* @param[in] device A CL device
@@ -119,14 +71,6 @@ GPUTarget get_target_from_name(const std::string &device_name);
*/
GPUTarget get_target_from_device(cl::Device &device);
-/** Helper function to get the GPU arch
- *
- * @param[in] target GPU target
- *
- * @return the GPU target which shows the arch
- */
-GPUTarget get_arch_from_target(GPUTarget target);
-
/** Helper function to get the highest OpenCL version supported
*
* @param[in] device A CL device
@@ -158,24 +102,5 @@ bool fp16_supported(const cl::Device &device);
* @return True if the extension is supported
*/
bool arm_non_uniform_workgroup_supported(const cl::Device &device);
-/** Helper function to check whether a gpu target is equal to the provided targets
- *
- * @param[in] target_to_check gpu target to check
- * @param[in] target First target to compare against
- * @param[in] targets (Optional) Additional targets to compare with
- *
- * @return True if the target is equal with at least one of the targets.
- */
-template <typename... Args>
-bool gpu_target_is_in(GPUTarget target_to_check, GPUTarget target, Args... targets)
-{
- return (target_to_check == target) | gpu_target_is_in(target_to_check, targets...);
-}
-
-/** Variant of gpu_target_is_in for comparing two targets */
-inline bool gpu_target_is_in(GPUTarget target_to_check, GPUTarget target)
-{
- return target_to_check == target;
-}
}
#endif /* __ARM_COMPUTE_CLHELPERS_H__ */
diff --git a/arm_compute/core/CL/ICLKernel.h b/arm_compute/core/CL/ICLKernel.h
index 2d7081956b..9e970641c1 100644
--- a/arm_compute/core/CL/ICLKernel.h
+++ b/arm_compute/core/CL/ICLKernel.h
@@ -27,6 +27,7 @@
#include "arm_compute/core/CL/CLKernelLibrary.h"
#include "arm_compute/core/CL/CLTypes.h"
#include "arm_compute/core/CL/OpenCL.h"
+#include "arm_compute/core/GPUTarget.h"
#include "arm_compute/core/IKernel.h"
#include <string>
diff --git a/arm_compute/core/GLES_COMPUTE/GCHelpers.h b/arm_compute/core/GLES_COMPUTE/GCHelpers.h
index 8fbb5bbb2e..1422afe2b5 100644
--- a/arm_compute/core/GLES_COMPUTE/GCHelpers.h
+++ b/arm_compute/core/GLES_COMPUTE/GCHelpers.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -25,43 +25,19 @@
#define __ARM_COMPUTE_GCHELPERS_H__
#include "arm_compute/core/GLES_COMPUTE/OpenGLES.h"
+#include "arm_compute/core/GPUTarget.h"
#include "arm_compute/core/Helpers.h"
#include "support/ToolchainSupport.h"
-#include <string>
-
namespace arm_compute
{
-namespace gles_compute
-{
-/** Helper function to create and return a unique_ptr pointed to a GLES kernel object
- * It also calls the kernel's configuration.
- *
- * @param[in] args All the arguments that need pass to kernel's configuration.
- *
- * @return A unique pointer pointed to a GLES kernel object
- */
-template <typename Kernel, typename... T>
-std::unique_ptr<Kernel> create_configure_kernel(T &&... args)
-{
- std::unique_ptr<Kernel> k = arm_compute::support::cpp14::make_unique<Kernel>();
- k->configure(std::forward<T>(args)...);
- return k;
-}
+/** Max vector width of an GLES vector */
+static constexpr unsigned int max_gc_vector_width = 16;
-/** Helper function to create and return a unique_ptr pointed to a GLES kernel object
+/** Helper function to get the GPU target from GLES using GL_RENDERER enum
*
- * @return A unique pointer pointed to a GLES kernel object
+ * @return the GPU target
*/
-template <typename Kernel>
-std::unique_ptr<Kernel> create_kernel()
-{
- std::unique_ptr<Kernel> k = arm_compute::support::cpp14::make_unique<Kernel>();
- return k;
-}
-
-/** Max vector width of an GLES vector */
-static constexpr unsigned int max_gc_vector_width = 16;
-} // namespace gles_compute
+GPUTarget get_target_from_device();
} // namespace arm_compute
#endif /* __ARM_COMPUTE_GCHELPERS_H__ */
diff --git a/arm_compute/core/GLES_COMPUTE/IGCKernel.h b/arm_compute/core/GLES_COMPUTE/IGCKernel.h
index 3b987330da..79d579365c 100644
--- a/arm_compute/core/GLES_COMPUTE/IGCKernel.h
+++ b/arm_compute/core/GLES_COMPUTE/IGCKernel.h
@@ -26,6 +26,7 @@
#include "arm_compute/core/GLES_COMPUTE/GCKernelLibrary.h"
#include "arm_compute/core/GLES_COMPUTE/OpenGLES.h"
+#include "arm_compute/core/GPUTarget.h"
#include "arm_compute/core/IKernel.h"
@@ -105,6 +106,24 @@ public:
_lws_hint = lws_hint;
}
+ /** Set the targeted GPU architecture
+ *
+ * @param[in] target The targeted GPU architecture
+ */
+ void set_target(GPUTarget target)
+ {
+ _target = target;
+ }
+
+ /** Get the targeted GPU architecture
+ *
+ * @return The targeted GPU architecture.
+ */
+ GPUTarget get_target() const
+ {
+ return _target;
+ }
+
private:
/** Add the passed tensor's parameters to the object's kernel's arguments starting from the index idx.
*
@@ -126,6 +145,7 @@ private:
protected:
GCKernel _kernel; /**< GLES kernel to run */
gles::NDRange _lws_hint; /**< Local workgroup size hint for the GLES kernel */
+ GPUTarget _target; /**< The targeted GPU */
};
/** Add the kernel to the command queue with the given window.
diff --git a/arm_compute/core/GPUTarget.h b/arm_compute/core/GPUTarget.h
index 8a5ca80f49..2292a7834c 100644
--- a/arm_compute/core/GPUTarget.h
+++ b/arm_compute/core/GPUTarget.h
@@ -24,6 +24,10 @@
#ifndef __ARM_COMPUTE_GPUTARGET_H__
#define __ARM_COMPUTE_GPUTARGET_H__
+#include "arm_compute/core/Helpers.h"
+
+#include <string>
+
namespace arm_compute
{
/** Available GPU Targets */
@@ -45,5 +49,55 @@ enum class GPUTarget
TTRX = 0x250,
TBOX = 0x260
};
+
+/** Enable bitwise operations on GPUTarget enumerations */
+template <>
+struct enable_bitwise_ops<arm_compute::GPUTarget>
+{
+ static constexpr bool value = true; /**< Enabled. */
+};
+
+/** Translates a given gpu device target to string.
+ *
+ * @param[in] target Given gpu target.
+ *
+ * @return The string describing the target.
+ */
+const std::string &string_from_target(GPUTarget target);
+
+/** Helper function to get the GPU target from a device name
+ *
+ * @param[in] device_name A device name
+ *
+ * @return the GPU target
+ */
+GPUTarget get_target_from_name(const std::string &device_name);
+
+/** Helper function to get the GPU arch
+ *
+ * @param[in] target GPU target
+ *
+ * @return the GPU target which shows the arch
+ */
+GPUTarget get_arch_from_target(GPUTarget target);
+/** Helper function to check whether a gpu target is equal to the provided targets
+ *
+ * @param[in] target_to_check gpu target to check
+ * @param[in] target First target to compare against
+ * @param[in] targets (Optional) Additional targets to compare with
+ *
+ * @return True if the target is equal with at least one of the targets.
+ */
+template <typename... Args>
+bool gpu_target_is_in(GPUTarget target_to_check, GPUTarget target, Args... targets)
+{
+ return (target_to_check == target) | gpu_target_is_in(target_to_check, targets...);
+}
+
+/** Variant of gpu_target_is_in for comparing two targets */
+inline bool gpu_target_is_in(GPUTarget target_to_check, GPUTarget target)
+{
+ return target_to_check == target;
+}
} // namespace arm_compute
#endif /* __ARM_COMPUTE_GPUTARGET_H__ */
diff --git a/arm_compute/core/Helpers.h b/arm_compute/core/Helpers.h
index 21f3c38116..7d922ae187 100644
--- a/arm_compute/core/Helpers.h
+++ b/arm_compute/core/Helpers.h
@@ -24,7 +24,6 @@
#ifndef __ARM_COMPUTE_HELPERS_H__
#define __ARM_COMPUTE_HELPERS_H__
-#include "arm_compute/core/CL/CLTypes.h"
#include "arm_compute/core/Coordinates.h"
#include "arm_compute/core/Error.h"
#include "arm_compute/core/IAccessWindow.h"
@@ -64,6 +63,32 @@ typename std::enable_if<enable_bitwise_ops<T>::value, T>::type operator&(T lhs,
}
#endif /* DOXYGEN_SKIP_THIS */
+/** Helper function to create and return a unique_ptr pointed to a CL/GLES kernel object
+ * It also calls the kernel's configuration.
+ *
+ * @param[in] args All the arguments that need pass to kernel's configuration.
+ *
+ * @return A unique pointer pointed to a CL/GLES kernel object
+ */
+template <typename Kernel, typename... T>
+std::unique_ptr<Kernel> create_configure_kernel(T &&... args)
+{
+ std::unique_ptr<Kernel> k = arm_compute::support::cpp14::make_unique<Kernel>();
+ k->configure(std::forward<T>(args)...);
+ return k;
+}
+
+/** Helper function to create and return a unique_ptr pointed to a CL/GLES kernel object
+ *
+ * @return A unique pointer pointed to a Kernel kernel object
+ */
+template <typename Kernel>
+std::unique_ptr<Kernel> create_kernel()
+{
+ std::unique_ptr<Kernel> k = arm_compute::support::cpp14::make_unique<Kernel>();
+ return k;
+}
+
namespace traits
{
/** Check if a type T is contained in a tuple Tuple of types */