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