summaryrefslogtreecommitdiff
path: root/src/clpp11.hpp
diff options
context:
space:
mode:
authorCedric Nugteren <web@cedricnugteren.nl>2016-06-29 19:42:49 +0200
committerCedric Nugteren <web@cedricnugteren.nl>2016-06-29 19:42:49 +0200
commitcd74aaac5290d14ba03ad13bb2fffa1040ccff5d (patch)
tree3ce38459cf67a364ee6ea306dc6b2cbb6597cfc5 /src/clpp11.hpp
parent56483347e8b70c672f9173ef7e7c38b9e2bc10bf (diff)
Updated to version 6.0 of the CLCudaAPI header
Diffstat (limited to 'src/clpp11.hpp')
-rw-r--r--src/clpp11.hpp23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/clpp11.hpp b/src/clpp11.hpp
index b834d8b4..f8bc2b02 100644
--- a/src/clpp11.hpp
+++ b/src/clpp11.hpp
@@ -163,6 +163,15 @@ class Device {
// Methods to retrieve device information
std::string Version() const { return GetInfoString(CL_DEVICE_VERSION); }
+ size_t VersionNumber() const
+ {
+ std::string version_string = Version().substr(7);
+ // Space separates the end of the OpenCL version number from the beginning of the
+ // vendor-specific information.
+ size_t next_whitespace = version_string.find(' ');
+ size_t version = (size_t) (100.0 * std::stod(version_string.substr(0, next_whitespace)));
+ return version;
+ }
std::string Vendor() const { return GetInfoString(CL_DEVICE_VENDOR); }
std::string Name() const { return GetInfoString(CL_DEVICE_NAME); }
std::string Type() const {
@@ -211,6 +220,8 @@ class Device {
bool IsCPU() const { return Type() == "CPU"; }
bool IsGPU() const { return Type() == "GPU"; }
bool IsAMD() const { return Vendor() == "AMD" || Vendor() == "Advanced Micro Devices, Inc."; }
+ bool IsNVIDIA() const { return Vendor() == "NVIDIA" || Vendor() == "NVIDIA Corporation"; }
+ bool IsIntel() const { return Vendor() == "Intel" || Vendor() == "GenuineIntel"; }
bool IsARM() const { return Vendor() == "ARM"; }
// Accessor to the private data-member
@@ -386,8 +397,16 @@ class Queue {
delete s; }) {
auto status = CL_SUCCESS;
#ifdef CL_VERSION_2_0
- cl_queue_properties properties[] = {CL_QUEUE_PROPERTIES, CL_QUEUE_PROFILING_ENABLE, 0};
- *queue_ = clCreateCommandQueueWithProperties(context(), device(), properties, &status);
+ size_t ocl_version = device.VersionNumber();
+ if (ocl_version >= 200)
+ {
+ cl_queue_properties properties[] = {CL_QUEUE_PROPERTIES, CL_QUEUE_PROFILING_ENABLE, 0};
+ *queue_ = clCreateCommandQueueWithProperties(context(), device(), properties, &status);
+ }
+ else
+ {
+ *queue_ = clCreateCommandQueue(context(), device(), CL_QUEUE_PROFILING_ENABLE, &status);
+ }
#else
*queue_ = clCreateCommandQueue(context(), device(), CL_QUEUE_PROFILING_ENABLE, &status);
#endif