Ampliando las capacidades de una aplicación de cómputo QM/MM utilizando GPU - Pérez Leale, Eduardo Andrés (2019)
Hoy en día, la simulación numérica es una disciplina fundamental dentro de una gran cantidad de áreas de la ciencia y la tecnología. El uso de estas técnicas permite validar modelos teóricos así como también brindar información detallada (macro y microscópica) del proceso simulado, complementando el uso de las técnicas experimentales tradicionales. Este trabajo se enfoca en modificar el software de estructura electrónica LIO. Este código se basa en la teoría de los funcionales de la densidad (DFT) y permite estimar propiedades de sistemas moleculares de manera muy eficiente mediante el empleo de tarjetas gráficas (GPUs) en las partes más demandantes del cálculo. En el esquema de DFT la calidad (así como el mayor costo) está dada por el cálculo de lo que se llama “energía de intercambio y correlación”(EXC), por ello LIO realiza los cálculos asociados a estos términos en GPU. Para el cálculo de EXC existen múltiples “recetas” (llamadas funcionales de intercambio y correlación) que pueden ser convenientes para el tratamiento de diferentes sistemas o propiedades. La versión original de LIO incluía un único funcional (llamado PBE) lo que limitaba sus capacidades. Libxc es una biblioteca de funcionales de intercambio y correlación para DFT diseñada para realizar simulaciones utilizando únicamente procesadores generales por lo que su implementación en GPU puede no resultar eficiente. El desafío planteado en esta tesis es lograr utilizar Libxc desde LIO sin que impacte en su performance. Para lograrlo se realizaron los siguientes pasos: 1. Se integró LÍO con Libxc sin modificar la estructura general de Libxc para poder realizar simulaciones con mayor diversidad de funcionales. 2. Se seleccionó un subconjunto de funcionales de Libxc y se realizó su implementación en GPU, para lo cual se realizó una modificación en la arquitectura y los algoritmos de Libxc. Se comenzó por el funcional PBE para poder validar el correcto funcionamiento de la aplicación. Luego, se implementó el resto de los funcionales seleccionados y se obtuvo una versión de LIO integrada con Libxc para GPU. 3. Se analizó el uso de los recursos de la tarjetas gráficas con el fin de poder aprovechar al máximo la arquitectura de las GPUs. Se buscó cambiar la estrategia de paralelización en la estructura del cómputo de Libxc para aprovechar la mayor cantidad de memoria que poseen las tarjetas gráficas para almacenar más resultados intermedios. 4. Se exploró el uso de diversos compiladores provistos por el proyecto LLVM en un intento de realizar una traducción automática del código fuente de la biblioteca Libxc para GPUS. Como resultado de este trabajo se pudo lograr una ampliación de las capacidades del cómputo del software LIO al vincularlo con la biblioteca Libxc con un impacto menor en la performance que va de 19 % en la primera etapa, al 4 % en la etapa final. También se lograron identificar los puntos clave en la implementación que permitirán continuar con las tareas de optimización. Las mejoras permiten que LIO pueda ser utilizada con una amplia gamma de algoritmos que realizan los cálculos de intercambio de energía y correlación, lo que consecuentemente permite realizar simulaciones en condiciones más variadas. Como corolario de este trabajo se pudo estandarizar (aunque no automatizar) un procedimiento que permite realizar una traducción de los funcionales de Libxc para que puedan ser ejecutados en GPU.