Floating-point consistent cross-verification methodology for reproducible and interoperable DDA solvers with fair benchmarking
Cl\'ement Argentin, Patrick C. Chaumet, Michel Gross, Maxim A. Yurkin

TL;DR
This paper presents a unified methodology for cross-verification and benchmarking of DDA solvers to ensure reproducibility, interoperability, and accurate performance comparisons across different implementations and hardware architectures.
Contribution
It introduces a software-assisted approach for aligning parameters and achieving machine-precision agreement among major open-source DDA solvers, facilitating reproducible and fair benchmarking.
Findings
Achieved machine-precision agreement across DDSCAT, ADDA, and IFDDA.
Provided practical equivalence tables for consistent DDA simulations.
Performed systematic CPU and GPU performance comparisons.
Abstract
The discrete dipole approximation (DDA) is a widely used and versatile numerical method for solving electromagnetic scattering by arbitrarily shaped objects. Despite its popularity, quantitative comparisons between independent implementations remain challenging due to differences in linear-system conventions, solver settings, and default numerical parameters. In this work, we introduce a unified software-assisted methodology for cross-verification and benchmarking of three major open-source DDA solvers: DDSCAT, ADDA, and IFDDA. We demonstrate how machine-precision agreement can be achieved across implementations by aligning all free parameters and provide practical equivalence tables enabling reproducible and interoperable simulations. Using this methodology, we perform systematic CPU and GPU performance comparisons covering OpenMP, MPI, and CUDA/OpenCL parallelization. Beyond…
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
