如何在 OpenCL 中验证波前/扭曲大小?

2024-02-11

我使用的是 AMD Radeon HD 7700 GPU。我想使用以下内核来验证波前尺寸是否为 64。

__kernel
void kernel__test_warpsize(
        __global T* dataSet,
        uint size
        )
{   
    size_t idx = get_global_id(0);

    T value = dataSet[idx];
    if (idx<size-1)
        dataSet[idx+1] = value;
}

在主程序中,我传递了一个包含 128 个元素的数组。初始值为dataSet[i]=i。在内核之后,我期望以下值: 数据集[0]=0 数据集[1]=0 数据集[2]=1 ... 数据集[63]=62 数据集[64]=63 数据集[65]=63 数据集[66]=65 ... 数据集[127]=126

但是,我发现dataSet[65]是64,而不是63,这不符合我的预期。

我的理解是,第一个波前(64个线程)应该将dataSet[64]更改为63。因此,当执行第二个波前时,线程#64应该获取63并将其写入dataSet[65]。但我看到 dataSet[65] 仍然是 64。为什么?


您正在调用未定义的行为。如果您希望访问工作组中另一个线程正在写入的内存,则必须使用屏障。

此外,假设 GPU 同时运行 2 个波前。那么 dataSet[65] 确实包含正确的值,第一个波前根本还没有完成。

此外,根据规范,所有项目的输出为 0 也是有效结果。这是因为一切也可以完全串行执行。这就是为什么你需要障碍。

根据您的评论我编辑了这部分:

Install http://developer.amd.com/tools-and-sdks/heterogeneous-computing/codexl/ http://developer.amd.com/tools-and-sdks/heterogeneous-computing/codexl/ Read: http://developer.amd.com/download/AMD_Accelerated_Parallel_Processing_OpenCL_Programming_Guide.pdf http://developer.amd.com/download/AMD_Accelerated_Parallel_Processing_OpenCL_Programming_Guide.pdf

优化一定数量线程内的分支只是优化的一小部分。您应该了解 AMD 硬件如何在工作组内调度波前,以及如何通过交错执行波前(在工作组内)来隐藏内存延迟。分支还会影响整个工作组的执行,因为运行它的有效时间基本上与执行单个运行时间最长的波前的时间相同(在组中的所有内容完成之前它无法释放本地内存等,因此它无法调度另一个工作组)。但这也取决于您的本地内存和寄存器使用情况等。要查看实际发生的情况,只需获取 CodeXL 并运行 GPU 分析即可。这将准确显示设备上发生的情况。

即使这仅适用于当前一代的硬件。这就是为什么这个概念不在 OpenCL 规范本身中的原因。这些属性变化很大,并且很大程度上取决于硬件。

但如果您真的想知道 AMD 波前尺寸是多少,答案几乎总是 64(请参阅http://devgurus.amd.com/thread/159153 http://devgurus.amd.com/thread/159153参考他们的 OpenCL 编程指南)。构成当前整个产​​品线的所有 GCN 设备均为 64。也许一些较旧的设备有 16 或 32,但现在所有设备都只有 64(对于 nvidia,一般是 32)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 OpenCL 中验证波前/扭曲大小? 的相关文章

随机推荐

  • 无法使用 VPN 和代理背后的 crashlytics 构建 Android 应用程序

    作为一名远程工作者 我使用 VPN代理 pac 配置文件位于http proxy mycompany com proxy pac http proxy mycompany com proxy pac 更新包安卓SDK管理器 以下代理设置可以
  • 有没有办法通过 sbt 插件获取项目的所有依赖项?

    我想编写一个 sbt 插件 在其中我需要获取当前项目的所有依赖项的列表 有一些信息 是可能的 是否可以 在我们的项目中 我们使用更新任务来获取库依赖项 update map updateReport gt updateReport sele
  • 将文件夹添加到收藏夹并更改文件夹图标 [Electron macOS]

    一周以来 我一直在寻找一种解决方案 将带有特定图标的文件夹添加到收藏夹侧边栏 就像 Dropbox 所做的那样 有什么解决方案可以用 Electron 或 Objective C 来做到这一点吗 到目前为止我发现了什么 自己拖放 filei
  • 每个数据组合的特殊组编号

    我想为每对行分配不同的组号 对于某些配对 分配唯一的编号作为组编号 edit 我们可以认为这些是成对存在于数据中的 如果这些对存在于行中 则为它们分配一个组号 直到出现下一对 因为真实数据中可能还有其他数据行 这是示例数据 names lt
  • Seaborn中轴标签的字体大小

    在seaborn中 如何仅更改x轴和y轴标签字体大小 有没有办法专门更改轴标签 而不是使用 设置上下文 方法 这是我的代码 def corrfunc x y kws r stats pearsonr x y 0 2 ax plt gca a
  • 当 return 语句和对象之间存在换行符时,Javascript 函数无法返回对象?

    这里是jsfiddle http jsfiddle net fzdQP 完整代码 function foo1 return msg hello1 function foo2 return msg hello2 output foo1 msg
  • 是否可以使用CSS取消文本大写,然后重新大写?

    我从外部来源收到了一段全部大写的文本 我希望它的第一个字母简单地大写 看来text transform capitalize不会将单词的其余部分取消大写 有没有办法不用JS就可以做到这一点 像这样的东西吗 http jsbin com ag
  • Rownum 语句返回与没有它时不同的行

    好吧 我有这个 select 语句 它返回担任职员的人数最少的部门编号 但由于数据库中的数据 它返回两个部门 当我添加 rownum 1 时 它给了我一个完全不同的部门编号 其中有最多的职员 我不知道为什么会这样做 感谢帮助 select
  • Gwt 列表框项目对对象的引用

    我有一个列表框 我想添加一些项目 只有将项目添加为字符串的方法 但是 我想使用字符串和对对象的引用向列表框添加一个项目 这样 如果在列表框中选择了某个项目 我也会获得对象引用 否则我必须始终以 equal 方式搜索正确的对象 因此还有什么选
  • 从地图创建字符串

    我目前正在开发一个项目 通过使用上下文无关语法规则 我将生成随机句子 现在 我正在创建一个函数 该函数将接受哈希值 并遍历它 选择正确的产生式来创建句子并将其作为字符串返回 例如 给定以下格式的哈希
  • 随着记录的增长,mongoldb 文档更新的性能下降

    我有一个 iOS 应用程序 它将批量数据发送到 API 端点 该端点将数据存储到 mongodb 数据库中 我的数据建模如下 id ObjectId device id Uuid rtfb status bool repetitions s
  • 如何从数据库插入图像?

    我想在我的报告的详细信息区域中插入数据库中的图像贾斯帕软件工作室 JPG 图像保存在 MySQL 中imgdata类型的longblob 我尝试将此表达式放入 Image 元素中 F imgdata MyUtil getInputStrea
  • 需要 Gradle 版本 1.10。当前版本是2.2.1。在安卓中

    我有一个使用 Android Studio 构建的 Android 项目 并尝试在我的 Android Studio 上导入并运行它 但在尝试同步项目时遇到以下错误 Failed to sync Gradle project project
  • 使用 java api 在 Elasticsearch 中创建索引并添加映射会导致缺少分析器错误

    代码是Scala 语言 它与Java 代码极其相似 我们的地图索引器用于创建索引的代码 https gist github com a16e5946b67c 6d12b2b8 https gist github com a16e5946b6
  • 包含子字符串列表中精确子字符串的字符串

    Scala 初学者在这里 我试图找到所有推文文本中至少包含关键字列表中的一个关键字 given 其中一条推文 case class Tweet user String text String retweets Int 举个例子Tweet u
  • 我如何在我的 Angular 2 项目中使用 daterangepicker js?

    我正在 Angular 2 项目中工作 想要集成 daterangepicker js 库来弹出日期范围选择器 如果您之前没有听说过 这里链接到图书馆http www daterangepicker com http www dateran
  • Redux Toolkit - 我无法更新 Slice 状态?

    我想更新状态并尝试了几种方法来做到这一点 但我不能 首先 我得到了一个problem https stackoverflow com questions 65764486 why reducer function return only p
  • SQL使用触发器进行约束

    我正在研究触发因素和约束因素 我有一个使用触发器的问题 说实话 我不太确定如何使用触发器 假设我们有一个教师表 这个教师表包含teacher id ssn first name last name class time 例如 teacher
  • R 使用 diff:二元运算符错误的非数字参数

    我们使用以下命令解析包含一些数字的 CSV 文件 tt lt read table test2 csv sep stringsAsFactors FALSE 它有效 印刷tt 1 产生一个很好的向量并且sd tt 1 是明智的 然而 当我们
  • 如何在 OpenCL 中验证波前/扭曲大小?

    我使用的是 AMD Radeon HD 7700 GPU 我想使用以下内核来验证波前尺寸是否为 64 kernel void kernel test warpsize global T dataSet uint size size t id