Интеграция функции с MPI - PullRequest
0 голосов
/ 30 марта 2020

У меня есть 50 файлов, по которым я должен выполнить поиск по слову, и напечатать, сколько раз это слово существует в каждом файле
, поэтому я сделал эту функцию, чтобы проверить, является ли слово подстрокой слова

int isSub(char s1[],char s2[])
{

     int M = strlen(s1);
    int N = strlen(s2);
    int i,j ;
    for (i= 0; i <= N - M; i++) {
     for (j = 0; j < M; j++){
            if (s2[i + j] != s1[j]){
                break;
                }
        }

        if (j == M){
            return i;
        }
    }

    return -1;

}

Я сделал модульный тест для этой функции, и она отлично работает, но когда я использую его в своем коде, он не работает, как я ожидал
, и вот мой основной


int main(int argc, char * argv[])
{
    int my_rank;        /* rank of process  */
    int p;          /* number of process    */
    int source;     /* rank of sender   */
    int dest;       /* rank of receiver */
    int tag = 0;    /* tag for messages */
    MPI_Status status;  /* return status for    */
    MPI_Init( &argc, &argv );
    MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
    MPI_Comm_size(MPI_COMM_WORLD, &p);
    int i,j,k,temp;
    int avg,extra,taken,finalResult;
    char query[100];
    char b[6];
    char a[100];
    char line[500];
    char found[500][128];
    int sum;
    int start[100];
    int end[100];
    int istart,iend;
    avg=50/p;
    extra=50%p;
    if (my_rank==0)
    {
        printf("Query: ");
        scanf("%[^\n]%*c",query);
        sum=0;
        temp=0;
        for(i=0; i<p; i++)
        {
            taken=(extra--<=0)? avg: avg+1;
            start[i]=temp;
            temp+=taken;
            end[i]=temp;
        }

    }
    MPI_Bcast(&sum, 1, MPI_INT, 0, MPI_COMM_WORLD);
    MPI_Bcast(&query, strlen(query), MPI_CHAR, 0, MPI_COMM_WORLD);
    MPI_Scatter(&start, 1, MPI_INT, &istart, 1, MPI_INT, 0,MPI_COMM_WORLD);
    MPI_Scatter(&end, 1, MPI_INT, &iend, 1, MPI_INT, 0,MPI_COMM_WORLD);
    int counter=0;

    for (i=istart; i<iend; i++)
    {
        strcpy(b,"");
        strcpy(a,"Aristo-Mini-Corpus P-");
        sprintf(b,"%d",i+1);
        strcat(b,".txt");
        strcat(a,b);
        if((i+1)>50)
            break;
        FILE *read=fopen(a,"r");
        if(read == NULL)
        {
            perror("Unable to open file!");
           printf("%s \n",a);
            exit(1);
        }
        else
        {
            counter=0;
            while(fgets(line, sizeof(line), read) != NULL)
            {


                if (isSub(query,line)!=-1)
                {
                     counter++;
                }


            }
            printf("%d \n",counter);
            sum+=counter;
        }

        fclose(read);

    }

    MPI_Reduce(&sum, &finalResult, 1, MPI_INT, MPI_SUM, 0,MPI_COMM_WORLD);

    if (my_rank==0)
    {
         printf("%d\n",finalResult);
    }

    /* shutdown MPI */
    MPI_Finalize();
    return 0;
}

, когда я Запустив этот код, я обнаружил, что первые 10 файлов работают нормально и печатаются правильно, но другие 40 не работают должным образом, и выведите 30 «30 - это количество строк в каждом файле» *
Любые подсказки ??

...