diff --git a/ggml/src/ggml-cpu/ops.cpp b/ggml/src/ggml-cpu/ops.cpp index 1c43865ff..fc684abbb 100644 --- a/ggml/src/ggml-cpu/ops.cpp +++ b/ggml/src/ggml-cpu/ops.cpp @@ -3467,27 +3467,31 @@ static void ggml_compute_forward_norm_f32( GGML_ASSERT(eps >= 0.0f); + // kcpp: reverted back to non accelerated, because it was breaking kokoro for (int64_t i03 = 0; i03 < ne03; i03++) { for (int64_t i02 = 0; i02 < ne02; i02++) { for (int64_t i01 = ith; i01 < ne01; i01 += nth) { const float * x = (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03); - float sum = 0.0; - ggml_vec_sum_f32(ne00, &sum, x); + ggml_float sum = 0.0; + for (int64_t i00 = 0; i00 < ne00; i00++) { + sum += (ggml_float)x[i00]; + } + float mean = sum/ne00; float * y = (float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3); - float variance = 0; -#ifdef GGML_USE_ACCELERATE - mean = -mean; - vDSP_vsadd(x, 1, &mean, y, 1, ne00); - vDSP_measqv(y, 1, &variance, ne00); -#else - variance = ggml_vec_cvar_f32(ne00, y, x, mean); -#endif //GGML_USE_ACCELERATE + ggml_float sum2 = 0.0; + for (int64_t i00 = 0; i00 < ne00; i00++) { + float v = x[i00] - mean; + y[i00] = v; + sum2 += (ggml_float)(v*v); + } + float variance = sum2/ne00; const float scale = 1.0f/sqrtf(variance + eps); + ggml_vec_scale_f32(ne00, y, scale); } }