v4.3 update. (#2709)
* v4.3 update. * Update the cute_dsl_api changelog's doc link * Update version to 4.3.0 * Update the example link * Update doc to encourage user to install DSL from requirements.txt --------- Co-authored-by: Larry Wu <larwu@nvidia.com>
This commit is contained in:
@@ -90,7 +90,9 @@
|
||||
" \"\"\"\n",
|
||||
" Demonstrates coalesce operation flattening and combining modes\n",
|
||||
" \"\"\"\n",
|
||||
" layout = cute.make_layout((2, (1, 6)), stride=(1, (cutlass.Int32(6), 2))) # Dynamic stride\n",
|
||||
" layout = cute.make_layout(\n",
|
||||
" (2, (1, 6)), stride=(1, (cutlass.Int32(6), 2))\n",
|
||||
" ) # Dynamic stride\n",
|
||||
" result = cute.coalesce(layout)\n",
|
||||
"\n",
|
||||
" print(\">>> Original:\", layout)\n",
|
||||
@@ -98,6 +100,7 @@
|
||||
" print(\">>> Coalesced:\", result)\n",
|
||||
" cute.printf(\">?? Coalesced: {}\", result)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"coalesce_example()"
|
||||
]
|
||||
},
|
||||
@@ -275,8 +278,7 @@
|
||||
" 3. for all i, 0 <= i < size(@a layout), @a result(i) == @a layout(i)\n",
|
||||
" \"\"\"\n",
|
||||
" layout = cute.make_layout(\n",
|
||||
" ((2, (3, 4)), (3, 2), 1),\n",
|
||||
" stride=((4, (8, 24)), (2, 6), 12)\n",
|
||||
" ((2, (3, 4)), (3, 2), 1), stride=((4, (8, 24)), (2, 6), 12)\n",
|
||||
" )\n",
|
||||
" result = cute.coalesce(layout)\n",
|
||||
"\n",
|
||||
@@ -288,21 +290,26 @@
|
||||
" original_size = cute.size(layout)\n",
|
||||
" coalesced_size = cute.size(result)\n",
|
||||
" print(f\"Original size: {original_size}, Coalesced size: {coalesced_size}\")\n",
|
||||
" assert coalesced_size == original_size, \\\n",
|
||||
" f\"Size mismatch: original {original_size}, coalesced {coalesced_size}\"\n",
|
||||
" \n",
|
||||
" assert coalesced_size == original_size, (\n",
|
||||
" f\"Size mismatch: original {original_size}, coalesced {coalesced_size}\"\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" print(\">>> 2. Checking depth of coalesced layout <= 1:\")\n",
|
||||
" depth = cute.depth(result)\n",
|
||||
" print(f\"Depth of coalesced layout: {depth}\")\n",
|
||||
" assert depth <= 1, f\"Depth of coalesced layout should be <= 1, got {depth}\"\n",
|
||||
"\n",
|
||||
" print(\">>> 3. Checking layout functionality remains the same after the coalesce operation:\")\n",
|
||||
" print(\n",
|
||||
" \">>> 3. Checking layout functionality remains the same after the coalesce operation:\"\n",
|
||||
" )\n",
|
||||
" for i in cutlass.range_constexpr(original_size):\n",
|
||||
" original_value = layout(i)\n",
|
||||
" coalesced_value = result(i)\n",
|
||||
" print(f\"Index {i}: original {original_value}, coalesced {coalesced_value}\")\n",
|
||||
" assert coalesced_value == original_value, \\\n",
|
||||
" assert coalesced_value == original_value, (\n",
|
||||
" f\"Value mismatch at index {i}: original {original_value}, coalesced {coalesced_value}\"\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"coalesce_post_conditions()"
|
||||
]
|
||||
@@ -338,11 +345,12 @@
|
||||
"\n",
|
||||
" # Coalesce with mode-wise profile (1,1) = coalesce both modes\n",
|
||||
" result = cute.coalesce(layout, target_profile=(1, 1))\n",
|
||||
" \n",
|
||||
"\n",
|
||||
" # Print results\n",
|
||||
" print(\">>> Original: \", layout)\n",
|
||||
" print(\">>> Coalesced Result: \", result)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"bymode_coalesce_example()"
|
||||
]
|
||||
},
|
||||
@@ -387,18 +395,19 @@
|
||||
" \"\"\"\n",
|
||||
" Demonstrates basic layout composition R = A ◦ B\n",
|
||||
" \"\"\"\n",
|
||||
" A = cute.make_layout((6, 2), stride=(cutlass.Int32(8), 2)) # Dynamic stride\n",
|
||||
" A = cute.make_layout((6, 2), stride=(cutlass.Int32(8), 2)) # Dynamic stride\n",
|
||||
" B = cute.make_layout((4, 3), stride=(3, 1))\n",
|
||||
" R = cute.composition(A, B)\n",
|
||||
"\n",
|
||||
" # Print static and dynamic information\n",
|
||||
" print(\">>> Layout A:\", A)\n",
|
||||
" cute.printf(\">?? Layout A: {}\", A)\n",
|
||||
" print(\">>> Layout B:\", B) \n",
|
||||
" print(\">>> Layout B:\", B)\n",
|
||||
" cute.printf(\">?? Layout B: {}\", B)\n",
|
||||
" print(\">>> Composition R = A ◦ B:\", R)\n",
|
||||
" cute.printf(\">?? Composition R: {}\", R)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"composition_example()"
|
||||
]
|
||||
},
|
||||
@@ -438,14 +447,8 @@
|
||||
" Shows difference between static and dynamic composition results\n",
|
||||
" \"\"\"\n",
|
||||
" # Static version - using compile-time values\n",
|
||||
" A_static = cute.make_layout(\n",
|
||||
" (10, 2), \n",
|
||||
" stride=(16, 4)\n",
|
||||
" )\n",
|
||||
" B_static = cute.make_layout(\n",
|
||||
" (5, 4), \n",
|
||||
" stride=(1, 5)\n",
|
||||
" )\n",
|
||||
" A_static = cute.make_layout((10, 2), stride=(16, 4))\n",
|
||||
" B_static = cute.make_layout((5, 4), stride=(1, 5))\n",
|
||||
" R_static = cute.composition(A_static, B_static)\n",
|
||||
"\n",
|
||||
" # Static print shows compile-time info\n",
|
||||
@@ -457,20 +460,21 @@
|
||||
" # Dynamic version - using runtime Int32 values\n",
|
||||
" A_dynamic = cute.make_layout(\n",
|
||||
" (cutlass.Int32(10), cutlass.Int32(2)),\n",
|
||||
" stride=(cutlass.Int32(16), cutlass.Int32(4))\n",
|
||||
" stride=(cutlass.Int32(16), cutlass.Int32(4)),\n",
|
||||
" )\n",
|
||||
" B_dynamic = cute.make_layout(\n",
|
||||
" (cutlass.Int32(5), cutlass.Int32(4)),\n",
|
||||
" stride=(cutlass.Int32(1), cutlass.Int32(5))\n",
|
||||
" stride=(cutlass.Int32(1), cutlass.Int32(5)),\n",
|
||||
" )\n",
|
||||
" R_dynamic = cute.composition(A_dynamic, B_dynamic)\n",
|
||||
" \n",
|
||||
"\n",
|
||||
" # Dynamic printf shows runtime values\n",
|
||||
" cute.printf(\">?? Dynamic composition:\")\n",
|
||||
" cute.printf(\">?? A_dynamic: {}\", A_dynamic)\n",
|
||||
" cute.printf(\">?? B_dynamic: {}\", B_dynamic)\n",
|
||||
" cute.printf(\">?? R_dynamic: {}\", R_dynamic)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"composition_static_vs_dynamic_layout()"
|
||||
]
|
||||
},
|
||||
@@ -511,12 +515,12 @@
|
||||
" \"\"\"\n",
|
||||
" # Define the original layout A\n",
|
||||
" A = cute.make_layout(\n",
|
||||
" (cutlass.Int32(12), (cutlass.Int32(4), cutlass.Int32(8))), \n",
|
||||
" stride=(cutlass.Int32(59), (cutlass.Int32(13), cutlass.Int32(1)))\n",
|
||||
" (cutlass.Int32(12), (cutlass.Int32(4), cutlass.Int32(8))),\n",
|
||||
" stride=(cutlass.Int32(59), (cutlass.Int32(13), cutlass.Int32(1))),\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" # Define the tiler for by-mode composition\n",
|
||||
" tiler = (3, 8) # Apply 3:1 to mode-0 and 8:1 to mode-1\n",
|
||||
" tiler = (3, 8) # Apply 3:1 to mode-0 and 8:1 to mode-1\n",
|
||||
"\n",
|
||||
" # Apply by-mode composition\n",
|
||||
" result = cute.composition(A, tiler)\n",
|
||||
@@ -529,6 +533,7 @@
|
||||
" print(\">>> By-mode Composition Result:\", result)\n",
|
||||
" cute.printf(\">?? By-mode Composition Result: {}\", result)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"bymode_composition_example()"
|
||||
]
|
||||
},
|
||||
@@ -571,19 +576,20 @@
|
||||
" \"\"\"\n",
|
||||
" # Define the original layout\n",
|
||||
" layout = cute.make_layout((4, 2, 3), stride=(2, 1, 8)) # (4,2,3):(2,1,8)\n",
|
||||
" \n",
|
||||
"\n",
|
||||
" # Define the tiler\n",
|
||||
" tiler = cute.make_layout(4, stride=2) # Apply to layout 4:2\n",
|
||||
" \n",
|
||||
"\n",
|
||||
" # Apply logical divide\n",
|
||||
" result = cute.logical_divide(layout, tiler=tiler)\n",
|
||||
" \n",
|
||||
"\n",
|
||||
" # Print results\n",
|
||||
" print(\">>> Layout:\", layout)\n",
|
||||
" print(\">>> Tiler :\", tiler)\n",
|
||||
" print(\">>> Logical Divide Result:\", result)\n",
|
||||
" cute.printf(\">?? Logical Divide Result: {}\", result)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"logical_divide_1d_example()"
|
||||
]
|
||||
},
|
||||
@@ -620,21 +626,26 @@
|
||||
" Result Shape : ((TileM,RestM), (TileN,RestN), L, ...)\n",
|
||||
" \"\"\"\n",
|
||||
" # Define the original layout\n",
|
||||
" layout = cute.make_layout((9, (4, 8)), stride=(59, (13, 1))) # (9,(4,8)):(59,(13,1))\n",
|
||||
" \n",
|
||||
" layout = cute.make_layout(\n",
|
||||
" (9, (4, 8)), stride=(59, (13, 1))\n",
|
||||
" ) # (9,(4,8)):(59,(13,1))\n",
|
||||
"\n",
|
||||
" # Define the tiler\n",
|
||||
" tiler = (cute.make_layout(3, stride=3), # Apply to mode-0 layout 3:3\n",
|
||||
" cute.make_layout((2, 4), stride=(1, 8))) # Apply to mode-1 layout (2,4):(1,8)\n",
|
||||
" \n",
|
||||
" tiler = (\n",
|
||||
" cute.make_layout(3, stride=3), # Apply to mode-0 layout 3:3\n",
|
||||
" cute.make_layout((2, 4), stride=(1, 8)),\n",
|
||||
" ) # Apply to mode-1 layout (2,4):(1,8)\n",
|
||||
"\n",
|
||||
" # Apply logical divide\n",
|
||||
" result = cute.logical_divide(layout, tiler=tiler)\n",
|
||||
" \n",
|
||||
"\n",
|
||||
" # Print results\n",
|
||||
" print(\">>> Layout:\", layout)\n",
|
||||
" print(\">>> Tiler :\", tiler)\n",
|
||||
" print(\">>> Logical Divide Result:\", result)\n",
|
||||
" cute.printf(\">?? Logical Divide Result: {}\", result)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"logical_divide_2d_example()"
|
||||
]
|
||||
},
|
||||
@@ -673,21 +684,26 @@
|
||||
" Result Shape : ((TileM,TileN), (RestM,RestN,L,...))\n",
|
||||
" \"\"\"\n",
|
||||
" # Define the original layout\n",
|
||||
" layout = cute.make_layout((9, (4, 8)), stride=(59, (13, 1))) # (9,(4,8)):(59,(13,1))\n",
|
||||
" \n",
|
||||
" layout = cute.make_layout(\n",
|
||||
" (9, (4, 8)), stride=(59, (13, 1))\n",
|
||||
" ) # (9,(4,8)):(59,(13,1))\n",
|
||||
"\n",
|
||||
" # Define the tiler\n",
|
||||
" tiler = (cute.make_layout(3, stride=3), # Apply to mode-0 layout 3:3\n",
|
||||
" cute.make_layout((2, 4), stride=(1, 8))) # Apply to mode-1 layout (2,4):(1,8)\n",
|
||||
" \n",
|
||||
" tiler = (\n",
|
||||
" cute.make_layout(3, stride=3), # Apply to mode-0 layout 3:3\n",
|
||||
" cute.make_layout((2, 4), stride=(1, 8)),\n",
|
||||
" ) # Apply to mode-1 layout (2,4):(1,8)\n",
|
||||
"\n",
|
||||
" # Apply zipped divide\n",
|
||||
" result = cute.zipped_divide(layout, tiler=tiler)\n",
|
||||
" \n",
|
||||
"\n",
|
||||
" # Print results\n",
|
||||
" print(\">>> Layout:\", layout)\n",
|
||||
" print(\">>> Tiler :\", tiler)\n",
|
||||
" print(\">>> Zipped Divide Result:\", result)\n",
|
||||
" cute.printf(\">?? Zipped Divide Result: {}\", result)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"zipped_divide_example()"
|
||||
]
|
||||
},
|
||||
@@ -724,21 +740,26 @@
|
||||
" Result Shape : ((TileM,TileN), RestM, RestN, L, ...)\n",
|
||||
" \"\"\"\n",
|
||||
" # Define the original layout\n",
|
||||
" layout = cute.make_layout((9, (4, 8)), stride=(59, (13, 1))) # (9,(4,8)):(59,(13,1))\n",
|
||||
" \n",
|
||||
" layout = cute.make_layout(\n",
|
||||
" (9, (4, 8)), stride=(59, (13, 1))\n",
|
||||
" ) # (9,(4,8)):(59,(13,1))\n",
|
||||
"\n",
|
||||
" # Define the tiler\n",
|
||||
" tiler = (cute.make_layout(3, stride=3), # Apply to mode-0 layout 3:3\n",
|
||||
" cute.make_layout((2, 4), stride=(1, 8))) # Apply to mode-1 layout (2,4):(1,8)\n",
|
||||
" \n",
|
||||
" tiler = (\n",
|
||||
" cute.make_layout(3, stride=3), # Apply to mode-0 layout 3:3\n",
|
||||
" cute.make_layout((2, 4), stride=(1, 8)),\n",
|
||||
" ) # Apply to mode-1 layout (2,4):(1,8)\n",
|
||||
"\n",
|
||||
" # Apply tiled divide\n",
|
||||
" result = cute.tiled_divide(layout, tiler=tiler)\n",
|
||||
" \n",
|
||||
"\n",
|
||||
" # Print results\n",
|
||||
" print(\">>> Layout:\", layout)\n",
|
||||
" print(\">>> Tiler :\", tiler)\n",
|
||||
" print(\">>> Tiled Divide Result:\", result)\n",
|
||||
" cute.printf(\">?? Tiled Divide Result: {}\", result)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"tiled_divide_example()"
|
||||
]
|
||||
},
|
||||
@@ -775,21 +796,26 @@
|
||||
" Result Shape : (TileM, TileN, RestM, RestN, L, ...)\n",
|
||||
" \"\"\"\n",
|
||||
" # Define the original layout\n",
|
||||
" layout = cute.make_layout((9, (4, 8)), stride=(59, (13, 1))) # (9,(4,8)):(59,(13,1))\n",
|
||||
" \n",
|
||||
" layout = cute.make_layout(\n",
|
||||
" (9, (4, 8)), stride=(59, (13, 1))\n",
|
||||
" ) # (9,(4,8)):(59,(13,1))\n",
|
||||
"\n",
|
||||
" # Define the tiler\n",
|
||||
" tiler = (cute.make_layout(3, stride=3), # Apply to mode-0 layout 3:3\n",
|
||||
" cute.make_layout((2, 4), stride=(1, 8))) # Apply to mode-1 layout (2,4):(1,8)\n",
|
||||
" \n",
|
||||
" tiler = (\n",
|
||||
" cute.make_layout(3, stride=3), # Apply to mode-0 layout 3:3\n",
|
||||
" cute.make_layout((2, 4), stride=(1, 8)),\n",
|
||||
" ) # Apply to mode-1 layout (2,4):(1,8)\n",
|
||||
"\n",
|
||||
" # Apply flat divide\n",
|
||||
" result = cute.flat_divide(layout, tiler=tiler)\n",
|
||||
" \n",
|
||||
"\n",
|
||||
" # Print results\n",
|
||||
" print(\">>> Layout:\", layout)\n",
|
||||
" print(\">>> Tiler :\", tiler)\n",
|
||||
" print(\">>> Flat Divide Result:\", result)\n",
|
||||
" cute.printf(\">?? Flat Divide Result: {}\", result)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"flat_divide_example()"
|
||||
]
|
||||
},
|
||||
@@ -834,19 +860,20 @@
|
||||
" \"\"\"\n",
|
||||
" # Define the original layout\n",
|
||||
" layout = cute.make_layout((2, 2), stride=(4, 1)) # (2,2):(4,1)\n",
|
||||
" \n",
|
||||
"\n",
|
||||
" # Define the tiler\n",
|
||||
" tiler = cute.make_layout(6, stride=1) # Apply to layout 6:1\n",
|
||||
" \n",
|
||||
"\n",
|
||||
" # Apply logical product\n",
|
||||
" result = cute.logical_product(layout, tiler=tiler)\n",
|
||||
" \n",
|
||||
"\n",
|
||||
" # Print results\n",
|
||||
" print(\">>> Layout:\", layout)\n",
|
||||
" print(\">>> Tiler :\", tiler)\n",
|
||||
" print(\">>> Logical Product Result:\", result)\n",
|
||||
" cute.printf(\">?? Logical Product Result: {}\", result)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"logical_product_1d_example()"
|
||||
]
|
||||
},
|
||||
@@ -886,16 +913,16 @@
|
||||
" \"\"\"\n",
|
||||
" # Define the original layout\n",
|
||||
" layout = cute.make_layout((2, 5), stride=(5, 1))\n",
|
||||
" \n",
|
||||
"\n",
|
||||
" # Define the tiler\n",
|
||||
" tiler = cute.make_layout((3, 4), stride=(1, 3))\n",
|
||||
" \n",
|
||||
"\n",
|
||||
" # Apply blocked product\n",
|
||||
" blocked_result = cute.blocked_product(layout, tiler=tiler)\n",
|
||||
"\n",
|
||||
" # Apply raked product\n",
|
||||
" raked_result = cute.raked_product(layout, tiler=tiler)\n",
|
||||
" \n",
|
||||
"\n",
|
||||
" # Print results\n",
|
||||
" print(\">>> Layout:\", layout)\n",
|
||||
" print(\">>> Tiler :\", tiler)\n",
|
||||
@@ -904,6 +931,7 @@
|
||||
" cute.printf(\">?? Blocked Product Result: {}\", blocked_result)\n",
|
||||
" cute.printf(\">?? Raked Product Result: {}\", raked_result)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"blocked_raked_product_example()"
|
||||
]
|
||||
},
|
||||
@@ -950,16 +978,16 @@
|
||||
" \"\"\"\n",
|
||||
" # Define the original layout\n",
|
||||
" layout = cute.make_layout((2, 5), stride=(5, 1))\n",
|
||||
" \n",
|
||||
"\n",
|
||||
" # Define the tiler\n",
|
||||
" tiler = cute.make_layout((3, 4), stride=(1, 3))\n",
|
||||
"\n",
|
||||
" # Apply zipped product\n",
|
||||
" zipped_result = cute.zipped_product(layout, tiler=tiler)\n",
|
||||
" \n",
|
||||
"\n",
|
||||
" # Apply tiled product\n",
|
||||
" tiled_result = cute.tiled_product(layout, tiler=tiler)\n",
|
||||
" \n",
|
||||
"\n",
|
||||
" # Apply flat product\n",
|
||||
" flat_result = cute.flat_product(layout, tiler=tiler)\n",
|
||||
"\n",
|
||||
@@ -973,6 +1001,7 @@
|
||||
" cute.printf(\">?? Tiled Product Result: {}\", tiled_result)\n",
|
||||
" cute.printf(\">?? Flat Product Result: {}\", flat_result)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"zipped_tiled_flat_product_example()"
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user