SM内部对于block资源的分配

细化分析还是蛮重要的,这样才能细化优化,从而达到更好的优化效果


前言

SM内部对于BLOCK的分配有多方面维度


一、单个SM能支持的最大线程数

  • 每个 SM 有一个最大线程数限制。例如,在 H100 这种基于 Hopper 架构 的 GPU 中,单个 SM 可以支持最多 2048 个线程。
  • 每个 block 的线程数会占用 SM 中的线程资源。例如,如果你的 block 使用 256 个线程,则一个 SM 最多可以调度 2048 ÷ 256 = 8 个 block。

二、每个 SM 的共享内存

  • 每个 SM 具有一定量的 共享内存(shared memory)。在 H100 中,每个 SM 具有 164 KB 的共享内存可供分配给 block 使用。
  • 每个 block 使用的共享内存量会影响 SM 能调度多少个 block。如果某个 block 使用了 20 KB 的共享内存,理论上 SM 最多可以调度 164 KB ÷ 20 KB = 8 个 block。
    如果某个 block 使用了更多的共享内存,那么 SM 能调度的 block 数量就会减少。

三、寄存器数

  • 每个 SM 拥有一定数量的 寄存器,并且这些寄存器会在 block 间分配。H100 每个 SM 拥有 256 KB 的寄存器。
  • 每个线程使用的寄存器数量会决定 block 占用的寄存器资源。例如,如果每个线程使用 64 个寄存器,且每个 block 有 256 个线程,则每个 block 占用的寄存器为 256 × 64 = 16 KB。
    SM 会根据剩余的寄存器数量决定可以调度的 block 数量。

四、每个 SM 可以同时管理的最大 block 数

H100 每个 SM 可以同时管理的 block 数量上限为 32 个 block。这是一个固定的硬件限制。即使所有其他资源(如共享内存、线程和寄存器)都足够用,一个 SM 同时调度的 block 数最多也不能超过 32 个。

五、每个SM可以同时管理的最多warp数量

Warp 是实际执行的最小单元,每个 warp 包含 32 个线程。SM 通过调度 warp 来执行 block。
H100 的每个 SM 可以同时管理 64 个 warp。因此,block 中的线程数会影响 warp 的分配情况。假设一个 block 有 256 个线程,那么每个 block 使用的 warp 数为 256 ÷ 32 = 8 个 warp。如果 SM 的最大 warp 数为 64 个,那么 SM 最多可以管理64 ÷ 8 = 8 个 block。

六、调度和管理

应该区分一下调度和管理,
一个SM最多可以同时管理64个warp,可以同时调度4个warp。

七、warp管理

warp管理是一个广义的概念,它涵盖了如何创建、调度、执行和管理 Warps 的整个生命周期。

7.1. Warp 生成与分配

Warp 生成(Warp Creation):当一个线程块(Thread Block)被分配到一个 Streaming Multiprocessor (SM) 时,硬件会将线程块中的线程分成多个 Warp。每个 Warp 通常包含 32 个线程(在 NVIDIA 架构中)。这一步涉及将线程分组并创建相应的 Warp。
Warp 分配:一旦 Warp 被创建,它们会被分配到 Warp Pool 中等待执行,或者直接进入调度队列。这个过程涉及将 Warp 与 SM 上的资源(如寄存器、共享内存)进行绑定。

7.2. Warp Pool 和 Warp 调度

Warp Pool:Warp Pool 实际上是用于管理所有分配到 Streaming Multiprocessor (SM) 的 Warp,无论它们处于什么状态。它是一个动态的池子,负责管理这些 Warp 的状态和分配。这部分通常由硬件调度器来管理,确保 Warp Pool 中的 Warps 随时可以被调度。
Warp 调度(Warp Scheduling):每个 SM 内部有一个或多个 Warp 调度器,负责从 Warp Pool 中选择合适的 Warp 来执行。调度器依据 Warp 的状态(如是否等待数据或内存、是否有可执行指令等)来决定哪个 Warp 被优先执行。

7.3. Warp 上下文管理

寄存器上下文管理:每个 Warp 的线程都有各自的寄存器状态,Warp 管理需要维护这些寄存器的上下文(如程序计数器、寄存器值等),以便在 Warp 切换或等待时能够快速恢复。
上下文切换:当某个 Warp 需要等待(如等待内存访问完成)时,硬件可以进行上下文切换,将执行切换到另一个 Warp。这种切换在 GPU 中是非常快速的,因为 Warp 上下文(如寄存器、程序计数器)是硬件直接管理的。

7.4. Warp 执行与指令发射

指令发射(Instruction Issuance):一旦 Warp 被调度执行,硬件会从 Warp 中选择指令并将其发送到相应的执行单元(如整数单元、浮点单元等)。这是 Warp 管理的核心部分,确保 Warp 中的所有线程都执行相同的指令。
指令级并行(ILP, Instruction-Level Parallelism):在执行过程中,硬件可以动态分析 Warp 内的指令,尝试利用指令间的并行性(如并行执行不同的指令)。

7.5. Warp 的分支管理与收敛

分支发散管理(Branch Divergence Management):当 Warp 中的线程遇到条件分支时,可能会进入不同的控制流路径。Warp 管理中的分支发散单元负责跟踪每个线程的执行路径,并确保 Warp 中不同路径的线程都能正确执行。
分支收敛(Branch Convergence):当所有线程完成各自的分支执行后,Warp 管理需要将这些线程重新汇聚到同一条执行路径上,减少发散带来的执行单元浪费。

7.6. Warp 结束与资源回收

Warp 结束:当一个 Warp 中的所有线程都完成了它们的计算,Warp 管理器会将该 Warp 标记为完成,并释放它所占用的硬件资源(如寄存器、共享内存等)。
资源回收(Resource Reclamation):释放的资源会被重新分配给新的 Warp 或者用于已经等待的 Warp。硬件会自动管理这些资源的回收与再利用,确保 SM 资源得到最大化利用。


总结

单从warp层面来看,warp其实是体现了SIMT,单指令,多个线程来执行;
往warp里面看,不同的线程执行各自不同的数据,但都在一个warp里面,所以执行的是一条命令,所以,这里是体现了SIMD。

参考资源链接:[Realtek RTS5309 USB 3.0四合一读卡器控制器](https://wenku.csdn.net/doc/2h6zyq1jms?utm_source=wenku_answer2doc_content) 要设置Realtek RTS5309 USB 3.0读卡器以支持TF、SD、MMC和SM卡,首先需要仔细阅读并理解其数据手册。数据手册中包含了芯片的功能描述、模块图、引脚分配、电气特性和封装尺寸等关键信息,这些都是正确配置读卡器的基础。 在'BLOCK DIAGRAM'章节中,你可以了解到芯片内部各个功能模块如何相互连接,这对于理解整个数据传输路径至关重要。'PIN DESCRIPTION'和'PIN ASSIGNMENT'章节将会提供关于如何连接各个引脚的具体信息,这些信息对于确保硬件设计的正确性是不可或缺的。电气特性部分提供了芯片的工作电压、电流需求等信息,这些对于确保芯片能够稳定工作并与其他硬件组件兼容非常关键。 在配置时,需要确保为芯片提供正确的电源和时钟信号,并且根据'BLOCK DIAGRAM'将USB接口与控制器逻辑正确连接,以实现USB 3.0高速接口的数据传输。还需要将存储卡接口与相应的卡槽连接,以支持不同类型的存储卡。 最后,确保检查'ORDERING INFORMATION'部分,以便订购正确的芯片版本和封装,确保与你的硬件设计相匹配。在实际应用中,你可能还需要使用软件驱动程序来管理芯片与主机系统之间的通信,驱动程序应与操作系统兼容并能够支持所有目标存储卡格式。 为了更深入理解Realtek RTS5309 USB 3.0读卡器控制器的配置和应用,建议参考《Realtek RTS5309 USB 3.0四合一读卡器控制器》这份资料。这份数据手册的详细内容将帮助你解决配置过程中的各种问题,并为未来可能的技术挑战做好准备。 参考资源链接:[Realtek RTS5309 USB 3.0四合一读卡器控制器](https://wenku.csdn.net/doc/2h6zyq1jms?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值