我试图同时在我的英特尔CPU和Nvidia GPU上运行我的OpenCL应用程序以实现负载平衡。但我有一个问题,只有Nvidia平台被检测到。
我使用这个cl.hpp调用:
std::vector<cl::Platform> m_platforms;
cl::Platform::get(&m_platforms);
系统设置:
- Linux Arch 3.14.6-1-ARCHIntel Haswell 4770K
- 英伟达250 gts
安装包:
- nvidia-libgl 337.25 - 1
- opencl-nvidia 337.25 - 1
- nvidia 337.25 - 1
- nvidia-utils 337.25 - 1
- 台面10.2.1-1
- opencl-headers12 2014年
- intel-opencl-sdk r1-2
- opencl-icd 1.2.11.0-4
两个平台(Intel, Nvidia)在/etc/opencl/vendor .中都有。icd文件所以我不知道我可以尝试什么,最终得到英特尔CPU OpenCL平台的认可。也许你有什么主意?
目前,最好卸载这两个包(intel-opencl-sdk和intel-opencl-runtime),并从社区存储库安装beignet。
sudo pacman -S --needed beignet
该软件包提供相同的功能,并允许您也使用英特尔GPU内核。
我可以确认它与其他OpenCL平台(如NVIDIA提供的)共存得很好,正如在具有optimus功能的华硕G750JM上测试的那样。目前通过bbswitch切换,通过PRIME和primus卸载gl渲染。
一些管道(pyrit)可以在两个平台上同时使用OpenCL,从而显著提高性能。
我发现了一个名为"intel-opencl-runtime"的附加包。Intel - openl -sdk包含icd文件,但它似乎不足以在Intel平台上运行OpenCL应用程序。为了能够在Intel平台上运行OpenCL,还需要安装上面提到的运行时包。