how to improve synch.delay (Isend)

[email protected] Sun, 22 Oct 2006 21:39:37 +0200
Newsgroups gmane.network.myrinet.general
Message-ID <[email protected]>
Hi,

I am still working on implementation of Parallel Segmented Quicksort Alg.=
,using
mpi Isend and Irecv functions for exchanging KBs of data between CPU's.
My problem is in performence of this exchange.
Implementation of data exchange is simple:
1]All CPUs send all data which need to be exchange using Isend(...) to an=
other
CPUs
/* called several times */
MPI_Send(...)  sends message envelope(for Iprobe testing) with size of Is=
end
message
MPI_Isend(...) use non-blocking send for data (data for send)
MPI_Isend(...) use non-blocking sends for indexes (data for send)
 ...
2]When all data for exchange were sent by Isend,all CPUs then use Iprobe =
to
receive message size and then call data by Irecv several times
/* called for several times */
while("counter") {
  do {
   Iprobe(...) get message size
  }
  Recv(size,...) get data message size

  Irecv(..,size,.) receive data by non-blocking send
  Irecv(..,size,.) receive indexes (also data) by non-blocking send
  MPI_Waitall(.,reqs[2],..)
}
3]before finally deallocaion of send and receive buffers I call MPI_Waita=
ll for
test of completion Isend.

THE PROBLEM IS: when I run my quicksort alg. with more CPU, total elapsed=
 time
is worse then for less CPU! I think the reason is in synchronization dela=
ys
between CPUs which grows with their number.
Do I use Isend correctly?Is there any other way how to rewrite,improve th=
is=20
procedure or shall I use another type of send?

I am still beginner around MPI lib.
Thanks a lot for hepl Jiri Tomanek