Fix Windows build by not using variable array sizes

This commit is contained in:
Stephan Walter 2023-04-01 14:36:28 +02:00
parent 39f91e3f6e
commit d5349f8735

View file

@ -3,32 +3,30 @@
#include <assert.h>
#include <math.h>
#define MAX(a, b) ((a) > (b) ? (a) : (b))
int main(void) {
const int qk0 = ggml_blck_size(GGML_TYPE_Q4_0);
const int qk1 = ggml_blck_size(GGML_TYPE_Q4_1);
const int qk_max = MAX(qk0, qk1);
float src[qk_max];
#define QK 32
assert(ggml_blck_size(GGML_TYPE_Q4_0) == QK);
assert(ggml_blck_size(GGML_TYPE_Q4_1) == QK);
float src[QK];
uint8_t dst[24];
int64_t hist[16];
for (int i = 0; i < qk_max; i++) {
for (int i = 0; i < QK; i++) {
src[i] = (float)(i + 1);
}
size_t size = ggml_quantize_q4_0(src, dst, qk0, qk0, hist);
size_t size = ggml_quantize_q4_0(src, dst, QK, QK, hist);
assert(size == 20);
float max_result = ((float *)dst)[0];
float max_expected = src[31] / ((1 << 3) - 1);
assert(max_result == max_expected);
for (int i = 0; i < qk0; i++) {
for (int i = 0; i < QK; i++) {
uint8_t q4_result = (i % 2) ? (dst[sizeof(float) + i/2] >> 4) : (dst[sizeof(float) + i/2] & 0xF);
uint8_t q4_expected = roundf(src[i] / max_expected) + 8;
assert(q4_result == q4_expected);
}
size = ggml_quantize_q4_1(src, dst, qk1, qk1, hist);
size = ggml_quantize_q4_1(src, dst, QK, QK, hist);
assert(size == 24);
float delta_result = ((float *)dst)[0];
float delta_expected = (src[31] - src[0]) / ((1 << 4) - 1);
@ -36,7 +34,7 @@ int main(void) {
float min_result = ((float *)dst)[1];
float min_expected = src[0];
assert(min_result == min_expected);
for (int i = 0; i < qk1; i++) {
for (int i = 0; i < QK; i++) {
uint8_t q4_result = (i % 2) ? (dst[sizeof(float)*2 + i/2] >> 4) : (dst[sizeof(float)*2 + i/2] & 0xF);
uint8_t q4_expected = roundf((src[i] - min_expected) / delta_expected);
assert(q4_result == q4_expected);