In the publish-or-perish environment that Academia offers to its researchers, survival is subdue to the submission of results. And the production of good software is still rarely considered a result worth the submission. As a consequence, scientists are often unmotivated in taking care of their implementations. When the aim is to produce results worth to be published, it is acceptable to have an application that works only for the specific purpose it has to accomplish and that runs only with the specific setup of the machine it has been developed on. Since both the accessibility and the portability of the codes are limited, this unavoidably leads to the continuous development of applications serving the very same purpose.
Furthermore, scientific codes are often not designed for extracting the best from the performances offered by the computational facilities they are running in. In this work we have addressed what is so often overlooked in a scientific effort with similar objectives.
We have performed a HPC-driven development of the instrument we were needing to get scientifically meaningful results. Part of the implementation was already in place when we started, developed without HPC-awareness by the same authors of this work. Our intent was not only to boost the performances of our code, but also to make it more accessible, to ease cross platform installation and to generally set-up a flexible tool. Since the API we present has been designed to be easily extensible, in the future we will also be able to evolve our current research towards novel directions. Furthermore, this effort would hopefully also encourage new users to adopt our tool.
Under this perspective, HPC methods and advanced programming techniques become an enabling technology for doing science. As much as experiments are accurately designed to have the longest life-span possible, we have taken care of designing our software for a long term use.