Course


Introduction to scientific computing

Learn about the technologies used in scientific computing

Scientific computing

Scientific computing is a rapidly growing multidisciplinary field that uses advanced computing capabilities to understand and solve complex problems. It heavily utilizes HPC clusters, where clusters typically have a large number of computers (often called ‘nodes’) and, in general, most of these nodes would be configured identically.

The term cluster computing is used to denote nothing but two or more computers that are networked together to provide solutions as required. However, this idea should not be confused with a more general client-server model of computing as the idea behind clusters is quite unique.

A cluster of computers joins computational powers of the compute nodes to provide a more combined computational power. Therefore, as in the client-server model, rather than a simple client making requests of one or more servers, cluster computing utilize multiple machines to provide a more powerful computing environment perhaps through a single operating system.

In its simplest structure, HPC clusters are intended to utilize parallel computing to apply more processor force for the arrangement (solution) of a problem. HPC clusters typically have a large number of computers (often called ‘nodes’) and, in general, most of these nodes would be configured identically. Though from the out side the cluster may look like a single system, the internal workings to make this happen can be quite complex.

Computer clusters emerged as a result of convergence of a number of computing trends including the availability of low-cost microprocessors, high speed networks, and software for high-performance distributed computing. They have a wide range of applicability and deployment, ranging from small business clusters with a handful of nodes to some of the fastest supercomputers in the world!

Benefits

In scientific computing environments, coders derive their computational power by exploiting parallelism. Scientific programs for HPC systems must be splitted up into many smaller sub-programs which can be executed in parallel on different processors. Scientific computing systems can offer parallelism at a much larger scale, with 100’s or 1000’s, or even millions of tasks running concurrently.However, writing parallel software can be challenging, and many existing software packages do not already support parallelism & may require development.

Scientific computing on HPCs are userful when you have:

  • A program that can be recompiled or reconfigured to use optimized numerical libraries that are available on HPC systems but not on your own system;

  • You have a parallel problem, e.g. you have a single application that needs to be rerun many times with different parameters;

  • You have an application that has already been designed with parallelism;

  • To make use of the large memory available;

  • Your problem solutions require backups for future use. HPC facilities are reliable and regularly backed up.

However, it is not so good when:

  • You have a single threaded job which will only run one job at a time (typical of MatLab users);

  • You rely on DBMS/ databases;

  • You have a lot of data to transfer between your local machine and the HPC on a continuous basis (e.g. per job);

  • You need to have a GUI to interact with your program.