【问题标题】:Determining number of warps allowed in CUDA SM确定 CUDA SM 中允许的扭曲数
【发布时间】:2013-05-21 11:48:57
【问题描述】:

因此,如果流式多处理器可以允许最多 X 个线程,而 SM 中的每个块允许 Y 个线程,那么我们可以在一个块中拥有多少个 warp,我们可以在一个 SM 中拥有多少个 warp?

这是我对这个问题的看法:

(1) 一个 warp 由 32 个线程组成。在一个块中我们可以有 Y/32,对吧?

(2) 就每个 SM 的扭曲数而言,我们不能超过 SM 中的最大线程数 X,所以我们可以有 X/32,对吧?我希望有人能证实这些计算。

【问题讨论】:

    标签: cuda


    【解决方案1】:

    (1) 是的,如果需要四舍五入(即如果每个块的线程数 Y 不能被 32 整除)

    (2) 是的,这是对可能处于活动状态的经线数量的一个限制。请记住,SM 调度程序通过调度块首先 工作。将被调度的块数是可用资源(寄存器、共享内存、线程等)的函数。只有当有足够的可用资源来支持它的需要时,才会调度一个块。例如,如果我每个块有 1024 个线程,我最多可以在 SM 上调度 1 个块,因为每个 SM 1536 个线程的限制(此处以 CC 2.0 为例)阻止了 2 个块的调度。因此,在这种情况下,即使您的 X/32 数字预测最多 48 条经线,也只会安排 1024/32 = 32 条经线。 (以CC 2.0为例,每块1024个线程的块结构)。

    【讨论】:

    • 要明确:这意味着每个 SM 的(例如 64 个)warp 限制隐含在每个 SM 的(例如 2048 个)线程限制中,并且不是必须考虑的单独限制分开?
    • 我之所以问,是因为 Wikipedia (en.wikipedia.org/wiki/CUDA) 有一个表格,其中有一个单独的行用于“每个多处理器的最大驻留扭曲数”,这看起来像一个单独的限制,但始终与“最大每个多处理器的驻留线程”。这令人困惑。
    • 是的,每个 SM 64 经线的限制是由每个 SM 2048 个线程的限制所暗示的。我认为这涵盖了最明智的讨论。想想奇怪的情况,如果每个块有 65 个线程,有人可能天真地认为每个 SM 的线程限制意味着每个 SM 最多 31 个块,但实际上这些 65 个线程的线程块每个包含 3 个扭曲,所以最大值将是 21 个线程块,仅考虑这两个限制。
    猜你喜欢
    • 2014-09-18
    • 2013-02-16
    • 2011-08-08
    • 2014-07-09
    • 2014-12-06
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    相关资源
    最近更新 更多