




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、募上逐大学SHANGHAI UNIVERSITY学院计算机工程与科学学院实验OpenMFPH序的编译和运行姓名陈帅学号12122208教师刘芳方时间2015.05.06报告成绩实验2-1. OpenMP程序的编译和运行1. 实验目的1) 在Linux平台上编译和运行 OpenMP程序;2) 在 Windows平台上编译和运行 OpenMP程序。3) 掌握OpenMP并行编程基础。2. 实验环境1) 硬件环境:计算机一台;2) 软件环境:Linux、Win2003、GCG MPICH、VS2008或其他版本 Visual Studio;3. 实验内容1. Linux下OpenMP程序的编译和运行
2、。OpenMP是一个共享存储并行系统上的应用编程接口,支持 C/C+和FORTRAN等语言,编译和运行简单的 "Hello World"程序。在Linux下编辑 hellomp.c源程序,或在 Windows下编辑并通过附件中的 FTP工具(端口号:1021)上传, 用"gcc -fopenmp -O2 -o hellomp.out hellomp.c'命令编译,用"./hellomp.out"命令运行程序。注:在虚拟机中当使用vi编辑文件时,不是以 ESC键退出插入模式,可以使用“Ctrl+c”进入命令模式,然后输入 wq进行存盘退出
3、。代码如下:#include <omp.h>#include <stdio.h>int main()(int nthreads,tid;omp_set_num_threads(8);#pragma omp parallel private(nthreads,tid)(tid=omp_get_thread_num();printf("Hello World from OMP thread %dn",tid);if(tid=0)(nthreads=omp_get_num_threads();printf("Number of threads i
4、s %dn",nthreads);安装gcciroot(3slave2 # yum install gccLoaded plugins: fastestmirror, refresh-packagekit» securityLoading mirror speeds from cached hostfile* base: cn* extras: * updates: cnbase| 3.extras| 3.检查GCC是否安装完成r0otslave2 pm -qa|grep gccgcc-4.4.7-ll.el6.x
5、86 64llbgcc-4.4.7=11.el6.x86_64编写 hellomp.c目rootslave2:*File Edit View Search Terminal HelpQinclude <omp.h> #include <stdio.h> int main() int nthreadsrtid; /omp set nm threads(8); pragma omp parallel privatefnth reads,tid) tid=omp_get_thread_num(); pnntf('TeUo World from OMP thread %
6、drT.t【d); if (tid=B) nthreads=omp_get_inuiii_thread5(); printf(Number of threads is dnH,nthreads); 编译运行roctslave2 T# gcc -fopenmp -02 -o hellomp.out hellomp.c rootslave2 ./hellomp.out Hello World from OMP thread 9 Number of threads is 1You have mail in /var/spool/mail/root rootslave2 T#2.控制并行执行的线程数。
7、根据算法的要求和硬件情况,例如CPU数量或者核数,选择适合的线程数可以加速程序的运行。请按照下列的方法进行线程数量的设置。/设置线程数为10xuycsv168 openmp$ OMP_NUM_THREADS=10root(aslave2 -# OMP NUM THREADS=1O/将线程数添加为环境变量xuycsv168 openmp$ export OMP_NUM_THREADSrootslave2 # export OMP NUM THREADS/运行修改 hellomp.c 程序,删除 omp_set_num_threads(8);语句rootslave2 get -fopenmp -0
8、2 -o hellomp.out hellomp.croatslave2 # ./hellomp.outthread 0 10 thread 4 thread 5 thread 6 thread 7 thread 8 thread 9 thread 3 thread 2 thread 1Hello World from OMP Number of threads is Hello World from OMP Hello World from OMP Hello World from OMP Hello World from OMIP Hello World from OMP Hello Wo
9、rld from OMIP Hello World from OMP Hello World from OMP Hello World from OMP如果不定义 OMP_NUM_THREADS ,默认会等于 CPU数量,在8核心的机器上,会打印出 8 行"Hello World".omp_set_num_threads(8);设置了子线程数为8,即是可以有8个子线程并行运行。#pragmaompparallel private (nthreads,tid) 为编译制导语句,每个线程都自己的nthreads和tid两个私有变量,线程对私有变量的修改不影响其它线程中的该变量。
10、程序的功能是对丁每个线程都打印出它的id号,对丁 id号为0的线程打印出线 程数目。2. Windows下OpenMP程序的编译和运行。用 VS2013编辑上述的 hellomp.c源程序, 注意在菜单"项目->属性->C/C+-点言"选中"OpenMP支持”,编译并运行程序。打开或者新建一个C+项目,依次选择Project ->届性-> 配置届性 (configuration property) -> C/C+ -> 语言(Language), 打开 OpenMP 支持;设置环境变量OMP_NUM_THREADS设置环境变量:
11、我的电脑-> 届性-> 高级-> 环境变量,新建一个OMP_NUM_THREADS变量,值设为2,即为程序执行的线程X) Projeetl (正在运行)=Microsoft Visual Studio立件0=)waii.Ej®(p)生成蹬raaxD)团ttMM)测试(5)体至 satcj分帝时IIM遮程二44-24 Projectl .e-xe-11 lonnp-cip-p -m x全与电anI- includeh>include -Cstdio. h>Sine Luele < s±dl lb.U5±n.£ xiaMe
12、spa.d'gi slid;:int nainOmt n±bxradr 1. ±id0Jhp_seads (8> .如菖增onp paralLl*! privet* (n.thr«idlf. tidJtxd. omp_s wt_,'tlirflaid_n.,ujn ()-printf CHello World f rora OKP thiead dXn". tid): i± (t.1 d athreadzs: - «jmp_ee«t_±iijuft_!thr#ad () 4 printfof
13、threads isnXh.K*«rad«):syf±.en. (Mpa.ufe");O 个EPS 立件图3 VS2013使用界面使用VS2013进行并行程序设计,图 3为VS2013使用界面,图4为运行结果截图。E:storevisualstudioProject1DebugProject1 .exeJello World from OHP threadMunber of threads is 8OMP thread 2OMP thread 5OMP thread 1OMP thread 3OMP thread 6OMP thread 7OMP thr
14、ead 4llo World from llo World from 4ello World f rom 4ello World from lello UorId from 4ello World from 4ello World from 请按任意键继续-图4程序运行结果截图虽然线程都是一起开始运行,但实验中每次运行的结果都不一样,这个是因为每次每个线程结束的先后可能不一样的。所以每次运行的结果都是随机的。这是串行程序和并行程序不同的地方:串行程序可以重新运行,结果和之前一样;并行程序却因为执行次序无法控制 可能导致每次的结果都不一样。实验2-2矩阵乘法的OpenMP实现及性能分析1. 实验
15、目的1) 用OpenMP实现最基本的数值算法“矩阵乘法”2) 掌握for编译制导语句3) 对并行程序进行简单的性能调优2. 实验内容1)运行并测试 OpenMP编写两个n阶的方阵a和b的相乘程序,结果存放在方阵 c中,其 中乘法用for编译制导语句实现并行化操作,并调节for编译制导中schedule的参数,使得执行时间最短。要求在window环境(不用虚拟机),在linux环境(用和不用虚拟机情况下) 测试程序的性能,并写出详细的分析报告。源代码如下:#include<stdio.h>#include<omp.h>#include<time.h>void
16、comput (float * A , float * B , float * C ) / 两个矩阵相乘传统方法 int x , y ;for ( y =0; y<4; y +)for ( x = 0; x<4; x+)C 4*y + x = A 4*y + 0* B 4* 0 + x + A 4* y+ 1* B 4* 1+x +A 4*y + 2* B4*2 + x + A 4*y + 3* B 4* 3 + x;int main ()double duration ;clock_t s , f ;int x =0;int y =0;int n =0;int k =0;floa
17、t A = 1,2,3, 4,5, 6, 7, 8,9, 10 , 11 , 12,13 , 14 , 15 , 16);float B =( 0.1f , 0.2f , 0.3f , 0.4f ,0.5f , 0.6f , 0.7f , 0.8f ,0.9f , 0.10f , 0.11f , 0.12f ,0.13f , 0.14f , 0.15f , 0.16f );floatC 16;s= clock();/#pragma omp parallel if(false)for ( n=0; n<1000000 ; n+)(comput ( A, B, C);)f =clock ()
18、;duration= ( double )( f - s )/ CLOCKS_PER_SEC ;printf ( "s-1,000,000 :%fn", duration );for ( y =0; y<4; y +)(for ( x = 0; x<4; x+) (printf("%f,",Cy*4+x);)printf("n");)printf ( "n=n");s = clock ();/parallel 2#pragma omp parallel forfor ( n=0; n<2; n+)
19、 /CPU 是核线程的(for ( k = 0; k<1000000 ; k+) /每个线程管个循环(comput(A, B, C);)f = clock ();duration = (double )( f - s )/ CLOCKS_PER_SEC ;printf ( "p2- 1,000,000:%fn", duration );/parallel 3s = clock ();#pragma omp parallel forfor ( n = 0; n<4; n+) /CPU 是核线程的(for ( k = 0; k<1000000 ; k+) /每
20、个线程管个循环comput)f = clock ();duration = (double )( f printf ( "p3- 1,000,000:%fn"/parallel 1s = clock ();#pragma omp parallel forfor ( n=0; n<1000000 ; n+) (comput ( A, B, C);)f = clock ();duration = (double )( f printf ( "p1- 1,000,000 :%fn"for ( y =0; y<4; y +)(A, B, C);s )
21、/ CLOCKS_PER_SEC ;,duration );s )/ CLOCKS_PER_SEC ;,duration );(for ( x = 0; x<4; x+)(printf("%f,",Cy*4+x);)printf("n");)return 0;程序运行结果:| 旬rootslave2:File Edit View Search lerminal Helproot(3slave2 *# qcc -fopenmp *02 -o test2.out test2.c rootslave2 *j# ./test?.outs-ijBoo.eeo
22、 03600&4,32G900 F 2 26GG00,2 63QGG9.3.,10.8 39999 f6.426800,7*67OGG0.8.920GC6,17.359999 f10.5800Olr12.719000f14.84QO0Gt23.6799994.740001,17.756000,20.759998, p2- 1.000,600:6,040600p3- itooGre0o:G,03eeeopl-4.32G6O0 r 2.260660 r 2.630006,3 .前如g , 19.839999,6.426690,7*67GOG0,8.92QCeO, 17.359999,10.
23、580001,12.719000,14.8400QGr 23,B79999f14.740001,17.750000f20.759998r rootslave2 -# 分析报告:由运行结果可以看出串行运算1000000次s-1的时间是0.030000,并行运算1000000次p-1的时间是0.040000,并行的时间比串行还要久一点,原因在于对计算机来说计算1000000万次的此矩阵计算是非常easy的事情,计算量很小,在这种情况下OMP多线程计算时,线程的创建和销毁的开销会变成主要的消耗时间。p-2是2线程运算,p-3是4线程运算,所以在同样运算1000000次的情况下,p-2的时间要比p-3
24、的时间多出来0.010000秒。2)请自己找一个需要大量计算但是程序不是很长的程序,实现OMP的多线程并行计算,要求写出并行算法,并分析并行的效果(注:必须核对串行和并行的计算结果,保证正确性)#include<iostream>#include<cmath>#include<time.h>using namespace std ;void qh (int i )float sum = 0;int j ;for(int j=1; j<=i;j +)sum+= sqrt(j);voidqh1(int i)/计算1到i平方根的和floatsum=0;int
25、 j;for(int j=1; j<=i;j +)sum += sqrt (j );cout << "sum=" << sum <<endl int main ()int i = 10;clock_t s, f ;s = clock ();double duration ;int x = 0;int y = 0;int n = 0;int k0;/#pragma omp parallel if(false)for ( n = 0; n <1000000 ; n +)(qh (i );qh1 (i );f = clock ();
26、duration= ( double )( f - s ) / CLOCKS_PER_SECprintf("s-1,000,000 :%fn", duration );printf("n=n");s = clock ();/parallel 2#pragma omp parallel forfor(n = 0;n <2; n +) /CPU是核线程的(for ( k = (=0; k <500000 ; k+) /每个线程管个循环qh(i);qh1(i );f=clock ();duration=(double )( f - s )/ CLO
27、CKS_PER_SECprintf("p2-500,000:%fn", duration );/parallel 3s = clock ();/CPU是核线程的;k +) /每个线程管个循环s ) / CLOCKS_PER_SEC#pragma omp parallel forfor ( n = 0; n <4; n +)(for (k = 0; k <250000(qh(i );qh1 (i );f = clock ();duration= ( double )( f -printf("p3- 250,000:%fn"duration );/parallel 4 s = clock ();#pragma omp parallel forfor ( n = 0; n <4; n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老公坐牢协议书
- 炒货机闲置转让协议书
- 租金分配协议书
- 财产质押协议书
- 英皇文化协议书
- 股权待持协议书
- 北京市劳动合同协议书
- 退伙退股协议书
- 学校招厨师合同协议书
- 均质机出售转让协议书
- 师带徒培训目标计划措施
- 人工智能助力企业创新发展
- 派出所民警培训课件
- 期中词性转换专练 2023-2024学年牛津上海版(试用本)八年级英语下册
- 室外埋地聚乙烯(PE)给水管道工程技术规程
- 医院培训课件:《ERAS在胃肠外科的应用》
- (新版)滑雪指导员技能理论考试复习题库(含答案)
- 脑动脉供血不足的护理查房
- 民法典介绍:解读中国民事法律体系的核心
- 解决多模穴流动不平衡问题之流道翻转技术
- 数据挖掘(第2版)全套教学课件
评论
0/150
提交评论