- •Справочник по функциям mpi
- •Int mpi_Init (int *argc, char ***argv)
- •Int mpi_Finalize(void)
- •Int mpi_Comm_size(mpi_Comm comm, int *size)
- •Int mpi_Comm_rank (mpi_Comm comm, int *rank)
- •Mpi_Send
- •Int mpi_Send(void *buf, int count, mpi_Datatype datatype, int dest, int msgtag, mpi_Comm comm)
- •Mpi_Recv
- •Int mpi_Recv(void *buf, int count, mpi_Datatype datatype, int source, int msgtag, mpi_Comm comm, mpi_Status *status)
- •Int main(int argc, char **argv)
- •Int me, size;
- •Mpi_Get_count
- •Int mpi_Get_count(mpi_Status *status, mpi_Datatype datatype, int *count)
- •Mpi_Probe
- •Int mpi_Probe(int source, int msgtag, mpi_Comm comm, mpi_Status status)
- •Mpi_Isend
- •Int mpi_Isend(void *buf, int count, mpi_Datatype datatype, int dest, int msgtag, mpi_Comm comm, mpi_Request *request)
- •Mpi_Irecv
- •Int mpi_Irecv (void *buf, int count, mpi_Datatype datatype, int source, int msgtag, mpi_Comm comm, mpi_Request *request)
- •Mpi_Wait
- •Int mpi_Wait(mpi_Request *request, mpi_Status *status)
- •Mpi_Waitall
- •Int mpi_Waitall(int count, mpi_Request *requests, mpi_Status *statuses)
- •Int main(int argc, char **argv)
- •Mpi_Waitany
- •Int mpi_Waitany( int count, mpi_Request *requests, int *index, mpi_Status *status)
- •Mpi_Waitsome
- •Int mpi_Waitsome( int incount, mpi_Request *requests, int *outcount, int *indexes, mpi_Status *statuses)
- •Mpi_Test
- •Int mpi_Test(mpi_Request *request, int *flag, mpi_Status *status)
- •Mpi_Testall
- •Int mpi_Testall( int count, mpi_Request *requests, int *flag, mpi_Status *statuses)
- •Mpi_Testany
- •Int mpi_Testany(int count, mpi_Request *requests, int *index, int *flag, mpi_Status *status)
- •Mpi_Testsome
- •Int mpi_Testsome( int incount, mpi_Request *requests, int *outcount, int *indexes, mpi_Status *statuses)
- •Mpi_Iprobe
- •Int mpi_Iprobe( int source, int msgtag, mpi_Comm comm, int *flag, mpi_Status *status)
- •Mpi_Send_init
- •Int mpi_Send_init( void *buf, int count, mpi_Datatype datatype, int dest, int msgtag, mpi_Comm comm, mpi_Request *request)
- •Mpi_Recv_init
- •Int mpi_Recv_init( void *buf, int count, mpi_Datatype datatype, int source, int msgtag, mpi_Comm comm, mpi_Request *request)
- •Mpi_Startall
- •Int mpi_Startall(int count, mpi_Request *requests)
- •Mpi_Sendrecv
- •Int mpi_Sendrecv( void *sbuf, int scount, mpi_Datatype stype, int dest, int stag, void *rbuf, int rcount, mpi_Datatype rtype, int source, mpi_Datatype rtag, mpi_Comm comm, mpi_Status *status)
- •Mpi_Bcast
- •Int mpi_Bcast(void *buf, int count, mpi_Datatype datatype, int source, mpi_Comm comm)
- •Mpi_Gather
- •Int mpi_Gather( void *sbuf, int scount, mpi_Datatype stype, void *rbuf, int rcount, mpi_Datatype rtype, int dest, mpi_Comm comm)
- •Mpi_Scatter
- •Int mpi_Scatter(void *sbuf, int scount, mpi_Datatype stype, void *rbuf, int rcount, mpi_Datatype rtype, int source, mpi_Comm comm)
- •Int main(int argc, char **argv)
- •Mpi_Allreduce
- •Int mpi_Allreduce( void *sbuf, void *rbuf, int count, mpi_Datatype datatype, mpi_Op op, mpi_Comm comm)
- •Mpi_Reduce
- •Int mpi_Reduce( void *sbuf, void *rbuf, int count, mpi_Datatype datatype, mpi_Op op, int root, mpi_Comm comm)
- •Mpi_Barrier
- •Int mpi_Barrier(mpi_Comm comm)
- •Mpi_Comm_split
- •Int mpi_Comm_split(mpi_Comm comm, int color, int key, mpi_Comm *newcomm)
- •Mpi_Comm_free
- •Int mpi_Comm_free(mpi_Comm comm)
- •Список соответствия типов данных для языка с и mpi
Справочник по функциям mpi
MPI_Init 2
MPI_Finalize 2
MPI_Comm_size 2
MPI_Comm_rank 2
MPI_Wtime 3
MPI_Send 3
MPI_Recv 4
MPI_Get_count 6
MPI_Probe 6
MPI_Isend 6
MPI_Irecv 7
MPI_Wait 7
MPI_Waitall 7
MPI_Waitany 8
MPI_Waitsome 8
MPI_Test 9
MPI_Testall 9
MPI_Testany 9
MPI_Testsome 10
MPI_Iprobe 10
MPI_Send_init 11
MPI_Recv_init 11
MPI_Startall 11
MPI_Sendrecv 12
MPI_Bcast 12
MPI_Gather 13
MPI_Scatter 13
MPI_Allreduce 14
MPI_Reduce 15
MPI_Barrier 15
MPI_Comm_split 15
MPI_Comm_free 16
Список соответствия типов данных для языка С и MPI 16
MPI_Init
Int mpi_Init (int *argc, char ***argv)
Инициализация параллельной части программы. Все другие функции MPI могут быть вызваны только после вызова MPI_Init. Необычный тип аргументов MPI_Init предусмотрен для того, чтобы иметь возможность передать всем процессам аргументы функции main. Инициализация параллельной части для каждого приложения должна выполняться только один раз.
MPI_Finalize
Int mpi_Finalize(void)
Завершение параллельной части приложения. Все последующие обращения к любым MPI-функциям, в том числе к MPI_Init, запрещены. К моменту вызова MPI_Finalize каждым процессом программы все действия, требующие его участия в обмене сообщениями, должны быть завершены.
Общая схема MPI-программы выглядит так:
main(int argc, char **argv) {
MPI_Init(&argc, &argv);
MPI_Finalize();
}
MPI_Comm_size
Int mpi_Comm_size(mpi_Comm comm, int *size)
comm — идентификатор коммуникатора,
size — число процессов в коммуникаторе comm.
Определение общего числа параллельных процессов в коммуникаторе comm. Результат возвращается через параметр size, для чего функции передается адрес этой переменной. Поскольку коммуникатор является сложной структурой, перед ним стоит имя предопределенного типа MPI_Comm, определенного в файле mpi.h.
MPI_Comm_rank
Int mpi_Comm_rank (mpi_Comm comm, int *rank)
comm — идентификатор коммуникатора,
out rank — номер процесса в коммуникаторе comm.
Определение номера процесса в коммуникаторе comm. Если функция MPI_Comm_size для того же коммуникатора comm вернула значение size, то значение, возвращаемое функцией MPI_Comm_rank через переменную rank, лежит в диапазоне от 0 до size-1.
MPI_Wtime
double MPI_Wtime(void)
Эта функция возвращает астрономическое время в секундах (вещественное число), прошедшее с некоторого момента в прошлом. Если некоторый участок программы окружить вызовами данной функции, то разность возвращаемых значений покажет время работы данного участка. Гарантируется, что момент времени, используемый в качестве точки отсчета, не будет изменен за время существования процесса. Заметим, что эта функция возвращает результат своей работы не через параметры, а явным образом.
Mpi_Send
Int mpi_Send(void *buf, int count, mpi_Datatype datatype, int dest, int msgtag, mpi_Comm comm)
buf — адрес начала буфера с посылаемым сообщением;
count — число передаваемых элементов в сообщении;
datatype — тип передаваемых элементов;
dest — номер процесса-получателя;
msgtag — идентификатор сообщения;
comm — идентификатор коммуникатора.
Блокирующая посылка сообщения с идентификатором msgtag, состоящего из count элементов типа datatype, процессу с номером dest. Все элементы посылаемого сообщения расположены подряд в буфере buf. Значение count может быть нулем. Разрешается передавать сообщение самому себе. Тип передаваемых элементов datatype должен указываться с помощью предопределенных констант типа, например, MPI_INT, MPI_LONG, MPI_SHORT, MPI_LONG_DOUBLE, MPI_CHAR, MPI_UNSIGNED_CHAR, MPI_FLOAT и т.п. для каждого типа данных языков Фортран и Си есть своя константа. Полный список предопределенных имен типов можно найти в файле mpi.h.
MPI_Bsend — передача сообщения с буферизацией. Если прием посылаемого сообщения еще не был инициализирован процессом получателем, то сообщение будет записано в буфер, и произойдет немедленный возврат из функции. Выполнение данной функции никак не зависит от соответствующего вызова функции приема сообщения. Тем не менее, функция может вернуть код ошибки, если места под буфер недостаточно.
MPI_Ssend — передача сообщения с синхронизацией. Выход из данной функции произойдет только тогда, когда прием посылаемого сообщения будет инициализирован процессом-получателем. Таким образом, завершение передачи с синхронизацией говорит не только о возможности повторного использования буфера, но и о гарантированном достижении процессом-получателем точки приема сообщения в программе. Если прием сообщения так же выполняется с блокировкой, то функция MPI_Ssend сохраняет семантику блокирующих вызовов.
MPI_Rsend — передача сообщения по готовности. Данной функцией можно пользоваться только в том случае, если процесс-получатель уже инициировал прием сообщения. В противном случае вызов функции, вообще говоря, является ошибочным и результат ее выполнения не определен. Во многих реализациях функция MPI_Rsend сокращает протокол взаимодействия между отправителем и получателем, уменьшая накладные расходы на организацию передачи.
