1

我有一个 Nvidia Tesla K80 坐在一个 LINUX 盒子里。我知道 Tesla K80 内部有两个 GPU。当我在那台机器上运行 OpenCL 程序,遍历所有设备时,我看到了四个设备(4 个 Tesla K80)。你知道为什么会发生这种情况吗?

这是主机代码:

ret = clGetPlatformIDs(0, NULL, &platformCount); openclCheck(ret);
platforms = (cl_platform_id*) malloc(sizeof(cl_platform_id) *   platformCount);
ret = clGetPlatformIDs(platformCount, platforms, NULL);  openclCheck(ret);
printf("Detect %d platform available.\n",platformCount);
for (unsigned int i= 0; i < platformCount; i++) {
    // get all devices
    ret = clGetDeviceIDs(platforms[i], CL_DEVICE_TYPE_GPU, 0, NULL, &deviceCount);  openclCheck(ret)
    devices = (cl_device_id*) malloc(sizeof(cl_device_id) * deviceCount);
    ret = clGetDeviceIDs(platforms[i], CL_DEVICE_TYPE_GPU, deviceCount, devices, NULL); openclCheck(ret)
    printf("Platform %d. %d device available.\n", i+1, deviceCount );
    // for each device print critical attributes

for (unsigned int j = 0; j < deviceCount; j++) {
        // print device name
        ret = clGetDeviceInfo(devices[j], CL_DEVICE_NAME, 0, NULL, &valueSize); openclCheck(ret)
        value = (char*) malloc(valueSize);
        ret = clGetDeviceInfo(devices[j], CL_DEVICE_NAME, valueSize, value, NULL); openclCheck(ret)
        printf("\t%d. Device: %s\n", j+1, value);
        free(value);
        //more code here to print device attributes

这是输出:

Detect 1 platform available.
Platform 1. 4 device available.
1. Device: Tesla K80
    1.1 Hardware version: OpenCL 1.2 CUDA
    1.2 Software version: 352.79
    1.3 OpenCL C version: OpenCL C 1.2 
    1.4 Parallel compute units: 13

2. Device: Tesla K80
    2.1 Hardware version: OpenCL 1.2 CUDA
    2.2 Software version: 352.79
    2.3 OpenCL C version: OpenCL C 1.2 
    2.4 Parallel compute units: 13

3. Device: Tesla K80
    3.1 Hardware version: OpenCL 1.2 CUDA
    3.2 Software version: 352.79
    3.3 OpenCL C version: OpenCL C 1.2 
    3.4 Parallel compute units: 13

4. Device: Tesla K80
    4.1 Hardware version: OpenCL 1.2 CUDA
    4.2 Software version: 352.79
    4.3 OpenCL C version: OpenCL C 1.2 
    4.4 Parallel compute units: 13
4

1 回答 1

0

很可能 2 个是 32 位实现,2 个是来自多个驱动程序的 64 位实现。也许旧驱动程序需要通过某些显示驱动程序卸载程序软件进行清理。请检查每个设备实现的位数。

或者,有虚拟 gpu(GRID?)服务保持活动状态导致重复设备,所以也许您可以停用虚拟 gpu 来解决这个问题。

于 2016-04-14T19:11:47.337 回答