These days, heavy and complex calculations appear in the most of science fields. In many cases, these calculations either can not be executed using a simple PC or are very time consuming. The importance of the need for carrying out these calculations has led to a new field of study – High Performance Computing (HPC).
In general, there are two ways to overcome the restrictions of computing machine in solving heavy calculations.
First, is to design and produce more powerful and faster computing machines, CPUs, and in particular cases GPUs. This branch of HPC, which requires hardware engineering, is responsible for the powerful hardwar we have today. An amazing result of hardware engineers’ efforts was design of super computers which are basically a number of computing machines (cores) connected to each other. A disadvantage of this field is that designing more powerful computing machines, cores, etc. is expensive; besides, it is sometimes impossible due to physical limitations.
The second approach, which is more efficient and is of more importance these days, is to design and write more optimized algorithms, choose a better OS and compiler, and in general, change optimize the codes in order to use the maximum capability of the available hardware. This field is in the software engineering branch of HPC.
The second approach is a way more efficient and effective; in many cases, by changing the algorithm architecture and optimization of the code, heavy calculations –which might seem to need a very powerful computer at first- are executed on a simple desktop. On the other hand, in an offshoot of this branch named grid computing (parallel computing), we can write algorithms which use all the power of a super computer.