Chap 5- Memory(1)

2023. 5. 31. 19:03컴퓨터구조

728x90

*Temporal locality : 곧 다시 접근할 것 같은 데이터

ex) 루프안의 있는 것들

Spatial locality: 최근에 접근했던 데이터 근처에 있는 데이터

ex) 배열 데이터, 순차적 명령

 

 

* disk -> Main memory(DRAM) -> Cache memory(SRAM) 

오른쪽으로 갈수록 상위레벨

 

 

*용어 

Block: 복사하는 단위

Hit: 만약 접근하려는 데이터가 상위 레벨에 존재한다면 상위레벨에서 빠르게 가져옴

Miss: 접근하려는 데이터가 하위레벨에 존재한다면 하위레벨에서 가져옴

-> 시간적 페널티가 생김(miss penalty)

 

 

DRAM

row 단위로 데이터 접근

 

DDR: 클럭이 오를때와 떨어질 때 모두 데이터 전송 가능

QDR: 원래는 input과 output이 공유해서 출력을 하는동안은 입력하지 못함
->QDR은 input과 output을 구분해놓아서 입력하자마자 출력 가능

 

성능 향상 요인

  • Row buffer: 버퍼에 저장해놓으면 동일한 데이터를 읽을 때 버퍼에서 읽으면 됨
  • Synchronous DRAM: 연속적인 접근을 가능하게 해줌
  • DRAM banking: 여러개의 DRAM으로부터 동시적인 접근을 가능하게 해줌

 

 

Flash Storage

  • 비휘발성 저장소
  • 디스크보다 빠르고 튼튼, 저전력
  • 대신 디스크보다 비쌈
  • 1000번 정도 접근하면 손상 가능성 있음

 

 

type

  • NOR flash: 랜덤으로 읽기/쓰기 접근
    명령어 메모리로 사용
  • NAND flash: 한번에 block 단위로 접근
    USB로 사용

 

 

Disk

Sector

  • 데이터, Error correction code(ECC), 섹터 아이디 저장
  • 섹터에 접근해서 데이터 읽는데 걸리는 시간
    1.  다른 섹터 접근중이라면 Queuing delay
    2. Seek: 디스크 헤드를 움직여 해당 섹터 찾기
    3. Rotational latency: 디스크 헤드가 찾은 섹터로 회전하는데 걸리는 시간
    4. Data transfer : 데이터 전송시간
    5. Controller overhead

예) 
512B sector, 15,000rpm, 4ms average seektime, 100MB/s transfer rate, 

0.2ms controller overhead, idle disk 일 때 평균 read time?

-> idle: 0ms

Seek: 4ms

Rotational latency : 1/2 / (15,000/60)=2ms  // 회전은 양방향으로 가능하므로 거리는 1/2이 됨

Data transfer: 512/(100*1000)=0.005ms

Controller overhead: 0.2ms

Total: 6.2ms

 

 

 

 

Cache memory

cpu와 가장 가까운 계층의 메모리

 

 

Direct Mapped Cache

: 오직 하나의 선택지만 존재

블록 index: 블록 주소 % 캐쉬의 블록 개수

 

블럭이 2의 n승 꼴이라면 주소의 하위비트를 사용하여 맵핑
-> 예제에서는 하위3비트가 같은 것끼리 맵핑

 

*특정 블록이 캐쉬 어디에 저장되어있는지 어떻게 알 수 있나?

-> tag: 상위 비트 주소만 필요

Valid bit: 그 위치에 데이터가 저장되있다면 1, 없다면 0

 

예) 8-blocks, 1 word/block, direct mapped

상위 2비트는 태그에 저장, 하위 3비트와 캐쉬블록의 인덱스가 같은 곳에 정보 저장

만약 110인덱스에 다른 값을 저장하려면 원래 있던 값은 없어지고 저장됨.

 

 

AND 게이트: tag와 index가 일치하면 Hit

블록 1개 크기가 1word(32bit=4byte)

-> 메모리 주소의

0,1 비트는 Byte offset : 2bit (1word는 4바이트이므로 몇번째 바이트인지 표시하기 위함)

2~11 비트는 Index : 10bit (Index가 0부터 1023까지 있으므로)

나머지 12~31비트는 tag : 20bit

                    

 

64 blocks, 16bytes/block 

-> 메모리 주소의 

0,3 비트는 Byte offset: 4bit(16바이트이므로 16번째 바이트까지 표시해야 하므로 2^4=16)

4~9비트는 Index: 6bit (블록의 개수-> 2^6=64)

나머지 10~31비트는 tag: 22bit

 

이 때 주소 1200은 어디에 맵핑해야 하나?

-> 16바이트이므로 1200/16의 내림값=75, 75 % 64 =11

-> 75번 블록에 11번째 인덱스

 

 

* 큰 블록이면 miss rate를 줄일 수 있다
-> 근처 데이터를 보통 읽기 때문

그러나 캐쉬에 크기는 고정되어있다
-> 큰 블록일수록 들어갈 자리는 줄어들게 되므로 경쟁이 심화된다
-> miss rate가 증가한다.

 

 

 

 

Write-Through

캐쉬에 업데이트 한 값을 메모리에도 즉시 업데이트 

-> 많은 시간이 걸리게 됨

해결법:

write buffer: write 할 데이터들을 모아놓고 한번에 순차적으로 write

CPU는 계속 할 일을 하다가 버퍼가 꽉 차면 stall하고 메모리로 업데이트

 

Write-Back

  • 캐쉬에 값만 업데이트 ->그때 캐쉬 블록을 dirty block이라 함
  • dirty block 추적은 하고있음
  • 캐쉬값을 다른 곳에 옮겨놓아야 할 때 메모리에 write

 

* write miss가 날 경우는 ?

  • miss 난 데이터 하위계층에서 fetch
  • 초기화처럼 데이터를 write 하지 않아도 될 경우는 fetch 해오지 않는다.

 

* 메인 메모리는 고정된 width의 버스와 연결

* 버스 클락이 일반적으로 씨피유 클락보다 느리다

 

cache block이 read하는데 걸리는 시간 예

  • 주소 전송에 1 버스 사이클
  • 메인메모리 접근시간 당 15 버스 사이클
  • 데이터 전송에 1 버스 사이클

위의 예일 때 4-word block인 캐쉬를 채우기 위해 1-word-wide DRAM으로 몇 사이클이 필요한가?

miss penalty=1+ 4*15+ 4*1=65 bus cycles 

bandwidth= 16bytes(4 word이므로) / 65 cycles =0.25 B/cycle

 

 

 

 

캐쉬 성능 측정하기

cpu time = 프로그램 실행 사이클 + 메모리 stall 사이클(캐쉬 미스가 일어났을 때 손해보는 사이클 수)

 

메모리 stall 사이클

= 메모리 접근 횟수/프로그램 * Miss rate * Miss penalty

 

예) 

위의 예일 때 CPI를 계산해보자

1. Miss CPI

I-cache: 0.02*100=2

D-cache: 0.04*100*0.36(명령어에서 load&store 명령이 차지하는 비율)=1.44

2. CPI

= 2+ 2+1.44=5.44

 

 

 

 

Average memory access time(AMAT)

Hit time( 원하는 것이 cache에 있는지 확인하는 시간) + Miss rate* Miss penalty

 

예) CPU clock= 1ns

hit time= 1 cylce

miss penalty= 20 cycles

I-cashe miss rate=5%

-> AMAT=1+0.05*20=2ns 

-> 2 cycles per instruction

-> 메모리에 접근하면 평소보다 2배가량 느려짐

 

 

 

CPU 성능이 향상되려면?

1. base CPI를 줄여야함

-> 메모리 stall에 많은 시간을 씀
2. clock rate를 늘려야함
--> 캐쉬 miss 부분을 개선해야함

728x90

'컴퓨터구조' 카테고리의 다른 글

chap 5-Memory(3)  (0) 2023.06.08
chap 5- Memory(2)  (0) 2023.06.01
Chap 4. Processor  (2) 2023.05.26
chap3 - Arithmetic for Computers  (0) 2023.04.12
컴퓨터구조 전공수업 ch02  (1) 2023.03.26