缓冲区对象是使用clCreateBuffer()
创建的,但它在哪里?以及如何控制这个位置?
答案 0 :(得分:0)
它是在目标设备中创建的(您自己选择righT?否则会自动选择第一个可见设备)内存,但它可以映射到主机内存以进行I / O操作。在创建它时,您会给出创建函数标志,如CL_MEM_USE_HOST_PTR等。
查看:AMD's opencl tutorial和NVIDIA's
例如,我正在使用
deviceType=CL_DEVICE_TYPE_CPU;
memoryModel=CL_MEM_READ_WRITE|CL_MEM_ALLOC_HOST_PTR;// uses host memory pointer
在我的CPU和
上编译 deviceType=CL_DEVICE_TYPE_GPU;
memoryModel=CL_MEM_READ_WRITE; // on GPU memory.
让离散GPU尝试一些GL-CL互操作性测试。
clCreateBuffer(context,memoryModel,Sizeof.cl_float * numElms), null, null);
如果缓冲区不在主机内存上,并且您需要更改该缓冲区中的值,则需要显式缓冲区副本/写入。映射时,您不需要显式读/写主机内存。对于某些系统,映射还可以通过DMA访问提供一些i / o性能。