OpenMP 并行实验报告
并行实验报告
一、
积分计算圆周率
1.1 积分计算圆周率的向量优化 1.1.1 串行版本的设计任务:理解积分求圆
周率的方法,将其用 C 代码实现。
注意:理论上,dx 越小,求得的圆周率越准确;在计算机中由于表示的数据
是有精度范围的,如果 dx 太小,积分次数过多,误差积累导致结果不准确。
以下为串行代码:
#include#include#defineN10000000
doubleget_pi(intdt){
doublepi=0.0;
doubledelta=1.0/dt;
inti;
for(i=0;i doublex=(double)i/dt;
pi+=delta/(1.0+x*x);
}
returnpi*4;}
intmain()
{
intdx;
doublepai;
doublestart,finish;
dx=N;
start=clock();
pai=get_pi(dx);
finish=clock();
printf("%.8lf",pai);
printf("%.8lfS",(double)(finish-start)/CLOCKS_PER_SEC);
return0;}
时间运行如下:
第 一 次 : time=0.02674000S 第 二 次 : time=0.02446500S 第 三 次 :
time=0.02402800S 三次平均为:0.02508S1.1.2SSE 向量优化版本设计
任务:此部分需要给出单精度和双精度两个优化版本。
注意:
(1)测试均在划分度为 10 的 7 次方下完成。
以下是 SSE 双精度的代码:
#include#include#include
#defineN10000000
doubleget_pi(intdt){
doublepi=0.0;
doubledelta=1.0/dt;
inti;
1