there is ICD mechanism in opencl.dll which load vendor specific dll. you link against opencl.dll which are same for all vendors. also you don't need two binary specific for vendor. you can decide on runtime to use some specific optimizations and have single binary. or you mean kernel binaries? which are indeed vendor or even device specific.
the ICD extension provided by khronos group defines an installable client driver (ICD) that acts as an interface to various vendor specific OpenCL implementations. Using this extension, an OpenCl function call may be directed to a vendor specific implementation. More details of this are found at http://www.khronos.org/registry/cl/extensions/khr/cl_khr_icd.txt.
This extension could be used for cross platform compilation, build and distribution of openCL code.
very nice info, and bleakwise that is the same thing i believe will be the future also let me share my experience so far .
some months ago i was toying with the same idea, i was trying to make an application that called little opencl kernels like, sort this thing, or find this thing , to increase performance .
I only have a desktop with discrete gpu, but even when running on the gpu was many times faster the latency of copyng data betwen cpu and gpu killed any gains so running the code on the cpu was faster
and now im waiting to buy an apu to continue working whit that.
so my only recomendation is profile the thing and if you can avoid any copies of data the better i think you can already do this on amd, im not sure if you could do it on intel. but anyway good luck and happy coding