OpenCL找不到GPU设备:NVIDIA GPU(Quadro K4000)和#x2B;Visual Studio 2015
刚刚开始学习OpenCL,并使用VS2015设置了一个Visual Studio项目。不知何故,代码只能找到一个平台(我想应该是CPU),而找不到GPU设备。有人能帮忙吗?详情如下:OpenCL找不到GPU设备:NVIDIA GPU(Quadro K4000)和#x2B;Visual Studio 2015,opencl,gpu,gpgpu,nvidia,Opencl,Gpu,Gpgpu,Nvidia,刚刚开始学习OpenCL,并使用VS2015设置了一个Visual Studio项目。不知何故,代码只能找到一个平台(我想应该是CPU),而找不到GPU设备。有人能帮忙吗?详情如下: cl_device_id device; err = clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_GPU, 1, &device, NULL); assert(err == CL_SUCCESS); GPU:Nvidia Quadro K4000 CUDA安装 C
cl_device_id device;
err = clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_GPU, 1, &device, NULL);
assert(err == CL_SUCCESS);
C:\ProgramFiles\NVIDIA GPU计算工具包\CUDA\v7.5
”
OpenCL相关文件位于“C:\Program files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include\CL
”和“C:\Program files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\lib\Win32
”(假设为32位系统)
安装程序创建了两个环境变量“CUDA\u PATH
”和“CUDA\u PATH\u V7\u 5
”。它们都指向上述位置
$(CUDA路径)\Include
”
“项目属性”“->”链接器”“->”其他库目录”“->”$(CUDA\U路径)\lib\Win32
”
“项目属性->”链接器->“输入->”其他依赖项->“OpenCL.lib
”
#include "stdafx.h"
#include <iostream>
#include <CL/cl.h>
using namespace std;
int main()
{
cl_int err;
cl_uint numPlatforms;
err = clGetPlatformIDs(0, NULL, &numPlatforms);
if (CL_SUCCESS == err)
cout << "Detected OpenCL platforms: " << numPlatforms << endl;
else
cout << "Error calling clGetPlatformIDs. Error code:" << err << endl;
cl_device_id device = NULL;
err = clGetDeviceIDs(NULL, CL_DEVICE_TYPE_GPU, 1, &device, NULL);
if (err == CL_SUCCESS)
cout << device << endl;
return 0;
}
#包括“stdafx.h”
#包括
#包括
使用名称空间std;
int main()
{
cl_int err;
clu-uint-numPlatforms;
err=clGetPlatformIDs(0、NULL和numPlatforms);
如果(CL_成功==错误)
cout这不是您使用OpenCLAPI的方式
您需要获取一个有效的cl\u平台\u id
对象,该对象需要用于检索cl\u设备\u id
。您总是传递NULL
,这无法工作
第一次调用clGetPlatformIds
,是为了获取系统中的平台数量。之后,需要再次调用该方法以检索实际的cl\u平台id
s:
size_t numPlatforms;
err = clGetPlatformIDs(0, NULL, &numPlatforms);
assert(numPlatforms > 0);
cl_platform_id platform_ids[numPlatforms];
err = clGetPlatformIDs(numPlatforms, platform_ids, NULL);
但是,如果您已经知道系统中只有一个平台,则可以按如下方式执行加速操作,但请确保检查错误:
cl_platform_id platform_id;
err = clGetPlatformIDs(1, &platform_id, NULL);
assert(err == CL_SUCCESS);
获得平台后,您需要遵循相同的过程,首先获取设备数量,然后检索OpenCL设备列表(然后需要构建cl\u上下文,队列…):
我想你现在已经理解了这个过程。如果像上面那样,你已经知道系统中只有一个GPU设备,你可以直接获得它的cl\u设备id
,如下所示:
cl_device_id device;
err = clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_GPU, 1, &device, NULL);
assert(err == CL_SUCCESS);
这不是使用OpenCLAPI的方式
您需要获取一个有效的cl\u平台\u id
对象,该对象需要用于检索cl\u设备\u id
。您总是传递NULL
,这无法工作
第一次调用clGetPlatformIds
,是为了获取系统中的平台数量。之后,需要再次调用该方法以检索实际的cl\u平台id
s:
size_t numPlatforms;
err = clGetPlatformIDs(0, NULL, &numPlatforms);
assert(numPlatforms > 0);
cl_platform_id platform_ids[numPlatforms];
err = clGetPlatformIDs(numPlatforms, platform_ids, NULL);
但是,如果您已经知道系统中只有一个平台,则可以按如下方式执行加速操作,但请确保检查错误:
cl_platform_id platform_id;
err = clGetPlatformIDs(1, &platform_id, NULL);
assert(err == CL_SUCCESS);
获得平台后,您需要遵循相同的过程,首先获取设备数量,然后检索OpenCL设备列表(然后需要构建cl\u上下文,队列…):
我想你现在已经理解了这个过程。如果像上面那样,你已经知道系统中只有一个GPU设备,你可以直接获得它的cl\u设备id
,如下所示:
cl_device_id device;
err = clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_GPU, 1, &device, NULL);
assert(err == CL_SUCCESS);