summaryrefslogtreecommitdiff
path: root/include/internal/routine.h
diff options
context:
space:
mode:
authorCedric Nugteren <web@cedricnugteren.nl>2016-04-27 16:02:13 +0200
committerCedric Nugteren <web@cedricnugteren.nl>2016-04-27 16:02:13 +0200
commit82be8f211cbd50d2d75fe78d8af4a1da04a0582b (patch)
tree19b4dbb4478edb28b7afd99a11e5a1e470098a5d /include/internal/routine.h
parent44bdb60e834ef015ee4cb25a6f0eba2a092291f0 (diff)
Moved all cache-related functions to a separate file; added a ClearCompiledProgramCache function to clear the cache
Diffstat (limited to 'include/internal/routine.h')
-rw-r--r--include/internal/routine.h37
1 files changed, 13 insertions, 24 deletions
diff --git a/include/internal/routine.h b/include/internal/routine.h
index b2b6f622..013769d8 100644
--- a/include/internal/routine.h
+++ b/include/internal/routine.h
@@ -18,8 +18,8 @@
#include <string>
#include <vector>
-#include <mutex>
+#include "internal/cache.h"
#include "internal/utilities.h"
#include "internal/database.h"
@@ -31,26 +31,6 @@ template <typename T>
class Routine {
public:
- // The cache of compiled OpenCL programs, along with some meta-data
- struct ProgramCache {
- Program program;
- std::string device_name;
- Precision precision;
- std::string routine_name_;
-
- // Finds out whether the properties match
- bool MatchInCache(const std::string &ref_device, const Precision &ref_precision,
- const std::string &ref_routine) {
- return (device_name == ref_device &&
- precision == ref_precision &&
- routine_name_ == ref_routine);
- }
- };
-
- // The actual cache, implemented as a vector of the above data-type, and its mutex
- static std::vector<ProgramCache> program_cache_;
- static std::mutex program_cache_mutex_;
-
// Helper functions which check for errors in the status code
static constexpr bool ErrorIn(const StatusCode s) { return (s != StatusCode::kSuccess); }
@@ -103,12 +83,21 @@ class Routine {
const bool do_transpose, const bool do_conjugate,
const bool upper = false, const bool lower = false,
const bool diagonal_imag_zero = false);
-
+
+ // Stores a newly compiled program into the cache
+ void StoreProgramToCache(const Program& program) const {
+ return cache::StoreProgramToCache(program, device_name_, precision_, routine_name_);
+ }
+
// Queries the cache and retrieve either a matching program or a boolean whether a match exists.
// The first assumes that the program is available in the cache and will throw an exception
// otherwise.
- const Program& GetProgramFromCache() const;
- bool ProgramIsInCache() const;
+ const Program& GetProgramFromCache() const {
+ return cache::GetProgramFromCache(device_name_, precision_, routine_name_);
+ }
+ bool ProgramIsInCache() const {
+ return cache::ProgramIsInCache(device_name_, precision_, routine_name_);
+ }
// Non-static variable for the precision. Note that the same variable (but static) might exist in
// a derived class.