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