Bug#882667: hypre: CUDA support: hacks impeded by -W flags
Drew Parsons
dparsons at debian.org
Wed Sep 23 15:27:13 BST 2026
Source: hypre
Followup-For: Bug #882667
Control: retitle -1 hypre: activate GPU support
Control: forwarded -1 https://github.com/hypre-space/hypre/issues/1624
The problem with support for alternative GPUs raised in the previous
message can be worked around by configuring the build for just one GPU
architecture, e.g. -DCMAKE_HIP_ARCHITECTURES=gfx1201 alone.
libHYPRE.so then builds successfully, and test programs (e.g. ij) build.
But running tests then fails, if the GPU in question is not actually
present, which would be the case for instance on debian build daemons.
$ ./ij
HIP ERROR (code = 100, no ROCm-capable device is detected) at /build/hypre/src/utilities/general.c:307
[cirdan:452875] *** Process received signal ***
[cirdan:452875] Signal: Floating point exception (8)
[cirdan:452875] Signal code: Integer divide-by-zero (1)
[cirdan:452875] Failing at address: 0x7f6144a7aca8
[cirdan:452875] [ 0] /usr/lib/x86_64-linux-gnu/libc.so.6(+0x406b0) [0x7f60206926b0]
[cirdan:452875] [ 1] /build/hypre/obj-x86_64-linux-gnu/lib/libHYPRE.so.302(hypre_bind_device_id+0x68) [0x7f6144a7aca8]
[cirdan:452875] [ 2] ./ij(+0xf388) [0x55a247f5d388]
[cirdan:452875] [ 3] /usr/lib/x86_64-linux-gnu/libc.so.6(+0x29fba) [0x7f602067bfba]
[cirdan:452875] [ 4] /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x87) [0x7f602067c0d7]
[cirdan:452875] [ 5] ./ij(+0xe541) [0x55a247f5c541]
[cirdan:452875] *** End of error message ***
Floating point exception ./ij
When inspecting available devices, hipGetDeviceCount returns
hipErrorNoDevice if it doesn't find a device.
https://rocmdocs.amd.com/projects/HIP/en/latest/reference/hip_runtime_api/modules/device_management.html#_CPPv417hipGetDeviceCountPi
And hypre treats any response other than hipSuccess as a fatal error.
So it does not fall back to a non-HIP execution path.
The issue is raised at https://github.com/hypre-space/hypre/issues/1624
This makes it difficult to manage the GPU builds, if a separate
libHYPRE.so is needed for each one. It also means build-time testing
would not be possible (but that's effectively the case anyway,
building for a GPU without that GPU being present).
A general observation is that the infrastructure for GPU usage is not
fully mature yet, which impedes general package builds. For comparison
capabilities of CPUs within a given architecture family can be
inspected at runtime e.g. checking for avx512 availability.
simd (xsimd) usage uses this runtime capability.
The GPU situation is more like multiple families of CPU architectures,
amd64 vs arm64 vs ppc64le etc, which means building for all GPUs
separately gives an N×M profilation of library binary files.
cmake itself allows for multiple GPU architectures listed in
CMAKE_HIP_ARCHITECTURES, so possibly hypre is making it more
complicated than other libraries by allowing only one GPU arch at a
time.
More information about the debian-science-maintainers
mailing list