@@ -410,10 +410,10 @@ void ggml_fp32_to_bf16_row(const float * x, ggml_bf16_t * y, int64_t n) {
410410 int i = 0;
411411#if defined(__AVX512BF16__)
412412 for (; i + 32 <= n; i += 32) {
413- _mm512_storeu_ps (
414- (__m512 *)(y + i),
415- (__m512) _mm512_cvtne2ps_pbh(_mm512_loadu_ps(x + i + 16),
416- _mm512_loadu_ps(x + i)));
413+ _mm512_storeu_si512 (
414+ (__m512i *)(y + i),
415+ m512i( _mm512_cvtne2ps_pbh(_mm512_loadu_ps(x + i + 16),
416+ _mm512_loadu_ps(x + i) )));
417417 }
418418#endif
419419 for (; i < n; i++) {
@@ -1615,10 +1615,10 @@ static void ggml_vec_dot_bf16(int n, float * restrict s, size_t bs, ggml_bf16_t
16151615 __m512 c1 = _mm512_setzero_ps();
16161616 __m512 c2 = _mm512_setzero_ps();
16171617 for (; i + 64 <= n; i += 64) {
1618- c1 = _mm512_dpbf16_ps(c1, (__m512bh)_mm512_loadu_ps((const float *)( x + i)),
1619- (__m512bh)_mm512_loadu_ps((const float *)( y + i)));
1620- c2 = _mm512_dpbf16_ps(c2, (__m512bh)_mm512_loadu_ps((const float *)( x + i + 32)),
1621- (__m512bh)_mm512_loadu_ps((const float *)( y + i + 32)));
1618+ c1 = _mm512_dpbf16_ps(c1, m512bh(_mm512_loadu_si512(( x + i) )),
1619+ m512bh(_mm512_loadu_si512(( y + i) )));
1620+ c2 = _mm512_dpbf16_ps(c2, m512bh(_mm512_loadu_si512(( x + i + 32) )),
1621+ m512bh(_mm512_loadu_si512(( y + i + 32) )));
16221622 }
16231623 sumf += (ggml_float)_mm512_reduce_add_ps(c1);
16241624 sumf += (ggml_float)_mm512_reduce_add_ps(c2);
@@ -23028,6 +23028,14 @@ int ggml_cpu_has_avx512_vnni(void) {
2302823028#endif
2302923029}
2303023030
23031+ int ggml_cpu_has_avx512_bf16(void) {
23032+ #if defined(__AVX512BF16__)
23033+ return 1;
23034+ #else
23035+ return 0;
23036+ #endif
23037+ }
23038+
2303123039int ggml_cpu_has_fma(void) {
2303223040#if defined(__FMA__)
2303323041 return 1;
0 commit comments