Transcript MPI

Paralelné algoritmy
Informácie o predmete
•Klasifikovaný zápočet
•6 kreditov
•Prednášajúci:
•Ing. Róbert Čunderlík, PhD.
•Cvičiaci:
•Ing. Róbert Špir ([email protected])
Úvod do paralelného programovania
Výpočtovo náročné úlohy:
• CFD - computational fluid dynamics, modely turbulencií,
modely šírenia požiarov
• modelovanie globálnych zmien počasia
• supravodivosť, jadrové a termojadrové reakcie
• biológia, spracovanie genómov, tzv. protein folding
• chémia, modelovanie chemických väzieb
• medicína, spracovanie medicínskych dát
• správa veľkých databáz
• obsluha veľkého počtu transakcií
•...
 snaha zefektívniť časovo/pamäťovo náročné výpočty  využitie
paralelných počítačov (súbežné vykonanie elementárnych úkonov)
Architektúra paralelných počítačov
Sekvenčné počítače:
Paralelné počítače:
(Von Neumannova architektúra)
Definícia: paralelná architektúra je taká, ktorá obsahuje viac jednotiek
na spracovanie dát (PU)
Architektúra paralelných počítačov
Príklady paralelných architektúr:
• Processors Arrays
• Multiprocesory (spoločné adresové pole)
- nesymetrické multiprocesory
- symetrické multiprocesory
• Klaster (nemá spoločné adresové pole)
• Grid
-niekoľko uzlov (aj bežné PC)
• GPU – graphical processing unit
- 100-800 PU (nVidia, ATI)
podrobnejšie napr. na:
http://kmlinux.fjfi.cvut.cz/~oberhtom/
Architektúra paralelných počítačov
• Globálna pamäť:
- sprostredkováva komunikáciu
medzi výpočtovými jednotkami
(prístup do globálnej pamäte pomalý)
• Lokálna pamäť:
- výpočtové jednotky ich používajú vo
chvíli, keď vykonávajú výpočty nezávislé
na ostatných (rýchlejší prístup)
- vo všetkých paralelných architektúrach
- lokálna pamäť môže byť:
- operačná pamäť výpočtového uzla v prípade klastru alebo gridu
- cache pamäť v prípade viac-procesorových systémov
- register v prípade vektorových architektúr (MMX, SSE, AVX, GPU)
- ...
Processor arrays – pole procesorov
Zloženie:
• Front-end computer – plnohodnotný počítač (CPU priamy prístup do lokálnych pamätí)
• niekoľko jednoduchých, synchronizovaných výpočtových jednotiek s malou lok. pam.
(v minulosti lacnejšia cesta – dnes sa už upúšťa)
Multiprocesorové architektúry
Zloženie:
• niekoľko plnohodnotných procesorov
• zdieľané pamäte (rovnaké adresy u dvoch rôznych CPU ukazujú na rovnaké
miesto v pamäti)
•nezdieľané pamäte (nezávislý adresový priestor u rôznych CPU)
Delenie:
• podľa typu pamäte (zdieľaná alebo distribuovaná)
• podľa „zdieľatelnosti“ adresového priestoru
SMP – Symetric Multiprocessor
Charakteristika:
• obsahujú fyzicky zdieľanú pamäť  každý procesor (výpočtová jednotka) má
do nej rovnako rýchly prístup  tzv. UMA architektúra (Uniform Memory Access)
• rovnaká adresa na rôznych procesoroch ukazuje na rovnakú fyzickú pamäťovú
bunku
• každý procesor má svoju cache pamäť (môže mať aj viac úrovní), kt. býva
omnoho rýchlejšia  ale nie je prístupná ostatným procesorom
(príkladom sú aj bežné viac-jadrové procesory)
 na vývoj sa často používa rozhranie OpenMP
NUMA – Non-Uniform Memory Access
Charakteristika:
• podobný hardvérový model ako SMP, ale so zdieľaných adresovým priestorom
s použitím „hardware/software directory-based protocol“, ktorý udržuje „cache
coherency“ na procesoroch
• súbor všetkých lokálnych pamätí jednotlivých CPU tvorí jeden logický adresový
priestor
• každý procesor má rýchly prístup do vlastnej pamäte, no veľmi pomalý prístup
do cudzej pamäte  preto NUMA architektúra
• rovnaká adresa na rôznych procesoroch ukazuje na rovnakú fyzickú pamäťovú
bunku
(napr. jednotlivé servre vo výpočtovom centre na KMaDG)
MPP – Massively Parallel Processor
Charakteristika:
• obsahujú uzly (nodes) pospájané vysokorýchlostnou sieťou
• každý uzol má svoj procesor, pamäť aj I/O jednotku  distribuovaná pamäť
• operačný systém beží na každom uzle
• počet uzlov nemusí byť veľký, no každý uzol môže predstavovať aj SMP
alebo NUMA uzol  preto „massivelly“ (napr. klaster Embryo na KMaDG)
 na vývoj sa často používa štandard MPI (Message Passing Interface)
Príklad: Supercomputer IBM SP6 (CINECA, Italy)
Charakteristika:
Model: IBM pSeries 575
Architecture: IBM P6-575 Infiniband Cluster
Processor Type: IBM Power6, 4.7 GHz
Computing Cores: 5376
Computing Nodes: 168
RAM: 21 TB (128 GB/node)
Internal Network: Infiniband x4 DDR
Disk Space: 1.2 PB
Operating System: AIX 6
Peak Performance: 101 TFlop/s
Available compilers: Fortran90, C, C++
Parallel libraries: MPI, OpenMP, LAPI
In November 2009 IBM pSeries 575 has been ranked 61-th in TOP500
In June 2010 IBM pSeries 575 has been ranked 70-th in TOP500
In November 2010 IBM pSeries 575 has been ranked 95th in TOP500
www.top500.org
GRID computing
• spájanie aj bežných PC s cieľom zvýšiť efektívnosť výpočtov
• väčšinou realizácia sekvenčných programov, no aj paralelné výpočty (MPI)
• v rámci Európy:
DataGrid (2002 – 2004)
EGEE I, II, III (2004 – 2010)
EGI – European Grid Infrastruction (from 8 Feb 2010)
www.egi.eu
• na Slovensku:
SlovakGrid
• univerzitné (akademické) gridy
GPU computing
• výpočty na grafických kartách  výrazné zrýchlenie (aj 10-20-krát)
• obmedzenie na pamäť (6GB)
CUDA (Compute Unified Device Architecture)
- a parallel computing architecture developed by NVIDIA
OpenCL (Open Computing Language)
- otvorený multiplatformový štandard
DirectCompute
- API vytvorené spoločnosťou Microsoft
Amdahlov zákon
Hovorí, že ak P je pomer programu, ktorý sa dá paralelizovať a (P – 1) je pomer,
ktorý je sériový, potom maximálne zrýchlenie, ktoré sa dá dosiahnuť je
N – počet procesorov
S(N ) 
1
P
(1  P) 
N
Gustafsonov zákon
Hovorí, že s využitím vyššieho výpočtového výkonu môžeme za rovnaký čas
vyriešiť rozsiahlejší problém
N – počet procesorov
α – pomer programu ktorý sa nedá paralelizovať
S ( N )  N   ( N  1)
Modely paralelného programovania
Cieľ paralelného programovania:
• využiť dostupné procesory a znížiť výpočtový čas
Rôzne druhy architektúr  rôzne modely paralelného programovania:
a) SMP Based
b) MPP Based on Uniprocessor Nodes (Simple MPP)
c) MPP Based on SMP Nodes (Hybrid MPP)
- Multiple Single-Thread Processes pre Node
- One Multi-Thread Process per Node
SMP Based
• „multi-threaded “ programy
sú najvhodnejšie pre SMP
architektúru  pretože
„threads“ zdieľajú zdroje
(OpenMP)
• S1, S2 – procesy, kt. musia
byť vykonané sekvenčne
• P1- P4 – procesy, kt. môžu
byť vykonané paralelne
Fork-join model:
• Fork (rozvetvenie) – vytvára „thread“ (vlákno) a nie samotný proces
• Join (spojenie)
 obidva kroky potrebujú určitú réžiu („overhead“)
MPP Based on Uniprocessor Nodes (Simple MPP)
• adresový priestor nie je
zdieľaný medzi uzlami 
potreba prenosu dát cez
prepojovaciu sieť
message-passing
(MPI)
• jeden proces sa vykonáva na každom uzle
• procesy komunikujú každý s každým  čas na vykonanie každého P1-P4 je dlhší
ako pri sériovom programe
MPP Based on SMP Nodes (Hybrid MPP)
a) Multiple Single-Thead Processes pre Node
• ako predchádzajúci model
len sa využíva skutočnosť,
že „message-passing“ v
rámci SMP uzlu sa dá lepšie
optimalizovať  dá sa
docieliť zrýchlenie
MPP Based on SMP Nodes (Hybrid MPP)
b) One Multi-Thread Process per Node
• komunikácia v rámci uzlu cez
zdieľanú pamäť
(„multi-thread“ proces na uzle)
• komunikácia medzi uzlami
cez „message-passing“
 dá sa docieliť zrýchlenie
Rýchlosť komunikácie – základné pojmy
Rýchlosť komunikácie medzi procesorom a pamäťou je daná:
1. Latenciou (latency):
• udáva, za aký čas je pamäťový modul schopný vyhľadať požadované dáta
• je podstatná vtedy, ak čítame malé bloky dát z rôznych pamäťových miest
• dá sa znížiť „len“ zvyšovaním frekvencie taktovania pamäte
2. Prenosovou rýchlosťou (bandwidth):
• udáva, ako rýchlo je možné prenášať bloky dát po ich nájdení
• je podstatná pri práci s veľkými blokmi súvislých dát
• dá sa zvýšiť – rozšírením komunikačnej zbernice (použitím viac „drôtov“)
– pripojením ďalších pamäťových modulov
Rýchlosť komunikácie – latencia
Čakacia doba (ns)
Čakacia doba
180
160
140
120
100
80
60
40
20
0
0.03125 0.0625
0.125
0.25
0.5
1
2
4
8
16
32
64
128
256
512
Rýchlosť komunikácie – bandwidth
SPMD and MPMD
Typy „message-passing“ programov:
• podľa počtu programov, ktoré sa podieľajú na vykonaní paralelnej úlohy
a) SPMD (Single Program Multiple Data)
b) MPMD (Multiple Programs Multiple Data)
SPMD program
Sekvenčný
program:
Paralelný SPMD program:
Historický prehľad
60-70s:
• prvé paralelné počítače od polovice 60-s
• vysoká cena integrovaných obvodov a teda aj CPU  processor arrays
80s:
• s rozvojom VLSI (very-large-scale-integration) klesla cena procesorov 
 multiprocesory (zdieľaná pamäť)
• vhodnejšie na spracovanie kódu s podmienkami
• možnosť využitia viacerými uživateľmi
• systémy s viac ako 100 procesormi  problém s pamäťovým systémom
(problém „cache coherence“ a rovnocenného prepojenia procesorov na pamäť)
90s:
• rast výkonu bežných PC a sieťových komonentov (Ethernet) + klesajúca cena
 multiprocesory s distribuovanou pamäťou
po 2000:
• ukazuje sa problém zvyšovať výkon jednoprocesorových systémov zvyšovaním
frekvencie (v 2002 IBM odhadovalo, že v 2010 sa budú používať 10 GHz proc.)
• hľadajú sa cesty - viacjadrové procesory
- GPGPU = vektorové počítače
- trendom je CUDA (NVIDIA) a spájanie GPU do klastrov (SLI)
(súčasné sieťové prvky nie sú dostatočne rýchle )
OpenMP (Open Multi-Processing)
OpenMP – implicitná paralelizácia
-Fork-Join model
-Zdieľaný adresný priestor medzi jednotlivými vláknami
- Programovanie pomocou direktív kompilátora
-Je súčasťou štandardu programovacieho jazyka
- Nutná podpora kompilátora – iba C/C++ a Fortran
#pragma omp parallel for private(j,k)
for (i=0;i<=idim+1;i++)
for (j=0;j<=jdim+1;j++)
for (k=0;k<=kdim+1;k++)...
MPI – Message-Passing Interface
MPI is „message-passing library interface specification“ 
- je to špecifikácia, nie implementácia
- nie je to programovací jazyk
- všetky MPI operácie sú vyjadrené ako funkcie, „subroutines“
alebo metódy pre daný programovací jazyk (C, C++, Fortran,
Java, C#, Python...)  tvoria „MPI standard“ pre komunikáciu v
systémoch s distribuovanou pamäťou
Cieľ MPI: vývoj všeobecného štandardu na písanie „message-passing“ programov
Historický vývoj:
• 80s – viac nezávislých skupín vyvíja vlastné spôsoby komunikácie 
snaha zjednotiť 
• 1992: asi 40 organizácii (najmä IBM Watson Research Center, Intel’s
NX/2, Express, nCUBE’s Vertex a PARMACS ) začína spolupracovať na
prvej verzii štandardu, tzv. verzii MPI-1.0
• 1993: založenie „MPI Forum“ (www.mpi-forum.org)
• postupné korigovanie a dopĺňanie MPI štandardu  rôzne verzie
• posledná verzia zo septembra 2009: MPI-2.2
Implentácie MPI
OpenMPI:
http://www.open-mpi.org
LAM-MPI:
http://www.lam-mpi.org
MPICH:
http://www.mcs.anl.gov/research/projects/mpi/mpich1/
MPICH2:
http://phase.hpcc.jp/mirrors/mpi/mpich2/
http://www.mcs.anl.gov/research/projects/mpich2/
MPI Subroutines
Kategórie podprogramov (subroutines) MPI štandardu:
(pre verziu MPI-1.2 a IBM Parallel Environment pre AIX)
Envirement Management Subroutines
Základ kódu pre MPI
“MPI_Init” – inicializuje MPI prostredie
– musí byť volaná iba raz a všetkými procesormi
– až po jej zavolaní môžu nasledovať iné MPI subroutines
“MPI_Finalize” – ukončuje MPI procesy
– po jej zavolaní nemôžu nasledovať ďalšie MPI subroutines
Komunikačné skupiny
 určujú, ktoré procesy sa budú zúčastňovať zvolenej operácie
• ide o tzv. COMMUNICATORS s typom „MPI_Comm“,
t.j. identifikátor spojený so skupinou procesov
• všetky bežiace procesy sú obsiahnuté v skupine MPI_COMM_WORLD
definovanej v knižnici mpi.h
• možnosť tvorby vlastnej komunikačnej skupiny (MPI_Comm_split)
Informácie o procesoch:
• počet procesov (size) v danej skupine:
int MPI_Comm_size( MPI_Comm comm, int* size );
• identifikačné číslo procesu (rank) voči danej skupine:
int MPI_Comm_rank( MPI_Comm comm, int* rank );
Jednoduchý príklad
#include <mpi.h>
int main( int argc, char* argv[] )
{
int nprocs, myrank;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
printf(“%d: nprocs = %d myrank = %d\n”, myrank,nprocs,myrank);
MPI_Finalize();
}
komplilácia:
$
mpicc –o priklad priklad.c
spustenie:
$
mpiexec –n 3 ./priklad
výstup:
1: nprocs = 3
2: nprocs = 3
3: nprocs = 3
myrank = 0
myrank = 1
myrank = 2
Architektúra klastra na KMaDG
embryo01, embryo02:
4 * 2-jadrový procesor
32GB operačná pamäť
embryo03:
4 * 2-jadrový procesor
64GB operačná pamäť
embryo05, embryo06, embryo07:
4 * 4-jadrový procesor
128GB operačná pamäť
embryo08, embryo09:
4 * 8-jadrový procesor
256GB operačná pamäť
Architektúra klastra na KMaDG
•
embryo01 – 07:
– Fyzické prepojenie
RAM
CPU0
CPU1
RAM
RAM
CPU2
CPU3
RAM
Architektúra klastra na KMaDG
•
embryo08 - 09:
– MCM – Multi-Chip module
CPU2
CPU6
CPU3
CPU0
CPU7
RAM
CPU5
RAM
CPU4
CPU1
Collective Communication Subroutines