【问题标题】:opencl: clCreateBuffer() gives the memory object in host or device?opencl: clCreateBuffer() 给出主机或设备中的内存对象?
【发布时间】:2014-08-26 05:08:52
【问题描述】:

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

【问题讨论】:

    标签: opencl


    【解决方案1】:

    它在目标设备中创建(您自己选择它对吗?否则会自动选择第一个可见设备)内存,但它可以映射到主机内存以进行 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 性能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-17
      相关资源
      最近更新 更多