summaryrefslogtreecommitdiff
path: root/src/database
diff options
context:
space:
mode:
authorIvan Shapovalov <intelfx@intelfx.name>2016-11-27 14:17:44 +0300
committerIvan Shapovalov <intelfx@intelfx.name>2017-01-24 11:56:15 +0300
commit6dc18c1c57d5fef75e7682b1fdb8268ec3786908 (patch)
treea14dab661b7d7088263e529c1722033a8db7c95a /src/database
parent5bcd92f2974d94e8add31816d3b9d48a42289500 (diff)
Database: ref-count the internal map for caching
Diffstat (limited to 'src/database')
-rw-r--r--src/database/database.cpp6
-rw-r--r--src/database/database.hpp6
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 &parameter: parameters_) {
+ for (auto &parameter: *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_;
};
// =================================================================================================