【问题标题】:OpenCL: Work items, Processing elements, NDRangeOpenCL:工作项、处理元素、NDRange
【发布时间】:2014-01-19 19:55:01
【问题描述】:

我和我的同学第一次接触 OpenCL。正如预期的那样,我们遇到了一些问题。下面我总结了我们遇到的问题和我们找到的答案。但是,我们不确定我们是否正确,所以如果你们能看看我们的答案和下面的问题,那就太好了。

我们为什么不把它分成单个问题?

  1. 它们在一定程度上相互关联。
  2. 我们认为这些是典型的初学者问题。我们咨询过的同学都回答“嗯,那个我也不明白。”

工作项与处理元素

在我看过的大多数关于 OpenCL 的讲座中,他们都使用相同的插图来介绍计算单元和处理元素以及工作组和工作项。这导致我和我的同学们不断地混淆这些概念。因此,我们现在提出了一个定义,强调处理元素与工作项非常不同:

  • 工作项是正在执行的内核,而处理元素是一个抽象模型,代表实际执行计算的事物。工作项是仅暂时存在于软件中的东西,而处理元素抽象出物理上存在于硬件中的东西。但是,取决于硬件,因此取决于 OpenCL 实现,工作项可能会映射到由所谓的处理元素表示的某个硬件并由其执行。

问题 1:这是正确的吗?有没有更好的表达方式?

NDRange

这就是我们对NDRange概念的理解:

  • NDRange 大小表示的工作项数量。通常,这也被称为全局大小。但是,NDRange 可以是一维、二维或三维(“ND”):
    • 一维问题是一些线性向量的计算。如果向量的大小为 64,并且有 64 个工作项来处理该向量,则 NDRange 大小等于 64。
    • 二维问题是对图像的一些计算。在 1024x768 图像的情况下,NDRange 大小 Gx 将为 1024,NDRange 大小 Gy 将为 768。这假设有 1024x768 个工作项来处理该图像的每个像素。 NDRange 大小则等于 1024x768。
    • 3D 示例是在 3D 模型上进行一些计算。此外,还有 NDRange 大小 Gz。

问题 2:再次,这是正确的吗?

问题 3: 这些尺寸只是为了方便,对吧?可以简单地将图像的每个像素的颜色值存储在大小为width * height 的线性向量中。任何 3D 问题都是如此。

各种

问题 4: 我们被告知可以使用 barrier(CLK_LOCAL_MEM_FENCE);Understood 在工作组内同步内核的执行(换句话说:工作项)。我们还(一再)被告知工作组不能同步。好的。但是那barrier(CLK_GLOBAL_MEM_FENCE);有什么用呢?

问题 5:在我们的宿主程序中,我们指定了一个上下文,该上下文由来自一个可用平台的一个或多个设备组成。但是,我们只能将内核排入所谓的命令队列中,该队列恰好链接到 one 设备(必须在上下文中)。同样:命令队列没有链接到先前定义的上下文,而是链接到单个设备。对吧?

【问题讨论】:

    标签: opencl n-dimensional


    【解决方案1】:

    问题 1: 几乎正确。工作项是内核的一个实例(参见标准第 3.2 节的第 2 段)。另见标准中处理元素的定义:

    处理元素:一个虚拟标量处理器。一个工作项可以 在一个或多个处理元素上执行。

    另请参阅我提供给 question 的答案。

    问题 2 和 3: 使用多个维度或与要处理的数据元素完全相同数量的工作项取决于您的问题。这取决于您以及开发的容易程度。另请注意,您有一个 ocl 1.2 及以下的约束,它强制您将全局大小设置为工作组大小的倍数(使用 ocl 2.0 删除)。

    问题 4: 是的,由于障碍,内核执行期间的同步只能在工作组内实现。作为参数传递的标志之间的区别是指内存的类型。使用 CLK_LOCAL_MEM_FENCE 所有工作项都必须确保它们必须写入 本地内存 的数据对其他人可见。与 CLK_GLOBAL_MEM_FENCE 相同,但对于 全局内存

    问题 5: 在一个上下文中,您可以让多个设备拥有自己的多个命令队列。正如您所说,命令队列链接到一个设备,但是您可以将内核排入来自不同设备的不同命令队列中。请注意,如果两个命令队列尝试访问同一个内存对象(不同步),您将获得未定义的行为。当它们各自的作业不相关时,您通常会使用两个或多个命令队列。

    但是,您可以通过事件同步命令队列,事实上您也可以创建自己的事件(称为用户事件),请参阅第 5.9 节的事件和第 5.10 节的用户事件(标准)。

    我建议您至少阅读该标准的前几章(1 到 5)。如果你赶时间,至少第 2 章实际上是词汇表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-05
      • 2015-12-26
      • 1970-01-01
      • 1970-01-01
      • 2020-02-11
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      相关资源
      最近更新 更多