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

在看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,正是采用第一种策略。
相关推荐
爱吃巧克力的程序媛2 小时前
main.cpp注册 C++ 类到 QML 元对象系统
c++·qt
YYYing.2 小时前
【C++进阶系列 (二)】关于线程堆栈的那些事——函数调用过程
开发语言·c++·函数·线程堆栈
啵啵啵鱼2 小时前
DS-顺序表
java·数据结构·笔记·后端·链表·obsidian
键盘会跳舞3 小时前
【C++多线程】死锁诊断工具实战:从 Windows 到 Linux 的全链路排查
linux·c++·windows·死锁
xian_wwq3 小时前
【学习笔记】深度认知系列-第13讲AI Agent时代到来——从“回答问题”到“执行任务”
人工智能·笔记·学习
程序猿炎义3 小时前
【llm-algo-leetcode学习笔记】量化优化手段
笔记·学习
HugoStudio_SWAN3 小时前
洛谷 P10719 \[GESP202406 五级] 黑白格——暴力美学与图像处理的最小外接矩形
c++·图像处理·人工智能·学习·程序人生·算法·目标跟踪
jimy13 小时前
C++ 的 “移动语义”——Move Semantics
开发语言·c++
xian_wwq4 小时前
【学习笔记】深度认知系列- 第15讲 AI算力战争——GPU、光通信与太空数据中心
笔记·学习
雨田言炎4 小时前
2026/9/5 C复习笔记(一)
c语言·笔记