summaryrefslogtreecommitdiff
path: root/src/utilities/utilities.cpp
diff options
context:
space:
mode:
authorCedric Nugteren <web@cedricnugteren.nl>2017-09-10 16:34:54 +0200
committerCedric Nugteren <web@cedricnugteren.nl>2017-09-10 16:34:54 +0200
commit76382ff6c1c882063bab761382438a24af4a87b5 (patch)
treea6c1feaf32c73eea91611b4564db61276cf2dd0d /src/utilities/utilities.cpp
parent91ea7fcde2ac274db50b35fbbdb7deb89fb65b51 (diff)
Added the new vendor-architecture-name hierarchy to the tuners as well
Diffstat (limited to 'src/utilities/utilities.cpp')
-rw-r--r--src/utilities/utilities.cpp54
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