diff options
author | Kohei Yoshida <kohei.yoshida@gmail.com> | 2013-09-12 16:13:19 -0400 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2013-09-19 17:03:16 +0200 |
commit | cdff1b90304025ad8ca02e84e4d9a6083704b84a (patch) | |
tree | 01e7f9374a54c234f5a670792a1b47758417925c /sc/workben/opencl | |
parent | 2340f049b08cc40f7a832b66554781d3eab1a3e7 (diff) |
Add a quick test code to detect available OpenCL platforms.
Compile this with clew files from source/core/opencl/clcc.
Change-Id: I9a0be046ec996a6bccdcc8555aa8119fcf9afde3
Diffstat (limited to 'sc/workben/opencl')
-rwxr-xr-x | sc/workben/opencl/platform_detect.cxx | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/sc/workben/opencl/platform_detect.cxx b/sc/workben/opencl/platform_detect.cxx new file mode 100755 index 000000000000..81c19e6d06e6 --- /dev/null +++ b/sc/workben/opencl/platform_detect.cxx @@ -0,0 +1,71 @@ +#include <cstdlib> +#include <iostream> +#include <vector> +#include <string> + +#include "clew.h" + +using namespace std; + +int main() +{ + const char* dllname = "OpenCL.dll"; // from GPU driver. +// const char* dllname = "amdocl.dll"; // from AMD SDK +// const char* dllname = "intelocl.dll"; // from Intel SDK + int status = clewInit(dllname); + if (status < 0) + { + cout << "failed to load" << endl; + return EXIT_FAILURE; + } + + cout << "OpenCL.dll loaded successfully." << endl; + + cl_uint platformCount = 0; + clGetPlatformIDs(0, NULL, &platformCount); + + cout << "number of platforms: " << platformCount << endl; + vector<cl_platform_id> platformIDs(platformCount); + if (clGetPlatformIDs(platformCount, &platformIDs[0], NULL) != CL_SUCCESS) + { + cout << "failed to get platform IDs" << endl; + return EXIT_FAILURE; + } + + for (size_t i = 0, n = platformIDs.size(); i < n; ++i) + { + cout << "* platform (ID=" << platformIDs[i] << ")" << endl; + string param(100, '\0'); + if (clGetPlatformInfo(platformIDs[i], CL_PLATFORM_PROFILE, param.size(), ¶m[0], NULL) == CL_SUCCESS) + cout << " profile: " << param.c_str() << endl; + if (clGetPlatformInfo(platformIDs[i], CL_PLATFORM_VERSION, param.size(), ¶m[0], NULL) == CL_SUCCESS) + cout << " version: " << param.c_str() << endl; + if (clGetPlatformInfo(platformIDs[i], CL_PLATFORM_NAME, param.size(), ¶m[0], NULL) == CL_SUCCESS) + cout << " name: " << param.c_str() << endl; + if (clGetPlatformInfo(platformIDs[i], CL_PLATFORM_VENDOR, param.size(), ¶m[0], NULL) == CL_SUCCESS) + cout << " vendor: " << param.c_str() << endl; + if (clGetPlatformInfo(platformIDs[i], CL_PLATFORM_EXTENSIONS, param.size(), ¶m[0], NULL) == CL_SUCCESS) + cout << " extensions: " << param.c_str() << endl; + + cl_uint deviceCount = 0; + clGetDeviceIDs(platformIDs[i], CL_DEVICE_TYPE_ALL, 0, NULL, &deviceCount); + cout << " number of devices: " << deviceCount << endl; + + vector<cl_device_id> deviceIDs(deviceCount); + if (clGetDeviceIDs(platformIDs[i], CL_DEVICE_TYPE_ALL, deviceCount, &deviceIDs[0], NULL) != CL_SUCCESS) + continue; + + for (size_t j = 0; j < deviceIDs.size(); ++j) + { + cout << " * device (ID=" << deviceIDs[j] << ")" << endl; + if (clGetDeviceInfo(deviceIDs[j], CL_DEVICE_VENDOR, param.size(), ¶m[0], NULL) == CL_SUCCESS) + cout << " vendor: " << param.c_str() << endl; + if (clGetDeviceInfo(deviceIDs[j], CL_DEVICE_VERSION, param.size(), ¶m[0], NULL) == CL_SUCCESS) + cout << " version: " << param.c_str() << endl; + if (clGetDeviceInfo(deviceIDs[j], CL_DRIVER_VERSION, param.size(), ¶m[0], NULL) == CL_SUCCESS) + cout << " driver version: " << param.c_str() << endl; + } + } + + return EXIT_SUCCESS; +} |