Skip to content

Regenerate the bindings against ROCm 10.1 - #553

Merged
amontoison merged 5 commits into
developfrom
regen/rocm-10.1
Sep 27, 2026
Merged

amontoison merged 5 commits into
developfrom
regen/rocm-10.1

Conversation

@amontoison

@amontoison amontoison commented Sep 27, 2026 •

Copy link
Copy Markdown
Collaborator

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:

library new library new library new
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 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).

@amontoison
amontoison requested a review from a team as a code owner September 27, 2026 04:29
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
amontoison merged commit 4ff96cb into develop Sep 27, 2026
3 checks passed
@amontoison
amontoison deleted the regen/rocm-10.1 branch September 27, 2026 13:21
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).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant