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

在看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,正是采用第一种策略。
相关推荐
yyds_yyd_1008633 分钟前
1464. 数组中两元素的最大乘积(2026.07.27)
数据结构·c++·算法·leetcode
库克克3 小时前
【C++】set 与multiset
开发语言·c++
摇滚侠3 小时前
《RocketMQ 官网》阅读笔记 RocketMQ 消息队列 MessageQueue 消息 Messagege
笔记·rocketmq
Mortalbreeze3 小时前
深入 Linux Socket 编程:端口号、网络字节序与 struct sockaddr 详解
linux·服务器·网络·c++
Ztt6666666663 小时前
【无标题】
经验分享·笔记·其他·百度·微信公众平台
依然范特东4 小时前
强化学习笔记4--TD算法
笔记
AOwhisky4 小时前
Linux(CentOS)系统管理入门笔记(第十五期)——文件系统与存储管理(上篇):设备识别、挂载与文件查找
linux·运维·笔记·centos·文件系统
繁星蓝雨5 小时前
C++设计原理——异常处理
java·c++·异常处理·noexcept·throw·try catch
Kurisu_红莉栖5 小时前
关于相关问题的自我回答
c++
hansang_IR5 小时前
【题解】[AGC020E] Encoding Subsets
c++·算法·dp