The MPI Standard (in my opinion) should have avoided the word "buffer". To 
me, a "buffer" is something you set aside as scratch space between the 
application data structures and the communication calls. 

In MPI, the communication is done directly from/to the application's data 
structures and there are no "buffers" needed.  The point of MPI_Datatypes 
is their ability to describe the layout of the data in the application 
data structure so an MPI_Scatter(), for example, can operate directly.

This saves any need to allocate contiguous scratch buffers and do packing 
to send and unpacking after receive.


Dick Treumann  -  MPI Team 
IBM Systems & Technology Group
Dept X2ZA / MS P963 -- 2455 South Road -- Poughkeepsie, NY 12601
Tele (845) 433-7846         Fax (845) 433-8363




From:
Alexandru Blidaru <alexs...@gmail.com>
To:
Open MPI Users <us...@open-mpi.org>
Date:
07/21/2010 11:19 AM
Subject:
Re: [OMPI users] Partitioning problem set data
Sent by:
users-boun...@open-mpi.org



Hey Bill,

I took a look at the documentation for MPI_Scatter(), but I noticed that 
you need buffers to use it. My supervisor wasn't really happy with using 
buffers, and for that reason the code that I am writing is only using 
blocking routines, which will make my life a tad bit harder due to the 
fact that i have to avoid a deadlock, i believe it's called. I know it 
might not make sense due to the way MPI works, but is there any 
Scatter-like function that does not use buffers? 

NB: I haven't looked through that book yet, so i am not sure whether they 
provide any non-buffer examples.

Alex

On Wed, Jul 21, 2010 at 10:48 AM, Bill Rankin <bill.ran...@sas.com> wrote:
Depending on the datatype and its order in memory, the “Block,*” and 
“*,Block” (which we used to call “slabs” in 3D) may be implemented by a 
simple scatter/gather call in MPI.   The “Block,Block” distribution is a 
little more complex, but if you take advantage of MPI’s derived datatypes, 
you may be able to reference an arbitrary 3D sub-space as a single data 
entity and then use gather/scatter with that.
 
I recommend that look through some of the examples in “MPI – The Complete 
Reference (Vol. 1)” by Snir, et.al. for use of  MPI_Gather(), 
MPI_Scatter(), as well as the section on user-defined datatypes.  Section 
5.2 of “Using MPI” by Gropp, Lusk and Skjellum has an example code for an 
N-Body Problem which you may find useful.
 
Hope this helps. 
 
-bill
 
 
From: users-boun...@open-mpi.org [mailto:users-boun...@open-mpi.org] On 
Behalf Of Alexandru Blidaru
Sent: Tuesday, July 20, 2010 10:54 AM
To: Open MPI Users
Subject: Re: [OMPI users] Partitioning problem set data
 
If there is an already existing implementation of the *Block or Block* 
methods that splits the array and sends the individual pieces to 
the proper nodes, can you point me to it please? 
On Tue, Jul 20, 2010 at 9:52 AM, Alexandru Blidaru <alexs...@gmail.com> 
wrote:
Hi,
 
I have a 3D array, which I need to split into equal n parts, so that each 
part would run on a different node. I found the picture in the attachment 
from this website (
https://computing.llnl.gov/tutorials/parallel_comp/#DesignPartitioning) on 
the different ways to partition data. I am interested in the block 
methods, as the cyclic methods wouldn't really work for me at all. 
Obviously the *, BLOCK and the BLOCK, * methods would be really easy to 
implement for 3D arrays, assuming that the 2D picture would be looking at 
the array from the top. My question is if there are other better ways to 
do it from a performance standpoint?
 
Thanks for your replies,
Alex
 

_______________________________________________
users mailing list
us...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/users
_______________________________________________
users mailing list
us...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/users


Reply via email to