OpenCL clGetDeviceIDs returns 当 GPU 时为 -1,当 CPU 时为 0
OpenCL clGetDeviceIDs returns -1 when GPU and 0 when CPU
我在 Ubuntu 14.04.2 LTS(NVIDIA Corporation GM204 [GeForce GTX 980])上 运行 我的 OpenCL/C++ 代码。
它在 CPU 上工作正常,但是当我将 CL_DEVICE_TYPE_CPU
更改为 CL_DEVICE_TYPE_GPU
时,clGetDeviceIDs
方法返回 -1。
有问题的代码:
ret = clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_GPU, 1, &device_id, &ret_num_devices);
cout << ret;
checkError(ret, "clGetDeviceIDs");
输出-1。
但以下内容:
ret = clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_CPU, 1, &device_id, &ret_num_devices);
cout << ret;
checkError(ret, "clGetDeviceIDs");
输出 0。
为什么?
我根据this link中的代码做了一些修改:
cl_int ret = clGetPlatformIDs(2, platforms, &ret_num_platforms);
cout << ret;
//ret = clGetDeviceIDs( platforms[0], CL_DEVICE_TYPE_CPU, 1, &device_id, &ret_num_devices); // Execute me on CPU
ret = clGetDeviceIDs(platforms[1], CL_DEVICE_TYPE_GPU, 1, &device_id, &ret_num_devices); // Execute me on GPU
我在 Ubuntu 14.04.2 LTS(NVIDIA Corporation GM204 [GeForce GTX 980])上 运行 我的 OpenCL/C++ 代码。
它在 CPU 上工作正常,但是当我将 CL_DEVICE_TYPE_CPU
更改为 CL_DEVICE_TYPE_GPU
时,clGetDeviceIDs
方法返回 -1。
有问题的代码:
ret = clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_GPU, 1, &device_id, &ret_num_devices);
cout << ret;
checkError(ret, "clGetDeviceIDs");
输出-1。
但以下内容:
ret = clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_CPU, 1, &device_id, &ret_num_devices);
cout << ret;
checkError(ret, "clGetDeviceIDs");
输出 0。
为什么?
我根据this link中的代码做了一些修改:
cl_int ret = clGetPlatformIDs(2, platforms, &ret_num_platforms);
cout << ret;
//ret = clGetDeviceIDs( platforms[0], CL_DEVICE_TYPE_CPU, 1, &device_id, &ret_num_devices); // Execute me on CPU
ret = clGetDeviceIDs(platforms[1], CL_DEVICE_TYPE_GPU, 1, &device_id, &ret_num_devices); // Execute me on GPU