Drops is a complex C++ code that makes heavy use of templates and inheritance. It supports and uses multiple solvers, which are selected based on the input file. Using C++ inheritance and templates make it possible to seamlessly use different solvers in the code. From performance analysis point of view, such application structure makes it difficult to obtain profiles and nearly impossible to obtain traces of the whole application. In the analysis, first a region of interest (RoI) was selected using lightweight performance analysis tools. The RoI was later analyzed in detail with specialized tools.
The analyzed execution of drops used the twophasedrops binary with a risingbuttanoldrop.json input file, modified to reduce execution to about 3 minutes. The released built type was used for analysis. The tests were performed in 16x1, 8x2, and 4x4 MPI processes x OpenMP threads configuration. The mesh size used was “12e-3x30e-3x12e-3@4x10x4”, with 3 level of refinement. This resulted in maximum around 8k, 14k and 28k unknowns respectively. See Section 6 for details about total number of unknowns and Section 7 for the complete input file used.