From cae0b9d7427bab3521f49a0abc6433f410f70588 Mon Sep 17 00:00:00 2001 From: mloubout Date: Mon, 5 Jan 2026 22:37:12 -0500 Subject: [PATCH 1/3] arch: prevent erroring at init in isolation --- devito/arch/archinfo.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/devito/arch/archinfo.py b/devito/arch/archinfo.py index 020f66323d..59e50d5c70 100644 --- a/devito/arch/archinfo.py +++ b/devito/arch/archinfo.py @@ -661,6 +661,11 @@ def check_cuda_runtime(): driver_version = driver_version.value runtime_version = runtime_version.value + if driver_version == 0: + # cudart present but no driver detected. Likely isolation + # run such as version check or within a docker build. + return + driver_v = parse(str(driver_version/1000)) runtime_v = parse(str(runtime_version/1000)) # First check the "major" version, known to be incompatible From a627fe4a68b240d88a047f3961931d7dfbe4653c Mon Sep 17 00:00:00 2001 From: Jack Betteridge Date: Tue, 6 Jan 2026 12:41:17 +0000 Subject: [PATCH 2/3] arch: Warn users if driver version is 0 --- devito/arch/archinfo.py | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/devito/arch/archinfo.py b/devito/arch/archinfo.py index 59e50d5c70..0e0612004f 100644 --- a/devito/arch/archinfo.py +++ b/devito/arch/archinfo.py @@ -656,18 +656,13 @@ def check_cuda_runtime(): driver_version = ctypes.c_int() runtime_version = ctypes.c_int() - if cuda.cudaDriverGetVersion(ctypes.byref(driver_version)) == 0 and \ - cuda.cudaRuntimeGetVersion(ctypes.byref(runtime_version)) == 0: - driver_version = driver_version.value - runtime_version = runtime_version.value - - if driver_version == 0: - # cudart present but no driver detected. Likely isolation - # run such as version check or within a docker build. - return - - driver_v = parse(str(driver_version/1000)) - runtime_v = parse(str(runtime_version/1000)) + # Check the get*Version call succeeds and is a non-zero value + if cuda.cudaDriverGetVersion(ctypes.byref(driver_version)) == 0 \ + and cuda.cudaRuntimeGetVersion(ctypes.byref(runtime_version)) == 0 \ + and driver_version.value: + + driver_v = parse(str(driver_version.value/1000)) + runtime_v = parse(str(runtime_version.value/1000)) # First check the "major" version, known to be incompatible if driver_v.major < runtime_v.major: raise RuntimeError( From 8dad3b51b4336613c760d96e52e8890f0a53f5d6 Mon Sep 17 00:00:00 2001 From: Jack Betteridge Date: Fri, 9 Jan 2026 15:40:44 +0000 Subject: [PATCH 3/3] misc: Refactor long conditional --- devito/arch/archinfo.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/devito/arch/archinfo.py b/devito/arch/archinfo.py index 0e0612004f..88d1b3304c 100644 --- a/devito/arch/archinfo.py +++ b/devito/arch/archinfo.py @@ -657,10 +657,11 @@ def check_cuda_runtime(): runtime_version = ctypes.c_int() # Check the get*Version call succeeds and is a non-zero value - if cuda.cudaDriverGetVersion(ctypes.byref(driver_version)) == 0 \ - and cuda.cudaRuntimeGetVersion(ctypes.byref(runtime_version)) == 0 \ - and driver_version.value: + call_success = cuda.cudaDriverGetVersion(ctypes.byref(driver_version)) == 0 + call_success &= cuda.cudaRuntimeGetVersion(ctypes.byref(runtime_version)) == 0 + call_success &= bool(driver_version.value) + if call_success: driver_v = parse(str(driver_version.value/1000)) runtime_v = parse(str(runtime_version.value/1000)) # First check the "major" version, known to be incompatible