@@ -61,7 +61,7 @@ static constexpr float quant_map_static[16] = {
6161};
6262#endif
6363
64- using TileShape = Shape<_32, _128 , _64>;
64+ using TileShape = Shape<_32, _256 , _64>;
6565using TiledMma =
6666 typename TiledMMAHelper<MMA_Atom<XE_8x16x16_F32BF16BF16F32_TT>, Layout<TileShape>,
6767 Layout<Shape<_1, _8, _1>, Stride<_8, _1, _0>>>::TiledMMA;
@@ -231,7 +231,7 @@ inline float dDequantizeNF4(unsigned char val) {
231231 ? BlockIdxX () : BlockIdxY ();
232232 const int l_coord = BlockIdxZ ();
233233
234- #if 0
234+ #if 1
235235 // float* quant_map;
236236 // static constexpr std::array<float, 16> quant_map{};
237237 // {
@@ -383,20 +383,21 @@ inline float dDequantizeNF4(unsigned char val) {
383383
384384 // if(cute::thread0()) printf("params.group_size = %d, k_reload_factor = %d, k_tile_count = %d, N = %d, K = %d, src_compress_size = %d, src_vec_size = %d, dst_compress_size = %d, dst_vec_size = %d\n",params.group_size, k_reload_factor, k_tile_count, N, K, src_compress_size, src_vec_size, dst_compress_size, dst_vec_size);
385385
386- src_compress_type src[src_vec_size];
387- ElementMMA dst[K];
386+ src_compress_type src[N*src_loop_num* src_vec_size];
387+ ElementMMA dst[N* K];
388388
389- reinterpret_cast <sycl::vec<src_compress_type, src_vec_size>*>(src)[0 ] = reinterpret_cast <sycl::vec<src_compress_type, src_vec_size>*>(cute::raw_pointer_cast (dequant_frag.data ()))[0 ];
390-
391389 #pragma unroll
392390 for (int n = 0 ; n < N; n++) {
393391 float scale_value = fragment_scale (n);
394392 #pragma unroll
395393 for (int l = 0 ; l < src_loop_num; l++) {
394+ // src_compress_type src[src_vec_size];
395+ // ElementMMA dst[K/dst_loop_num];
396+ reinterpret_cast <sycl::vec<src_compress_type, src_vec_size>*>(src)[n*src_loop_num + l] = reinterpret_cast <sycl::vec<src_compress_type, src_vec_size>*>(cute::raw_pointer_cast (dequant_frag.data ()))[n*src_loop_num + l];
396397 #pragma unroll
397398 for (int v = 0 ; v < src_vec_size; v++) {
398- src_compress_type src_value = src[n * src_loop_num * src_vec_size + l * src_vec_size + v];
399- int dst_idx = n * src_loop_num * src_vec_size * src_compress_size + l * src_vec_size * src_compress_size + v * src_compress_size;
399+ src_compress_type src_value = src[(n* src_loop_num + l)* src_vec_size + v];
400+ int dst_idx = ((n* src_loop_num + l) * src_vec_size + v) * src_compress_size;
400401 #pragma unroll
401402 for (int c = 0 ; c < src_compress_size; c++) {
402403 uint8_t bit_value = (src_value >> (4 * (((c + 1 ) & 1 ) + (c >> 1 ) * 2 ))) & 0xF ;
@@ -407,7 +408,7 @@ inline float dDequantizeNF4(unsigned char val) {
407408
408409 #pragma unroll
409410 for (int l = 0 ; l < dst_loop_num; l++) {
410- reinterpret_cast <sycl::vec<dst_compress_type, dst_vec_size>*>(cute::raw_pointer_cast (mma_B.data ()))[0 ] = reinterpret_cast <sycl::vec<dst_compress_type, dst_vec_size>*>(dst)[l];
411+ reinterpret_cast <sycl::vec<dst_compress_type, dst_vec_size>*>(cute::raw_pointer_cast (mma_B.data ()))[n*dst_loop_num + l ] = reinterpret_cast <sycl::vec<dst_compress_type, dst_vec_size>*>(dst)[n*dst_loop_num + l];
411412 }
412413 }
413414 };
0 commit comments