MCPcopy Create free account
hub / github.com/antirez/ds4 / weights_bind_layer

Function weights_bind_layer

ds4.c:4021–4066  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4019 sum += x[i].d * y[i].d * (float)vaddvq_s32(isum);
4020 }
4021#else
4022 for (int i = 0; i < nb; i++) {
4023 int isum = 0;
4024 for (int j = 0; j < QK_K; j++) {
4025 isum += (int)x[i].qs[j] * (int)y[i].qs[j];
4026 }
4027 sum += x[i].d * y[i].d * (float)isum;
4028 }
4029#endif
4030 *s = sum;
4031}
4032
4033static void ds4_vec_dot_q8_K_pair_q8_K(
4034 int n, float *s0, float *s1,
4035 const block_q8_K *x0, const block_q8_K *x1,
4036 const block_q8_K *y) {
4037 const int nb = n / QK_K;
4038 float sum0 = 0.0f;
4039 float sum1 = 0.0f;
4040#if defined(__ARM_NEON) && defined(__ARM_FEATURE_DOTPROD)
4041 for (int i = 0; i < nb; i++) {
4042 int32x4_t isum0 = vdupq_n_s32(0);
4043 int32x4_t isum1 = vdupq_n_s32(0);
4044 for (int j = 0; j < QK_K; j += 16) {
4045 const int8x16_t yv = vld1q_s8(y[i].qs + j);
4046 isum0 = vdotq_s32(isum0, vld1q_s8(x0[i].qs + j), yv);
4047 isum1 = vdotq_s32(isum1, vld1q_s8(x1[i].qs + j), yv);
4048 }
4049 sum0 += x0[i].d * y[i].d * (float)vaddvq_s32(isum0);
4050 sum1 += x1[i].d * y[i].d * (float)vaddvq_s32(isum1);
4051 }
4052#else
4053 for (int i = 0; i < nb; i++) {
4054 int isum0 = 0;
4055 int isum1 = 0;
4056 for (int j = 0; j < QK_K; j++) {
4057 const int yv = (int)y[i].qs[j];
4058 isum0 += (int)x0[i].qs[j] * yv;
4059 isum1 += (int)x1[i].qs[j] * yv;
4060 }
4061 sum0 += x0[i].d * y[i].d * (float)isum0;
4062 sum1 += x1[i].d * y[i].d * (float)isum1;
4063 }
4064#endif
4065 *s0 = sum0;
4066 *s1 = sum1;
4067}
4068
4069static DS4_MAYBE_UNUSED void ds4_vec_dot_iq2_xxs_q8_K(int n, float *s, const block_iq2_xxs *x, const block_q8_K *y) {

Callers 1

weights_bindFunction · 0.85

Calls 3

ds4_layer_compress_ratioFunction · 0.85
required_tensorfFunction · 0.85
tensor_by_namefFunction · 0.85

Tested by

no test coverage detected