【问题标题】:How Concurrent blocks can run a single GPU streaming multiprocessor?并发块如何运行单个 GPU 流式多处理器?
【发布时间】:2012-08-26 01:47:03
【问题描述】:

我在学习CUDA编程结构,学习后的感受是;在创建块和线程之后,每个块都分配给每个流式多处理器(例如,我正在使用 GForce 560Ti,它有 14 个流式多处理器,因此一次可以将 14 个块分配给所有流式多处理器)。但是当我浏览一些在线材料时,比如这个:

http://moss.csc.ncsu.edu/~mueller/cluster/nvidia/GPU+CUDA.pdf

已经提到可以在一个多处理器上同时运行多个块。我基本上对流式多处理器上的线程和块的执行感到非常困惑。我知道块的分配和线程的执行是绝对任意的,但我想块和线程的映射实际上是如何发生的,以便可以发生并发执行。

【问题讨论】:

    标签: cuda


    【解决方案1】:

    流式多处理器 (SM) 可以使用 硬件多线程 一次执行多个块,该过程类似于 Hypter-Threading

    CUDA C Programming Guide 在第 4.2 节中对此进行了如下描述:

    4.2 硬件多线程

    每个 warp 的执行上下文(程序计数器、寄存器等) 由一个多处理器处理在整个过程中保持在片上 经线的寿命。因此,从一个执行上下文切换 到另一个没有成本,并且在每个指令发出时间,一个经线 调度程序选择一个已准备好执行其下一个线程的warp 指令(经线的活动线程)并发出 对这些线程的指令。

    特别是,每个多处理器都有一组 32 位寄存器 在经纱之间进行分区,并且并行数据缓存或共享 在线程块之间划分的内存。

    可以驻留和处理的块和扭曲的数量 给定内核的多处理器上的一起取决于 内核使用的寄存器和共享内存的数量以及 多处理器上可用的寄存器和共享内存的数量。 还有最大驻留块数和最大 每个多处理器的驻留扭曲数。这些限制以及 多处理器上可用的寄存器和共享内存的数量 是设备计算能力的函数,并给出 在附录 F 中。如果没有足够的寄存器或共享内存 每个多处理器可用于处理至少一个块,内核 将无法启动。

    【讨论】:

    • 我在尝试回答 OP 时也稍早阅读了这部分,但我觉得它没有说服力。特别是,如果您有 8 个块,每个块有 4 个线程,会发生什么情况。它们能否形成一个扭曲,从而并行执行?
    • 每个块将有 1 个经线。每个 warp 将有 4 个活动线程和 28 个禁用线程。
    猜你喜欢
    • 2016-11-25
    • 2018-12-25
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多