Skip to content

Commit 4f4f90c

Browse files
committed
Fix test-quantize
Test does not work with RMSE-minimization enabled, so have to put the test cases between ifdefs.
1 parent 3c69f93 commit 4f4f90c

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

tests/test-quantize.c

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#include "ggml.h"
2+
#undef NDEBUG
3+
#include <assert.h>
4+
#include <math.h>
5+
6+
int main(void) {
7+
// Sorry, but I have to disable these for RMSE-optimized quantization
8+
#ifdef GGML_NO_RMSE
9+
#define QK 32
10+
float src[QK];
11+
uint8_t dst[24];
12+
int64_t hist[16];
13+
14+
for (int i = 0; i < QK; i++) {
15+
src[i] = (float)(i + 1);
16+
}
17+
18+
size_t size = ggml_quantize_q4_0(src, dst, QK, QK, hist);
19+
assert(size == 20);
20+
float max_result = ((float *)dst)[0];
21+
float max_expected = src[31] / ((1 << 3) - 1);
22+
assert(max_result == max_expected);
23+
for (int i = 0; i < QK; i++) {
24+
uint8_t q4_result = (i % 2) ? (dst[sizeof(float) + i/2] >> 4) : (dst[sizeof(float) + i/2] & 0xF);
25+
uint8_t q4_expected = roundf(src[i] / max_expected) + 8;
26+
assert(q4_result == q4_expected);
27+
}
28+
29+
size = ggml_quantize_q4_1(src, dst, QK, QK, hist);
30+
assert(size == 24);
31+
float delta_result = ((float *)dst)[0];
32+
float delta_expected = (src[31] - src[0]) / ((1 << 4) - 1);
33+
assert(delta_result == delta_expected);
34+
float min_result = ((float *)dst)[1];
35+
float min_expected = src[0];
36+
assert(min_result == min_expected);
37+
for (int i = 0; i < QK; i++) {
38+
uint8_t q4_result = (i % 2) ? (dst[sizeof(float)*2 + i/2] >> 4) : (dst[sizeof(float)*2 + i/2] & 0xF);
39+
uint8_t q4_expected = roundf((src[i] - min_expected) / delta_expected);
40+
assert(q4_result == q4_expected);
41+
}
42+
#endif
43+
44+
return 0;
45+
}

0 commit comments

Comments
 (0)