1
votes

I am trying to run my OpenCL application at my Intel CPU and Nvidia GPU at the same time for load balancing purposes. But i have the problem that only the Nvidia Plattform is detected.

I use this cl.hpp call:

std::vector<cl::Platform> m_platforms;
cl::Platform::get(&m_platforms);

My system setup:

  • Linux Arch 3.14.6-1-ARCH
  • Intel Haswell 4770K
  • Nvidia 250GTS

installed packages:

  • nvidia-libgl 337.25-1
  • opencl-nvidia 337.25-1
  • nvidia 337.25-1
  • nvidia-utils 337.25-1
  • mesa 10.2.1-1
  • opencl-headers12
  • intel-opencl-sdk 2014R1-2
  • opencl-icd 1.2.11.0-4

Both platforms (Intel, Nvidia) have there .icd files in /etc/OpenCL/Vendors. So I don't know what i can try to finally get an Intel CPU OpenCL platform recognized. Maybe you have some ideas?

2

2 Answers

3
votes

For now, it would be best to uninstall both of these packages (intel-opencl-sdk and intel-opencl-runtime) and install beignet from the community repository.

sudo pacman -S --needed beignet

The package provides the same functionality and allows you to use the Intel GPU cores also.

I can confirm that it coexists well with other OpenCL platforms such as that provided by NVIDIA, as tested on an Optimus-capable ASUS G750JM. Currently switching via bbswitch and offloading GL-renders via PRIME and primus.

Some pipelines (pyrit) can use OpenCL simultaneously on both platforms, boosting the performance noticeably.

0
votes

I found an additional package called "intel-opencl-runtime". The intel-opencl-sdk contains the icd file, but it seems not to be enough to be able to run OpenCL apps with the Intel platform. To be able to run OpenCL using the Intel platform it was necessary to also install the above mentioned runtime package.