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

Function ggml_gallocr_new_n

subprojects/llama.cpp/ggml/src/ggml-alloc.c:501–535  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

499};
500
501ggml_gallocr_t ggml_gallocr_new_n(ggml_backend_buffer_type_t * bufts, int n_bufs) {
502 ggml_gallocr_t galloc = (ggml_gallocr_t)calloc(1, sizeof(struct ggml_gallocr));
503 GGML_ASSERT(galloc != NULL);
504
505 galloc->bufts = calloc(n_bufs, sizeof(ggml_backend_buffer_type_t));
506 GGML_ASSERT(galloc->bufts != NULL);
507
508 galloc->buffers = calloc(n_bufs, sizeof(struct vbuffer *));
509 GGML_ASSERT(galloc->buffers != NULL);
510
511 galloc->buf_tallocs = calloc(n_bufs, sizeof(struct ggml_dyn_tallocr *));
512 GGML_ASSERT(galloc->buf_tallocs != NULL);
513
514 for (int i = 0; i < n_bufs; i++) {
515 galloc->bufts[i] = bufts[i];
516 galloc->buffers[i] = NULL;
517
518 // check if the same buffer type is used multiple times and reuse the same allocator
519 for (int j = 0; j < i; j++) {
520 if (bufts[i] == bufts[j]) {
521 galloc->buf_tallocs[i] = galloc->buf_tallocs[j];
522 break;
523 }
524 }
525
526 if (galloc->buf_tallocs[i] == NULL) {
527 size_t alignment = ggml_backend_buft_get_alignment(bufts[i]);
528 size_t max_size = ggml_backend_buft_get_max_size(bufts[i]);
529 galloc->buf_tallocs[i] = ggml_dyn_tallocr_new(alignment, max_size);
530 }
531 }
532 galloc->n_buffers = n_bufs;
533
534 return galloc;
535}
536
537ggml_gallocr_t ggml_gallocr_new(ggml_backend_buffer_type_t buft) {
538 return ggml_gallocr_new_n(&buft, 1);

Callers 4

test_buffer_size_zeroFunction · 0.85
ggml_gallocr_newFunction · 0.85
ggml_backend_sched_newFunction · 0.85

Calls 3

ggml_dyn_tallocr_newFunction · 0.85

Tested by 2

test_buffer_size_zeroFunction · 0.68