What IS the OpenCL ICD?

I keep hearing about the Khronos OpenCL ICD for using OpenCL on Windows, but I’ve never seen any sort of specification. The only thing I can find is a forum post mentioning a registry key.

According to Leith Bade at http://www.geeks3d.com/20091222/gpu-caps-viewer-1-8-1-updated-for-ati-stream-sdk-v2-0-0/:

Check this registry key:
HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors

It should contain a list of the OpenCL ICD’s. This is what the offical OpenCL.dll searches.

That’s just a forum post. How did Leith Bade know? Is there an official source for this information?

Who provides the official OpenCL.dll? Is it ATI, NVidia, Khronos, or can we convince Microsoft to provide it? If ATI and NVidia make their own, I don’t want to see them fighting over this power. I expect their OpenCL.dll’s to work exactly the same way.

Another concern I have:
OpenCL can have a CPU implementation in case the graphics card is unsupported. Who provides that? I understand ATI and NVidia each have their own, but surely that’s a bad situation because one of them is bound to be better than the other. What if I want to use ATI’s ICD for their graphics cards, but NVidia’s ICD has a better CPU platform? I think a third party should make a CPU implementation independent of the graphics card companies.

The Khronos Promoters recently ratified the ICD extension specification and it is available in the Registry now. It is a joint effort by vendors of OpenCL implementations on Windows and Linux platforms.