gpt4 book ai didi

OpenCL:工作项、处理元素、NDRange

转载 作者:行者123 更新时间:2023-12-03 23:53:17 26 4
gpt4 key购买 nike

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

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

  • 它们部分地相互关联。
  • 我们认为这些是典型的初学者问题。我们咨询过的同学们都回答说:“嗯,我也不明白。”

  • 工作项与处理元素

    在我看过的大部分关于OpenCL的讲座中,都是用同样的插图来介绍 计算单元和处理元件 以及 工作组和工作项 .这导致我和我的同学不断混淆这些概念。因此,我们现在提出了一个定义,强调处理元素与工作项非常不同的事实:
  • 工作项是正在执行的内核,而处理元素是表示实际进行计算的事物的抽象模型。工作项只是暂时存在于软件中的东西,而处理元素则抽象出物理上存在于硬件中的东西。但是,根据硬件并因此取决于 OpenCL 实现,工作项可能会映射到由所谓的处理元素表示的某些硬件并由其执行。

  • 问题一:这样对吗?有没有更好的方式来表达这一点?

    NDR范围

    这就是我们如何看待 的概念NDRange :
  • 现有工作项的数量由 NDRange 大小表示。通常,这也被称为全局大小。但是,NDRange 可以是一维、二维或三维(“ND”):
  • 一维问题将是一些计算线性向量。如果向量的大小为 64,并且有 64 个工作项要处理该向量,则 NDRange 大小等于 64。
  • 二维问题是对图像的一些计算。对于 1024x768 图像,NDRange 大小 Gx 为 1024,NDRange 大小 Gy 为 768。这里假设有 1024x768 工作项来处理该图像的每个像素。 NDRange 大小等于 1024x768。
  • 一个 3D 示例将是对 3D 模型左右的一些计算。此外,还有 NDRange 大小 Gz。

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

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

    各种各样的

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

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

    最佳答案

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

    Processing Element: A virtual scalar processor. A work-item may execute on one or more processing elements.



    另请参阅我提供的答案 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 章。

    关于OpenCL:工作项、处理元素、NDRange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21221834/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com