From Wikipedia, the free encyclopedia
OpenMPI és una Message Passing Interface (interfície de pas de missatges) de codi obert desenvolupada i mantinguda per un consorci de socis acadèmics, d'investigació i de la indústria per construir la millor biblioteca MPI disponible, amb una primera versió publicada el 2005. S'utilitza a molts supercomputadors (TOP500) per a executar programes de manera distribuïda i aconseguir un alt rendiment. Com per exemple el Taiwania 2, que utilitza la versió 3.1.0 d'OpenMPI.[1]
Aquest article podria incomplir els criteris generals d'admissibilitat. |
Tipus | programari lliure i biblioteca informàtica |
---|---|
Versió inicial | |
Versió estable | |
Llicència | llicència BSD de 3 clàusules |
Característiques tècniques | |
Sistema operatiu | multiplataforma |
Escrit en | C |
Més informació | |
Lloc web | open-mpi.org |
| |
L'OpenMPI és programari de codi lliure, que es basa en el pas de missatges de MPI. El projecte es va originar el 2003, quan un grup de desenvolupadors de programari de grups com FT-MPI, LA-MPI, LAM/MPI van decidir iniciar una implementació de programari lliure sobre MPI, com que fins al moment hi havia molta diversitat i confusió sobre les versions existents. El codi i el disseny va començar el 2004, i no va ser fins al 17 de novembre del 2005 que va sortir la seva primera versió 1.0.[2]
A mesura que es van anar desenvolupant noves versions, diversos grups de recerca es van unir al projecte, i avui en dia hi ha 14 membres i 6 contribuïdors, sent les universitats i grups per supercomputadors els qui més van apostar per aquesta implementació. Els membres originals són: High Performance Computing Center, Stuttgart, Indiana University, Los Alamos National Laboratory i The University of Tennessee.[3]
El programari OpenMPI te com a objectius prioritaris ser de codi obert i lliure, i obtenir un rendiment òptim i eficient per tal d'aprofitar la potència dels grans computadors. Com a característiques té:[4]
Està composta per tres capes abstractes:[5]
Actualment, OpenMPI te suport total amb els compiladors de Intel 18.0.3 i Gnu 4.8.5, que són els estàndards actuals per programar, per tant sent així compatible amb la majoria d'aplicacions.
Per poder utilitzar les seves funciones, primer hem de carregar els mòduls al ordinador, si volem utilitzar l'entorn de compilació GCC:
$ module load openmpi-gcc/2.0.0
$ module load openmpi-gcc/3.0.0
On indiquem quina versió volem instal·lar, segons sigui la 2.0.0, 3.0.0 respectivament. Una vegada instal·lats els mòduls, haurem d'executar la nostra aplicació:[6]
$ mpi[cc|c++|f77|f90|fort] <ficher_font> -o <nom_executable>
S'ha d'indicar per quin llenguatge de programació es vol executar l'aplicació:
A continuació es donaran un conjunt d'exemples de funcionament de la llibreria OpenMPI en els diferents llenguatges de programació on hi ha una implementació de la llibreria. En el moment d'escriptura, està disponible als llenguatges C, C++ i Fortran. Alguns d'aquests exemples han estat extrets del repositori oficial.[7] En el cas C++ no farem servir cap exemple, ja que són quasi idèntics a C.
OpenMPI disposa d'un conjunt de funcions bàsiques que son necessàries per habilitar la comunicació i compartició de dades entre ordinadors o processadors. Per tal d'iniciar i finalitzar les comunicacions farem ús de MPI_Init()[8] i MPI_Finalize()[9] respectivament.
Un exemple de programa escrit en C, que anomenarem t1.c que fa ús d'OpenMPI en la versió 3 seria el següent:
#include <stdio.h>
#include <mpi.h>
void main(int argc, char *argv[])
{
MPI_Init(&argc, &argv);
printf("Hola món!");
MPI_Finalize();
}
Per compilar aquest programa haurem d'executar la següent comanda:
mpicc -o test1 t1.c -lmpi
Si volguéssim compilar en C++, només hem de canviar el compilador, quedant de la següent forma:
mpic++ -o test1 t1.c -lmpi
On mpicc o mpic++ indica que estem fent ús del compilador d'OpenMPI, test1 és el nom de l'executable que generarem, t1.c és el codi font a compilar en aquest cas i amb -lmpi enllacem amb la llibreria de MPI.
Per executar el programa haurem de fer ús d'una comanda de MPI:
mpirun -np 4 test1
Tot indicant el nombre de processos que volem fer servir en el programa després de -np, en aquest cas quatre processos. Amb la comanda anterior la sortida del programa sería:
Hola món!
Hola món!
Hola món!
Hola món!
Per tal de facilitar la comunicació i coordinació en la execució de programes que facin ús de la llibreria OpenMPI, es pot indicar que la llibreria assigni un rang a cada procés, numerats de 0 a N, on N és el nombre de processos o nodes dels que es faci ús. Es farà la assignació mitjançant la funció MPI_Comm_rank()[10] i es podrà saber el nombre de processos en ús amb la funció MPI_Comm_size().[11] A sota es pot veure un exemple senzill en el qual es mostra el funcionament d'un programa amb assignació de rangs als processos:
#include <stdio.h>
#include <mpi.h>
int main(int argc, char * argv[]) {
int rank, size;
MPI_Init(& argc, & argv); // Inicialització
MPI_Comm_rank(MPI_COMM_WORLD, &rank); // Determina el rang del procés al comunicador
MPI_Comm_size(MPI_COMM_WORLD, &size); // Retorna la mida del grup associat al comunicador (quants processos hi ha?)
printf(“Hello world from process %d of %d\n", rank, size);
MPI_Finalize();
return 0;
}
La sortida per pantalla derivada de l'execució del programa anterior és la següent:
Hello world from process 2 of 4
Hello world from process 1 of 4
Hello world from process 3 of 4
Hello world from process 0 of 4
Un exemple d'escrit en Fortran, que anomenarem test_fortran.f sería el següent:
program main
implicit none
include 'mpif.h'
integer ierr, rank, size, len
character(len=MPI_MAX_LIBRARY_VERSION_STRING) version
call MPI_INIT(ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr)
call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierr)
call MPI_GET_LIBRARY_VERSION(version, len, ierr)
write(*, '("Hello, world, I am ", i2, " of ", i2)')
& rank, size
call MPI_FINALIZE(ierr)
end
Això ho compilarem de forma molt similar a les anteriors, canviant el compilador:
mpifort -o fort test_fortran.f -lmpi
Un cop compilat, podrem executar-ho fent ús de la següent comanda, un altre cop, igual a l'anterior:
mpirun -np 2 ./fort
Que ens donarà aquesta sortida per pantalla:
Hello, world, I am 0 of 2
Hello, world, I am 1 of 2
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.