收藏 分销(赏)

并行计算期末试题-理工.doc

上传人:a199****6536 文档编号:1283340 上传时间:2024-04-20 格式:DOC 页数:7 大小:230.51KB 下载积分:6 金币
下载 相关 举报
并行计算期末试题-理工.doc_第1页
第1页 / 共7页
并行计算期末试题-理工.doc_第2页
第2页 / 共7页


点击查看更多>>
资源描述
并行计算期末试题 适用专业:理工类 考试说明: 1、 将试卷答案以学号命名为word文件,如115042101.doc,上传到ftp://172.17.124.203/upload。 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_threads omp_get_num_threads omp_get_thread_num OMP_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、Parallel Task并行任务 3、Serial Execution 串行执行 4、Parallel Execution 并行执行 5、Pipelining 流水线技术 6、Shared Memory共享内存 7、Symmetric Multi-Processor (SMP) 对称多处理器 8、Distributed Memory分布式存储 9、Communications 通信 10、Synchronization 同步 11、Granularity 粒度 12、Observed Speedup 测量加速比 13、Parallel Overhead并行开销 14、Massively Parallel大规模并行 15、Embarrassingly Parallel易并行计算 16、Scalability 可扩展性 17、Multi-core Processors 多核处理器 18、Cluster Computing集群计算 19、Supercomputing / High Performance Computing高性能计算 20、Cloud computing 云计算 三、补充程序(每小题10分,共30分) 1、下列OpenMP程序要求运行时获取每个线程的id号并输出,主线程获取总的线程数并输出。请补充适当的OpenMP编译制导指令和函数调用,要求运行时启动4个线程。 #include <stdio.h> #include <omp.h> int main (int argc,char *argv[]) { int nthreads, tid; /* Fork a team of threads with each thread having a private tid variable */ #pragma omp parallel private(tid) { /* Obtain and print thread id */ tid = omp_get_thread_num(); printf("Hello World from thread = %d\n", tid); /* Only master thread does this */ if (tid == 0) { nthreads = omp_get_num_threads(); printf("Number of threads = %d\n", nthreads); } } /* All threads join master thread and terminate */ } 2、下列OpenMP程序完成对数组a和b相应元素分别求和、求积的任务,请用OpenMP任务(功能)划分的编译制导指令进行并行化。 #include <omp.h> #define N 1000 int main (int argc,char *argv[]) { int i; float a[N], b[N], c[N], d[N]; /* Some initializations */ for (i=0; i < N; i++) { a[i] = i * 1.5; b[i] = i + 22.35; } #pragma omp parallel shared(a,b,c,d) private(i) { #pragma omp sections nowait { #pragma omp section for (i=0; i < N; i++) c[i] = a[i] + b[i]; #pragma omp section for (i=0; i < N; i++) d[i] = a[i] * b[i]; } /* end of sections */ } /* end of parallel section */ } 3、下列MPI程序运行时要求启动4个进程,每个进程要求获取自己的进程号、进程运行所在的机器名称、启动的进程个数并输出。请补充适当的MPI函数。 #include "mpi.h" #include <stdio.h> #include <stdlib.h> #define MASTER 0 int main (int argc, char *argv[]) { int numtasks, taskid, len; char hostname[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 ("Hello from task %d on %s!\n", taskid, hostname); if (taskid == MASTER) printf("MASTER: Number of MPI tasks is: %d\n",numtasks); MPI_Finalize(); } 四、并行程序设计(第1题10分,第2题20分,共30分) 1、 编程求Sum=1+2+…N。(要求使用openmp) 2、 #include <stdio.h> #include "mpi.h" #define N 1000 int main(int argc,char *argv[]) { int sum,i,total; int numprocs, 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(); return 0; } 2、请分别用OpenMP和MPI并行编程的方法求PI的近似值。 #include <stdio.h> #include <omp.h> static long num_steps = 100000; double step; #define NUM_THREADS 2 int main () { int i; double x, pi, sum[NUM_THREADS]; step = 1.0/(double) num_steps; omp_set_num_threads(NUM_THREADS); // #pragma omp parallel { double x; int id; id = omp_get_thread_num(); for (i=id, sum[id]=0.0;i< num_steps; i=i+NUM_THREADS){// x = (i+0.5)*step; sum[id] += 1.0/(1.0+x*x); } } for(i=0, pi=0.0;i<NUM_THREADS;i++) { pi += sum[i] * step; } printf(“pi=%f”,pi); }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服