Updated Quantize_row_q8_0() function
This commit is contained in:
parent
b1487ec293
commit
d46f3637a3
|
|
@ -48,8 +48,10 @@ void quantize_row_q8_0(const float * GGML_RESTRICT x, void * GGML_RESTRICT vy, i
|
|||
const int sve_register_length = ggml_cpu_get_sve_cnt() * 8;
|
||||
const int ggml_f32_epr = sve_register_length / 32;
|
||||
const svfloat32_t inactive1 = svdup_n_f32(0.0f);
|
||||
const svint32_t inactive2 = svdup_n_s32(0);
|
||||
const svbool_t pg = svptrue_b32();
|
||||
svfloat32_t zero = svdup_f32(0.0f);
|
||||
svfloat32_t half = svdup_f32(0.5f);
|
||||
|
||||
for (int i = 0; i < nb; i+=1) {
|
||||
svfloat32_t srcv1, asrcv1;
|
||||
svfloat32_t sv_max = svdup_n_f32(0.0f);
|
||||
|
|
@ -67,8 +69,14 @@ void quantize_row_q8_0(const float * GGML_RESTRICT x, void * GGML_RESTRICT vy, i
|
|||
for (int j = 0; j < QK8_0; j+=ggml_f32_epr) {
|
||||
srcv1 = svld1_f32(pg, x + i*32 + j);
|
||||
const svfloat32_t v1 = svmul_n_f32_m(pg, srcv1, id);
|
||||
const svint32_t vi1 = svcvt_s32_f32_m(inactive2, pg, v1);
|
||||
svst1b_s32(pg, &y[i].qs[j], vi1);
|
||||
|
||||
svbool_t ge_zero = svcmpge_f32(pg, v1, zero);
|
||||
svfloat32_t v_pos = svadd_f32_m(pg, v1, half);
|
||||
svfloat32_t v_neg = svsub_f32_m(pg, v1, half);
|
||||
|
||||
svfloat32_t v_rounded = svsel_f32(ge_zero, v_pos, v_neg);
|
||||
svint32_t result = svcvt_s32_f32_x(pg, v_rounded);
|
||||
svst1b_s32(pg, &y[i].qs[j], result);
|
||||
}
|
||||
}
|
||||
#elif defined(__ARM_NEON)
|
||||
|
|
|
|||
Loading…
Reference in New Issue