Skip to content

Commit 3e4bb29

Browse files
authored
vulkan: Check maxStorageBufferRange in supports_op (ggml-org#18709)
* vulkan: Check maxStorageBufferRange in supports_op * skip maxStorageBufferRange check when shader64BitIndexing is enabled
1 parent 47f9612 commit 3e4bb29

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

ggml/src/ggml-vulkan/ggml-vulkan.cpp

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14413,13 +14413,29 @@ static bool ggml_backend_vk_device_supports_op(ggml_backend_dev_t dev, const ggm
1441314413
ggml_backend_vk_device_context * ctx = (ggml_backend_vk_device_context *)dev->context;
1441414414
const vk_device& device = ggml_vk_get_device(ctx->device);
1441514415

14416+
const bool uses_bda = (op->op == GGML_OP_IM2COL || op->op == GGML_OP_IM2COL_3D) &&
14417+
device->shader_int64 && device->buffer_device_address;
14418+
14419+
auto const & tensor_size_supported = [&](size_t tensor_size) {
14420+
if (tensor_size > device->max_buffer_size) {
14421+
return false;
14422+
}
14423+
// For im2col shaders using BDA, maxStorageBufferRange limit doesn't apply.
14424+
// If shader64BitIndexing is enabled, maxStorageBufferRange limit doesn't apply.
14425+
if (!uses_bda && !device->shader_64b_indexing) {
14426+
if (tensor_size > device->properties.limits.maxStorageBufferRange) {
14427+
return false;
14428+
}
14429+
}
14430+
return true;
14431+
};
1441614432
// reject any tensors larger than the max buffer size
1441714433
for (int i = 0; i < GGML_MAX_SRC; i++) {
14418-
if (op->src[i] && ggml_nbytes(op->src[i]) > device->max_buffer_size) {
14434+
if (op->src[i] && !tensor_size_supported(ggml_nbytes(op->src[i]))) {
1441914435
return false;
1442014436
}
1442114437
}
14422-
if (ggml_nbytes(op) > device->max_buffer_size) {
14438+
if (!tensor_size_supported(ggml_nbytes(op))) {
1442314439
return false;
1442414440
}
1442514441

0 commit comments

Comments
 (0)