| 823 | } |
| 824 | |
| 825 | void llama_model_loader::init_mappings(bool prefetch, llama_mlocks * mlock_mmaps) { |
| 826 | if (use_mmap) { |
| 827 | mappings.reserve(files.size()); |
| 828 | mmaps_used.reserve(files.size()); |
| 829 | for (const auto & file : files) { |
| 830 | bool is_numa = false; |
| 831 | |
| 832 | auto * dev = ggml_backend_dev_by_type(GGML_BACKEND_DEVICE_TYPE_CPU); |
| 833 | if (dev) { |
| 834 | auto * reg = ggml_backend_dev_backend_reg(dev); |
| 835 | auto * is_numa_fn = (decltype(ggml_is_numa) *) ggml_backend_reg_get_proc_address(reg, "ggml_backend_cpu_is_numa"); |
| 836 | if (is_numa_fn) { |
| 837 | is_numa = is_numa_fn(); |
| 838 | } |
| 839 | } |
| 840 | |
| 841 | std::unique_ptr<llama_mmap> mapping = std::make_unique<llama_mmap>(file.get(), prefetch ? -1 : 0, is_numa); |
| 842 | mmaps_used.emplace_back(mapping->size(), 0); |
| 843 | if (mlock_mmaps) { |
| 844 | std::unique_ptr<llama_mlock> mlock_mmap(new llama_mlock()); |
| 845 | mlock_mmap->init(mapping->addr()); |
| 846 | mlock_mmaps->emplace_back(std::move(mlock_mmap)); |
| 847 | } |
| 848 | mappings.emplace_back(std::move(mapping)); |
| 849 | } |
| 850 | } |
| 851 | |
| 852 | // compute the total size of all tensors for progress reporting |
| 853 | for (const auto & it : weights_map) { |
| 854 | size_data += ggml_nbytes(it.second.tensor); |
| 855 | } |
| 856 | } |
| 857 | |
| 858 | void llama_model_loader::get_mapping_range(size_t * first, size_t * last, void ** addr, int idx, ggml_context * ctx) const { |
| 859 | GGML_ASSERT(!mappings.empty()); |
no test coverage detected