From what I understand it should be possible to have an NVIDIA GPU alongside an AMD GPU, hosted on an Intel CPU, and the three will be able to share the load of compute intensive tasks, in a multi-device OpenCL execution. I mean, that's the definition of heterogeneous after all.
The day this is possible, at least for Linux and Windows (don't know about a Mac) is not here yet, from my experience. If I install AMD's StreamSDK and the driver that comes along with it, it doesn't recognize my NVIDIA GPU. It does manage to recognize the Intel CPU as a compute device (which is cool). If I use NVIDIA's implementation, it only sees the NVIDIA GPU, not AMD GPU device and no CPU device.
Now, either I'm doing something wrong, or, we're missing a link in the chain. To my understanding, a common, implementation independent dll/so should be responsible for device enumeration according to installed ICDs, and once a context is opened to a device, any OpenCL commands enqueued for that device in that context, should be redirected to the specific vendor's dll/so which communicates with that device's OpenCL driver.
Am I wrong? If not, does the fact that I don't get the expected behavior means that this host dll/so is missing on my platform? Is there even such a dll/so? If not, can anyone estimate as to when such a functionality be available?
Thank you for your time,
-- Liad Weinberger.