实验二:OpenMP多线程编程.doc_第1页
实验二:OpenMP多线程编程.doc_第2页
实验二:OpenMP多线程编程.doc_第3页
实验二:OpenMP多线程编程.doc_第4页
实验二:OpenMP多线程编程.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验二 :OpenMP多线程编程模块一:基础练习3 编译执行,执行结果:简答与思考:1 写出关键的并行代码(1)四个线程各自执行6次迭代。#include stdafx.h#include int _tmain(int argc, _TCHAR* argv)printf(Hello World n);#pragma omp parallelfor(int i=0; i6; i+)printf(Iter:%d Thread%dn ,i,omp_get_thread_num();printf(GoodBye Worldn);return 0;(2)四个线程协同完成6次迭代。#include stdafx.h#include int _tmain(int argc, _TCHAR* argv)printf(Hello World n);#pragma omp parallel#pragma omp forfor(int i=0; i6; i+)printf(Iter:%d Thread%dn ,i,omp_get_thread_num();printf(GoodBye Worldn);return 0;2 附加练习:(1)编译执行下面的代码,写出两种可能的执行结果。int i=0,j = 0;#pragma omp parallel for for ( i= 2; i 7; i+ ) for ( j= 3; j 5; j+ ) printf(“i = %d, j = %dn”, i, j); (2)编译执行下面的代码,写出两种可能的执行结果。 int i=0,j = 0;for ( i= 2; i 7; i+ ) #pragma omp parallel for for ( j= 3; j 5; j+ ) printf(“i = %d, j = %dn”, i, j);(3)分析上述两段代码的不同并行效果。代码1,” #pragma omp parallel for”为并行区域只对外层循环起作用,因此外层循环 i 值出现的比较随机。而” #pragma omp parallel for”对内层的循环不起作用,执行方式仍然是串行方式,于是内层循环的出现还是固定的 先3 后4。代码2” #pragma omp parallel for”只对内层循环起作用,对外层循环不起作用,因此外层循环是串行方式执行的,内层循环是多个线程共同并发执行的。因此i 值的出现是随机的,j值的出现是有序的。3 实验总结。模块二:数值积分计算Pi值3 编译执行,计算执行时间:为:6 编译执行,计算执行时间为: 5.553000s和11.700000s 7 加速比(写出计算公式): 11.700/5.553 2.107 8 并行效率(写出计算公式): (11.700/5.553) /4 52.674% 简答与思考:1 如何进行并行化的?为什么? #include stdafx.h#include #include #include long long num_steps = 1000000000;double step;int _tmain(int argc, _TCHAR* argv)clock_t start, stop;double x, pi, sum=0.0;int i;step = 1./(double)num_steps;start = clock();#pragma omp parallel for reduction(+:sum), private(x)for (i=0; inum_steps; i+)x = (i + .5)*step;sum = sum + 4.0/(1.+ x*x);pi = sum*step;stop = clock();printf(The value of PI is %15.12fn,pi);printf(The time to calculate PI was %f secondsn,(double)(stop - start)/1000.0);return 0;2 是否可以对该并行化方案进行进一步的优化?如何优化?效果如何?3 是否有其他并行化方案?如何并行?效果如何?4 实验总结模块三:Monte Carlo计算Pi值2 编译执行, Pi的值为:计算执行时间为:5 编译执行,Pi的值为:计算执行时间为: 6 加速比(写出计算公式): 4.5310/2.2900 1.9786 7 并行效率(写出计算公式): (4.5310/2.2900)/4 49.47 简答与思考:1 如何进行并行化的?为什么?#include stdafx.h/VSL Variables#include mkl_vsl.h#define BRNG VSL_BRNG_MCG31#define METHOD 0#define BLOCK_SIZE 500int _tmain(int argc, _TCHAR* argv)unsigned int iter=200000000; double x;double y;double dUnderCurve=0.0;double pi=0.0;/you need a private copy of whole array for each threadVSLStreamStatePtr stream; /You need one stream for each threaddouble end_time,start_time;start_time=clock();#pragma omp parallel private(x, y, stream) reduction(+: dUnderCurve)double rBLOCK_SIZE*2;/Careful!vslNewStream(&stream,BRNG,(int)clock();#pragma omp forfor(int j=0; jiter/BLOCK_SIZE;j+) vdRngUniform( METHOD, stream, BLOCK_SIZE*2, r, 0.0, 1.0 );/Create random numbers into array rfor (int i=0;iBLOCK_SIZE;i+)x=ri; /X Coordinate y=ri+BLOCK_SIZE; /Y Coordinate if (x*x + y*y = 1.0) /is distance from Origin under Curve dUnderCurve+; vslDeleteStream(&stream);pi = dUnderCurve / (double) iter * 4 ;end_time=clock();printf (pi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论