From 20da5e33a86eda746c17cbdb7bfd295d9f92f074 Mon Sep 17 00:00:00 2001 From: Cedric Nugteren Date: Wed, 6 Sep 2017 21:50:42 +0200 Subject: Split the database files over multiple directories and files; first step towards separate compilation --- src/database/database.cpp | 62 +++++++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 29 deletions(-) (limited to 'src/database/database.cpp') 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::database = std::vector{ +const std::vector Database::database = std::vector{ 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::database = std::vector Database::apple_cpu_fallback = std::vector{ +const std::vector Database::apple_cpu_fallback = std::vector{ 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 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 &overlay): - parameters_(std::make_shared()) { + const Precision precision, const std::vector &overlay): + parameters_(std::make_shared()) { // 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>{overlay, database}; + auto databases = std::list>{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 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 &this_database) const { + const std::vector &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 &vendors, + const std::vector &vendors, const std::vector ¶meter_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 &devices, +database::Parameters Database::SearchDevice(const std::string &target_device, + const std::vector &devices, const std::vector ¶meter_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(); } // ================================================================================================= -- cgit v1.2.3