diff options
author | Ivan Shapovalov <intelfx@intelfx.name> | 2016-11-27 14:17:44 +0300 |
---|---|---|
committer | Ivan Shapovalov <intelfx@intelfx.name> | 2017-01-24 11:56:15 +0300 |
commit | 6dc18c1c57d5fef75e7682b1fdb8268ec3786908 (patch) | |
tree | a14dab661b7d7088263e529c1722033a8db7c95a /src/database | |
parent | 5bcd92f2974d94e8add31816d3b9d48a42289500 (diff) |
Database: ref-count the internal map for caching
Diffstat (limited to 'src/database')
-rw-r--r-- | src/database/database.cpp | 6 | ||||
-rw-r--r-- | src/database/database.hpp | 6 |
2 files changed, 7 insertions, 5 deletions
diff --git a/src/database/database.cpp b/src/database/database.cpp index cf548d46..9b4e8119 100644 --- a/src/database/database.cpp +++ b/src/database/database.cpp @@ -65,7 +65,7 @@ const std::unordered_map<std::string, std::string> Database::kVendorNames{ // This takes an optional overlay database in case of custom tuning or custom kernels. Database::Database(const Queue &queue, const std::vector<std::string> &kernels, const Precision precision, const std::vector<const DatabaseEntry*> &overlay): - parameters_{} { + parameters_(std::make_shared<Parameters>()) { // Finds information of the current device auto device = queue.GetDevice(); @@ -87,7 +87,7 @@ Database::Database(const Queue &queue, const std::vector<std::string> &kernels, for (auto &db: { database, overlay}) { search_result = Search(kernel, device_type, device_vendor, device_name, precision, db); if (search_result) { - parameters_.insert(search_result->begin(), search_result->end()); + parameters_->insert(search_result->begin(), search_result->end()); break; } } @@ -101,7 +101,7 @@ Database::Database(const Queue &queue, const std::vector<std::string> &kernels, // Returns a list of OpenCL pre-processor defines in string form std::string Database::GetDefines() const { std::string defines{}; - for (auto ¶meter: parameters_) { + for (auto ¶meter: *parameters_) { defines += "#define "+parameter.first+" "+ToString(parameter.second)+"\n"; } return defines; diff --git a/src/database/database.hpp b/src/database/database.hpp index 7c05a20b..92fb383c 100644 --- a/src/database/database.hpp +++ b/src/database/database.hpp @@ -72,12 +72,14 @@ class Database { // The database consists of separate database entries, stored together in a vector static const std::vector<const DatabaseEntry*> database; + Database() = default; + // The constructor with a user-provided database overlay (potentially an empty vector) explicit Database(const Queue &queue, const std::vector<std::string> &routines, const Precision precision, const std::vector<const DatabaseEntry*> &overlay); // Accessor of values by key - size_t operator[](const std::string key) const { return parameters_.find(key)->second; } + size_t operator[](const std::string key) const { return parameters_->find(key)->second; } // Obtain a list of OpenCL pre-processor defines based on the parameters std::string GetDefines() const; @@ -90,7 +92,7 @@ class Database { const std::vector<const DatabaseEntry*> &db) const; // Found parameters suitable for this device/kernel - Parameters parameters_; + std::shared_ptr<Parameters> parameters_; }; // ================================================================================================= |