Based on my experiences, there is no conceptual difference between them, they both imply that the data pointed to are read-only. The difference is only then apparent depending on the implementation used by the supplier.
For example, on the nvidia graphics core, the memory marked __constant is cached (cache size is 8 KB for each processor, which I assume is for all current devices). It should be noted that access to this cache is serialized if different work items get access to different addresses, and therefore I found it most useful for passing parameter structures that are constant in the workgroup. If you look at the section on read-only memory in the CUDA programming guide, you get an idea of ββhow this works. Memory marked as const __global is not cached. I suppose it just tells the compiler to throw an error if you try to change the value pointed to values.
I'm not sure that AMD does similar caching on its hardware
Hope that helps
source share