Online Scheduling of Parallel Programs on Hybrid - - PowerPoint PPT Presentation

online scheduling of parallel programs on hybrid
SMART_READER_LITE
LIVE PREVIEW

Online Scheduling of Parallel Programs on Hybrid - - PowerPoint PPT Presentation

Online Scheduling of Parallel Programs on Hybrid Architectures Nicolas Maillard, Joo Lima, Jlio Toss, Thierry GauBer, Vincent Danjean nicolas@inf.ufrgs.br 7th


slide-1
SLIDE 1

Online ¡Scheduling ¡of ¡Parallel ¡ Programs ¡on ¡Hybrid ¡Architectures ¡

Nicolas ¡Maillard, ¡João ¡Lima, ¡Júlio ¡Toss, ¡ Thierry ¡GauBer, ¡Vincent ¡Danjean ¡ nicolas@inf.ufrgs.br ¡

7th ¡Scheduling ¡for ¡Large ¡Scale ¡Systems ¡Workshop ¡

slide-2
SLIDE 2

Porto ¡Alegre, ¡RS, ¡Brazil ¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡ 2 ¡

Joint ¡works ¡INF/UFRGS ¡+ ¡LIG/ INRIA/CNRS ¡MOAIS ¡ Jean-­‑Louis ¡Roch, ¡Thierry ¡ GauBer, ¡Vincent ¡Danjean, ¡ Nicolas ¡Maillard ¡ ¡ João ¡Lima ¡ Júlio ¡Toss ¡ Vinícius ¡Garcia ¡

slide-3
SLIDE 3
  • ­‑ ¡Would ¡you ¡tell ¡me, ¡please, ¡which ¡way ¡I ¡ought ¡to ¡go ¡from ¡here?’ ¡

¡-­‑ ¡‘That ¡depends ¡a ¡good ¡deal ¡on ¡where ¡you ¡want ¡to ¡get ¡to,’ ¡ ¡ ¡said ¡the ¡Cat. ¡

CHALLENGE: ¡

SCHEDULING ¡ FINE ¡GRAINED ¡AND ¡IRREGULAR ¡ PARALLELISM ¡ON ¡ ¡ HYBRID ¡ARCHITECTURES ¡

3 ¡

2 ¡PARTS: ¡

  • 1. ¡ONLINE ¡SCHEDULING ¡OF ¡LINEAR ¡ALGEBRA ¡PROGRAMS ¡

WITH ¡KAAPI ¡[JOÃO ¡LIMA] ¡

  • 2. ¡GPU ¡WORK ¡STEALING ¡FOR ¡IRREGULAR ¡PROBLEMS ¡

[JÚLIO ¡TOSS] ¡

slide-4
SLIDE 4

Hardware ¡X ¡Programming ¡API ¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡ 4 ¡

OpenMP, ¡Cilk, ¡TBB ¡(Intel), ¡Kaapi,… ¡ Atlas, ¡PLASMA, ¡… ¡ ¡ CUDA, ¡Thrust, ¡… ¡ ¡ CUBLAS, ¡MAGMA, ¡… ¡ StarPU, ¡XKaapi ¡

slide-5
SLIDE 5

Cholesky ¡FactorizaBon ¡ ¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡ 5 ¡

Tiled ¡version, ¡PLASMA ¡

slide-6
SLIDE 6

Graph ¡Dependencies ¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡ 6 ¡

[BuMari ¡et ¡al. ¡2009] ¡

Magma ¡pre-­‑computes ¡the ¡graph ¡and ¡uses ¡it ¡ ¡to ¡(staBcally) ¡schedule ¡the ¡tasks ¡on ¡a ¡CPU+GPU ¡environment. ¡

slide-7
SLIDE 7

Scheduling ¡the ¡Tasks ¡on-­‑line ¡with ¡Kaapi ¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡ 7 ¡

slide-8
SLIDE 8

Kaapi ¡

  • A ¡French ¡project ¡-­‑ ¡hlp://kaapi.gforge.inria.fr/ ¡
  • C++ ¡library ¡that ¡provides ¡an ¡API ¡for ¡parallel ¡

programming ¡based ¡on ¡tasks. ¡

  • A ¡shared ¡global ¡address ¡space ¡

– You ¡create ¡objects ¡inside ¡it ¡with ¡the ¡keyword ¡“shared” ¡

  • A ¡task ¡is ¡a ¡call ¡to ¡a ¡funcBon, ¡prefixed ¡by ¡“fork” ¡

– Just ¡like ¡Unix ¡/ ¡Cilk ¡ ¡ – Tasks ¡communicate ¡through ¡objects ¡shared. ¡ ¡ – Tasks ¡specify ¡the ¡access ¡mode ¡to ¡shared ¡objects ¡(read/ write) ¡

  • The ¡Kaapi ¡runBme ¡builds ¡the ¡data-­‑flow ¡graph ¡and ¡uses ¡

it ¡to ¡schedule ¡the ¡tasks. ¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡ 8 ¡

slide-9
SLIDE 9

A ¡simple ¡example ¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡

Fibonacci ¡

struct ¡Fibonacci ¡{ ¡ ¡ ¡ ¡ ¡void ¡operator()( ¡int ¡n, ¡a1::Shared_w<int> ¡result ¡) ¡{ ¡ ¡ ¡ ¡ ¡ ¡if ¡(n ¡< ¡2) ¡result.write( ¡n ¡); ¡ ¡ ¡ ¡ ¡ ¡ ¡else ¡{ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡a1::Shared<int> ¡subresult1; ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡a1::Shared<int> ¡subresult2; ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡a1::Fork<Fibonacci>()(n-­‑1, ¡subresult1); ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡a1::Fork<Fibonacci>()(n-­‑2, ¡subresult2); ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡a1::Fork<Sum>()(result, ¡subresult1, ¡subresult2); ¡ ¡ ¡ ¡ ¡ ¡} ¡ ¡ ¡} ¡ }; ¡ struct ¡Sum ¡{ ¡void ¡operator()(a1::Shared_w<int> ¡result, ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡a1::Shared_r<int> ¡sr1, ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡a1::Shared_r<int> ¡sr2 ¡) ¡ { ¡result.write( ¡sr1.read() ¡+ ¡sr2.read() ¡); ¡} ¡ } ¡

9 ¡

slide-10
SLIDE 10

A ¡simple ¡example ¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡

Fibonacci ¡

struct ¡Fibonacci ¡{ ¡ ¡ ¡ ¡ ¡void ¡operator()( ¡int ¡n, ¡a1::Shared_w<int> ¡result ¡) ¡{ ¡ ¡ ¡ ¡ ¡ ¡if ¡(n ¡< ¡2) ¡result.write( ¡n ¡); ¡ ¡ ¡ ¡ ¡ ¡ ¡else ¡{ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡a1::Shared<int> ¡subresult1; ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡a1::Shared<int> ¡subresult2; ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡a1::Fork<Fibonacci>()(n-­‑1, ¡subresult1); ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡a1::Fork<Fibonacci>()(n-­‑2, ¡subresult2); ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡a1::Fork<Sum>()(result, ¡subresult1, ¡subresult2); ¡ ¡ ¡ ¡ ¡ ¡} ¡ ¡ ¡} ¡ }; ¡ struct ¡Sum ¡{ ¡void ¡operator()(a1::Shared_w<int> ¡result, ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡a1::Shared_r<int> ¡sr1, ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡a1::Shared_r<int> ¡sr2 ¡) ¡ { ¡result.write( ¡sr1.read() ¡+ ¡sr2.read() ¡); ¡} ¡ } ¡

10 ¡

slide-11
SLIDE 11

Cholesky ¡FactorizaBon ¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡ 11 ¡

Xkaapi ¡[J. ¡Lima, ¡2012] ¡

slide-12
SLIDE 12

Task ¡Body ¡(CPU) ¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡ 12 ¡

XKaapi ¡[J. ¡Lima, ¡2012] ¡

slide-13
SLIDE 13

Task ¡Body ¡(GPU) ¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡ 13 ¡

XKaapi ¡ ¡[J. ¡Lima, ¡2012] ¡

slide-14
SLIDE 14

Task ¡Bodies ¡(Others) ¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡ 14 ¡

Xkaapi ¡ ¡[J. ¡Lima, ¡2012] ¡

slide-15
SLIDE 15

Managing ¡the ¡tasks ¡

  • GPU ¡tasks ¡receive ¡GPU ¡memory ¡pointers ¡ ¡

– Alloc/transfer ¡transparent ¡to ¡the ¡programmer ¡ ¡ – Allocator ¡– ¡LRU ¡blocks ¡by ¡lists ¡ Transfers ¡to ¡GPU ¡by ¡demand ¡ Transfers ¡to ¡CPU ¡are ¡queued ¡in ¡advance ¡ ¡

  • One ¡CPU ¡thread ¡is ¡responsible ¡for ¡one ¡GPU ¡ ¡

– Work ¡Stealing ¡among ¡CPU ¡threads ¡only. ¡

  • GPUs: ¡Work ¡Stealing ¡unused ¡(yet) ¡

¡They ¡only ¡execute ¡asynchronously ¡all ¡ready ¡tasks ¡ ¡

  • Overlap ¡execuBon ¡and ¡transfers ¡(full-­‑duplex) ¡ ¡

– Three ¡independent ¡CUDA ¡streams ¡(HostToDevice ¡H2D, ¡ DeviceToHost ¡D2H, ¡Kernel) ¡ ¡

¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡ 15 ¡

Internals ¡ ¡[J. ¡Lima, ¡2012] ¡

slide-16
SLIDE 16

Experimental ¡Pla}orm ¡

  • 2 ¡six-­‑core ¡Intel ¡Xeon ¡X5650 ¡

– ¡at ¡2.66 ¡GHz,72 ¡GB ¡of ¡main ¡memory ¡ ¡

  • 8 ¡NVIDIA ¡Tesla ¡C2050 ¡GPUs ¡ ¡

– 448 ¡cores, ¡3 ¡GB ¡GDDR5 ¡ ¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡ 16 ¡

IdGraf ¡ ¡[J. ¡Lima, ¡2012] ¡

  • GCC ¡4.4 ¡+ ¡CUDA ¡

4.1 ¡ ¡

  • MAGMA ¡1.1.0 ¡
  • ATLAS ¡3.9.69 ¡+ ¡

LAPACK ¡3.4.0 ¡ ¡

slide-17
SLIDE 17

Results ¡

  • Cholesky ¡factorizaBon ¡and ¡DGEMM ¡(matrix ¡product) ¡

– Cholesky ¡uses ¡MAGMA ¡1.1.0 ¡(1 ¡GPU) ¡ ¡ – DGEMM ¡uses ¡CUBLAS ¡4.1 ¡ ¡

  • XKaapi ¡(1 ¡CPU ¡+ ¡1 ¡GPU) ¡

¡ ¡

– MulB-­‑CPU ¡is ¡disabled ¡

  • Performance ¡measured ¡in ¡Gflops/s ¡ ¡
  • Each ¡results ¡is ¡the ¡mean ¡of ¡30 ¡execuBons ¡
  • ExecuBon ¡Bme ¡includes ¡ ¡

– XKaapi ¡– ¡allocaBon/transfer ¡Bmes ¡(GPU) ¡ ¡ – CUBLAS ¡– ¡transfer ¡Bmes ¡ – MAGMA ¡– ¡allocaBon/transfer ¡Bmes ¡(GPU) ¡ ¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡ 17 ¡

¡[J. ¡Lima, ¡2012] ¡

slide-18
SLIDE 18

Gflops/s ¡(Cholesky) ¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡ 18 ¡

¡[J. ¡Lima, ¡2012] ¡

slide-19
SLIDE 19

Gflops/s ¡(dgemm) ¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡ 19 ¡

¡[J. ¡Lima, ¡2012] ¡

slide-20
SLIDE 20

Work ¡Stealing ¡on ¡the ¡GPU? ¡

  • One ¡GPUs ¡== ¡more ¡than ¡one ¡mulB-­‑processor ¡

(MP) ¡(e.g. ¡30). ¡

– You ¡can ¡use ¡Work ¡Stealing ¡inside ¡a ¡GPU. ¡ – Each ¡MP ¡owns ¡its ¡own ¡deque ¡of ¡tasks ¡instead ¡of: ¡

  • Running ¡a ¡fixed ¡amount ¡of ¡blocks ¡of ¡kernels ¡(default); ¡
  • or ¡accessing ¡a ¡centralized ¡list ¡of ¡tasks. ¡
  • This ¡WS ¡for ¡GPU ¡can ¡be ¡implemented ¡with ¡
  • CUDA. ¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡ 20 ¡

[J. ¡Toss ¡2012] ¡

slide-21
SLIDE 21

Cuda ¡Work ¡Stealing ¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡ 21 ¡

[J. ¡Toss, ¡Europar ¡2012] ¡

slide-22
SLIDE 22

Scheduling ¡impact ¡on ¡the ¡runBme ¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡ 22 ¡

[J. ¡Toss, ¡Europar ¡2012] ¡

Comparing ¡StaBc ¡(block) ¡scheduling, ¡List ¡scheduling, ¡Work ¡Stealing ¡(e ¡thrust). ¡ ¡ The ¡program ¡is ¡Transform() ¡

slide-23
SLIDE 23

Tuning ¡the ¡parameters… ¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡ 23 ¡

[J. ¡Toss, ¡Europar ¡2012] ¡

slide-24
SLIDE 24

For ¡irregular ¡workloads… ¡

  • SBll ¡using ¡Transform(), ¡but ¡on ¡two ¡different ¡

arBficial ¡palerns: ¡

– Workload ¡1: ¡one ¡task ¡out ¡of ¡two ¡is ¡zeroed; ¡ – Workload ¡2: ¡one ¡task ¡out ¡of ¡four ¡is ¡zeroed. ¡

  • best ¡configuraBon ¡of ¡pop ¡size ¡found ¡for ¡each ¡

method: ¡

– LS ¡uses ¡a ¡pop ¡size ¡of ¡10240 ¡(20 ¡tasks) ¡for ¡workload ¡1 ¡ and ¡25600 ¡(50 ¡tasks) ¡for ¡workload ¡2; ¡ – WS ¡uses ¡pop ¡sizes ¡of ¡4096 ¡(8 ¡tasks) ¡for ¡both ¡

  • workloads. ¡ ¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡ 24 ¡

[J. ¡Toss, ¡Europar ¡2012] ¡

slide-25
SLIDE 25

For ¡irregular ¡workloads… ¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡ 25 ¡

[J. ¡Toss, ¡Europar ¡2012] ¡

Workload ¡1 ¡ Workload ¡2 ¡

Forget ¡staBc ¡scheduling ¡(default ¡in ¡CUDA). ¡ List ¡scheduling ¡is ¡fine, ¡but ¡requires ¡appropriate ¡grain. ¡ Work-­‑stealing ¡is ¡equivalent ¡or ¡beler. ¡

slide-26
SLIDE 26

Conclusions ¡

  • Using ¡asynchronous ¡memory ¡transfers, ¡one ¡can ¡overlap ¡

communicaBon ¡and ¡computaBon ¡ ¡

– enable ¡efficient ¡online ¡scheduling ¡of ¡the ¡tasks. ¡

  • We ¡have ¡prototypes ¡with ¡Kaapi: ¡

– For ¡MulB-­‑CPU ¡(WS), ¡Mono-­‑GPU ¡(work ¡Pushing) ¡systems ¡and ¡asynchronous ¡

  • transfers. ¡

– For ¡Mono-­‑CPU ¡(WS), ¡mulB-­‑GPUs ¡(WS) ¡systems. ¡

  • Next ¡stage: ¡how ¡do ¡you ¡refine ¡the ¡basic ¡Work ¡Stealing ¡in ¡hybrid ¡

environments: ¡

– Use ¡(staBc) ¡prioriBes? ¡ – Data ¡locality, ¡to ¡re-­‑use ¡data ¡that ¡has ¡been ¡pre-­‑fetched ¡into ¡a ¡GPU ¡memory? ¡ – Steal ¡more ¡than ¡one ¡task? ¡ – Improve ¡the ¡GPU ¡to ¡GPU ¡communicaBon? ¡

nicolas@inf.ufrgs.br ¡-­‑ ¡GPPD ¡ 26 ¡

slide-27
SLIDE 27

Online ¡Scheduling ¡of ¡Parallel ¡ Programs ¡on ¡Hybrid ¡Architectures ¡

Nicolas ¡Maillard, ¡João ¡Lima, ¡Júlio ¡Toss, ¡ Thierry ¡GauBer, ¡Vincent ¡Danjean ¡ nicolas@inf.ufrgs.br ¡

7th ¡Scheduling ¡for ¡Large ¡Scale ¡Systems ¡Workshop ¡