diff options
Diffstat (limited to 'src/utilities')
-rw-r--r-- | src/utilities/compile.cpp | 1 | ||||
-rw-r--r-- | src/utilities/utilities.cpp | 13 | ||||
-rw-r--r-- | src/utilities/utilities.hpp | 4 |
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); |