Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b0915d5

Browse files
SRHMorrisSamuel Morris
authored andcommitted
vulkan : retry allocation with fallback flags (whisper/2451)
Co-authored-by: Samuel Morris <[email protected]>
1 parent 8c475b9 commit b0915d5

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

ggml/src/ggml-vulkan.cpp

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,10 +1070,25 @@ static vk_buffer ggml_vk_create_buffer(vk_device& device, size_t size, vk::Memor
10701070
try {
10711071
buf->device_memory = device->device.allocateMemory({ mem_req.size, memory_type_index });
10721072
} catch (const vk::SystemError& e) {
1073-
// Out of Host/Device memory, clean up buffer
1074-
device->device.destroyBuffer(buf->buffer);
1075-
buf->size = 0;
1076-
throw e;
1073+
if (buf->memory_property_flags != fallback_flags) {
1074+
// Try again with fallback flags
1075+
memory_type_index = find_properties(&mem_props, &mem_req, fallback_flags);
1076+
buf->memory_property_flags = fallback_flags;
1077+
1078+
try {
1079+
buf->device_memory = device->device.allocateMemory({ mem_req.size, memory_type_index });
1080+
}
1081+
catch (const vk::SystemError& e) {
1082+
device->device.destroyBuffer(buf->buffer);
1083+
buf->size = 0;
1084+
throw e;
1085+
}
1086+
} else {
1087+
// Out of Host/Device memory, clean up buffer
1088+
device->device.destroyBuffer(buf->buffer);
1089+
buf->size = 0;
1090+
throw e;
1091+
}
10771092
}
10781093
buf->ptr = nullptr;
10791094

0 commit comments

Comments
 (0)