MCPcopy Create free account
hub / github.com/appdevforall/CodeOnTheGo / ggml_quantize_chunk

Function ggml_quantize_chunk

subprojects/llama.cpp/ggml/src/ggml.c:7537–7609  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

7535}
7536
7537size_t ggml_quantize_chunk(
7538 enum ggml_type type,
7539 const float * src,
7540 void * dst,
7541 int64_t start,
7542 int64_t nrows,
7543 int64_t n_per_row,
7544 const float * imatrix) {
7545 const int64_t n = (int64_t) nrows * n_per_row;
7546
7547 if (ggml_quantize_requires_imatrix(type)) {
7548 GGML_ASSERT(imatrix != NULL);
7549 }
7550
7551 GGML_ASSERT(start % type_traits[type].blck_size == 0);
7552 GGML_ASSERT(start % n_per_row == 0);
7553
7554 ggml_quantize_init(type); // this is noop if already initialized
7555
7556 const size_t start_row = start / n_per_row;
7557 const size_t row_size = ggml_row_size(type, n_per_row);
7558
7559 size_t result = 0;
7560
7561 switch (type) {
7562 case GGML_TYPE_Q4_0: result = quantize_q4_0(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
7563 case GGML_TYPE_Q4_1: result = quantize_q4_1(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
7564 case GGML_TYPE_Q5_0: result = quantize_q5_0(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
7565 case GGML_TYPE_Q5_1: result = quantize_q5_1(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
7566 case GGML_TYPE_Q8_0: result = quantize_q8_0(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
7567 case GGML_TYPE_MXFP4: result = quantize_mxfp4(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
7568 case GGML_TYPE_Q2_K: result = quantize_q2_K(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
7569 case GGML_TYPE_Q3_K: result = quantize_q3_K(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
7570 case GGML_TYPE_Q4_K: result = quantize_q4_K(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
7571 case GGML_TYPE_Q5_K: result = quantize_q5_K(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
7572 case GGML_TYPE_Q6_K: result = quantize_q6_K(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
7573 case GGML_TYPE_TQ1_0: result = quantize_tq1_0(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
7574 case GGML_TYPE_TQ2_0: result = quantize_tq2_0(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
7575 case GGML_TYPE_IQ2_XXS: result = quantize_iq2_xxs(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
7576 case GGML_TYPE_IQ2_XS: result = quantize_iq2_xs (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
7577 case GGML_TYPE_IQ3_XXS: result = quantize_iq3_xxs(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
7578 case GGML_TYPE_IQ3_S: result = quantize_iq3_s (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
7579 case GGML_TYPE_IQ2_S: result = quantize_iq2_s (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
7580 case GGML_TYPE_IQ1_S: result = quantize_iq1_s (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
7581 case GGML_TYPE_IQ1_M: result = quantize_iq1_m (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
7582 case GGML_TYPE_IQ4_NL: result = quantize_iq4_nl (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
7583 case GGML_TYPE_IQ4_XS: result = quantize_iq4_xs (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
7584 case GGML_TYPE_F16:
7585 {
7586 size_t elemsize = sizeof(ggml_fp16_t);
7587 ggml_fp32_to_fp16_row(src + start, (ggml_fp16_t *)dst + start, n);
7588 result = n * elemsize;
7589 } break;
7590 case GGML_TYPE_BF16:
7591 {
7592 size_t elemsize = sizeof(ggml_bf16_t);
7593 ggml_fp32_to_bf16_row_ref(src + start, (ggml_bf16_t *)dst + start, n);
7594 result = n * elemsize;

Callers 3

init_tensor_uniformFunction · 0.85
ggml_vk_quantize_dataFunction · 0.85

Calls 15

ggml_quantize_initFunction · 0.85
ggml_row_sizeFunction · 0.85
quantize_q4_0Function · 0.85
quantize_q4_1Function · 0.85
quantize_q5_0Function · 0.85
quantize_q5_1Function · 0.85
quantize_q8_0Function · 0.85
quantize_mxfp4Function · 0.85
quantize_q2_KFunction · 0.85
quantize_q3_KFunction · 0.85
quantize_q4_KFunction · 0.85

Tested by 1

init_tensor_uniformFunction · 0.68