A C++ library for sensitivity analysis of optimisation problems involving ordinary differential equations (ODEs) enabled by automatic differentiation (AD) and SIMD (Single Instruction, Multiple data) vectorization is presented. The discrete adjoint sensitivity analysis method is implemented for adaptive explicit Runge-Kutta (ERK) methods. Automatic adjoint differentiation (AAD) is employed for efficient evaluations of products of vectors and the Jacobian matrix of the right hand side of the ODE system. This approach avoids the low-level drawbacks of the black box approach of employing AAD on the entire ODE solver and opens the possibility to leverage parallelization. SIMD vectorization is employed to compute the vector-Jacobian products concurrently. We study the performance of other methods and implementations of sensitivity analysis and we find that our algorithm presents a small advantage compared to equivalent existing software.
翻译:本文提出一个基于自动微分与SIMD(单指令多数据)向量化的C++库,用于常微分方程优化问题的灵敏度分析。该库针对自适应显式Runge-Kutta方法实现了离散伴随灵敏度分析方法,并采用自动伴随微分技术高效计算向量与常微分方程系统右侧雅可比矩阵的乘积。该方法避免了在整体ODE求解器上应用自动伴随微分的黑箱式低阶缺陷,并为并行化计算提供了可能。通过SIMD向量化技术实现了向量-雅可比乘积的并发计算。我们对比研究了其他灵敏度分析方法及实现的性能,发现本算法相较于现有等效软件具有轻微优势。