Opencl 如何在实践中使用NDrange?

Opencl 如何在实践中使用NDrange?,opencl,Opencl,我读过文件和书籍 (也包括这些职位:;) 关于使用NDrange进行数据分区的执行模型和理论 我是否基于硬件构建工作项和工作组?如果是,如何查询设备上有多少工作项和工作组可用?如何划分工作项和工作组以实现良好绩效,是否有良好的实践 我想知道它们在实际中是如何工作和相互作用的,对于一维数组和像图像一样的二维数组的计算 良好的分区需要了解GPU硬件。例如,让我们看看像Radeon 6970这样的AMD卡。核心总数为1536个。它们封装在24个SIMD单元中。每个单元由16个具有VLIW4体系结构的流

我读过文件和书籍 (也包括这些职位:;) 关于使用NDrange进行数据分区的执行模型和理论

  • 我是否基于硬件构建工作项和工作组?如果是,如何查询设备上有多少工作项和工作组可用?如何划分工作项和工作组以实现良好绩效,是否有良好的实践

  • 我想知道它们在实际中是如何工作和相互作用的,对于一维数组和像图像一样的二维数组的计算

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

  • 有关本地团体福利的一个好例子,请参见。看看bitonic排序示例代码,它将向您展示如何使用本地组