summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/clpp11.hpp1
-rw-r--r--src/database/database.cpp42
-rw-r--r--src/database/database.hpp1
-rw-r--r--src/database/database_structure.hpp18
-rw-r--r--src/tuning/tuning.hpp16
-rw-r--r--src/utilities/device_mapping.hpp (renamed from src/database/device_mapping.hpp)12
-rw-r--r--src/utilities/utilities.cpp54
-rw-r--r--src/utilities/utilities.hpp8
8 files changed, 102 insertions, 50 deletions
diff --git a/src/clpp11.hpp b/src/clpp11.hpp
index 9d6929a7..86a84815 100644
--- a/src/clpp11.hpp
+++ b/src/clpp11.hpp
@@ -167,6 +167,7 @@ class Platform {
// Methods to retrieve platform information
std::string Name() const { return GetInfoString(CL_PLATFORM_NAME); }
std::string Vendor() const { return GetInfoString(CL_PLATFORM_VENDOR); }
+ std::string Version() const { return GetInfoString(CL_PLATFORM_VERSION); }
// Returns the number of devices on this platform
size_t NumDevices() const {
diff --git a/src/database/database.cpp b/src/database/database.cpp
index d2add8c9..2d78e65c 100644
--- a/src/database/database.cpp
+++ b/src/database/database.cpp
@@ -16,6 +16,7 @@
#include "utilities/utilities.hpp"
#include "database/database.hpp"
+
#include "database/kernels/xaxpy/xaxpy.hpp"
#include "database/kernels/xdot/xdot.hpp"
#include "database/kernels/xgemv/xgemv.hpp"
@@ -28,6 +29,7 @@
#include "database/kernels/pad/pad.hpp"
#include "database/kernels/transpose/transpose.hpp"
#include "database/kernels/padtranspose/padtranspose.hpp"
+
#include "database/kernels/xtrsv.hpp"
#include "database/kernels/invert.hpp"
#include "database/apple_cpu_fallback.hpp"
@@ -77,37 +79,17 @@ Database::Database(const Device &device, const std::string &kernel_name,
const Precision precision, const std::vector<database::DatabaseEntry> &overlay):
parameters_(std::make_shared<database::Parameters>()) {
- // Finds top-level information (vendor and type)
- auto device_type = device.Type();
- auto device_vendor = device.Vendor();
- for (auto &find_and_replace : database::kVendorNames) { // replacing to common names
- if (device_vendor == find_and_replace.first) { device_vendor = find_and_replace.second; }
- }
+ // Finds device information
+ const auto device_type = GetDeviceType(device);
+ const auto device_vendor = GetDeviceVendor(device);
+ const auto device_architecture = GetDeviceArchitecture(device);
+ const auto device_name = GetDeviceName(device);
- // Finds mid-level information (architecture)
- 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 : database::kArchitectureNames) { // replacing to common names
- if (device_architecture == find_and_replace.first) { device_architecture = find_and_replace.second; }
- }
-
- // Finds low-level information (device name)
- auto device_name = std::string{""};
- if (device.HasExtension(kKhronosAttributesAMD)) {
- device_name = device.AMDBoardName();
- }
- else {
- device_name = device.Name();
- }
- for (auto &find_and_replace : database::kDeviceNames) { // replacing to common names
- if (device_name == find_and_replace.first) { device_name = find_and_replace.second; }
- }
+ // Prints the obtained information in verbose mode
+ #ifdef VERBOSE
+ printf("[DEBUG] Device type '%s'; vendor '%s'\n", device_type.c_str(), device_vendor.c_str());
+ printf("[DEBUG] Device name '%s'; architecture '%s'\n", device_name.c_str(), device_architecture.c_str());
+ #endif
// Sets the databases to search through
const auto databases = std::list<std::vector<database::DatabaseEntry>>{overlay, database};
diff --git a/src/database/database.hpp b/src/database/database.hpp
index e7a79cf9..7efcb7c4 100644
--- a/src/database/database.hpp
+++ b/src/database/database.hpp
@@ -23,7 +23,6 @@
#include "utilities/utilities.hpp"
#include "database/database_structure.hpp"
-#include "database/device_mapping.hpp"
namespace clblast {
// =================================================================================================
diff --git a/src/database/database_structure.hpp b/src/database/database_structure.hpp
index 4d7f967d..d9ee95fb 100644
--- a/src/database/database_structure.hpp
+++ b/src/database/database_structure.hpp
@@ -35,19 +35,19 @@ using Parameters = std::unordered_map<std::string, size_t>;
// Structures for content inside the database
struct DatabaseDevice {
- std::string name;
- std::vector<size_t> parameters; // parameter values
+ const std::string name;
+ const std::vector<size_t> parameters; // parameter values
};
struct DatabaseVendor {
- std::string type;
- std::string name;
- std::vector<DatabaseDevice> devices;
+ const std::string type;
+ const std::string name;
+ const std::vector<DatabaseDevice> devices;
};
struct DatabaseEntry {
- std::string kernel;
- Precision precision;
- std::vector<std::string> parameter_names;
- std::vector<DatabaseVendor> vendors;
+ const std::string kernel;
+ const Precision precision;
+ const std::vector<std::string> parameter_names;
+ const std::vector<DatabaseVendor> vendors;
};
// =================================================================================================
diff --git a/src/tuning/tuning.hpp b/src/tuning/tuning.hpp
index 9bb5836e..1f9b6f4f 100644
--- a/src/tuning/tuning.hpp
+++ b/src/tuning/tuning.hpp
@@ -66,7 +66,11 @@ void Tuner(int argc, char* argv[]) {
auto isAMD = false;
auto isARM = false;
auto isGPU = false;
- {
+ auto device_type = std::string{};
+ auto device_vendor = std::string{};
+ auto device_architecture = std::string{};
+ auto device_name = std::string{};
+ { // In a block such that the platform and the device are destroyed before initializing the tuner
const auto platform = Platform(args.platform_id);
const auto device = Device(platform, args.device_id);
if (!PrecisionSupported<T>(device)) {
@@ -76,6 +80,10 @@ void Tuner(int argc, char* argv[]) {
isAMD = device.IsAMD();
isARM = device.IsARM();
isGPU = device.IsGPU();
+ device_type = GetDeviceType(device);
+ device_vendor = GetDeviceVendor(device);
+ device_architecture = GetDeviceArchitecture(device);
+ device_name = GetDeviceName(device);
}
// Creates input buffers with random data
@@ -159,7 +167,11 @@ void Tuner(int argc, char* argv[]) {
auto precision_string = std::to_string(static_cast<size_t>(args.precision));
auto metadata = std::vector<std::pair<std::string,std::string>>{
{"kernel_family", C::KernelFamily()},
- {"precision", precision_string}
+ {"precision", precision_string},
+ {"clblast_device_type", device_type},
+ {"clblast_device_vendor", device_vendor},
+ {"clblast_device_architecture", device_architecture},
+ {"clblast_device_name", device_name}
};
for (auto &o: C::GetOptions()) {
if (o == kArgM) { metadata.push_back({"arg_m", std::to_string(args.m)}); }
diff --git a/src/database/device_mapping.hpp b/src/utilities/device_mapping.hpp
index 9fb5d81d..7fdc04a0 100644
--- a/src/database/device_mapping.hpp
+++ b/src/utilities/device_mapping.hpp
@@ -12,15 +12,15 @@
//
// =================================================================================================
-#ifndef CLBLAST_DATABASE_DEVICE_MAPPING_H_
-#define CLBLAST_DATABASE_DEVICE_MAPPING_H_
+#ifndef CLBLAST_UTILITIES_DEVICE_MAPPING_H_
+#define CLBLAST_UTILITIES_DEVICE_MAPPING_H_
#include <string>
#include <unordered_map>
namespace clblast {
-// A special namespace to hold all the global constant variables (including the device mapping)
-namespace database {
+// A special namespace to hold all the global constant variables
+namespace device_mapping {
// =================================================================================================
@@ -44,8 +44,8 @@ const std::unordered_map<std::string, std::string> kDeviceNames {
};
// =================================================================================================
-} // namespace database
+} // namespace device_mapping
} // namespace clblast
-// CLBLAST_DATABASE_DEVICE_MAPPING_H_
+// CLBLAST_UTILITIES_DEVICE_MAPPING_H_
#endif
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
diff --git a/src/utilities/utilities.hpp b/src/utilities/utilities.hpp
index 3ffb3be5..d912a377 100644
--- a/src/utilities/utilities.hpp
+++ b/src/utilities/utilities.hpp
@@ -308,6 +308,14 @@ template <typename T>
bool PrecisionSupported(const Device &device);
// =================================================================================================
+
+// Device information in a specific CLBlast form
+std::string GetDeviceType(const Device& device);
+std::string GetDeviceVendor(const Device& device);
+std::string GetDeviceArchitecture(const Device& device);
+std::string GetDeviceName(const Device& device);
+
+// =================================================================================================
} // namespace clblast
// CLBLAST_UTILITIES_H_