Site Tools


parallel-computing

**This is an old revision of the document!**

Table of Contents

Parallel computing

Parallel computing is a type of software engineering where you use parallelism (more threads) to increase the amount of computation power against a task. Common areas where this is necessary is scientific computing and AI.

There are essentially three spheres of parallel computing: 1. CPU parallelism (OpenMP), 2. distributed parallelism (MPI), and 3. GPU parallelism (CUDA). I would per carve out a fourth category, which is 4. Hardware parallelism (FPGA) but it's not traditionally considered part of parallel computing. Instead of writing software that runs on hardware, in FPGA you modify the hardware itself.

Parallel computing is related to performance engineering. This makes sense, because usually increasing parallelism increases performance, but this is not always so. Not every piece of code can be parallelized and sometimes the overhead of creating threads can overweight the potential speedup.

Generally speaking, the potential speed up you'd get by parallelizing increasing $N$ cores is governed by Amdahl's law $$S(\text{N-cores}) = \frac{1}{(1 - P) + \frac{P}{N}}$$

parallel-computing.1781125856.txt.gz ยท Last modified: by Ivan Janevski