如何在一段给定的代码上应用安达尔定律? [英] How to apply Amdahl's law on a given piece of code?
本文介绍了如何在一段给定的代码上应用安达尔定律?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的作业中有以下问题。我知道我需要使用Amdahl定律,但是我不知道公式中的哪个部分会是哪个部分。
这是问题:
如果我们同时运行以下代码,它的速度会提高多少 在8个线程上?#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是受益于改进的资源的部分最初占用的执行时间的比例。
您的程序运行的时间与3000成正比,如果程序以串行方式运行,则循环迭代总数为3000。
您希望并行化的程序部分占运行时间的2/3。由于您计划在8个线程上运行它,因此该部分程序的理论加速速度是8倍。我们将数字插入公式:
1/((1-2/3) + (2/3)/8)
这表示加速限制为2.4倍。
这篇关于如何在一段给定的代码上应用安达尔定律?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文