c++ - openCL平台/设备查询

标签 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,现在我看到了我所有的平台和设备!

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

最佳答案

平台基本上是一个已安装的 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

关于c++ - openCL平台/设备查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8738776/

相关文章:

parallel-processing - CUDA 中的忙碌旋转

c++ - 使用 Nvidia GPU Computing 工具包和 Cygwin with Eclipse 编译错误

c++ - 我应该用什么代替 cl::KernelFunctor?

c++ - 尝试从 OpenGL 创建 OpenCL 上下文时出现无效共享组错误

python - 在Python中使用Dask并行运行函数

Delphi - 使用并行编程库中的 IFuture 读取大文件

c++ - CMake无法从库中找到 header

c++ - 如何使用最新版本的 ffmpeg 创建立体声 mp3 文件?

c++ - STL/Boost 中的仿函数,它从指针中提取值

c++ - 定义 NDEBUG 时删除断言是否在内联函数之前发生?