@laofang
2016-06-05T13:58:32.000000Z
字数 6645
阅读 2754
复习
| 题型 | 分值 |
|---|---|
| 选择 | 10 |
| 判断 | 15 |
| 简答 | 25 |
| 应用 | 25 |
| OpenMP | 15 |
| 论述 | 10(SIMD) |
运算器 控制器 存储器 输入设备 输出设备五个不部件组成, 其中运算器和控制器合称中央处理器
- 硬件:
- 虚拟计算机就是由软件实现的机器
- 计算机系统的功能
附: 计算机系统功能模型(洋葱模型)
系统结构是计算机系统软硬件界面
计算机组成是计算机系统的逻辑实现
计算机实现是计算机组成的物理实现
计算机系统设计的定量原则:
- 加快经常性事件的速度
这是计算机设计中最重要且应用最广泛的设计原则. 使经常性事件的处理速度加快能明显提高整个系统的性能.阿姆道定律:
: 改进后的执行时间
: 改进前的执行时间
- 改进后整个任务的执行时间
- 改进后整个系统的加速比
- CPU性能公式:
表示i指令在程序中所占的比例
SISD/SIMD/MISD/MIMD
在同一个控制部件管理下, 有多个处理单元PU, 所有PU均接收从控制部件传来的同一条指令, 但操作对象却来自不同数据流的数据组, 共享存储器的子系统可以有多个模块, 这类计算机还包括相联处理机. 从处理数据的并行性角度分析, 开可分成位片式(位串行字并行)和字片式(位.字全并行)
MIMD(多指令流多数据流): 大多数处理机系统和多计算机系统可以划归这一类结构
从系统结构角度提高系统性能
- 优化算法,用较少的指令完成同样的任务
- 在系统结构中增加硬件辅助部件
- 多条指令并发执行
三类计算机系统
- 单处理系统
- 并行与多处理系统
- 分布式处理系统
指令优化
- 平均码长计算
使用频率(就是题目给出的那几个数, 如果他们和刚好为1 的话)
第i条指令的码长
数据表示: 能够由硬件直接辨认的数据类型
浮点数的下溢处理:
截断法:简单的将下溢部分截去(舍入法)
舍入法:被截尾数为1进1. 平均误差比截断法小, 最大误差小于一半
恒置"1"法:和截断法一样不需要额外处理时间, 最大误差比截断法还大
ROM或PLA舍入法
存储系统的容量数量级和性能变化很大, 但三项基本要求--大容量 高速度 低成本始终未变
存储器容量,速度,与价格的关系
图2.20 存储系统的层次结构
: 的每位价格
: 的访问时间
: 的存储容量,
则与存在如下关系:
每位价格:
访问时间:
存储容量:
地址映像与变换
全相联
组相联
直接映射
替换算法
随机算法
先进先出算法
近期最少使用算法
优化算法
线性流水线技术指标:
吞吐率
- 单位时间内流水线能够处理的任务数(指令数)或流水线输出的结果的数量
- 最大吞吐率: 流水线到达稳定状态后得到的吞吐率
各段时间相等
各段时间不等
: 第个功能段所花的时间
即: 最大吞吐率取决于流水线中最慢的那个功能段- 实际吞吐率
各段时间相等
各段时间不等
: 任务条数
: 每个任务执行 段数
: 最慢的一段时间
加速比
- m段流水线的速度与非流水线的速度之比
各段时间相等:
各段时间不相等
效率
- 流水线上各段有
通过时间和排空时间, 即并不都是满负荷工作的, 流水线上的设备的利用效率就是效率(Efficiency)
各段时间相等
每段的效率
式子看不懂没关系
流水线相关处理(4.4)
同时性和并发性并行性等级从低到高划分为:
从执行角度
指令内部并行, 即指令内部的微操作之间的并行指令间并行, 即并行执行两条或者多条指令任务级或过程级并行, 即并行执行两个或多个任务(程序段)作业或程序级并行, 即在多个作业或程序间并行
从处理数据角度
- 字串位串
- 字串位并
- 字并位串
- 字并位并
提高并行性的措施
- 时间重叠
- 资源重复
- 资源共享
并行处理机也称SIMD计算机
互联网络不同 SIMD计算机的主要特点
- SIMD计算机利用大量PE对向量的各分量同时进行计算, 可获得很高的处理速度, 所依靠的并行措施是资源重复而不是时间重叠
- SIMD计算机最有特色的组成部分是它的互联网络(ICN)
- SIMD计算机适合于高速数值计算, 类同于流水线向量处理机
- SIMD计算机除向量运算速度以外, 整个系统的实际有效速度还在相当程度上取决于标量运算和编译过程的开销
- SIMD计算机基本上是一台向量处理的专用计算机, 它必须和一台高性能的单处理器主机配合工作, 有主机承担系统的全部管理功能.
度 网络直径 网络带宽 可靠性 成本 等| 准则 | SIMD | MIMD |
|---|---|---|
| 通信工作方式 | 同步 | 异步 |
| 控制策略 | 集中控制 | 集中控制+分散控制 |
| 交换方式 | 线路交换 | 分组交换 |
| 网络拓扑 | 分为静态动态两种,具体分别用什么没有讲 |
基本互联函数及函数表达式
- 恒等互联网络 :
相同编号的输入端和输出端一一对应
- 交换互联网络 :
二进制地址编码中第0位位值不同的输入端与输出端互连
- 三维立方体单级互连网络 :
Cube函数下标表示的输入端和输出端只在其位互为反码, 其他各位相同
- 最大寻径距离: n
- 加减2单级互连网络
- 混洗单级互连网络
将输入端分成相等的两半, 前一半和后一半按序一个隔一个地从头到尾一次与输出端相连, 如洗扑克牌
- 最大寻径距离: 2n-1
静态互联网络:指各结点间有专用的链路, 且在运用中不能嫩改变的网络
多处理机系统的定义:
- 包含两个或两个以上功能大致相同处理器
- 所有处理器共享一个公共内存
- 所有处理器共享IO通道 控制器 和外围设备
- 整个系统由同意的操作系统控制, 在处理器和程序之间实现作业, 任务,程序段,数组和数组元素之间的全面并行程序
优点
- 很高的性能价格比
- 很高的可靠性
- 很高的处理速度
- 很好的模块化
全面并行是多处理机系统最根本的特征, 统一操作是决定因素
#include <omp.h>#include <stdio.h>int main(){int nthreads;int tid;omp_set_num_threads(8); //设置线程数//编译制导语句, 按多线程执行, 每个线程有自己的nthreads 和 tid#pragma omp prarallel private(nthreads,tid){tid = omp_get_thread_num();//当前线程的tidprintf("Hello World from Thread %d \n", tid);if(tid == 0){nthreads = omp_get_num_threads();//总线程数printf("Number of threads is %d \n", nthreads);}}}
#include <stdio.h>#include <omp.h>#include <time.h>//两个矩阵相乘的传统方法void comput(float *A, float *B, float *C){int x, y;for(y=0; y<4; y++){for(x=0; x<4; x++){C[4*y+x] = A[4*y+0]*B[4*0+x]+A[4*y+1]*B[4*1+x]+A[4*y+2]*B[4*2+x]+A[4*y+3]*B[4*3+x];}}}int main(){double duration;//执行时间clock_t s,f;int x = 0;int y = 0;int n = 0;int k = 0;float A[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};float B[] = {0.1f,0.2f,0.3f,0.4f,0.5f,0.6f,0.7f,0.8f,0.9f,0.10f,0.11f,0.12f,0.13f,0.14f,0.15f,0.16f}float C[16];//------------------串行计算----------------------------s = clock();//计时开始for(n=0; n<1000000; n++){comput(A,B,C);}f = clock();//计时结束duration = (double)(f-s)/CLOCK_PER_SEC;printf("s---1,000,000: %f\n",duration);for(y=0; y<4; y++){for(x=0; x<4; x++){printf("%f ",C[y*4+x]);}printf("\n");}printf("----------------------------------------------\n");//------------------------------并行执行--------------------//===== 1. 一条线程 相当于串行 ============================s = clock();#pragma omp parallel forfor (n = 0; n<1000000; n++){comput(A, B, C);}f = clock();duration = (double)(f - s) / CLOCKS_PER_SEC;printf("p1- 1,000,000 :%f\n", duration);//===== 1. 两条线程 ============================s=clock();#pragma omp parallel forfor (n = 0; n<2; n++){//CPU是核线程的for (k = 0; k<500000; k++){//每个线程管个循环comput(A, B, C);}}f = clock();duration = (double)(f - s) / CLOCKS_PER_SEC;printf("p2- 1,000,000:%f\n", duration);//===== 1. 四条线程 ============================s = clock();#pragma omp parallel forfor (n = 0; n<4; n++){ //CPU是核线程的for (k = 0; k<250000; k++){//每个线程管个循环comput(A, B, C);}}f = clock();duration = (double)(f - s) / CLOCKS_PER_SEC;printf("p3- 1,000,000:%f\n", duration);//-----------------------------------------------------------for (y = 0; y<4; y++){for (x = 0; x<4; x++){printf("%f,", C[y * 4 + x]);}printf("\n");}return 0;}
- 它通过高速互联网络吧通用计算机(如高档计算机,工作站或pc)连接起来, 采用消息传递机制(MPI PVM等)向最终用户提供单一并行编程环境和计算机资源, 因此它通常也称为"计算机群", "工作站群", "工作站网络" 或"网络并行计算"等`