From 9795c572581d4dcae633f4048d7acd009835be42 Mon Sep 17 00:00:00 2001 From: Dave Kerr Date: Thu, 4 Apr 2019 12:18:24 +0800 Subject: [PATCH] feat: amdahls law (#47) * feat: added Amdhal's Law Closes #46. --- .gitignore | 1 + README.md | 24 ++++++++++++++++++++++++ images/amdahls_law.png | Bin 0 -> 28917 bytes 3 files changed, 25 insertions(+) create mode 100644 .gitignore create mode 100644 images/amdahls_law.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e43b0f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/README.md b/README.md index 78cf14e..a6da6b5 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ Laws, Theories, Principles and Patterns that developers will find useful. * [Introduction](#introduction) * [Laws](#laws) + * [Amdahl's Law](#amdahls-law) * [Brooks's Law](#brookss-law) * [Conway's Law](#conways-law) * [The Hype Cycle & Amara's Law](#the-hype-cycle--amaras-law) @@ -38,6 +39,29 @@ There are lots of laws which people discuss when talking about development. This And here we go! +### Amdahl's Law + +[Amdahl's Law on Wikipedia](https://en.wikipedia.org/wiki/Amdahl%27s_law) + +> Amdahl's Law is a formula which shows the _potential speedup_ of a computational task which can be achieved by increasing the resources of a system. Normally used in parallel computing, it can predict the actual benefit of increasing the number of processors, which is limited by the parallelisability of the program. + +Best illustrated with an example. If a program is made up of two parts, part A, which must be executed by a single processor, and part B, which can be parallelised, then we see that adding multiple processors to the system executing the program can only have a limited benefit. It can potentially greatly improve the speed of part B - but the speed of part A will remain unchanged. + +The diagram below shows some examples of potential improvements in speed: + +![Diagram: Amdahl's Law](./images/amdahls_law.png) + +*(Image Reference: By Daniels220 at English Wikipedia, Creative Commons Attribution-Share Alike 3.0 Unported, https://en.wikipedia.org/wiki/File:AmdahlsLaw.svg)* + +As can be seen, even a program which is 50% parallelisable will benefit very little beyond 10 processing units, where as a program which is 95% parallelisable can still achieve significant speed improvements with over a thousand processing units. + +As [Moore's Law](#TODO) slows, and the acceleration of individual processor speed slows, parallelisation is key to improving performance. Graphics programming is an excellent example - with modern Shader based computing, individual pixels or fragments can be rendered in parallel - this is why modern graphics cards often have many thousands of processing cores (GPUs or Shader Units). + +See also: + +- [Brooks's Law](#brookss-law) +- [Moore's Law](#TODO) + ### Brooks's Law [Brooks's Law on Wikipedia](https://en.m.wikipedia.org/wiki/Brooks%27s_law) diff --git a/images/amdahls_law.png b/images/amdahls_law.png new file mode 100644 index 0000000000000000000000000000000000000000..3fd74726e90f73e49b54ec6c6e65a0e003f1d894 GIT binary patch literal 28917 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 literal 0 HcmV?d00001