From 4e0ac6fd6bc647e811cc12c1e3d392a6151ec576 Mon Sep 17 00:00:00 2001 From: Pablo Tello Date: Mon, 1 Oct 2018 14:31:11 +0100 Subject: COMPMID-162: output cpus list and capabilities in validation suite. Change-Id: I6f71f2da851454e8fbbdfc9223592dea9ad03bac Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/151014 Tested-by: bsgcomp Reviewed-by: Giuseppe Rossini Reviewed-by: Isabella Gottardi --- arm_compute/core/CPP/CPPTypes.h | 45 +++++++++++++++++++++++++++++++++++++++++ tests/framework/Framework.cpp | 14 +++++++++++++ tests/framework/Framework.h | 6 ++++++ 3 files changed, 65 insertions(+) diff --git a/arm_compute/core/CPP/CPPTypes.h b/arm_compute/core/CPP/CPPTypes.h index 3ab1316369..9ffb4840a3 100644 --- a/arm_compute/core/CPP/CPPTypes.h +++ b/arm_compute/core/CPP/CPPTypes.h @@ -24,6 +24,9 @@ #ifndef __ARM_COMPUTE_CPP_TYPES_H__ #define __ARM_COMPUTE_CPP_TYPES_H__ +#include "arm_compute/core/Error.h" + +#include #include namespace arm_compute @@ -43,6 +46,48 @@ enum class CPUModel A55r1 }; +/** 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::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"); + } + default: + { + ARM_COMPUTE_ERROR("Invalid CPUModel."); + return std::string("GENERIC"); + } + } +} + class CPUInfo final { public: diff --git a/tests/framework/Framework.cpp b/tests/framework/Framework.cpp index eea7745230..1d889f3728 100644 --- a/tests/framework/Framework.cpp +++ b/tests/framework/Framework.cpp @@ -23,6 +23,7 @@ */ #include "Framework.h" +#include "arm_compute/runtime/Scheduler.h" #include "support/ToolchainSupport.h" #ifdef ARM_COMPUTE_CL #include "arm_compute/runtime/CL/CLScheduler.h" @@ -41,6 +42,7 @@ namespace framework { Framework::Framework() { + print_cpu_info(std::cout); _available_instruments.emplace(std::pair(InstrumentType::WALL_CLOCK_TIMER, ScaleFactor::NONE), Instrument::make_instrument); _available_instruments.emplace(std::pair(InstrumentType::WALL_CLOCK_TIMER, ScaleFactor::TIME_MS), Instrument::make_instrument); _available_instruments.emplace(std::pair(InstrumentType::WALL_CLOCK_TIMER, ScaleFactor::TIME_S), Instrument::make_instrument); @@ -140,6 +142,18 @@ bool Framework::has_test_info() const return !_test_info.empty(); } +void Framework::print_cpu_info(std::ostream &os) const +{ + const arm_compute::CPUInfo &cpu_info = Scheduler::get().cpu_info(); + const unsigned int num_cpus = cpu_info.get_cpu_num(); + os << "cpu_has_fp16 : " << cpu_info.has_fp16() << " cpu_has_dotprod : " << cpu_info.has_dotprod() << std::endl; + for(unsigned int j = 0; j < num_cpus; ++j) + { + const CPUModel model = cpu_info.get_cpu_model(j); + os << "CPU" << j << " : " << cpu_model_to_string(model) << std::endl; + } +} + void Framework::print_test_info(std::ostream &os) const { if(!_test_info.empty()) diff --git a/tests/framework/Framework.h b/tests/framework/Framework.h index 65ffc0a818..4a26b66bcb 100644 --- a/tests/framework/Framework.h +++ b/tests/framework/Framework.h @@ -161,6 +161,12 @@ public: */ bool has_test_info() const; + /** Print CPU info + * + * @param[out] os Output stream. + */ + void print_cpu_info(std::ostream &os) const; + /** Print test info. * * @param[out] os Output stream. -- cgit v1.2.1