-
选择 10分
-
判断 15分
-
简答 25分
-
在一个Cache存储系统中,主存储器的访问周期、存储容量和单位价格分别为60ns、64MB和10元/MB,Cache的访问周期、存储容量和单位价格分别为10ns、512KB和100元/MB,Cache的命中率为0.98.
(1) 计算这个Cache存储系统的等效访问周期、存储容量和单位价格。
(2) 计算这个Cache存储系统的访问效率。
(1)Cache存储系统的等效访问周期: T=Tc H + Tm(1-H) =10ns×0.98 + 60ns×(1-0.98) =11ns 等效存储容量: S=64MB 等效单位价格: C=(Cc Sc + Cm Sm)/(Sc + Sm) =(100×0.5+10×64)/(0.5+64) =10.7(元/MB) (2)Cache存储系统的访问效率: e=Tc/T =10/11 =0.91
-
请举例说明SIMD技术在CPU、GPU中的应用,并解释应用的异同点。
CPU中应用在SSE/AVX/MMX处理多组相同类型数据计算;GPU中应用运用大量流处理器,能同时处理大量相同类型数据计算。
相同:基于单指令流,同时处理多个相同类型数据;
区别:CPU中通过增加字的宽度增加处理能力;GPU通过增加流处理器增加处理能力。
-
-
应用 10分:非线性流水线调度 互连网络 cache
- 非线性流水线调度
- 互连网络
-
编程 15分: MPI+OMP
-
某个文件中存放10万个整数(二进制格式),对每个数要进行某种处理(独立,需要1s时间),请用MPI和OpenMP编写一个混合并行程序,以利用多台多核计算机的算力,并写出执行命令。
#include<stdio.h> #include<stdlib.h> #include<mpi.h> #include<omp.h> #define TOTAL 100000 //总数据量 #define BATCH_SIZE 1024 //每次读取的数据量 extern void float transform(int seed); //题目已知 void parallelProcess(int rank, int start, int total); int main(int argc, char *argc[]){ int total, start, rank, size; MPI_init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); printf("I am Process %d of %d\n",rank,size); total = TOTAL / size; start = rank * total; if(rank == size-1)//最后一个进程负责的数据个数 total += TOTAL % size; parallelProcess(rank, start, total); //每个进程负责处理一部分的数据 printf("Process %d has finished!\n", rank); MPI_Finalize(); return 0; } void parallelProcess(int rank, int start, int total){ FILE *fp; int i; int buffer[BATCH_SIZE]; //待处理的数据,分批读入 fp = fopen("data.bin","rb"); if(fp==NULL){ printf("Failed to open the file from Process %d\n", rank); return; } if(fseek(fp, start*sizeof(int), SEEK_SET) < 0){ printf("Failed to fseek from Process %d\n", rank); fclose(fp); return; } while(total > BATCH_SIZE){ fread(&buffer, sizeof(int), BATCH_SIZE, fp); total -= BATCH_SIZE; #pragma omp parallel for for(i=0;i<BATCH_SIZE;i++) transform(buffer[i]); } if(total > 0){ fread(&buffer, sizeof(int), total, fp); #pragma omp parallel for for(i=0;i<total;i++) transform(buffer[i]); } fclose(fp); return; }
把全部计算任务分成4部分,分别分配给4台机器,每台机器用8个线程来处理自己的任务,源文件test.c,执行如下命令:
OMP_NUM_THREADS=8 export OPM_NUM_THREADS mpicc -fopenmp -o test test.c # 混合编译命令 mpirun -machinefile hosts -np 4 test #其中hosts里面包含4台机器的主机名
-
-
综合 25分:多级存储结构 并行等级 SIMD技术
-
多级存储结构
-
并行等级
- 从开发程序的指令级并行性来看,超标量处理机主要开发空间并行性,依靠多个操作在重复设置的操作部件上同时执行来提高程序的执行速度。相反,超流水线处理机则主要开发时间并行性,在同一个操作部件上重叠多个操作,通过使用较快时钟周期的深度流水线来加快程序的执行速度。
- 超标量处理机通过设置多条流水线进一步提高流水线的吞吐率;超流水线处理机则通过流水段的进一步细分,使得流水线周期缩短,从而提高流水线的性能。
- 多处理机是指两个或两个以上处理机(包括PU和CU),通过高速互连网络连接起来,在统一的操作系统管理下,实现指令以上级(任务级、作业级)并行。按照佛林Flynn分类法,多处理机系统属于MIMD计算机系统。
- 并行处理机的并行性存在于指令内部,但对于多处理机,并行性存在于指令外部,即表现在多个任务之间。
-
SIMD技术
-
-
判断:计算机系统由硬件和软件两部分组成。(错,说法不完善)
-
计算机系统的层次结构:
级别 层次 注释 观察者 第0级 硬连逻辑 CPU功能 硬件设计员 第1级 微程序 CPU功能 逻辑设计员 第2级 机器语言 软硬件分界 机器语言程序员 第3级 操作系统 系统软件 系统操作员 第4级 汇编语言 系统软件 汇编语言程序员 第5级 高级语言 系统软件 高级语言程序员 第6级 应用程序 应用软件 用户、应用程序员 -
透明性:本来存在的事物或属性,从某种角度看似乎不存在
例如: CPU类型、型号、主存储器容量等
对应用程序员 透明
对系统程序员、硬件设计人员 不透明
例如:浮点数表示、乘法指令
对高级语言程序员、应用程序员 透明
对汇编语言程序员、机器语言程序员 不透明
例如:数据总线宽度、微程序
对汇编语言程序员、机器语言程序员 透明
对硬件设计人员、计算机维修人员 不透明
-
计算机系统结构的定义:
- 程序员所看到的计算机系统的属性,即概念性结构和功能特性
- 研究软硬件功能分配和对软硬件界面的确定
-
计算机组成是计算机系统结构的逻辑实现
-
系列机的概念:具有相同的系统结构,但组成和实现技术不同的一系列计算机系统。
- 向后兼容必须做到,向上兼容尽量做到
-
Amdahl定律:系统中某部件采用某种更快的执行方式后,整个系统性能的提高与这种执行方式使用频率或占总时间的比例有关。
-
程序的局部性原理:时间 空间 顺序
-
计算机系统设计的三种方式:由下而上、由上而下、从中间开始
-
数据表示:数据表示是指计算机硬件能够直接识别,可以被指令系统直接调用的那些数据类型。
-
数据表示和数据结构是数据类型的子集
-
操作码的三种编码方法:
-
固定长度:规整、译码简单、浪费信息量(操作码的总长位数增加)
-
Huffman编码:树的结构不一致但平均码长唯一
-
扩展编码
-
-
对于一般商用处理机,采用多寄存器结构的二地址指令是最理想的
-
缩短地址码的方法:
-
间址寻址方式:在主存储器的低端开辟一个专门存放间接地址的区域
-
变址寻址方式:变址寻址方式中的地址偏移量比较短
-
寄存器间接寻址方式
-
不能由直接寻址的方式缩短地址码长度。
-
-
RISC和CISC
-
存储系统的定义:两个或两个以上速度、容量和价格各不相同的存储器用硬件、软件、或软件与硬件相结合的方法连接起来成为一个存储系统。
-
存储系统的目标:存储系统的速度接近速度最快的存储器,存储容量等于容量最大的存储器,单位容量的价格接近最便宜的存储器。
-
存储系统性能指标:速度、容量、价格
-
提高存储系统速度的两条途径:
- 提高命中率(置换算法、预取技术)
- 两个存储器的速度不要相差太大
-
存储系统的层次结构:寄存器(最接近CPU)、缓冲栈、Cache、主存、外存
- 层数越高,存储容量越来越大,每位的价格越来越便宜
- 层数越低,访问速度越来越快
-
如何提高存储系统访存速度?
- 采用存储系统 ,特别是Cache存储系统
- 多个存储器并行工作,用并行访问和交叉访问方法提高存储器的访问速度
- 设置各种缓冲存储器 ,如先行缓冲栈,运算结果后行缓冲栈等
-
Cache一致性问题:
-
写直达法Write-through:可靠性、控制的复杂性简单
-
写回法Write-Back:与主存的通信量少、硬件实现的代价低
-
多处理机情况下行得通吗?
在多处理器共享存储器的环境下,各处理器使用相同的虚地址访问各自的Cache可能会得到不同的数据。
- 写直达策略会加重总线的负担,尤其是在虚地址Cache中,访问存储器需要增加一次对Cache的访问以得到页表项中的实地址,造成延迟增大。
- 在大多数虚地址Cache的多处理机系统中采用写回策略。由于存储器内容有可能不反映Cache中的最新内容,则一致性处理要比写直达策略时更为复杂。
- 解决一致性问题的方法:在每个处理器都带有各自的Cache的情况下,不使共享的且可写的数据进入Cache,即只允许它们存在于主存中。
-
-
虚拟存储系统对应用程序员透明,对系统程序员不透明;cache对系统程序员是透明的
-
cache预取技术
- 流水线的特点:
- 可以划分为若干互有联系的子过程(功能段),每个功能段有专用功能部件实现。
- 实现子过程的功能段所需时间尽可能相等,避免因不等产生处理的瓶颈
- 形成流水处理,需要一段准备时间,成为“通过时间”
- 指令流不能顺序执行时,会使流水过程中断,再形成流水过程,则需要通过一段时间
- 流水技术适用于大量重复的程序过程,只有输入端能连续地提供服务,流水线效率才能充分发挥
- 流水线的性能指标:吞吐率、加速比和效率 公式
- 判断:线性流水线细分的段数越多,实际吞吐率就越接近于最大吞吐率。
- (错,需要同时保证连续输入的任务数增多)
- 根据流水线的各个流水段之间是否有反馈信号区别线性与非线性
- 非线性流水线需要用连接图和预约表共同确定,预约表和连接图多对多对应
- 非线性流水线的调度方法:
- 确定禁止向量(数字的集合)和初识冲突向量(二进制串)
- 构造状态图
- 确定迫切循环
- 绘制非线性流水线时空图
- 计算吞吐率
- 相关性分析:资源相关、数据相关、控制相关
- 解决数据相关的方法:
- 推后处理
- 设置专用路径
- 编译时、程序运行时
- 多条流水线调度:
- 顺序发射顺序完成
- 顺序发射乱序完成
- 乱序发射乱序完成
- 超流水线
- 并行性的概念
- 计算机系统提高并行性的措施:
- 时间重叠(超流水线处理机)
- 资源重复(超标量处理机、向量机)
- 资源共享
- 并行性的等级划分:
- 执行角度(指令内部、指令间、任务级或过程级、作业或程序级)
- 处理数据角度(字串位串、字串位并、字并位串、全并行)
- 并行处理机也称为SIMD计算机,因为它是用一个控制部件CU控制多个处理单元PE构成的阵列,所以也称为阵列处理机。主要应用于大量高速向量或矩阵的运算场合。
- SIMD计算机两种存储器结构:分布式存储器结构、共享式存储器结构
- 单级互连函数:
- 给定互连示意图推导出互联函数
- 立方体多级互连网络:逆混洗拓扑
- 多处理机的结构:松散耦合(通道互连)、紧密耦合(高速总线或高速开关实现互连)
- 多处理机的操作系统:主从结构、单独管理、浮动管理控制
- 5种超级计算机并行体系结构:
- 并行向量处理:(Parallel Vector Processing,PVP)系统
- 对称式多处理:(Symmetric Multi Processing,SMP)系统
- 分布式共享内存:(DistributedShared Memory,DSM)系统
- 大规模并行处理:(Massive Parallel Processing,MPP)系统
- 集机群式超级计算机系统(Cluster):自强4000
- 判断:OpenMP线程越多,速度越快(错)
- OpenMPI线程间如何通信? 消息传递
- OpenMP共享内存
- OpenMP、MPI基本函数
- 设置线程数、获取总线程数、获取本线程号
- MPI初始化语句