Quantcast
Channel: Clusters and HPC Technology
Viewing all articles
Browse latest Browse all 927

MPI_ALLGATHER error parallelizing code

$
0
0

I'm trying to parallelize the following code.

subroutine log_likelihood(y, theta, lli, ll)
 doubleprecision, allocatable, intent(in) :: y(:) 
 doubleprecision, intent(in) :: theta(2)
 doubleprecision, allocatable, intent(out) :: lli(:)
 doubleprecision, intent(out) :: ll
 integer :: i
 ALLOCATE (lli(size(y)))
 lli = 0.0d0
 ll = 0.0d0
 do i = 1, size(y)
 lli(i) = -log(sqrt(theta(2))) - 0.5*log(2.0d0*pi) &
 - (1.0d0/(2.0d0*theta(2)))*((y(i)-theta(1))**2)
 end do
 ll = sum(lli)
 end subroutine log_likelihood

To do this, I'm trying to use MPI_ALLGATHER. This is the code I wrote

subroutine log_likelihood(y, theta, lli, ll)
 doubleprecision, allocatable, intent(in) :: y(:) 
 doubleprecision, intent(in) :: theta(2)
 doubleprecision, allocatable, intent(out) :: lli(:)
 doubleprecision, intent(out) :: ll
 integer :: i, size_y, diff
size_y=size(y)
ALLOCATE (lli(size_y))
!Broadcasting
call MPI_BCAST(theta, 1, MPI_DOUBLE_PRECISION, 0, MPI_COMM_WORLD, ierr)
call MPI_BCAST(y, 1, MPI_DOUBLE_PRECISION, 0, MPI_COMM_WORLD, ierr)
! Determine how many points to handle with each proc
points_per_proc = (size_y + numprocs - 1)/numprocs
! Determine start and end index for this proc's points
istart = proc_num * points_per_proc + 1
iend = min((proc_num + 1)*points_per_proc, size_y)
diff = iend-istart+1
ALLOCATE(proc_contrib(diff))
do i = istart, iend
 proc_contrib(i) = -log(sqrt(theta(2))) - 0.5*log(2.0d0*pi) &
 - (1.0d0/(2.0d0*theta(2)))*((y(i)-theta(1))**2)
end do
call MPI_ALLGATHER(proc_contrib, diff, MPI_DOUBLE_PRECISION, &
 lli, diff, MPI_DOUBLE_PRECISION, &
 MPI_COMM_WORLD, ierr)
ll = sum(lli)
end subroutine log_likelihood

When I try to run my program, I get the following error.

$ mpiexec -n 2 ./mle.X 
Fatal error in PMPI_Allgather: Internal MPI error!, error stack:
PMPI_Allgather(961)......: MPI_Allgather(sbuf=0x7ff2f251b860, scount=1500000, MPI_DOUBLE_PRECISION, rbuf=0x7ff2f2ad5650, rcount=3000000, MPI_DOUBLE_PRECISION, MPI_COMM_WORLD) failed
MPIR_Allgather_impl(807).: 
MPIR_Allgather(766)......: 
MPIR_Allgather_intra(560): 
MPIR_Localcopy(357)......: memcpy arguments alias each other, dst=0x7ff2f2ad5650 src=0x7ff2f251b860 len=12000000
===================================================================================
= BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
= EXIT CODE: 1
= CLEANING UP REMAINING PROCESSES
= YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
===================================================================================

Can somebody please explain to me what I'm doing wrong?

Thanks!


Viewing all articles
Browse latest Browse all 927

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>