33
Charm++, what’s that?! Les Mardis du dev’ François Tessier - Runtime team October 15, 2013 François Tessier Charm++ 1 / 25

Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Charm++, what’s that?!Les Mardis du dev’

François Tessier - Runtime team

October 15, 2013

François Tessier Charm++ 1 / 25

Page 2: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Outline

1 Introduction

2 Charm++

3 Basic examples

4 Load Balancing

5 Conclusion

François Tessier Charm++ 2 / 25

Page 3: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Outline

1 Introduction

2 Charm++

3 Basic examples

4 Load Balancing

5 Conclusion

François Tessier Charm++ 3 / 25

Page 4: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Introduction

Parallel programming

DecompositionWhat to do in parallel

MappingWhich processor execute each task

SchedulingThe order

Machine dependent expressionExpress the above decisions for the particular parallel machine

François Tessier Charm++ 4 / 25

Page 5: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Introduction

Scalable execution of parallel applications

Cluster computing

Number of cores is increasing

But memory per core is decreasing (or increasing slowly)

Applications need to communicate more and more...

10

100

1000

10000

100000

1e+06

1e+07

1990 1995 2000 2005 2010 2015

#C

ore

s /

Mem

ory

per

core

(in

MB

)

Years

Number of cores and amount of memory per coreof the first ranking cluster in the Top500 list since 1993

#CoresMemory per core

François Tessier Charm++ 5 / 25

Page 6: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Introduction

How to communicate between nodes?

Message passing paradigm

Inter-process communication

MPI, SOAP, Charm++

Message passing interface

Process 1 Process 2 Process 3 Process 4

Communication network

Figure : Communication from process 1 to process 4 with a message passing interface

François Tessier Charm++ 6 / 25

Page 7: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Outline

1 Introduction

2 Charm++

3 Basic examples

4 Load Balancing

5 Conclusion

François Tessier Charm++ 7 / 25

Page 8: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Charm++

François Tessier Charm++ 8 / 25

Page 9: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Charm++

Presentation

Developed at the PPL (Urbana-Champaign, IL)

High-level abstraction of parallel programming

C++, Python

François Tessier Charm++ 9 / 25

Page 10: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Charm++

Presentation

Developed at the PPL (Urbana-Champaign, IL)

High-level abstraction of parallel programming

C++, Python

How to define Charm++?

Object-orientedBased on the C++ programming languageObjects called chares (contain data, send and receive messages, performtask)

François Tessier Charm++ 9 / 25

Page 11: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Charm++

Presentation

Developed at the PPL (Urbana-Champaign, IL)

High-level abstraction of parallel programming

C++, Python

How to define Charm++?

Object-orientedBased on the C++ programming languageObjects called chares (contain data, send and receive messages, performtask)

Asynchronous message passingChares exchange messages to communicateMessages sent/received asynchronously to the code execution

François Tessier Charm++ 9 / 25

Page 12: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Charm++

Presentation

Developed at the PPL (Urbana-Champaign, IL)

High-level abstraction of parallel programming

C++, Python

How to define Charm++?

Object-orientedBased on the C++ programming languageObjects called chares (contain data, send and receive messages, performtask)

Asynchronous message passingChares exchange messages to communicateMessages sent/received asynchronously to the code execution

ParallelChunks of codeMessages

François Tessier Charm++ 9 / 25

Page 13: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Charm++

Presentation

Developed at the PPL (Urbana-Champaign, IL)

High-level abstraction of parallel programming

C++, Python

How to define Charm++?

Object-orientedBased on the C++ programming languageObjects called chares (contain data, send and receive messages, performtask)

Asynchronous message passingChares exchange messages to communicateMessages sent/received asynchronously to the code execution

ParallelChunks of codeMessages

Programming paradigmWay of writing programFeatures and structures added on top of C++

François Tessier Charm++ 9 / 25

Page 14: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Charm++

What is a Charm++ Program?

Collection of communicant chare objects, included the "main" chare(global object space)

No importance about the number of PU or the type of interconnect (RTS)Send a message by calling another chare’s entry point function (receptionpoint)

returns immediately from the perspective of the calling chare

Figure : User’s view of a Charm++ Application(Credits : http://charm.cs.illinois.edu)

François Tessier Charm++ 10 / 25

Page 15: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Charm++

The Charm++ Compilation and the Runtime System

First strenght: it works!

Application written as a collection of communicating objects

Compilation, execution : Specific target platform, physical resources (-np)

RTS manages the details of the physical resources...... and can take some decisions about :

Mapping chare objects to physical processorsLoad-balancing chare objectsCheckpointingFault-tolereance...

Figure : Compilation Process for a Chare Class(Credits : http://charm.cs.illinois.edu)

François Tessier Charm++ 11 / 25

Page 16: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Outline

1 Introduction

2 Charm++

3 Basic examples

4 Load Balancing

5 Conclusion

François Tessier Charm++ 12 / 25

Page 17: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Charm++ - Hello World!

Listing 1: Hello.h#ifndef __MAIN_H__#define __MAIN_H__

class Main : public CBase_Main {

public:Main(CkArgMsg* msg);Main(CkMigrateMessage* msg);

};

#endif // __MAIN_H__

Listing 2: Hello.cimainmodule main {

mainchare Main {entry Main(CkArgMsg* msg);

};

};

Listing 3: Hello.C#include "main.decl.h"#include "main.h"

// Entry point of Charm++ applicationMain::Main(CkArgMsg* msg) {

// Print a message for the userCkPrintf("Hello␣World !\n");

// Exit the applicationCkExit ();

}

// Constructor needed for chare object// migration (ignore for now)// NOTE: This constructor does not need// to appear in the ".ci" fileMain::Main(CkMigrateMessage* msg) { }

#include "main.def.h"

François Tessier Charm++ 13 / 25

Page 18: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Charm++ - 1Darray

Listing 4: 1Darray.cimainmodule hello {

readonly CProxy_Main mainProxy;readonly int nElements;

mainchare Main {entry Main(CkArgMsg *m);entry void done(void);

};array [1D] Hello {

entry Hello(void);entry void SayHi(int from);

};};

Listing 5: 1Darray.C#include <stdio.h>#include "hello.decl.h"

/* readonly */ CProxy_Main mainProxy;/* readonly */ int nElements;

/* mainchare */class Main : public CBase_Main{

public:Main(CkArgMsg* m){

if(m->argc >1 )nElements=atoi(m->argv [1]);

delete m;

CkPrintf("Run␣on␣%d␣processors␣for␣%d␣el.\n",CkNumPes(),nElements );

mainProxy = thisProxy;

CProxy_Hello arr = CProxy_Hello ::ckNew(nElements );arr [0]. SayHi (-1);

};

void done(void){

CkPrintf("All␣done\n");CkExit ();

};};

/*array [1D]*/class Hello : public CBase_Hello{

public:Hello(){

CkPrintf("Hello␣%d␣created\n",thisIndex );}

Hello(CkMigrateMessage *m) {}

void SayHi(int from){

CkPrintf("\"Hello \"␣from␣Hello␣chare␣#␣%d␣on␣""processor␣%d␣(told␣by␣%d).\n",thisIndex , CkMyPe(), from);

if (thisIndex < nElements -1)thisProxy[thisIndex +1]. SayHi(thisIndex );

elsemainProxy.done (); // Done!

}};

François Tessier Charm++ 14 / 25

Page 19: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Charm++ - 1Darray

$ ./charmrun +p3 ./hello 10Running "Hello World" with 10 elements using 3 processors."Hello" from Hello chare # 0 on processor 0 (told by -1)."Hello" from Hello chare # 1 on processor 1 (told by 0)."Hello" from Hello chare # 2 on processor 2 (told by 1)."Hello" from Hello chare # 3 on processor 0 (told by 2)."Hello" from Hello chare # 4 on processor 1 (told by 3)."Hello" from Hello chare # 5 on processor 2 (told by 4)."Hello" from Hello chare # 6 on processor 0 (told by 5)."Hello" from Hello chare # 7 on processor 1 (told by 6)."Hello" from Hello chare # 9 on processor 0 (told by 8)."Hello" from Hello chare # 8 on processor 2 (told by 7).

François Tessier Charm++ 15 / 25

Page 20: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Outline

1 Introduction

2 Charm++

3 Basic examples

4 Load Balancing

5 Conclusion

François Tessier Charm++ 16 / 25

Page 21: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Charm++ - Load balancing

Load-balancing

Balance the load between the processing units

Goal : Optimize the CPU consumption, temperature, or other metrics...

François Tessier Charm++ 17 / 25

Page 22: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Charm++ - Load balancing

Initial state

François Tessier Charm++ 18 / 25

Page 23: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Charm++ - Load balancing

Initial state

LB

François Tessier Charm++ 18 / 25

Page 24: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Charm++ - Load balancing

Listing 6: NewLB.CCreateLBFunc_Def(NewLB , "Create␣NewLB")

void NewLB::work(BaseLB :: LDStats* stats){

CkPrintf("%d␣chares␣executed␣on␣%d␣procs\n",stats ->n_obj , stats ->nprocs ());

// Processor arrayProcArray *parr = new ProcArray(stats );// Object graphObjGraph *ogr = new ObjGraph(stats);std::vector <Vertex >:: iterator v_it;std::vector <Edge >:: iterator e_it;

for (v_it=ogr ->vertices.begin (); v_it!=ogr ->vertices.end(); ++v_it) {double load = (*v_it). getVertexLoad ();for (e_it =(* v_it). sendToList.begin (); e_it !=(* v_it). sendToList.end (); ++e_it) {

int from = (*v_it). getVertexId ();int to = (*e_it). getNeighborId ();if (from != to) {

CkPrintf ("%d␣msgs␣sent␣from␣%d␣to␣%d\n",(*e_it). getNumMsgs (), from , to);

}}

}

ogr ->vertices [12]. setNewPe (2);ogr ->convertDecisions(stats );

}

François Tessier Charm++ 19 / 25

Page 25: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Charm++ - Load balancing

Load-balancing

For iterative applications

charmrun +p64 ./App +balancer newLB +LBDebug 1 [...]

Objects can migrate using a pup function (Pack and Unpack)

Listing 7: PUP functionclass MyClass {

public:int a;int *b;

MyClass () {int a = 42;int *b = (int *) malloc(a*sizeof(int));

}

void pup(PUP::er &p) {p|a;PUParray(p, b, a);

if (p.isUnpacking ()) {b = (int *) malloc(a*sizeof(int));

}}

}

François Tessier Charm++ 20 / 25

Page 26: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Charm++ - Load balancing

Load-balancing

For iterative applications

charmrun +p64 ./App +balancer newLB +LBDebug 1 [...]

Objects can migrate using a pup function (Pack and Unpack)Several load balancers

GreedyLBRefineLBHierarchical load balancersThermal aware load balancers...

0 2 4 6 1 3 5 7

Groups of chares assigned to cores

CP

U L

oad

François Tessier Charm++ 21 / 25

Page 27: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Charm++ - Load balancing

Load-balancing

For iterative applications

charmrun +p64 ./App +balancer newLB +LBDebug 1 [...]

Objects can migrate using a pup function (Pack and Unpack)Several load balancers

GreedyLBRefineLBHierarchical load balancersThermal aware load balancers...

0 2 4 6 1 3 5 7

Groups of chares assigned to cores

CP

U L

oad

François Tessier Charm++ 21 / 25

Page 28: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Charm++ - Load balancing

Load-balancing

For iterative applications

charmrun +p64 ./App +balancer newLB +LBDebug 1 [...]

Objects can migrate using a pup function (Pack and Unpack)Several load balancers

GreedyLBRefineLBHierarchical load balancersThermal aware load balancers...

0 2 4 6

Chares

François Tessier Charm++ 21 / 25

Page 29: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Charm++ - Load balancing

Load-balancing

For iterative applications

charmrun +p64 ./App +balancer newLB +LBDebug 1 [...]

Objects can migrate using a pup function (Pack and Unpack)Several load balancers

GreedyLBRefineLBHierarchical load balancersThermal aware load balancers...

0 2 4 6 1 3 5 7

Groups of chares assigned to cores

CP

U L

oad

François Tessier Charm++ 21 / 25

Page 30: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Charm++ - Results

kNeighbor

Benchmarks application designed to simulate intensive communicationbetween processes

Experiments on PlaFRIM : 8 nodes with 8 cores on each (Intel Xeon 5550)

Dum

myL

B

Gre

edyC

omm

LB

Gre

edyL

B

Ref

ineC

omm

LB

TM

LB_T

reeB

ased

Exe

cutio

n tim

e (in

sec

onds

)

0

500

1000

1500

2000

kNeighbor on 64 cores256 elements − 1MB message size

François Tessier Charm++ 22 / 25

Page 31: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Outline

1 Introduction

2 Charm++

3 Basic examples

4 Load Balancing

5 Conclusion

François Tessier Charm++ 23 / 25

Page 32: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

Conclusion

To conclude...

Charm++, message passing since 1984

High-level abstraction of a parallel program

Interesting features : load balancing,fault-tolerance,...

Useful tools; CharmDebug, Projections

Used by some important applications :ChaNGa, NAMD, OpenAtom

Want to know more?

Website : http://charm.cs.uiuc.edu/

Tutorials : http://charm.cs.illinois.edu/tutorial/TableOfContents.htm

François Tessier Charm++ 24 / 25

Page 33: Charm++, what's that?! - Les Mardis du dev'sed.bordeaux.inria.fr › seminars › charm++_20131015.pdf · Charm++, what’s that?! LesMardisdudev’ FrançoisTessier-Runtimeteam October15,2013

The End

Thanks for your attention !

François Tessier Charm++ 25 / 25