Architecture
-
Acceleration, Amdahl
加快任务完成时间
根据Amdahl定律,加快经常性事件
利用程序的局部性原理
-
Instruction, Interface
使用精简指令集或者复杂指令集
-
Processing, Parallel
并行处理
指令并行与数据并行
-
Storage(Memory), System
局部性原理与加快经常性事件
-
Network, connection
多核架构下,如果连接CPU
数据中心如何连接机器
需要考量延迟和带宽
数据包如何传
现代计算机的四大基石
-
图灵机
问:存不存在一个解决所有数学问题的一般算法
图灵:有
图灵机由以下三项组成:
-
存储:一条无限长的0 1条带
-
处理:一个对条带进行有规则的变换
-
传输:一个可以移动条带的读写头
-
冯诺依曼体系结构
图灵机简单的模型,虽然可以解决了一切的数学问题
但是由于结构单一,造成性能上无法达到要求
冯诺依曼的出现正是解决在图灵机的基础上的性能问题
-
摩尔定律
芯片上晶体管的数量每18-24个月翻一番
计算机需要硬件的支持,摩尔定律保证了计算的硬件发展
-
Amdahl定律
系统的瓶颈一般在经常性事件
在优化系统时,先找出经常性事件,然后再对经常性时间优化
是最快最有效的优化手段
计算机系统架构师的任务
-
向前看
理解历史为什么这么设计
-
向后看
理解未来技术的发展趋势
-
向上看
理解需要解决的问题和它的特性
-
向下看
理解底层技术的功能特性
优化系统的万能手段
- 找出经常性事件
- 找出加快经常性事件的方法
局部性原理
- 时间局部性
- 空间局部性
并行性
- 位并行
- 字并行
- 指令并行
- 线程级并行
- 进程级并行
- 机器级并行
提升并行的途径
-
流水线技术
把任务拆分成不同的步骤
不同的步骤由不同的硬件完成
-
重复资源
对于耗时的步骤,可以摆放多个设备处理
-
资源共享
同一个设备,分时的处理不同的任务
计算机系统设计的四大要素
- 性能
- 成本
- 能耗
- 可靠性
冯诺依曼的发展
- 输入输出
- CPU轮询IO
- 中断通知
- DMA直接访存
- IO处理机
- 并行处理
- 存储器
- 寄存器位数和个数的增多
- 高速cache的发展
- 指令集
- 复杂指令集CISC
- 精简指令集RISC
流水线技术
不适合使用流水线的任务:
- 稀疏的任务
- 只有一个任务
- 多个不同的任务组合
适合使用流水线的任务:
- 密集且任务类似的任务
例子:
-
处理及流水线
取指 -> 译码 -> 执行 -> 访存 -> 写回
-
MR
Map -> Reduce
相关
相关的分类:
-
数据相关
一条指令操作完的数据,会流向另一条指令
编译器通过乱序局部指令,来减少数据冲突
-
名相关
指令间没有数据的流动,但是它们使用了相同的变量
可以通过编译器使用换名技术来消除相关
-
控制相关
例如使用if,while等指令
由于CPU无法直到下一条指令到底是什么
编译器会选取其中一个分支的指令让CPU执行
如果控制指令的判断不是预期的
则丢弃执行的部分
cache
减少cache不命中
-
第一次不命中
通过预取(编译或者硬件)
-
容量太小导致不命中
一个块由于太大,一次缓存无法全部载入
导致后续继续访问此块时
再次发生缓存不命中
可以通过增大缓存容量来解决
-
冲突不命中
由于使用了hash或者组相联cache,原本加载的cache被新的cache代替,然后又再次发生访问,导致cache不命中
可以提高组相联的容量来解决
提高cache的性能
- 增加多一级cache
- 使用写回法来代替写直达方法
- 使用写缓冲
- 使用非阻塞cache技术,在不命中cache时,cpu依然可以运行做别的事情
- 硬件越简单,速度越快
- 让cache与CPU片内
- 使用虚拟cache而不是物理cache,用虚拟地址来标志cache会比使用物理地址快(由于少了地址转换带来的开销)
- cache访问流水化
- 编译器优化,减少相关性
cache结构
- 直接相联
- 全相联
- 组相联
关于共享变量的设计
根据cache的MSI协议,多个核之间共享了一个变量,此变量在一个核内发生变化,势必会广播到其他监听此变量的核中。
- 设计的共享变量应该尽量减少核的共享
- 利用链表等数据结构可以减少共享的次数
网友评论