您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 并行计算期末试题-理工
并行计算期末试题适用专业:理工类考试说明:1、将试卷答案以学号命名为word文件,如115042101.doc,上传到。2、第一、二大题,直接将答案写在题后;第三、四题要求将程序补充、编写完整并将运行结果截图插在题目后面。一、简述题(每小题4分,共20分)。1、简述openmp编译制导指令master,single,critical,atomic的功能。1.master制导语句指定代码段只能被主线程执行2.single编译制导语句指定内部代码只能由线程组中的一个线程执行。线程组中没有执行single语句的线程会一直等待代码块的结束,使用nowait子句除外。3.critical制导语句表明域中的代码一次只能由一个线程执行,其他线程被阻塞在临界区4.atomic制导语句指定特定的存储单元将被原子更新2、简述openmp编译制导子句shared,private的功能?简述openmp编译制导指令threadprivate的功能。1.private子句表示它列出的变量对于每个线程是局部的。2.shared子句表示它所列出的变量被线程组中所有的线程共享,所有线程都能对它进行读写访问。3.threadprivate语句使一个全局文件作用域的变量在并行域内变成每个线程私有,每个线程对该变量复制一份私有拷贝并在多个并行域中保持。3、简述openmp函数omp_set_num_threads,omp_get_num_threads,omp_get_thread_num的功能;环境变量OMP_NUM_THREADS的功能。omp_set_num_threadsomp_get_num_threadsomp_get_thread_numOMP_NUM_THREADS:定义执行中最大的线程数4、简述MPI点对点通信与MPI集合通信的区别。1)在通信子中的所有进程都必须调用相同的集合通信函数。2)每个进程传递给MPI集合通信函数的参数必须是“相容的”。3)参数output_data_p只用在dest_process上。然而,所有进程仍需要传递一个与output_data_p相对应的实际参数,即使它的值只是NULL。4)点对点通信函数是通过标签和通信子来匹配的。集合通信函数不使用标签,只通过通信子和调用的顺序来进行匹配。5、简述并行计算机的三种内存架构。答:1.共享内存2.分布式内存3.混合型分布式共享内存二、与并行计算相关的名词术语翻译(英译汉,每小题1分,共20分)。1、Task任务2、ParallelTask并行任务3、SerialExecution串行执行4、ParallelExecution并行执行5、Pipelining流水线技术6、SharedMemory共享内存7、SymmetricMulti-Processor(SMP)对称多处理器8、DistributedMemory分布式存储9、Communications通信10、Synchronization同步11、Granularity粒度12、ObservedSpeedup测量加速比13、ParallelOverhead并行开销14、MassivelyParallel大规模并行15、EmbarrassinglyParallel易并行计算16、Scalability可扩展性17、Multi-coreProcessors多核处理器18、ClusterComputing集群计算19、Supercomputing/HighPerformanceComputing高性能计算20、Cloudcomputing云计算三、补充程序(每小题10分,共30分)1、下列OpenMP程序要求运行时获取每个线程的id号并输出,主线程获取总的线程数并输出。请补充适当的OpenMP编译制导指令和函数调用,要求运行时启动4个线程。#includestdio.h#includeomp.hintmain(intargc,char*argv[]){intnthreads,tid;/*Forkateamofthreadswitheachthreadhavingaprivatetidvariable*/#pragmaompparallelprivate(tid){/*Obtainandprintthreadid*/tid=omp_get_thread_num();printf(HelloWorldfromthread=%d\n,tid);/*Onlymasterthreaddoesthis*/if(tid==0){nthreads=omp_get_num_threads();printf(Numberofthreads=%d\n,nthreads);}}/*Allthreadsjoinmasterthreadandterminate*/}2、下列OpenMP程序完成对数组a和b相应元素分别求和、求积的任务,请用OpenMP任务(功能)划分的编译制导指令进行并行化。#includeomp.h#defineN1000intmain(intargc,char*argv[]){inti;floata[N],b[N],c[N],d[N];/*Someinitializations*/for(i=0;iN;i++){a[i]=i*1.5;b[i]=i+22.35;}#pragmaompparallelshared(a,b,c,d)private(i){#pragmaompsectionsnowait{#pragmaompsectionfor(i=0;iN;i++)c[i]=a[i]+b[i];#pragmaompsectionfor(i=0;iN;i++)d[i]=a[i]*b[i];}/*endofsections*/}/*endofparallelsection*/}3、下列MPI程序运行时要求启动4个进程,每个进程要求获取自己的进程号、进程运行所在的机器名称、启动的进程个数并输出。请补充适当的MPI函数。#includempi.h#includestdio.h#includestdlib.h#defineMASTER0intmain(intargc,char*argv[]){intnumtasks,taskid,len;charhostname[MPI_MAX_PROCESSOR_NAME];MPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD,&numtasks);MPI_Comm_rank(MPI_COMM_WORLD,&taskid);MPI_Get_processor_name(hostname,&len);printf(Hellofromtask%don%s!\n,taskid,hostname);if(taskid==MASTER)printf(MASTER:NumberofMPItasksis:%d\n,numtasks);MPI_Finalize();}四、并行程序设计(第1题10分,第2题20分,共30分)1、编程求Sum=1+2+…N。(要求使用openmp)2、#includestdio.h#includempi.h#defineN1000intmain(intargc,char*argv[]){intsum,i,total;intnumprocs,myid;MPI_Init(&argc,&argv);MPI_Comm_rank(MPI_COMM_WORLD,&myid);MPI_Comm_size(MPI_COMM_WORLD,&numprocs);for(i=myid+1;i=N;i+=numprocs)sum+=i;MPI_Reduce(&sum,&total,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD);if(myid==0)printf(sum=%d\n,total);MPI_Finalize();return0;}2、请分别用OpenMP和MPI并行编程的方法求PI的近似值。#includestdio.h#includeomp.hstaticlongnum_steps=100000;doublestep;#defineNUM_THREADS2intmain(){inti;doublex,pi,sum[NUM_THREADS];step=1.0/(double)num_steps;omp_set_num_threads(NUM_THREADS);//#pragmaompparallel{doublex;intid;id=omp_get_thread_num();for(i=id,sum[id]=0.0;inum_steps;i=i+NUM_THREADS){//x=(i+0.5)*step;sum[id]+=1.0/(1.0+x*x);}}for(i=0,pi=0.0;iNUM_THREADS;i++){pi+=sum[i]*step;}printf(“pi=%f”,pi);}
本文标题:并行计算期末试题-理工
链接地址:https://www.777doc.com/doc-2493237 .html