Parallel Programming 6
Cache Coherence
- Write-through : CPU๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์บ์์ ์ ์ฅ๋๊ฒ ๋๋๋ฐ, ๋ฐ์ดํฐ๊ฐ ์บ์ ๋จ๊ณผ ๋์์ memory์ ๋ฐ์ดํฐ๋ ์
๋ฐ์ดํธํ๋ ๊ตฌ์กฐ
- Data consistency ์ ์งํ๊ธฐ ์ฌ์
- ์ฑ๋ฅ์ด ๋จ์ด์ง
- Write back : ์บ์ ๋ด์ ์ผ์์ ์ผ๋ก ์ ์ฅ๋ ํ์ ๋ธ๋ก ๋จ์์ ์บ์๋ก๋ถํฐ ํด์ ๋๋ ๋์๋ง memory์ ๊ธฐ๋ก
- write-through ๋ณด๋ค ์๋๊ฐ ๋น ๋ฆ
- cache์ memory ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ๊ฐ ๋ฐ์
Cache Coherence ๊ฐ ๋ฐ์ํ๋ ์ด์ : ๊ฐ Processor๊ฐ ๊ฐ๊ฐ์ Cache๊ณต๊ฐ์ ๊ฐ์ง๊ณ ์์ ๋
Shared cache
- One single cache shared by all processors
But shared cache becomes bottleneck
ย
Private cache
Add per-core caches
- Reduces latency
- Increases throughput
- Decrease energy
๋ฐ์ ๊ฐ๋ฅํ ๋ฌธ์ ์
A ๊ฐ์ Shared Cache์์ ์ฐพ์ผ๋ฉด ์ ๋๋ก update๊ฐ ๋์ด์์ง ์๋ค
Hardware-based solutions
- Directory-based coherence implementations
- Snooping-based coherence implementations
ย
MI(VI) coherence protocol
Simplest form is a two-state โvalid/invalidโ protocol
If a core wants a copy, must find and โinvalidateโ it
ํ์ฌ ํ๋ก์ธ์์์ invalidํ ๊ฐ์ ์ฝ๊ฑฐ๋ ์ฐ๋ ค๊ณ ํ ๋ : valid๋ก ๋ณ๊ฒฝ๋จ
ํ์ฌ ํ๋ก์ธ์์์ invalidํ ๋๋ ๋ค๋ฅธ ํ๋ก์ธ์์์ read/write miss๊ฐ ๋ฐ์ํด๋ ํด์ค ์ ์๋๊ฒ ์์
ํ์ฌ ํ๋ก์ธ์์์ validํ ๋ ๋ค๋ฅธ ํ๋ก์ธ์์์ ๊ฐ์ read/writeํ๋ฉด ํ์ฌ ์ํ๋ฅผ invalid๋ก ๋ฐ๊พธ๊ณ send data
On a cache miss, how is the valid copy found?
- Snooping : broadcast to all, whoever has it responds
- Directory : track shares with separate structure
ย
MSI coherence protocol
Modified, Shared, Invalid
ํ์ฌ ํ๋ก์ธ์๊ฐ invalidํ ์ํ์์ ์ฝ์ผ๋ ค๊ณ ํ ๋ : ๋ค๋ฅธ ํ๋ก์ธ์์์ ๊ฐ์ ๊ฐ์ ธ์์ ๊ณต์ ์ํ๊ฐ ๋จ
ํ์ฌ ํ๋ก์ธ์๊ฐ invalidํ ์ํ์์ ์ฐ๋ ค๊ณ ํ ๋ : Modified ์ํ๋ก ๋ณ๊ฒฝ
ย
MESI coherence protocol
MSI protocol์์๋ load๋ฅผ ํ ๋ load miss๊ฐ ๋ฐ์ํ๊ณ ๋ค์ ๋์ผํ ๊ฐ์ ๋ณ๊ฒฝํ๋ ค๊ณ ํ ๋ ๋ชจ๋ ํ๋ก์ธ์์๊ฒ broadcast๊ฐ ๋๋๋ฐ, ๋ค๋ฅธ ํ๋ก์ธ์์์ ๊ฐ์ง๊ณ ์์ง ์์๋ ๋ฐ์ํ๋ค.
ํ์ฌ ํ๋ก์ธ์๊ฐ invalidํ ์ํ์์ ์ฝ์ผ๋ ค๊ณ ํ ๋ : ๊ณต์ ํ๊ณ ์๋ค๋ฉด Shared, ์๋๋ผ๋ฉด Exclusive
ํ์ฌ ํ๋ก์ธ์์์ write miss, write hit๊ฐ ๋ฐ์ํ๋ฉด Modified์ํ๋ก ๋ฐ๋๋ ์ด์ : ๋์ค์ writeback์ ํด์ฃผ๊ธฐ ์ํด
ย
- Snooping/broadcast-based cache coherence : ์ ์ ์์ ํ๋ก์ธ์์์ ์ฌ์ฉํ๊ธฐ์ ์ ํฉํจ. ์์ latency, ํ์ง๋ง directory ๋ฐฉ์์ ๋นํด traffic์ด ํฌ๋ค
- No explicit state
- 2 hops (P0->memory->P0)
- Directory-based cache coherence
- Track sharers of blocks
- 3 hops (P0->momory->P1->P0)