Software Stack
En paralelo al desarrollo de hardware, estamos construyendo un robusto ecosistema de software diseñado para maximizar la compatibilidad y rendimiento de nuestros nuevos procesadores. Este esfuerzo incluye el desarrollo de entornos de compilación y ejecución que permitan un uso eficiente de los recursos y la optimización del rendimiento de los sistemas en aplicaciones reales. El software desarrollado será esencial para habilitar la funcionalidad completa de nuestros chips y apoyar la innovación en aplicaciones de supercomputación.
Imagen 1: Tareas por capas
DESCRIPCIÓN DEL DIAGRAMA
- Herramientas de análisis: Son las encargadas de proporcionar información sobre el rendimiento de las aplicaciones. Basadas en las otros desarrollos previos del BSC-CNS, ofrecerán mecanismos para la generación de trazas Paraver y la interacción con ellas.
-
Librerías y entornos de ejecución: Junto con Resource Managers, son las encargadas de poblar la Software Stack con los componentes que permitan la ejecución de aplicaciones en el contexto de la Computación de Altas Prestaciones (CAP). Entre estos entornos, se han considerado herramientas tradicionales (por ejemplo, MPI y OpenMP), la ejecución de aplicaciones basadas en múltiples procesos ejecutados mediante la definición de flujos de trabajos (por ejemplo, COMPSs/PyCOMPSs), así como también herramientas orientadas a entornos emergentes basados en Inteligencia Artificial (por ejemlo, Pytorch).
-
Sistema Operativo (SO): Es el responsable de habilitar las versiones del kernel de Linux para las diferentes plataformas, así como de portar alguna de sus distribuciones más extendidas (i.e., Fedora y Ubuntu). De esta forma, la Software Stack puede beneficiarse de los paquetes de sistema ya portados. Finalmente, y como actividad fundamental, el sistema operativo se encarga del desarrollo de drivers y servicios que permitan explotar los recursos hardware.
-
Compiladores y runtimes: Estos componentes son fundamentales para la construcción de binarios sobre la plataforma diseñada. La generación de binarios optimizados será el propósito principal de esta tarea y sus principales objetivos se centrarán en las transformaciones de bucles y la generación eficiente de código vectorial.