首尾元素相同的间隔循环策略

在看Flash Attention4的过程中,发现一个很有趣的细节。以往在写输出数组等方式时,会面临一个元素和逗号间接输出的情况,且第一个元素前和第二个元素后都不包含逗号,如[3, 4, 5, 6, 7],写过程序的应该都见过这种处理方式,一种手段是先输出一个元素,然后循环输出逗号+元素,另一种手段是先循环输出元素+逗号,然后输出输出最后一个元素。

然后我就在内联汇编里看到了如下代码:

cpp 复制代码
f"@leader_thread tcgen05.mma.cta_group::1.kind::f16 [tmem_acc], [tmem_a], smem_desc_b, idesc, {pred_str};\n\t"
            + "".join(
                (
                    # f"add.u32 tmem_a, tmem_a, {hex(offset_a_diff[k - 1])};\n\t"
                    f"add.u32 smem_desc_b_lo, smem_desc_b_lo, {hex(offset_b_diff[k - 1])};\n\t"
                    f"mov.b64 smem_desc_b, {{smem_desc_b_lo, smem_desc_b_hi}};\n\t"
                    # f"@leader_thread tcgen05.mma.cta_group::1.kind::f16 [tmem_acc], [tmem_a], smem_desc_b, idesc, 1;\n\t"
                    f"@leader_thread tcgen05.mma.cta_group::1.kind::f16 [tmem_acc], [tmem_a + {hex(offset_a[k])}], smem_desc_b, idesc, 1;\n\t"
                )
                for k in range(1, cute.size(tCrA.shape[2]) if cutlass.const_expr(mbar_ptr is None) else cute.size(tCrA.shape[2]) // 4 * 3)
            )
            ```
注意看第一个@leader_thread和随后的循环中的@leader_thread,正是采用第一种策略。
相关推荐
努力努力再努力wz7 分钟前
【高性能网络库与HTTP Server系列】:基于主从 Reactor 模型实现高性能 C++ 网络库与 HTTP Server
开发语言·网络·数据结构·数据库·c++·网络协议·http
bmy-happy9 分钟前
网安专业课程笔记sale
笔记
Robot_Nav22 分钟前
C++ 面试常问问题汇总:基础语法、面向对象、STL、多线程与设计模式
c++·设计模式·面试
盐焗鹌鹑蛋1 小时前
【C++】二叉搜索树
c++
哎呦,帅小伙哦1 小时前
C++工程实战: 预处理宏、宏重定义避坑、LOG_TAG业务实践与__COUNTER__深度解析
c++
浩瀚地学1 小时前
【Java基础复习】IO流(二)
java·开发语言·经验分享·笔记·学习
IVVi0jToe1 小时前
高效C++线程池设计与实现
java·c++·安全
^yi1 小时前
【C++】内存管理
开发语言·c++
云栖梦泽2 小时前
从 IMX415 摄像头驱动理解 Media Controller 框架
linux·开发语言·c++·嵌入式硬件
C++ 老炮儿的技术栈2 小时前
MFC 自定义纯色居中文字进度条控件
c语言·数据库·c++·windows·算法·c·visual studio