Skip to content

Commit e95a833

Browse files
committed
test-quantize: fix for q8_0 intermediates
1 parent 6071228 commit e95a833

File tree

2 files changed

+21
-5
lines changed

2 files changed

+21
-5
lines changed

tests/test-quantize-fns.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212

1313
const float MAX_QUANTIZATION_REFERENCE_ERROR = 0.0001;
1414
const float MAX_QUANTIZATION_TOTAL_ERROR = 0.002;
15-
// TODO: check why q4_1 is high
1615
const float MAX_DOT_PRODUCT_ERROR = 0.02;
1716

1817
const char* RESULT_STR[] = {"ok", "FAILED"};
@@ -71,10 +70,10 @@ float dot_product(const float * a1, const float * a2, size_t test_size) {
7170
// Total dot product error
7271
float dot_product_error(quantize_fns_t & qfns, size_t test_size, const float * test_data1, const float *test_data2) {
7372
std::vector<uint8_t> tmp_q1(test_size);
74-
std::vector<uint8_t> tmp_q2(test_size);
73+
std::vector<uint8_t> tmp_q2(test_size*2);
7574

7675
qfns.quantize_row_q(test_data1, tmp_q1.data(), test_size);
77-
qfns.quantize_row_q(test_data2, tmp_q2.data(), test_size);
76+
qfns.quantize_row_q_dot(test_data2, tmp_q2.data(), test_size);
7877

7978
float result = INFINITY;
8079
qfns.vec_dot_q(test_size, &result, tmp_q1.data(), tmp_q2.data());

tests/test-quantize-perf.cpp

+19-2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ struct quantize_perf_params {
3030
bool op_quantize_row_q_reference = false;
3131
bool op_quantize_row_q = false;
3232
bool op_dequantize_row_q = false;
33+
bool op_quantize_row_q_dot = false;
3334
bool op_vec_dot_q = false;
3435
};
3536

@@ -147,6 +148,8 @@ int main(int argc, char * argv[]) {
147148
params.op_quantize_row_q = true;
148149
} else if (op == "dequantize_row_q") {
149150
params.op_dequantize_row_q = true;
151+
} else if (op == "quantize_row_q_dot") {
152+
params.op_quantize_row_q_dot = true;
150153
} else if (op == "vec_dot_q") {
151154
params.op_vec_dot_q = true;
152155
} else {
@@ -184,8 +187,8 @@ int main(int argc, char * argv[]) {
184187
if (params.test_sizes.empty()) {
185188
params.test_sizes.push_back(L1_SIZE);
186189
}
187-
if (!(params.op_quantize_row_q_reference || params.op_quantize_row_q || params.op_dequantize_row_q || params.op_vec_dot_q)) {
188-
params.op_quantize_row_q_reference = params.op_quantize_row_q = params.op_dequantize_row_q = params.op_vec_dot_q = true;
190+
if (!(params.op_quantize_row_q_reference || params.op_quantize_row_q || params.op_dequantize_row_q || params.op_quantize_row_q_dot || params.op_vec_dot_q)) {
191+
params.op_quantize_row_q_reference = params.op_quantize_row_q = params.op_dequantize_row_q = params.op_quantize_row_q_dot = params.op_vec_dot_q = true;
189192
}
190193

191194
std::sort(params.test_sizes.begin(), params.test_sizes.end());
@@ -268,6 +271,20 @@ int main(int argc, char * argv[]) {
268271
printf("\n");
269272
}
270273

274+
if (params.op_quantize_row_q_dot) {
275+
printf(" quantize_row_q_dot\n");
276+
for (size_t size : params.test_sizes) {
277+
printf(" %zu values (%.2f MB)\n", size, 4*size/(float)(1024*1024));
278+
auto quantize_fn = [&](void ) {
279+
qfns.quantize_row_q_dot(test_data1, test_q1, size);
280+
return test_q1[0];
281+
};
282+
size_t quantized_size = size / ggml_blck_size(type) * ggml_type_size(type);
283+
benchmark_function(size, quantized_size, quantize_fn);
284+
}
285+
printf("\n");
286+
}
287+
271288
if (params.op_vec_dot_q) {
272289
printf(" vec_dot_q\n");
273290
qfns.quantize_row_q(test_data1, test_q1, largest);

0 commit comments

Comments
 (0)