1

私はmpiプログラミングが初めてです。c で mpi_scatter を使用して並列検索プログラムを試しました。私のプログラムが正しいかどうか知りたいです。しかし、MPI_SCATTER を使用せずにプログラムを実行すると、つまり線形検索を使用すると、並列プログラムと比較して実行時間が短くなります。なぜですか?

#include<stdio.h>
#include<time.h>
#include<mpi.h>
main(int argc,char *argv[])
{
clock_t tic = clock();
int rank,size,a[10]={1,2,3,4,5,6,7,8,9,10},b[10],search=6,flag=0;      
long int i;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
MPI_Scatter(&a,5,MPI_INT,&b,5,MPI_INT,0,MPI_COMM_WORLD);
if(rank==0)
{
for(i=0;i<5;i++)
    {
        if(b[i]==search)
        {
            printf("\nNumber found!\t\t%d\t\t%d",rank,i);
            flag=1;
        }
        printf("\n%d\t\t%d",b[i],rank);
    }
}
if(rank==1)
{
    for(i=0;i<5;i++)
    {
        if(b[i]==search)
        {
            printf("\nNumber found!\t\t%d\t\t%d",rank,i);
            flag=1;
        }
        printf("\n%d\t\t%d",b[i],rank);
    }
}
MPI_Finalize();
clock_t toc=clock();
printf("\n\nElapsed: %f seconds\n", (double)(toc - tic) / CLOCKS_PER_SEC);
}

OUTPUT:
[Aburva@localhost mpipgms]$ /usr/lib/openmpi/bin/mpicc my_pgm2.c -o my_pgm2
[Aburva@localhost mpipgms]$ /usr/lib/openmpi/bin/mpirun -np 2 my_pgm2

1       0
2       0
3       0
4       0

Number found!       1       0

6       1
7       1
8       1
9       1
5       0

Elapsed: 0.070000 seconds
10      1

Elapsed: 0.080000 seconds
4

1 に答える 1

0

シリアルコードが表示されていませんか?1 つのプロセスを使用してスキャッターを使用せずにこのコードを実行した場合、b の値は未定義になります。

あなたのコードは正常に動作しているようです.プロセスを生成する際のオーバーヘッドとデータを分散させる際の通信は、シリアルとパラレルの間のわずかな時間差に相当する可能性があります. 多くのプロセスで巨大なサイズの配列を試してみてください-シリアルよりも大幅に高速になると思います。

于 2013-03-27T14:10:04.827 に答える