如何在给定的代码段上应用阿姆达尔定律?

How to apply Amdahl's law on a given piece of code?

我的作业中有以下问题。我知道我需要使用阿姆达尔定律,但我不知道公式中的哪一部分是哪一部分。

这里是问题:

How much will the following code speed up if we run it simultaneously on 8 threads?

#include <stdio.h> 
#include <omp.h> //OpenMP library 

int main()  {    int i=0,j=0; 

  for (i=0;i<1000;i++){
    i*i;   } 

  #pragma omp parallel for 

  for (j=0;j<2000;j++){ 
    j*j;   } 

  return 0;  }  ```

感谢任何帮助!

阿姆达尔定律是这样的:

s 是受益于改进的系统资源的任务部分的加速,p 是执行时间的比例原先占用的受益于改善资源的部分。

你的程序运行s的时间与3000成正比,如果程序是运行串行的循环迭代的总次数。

您希望并行化的程序部分占 运行 时间的 2/3。由于您计划在 8 个线程上 运行 它,因此该部分程序的理论加速是 8 倍。

我们将数字代入等式:

1/((1-2/3) + (2/3)/8)

这表示速度提升了 2.4 倍。

如果有疑问 - 试试下面链接的交互工具,然后再判断。

Tl;博士;

@Richard 的观点基于 Amdahl 的论点,但不适合,也不适用于您的原始问题:

"How to apply Amdahl's law on a given piece of code?"

这个问题有两个答案:

a)
Amdahl 定律(如果应用于给定的代码段)原始的、开销天真的、与资源无关的公式回答了“加速”的主要限制,这是一个理想化的过程-如果在“改进”的组织中运行(使用更多的、平行的、相互独立的线路,允许原始流程的某些部分得到更好的组织(可能并行处理它们)),流程将受到影响,从而改善整体端到端-结束过程持续时间)。因此,Amdahl 的论点与 CPU-s、CPU-cores、生成更多线程的工具等无关,Gene M 博士。AMDAHL 表达了通用流程编排的原始公式,重新-使用并承认对先前教授的钦佩。 Kenneth E. KNIGHT,斯坦福大学工商管理学院 1966 年 9 月出版的作品。

b)
无论另一个问题多么诱人,阿姆达尔定律并没有回答它实际上有多快运行,而只是说明了一个主要问题Speedup 极限,即使在最抽象和极端理想化的条件下(零延迟、零抖动、零附加开销时间、零附加 data-SER/DES-overhead次,零 PAR 工作段批处理 SER 调度,还有更多要在这里命名)

在 2017 年的某个地方发表了对在当代语境中使用原始 Amdahl 论点的弱点的批评,以及对原始 Amdahl 论点的扩展表述,以更好地反映上述任何一种天真使用的弱点, 几年前*。在帮助了大约三年后确实“了解更多...”,正如点击率上明确写的那样-link, 它被“编辑”了。

还有一个 visual GUI-tool,您可以与之互动和玩耍,更改参数并直观地看到它们对生成的主要加速上限的直接影响。与仅阅读本文的其余部分相比,这可能有助于更好地测试和查看硬影响。


你的第二个问题:

"How much will the following code speed up if we run it simultaneously on 8 threads?"

在现实世界的问题中是实用且常见的,但阿姆达尔定律,即使是开销严格、资源和工作原子性感知的重新制定版本也不能直接回答它。

如果我们有机会认真回答第二个问题,无论结果多么模糊和抖动,我们都可以(并且应该)履行我们的专业职责并分析真实硬件流程的关键阶段观察结果可能会得到 ( scale-, background workloads-, CPU-cores' thermal throttling effects and other inter-related dependencies always - “less” on small scales, 但如果 运行超出 HPC 配额,只是因为我们执行不当或缺少附加开销分析):

  • 线程、线程池(有时甚至是整个 Python-解释器进程,包括其内部状态及其所有当前数据结构 n 次在新的 RAM 分配中引起(重新)复制,有时因此开始 O/S 资源的窒息和交换颠簸)(重新)实例化 ... [ns]

  • 在 [ns]

    中与数据(参数)交换相关的附加费用是多少...
  • 哪些资源可能会阻碍并发/并行处理的可实现级别(共享、错误共享、I/O 的限制,...),从而导致独立的处理障碍-编排,即使我们有“无限”-许多免费的CPU-核心......这会降低分母的值,这将决定人们可能期望从独立流动过程的实际共存中获得的可实现效果-(代码)-执行(我们可以声称拥有 6 辆法拉利汽车,我们可以完全并行地移动“数据”,与纯 [SERIAL]-fashion ,但如果这条路从头到尾都经过一座桥,只有 2 条车道,则净效果将退化为 PAR[=58 的 (PAR / 2)“改善” =]-section(仍然没有谈论将我们的“数据”加载到我们的法拉利“sport-wagens”六重奏和从中卸载的其他间接费用)

更多关于现实世界中递归使用的想法是here and are always device and instruction-mix specific (architecture & Cache details matter awfully lot)