Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

Subject: [OMPI users] Fwd: MPI error in a loop
From: Zhubq (zhubenqiang_at_[hidden])
Date: 2013-07-24 02:44:17


>
> Hi all,
>
> I got a problem when call MPI subroutines in a loop. For example, I have Fortran codes to randomly
> select 10 points in a 2D space domain and change the values at those points near these 10 points to -10:
>
> real A( (100*rank+1):(100*rank+100),100 )
> real inmax(2),outmax(2)
> integer maxlocation(2),maxrank
>
>
> call random_number(A)
> maxlocation=maxloc(A); !!! find the coordinates of the local maximum;
> inmax(1)=maxval(A); !!! get the local maximum value
> inmax(2)=myrank; !!!! put the process rank
> do i=1, 10
>
> call MPI_allreduce(inmax,outmax,1,mpi_2real, mpi_maxloc,MPI_comm_world,error) !!!get the global maximum and the corresponding rank
> maxrank=outmax(2£©
> call MPI_Bcast(maxlocation,2,mpi_integer,maxrank,mpi_comm_world,error);
> ...
> let points around maxlocation within distance of 10 equal to -10;
> ....
> enddo
>
>
> The problem is there is runtime error like " segmentation fault".
> But If I put the codes within the loop into a subroutine, then write the code as
> do i=1,10
> call subroutine
>
> enddo
>
> there will be no error.
>
> Another problem is MPI_allreduce seems not as efficient as the combined use of " MPI_reduce & MPI_Bcast" to realize the same purpose.
>
>
> Ben