Introduction

You add more cores. The program gets faster. Keep adding, and gains shrink. Eventually, speed stops rising.

That ceiling has a name: Amdahl’s Law. It gives the maximum speedup from parallelizing a program, given how much work must still run sequentially.

This matters because it prevents wasted effort. Teams add hardware expecting linear speedup, then hit diminishing returns. Amdahl’s Law explains why and points you to the bottleneck that actually needs work.

What Amdahl’s Law says

Overall speedup is limited by the portion of the program that cannot run in parallel.

Think of any program as two parts:

  • The serial part — work that must happen in sequence (initialization, coordination, writing shared state).
  • The parallel part — work that can be split across multiple processors.

Adding processors shortens only the parallel portion; the serial portion keeps the same wall-clock time. That serial fraction becomes the bottleneck.

Picture painting a house: one painter tapes edges for 2 hours (serial) and paints walls for 8 hours (parallelizable). You can add painters for the walls—four finish the walls in 2 hours instead of 8, so total time falls from 10 hours to 4. You cannot beat 2 hours, because taping still takes 2 hours no matter how many painters you hire.

The formula and its intuition

Amdahl’s Law is expressed as:

Speedup = 1 / (S + P/N)

Where:

  • S = fraction of the program that is serial (must run sequentially).
  • P = fraction of the program that is parallelizable (P = 1 − S).
  • N = number of processors.

As N grows very large, P/N approaches zero, and the speedup approaches 1/S.

The serial fraction sets a hard ceiling on speedup.

Concrete ceilings:

  • If 10% of your program is serial (S = 0.1), maximum speedup is 10×, no matter how many processors you use.
  • If 25% is serial (S = 0.25), the ceiling drops to .
  • If 50% is serial (S = 0.5), you can never exceed speedup. A thousand cores add almost nothing beyond what eight cores already yield.

Returns diminish fast: most of the gain comes when you move from one core to four. Moving from 64 to 128 cores often barely moves the needle.

Why the serial fraction dominates

The serial fraction sets the ceiling, not the processor count.

Cutting the serial fraction from 20% to 10% doubles the theoretical maximum speedup (from 5× to 10×). Doubling cores from 64 to 128 barely nudges actual speedup.

Hardware is easy to add; shrinking the serial fraction is not. That work means understanding structure, dependencies, coordination overhead, and shared state—and it pays more than buying chips.

Serial work hides where you might not look:

  • Lock contention. Threads waiting for a mutex are effectively serial.
  • Shared data structures. Reads may parallelize, but writes that require coordination serialize access.
  • I/O bottlenecks. A single database connection or disk write serializes otherwise parallel work.
  • Task coordination. Splitting work, distributing it, and collecting results all take serial time.
  • Garbage collection pauses. Stop-the-world GC pauses serialize all threads.

How Amdahl’s Law connects to concurrency and parallelism

Amdahl’s Law concerns parallelism: doing multiple things at once to shorten total execution time.

Concurrency and parallelism differ. Concurrency interleaves tasks; parallelism runs them at the same time. Add parallelism, and you hit a wall set by the serial fraction.

Concurrency models still matter: an event loop can raise throughput without more cores when I/O dominates. Amdahl’s Law applies when the bottleneck is CPU-bound work you can split across processors.

Trade-offs and limitations

Like every model, Amdahl’s Law simplifies reality.

What it gets right

  • It sets realistic expectations for scaling with hardware.
  • It directs optimization effort toward the serial bottleneck.
  • It explains diminishing returns that teams observe in practice.

What it leaves out

  • Overhead grows with processors. Communication, synchronization, and cache coherence add cost as you scale. Real speedup is often worse than Amdahl’s Law predicts.
  • The serial fraction isn’t fixed. Clever algorithms can reduce it. Lock-free data structures, batching, and pipeline designs all shrink the serial portion.
  • Problem size can change. Amdahl’s Law assumes a fixed workload. In practice, when you get faster hardware, you often tackle larger problems, not just the same problem faster.

System-level scaling adds coordination cost, shared bottlenecks, and network effects on top of this single-program model. Fundamentals of Software Scalability covers those ceilings and when architecture—not just cores—must change.

That gap invites a different framing.

The Gustafson counterpoint

In 1988, John Gustafson challenged Amdahl’s framing. In practice, people often hold wall-clock time fixed and grow the problem, instead of holding the problem fixed and adding processors.

Gustafson’s Law says that if problem size scales with processor count, the parallel fraction grows and the serial share of total work shrinks. Speedup can track core count almost linearly, because serial work is a smaller slice of a larger pie.

Both laws hold. They answer different questions:

  • Amdahl’s Law: “How fast can I solve this problem with more cores?” (Fixed problem, variable processors.)
  • Gustafson’s Law: “How big a problem can I solve in this time with more cores?” (Fixed time, variable problem size.)

Amdahl’s Law is more useful for latency-sensitive work (a web request must finish faster). Gustafson’s Law is more useful for throughput-oriented work (process more data in the same time window).

Common misconceptions

“More cores always means faster.” Amdahl’s Law caps speedup; beyond a point, more cores add almost nothing. The serial fraction marks that point.

“Amdahl’s Law means parallelism is pointless.” Parallelism has limits, not zero benefit. Programs with small serial fractions—large-scale data processing, rendering, scientific simulation—gain real speedup; the ceiling is finite, not absent.

“The serial fraction is a property of the hardware.” It’s a property of the algorithm and implementation. The same computation can have different serial fractions depending on how it’s designed. Reducing the serial fraction is a software problem, not a hardware problem.

“If my profiler says 5% of time is in serial code, my max speedup is 20×.” Only if that 5% figure came from profiling on a single core. When you parallelize, the parallel portion shrinks in wall-clock time, and the serial portion’s relative share grows. The serial fraction in Amdahl’s formula is measured against the original single-threaded execution time.

Conclusion

Amdahl’s Law is a compact mental model: the serial fraction caps how much parallelism can help. Hardware cannot erase a serial bottleneck.

Measure the serial fraction before you invest in parallelism. A large fraction means fix the algorithm first. A small fraction means more cores help—until you hit Amdahl’s ceiling.

Where to go next

References

  • Amdahl 1967, Gene Amdahl’s original 1967 paper arguing that the serial fraction limits parallel speedup.
  • Gustafson 1988, John Gustafson’s 1988 response, arguing that problem size scales with processors in practice.
  • Amdahl’s law — Wikipedia, for the formula, derivations, and visual illustrations.