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.3 Rounding and error analysis
- 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
- 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.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
- 4 Extended testsets
- 4.1 General considerations
- 4.2 Fused multiply-add
- 4.3 Powers and roots
- 4.4 Trigonometric functions
- 4.5 Exponentials and logarithms
- 4.6 Miscellaneous functions
- 4.7 Generating testsets
- 5 Architecture ports
- 5.1 The default architecture
- 5.2 The x86 architecture
- 5.3 The ARM architecture
- 5.4 The Power Architecture
- 5.5 GPUs and accelerators
- 5.6 In-network computations
- 5.7 Virtual machines and software libraries
- 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.4 ARM
- 6.5 PowerPC
- 6.6 Accelerators
- 6.7 Software
- 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
- Summary and outlook
- A The IeeeCC754++ build system
- 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.5 Adding an FPU
- B.6 Implementing an operation
- B.7 Handling vector FPUs
- B.8 Initialising an FPU
- 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
