0%

Book Description

Arguably the strongest addition to numerical finance of the past decade, Algorithmic Adjoint Differentiation (AAD) is the technology implemented in modern financial software to produce thousands of accurate risk sensitivities, within seconds, on light hardware.

AAD recently became a centerpiece of modern financial systems and a key skill for all quantitative analysts, developers, risk professionals or anyone involved with derivatives. It is increasingly taught in Masters and PhD programs in finance.

Danske Bank's wide scale implementation of AAD in its production and regulatory systems won the In-House System of the Year 2015 Risk award. The Modern Computational Finance books, written by three of the very people who designed Danske Bank's systems, offer a unique insight into the modern implementation of financial models. The volumes combine financial modelling, mathematics and programming to resolve real life financial problems and produce effective derivatives software.

This volume is a complete, self-contained learning reference for AAD, and its application in finance. AAD is explained in deep detail throughout chapters that gently lead readers from the theoretical foundations to the most delicate areas of an efficient implementation, such as memory management, parallel implementation and acceleration with expression templates.

The book comes with professional source code in C++, including an efficient, up to date implementation of AAD and a generic parallel simulation library. Modern C++, high performance parallel programming and interfacing C++ with Excel are also covered. The book builds the code step-by-step, while the code illustrates the concepts and notions developed in the book.

Table of Contents

  1. Cover
  2. Preface by Leif Andersen
  3. Acknowledgments
  4. Introduction
  5. About the Companion C++ Code
  6. PART I: Modern Parallel Programming
    1. Introduction
      1. PARALLEL ALGORITHMS
      2. THE MANY FLAVORS OF PARALLEL PROGRAMMING
      3. WRITING MULTI-THREADED PROGRAMS
      4. PARALLEL COMPUTING IN FINANCE
      5. NOTES
    2. CHAPTER 1: Effective C++
      1. NOTES
    3. CHAPTER 2: Modern C++
      1. 2.1 LAMBDA EXPRESSIONS
      2. 2.2 FUNCTIONAL PROGRAMMING IN C++
      3. 2.3 MOVE SEMANTICS
      4. 2.4 SMART POINTERS
      5. NOTES
    4. CHAPTER 3: Parallel C++
      1. 3.1 MULTI-THREADED HELLO WORLD
      2. 3.2 THREAD MANAGEMENT
      3. 3.3 DATA SHARING
      4. 3.4 THREAD LOCAL STORAGE
      5. 3.5 FALSE SHARING
      6. 3.6 RACE CONDITIONS AND DATA RACES
      7. 3.7 LOCKS
      8. 3.8 SPINLOCKS
      9. 3.9 DEADLOCKS
      10. 3.10 RAII LOCKS
      11. 3.11 LOCK-FREE CONCURRENT DESIGN
      12. 3.12 INTRODUCTION TO CONCURRENT DATA STRUCTURES
      13. 3.13 CONDITION VARIABLES
      14. 3.14 ADVANCED SYNCHRONIZATION
      15. 3.15 LAZY INITIALIZATION
      16. 3.16 ATOMIC TYPES
      17. 3.17 TASK MANAGEMENT
      18. 3.18 THREAD POOLS
      19. 3.19 USING THE THREAD POOL
      20. 3.20 DEBUGGING AND OPTIMIZING PARALLEL PROGRAMS
      21. NOTES
  7. PART II: Parallel Simulation
    1. Introduction
    2. CHAPTER 4: Asset Pricing
      1. 4.1 FINANCIAL PRODUCTS
      2. 4.2 THE ARBITRAGE PRICING THEORY
      3. 4.3 FINANCIAL MODELS
      4. NOTES
    3. CHAPTER 5: Monte-Carlo
      1. 5.1 THE MONTE-CARLO ALGORITHM
      2. 5.2 SIMULATION OF DYNAMIC MODELS
      3. 5.3 RANDOM NUMBERS
      4. 5.4 BETTER RANDOM NUMBERS
      5. NOTES
    4. CHAPTER 6: Serial Implementation
      1. 6.1 THE TEMPLATE SIMULATION ALGORITHM
      2. 6.2 RANDOM NUMBER GENERATORS
      3. 6.3 CONCRETE PRODUCTS
      4. 6.4 CONCRETE MODELS
      5. 6.5 USER INTERFACE
      6. 6.6 RESULTS
      7. NOTES
    5. CHAPTER 7: Parallel Implementation
      1. 7.1 PARALLEL CODE AND SKIP AHEAD
      2. 7.2 SKIP AHEAD WITH MRG32K3A
      3. 7.3 SKIP AHEAD WITH SOBOL
      4. 7.4 RESULTS
      5. NOTES
  8. PART III: Constant Time Differentiation
    1. Introduction
      1. OPENING REMARKS
      2. SUMMARY
      3. A FIRST APPROACH TO ADJOINT DIFFERENTIATION
      4. NOTES
    2. CHAPTER 8: Manual Adjoint Differentiation
      1. 8.1 INTRODUCTION TO ADJOINT DIFFERENTIATION
      2. 8.2 ADJOINT DIFFERENTIATION BY HAND
      3. 8.3 APPLICATIONS IN MACHINE LEARNING AND FINANCE
      4. NOTES
    3. CHAPTER 9: Algorithmic Adjoint Differentiation
      1. 9.1 CALCULATION GRAPHS
      2. 9.2 BUILDING AND APPLYING DAGS
      3. 9.3 ADJOINT MATHEMATICS
      4. 9.4 ADJOINT ACCUMULATION AND DAG TRAVERSAL
      5. 9.5 WORKING WITH TAPES
      6. NOTES
    4. CHAPTER 10: Effective AAD and Memory Management
      1. 10.1 THE NODE CLASS
      2. 10.2 MEMORY MANAGEMENT AND THE TAPE CLASS
      3. 10.3 THE NUMBER CLASS
      4. 10.4 BASIC INSTRUMENTATION
      5. NOTES
    5. CHAPTER 11: Discussion and Limitations
      1. 11.1 INPUTS AND OUTPUTS
      2. 11.2 HIGHER-ORDER DERIVATIVES
      3. 11.3 CONTROL FLOW
      4. 11.4 MEMORY
      5. NOTE
    6. CHAPTER 12: Differentiation of the Simulation Library
      1. 12.1 ACTIVE CODE
      2. 12.2 SERIAL CODE
      3. 12.3 USER INTERFACE
      4. 12.4 SERIAL RESULTS
      5. 12.5 PARALLEL CODE
      6. 12.6 PARALLEL RESULTS
      7. NOTES
    7. CHAPTER 13: Check-Pointing and Calibration
      1. 13.1 CHECK-POINTING
      2. 13.2 EXPLICIT CALIBRATION
      3. 13.3 IMPLICIT CALIBRATION
      4. NOTES
    8. CHAPTER 14: Multiple Differentiation in Almost Constant Time
      1. 14.1 MULTIDIMENSIONAL DIFFERENTIATION
      2. 14.2 TRADITIONAL MULTIDIMENSIONAL AAD
      3. 14.3 MULTIDIMENSIONAL ADJOINTS
      4. 14.4 AAD LIBRARY SUPPORT
      5. 14.5 INSTRUMENTATION OF SIMULATION ALGORITHMS
      6. 14.6 RESULTS
      7. NOTE
    9. CHAPTER 15: Acceleration with Expression Templates
      1. 15.1 EXPRESSION NODES
      2. 15.2 EXPRESSION TEMPLATES
      3. 15.3 EXPRESSION TEMPLATED AAD CODE
      4. NOTES
    10. Debugging AAD Instrumentation
    11. Conclusion
    12. References
    13. Index
    14. End User License Agreement