There are mainly three types of parallelism in modern processors: Multi-core, SIMD, Superscalar
Multi-Core
It uses multiple processing cores: 1. Provides thread-level parallelism: simultaneously execute a completely different instruction stream on each core. 2. Software decides when to create threads.
SIMD
SIMD uses multiple ALUs controlled by same instruction stream within a core.
- SIMD is an efficient design for data-parallel wordloads
- Vectorization can be done by compiler(known as explicit SIMD) or at runtime by hardware.
Superscalar
Superscalar exploits ILP within an instruction stream. It issues different instructions from the same instruction stream in parallel within a core.
Multiple pipelines is one way to implement a superscalar architecture. Besides, DO NOT confuse with MIMD and Superscalar.
ISPC: Intel SPMD Program Compiler
ISPC is a repository form Intel about implementation of many basic models.
- Single Program Multiple Data Programming Model
SPMD Programming Model
Define one function, run multiple instances of that function in parallel on different input arguments.