IT 프로그래밍/컴퓨터구조

[컴퓨터구조] 메모리 계층

기술1 2024. 12. 18. 16:24
반응형

캐시 : cpu와 주기억장치 사이에 위치한 고속의 작은 메모리로 자주 사용되는 데이터를 저장하여 메모리 접근 속도 향상

L1캐시 : 캐시 계층 구조에서 CPU에 가장 가까운 캐시 

CPI : 명령어 하나를 실행하는 데 필요한 클럭 사이클 수

Miss Rate : 캐시에서 원하는 데이터를 찾지 못하는 비율

메인 메모리 접근 시간 : 캐시 미스가 발생했을 때 메인 메모리에 접근하여 데이터를 가져오는 데 걸리는 시간

평균 메모리 접근 시간 : 캐시 접근 시간과 메인 메모리 접근 시간을 고려한 평균적인 메모리 접근 시간

 

AMAT = Hit Time + (Miss Rate * Miss Penalty)

 

Hit time : 캐시에서 데이터를 찾았을 때 걸리는 시간

Miss Penalty : 캐시 미스가 발생했을 때 메인 메모리에 접근하여 데이터를 가져오는 데 걸리는 시간 

 

 Miss penalty = 메인 메모리 접근 시간

Hit Time = cycle time

 

miss rate, miss penalty

Miss Rate

CPU가 캐시에서 원하는 데이터를 찾지 못하는 비율입니다. 미스율이 낮을수록 캐시의 효율은 높습니다.

 

Miss Penalty

캐시 미스가 발생했을 때, 메인 메모리에서 데이터를 가져오는 데 걸리는 시간입니다. 미스 패널티가 낮을수록 캐시 미스에 대한 성능 저하가 적습니다.

 

버스 폭(Bus Width) : CPU와 메인 메모리 사이의 데이터 전송 통로의 폭입니다. 버스 폭이 넓을수록 한 번에 전송할 수 있는 데이터의 양이 많아집니다. 

 

메모리 폭(Memory Width) : 메모리에서 한 번에 읽어올 수 있는 데이터의 양입니다. 메모리 폭이 넓을수록 한 번의 메모리 접근으로 더 많은 데이터를 가져올 수 있습니다.

 

버스 폭과 메모리 폭이 증가하면 메인 메모리에서 데이터를 가져오는 속도가 빨라집니다. 따라서 캐시 미스가 발생했을 때 필요한 시간, 즉 미스 패널티가 감소합니다.

 

집합 연관 사상(Set Associative Mapping) : 캐시 메모리 사상 방식 중 하나로, 각 캐시 세트가 여러 개의 블록을 가질 수 있도록 합니다. Direct Mapping에 비해 충돌이 적게 발생하여 미스율을 감소시키는 효과가 있습니다.

 

Direct Maaping은 각 메모리 블록이 캐시의 특정 위치에만 사상되는 반면, Set Associative Mapping은 여러 위치 중 하나에 사상될 수 있기 때문에 유연성이 높습니다. 

 

Out-of-Order CPU (비순차적 실행 CPU) : 명령어의 실행 순서를 데이터 의존성과 실행 가능성에 따라 동적으로 조절하여 파이프라인의 효율성을 높이는 CPU로 캐시미스가 발생하면 해당 명령어를 기다리는 동안, 데이터 의존성이 없는 다른 명령어들을 먼저 실행함으로써 CPU의 유휴 시간을 줄입니다.

 

캐시 미스로 인한 성능 저하를 완화시켜 미스 패널티의 영향을 감소시키는 효과가 있습니다. 

 

Multilevel Cache(다단계 캐시) : 여러 게층의 캐시를 사용하는 방식입니다. CPU에 가까운 L1캐시는 빠르지만 용량이 작고, 그 다음 계층의 캐시는 속도는 느리지만 용량이 더 큽니다.

 

캐시 미스가 발생했을 때, 바로 메인 메모리로 가는 것이 아닌 다음 계층의 캐시를 먼저 확인 후 캐시에 데이터가 있다면 메인 메모리보다 훨씬 빠르게 데이터를 가져올 수 있으므로 미스 패널티가 감소합니다. 

 

또한 여러 계층의 캐시를 사용함으로써 전반적인 미스율도 감소시키는 효과가 있습니다.

 

Cache hit 조건

캐시 히트(Cache Hit) : CPU가 요청한 데이터가 캐시에 존재하는 경우

캐시 미스(Cache Miss) : CPU가 요청한 데이터가 캐시에 존재하지 않는 경우

 

주소 구성 

-Tag : 캐시에서 데이터의 유효성을 확인하는 데 사용

-Index : 캐시의 어떤 세트 또는 블록을 찾아야 하는지 알려줌

-Offset : 캐시 블록 내에서 원하는 데이터 위치 알려줌

 

Valid bit은 해당 캐시 라인에 유효한 데이터가 저장되어 있는지 여부를 나타내는 비트입니다. 주소의 특정 부분과 일치하는지 여부를 확인하는 것이 아닙니다. 단순히 1이면 유효한 데이터, 0이면 유효하지 않은 데이터를 의미합니다. 

 

Index로 찾은 tag값이 이에 대응하는 주소 부분과 일치

INDEX를 사용하여 캐시의 특정 부분을 찾은 후, 해당 위치에 저장된 Tag 값과 메모리 주소의 Tag 부분을 비교합니다. 두 값이 일치해야 캐시 히트가 발생합니다. 

 

Index로 찾은 Valid bit이 1이라는 것은 해당 캐시 라인에 유효한 데이터가 있다는 것입니다. 이것은 캐시 히트의 필수 조건입니다. Valid bit이 0이면 해당 라인은 비어있는 곳으로 간주하고 캐시 미스로 처리합니다.

 

Byte offset은 캐시 히트 여부와는 직접적인 관련이 없습니다.

 

Cache의 Block 수 증가하였을 때 

  • 캐시 블록 또는 캐시 라인 : 캐시와 메인 메모리 사이에서 데이터를 전송하는 최소 단위
  • 공간적 지역성 : 어떤 데이터에 접근했을 때, 그 주변의 데이터에도 곧 접근할 가능성이 높다는 원리
  • 미스 패널티 : 캐시 미스가 발생했을 때, 메인 메모리에서 데이터를 가져오는 데 걸리는 시간

캐시의 전체 크기가 고정되어 있다면, 블록 크기가 증가할수록 캐시에 저장할 수 있는 블록의 개수는 줄어듭니다. 블록 수가 줄어들면서 서로 다른 메모리 주소들이 같은 캐시 위치에 사상될 확률이 높아집니다. 즉 충돌이 발생할 수 있으며 이는 MissRate의 증가로 발생합니다. 

 

블록 크기가 커지면 캐시 미스가 발생했을 때 메인 메모리에서 가져와야 하는 데이터의 양이 많아집니다. 데이터를 전송하는 데 걸리는 시간은 전송해야 하는 데이터의 양에 비례하므로, 블록 크기가 클수록 미스 패널티가 증가합니다.

 

블록 크기가 커지면 한 번에 더 많은 데이터를 가져오게 됩니다. 공간적 지역성 원리에 따라, 현재 접근한 데이터 주변의 데이터도 곧 필요하게 될 가능성이 높으므로, 큰 블록 크기는 이러한 주변 데이터까지 미리 캐시에 가져오는 효과를 가져오며 이는 미스율을 감소할 수 있습니다.

 

블록 크기가 커지면 미스 발생 시 가져와야 할 양이 증가하므로 미스 패널티는 증가합니다.

 


ps. 캐시 블록 크기를 결정하는 것은 성능에 중요한 영향을 미치는 요소입니다. 작은 블록 크기는 공간적 지역성을 충분히 활용하지 못하여 미스율이 높아질 수 있고, 너무 큰 블록 크기는 충돌로 인한 미스율 증가와 미스 패널티 증가를 초래할 수 있습니다. 

 

따라서 시스템 특성과 워크로드를 고려하여 블록 크기를 설정해야 합니다.

 

캐시 쓰기 정책

  • Write-Through : 데이터를 캐시에 쓸 때마다 동시에 메인 메모리에도 쓰는 방식입니다.
  • Write-Back : 데이터를 캐시에만 쓰고, 메인 메모리에는 나중에 쓰는 방식입니다.
  • Dirty-Bit : Write-Back 방식에서 캐시 블록의 내용이 수정되었는지 여부를 나타내는 비트입니다. 1이면 수정됨 0이면 수정되지 않음을 의미합니다.
  • Write Buffer : Write-Through 방식에서 쓰기 작업을 임시로 저장하는 버퍼입니다. CPU가 쓰기 작업을 완료하기 위해 메인 메모리 쓰기가 완료될 때까지 기다리지 않도록 합니다.

Write-Through 방식은 데이터를 캐시에 쓸 때마다 동시에 메인 메모리에도 쓰기 때문에, 캐시와 메인 메모리의 데이터가 항상 일치합니다. 이는 불일치를 방지할 수 있습니다.

 

Dirty bit는 Write back 방식에서만 필요합니다. Write-Through 방식은 캐시와 메인 메모리의 데이터가 항상 일치하기 때문에 데이터가 수정되었는지 알 필요가 없습니다.

 

Write-Back 방식은 데이터를 캐시에만 쓰고, 실제 메인 메모리 쓰기는 나중에 수행합니다. 이때 Write Buffer를 사용하여 쓰기 작업을 임시로 저장해두고, CPU는 쓰기 작업이 완료될 때까지 기다리지 않고 다른 작업을 수행할 수 있습니다. 따라서 메모리에 데이터가 완전히 쓰여지기까지 기다릴 필요가 없습니다.

 

Write-Back 방식은 쓰기 발생 시 바로 메인 메모리에 변경 내용을 적용하지 않습니다. 변경된 내용은 캐시에만 저장되어 있다가, 해당 캐시 블록이 교체될 때 메인 메모리에 반영됩니다. 


Cache 사용되는 요소 

캐시메모리 : cpu와 메인 메모리 사이에 위치하여 CPU의 메모리 접근 속도를 향상시키는 고속의 작은 메모리

 

주소 구성

  • Tag : 캐시에 저장된 데이터가 어떤 메모리 주소의 데이터를 가지고 있는지 나타내는 부분
  • Index : 캐시의 어떤 위치를 찾아야 하는자 알려주는 부분
  • Offset : 캐시 블록 내에서 원하는 데이터의 위치를 알려주는 부분

Index는 캐시에서 데이터를 찾기 위한 첫 번째 단계로 사용됩니다. Index를 사용하여 캐시의 특정 위치를 선택합니다.  마치 책의 목차를 보고 원하는 챕터를 찾는 것과 유사합니다.

 

Tag는 Index로 찾은 위치에 저장된 데이터가 실제로 원하는 데이터인지 확인하는 데 사용됩니다. Index로 찾은 위치에 여러 개의 데이터가 저장될 수 있기 때문에 Tag를 비교하여 정확한 데이터를 식별합니다. 구별하는 역할을 합니다.

 

Valid bit

valid bit은 해당 캐시 라인에 유효한 데이터가 저장되어 있는지 여부를 나타내는 비트입니다. 데이터의 유효성을 확인하는 데 사용될 뿐, 주소와 함께 데이터를 찾는 데 직접적인 역할을 하진 않습니다.

 

Data

데이터는 실제로 캐시에 저장된 데이터 자체입니다. 

 

 

Direct Mapped Cache vs Set Associative Cache

 

  • Direct Mapped Cache : 각 메인 메모리 블록이 캐시의 단 하나의 위치에만 사상되는 방식
  • Set Associative Cache : 각 메인 메모리 블록이 캐시의 여러 위치 중 하나에 사상될 수 있는 방식

Set Associative Cache는 DMC에 비해서 더 많은 하드웨어 자원을 소모합니다. 또한 비교기와 여러 개의 블록 중 하나를 선택하기 위한 멀티플렉서 등이 추가로 필요합니다.

 

Set Associative Cache는 미스율이 Direct Mapped Cache에 비해서 낮습니다. Direct는 하나의 캐시 위치에만 사상되므로 서로 다른 메모리 블록이 같은 캐시 위치에 사상되는 충돌이 발생하기 쉽습니다.

 

하지만 Set Associative Cache는 각 메모리 블록이 여러 개의 캐시 위치 중 하나에 사상될 수 있으므로 충돌 발생 확률이 낮아져 미스율이 감소합니다. 

 

Direct Mapped Cache는 메모리 블록이 단 하나의 위치에만 사상되므로 교체할 블록을 선택할 필요가 없지만 Set Associative Cache는 세트 내의 여러 블록 중 어떤 블록을 교체할지 결정해야 합니다. 알고리즘 비용 측면에서는 Direct가 더 유리합니다. 

 

미스 패널티는 미스 발생 시 메모리에서 데이터를 가져오는 데 걸리는 시간을 의미합니다.  미스 패널티 자체에 캐시의 사상방식은 영향을 주지 않습니다. 접근 속도, 버스 속도, 블록 크기에 의해서 미스패널티는 결정이 됩니다.

 

메모리 계층 구조

메모리 계층 구조

CPU와 메인 메모리 사이의 속도 차이를 극복하기 위해 여러 계층의 메모리를 사용하는 구조, 속도가 빠르고 용량이 작은 메모리로부터 속도가 느리고 용량이 큰 메모리까지 계층적으로 구성됩니다.

 

지역성의 원칙

프로그램이 실행되는 동안 특정 시점에는 일부 데이터와 명령어에 집중적으로 접근하는 경향을 의미합니다. 시간적 지역성, 공간적 지역성으로 나뉩니다. 

 

Trade-off

두 가지 이상의 목표를 동시에 달성하기 어려운 관계를 의미합니다. 하나를 얻기 위해서는 다른 하나를 포기해야 하는 상황을 말합니다.

 

메모리는 크기가 크고 빠를수록 좋지만, 크기와 속도는 상충관계에 있습니다. 속도가 빠른 메모리는 용량이 작고 비싸며, 용량이 큰 메모리는 속도가 느리고 가격이 저렴합니다. 이 두개를 만족시킬 수는 없습니다.

 

CPU와 가까운 메모리 계층(레지스터, 캐시 등)은 CPU의 연산 속도에 맞춰 데이터를 빠르게 제공해야 하므로 저장 용량보다는 속도가 중요합니다. CPU가 메모리에서 데이터를 기다리는 시간을 최소화하는 것을 목표로 삼고 있습니다.

 

속도가 빠른 메모리는 속도가 느린 메모리보다 제조 비용이 높습니다. 따라서 CPU와 가까운 메모리 계층일수록 저장 용량당 가격이 비싼 경향이 있습니다. 

 

메모리 계층 구조는 시간의 지역성과 공간의 지역성의 원칙을 이용하여 작동합니다. 주로 사용되는 데이터는 CPU와 가까운 빠른 메모리에 저장하고, 그렇지 않은 데이터는 상대적으로 느린 메모리에 저장함으로써 전체적인 메모리 접근 속도를 향상시킵니다.

 

Cache 설계 미스 패널티 영향력

  • 미스 (miss) : CPU가 요청한 데이터가 캐시에 없는 경우
  • 미스율(MissRate) : 전체 메모리 접근 횟수 중 미스가 발생하는 비율, 낮을수록 좋음
  • 미스 패널티(MissPenalty) : 캐시 미스가 발생했을 때, 메인 메모리에서 데이터를 가져오는 데 걸리는 시간, 짦을수록 좋음
  • 강제 미스(Compulsory Miss) : 처음으로 데이터에 접근할 때 발생하는 미스, 캐시가 비어있기 때문에 발생하는 불가피한 미스
  • 용량 미스 (Capacity Miss) : 캐시의 용량이 부족하여 발생하는 미스, 필요한 모든 데이터를 캐시에 담을 수 없기에 발생
  • 연관성(Associativity) : Set Associative Cahce에서 각 세트가 몇 개의 블록을 가질 수 있는지를 나타내는 정도
  • 블록(Block) : 캐시와 메인 메모리 사이에서 데이터를 전송하는 단위

캐시 크기가 증가하면 용량 미스는 감소합니다. 충돌 미스는 매핑 방식과 관련이 있습니다(Direct mapped, Set Associative 등) 캐시 증가와는 직접적인 관련이 적습니다. 

 

연관성(Associativity)가 증가한다면 충돌 미스는 감소합니다. 각 세트에서 선택할 수 있는 블록의 수가 늘어나기 때문입니다. 용량 미스는 캐시의 전체 크기에 의해 결정되므로, 연관성 증가와는 관련이 적습니다. 연관성이 증가하면 비교해야 할 태그의 수가 늘어나므로, 캐시 접근 시간이 약간 증가할 수 있습니다. 

 

블록 크기가 증가하면 강제 미스(Compulsory miss)가 감소합니다. 한 번에 더 많은 데이터를 가져오기 때문에, 이후에 필요한 데이터를 미리 캐시에 가져오는 효과가 있습니다. 하지만 블록 크기가 커지면 미스 발생 시 메인 메모리에서 데이터 양이 많아지므로 미스 패널티가 증가합니다. 

 

 

반응형