Semester | Mand. | Option | Filières |
x |
Lecture | 20 |
Exercises | 20 |
Practical work | 16 |
Study plan | Semester | Mand. | Option | Filières |
EDPY - Physics 2021-22 | x |
Cursus | Sem. | Type |
---|---|---|
Physics | Opt. |
Students are asked to bring there own computer.
This course is a two weeks long course. It is open to all the PhD students with a solid background in programming.
The first week is dedicated to the theoretical concepts and practical sessions lead by teaching assistants.
Starting with the concepts of the hardware of one node of a cluster (memory hierarchy, instructions, networking, etc..), you will learn how to debug and optimize a sequential code to be run efficiently on one node of a cluster. You will go through the entire Software Development Cycle loop (analyze ¿ implement ¿ debug ¿ test) using standard GNU and proprietary tools (gdb, valgrind, gprof, Intel amplifier).
Secondly, the two standard industrial parallel paradigms targeting the shared and distributed memory models are introduced: OpenMP (shared) and MPI (distributed). You will learn the basic concepts of the parallel programming. The goal is to learn how to choose the right paradigm for an application based on its needs.
The OpenMP standard will be presented in its 3.1 version (without the hardware targets nor the SIMD constructions) from the basic loop parallelization directives to the tasks concepts.
The MPI standard will be covered up to the standard 3. You will learn how to correctly use blocking and non-blocking point-to-point and collective communications as well as advanced datatypes, one-sided communications, dynamic process management and parallel I/O.
Throughout all the first week, we'll take practice the learned concepts by using a simple toy application: a 1D Poisson solver (using a finite difference scheme). From a fully bugged sequential implementation, you'll optimize it, parallelize it using OpenMP and MPI to come up finally with an optimized hybrid implementation of the same solver.
Please note that this course will not tackle the programming of accelerators such as GPU's or Intel Xeon Phi's.
The second week is dedicated to a personal work on your own (or provided) application.
CONTENT OF THE COURSE
Week 1: Lecture + Practical session
Day 1: Optimization of a sequential code
¿ Compilation basics, usage of standard development tools
¿ Software development life cycle (debug ¿ profile ¿ optimize)
¿ Parallelization concepts
Day 2: Parallelization on a shared memory node
¿ NUMA nodes architecture
¿ Parallelization using OpenMP: Directives; Runtime Library Routines; Environment variables; Affinity: a major issue for high performance
Day 3: Parallelization on a distributed memory cluster: basic concepts
¿ Blocking and non-Blocking point-to-point communications
¿ Blocking collective communications
Day 4: Parallelization on a distributed memory cluster: advanced concepts
¿ Advanced MPI types. Communicators and groups. Dynamic Process management, virtual topologies
¿ Persistent communications and One-sided communications (RMA's)
¿ Parallel I/O with MPI
¿ Non-Blocking collective communications
Day 5: Hybrid programming (OpenMP + MPI)
¿ Introduction to hybrid programming
¿ How to write a (successful) research project proposal in a large data center
Week 2: Personal project
In order to use all the concepts learned during the first week, a one-week long project is due. You can bring your own application or we'll provide you one. Examples of projects follow:
¿ Mandelbrod set
¿ Travelling salesman problem
¿ N-body simulation
The work time budget for the project is 32 hours of individual work plus 8 hours in contact with an assistant. You'll have 15 minutes to present your project with 5 additional minutes for questions & answers.
OpenMP, MPI, HPC, Parallel programming
Strong knowledge of C, C++ or Fortran 90
Basic knowledge of Linux and bash scripting
By the end of the course, the student must be able to:
optionnel
optionnel
Cours
Lecture
Heure(s)
Hour(s)
H
H
Exercices
Exercises
Heure(s)
Hour(s)
H
H
TP
Practical work
Heure(s)
Hour(s)
H
H
Exposé
Oral presentation
BALISES_TEXTES
BOOLEAN_Symbol
BaliseJS_debut
BaliseJS_fin
Balise_debut
Balise_fin
FO_debut
FO_fin
HTML_debut
HTML_fin
JS_debut
JS_fin
BALISE_BOLD
BOOLEAN_Symbol
BaliseJS_debut
\x5bb\x5d
BaliseJS_fin
\x5b\x2fb\x5d
Balise_debut
[b]
Balise_fin
[/b]
FO_debut
font-weight=bold
FO_fin
font-weight=normal
HTML_debut
<b>
HTML_fin
</b>
JS_debut
\x3cb\x3e
JS_fin
\x3c\x2fb\x3e
BALISE_ITALIC
BOOLEAN_Symbol
BaliseJS_debut
\x5bi\x5d
BaliseJS_fin
\x5b\x2fi\x5d
Balise_debut
[i]
Balise_fin
[/i]
FO_debut
font-style=italic
FO_fin
font-style=normal
HTML_debut
<i>
HTML_fin
</i>
JS_debut
\x3ci\x3e
JS_fin
\x3c\x2fi\x3e
BALISE_RED
BOOLEAN_Symbol
BaliseJS_debut
\x5bred\x5d
BaliseJS_fin
\x5b\x2fred\x5d
Balise_debut
[red]
Balise_fin
[/red]
FO_debut
color=#990033
FO_fin
color=black
HTML_debut
<span style="color:#990033;">
HTML_fin
</span>
JS_debut
\x3cspan style="color:#990033;"\x3e
JS_fin
\x3c\x2fspan\x3e
BALISE_TAB
BOOLEAN_Symbol
BaliseJS_debut
\x5btab\x5d
BaliseJS_fin
Balise_debut
[tab]
Balise_fin
FO_debut
[inline]=        
FO_fin
HTML_debut
<img src="/images/gestacplus/base/pixel.gif" width="40" height="1"/>
HTML_fin
JS_debut
\x3cimg src="\x2fimages\x2fgestacplus\x2fbase\x2fpixel.gif" width="40" height="1"\x2f\x3e
JS_fin
BALISE_LIST
BOOLEAN_Symbol
BaliseJS_debut
\x5bli\x5d
BaliseJS_fin
Balise_debut
[li]
Balise_fin
FO_debut
[inline]=•  
FO_fin
HTML_debut
•  
HTML_fin
JS_debut
\x26#x2022;\x26#160;\x26#160;
JS_fin
CODE5045487
BOOLEAN_Symbol
BaliseJS_debut
\x5b\x5d
BaliseJS_fin
Balise_debut
[]
Balise_fin
FO_debut
[inline]= 
FO_fin
HTML_debut
 
HTML_fin
JS_debut
\x26#160;
JS_fin
BALISE_GREEN
BOOLEAN_Symbol
BaliseJS_debut
\x5bgreen\x5d
BaliseJS_fin
\x5b\x2fgreen\x5d
Balise_debut
[green]
Balise_fin
[/green]
FO_debut
color=#008000
FO_fin
color=black
HTML_debut
<span style="color:#008000;">
HTML_fin
</span>
JS_debut
\x3cspan style="color:#008000;"\x3e
JS_fin
\x3c\x2fspan\x3e
CODE7508550
BOOLEAN_Symbol
BaliseJS_debut
\x5bblue\x5d
BaliseJS_fin
\x5b\x2fblue\x5d
Balise_debut
[blue]
Balise_fin
[/blue]
FO_debut
color=#0080FF
FO_fin
color=black
HTML_debut
<span style="color:#0080FF;">
HTML_fin
</span>
JS_debut
\x3cspan style="color:#0080FF;"\x3e
JS_fin
\x3c\x2fspan\x3e
BALISE_COURIER
BOOLEAN_Symbol
BaliseJS_debut
\x5bcourier\x5d
BaliseJS_fin
\x5b\x2fcourier\x5d
Balise_debut
[courier]
Balise_fin
[/courier]
FO_debut
font-family=Courier
FO_fin
font-family=
HTML_debut
<font style="font-family:Courier;">
HTML_fin
</font>
JS_debut
\x3cfont style="font-family:Courier;"\x3e
JS_fin
\x3c\x2ffont\x3e
BALISE_SIZE20
BOOLEAN_Symbol
BaliseJS_debut
\x5b20\x5d
BaliseJS_fin
\x5b\x2f20\x5d
Balise_debut
[20]
Balise_fin
[/20]
FO_debut
font-size=20pt
FO_fin
font-size=
HTML_debut
<font style="font-size:20pt;">
HTML_fin
</font>
JS_debut
\x3cfont style="font-size:20pt;"\x3e
JS_fin
\x3c\x2ffont\x3e
BALISE_SIZE16
BOOLEAN_Symbol
BaliseJS_debut
\x5b16\x5d
BaliseJS_fin
\x5b\x2f16\x5d
Balise_debut
[16]
Balise_fin
[/16]
FO_debut
font-size=16pt
FO_fin
font-size=
HTML_debut
<font style="font-size:16pt;">
HTML_fin
</font>
JS_debut
\x3cfont style="font-size:16pt;"\x3e
JS_fin
\x3c\x2ffont\x3e
BALISE_SIZE12
BOOLEAN_Symbol
BaliseJS_debut
\x5b12\x5d
BaliseJS_fin
\x5b\x2f12\x5d
Balise_debut
[12]
Balise_fin
[/12]
FO_debut
font-size=12pt
FO_fin
font-size=
HTML_debut
<font style="font-size:12pt;">
HTML_fin
</font>
JS_debut
\x3cfont style="font-size:12pt;"\x3e
JS_fin
\x3c\x2ffont\x3e
BALISE_SIZE8
BOOLEAN_Symbol
BaliseJS_debut
\x5b8\x5d
BaliseJS_fin
\x5b\x2f8\x5d
Balise_debut
[8]
Balise_fin
[/8]
FO_debut
font-size=8pt
FO_fin
font-size=
HTML_debut
<font style="font-size:8pt;">
HTML_fin
</font>
JS_debut
\x3cfont style="font-size:8pt;"\x3e
JS_fin
\x3c\x2ffont\x3e
BALISE_BLACKBACK
BOOLEAN_Symbol
BaliseJS_debut
\x5bblackback\x5d
BaliseJS_fin
\x5b\x2fblackback\x5d
Balise_debut
[blackback]
Balise_fin
[/blackback]
FO_debut
background-color=black
FO_fin
background-color=white
HTML_debut
<span style="background-color:black;">
HTML_fin
</span>
JS_debut
\x3cspan style="background-color:black;"\x3e
JS_fin
\x3c\x2fspan\x3e
BALISE_WHITE
BOOLEAN_Symbol
BaliseJS_debut
\x5bwhite\x5d
BaliseJS_fin
\x5b\x2fwhite\x5d
Balise_debut
[white]
Balise_fin
[/white]
FO_debut
color=white
FO_fin
color=black
HTML_debut
<span style="color:white;">
HTML_fin
</span>
JS_debut
\x3cspan style="color:white;"\x3e
JS_fin
\x3c\x2fspan\x3e
CODE47534071
BOOLEAN_Symbol
1
BaliseJS_debut
\x5bbeta\x5d
BaliseJS_fin
Balise_debut
[beta]
Balise_fin
FO_debut
[inline]=β
FO_fin
HTML_debut
β
HTML_fin
JS_debut
\x26#946;
JS_fin
CODE47534435
BOOLEAN_Symbol
1
BaliseJS_debut
\x5balpha\x5d
BaliseJS_fin
Balise_debut
[alpha]
Balise_fin
FO_debut
[inline]=α
FO_fin
HTML_debut
α
HTML_fin
JS_debut
\x26#945;
JS_fin
CODE47551722
BOOLEAN_Symbol
BaliseJS_debut
\x5bsub\x5d
BaliseJS_fin
\x5b\x2fsub\x5d
Balise_debut
[sub]
Balise_fin
[/sub]
FO_debut
vertical-align=sub
FO_fin
vertical-align=baseline
HTML_debut
<sub>
HTML_fin
</sub>
JS_debut
\x3csub\x3e
JS_fin
\x3c\x2fsub\x3e
CODE48535424
BOOLEAN_Symbol
1
BaliseJS_debut
\x5bLAMBDA\x5d
BaliseJS_fin
Balise_debut
[LAMBDA]
Balise_fin
FO_debut
[inline]=Λ
FO_fin
HTML_debut
Λ
HTML_fin
JS_debut
\x26#923;
JS_fin
CODE48535666
BOOLEAN_Symbol
1
BaliseJS_debut
\x5blambda\x5d
BaliseJS_fin
Balise_debut
[lambda]
Balise_fin
FO_debut
[inline]=λ
FO_fin
HTML_debut
λ
HTML_fin
JS_debut
\x26#955;
JS_fin
CODE47551793
BOOLEAN_Symbol
BaliseJS_debut
\x5bsup\x5d
BaliseJS_fin
\x5b\x2fsup\x5d
Balise_debut
[sup]
Balise_fin
[/sup]
FO_debut
vertical-align=super
FO_fin
vertical-align=baseline
HTML_debut
<sup>
HTML_fin
</sup>
JS_debut
\x3csup\x3e
JS_fin
\x3c\x2fsup\x3e
CODE56031535
BOOLEAN_Symbol
1
BaliseJS_debut
\x5bdelta\x5d
BaliseJS_fin
Balise_debut
[delta]
Balise_fin
FO_debut
[inline]=δ
FO_fin
HTML_debut
δ
HTML_fin
JS_debut
\x26#948;
JS_fin
CODE56073309
BOOLEAN_Symbol
1
BaliseJS_debut
\x5bpi\x5d
BaliseJS_fin
Balise_debut
[pi]
Balise_fin
FO_debut
[inline]=π
FO_fin
HTML_debut
π
HTML_fin
JS_debut
\x26#960;
JS_fin
CODE56074095
BOOLEAN_Symbol
1
BaliseJS_debut
\x5bDELTA\x5d
BaliseJS_fin
Balise_debut
[DELTA]
Balise_fin
FO_debut
[inline]=Δ
FO_fin
HTML_debut
Δ
HTML_fin
JS_debut
\x26#916;
JS_fin
CODE56074172
BOOLEAN_Symbol
1
BaliseJS_debut
\x5bMU\x5d
BaliseJS_fin
Balise_debut
[MU]
Balise_fin
FO_debut
[inline]=Μ
FO_fin
HTML_debut
Μ
HTML_fin
JS_debut
\x26#924;
JS_fin
CODE56074264
BOOLEAN_Symbol
1
BaliseJS_debut
\x5bPI\x5d
BaliseJS_fin
Balise_debut
[PI]
Balise_fin
FO_debut
[inline]=Π
FO_fin
HTML_debut
Π
HTML_fin
JS_debut
\x26#928;
JS_fin
CODE56074328
BOOLEAN_Symbol
1
BaliseJS_debut
\x5bSIGMA\x5d
BaliseJS_fin
Balise_debut
[SIGMA]
Balise_fin
FO_debut
[inline]=Σ
FO_fin
HTML_debut
Σ
HTML_fin
JS_debut
\x26#931;
JS_fin
CODE56075056
BOOLEAN_Symbol
1
BaliseJS_debut
\x5bALPHA\x5d
BaliseJS_fin
Balise_debut
[ALPHA]
Balise_fin
FO_debut
[inline]=Α
FO_fin
HTML_debut
Α
HTML_fin
JS_debut
\x26#913;
JS_fin
CODE56075186
BOOLEAN_Symbol
1
BaliseJS_debut
\x5bBETA\x5d
BaliseJS_fin
Balise_debut
[BETA]
Balise_fin
FO_debut
[inline]=Β
FO_fin
HTML_debut
Β
HTML_fin
JS_debut
\x26#914;
JS_fin
BALISE_SYMBOL
BOOLEAN_Symbol
BaliseJS_debut
\x5bsymbol\x5d
BaliseJS_fin
\x5b\x2fsymbol\x5d
Balise_debut
[symbol]
Balise_fin
[/symbol]
FO_debut
font-family=Symbol
FO_fin
font-family=
HTML_debut
<font style="font-family:Symbol;">
HTML_fin
</font>
JS_debut
\x3cfont style="font-family:Symbol;"\x3e
JS_fin
\x3c\x2ffont\x3e
CODE56072935
BOOLEAN_Symbol
1
BaliseJS_debut
\x5bmu\x5d
BaliseJS_fin
Balise_debut
[mu]
Balise_fin
FO_debut
[inline]=μ
FO_fin
HTML_debut
μ
HTML_fin
JS_debut
\x26#956;
JS_fin
CODE56073842
BOOLEAN_Symbol
1
BaliseJS_debut
\x5bsigma\x5d
BaliseJS_fin
Balise_debut
[sigma]
Balise_fin
FO_debut
[inline]=σ
FO_fin
HTML_debut
σ
HTML_fin
JS_debut
\x26#963;
JS_fin
CODE68199232
BOOLEAN_Symbol
1
BaliseJS_debut
\x5bphi\x5d
BaliseJS_fin
Balise_debut
[phi]
Balise_fin
FO_debut
[inline]=φ
FO_fin
HTML_debut
φ
HTML_fin
JS_debut
\x26#966;
JS_fin
CODE68199285
BOOLEAN_Symbol
1
BaliseJS_debut
\x5bPHI\x5d
BaliseJS_fin
Balise_debut
[PHI]
Balise_fin
FO_debut
[inline]=Φ
FO_fin
HTML_debut
Φ
HTML_fin
JS_debut
\x26#934;
JS_fin
CODE68199991
BOOLEAN_Symbol
1
BaliseJS_debut
\x5bgamma\x5d
BaliseJS_fin
Balise_debut
[gamma]
Balise_fin
FO_debut
[inline]=γ
FO_fin
HTML_debut
γ
HTML_fin
JS_debut
\x26#947;
JS_fin
CODE68200031
BOOLEAN_Symbol
1
BaliseJS_debut
\x5bGAMMA\x5d
BaliseJS_fin
Balise_debut
[GAMMA]
Balise_fin
FO_debut
[inline]=Γ
FO_fin
HTML_debut
Γ
HTML_fin
JS_debut
\x26#915;
JS_fin
CODE68200077
BOOLEAN_Symbol
1
BaliseJS_debut
\x5bomega\x5d
BaliseJS_fin
Balise_debut
[omega]
Balise_fin
FO_debut
[inline]=ω
FO_fin
HTML_debut
ω
HTML_fin
JS_debut
\x26#969;
JS_fin
CODE68200150
BOOLEAN_Symbol
1
BaliseJS_debut
\x5bOMEGA\x5d
BaliseJS_fin
Balise_debut
[OMEGA]
Balise_fin
FO_debut
[inline]=Ω
FO_fin
HTML_debut
Ω
HTML_fin
JS_debut
\x26#937;
JS_fin
CODE72092691
BOOLEAN_Symbol
BaliseJS_debut
\x5beta\x5d
BaliseJS_fin
Balise_debut
[eta]
Balise_fin
FO_debut
[inline]=η
FO_fin
HTML_debut
η
HTML_fin
JS_debut
\x26#951;
JS_fin
CODE72092805
BOOLEAN_Symbol
BaliseJS_debut
\x5bETA\x5d
BaliseJS_fin
Balise_debut
[ETA]
Balise_fin
FO_debut
[inline]=Η
FO_fin
HTML_debut
Η
HTML_fin
JS_debut
\x26#919;
JS_fin
BALISE_SOULIGNER
BOOLEAN_Symbol
BaliseJS_debut
\x5bu\x5d
BaliseJS_fin
\x5b\x2fu\x5d
Balise_debut
[u]
Balise_fin
[/u]
FO_debut
text-decoration=underline
FO_fin
text-decoration=none
HTML_debut
<u>
HTML_fin
</u>
JS_debut
\x3cu\x3e
JS_fin
\x3c\x2fu\x3e
CODE72092388
BOOLEAN_Symbol
BaliseJS_debut
\x5bpsi\x5d
BaliseJS_fin
Balise_debut
[psi]
Balise_fin
FO_debut
[inline]=ψ
FO_fin
HTML_debut
ψ
HTML_fin
JS_debut
\x26#968;
JS_fin
CODE72092541
BOOLEAN_Symbol
BaliseJS_debut
\x5bPSI\x5d
BaliseJS_fin
Balise_debut
[PSI]
Balise_fin
FO_debut
[inline]=Ψ
FO_fin
HTML_debut
Ψ
HTML_fin
JS_debut
\x26#936;
JS_fin
CODE140502511
BOOLEAN_Symbol
1
BaliseJS_debut
\x5brho\x5d
BaliseJS_fin
Balise_debut
[rho]
Balise_fin
FO_debut
[inline]=ρ
FO_fin
HTML_debut
ρ
HTML_fin
JS_debut
\x26#961;
JS_fin
CODE140504636
BOOLEAN_Symbol
1
BaliseJS_debut
\x5bRHO\x5d
BaliseJS_fin
Balise_debut
[RHO]
Balise_fin
FO_debut
[inline]=Ρ
FO_fin
HTML_debut
Ρ
HTML_fin
JS_debut
\x26#929;
JS_fin
CODE148292791
BOOLEAN_Symbol
BaliseJS_debut
\x5bepsilon\x5d
BaliseJS_fin
Balise_debut
[epsilon]
Balise_fin
FO_debut
[inline]=ε
FO_fin
HTML_debut
ε
HTML_fin
JS_debut
\x26#949;
JS_fin
CODE169976220
BOOLEAN_Symbol
BaliseJS_debut
\x5blig\x5d
BaliseJS_fin
Balise_debut
[lig]
Balise_fin
FO_debut
[inline]=›  
FO_fin
HTML_debut
›  
HTML_fin
JS_debut
\x26#x203A;\x26#160;\x26#160;
JS_fin
CODE148292899
BOOLEAN_Symbol
BaliseJS_debut
\x5bEPSILON\x5d
BaliseJS_fin
Balise_debut
[EPSILON]
Balise_fin
FO_debut
[inline]=Ε
FO_fin
HTML_debut
Ε
HTML_fin
JS_debut
\x26#917;
JS_fin
BALISETXT_SAUT
BOOLEAN_Symbol
BaliseJS_debut
\x5bbr\x2f\x5d
BaliseJS_fin
Balise_debut
[br/]
Balise_fin
FO_debut
FO_fin
HTML_debut
<br/>
HTML_fin
JS_debut
\x3cbr\x2f\x3e
JS_fin