专栏名称: GiantPandaLLM
专注于机器学习、深度学习、计算机视觉、图像处理等多个方向技术分享。团队由一群热爱技术且热衷于分享的小伙伴组成。我们坚持原创,每天一到两篇原创技术分享。希望在传播知识、分享知识的同时能够启发你,大家一起共同进步(・ω<)☆
目录
相关文章推荐
今天看啥  ›  专栏  ›  GiantPandaLLM

[Hopper 架构特性学习笔记 Part1] Distributed Shared Memory

GiantPandaLLM  · 公众号  · 3D  · 2024-08-15 22:47
    

主要观点总结

本文主要介绍了NVIDIA Hopper架构的新特性——分布式共享内存(Distributed Shared Memory)和线程块簇(Thread Block Clusters),以及在CUDA上如何使用分布式共享内存。文章还讨论了在一些特定场景下,如GEMM SplitK类(包括Flash Decoding)算子,使用分布式共享内存和线程块簇进行优化的情况。

关键观点总结

关键观点1: NVIDIA Hopper架构的分布式共享内存和线程块簇介绍

Hopper架构通过引入线程块簇来解决单个线程块处理数据规模有限的问题,提供了更大粒度的线程组。Distributed Shared Memory是线程块簇的一个重要特性,它允许不同线程块访问各自共享内存的集合,提高了处理大规模数据的能力。

关键观点2: 如何在CUDA中使用Distributed Shared Memory

在CUDA中,使用Distributed Shared Memory需要通过Cooperative Groups模块提供的接口来实现。包括获取当前cluster、获取其他Thread Block的Shared Memory地址、Cluster级别的同步等关键操作。

关键观点3: Thread Block Cluster Kernel的启动方式

由于传统的Kernel Launch方式无法传递Cluster Size这个参数,所以Thread Block Cluster Kernel的Launch方式需要使用cudaLaunchKernelEx这个函数,通过设置cudaLaunchConfig_t以及cudaLaunchAttribute来设置grid、block以及cluster配置。

关键观点4: 同步优化

为了减少cluster.sync()的同步开销,CUDA提供了拆分cluster.sync()的能力,通过arrival_token和barrier_wait两个接口实现同步点与等待点的设置,从而在等待期间插入与Shared Memory无关的操作,提升性能。

关键观点5: 总结和示例应用

文章总结了Hopper架构的Distributed Shared Memory和Thread Block Clusters的使用场景和优势,并以Flash Decoding Kernel为例,说明了如何使用这些特性进行优化。


免责声明

免责声明:本文内容摘要由平台算法生成,仅为信息导航参考,不代表原文立场或观点。 原文内容版权归原作者所有,如您为原作者并希望删除该摘要或链接,请通过 【版权申诉通道】联系我们处理。

原文地址:访问原文地址
总结与预览地址:访问总结与预览
推荐产品:   推荐产品
文章地址: 访问文章快照