2013-03-25 2 views
1

Я новичок в программировании mpi. Я просто попробовал программу параллельного поиска, используя mpi_scatter в 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: 
[[email protected] mpipgms]$ /usr/lib/openmpi/bin/mpicc my_pgm2.c -o my_pgm2 
[[email protected] 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 

ответ

0

Не указан ли ваш серийный код? Если вы запустили этот код с использованием 1 процесса и не разбросали, то значения для b были бы неопределенными.

Ваш код, кажется, работает нормально, накладные расходы в процессах генерации и связи при рассеянии данных вполне могут составлять небольшую разницу во времени между последовательным и параллельным. Попробуйте массив огромного размера со многими процессами - я бы ожидал, что это будет значительно быстрее, чем серийный.

Смежные вопросы