- #include “mpi.h”
- #include
- int main (int argc, char *argv[])
- {
- int gsize,sendarray[100];
- int root=0, rank, *rbuf;
- MPI_Init(&argc, &argv);
- MPI_Comm_rank( comm, &rank);
- if ( rank == root)
- {
- MPI_Comm_size(MPI_COMM_WORLD, &gsize);
- rbuf = malloc(gsize*100*sizeof(int));
- }
- MPI_Gather(sendarray,100,MPI_INT, rbuf,100, MPI_INT, root, MPI_COMM_WORLD);
- MPI_Finalize();
- return 0;
- }
- Параллельное программирование с использованием технологии MPI Аксёнов С.В.
Сбор данных MPI_Gatherv - Параллельное программирование с использованием технологии MPI Аксёнов С.В.
- int MPI_Gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int *recvcount, int *displs, MPI_Datatype recvtype, int root, MPI_Comm comm)
- Вход sendbuf: Адрес буфера рассылки
- Вход sendcount: Количество элементов в буфере рассылки
- Вход sendtype: Тип данных в буфере рассылки
- Вход/Выход recvbuf: Адрес буфера-получателя
- Вход recvcount: Количество элементов, полученных от каждого процесса в буфере приема
- Вход displs: Элемент i определяет смещение относительно recvbuf, в котором размещаются данные из процесса i
- Вход recvtype: Тип данных в буфере приема
- Вход root: Номер процесса-получателя
- Вход comm: Коммуникатор
Сравнение MPI_Gather и MPI_Gatherv - Параллельное программирование с использованием технологии MPI Аксёнов С.В.
Пример MPI_Gatherv - Параллельное программирование с использованием технологии MPI Аксёнов С.В.
- #include “mpi.h”
- #include
- int main (int argc, char *argv[])
- {
- int gsize,sendarray[100], root=0, *rbuf, stride=105, *displs, *rcounts;
- MPI_Init(&argc, &argv);
- MPI_Comm_size(MPI_COMM_WORLD, &gsize);
- rbuf = malloc(gsize*stride*sizeof(int));
- displs = malloc(gsize*sizeof(int));
- rcounts = malloc(gsize*sizeof(int));
- for (int i=0; i
- {
- displs[i] = i*stride;
- rcounts[i] = 100;
- }
- MPI_Gatherv( sendarray, 100, MPI_INT, rbuf, rcounts, displs,MPI_INT, root, MPI_COMM_WORLD);
- MPI_Filnalize();
- return 0;
- }
Do'stlaringiz bilan baham: |