Software Stack
In parallel with hardware development, we are building a robust software ecosystem designed to maximize the compatibility and performance of our new processors. This effort includes developing build and runtime environments that enable efficient resource use and performance optimization in real-world applications. The developed software will be essential to enable the full functionality of our chips and support innovation in supercomputing applications.
Image 1: Layered tasks
DIAGRAM DESCRIPTION
- Analysis Tools: These are responsible for providing information about the performance of applications. Based on previous developments by BSC-CNS, they will offer mechanisms for generating Paraver traces and interacting with them.
- Libraries and Execution Environments: Together with Resource Managers, they are responsible for populating the Software Stack with components that enable the execution of applications in the context of High-Performance Computing (HPC). Among these environments, traditional tools (e.g., MPI and OpenMP), the execution of applications based on multiple processes through the definition of workflows (e.g., COMPSs/PyCOMPSs), as well as tools oriented towards emerging environments based on Artificial Intelligence (e.g., Pytorch), have been considered.
- Operating System (OS): It is responsible for enabling Linux kernel versions for different platforms and porting some of its most widespread distributions (i.e., Fedora and Ubuntu). In this way, the Software Stack can benefit from already ported system packages. Finally, and as a fundamental activity, the operating system is in charge of developing drivers and services that allow the exploitation of hardware resources.
- Compilers and Runtimes: These components are fundamental for the construction of binaries on the designed platform. The main purpose of this task will be the generation of optimized binaries, focusing on loop transformations and the efficient generation of vector code.