@@ -522,10 +522,21 @@ printf("src_compress_size = %d, dst_compress_size = %d, src_vec_size = %d, dst_v
522522 for (int l = 0 ; l < src_loop_num; l++) {
523523 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 ()))[n*src_loop_num + l];
524524
525+
526+ int v = 0 ;
527+ src_compress_type src_value = src[v];
528+ int dst_base_idx = l * src_vec_size * src_compress_size + v * src_compress_size;
529+ for (int c = 0 ; c < src_compress_size; c++) {
530+ uint8_t bit_value = (src_value >> (4 * (((c + 1 ) & 1 ) + (c >> 1 ) * 2 ))) & 0xF ;
531+ float scale_value = fragment_scale ((n * BLK_K + dst_base_idx + c) >> (31 - std::countl_zero<unsigned int >(GROUP_SIZE )));
532+ dst[dst_base_idx + c] = static_cast <ElementMMA>(quant_map_[lut_id][bit_value] * scale_value);
533+ lut_id = (lut_id + 1 ) % LUT_NUM ;
534+ }
535+ v++;
525536 #pragma unroll
526- for (int v = 0 ; v < src_vec_size; v++ ) {
537+ for (; v < src_vec_size - 1 ; ) {
527538 src_compress_type src_value = src[v];
528- int dst_base_idx = l * src_vec_size * src_compress_size + v * src_compress_size;
539+ dst_base_idx = l * src_vec_size * src_compress_size + v * src_compress_size;
529540 // int dst_base_idx = 0;
530541 #pragma unroll
531542 for (int c = 0 ; c < src_compress_size; c++) {
@@ -534,8 +545,9 @@ printf("src_compress_size = %d, dst_compress_size = %d, src_vec_size = %d, dst_v
534545 dst[dst_base_idx + c] = static_cast <ElementMMA>(quant_map_[lut_id][bit_value] * scale_value);
535546 lut_id = (lut_id + 1 ) % LUT_NUM ;
536547 }
537- reinterpret_cast <sycl::vec<dst_compress_type, 4 >*>(cute::raw_pointer_cast (mma_B.data ()))[n*src_loop_num + l * src_vec_size + v] = reinterpret_cast <sycl::vec<dst_compress_type, 4 >*>(dst)[v];
548+ reinterpret_cast <sycl::vec<dst_compress_type, 4 >*>(cute::raw_pointer_cast (mma_B.data ()))[n*src_loop_num + l * src_vec_size + v- 1 ] = reinterpret_cast <sycl::vec<dst_compress_type, 4 >*>(dst)[v- 1 ];
538549 }
550+ reinterpret_cast <sycl::vec<dst_compress_type, 4 >*>(cute::raw_pointer_cast (mma_B.data ()))[n*src_loop_num + l * src_vec_size + v] = reinterpret_cast <sycl::vec<dst_compress_type, 4 >*>(dst)[v];
539551 }
540552
541553// #pragma unroll
0 commit comments