@@ -2947,16 +2947,16 @@ static void ggml_vec_dot_q4_3_q8_0(const int n, float * restrict s, const void *
2947
2947
#elif defined(__AVX2__ )
2948
2948
// Initialize accumulator with zeros
2949
2949
__m256 acc = _mm256_setzero_ps ();
2950
+ float summs = 0.0f ;
2950
2951
2951
2952
// Main loop
2952
2953
for (int i = 0 ; i < nb ; i ++ ) {
2953
2954
const __m128 d0 = _mm_set1_ps (GGML_FP16_TO_FP32 (x [2 * i + 0 ].d ));
2954
2955
const __m128 d1 = _mm_set1_ps (GGML_FP16_TO_FP32 (x [2 * i + 1 ].d ));
2955
2956
const __m256 dx = _mm256_set_m128 (d1 , d0 );
2956
2957
2957
- const __m128 m0 = _mm_set1_ps (GGML_FP16_TO_FP32 (x [2 * i + 0 ].m ));
2958
- const __m128 m1 = _mm_set1_ps (GGML_FP16_TO_FP32 (x [2 * i + 1 ].m ));
2959
- const __m256 mx = _mm256_set_m128 (m1 , m0 );
2958
+ summs += GGML_FP16_TO_FP32 (x [2 * i + 0 ].m ) * y [i ].s0
2959
+ + GGML_FP16_TO_FP32 (x [2 * i + 1 ].m ) * y [i ].s1 ;
2960
2960
2961
2961
const __m128i bx0 = bytes_from_nibbles_16 (x [2 * i + 0 ].qs );
2962
2962
const __m128i bx1 = bytes_from_nibbles_16 (x [2 * i + 1 ].qs );
@@ -2965,16 +2965,12 @@ static void ggml_vec_dot_q4_3_q8_0(const int n, float * restrict s, const void *
2965
2965
const __m256 dy = _mm256_broadcast_ss (& y [i ].d );
2966
2966
const __m256i by = _mm256_loadu_si256 ((const __m256i * )y [i ].qs );
2967
2967
2968
- const __m256i syi = _mm256_maddubs_epi16 (_mm256_set1_epi8 (1 ), by );
2969
- const __m256 syf = sum_i16_pairs_float (syi );
2970
-
2971
2968
const __m256 q = mul_sum_i8_pairs_float (bx , by );
2972
2969
2973
- const __m256 sxy = _mm256_fmadd_ps (q , dx , _mm256_mul_ps (mx , syf ));
2974
- acc = _mm256_fmadd_ps (sxy , dy , acc );
2970
+ acc = _mm256_fmadd_ps (q , _mm256_mul_ps (dx , dy ), acc );
2975
2971
}
2976
2972
2977
- * s = hsum_float_8 (acc );
2973
+ * s = hsum_float_8 (acc ) + summs ;
2978
2974
#else
2979
2975
// scalar
2980
2976
float sumf = 0.0 ;
0 commit comments