@@ -73,6 +73,10 @@ struct CollectiveBuilder<
7373 cute::is_base_of_v<KernelPtrArrayTmaWarpSpecializedCooperative, BuilderScheduleTag> ||
7474 cute::is_same_v<KernelScheduleAuto, BuilderScheduleTag>)
7575 &&
76+ !((cute::is_base_of_v<KernelTmaWarpSpecializedPingpong, BuilderScheduleTag> ||
77+ cute::is_base_of_v<KernelPtrArrayTmaWarpSpecializedPingpong, BuilderScheduleTag>) &&
78+ cute::tuple_element_t <1 , TileShape_MNK>::value < 16 )
79+ &&
7680 // Alignment check
7781 detail::sm1xx_blockscaled_gemm_is_aligned<typename detail::blockscaled::blockscaled_type<BuilderScheduleTag, ElementPairA>::data_type,
7882 AlignmentA,
@@ -98,7 +102,7 @@ struct CollectiveBuilder<
98102 static_assert (cute::is_static_v<ClusterShape_MNK>, " Cluster has to be static" );
99103 static_assert (detail::blockscaled::check_input_datatypes<BuilderScheduleTag, ElementPairA, ElementPairB, UmmaMajorA, UmmaMajorB>(), " Incorrect input types" );
100104 static_assert (cute::size (ClusterShape_MNK{}) == Int<1 >{}, " no programmatic multicast on this arch" );
101- static_assert (size<1 >(TileShape_MNK{}) >= 32 , " Invalid tile shape N." );
105+ static_assert (size<1 >(TileShape_MNK{}) >= 8 , " Invalid tile shape N." );
102106
103107 static constexpr auto Instr = detail::blockscaled::select_instr<ElementPairA,
104108 ElementPairB,
@@ -108,7 +112,7 @@ struct CollectiveBuilder<
108112 BuilderScheduleTag>();
109113 static constexpr bool UseMxf8f6f4 = Instr == detail::blockscaled::BlockScaledInstr::MXF4F6F8 ;
110114 using PermTileM = decltype (cute::min (size<0 >(TileShape_MNK{}), _128{}));
111- using PermTileN = decltype (detail::sm120_tile_n_permute_selector<SFVectorSize>());
115+ using PermTileN = decltype (detail::sm120_tile_n_permute_selector<SFVectorSize, size< 1 >(TileShape_MNK{}) >());
112116 using PermTileK = cute::conditional_t <(UseMxf8f6f4
113117 ), _32, _64>;
114118
@@ -125,7 +129,9 @@ struct CollectiveBuilder<
125129 " TileSize and MNK Major does not met with MMA Mix 8-bit TMA load requirement" );
126130
127131 using AtomLayoutMNK = cute::conditional_t <IsCooperative,
128- Layout<Shape<_4,_2,_1>>, Layout<Shape<_2,_2,_1>>>;
132+ cute::conditional_t <(size<1 >(TileShape_MNK{}) >= 16 ), Layout<Shape<_4,_2,_1>>,
133+ Layout<Shape<_8,_1,_1>>>,
134+ Layout<Shape<_2,_2,_1>>>;
129135
130136 using TiledMma = decltype (cute::make_tiled_mma (
131137 cute::rr_blockscaled_op_selector_sm120<ElementA,
@@ -166,7 +172,8 @@ struct CollectiveBuilder<
166172 >()), SmemAllocTypeA>;
167173 using SmemCopyAtomB = Copy_Atom<decltype (detail::sm120_rr_smem_copy_selector_B<ElementA,
168174 ElementB,
169- UseMxf8f6f4
175+ UseMxf8f6f4,
176+ size<1 >(TileShape_MNK{})
170177 >()), SmemAllocTypeB>;
171178
172179 using SmemCopyAtomSF = Copy_Atom<UniversalCopy<SmemAllocTypeSF>, SmemAllocTypeSF>; // auto-vectorized LDS
0 commit comments