OpenCL找不到GPU设备:NVIDIA GPU(Quadro K4000)和#x2B;Visual Studio 2015

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

刚刚开始学习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安装

    CUDA位于:“
    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
    ”。它们都指向上述位置

  • 在VisualStudio中,项目设置为

    项目属性”“->”C/C++“->”其他包含目录”“->”
    $(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);