Introduction

Our daily lives are affected with computerized workloads, and with mobile devices, we carry most of our digital lives in our pockets and bag packs. Most of our future related decisions as simple as wearing coat by looking at the weather is also computerized and digitized. We no longer need to have a barometer in our homes to find out if the weather will be nice. Even if we had barometer in our homes, we would not forecast next week’s weather without knowing the historical background.

With the impact of global climate change, a simple barometer reading is not enough, and therefore, we need to run multiple scenarios of how the wind travels from point A to point B, to see the heat transfer and cloud movements. These simulations are not possible with simple mathematical calculations, and this is when we need computers to solve them. Of course, learning the next day’s weather three days later is not really important, and knowing about every two-minute weather change is also not that important, as well. However, for more complex and large-scale simulations, having just one computer would not be sufficient.

Modern scientific and engineering challenges often involve massive amounts of data and computationally intensive calculations that overwhelm the capabilities of a single computer system such as supercomputers. Only having one computer to solve these mathematical problems would not be enough, and that is the reason why many universities and research institutions have multiple servers to solve challenging tasks such as drug discovery, weather forecasting, aerodynamic simulations for race cars, or modeling material behavior under extreme conditions.

These complex problems require parallel processing power and distributed computing resources to achieve reasonable simulation times and accurate results. High-Performance Computing (HPC) systems, with their ability to take advantage of multiple processors and interconnected nodes, provide the necessary computational capacity to solve these intricate problems effectively.

In this web book, you will experiment important concepts in HPC to learn topics such as parallelization, concurrency, CPU architectures, modern compilers and then you will package your software to be used in these environments. Our programming environment consist of C programming language with GCC compiler suite. In this book, you will work with Open MPI implementation of messaging passing interface library and OpenMP for shared memory library.