aboutsummaryrefslogtreecommitdiff
path: root/arm_compute/core/CPP/CPPTypes.h
diff options
context:
space:
mode:
authorGeorgios Pinitas <georgios.pinitas@arm.com>2021-06-09 10:08:27 +0100
committerGeorgios Pinitas <georgios.pinitas@arm.com>2021-06-15 17:57:39 +0000
commit08302c17cd57356b35d46e17dc8d8f76672da5cf (patch)
tree3fed9bea3586bc140cc953e935f6ed55e8692dac /arm_compute/core/CPP/CPPTypes.h
parent450dfb1b4d719d60295bfae56f4c46dcaf044d72 (diff)
downloadComputeLibrary-08302c17cd57356b35d46e17dc8d8f76672da5cf.tar.gz
Add CPU discovery capabilities.
Resolves: COMPMID-4500 Signed-off-by: Georgios Pinitas <georgios.pinitas@arm.com> Change-Id: I008c51934ef813fb1f489b531288c4419e701955 Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/5799 Reviewed-by: Michele Di Giorgio <michele.digiorgio@arm.com> Tested-by: Arm Jenkins <bsgcomp@arm.com> Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'arm_compute/core/CPP/CPPTypes.h')
-rw-r--r--arm_compute/core/CPP/CPPTypes.h169
1 files changed, 27 insertions, 142 deletions
diff --git a/arm_compute/core/CPP/CPPTypes.h b/arm_compute/core/CPP/CPPTypes.h
index bc4464e7c9..11891937d1 100644
--- a/arm_compute/core/CPP/CPPTypes.h
+++ b/arm_compute/core/CPP/CPPTypes.h
@@ -26,103 +26,40 @@
#include "arm_compute/core/Error.h"
-#include <array>
-#include <string>
-#include <vector>
+#include <memory>
namespace arm_compute
{
-/** CPU models - we only need to detect CPUs we have
- * microarchitecture-specific code for.
+#define ARM_COMPUTE_CPU_MODEL_LIST \
+ X(GENERIC) \
+ X(GENERIC_FP16) \
+ X(GENERIC_FP16_DOT) \
+ X(A35) \
+ X(A53) \
+ X(A55r0) \
+ X(A55r1) \
+ X(A73) \
+ X(KLEIN) \
+ X(X1)
+
+/** CPU models types
*
- * Architecture features are detected via HWCAPs.
+ * @note We only need to detect CPUs we have microarchitecture-specific code for.
+ * @note Architecture features are detected via HWCAPs.
*/
enum class CPUModel
{
- GENERIC,
- GENERIC_FP16,
- GENERIC_FP16_DOT,
- A35,
- A53,
- A55r0,
- A55r1,
- KLEIN,
- X1,
- A73
+#define X(model) model,
+ ARM_COMPUTE_CPU_MODEL_LIST
+#undef X
};
-/** Global memory policy.
- * The functions in the runtime will use different strategies based on the policy currently set.
- *
- * MINIMIZE will try to reduce the amount allocated by the functions at the expense of performance normally.
- * NORMAL won't try to save any memory and will favor speed over memory consumption
- *
- */
-enum class MemoryPolicy
-{
- MINIMIZE,
- NORMAL
-};
-
-/** Convert a cpumodel value to a string
- *
- * @param val CPUModel value to be converted
- *
- * @return String representing the corresponding CPUModel.
- */
-inline std::string cpu_model_to_string(CPUModel val)
-{
- switch(val)
- {
- case CPUModel::GENERIC:
- {
- return std::string("GENERIC");
- }
- case CPUModel::KLEIN:
- {
- return std::string("KLEIN");
- }
- case CPUModel::GENERIC_FP16:
- {
- return std::string("GENERIC_FP16");
- }
- case CPUModel::GENERIC_FP16_DOT:
- {
- return std::string("GENERIC_FP16_DOT");
- }
- case CPUModel::A53:
- {
- return std::string("A53");
- }
- case CPUModel::A55r0:
- {
- return std::string("A55r0");
- }
- case CPUModel::A55r1:
- {
- return std::string("A55r1");
- }
- case CPUModel::X1:
- {
- return std::string("X1");
- }
- case CPUModel::A73:
- {
- return std::string("A73");
- }
- default:
- {
- ARM_COMPUTE_ERROR("Invalid CPUModel.");
- return std::string("GENERIC");
- }
- }
-}
-
class CPUInfo final
{
public:
/** Constructor */
CPUInfo();
+ ~CPUInfo();
/** Disable copy constructor and assignment operator to avoid copying the vector of CPUs each time
* CPUInfo is initialized once in the IScheduler and ThreadInfo will get a pointer to it.
@@ -137,6 +74,11 @@ public:
* @return true of the cpu supports fp16, false otherwise
*/
bool has_fp16() const;
+ /** Checks if the cpu model supports bf16.
+ *
+ * @return true of the cpu supports bf16, false otherwise
+ */
+ bool has_bf16() const;
/** Checks if the cpu model supports dot product.
*
* @return true of the cpu supports dot product, false otherwise
@@ -169,16 +111,6 @@ public:
* @return the size of the L1 cache
*/
unsigned int get_L2_cache_size() const;
- /** Set the L1 cache size
- *
- * @param[in] size the new size to be set.
- */
- void set_L1_cache_size(unsigned int size);
- /** Set the L2 cache size
- *
- * @param[in] size the new size to be set.
- */
- void set_L2_cache_size(unsigned int size);
/** Set fp16 support
*
* @param[in] fp16 whether the cpu supports fp16.
@@ -189,22 +121,6 @@ public:
* @param[in] dotprod whether the cpu supports dot product.
*/
void set_dotprod(const bool dotprod);
- /** Set sve support
- *
- * @param[in] sve whether the cpu supports sve.
- */
- void set_sve(const bool sve);
- /** Set the cpumodel for a given cpu core
- *
- * @param[in] cpuid the id of the core to be set.
- * @param[in] model the @ref CPUModel to be set.
- */
- void set_cpu_model(unsigned int cpuid, CPUModel model);
- /** Set max number of cpus
- *
- * @param[in] cpu_count the number of CPUs in the system.
- */
- void set_cpu_num(unsigned int cpu_count);
/** Return the maximum number of CPUs present
*
@@ -213,39 +129,8 @@ public:
unsigned int get_cpu_num() const;
private:
- std::vector<CPUModel> _percpu = {};
- bool _fp16 = false;
- bool _dotprod = false;
- bool _sve = false;
- unsigned int _L1_cache_size = 32768;
- unsigned int _L2_cache_size = 262144;
-};
-
-class MEMInfo final
-{
-public:
- MEMInfo();
-
- /** Return the total amount of RAM memory in the system expressed in KB.
- *
- * @return Total memory
- */
- size_t get_total_in_kb() const;
-
- static void set_policy(MemoryPolicy policy);
- static MemoryPolicy get_policy();
-
- /** Common memory sizes expressed in Kb to avoid having them
- * duplicated throughout the code.
- */
- static const size_t ONE_GB_IN_KB = { 1035842 };
- static const size_t TWO_GB_IN_KB = { ONE_GB_IN_KB * 2 };
-
-private:
- size_t _total;
- size_t _free;
- size_t _buffer;
- static MemoryPolicy _policy;
+ struct Impl;
+ std::unique_ptr<Impl> _impl;
};
/** Information about executing thread and CPU. */