【问题标题】:CL_MEM_USE_HOST_PTR Vs CL_MEM_COPY_HOST_PTR Vs CL_MEM_ALLOC_HOST_PTRCL_MEM_USE_HOST_PTR 与 CL_MEM_COPY_HOST_PTR 与 CL_MEM_ALLOC_HOST_PTR
【发布时间】:2014-10-19 05:42:33
【问题描述】:

在 OpenCl By Action 一书中,我读到:

CL_MEM_USE_HOST_PTR:内存对象会访问主机指定的内存区域 指针。

CL_MEM_COPY_HOST_PTR:内存对象将设置主机指针指定的内存区域。

CL_MEM_ALLOC_HOST_PTR:主机可访问内存中的一个区域将被分配用于数据传输。

我对这三个标志完全感到困惑。

我想至少知道前两个有何不同。

1-在 CL_MEM_USE_HOST_PTR 内存对象将访问内存区域,而在 CL_MEM_COPY_HOST_PTR 内存对象将设置内存区域(在这两种情况下由主机指定)。此设置和访问有何不同? 然后第三个又让我很困惑。

2- 所有这些都是固定的内存分配吗?

【问题讨论】:

  • @Meluha “这篇文章有很大的错误!由于工作压力,我无法重写它 - 请参阅 cmets 以了解如何处理。”现在这又令人困惑了。
  • 已重写更新。

标签: opencl


【解决方案1】:

CL_MEM_COPY_HOST_PTR 只是在创建缓冲区时复制值。

CL_MEM_USE_HOST_PTR 维护对该内存区域的引用,并且根据实现,它可能会在内核执行时直接访问它,或者它可能会缓存它。如果要使用它编写跨平台代码,则必须使用 mapbuffer 来提供同步点。

CL_MEM_ALLOC_HOST_PTR 是唯一一个经常被固定的内存。作为 AMD 的一个例子,这个分配了一个固定的内存区域。通常,如果您使用 CL_MEM_USE_HOST_PTR 它只会在内部将 memcpy 存储到固定的内存区域并使用它。通过使用 ALLOC_HOST_PTR 您将避免这种情况。但这又取决于实现,您必须阅读制造商文档,了解这是否会为您提供固定内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    相关资源
    最近更新 更多