如何在一段给定的代码上应用安达尔定律? [英] How to apply Amdahl's law on a given piece of code?

查看:20
本文介绍了如何在一段给定的代码上应用安达尔定律?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的作业中有以下问题。我知道我需要使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆