GPU: split if LLAMA_SPLIT_MODE_ROW -> GPU
| 387 | |
| 388 | // GPU: split if LLAMA_SPLIT_MODE_ROW -> GPU |
| 389 | static buft_list_t make_gpu_buft_list(ggml_backend_dev_t dev, llama_split_mode split_mode, const float * tensor_split) { |
| 390 | buft_list_t buft_list; |
| 391 | |
| 392 | // add the device split buffer type if requested and available |
| 393 | if (split_mode == LLAMA_SPLIT_MODE_ROW) { |
| 394 | ggml_backend_reg_t reg = ggml_backend_dev_backend_reg(dev); |
| 395 | auto ggml_backend_split_buffer_type_fn = (ggml_backend_split_buffer_type_t) |
| 396 | ggml_backend_reg_get_proc_address(reg, "ggml_backend_split_buffer_type"); |
| 397 | if (ggml_backend_split_buffer_type_fn) { |
| 398 | size_t dev_index = [&]() { |
| 399 | auto * reg = ggml_backend_dev_backend_reg(dev); |
| 400 | for (size_t i = 0; i < ggml_backend_reg_dev_count(reg); ++i) { |
| 401 | if (ggml_backend_reg_dev_get(reg, i) == dev) { |
| 402 | return i; |
| 403 | } |
| 404 | } |
| 405 | throw std::runtime_error(format("device %s not found in its backend reg", ggml_backend_dev_name(dev))); |
| 406 | }(); |
| 407 | auto * buft = ggml_backend_split_buffer_type_fn(dev_index, tensor_split); |
| 408 | if (buft != nullptr) { |
| 409 | buft_list.emplace_back(dev, buft); |
| 410 | } |
| 411 | } |
| 412 | } |
| 413 | |
| 414 | // add the device default buffer type |
| 415 | buft_list.emplace_back(dev, ggml_backend_dev_buffer_type(dev)); |
| 416 | |
| 417 | // add the device extra buffer type (if any) |
| 418 | ggml_backend_reg_t reg = ggml_backend_dev_backend_reg(dev); |
| 419 | auto ggml_backend_dev_get_extra_bufts_fn = (ggml_backend_dev_get_extra_bufts_t) |
| 420 | ggml_backend_reg_get_proc_address(reg, "ggml_backend_dev_get_extra_bufts"); |
| 421 | |
| 422 | if (ggml_backend_dev_get_extra_bufts_fn) { |
| 423 | ggml_backend_buffer_type_t * extra_bufts = ggml_backend_dev_get_extra_bufts_fn(dev); |
| 424 | while (extra_bufts && *extra_bufts) { |
| 425 | buft_list.emplace_back(dev, *extra_bufts); |
| 426 | ++extra_bufts; |
| 427 | } |
| 428 | } |
| 429 | |
| 430 | return buft_list; |
| 431 | } |
| 432 | |
| 433 | struct llama_model::impl { |
| 434 | impl() = default; |
no test coverage detected