summaryrefslogtreecommitdiff
path: root/src/database/database.cpp
diff options
context:
space:
mode:
authorCedric Nugteren <web@cedricnugteren.nl>2017-09-06 21:50:42 +0200
committerCedric Nugteren <web@cedricnugteren.nl>2017-09-06 21:50:42 +0200
commit20da5e33a86eda746c17cbdb7bfd295d9f92f074 (patch)
treed35e7091ddc8bbd81d581c4bd49468c6329111fd /src/database/database.cpp
parentbb947890dec90712c92028c20234eafd48e6fa3e (diff)
Split the database files over multiple directories and files; first step towards separate compilation
Diffstat (limited to 'src/database/database.cpp')
-rw-r--r--src/database/database.cpp62
1 files changed, 33 insertions, 29 deletions
diff --git a/src/database/database.cpp b/src/database/database.cpp
index 79c2ea03..c0eeaa2f 100644
--- a/src/database/database.cpp
+++ b/src/database/database.cpp
@@ -16,19 +16,19 @@
#include "utilities/utilities.hpp"
#include "database/database.hpp"
-#include "database/kernels/xaxpy.hpp"
-#include "database/kernels/xdot.hpp"
-#include "database/kernels/xgemv.hpp"
-#include "database/kernels/xgemv_fast.hpp"
-#include "database/kernels/xgemv_fast_rot.hpp"
-#include "database/kernels/xger.hpp"
+#include "database/kernels/xaxpy/xaxpy.hpp"
+#include "database/kernels/xdot/xdot.hpp"
+#include "database/kernels/xgemv/xgemv.hpp"
+#include "database/kernels/xgemv_fast/xgemv_fast.hpp"
+#include "database/kernels/xgemv_fast_rot/xgemv_fast_rot.hpp"
+#include "database/kernels/xger/xger.hpp"
+#include "database/kernels/xgemm/xgemm.hpp"
+#include "database/kernels/xgemm_direct/xgemm_direct.hpp"
+#include "database/kernels/copy/copy.hpp"
+#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/xgemm.hpp"
-#include "database/kernels/xgemm_direct.hpp"
-#include "database/kernels/copy.hpp"
-#include "database/kernels/pad.hpp"
-#include "database/kernels/transpose.hpp"
-#include "database/kernels/padtranspose.hpp"
#include "database/kernels/invert.hpp"
#include "database/apple_cpu_fallback.hpp"
#include "database/kernel_selection.hpp"
@@ -36,8 +36,12 @@
namespace clblast {
// =================================================================================================
+namespace database {
+extern const DatabaseEntry CopyHalf;
+}
+
// Initializes the databases
-const std::vector<Database::DatabaseEntry> Database::database = std::vector<Database::DatabaseEntry>{
+const std::vector<database::DatabaseEntry> Database::database = std::vector<database::DatabaseEntry>{
database::XaxpyHalf, database::XaxpySingle, database::XaxpyDouble, database::XaxpyComplexSingle, database::XaxpyComplexDouble,
database::XdotHalf, database::XdotSingle, database::XdotDouble, database::XdotComplexSingle, database::XdotComplexDouble,
database::XgemvHalf, database::XgemvSingle, database::XgemvDouble, database::XgemvComplexSingle, database::XgemvComplexDouble,
@@ -54,7 +58,7 @@ const std::vector<Database::DatabaseEntry> Database::database = std::vector<Data
database::InvertHalf, database::InvertSingle, database::InvertDouble, database::InvertComplexSingle, database::InvertComplexDouble,
database::KernelSelectionHalf, database::KernelSelectionSingle, database::KernelSelectionDouble, database::KernelSelectionComplexSingle, database::KernelSelectionComplexDouble
};
-const std::vector<Database::DatabaseEntry> Database::apple_cpu_fallback = std::vector<Database::DatabaseEntry>{
+const std::vector<database::DatabaseEntry> Database::apple_cpu_fallback = std::vector<database::DatabaseEntry>{
database::XaxpyApple, database::XdotApple,
database::XgemvApple, database::XgemvFastApple, database::XgemvFastRotApple, database::XgerApple, database::XtrsvApple,
database::XgemmApple, database::XgemmDirectApple,
@@ -78,8 +82,8 @@ const std::unordered_map<std::string, std::string> Database::kVendorNames{
// Constructor, computing device properties and populating the parameter-vector from the database.
// This takes an optional overlay database in case of custom tuning or custom kernels.
Database::Database(const Device &device, const std::string &kernel_name,
- const Precision precision, const std::vector<DatabaseEntry> &overlay):
- parameters_(std::make_shared<Parameters>()) {
+ const Precision precision, const std::vector<database::DatabaseEntry> &overlay):
+ parameters_(std::make_shared<database::Parameters>()) {
// Finds information of the current device
auto device_type = device.Type();
@@ -94,7 +98,7 @@ Database::Database(const Device &device, const std::string &kernel_name,
}
// Sets the databases to search through
- auto databases = std::list<std::vector<DatabaseEntry>>{overlay, database};
+ auto databases = std::list<std::vector<database::DatabaseEntry>>{overlay, database};
// Special case: modifies the database if the device is a CPU with Apple OpenCL
#if defined(__APPLE__) || defined(__MACOSX)
@@ -108,7 +112,7 @@ Database::Database(const Device &device, const std::string &kernel_name,
#endif
// Searches potentially multiple databases
- auto search_result = Parameters();
+ auto search_result = database::Parameters();
for (auto &db: databases) {
search_result = Search(kernel_name, device_type, device_vendor, device_name, precision, db);
if (search_result.size() != 0) {
@@ -143,12 +147,12 @@ std::vector<std::string> Database::GetParameterNames() const {
// =================================================================================================
// Searches a particular database for the right kernel and precision
-Database::Parameters Database::Search(const std::string &this_kernel,
+database::Parameters Database::Search(const std::string &this_kernel,
const std::string &this_type,
const std::string &this_vendor,
const std::string &this_device,
const Precision this_precision,
- const std::vector<DatabaseEntry> &this_database) const {
+ const std::vector<database::DatabaseEntry> &this_database) const {
// Selects the right kernel
for (auto &db: this_database) {
@@ -165,13 +169,13 @@ Database::Parameters Database::Search(const std::string &this_kernel,
}
// If we reached this point, the entry was not found in this database
- return Parameters();
+ return database::Parameters();
}
-Database::Parameters Database::SearchVendorAndType(const std::string &target_vendor,
+database::Parameters Database::SearchVendorAndType(const std::string &target_vendor,
const std::string &target_type,
const std::string &this_device,
- const std::vector<DatabaseVendor> &vendors,
+ const std::vector<database::DatabaseVendor> &vendors,
const std::vector<std::string> &parameter_names) const {
for (auto &vendor: vendors) {
if ((vendor.name == target_vendor) && (vendor.type == target_type)) {
@@ -182,25 +186,25 @@ Database::Parameters Database::SearchVendorAndType(const std::string &target_ven
return SearchDevice("default", vendor.devices, parameter_names);
}
}
- return Parameters();
+ return database::Parameters();
}
-Database::Parameters Database::SearchDevice(const std::string &target_device,
- const std::vector<DatabaseDevice> &devices,
+database::Parameters Database::SearchDevice(const std::string &target_device,
+ const std::vector<database::DatabaseDevice> &devices,
const std::vector<std::string> &parameter_names) const {
for (auto &device: devices) {
if (device.name == target_device) {
// Sets the parameters accordingly
- auto parameters = Parameters();
- if (parameter_names.size() != device.parameters.size()) { return Parameters(); } // ERROR
+ auto parameters = database::Parameters();
+ if (parameter_names.size() != device.parameters.size()) { return database::Parameters(); } // ERROR
for (auto i = size_t{0}; i < parameter_names.size(); ++i) {
parameters[parameter_names[i]] = device.parameters[i];
}
return parameters;
}
}
- return Parameters();
+ return database::Parameters();
}
// =================================================================================================