通常clCreateImage2D中的第二个参数是一个标志CL_MEM_READ等。但我在其中一个示例代码中发现它为0(P. no:80,使用openCL进行异构计算):
//Create space for the source image on the device
cl_mem bufferSourceImage = clCreateImage2D(
context,0,&format, width,height,0,NULL,NULL);
为什么会这样?
答案 0 :(得分:2)
cl_mem_flags是位域:
cl.h
/* cl_mem_flags - bitfield */
#define CL_MEM_READ_WRITE (1 << 0)
#define CL_MEM_WRITE_ONLY (1 << 1)
#define CL_MEM_READ_ONLY (1 << 2)
#define CL_MEM_USE_HOST_PTR (1 << 3)
#define CL_MEM_ALLOC_HOST_PTR (1 << 4)
#define CL_MEM_COPY_HOST_PTR (1 << 5)
// reserved (1 << 6)
#define CL_MEM_HOST_WRITE_ONLY (1 << 7)
#define CL_MEM_HOST_READ_ONLY (1 << 8)
#define CL_MEM_HOST_NO_ACCESS (1 << 9)
此处,0是CL_MEM_READ_WRITE的默认值:
用于指定分配和使用信息的位字段 比如应该用来分配缓冲区的内存竞技场 对象以及如何使用它。下表描述了 标志的可能值。如果为flags指定的值为0,则为 使用默认值CL_MEM_READ_WRITE。 来自:clCreateBuffer