文章目录
chapter 1
1.1 计算机系统结构中的8个伟大思想
- 面向摩尔定律的设计
计算机设计者必须预测器设计完成时的工艺水平 - 使用抽象简化设计
高层次看不到低层次的细节,只能看到一个简化的模型 - 加速大概率事件
- 通过并行提高性能
- 通过预测提高性能
- 存储器层次
- 通过冗余提高可靠性
1.2 谬误
- 改进计算机的某个方面时期望总性能的提高与改进大小成正比
- 利用率低的计算机功耗低
- 面向性能的设计和面向能量效率的设计具有不相关的目标
- 用性能公式的一个子集去度量性能
chapter 3
3.1 陷阱:
- addiu用于将常数和有符号数相加,所以对立即数会进行符号扩展
addiu is used to add constants to signed integers when we don’t care about overfl ow
chapter 5 Memory
5.1 层次化的结构
register file
mux控制
SRAM
线与
多级decode
DRAM
功耗更大,访问一次延时长
读操作:预充,激活行,激活列,在MUX中输出
复用IO,不同时间输入的信息不同
-
row buffer:激活行之后,很多数据可以同时读写,减少读memory的时间
-
memory bank:提高memory的带宽,而总线的带宽不变
1是指总线延时,15指DRAM读取延时,1指数据写回延时1+15+1=17
如果是4bank,延时变成1+15+1*4 -
双通道,对应CPU两个memory控制器
一个chip提供8位,8个chip拼成64位数据
上图中,一个chip由8个banks组成,1个bank一次给8位数据,不同的chip每次选通相同的bank
bank密度高,噪声容限低,采用多个结构拼成最后的结构
flash
- nand:密度高,更便宜,做U盘,不能随机读写
- nor:更快,允许random access,在手机中做instruction memory
有擦写次数限制,不能做直接RAM
更低的尺寸做不了,但是可以做3Dflash
disk
便宜,有机械结构,容易摔坏
5.2 cache
一次存取以block为单位
direct mapped cache
memory地址取余数,对应cache相应的位置,多对一
多对一的话如何确定在memory的数据呢?把高位地址信息保存起来;同时还要知道cache相应位置有没有数据存
1024个位置,需要10bit作为index
一个block4byte,最低位2bit为offset
高位地址作为tag
block size更大的话:
block数目更少,容易冲突,miss的代价更大,因为一次读取的数据更多
block size更小的话:
读取的次数多
CPU读数据
一旦miss,就stall,干等着
cache中的tag和data可以并行读
CPU写数据:更麻烦
tag checking和写数据不能同时
sw一次写一byte或者word,只是block中的数据的一部分
- write through:cache更新之后memory也跟着更新
miss的时候可以fetch the block,也可以don’t fetch the block - write buffer:write buffer负责往DRAM写数据,节省CPU的时间
write buffer是个队列,只有队列满了之后CPU才会stall
缺点:改写memory的次数太多了 - write-back:cache中的数据被更新了,标记为dirty data,当被replace的时候才更新memory中的数据,更新memory也可以用write buffer
miss的时候多数是fetch the block,从memory中取数据在cache中被改写
associative cache
direct mapped cache的问题是利用率不高
折中的办法就是分组,组内很灵活先来先得,组之间根据地址计算
repalace的时候满足一定的规则
缺点:硬件资源多,比较的延时增加,所以一般也就不会超过8路
好吃:cache利用率高,所以hit可能性高
提高associativity可以降低miss rate,最极端就是全相联fully associated,先来先得
replacement policy
- Least-recently used(LRU)没有被经常使用的数据会被替换
但是需要记录时间频率,代价很高,只能在路数少的时候
硬件上用伪LRU - random:简单,随便选,路数多的时候
miss的种类
- compulsory miss:第一次读取的数据
- capacity miss:容量太小
- conflict miss:无用功,总是冲突
- 多核:一致性缺失
Measuring Cache Performance(计算)
mutilevel caches
L1:减少hit time,size小
L2:size大,减小miss rate
L1,L2为核私有
L3:为核共享
advanced CPU
- out of order CPU
- dataflow pattern
- multi-banked caches to support multiple issue
AVX:对于64bit的机器,如果一个数据位宽是8bit,可以一次计算8个数据
5.3 虚拟内存
为什么使用虚拟内存?
- memeory不够用,process可能比物理内存还大
- 更安全,更高效
- 可以实现reallocation
由MMU hardware和操作系统实现 - page:VM基本单位
- page table:虚拟内存到物理内存的对应,储存在内存
- page fault:page不在内存中:
page fault handler来处理
use faulting virtual address to find PTE->locate page on disk->choose page to replace->read page into memory and update page table->run process - replacement and writes:
write back: 通过dirty bit确定是否有改变
Translation look-aside buffer(TLB):快表
page table在memory,从虚拟内存到物理内存的转化需要访问一次memory,然后读取数据还要读一次memory,TLB就是为了减少访问memory次数
TLB用专门的硬件实现,和cache并行,读取速度很快,0.5-1 cycle for hit,
- fully associative often,
- write-back often
- TLB miss
if page is in memory: load the PTE from memory and retry: 软硬都能实现
TLB handle程序:在地址Ox8000_0000
if page is in disk: page fault : OS handle
如果entry is invaild,即page在disk中, page fault handler in invoked - TLB and cache interaction
可以用虚拟地址直接去cache找数据,这样cache访问和TLB访问可以并行,但是不同进程的虚拟地址可能相同,这样在cache中的数据会不匹配
virtually indexed, physically tagged cache(VIPT):用TLB得到的物理地址与cache中取出的数据的物理地址进行匹配
memory protection
- page table 受OS控制
- TLB:增加控制位
- 指令分成普通指令和privileged instruction,privileged instruction只能kernel使用
- system call exception: 从user mode 到supervisor mode
- protection on context switch:
with TLB:增加PID,某一进程不能访问其他进程在TLB中的数据,这样进程再切换过来之后数据也不会被清洗掉
cache也可以用同样的方式,避免数据相互篡改
5.4 virtual machine
- improve isolation
- avoid security and reliability problem
virtual machine monitor(hypervisor): map virtual resources to physical resources
5.5 多核处理器
cache coherence problem:多核处理器的数据共享问题,可能一个处理器在私有cache中更改数据,但是共享的memory中数据还没改
解决方法:
- snooping protocol(invalidation-based):一个处理器更改了某一个数据,会告诉别的CPU,别的处理器把他自己的数据作废,下一代读写的时候重新读最新的数据,相当于数据都挂在bus上
很麻烦:这样cache必须为CPU和bus同时服务,不同的CPU之间可能会死锁和竞争 - directory-based protocol:承接snooping protocol,记录哪些处理器中有哪些数据,减少bus的瓶颈
consistency problem
memory coherence解决能不能返回正确的数据,一个处理器改了数据,另一个处理器更没更新
memory consistency解决多次写操作的顺序问题,
并行执行,很多指令打乱执行,可能会导致错误的结果
解决方法:
- sequential consistency:性能差
- relaxed:不同程度的实现read和write乱序
6 并行处理器
single chip, multicore
multiple chips, multicore
scalaility: 可扩展性
- multiprocessor:
- multicomputer:特定的协议,局部带宽会比较大
- cluster:集群,可能电脑分散在各种地方,用过网络相联
- warehouse-scale computers:tens of thousands of serers
困难 - partition:data/work分配
- coordination:控制上的同步
- communication:数据的交互
Amdahl’s law:
多核计算加速比的过程中,分成强、弱scaling,且默认load balance - 强scaling:问题规模不变
- 弱scaling:问题规模也增大
6.1 instruction and data stream
软件有顺序和并发
硬件有串行和并行
- 之前讲的都是SISD
- SIMD:同样的指令,实现数据的并行
vector processor:按向量的方式工作,addv, mulv
好处是:很容易并行编程,简化了同步,稠密矩阵读数据也方便
MIMD: mutiple instruction mutiple data
6.2 GPU
GPGPU: General Purpose Computing on GPU
Programming language/API: DirectX, OpencGL
Compute Unified Device Architecture: CUDA/OpenCL
上图有L1, L2 cache,L2 cache与DRAM相连
SIMD的模式,GPU中有很多register,可能比CPU的cache都多,用硬件实现context switch
warp: group of 32 thread
GPU的memory叫GDDR
6.3 multithreading
- fine-grain multithreading: 细粒度
每个周期都会切换线程
If one thread stalls, others are executed
缺点:单个进程延时增加 - coarse-grain multithreading:粗粒度Only switch on long stall
缺点:切换时有start-up cost - simultaneous multithreading:硬件利用率最高
6.4 SMP: shared memory multiprocessor
- UMA: uniform
- NUMA: nonuniform,访问memory都是共享的,但是本地memory更快
对于sum reduction要注意: - 每一步都要同步
- 非2n的情况
当两个处理器共享一个memory时,类似于生产者消费者模型,涉及到data race
需要原子操作,通过lock锁来控制临界区
为了提高对总线利用率的效率:ll sc
message passuing: processor之间来发送接收message
6.5 warehouse-scale computer(WSC)
要考虑:可扩展性、用电、网络
RAID: redundant arrays of inexpensive disk
Improves performance and dependability
RAID5: 分布式的奇偶校验盘
RAID6: recovery from a second failure
https://blog.csdn.net/chenvast/article/details/77906712