我的OpenCL内核需要几MB的输入数据,大约300MB的临时全局内存用于工作,并且仅返回几MB。我所知道的唯一给内核提供这个临时内存的方法是使用malloc分配此内存,然后通过clCreateBuffer传递它,但将300MB复制到GPU需要一些时间,而且还需要300MB的主机RAM。是否可能跳过这一步骤,要么在内核内部分配全局设备内存,要么以某种方式声明一个具有300Mb的缓冲区,但不使用malloc创建它并且不将其复制到GPU?
clCreateBuffer
而没有使用主机指针,那么会在设备上分配内存,而不会从主机复制任何数据。例如:buffer = clCreateBuffer(context, CL_MEM_READ_WRITE, size, NULL, &err);