WIL 5주차 CSAPP chapter6

김주민·2024년 2월 22일

csapp

목록 보기
7/8

chapter6 메모리 계층구조

어떻게 시스템이 데이터를 메모리 계층구조에서 위아래로 이동시키는 지 이해한다면
데이터를 계층의 상부에 저장시켜 CPU가 보다 빨리 접근하게 프로그램 작성 가능

주요 내용

  • 캐시 친화적 코드를 작성해라
  • 지역성이 높은 코드를 작성해라

6.1

6.1.1 랜덤 접근 메모리 (RAM, Random Access Memory)

정적 RAM (static ram) - cache memory

  • 각 비트를 이중안정(bistable) 메모리 셀에 저장
  • 이중안정 : 좌or우로 기울어진 상태가 안정적임
  • 전원이 공급되는 한 무한히 유지. 외압에 흔들려도 다시 안정 유지

동적 RAM (dynamic ram) - Main memory, frame buffers

  • 각 비트를 캐퍼시티에 저장
  • 외압에 민감
  • 낮은 밀도, 비싸고 전력 소모 많음

일반 DRAM

  • DRAM 구조는 이차원 배열
  • RAS(row access strobe), CAS(column access strobe) 요청으로 배열의 원소(슈퍼셀)에 접근
  • 이차원 배열 덕에 칩의 주소핀이 적게 들지만, 주소가 두 단계라 접근 시간 증가.

메모리 모듈

Enhanced DRAM

  • Fast page mode DRAM (FPM DRAM) : 같은 행에 연속적 접근, 최초의 RAS/CAS를 받고 이 후엔 CAS 요청만 받는다.
  • Extended data out DRAM (EDO DRAM) : FRPM DRAM을 개선한 형태. 각 CAS 신호가 더 촘촘한 간격으로 발생
  • Synchronous DRAM (SDRAM) : FPM, EDO 보다 자신의 슈퍼셀의 내용을 대응하는 비동기형 메모리에서 보다 빨리 내용 출력 가능
  • Double Data-Rate Synchronous DRAM (DDR SDRAM) : 두 개의 클럭 에지 모두를 제어 신호로 사용하여 DRAM 속도를 두 배로 올림, SDRAM의 개선 형태
  • Video RAM (VRAM) : 그래픽 시스템의 프레임 버퍼. FPM과 같은 개념. URAM은 읽기 작업과 쓰기 작업이 동시에 가능

비휘발성 메모리

  • Read-only memory (ROM)
  • Programmable ROM (PROM) : 단 한번 프로그램 가능. 전류를 흘리면 끊어지는 fuse 존재
  • Erasable programmable ROM (EPROM) : 105번 재프로그램. 자외선 비추기로 지울 수 있음. Flash memory

메인 메모리에 접근

  • 버스 (bus) : 주소, 데이터, 제 신호를 포함하는 병렬 선의 집합

DMA (Direct Memory Access) : I/O bus로 바로 main memory로

  • CPU의 중재없이 주변 장치가 직접 메모리에 접근하여 데이터를 읽고 쓸 수 있게 하는 것.
  • CPU의 개입이 없어서 CPU는 다른 작업 수행 가능 -> 시스템 성능 향상
  • CPU 부하가 감소하여 전체 시스템 효율 증가
  • 데이터 전송 속도 향상으로 전반적 시스템 응답시간 단축

6.1.3 Solid State Disks (SSD)

플래시 메모리 사용
반도체라 움직이는 부품이 없음
HDD보다 접근 시간이 빠르고, 전력 소모 적고, 견고함

6.1.4 저장 장치 기술 동향

저장 장치들은 가격, 성능 간의 절충 과정 존재 (trade-off) - 둘은 반비례 한다
CPU 성능에 뒤쳐지는 DRAM, Disks.
(SRAM은 거의 쫓아가려고 함. SRAM은 100배 성장, DRAM은 10배 성장)

6.2 지역성 Locality

지역성 : 최근 참조한 데이터 근처에 참조하려는 경향. 하드웨어, 운영체제, 응용 프로그램 설계에서 성능에 큰 영향을 준다.

  • 좋은 시간 지역성 : 한 번 참조된 메모리 위치는 곧 다시 참조될 가능성이 높음 (for문 안의 cnt변수)
  • 좋은 공간 지역성 : 메모리 위치가 참조되면 곧 근처의 메모리 위치를 참조할 가능성 높음 (for문 안 arr)

6.2.1 프로그램 데이터 참조의 지역성

  • sum : 좋은 시간 지역성, 공간지역성은 존재하지 않음
  • vec : 좋은 공간 지역성, but 각 원소는 한 번만 : 나쁜 공간 지역성
  • 함수가 루프 본체 내의 각 변수들에 대해 좋은 공간/시간 지역성 -> 좋은 지역성 함수

Stride-K 참조 패턴

  • k 크기의 보폭만큼 이동 후 참조
  • stride-1이 가장 공간 지역성이 높음

  • m x n 에서 cols부터 읽을 시 stride-m 으로 참조한다. -> 행부터 읽어야 stride-1

6.2.3 지역성 요약

  • 동일한 변수들을 반복적으로 참조하는 프로그램은 좋은 시간 지역성
  • stride-k 참조 패턴은 stride-1이 제일 좋은 공간 지역성
  • 루프는 인스트럭션 선입에 대해 좋은 시간/공간 지역성 가짐, 루프 본체가 작을 수록 로프 반복 실행의 수가 커지고 지역성 좋음

6.3 메모리 계층 구조

6.3.1 메모리 계층 구조에서의 캐시


블록 단위로 캐시에 데이터를 퍼나름
읽어 올릴 때 or 써내려갈때 : 모두 캐시를 이용

캐시적중 cache hit, 캐시미스 cache miss

  • k+1 레벨에 가기 전에 현재 레벨에 캐시에서 데이터가 있는 경우
  • 반대는 miss

교체 정책

  • 캐시 미스 + 모든 블록이 full -> 기존 블록에 덮어씀

6.4 캐시 메모리

6.4.1 기본 캐시 메모리 구조

구성 : (S, E, B, m). M = 2^m, m 비트의 컴퓨터 시스템. S : sets 집합, E : lines 집합의 줄, B : blocks 줄 당 블록

  1. s bits 보고 집합 접근
  2. valid 가 1 & tag bits 일치 시 line에 접근
  3. b bits에 block offset. offset만큼 이동하면 데이터가 캐시에 들어있음
  • 직접 매핑 : 집합 당 라인 1개. E = 1
  • 집합 결합성 캐시 : 집합 당 여러 개의 라인, 미스 발생 시 최소 빈도 사용 LFU, 최소 최근 사용 : LRU
  • 완전 결합성 : 집합이 1개, VM에서 페이지 테이블 엔트리를 캐싱하는 TLB(translation look-aside buffers)와 같이 작은 캐시에서만 적절.

0개의 댓글