Умножение двух целочисленных массивов на основе MPI с использованием метода Scatter и Gather - PullRequest
0 голосов
/ 26 марта 2020

Я реализую следующий учебник ( умножение матриц с использованием Mpi_Scatter и Mpi_Gather ) для умножения матриц на основе MPI с использованием методов Scatter и Gather. Однако мне нужно умножить два целых массива (1D), используя один и тот же метод разброса и сбора в программировании java. Вот мой отредактированный код

import java.util.*;
import mpi.*;
public class MPIArrayMultiplication {

public static void main(String[] args) {
// TODO Auto-generated method stub


MPI.Init(args);
int me = MPI.COMM_WORLD.Rank();
int size = MPI.COMM_WORLD.Size();

int chunk =4;
int process =4;

int i=0;
int j=0;
int k =0;
int tag=99;
int blksz=0;
int mul=0;


int n=16;


int Array1[]=new int[] {11,22,3,44,65,60,71,18,90,101,121,112,13,14,10,25}; // First Input Array
int Array2[]=new int[] {11,22,3,44,65,60,71,18,90,101,121,112,13,14,10,25}; // Second Input Array

int[] tempArray = new int[n];


int[] tempArray1 = new int[n];
int[] tempArray2 = new int[n];



MPI.COMM_WORLD.Scatter(Array1, 0, n/size, MPI.INT, tempArray1, 0, n/size, MPI.INT, 0);


System.out.println("Process " + me + " data " + Arrays.toString(tempArray1));

MPI.COMM_WORLD.Bcast(Array2, 0, n, MPI.INT, 0);


for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{

mul=mul+tempArray1[j]*Array2[j];

}

tempArray2[i] = mul ;
mul =0;

}

MPI.COMM_WORLD.Gather(tempArray2, 0, n/size, MPI.INT, tempArray, 0, n/size, MPI.INT, 0);

MPI.Finalize();

}

}
...