Repository navigation
Conversation
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.
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.
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:
pass --arch=ppc64le to ISPC and require ISPC 1.31.0 for it, and use
ppc64le in the package name.
pooling and upsampling kernels, as for NEON) and map ISPC_TARGET_VSX
to a new CPUArch::VSX that uses the 8-channel layout.
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.