Jeff:
Thanks for running my program (the bug was a transcription error).
You are right, MPI_Bsend does trigger progress sometimes,
but apparently not always. A new version of my program (attached)
allocates enough buffer to prevent overflow in any case and prints out
a mark if the sender calls MPI_Buffer_detach.
Here is an extreme example (with sleep reduced to 1 second)
leonardo:~/projects/mpi/src$ mpirun n0,1 -ssi rpi tcp Bsend -b 1000000
Buffer size is 1000000
sending message 1 at Thu May 12 17:49:29 2005
sending message 2 at Thu May 12 17:49:30 2005
sending message 3 at Thu May 12 17:49:31 2005
sending message 4 at Thu May 12 17:49:32 2005
sending message 5 at Thu May 12 17:49:33 2005
sending message 6 at Thu May 12 17:49:34 2005
sending message 7 at Thu May 12 17:49:35 2005
sending message 8 at Thu May 12 17:49:36 2005
sending message 9 at Thu May 12 17:49:37 2005
sending message 10 at Thu May 12 17:49:38 2005
sender detaches buffer at Thu May 12 17:49:42 2005
****** message 1 received at Thu May 12 17:49:42 2005
****** message 2 received at Thu May 12 17:49:42 2005
****** message 3 received at Thu May 12 17:49:42 2005
****** message 4 received at Thu May 12 17:49:42 2005
****** message 5 received at Thu May 12 17:49:42 2005
****** message 6 received at Thu May 12 17:49:42 2005
****** message 7 received at Thu May 12 17:49:42 2005
****** message 8 received at Thu May 12 17:49:42 2005
****** message 9 received at Thu May 12 17:49:42 2005
****** message 10 received at Thu May 12 17:49:42 2005
As you can see, all messages are delivered not before the sender
forces them out by detaching the buffer. For other message sizes I
observe scenarios similar to yours.
We are using LAM 7.1.1 on a 2.6.10 SMP kernel (see laminfo below),
the two nodes above are linked by GBit ethernet.
Of course we don't use Bsend in any serious application. This is just
a pedagogical study for a <ad>book on "cluster computing"</ad>
that I am coauthoring :-)
Cheers,
Stephan
leonardo:~/projects/mpi/src$ laminfo
LAM/MPI: 7.1.1
Prefix: /usr
Architecture: i686-pc-linux-gnu
Configured by: root
Configured on: Wed Apr 13 17:29:57 CEST 2005
Configure host: hal
Memory manager: ptmalloc2
C bindings: yes
C++ bindings: yes
Fortran bindings: yes
C compiler: gcc
C++ compiler: g++
Fortran compiler: g77
Fortran symbols: double_underscore
C profiling: yes
C++ profiling: yes
Fortran profiling: yes
C++ exceptions: no
Thread support: yes
ROMIO support: yes
IMPI support: no
Debug support: no
Purify clean: no
SSI boot: globus (API v1.1, Module v0.6)
SSI boot: rsh (API v1.1, Module v1.1)
SSI boot: slurm (API v1.1, Module v1.0)
SSI coll: lam_basic (API v1.1, Module v7.1)
SSI coll: shmem (API v1.1, Module v1.0)
SSI coll: smp (API v1.1, Module v1.2)
SSI rpi: crtcp (API v1.1, Module v1.1)
SSI rpi: lamd (API v1.0, Module v7.1)
SSI rpi: sysv (API v1.0, Module v7.1)
SSI rpi: tcp (API v1.0, Module v7.1)
SSI rpi: usysv (API v1.0, Module v7.1)
SSI cr: self (API v1.0, Module v1.0)
--
Stephan Mertens @ http://www.uni-magdeburg.de/mertens
Supercomputing in Magdeburg @ http://tina.nat.uni-magdeburg.de
|