https://yosefk.com/blog/simd-simt-smt-parallelism-in-nvidia-gpus.html Blog Site X Feed SIMD < SIMT < SMT: parallelism in NVIDIA GPUs November 10th, 2011 Programmable NVIDIA GPUs are very inspiring to hardware geeks, proving that processors with an original, incompatible programming model can become widely used. NVIDIA call their parallel programming model SIMT - "Single Instruction, Multiple Threads". Two other different, but related parallel programming models are SIMD - "Single Instruction, Multiple Data", and SMT - "Simultaneous Multithreading". Each model exploits a different source of parallelism: * In SIMD, elements of short vectors are processed in parallel. * In SMT, instructions of several threads are run in parallel. * SIMT is somewhere in between - an interesting hybrid between vector processing and hardware threading. My presentation of SIMT is focused on hardware architecture and its implications on the trade-off between flexibility and efficiency. I'll describe how SIMT is different from SIMD and SMT, and why - what is gained (and lost) through these differences. From a hardware design perspective, NVIDIA GPUs are at first glance really strange. The question I'll try to answer is "why would you want to build a processor that way?" I won't attempt to write a GPU programming tutorial, or quantitatively compare GPUs to other processors. SIMD < SIMT < SMT It can be said that SIMT is a more flexible SIMD, and SMT is in turn a more flexible SIMT. Less flexible models are generally more efficient - except when their lack of flexibility makes them useless for the task. So in terms of flexibility, SIMD < SIMT < SMT. In terms of performance, SIMD > SIMT > SMT, but only when the models in question are flexible enough for your workload. SIMT vs SIMD SIMT and SIMD both approach parallelism through broadcasting the same instruction to multiple execution units. This way, you replicate the execution units, but they all share the same fetch/decode hardware. If so, what's the difference between "single instruction, multiple data", and single instruction, multiple threads"? In NVIDIA's model, there are 3 key features that SIMD doesn't have: 1. Single instruction, multiple register sets 2. Single instruction, multiple addresses 3. Single instruction, multiple flow paths We'll see how this lifts restrictions on the set of programs that are possible to parallelize, and at what cost. Single instruction, multiple register sets Suppose you want to add two vectors of numbers. There are many ways to spell this. C uses a loop spelling: for(i=0;i