Chapter 5: Large and Fast- Exploiting Memory Hierarchy (ํฌ๊ณ ๋น ๋ฅธ - ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธต ๊ตฌ์กฐ ํ์ฉ)
Cache Coherence Problem(์บ์ ์ผ๊ด์ฑ ๋ฌธ์ )
๐จ์ด ๋ฌธ์ ๊ฐ ์ด๋ค ์ํฉ์ธ์ง ์๊ณ ์ด๋ฆ ๋งํ ์ ์๋๋ก !
- ๋ ๊ฐ์ CPU core๊ฐ ๋ฌผ๋ฆฌ์ ์ฃผ์ ๊ณต๊ฐ(physical address space)์ ๊ณต์ ํ๋ค๊ณ ๊ฐ์ ํ ๋
- Write-through caches

๐ผ๏ธ๋๊ฐ์ CPU Core(CPU A, CPU B)๊ฐ ๋์ผํ ๋ฌผ๋ฆฌ์ ์ฃผ์๋ฅผ ๊ณต์ ํ๊ณ ์๊ณ ๊ฐ CPU๊ฐ ๋
๋ฆฝ์ ์ผ๋ก ์บ์๋ฅผ ๊ด๋ฆฌํ๋ ์ํฉ
-> ๊ฐ ์๊ฐ ๋จ๊ณ์์ ์ด๋ค ์ผ์ด ๋ฐ์ํ๋์ง & ๊ทธ์ ๋ฐ๋ผ ๊ฐ CPU์ ์บ์์ ๋ฉ๋ชจ๋ฆฌ ์ํ๊ฐ ์ด๋ป๊ฒ ๋ณํ๋์ง ๋ณด์ฌ์ค
0: ์ฒ์ ์์์ CPU A์ CPU B ๋ชจ๋ X ๋ณ์์ ์ ๊ทผx
1: CPU A๊ฐ X๋ฅผ ์ฝ๊ณ CPU A์ ์บ์์์ X ๊ฐ์ ์ฌ์ ํ 0์ด๊ณ , CPU B์ ์บ์์ ๋ฉ๋ชจ๋ฆฌ ์ญ์ ๊ฐ์ด ๋ณํ์ง x
2: CPU B๋ X๋ฅผ ์ฝ๊ณ CPU A์ CPU B ๋ชจ๋ X๋ฅผ ์บ์์ ์ ์ฅํ๊ณ ์์ง๋ง, ๋ ๋ค 0์ผ๋ก ๋์ผํ ๊ฐ์ ์ ์ง
3: CPU A๊ฐ X์ ๊ฐ์ 1๋ก ์ฐ๊ธฐ ์์ํ๊ณ ์ด๋ CPU A์ ์บ์๋ X ๊ฐ์ 1๋ก ์
๋ฐ์ดํธํ๊ณ , ๋ฉ๋ชจ๋ฆฌ ๋ํ 1๋ก ์
๋ฐ์ดํธ๋จ but CPU B์ ์บ์์๋ ์์ง 0์ด ์ ์ฅ
โก๏ธํต์ฌ: ๋ CPU๊ฐ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋ ๊ฒฝ์ฐ, ๊ฐ CPU์ ์บ์๊ฐ ์๋ก ๋ค๋ฅผ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ <<CPU A๋ 1์ ์ผ์ง๋ง, CPU B๋ ์ฌ์ ํ X๋ฅผ 0์ผ๋ก ๊ฐ์ง๊ณ ์์ ์ ์์ & ์ด๋, CPU B๊ฐ X๋ฅผ ์ฝ์ ๋ 1์ ์ฝ์ง ์๊ณ 0์ ์ฝ์ผ๋ฉด ์ผ๊ด์ฑ์ด ๊นจ์ง๊ฒ ๋๋ฏ๋ก ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ์บ์ ์ผ๊ด์ฑ ํ๋กํ ์ฝ์ด ํ์>>
Coherence Defined(์ผ๊ด์ฑ์ ์ ์)
- ๋น๊ณต์์ ์ผ๋ก(informally): ์ฝ๊ธฐ(Reads)๋ ๊ฐ์ฅ ์ต๊ทผ์ ๊ธฐ๋ก๋ ๊ฐ(most recently written value)์ ๋ฐํํด์ผํจ
- ๊ณต์์ ์ผ๋ก(formally):
- P๊ฐ X์ ์ฐ๊ณ , P๊ฐ X๋ฅผ ์ฝ๋๋ค(์ค๊ฐ์ ๋ค๋ฅธ ์ฐ๊ธฐ ์์=no intervening writes)
- => ์ฝ๊ธฐ๋ ๊ธฐ๋ก๋ ๊ฐ์ ๋ฐํ
- P1์ด X์ ์ฐ๊ณ , P2๊ฐ X๋ฅผ ์ฝ๋๋ค(์ถฉ๋ถํ ๋์ค์==sufficiently later)
- => ์ฝ๊ธฐ๋ ๊ธฐ๋ก๋ ๊ฐ์ ๋ฐํ
- ex. ์ ์์์์ 3๋จ๊ณ ์ดํ CPU B๊ฐ X๋ฅผ ์ฝ๋ ๊ฒฝ์ฐ ์ฐธ๊ณ
- P1์ด X์ ์ฐ๊ณ , P2๊ฐ X์ ์ด๋ค
- => ๋ชจ๋ ํ๋ก์ธ์๋ ๋์ผํ ์์๋ก ์ฐ๊ธฐ๋ฅผ ๋ณธ๋ค
- X์ ์ต์ข
๊ฐ์ด ๋ชจ๋ ๋์ผํด์ผํจ
Cache Coherence Protocols(์บ์ ์ผ๊ด์ฑ ํ๋กํ ์ฝ)
- ๋ค์คํ๋ก์ธ์(multiprocessors)์์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์บ์์์ ์ํ๋๋ ์์
- data๋ฅผ local cache๋ก ์ด๋(migration)
- ๊ณต์ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ bandwidth(๋์ญํญ) ๊ฐ์
- read-shared data์ ๋ณต์ (replication)
- ์ ๊ทผ์ ๋ํ ๊ฒฝ์(contention) ๊ฐ์
- Snnoping protocols
- ๊ฐ ์บ์๊ฐ bus์ reads/writes๋ฅผ ๋ชจ๋ํฐ๋ง
- Directory-based protocols
- ์บ์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ block์ ๊ณต์ ์ํ๋ฅผ directory์ ๊ธฐ๋ก(record)
Chapter 6: Parallel Processors from Client to Cloud(ํด๋ผ์ด์ธํธ์์ ํด๋ผ์ฐ๋๊น์ง์ ๋ณ๋ ฌ ํ๋ก์ธ์)
Parallel Programming(๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ)
- ๋ณ๋ ฌ ์ํํธ์จ์ด(parallel software)๊ฐ ๋ฌธ์ ์ ํต์ฌ
- ์๋นํ ์ฑ๋ฅ ํฅ์์ ์ป์ด์ผํจ
- ๊ทธ๋ ์ง ์์ผ๋ฉด, ๋ ๋น ๋ฅธ ๋จ์ผํ๋ก์ธ์(uniprocessor)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ฌ์!
- ์ด๋ ค์ด ๊ฒ๋ค
- ๋ถํ (Partitioning)
- ์กฐ์ (Coordination)
- ํต์ ์ค๋ฒํค๋(Communications overhead)
Scaling Example
Workload(์์
): 10๊ฐ์ scalars sum๊ณผ 10 ร 10 matrix sum
- ํ๋ก์ธ์ ์๋ฅผ 10๊ฐ์์ 100๊ฐ๋ก ๋๋ ธ์ ๋์ ์๋ ํฅ์
- ๋จ์ผ ํ๋ก์ธ์: ์๊ฐ = (10 + 100) ร tadd
- 10๊ฐ์ ํ๋ก์ธ์:
- Time = 10 ร tadd + 100/10 ร tadd = 20 ร tadd
- ์๋ํฅ์(speedup) = 110/20 = 5.5 (์ ์ฌ์ ์ต๋ ์ฑ๋ฅ์ 55%)
- 100๊ฐ์ ํ๋ก์ธ์:
- Time = 10 ร tadd + 100/100 ร tadd = 11 ร tadd
- ์๋ํฅ์(speedup) = 110/11 = 10 (์ ์ฌ์ ์ต๋ ์ฑ๋ฅ์ 10%)
โป ์์
(load)์ด ํ๋ก์ธ์ ๊ฐ์ ๊ท ํ ์๊ฒ ๋ถ๋ฐฐ๋๋ค๊ณ ๊ฐ์
Q. ํ๋ ฌ ํฌ๊ธฐ๊ฐ 100 ร 100์ธ ๊ฒฝ์ฐ๋ ์ด๋ป๊ฒ ๋ ๊น?
- ๋จ์ผ ํ๋ก์ธ์: ์๊ฐ = (10 + 10000) ร tadd
- 10๊ฐ์ ํ๋ก์ธ์:
- ์๊ฐ = 10 ร tadd + 10000/10 ร tadd = 1010 ร tadd
- ์๋ํฅ์(speedup) = 10010/1010 = 9.9 (์ ์ฌ์ ์ต๋ ์ฑ๋ฅ์ 99%)
- 100๊ฐ์ ํ๋ก์ธ์:
- ์๊ฐ = 10 ร tadd + 10000/100 ร tadd = 110 ร tadd
- ์๋ํฅ์(speedup) = 10010/110 = 91 (์ ์ฌ์ ์ต๋ ์ฑ๋ฅ์ 91%)
โป ์์
์ด ๊ท ํ ์๊ฒ ๋ถ๋ฐฐ๋๋ค๊ณ ๊ฐ์
Strong vs Weak Scaling(๊ฐํ ์ค์ผ์ผ๋ง vs ์ฝํ ์ค์ผ์ผ๋ง)
๐จ๋ญ๊ฐ strong, weak์ธ์ง ๊ตฌ๋ถํ๊ธฐ
- Strong scaling: ๋ฌธ์ ํฌ๊ธฐ ๊ณ ์ ๋จ
- Weak scaling: ๋ฌธ์ ํฌ๊ธฐ๊ฐ ํ๋ก์ธ์ ์์ ๋น๋ก(proportional)
- 10๊ฐ์ ํ๋ก์ธ์, 10 ร 10 ํ๋ ฌ
- 100๊ฐ์ ํ๋ก์ธ์, 32 ร 32 ํ๋ ฌ
- ์๊ฐ = 10 ร tadd + 1000/100 ร tadd = 20 ร tadd
โป ์ด ์์์๋ ์ฑ๋ฅ์ด ์ผ์ ํ๊ฒ ์ ์ง๋จ
Instruction and Data Streams
๐จ๊ทธ๋ฆผ๊ณผ ํ๋ฅผ ๊ธฐ์ต!
- SPMD(Single Program Multiple Data): ๋จ์ผ ํ๋ก๊ทธ๋จ ๋ค์ค ๋ฐ์ดํฐ
- MIMD ์ปดํจํฐ์์ ์คํ๋๋ ๋ณ๋ ฌ ํ๋ก๊ทธ๋จ
- ์๋ก ๋ค๋ฅธ ํ๋ก์ธ์๋ฅผ ์ํ ์กฐ๊ฑด๋ถ ์ฝ๋(conditional code) ํฌํจ
Vector vs Scalar
- ๋ฒกํฐ ์ํคํ
์ฒ(vector architectures)์ ์ปดํ์ผ๋ฌ(compilers)
- ๋ฐ์ดํฐ ๋ณ๋ ฌ ํ๋ก๊ทธ๋จ์ ๋จ์ํ
- ๋ฃจํ ์ข
์์ฑ(loop-carried dependences)์ ๋ถ์ฌ๋ฅผ ๋ช
์์ ์ผ๋ก ํํ(explicit statement)
- ํ๋์จ์ด์์์ checking ๊ฐ์
- ๊ท์น์ ์ธ ์ ๊ทผ ํจํด์ด interleaved์ burst memory์ ์ด์ ์ ํ์ฉ
- loop๋ฅผ ํผํจ์ผ๋ก์จ control hazard๋ฅผ ํํผ
- ํน์ ๋ชฉ์ ์ ๋ฏธ๋์ด ํ์ฅ(ad-hoc media extension, such as MMX, SSE)๋ณด๋ค ๋ ์ผ๋ฐ์ ์
- ์ปดํ์ผ๋ฌ ๊ธฐ์ ๊ณผ ๋ ์ ๋ง์
SIMD(Single Instruction, Multiple Data)
-> ๊ฑฐ์ ๋จ์ ์ด ์์!!
- ๋ฐ์ดํฐ ๋ฒกํฐ์ ๋ํด ์์๋ณ ์ฐ์ฐ(operate elementwise) ์ํ
- ex. x86์ MMX ๋ฐ SSE ๋ช
๋ น์ด
- 128-bit wide register์ ์ฌ๋ฌ ๋ฐ์ดํฐ ์์ ์ ์ฅ
- ๋ชจ๋ ํ๋ก์ธ์๊ฐ ๋์์ ๋์ผํ ๋ช
๋ น์ ์ํ
- ๊ฐ ํ๋ก์ธ์๋ ๋ค๋ฅธ ๋ฐ์ดํฐ ์ฃผ์ ๋ฑ์ ์ฌ์ฉ
- ๋๊ธฐํ(synchronization)๋ฅผ ๋จ์ํ
- ๋ช
๋ น์ด ์ ์ด ํ๋์จ์ด(instruction control hardware)๊ฐ ์ ์
- ๋ฐ์ดํฐ ๋ณ๋ ฌ์ฑ์ด ๋์ ์ ํ๋ฆฌ์ผ์ด์
(highly data-parallel applications)์์ ์ต์ ์ ์ฑ๋ฅ ๋ฐํ
Multithreading(๋ฉํฐ์ค๋ ๋ฉ)
- ๋ณ๋ ฌ(parallel)๋ก ์ฌ๋ฌ thread๋ฅผ ์คํํ๋ ๋ฐฉ์
- ๋ ์ง์คํฐ, PC ๋ฑ์ ๋ณต์ (replicate)
- thread ๊ฐ ๋น ๋ฅธ ์ ํ(switching)
- ์ธ๋ฐํ ๋ฉํฐ์ค๋ ๋ฉ(Fine-grain multithreading)
- ๊ฐ ์ฌ์ดํด๋ง๋ค ์ค๋ ๋๋ฅผ ์ ํ(switch)
- ๋ช
๋ น์ด ์คํ์ ๊ต์ฐจ๋ก ๋ฐฐ์น(interleave)
- ํ ์ค๋ ๋๊ฐ stall(์ง์ฐ)๋๋ฉด, ๋ค๋ฅธ ์ค๋ ๋๋ฅผ ์คํ
- ๊ฑฐ์น ๋ฉํฐ์ค๋ ๋ฉ(Coarse-grain multithreading)
- ๊ธด ์ง์ฐ(ex. L2-cache miss)์์๋ง ์ค๋ ๋๋ฅผ ์ ํ(switch)
- ํ๋์จ์ด๊ฐ ๋จ์ํ์ง๋ง, ์งง์ stall(ex. data hazards)์์๋ ์จ๊ธธ ์ ์์
Shared Memory
๐จinterconnection memory๋ ์ฐ๊ฒฐํด์ ๋ณด๊ธฐ

- SMP: ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ฉํฐํ๋ก์ธ์(shared memory multiprocessor)
- ํ๋์จ์ด๊ฐ ๋ชจ๋ ํ๋ก์ธ์์ ๋ํด ๋จ์ผ ๋ฌผ๋ฆฌ์ ์ฃผ์ ๊ณต๊ฐ์ ์ ๊ณต
- ๊ณต์ ๋ณ์๋ฅผ locks(์ ๊ธ)์ ์ฌ์ฉํ์ฌ ๋๊ธฐํ(synchronize)
- ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์๊ฐ
- UMA (์ผ๊ด๋=uniform) vs. NUMA (๋น์ผ๊ด๋=nonuniform)