powerpc: Remove optimized finite

System Internals / glibc - Adhemerval Zanella [linaro.org] - 12 June 2019 17:32 EDT

The powerpc finite optimization do not show much gain:

- GCC will call libm iff -fsignaling-nans is used. This usage pattern is usually not performance oriented and for such calls PLT overhead should dominate execution time.

- The power7 uses ftdiv to optimize for some input patterns, but at cost of others. Comparing against generic C implementation built for powerpc64-linux-gnu-power7 (--with-cpu=power7):

- Generic sysdeps/ieee754 implementation: "isfinite": { "": { "duration": 5.0082e+09, "iterations": 2.45299e+09, "max": 43.824, "min": 2.008, "mean": 2.04167 }, "INF": { "duration": 4.66554e+09, "iterations": 2.28288e+09, "max": 35.73, "min": 2.008, "mean": 2.04371 }, "NAN": { "duration": 4.66274e+09, "iterations": 2.28716e+09, "max": 34.161, "min": 2.009, "mean": 2.03866 } }

- power7 optimized one: "isfinite": { "": { "duration": 4.99111e+09, "iterations": 2.65566e+09, "max": 25.015, "min": 1.716, "mean": 1.87942 }, "INF": { "duration": 4.6783e+09, "iterations": 2.0999e+09, "max": 35.264, "min": 1.868, "mean": 2.22787 }, "NAN": { "duration": 4.67915e+09, "iterations": 2.08678e+09, "max": 38.099, "min": 1.869, "mean": 2.24228 } }

So it basically optimizes marginally for normal numbers while increasing the latency for other kind of FP.

- The power8 implementation is just the generic implementation using ISA 2.07 mfvsrd instruction (which GCC uses for generic implementation). So generic implementation is the best option for powerpc64le.

Checked on powerpc-linux-gnu (built without --with-cpu, with--with-cpu=power4 and with --with-cpu=power5+ and --disable-multi-arch), powerpc64-linux-gnu (built without --with-cp and with --with-cpu=power5+ and --disable-multi-arch).

- sysdeps/powerpc/powerpc32/power4/fpu/multiarch/Makefile (sysdeps_routines, libm-sysdep_routines): Remove s_finite* objects.
- sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finite-power7.S: Remove file.
- sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finite-ppc32.c: Likewise.
- sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finite.c: Likewise.
- sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finitef-ppc32.c: Likewise.
- sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finitef.c: Likewise.
- sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S: Likewise.
- sysdeps/powerpc/powerpc32/power7/fpu/s_finitef.S: Likewise.
- sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile (sysdep_call): Remove s_finite* objects.
- sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite-power7.S: Remove file.
- sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite-power8.S: Likewise.
- sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite-ppc64.c: Likewise.
- sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite.c: Likewise.
- sysdeps/powerpc/powerpc64/fpu/multiarch/s_finitef-ppc64.c: Likewise.
- sysdeps/powerpc/powerpc64/fpu/multiarch/s_finitef.c: Likewise.
- sysdeps/powerpc/powerpc64/power7/fpu/s_finite.S: Likewise.
- sysdeps/powerpc/powerpc64/power7/fpu/s_finitef.S: Likewise.
- sysdeps/powerpc/powerpc64/power8/fpu/s_finite.S: Likewise.
- sysdeps/powerpc/powerpc64/power8/fpu/s_finitef.S: Likewise.

1192696069 powerpc: Remove optimized finite
ChangeLog | 26 ++++++
.../powerpc32/power4/fpu/multiarch/Makefile | 7 +-
.../power4/fpu/multiarch/s_finite-power7.S | 33 --------
.../power4/fpu/multiarch/s_finite-ppc32.c | 33 --------
.../powerpc32/power4/fpu/multiarch/s_finite.c | 57 -------------
.../power4/fpu/multiarch/s_finitef-ppc32.c | 31 --------
.../powerpc32/power4/fpu/multiarch/s_finitef.c | 34 --------
sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S | 93 ----------------------
sysdeps/powerpc/powerpc32/power7/fpu/s_finitef.S | 1 -
sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile | 4 +-
.../powerpc64/fpu/multiarch/s_finite-power7.S | 32 --------
.../powerpc64/fpu/multiarch/s_finite-power8.S | 32 --------
.../powerpc64/fpu/multiarch/s_finite-ppc64.c | 34 --------
sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite.c | 69 ----------------
.../powerpc64/fpu/multiarch/s_finitef-ppc64.c | 32 --------
.../powerpc/powerpc64/fpu/multiarch/s_finitef.c | 37 ---------
sysdeps/powerpc/powerpc64/power7/fpu/s_finite.S | 70 ----------------
sysdeps/powerpc/powerpc64/power7/fpu/s_finitef.S | 1 -
sysdeps/powerpc/powerpc64/power8/fpu/s_finite.S | 56 -------------
sysdeps/powerpc/powerpc64/power8/fpu/s_finitef.S | 1 -
20 files changed, 29 insertions(+), 654 deletions(-)

Upstream: sourceware.org


  • Share