好文档 - 专业文书写作范文服务资料分享网站

OpenMP并行实验报告

天下 分享 时间: 加入收藏 我要投稿 点赞

并行实验报告

一、积分计算圆周率

1.1积分计算圆周率的向量优化

1.1.1串行版本的设计

任务: 理解积分求圆周率的方法,将其用 C代码实现。

、、亠理论上,dx越小,求得的圆周率越准确;在计算机中由于表 \

示的数据是有精度范围的,如果 dx太小,积分次数过多,误差积累 导致结果不准确。 以下为串行代码:

#in clude

#in clude #defi ne N 10000000 double get_pi (int dt){ double pi=0.0;

double delta =1.0/dt; int i;

for(i=0; i

retur n pi*4; } int mai n() { int dx; double pai;

double start,fi ni sh; dx=N;

二clock(); pai二get_pi(dx);

start

fini sh=clock(); prin tf(\

prin tf(\}

时间运行如下: adnin 19adnlni- virtual-maGhIne: -/Des-ktop$ gf 匚-03 textl t 匚 adninl@adniinl-vtrtual-macliifte:-/Desktops -/a.out 3.14159275 0*G267400OS adninl@adninl-vtctual-riacliifte:-/Desktops ?/a*out 3.14159275 6.624465005 adninl@adninl-vtrtual-nachir?e:-/Desktops ?/a*out 3.14159275 o*024e28ees adntnlgadninl?¥1「七即31-口日匸111“亡;| 第一次: time=0.02674000S 第二次: time=0.02446500S 第三次: time=0.02402800S 三次平均为:0.02508S

1.1.2 SSE向量优化版本设计

任务:此部分需要给出单精度和双精度两个优化版本

(1)测试均在划分度为10的7次方下完成。

以下是SSE双精度的代码:

#i nclude #in clude #in clude

#defi ne N 10000000 double get_pi (int dt){ double pi=0.0;

double delta =1.0/dt; int i;

for(i=0; i

return pi*4;

} double get_pi_sse(size_t dt){ double pi=0.0; double delta =1.0/dt;

__m128d xmm0,xmm1,xmm2,xmm3,xmm4; xmm0=_mm_set1_pd(1.0); xmm1=_mm_set1_pd(delta);

xmm2=_mm_set_pd(delta,0.0); xmm4=_mm_setzero_pd();

for(long int i=0; i<=dt-2; i+=2){ xmm3= _mm_set1_pd((double)i*delta); xmm3= _mm_add_pd(xmm3,xmm2); xmm3= _mm_mul_pd(xmm3,xmm3); xmm3= _mm_add_pd(xmm0,xmm3); xmm3= _mm_div_pd(xmm1,xmm3); xmm4= _mm_add_pd(xmm4,xmm3); } --

double tmp[2] __attribute__((alig ned(16))); _mm_store_pd(tmp,xmm4); pi+=tmp[0]+tmp[1]/*+tmp[2]+tmp[3]*/;

return pi*4.0; } int main() { int dx; double pai;

double start,fi ni sh; dx=N; start=clock(); pai=get_pi_sse(dx);

OpenMP并行实验报告

并行实验报告一、积分计算圆周率1.1积分计算圆周率的向量优化1.1.1串行版本的设计任务:理解积分求圆周率的方法,将其用C代码实现。、、亠理论上,dx越小,求得的圆周率越准确;在计算机中由于表\示的数据是有精度范围的,如果dx太小,积分次数过多,误差积累导致结果不准确。以
推荐度:
点击下载文档文档为doc格式
7xtku8gb8p57eja0pqkz5136q5t3m0006qc
领取福利

微信扫码领取福利

微信扫码分享