Подсчет вхождений кода C в Matrix с использованием подматриц и распараллеливания MPI - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть задание взять массив случайных чисел 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]);
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...