AnsweredAssumed Answered

crash on SDK 2.7 if concurrently using alternative platforms

Question asked by firespot on Jul 22, 2012
Latest reply on Jul 27, 2012 by Wenju

Hi community,


So far I have successfully used SDK 2.6. This is on a machine with an Intel CPU and an Nivida graphics card, where besides the AMD SDK I have also installed the Nvidia GPU-computing SDK 4.1.28 and Intel OpenCL SDK 2012 (2.0) to enable Nvidia-GPU device and Intel CPU device, respectively - they support OpenCL 1.1. OS is Win7 64, development done using VS 2008 and using the AMD SDK header and lib files.

Using this config I could use all three platforms (detect platforms, fetch devices, uses devices). I have now upgraded to AMD SDK 2.7 and encountered errors. First, the default-loaded Opencl.dll loaded from Windows\SysWoW64 was an old one and I have received "clRetainDevice not found" errors. I then forced my app to use the dlls that ship with the new 2.7 SDK. The program starts but if I access any of the Nvidia or Intel devices (through a call to cl::Platform::getDevices), it crashes with an unhandled exception from the function

static cl_int ReferenceHandler<cl_device_id>::retain(cl_device_id device);

which is enabled through the preprocessor command #if defined(CL_VERSION_1_2).

It doe not crash if access the AMD driven CPU-device this way.

My other platforms / devices do not support OpenCl 1.2. I then proceeded to edit the cl.h that ships with SDK 2.7 and there #undefined CL_VERSION_1_2, where now I start getting different runtime errors (depending on device invoked, but also if the AMD platform is invoked).

Conclusion: I can't get 2.7 getting work if additional platforms (supporting OpenCL 1.1) are installed and to be used. So ... how would I do that?


Let's generalize the question also: Suppose multiple OpenCL-APIs are installed concurrently to enable the respective platforms / devices. What is the proper way to integrate them (use the different devices concurrently) by the same program? So far just including the AMD SDK 2.6 header and lib versions did work and all platforms were correctly running, but I always suspected binary compatibility problems might be ahead this way - which I suppose I have hit now by upgrading to 2.7?


EDIT: switched to the header and lib files provided by the Intel SDK, and all is working without problem so far; though of course some residual binary compatibility problem might be hidden yet. Seems one must use an SDK implemented on the lowest OpenCL specification of any SDKs used on the system.


thanks !