Skip to content

Add ppc64le (IBM POWER) architecture support#2637

Open
viniciusferrao wants to merge 13 commits into
openhpc:4.xfrom
VersatusHPC:pr/ppc64le-support
Open

Add ppc64le (IBM POWER) architecture support#2637
viniciusferrao wants to merge 13 commits into
openhpc:4.xfrom
VersatusHPC:pr/ppc64le-support

Conversation

@viniciusferrao

@viniciusferrao viniciusferrao commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Summary

ppc64le (IBM POWER) architecture enablement for OpenHPC 4.x / EL10. @adrianreber suggested bringing this upstream. Sponsored by VersatusHPC; validated on POWER9 hardware (AlmaLinux 10 and openEuler 24.03).

Restructured per review: one commit per spec file, single-line subjects. The gotcha ccache handling is brought in by cherry-picking the three relevant 2.x commits (git cherry-pick -x), with the ppc64le-specific gotcha change applied on top of them — not folded into a single commit.

Scope

Component specs that needed architecture handling: gotcha, gnu-compilers, boost, fftw, openblas, likwid (+ a perf_event uncore patch), pdtoolkit, numpy, mpich, and the meta-package closure. 11 files.

The GNU compiler POWER9 baseline already landed in OHPC_setup_compiler upstream, so it is no longer part of this PR.

Design

  • All ppc64le-specific changes are gated by %ifarch ppc64le (or %ifnarch … ppc64le in the meta-package), so the existing x86_64 and aarch64 builds are unaffected. For gotcha, rpmspec --parse differs by exactly one line between targets (the ppc64le CMAKE_INSTALL_LIBDIR=lib).
  • The baseline is -mcpu=power9, matching the EL9+ ppc64le distro minimum (redhat-rpm-config's %__cflags_arch_ppc64le) and forward-compatible with POWER10/POWER11.
  • Per-package highlights: openblas TARGET=POWER9, fftw --enable-vsx, boost architecture=power, likwid GCCPOWER + a perf_event uncore patch, pdtoolkit ibm64linux, a numpy VSX3 build fix, gotcha CMAKE_INSTALL_LIBDIR=lib (cmake otherwise defaults to lib64, which breaks the module's lib path — matching the existing scalapack idiom), and the meta-package groups scoped to the MPI families built on POWER (openmpi5).

Verification

Built every touched package from source on both x86_64 and ppc64le (clean containers; AlmaLinux 10 and openEuler 24.03). All compile, with no regression on the existing architectures — the gated hunks are inert off-POWER, confirmed by both rpmspec --parse diffs and real RPM builds. gotcha 1.0.10 (the version this PR cherry-picks from 2.x) builds clean on ppc64le with all 18 ctest cases passing.

Notes

  • Independent of the ucx/hwloc spec fixes at the merge level. A from-source build of the full ppc64le stack also wants the ucx Source0 fix to fetch ucx, but that's a build-time convenience, not a merge dependency.

Sponsored by VersatusHPC.

@github-actions

github-actions Bot commented Jun 29, 2026

Copy link
Copy Markdown

📦 Package Count Analysis Results

Environment: UBI 10 Container
Target Branch: 4.x
Version: OpenHPC 4.x
Overall Status:Analysis completed successfully

🏭 Factory Repositories

Status:Factory repositories analysis completed successfully

Release Base OS aarch64 x86_64 noarch Total
4.2 EL_10 17 29 12 58
4.2 openEuler_24.03 17 19 12 48
Total All 34 48 24 106

Analysis performed by OpenHPC Package Count CI
Commit: d5c35a9b
Workflow: 28404646398

@github-actions

github-actions Bot commented Jun 29, 2026

Copy link
Copy Markdown

📊 Build Order Analysis Results

Environment: AlmaLinux 10 Container
Total Spec Files Analyzed: 89
Status:Build order analysis completed successfully

📋 Build Order Output

📦 Build Order (84 packages)

➕ Show remaining 69 packages

Analysis performed by OpenHPC Build Order CI
Commit: d5c35a9b
Workflow: 28404646393

@adrianreber

Copy link
Copy Markdown
Member

For easier re-use on our different branches it would be good to have one commit for each spec file. Please change that, so that each commit changes only one spec file. The ccache changes in gotcha.spec should also not be part of the same commit. There are three commits on the 2.x branch for gotcha which can be brought to 4.x with git cherry-pick -x. Then apply your changes on top of it.

@viniciusferrao

Copy link
Copy Markdown
Contributor Author

For easier re-use on our different branches it would be good to have one commit for each spec file. Please change that, so that each commit changes only one spec file. The ccache changes in gotcha.spec should also not be part of the same commit. There are three commits on the 2.x branch for gotcha which can be brought to 4.x with git cherry-pick -x. Then apply your changes on top of it.

Alright. I'll look at it.

adrianreber and others added 13 commits June 29, 2026 14:42
Signed-off-by: Adrian Reber <areber@redhat.com>
(cherry picked from commit b4591a8)
- gotcha: 1.0.8 -> 1.0.10
  upstream: llnl/gotcha

Command: `misc/check_for_package_updates.py -v -o markdown gotcha
  --update`

Signed-off-by: Adrian Reber <areber@redhat.com>
(cherry picked from commit e0a7b0b)
Signed-off-by: Adrian Reber <areber@redhat.com>
(cherry picked from commit abff307)
Sponsored-by: VersatusHPC
Signed-off-by: Vinícius Ferrão <ferrao@versatushpc.com.br>
Sponsored-by: VersatusHPC
Signed-off-by: Vinícius Ferrão <ferrao@versatushpc.com.br>
Sponsored-by: VersatusHPC
Signed-off-by: Vinícius Ferrão <ferrao@versatushpc.com.br>
Sponsored-by: VersatusHPC
Signed-off-by: Vinícius Ferrão <ferrao@versatushpc.com.br>
Sponsored-by: VersatusHPC
Signed-off-by: Vinícius Ferrão <ferrao@versatushpc.com.br>
Sponsored-by: VersatusHPC
Signed-off-by: Vinícius Ferrão <ferrao@versatushpc.com.br>
Sponsored-by: VersatusHPC
Signed-off-by: Vinícius Ferrão <ferrao@versatushpc.com.br>
Sponsored-by: VersatusHPC
Signed-off-by: Vinícius Ferrão <ferrao@versatushpc.com.br>
Sponsored-by: VersatusHPC
Signed-off-by: Vinícius Ferrão <ferrao@versatushpc.com.br>
Sponsored-by: VersatusHPC
Signed-off-by: Vinícius Ferrão <ferrao@versatushpc.com.br>
@github-actions

github-actions Bot commented Jun 30, 2026

Copy link
Copy Markdown

🚀 CCache Statistics

Configuration 🐧 RHEL 🦊 openEuler
🖥️ x86_64 / gnu15 🟡 24.45% 🟡 24.61%
🖥️ x86_64 / intel 🟢 59.96% -
💪 aarch64 / gnu15 🟡 21.52% 🟡 21.79%
📊 Detailed Statistics

openEuler (aarch64)

Cacheable calls:    37185 / 49218 (75.55%)
  Hits:              8102 / 37185 (21.79%)
    Direct:          7369 /  8102 (90.95%)
    Preprocessed:     733 /  8102 ( 9.05%)
  Misses:           29083 / 37185 (78.21%)
Uncacheable calls:  12033 / 49218 (24.45%)
Local storage:
  Cache size (GiB):   1.1 /   5.0 (22.60%)
  Hits:              8102 / 37185 (21.79%)
  Misses:           29083 / 37185 (78.21%)

openEuler (x86_64)

Cacheable calls:    72243 / 87236 (82.81%)
  Hits:             17781 / 72243 (24.61%)
    Direct:         16530 / 17781 (92.96%)
    Preprocessed:    1251 / 17781 ( 7.04%)
  Misses:           54462 / 72243 (75.39%)
Uncacheable calls:  14993 / 87236 (17.19%)
Local storage:
  Cache size (GiB):   1.6 /   5.0 (32.00%)
  Hits:             17781 / 72243 (24.61%)
  Misses:           54462 / 72243 (75.39%)

RHEL (aarch64/gnu15)

Cacheable calls:    37575 / 49525 (75.87%)
  Hits:              8085 / 37575 (21.52%)
    Direct:          7366 /  8085 (91.11%)
    Preprocessed:     719 /  8085 ( 8.89%)
  Misses:           29490 / 37575 (78.48%)
Uncacheable calls:  11950 / 49525 (24.13%)
Local storage:
  Cache size (GiB):   1.1 /   5.0 (22.89%)
  Hits:              8085 / 37575 (21.52%)
  Misses:           29490 / 37575 (78.48%)

RHEL (x86_64/gnu15)

Cacheable calls:    72874 / 88085 (82.73%)
  Hits:             17817 / 72874 (24.45%)
    Direct:         16580 / 17817 (93.06%)
    Preprocessed:    1237 / 17817 ( 6.94%)
  Misses:           55057 / 72874 (75.55%)
Uncacheable calls:  15211 / 88085 (17.27%)
Local storage:
  Cache size (GiB):   1.7 /   5.0 (33.08%)
  Hits:             17817 / 72874 (24.45%)
  Misses:           55057 / 72874 (75.55%)

RHEL (x86_64/intel)

Cacheable calls:    41465 / 62865 (65.96%)
  Hits:             24864 / 41465 (59.96%)
    Direct:         23473 / 24864 (94.41%)
    Preprocessed:    1391 / 24864 ( 5.59%)
  Misses:           16601 / 41465 (40.04%)
Uncacheable calls:  21400 / 62865 (34.04%)
Local storage:
  Cache size (GiB):   0.8 /   5.0 (15.67%)
  Hits:             24864 / 41465 (59.96%)
  Misses:           16601 / 41465 (40.04%)

🤖 Generated from workflow run 28404646394

@viniciusferrao

Copy link
Copy Markdown
Contributor Author

Hi @adrianreber, PR was amended to have the separate commits per file.

The other issues were also addressed.

Thanks.

@viniciusferrao

Copy link
Copy Markdown
Contributor Author

Those aarch64 failures were unexpected. I will look at it.

@adrianreber

Copy link
Copy Markdown
Member

Those aarch64 failures were unexpected. I will look at it.

Don't worry, this is because of the meta packages for the arm HPC compiler. I know how to fix it.

@github-actions

Copy link
Copy Markdown

Test Results

31 files  + 2   1 errors  30 suites  +1   1m 16s ⏱️ +26s
53 tests  -  6  51 ✅  - 2  2 💤  - 4  0 ❌ ±0 
94 runs   - 11  92 ✅  - 5  2 💤  - 6  0 ❌ ±0 

For more details on these parsing errors, see this check.

Results for commit e5aea32. ± Comparison against base commit 4a21aea.

This pull request removes 26 and adds 20 tests. Note that renamed tests count towards both.
debugger ‑ [Compilers] debugger availability (intel)
debugger ‑ [Compilers] debugger man page (intel)
man_pages ‑ [Compilers] C compiler man/help page (intel)
man_pages ‑ [Compilers] C++ compiler man/help page (intel)
man_pages ‑ [Compilers] Fortran compiler man/help page (intel)
rm_execution ‑ [Compilers] C binary runs under resource manager (slurm/intel)
rm_execution ‑ [Compilers] C openmp binary runs under resource manager (slurm/intel)
rm_execution ‑ [Compilers] C++ binary runs under resource manager (slurm/intel)
rm_execution ‑ [Compilers] C++ openmp binary runs under resource manager (slurm/intel)
rm_execution ‑ [Compilers] Fortran binary runs under resource manager (slurm/intel)
…
man_page_check ‑ [MPI] mpicc man page available (gnu15/mpich)
man_page_check ‑ [MPI] mpicc man page available (gnu15/openmpi5)
rm_execution_multi_host ‑ [MPI] C binary runs on two nodes under resource manager (slurm/gnu15/mpich)
rm_execution_multi_host ‑ [MPI] C binary runs on two nodes under resource manager (slurm/gnu15/openmpi5)
rm_execution_multi_host ‑ [MPI] C++ binary runs on two nodes under resource manager (slurm/gnu15/mpich)
rm_execution_multi_host ‑ [MPI] C++ binary runs on two nodes under resource manager (slurm/gnu15/openmpi5)
rm_execution_multi_host ‑ [MPI] F90 binary runs on two nodes under resource manager (slurm/gnu15/mpich)
rm_execution_multi_host ‑ [MPI] F90 binary runs on two nodes under resource manager (slurm/gnu15/openmpi5)
rm_execution_single_host ‑ [MPI] C binary runs on single node under resource manager (slurm/gnu15/mpich)
rm_execution_single_host ‑ [MPI] C binary runs on single node under resource manager (slurm/gnu15/openmpi5)
…

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.

2 participants