diff --git a/chapter_gemm_advanced/index.md b/chapter_gemm_advanced/index.md index 9fc46b52..d98eaf7b 100644 --- a/chapter_gemm_advanced/index.md +++ b/chapter_gemm_advanced/index.md @@ -906,4 +906,4 @@ In this B200 run, combining TMA, software pipelining, persistent scheduling, war 1. What happens if you set the initial `phase` to `0` for both the TMA and MMA `PipelineState` in Step 7? Draw the deadlock scenario. 2. With `cta_group=2` in Step 8, the TMA arrive byte count is `CTA_GROUP * (BLK_M*BLK_K + BLK_N*BLK_K) * F16_SIZE`. Why multiply by `CTA_GROUP` when each CTA loads its own data? -3. In Step 9, each consumer handles different M rows but the same B tile. Why is sharing B (not A) the right choice? +3. In Step 9, the two consumers extend the output tile along M: they handle different M rows but cover the same N columns. Why can they reuse B in this mapping? If they instead extended along N, which operand could be reused? diff --git a/zh/chapter_gemm_advanced/index.md b/zh/chapter_gemm_advanced/index.md index 23632f00..d1be68bd 100644 --- a/zh/chapter_gemm_advanced/index.md +++ b/zh/chapter_gemm_advanced/index.md @@ -906,4 +906,4 @@ def hgemm_v9(M, N, K): 1. 第 7 步中,如果 TMA 和 MMA 的 `PipelineState` 都将初始 `phase` 设为 `0`,会发生什么?画出 deadlock 过程。 2. 第 8 步使用 `cta_group=2` 时,TMA arrival byte count 为 `CTA_GROUP * (BLK_M*BLK_K + BLK_N*BLK_K) * F16_SIZE`。既然每个 CTA 分别加载自己的数据,为什么还要乘以 `CTA_GROUP`? -3. 第 9 步中,每个 consumer 处理不同的 M rows,但使用相同的 B tile。为什么应该共享 B,而不是 A? +3. 第 9 步让两个 consumers 沿 M 维扩展输出:它们处理不同的 M rows,但覆盖相同的 N columns。为什么这种映射可以复用 B?如果改为沿 N 维扩展,哪个操作数可以被复用?