Республика Россоно
- 1 year ago
- 0
- 0
MPICH ( сокр. от англ. «Message Passing Interface CHameleon» ) — одна из самых первых разработанных библиотек MPI . На её базе было создано большое количество других библиотек как открытых , так и коммерческих .
До ноября 2012 года существовали две ветви исходных кодов: MPICH1 и MPICH2. Разработка ветви MPICH1 заморожена. Ветвь MPICH2 активно разрабатывается в Аргоннской национальной лаборатории США , с участием компаний IBM , Cray , , Microsoft , Intel , , Qlogic , , UBC , а также Университета штата Огайо . Начиная с релиза в ноябре 2012 проект MPICH2 был переименован обратно в "MPICH", но уже версии 3.0. Начиная с этой версии объявлена полная поддержка стандарта MPI-3.
MPICH2 — легкопереносимая быстрая реализация стандарта MPI. Отличительные особенности:
Ниже приведены примеры программ с использованием библиотеки MPICH:
В этой программе на языке Fortran каждый из созданных потоков на вычислительном кластере выводит свой номер и приветствие:
program hello
include 'mpif.h'
integer rank, size, ierror, tag, status(MPI_STATUS_SIZE)
call MPI_INIT(ierror)
call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierror)
call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierror)
print*, 'node', rank, ': Hello world'
call MPI_FINALIZE(ierror)
end
Для компиляции и запуска этой программы на 5 узлах нужно выполнить 2 команды:
mpif90 -o exe_f mpi_f.f mpiexec -l -n 5 ./exe_f
Будет выведено нечто вроде:
1: node 1 : Hello world 2: node 2 : Hello world 3: node 3 : Hello world 0: node 0 : Hello world 4: node 4 : Hello world
В этой программе на языке C каждый из созданных потоков на вычислительном кластере выводит свой номер и приветствие:
#include <stdio.h>
#include <mpi.h>
int main (int argc, char* argv[])
{
int rank, size;
MPI_Init (&argc, &argv);
MPI_Comm_rank (MPI_COMM_WORLD, &rank);
MPI_Comm_size (MPI_COMM_WORLD, &size);
printf( "Hello world from process %d of %d\n", rank, size );
MPI_Finalize();
return 0;
}
Для компиляции и запуска этой программы на 5 узлах нужно выполнить 2 команды:
mpicc -o exe_c mpi_c.c mpiexec -l -n 5 ./exe_c
Будет выведено нечто вроде:
0: Hello world from process 0 of 5 1: Hello world from process 1 of 5 3: Hello world from process 3 of 5 2: Hello world from process 2 of 5 4: Hello world from process 4 of 5