Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 21

Flynn's Taxonomy of Parallel Architectures

Recommended resources

Introduction

Welcome to the fourth module, "Foundations of Parallel Architectures." In the previous module, we honed in on optimizing performance on a single CPU core, culminating in our last lesson where you manually vectorized a C++ loop using SIMD intrinsics. You saw firsthand how a Single Instruction can operate on Multiple Data points simultaneously.

This concept is not just a programming trick; it's a fundamental architectural design. In this lesson, we will zoom out from the single-core perspective to build a mental framework for understanding the entire landscape of parallel computing. We will do this by exploring a classic classification system for computer architectures.

Our learning outcome for today is to classify parallel architectures using Flynn's taxonomy (SISD, SIMD, MISD, MIMD). This framework, proposed by Michael J. Flynn in 1966, categorizes systems based on two key properties: the number of instruction streams and data streams they can process concurrently. Mastering this taxonomy will provide you with a high-level map to navigate the different types of parallel systems we will study throughout this course, from multi-core CPUs to GPUs and distributed clusters.


The Big Picture: Instruction and Data Streams

At its core, Flynn's taxonomy is elegantly simple. It organizes computer architectures into a 2x2 grid based on two questions:

  1. How many unique instruction streams are executing at once? (Single or Multiple)
  2. How many unique data streams are being operated on at once? (Single or Multiple)

An instruction stream is a sequence of instructions executed by a processor (think of it as a single thread of control or a program counter). A data stream is the sequence of data items that the instructions operate on.

This creates four possible combinations, which are visualized perfectly in this matrix:

Flynn's Taxonomy of Computer Architectures
A 2x2 matrix illustrating Flynn's taxonomy. The axes represent the number of instruction streams (One vs. Many) and data streams (One vs. Many), defining the four categories: SISD, SIMD, MISD, and MIMD.

To get a concise walkthrough of these four categories with modern examples, please watch the following video from a Georgia Tech course on High-Performance Computer Architecture.

Flynn's Taxonomy of Parallel Machines - Georgia Tech - HPCA: Part 5

This video provides a clear overview of the taxonomy, defining each of the four categories and providing excellent, relevant examples.

Watch the entire video from the beginning to 03:10. Pay close attention to the examples given for each category, especially how SIMD relates to multimedia extensions like SSE/AVX (which you've used) and how MIMD relates to modern multi-core processors.


A Deeper Look at the Four Categories

As the video explained, the four classifications give us a powerful vocabulary for discussing computer architecture. Let's examine each one more closely, using a more detailed diagram to visualize the flow of instructions and data.

Flynn's Taxonomy of Computer Architectures
Diagrams illustrating the flow for each of Flynn's four categories. 'CU' (Control Unit) issues instructions from an 'Instruction Pool', and 'PU' (Processing Unit) or 'ALU' (Arithmetic Logic Unit) executes them on data from a 'Data Pool'.

1. SISD: Single Instruction, Single Data

  • What it is: This is the traditional, sequential computer architecture. A single control unit fetches one instruction at a time, which operates on a single piece of data.
  • Connection: This model describes the von Neumann architecture we covered in the first module. It's the basis for any standard, non-parallel program execution.
  • Examples: Early computers, modern microcontrollers, or a single core of a CPU executing a simple serial program.

2. SIMD: Single Instruction, Multiple Data

  • What it is: A single instruction is broadcast to multiple processing units, each of which executes the same operation on a different piece of data. This is a model of data parallelism.
  • Connection: This is precisely the principle you applied in the previous lesson! When you used an AVX intrinsic like _mm256_add_ps, you issued a single instruction that performed eight additions simultaneously on eight different pairs of floats.
  • Examples:
    • CPU vector units (SSE, AVX).
    • Graphics Processing Units (GPUs), where thousands of "cores" execute the same instruction on different pixels or data points.
    • Historical vector supercomputers like the Cray-1.

3. MISD: Multiple Instruction, Single Data

  • What it is: Multiple instructions operate on a single stream of data. This is the rarest of the four categories and is used in highly specialized scenarios.
  • Why it's rare: Most problems don't require applying many different functions to the exact same data stream simultaneously.
  • Conceptual Uses:
    • Fault Tolerance: A mission-critical system, like a space shuttle's flight computer, might have several redundant processors performing different checks on the same stream of sensor data to ensure correctness.
    • Signal Processing: One could imagine multiple filters (e.g., low-pass, high-pass, band-pass) running simultaneously on a single audio signal.

4. MIMD: Multiple Instruction, Multiple Data

  • What it is: This is the most general and powerful form of parallel computing. It involves multiple autonomous processors, each executing different instructions on different data. This is a model of task parallelism.
  • Connection: This architecture is the foundation for most of the parallel programming models we will cover later in this course, including OpenMP and MPI.
  • Examples:
    • Virtually all modern multi-core processors (e.g., Intel Core, AMD Ryzen).
    • Supercomputers and distributed computing clusters.
    • A network of computers working together on a problem.

Synthesis: The Modern CPU is a Hybrid

A crucial insight is that these categories are not always mutually exclusive within a single, complex system. A modern multi-core processor is a perfect example of a hybrid architecture.

  • The system as a whole is MIMD: each core is an independent processor that can run a completely different instruction stream from the others.
  • However, each individual core contains SIMD units (the AVX units you've been using).

So, a modern CPU is a MIMD machine composed of multiple processing units, each of which is capable of SIMD execution. This hierarchical parallelism is key to achieving high performance in today's hardware.


Comparison Summary

To consolidate what you've learned, here is a summary table comparing the four architectural types.

Category Instruction Streams Data Streams Core Idea Modern Examples
SISD Single Single Sequential processing Single-core CPU, microcontrollers
SIMD Single Multiple Same operation on multiple data points GPU shaders, CPU AVX/SSE units
MISD Multiple Single Different operations on the same data (redundancy) Specialized fault-tolerant systems
MIMD Multiple Multiple Different operations on different data points Multi-core CPUs, distributed clusters, supercomputers

Conclusion

In this lesson, you have learned to use Flynn's taxonomy to classify computer architectures. This simple yet powerful framework provides a mental model for distinguishing between the different forms of parallelism you'll encounter.

Key Takeaways:

  • Flynn's taxonomy classifies architectures based on the number of instruction streams and data streams.
  • SISD is the classic serial architecture.
  • SIMD enables data parallelism, applying one operation to many data points, as you did with AVX intrinsics.
  • MIMD enables task parallelism, with multiple processors running independent tasks, and is the most common architecture for general-purpose parallel computers today.
  • MISD is a rare, specialized architecture primarily used for fault tolerance.
  • Modern systems are often hybrids: a multi-core CPU is a MIMD machine where each core has SIMD capabilities.

Preview of the Next Lesson

We've established that modern multi-core processors are MIMD systems. But how do these multiple cores coordinate and access data? The answer lies in how they connect to memory. In our next lesson, we will dive deeper into the world of MIMD architectures by exploring shared-memory multiprocessor architectures (SMP, UMA, NUMA). This will lay the groundwork for understanding how to write parallel programs for the computer on your desk using OpenMP.