Kim Seon Deok
[Quantitative approach] ch 2.2 Memory Technology and Optimizations 본문
[Quantitative approach] ch 2.2 Memory Technology and Optimizations
seondeok 2023. 12. 8. 08:54
2.1 introduction
대부분의 프로그램은 모든 코드나 data를 uniform하게 액세스하지 않는다.
이로 인해 locality가 필요하게 되었고, temporal한 방식과 spatial한 방식으로 나타난다.
CPU의 memory hierarchy
- cost per byte가 낮은 계층의 메모리만큼 저렴하고, 가장 높은 계층의 메모리만큼 빠른 memory system을 구축하는 것을 목표로 하기 때문에 여러 level로 나뉘게 되었다.
프로세서가 발전하면서 memory hierarchy의 중요성은 더욱 증가했다.
-프로세서 라인에서는 초당 평균 memory request가 증가
-메모리 라인에서는 초당 DRAM access가 증가
시간이 지나면서 access time에서 프로세서와 DRAM의 gap은 증가했지만, single processor에서의 performance 향상은 saturate되었고, 프로세스와 DRAM 간 performance gap증가는 둔화되었다.
실제로 sigle core bandwidth는 더 느리게 증가하고 있다.
high-end 프로세스는 multiple core 구조를 갖고, bandwidth requirement는 더 높다.
그렇기 때문에 코어의 갯수가 증가할 수록 CPU memory demand와 DRAM bandwidth 간의 gap은 증가한다.
bandwidth는 cache multiporting과 pipeling을 통해 이루어진다.
-3-level cache : 코어 당 2 private level & shared L3 cache
-L1에 instruction cache와 data cache를 분리
cache operation
read operation은 cache와 memory에서 copy되는 것이 identical하므로 쉽다.
write operation은 cache 와 memory가 consistent하지 않기 때문에 difficult 하다.
- wite-through : cache의 item을 업데이트하고 main memory를 update함으로써 write
- write-back : cache에만 copy를 업데이트한다. 만약 block이 replace되어야 한다면, memory에 copy된다.
두 가지 방식의 write연산은 write buffer를 사용한다. write buffer는 cache 또는 memory에 대한 write request를 임시로 저장하는 공간이다. write할 여러 data들을 모아서 buffer에 배치하면 전송되는 data 양이 감소하여 memory bandwidth를 효율적으로 사용할 수 있게 되고 memory에 data를 기록하기 위해 완전히 latency를 대기하지 않더라도, memory에 write가 완료되기 전에 프로세서가 다른 instruction을 실행할 수 있기 때문에 memory에 data를 효율적으로 access할 수 있다. (write 요청이 많은 경우 성능이 향상됨)
cache miss
cache에서 찾고자 하는 word가 없다면 해당 word는 더 낮은 계층에서 fetch되어, cache에 옮겨져야 한다.
Cs model
- compulsory miss: 맨 처음 block이 cache에 위치하지 않은 경우
- capacity miss: cache가 프로그램 실행 동안 필요로 하는 모든 block을 포함할 수 없는 경우
- conflict miss: fully associative가 아닌 경우, multiple block이 1개의 set에 매핑되어 다른 block들에 대한 access로 인해 block이 evict되고 나중에 다시 검색되는 경우
- coherent miss → multi threading과 multi core로 인해 cache는 복잡해진다. multi processor에서 여러 cache를 일관되게 유지하기 위해 cache를 flush하게되, 이로 인해 coherent miss가 발생한다. → 하나의 cache에서 데이터를 변경하면, 다른 cache에서 해당 데이터의 consistency을 유지하기 위해 해당 데이터를 무효화하고 다시 읽어와야 한다.
[miss rate]
miss rate =cache access 중 miss가 발생하는 비율 = miss가 발생하는 횟수 / 전체 cache access 횟수
[miss per instruction]
miss rate, misses per instruction 모두 miss cost를 고려하지 않는다.-> average memory access time(AMAT)을 이용
[AMAT]
performance를 측정하기에 indirect한 지표이다. execution time을 대체하는 지표는 아니지만, miss rate보다 더 나은 지표이다.
- hit time : cache에 필요한 data가 존재하여 액세스 하기까지 걸리는 시간
- miss penalty : block을 메모리에서 교체하는 데 걸리는 시간, 즉 cache miss가 발생했을 때 해당 data를 memory로 내려가 가져오고 replace하기까지 걸리는 시간
speculative 프로세서는 miss가 발생한 동안 다른 instruction을 실행하여 miss penalty를 줄인다.
multithreading 방식은 프로세서가 idle상태로 넘어가지 않고 miss를 tolerate하도록 한다.
latency tolerating 방식으로 cache는 miss를 handling하면서 request들을 처리할 수 있다.
[average memory access time를 optimizing하는 데 고려해 주어야 할 요소]
-cache access time
-miss rate
-miss penalty
-power
- -static power : operating 중이 아닐 때 소모되는 power
- -dynamic power : read / write를 수행할 때 소모되는 power
2.2 Memory Technology and Optimizations
[memory bandwidth를 높이는 법]
- main memory를 구성하는 DRAM chip을 multiple memory bank로 organizing
- memory bus를 넓힘
SRAM
SRAM = static RAM
SRAM은 DRAM과 다르게 data refresh를 할 필요가 없어서 access time과 cycle time 간 차이가 거의 없다.
SRAM은 bit 당 6개의 트랜지스터를 사용해 정보가 read될 때 disturb되는 것을 막고, stanby charge mode를 유지하기 위해 최소한의 power가 필요하다.
on-chip cache SRAM은 일반적으로 cache block 크기와 width가 일치하며, tag는 각 block과 병렬로 저장된다.
따라서 전체 block을 1 cycle에 read 하거나 write할 수 있다.
cache access time은 cache에 있는 block의 갯수에 비례하며, cache power consumption은 cache의 bit 수(static power) 및 block 수(dynamic power)에 영향을 받는다.
DRAM
DRAM = dynamic RAM
DRAM은 bank로 구성되어 있고(DDR4(Double Data Rate)에서는 최대 16개까지 지원), 각 bank는 여러 row로 구성된다.
* DDR방식 : DATA Rate를 Differential clock 전송을 기반으로 2배로 향상시켜 bandwidth를 확장시키는 방식
- ACT(Activate) command을 전송하면 특정 bank의 특정 row가 활성화되어 해당 row의 data가 row buffer로 load된다. 이 때 load 된 data는 나중에 read나 write 동작에 사용된다. -> read나 write access를 하기 전에 특정 row를 준비
row가 buffer에 있으면 DRAM width에 따라 연속적인 column address로 전송되거나 block transfer와 starting address를 지정하여 전송할 수 있다.
- Rd : Rd command는 활성화 된 row에서 data를 읽어온다.
- Wr : Wr command는 활성화 된 row에서 data를 쓰거나 업데이트 한다.
- PRE(Precharge) command은 활성화 되어 있는 특정 bank의 특정 row을 닫고 해당 row의 data를 비활성화 하여 새로운 access를 준비한다. -> word line을 닫는 동작
- 각 ACT, PRE command 및 block transfer는 효율적인 memory access를 위해 사용되며, clock과 동기화 되어 정확한 타이밍에 명령을 수행하여 memory system의 성능 및 효율성을 유지한다.
- DRAM memory는 row와 column으로 이루어진 직사각형 matrix이다.
- address의 절반은 맨 처음에 row access strobe(RAS)동안 전송되고, 나머지 address의 절반은 나중에 column access strobe(CAS)동안 전송된다. -> address transfer을 조절하고 타이밍을 동기화 하는 역할을 수행
- 칩 당 더 많은 bit을 포함하기 위해 DRAM은 1개의 transistor만 사용하는데, 이는 1비트를 저장하는 capacitor역할을 한다.
- read 작업 시 특정 row는 row buffer로 옮겨지고 CAS signal이 해당 row에서 read할 일부를 선택할 수 있다.
read 작업이 일어나고 나면 해당 information은 소멸하므로, 더 이상 information을 필요로 하지 않을 때 row를 다시 memory에 write back & write back은 overlap 방식으로 수행된다.
- 셀 내부 전하가 누출되어 정보가 손실되는 것을 막기 위해(=read나 write가 되지 않는 경우) 각 bit은 주기적으로 refresh되어야 한다.
- memory system 내 각 DRAM은 특정 time window안에 모든 row에 액세스해야 한다. DRAM controller에는 주기적으로 DRAM을 refresh하는 하드웨어가 포함되어 있다.
- refresh하는 데 걸리는 시간 = row activation + row precharge + write row back
SDRAMs -> DRAM Chip의 성능을 향상시키기 위한 방법
SDRAM = synchronous DRAM
초기 DRAM은 multiple column access가 single row에 할당되도록 하는 buffer를 갖고 있었고 비동기적 interface를 사용했다. 새로운 row access 없이 aysnchronous interface를 사용했고, column 액세스는 controller에 동기화하기 위해 overhead를 일으킴
1990 중반)
- DRAM interface에 clock signal을 추가해 반복된 전송으로 인한 오버헤드 방지
- burst 전송 모드를 추가해 새로운 column address를 지정하지 않더라도 multiple transfer가 발생하게 함.
DRAM density가 증가함에 따라 memory에서 더 많은 bandwidth를 얻기 위해 DRAM은 더 wide하게 만들어졌다.
처음에는 4비트 전송 모드를 제공했고, 2017년 DDR2, DDR3, DDR DRAM이 4,8,16비트 BUS를 갖추게 되었다.
2000 초기)
- DDR 기술 도입 : DDR(Double Data Rate)는 memory clock의 rising edge와 falling edge 양쪽에서 data를 전송할 수 있도록 허용함으로써 peak data rate를 2배가 되게 한다.
bank 도입 : power mangement를 돕고 access time을 향상시켜서 서로 다른 bank에 대해 interleave 및 overlap하는 것을 허용
- 다른 bank로의 액세스는 overlap되며, 각 bank는 row buffer를 갖는다.
- DRAM 내부에 multiple bank를만드는 것은 address에 또 다른 segment를 추가하는 것이다 → address는 bank number, row address, column address로 구성
- 새로운 bank를 지정하는 주소가 지정되면, 해당 bank를 열어야 하며, 추가적인 delay가 발생하게 된다.
- bank와 row buffer의 관리는 memory control interface에 의해 이루어진다.
- 나중에 들어오는 액세스가 열려있는 bank의 같은 row로 지정되어 있다면, column 주소만 전송하면 되기 때문에 액세스 속도는 빨라진다.
- 새로운 액세스가 들어오는 경우, DRAM controller는 bank(Active command를 통해)와 row number를 전송(RAS를 통해)한다.(새로운 row에 액세스 하기 전에 bank는 precharge된 상태이어야 한다.)row가 다른 bank에 있는 경우 → 이전 row를 닫고 precharge하는 동안 새로운 row에 액세스하는 것과 overlap.
- row가 동일한 bank에 있는 경우 → precharge delay가 발생한다.
- 그런 다음 column address가 전송되며, single item request인지 burst request인지에 따라 1개 이상의 data item을 전송할 수 있다
더 넓은 DRAM, burst transfer, Double Data Rate는 모두 memory bandwidth가 증가하도록 하는 데에 기여함
SDRAM에서 Power consumption을 줄이는 방식
dynamic memory chip에서 power consumption은 dynamic power와 static power로 구성되며, 이는 모두 operating voltage에 의존한다. bank의 추가는 single bank의 row만을 읽도록 하기 때문에 power를 감소시킨다.
또한 SDRAM은 power-down모드를 지원하여 clock을 무시하도록 하였다.
Packaging Innovation: Stacked or Embedded DRAMs = HBM
2017년 DRAM에는 circuit innovation보다 packaging innovation이 일어났다.
이는 multiple DRAM을 프로세서와 동일한 package에 stack구조 혹은 인접하게 배치하는 방식이다.
Embedded DRAM = DRAM이 프로세서 칩과 동일한 위치에 놓인 구조
DRAM과 프로세서를 동일한 패키지에 놓게 되면 DRAM과 프로세서 간 delay를 줄여 latency를 줄일 수 있다.
그리고 DRAM과 프로세서 간 connection이 더 빨라지기 때문에 bandwidth가 증가한다.
HBM 기술 = die stacking 기술
- solder bump technology를 사용해 충분한 열이 있는 상태에서 multiple DRAM die를 CPU die 위에 direct하게 놓고 stack 구조로 쌓아 올림
- DRAM만 stack하고 연결을 포함하는 interposer를 사용해 single package에서 CPU와 인접시킴
특정 case에서는 HBM을 main memory로 사용할 수 있긴 하지만, 현재는 cost면에서 제한이 있고 heat remove 관련 문제(특히 3D stacking)로 인해 일부 embedded application에서는 HBM 기술을 사용할 수 없는 경우도 있다.
Flash Memory
- Flash memory 는 EEPROM(Electronically Erasable Programmable Read-only Memory)의 한 종류로, read-only이지만 지워질 수 있다.
- Flash memory는 power을 소모하지 않고 data를 유지할 수 있는 비휘발성(non-volatile) 메모리이다.
- NAND Flash는 NOR Flash보다 높은 density를 가지며, large-scale non-volatile memory에 더 적합하다.
하지만 sequential한 방식으로 액세스되며 writing 작업이 느리다.
Flash 와 DRAM의 차이점
- Flash 메모리에서 read 동작은 sequential하며 전체 page를 한 번에 read해온다.
- NAND Flash는 임의의 address에서 첫 번째 byte에 액세스하는 데 시간이 25uS정도로delay가 길고 페이지 블록을 약 40MiB/s의 속도로 전송한다.
- DDR4 SDRAM은 첫 번째 byte에 액세스하는 데 약 40nS가 걸리며 페이지 블록을 약 4.80MiB/s의 속도로 전송한다.
- Flash memory는 overwrite되기 전에 erase되고 개별 byte 단위나 word 단위가 아닌 block 단위로 erase 된다. Flash는 SDRAM보다 write작업이 1500배 정도 느리고 magnetic disk 보다는 8~15배 빠르다. 그렇기 때문에 새로운 data가 flash에 write될 때에는 전체적인 block은 기존의 data와 나머지 data를 assemble해야 한다.
- Flash memory는 nonvolatile이다. 그리고 read와 write를 하고 있지 않을 때 power를 덜 소모한다.
- Flash memory는 특정 block이 write 될 수 있는 횟수를 제한한다. flash memory controller는 write 된 block을 memory 전체에 uniform하게 분산시킴으로써 flash memory의 수명을 최대화 하는 write leveling 작업을 진행한다.