Algorithmic Differentiation of Pragma-Defined Parallel Regions: Differentiating Computer Programs Containing OpenMP

Michael Förster


Numerical programs often use parallel programming techniques such as OpenMP to compute the program's output values as efficient as possible. In addition, derivative values of these output values with respect to certain input values play a crucial role. To achieve code that computes not only the output values simultaneously but also the derivative values, this work introduces several source-to-source transformation rules. These rules are based on a technique called algorithmic differentiation. The main focus of this work lies on the important reverse mode of algorithmic differentiation. The inherent data-flow reversal of the reverse mode must be handled properly during the transformation. The first part of the work examines the transformations in a very general way since pragma-based parallel regions occur in many different kinds such as OpenMP, OpenACC, and Intel Phi. The second part describes the transformation rules of the most important OpenMP constructs.