Skip to content

CPU: add ppc64le support - #301

Open
pkubaj wants to merge 1 commit into
RenderKit:masterfrom
pkubaj:master
Open

pkubaj wants to merge 1 commit into
RenderKit:masterfrom
pkubaj:master

Conversation

@pkubaj

@pkubaj pkubaj commented Oct 31, 2026

Copy link
Copy Markdown

ISPC 1.31 added a ppc64le backend with native VSX targets for POWER8 and
newer. The CPU device only runs its own ISPC kernels, so supporting it
just means teaching the build and the ISA switches about a third
architecture:

  • cmake: detect ppc64le (powerpc64le on FreeBSD) as OIDN_ARCH PPC64LE,
    pass --arch=ppc64le to ISPC and require ISPC 1.31.0 for it, and use
    ppc64le in the package name.
  • devices/cpu: build the kernels for vsx-i32x8 (vsx-i16x16 for the f16
    pooling and upsampling kernels, as for NEON) and map ISPC_TARGET_VSX
    to a new CPUArch::VSX that uses the 8-channel layout.
  • cpu_conv: VSX has 64 128-bit registers and vsx-i32x8 takes two per
    accumulator. maxBlockOCB 4 with blockOW4 4 is about 2.8x faster on
    POWER9 than NEON's maxBlockOCB 3, and blockOW4 5 or more spills.

Tested on FreeBSD 15.1 powerpc64le (POWER9, clang 19.1.7, ISPC 1.31.0,
oneTBB 2023.1): all 20 oidnTest cases pass, oidnDenoise reports ISA VSX
and takes a synthetic noisy HDR image from 17 to 37 dB PSNR, and RT
hdr_alb_nrm 1920x1080 runs at about 2.7 s per image on 16 threads.

ISPC 1.31 added a ppc64le backend with native VSX targets for POWER8 and
newer. The CPU device only runs its own ISPC kernels, so supporting it
just means teaching the build and the ISA switches about a third
architecture:

- cmake: detect ppc64le (powerpc64le on FreeBSD) as OIDN_ARCH PPC64LE,
  pass --arch=ppc64le to ISPC and require ISPC 1.31.0 for it, and use
  ppc64le in the package name.
- devices/cpu: build the kernels for vsx-i32x8 (vsx-i16x16 for the f16
  pooling and upsampling kernels, as for NEON) and map ISPC_TARGET_VSX
  to a new CPUArch::VSX that uses the 8-channel layout.
- cpu_conv: VSX has 64 128-bit registers and vsx-i32x8 takes two per
  accumulator. maxBlockOCB 4 with blockOW4 4 is about 2.8x faster on
  POWER9 than NEON's maxBlockOCB 3, and blockOW4 5 or more spills.

Tested on FreeBSD 15.1 powerpc64le (POWER9, clang 19.1.7, ISPC 1.31.0,
oneTBB 2023.1): all 20 oidnTest cases pass, oidnDenoise reports ISA VSX
and takes a synthetic noisy HDR image from 17 to 37 dB PSNR, and RT
hdr_alb_nrm 1920x1080 runs at about 2.7 s per image on 16 threads.
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