并行计算期末试题-理工

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

并行计算期末试题

适用专业:理工类

考试说明:

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

#include

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

#define N 1000

int main (int argc,char *argv[])

{

int i;

float a[N], b[N], c[N], d[N];

/* Some initializations */

相关文档
最新文档