summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCedric Nugteren <web@cedricnugteren.nl>2017-02-16 21:14:48 +0100
committerCedric Nugteren <web@cedricnugteren.nl>2017-02-16 21:14:48 +0100
commitcda449a5c39041b2a0e6893ee254e145447b78ca (patch)
tree3b4f18b497df26960dd72dd297a80421861e2a53 /src
parent08bfb75a9d72b6b373d8f18e8be83fe4ea31015b (diff)
Added a C interface to the OverrideParameters function; added some in-line comments to the API
Diffstat (limited to 'src')
-rw-r--r--src/clblast.cpp1
-rw-r--r--src/clblast_c.cpp21
2 files changed, 22 insertions, 0 deletions
diff --git a/src/clblast.cpp b/src/clblast.cpp
index 871a4804..a8e4d084 100644
--- a/src/clblast.cpp
+++ b/src/clblast.cpp
@@ -2255,6 +2255,7 @@ StatusCode FillCache(const cl_device_id device) {
// =================================================================================================
+// Overrides the tuning parameters for this device-precision-kernel combination
StatusCode OverrideParameters(const cl_device_id device, const std::string &kernel_name,
const Precision precision,
const std::unordered_map<std::string,size_t> &parameters) {
diff --git a/src/clblast_c.cpp b/src/clblast_c.cpp
index e4f2b3ed..79b6a640 100644
--- a/src/clblast_c.cpp
+++ b/src/clblast_c.cpp
@@ -12,6 +12,7 @@
// =================================================================================================
#include <string>
+#include <unordered_map>
#include "utilities/utilities.hpp"
#include "clblast_c.h"
@@ -3484,3 +3485,23 @@ CLBlastStatusCode CLBlastFillCache(const cl_device_id device) {
}
// =================================================================================================
+
+// Overrides the tuning parameters for this device-precision-kernel combination
+CLBlastStatusCode PUBLIC_API OverrideParameters(const cl_device_id device, const char* kernel_name,
+ const CLBlastPrecision precision, const size_t num_parameters,
+ const char** parameters_names, const size_t* parameters_values) {
+ try {
+ const auto kernel_name_cpp = std::string(kernel_name);
+ const auto precision_cpp = static_cast<clblast::Precision>(precision);
+ auto parameters = std::unordered_map<std::string, size_t>();
+ for (auto i = size_t{0}; i < num_parameters; ++i) {
+ const auto parameter_name = std::string(parameters_names[i]);
+ const auto parameter_value = parameters_values[i];
+ parameters[parameter_name] = parameter_value;
+ }
+ const auto status = clblast::OverrideParameters(device, kernel_name_cpp, precision_cpp, parameters);
+ return static_cast<CLBlastStatusCode>(status);
+ } catch (...) { return static_cast<CLBlastStatusCode>(clblast::DispatchExceptionForC()); }
+}
+
+// =================================================================================================