mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-10-31 08:51:55 +00:00 
			
		
		
		
	Enable use to the rebar feature to upload buffers to the device. (#9251)
This commit is contained in:
		| @@ -1079,7 +1079,8 @@ static vk_buffer ggml_vk_create_buffer_device(vk_device& device, size_t size) { | ||||
|             // Fall back to host memory type | ||||
|             buf = ggml_vk_create_buffer(device, size, vk::MemoryPropertyFlagBits::eDeviceLocal, vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent); | ||||
|         } else { | ||||
|             buf = ggml_vk_create_buffer(device, size, vk::MemoryPropertyFlagBits::eDeviceLocal); | ||||
|             // use rebar if available, otherwise fallback to device only visible memory | ||||
|             buf = ggml_vk_create_buffer(device, size, vk::MemoryPropertyFlagBits::eDeviceLocal | vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent, vk::MemoryPropertyFlagBits::eDeviceLocal); | ||||
|         } | ||||
|     } catch (const vk::SystemError& e) { | ||||
|         std::cerr << "ggml_vulkan: Device memory allocation of size " << size << " failed." << std::endl; | ||||
| @@ -2806,7 +2807,11 @@ static void ggml_vk_buffer_read_async(vk_context subctx, vk_buffer& src, size_t | ||||
|  | ||||
| static void ggml_vk_buffer_read(vk_buffer& src, size_t offset, void * dst, size_t size) { | ||||
|     VK_LOG_DEBUG("ggml_vk_buffer_read(" << src->buffer << ", " << offset << ", " << size << ")"); | ||||
|     if(src->memory_property_flags & vk::MemoryPropertyFlagBits::eHostVisible) { | ||||
|  | ||||
|     // If the device is not an UMA device the memory is host-accessible through rebar. While writing | ||||
|     // through PCIe is sufficient fast reading back data from PCIe is slower than going through | ||||
|     // the HW device to host copy path. | ||||
|     if(src->memory_property_flags & vk::MemoryPropertyFlagBits::eHostVisible && src->device->uma) { | ||||
|         GGML_ASSERT(src->memory_property_flags & vk::MemoryPropertyFlagBits::eHostCoherent); | ||||
|  | ||||
|         memcpy(dst, (uint8_t *) src->ptr + offset, size); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Markus Tavenrath
					Markus Tavenrath