Computer Architecture Final Exam Review
memory
Memory Hierarchy
- Understand what is memory wall? Why it is a bottleneck?瓶颈
- 内存壁垒:处理器和内存的悬殊持续增长
- 瓶颈:好的内存架构设计对系统的性能有越来越高的重要性
- Illusion provided from a memory hierarchy
- 大的内存都是很慢的,但是caching可以give 错觉他们很快
- 所以这个错觉可以是
- caching + virtual memory 能够是的内存变快
- 传统的内存层级
- 通过使用局部性的优势
- 能够尽可能的利用磁盘上能够使用的内存
- 速度也会很快
- 通过使用局部性的优势
- Principle of locality (two types of locality)
- 定义:程序每次会使用一小部分的地址空间
- temporal locality
- 曾经使用过的程序,再次被使用的可能会很大
- 比如循环中的指令和数据
- spatial locality
- 在执行过的程序附近的程序被使用的可能性很大
- 例如顺序执行中的数组
- temporal locality
- 定义:程序每次会使用一小部分的地址空间
- DDR RAM? Relationship between memory clock rate and memory bandwidth
- mobile system require 2X bandwidth every 2 years
DDR DRAM 叫double data rate DRAM
- transfer data on rising and falling clock edges
- E.g., 800MHz DDR –> BW?
Know how to calculate Average Disk Read Time
- average disk read time = seek time + rotation latency + transfer time + controller delay
- rpm = revolution per minutes
- e.g
- 512B sector, 15000rpm, 4ms average seek time, 100MB/s transfer rate, 0.2ms controller overhead, idle disk
- time = 4ms seek time +
- (½)/(15000/60) = 2ms rotationl latency
- 512/100MB/s = 5.12 s = 0.00512ms transfer time
- 0.2ms controller delay
- = 6.2 ms
- Understand what is memory wall? Why it is a bottleneck?瓶颈
Difference between three types of caches:
- Direct-mapped cache
- 根据索引表映射哪个cache块用来存数据
- 一个block只能有一个选择存哪里
- 内存块的那一个位置分配给cache的某个位置,由后三位决定(假设有8个块(23=8))
- 001:00001,01001,10001,11001
- 用valid bit来判断cache的数据是否存在内存那个位置
- tag用来判断cache的数据在内存哪个位置
- 重点
- index不存在cache里面,就像数组不会存索引
- 假设有一个word:22
- 首先转成二进制10110
- 然后后三位位index
- 前两位为tag
- 然后把数据存入对应位置
- 因为没存进来的时候,对应位置没有数据,所以为miss(第一次访问那个内存地址),存入之后,才会变成hit
- 然后数据valid bit变成Y
- 假设一个cache有32 bit的地址
- tag:22bits
- index:4bits
- offsets:6bits
- 那么 cache block size 为26 byte
- 那么 cache有24 entries
- n-way Set-associative cache
- 每个set都有n个成员
- 用块的号数来决定哪个set
- 在给定的set中搜索全部成员(因为set里面的成员少,所以搜索起来快)
- 那么就只要比较n次,更加省时间
- 假设一个cache有2s个sets, 并且每个block有2n个bytes。
- 那么block offset为n
- index为s
- 假设address长度为m
- 则tag长度为m-s-n
- 计算set index
- block address = memory address / 2n
- set index = block address % 2s
- Fully associative cache
- cache可以映射到内存中任何一个位置
- 所有成员都要搜索一次
- 耗费时间长,每个成员都要对比, 每个block的tag都要对比
- Direct-mapped cache
- For each of the above cache type
How to calculate a block(or set) index give an address?
- miss: load 的数据不再memory里面
- every miss always load the 64 byte
- 如何选block size
- 用两种方式
- early restart
- CPU在等第一个byte,但是64byte还没load进去
- 或者可以先读第一个byte, 不用等他读完
- critical word first
- early restart
- 用两种方式
- miss: load 的数据不再memory里面
How to subdivide an address given a cache design, or vice versa?
- Write back vs write through(write hit)
- write through
- 如果write hit, 则更新缓存里面的block和memory里面的block
- 这样缓存和内存里面的数据就同步了
- 但是会使得数据的写更长时间
- 解决方案:使用write buffer
- 把要写入内存的数据hold waiting
- 解决方案:使用write buffer
write back
- 当你更新数据的时候,只改cache里面的数据
- 速度快
两者使用的差别
- 如果写的频率高的时候,write back快
- write through
- Write allocate vs no write allocate (on write miss)
- allocate
- fetch the block
- no allocate
- do not fetch the block
- allocate
condition
- if read hit: cpu continue
- if write hit: write through or write back
- if read miss: store pipeline, read data to pipeline and continue
- if write miss: write through (allocate or no allocate)
Know how to calculate AMAT, actual CPI
- AMAT: average memory access time
- hit time + miss rate * miss penalty
- 如果是两层
- AMAT = hit time1 + miss rate1 * (hit time2 + miss rate2 * miss penalty2)
actual CPI : cpu time divide into 2 parts
- cpu execution clock cycles
- memory stall clock cycles
- (instruction / program)* (misses/introduction) * miss penalty
- miss penalty = main memory access time / clock cycle
- Effective CPI = bass CPI + L1 Miss rate * L2 Hit Time + L2 global miss rate * L2 Miss time
- AMAT = L1 Hit time + L1 miss rate * L2 Hit time + L2 global miss rate * L2 Miss time
- performance = 慢的/快的
- e.g
- CPU base CPI = 1, clock rate = 4GHz
- Miss rate / instruction = 2%
- Main memory access time = 100ms
- then if there is only primary memory
- Miss penalty = 100ns / clock cycle
- clock cycle = 1/clock rate = 0.25
- Miss penalty = 400 cycle
- Effective CPI = 1 + 2% * 400 = 9 cycle
- then if there is only primary memory
- then suppose we add L-2 cache
- L2 cache access time = 5ns
- L2 global miss rate = 0.5%
- L2 Hit time = 5ns / clock cycle = 5ns / 0.25 = 20 cycles
- L2 Miss time = 400 cycles
- Effective CPI = 1 + 2% * 20 + 0.5% * 400 = 3.4 cycle
E.g. on a machine with one or two level caches
- 3 formulas (two from lectures, one from the HW 6 solution)
- AMAT: average memory access time
Know what is LRU(least recent use) replacement policy
- Virtual memory
- 1K = 210
- 1K * 1K = 1M
- What is page table
- 用来在物理内存里面找一个页的
- PTE:page table entries
- indexed by virtual page
- 如果page不在内存里面
- PTE存物理page的数字
- 如果page在内存里面
- PTE refer to一个磁盘的位置
- dirty bit set to 1 当一个page被改动过
- Address subdivision
- How to translate a virtual address to a physical address
- CPU and OS translate virtual address to physical address
- The CPU sends virtual address to MMU
- The MMU send physical address to the memory
- Purpose of MMU
- 转换虚拟地址和物理地址
- What is page fault
- 其实相当于cache miss
- 当你有一个page fault,这个page就要被fetch from磁盘到内存
- 如何减少page fault?
- 全关联placement
- 小页面替换算法
- How a page fault handler works?
- use faulting virtual address to find PTE
- locate page on disk
- choose page to replace
- if dirty, write the page to disk first
- read page into memory and update page table
- make process runnable again
- restart from faulting instruction
- 1K = 210
假设virtual address = 43 bits, page size = 4KB, PTE size = 4 byte
- 那么对于单层 page table, 需要多少个PTES?
- page size = 4KB = 212
- 那么最差要243-12
- 那么需要存这个page table要多少物理内存?
- 243-12*4 byte
- 231*22 = 233
- 那么对于单层 page table, 需要多少个PTES?
Know what is TLB
- Translate look-aside Buffer
- TLB的miss由硬件或者软件控制
- a spacial cache of page table entries within CPU
- Understand the interaction between TLB and caches
- cache rage use physical address
- need to translate before cache
- cache rage use physical address
- TLB cache is a page table entries
- Translate look-aside Buffer
Know the sources of cache misses (3 Cs model) 必考
- 三种类型的miss
- compulsory miss
- 第一次访问会导致这种miss
- 因为第一次访问的时候数据不会在内存里面
- 解决方案
- 假设一个block只能存一个byte,然后我们要load 128 byte的数据
- 那么我们就要load 128次
- 但是如果把block增大成128 byte,那么我们只要存一次
- 假设一个block只能存一个byte,然后我们要load 128 byte的数据
- capacity miss
- 理论上存在,实际的机器是不存在的
- 只有full associate cache
- 空间不足
- 解决方案
- 增大cache size
- conflict miss
- 假设有两个entry,但是有100个要进去
- 这个时候就会发生这种miss
- 也就是资源竞争
- 解决方案
- 增加关联性
- 不存在于full associate cache
- 假设有两个entry,但是有100个要进去
- compulsory miss
- What about the fourth C?
- 三种类型的miss
Software optimisation techniques: AVX, Loop Unrolling, Blocking?
- blocking
- maximise accesses to data before it is replaced
- 应该就是访问数据之前,先把空间申请了
- blocking
A few fallacies and pitfalls
1.在多核CPU里里面,并且有shared的L2和L3cache
- 如果关联性不够core多的话,会导致 conflict miss
- e.g
- 如果有一个8核CPU,那么至少需要一个8-way的set 关联cache
- e.g
- 如果关联性不够core多的话,会导致 conflict miss
2.用AMAT来评估一个out-of-order processor的性能
- 忽略effect of non-blocking accesses(continuing execution on misses)
- instead, evaluate performance by simulation
parallel processor
- Amdahl’s law
- 知道公式以及知道如何计算
- 公式
- speedup = 1/[(1-F)+F/P]
- F为并行化的百分比
- P为处理器数量
- e.g
- 我们有100个处理器,想要90倍的speedup
- 1/[(1-F) + F/100] = 90
- F = 89*100/(99*90) = 99.9%
- 所以非并行的部分必须要<=0.1%
- strong scaling(缩放) and weak scaling
scaling
- e.g1 10*10 matrix
- 从10个处理器加速到100个处理器,speedup是多少
- 首先在单个处理器:time=(10+100)*Tadd=110*Tadd
- 10个处理器
- time=10*Tadd + (10*10)/10*Tadd = 20*Tadd
- speedup = 110/20=5.5
- 100个处理器
- time=10*Tadd + (10*10)/100*Tadd = 11*Tadd
- speedup = 110/11 = 10
- 从10个处理器加速到100个处理器,speedup是多少
- e.g1 10*10 matrix
strong scaling
- 数据规模确定
- weak scaling
- 数据规模和处理器的数量有关
- 例如
- 我们有10个处理器,那么数组的规模就是10*10
- 如果有100个处理器,那么数组的规模就是100*100
- good understanding of hardware threading
- 增加单个核的资源利用率
- 在thread里面,dependency handled by scheduling and register renaming
- 不同的thread里面的指令在函数单元available 的时候执行
- 每个cycle都没有thread switching