- •Двухточечный обмен
- •Int mpi_Testall(int count, mpi_Request requests[], int *flag, mpi_Status statuses[])
- •Коллективный обмен
- •Int mpi_Scatterv(void *sendbuf, int *sendcounts, int *displs,
- •Int mpi_Alltoallv(void *sendbuf, int *sendcounts, int *sdispls,
- •Int mpi_Reduce(void *buf, void *result, int count,
- •Int mpi_Op_create(mpi_User_function *function, int commute, mpi_Op *op)
- •Int mpi_Allreduce(void *sendbuf, void *rcvbuf, int count,
- •Int mpi_Scan(void *sendbuf, void *rcvbuf, int count, mpi_Datatype datatype, mpi_Op op, mpi_Comm comm)
- •Int mpi_Intercomm_create(mpi_Comm local_comm, int local_leader,
- •Топологии
- •Int mpi_Cart_coords(mpi_Comm comm, int rank, int maxdims, int *coords)
- •Int mpi_Cart_map(mpi_Comm comm_old, int ndims, int *dims, int *periods, int *newrank)
- •Производные типы
- •Атрибуты
- •Void *extra_state, void *attribute_val_in, void *attribute_val_out, int *flag)
- •Int mpi_Keyval_free(int *keyval)
- •Int mpi_Attr_put(mpi_Comm comm, int keyval, void* attribute)
- •Int mpi_Attr_get(mpi_Comm comm, int keyval, void *attribute, int *flag)
- •Int mpi_Attr_delete(mpi_Comm comm, int keyval)
- •Задание 3
Задание 3
В исходном тексте программы на языке C пропущены вызовы процедур стандартного блокирующего двухточечного обмена. Предполагается, что при запуске четного числа процессов, те из них, которые имеют четный ранг, отправляют сообщение следующим по величине ранга процессам. Добавить эти вызовы, откомпилировать и запустить программу.
#include "mpi.h"
#include <stdio.h>
int main(int argc,char *argv[])
{
int myrank, size, message; int TAG = 0;
MPI_Status status;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
message = myrank;
if((myrank % 2) == 0)
{
if((myrank + 1) != size) MPI_Send(...);
}
else
{
if(myrank != 0) MPI_Recv(...);
printf("received :%i\n", message);
}
MPI_Finalize(); return 0;
}