我正在使用 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,现在我看到了我所有的平台和设备!
下一步是创建上下文。我可以将来自不同平台的设备放在同一上下文中吗?考虑到您需要为每个设备等单独的命令队列,是否很难编写一个程序来使用系统上的所有设备,即使数量是十万?
最佳答案
平台基本上是一个已安装的 OpenCL 实现。从物理上讲,它是一个 ICD记录(在 *nix 上 /etc/OpenCL/vendors/
中的文件,在 Windows 中的注册表记录)帮助 OpenCL.dll/libOpenCL.so 找到实际的特定于供应商的实现。
在您的情况下,由于您的 GPU 不支持 OpenCL,驱动程序似乎没有将 nVidia 的库添加到平台列表中。 [offtop] 我想知道在将硬件升级到 CUDA/OpenCL 兼容后是否需要重新安装驱动程序...
为了将您的 CPU 用作 OpenCL 设备,您必须安装 AMD APP SDK或 Intel OpenCL SDK , 因为 nVidia 的实现不以任何方式支持 CPU
关于c++ - openCL平台/设备查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8738776/