[mpich-discuss] Buffered send and tcp on Windows

Rajeev Thakur thakur at mcs.anl.gov
Fri Aug 29 13:57:50 CDT 2008


You are sending 1000 integers = 4000 bytes. The buffer is 10000 bytes, so it
has room for only 2 bsends.

Rajeev 

> -----Original Message-----
> From: owner-mpich-discuss at mcs.anl.gov 
> [mailto:owner-mpich-discuss at mcs.anl.gov] On Behalf Of Mikko Lyly
> Sent: Friday, August 29, 2008 1:45 PM
> To: mpich-discuss at mcs.anl.gov
> Subject: [mpich-discuss] Buffered send and tcp on Windows
> 
> Dear all,
> 
> I have a small question related to MPICH2 1.0.7, and I was 
> hoping if you could help me to understand the case a little 
> bit better.
> 
> Attached to this mail (see below) is a small sample program 
> in f90, which fails to run both on Linux and Windows when 
> executed as follows:
> 
> $ mpiexec -localonly 4 test
> 
> It runs fine for n=1,2,3.  For  n=4 and grater, I get:
> 
> Fatal error in MPI_Bsend: Invalid buffer pointer, error stack:
> MPI_Bsend(182).......: MPI_Bsend(buf=0023EE50, count=1000, 
> MPI_INTEGER, dest=3, tag=1000, MPI_COMM_WORLD) failed
> MPIR_Bsend_isend(342): Insufficient space in Bsend buffer; 
> requested 4000; total buffer size is 10000
> 
> I fail to understand, why is the buffer size not sufficient 
> (sending 3000, bufsize is 10000), and why the error is 
> "requested 4000"?
> 
> Thank you and have a very nice weekend,
> Mikko Lyly
> 
> 
> PROGRAM test
>   IMPLICIT NONE
>   INCLUDE 'mpif.h'
>   INTEGER :: receiver, sender, rc, ntasks, id
>   INTEGER :: status(MPI_STATUS_SIZE)
>   INTEGER, PARAMETER :: send_buf_size = 10000
>   INTEGER, PARAMETER :: data_buf_size = 1000
>   INTEGER :: send_buf(send_buf_size)
>   INTEGER :: data_buf(data_buf_size)
> 
>   CALL MPI_INIT(rc)
>   CALL MPI_COMM_SIZE(MPI_COMM_WORLD, ntasks, rc)
> 
>   CALL MPI_COMM_RANK(MPI_COMM_WORLD, id, rc)
>   CALL MPI_BUFFER_ATTACH(send_buf, send_buf_size, rc)
> 
>   ! Sending (ntasks-1) times 1000 integers (buffer size is 10000):
>   DO receiver = 0, ntasks-1
>      IF(receiver /= id) THEN
>         PRINT *, 'Send:', id, '->', receiver
>         CALL MPI_BSEND(data_buf, data_buf_size, MPI_INTEGER, 
> receiver, 1000, MPI_COMM_WORLD, rc)
>      END IF
>   END DO
> 
>   ! Receiving (ntasks-1) times 1000 integers:
>   DO sender = 0, ntasks-1
>      IF(sender /= id) THEN
>         PRINT *, 'Recv:', sender, '->', id
>         CALL MPI_RECV(data_buf, data_buf_size, MPI_INTEGER, 
> sender, 1000, MPI_COMM_WORLD, status, rc)
>      END IF
>   END DO
> 
>   CALL MPI_FINALIZE(rc)
> 
> END PROGRAM test
> 
> 




More information about the mpich-discuss mailing list