Repository navigation
Regenerate the bindings against ROCm 10.1 - #553
Merged
Merged
Conversation
Regenerated from /opt/rocm-10.1/include (10.1.0), replacing the ROCm 10.0 generation. Sixty new routines across nine libraries, and no routine is dropped: rocsolver +28 hipblas +9 rocblas +6 hipsparse +5 rocfft +4 rocsparse +3 hipsolver +2 hip +2 hipfft +1 The supported-API tables under docs/doxygen/input are regenerated with the bindings, so the row counts track the new interfaces (rocsolver 1021, rocblas 1219, hipblas 1207, hipsparse 557, hipsolver 538, hip 537, rocsparse 731, hipfftw 70, rocfft 33, rocrand 33, hiprand 30, hipfft 34, roctx 12). The bind(C) symbol tests under test/f2003 pick up the new entry points. The trmv/tpmv batched by-value fix is preserved. The generator previously recognized a device array of pointers only when the header spelled it `T* const A[]`, so the sixteen trmv/tpmv entry points that spell it `T* const* A` regenerated by reference and silently reverted the fix. Pointer-to-pointer is now treated the same as array-of-pointer, which reproduces the fix from the headers: exactly the same sixteen entry points and thirty-two arguments, and nothing else in rocBLAS changes. All thirty-three modules compile with gfortran under USE_FPOINTER_INTERFACES=1.
The symbol tests under test/f2003 reference every entry point of a library and link against the ROCm that is actually installed. Regenerating them against 10.1 makes them demand symbols that the older ROCm on CI does not export, so the link fails there even though the bindings themselves are fine. Restore the nine test files to develop and keep only the regenerated bindings and the supported-API tables. They can be regenerated once CI moves to 10.1.
Sixteen of the eighteen entry points ROCm 10.1 adds to the hip* libraries
have a CUDA equivalent, but they were emitted without a USE_CUDA_NAMES
branch, so they kept their hip* name and would not link against CUDA:
hip hipDeviceGetLuid, hipInitDevice
hipblas {S,D}gemmGroupedBatched, GemmGroupedBatchedEx, and their _64
hipfft hipfftXtSetWorkArea
hipsolver hipsolverDnXlarft, hipsolverDnXlarft_bufferSize
hipsparse hipsparseSpGEAM and its bufferSize/createDescr/destroyDescr/nnz
hipDeviceGetLuid binds to the driver entry point cuDeviceGetLuid: there is
no cudaDeviceGetLuid, and the hip map already carries fifty driver-API
names, including the directly analogous hipDeviceGetUuid.
hipblasGemmGroupedBatchedExWithFlags and its _64 variant are left on their
hip* name. cuBLAS exposes exactly six GroupedBatched entry points and none
of them takes flags.
Every cu* name was checked against nm -D on the installed libraries
(libcublas 13.6.0.2, libcusparse 12.8.2.51, libcusolver 12.2.6.9,
libcufft 12.3.0.29, libcudart 13.3.29, and the libcuda stub) as well as
against the CUDA 13.4 and 13.3.1 symbol dumps. All sixteen are exported by
all three; the two left unmapped are absent from all three.
The diff adds sixteen bind names and nothing else: no routine is added or
removed, and rocBLAS is untouched. The modules compile with gfortran both
with and without -DUSE_CUDA_NAMES. The symbol tests under test/f2003 stay
at their current generation, as in the previous commit.
The Doxygen build fails on hipfort_hipfft.F90 with an unresolved explicit link to hipfftSetWorkArea, and WARN_AS_ERROR aborts on the first one. ROCm 10.1 adds hipfftXtSetWorkArea, whose docstring points at ::hipfftSetWorkArea, and the note on hipfftSetWorkArea points back at ::hipfftXtSetWorkArea. Both interfaces carry a USE_CUDA_NAMES branch, so their bodies hold two function declarations separated by #ifdef/#else, and the docs Doxyfile sets ENABLE_PREPROCESSING = NO: Doxygen sees the raw directives and does not register the interface, so the link target does not exist. develop already had 1567 interfaces with a CUDA branch and not one documentation link pointing at any of them; these are the first two. The same docstrings also reference ::hipfftXtSetGPUs three times. hipfort never binds it, in 10.1 or before, so that target has never existed either. It is denylisted in the same pass rather than waiting for the docs build to abort on it once the first two are fixed. All three become inline code. No other library changes, and the modules still compile with and without -DUSE_CUDA_NAMES.
::rocfft_execution_info_set_load_callback_data and its store counterpart do not resolve in the Doxygen the docs build runs, so WARN_AS_ERROR aborts on the first one and hides the second. Whether such a link resolves turns out to be a property of the Doxygen version, not of the source. Read the Docs installs Ubuntu 24.04's apt doxygen, 1.9.8 today, which refuses both even though it registers the interfaces as compounds; 1.18 resolves them. So there is no structural difference to key on: the same tree passes or fails depending only on which Doxygen reads it. That is also why the previous commit missed these two. The denylist refresh ran whatever doxygen came first in PATH, a newer one, and reported a fixed point. It now runs the same version as the docs build, and finds these two directly. The three hipFFT targets neutralized in the previous commit are confirmed by the same run, so that commit was right about what to fix even though it was wrong about why. Reproduced by preprocessing the modules exactly as docs/conf.py does (gfortran -E -cpp -P -DUSE_FPOINTER_INTERFACES -UUSE_CUDA_NAMES) and running doxygen 1.9.8 with the repository's own Doxyfile: five unresolved targets before, none after.
amontoison
force-pushed
the
regen/rocm-10.1
branch
from
September 27, 2026 05:39
9a88de4 to
7d67d33
Compare
amontoison
added a commit
that referenced
this pull request
Oct 6, 2026
The symbol tests were last regenerated before #553, #564, #571, #572 and 5de6093, so they no longer matched the bindings: eight of them failed to compile with -DHIPFORT_EXTENDED_TESTS=ON, passing type(c_ptr) to arguments those changes typed (hipblasGetProperty_, hipsolver *gels niters, the hipSPARSE/rocSPARSE descriptor getters, rocfft_cache_serialize, the hipFFTW guru dims, ...). Regenerated with gen_symbol_tests.jl from rocm-fortran main, against the bindings on develop. Besides the signature fixes, the tests now reference the routines added by the ROCm 10.1 regeneration (rocsolver cholqr and larft_64, rocblas gemm_grouped_batched, ...). Most of the remaining churn is the scratch variables being renumbered around the new types. Built with gfortran against ROCm 10.1 with -DHIPFORT_EXTENDED_TESTS=ON: all 13 symbol tests compile, link and pass, and the full ctest run shows only the three known WSL failures (hip_mem_advise f2003/f2008, hip_module_kernel).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Regenerated from
/opt/rocm-10.1/include(10.1.0), replacing the ROCm 10.0 generation.What changes
Sixty new routines across nine libraries, and no routine is dropped:
The supported-API tables under
docs/doxygen/inputare regenerated alongside the bindings, so the row counts track the new interfaces (rocsolver 1021, rocblas 1219, hipblas 1207, rocsparse 731, hipsparse 557, hipsolver 538, hip 537, hipfftw 70, hipfft 34, rocfft 33, rocrand 33, hiprand 30, roctx 12).