Преобразование кода C в MPI в Python MPI - PullRequest
0 голосов
/ 10 января 2020

Я новичок в программировании MPI и пытаюсь преобразовать код C в MPI в Python MPI. Вот код:

#define N 4
#include <stdio.h>
#include <math.h>
#include <sys/time.h>
#include <stdlib.h>
#include <stddef.h>
#include <mpi.h>

void print_results(char *prompt, int a[N][N]);

int main(int argc, char *argv[])
{
    int i, j, k, rank, size, sum = 0;
    int a[N][N]={{1,2,3,4},{5,6,7,8},{9,1,2,3},{4,5,6,7,}};
    int b[N][N]={{1,2,3,4},{5,6,7,8},{9,1,2,3},{4,5,6,7,}};
    int c[N][N];
    int aa[N],cc[N];

    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);

    //scatter rows of first matrix to different processes     
    MPI_Scatter(a, N*N/size, MPI_INT, aa, N*N/size, MPI_INT,0,MPI_COMM_WORLD);

    //broadcast second matrix to all processes
    MPI_Bcast(b, N*N, MPI_INT, 0, MPI_COMM_WORLD);

    MPI_Barrier(MPI_COMM_WORLD);

          //perform vector multiplication by all processes
          for (i = 0; i < N; i++)
            {
                for (j = 0; j < N; j++)
                    {
                        sum = sum + aa[j] * b[j][i];               
                    }
                    cc[i] = sum;
                    sum = 0;
            }

     MPI_Gather(cc, N*N/size, MPI_INT, c, N*N/size, MPI_INT, 0, MPI_COMM_WORLD);

     MPI_Barrier(MPI_COMM_WORLD);        
     MPI_Finalize();
     if (rank == 0)                         
         print_results("C = ", c);
}

void print_results(char *prompt, int a[N][N])
{
    int i, j;

    printf ("\n\n%s\n", prompt);
    for (i = 0; i < N; i++) {
        for (j = 0; j < N; j++) {
                printf(" %d", a[i][j]);
        }
        printf ("\n");
}
printf ("\n\n");
}

К вашему сведению: я использую Ubuntu, который поддерживает 4 ядра. Скомпилировал код следующим образом: mpicc mm.c -o mm Выполнил код следующим образом: mpiexec -np 4 ./mm

Результаты: C = 54 37 47 57 130 93 119 145 44 41 56 71 111 79 101 123

Итак, можно ли преобразовать код C в Python MPI и выполнять в нескольких ядрах? Любые предложения будут очень полезны.

...