[PATCH 1/3] Add new log implementation
Szabolcs Nagy
szabolcs.nagy@arm.com
Tue Sep 11 12:39:00 GMT 2018
v6:
- Document table generation method.
- Rebase NEWS and math/Makefile changes.
v5:
- Update improvements in commit message.
- Update tested targets in commit message.
v4:
- Remove unused configurations and related code/data.
- Update NEWS entry.
- Document tested targets in the commit message.
v3:
- Add empty e_log_data.c to targets that have their own log.
- Fix GNU style issues.
- Document internal function semantics.
- Fix remaining __FP_FAST_FMA that was missed in v2
- Add NEWS entry.
v2:
- Use __FP_FAST_FMA and __builtin_fma.
Optimized log using carefully generated lookup table with 1/c and log(c)
values for small intervalls around 1. The log(c) is very near a double
precision value, it has about 62 bits precision. The algorithm is
log(2^k x) = k log(2) + log(c) + log(x/c), where the last term is
approximated by a polynomial of x/c - 1. Near 1 a single polynomial of
x - 1 is used.
There is separate code path when fma instruction is not available for
computing x/c - 1 precisely, in which case the table size is doubled.
The code uses __builtin_fma under __FP_FAST_FMA to ensure it is inlined
as an instruction.
With the default configuration settings the worst case error is 0.519 ULP
(and 0.520 without fma), the rodata size is 2192 bytes (4240 without fma).
The non-nearest rounding error is less than 1 ULP.
Improvements on Cortex-A72 compared to current glibc master:
log thruput: 3.28x in [0.01 11.1]
log latency: 2.23x in [0.01 11.1]
log thruput: 1.56x in [0.999 1.001]
log latency: 1.57x in [0.999 1.001]
Tested on
aarch64-linux-gnu (defined __FP_FAST_FMA)
arm-linux-gnueabihf (!defined __FP_FAST_FMA)
x86_64-linux-gnu (!defined __FP_FAST_FMA)
powerpc64le-linux-gnu (defined __FP_FAST_FMA)
targets.
2018-09-11 Szabolcs Nagy <szabolcs.nagy@arm.com>
* NEWS: Mention log improvement.
* math/Makefile (type-double-routines): Add e_log_data.
* sysdeps/i386/fpu/e_log_data.c: New file.
* sysdeps/ia64/fpu/e_log_data.c: New file.
* sysdeps/ieee754/dbl-64/e_log.c: Rewrite.
* sysdeps/ieee754/dbl-64/e_log_data.c: New file.
* sysdeps/ieee754/dbl-64/math_config.h (__log_data): Add.
* sysdeps/ieee754/dbl-64/ulog.h: Remove.
* sysdeps/ieee754/dbl-64/ulog.tbl: Remove.
* sysdeps/m68k/m680x0/fpu/e_log_data.c: New file.
---
NEWS | 2 +-
math/Makefile | 2 +-
sysdeps/i386/fpu/e_log_data.c | 1 +
sysdeps/ia64/fpu/e_log_data.c | 1 +
sysdeps/ieee754/dbl-64/e_log.c | 257 ++-
sysdeps/ieee754/dbl-64/e_log_data.c | 347 ++++
sysdeps/ieee754/dbl-64/math_config.h | 16 +
sysdeps/ieee754/dbl-64/ulog.h | 93 -
sysdeps/ieee754/dbl-64/ulog.tbl | 3326 ----------------------------------
sysdeps/m68k/m680x0/fpu/e_log_data.c | 1 +
10 files changed, 479 insertions(+), 3567 deletions(-)
create mode 100644 sysdeps/i386/fpu/e_log_data.c
create mode 100644 sysdeps/ia64/fpu/e_log_data.c
create mode 100644 sysdeps/ieee754/dbl-64/e_log_data.c
delete mode 100644 sysdeps/ieee754/dbl-64/ulog.h
delete mode 100644 sysdeps/ieee754/dbl-64/ulog.tbl
create mode 100644 sysdeps/m68k/m680x0/fpu/e_log_data.c
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Add-new-log-implementation.diff
Type: text/x-patch
Size: 206020 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/libc-alpha/attachments/20180911/aaa97ff6/attachment.bin>
More information about the Libc-alpha
mailing list