Skip to content

Commit 20a04b2

Browse files
authored
ggml-cpu: use UE4M3 LUT in ARM NVFP4 dot product (ggml-org#25331)
1 parent 3b4fca1 commit 20a04b2

2 files changed

Lines changed: 6 additions & 6 deletions

File tree

ggml/src/ggml-cpu/arch/arm/quants.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -812,10 +812,10 @@ void ggml_vec_dot_nvfp4_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const vo
812812
const float dy0 = GGML_CPU_FP16_TO_FP32(y[2*ib].d);
813813
const float dy1 = GGML_CPU_FP16_TO_FP32(y[2*ib+1].d);
814814
const float32x4_t nvsc = {
815-
ggml_ue4m3_to_fp32(x[ib].d[0]),
816-
ggml_ue4m3_to_fp32(x[ib].d[1]),
817-
ggml_ue4m3_to_fp32(x[ib].d[2]),
818-
ggml_ue4m3_to_fp32(x[ib].d[3])
815+
GGML_CPU_UE4M3_TO_FP32(x[ib].d[0]),
816+
GGML_CPU_UE4M3_TO_FP32(x[ib].d[1]),
817+
GGML_CPU_UE4M3_TO_FP32(x[ib].d[2]),
818+
GGML_CPU_UE4M3_TO_FP32(x[ib].d[3])
819819
};
820820
const float32x4_t scales = vmulq_f32(nvsc, (float32x4_t){dy0, dy0, dy1, dy1});
821821

ggml/src/ggml-cpu/simd-mappings.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,8 @@ extern float ggml_table_f32_ue4m3[1 << 8];
131131
#define GGML_CPU_E8M0_TO_FP32_HALF(x) GGML_E8M0_TO_FP32_HALF(x)
132132
#endif
133133

134-
// Use lookup table for UE4M3 on x86 (faster than bit manipulation)
135-
#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__)
134+
// Use lookup table for UE4M3 on x86 and ARM (faster than bit manipulation)
135+
#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) || defined(__ARM_NEON)
136136
#define GGML_CPU_UE4M3_TO_FP32(x) ggml_table_f32_ue4m3[(uint8_t)(x)]
137137
#else
138138
#define GGML_CPU_UE4M3_TO_FP32(x) ggml_ue4m3_to_fp32(x)

0 commit comments

Comments
 (0)