I was playing around with the new 2014 Intel OpenCL SDK, and I noticed that when compiling for Win32, CL_DEVICE_ADDRESS_BITS query returned 32 for the CPU, but 64 for the GPU. That seems quite odd to me, is that correct? If I compile for x64, then both return 64, which isn't too strange.
Also, is there any good reason why my CPU's CL_DEVICE_NAME starts with six spaces, e.g., " Intel(R) Core(TM) i7-3630QM CPU @ 2.40GHz"? My GPU's CL_DEVICE_NAME starts immediately with "Intel(R)...".
OpenCL CPU device shares the same process with your application and Windows OS does not support processes with mixed 32/64 architecture. So YES, when you compile you application for 32bit architecture you will get 32-bit OpenCL CPU device. When you compile your application for 64-bit architecture you will get 64-bit OpenCL CPU device.
GPU is a separate piece of hardware with its own architecture and it is always seen as 64-bit OpenCL device.
Regarding the OpenCL CPU device name - it is extracted from the CPU hardware using cpuid assembler instruction. Unfortunately CPU HW returns a string with leading spaces.