Apple提供了一个OpenCL“Hello World”示例,该示例可以从以下页面下载为.zip
文件:
我下载了它,在Xcode中打开了项目,然后点击了Run
。构建成功,但我收到以下错误消息: Error: Failed to create a device group!
对于如何在我的Mac上运行简单的OpenCL示例,我将不胜感激。如果它与诊断相关:我在2011年初的MacBook Pro上运行Mac OS 10.7.5,并且我安装了Xcode 4.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);