选择排序的MPI实现

时间:2021-09-03 10:27:32
#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;
}