У меня есть задание взять массив случайных чисел 16 на 16 в диапазоне от 0 до 31 из текстового файла.Я был в состоянии прочитать в матрице и выделить его для 2D-массива с именем arr1.Теперь мне нужно использовать MPI, чтобы заставить мой код работать при распараллеливании более 1,4,8,16,32 ядер на процессор.Может кто-нибудь показать мне, как ткать в вызовах MPI, чтобы разбить большую матрицу на различные размеры подматриц в зависимости от количества процессоров?Затем используйте MPI для отправки, получения и т. Д. Я хочу, чтобы каждый узел подсчитывал вхождения своей подматрицы и корневой узел, чтобы объединить их все и распечатать итоговый счет.
//#include <mpi.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int MAXR,MAXC;
MAXR= 16; MAXC=16;
int arr1[MAXR][MAXC],i,j;
FILE *fp;
fp =fopen("arrays16.txt","r");
for(i=0;i<MAXR;i++) // this loop takes the information from .txt file and puts it into arr1 matrix
{
for(j=0;j<MAXC;j++)
{
fscanf(fp,"%d\t",&arr1[i][j]);
}
}
for(i=0;i<MAXR;i++)
{
printf("\n");
for(j=0;j<MAXC;j++)
printf("%d\t",arr1[i][j]);
}
printf("\n\n");
//printf("%d\t",arr1[1][2]);
int occurrences[3][33] = {{0}};
occurrences[0][0] = 0;
occurrences[0][1] = 1;
occurrences[0][2] = 2;
occurrences[0][3] = 3;
occurrences[0][4] = 4;
occurrences[0][5] = 5;
occurrences[0][6] = 6;
occurrences[0][7] = 7;
occurrences[0][8] = 8;
occurrences[0][9] = 9;
occurrences[0][10] = 10;
occurrences[0][11] = 11;
occurrences[0][12] = 12;
occurrences[0][13] = 13;
occurrences[0][14] = 14;
occurrences[0][15] = 15;
occurrences[0][16] = 16;
occurrences[0][17] = 17;
occurrences[0][18] = 18;
occurrences[0][19] = 19;
occurrences[0][20] = 20;
occurrences[0][21] = 21;
occurrences[0][22] = 22;
occurrences[0][23] = 23;
occurrences[0][24] = 24;
occurrences[0][25] = 25;
occurrences[0][26] = 26;
occurrences[0][27] = 27;
occurrences[0][28] = 28;
occurrences[0][29] = 29;
occurrences[0][30] = 30;
occurrences[0][31] = 31;
// for(j=1;j<33;j++)
//{
// printf("%d",occurrences[1][j]);
// }
//printf("\n\n");
int k;
int count;
for(k=0; k <= 31; k++) {
count = 0;
for (i=0; i<= MAXR-1; i++) {
for(j=0;j<=MAXC-1;j++) {
if(arr1[i][j] == occurrences[0][k]) {
count++;
occurrences[1][k] = count;
printf("Occurrences of %d = , are equal to = %d\n",arr1[i][j], occurrences[1][k]);
//break;
}
else {
}
}
}
}
for(i=0;i<1;i++)
{
printf("\n");
for(j=0;j<32;j++)
printf("%d\t",occurrences[i][j]);
}
for(i=1;i<2; i++)
{
printf("\n\n");
for(j=0;j<=32;j++)
printf("%d\t",occurrences[i][j]);
}
}