1.主机使用函数clSetKernelArg将内存对象发送给设备,完成设备到主机的数据传输最为简单的函数是调用函数clEnqueueReadBuffer。每个函数都包含一个名为blocking的布尔型变量,如果它的值为CL_TRUE,这个函数在完成读写操作之前都不会返回。如果它的值为CL_FALSE,这个函数将入列读写命令,但是不会等到整个数据传输操作结束之后才返回。
2.offset参数表示的是所读写的缓存数据的起始位置,data_size参数表示的是从offset开始的待传输数据的大小。origin和region这两个数组表示的是传入或传出图像对象的矩形区域。origin表示的是待访问的第一个像素点的位置,数组中的三个size_t元素分别表示的是像素点所在的列、行以及截面。origin中的最后一个元素必须为0,region中的最后一个元素必须为1.
3.应用程序访问文件的做法是将文件的内容先放到进程内存中,然后通过内存操作的方式读取、修改文件。这个过程称之为内存映射。一旦建立完映射,便可以通过指针或其他的内存操作来读取、修改主机上的内存对象。将缓存对象中的区域映射到主机内存中,将图像对象中的举行区域映射到主机内存中,解映射主机内存中存在的内存对象。
4.映射/解映射函数和读/写函数的另一点区别是函数clEnqueueMapBuffer和函数clEnqueueMapImage中的map_flags参数,用来配置主机上的映射内存的可访问性。
5.操作映射内存中的数据通常分为三步,首先,调用函数clEnqueueMapBuffer或函数clEnqueueMapImage,将内存映射命令入列,然后是使用诸如memcpy之类的函数,对内存中的数据进行传输操作。最后,调用clEnqueueUnmapMemObject函数解映射内存。内存映射的运行性能远高于普通的读/写函数。
6.map_copy应用程序一共入列了四条命令。第一条是传输内核及其参数给设备,第二条是将内存对象复制到另外一个内存对象,第三条是配置整个内存映射,第四条是解内存映射。
7.配置好命令队列,有序处理完所有的命令(默认配置),程序就会将buffer_one中的内容,传输给buffer_two,并将buff