【问题标题】:clEnqueueReadBuffer / clEnqueueWriteBuffer: force pinned memory modeclEnqueueReadBuffer / clEnqueueWriteBuffer:强制固定内存模式
【发布时间】:2013-04-15 14:17:28
【问题描述】:

为了与 openCL 进行全速通信,必须使用主机端的固定内存。这样的内存永远不会被分页,并且可以通过使用带有 CL_MEM_ALLOC_HOST_PTR 标志的 clCreateBuffer() 然后使用 clEnqueueMapBuffer 来获得。

但是人们可能知道一个对象已经在固定内存中(因为它是使用这些函数创建的,但在另一个上下文中),因此想要全速使用 clEnqueueReadBuffer()/clEnqueueWriteBuffer()。不幸的是,如果内存没有在当前上下文中固定,则该对象不会被认为是固定的,并且数据速率不是最大的。

如何说一个对象已经在 OpenCL 的固定内存中?

【问题讨论】:

    标签: opencl gpgpu


    【解决方案1】:

    我对这个问题的结论是,OpenCL SDK 必须维护自己的一组标志,以了解它们是否分配了缓冲区,因此可以安全地假设它是否被固定。他们似乎保守地假设外部分配的缓冲区没有固定或对齐。

    我尝试使用clCreateBuffer 匹配缓冲区分配 的基准带宽和使用外部分配的内存使用 的缓冲区,或者在不同的上下文中使用clCreateBuffer 或手动固定和对齐的内存,第一个似乎总是对 AMD 和 nvidia 表现更好。

    【讨论】:

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