如何对给定的代码应用阿姆达尔定律?

Posted

技术标签:

【中文标题】如何对给定的代码应用阿姆达尔定律?【英文标题】:How to apply Amdahl's law on a given piece of code? 【发布时间】:2022-01-10 08:30:37 【问题描述】:

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

问题来了:

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; 
 

感谢任何帮助!

【问题讨论】:

我希望它会慢很多。代码什么都不做,可能会被优化到被开销淹没的程度::( 我的意思是,即使没有优化循环,3000 次乘法也太简单了,无法尝试并行运行。 【参考方案1】:

阿姆达尔定律是这样的:

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

您的程序运行时间与 3000 成正比,如果程序以串行方式运行,则循环迭代的总数。

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

我们将数字代入方程:

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

这表明加速有 2.4 倍的界限。

【讨论】:

以上是关于如何对给定的代码应用阿姆达尔定律?的主要内容,如果未能解决你的问题,请参考以下文章

阿姆达尔定律

软考 系统架构设计师系统配置与性能评价② 阿姆达尔定律

30Java并发性和多线程-阿姆达尔定律

阿姆达尔定律(Amdahl’s Law) 计算

阿姆达尔解决方案

理解性能提升By阿姆达尔定律(Amdahl‘s law)