μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

μΊμ‹œλž€?

changy0ng 2022. 7. 28. 10:18

πŸŽμΊμ‹œμ˜ 의미

πŸ‘‰ 자주 μ“°λŠ” 데이터λ₯Ό μ›λž˜ μ €μž₯된 곳보닀 속도가 더 λΉ λ₯Έ μž„μ‹œ μ €μž₯μ†Œ(μΊμ‹œ)에 μ €μž₯ν•΄μ„œ, 데이터λ₯Ό λΉ λ₯΄κ²Œ μ½μ–΄μ˜¬ 수 μžˆκ²Œλ” ν•˜λŠ” 것이 μΊμ‹œ

 

크게 두가지 경우

ex1) CPU 코어와 λ©”λͺ¨λ¦¬ μ‚¬μ΄μ˜ 병λͺ© ν˜„μƒ μ™„ν™”(ν”„λ‘œμ„Έμ„œμ—μ„œμ˜ μΊμ‹œ)
ex2) μ›Ή λΈŒλΌμš°μ € μΊμ‹œ νŒŒμΌμ€, ν•˜λ“œλ””μŠ€ν¬μ™€ μ›ΉνŽ˜μ΄μ§€ μ‚¬μ΄μ˜ 병λͺ© ν˜„μƒμ„ μ™„ν™”(λ©”λͺ¨λ¦¬, λ””μŠ€ν¬, μ›Ήμ„œλ²„μ—μ„œμ˜ μΊμ‹œ)

πŸ“Œλ³‘λͺ©ν˜„상(bottleneck) 

πŸ‘‰ 즉 담을 수 μžˆλŠ” λ°μ΄ν„°μ˜ 양은 μ μœΌλ‚˜ ν•œκΊΌλ²ˆμ— λ§Žμ€ μ–‘μ˜ 데이터가 μœ μž… 됨으둜써 컴퓨터가 λŠλ €μ§€λŠ” ν˜„μƒ

 

ν”„λ‘œμ„Έμ„œμ—μ„œμ˜ μΊμ‹œλž€ CPU와 메인메λͺ¨λ¦¬μ˜ μ²˜λ¦¬μ†λ„μ—μ„œ 크게 νš¨κ³Όκ°€ λ‚˜λŠ”λ° 맀번 일반적으둜 μ²˜λ¦¬ν•˜λ©΄ 속도가 ν˜„μ €νžˆ 느리기 λ•Œλ¬Έμ— μ˜€λ²„ν—€λ“œκ°€ μ»€μ§€κ²Œ 되고 자주 μ“°λŠ” 데이터λ₯Ό 메인메λͺ¨λ¦¬λ³΄λ‹€ 더 λΉ λ₯Έ μΊμ‹œ λ©”λͺ¨λ¦¬μ— λ‘μ–΄μ„œ 더 빨리 μ½μ–΄μ˜¬μˆ˜ 있게 ν•œλ‹€.

 

λΈŒλΌμš°μ €μ—μ„œμ˜ μΊμ‹œλž€ μ›ΉνŽ˜μ΄μ§€κ°€ 가지고 μžˆλŠ” μ΄λ―Έμ§€λ‚˜ μš©λŸ‰μ΄ 큰 μ–΄λ–€ λ°μ΄ν„°μ˜ 사본을 가지고 μžˆμ„λ•Œ μ‚¬μš©μžκ°€ νŽ˜μ΄μ§€λ₯Ό μž¬λ°©λ¬Έν• λ•Œ 데이터λ₯Ό μ™„μ „νžˆ λ‹€μ‹œ λ‹€μš΄λ‘œλ“œ ν•˜λŠ”κ²ƒλ³΄λ‹€λŠ” 둜컬 사본을 μ‚¬μš©ν•˜λŠ” 것이 훨씬 λΉ λ₯΄λ‹€.

πŸ“ŒμΊμ‹±μ˜ κ³Όμ •  

정보λ₯Ό 블둝 λ‹¨μœ„λ‘œ λ™μ‹œμ— λΆˆλŸ¬μ˜€κ²Œλ˜λŠ”λ° 예λ₯Όλ“€μ–΄μ„œ 단일 λ°”μ΄νŠΈμ— λŒ€ν•œ μš”μ²­μ΄ μ˜¨λ‹€λ©΄ κ·Έ 주변에 μ—°μ†λœ λ©”λͺ¨λ¦¬ μœ„μΉ˜λ₯Ό ν¬ν•¨ν•œ 블둝 λ˜ν•œ λΆˆλŸ¬μ˜¨λ‹€ μ™œλƒν•˜λ©΄ μΈμ ‘ν•œ 정보듀은 곧 μ‚¬μš©λ  κ°€λŠ₯성이 λ†’μœΌλ―€λ‘œ 미리 λΆˆλŸ¬μ™€μ„œ ν•„μš”ν• λ•Œλ§ˆλ‹€ μΊμ‹œμ—μ„œ λ°”λ‘œ κΊΌλ‚΄κΈ° μ’‹κΈ° λ•Œλ¬Έμ΄λ‹€.

 

πŸŸ₯ κ°€μž₯ κ°€κΉŒμ΄ λ³Όμˆ˜μžˆλŠ” μΊμ‹œ μ’…λ₯˜ :

ν”νžˆ μ“°λŠ” VSCode, μ›Œλ“œ, μ—‘μ…€ 같은 ν”„λ‘œκ·Έλž¨μ„ 처음 컴퓨터λ₯Ό ν‚€κ³  λ‹€μ‹œ 끄고 
λ‹€μ‹œ μ‹€ν–‰ν•΄λ³Έλ‹€λ©΄ λ‘λ²ˆμ§Έ μΌ°μ„λ•Œ 속도가 ν˜„μ €νžˆ λΉ λ₯Όκ²ƒμ΄λ‹€. 그것은 ν”„λ‘œκ·Έλž¨μ˜ 
λͺ…λ Ήμ–΄κ°€ 아직 λ©”λͺ¨λ¦¬μ— 있고 λ©”λͺ¨λ¦¬κ°€ λ””μŠ€ν¬μ— λŒ€ν•œ μΊμ‹œλ‘œ μ‚¬μš©μ΄ 되기 λ•Œλ¬Έμ΄λ‹€. 
그리고 졜근 파일 같이 λœ¨λŠ” 것도 λ˜ν•œ μΊμ‹œμ΄λ‹€.

πŸ“ŒμΊμ‹œμ˜ μ„±λŠ₯ 

μž‘μ€ μš©λŸ‰μ˜ μΊμ‹œ λ©”λͺ¨λ¦¬μ— CPU κ°€ 이후에 μ°Έμ‘°ν• , μ“Έλͺ¨ μžˆλŠ” 정보가 μ–΄λŠ 정도 λ“€μ–΄μžˆλŠλƒμ— 따라 쒌우되기 λ•Œλ¬Έμ΄λ‹€. μ΄λ•Œ μ μ€‘μœ¨(Hit Rate)을 κ·ΉλŒ€ν™” μ‹œν‚€κΈ° μœ„ν•΄  데이터 지역성 원리(Locality)λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ§€μ—­μ„±μ˜ μ „μ œμ‘°κ±΄μœΌλ‘œ ν”„λ‘œκ·Έλž¨μ€ λͺ¨λ“  μ½”λ“œλ‚˜ 데이터λ₯Ό κ· λ“±ν•˜κ²Œ μ—‘μ„ΈμŠ€ ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” νŠΉμ„±μ„ 기본으둜 ν•œλ‹€. 즉 지역성 μ›λ¦¬λž€ κΈ°μ–΅ μž₯치 λ‚΄μ˜ 정보λ₯Ό κ· μΌν•˜κ²Œ μ—‘μ„ΈμŠ€ ν•˜λŠ” 것이 μ•„λ‹Œ μ–΄λŠ ν•œ μˆœκ°„μ— νŠΉμ • 뢀뢄을 μ§‘μ€‘μ μœΌλ‘œ μ°Έμ‘°ν•˜λŠ” νŠΉμ„±μΈ 것이닀.

 

데이터 지역성은 크게 μ‹œκ°„ 지역성(Temporal Locality)κ³Ό 곡간 지역성(Spatial Locality)으둜 λ‚˜λ‰©λ‹ˆλ‹€.

 

πŸ‘‰ μ‹œκ°„ 지역성 : μ΅œκ·Όμ— 참쑰된 μ£Όμ†Œμ˜ λ‚΄μš©μ€ 곧 λ‹€μŒμ— λ‹€μ‹œ μ°Έμ‘°λ˜λŠ” νŠΉμ„±.

πŸ‘‰ 곡간 지역성 : λŒ€λΆ€λΆ„μ˜ μ‹€μ œ ν”„λ‘œκ·Έλž¨μ΄ 참쑰된 μ£Όμ†Œμ™€ μΈμ ‘ν•œ μ£Όμ†Œμ˜ λ‚΄μš©μ΄ λ‹€μ‹œ μ°Έμ‘°λ˜λŠ” νŠΉμ„±

 

μΊμ‹œλŠ” μ‹œκ°„μ΄ 흐λ₯΄κ²Œ 되면 μ €μž₯된 λ©”λͺ¨λ¦¬ 이상 λ˜λŠ” μ‹œκ°„μ΄ κ½€ 흐λ₯Έ μΊμ‹œλ“€μ€ μžλ™μœΌλ‘œ μƒˆλ‘œ μ—…λ°μ΄νŠΈ 된 μΊμ‹œλ‘œ μ±„μš°κ²Œ 되며 졜근 파일 같은 것도 μ˜ˆμ „μ— μ €μž₯된 μΊμ‹œ λ©”λͺ¨λ¦¬ 같은 κ²½μš°λŠ” λ‹€ μžλ™μœΌλ‘œ μ—†μ–΄μ§ˆ κ²ƒμž…λ‹ˆλ‹€.

 

πŸ“Œ Catching Line 

λ‹€μ‹œ λ§ν•˜λ©΄ μΊμ‹œ(cache)λŠ” ν”„λ‘œμ„Έμ„œ κ°€κΉŒμ΄μ— μœ„μΉ˜ν•˜λ©΄μ„œ λΉˆλ²ˆν•˜κ²Œ μ‚¬μš©λ˜λŠ” 데이터λ₯Ό λ†”λ‘λŠ” μž₯μ†Œμž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ μΊμ‹œκ°€ 아무리 κ°€κΉŒμ΄ μžˆλ”λΌλ„ 찾고자 ν•˜λŠ” 데이터가 μ–΄λŠ 곳에 μ €μž₯λ˜μ–΄ μžˆλŠ”μ§€ λͺ°λΌ λͺ¨λ“  데이터λ₯Ό μˆœνšŒν•΄μ•Ό ν•œλ‹€λ©΄ μ‹œκ°„μ΄ 였래 걸리게 λ©λ‹ˆλ‹€. 그러면 λͺ©μ μ— μ–΄κΈ‹λ‚˜λ―€λ‘œ μΊμ‹œμ— 데이터λ₯Ό μ €μž₯ν•  λ•Œ νŠΉμ • 자료ꡬ쑰λ₯Ό μ‚¬μš©ν•˜μ—¬ 묢음으둜 μ €μž₯ν•˜κ²Œ λ˜λŠ”λ° 이λ₯Ό 캐싱 라인이라고 ν•©λ‹ˆλ‹€.

 

ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€μ–‘ν•œ μ£Όμ†Œμ— μžˆλŠ” 데이터λ₯Ό μ‚¬μš©ν•˜λ―€λ‘œ λΉˆλ²ˆν•˜κ²Œ μ‚¬μš©ν•˜λŠ” λ°μ΄ν„°μ˜ μ£Όμ†Œ λ˜ν•œ 흩어져 μžˆλ‹€. λ”°λΌμ„œ μΊμ‹œμ— μ €μž₯ν•˜λŠ” λ°μ΄ν„°μ—λŠ” λ°μ΄ν„°μ˜ λ©”λͺ¨λ¦¬ μ£Όμ†Œ 등을 기둝해 λ‘” νƒœκ·Έλ₯Ό 달아놓을 ν•„μš”κ°€ μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ νƒœκ·Έλ“€μ˜ λ¬ΆμŒμ„ 캐싱 라인이라고 ν•˜κ³  λ©”λͺ¨λ¦¬λ‘œλΆ€ν„° κ°€μ Έμ˜¬ λ•Œλ„ 캐싱 라인을 κΈ°μ€€μœΌλ‘œ κ°€μ Έμ˜€κ²Œ λ©λ‹ˆλ‹€. 크게 세가지 방식이 μžˆμŠ΅λ‹ˆλ‹€.

πŸ‘‰ Full Associative :

λΉ„μ–΄μžˆλŠ” μΊμ‹œλ©”λͺ¨λ¦¬κ°€ 있으면 κ·Έλƒ₯ λ§ˆμŒλŒ€λ‘œ μ£Όμ†Œλ₯Ό μ €μž₯ν•˜λŠ” 방식. 즉 μ €μž₯μ‹œ 크게 μ•Œκ³ λ¦¬μ¦˜ λΉ„μš©μ΄ μ—†μ–΄ κ°„λ‹¨ν•œλ°, 찾을 λ•Œ 문제. λͺ¨λ“  λΈ”λŸ­μ„ μˆœνšŒν•΄ 데이터가 μžˆλŠ”μ§€ 검사. 이λ₯Ό μœ„ν•΄ CAM(content Addressable memory)λΌλŠ” νŠΉμˆ˜ν•œ ν˜•νƒœμ˜ λ©”λͺ¨λ¦¬ ꡬ쑰λ₯Ό μ‚¬μš©ν•˜λŠ”λ° 가격이 λΉ„μ‹Έλ‹΅λ‹ˆλ‹€. 

πŸ‘‰ Set Associative:

νŠΉμ • 둜우λ₯Ό μ§€μ •ν•΄μ„œ κ·Έ λ‘œμš°μ•ˆμ˜ μ–΄λ–€ 열이든 λΉ„μ–΄μžˆμœΌλ©΄ μ €μž₯. ν˜„λŒ€ μž˜λ‚˜κ°„λ‹€λŠ” cpu μΊμ‹œλ“€μ€ λŒ€λΆ€λΆ„ 이방식을 μ·¨ν•˜κ³  μžˆλ‹€.

πŸ‘‰ Direct Map:

λ©”λͺ¨λ¦¬ 곡간이 32개 (00000β‚‚λΆ€ν„° 11111β‚‚), μΊμ‹œ λ©”λͺ¨λ¦¬ 곡간이 8개 (000β‚‚λΆ€ν„° 111β‚‚)

Ex ) 00000β‚‚, 01000β‚‚, 10000β‚‚, 11000₂인 곳의 데이터λ₯Ό μΊμ‹œ λ©”λͺ¨λ¦¬μ˜ μ£Όμ†Œκ°€ 000₂인 κ³³μ—λ§Œ 읽고 μ“°λŠ” 방식이닀.

 

μž‘λ™λ°©μ‹ ex)

예λ₯Ό λ“€μ–΄ cpuκ°€ 메인 λ©”λͺ¨λ¦¬μ˜ 00000β‚‚ μ£Όμ†Œμ˜ 데이터λ₯Ό 두 번 μ—°μ†μœΌλ‘œ μ½λŠ”λ‹€κ³  ν•œλ‹€λ©΄ λ¨Όμ € μΊμ‹œλ©”λͺ¨λ¦¬λ₯Ό λ’€μ μ΄λŠ”λ° μš”μ²­ν•œ μ£Όμ†Œκ°€ 00000β‚‚μ΄λ―€λ‘œ μΊμ‹œ λ©”λͺ¨λ¦¬μ˜ μ£Όμ†Œκ°€ 000₂인 곳을 ν™•μΈν•©λ‹ˆλ‹€. 확인 ν›„ 아무것도 μ—†λŠ” 것을 ν™•μΈν•˜κ³  직접 메인 λ©”λͺ¨λ¦¬μ˜ 00000β‚‚ μ£Όμ†Œλ₯Ό μ°Έμ‘°ν•˜μ—¬ 데이터λ₯Ό μ½μ–΄μ˜΅λ‹ˆλ‹€. μ΄λ•Œ μΊμ‹œ λ©”λͺ¨λ¦¬μ˜ 000₂인 곡간에 00β‚‚νƒœκ·ΈλΉ„νŠΈμ™€ μ•„κΉŒ 읽은 메인 λ©”λͺ¨λ¦¬ 00000β‚‚μ˜ 데이터λ₯Ό μ €μž₯ν•΄ λ†“λŠ”λ‹€. κ·Έ λ‹€μŒ λ°”λ‘œ 같은 λ™μž‘μ„ μˆ˜ν–‰ν•˜λ©΄μ„œ λ˜‘κ°™μ΄ μΊμ‹œ λ©”λͺ¨λ¦¬μ˜ 000β‚‚ 인 곳을 ν™•μΈν•˜λŠ”λ° μ΄λ²ˆμ—” 데이터가 λ“€μ–΄μžˆμœΌλ‹ˆ κ·Έ 데이터가 CPUκ°€ μš”κ΅¬ν•œ μ£Όμ†Œμ˜ 데이터와 μΌμΉ˜ν•˜λŠ”μ§€ νƒœκ·Έ λΉ„νŠΈλ₯Ό λΉ„κ΅ν•˜λŠ” 검사λ₯Ό ν•œ λ’€ νƒœκ·Έ λΉ„νŠΈλ§ˆμ € μΌμΉ˜ν•˜λ©΄ μΊμ‹œ λ©”λͺ¨λ¦¬μ—μ„œ 데이터λ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.

 

κ°„λ‹¨ν•˜κ³  λΉ λ₯΄μ§€λ§Œ λŒ€μ‹  약점이 ꡉμž₯히 큰데, Conflict miss(좩돌) λ¬Έμ œκ°€ ꡉμž₯히 큰 λ°©μ‹μž…λ‹ˆλ‹€. μ§κ΄€μ μœΌλ‘œ μƒκ°ν•΄μ„œ μœ„ 그림의 νšŒμƒ‰ λ°μ΄ν„°λŠ” ν•˜λ‚˜λ„ μ €μž₯ν•  ν•„μš”κ°€ μ—†λŠ”λ° 주황색 데이터 쀑 2개 이상을 λ™μ‹œμ— μ €μž₯ν•΄μ•Ό ν•˜λŠ” 일이 생기면 ꡉμž₯히 κ³¨μΉ˜μ•„ν”Œ κ²ƒμž„μ„ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

πŸŸ₯ ν•˜μ§€λ§Œ κ°œλ°œμžλ“€ μ‚¬μ΄μ—μ„œλŠ” λΈŒλΌμš°μ € μΊμ‹œλ₯Ό κΌ­ clearν•˜λΌκ³  ν•©λ‹ˆλ‹€. μ™œμΌκΉŒμš”?

κ·Έλ ‡κ²Œ ν•΄μ•Ό μ›ΉνŽ˜μ΄μ§€κ°€ μƒˆλ‘œμš΄κ±Έ μ—…λ°μ΄νŠΈ ν• λ•Œλ§ˆλ‹€ μ—…λ°μ΄νŠΈ 된 λ‚΄μš©μ„ λ³Ό 수 μžˆμ„κ²ƒμ΄λ©° 
κ°œμΈμ •λ³΄ λ˜ν•œ 보호 ν•  수 있고 λ‚˜μ€‘μ— μ›ΉνŽ˜μ΄μ§€λ₯Ό μ—‘μ„ΈμŠ€ν• λ•Œ λΈŒλΌμš°μ € μ ‘κ·Ό λ¬Έμ œκ°€ 
μƒκΈΈμˆ˜λ„ 있고 μΊμ‹œκ°€ λ„ˆλ¬΄ μ—¬λŸ¬ λΈŒλΌμš°μ € μ ‘κ·ΌμœΌλ‘œ μŒ“μΈ μƒνƒœμ΄λ©΄ νŠΉμ • μ›Ήμ‚¬μ΄νŠΈλ₯Ό μž¬λ°©λ¬Έν• λ•Œ 
λ“œλŠ” 속도가 더 λ“€μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.