A ¡Coherent ¡and ¡Managed ¡Run0me ¡ for ¡ML ¡on ¡the ¡SCC ¡
KC ¡Sivaramakrishnan ¡ ¡Lukasz ¡Ziarek ¡ ¡ ¡Suresh ¡Jagannathan ¡
Purdue ¡University ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡SUNY ¡Buffalo ¡ ¡ ¡ ¡Purdue ¡University ¡
A Coherent and Managed Run0me for ML on the SCC KC - - PowerPoint PPT Presentation
A Coherent and Managed Run0me for ML on the SCC KC Sivaramakrishnan Lukasz Ziarek Suresh Jagannathan Purdue University
Purdue ¡University ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡SUNY ¡Buffalo ¡ ¡ ¡ ¡Purdue ¡University ¡
2 ¡
Intel ¡SCC ¡ Cluster ¡of ¡Machines ¡
Cache-‑Coherence ¡(SMC) ¡ Cache ¡Coherent ¡ ü No ¡change ¡to ¡ programming ¡model ¡ ü AutomaHc ¡memory ¡ management ¡
3 ¡
Private ¡ Memory ¡ Core ¡0 ¡ Private ¡ Memory ¡ Core ¡47 ¡ Private ¡ Memory ¡ Core ¡2 ¡ Private ¡ Memory ¡ Core ¡1 ¡ ... ¡ Shared ¡Memory ¡ ¡ (off ¡chip) ¡ No ¡Cache-‑Coherence ¡ (Caching ¡disabled) ¡ SoVware ¡Managed ¡Cache ¡ (Release ¡Consistency) ¡ Message ¡Passing ¡Buffers ¡ (On ¡die, ¡8KB ¡per ¡core) ¡
4 ¡ AbstracHon ¡Layer ¡ Program ¡
– Single ¡address ¡space ¡ – Cache ¡coherence ¡ ¡ – SequenHal ¡consistency ¡ – AutomaHc ¡memory ¡management ¡ – UHlize ¡MPB ¡for ¡inter-‑core ¡ communicaHon ¡
1. A ¡new ¡GC ¡to ¡provide ¡coherent ¡and ¡ managed ¡global ¡address ¡space ¡ 2. Mapping ¡first-‑class ¡channel ¡ communicaHon ¡on ¡to ¡the ¡MPB ¡
SCC ¡
5 ¡ C ¡ send ¡(c, ¡v) ¡ v ¡ß ¡recv ¡(c) ¡
¡
7 ¡
Core ¡0 ¡ Core ¡0 ¡ Core ¡0 ¡
8 ¡
Local ¡ Heap ¡
Private ¡ ¡ Memory ¡
Local ¡ Heap ¡
Private ¡ ¡ Memory ¡
Local ¡ Heap ¡
Private ¡ ¡ Memory ¡
Shared ¡Memory ¡ Uncached ¡Shared ¡Heap ¡ (Mutable ¡Objects) ¡ Cached ¡Shared ¡Heap ¡ (Immutable ¡Objects) ¡
– No ¡inter-‑coherence-‑domain ¡pointers! ¡
Caching ¡ disabled ¡ SMC ¡-‑ ¡Caching ¡ enabled ¡
9 ¡
Uncached ¡Shared ¡ Heap ¡ Cached ¡Shared ¡ Heap ¡ Local ¡Heap ¡
rm ¡ xm ¡ yim ¡
Uncached ¡Shared ¡ Heap ¡ Cached ¡Shared ¡ Heap ¡ Local ¡Heap ¡
rm ¡ xm ¡ yim ¡
FWD ¡ FWD ¡
Mutator ¡needs ¡ Read ¡Barriers! ¡
10 ¡
11 ¡
Uncached ¡Shared ¡ Heap ¡ Cached ¡Shared ¡ Heap ¡
MAX_CSH_ADDR ¡ X ¡ 0: read(x)
Uncached ¡Shared ¡ Heap ¡ Cached ¡Shared ¡ Heap ¡
MAX_CSH_ADDR ¡== ¡X ¡
Invalidate ¡ before ¡read ¡– ¡
smcAcquire()
Up-‑to-‑date ¡ Stale ¡ Up-‑to-‑date ¡ Stale ¡
12 ¡
y < MAX_CSH_ADDR à Cache ¡invalidated ¡a8er ¡y ¡was ¡created ¡
13 ¡
– smcRelease() ¡ ¡
14 ¡
15 ¡
10 20 30 40 50 # Cores 5 10 15 20 25 30 35 Speedup
Partitioned Single
1 2 3 4 5 6 Heap size relative to min heap size 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 Normalized Time
Partitioned Single
1 2 3 4 5 6 Heap size relative to min heap size 1.00 1.10 1.20 1.30 1.40 1.50 1.60 Normalized Mutator Time
Partitioned Single
1 2 3 4 5 6 Heap size relative to min heap size 1 2 4 8 16 32 64 128 Normalized GC Time (log)
Partitioned Single
10 20 30 40 50 # Cores 5 10 15 20 25 30 35 Speedup
MPB- MPB+
– ¡89% ¡local ¡heap, ¡10% ¡cached ¡shared ¡heap, ¡1% ¡uncached ¡shared ¡
48% ¡faster ¡
datatype ‘a chan = {sendQ : (‘a * unit thread) Q.t,
recvQ : (‘a thread) Q.t} 17 ¡
19 ¡
Shared ¡Heap ¡ Local ¡Heap ¡
C ¡ t1 ¡ Vim ¡
t1:send(c,v) Local ¡Heap ¡
t2 ¡
Shared ¡Heap ¡ Local ¡Heap ¡
C ¡ t1 ¡ Vim ¡
Local ¡Heap ¡
t2 ¡ Core ¡0 ¡ Core ¡1 ¡ Core ¡1 ¡ Core ¡0 ¡
20 ¡
t2: recv(c) Shared ¡Heap ¡ Local ¡Heap ¡
C ¡ t1 ¡ Vim ¡
Local ¡Heap ¡
t2 ¡ Core ¡1 ¡interrupts ¡ core ¡0 ¡to ¡iniHate ¡ transfer ¡over ¡MPB ¡ Core ¡0 ¡ Core ¡1 ¡
Shared ¡Heap ¡ Local ¡Heap ¡
t1 ¡ Vim ¡
Local ¡Heap ¡
t2 ¡ Core ¡0 ¡ Core ¡1 ¡ Vim ¡ C ¡
21 ¡
10 20 30 40 50 # Cores 5 10 15 20 25 30 35 Speedup
Partitioned Single
1 2 3 4 5 6 Heap size relative to min heap size 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 Normalized Time
Partitioned Single
1 2 3 4 5 6 Heap size relative to min heap size 1.00 1.10 1.20 1.30 1.40 1.50 1.60 Normalized Mutator Time
Partitioned Single
1 2 3 4 5 6 Heap size relative to min heap size 1 2 4 8 16 32 64 128 Normalized GC Time (log)
Partitioned Single
10 20 30 40 50 # Cores 5 10 15 20 25 30 35 Speedup
MPB- MPB+
SHM ¡ MPB ¡
22 ¡
23 ¡
24 ¡
pointer readBarrier (pointer p) { if (getHeader (p) == FORWARDED) { //A globalized object p = *(pointer*)p; if (p > MAX_CSH_ADDR) { smcAcquire (); MAX_CSH_ADDR = p; } } return p; }
25 ¡
val writeBarrier (Ref r, Val v) { if (isObjptr (v) && isInSharedHeap (r) && isInLocalHeap (v)) { v = globalize (v); smcRelease (); } return v; }
26 ¡
Shared ¡Heap ¡ Local ¡Heap ¡
C ¡ t1 ¡ Vm ¡
t1:send(c,v) Shared ¡Heap ¡ Local ¡Heap ¡
C ¡ t1 ¡ Vm ¡ Globalize ¡the ¡ mutable ¡ message ¡
27 ¡
Shared ¡Heap ¡ Local ¡Heap ¡
C ¡ t1 ¡
t1:send(c,0) Shared ¡Heap ¡ Local ¡Heap ¡
C ¡ t1 ¡ Remembered ¡ Set ¡
28 ¡
Shared ¡Heap ¡ Local ¡Heap ¡
C ¡ t1 ¡ V ¡
t1:send(c,v) Local ¡Heap ¡
t2 ¡
Shared ¡Heap ¡ Local ¡Heap ¡
C ¡ t1 ¡ V ¡
Local ¡Heap ¡
t2 ¡ Remembered ¡ Set ¡ Core ¡0 ¡ Core ¡1 ¡ Core ¡1 ¡
29 ¡
t2:recv(c) Shared ¡Heap ¡ Local ¡Heap ¡
C ¡ t1 ¡ V ¡
Local ¡Heap ¡
t2 ¡ Core ¡1 ¡ Core ¡0 ¡
Shared ¡Heap ¡ Local ¡Heap ¡
C ¡ t1 ¡ V ¡
Local ¡Heap ¡
t2 ¡ Core ¡1 ¡ Core ¡0 ¡