【问题标题】:CUDA active warps vs resident warpsCUDA 主动经纱与驻留经纱
【发布时间】:2017-01-29 12:42:56
【问题描述】:

CUDA 中的占用率定义为

occupancy = active_warps / maximum_active_warps

驻留CUDA 经线和活动经线有什么区别?

根据我在网络上的研究,似乎一个块在其整个执行期间都驻留在 SM 上(即与其寄存器/共享内存文件一起分配)。 “活跃”有区别吗?

如果我的内核使用很少的寄存器和共享内存。这是否意味着我可以拥有maximum_active_warps 常驻块并实现 100% 的占用率,因为占用率仅取决于所使用的寄存器/共享内存的数量?

【问题讨论】:

标签: c++ cuda gpu


【解决方案1】:

常驻 CUDA warp 和 active 有什么区别?

在这种情况下大概什么都没有。

根据我在网络上的研究,似乎一个块在其整个执行期间都驻留在 SM 上(即与其寄存器/共享内存文件一起分配)。 “活跃”有区别吗?

现在你已经从询问经线切换到询问方块。但同样,在这种情况下,不,您可以认为它们是相同的。

如果我有一个使用很少寄存器和共享内存的内核.. 这是否意味着我可以拥有 maximum_active_warps 常驻块和 实现 100% 的入住率,因为入住率仅取决于 使用了寄存器/共享内存?

不,因为扭曲和方块不是一回事。正如您自己引用的那样,占用是根据经线定义的,而不是块。根据您的硬件,最大扭曲数固定为 48 或 64。根据硬件,最大块数固定为 8、16 或 32。有两个不同的独立限制。两者都可以影响给定内核可以实现的有效占用率。

【讨论】:

  • 谢谢,如果可以的话,再问一个问题:active warp 是指当前正在由一个核心执行的 warp 还是仅仅意味着 resident,即它包含的块的资源已分配?
  • 一个warp永远不会被一个核心执行。 warp 中的每个线程在逻辑上在单个核心上执行。驻留和活动之间的区别是纯粹的语义——你实际上没有引用或提供使用“驻留线程”的链接,所以我不能告诉你我没读过的文本作者的意图是什么意思
猜你喜欢
  • 2018-08-18
  • 2011-07-03
  • 2011-04-06
  • 1970-01-01
  • 2019-04-02
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多