## f32[64,256] 的行窗口 [16:32, :]:窗口内数值检查通过 # function jit(window)/window/mpmd_map [symbol 4, window.1]; image bundles [503, 529) { misc: vtrace 0x80000000 } # entry bundle: %window.1 = custom-call(%x_hbm.1) { s1: sld s6, [smem:0x1] } { s0: seq.s32 p0, s6, 0 } { s0: sadd.s32 s9, 32, s0 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:49:16-49:97 [dma_start; LLO 13] | chapter01/04_local_dma/03_pallas_f32_windows.py:49:16-49:104 [dma_wait; LLO 13] s1: simm.s32 s10, 0 ; # materialized constant .encoding { s1.y = lo(imm0) } } { s0: @p0 dma.simple [vmem:s10], [hbm:s9], length=32, dst_flag=[sflag:52] } { misc: @p0 vwait.ge [sflag:52], 32 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:49:16-49:104 .encoding { misc.value = imm2 } } { s0: sadd.s32 s13, 32, s1 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:50:16-50:97 [dma_start; LLO 26] | chapter01/04_local_dma/03_pallas_f32_windows.py:50:16-50:104 [dma_wait; LLO 26] misc: @p0 vsyncadd.s32 [sflag:52], -32 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:49:16-49:104 .encoding { misc.value = imm2 } } { s0: @p0 dma.simple [hbm:s13], [vmem:s10], length=32, dst_flag=[sflag:52] } { misc: @p0 vwait.ge [sflag:52], 32 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:50:16-50:104 .encoding { misc.value = imm2 } } # exit bundle: %window.1 = custom-call(%x_hbm.1) { misc: @p0 vsyncadd.s32 [sflag:52], -32 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:50:16-50:104 .encoding { misc.value = imm2 } } { s1: sld s20, [smem:0x0] } { s1: sld s21, [smem:0x1] } { s0: sand.u32 s24, 0xfff, s20 } { s0: sadd.s32 s22, 1, s21 ; s1: sshll.u32 s27, s24, 0x12 } { s0: sand.u32 s23, 0x1, s22 } # smod.u32 w/div 2 { s0: sand.u32 s25, 0x3, s23 } { s0: sshll.u32 s26, s25, 0x10 } { s0: sadd.s32 s28, 131072, s26 } { s0: sshrl.u32 s29, s28, 0x2 } { s0: sor.u32 s30, 0x2d, s29 } { s0: sor.u32 s2, s30, s27 } { misc: vsyncadd.remote.s32 [sflag:s2], 1 } { misc: vwait.ge [sflag:45], 1 ; .encoding { misc.value = imm2 } } { misc: vsyncadd.s32 [sflag:45], -1 ; .encoding { misc.value = imm2 } } { misc: cfence } { misc: vtrace 0x90000000 } # end function jit(window)/window/mpmd_map [symbol 4, window.1] ## f32[64,256] 的列窗口 [:, 128:256]:窗口内数值检查通过 # function jit(window)/window/mpmd_map [symbol 4, window.1]; image bundles [503, 530) { misc: vtrace 0x80000000 } # entry bundle: %window.1 = custom-call(%x_hbm.1) { s1: sld s6, [smem:0x1] } { s0: seq.s32 p0, s6, 0 } { s0: sadd.s32 s9, 8, s0 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:49:16-49:97 [dma_start; LLO 13] | chapter01/04_local_dma/03_pallas_f32_windows.py:49:16-49:104 [dma_wait; LLO 13] s1: simm.s32 s10, 0 ; # materialized constant .encoding { s1.y = lo(imm0) } } { s0: simm.s32 s11, 16 ; # materialized constant s1: simm.s32 s12, 8 } # materialized constant { s0: @p0 dma.strided [vmem:s10], [hbm:s9], length=64, dst_stride=s12, src_stride=s11, elements_per_stride=s12, dst_flag=[sflag:52] } # chapter01/04_local_dma/03_pallas_f32_windows.py:49:16-49:97 { misc: @p0 vwait.ge [sflag:52], 64 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:49:16-49:104 .encoding { misc.value = imm2 } } { s0: sadd.s32 s15, 8, s1 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:50:16-50:97 [dma_start; LLO 19] | chapter01/04_local_dma/03_pallas_f32_windows.py:50:16-50:104 [dma_wait; LLO 19] misc: @p0 vsyncadd.s32 [sflag:52], -64 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:49:16-49:104 .encoding { misc.value = imm2 } } { s0: @p0 dma.strided [hbm:s15], [vmem:s10], length=64, dst_stride=s11, src_stride=s12, elements_per_stride=s12, dst_flag=[sflag:52] } # chapter01/04_local_dma/03_pallas_f32_windows.py:50:16-50:97 { misc: @p0 vwait.ge [sflag:52], 64 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:50:16-50:104 .encoding { misc.value = imm2 } } # exit bundle: %window.1 = custom-call(%x_hbm.1) { misc: @p0 vsyncadd.s32 [sflag:52], -64 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:50:16-50:104 .encoding { misc.value = imm2 } } { s1: sld s20, [smem:0x0] } { s1: sld s21, [smem:0x1] } { s0: sand.u32 s24, 0xfff, s20 } { s0: sadd.s32 s22, 1, s21 ; s1: sshll.u32 s27, s24, 0x12 } { s0: sand.u32 s23, 0x1, s22 } # smod.u32 w/div 2 { s0: sand.u32 s25, 0x3, s23 } { s0: sshll.u32 s26, s25, 0x10 } { s0: sadd.s32 s28, 131072, s26 } { s0: sshrl.u32 s29, s28, 0x2 } { s0: sor.u32 s30, 0x2d, s29 } { s0: sor.u32 s2, s30, s27 } { misc: vsyncadd.remote.s32 [sflag:s2], 1 } { misc: vwait.ge [sflag:45], 1 ; .encoding { misc.value = imm2 } } { misc: vsyncadd.s32 [sflag:45], -1 ; .encoding { misc.value = imm2 } } { misc: cfence } { misc: vtrace 0x90000000 } # end function jit(window)/window/mpmd_map [symbol 4, window.1] ## f32[64,256] 的 9 行窗口 [8:17, :]:编译失败 INTERNAL: Mosaic failed to compile TPU kernel with MLIR module name `window` HLO name `window.1`: Slice sizes along tiled dimensions must be aligned to tiles. Failed to verify that the size at dimension 0 is divisible by the tile dimension 8. If it is, use tpu.assume_multiple to suppress this error.8, 128). ## f32[64,256] 的非对齐行窗口 [3:11, :]:编译失败 INTERNAL: Mosaic failed to compile TPU kernel with MLIR module name `window` HLO name `window.1`: Offsets along tiled dimensions must be aligned to tiles. Failed to verify that the index at dimension 0 is divisible by the tile dimension 8. If it is, use tpu.assume_multiple to suppress this error.8, 128). ## f32[64,128] 的 9 行窗口 [8:17, :]:窗口内数值检查通过 # function jit(window)/window/mpmd_map [symbol 4, window.1]; image bundles [503, 529) { misc: vtrace 0x80000000 } # entry bundle: %window.1 = custom-call(%x_hbm.1) { s1: sld s6, [smem:0x1] } { s0: seq.s32 p0, s6, 0 } { s0: sadd.s32 s9, 8, s0 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:49:16-49:97 [dma_start; LLO 13] | chapter01/04_local_dma/03_pallas_f32_windows.py:49:16-49:104 [dma_wait; LLO 13] s1: simm.s32 s10, 0 ; # materialized constant .encoding { s1.y = lo(imm0) } } { s0: @p0 dma.simple [vmem:s10], [hbm:s9], length=9, dst_flag=[sflag:52] ; .encoding { s0.length = lo(imm0) } } { misc: @p0 vwait.ge [sflag:52], 9 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:49:16-49:104 .encoding { misc.value = imm2 } } { s0: sadd.s32 s13, 8, s1 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:50:16-50:97 [dma_start; LLO 26] | chapter01/04_local_dma/03_pallas_f32_windows.py:50:16-50:104 [dma_wait; LLO 26] misc: @p0 vsyncadd.s32 [sflag:52], -9 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:49:16-49:104 .encoding { misc.value = imm2 } } { s0: @p0 dma.simple [hbm:s13], [vmem:s10], length=9, dst_flag=[sflag:52] ; .encoding { s0.length = lo(imm0) } } { misc: @p0 vwait.ge [sflag:52], 9 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:50:16-50:104 .encoding { misc.value = imm2 } } # exit bundle: %window.1 = custom-call(%x_hbm.1) { misc: @p0 vsyncadd.s32 [sflag:52], -9 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:50:16-50:104 .encoding { misc.value = imm2 } } { s1: sld s20, [smem:0x0] } { s1: sld s21, [smem:0x1] } { s0: sand.u32 s24, 0xfff, s20 } { s0: sadd.s32 s22, 1, s21 ; s1: sshll.u32 s27, s24, 0x12 } { s0: sand.u32 s23, 0x1, s22 } # smod.u32 w/div 2 { s0: sand.u32 s25, 0x3, s23 } { s0: sshll.u32 s26, s25, 0x10 } { s0: sadd.s32 s28, 131072, s26 } { s0: sshrl.u32 s29, s28, 0x2 } { s0: sor.u32 s30, 0x2d, s29 } { s0: sor.u32 s2, s30, s27 } { misc: vsyncadd.remote.s32 [sflag:s2], 1 } { misc: vwait.ge [sflag:45], 1 ; .encoding { misc.value = imm2 } } { misc: vsyncadd.s32 [sflag:45], -1 ; .encoding { misc.value = imm2 } } { misc: cfence } { misc: vtrace 0x90000000 } # end function jit(window)/window/mpmd_map [symbol 4, window.1] ## f32[64,128] 的非对齐行窗口 [3:11, :]:窗口内数值检查通过 # function jit(window)/window/mpmd_map [symbol 4, window.1]; image bundles [503, 529) { misc: vtrace 0x80000000 } # entry bundle: %window.1 = custom-call(%x_hbm.1) { s1: sld s6, [smem:0x1] } { s0: seq.s32 p0, s6, 0 } { s0: sadd.s32 s9, 3, s0 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:49:16-49:97 [dma_start; LLO 13] | chapter01/04_local_dma/03_pallas_f32_windows.py:49:16-49:104 [dma_wait; LLO 13] s1: simm.s32 s10, 0 ; # materialized constant .encoding { s1.y = lo(imm0) } } { s0: @p0 dma.simple [vmem:s10], [hbm:s9], length=8, dst_flag=[sflag:52] } { misc: @p0 vwait.ge [sflag:52], 8 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:49:16-49:104 .encoding { misc.value = imm2 } } { s0: sadd.s32 s13, 3, s1 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:50:16-50:97 [dma_start; LLO 26] | chapter01/04_local_dma/03_pallas_f32_windows.py:50:16-50:104 [dma_wait; LLO 26] misc: @p0 vsyncadd.s32 [sflag:52], -8 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:49:16-49:104 .encoding { misc.value = imm2 } } { s0: @p0 dma.simple [hbm:s13], [vmem:s10], length=8, dst_flag=[sflag:52] } { misc: @p0 vwait.ge [sflag:52], 8 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:50:16-50:104 .encoding { misc.value = imm2 } } # exit bundle: %window.1 = custom-call(%x_hbm.1) { misc: @p0 vsyncadd.s32 [sflag:52], -8 ; # chapter01/04_local_dma/03_pallas_f32_windows.py:50:16-50:104 .encoding { misc.value = imm2 } } { s1: sld s20, [smem:0x0] } { s1: sld s21, [smem:0x1] } { s0: sand.u32 s24, 0xfff, s20 } { s0: sadd.s32 s22, 1, s21 ; s1: sshll.u32 s27, s24, 0x12 } { s0: sand.u32 s23, 0x1, s22 } # smod.u32 w/div 2 { s0: sand.u32 s25, 0x3, s23 } { s0: sshll.u32 s26, s25, 0x10 } { s0: sadd.s32 s28, 131072, s26 } { s0: sshrl.u32 s29, s28, 0x2 } { s0: sor.u32 s30, 0x2d, s29 } { s0: sor.u32 s2, s30, s27 } { misc: vsyncadd.remote.s32 [sflag:s2], 1 } { misc: vwait.ge [sflag:45], 1 ; .encoding { misc.value = imm2 } } { misc: vsyncadd.s32 [sflag:45], -1 ; .encoding { misc.value = imm2 } } { misc: cfence } { misc: vtrace 0x90000000 } # end function jit(window)/window/mpmd_map [symbol 4, window.1]