多核程序设计最重要的.docx
- 文档编号:23148919
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:20
- 大小:37.14KB
多核程序设计最重要的.docx
《多核程序设计最重要的.docx》由会员分享,可在线阅读,更多相关《多核程序设计最重要的.docx(20页珍藏版)》请在冰豆网上搜索。
多核程序设计最重要的
一、多项选择
1.计算机的硬件工艺发展的顺序是:
(A)
A.电子管数字计算机、晶体管数字计算机、集成电路数字计算机、大规模集成电路数字计算机。
B.晶体管数字计算机、电子管数字计算机、集成电路数字计算机、大规模集成电路数字计算机。
C.电子管数字计算机、集成电路数字计算机、大规模集成电路数字计算机、晶体管数字计算机。
D.电子管数字计算机、集成电路数字计算机、晶体管数字计算机、大规模集成电路数字计算机
2.下面关于Intel8086芯片与8088芯片的描述,不正确的是:
(D)
A.8086是第一个16位的微处理器。
B.8088是第一个16位的微处理器。
C.8086每周期能传送或接受16位整数。
D.8088每周期能传送或接受16位整数。
3.针对内存的速度瓶颈,英特尔为80386设计了--------来解决这个速度瓶颈:
(B)
A.虚拟86.
B.高速缓存(Cache).
C.浮点运算单元。
D.多媒体扩展指令集。
4.对一个具体的问题做性能优化时,可以同时在这多个层次上考虑可能的优化手段,一般来说:
(AB)
A.在越高的层次上进行优化,可能获得的效益越高。
B.在越高的层次上进行优化工作则相对越容易实现。
C.在越高的层次上进行优化,可能获得的效益越低。
D.在越低的层次上进行优化工作则相对越难于实现。
5.VTune性能分析器中的取样功能有哪几种方式?
(AC)
A.基于时间取样
B.随机取样。
C.基于事件取样。
D.线性取样。
6.Intel调优助手能够给我们自动推荐代码改进方法,主要有以下哪些方面?
(BCD)
A.算法自动改进。
B.处理器瓶颈以及改进。
C.取样向导增强。
D.超线程。
7.使用-O3编译选项所得的程序,执行效率比使用-O2编译选项所得的程序--:
(D)
A.高
B.低
C.一样
D.不一定
8.对于函数调用的边际效应,以下表述不正确的是:
(B)
A.只要函数在调用的过程中改变了某些全局变量的值,我们就称函数调用中有边际效应。
B.存在边际效应的函数调用,其调用次数的不同会对整个程序的行为产生不同的影响。
C.为了避免函数调用的边际效应,就必须尽量避免使用全局变量,尽量使用局部变量。
D.编译器无法检测出函数调用中是否会产生边际效应,。
。
。
移出循环体外。
9.对于一个优化的编译器,以下表述不正确的是:
(D)
A.编译器负责其中的寄存器分配的优化。
B.编译器负责其中的代码选择及有限重组的优化。
C.编译器进行一些局部范围内的优化。
D.优化的编译器能够改进算法的计算复杂度。
10.以下表述不正确的是:
(D)
A.在传统的操作系统中,CPU调度和分派的基本单位是进程。
B.在引入线程的操作系统中,则把线程作为CPU调度和分派的基本单位。
C.同一进程中线程的切换不会引起进程切换,从而避免了昂贵的系统调用。
D.由一个进程中的线程切换到另一进程中的线程时,也不会引起进程切换。
11.以下表述不正确的是:
(AC)
A.在引入线程的操作系统中,进程之间可以并发执行。
B.在引入线程的操作系统中,一个进程中的多个线程之间不可以并发执行。
C.进程是拥有系统资源的一个独立单位,它可以拥有自己的资源。
D.线程是拥有系统资源的一个独立单位,它可以拥有自己的资源
12.以下表述不正确的是:
(A)
A.用户级线程在用户层通过线程库来实现。
对它的创建、撤销和切换要利用喜用的调用。
B.核心级线程由操作系统直接支持,即无论是在用户进程中的线程,还是系统进程中的线程,它们的创建、撤销和切换都由核心实现。
C.硬件线程就是线程在硬件执行资源上的表现形式。
D.用户级线程通过操作系统被作为核心级线程实现,再通过硬件相应的接口作为硬件线程来执行。
13.对于操作系统中的线程,以下表述不正确的是:
(D)
A.操作系统中存在两种类型的线程,I/O阻塞线程和计算非阻塞线程。
B.IO阻塞线程主要用于有交互式的程序中,它在大多数时间内都在等待外部事件。
C.计算非阻塞线程在大多数时间内都是被调度函数调用到的,应该和处理器资源相匹配。
D.在处理IO阻塞线程的时候要依次地等待每个请求完成才继续处理下一个请求。
14.I/O阻塞线程----引起时间片切换开销,计算非阻塞线程----引起时间片切换的开销。
(A)
A.不会,会。
B.会,不会。
C.都会。
D.都不会。
15.以下表述错误的是:
(D)
A.OpenMP可以根据目标系统尽量使用最优数量的线程个数。
B.使用线程池可以避免为每个线程创建进程的开销。
C,线程池通常具有最大线程数限制,如果所有线程都繁忙,而额外的任务将放入队列中,直到有线程可用时才能够得到处理。
D.对于有优先级的线程,也可以使用线程池。
16.调用exit会使----进程终止;调用pthread_exit会使----进程终止。
(B)
A.整个,整个。
B.整个,调用。
C.调用,调用。
D.整个,整个。
17.如果多个线程同时执行函数的多个活动请求面不会相互干扰,那么这个函数是----,如果会相互干扰,那么这个函数是----。
(A)
A.线程安全,非线程安全。
B.都是线程安全。
C,都是非线程安全。
D.非线程安全,线程安全。
18.用户级线程开销很----,内核线程开销很----。
(C)
A.高,高。
B.高,低。
C.低,高。
D.低,低。
19.下列说法哪个是不正确的:
(A)
A.应用程序可以在内存中找到内核对象的数据结构并直接改变它们的内容。
B.内核对象都是通过调用函数来创建的。
C.内核对象的数据结构只能被内核程序访问。
D.Windows提供了一组函数,以使用定义的很好的方法来对内核对象的数据结构进行操作。
20.下面哪个说法是正确的:
(AB)
A.每个进程被初始化时,系统为它分配一个句柄表,用于保存该进程使用的内核对象信息。
B.相同的句柄值在不同的进程中可能标识不同的内核对象。
C.一个进程终止执行,它使用的内核对象也会被撤销。
D.内核对象是由进程拥有的。
21.下列说法哪个是不正确的:
(C)
A.进程是线程的容器。
B.单个进程可以包含多个线程。
C.进程中不一定有线程。
D.Win32中有专门的创建进程的API:
CreateProcess
22.OpenMP标准诞生于----年:
(B)
A.1996
B.1997
C.1998
D.1999
23.以下表述不正确的是:
(C)
A.OpenMP是一种面向共享内存以及分布式共享内存的多处理器多线程并行编程语言。
B.OpenMP是一种能够被用于显示指导多线程、共享内存并行的应用程序编程接口(API)。
C.OpenMP的规范由ANSI发起,由一组主要的计算机硬件和软件厂商共同制定并认可。
D。
OpenMP能够支持多种平台,包括大多数的类UNIX系统以及WindowsNT系统。
24.在OpenMP的并行编程模型中,所有的处理器都连接到----的内存单元上,处理器在访问内存的时候使用的是----的内存地址空间。
(D)
A.不同,相同。
B.不同,不同。
C.一个共享,不同。
D.一个共享,相同。
25.一个指令中的操作数地址,可以有----个。
(ABCD)
A.0B.1C.2D.3
二、简答
1.什么是并行计算机及其组成部分?
答:
并行计算机是由一组处理单元组成的,这组处理单元通过相互之间的通信与协作,以更快的速度共同完成一项大规模的计算任务。
组成部分:
计算节点和节点间的通信与协作机制。
2.常见的调度策略有哪些?
答:
先到先服务、最短作业调度、优先级调度、轮转法调度、多级队列调度。
3.Jackson优化定律是什么?
答:
定律1:
不要进行优化。
定律2:
(仅针对专家)“除非你已经有了一个相当清晰可靠的非优化版本的实现,否则你不要试图对程序进行优化”。
4.一个好的测试数据集必须要具备的特点是什么?
答:
(1)可衡量性
(2)可重复性(3)静态的(4)有代表性
5.Amdahl定律的内容及含义是什么?
答:
内容:
对于整个程序优化后可能达到的加速比取决于程序可优化部分占程序执行时间总体的比例。
含义:
即使对程序的可优化部分进行最高限度的性能改进,其对程序整体性能的改进仍然受限于可优化部分占程序总体的比例,而并不随所用优化手段的提高而提高。
6.多核处理器的性能调优方法受哪些因素限制?
答:
(1)编译器永远不能改变程序在任何情况下的行为。
(2)编译器很难进行过时间、全局性的优化。
(3)编译时间必须尽可能的短。
7.体系结构无关的性能调优方法?
答:
(1)消除循环不变量
(2)减少过程调用(3)消除不必要的内存存取
8.Intel多核处理器微体系结构中对代码优化的支持都有哪些?
答:
(1)取指和预解码的优化
(2)指令队列的优化(3)解码的优化
(4)执行核心的优化(5)内存的优化
9.用户级线程、核心线程和硬件线程的区别有哪些?
答:
(1)用户级线程:
在用户层通过线程库来实现。
对它的创建、撤销和切换都不利用系统的调用。
(2)核心级线程:
由操作系统直接支持,即无论是在用户进程中的线程,还是系统进程中的线程,它们的创建、撤销和切换都由核心实现。
(3)硬件线程:
就是线程在硬件执行资源上的表现形式。
10.线程的生命周期有哪些?
画图并对每个状态进行解释
答:
(1)就绪状态:
该线程运行所需的一切条件都得到满足,已获得必要的资源和设备。
但因处理器资源个数少于线程个数,所以该线程不能运行,而必须位于队列中等待分配处理器资源。
(2)运行状态:
线程在处理器上处于运行的状态,该线程已获得必要的资源和设备,也获得了CPU,用户程序正在处理器行运行。
(3)等待状态:
线程等待某种事件完成而暂时不能运行的状态,处于该状态的线程不能参加竞争处理器资源,此时,即使系统分配给该线程处理器也不能运行。
11.多线程程序设计中的常见问题及解决方法是什么?
答:
常见问题:
(1)由于线程共享同一进程的内存空间,多个线程可能需要同时访问同一个数据。
(2)对共享数据的并发访问可能导致数据的不一致性。
(3)如果没有正确的保护措施,对共享数据的访问会造成数据的不一致和错误。
(4)竞争条件:
若干进程并发地访问并且操纵共享数据的情况;共享数据的值取决于那个进程最后完成;防止竞争条件,并发进程必须被同步。
解决方法:
依据实际情况,使用尽可能少的线程,这样可以最大限度地减少操作系统资源的使用,并可提高性能。
12.什么是优先级倒置?
有哪些解决方法?
答:
由于多个线程共享资源,在采用基于优先级调度策略时会出现较低优先级的线程先于高优先级线程执行的情况,即优先级倒置问题。
解决方法:
(1)优先级继承
(2)优先级顶置
13.非阻塞算法的特征是什么?
答:
(1)无阻塞。
只要没有竞争,线程就可以持续执行。
(2)无锁。
系统整体持续执行。
(3)无等待。
每个线程都可以持续执行,即使遇到竞争也是如此。
只有极少数的非阻塞算法实现了这一点。
14.什么是伪共享?
解决伪共享的方法有哪些?
答:
伪共享:
正在进行缓存代码行更新的时候,禁止访问该代码行中的元素,这种情况称为伪共享。
解决方法:
(1)尽可能多地使用专用数据。
(2)利用编译器的优化功能来消除内存加载和存储。
15.进程由哪几部分组成?
答:
(1)操作系统用来管理进程的内核对象。
(2)地址空间。
16.线程由哪几部分组成?
答:
(1)线程的内核对象。
(2)线程堆栈。
17.创建想成函数的几点要求有哪些?
答:
(1)主线程的进入点函数的名字必须是main,wmain,WinMain或wWinMain,而其他线程函数可以使用其他的任何名字。
(2)线程函数必须返回一个值,它将成为该线程的退出代码。
(3)线程函数应该尽可能使用函数参数和局部变量。
18.创建线程API原型并解释各个参数的含义。
HANDLECreatThread(
PSECURITY_ATTRIBUTESpsa,
DWORDcbStack,
PTHREAD_START_ROUTINEpfnStartAddr,
PVOIDpvParam,
DWORDfdwCreate,
PDWORDfdwThreadID);
(1)psa。
psa参数是指向SECURITY_ATTRIBUTES结构的指针。
(2)cbStack。
cbStack参数用于设定线程可以将多少地址空间用于它自己的堆栈。
(3)pfdStartAddr和pvParam。
pfdStartAddr参数用于指明想要新线程执行的线程函数的地址。
pvParam既可以是一个数字值,也可以使指向包含其他信息的一个数据结构的指针。
(4)fdwCreat。
fdwCreat参数可以设定用于控制创建线程的其他标志。
(5)pdwThreadID。
pdwThreadID必须是DWORD的一个有效地址,CreateThread使用这个地址来存放系统分配给新线程的ID。
19.线程池的作用是什么?
答:
管理线程,减轻程序设计的负担,是Windows有机会协助进行线程的管理,从而是用于程序能够达到最佳的性能。
20.CPU核心数据共享与同步的通信机制是什么?
答:
(1)总线共享Cache结构:
每个CPU内核拥有共享的二级或三级Cache,用于保存比较常用的数据,并通过连接核心的总线进行通信。
(2)基于片上互连的结构:
每个CPU核心具有独立的处理单元和Cache,各个CPU核心通过交叉开关或片上网络等方式连接在一起。
21.并行和并发的区别?
答:
如果某个系统支持两个或多个动作同时存在,那么这个系统就是一个并发系统。
如果某个系统支持两个或多个动作同时执行,那么这个系统就是一个并行系统。
22.并行计算必须具备的条件是什么/
答:
(1)并行机
(2)应用问题必须具有并行度(3)并行编程
23.并行计算技术的主要目的和目标是什么?
答:
目的:
(1)加速求解问题的速度
(2)提高求解问题的规模
目标:
在并行机上,解决具有重大挑战性计算任务的科学、工程及商业计算问题,满足不断增长的应用问题对速度和内存资源的需求。
24.并行计算的主要研究内容是什么?
答:
(1)并行机的高性能特征抽取
(2)并行计算设计与分析
(3)并行实现技术(4)并行应用
25.并行计算的时间有哪些?
答:
(1)计算CPU时间
(2)通信CPU时间
(3)同步开销时间(4)进程空闲时间
26.并行程序性能优化的方法有哪些?
答:
(1)减少通信量、提高通信粒度
(2)全局通信尽量利用高效集合通信算法
(3)挖掘算法的并行度,减少CPU空闲等待
(4)负载平衡
(5)通信、计算的重叠
(6)通过引入重复计算来减少通信,即以计算换通信
27.顺序程序的特性有哪些?
答:
(1)顺序性
(2)封闭性(3)可再现性
28.并发程序的特性有哪些?
答:
(1)交叉性
(2)非封闭性(3)不可再现性
29.解决死锁的方法?
答:
进程在运行前一次性地向系统申请它所需要的全部资源,系统能满足,则一次性地将所请求的全部资源分配给申请进程;若系统当前不能满足进程的全部资源请求,则就不分配资源,此进程暂不投入运行。
30.parallel与parallelfor的区别是什么?
答:
(1)并行区域采用了复制执行方式,将代码在所有的线程内各执行一次;
(2)循环并行化则是采用工作非配执行方式,将循环需做的所有工作量,按一定的方式分配给各个执行线程,全部线程执行工作的总合等于原先串行执行所完成的工作量。
31.OpenMP任务调度方法及特点是什么?
答:
(1)静态调度static:
默认调度方式
(2)动态调度dynamic:
动态地将迭代分配到各个线程
(3)guided调度:
一种采用指导性的启发式自调度方法。
开始时每个线程会分配到较大的迭代快,之后分配到的迭代快会逐渐递减。
32.OpenMP支持的线程同步机制都是什么?
答:
(1)互斥锁的机制
(2)事件通知机制
33影响OpenMP性能的因素有哪些?
答:
(1)程序并行部分的比率
(2)OpenMP本身的开销
(3)负载均衡(4)局部性(5)线程同步带来的开销
34.在MPICH2中的环境变量如何配置?
答:
(1)选择“工具”——>“选项”,将MPICH2\include加入到头文件目录中
(2)将MPICH2\lib加入到库文件目录中
(3)在项目属性的“配置属性”—>“常规”项中的“字符集”设置为“未设置”
(4)在项目属性的“配置属性”——>“连接器”——>“输入”项中的“附加依赖项”加入mpi.lib
35.解释MPI.
v答:
消息传递接口(MessagePassingInterface,简称MPI)是一种编程接口标准,而不是一种具体的编程语言。
MPI标准定义了一组有可移植性的编程接口。
典型MPI实现:
MPICH、IntelMPI。
MPI程序是基于消息传递的并行程序
36.MPI程序的四个函数的作用是什么?
答:
(1)MPI_Init初始化MPI执行环境,建立多个MPI进程之间的联系,为后续通信装作准备。
(2)MPI_Finalize则是结束MPI执行环境。
(3)MPI_Comm_size用来标识各个MPI进程,其中参数MPI_Comm类型的通信域表示参与计算的MPI进程组,&rank,返回调用进程在comm中的标识号
(4)MPI_Comm_size用来标识相应进程组中有多少个进程,其中参数MPI_Comm类型的通信域,标尺参与计算的MPI进程组;整形指针,返回相应进程组中的进程数。
37.MPI的两个核心函数是什么?
答:
(1)intMPI_SEND(buf,count,datatype,dest,tag,comm)
(2)intMPI_RECV(buf,count,datatype,source,tag,comm.,status)
38.消息管理7要素是什么?
答:
(1)发送或者接受缓冲区buf;
(2)数据数量count(3)数据类型datatype
(4)目标进程或者源进程destination/source;(5)消息标签tag
(6)通信域comm(7)消息状态status,只在接受的幻术中出现
39.MPI群集通信函数的作用有哪些?
答:
(1)同步:
在操作中,通信子comm中的所有进程相互同步,即它们相互等待,直到所有进程都执行了他们各自的MPI_Barrier函数,然后再各自接着开始执行后续的代码。
(2)广播:
从一个root进程向组内所有其他的进程发送一条消息。
(3)聚集:
聚集函数MPI_Gather是一个对一个的通信函数。
(4)播撒:
MPI_Scatter是一对多的传递消息。
三.阅读程序
1.intgval=8;
voidfuncb(int*x,int*y,intz)
{
staticintsv;
intu;
u=(*y)*gval;
*x=u+z;
}
voidfuncal(int*a,intn)
{
inti;
intcc=9;
#pragamaompparallelfor
for(i=0;i inttemp=cc; }funcb(&a[i],&temp,i); } 结果: 全局变量gval是共享的 循环控制变量i是线程私有的 cc在并行化语句之外声明,是共享的 temp是循环并行化语句内部的自动变量,是线程私有的 指针变量a、n是共享的 静态变量sv是共享的,在内存空间中只有一份,这种使用方式会引起数据冲突 变量u被并行线程调用,是线程私有的 参数x是私有的指针变量,*x指向的内存空间是共享的,实际参数是funca的数组a 参数y是私有的指针变量,指向的*y也是私有的,实际内存空间是temp占用的空间 参数z是线程私有的 2.intval=8; #paragmaompparallelforfirstpruvate(val)lastprivate(val) for(inti=0;i<2;i++){ printf(“i=%dval=%d\n”,i,val); if(i==1) val=10000; printf(“i=%dval=%d\n”,i,val) } intcount=0; #paragmaompthreadprivate(counter) voidinc_counter(){ counter++; }结果: counter=10000 3.int_tmain(intargc,TCHAR*argv[]){ #pragmaompparallel for(inti=0;i<10000;i++) inc_counter(); printf(“counter=%d\n”,counter); }结果: counter=30627 4.intglobal=0; #pragmaompthreadprivate(global) int_tmain(intargc,TCHAR*argv[]){ global=1000; #pargmaompparallelcopyin(global){ printf(“global=%d\n”,blobal); global=omp_get_thread_num(); } printf(“global=%d\n”,global); printf(“parallelagain\n”); #paragmaompparallel printf(“global=%d\n”,global); } 结果: global=1000 global=1000 global=1000 global=1000 global=0 parallelagain global=0 global=2 global=3 global=1 5.#include"stdafx.h" #include"windows.h" #include"omp.h" intmain(intargc,char*argv[]){ #pragmaompparallelsections{ #pragmaompsection printf("section1thread=%d\n",omp_get_thread_num()); #pragmaompsection printf("section2thread=%d\n",omp_get_thread_num()); #pragmaompsection printf("sectino3thread=%d\n",omp_get_thread_num()); } return(0); } 结果: section1thread=0 section2thread=1 section3thread=0 四.编程 1.基于事件解决线程同步 #include"stdafx.h" #include #include #include #include<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多核 程序设计 最重要