summaryrefslogtreecommitdiff
path: root/src/utilities
diff options
context:
space:
mode:
authorCedric Nugteren <web@cedricnugteren.nl>2019-05-11 20:39:00 +0200
committerCedric Nugteren <web@cedricnugteren.nl>2019-05-11 20:39:00 +0200
commitaf6a9eedd118b0e3d7f1a2098c10ff90b27b5d0e (patch)
treea5644ea6de5a2b72772238d35741072c5db54486 /src/utilities
parent9cbffc9b7cbcfa6d6c8a048c45c1ad52d22effb3 (diff)
Added a function to set the OpenCL kernel standard, either 1.1 or 1.2
Diffstat (limited to 'src/utilities')
-rw-r--r--src/utilities/compile.cpp1
-rw-r--r--src/utilities/utilities.cpp13
-rw-r--r--src/utilities/utilities.hpp4
3 files changed, 18 insertions, 0 deletions
diff --git a/src/utilities/compile.cpp b/src/utilities/compile.cpp
index 00cb90cb..aeb7a3e2 100644
--- a/src/utilities/compile.cpp
+++ b/src/utilities/compile.cpp
@@ -111,6 +111,7 @@ std::shared_ptr<Program> CompileFromSource(
// Compiles the kernel
auto program = std::make_shared<Program>(context, kernel_string);
try {
+ SetOpenCLKernelStandard(device, options);
program->Build(device, options);
} catch (const CLCudaAPIBuildError &e) {
if (program->StatusIsCompilationWarningOrError(e.status()) && !silent) {
diff --git a/src/utilities/utilities.cpp b/src/utilities/utilities.cpp
index a0e89c98..29161e74 100644
--- a/src/utilities/utilities.cpp
+++ b/src/utilities/utilities.cpp
@@ -498,6 +498,19 @@ std::string GetDeviceName(const Device& device) {
// =================================================================================================
+void SetOpenCLKernelStandard(const Device &device, std::vector<std::string> &options) {
+ // Inclusion of one of the following extensions needs OpenCL 1.2 kernels
+ if (device.HasExtension(kKhronosIntelSubgroups)) {
+ options.push_back("-cl-std=CL1.2");
+ }
+ // Otherwise we fall-back to the default CLBlast OpenCL 1.1
+ else {
+ options.push_back("-cl-std=CL1.1");
+ }
+}
+
+// =================================================================================================
+
// Solve Bezout's identity
// a * p + b * q = r = GCD(a, b)
void EuclidGCD(int a, int b, int &p, int &q, int &r) {
diff --git a/src/utilities/utilities.hpp b/src/utilities/utilities.hpp
index 23486d35..b66df118 100644
--- a/src/utilities/utilities.hpp
+++ b/src/utilities/utilities.hpp
@@ -375,6 +375,10 @@ std::string GetDeviceName(const Device& device);
// =================================================================================================
+void SetOpenCLKernelStandard(const Device &device, std::vector<std::string> &options);
+
+// =================================================================================================
+
// Solve Bezout's identity
// a * p + b * q = r = GCD(a, b)
void EuclidGCD(int a, int b, int &p, int &q, int &r);