【问题标题】:How to use NDrange in practice?如何在实践中使用 NDrange?
【发布时间】:2015-03-09 00:58:21
【问题描述】:

我已阅读文档和书籍 (还有这些帖子:OpenCL: query number of processing elementsUnderstanding work-items and work-groupsOpenCL: Work items, Processing elements, NDRange) 关于使用 NDrange 进行数据分区的执行模型和理论。

  1. 我是否基于我的硬件构建我的工作项和工作组?如果是,我如何查询设备上有多少工作项和工作组可用?有没有一个好的做法是如何划分工作项和工作组以实现良好的性能?

  2. 我想知道它们在实践中是如何工作和交互的,用于计算一维数组和二维数组(如图像)。

【问题讨论】:

    标签: opencl


    【解决方案1】:
    1. 良好的分区需要了解您的 GPU 硬件。例如,让我们看看像 Radeon 6970 这样的 AMD 卡。内核总数为 1536。它们被封装在 24 个 SIMD 单元中。每个单元由 16 个采用 VLIW4 架构的流处理器组成。所以,我们有 16 * 4(因为 VLIW4)* 24 = 1536 个内核。每个 SIMD 单元为其中的所有内核共享一些资源(缓存等)。因此,在 Radeon 6970 的情况下,本地组的合适大小是 64 的倍数。您可以查询 OpenCL 设备的计算单元数。在我们的例子中,您应该得到 24。因此,对于 Radeon 6970 上的 OpenCL 计算单元 = SIMD 单元。请注意,手动分区可能会导致具有不同架构的设备性能下降。

    2. 可以在Nvidia developer zone 上找到当地团体福利的一个很好的例子。看一下双音排序示例代码,它将向您展示如何使用本地组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-03
      • 2011-03-13
      相关资源
      最近更新 更多