0

Apple 提供了一个 OpenCL “Hello World” 示例,可以.zip从以下页面以文件的形式下载:

https://developer.apple.com/library/mac/samplecode/OpenCL_Hello_World_Example/Introduction/Intro.html

我下载了它,在 Xcode 中打开项目,然后单击Run. 构建成功,但我收到以下错误消息:Error: Failed to create a device group!

对于如何在我的 Mac 上运行一个简单的 OpenCL 示例,我将不胜感激。如果它与诊断相关:我在 2011 年初的 MacBook Pro 上运行 Mac OS 10.7.5,并且安装了 Xcode 4.2 版。

4

2 回答 2

2

万岁,我自己解决了。Apple 提供的hello.c文件包含以下代码行:

114    // Connect to a compute device
115    //
116    int gpu = 1;
117    err = clGetDeviceIDs(NULL, gpu ? CL_DEVICE_TYPE_GPU : CL_DEVICE_TYPE_CPU, 1, &device_id, NULL);
118    if (err != CL_SUCCESS)
119    {
120        printf("Error: Failed to create a device group!\n");
121        return EXIT_FAILURE;
122    }

该代码试图获取支持 OpenCL 的 GPU 设备的 ID。问题是我的机器(MacBook Pro,2011 年初)没有支持 OpenCL 的 GPU。如果CL_DEVICE_TYPE_CPU设置了标志,则找到 CPU,这确实支持 OpenCL。如果文件修改如下:

116    int gpu = 0;

然后我得到输出:Computed '1024/1024' correct values!

于 2013-09-04T15:06:11.520 回答
0

您可以修改代码,以便如果没有支持的 GPU 则回退到 CPU

// Connect to a compute device
//
int gpu = 1;
err = clGetDeviceIDs(NULL, gpu ? CL_DEVICE_TYPE_GPU : CL_DEVICE_TYPE_CPU, 1, &device_id, NULL);
if (err != CL_SUCCESS)
{
    printf("Failed to create a device group for gpu, so it will fall back to use cpu!\n");
    err = clGetDeviceIDs(NULL, CL_DEVICE_TYPE_CPU, 1, &device_id, NULL);
    if (err != CL_SUCCESS)
        return EXIT_FAILURE;
}


// Get some information about the returned device
cl_char vendor_name[1024] = {0};
cl_char device_name[1024] = {0};
size_t returned_size = 0;
err = clGetDeviceInfo(device_id, CL_DEVICE_VENDOR, sizeof(vendor_name),
                      vendor_name, &returned_size);
err |= clGetDeviceInfo(device_id, CL_DEVICE_NAME, sizeof(device_name),
                       device_name, &returned_size);
if (err != CL_SUCCESS)
    return EXIT_FAILURE;
printf("Connecting to %s %s...\n", vendor_name, device_name);
于 2014-01-28T12:46:40.210 回答