The OpenCL spec defines three different features which in various ways seem to resemble CUDA’s constant memory. When creating a buffer, you can pass the CL_MEM_READ_ONLY flag. Alternatively, when declaring the input arguments to a kernel, you can mark a pointer as “__constant”, or as “const __global”. The spec is extremely vague on what each of these is supposed to do. What is the actual effect of each of them? Which one or ones most closely correspond to CUDA’s constant memory?