diff options
Diffstat (limited to 'src/utilities/utilities.cpp')
-rw-r--r-- | src/utilities/utilities.cpp | 54 |
1 files changed, 52 insertions, 2 deletions
diff --git a/src/utilities/utilities.cpp b/src/utilities/utilities.cpp index 4ff419a5..4b8d5a09 100644 --- a/src/utilities/utilities.cpp +++ b/src/utilities/utilities.cpp @@ -11,8 +11,6 @@ // // ================================================================================================= -#include "utilities/utilities.hpp" - #include <string> #include <vector> #include <chrono> @@ -20,6 +18,10 @@ #include <iomanip> #include <cmath> +#include "utilities/utilities.hpp" + +#include "utilities/device_mapping.hpp" + namespace clblast { // ================================================================================================= @@ -401,4 +403,52 @@ template <> bool PrecisionSupported<half>(const Device &device) { } // ================================================================================================= + +// High-level info +std::string GetDeviceType(const Device& device) { + return device.Type(); +} +std::string GetDeviceVendor(const Device& device) { + auto device_vendor = device.Vendor(); + + for (auto &find_and_replace : device_mapping::kVendorNames) { // replacing to common names + if (device_vendor == find_and_replace.first) { device_vendor = find_and_replace.second; } + } + return device_vendor; +} + +// Mid-level info +std::string GetDeviceArchitecture(const Device& device) { + auto device_architecture = std::string{""}; + if (device.HasExtension(kKhronosAttributesNVIDIA)) { + device_architecture = device.NVIDIAComputeCapability(); + } + else if (device.HasExtension(kKhronosAttributesAMD)) { + device_architecture = device.Name(); // Name is architecture for AMD APP and AMD ROCm + } + // Note: no else - 'device_architecture' might be the empty string + + for (auto &find_and_replace : device_mapping::kArchitectureNames) { // replacing to common names + if (device_architecture == find_and_replace.first) { device_architecture = find_and_replace.second; } + } + return device_architecture; +} + +// Lowest-level +std::string GetDeviceName(const Device& device) { + auto device_name = std::string{""}; + if (device.HasExtension(kKhronosAttributesAMD)) { + device_name = device.AMDBoardName(); + } + else { + device_name = device.Name(); + } + + for (auto &find_and_replace : device_mapping::kDeviceNames) { // replacing to common names + if (device_name == find_and_replace.first) { device_name = find_and_replace.second; } + } + return device_name; +} + +// ================================================================================================= } // namespace clblast |