如何在XCode中运行Apple的OpenCL“Hello World”示例

时间:2013-09-04 14:30:09

标签: macos opencl

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版。

2 个答案:

答案 0 :(得分: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!

答案 1 :(得分: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);