[mpich-discuss] Internal memory allocation error?

Brian Harker brian.harker at gmail.com
Mon Oct 20 10:11:51 CDT 2008


Hi Gib-

Well, no dice.  I still get the same error.  Argh.

On Mon, Oct 20, 2008 at 8:35 AM, Brian Harker <brian.harker at gmail.com> wrote:
> Hi Gib-
>
> Thanks for the idea, it's now running by dispatching full columns at a
> time, so maybe I'll avoid the error, since the number of sends and
> receives is drastically reduced.  I'll keep you posted.
>
> On Sun, Oct 19, 2008 at 7:17 PM, Gib Bogle <g.bogle at auckland.ac.nz> wrote:
>> Hi Brian,
>>
>> You don't really send the data pixel-by-pixel do you?  If so that would be
>> horrendously inefficient.  Why not send a row or column at a time?  Have I
>> misunderstood you?
>>
>> Cheers
>> Gib
>>
>>
>> Brian Harker wrote:
>>>
>>> Hi Rajeev-
>>>
>>> The code I have posted is pared down quite a bit.  I print the
>>> "numsent" variable after each send and receive to make sure the
>>> correct pixel has been dispatched.  I guess I should mention that if I
>>> run the same program on some other data that I have, which has only
>>> 68K pixels, it works flawlessly.
>>>
>>> On Sun, Oct 19, 2008 at 5:57 PM, Rajeev Thakur <thakur at mcs.anl.gov> wrote:
>>>>
>>>> Brian,
>>>>     This code should not even need an Irecv because the master and slave
>>>> operate in lock step. And if you call Irecv followed by a Wait
>>>> immediately,
>>>> you could as well call Recv.
>>>>
>>>> Since it fails with even one slave, run the 1 master 1 slave version and
>>>> add
>>>> print statements after the sends and receives to see how many sends and
>>>> receives are happening.
>>>>
>>>> Rajeev
>>>>
>>>>
>>>>> -----Original Message-----
>>>>> From: owner-mpich-discuss at mcs.anl.gov
>>>>> [mailto:owner-mpich-discuss at mcs.anl.gov] On Behalf Of Brian Harker
>>>>> Sent: Sunday, October 19, 2008 6:05 PM
>>>>> To: mpich-discuss at mcs.anl.gov
>>>>> Subject: Re: [mpich-discuss] Internal memory allocation error?
>>>>>
>>>>> Hi list-
>>>>>
>>>>> Here's my sample code for those that are wary of opening
>>>>> email attachments  :)  Didn't think about that until just now.
>>>>>
>>>>> PROGRAM mpi_main
>>>>>
>>>>> USE subroutines  ! contains subroutine "invert_pixel"
>>>>> IMPLICIT NONE
>>>>>
>>>>> INCLUDE "mpif.h"
>>>>>
>>>>> ! total number of pixels
>>>>> INTEGER, PARAMETER :: np = nx * ny   !nx,ny specified in
>>>>> module "subroutines"
>>>>>
>>>>> ! parameter at each pixel
>>>>> DOUBLE PRECISION :: par
>>>>>
>>>>> ! full-size parameter array
>>>>> DOUBLE PRECISION, DIMENSION(nx,ny) :: map
>>>>>
>>>>> ! pixel coordinates
>>>>> INTEGER, DIMENSION(2) :: pxl
>>>>>
>>>>> ! dummy termination message
>>>>> INTEGER, PARAMETER :: term = 0
>>>>>
>>>>> ! MPI-related
>>>>> INTEGER :: proc_id
>>>>> INTEGER :: proc_num
>>>>> INTEGER :: master
>>>>> INTEGER :: ierr
>>>>> INTEGER :: sender
>>>>> INTEGER :: tag
>>>>> INTEGER :: numsent
>>>>> INTEGER :: request
>>>>> INTEGER, DIMENSION(MPI_STATUS_SIZE) :: status
>>>>>
>>>>> ! local indices
>>>>> INTEGER :: i
>>>>>
>>>>> !********************************************************************!
>>>>> !************************** BEGIN PROGRAM ***************************!
>>>>> !********************************************************************!
>>>>> master = 0
>>>>>
>>>>> ! initialize MPI libraries...
>>>>> CALL MPI_Init( ierr )
>>>>> CALL MPI_Comm_size( MPI_COMM_WORLD, proc_num, ierr ) CALL
>>>>> MPI_Comm_rank( MPI_COMM_WORLD, proc_id, ierr )
>>>>>
>>>>> ! --------------------------------------------- !
>>>>> !             master process code               !
>>>>> ! --------------------------------------------- !
>>>>> IF ( proc_id == master ) THEN
>>>>>
>>>>>  ! dispatch first group of pixels to slave processes...
>>>>>  numsent = 0
>>>>>  DO i = 1, proc_num - 1
>>>>>
>>>>>  pxl(1) = INT(numsent/ny) + 1
>>>>>  pxl(2) = MOD(numsent,ny) + 1
>>>>>  CALL MPI_Send( pxl, 2, MPI_INTEGER, i, numsent+1,
>>>>> MPI_COMM_WORLD, ierr )
>>>>>  numsent = numsent + 1
>>>>>
>>>>>  END DO
>>>>>
>>>>>  mstr: DO
>>>>>
>>>>>        ! receive inferred parameter back from a slave...
>>>>>        CALL MPI_Recv( par, 1, MPI_DOUBLE_PRECISION,
>>>>> MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, status, ierr )
>>>>>        sender = status(MPI_SOURCE)
>>>>>        tag = status(MPI_TAG)
>>>>>
>>>>>        ! assemble into full-size array...
>>>>>        x = INT(tag/ny) + 1
>>>>>        y = MOD(tag,ny) + 1
>>>>>
>>>>>        map(x,y) = par
>>>>>
>>>>>        IF ( tag == np ) THEN
>>>>>         ! all done, send termination message...
>>>>>         DO j = 1, proc_num - 1
>>>>>          CALL MPI_Send( term, 1, MPI_INTEGER, j, 0,
>>>>> MPI_COMM_WORLD, ierr )
>>>>>         END DO
>>>>>         EXIT mstr
>>>>>        END IF
>>>>>
>>>>>        ! send the next available pixel to same slave...
>>>>>        pxl(1) = INT((numsent+1) / ny) + 1
>>>>>        pxl(2) = MOD((numsent+1), ny) + 1
>>>>>
>>>>>        CALL MPI_Send( pxl, 2, MPI_INTEGER, sender,
>>>>> numsent+1, MPI_COMM_WORLD, ierr )
>>>>>        numsent = numsent + 1
>>>>>
>>>>>       END DO mstr
>>>>> ! --------------------------------------------- !
>>>>> !              slave process code               !
>>>>> ! --------------------------------------------- !
>>>>> ELSE
>>>>>
>>>>>  slv: DO
>>>>>
>>>>>       ! receive pixel coordinates from master...
>>>>>       CALL MPI_Irecv( pxl, 2, MPI_INTEGER, master,
>>>>> MPI_ANY_TAG, MPI_COMM_WORLD, request, ierr )
>>>>>       CALL MPI_Wait( request, status, ierr )
>>>>>       tag = status(MPI_TAG)
>>>>>       IF ( tag == 0 ) THEN
>>>>>        ! all done, exit program...
>>>>>        EXIT slv
>>>>>       END IF
>>>>>
>>>>>       ! call genetic algorithm for inversion...
>>>>>       CALL invert_pixel( pxl, par )
>>>>>
>>>>>       ! send parameter result back to master...
>>>>>       CALL MPI_Send( par, 1, MPI_DOUBLE_PRECISION, master,
>>>>> tag, MPI_COMM_WORLD, ierr )
>>>>>      END DO slv
>>>>>
>>>>> END IF
>>>>>
>>>>> ! shut down MPI...
>>>>> CALL MPI_Finalize( ierr )
>>>>> WRITE(*,*) ""
>>>>> IF ( ierr == 0 ) WRITE(*,*) "Goodbye from process",proc_id
>>>>>
>>>>> !********************************************************************!
>>>>> !**************************** END PROGRAM ***************************!
>>>>> !********************************************************************!
>>>>>
>>>>> STOP
>>>>> END PROGRAM mpi_main
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Cheers,
>>>>> Brian
>>>>> brian.harker at gmail.com
>>>>>
>>>>>
>>>>> "In science, there is only physics; all the rest is stamp-collecting."
>>>>>
>>>>> -Ernest Rutherford
>>>>>
>>>>>
>>>>
>>>
>>>
>>>
>>
>>
>
>
>
> --
> Cheers,
> Brian
> brian.harker at gmail.com
>
>
> "In science, there is only physics; all the rest is stamp-collecting."
>
> -Ernest Rutherford
>



-- 
Cheers,
Brian
brian.harker at gmail.com


"In science, there is only physics; all the rest is stamp-collecting."

-Ernest Rutherford




More information about the mpich-discuss mailing list