Skip to content

Do not generate 2D block loads with sizes > the block size #4092

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
alexbaden opened this issue May 5, 2025 · 1 comment
Open

Do not generate 2D block loads with sizes > the block size #4092

alexbaden opened this issue May 5, 2025 · 1 comment

Comments

@alexbaden
Copy link
Contributor

Currently we attempt to generate the largest 2D block load given hardware constraints. If the block size is smaller than the constrained load size, we will load more data than is required in each 2D block load invocation. This seems wasteful and makes it difficult to generate the Load -> DPAS mapping using layouts.

@alexbaden
Copy link
Contributor Author

Here's a specific instance where we seem to be generating tiles that are too big:

#mma = #triton_intel_gpu.dpas<{repeatCount = 8, systolicDepth = 8, executionSize = 16, opsPerChan = 1, threadsPerWarp = 16, warpsPerCTA = [8, 4], repCluster = [4, 2], A = [32, 8], B = [8, 32], C = [32, 32]}>
module attributes {triton_intel_gpu.min_sg_size = 16 : i32, triton_intel_gpu.support_bf16_conversion, triton_intel_gpu.support_dpas, triton_intel_gpu.support_sg_2d_block, triton_intel_gpu.target_arch = "spir64", "ttg.num-ctas" = 1 : i32, "ttg.num-warps" = 32 : i32, ttg.target = "xpu", "ttg.threads-per-warp" = 16 : i32} {
  tt.func public @block_load_dpas_layout(%arg0: !tt.ptr<f32> {tt.divisibility = 16 : i32}, %arg1: !tt.ptr<f32> {tt.divisibility = 16 : i32}, %arg2: !tt.ptr<f32> {tt.divisibility = 16 : i32}, %arg3: !tt.ptr<f32> {tt.divisibility = 16 : i32}) attributes {noinline = false} {
    %c0_i32 = arith.constant 0 : i32
    %c1_i64 = arith.constant 1 : i64
    %c64_i64 = arith.constant 64 : i64
    %c16_i64 = arith.constant 16 : i64
    %0 = tt.get_program_id x : i32
    %1 = tt.make_tensor_ptr %arg0, [%c16_i64, %c64_i64], [%c64_i64, %c1_i64], [%0, %c0_i32] {order = array<i32: 1, 0>} : <tensor<16x64xf32, #ttg.dot_op<{opIdx = 0, parent = #mma, kWidth = 1}>>>
    %2 = tt.load %1 {boundaryCheck = array<i32: 0, 1>, triton_intel_gpu.block_io = "row_major"} : !tt.ptr<tensor<16x64xf32, #ttg.dot_op<{opIdx = 0, parent = #mma, kWidth = 1}>>>
    %3 = tt.make_tensor_ptr %arg1, [%c16_i64, %c64_i64], [%c64_i64, %c1_i64], [%0, %c0_i32] {order = array<i32: 1, 0>} : <tensor<16x64xf32, #ttg.dot_op<{opIdx = 0, parent = #mma, kWidth = 1}>>>
    tt.store %3, %2 {boundaryCheck = array<i32: 0, 1>} : !tt.ptr<tensor<16x64xf32, #ttg.dot_op<{opIdx = 0, parent = #mma, kWidth = 1}>>>
    %4 = tt.make_tensor_ptr %arg2, [%c64_i64, %c16_i64], [%c16_i64, %c1_i64], [%c0_i32, %0] {order = array<i32: 1, 0>} : <tensor<64x16xf32, #ttg.dot_op<{opIdx = 1, parent = #mma, kWidth = 1}>>>
    %5 = tt.load %4 {boundaryCheck = array<i32: 0, 1>, triton_intel_gpu.block_io = "row_major"} : !tt.ptr<tensor<64x16xf32, #ttg.dot_op<{opIdx = 1, parent = #mma, kWidth = 1}>>>
    %6 = tt.make_tensor_ptr %arg3, [%c64_i64, %c16_i64], [%c16_i64, %c1_i64], [%c0_i32, %0] {order = array<i32: 1, 0>} : <tensor<64x16xf32, #ttg.dot_op<{opIdx = 1, parent = #mma, kWidth = 1}>>>
    tt.store %6, %5 {boundaryCheck = array<i32: 0, 1>} : !tt.ptr<tensor<64x16xf32, #ttg.dot_op<{opIdx = 1, parent = #mma, kWidth = 1}>>>
    tt.return
  }
}

The block size here is 16x64. When we lower the ttgir to LLVM with 2D Block loads we get the following loads:

A matrix: intel_sub_group_2d_block_read_32b_32r8x2c
B matrix: intel_sub_group_2d_block_read_32b_32r16x1c

These are 32x32 loads - but the block size outer dim is 16. If we dump the DPAS layout using

./build/cmake.linux-x86_64-cpython-3.10/bin/triton-tensor-layout -l "#ttg.dot_op<{opIdx = 0, parent = #triton_intel_gpu.dpas<{repeatCount = 8, systolicDepth = 8, executionSize = 16, opsPerChan = 1, threadsPerWarp = 16, warpsPerCTA = [8, 4], repCluster = [4, 2], A = [32, 8], B = [8, 32], C = [32, 32]}>, kWidth = 1}>" -t "tensor<16x64xf32>" -use-hw-view  

then we see that the rows 16-32 are never used

Print layout attribute: #ttg.dot_op<{opIdx = 0, parent = #triton_intel_gpu.dpas<{repeatCount = 8, systolicDepth = 8, executionSize = 16, opsPerChan = 1, threadsPerWarp = 16, warpsPerCTA = [8, 4], repCluster = [4, 2], A = [32, 8], B = [8, 32], C = [32, 32]}>, kWidth = 1}>
Warp0:
( 0, 0), ( 0, 1), ( 0, 2), ( 0, 3), ( 0, 4), ( 0, 5), ( 0, 6), ( 0, 7), ( 1, 0), ( 1, 1), ( 1, 2), ( 1, 3), ( 1, 4), ( 1, 5), ( 1, 6), ( 1, 7)
( 2, 0), ( 2, 1), ( 2, 2), ( 2, 3), ( 2, 4), ( 2, 5), ( 2, 6), ( 2, 7), ( 3, 0), ( 3, 1), ( 3, 2), ( 3, 3), ( 3, 4), ( 3, 5), ( 3, 6), ( 3, 7)
( 4, 0), ( 4, 1), ( 4, 2), ( 4, 3), ( 4, 4), ( 4, 5), ( 4, 6), ( 4, 7), ( 5, 0), ( 5, 1), ( 5, 2), ( 5, 3), ( 5, 4), ( 5, 5), ( 5, 6), ( 5, 7)
( 6, 0), ( 6, 1), ( 6, 2), ( 6, 3), ( 6, 4), ( 6, 5), ( 6, 6), ( 6, 7), ( 7, 0), ( 7, 1), ( 7, 2), ( 7, 3), ( 7, 4), ( 7, 5), ( 7, 6), ( 7, 7)
( 8, 0), ( 8, 1), ( 8, 2), ( 8, 3), ( 8, 4), ( 8, 5), ( 8, 6), ( 8, 7), ( 9, 0), ( 9, 1), ( 9, 2), ( 9, 3), ( 9, 4), ( 9, 5), ( 9, 6), ( 9, 7)
(10, 0), (10, 1), (10, 2), (10, 3), (10, 4), (10, 5), (10, 6), (10, 7), (11, 0), (11, 1), (11, 2), (11, 3), (11, 4), (11, 5), (11, 6), (11, 7)
(12, 0), (12, 1), (12, 2), (12, 3), (12, 4), (12, 5), (12, 6), (12, 7), (13, 0), (13, 1), (13, 2), (13, 3), (13, 4), (13, 5), (13, 6), (13, 7)
(14, 0), (14, 1), (14, 2), (14, 3), (14, 4), (14, 5), (14, 6), (14, 7), (15, 0), (15, 1), (15, 2), (15, 3), (15, 4), (15, 5), (15, 6), (15, 7)
( 0, 0), ( 0, 1), ( 0, 2), ( 0, 3), ( 0, 4), ( 0, 5), ( 0, 6), ( 0, 7), ( 1, 0), ( 1, 1), ( 1, 2), ( 1, 3), ( 1, 4), ( 1, 5), ( 1, 6), ( 1, 7)
( 2, 0), ( 2, 1), ( 2, 2), ( 2, 3), ( 2, 4), ( 2, 5), ( 2, 6), ( 2, 7), ( 3, 0), ( 3, 1), ( 3, 2), ( 3, 3), ( 3, 4), ( 3, 5), ( 3, 6), ( 3, 7)
( 4, 0), ( 4, 1), ( 4, 2), ( 4, 3), ( 4, 4), ( 4, 5), ( 4, 6), ( 4, 7), ( 5, 0), ( 5, 1), ( 5, 2), ( 5, 3), ( 5, 4), ( 5, 5), ( 5, 6), ( 5, 7)
( 6, 0), ( 6, 1), ( 6, 2), ( 6, 3), ( 6, 4), ( 6, 5), ( 6, 6), ( 6, 7), ( 7, 0), ( 7, 1), ( 7, 2), ( 7, 3), ( 7, 4), ( 7, 5), ( 7, 6), ( 7, 7)
( 8, 0), ( 8, 1), ( 8, 2), ( 8, 3), ( 8, 4), ( 8, 5), ( 8, 6), ( 8, 7), ( 9, 0), ( 9, 1), ( 9, 2), ( 9, 3), ( 9, 4), ( 9, 5), ( 9, 6), ( 9, 7)
(10, 0), (10, 1), (10, 2), (10, 3), (10, 4), (10, 5), (10, 6), (10, 7), (11, 0), (11, 1), (11, 2), (11, 3), (11, 4), (11, 5), (11, 6), (11, 7)
(12, 0), (12, 1), (12, 2), (12, 3), (12, 4), (12, 5), (12, 6), (12, 7), (13, 0), (13, 1), (13, 2), (13, 3), (13, 4), (13, 5), (13, 6), (13, 7)
(14, 0), (14, 1), (14, 2), (14, 3), (14, 4), (14, 5), (14, 6), (14, 7), (15, 0), (15, 1), (15, 2), (15, 3), (15, 4), (15, 5), (15, 6), (15, 7)
( 0, 8), ( 0, 9), ( 0,10), ( 0,11), ( 0,12), ( 0,13), ( 0,14), ( 0,15), ( 1, 8), ( 1, 9), ( 1,10), ( 1,11), ( 1,12), ( 1,13), ( 1,14), ( 1,15)
( 2, 8), ( 2, 9), ( 2,10), ( 2,11), ( 2,12), ( 2,13), ( 2,14), ( 2,15), ( 3, 8), ( 3, 9), ( 3,10), ( 3,11), ( 3,12), ( 3,13), ( 3,14), ( 3,15)
( 4, 8), ( 4, 9), ( 4,10), ( 4,11), ( 4,12), ( 4,13), ( 4,14), ( 4,15), ( 5, 8), ( 5, 9), ( 5,10), ( 5,11), ( 5,12), ( 5,13), ( 5,14), ( 5,15)
( 6, 8), ( 6, 9), ( 6,10), ( 6,11), ( 6,12), ( 6,13), ( 6,14), ( 6,15), ( 7, 8), ( 7, 9), ( 7,10), ( 7,11), ( 7,12), ( 7,13), ( 7,14), ( 7,15)
( 8, 8), ( 8, 9), ( 8,10), ( 8,11), ( 8,12), ( 8,13), ( 8,14), ( 8,15), ( 9, 8), ( 9, 9), ( 9,10), ( 9,11), ( 9,12), ( 9,13), ( 9,14), ( 9,15)
(10, 8), (10, 9), (10,10), (10,11), (10,12), (10,13), (10,14), (10,15), (11, 8), (11, 9), (11,10), (11,11), (11,12), (11,13), (11,14), (11,15)
(12, 8), (12, 9), (12,10), (12,11), (12,12), (12,13), (12,14), (12,15), (13, 8), (13, 9), (13,10), (13,11), (13,12), (13,13), (13,14), (13,15)
(14, 8), (14, 9), (14,10), (14,11), (14,12), (14,13), (14,14), (14,15), (15, 8), (15, 9), (15,10), (15,11), (15,12), (15,13), (15,14), (15,15)
( 0, 8), ( 0, 9), ( 0,10), ( 0,11), ( 0,12), ( 0,13), ( 0,14), ( 0,15), ( 1, 8), ( 1, 9), ( 1,10), ( 1,11), ( 1,12), ( 1,13), ( 1,14), ( 1,15)
( 2, 8), ( 2, 9), ( 2,10), ( 2,11), ( 2,12), ( 2,13), ( 2,14), ( 2,15), ( 3, 8), ( 3, 9), ( 3,10), ( 3,11), ( 3,12), ( 3,13), ( 3,14), ( 3,15)
( 4, 8), ( 4, 9), ( 4,10), ( 4,11), ( 4,12), ( 4,13), ( 4,14), ( 4,15), ( 5, 8), ( 5, 9), ( 5,10), ( 5,11), ( 5,12), ( 5,13), ( 5,14), ( 5,15)
( 6, 8), ( 6, 9), ( 6,10), ( 6,11), ( 6,12), ( 6,13), ( 6,14), ( 6,15), ( 7, 8), ( 7, 9), ( 7,10), ( 7,11), ( 7,12), ( 7,13), ( 7,14), ( 7,15)
( 8, 8), ( 8, 9), ( 8,10), ( 8,11), ( 8,12), ( 8,13), ( 8,14), ( 8,15), ( 9, 8), ( 9, 9), ( 9,10), ( 9,11), ( 9,12), ( 9,13), ( 9,14), ( 9,15)
(10, 8), (10, 9), (10,10), (10,11), (10,12), (10,13), (10,14), (10,15), (11, 8), (11, 9), (11,10), (11,11), (11,12), (11,13), (11,14), (11,15)
(12, 8), (12, 9), (12,10), (12,11), (12,12), (12,13), (12,14), (12,15), (13, 8), (13, 9), (13,10), (13,11), (13,12), (13,13), (13,14), (13,15)
(14, 8), (14, 9), (14,10), (14,11), (14,12), (14,13), (14,14), (14,15), (15, 8), (15, 9), (15,10), (15,11), (15,12), (15,13), (15,14), (15,15)
( 0,16), ( 0,17), ( 0,18), ( 0,19), ( 0,20), ( 0,21), ( 0,22), ( 0,23), ( 1,16), ( 1,17), ( 1,18), ( 1,19), ( 1,20), ( 1,21), ( 1,22), ( 1,23)
( 2,16), ( 2,17), ( 2,18), ( 2,19), ( 2,20), ( 2,21), ( 2,22), ( 2,23), ( 3,16), ( 3,17), ( 3,18), ( 3,19), ( 3,20), ( 3,21), ( 3,22), ( 3,23)
( 4,16), ( 4,17), ( 4,18), ( 4,19), ( 4,20), ( 4,21), ( 4,22), ( 4,23), ( 5,16), ( 5,17), ( 5,18), ( 5,19), ( 5,20), ( 5,21), ( 5,22), ( 5,23)
( 6,16), ( 6,17), ( 6,18), ( 6,19), ( 6,20), ( 6,21), ( 6,22), ( 6,23), ( 7,16), ( 7,17), ( 7,18), ( 7,19), ( 7,20), ( 7,21), ( 7,22), ( 7,23)
( 8,16), ( 8,17), ( 8,18), ( 8,19), ( 8,20), ( 8,21), ( 8,22), ( 8,23), ( 9,16), ( 9,17), ( 9,18), ( 9,19), ( 9,20), ( 9,21), ( 9,22), ( 9,23)
(10,16), (10,17), (10,18), (10,19), (10,20), (10,21), (10,22), (10,23), (11,16), (11,17), (11,18), (11,19), (11,20), (11,21), (11,22), (11,23)
(12,16), (12,17), (12,18), (12,19), (12,20), (12,21), (12,22), (12,23), (13,16), (13,17), (13,18), (13,19), (13,20), (13,21), (13,22), (13,23)
(14,16), (14,17), (14,18), (14,19), (14,20), (14,21), (14,22), (14,23), (15,16), (15,17), (15,18), (15,19), (15,20), (15,21), (15,22), (15,23)
( 0,16), ( 0,17), ( 0,18), ( 0,19), ( 0,20), ( 0,21), ( 0,22), ( 0,23), ( 1,16), ( 1,17), ( 1,18), ( 1,19), ( 1,20), ( 1,21), ( 1,22), ( 1,23)
( 2,16), ( 2,17), ( 2,18), ( 2,19), ( 2,20), ( 2,21), ( 2,22), ( 2,23), ( 3,16), ( 3,17), ( 3,18), ( 3,19), ( 3,20), ( 3,21), ( 3,22), ( 3,23)
( 4,16), ( 4,17), ( 4,18), ( 4,19), ( 4,20), ( 4,21), ( 4,22), ( 4,23), ( 5,16), ( 5,17), ( 5,18), ( 5,19), ( 5,20), ( 5,21), ( 5,22), ( 5,23)
( 6,16), ( 6,17), ( 6,18), ( 6,19), ( 6,20), ( 6,21), ( 6,22), ( 6,23), ( 7,16), ( 7,17), ( 7,18), ( 7,19), ( 7,20), ( 7,21), ( 7,22), ( 7,23)
( 8,16), ( 8,17), ( 8,18), ( 8,19), ( 8,20), ( 8,21), ( 8,22), ( 8,23), ( 9,16), ( 9,17), ( 9,18), ( 9,19), ( 9,20), ( 9,21), ( 9,22), ( 9,23)
(10,16), (10,17), (10,18), (10,19), (10,20), (10,21), (10,22), (10,23), (11,16), (11,17), (11,18), (11,19), (11,20), (11,21), (11,22), (11,23)
(12,16), (12,17), (12,18), (12,19), (12,20), (12,21), (12,22), (12,23), (13,16), (13,17), (13,18), (13,19), (13,20), (13,21), (13,22), (13,23)
(14,16), (14,17), (14,18), (14,19), (14,20), (14,21), (14,22), (14,23), (15,16), (15,17), (15,18), (15,19), (15,20), (15,21), (15,22), (15,23)
( 0,24), ( 0,25), ( 0,26), ( 0,27), ( 0,28), ( 0,29), ( 0,30), ( 0,31), ( 1,24), ( 1,25), ( 1,26), ( 1,27), ( 1,28), ( 1,29), ( 1,30), ( 1,31)
( 2,24), ( 2,25), ( 2,26), ( 2,27), ( 2,28), ( 2,29), ( 2,30), ( 2,31), ( 3,24), ( 3,25), ( 3,26), ( 3,27), ( 3,28), ( 3,29), ( 3,30), ( 3,31)
( 4,24), ( 4,25), ( 4,26), ( 4,27), ( 4,28), ( 4,29), ( 4,30), ( 4,31), ( 5,24), ( 5,25), ( 5,26), ( 5,27), ( 5,28), ( 5,29), ( 5,30), ( 5,31)
( 6,24), ( 6,25), ( 6,26), ( 6,27), ( 6,28), ( 6,29), ( 6,30), ( 6,31), ( 7,24), ( 7,25), ( 7,26), ( 7,27), ( 7,28), ( 7,29), ( 7,30), ( 7,31)
( 8,24), ( 8,25), ( 8,26), ( 8,27), ( 8,28), ( 8,29), ( 8,30), ( 8,31), ( 9,24), ( 9,25), ( 9,26), ( 9,27), ( 9,28), ( 9,29), ( 9,30), ( 9,31)
(10,24), (10,25), (10,26), (10,27), (10,28), (10,29), (10,30), (10,31), (11,24), (11,25), (11,26), (11,27), (11,28), (11,29), (11,30), (11,31)
(12,24), (12,25), (12,26), (12,27), (12,28), (12,29), (12,30), (12,31), (13,24), (13,25), (13,26), (13,27), (13,28), (13,29), (13,30), (13,31)
(14,24), (14,25), (14,26), (14,27), (14,28), (14,29), (14,30), (14,31), (15,24), (15,25), (15,26), (15,27), (15,28), (15,29), (15,30), (15,31)
( 0,24), ( 0,25), ( 0,26), ( 0,27), ( 0,28), ( 0,29), ( 0,30), ( 0,31), ( 1,24), ( 1,25), ( 1,26), ( 1,27), ( 1,28), ( 1,29), ( 1,30), ( 1,31)
( 2,24), ( 2,25), ( 2,26), ( 2,27), ( 2,28), ( 2,29), ( 2,30), ( 2,31), ( 3,24), ( 3,25), ( 3,26), ( 3,27), ( 3,28), ( 3,29), ( 3,30), ( 3,31)
( 4,24), ( 4,25), ( 4,26), ( 4,27), ( 4,28), ( 4,29), ( 4,30), ( 4,31), ( 5,24), ( 5,25), ( 5,26), ( 5,27), ( 5,28), ( 5,29), ( 5,30), ( 5,31)
( 6,24), ( 6,25), ( 6,26), ( 6,27), ( 6,28), ( 6,29), ( 6,30), ( 6,31), ( 7,24), ( 7,25), ( 7,26), ( 7,27), ( 7,28), ( 7,29), ( 7,30), ( 7,31)
( 8,24), ( 8,25), ( 8,26), ( 8,27), ( 8,28), ( 8,29), ( 8,30), ( 8,31), ( 9,24), ( 9,25), ( 9,26), ( 9,27), ( 9,28), ( 9,29), ( 9,30), ( 9,31)
(10,24), (10,25), (10,26), (10,27), (10,28), (10,29), (10,30), (10,31), (11,24), (11,25), (11,26), (11,27), (11,28), (11,29), (11,30), (11,31)
(12,24), (12,25), (12,26), (12,27), (12,28), (12,29), (12,30), (12,31), (13,24), (13,25), (13,26), (13,27), (13,28), (13,29), (13,30), (13,31)
(14,24), (14,25), (14,26), (14,27), (14,28), (14,29), (14,30), (14,31), (15,24), (15,25), (15,26), (15,27), (15,28), (15,29), (15,30), (15,31)
( 0,32), ( 0,33), ( 0,34), ( 0,35), ( 0,36), ( 0,37), ( 0,38), ( 0,39), ( 1,32), ( 1,33), ( 1,34), ( 1,35), ( 1,36), ( 1,37), ( 1,38), ( 1,39)
( 2,32), ( 2,33), ( 2,34), ( 2,35), ( 2,36), ( 2,37), ( 2,38), ( 2,39), ( 3,32), ( 3,33), ( 3,34), ( 3,35), ( 3,36), ( 3,37), ( 3,38), ( 3,39)
( 4,32), ( 4,33), ( 4,34), ( 4,35), ( 4,36), ( 4,37), ( 4,38), ( 4,39), ( 5,32), ( 5,33), ( 5,34), ( 5,35), ( 5,36), ( 5,37), ( 5,38), ( 5,39)
( 6,32), ( 6,33), ( 6,34), ( 6,35), ( 6,36), ( 6,37), ( 6,38), ( 6,39), ( 7,32), ( 7,33), ( 7,34), ( 7,35), ( 7,36), ( 7,37), ( 7,38), ( 7,39)
( 8,32), ( 8,33), ( 8,34), ( 8,35), ( 8,36), ( 8,37), ( 8,38), ( 8,39), ( 9,32), ( 9,33), ( 9,34), ( 9,35), ( 9,36), ( 9,37), ( 9,38), ( 9,39)
(10,32), (10,33), (10,34), (10,35), (10,36), (10,37), (10,38), (10,39), (11,32), (11,33), (11,34), (11,35), (11,36), (11,37), (11,38), (11,39)
(12,32), (12,33), (12,34), (12,35), (12,36), (12,37), (12,38), (12,39), (13,32), (13,33), (13,34), (13,35), (13,36), (13,37), (13,38), (13,39)
(14,32), (14,33), (14,34), (14,35), (14,36), (14,37), (14,38), (14,39), (15,32), (15,33), (15,34), (15,35), (15,36), (15,37), (15,38), (15,39)
( 0,32), ( 0,33), ( 0,34), ( 0,35), ( 0,36), ( 0,37), ( 0,38), ( 0,39), ( 1,32), ( 1,33), ( 1,34), ( 1,35), ( 1,36), ( 1,37), ( 1,38), ( 1,39)
( 2,32), ( 2,33), ( 2,34), ( 2,35), ( 2,36), ( 2,37), ( 2,38), ( 2,39), ( 3,32), ( 3,33), ( 3,34), ( 3,35), ( 3,36), ( 3,37), ( 3,38), ( 3,39)
( 4,32), ( 4,33), ( 4,34), ( 4,35), ( 4,36), ( 4,37), ( 4,38), ( 4,39), ( 5,32), ( 5,33), ( 5,34), ( 5,35), ( 5,36), ( 5,37), ( 5,38), ( 5,39)
( 6,32), ( 6,33), ( 6,34), ( 6,35), ( 6,36), ( 6,37), ( 6,38), ( 6,39), ( 7,32), ( 7,33), ( 7,34), ( 7,35), ( 7,36), ( 7,37), ( 7,38), ( 7,39)
( 8,32), ( 8,33), ( 8,34), ( 8,35), ( 8,36), ( 8,37), ( 8,38), ( 8,39), ( 9,32), ( 9,33), ( 9,34), ( 9,35), ( 9,36), ( 9,37), ( 9,38), ( 9,39)
(10,32), (10,33), (10,34), (10,35), (10,36), (10,37), (10,38), (10,39), (11,32), (11,33), (11,34), (11,35), (11,36), (11,37), (11,38), (11,39)
(12,32), (12,33), (12,34), (12,35), (12,36), (12,37), (12,38), (12,39), (13,32), (13,33), (13,34), (13,35), (13,36), (13,37), (13,38), (13,39)
(14,32), (14,33), (14,34), (14,35), (14,36), (14,37), (14,38), (14,39), (15,32), (15,33), (15,34), (15,35), (15,36), (15,37), (15,38), (15,39)
( 0,40), ( 0,41), ( 0,42), ( 0,43), ( 0,44), ( 0,45), ( 0,46), ( 0,47), ( 1,40), ( 1,41), ( 1,42), ( 1,43), ( 1,44), ( 1,45), ( 1,46), ( 1,47)
( 2,40), ( 2,41), ( 2,42), ( 2,43), ( 2,44), ( 2,45), ( 2,46), ( 2,47), ( 3,40), ( 3,41), ( 3,42), ( 3,43), ( 3,44), ( 3,45), ( 3,46), ( 3,47)
( 4,40), ( 4,41), ( 4,42), ( 4,43), ( 4,44), ( 4,45), ( 4,46), ( 4,47), ( 5,40), ( 5,41), ( 5,42), ( 5,43), ( 5,44), ( 5,45), ( 5,46), ( 5,47)
( 6,40), ( 6,41), ( 6,42), ( 6,43), ( 6,44), ( 6,45), ( 6,46), ( 6,47), ( 7,40), ( 7,41), ( 7,42), ( 7,43), ( 7,44), ( 7,45), ( 7,46), ( 7,47)
( 8,40), ( 8,41), ( 8,42), ( 8,43), ( 8,44), ( 8,45), ( 8,46), ( 8,47), ( 9,40), ( 9,41), ( 9,42), ( 9,43), ( 9,44), ( 9,45), ( 9,46), ( 9,47)
(10,40), (10,41), (10,42), (10,43), (10,44), (10,45), (10,46), (10,47), (11,40), (11,41), (11,42), (11,43), (11,44), (11,45), (11,46), (11,47)
(12,40), (12,41), (12,42), (12,43), (12,44), (12,45), (12,46), (12,47), (13,40), (13,41), (13,42), (13,43), (13,44), (13,45), (13,46), (13,47)
(14,40), (14,41), (14,42), (14,43), (14,44), (14,45), (14,46), (14,47), (15,40), (15,41), (15,42), (15,43), (15,44), (15,45), (15,46), (15,47)
( 0,40), ( 0,41), ( 0,42), ( 0,43), ( 0,44), ( 0,45), ( 0,46), ( 0,47), ( 1,40), ( 1,41), ( 1,42), ( 1,43), ( 1,44), ( 1,45), ( 1,46), ( 1,47)
( 2,40), ( 2,41), ( 2,42), ( 2,43), ( 2,44), ( 2,45), ( 2,46), ( 2,47), ( 3,40), ( 3,41), ( 3,42), ( 3,43), ( 3,44), ( 3,45), ( 3,46), ( 3,47)
( 4,40), ( 4,41), ( 4,42), ( 4,43), ( 4,44), ( 4,45), ( 4,46), ( 4,47), ( 5,40), ( 5,41), ( 5,42), ( 5,43), ( 5,44), ( 5,45), ( 5,46), ( 5,47)
( 6,40), ( 6,41), ( 6,42), ( 6,43), ( 6,44), ( 6,45), ( 6,46), ( 6,47), ( 7,40), ( 7,41), ( 7,42), ( 7,43), ( 7,44), ( 7,45), ( 7,46), ( 7,47)
( 8,40), ( 8,41), ( 8,42), ( 8,43), ( 8,44), ( 8,45), ( 8,46), ( 8,47), ( 9,40), ( 9,41), ( 9,42), ( 9,43), ( 9,44), ( 9,45), ( 9,46), ( 9,47)
(10,40), (10,41), (10,42), (10,43), (10,44), (10,45), (10,46), (10,47), (11,40), (11,41), (11,42), (11,43), (11,44), (11,45), (11,46), (11,47)
(12,40), (12,41), (12,42), (12,43), (12,44), (12,45), (12,46), (12,47), (13,40), (13,41), (13,42), (13,43), (13,44), (13,45), (13,46), (13,47)
(14,40), (14,41), (14,42), (14,43), (14,44), (14,45), (14,46), (14,47), (15,40), (15,41), (15,42), (15,43), (15,44), (15,45), (15,46), (15,47)
( 0,48), ( 0,49), ( 0,50), ( 0,51), ( 0,52), ( 0,53), ( 0,54), ( 0,55), ( 1,48), ( 1,49), ( 1,50), ( 1,51), ( 1,52), ( 1,53), ( 1,54), ( 1,55)
( 2,48), ( 2,49), ( 2,50), ( 2,51), ( 2,52), ( 2,53), ( 2,54), ( 2,55), ( 3,48), ( 3,49), ( 3,50), ( 3,51), ( 3,52), ( 3,53), ( 3,54), ( 3,55)
( 4,48), ( 4,49), ( 4,50), ( 4,51), ( 4,52), ( 4,53), ( 4,54), ( 4,55), ( 5,48), ( 5,49), ( 5,50), ( 5,51), ( 5,52), ( 5,53), ( 5,54), ( 5,55)
( 6,48), ( 6,49), ( 6,50), ( 6,51), ( 6,52), ( 6,53), ( 6,54), ( 6,55), ( 7,48), ( 7,49), ( 7,50), ( 7,51), ( 7,52), ( 7,53), ( 7,54), ( 7,55)
( 8,48), ( 8,49), ( 8,50), ( 8,51), ( 8,52), ( 8,53), ( 8,54), ( 8,55), ( 9,48), ( 9,49), ( 9,50), ( 9,51), ( 9,52), ( 9,53), ( 9,54), ( 9,55)
(10,48), (10,49), (10,50), (10,51), (10,52), (10,53), (10,54), (10,55), (11,48), (11,49), (11,50), (11,51), (11,52), (11,53), (11,54), (11,55)
(12,48), (12,49), (12,50), (12,51), (12,52), (12,53), (12,54), (12,55), (13,48), (13,49), (13,50), (13,51), (13,52), (13,53), (13,54), (13,55)
(14,48), (14,49), (14,50), (14,51), (14,52), (14,53), (14,54), (14,55), (15,48), (15,49), (15,50), (15,51), (15,52), (15,53), (15,54), (15,55)
( 0,48), ( 0,49), ( 0,50), ( 0,51), ( 0,52), ( 0,53), ( 0,54), ( 0,55), ( 1,48), ( 1,49), ( 1,50), ( 1,51), ( 1,52), ( 1,53), ( 1,54), ( 1,55)
( 2,48), ( 2,49), ( 2,50), ( 2,51), ( 2,52), ( 2,53), ( 2,54), ( 2,55), ( 3,48), ( 3,49), ( 3,50), ( 3,51), ( 3,52), ( 3,53), ( 3,54), ( 3,55)
( 4,48), ( 4,49), ( 4,50), ( 4,51), ( 4,52), ( 4,53), ( 4,54), ( 4,55), ( 5,48), ( 5,49), ( 5,50), ( 5,51), ( 5,52), ( 5,53), ( 5,54), ( 5,55)
( 6,48), ( 6,49), ( 6,50), ( 6,51), ( 6,52), ( 6,53), ( 6,54), ( 6,55), ( 7,48), ( 7,49), ( 7,50), ( 7,51), ( 7,52), ( 7,53), ( 7,54), ( 7,55)
( 8,48), ( 8,49), ( 8,50), ( 8,51), ( 8,52), ( 8,53), ( 8,54), ( 8,55), ( 9,48), ( 9,49), ( 9,50), ( 9,51), ( 9,52), ( 9,53), ( 9,54), ( 9,55)
(10,48), (10,49), (10,50), (10,51), (10,52), (10,53), (10,54), (10,55), (11,48), (11,49), (11,50), (11,51), (11,52), (11,53), (11,54), (11,55)
(12,48), (12,49), (12,50), (12,51), (12,52), (12,53), (12,54), (12,55), (13,48), (13,49), (13,50), (13,51), (13,52), (13,53), (13,54), (13,55)
(14,48), (14,49), (14,50), (14,51), (14,52), (14,53), (14,54), (14,55), (15,48), (15,49), (15,50), (15,51), (15,52), (15,53), (15,54), (15,55)
( 0,56), ( 0,57), ( 0,58), ( 0,59), ( 0,60), ( 0,61), ( 0,62), ( 0,63), ( 1,56), ( 1,57), ( 1,58), ( 1,59), ( 1,60), ( 1,61), ( 1,62), ( 1,63)
( 2,56), ( 2,57), ( 2,58), ( 2,59), ( 2,60), ( 2,61), ( 2,62), ( 2,63), ( 3,56), ( 3,57), ( 3,58), ( 3,59), ( 3,60), ( 3,61), ( 3,62), ( 3,63)
( 4,56), ( 4,57), ( 4,58), ( 4,59), ( 4,60), ( 4,61), ( 4,62), ( 4,63), ( 5,56), ( 5,57), ( 5,58), ( 5,59), ( 5,60), ( 5,61), ( 5,62), ( 5,63)
( 6,56), ( 6,57), ( 6,58), ( 6,59), ( 6,60), ( 6,61), ( 6,62), ( 6,63), ( 7,56), ( 7,57), ( 7,58), ( 7,59), ( 7,60), ( 7,61), ( 7,62), ( 7,63)
( 8,56), ( 8,57), ( 8,58), ( 8,59), ( 8,60), ( 8,61), ( 8,62), ( 8,63), ( 9,56), ( 9,57), ( 9,58), ( 9,59), ( 9,60), ( 9,61), ( 9,62), ( 9,63)
(10,56), (10,57), (10,58), (10,59), (10,60), (10,61), (10,62), (10,63), (11,56), (11,57), (11,58), (11,59), (11,60), (11,61), (11,62), (11,63)
(12,56), (12,57), (12,58), (12,59), (12,60), (12,61), (12,62), (12,63), (13,56), (13,57), (13,58), (13,59), (13,60), (13,61), (13,62), (13,63)
(14,56), (14,57), (14,58), (14,59), (14,60), (14,61), (14,62), (14,63), (15,56), (15,57), (15,58), (15,59), (15,60), (15,61), (15,62), (15,63)
( 0,56), ( 0,57), ( 0,58), ( 0,59), ( 0,60), ( 0,61), ( 0,62), ( 0,63), ( 1,56), ( 1,57), ( 1,58), ( 1,59), ( 1,60), ( 1,61), ( 1,62), ( 1,63)
( 2,56), ( 2,57), ( 2,58), ( 2,59), ( 2,60), ( 2,61), ( 2,62), ( 2,63), ( 3,56), ( 3,57), ( 3,58), ( 3,59), ( 3,60), ( 3,61), ( 3,62), ( 3,63)
( 4,56), ( 4,57), ( 4,58), ( 4,59), ( 4,60), ( 4,61), ( 4,62), ( 4,63), ( 5,56), ( 5,57), ( 5,58), ( 5,59), ( 5,60), ( 5,61), ( 5,62), ( 5,63)
( 6,56), ( 6,57), ( 6,58), ( 6,59), ( 6,60), ( 6,61), ( 6,62), ( 6,63), ( 7,56), ( 7,57), ( 7,58), ( 7,59), ( 7,60), ( 7,61), ( 7,62), ( 7,63)
( 8,56), ( 8,57), ( 8,58), ( 8,59), ( 8,60), ( 8,61), ( 8,62), ( 8,63), ( 9,56), ( 9,57), ( 9,58), ( 9,59), ( 9,60), ( 9,61), ( 9,62), ( 9,63)
(10,56), (10,57), (10,58), (10,59), (10,60), (10,61), (10,62), (10,63), (11,56), (11,57), (11,58), (11,59), (11,60), (11,61), (11,62), (11,63)
(12,56), (12,57), (12,58), (12,59), (12,60), (12,61), (12,62), (12,63), (13,56), (13,57), (13,58), (13,59), (13,60), (13,61), (13,62), (13,63)
(14,56), (14,57), (14,58), (14,59), (14,60), (14,61), (14,62), (14,63), (15,56), (15,57), (15,58), (15,59), (15,60), (15,61), (15,62), (15,63)

So, we should not be creating a 32x32 load.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
2 participants