From fdc1260e99191717b0aa0a48117d4b758a24a513 Mon Sep 17 00:00:00 2001 From: Victor-Loos Date: Sat, 18 Jul 2026 14:47:23 +0200 Subject: [PATCH 1/2] ggml-cuda: avoid ROCm_Host compute on HIP integrated GPUs --- ggml/src/ggml-cuda/ggml-cuda.cu | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/ggml/src/ggml-cuda/ggml-cuda.cu b/ggml/src/ggml-cuda/ggml-cuda.cu index 4aaa4f367afc..e868a54a1d95 100644 --- a/ggml/src/ggml-cuda/ggml-cuda.cu +++ b/ggml/src/ggml-cuda/ggml-cuda.cu @@ -4661,6 +4661,20 @@ static enum ggml_backend_dev_type ggml_backend_cuda_device_get_type(ggml_backend : GGML_BACKEND_DEVICE_TYPE_GPU; } +static bool ggml_backend_cuda_host_buffer_supported() { + return getenv("GGML_CUDA_NO_PINNED") == nullptr; +} + +static bool ggml_backend_cuda_device_supports_cuda_host_buft(int device) { +#if defined(GGML_USE_HIP) + if (ggml_cuda_info().devices[device].integrated) { + return false; + } +#endif + + return ggml_backend_cuda_host_buffer_supported(); +} + static void ggml_backend_cuda_device_get_props(ggml_backend_dev_t dev, ggml_backend_dev_props * props) { ggml_backend_cuda_device_context * ctx = (ggml_backend_cuda_device_context *)dev->context; @@ -4670,7 +4684,7 @@ static void ggml_backend_cuda_device_get_props(ggml_backend_dev_t dev, ggml_back props->device_id = ctx->pci_bus_id.empty() ? nullptr : ctx->pci_bus_id.c_str(); ggml_backend_cuda_device_get_memory(dev, &props->memory_free, &props->memory_total); - bool host_buffer = getenv("GGML_CUDA_NO_PINNED") == nullptr; + bool host_buffer = ggml_backend_cuda_host_buffer_supported(); #ifdef GGML_CUDA_NO_PEER_COPY bool events = false; #else @@ -4698,6 +4712,10 @@ static ggml_backend_buffer_type_t ggml_backend_cuda_device_get_buffer_type(ggml_ static ggml_backend_buffer_type_t ggml_backend_cuda_device_get_host_buffer_type(ggml_backend_dev_t dev) { GGML_UNUSED(dev); + if (!ggml_backend_cuda_host_buffer_supported()) { + return nullptr; + } + return ggml_backend_cuda_host_buffer_type(); } @@ -5131,7 +5149,10 @@ static bool ggml_backend_cuda_device_supports_op(ggml_backend_dev_t dev, const g static bool ggml_backend_cuda_device_supports_buft(ggml_backend_dev_t dev, ggml_backend_buffer_type_t buft) { ggml_backend_cuda_device_context * dev_ctx = (ggml_backend_cuda_device_context *) dev->context; const bool integrated = ggml_cuda_info().devices[dev_ctx->device].integrated; - return (ggml_backend_buft_is_cuda(buft) && buft->device == dev) || (integrated && ggml_backend_buft_is_cuda_host(buft)); + return (ggml_backend_buft_is_cuda(buft) && buft->device == dev) || + (integrated && + ggml_backend_buft_is_cuda_host(buft) && + ggml_backend_cuda_device_supports_cuda_host_buft(dev_ctx->device)); } static int64_t get_op_batch_size(const ggml_tensor * op) { From ce82541acbaf5c532c0727d6ccb6de2b0b0c948d Mon Sep 17 00:00:00 2001 From: Victor-Loos Date: Tue, 21 Jul 2026 19:09:27 +0200 Subject: [PATCH 2/2] ggml-cuda: fix unused parameter in non-HIP builds --- ggml/src/ggml-cuda/ggml-cuda.cu | 2 ++ 1 file changed, 2 insertions(+) mode change 100644 => 100755 ggml/src/ggml-cuda/ggml-cuda.cu diff --git a/ggml/src/ggml-cuda/ggml-cuda.cu b/ggml/src/ggml-cuda/ggml-cuda.cu old mode 100644 new mode 100755 index e868a54a1d95..83eb1a42d443 --- a/ggml/src/ggml-cuda/ggml-cuda.cu +++ b/ggml/src/ggml-cuda/ggml-cuda.cu @@ -4670,6 +4670,8 @@ static bool ggml_backend_cuda_device_supports_cuda_host_buft(int device) { if (ggml_cuda_info().devices[device].integrated) { return false; } +#else + GGML_UNUSED(device); #endif return ggml_backend_cuda_host_buffer_supported();