Пример. Функция MPI_Reduce с операцией MPI_MAXLOC
#include <stdio.h> #include <mpi.h> struct{ double value; int proc; }local_max,global_max; void main( int argc, char *argv[] ) { int i, rank, size; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); double array[10]; double max_value; for(i=0; i<10; i++) array[i]=(double)rand()/RAND_MAX + 0.1*rank; max_value=array[0]; for(i=0; i<10; i++){ if(array[i]>max_value) max_value=array[i]; } local_max.value=max_value; local_max.proc=rank; MPI_Reduce(&local_max,&global_max,4,MPI_DOUBLE_INT,MPI_MAXLOC,size-1, MPI_COMM_WORLD ); if (rank == size-1) printf("global maximum=%f number process=%d\n",global_max.value, global_max.proc); MPI_Finalize(); } Пример. Функция MPI_Reduce с операцией MPI_SUM #include <stdio.h> #include <mpi.h> void main( int argc, char *argv[] ) { int a[]={1,4,7,2,1,9,6,8,3,5}, summa[10]; int i, rank;
MPI_Init( &argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Reduce(&a[0],&summa[0],10,MPI_INT,MPI_SUM,1,MPI_COMM_WORLD );
if (rank ==1) { //результат помещается на root процесс, root=1 for (i=0; i<10; i++) { printf("%d\n", summa[i]); } } MPI_Finalize(); }
Лекция 5 Конструкторы типов данных. Функции упаковки и распаковки данных. Поддерживаемые MPI языки программирования, в частности Си имеют средства создания собственных “нестандартных” типов данных, например, с помощью структур. Но передать за одну отправку переменные такого типа мы не можем. Почему? Проблема заключается в том, что в функциях передачи и приемы в качестве параметра, который определяет длину сообщения, используется количество передаваемых данных в единицах данных типа. Длина сообщения вычисляется как произведение указанного типа данных на число элементов. Другая проблема заключается в том, что мы не можем передать за одну отправку, используя стандартные типы данных MPI переменные разных типов, например int и double или более сложные конструкции, например структуры с различными по типу и размеру полями. Выполнить такую передачу можно несколькими способами:
©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|