Forum » Programiranje » MPI
MPI
incognito ::
Živijo,
Sem gledal po forumu, pa se mi zdi da podobne teme še ni bilo odprte. Skratka, zanima me če ima morda kdo kakšne izkušnje z implementiranjem MPI (wiki)?
Vzpostavil bi rad "emulirano" okolje, tako da bi zadevo osvojil na navadnem enoprocesorskem računalu, potem pa bi iz tega gradil dalje. Predvidevam da ljudje, ki razvijajo programe za izvajanje na clustrih tudi ne počnejo tega v "produkcijskem" okolju.
Skratka na Debianu sem namestil MPICH knjižnice ter prevedel demo na wikipedi-i. Ko pa zadevo poženem, se zadeva ustavi ob klicu MPI_Init(). Google mi ni znal postreči s pravimi odgovori kako naprej, možno pa je, da ga nisem znal pravilno vprašati. Se morda kdo ukvarja s tem in bi mi znal svetovati kako vzpostaviti testno okolje na enoprocesorskem računalu?
Spodaj še prilagam kodo z Wikipedie, na kateri sem zadevo testiral.
Edit: Popravil formatiranje kode.
Sem gledal po forumu, pa se mi zdi da podobne teme še ni bilo odprte. Skratka, zanima me če ima morda kdo kakšne izkušnje z implementiranjem MPI (wiki)?
Vzpostavil bi rad "emulirano" okolje, tako da bi zadevo osvojil na navadnem enoprocesorskem računalu, potem pa bi iz tega gradil dalje. Predvidevam da ljudje, ki razvijajo programe za izvajanje na clustrih tudi ne počnejo tega v "produkcijskem" okolju.
Skratka na Debianu sem namestil MPICH knjižnice ter prevedel demo na wikipedi-i. Ko pa zadevo poženem, se zadeva ustavi ob klicu MPI_Init(). Google mi ni znal postreči s pravimi odgovori kako naprej, možno pa je, da ga nisem znal pravilno vprašati. Se morda kdo ukvarja s tem in bi mi znal svetovati kako vzpostaviti testno okolje na enoprocesorskem računalu?
Spodaj še prilagam kodo z Wikipedie, na kateri sem zadevo testiral.
/* "Hello World" Type MPI Test Program */ #include <mpi.h> #include <stdio.h> #include <string.h> #define BUFSIZE 128 #define TAG 0 int main(int argc, char *argv[]) { char idstr[32]; char buff[BUFSIZE]; int numprocs; int myid; int i; MPI_Status stat; MPI_Init(&argc,&argv); /* all MPI programs start with MPI_Init; all 'N' processes exist thereafter */ MPI_Comm_size(MPI_COMM_WORLD,&numprocs); /* find out how big the SPMD world is */ MPI_Comm_rank(MPI_COMM_WORLD,&myid); /* and this processes' rank is */ /* At this point, all the programs are running equivalently, the rank is used to distinguish the roles of the programs in the SPMD model, with rank 0 often used specially... */ if(myid == 0) { printf("%d: We have %d processors\n", myid, numprocs); for(i=1;i<numprocs;i++) { sprintf(buff, "Hello %d! ", i); MPI_Send(buff, BUFSIZE, MPI_CHAR, i, TAG, MPI_COMM_WORLD); } for(i=1;i<numprocs;i++) { MPI_Recv(buff, BUFSIZE, MPI_CHAR, i, TAG, MPI_COMM_WORLD, &stat); printf("%d: %s\n", myid, buff); } } else { /* receive from rank 0: */ MPI_Recv(buff, BUFSIZE, MPI_CHAR, 0, TAG, MPI_COMM_WORLD, &stat); sprintf(idstr, "Processor %d ", myid); strcat(buff, idstr); strcat(buff, "reporting for duty\n"); /* send to rank 0: */ MPI_Send(buff, BUFSIZE, MPI_CHAR, 0, TAG, MPI_COMM_WORLD); } MPI_Finalize(); /* MPI Programs end with MPI Finalize; this is a weak synchronization point */ return 0; }
Edit: Popravil formatiranje kode.
- spremenil: incognito ()
terryww ::
Uporabnik zee vem da ima izkušnje s programiranjem klastrov. Mimogrede, ponavadi se lokalno uporablja OpenMP (se poslužuje prednosti SMP), za klice med matičnimi pa MPI. Maš razne študije kaj in kako se splača programirat za nek problem - ali samo MPI ali MPI+OpenMP ali kaj drugega. V povprečju se MPI+OpenMP najboljše obnese.
Aja, če ustreza tvojemu problemu, se splača povohat grafične in delat na recimo CUDA (programiraš GPU namesto CPU). 1. od okoli 12. prispevkov na to temo: http://www.ddj.com/hpc-high-performance...
Kaj drugi delajo s CUDA: http://www.nvidia.com/object/cuda_home....
Aja, če ustreza tvojemu problemu, se splača povohat grafične in delat na recimo CUDA (programiraš GPU namesto CPU). 1. od okoli 12. prispevkov na to temo: http://www.ddj.com/hpc-high-performance...
Kaj drugi delajo s CUDA: http://www.nvidia.com/object/cuda_home....
Zgodovina sprememb…
- spremenil: terryww ()
incognito ::
Mi je uspelo zadevo pripravit do izvajanja. Namestil sem tako LAM kot tudi OpenMPI; mimogrede Debian ima to odlično podprto (za ostale distrote ne vem) -- sedaj pa sledi primerjava in testiranje.
@jmakov
Hvala za odgovor in povezavo glede izvajanja na GPU-jih. Vsekakor zanimivo branje. Po guglanju dalje sem ugotovil, da so nekatere algoritme (gledal sem tiste ki so zanimivi zame) uspeli pohitriti med 15 do 100-krat, kar je čista zmaga.
LPr
@jmakov
Hvala za odgovor in povezavo glede izvajanja na GPU-jih. Vsekakor zanimivo branje. Po guglanju dalje sem ugotovil, da so nekatere algoritme (gledal sem tiste ki so zanimivi zame) uspeli pohitriti med 15 do 100-krat, kar je čista zmaga.
LPr
zee ::
Kolikor sem imel priloznost primerjati hitrost racunanja, je OpenMPI priblizno 1.5x hitrejsi od MPI. Do te stevilke sem prisel tako, da sem enega svojih racunov pognal s programom, prevedenim z OpenMPI-jem in s programom, prevedenim z MPI. Poracunani sistem je v vseh sistemih enak, prav tako je enaka strojna oprema.
V stevilkah: 48 h/racun vs. 72 h/racun.
V stevilkah: 48 h/racun vs. 72 h/racun.
zee
Linux: Be Root, Windows: Re Boot
Giant Amazon and Google Compute Cloud in the Sky.
Linux: Be Root, Windows: Re Boot
Giant Amazon and Google Compute Cloud in the Sky.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Supercomputer (cluster)Oddelek: Pomoč in nasveti | 4810 (3485) | johnnyyy |
» | [C++] problem z binarnimi datotekamiOddelek: Programiranje | 963 (828) | mallard |
» | Oblak doma?Oddelek: Operacijski sistemi | 1779 (1169) | pegasus |
» | Paralelno programiranje in platformeOddelek: Programiranje | 1837 (1321) | terryww |
» | c++ header fileOddelek: Programiranje | 864 (823) | Vesoljc |