函数clGetMemObjectInfo能返回关于图像对象和缓存对象这两种内存对象的信息。
其函数原型如下:
clGetMemObjectInfo(cl_mem object, cl_mem_info param_name, size_t param_value_size,
void *param_value, size_t *param_value_size_ret);
cl_mem_info可取以下值。
clGetMemObjectInfo(main_buffer, CL_MEM_SIZE, sizeof(main_buffer_size), &main_buffer_size, NULL);
clGetMemObjectInfo(sub_buffer, CL_MEM_SIZE, sizeof(sub_buffer_size), &sub_buffer_size, NULL);
printf("main_buffer_size : %1u \n", main_buffer_size);
printf("sub_buffer_size : %1u \n", sub_buffer_size);
clGetMemObjectInfo(main_buffer, CL_MEM_HOST_PTR, sizeof(main_buffer_mem), &main_buffer_mem, NULL);
clGetMemObjectInfo(sub_buffer, CL_MEM_HOST_PTR, sizeof(sub_buffer_mem), &sub_buffer_mem, NULL);
printf("main_buffer_mem address : %p \n", main_buffer_mem);
printf("sub_buffer_mem address : %p \n", sub_buffer_mem);
printf("main array address : %p \n", main_data);
clReleaseMemObject(main_buffer);
clReleaseMemObject(sub_buffer);
这里有一点让人非常疑惑,在调用clCreateBuffer时,不管标志位设置为CL_MEM_COPY_HOST_PTR还是CL_MEM_USE_HOST_PTR打印出来的设备内存地址都和主机端是一样的。