HPC Software Engineering

Primary tabs

The mission of the CASE department is to develop HPC software for solving engineering problems that requires a simulation process that consumes a great amount of computational resources.

Due to the complexity of the engineering problems being solved and the simulation requirements, a methodology for the software development process must be defined.

The HPC team therefore provides the knowledge and expertise necessary for building the simulation systems in the most effective and efficient way possible, following a disciplined methodology that guarantees current and future developments.

Objectives

The HPC Software Engineering Team has three main goals:

  • Provide a development discipline for HPC software life cycle: the software development process is an error prone task, but this is even more problematic if the software being developed is an HPC system. HPC software development has all the traditional software development problems, plus some new ones devoted to distributed systems. For this reason, it is fundamental to put in place a development methodology that guarantees development quality throughout its life cycle.
  • Develop simulation frameworks to be used in the engineering problems at CASE: even when the engineering and simulation problems being tackled in CASE are very broad in terms of their fields of application, there are many different solutions that can be reused from one problem to another. For this reason, it is mandatory to develop a set of HPC frameworks that are general enough to be used for most CASE developments, without compromising efficiency or precision.
  • Define a methodology for measuring and optimising HPC code: HPC computational resources are expensive in terms of money, energy consumption and manpower. Moreover, the HPC software is complex enough to impose problems when trying to obtain information about its performance. Therefore, it is highly desirable to have a proper methodology for measuring the behaviour of any HPC system running on a given HPC machine. This will provide enough information for proper use of the HPC resources, while controlling the effort needed to tune the HPC software.