Parallel hardware architectures

Flynn’s taxonomy, levels of parallelism, and the programming models that match them

Lars Pastewka

Learning objectives

  • Classify parallel computers with Flynn’s taxonomy
  • Distinguish shared, distributed, and hybrid memory architectures
  • Name the three levels of parallelism in a modern node and the programming model for each
  • Read the bandwidth hierarchy of a GPU cluster: NVLink > PCIe > InfiniBand
  • Explain why this zoo of models motivates a portability layer like Kokkos

Flynn’s taxonomy

How many instruction streams, how many data streams?

Single data Multiple data
Single instruction SISD – classic serial CPU SIMD – vector units, GPUs
Multiple instruction MISD – rare (fault-tolerant pipelines) MIMD – multicore, clusters
  • Modern HPC machines are MIMD of SIMD: many independent cores, each operating on vectors
  • GPUs push the SIMD idea to the extreme

Shared, distributed, hybrid memory

Hierarchical parallelism: SIMD lanes inside cores, cores sharing memory within a node, nodes connected by a network, GPUs attached to each node.

  • Shared memory: all threads see one address space (within a node)
  • Distributed memory: each process owns its memory; data moves by explicit messages (between nodes)
  • Hybrid: every real cluster is both – plus accelerators

Level 1: Vectorization (SIMD)

One instruction, many data elements.

  • CPU vector units: SSE, AVX – e.g. ADDPS adds 4 floats in one instruction
  • GPUs are SIMD taken to the extreme (SIMT): an NVIDIA H200 has 16,896 CUDA cores; threads execute in warps of 32
  • Programming models: CUDA, HIP, SYCL, OpenACC, OpenMP (target), OpenCL

Level 2: Thread-level parallelism

Multiple threads inside one process.

  • Threads share the memory of their process – no explicit data movement
  • Beware: shared access requires synchronization (races!)
  • In HPC, the dominant model is OpenMP

Level 3: Process-level parallelism

Multiple processes, possibly on different machines.

  • Each process has its own memory – no process can see another’s data
  • Data is moved by explicit copies: messages over the network
  • The HPC standard: MPI (Message Passing Interface)

Mapping the levels onto a cluster

A compute node: CPU with DRAM, four GPUs with HBM, NVLink between GPUs, PCIe to the CPU, NIC/InfiniBand to other nodes.

  • A cluster = many such nodes on an InfiniBand fabric
  • Every link in this picture has a different bandwidth…

The bandwidth hierarchy

  • NVLink (GPU ↔︎ GPU, same node): ~900 GB/s
  • PCIe 5 (CPU ↔︎ GPU): ~128–256 GB/s
  • InfiniBand NDR (node ↔︎ node): ~50 GB/s

The further data travels, the slower the link.

Keep data on the GPU; communicate as locally – and as rarely – as possible.

CPU vs GPU: two design philosophies

CPU: few fat, latency-optimized cores with large caches and control logic. GPU: many lean, throughput-optimized cores.

  • CPU: minimize the time to finish one task (latency)
  • GPU: maximize the number of tasks finished per second (throughput)

One programming model per hardware level

Hardware level Programming model
Distributed memory (node ↔︎ node) MPI
Shared memory (cores in a node) OpenMP, pthreads
SIMD (vector lanes in a core) intrinsics, auto-vectorization
Accelerator (GPU) CUDA, HIP, SYCL

That is four models for one machine. Kokkos spans all on-node levels from a single C++ source – which is why this course is built around it.

Summary

One C++ source, many backends, many kinds of hardware.

  • Flynn: modern machines are MIMD of SIMD
  • Three levels of parallelism: SIMD lanes → threads (shared memory) → processes (distributed memory)
  • Bandwidth hierarchy: NVLink (900 GB/s) > PCIe (~128–256 GB/s) > InfiniBand (~50 GB/s)
  • Traditionally one programming model per level – Kokkos abstracts the on-node levels; MPI handles the rest

Reading