de
en
Schliessen
Detailsuche
Bibliotheken
Projekt
Impressum
Datenschutz
de
en
Schliessen
Impressum
Datenschutz
zum Inhalt
Detailsuche
Schnellsuche:
OK
Ergebnisliste
Titel
Titel
Inhalt
Inhalt
Seite
Seite
Im Dokument suchen
IeeeCC754++ : an advanced set of tools to check IEEE 754-2008 conformity / Matthias Hüsken. Wuppertal, 06.12.2017
Inhalt
Contents
Introduction
1 Floating-point numbers, standards, and the user environment
1.1 The foundation: Floating-point numbers
1.2 The standards: IEEE 754 and 854
1.2.1 IEEE 754
1.2.2 IEEE 854
1.2.3 IEEE 754-2008
1.2.4 IEEE 754-2018
1.3 Rounding and error analysis
1.3.1 Some basic properties
1.3.2 Stability
1.3.3 Use cases for rounding
1.4 The user environment
1.4.1 Limitations of the user environment definition
1.4.2 Floating-point hardware
1.4.3 The operating system
1.4.4 Floating-point libraries
1.4.5 Programming languages
1.4.6 The compiler's role
1.4.7 Interpreters
1.4.8 In-network floating-point computations
1.4.9 Resilience
1.4.10 Comparing and testing floating-point environments
2 IeeeCC754
2.1 History
2.2 IeeeCC754
2.3 Testsets
2.3.1 Addition and subtraction
2.3.2 Multiplication
2.3.3 Division
2.3.4 Square root
2.3.5 Remainder
2.3.6 A note on conversions
2.3.7 Conversions between floating-point formats
2.3.8 Rounding floating-point numbers to integral values
2.3.9 Conversion between floating-point and integer formats
2.3.10 Decimal to binary and binary to decimal conversion
2.4 Results
2.4.1 Intel and AMD
2.4.2 SUN Sparc
2.4.3 FMLib
2.4.4 MpIeee
3 IeeeCC754++
3.1 IeeeCC754++: Introducing extensions
3.1.1 Testing IEEE-conformity
3.1.2 Testing the user environment: Default mode
3.1.3 Testing parts of a floating-point environment
3.1.4 Testing distributed floating-point environments
3.1.5 Supporting arbitrary floating-point environments
3.1.6 Building for arbitrary environments
3.1.7 Large-scale testing and analysis
3.1.8 Studying the influence of compiler options
3.1.9 Testing modes
3.1.10 Input and output
3.1.11 Support for IEEE 754-2008
3.1.12 Analysis capabilities
3.1.13 Preserving backwards compatibility
3.1.14 Technical changes
3.2 Input and output
3.2.1 Test vector formats
3.2.2 Output formats
3.3 Testing modes
3.3.1 Classic mode
3.3.2 Verbose mode
3.3.3 Default mode
3.3.4 Distributed computing modes
3.3.5 Miscellaneous modes
3.3.6 Common command line options
3.4 The evaluation framework
3.4.1 Using the evaluation framework
3.4.2 Analysis modules
3.4.3 Tools for (semi-)automated testing
3.5 The optimisation framework
3.5.1 Using the optimisation framework
3.5.2 Fitness modules and adding fitness functions
3.5.3 Timing the effect of compiler options
4 Extended testsets
4.1 General considerations
4.1.1 The Table Maker's Dilemma
4.1.2 Adding operators and test vectors
4.2 Fused multiply-add
4.2.1 Testset
4.2.2 Considerations concerning portability
4.3 Powers and roots
4.3.1 Testsets
4.4 Trigonometric functions
4.4.1 Testsets
4.5 Exponentials and logarithms
4.5.1 Testsets
4.6 Miscellaneous functions
4.6.1 Testsets
4.7 Generating testsets
4.7.1 A note on precisions
4.7.2 convertTestsets.py
4.7.3 genUCB.sh
5 Architecture ports
5.1 The default architecture
5.1.1 The default port
5.1.2 The dummy port
5.2 The x86 architecture
5.2.1 The x86 port
5.2.2 The mic port
5.3 The ARM architecture
5.3.1 The arm port
5.3.2 The aarch64 port
5.4 The Power Architecture
5.4.1 The ppc port
5.4.2 The cell port
5.4.3 The bgq port
5.5 GPUs and accelerators
5.5.1 The nv port
5.5.2 The opencl port
5.6 In-network computations
5.6.1 The mpi port
5.7 Virtual machines and software libraries
5.7.1 The java port
5.7.2 The softfloat port
5.7.3 The mpfr port
5.7.4 The crlibm port
6 Selected results
6.1 A detailed example
6.1.1 User environments
6.1.2 Manual testing procedure
6.1.3 (Semi-)Automated testing procedure
6.1.4 Analysing the logfiles
6.2 Different compilers
6.3 x86
6.3.1 Xeon
6.3.2 Xeon Phi: KNL
6.4 ARM
6.4.1 ARM: VFP, NEON
6.4.2 AARCH64: ASIMD, SVE
6.5 PowerPC
6.5.1 POWER8
6.5.2 Cell
6.6 Accelerators
6.6.1 CUDA
6.6.2 OpenCL
6.7 Software
6.7.1 SoftFloat
6.7.2 MPFR
6.7.3 Java
6.8 Elementary functions
6.8.1 C99 vs. C++11
6.8.2 Trigonometric operators
6.8.3 Exponentials and logarithms
6.8.4 Power operators
6.8.5 roundTiesToEven results
6.9 Optimisation framework
6.9.1 User environments
6.9.2 Two-step process
6.9.3 Example run with [style=mhplain]sixloops
6.9.4 Example run with HPCG
6.10 Result summary
6.10.1 Basic operations and conversions
6.10.2 Elementary operators
6.10.3 Some notes on applications
Summary and outlook
A The IeeeCC754++ build system
A.1 Changes to the code base
A.1.1 IeeeCC754 code structure
A.1.2 IeeeCC754++ code structure
A.2 The build system
A.3 Configuring and building IeeeCC754++
A.3.1 Building overview
A.3.2 Choosing an architecture
A.3.3 Choosing FPUs
A.3.4 Choosing the compiler and compiler options
A.3.5 Generic build features
A.3.6 Additional build options
A.3.7 Cross compilation
A.3.8 Building historic modes
A.3.9 A detailed example
B Adding a new architecture to IeeeCC754++
B.1 File structure
B.2 Build system: configure.ac
B.3 Build system: Makefile.am
B.4 Implementing the new architecture
B.4.1 src/xyz/DriverFloat_main.h
B.4.2 src/xyz/fpu_main.cc
B.5 Adding an FPU
B.6 Implementing an operation
B.7 Handling vector FPUs
B.8 Initialising an FPU
B.8.1 Registering operations and rounding modes
B.8.2 Enabling vector FPUs
B.9 Example code for the new architecture and FPU
B.10 Setting up main()
B.11 Setting up and building the new architecture
C Reference material
C.1 fma example
C.2 IeeeCC754++ usage
C.3 IeeeCC754++ classic mode usage
C.4 Error codes used in IeeeCC754++
C.5 Reference task files
C.6 Evaluation function example
C.7 Fitness function example
List of Figures
List of Tables
List of Listings
Bibliography