## 7 Algorithms for HPC Systems in the Exascale Era
### Parallel Solvers for Exascale Computing  
To create and implement effective solvers on Exascale systems, it will be necessary to overcome many obstacles. The architectural features of these computers, which include additional memory levels, more concurrency with less memory per core, and heterogeneous cores, will affect the performance of all the proposed algorithms. As explained in [157], in fact, the following considerations should guide the development and use of new Exascale solvers. * Extreme-scale computers might consist of millions of nodes with thousands of light cores or hundreds of thousands of nodes with more aggressive cores, according to technological advancements. In any case, solvers will need to enable billion-way concurrence with small thread states [157]. * Extreme-scale systems will probably encounter a high number of hardware malfunctions since they will be constructed on a vast number of components, highlighting a resilient and non-deterministic behavior. Applications should therefore anticipate a high frequency of soft mistakes (such as data value changes due to logic latch faults) and hard interruptions (device failure). Current fault-tolerance methods (those based on traditional, full checkpoint/restart) may cause significant overhead and be impractical for these systems. Solvers must therefore be equipped with methods for locating and resolving software errors and interruptions to reduce any detrimental consequences on an application [157]. * Compared to memory technologies, the cost of devices designed for floating-point operations is decreasing more quickly. Recent system trends indicate that the memory per node is already modestly increasing while memory per core is dropping. Therefore, to take advantage of parallelism, solvers will need to reduce synchronization, increase computation on local data, and shift their focus from the typical scenario of weak scaling, which involves using more resources to solve problems of larger sizes, to one that favors strong scaling, which involves using more resources to solve a problem of fixed size in order to reduce the time to solution (see [163] for a definition of weak vs. strong scaling) [157]. * Power consumption will be a major issue for future HPC systems. Although low-energy accelerators and other hardware design elements can lower the needed power, more steps must be taken to further minimize energy consumption. An approach that could be used is algorithmic study [157]. Several methods and procedures [156; 157] have been proposed in response to these factors to help achieve algorithms that make use of the opportunities provided by Exascale computing platforms. A summary of some of these strategies and techniques is provided below. **Communication- and synchronization-avoiding algorithms**: The expected costs of computation at the Exascale (also in terms of energy consumption) will be more conditioned by movements from/to the memory or between different memories (i.e., _\"a communication\"_) than by the execution of floating point operations. So, when solving huge problems on parallel architectures with extreme levels of concurrency, the most significant concern becomes the cost related to communication and synchronization overheads. This is especially the case for preconditioned Krylov methods(see Section 6.1.2). New versions of such algorithms _\"minimizing communication\"_ should be investigated to address the critical issue of such communication costs (see Section 7.2.3). Likewise, such popular algorithms execute tasks requiring synchronization points, for example, the computation of BLAS operators and the preconditioner applications. Then, additive algorithmic variants (with no synchronization among components) may be more attractive compared to their multiplicative counterparts [164]. Such considerations are taken into account also by _\"Time integrators\"_ in the Exascale context (see Section 7.2.1).