Validate metadata values that affect semantics: attention shape, HC count, * expert routing, RoPE scaling, compression ratios, and SwiGLU clamp. */
| 3886 | for (int i = 0; i < nb; i++) { |
| 3887 | int isum = 0; |
| 3888 | for (int j = 0; j < QK_K; j++) { |
| 3889 | isum += (int)x[i].qs[j] * (int)y[i].qs[j]; |
| 3890 | } |
| 3891 | sum += x[i].d * y[i].d * (float)isum; |
| 3892 | } |
| 3893 | #endif |
| 3894 | *s = sum; |
| 3895 | } |
| 3896 | |
| 3897 | static void ds4_vec_dot_q8_K_pair_q8_K( |
| 3898 | int n, float *s0, float *s1, |
| 3899 | const block_q8_K *x0, const block_q8_K *x1, |
| 3900 | const block_q8_K *y) { |
| 3901 | const int nb = n / QK_K; |
| 3902 | float sum0 = 0.0f; |
| 3903 | float sum1 = 0.0f; |
| 3904 | #if defined(__ARM_NEON) && defined(__ARM_FEATURE_DOTPROD) |
| 3905 | for (int i = 0; i < nb; i++) { |
| 3906 | int32x4_t isum0 = vdupq_n_s32(0); |
| 3907 | int32x4_t isum1 = vdupq_n_s32(0); |
| 3908 | for (int j = 0; j < QK_K; j += 16) { |
| 3909 | const int8x16_t yv = vld1q_s8(y[i].qs + j); |
| 3910 | isum0 = vdotq_s32(isum0, vld1q_s8(x0[i].qs + j), yv); |
| 3911 | isum1 = vdotq_s32(isum1, vld1q_s8(x1[i].qs + j), yv); |
| 3912 | } |
| 3913 | sum0 += x0[i].d * y[i].d * (float)vaddvq_s32(isum0); |
| 3914 | sum1 += x1[i].d * y[i].d * (float)vaddvq_s32(isum1); |
| 3915 | } |
| 3916 | #else |
| 3917 | for (int i = 0; i < nb; i++) { |
| 3918 | int isum0 = 0; |
| 3919 | int isum1 = 0; |
| 3920 | for (int j = 0; j < QK_K; j++) { |
| 3921 | const int yv = (int)y[i].qs[j]; |
| 3922 | isum0 += (int)x0[i].qs[j] * yv; |
| 3923 | isum1 += (int)x1[i].qs[j] * yv; |
| 3924 | } |
| 3925 | sum0 += x0[i].d * y[i].d * (float)isum0; |
| 3926 | sum1 += x1[i].d * y[i].d * (float)isum1; |
| 3927 | } |
| 3928 | #endif |
| 3929 | *s0 = sum0; |
| 3930 | *s1 = sum1; |
| 3931 | } |
| 3932 | |
| 3933 | static 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) { |
| 3934 | const int nb = n / QK_K; |
| 3935 | |
| 3936 | #if defined(__ARM_NEON) && defined(__ARM_FEATURE_DOTPROD) |
| 3937 | float sumf = 0.0f; |
| 3938 | |
| 3939 | for (int i = 0; i < nb; i++) { |
| 3940 | const float d = f16_to_f32(x[i].d) * y[i].d; |
| 3941 | const uint16_t *q2 = x[i].qs; |
| 3942 | const int8_t *q8 = y[i].qs; |
| 3943 | float sumf1 = 0.0f; |
| 3944 | float sumf2 = 0.0f; |
| 3945 |
no test coverage detected