Ubuntu mpi: Forskjell mellom sideversjoner
mIngen redigeringsforklaring |
(For snever) |
||
(6 mellomliggende versjoner av en annen bruker er ikke vist) | |||
Linje 1: | Linje 1: | ||
== Ubuntu openmpi / mpich2 == | == Ubuntu openmpi / mpich2 == | ||
På denne siden kan du lese litt om de forskjellige begrepene man kommer bort i om man skal jobbe med programmering på flere prosesser. | |||
Det vi trenger for å komme igang er følgende: | Det vi trenger for å komme igang er følgende: | ||
Linje 12: | Linje 12: | ||
=== Kompilatorer === | === Kompilatorer === | ||
Det finnes mange forskjellige typer kompilatorer men de mest aktuelle er gnu, portland group og intel. Gnucompilatorene er gratis, mens pgi og intel kompilatorene er lisensierte. Du finner disse i softwarecenter ved å søke på f.eks gfortran eller pgi. De fleste aktuelle miljøer får alle nødvendige kompilatorer | Det finnes mange forskjellige typer kompilatorer men de mest aktuelle er gnu, portland group og [[Ubuntu_ifort|intel]]. Gnucompilatorene er gratis, mens pgi og [[Ubuntu_ifort|intel]] kompilatorene er lisensierte. Du finner disse i softwarecenter ved å søke på f.eks gfortran eller pgi. PGI og [[Ubuntu_ifort|Intel]] vil kun dukke opp hos de miljøene som faktisk har lisens tilgjengelig. De fleste aktuelle miljøer får alle nødvendige kompilatorer forhåndsinstallert. | ||
For å sjekke at pakken har kommet inn som forventet. | For å sjekke at pakken har kommet inn som forventet. | ||
<pre> | |||
$ gfortran -v | $ gfortran -v | ||
Using built-in specs. | Using built-in specs. | ||
Linje 24: | Linje 24: | ||
Thread model: posix | Thread model: posix | ||
gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) | gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) | ||
</pre> | |||
Eventuelt om du har [[Ubuntu_ifort|Intelcompilator]] | |||
<pre> | |||
$ ifort -V | |||
Intel(R) Fortran Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 12.0 Build 20110427 | |||
Copyright (C) 1985-2011 Intel Corporation. All rights reserved. | |||
</pre> | |||
=== MPI Implementasjon === | === MPI Implementasjon === | ||
Linje 29: | Linje 37: | ||
Akkurat som med kompilatorer finnes det forskjellige mpi pakker å velge mellom. MPI (message passing interface) er en standard som gjør at du kan kjøre programmene dine på flere prosessorer / hoster samtidig. For å lære mer om MPI kan du begynne å lese artikkelen MPI på wikpedia: http://en.wikipedia.org/wiki/Message_Passing_Interface | Akkurat som med kompilatorer finnes det forskjellige mpi pakker å velge mellom. MPI (message passing interface) er en standard som gjør at du kan kjøre programmene dine på flere prosessorer / hoster samtidig. For å lære mer om MPI kan du begynne å lese artikkelen MPI på wikpedia: http://en.wikipedia.org/wiki/Message_Passing_Interface | ||
For å installere på våre Ubuntu maskiner kan vi som vanlig bruke softwarecenter (mpich2, openmpi-common, openmpi-bin, openmpi-doc og evt openmpi-checkpoint), men sansynligheten for at du har fått installert både openmpi og mpich2 automatisk er ganske stor. | For å installere på våre Ubuntu maskiner kan vi som vanlig bruke [[Ubuntu_softwarecenter|softwarecenter]] (mpich2, openmpi-common, openmpi-bin, openmpi-doc og evt openmpi-checkpoint), men sansynligheten for at du har fått installert både openmpi og mpich2 automatisk er ganske stor. | ||
Sjansen er stor for at du nå sitter med to forskjellige implementasjoner av MPI, mpich og open-mpi. Disse skal i teorien være like, men i praksis er det både syntaksforskjeller og annet smårusk som gjør at man kan foretrekke den ene over den andre. Om du vet du klarer deg med kun en av implementasjonene gjør du enklest i å bare installere den ene du trenger. Forskjeller i syntaks / bruksmåte finner du lenger nede på denne siden. | Sjansen er stor for at du nå sitter med to forskjellige implementasjoner av MPI, mpich og open-mpi. Disse skal i teorien være like, men i praksis er det både syntaksforskjeller og annet smårusk som gjør at man kan foretrekke den ene over den andre. Om du vet du klarer deg med kun en av implementasjonene gjør du enklest i å bare installere den ene du trenger. Forskjeller i syntaks / bruksmåte finner du lenger nede på denne siden. | ||
Linje 37: | Linje 45: | ||
Nå som vi har kompilatorer og mpi på plass trenger vi wrappere. Mange kaller wrapperene for mpi-kompilatorer, men i praksis er det snarveier til de vanlige kompilatorene, hvor flagg og opsjoner for kompilering med mpistøtte er tatt med. | Nå som vi har kompilatorer og mpi på plass trenger vi wrappere. Mange kaller wrapperene for mpi-kompilatorer, men i praksis er det snarveier til de vanlige kompilatorene, hvor flagg og opsjoner for kompilering med mpistøtte er tatt med. | ||
Så hva er egentlig denne wrapperen? Først lister vi ut alle wrapperene vi har tilgjengelige. | '''Så hva er egentlig denne wrapperen?''' ''Først lister vi ut alle wrapperene vi har tilgjengelige.'' | ||
<pre> | |||
$ mpif | $ mpif | ||
mpif77 mpif77.mpich2 mpif77.openmpi mpif90 mpif90.mpich2 mpif90.openmpi | mpif77 mpif77.mpich2 mpif77.openmpi mpif90 mpif90.mpich2 mpif90.openmpi | ||
</pre> | |||
mpif77 og mpif90 er snarveier til den av wrapperene som er default (enten mpif77.mpich2 eller mpif77.openmpi og tilsvarende for Fortran90 og e.v.t CPP om du har det). | mpif77 og mpif90 er snarveier til den av wrapperene som er default (enten mpif77.mpich2 eller mpif77.openmpi og tilsvarende for Fortran90 og e.v.t CPP om du har det). | ||
Linje 46: | Linje 55: | ||
du kan altså bruke en spesifikk wrapper ved å skrive den fullt ut. Eksempelvis mpif77.openmpi sikrer deg at du får openmpi uavhengig av om default på systemet er satt opp til mpich2 eller openmpi. | du kan altså bruke en spesifikk wrapper ved å skrive den fullt ut. Eksempelvis mpif77.openmpi sikrer deg at du får openmpi uavhengig av om default på systemet er satt opp til mpich2 eller openmpi. | ||
Hvordan sjekker jeg hvilken wrapper som er default? Dette styres av debian sitt update-alternatives system. | '''Hvordan sjekker jeg hvilken wrapper som er default?''' ''Dette styres av debian sitt update-alternatives system.'' | ||
<pre> | |||
$ update-alternatives --display mpi | $ update-alternatives --display mpi | ||
mpi - auto modus | mpi - auto modus | ||
Linje 53: | Linje 62: | ||
... mye tekst kommer her... | ... mye tekst kommer her... | ||
Nåværende «beste» versjon er «/usr/include/mpich2». | Nåværende «beste» versjon er «/usr/include/mpich2». | ||
</pre> | |||
Men hva var nå denne wrapperen egentlig for noe? Ved å kjøre de med switchen -show ser vi hva som egentlig skjer. | '''Men hva var nå denne wrapperen egentlig for noe?''' ''Ved å kjøre de med switchen -show ser vi hva som egentlig skjer.'' | ||
<pre> | |||
$ mpif77 -show | $ mpif77 -show | ||
gfortran -Wl,-Bsymbolic-functions -Wl,-z,relro -I/usr/include/mpich2 -L/usr/lib -lmpich -lopa -lmpl -lrt -lcr -lpthread | gfortran -Wl,-Bsymbolic-functions -Wl,-z,relro -I/usr/include/mpich2 -L/usr/lib -lmpich -lopa -lmpl -lrt -lcr -lpthread | ||
$ mpif77.openmpi -show | $ mpif77.openmpi -show | ||
gfortran -I/usr/lib/openmpi/include -pthread -L/usr/lib/openmpi/lib -lmpi_f77 -lmpi -lopen-rte -lopen-pal -ldl -Wl,--export-dynamic -lnsl -lutil -lm -ldl | gfortran -I/usr/lib/openmpi/include -pthread -L/usr/lib/openmpi/lib -lmpi_f77 -lmpi -lopen-rte -lopen-pal -ldl -Wl,--export-dynamic -lnsl -lutil -lm -ldl | ||
</pre> | |||
Husk at den første kommandoen 'mpif77 -show' tilsvarer 'mpif77.mpich2 -show' siden mpich2 er gjeldende mpi implementasjon ifølge update-alternatives. | Husk at den første kommandoen 'mpif77 -show' tilsvarer 'mpif77.mpich2 -show' siden mpich2 er gjeldende mpi implementasjon ifølge update-alternatives. | ||
Linje 69: | Linje 80: | ||
Som endel av installasjonen av mpiimplementasjonene har vi også fått det vi trenger for å eksekvere våre paralelle programmer. Igjen kan vi sjekke hva vi har tilgjengelig, og hvilken som er satt som default. | Som endel av installasjonen av mpiimplementasjonene har vi også fått det vi trenger for å eksekvere våre paralelle programmer. Igjen kan vi sjekke hva vi har tilgjengelig, og hvilken som er satt som default. | ||
<pre> | |||
$ update-alternatives --display mpirun | $ update-alternatives --display mpirun | ||
mpirun - auto modus | mpirun - auto modus | ||
Linje 81: | Linje 93: | ||
slave mpirun.1.gz: /usr/share/man/man1/mpirun.openmpi.1.gz | slave mpirun.1.gz: /usr/share/man/man1/mpirun.openmpi.1.gz | ||
Nåværende «beste» versjon er «/usr/bin/mpirun.openmpi». | Nåværende «beste» versjon er «/usr/bin/mpirun.openmpi». | ||
</pre> | |||
Akurat som med wrapperene kan vi kjøre programmene ved å oppgi det fulle navnet på implementasjonen vi vil bruke 'mpirun.openmpi' og 'mpirun.mpich2', eller om vi ønsker å bruke den defaulte 'mpirun' (i eksempelet over mpich2 versjonen). | Akurat som med wrapperene kan vi kjøre programmene ved å oppgi det fulle navnet på implementasjonen vi vil bruke 'mpirun.openmpi' og 'mpirun.mpich2', eller om vi ønsker å bruke den defaulte 'mpirun' (i eksempelet over mpich2 versjonen). | ||
Ønsker du å få endret hva som er default på systemet kan du ta kontakt med [[Brukerstøtte_for_ansatte|BRITA]] | |||
[[Kategori: | [[Kategori:Linux]] | ||
[[Kategori:Programvare]] |
Siste sideversjon per 9. mar. 2017 kl. 10:15
Ubuntu openmpi / mpich2
På denne siden kan du lese litt om de forskjellige begrepene man kommer bort i om man skal jobbe med programmering på flere prosesser.
Det vi trenger for å komme igang er følgende:
- en kompilator (fortran / c / c++)
- en mpi pakke (mpich2 / open-mpi)
- en mpi wrapper
- en mpiexec / mpirun
Kompilatorer
Det finnes mange forskjellige typer kompilatorer men de mest aktuelle er gnu, portland group og intel. Gnucompilatorene er gratis, mens pgi og intel kompilatorene er lisensierte. Du finner disse i softwarecenter ved å søke på f.eks gfortran eller pgi. PGI og Intel vil kun dukke opp hos de miljøene som faktisk har lisens tilgjengelig. De fleste aktuelle miljøer får alle nødvendige kompilatorer forhåndsinstallert.
For å sjekke at pakken har kommet inn som forventet.
$ gfortran -v Using built-in specs. COLLECT_GCC=gfortran COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
Eventuelt om du har Intelcompilator
$ ifort -V Intel(R) Fortran Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 12.0 Build 20110427 Copyright (C) 1985-2011 Intel Corporation. All rights reserved.
MPI Implementasjon
Akkurat som med kompilatorer finnes det forskjellige mpi pakker å velge mellom. MPI (message passing interface) er en standard som gjør at du kan kjøre programmene dine på flere prosessorer / hoster samtidig. For å lære mer om MPI kan du begynne å lese artikkelen MPI på wikpedia: http://en.wikipedia.org/wiki/Message_Passing_Interface
For å installere på våre Ubuntu maskiner kan vi som vanlig bruke softwarecenter (mpich2, openmpi-common, openmpi-bin, openmpi-doc og evt openmpi-checkpoint), men sansynligheten for at du har fått installert både openmpi og mpich2 automatisk er ganske stor.
Sjansen er stor for at du nå sitter med to forskjellige implementasjoner av MPI, mpich og open-mpi. Disse skal i teorien være like, men i praksis er det både syntaksforskjeller og annet smårusk som gjør at man kan foretrekke den ene over den andre. Om du vet du klarer deg med kun en av implementasjonene gjør du enklest i å bare installere den ene du trenger. Forskjeller i syntaks / bruksmåte finner du lenger nede på denne siden.
MPI Kompilatorer / MPI Wrappere
Nå som vi har kompilatorer og mpi på plass trenger vi wrappere. Mange kaller wrapperene for mpi-kompilatorer, men i praksis er det snarveier til de vanlige kompilatorene, hvor flagg og opsjoner for kompilering med mpistøtte er tatt med.
Så hva er egentlig denne wrapperen? Først lister vi ut alle wrapperene vi har tilgjengelige.
$ mpif mpif77 mpif77.mpich2 mpif77.openmpi mpif90 mpif90.mpich2 mpif90.openmpi
mpif77 og mpif90 er snarveier til den av wrapperene som er default (enten mpif77.mpich2 eller mpif77.openmpi og tilsvarende for Fortran90 og e.v.t CPP om du har det).
du kan altså bruke en spesifikk wrapper ved å skrive den fullt ut. Eksempelvis mpif77.openmpi sikrer deg at du får openmpi uavhengig av om default på systemet er satt opp til mpich2 eller openmpi.
Hvordan sjekker jeg hvilken wrapper som er default? Dette styres av debian sitt update-alternatives system.
$ update-alternatives --display mpi mpi - auto modus lenke peker for øyeblikket til /usr/include/mpich2 ... mye tekst kommer her... Nåværende «beste» versjon er «/usr/include/mpich2».
Men hva var nå denne wrapperen egentlig for noe? Ved å kjøre de med switchen -show ser vi hva som egentlig skjer.
$ mpif77 -show gfortran -Wl,-Bsymbolic-functions -Wl,-z,relro -I/usr/include/mpich2 -L/usr/lib -lmpich -lopa -lmpl -lrt -lcr -lpthread $ mpif77.openmpi -show gfortran -I/usr/lib/openmpi/include -pthread -L/usr/lib/openmpi/lib -lmpi_f77 -lmpi -lopen-rte -lopen-pal -ldl -Wl,--export-dynamic -lnsl -lutil -lm -ldl
Husk at den første kommandoen 'mpif77 -show' tilsvarer 'mpif77.mpich2 -show' siden mpich2 er gjeldende mpi implementasjon ifølge update-alternatives.
Om du ikke ønsker å bruke wrapperene kan du skrive ut hele linjen som kom etter -show, men da vil jeg påstå at wrapperen er mest behagelig å forholde seg til. Det finnes måter å endre wrapper flagg på også, men det er litt mer avansert.
MPI Run / MPI Exec
Som endel av installasjonen av mpiimplementasjonene har vi også fått det vi trenger for å eksekvere våre paralelle programmer. Igjen kan vi sjekke hva vi har tilgjengelig, og hvilken som er satt som default.
$ update-alternatives --display mpirun mpirun - auto modus lenke peker for øyeblikket til /usr/bin/mpirun.openmpi /usr/bin/mpirun.mpich2 - prioritet 40 slave mpiexec: /usr/bin/mpiexec.mpich2 slave mpiexec.1.gz: /usr/share/man/man1/mpiexec.mpich2.1.gz slave mpirun.1.gz: /usr/share/man/man1/mpirun.mpich2.1.gz /usr/bin/mpirun.openmpi - prioritet 50 slave mpiexec: /usr/bin/mpiexec.openmpi slave mpiexec.1.gz: /usr/share/man/man1/mpiexec.openmpi.1.gz slave mpirun.1.gz: /usr/share/man/man1/mpirun.openmpi.1.gz Nåværende «beste» versjon er «/usr/bin/mpirun.openmpi».
Akurat som med wrapperene kan vi kjøre programmene ved å oppgi det fulle navnet på implementasjonen vi vil bruke 'mpirun.openmpi' og 'mpirun.mpich2', eller om vi ønsker å bruke den defaulte 'mpirun' (i eksempelet over mpich2 versjonen).
Ønsker du å få endret hva som er default på systemet kan du ta kontakt med BRITA