【发布时间】:2011-12-15 03:07:58
【问题描述】:
我有一台配备集成 Intel HD 3000 和 i7 内核的 MacBook Pro 13'。
我必须使用并行编程。
我的教学顾问无法告诉我它是否适用于我的 MacBook。
是否可以在我的笔记本电脑上运行测试以进行测试? + 我找到了这个,但只有 Linux 和 Windows SDK……也许 Linux 版本也适用于 Mac。
我该怎么办?
【问题讨论】:
我有一台配备集成 Intel HD 3000 和 i7 内核的 MacBook Pro 13'。
我必须使用并行编程。
我的教学顾问无法告诉我它是否适用于我的 MacBook。
是否可以在我的笔记本电脑上运行测试以进行测试? + 我找到了这个,但只有 Linux 和 Windows SDK……也许 Linux 版本也适用于 Mac。
我该怎么办?
【问题讨论】:
我在 macbook air 2011 上测试了 OpenCL,它有一个 Core i5-2467M。我可以告诉你,苹果公司的 OpenCL 实现在 CPU 上不能正常工作,只能在 GPU 上工作。最大的问题是当您将工作组大小设置为大于 1 时。
【讨论】:
vocaro 的回答是绝对正确的;您可以始终在 Snow Leopard 和 Lion 上使用 CPU 计算设备,即使您的特定图形芯片不支持 OpenCL。
以下程序将向您展示给定 Macintosh 上支持 OpenCL 的设备:
// clang -framework OpenCL dumpcl.c -o dumpcl && ./dumpcl
#include <stdio.h>
#include <stdlib.h>
#include <OpenCL/opencl.h>
int main(int argc, char* const argv[]) {
cl_uint num_devices, i;
clGetDeviceIDs(NULL, CL_DEVICE_TYPE_ALL, 0, NULL, &num_devices);
cl_device_id* devices = calloc(sizeof(cl_device_id), num_devices);
clGetDeviceIDs(NULL, CL_DEVICE_TYPE_ALL, num_devices, devices, NULL);
char buf[128];
for (i = 0; i < num_devices; i++) {
clGetDeviceInfo(devices[i], CL_DEVICE_NAME, 128, buf, NULL);
fprintf(stdout, "Device %s supports ", buf);
clGetDeviceInfo(devices[i], CL_DEVICE_VERSION, 128, buf, NULL);
fprintf(stdout, "%s\n", buf);
}
free(devices);
}
在我的 Macbook 上,这给出了:
Device Intel(R) Core(TM) i7-2635QM CPU @ 2.00GHz supports OpenCL 1.1
Device ATI Radeon HD 6490M supports OpenCL 1.1
您可以使用此程序作为起点询问其他设备信息。 clGetDeviceInfo 的 Khronos API 参考应该很有用。
【讨论】:
<OpenCL/...> 替换为 <CL/...> 并将 -framework OpenCL 替换为 -lOpenCL。当然,您必须同时安装库和 ICD。
您可以使用 Apple 随 OS X Snow Leopard 和 Lion 一起提供的内置 OpenCL 平台。遵循本指南:
http://developer.apple.com/library/mac/#documentation/Performance/Conceptual/OpenCL_MacProgGuide/
请注意,它不适用于 Intel HD 3000 GPU,只能在 CPU 上运行。
【讨论】: