El CPA Principal de CONICET Carlos Bederián trajo al 2020 un código «C» que tranquilamente podría haber sido escrito en 1980 para una PDP-11/70. En este back to the future, Carlos logró que el código sea diez veces más rápido, es decir 10 veces más simulaciones o sistemas 10 veces más grandes.
A mediados de agosto el investigador del LaES, Ezequiel Leiva, nos escribe para saber si podemos paralelizar un código que sirve para hacer simulaciones de litio. Nos comenta que el código es secuencial y que lo hicieron con sus rudimentarios conocimientos de «C». Luego de una semana de haber recibido el código, el código se reescribió en C++ paralelizando con OpenMP, se utilizó el sistema de construcción Meson Build y Google Test para pruebas unitarias que confirmaban que los resultados eran exactamente iguales al código original.
Dos semanas más tarde Bederián codifica una variación de sumas acumuladas (prefix sum) específica para este problema utilizando AVX2 intrinsics, obteniendo entre 25% y 40% más de desempeño..
Los resultados en un servidor dual Xeon E5-2680 v4 (28 cores en total) son notables. El punto rojo abajo a la izquierda representa el código original. Con 16 núcleos ya llega a 10x de speedup.
Notamos que GCC presenta algunos problemas de escalabilidad en la implementación GOMP, que Clang-LLVM no tiene. El compilador de Intel, esta vez, proporciona un 20% más de desempeño que sus competidores FLOSS.
El Dr. Leiva nos explica la importancia de este programa.
Este código tiene por objeto simular la inserción de iones de litio en grafito, en sistemas de tamaño finito mediante modelos reticulares. El grafito es el material empleado por excelencia como ánodo en todas las baterías comerciales (ej. celulares), y algunas de las características de este material eran ignoradas hasta hace poco:
- «A theoretical model to determine intercalation entropy and enthalpy: Application to lithium/graphite», E.M. Perassi, E.P.M. Leiva, Electrochem Commun 65 (2016) 48-52.2
- «The kinetic origin of the Daumas-Hérold model for the Li-ion/graphite intercalation system», E.M. Gavilán-Arriazu, O.A. Pinto, B.A. López de Mishima, D.E. Barraco, O.A. Oviedo, E.P.M. Leiva, Electrochemistry Communications 93(2018)133–137.
El código modificado va a permitir extender las simulaciones a tamaños que permitan extrapolar el comportamiento de nanosistemas a sistemas mayores, en los que se realizarán simulaciones con herramientas de continuo.