opencl:clCreateBuffer()给出主机或设备中的内存对象?

时间:2014-08-24 19:33:47

标签: opencl

缓冲区对象是使用clCreateBuffer()创建的,但它在哪里?以及如何控制这个位置?

1 个答案:

答案 0 :(得分:0)

它是在目标设备中创建的(您自己选择righT?否则会自动选择第一个可见设备)内存,但它可以映射到主机内存以进行I / O操作。在创建它时,您会给出创建函数标志,如CL_MEM_USE_HOST_PTR等。

查看:AMD's opencl tutorialNVIDIA'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性能。