openCL平台/设备查询

时间:2012-01-05 07:01:32

标签: c++ parallel-processing opencl

我正在使用openCL的Nvidia实现。

cl_uint devicecount=NULL;
cl_uint NumPlatforms;
clGetPlatformIDs (0, NULL, &NumPlatforms);

cl_platform_id* PlatformIDs;
PlatformIDs = new cl_platform_id[NumPlatforms];
clGetPlatformIDs(NumPlatforms, PlatformIDs, NULL);

cl_device_id cdDevice;
clGetDeviceIDs(NULL, CL_DEVICE_TYPE_CPU, 1, &cdDevice, &devicecount);

cout << NumPlatforms << endl;
cout << PlatformIDs << endl;
cout << cdDevice << endl;
cout << devicecount << endl;

我实际上可能目前没有兼容的GPU,但我有一个兼容的CPU。该查询告诉我,我有0个平台和0个设备。我这样做了吗?我不完全理解什么是平台,为什么我没有平台。 openCL如何才能找到并使用平台?

编辑:

我今天在邮件中收到了新卡,安装了amd sdk,然后重新安装了nvidia sdk,我现在看到了所有的平台和设备!

下一步是创建上下文。我可以将来自不同平台的设备放在同一个上下文中吗?考虑到每个设备需要单独的命令队列等,编写程序以使用系统上的所有设备,即使数量是十万,这是非常困难的吗?

2 个答案:

答案 0 :(得分:2)

平台基本上是一个已安装的OpenCL实现。从物理上讲,它是一个ICD记录(* nix上/etc/OpenCL/vendors/中的文件,Windows中的注册表记录),它可以帮助OpenCL.dll / libOpenCL.so找到实际的特定于供应商的实现。

在你的情况下看起来好像你的GPU不支持OpenCL,驱动程序还没有将nVidia的库添加到平台列表中。 [offtop]我想知道在将硬件升级到兼容CUDA / OpenCL之后是否需要重新安装驱动程序......

为了将您的CPU用作OpenCL设备,您必须安装AMD APP SDKIntel OpenCL SDK,因为nVidia的实现不支持任何方式的CPU

答案 1 :(得分:0)

我安装了intel和amd SDK,当我获得intel平台上的cpu设备和amd平台的信息时,得到了有趣的结果。

我的intel I5设备,在intel平台上有128个采样器和128个执行功能,而在amd平台上它有16个采样器和执行功能。同样在amd平台上,cpu的最大时钟频率为3310,而在intel的平台3300上。

我想知道这种差异是仅仅是名义上的,还是在从英特尔平台上选择英特尔设备之间的性能差异?