为什么OpenCL工作组是三维的? [英] Why are OpenCL work groups 3 dimensional?

查看:18
本文介绍了为什么OpenCL工作组是三维的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对这种架构很失望,因为没有明显的解释为什么工作组应该是三维的,或者我只是还没有找到解释。由于可以从一维工作组模拟任意数量的维度,这似乎增加了额外的复杂性,使理解将您的工作划分到工作组的最佳方式变得更加困难。

For example, this person discovered that switching axis sped up his execution with a factor of two.

我的一个假设是,OpenCL希望工作项id和内存查找之间有一个微不足道的关系,以允许可以优化I/O的可预测内存操作。

推荐答案

如果您的应用程序/算法不需要,工作组不必是三维的。您可以指定1维、2维或3维--毫无疑问,将来还可以指定更多维。因此,如果自然适合您的应用程序,请使用较少的维度。

那么为什么规范会允许更多维度呢?正如您所指出的,可以使用单个维度来模拟更高的维度。一个例子是三维N体模拟,用于物理/分子模拟。

选择使用3D工作组的一个巨大优势是大大降低了代码复杂度。在幕后,您正在运行OpenCL的SDK可能正在为您执行仿真。

至于您的示例中的2倍性能提升:这种性能提升是由于更好的内存访问模式,而不是硬件本身就不擅长在2D工作组上运行。这个问题的答案解释了进一步优化内核的方法,这对于今天的GPU硬件来说是很好的策略。

使用3D工作组的一个更微妙的好处是,未来的硬件可能不需要模拟额外的维度。也许内存、处理器等将针对3D工作组进行定制,并减少或消除不良内存访问模式的惩罚。如果您使用1D组编写代码,您将错过在这些平台上潜在的性能提升。即使在今天,也有可能创造出比GPU更好地处理3D工作组的FPGA/ASIC芯片。

这篇关于为什么OpenCL工作组是三维的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆