#include "stdafx.h" #include "mpi.h" #include <stdio.h> #include <math.h> #include <windows.h> #include "stdlib.h" #define SIZE 2//进程数 /SIZE;//每个进程分配的个数 int shuzu[SIZE][ARRAY_SIZE]; int zonghanshu[SIZE][ARRAY_SIZE]; double endwtime; double startwtime; void swap(int *a, int *b); int main(int argc, char *argv[]){ int myid; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &myid); int numtasks; srand(); ; i < SIZE; i++){ ; j < ARRAY_SIZE; j++){ shuzu[i][j] = rand(); } } int xiaopaixu[ARRAY_SIZE]; startwtime = MPI_Wtime(); MPI_Comm_size(MPI_COMM_WORLD, &numtasks); if (numtasks == SIZE){ MPI_Scatter(shuzu, ARRAY_SIZE, MPI_INT, xiaopaixu, ARRAY_SIZE, MPI_INT, , MPI_COMM_WORLD); ; i <ARRAY_SIZE; i++){ ;j < ARRAY_SIZE ; j++){ if (xiaopaixu[i] > xiaopaixu[j]){ swap(&xiaopaixu[i],&xiaopaixu[j]); } } } MPI_Gather(xiaopaixu, ARRAY_SIZE, MPI_INT, zonghanshu, ARRAY_SIZE, MPI_INT, , MPI_COMM_WORLD); int time[SIZE]; ; i < SIZE; i++){ time[i] = ; } int a[SIZE]; int zongpaixu2[ARRAY_SIZE*SIZE]; ; j >= ; j--){ ; k < SIZE; k++){ if (time[k] >= ARRAY_SIZE){ a[k] = ; } else { a[k] = zonghanshu[k][ARRAY_SIZE - time[k] - ]; } } ]; ; i<SIZE; i++){ if (a[i]>x){ x = a[i]; } } ; n < SIZE; n++){ if (x == a[n]){ time[n] = time[n] + ; break; } } zongpaixu2[j] = x; } endwtime = MPI_Wtime(); if (myid); else ; i < SIZE*ARRAY_SIZE; i++){ printf("%d ", zongpaixu2[i]); } } if (myid); else printf("\ntime=%f\n", endwtime - startwtime); MPI_Finalize(); } void swap(int *a, int *b) { int c; c = *a; *a = *b; *b = c; }