Worked examples — Flynn's taxonomy (SISD - SIMD - MIMD)
This page is the drill-room for Flynn's taxonomy (SISD - SIMD - MIMD). The parent note built the ideas; here we push a number through every kind of situation the taxonomy can throw at you — from the friendly "just count cycles" case, to the nasty zero-and-degenerate cases (what if a task cannot be parallelised at all?), to the limiting case (what if you had infinite cores?).
The scenario matrix
Every worked example below is tagged with the cell it covers. Together they fill the whole grid.
| Cell | Case class | What makes it tricky | Example |
|---|---|---|---|
| A | SISD baseline | serial, one instruction, one datum | Ex 1 |
| B | SIMD ideal | independent data, full | Ex 2 |
| C | SIMD ragged | data count not a multiple of lanes | Ex 3 |
| D | SIMD dependency (degenerate) | a dependency kills parallelism | Ex 4 |
| E | MIMD task-parallel | different code per core | Ex 5 |
| F | Amdahl, ordinary | mixed serial + parallel | Ex 6 |
| G | Amdahl, and (extremes) | the two degenerate fractions | Ex 7 |
| H | Amdahl, (limit) | ceiling on speedup | Ex 8 |
| I | Real-world word problem | pick the architecture | Ex 9 |
| J | Exam twist | SIMD vs MIMD on the same array | Ex 10 |

Look at the board above: the horizontal axis is how many instruction streams (one vs many), the vertical axis is how many data streams. Each example plants a flag in one region.
Ex 1 — Cell A: the SISD baseline
Forecast: guess the total before reading on — is it , , or something bigger?
- Count the additions. Four numbers means four
ADDoperations. Why this step? In SISD each datum is touched by exactly one instruction, one at a time — nothing overlaps. - Note the dependency.
sumafter the second add needs the result of the first. So add #2 cannot begin until add #1 finishes. Why this step? This is what forces the serial line — the whole reason SISD gives no speedup. - Multiply. Total . Why this step? With no overlap, times simply add up.
Verify: four cycles . Units: ✓. Sanity: it must be slower than any parallel version — and it is our slowest number, good.
Ex 2 — Cell B: SIMD, the ideal case
Forecast: if four lanes each do one add "at once", how many 's of time pass?
- One instruction, four data. The control unit broadcasts a single
ADD; lanes each hold one datum. Why this step? This is the defining move of SIMD — one instruction stream, four data streams. - All lanes fire in the same cycle. Because are independent (no lane needs another lane's answer), they run together. Why this step? Independence is the licence to parallelise; without it we'd be back in Ex 4.
- Time. .
- Speedup. .
Verify: ✓. Sanity: speedup equals lane count , the theoretical ceiling for SIMD — correct for the ideal case.
Ex 3 — Cell C: SIMD with a ragged tail
Forecast: isn't a whole number — will you need 2 passes or 3?
- Divide with a ceiling. passes: lanes handle elements , , then . Why this step? You cannot do "two and a half" broadcasts — the last partial group still costs a full vector op.
- The third pass wastes lanes. Pass 3 uses only 2 of 4 lanes; the other 2 do nothing but still burn a cycle. Why this step? This is the overhead the parent note warned about — real speedup rarely hits .
- Time. .
- Effective speedup vs SISD (which is ): , not .
Verify: ; ; ✓. Sanity: , so ragged data lowers speedup below the lane count — exactly the "ragged tail" penalty.
Ex 4 — Cell D: SIMD defeated by a dependency (degenerate input)
Forecast: these are the same numbers as Ex 2 — will SIMD still give ?
- Spot the dependency. needs ; needs . Lane 3 cannot start until lane 2 is done. Why this step? A data dependency between elements removes the "independent" licence from Ex 2 step 2.
- Lanes must wait for each other. The naive broadcast is illegal — you'd read a value not yet written. Why this step? This is the degenerate case: the workload structurally refuses lockstep parallelism.
- Result. Naively you fall back to SISD-like timing: , speedup (none). (Clever "parallel scan" algorithms exist, but the point stands: the naive same-instruction trick fails.)
Verify: speedup ✓. Sanity: identical data to Ex 2, yet speedup collapsed from to — proving speedup depends on dependency structure, not on the numbers.
Ex 5 — Cell E: MIMD, genuinely different code
Forecast: three jobs — is the wall-clock or ?
- Note the streams. Three different instruction streams, three different data sets ⇒ MIMD. Why this step? SIMD is impossible — there is no single common instruction to broadcast.
- They run simultaneously and independently. No core waits on another (no shared result). Why this step? Task-parallel work overlaps fully when tasks don't depend on each other.
- Wall-clock time = the longest single job (they finish together since equal length).
Verify: serial would be ; MIMD gives ; speedup ✓. Sanity: equals core count because jobs are perfectly independent and equal-sized.
Ex 6 — Cell F: Amdahl's Law, ordinary fraction
Forecast: you have 8 cores and 90% is parallel — will you get close to ?
Recall the parent's law — the symbol means "how many times faster with cores":
- Serial part stays put. . That tenth of the work runs on one core no matter what. Why this step? Serial work is the anchor Amdahl's Law is built to expose.
- Parallel part shrinks by . . Why this step? Splitting parallel work across 8 cores divides its time by 8.
- Add and invert. Denominator ; so .
Verify: ✓. Sanity: far below — that stubborn 10% serial slice cut our speedup nearly in half. This is the whole lesson of Amdahl's Law.
Ex 7 — Cell G: the two degenerate fractions ( and )
Forecast: one of these gives no speedup and one gives the maximum — which is which?
- Case . Denominator . So . Why this step? If nothing can be split, extra cores are useless — the honest degenerate result.
- Case . Denominator . So . Why this step? With zero serial work, the law reduces to plain — matching the ideal SIMD/MIMD picture.
Verify: ; ✓. Sanity: these are the floor () and ceiling () of Amdahl speedup — every real program lives strictly between them.
Ex 8 — Cell H: the limit
Forecast: unlimited cores — does speedup shoot to infinity, or hit a wall?
- Take . The term . Why this step? Dividing parallel work among endless cores drives its time toward zero.
- What's left is the serial floor. . Why this step? The serial fraction can never be sped up, so it caps everything.
Verify: ✓. Sanity: even infinite hardware only gets here — the serial 10% is a hard ceiling. This is why "just add more cores" eventually stops helping.

The curve above (from Ex 6, 7, 8) shows speedup flattening toward the dashed ceiling as cores increase — you approach it but never cross it.
Ex 9 — Cell I: real-world word problem (choose the architecture)
Forecast: are these both SIMD? Both MIMD? Or one of each?
- Job (a): one operation, millions of data. Every pixel gets the identical "add brightness" instruction. Why this step? One instruction + many data ⇒ this is the textbook SIMD (GPU) job.
- Job (b): different code per thread. Physics, AI, and audio are unrelated algorithms. Why this step? Multiple instruction streams + multiple data ⇒ MIMD (multicore CPU).
Verify: (a) SIMD, (b) MIMD ✓. Sanity: matches the parent note — "GPUs are SIMD, modern CPUs are MIMD."
Ex 10 — Cell J: the exam twist
Forecast: both have "4-wide" hardware — will they tie?
- Machine X (SIMD). vector ops . Why this step? One broadcast handles 4 elements; 16 elements need 4 broadcasts.
- Machine Y (MIMD). Each core does scalar multiplies, in parallel with the others . Why this step? Cores run at the same time, so wall-clock is just one core's share.
- Compare. Both give — a tie on this idealised workload.
Verify: X ; Y ; equal ✓. Sanity: the trap is thinking one must win — for identical independent operations, the wide-vs-many distinction disappears in the timing (it reappears in cost, flexibility, and instruction-fetch bandwidth, which the parent note discusses).
Recall Quick self-test
What does give for speedup on any ? ::: Exactly — nothing parallel, extra cores useless. Ceiling of speedup as for ? ::: . Why did the prefix-sum (Ex 4) get no SIMD speedup? ::: Each element depends on the previous one — no independence, no lockstep. Why is floats on lanes only , not ? ::: The ragged last pass wastes idle lanes ( passes).