首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCL补偿单元和处理单元

OpenCL补偿单元和处理单元
EN

Stack Overflow用户
提问于 2017-04-09 12:52:24
回答 1查看 551关注 0票数 1

我目前使用的是AMD夏威夷GPU,对此有一些疑问。

在AMD Hawaii的规格中,它有

代码语言:javascript
复制
2816 Processing Element
44 Computing Units

我知道它有2816个线程和44个工作组(每个组64个线程)。

这是正确的吗?

我对核心、线程、计算单元、工作组和处理元素的概念感到困惑。

EN

回答 1

Stack Overflow用户

发布于 2017-04-09 16:16:11

不是的。您可以(也应该)每个CU有多个工作组,每个处理元素有多个线程。每个CU最多可以容纳40个波前,每个波前包含64个线程,因此并行线程的最大数量是44*40*64=112640。但是,您通常不能使用所有这些线程。其他资源可能会限制每个CU的最大可能线程数。每个CU只有有限数量的寄存器,并且每个波前使用太多的寄存器,所以并行波前的最大数量较低。

每个工作组在相同的CU上执行,因为这允许访问共享存储器(LDS)并在每个工作组的不同波前之间轻松同步。您可以在一定的限制范围内选择工作组大小。每个工作组有256个线程的硬限制(更多不起作用)和波前大小/每个工作组64个线程的软限制(如果您使用更少的话会降低性能)。您的工作组大小也应该是波前大小的倍数,因此64、128、192和256是工作组大小最常见的选择。然而,其他一切都会降低潜在的峰值性能,这取决于您的问题不同的工作组规模可能仍然比强迫问题选择其中一个更好。

由于每个工作组最多只能使用256个线程,因此可以在每个CU上并行执行多个工作组。如果使用256线程的最大工作组大小,则至少需要112640/ 256 =440个工作组才能使用GPU的所有线程。如果您有更多的工作组,则最多440个工作组将并行执行,其余的工作组将在其中一个较旧的工作组完成后执行。如果工作组较少,则不会占用所有线程,这可能会导致性能下降。如果选择较小的工作组,则需要更多工作组,例如: 1760个工作组,工作组大小为64个。使用过多的共享内存(LDS)也会限制每个CU的工作组数量。

处理单元执行指令。在最佳条件下,每个周期可以启动一条指令。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43303173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档