如何对给定的代码应用阿姆达尔定律?
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 倍的界限。
【讨论】:
以上是关于如何对给定的代码应用阿姆达尔定律?的主要内容,如果未能解决你的问题,请参考以下文章