On May 23, 2012, at 7:05 AM, Jeff Squyres wrote:

> On May 23, 2012, at 6:05 AM, Simone Pellegrini wrote:
> 
>>> If process A sends a message to process B and the eager protocol is used 
>>> then I assume that the message is written into a shared memory area and 
>>> picked up by the receiver when the receive operation is posted. 
> 
> Open MPI has a few different shared memory protocols.
> 
> For short messages, they always follow what you mention above: CICO.
> 
> For large messages, we either use a pipelined CICO (as you surmised below) or 
> use direct memory mapping if you have the Linux knem kernel module installed. 
>  More below.
> 
>>> When the rendezvous is utilized however the message still need to end up in 
>>> the shared memory area somehow. I don't think any RDMA-like transfer exists 
>>> for shared memory communications. 
> 
> Just to clarify: RDMA = Remote Direct Memory Access, and the "remote" usually 
> refers to a different physical address space (e.g., a different server).  
> 
> In Open MPI's case, knem can use a direct memory copy between two processes.

In addition, the vader BTL (XPMEM BTL) also provides similar functionality - 
provided the XPMEM kernel module and user library are available on the system.

Based on my limited experience with the two, I've noticed that knem is 
well-suited for Intel architectures, while XPMEM is best for AMD architectures.

Samuel K. Gutierrez
Los Alamos National Laboratory

> 
>>> Therefore you need to buffer this message somehow, however I       assume 
>>> that you don't buffer the whole thing but use some type of pipelined 
>>> protocol so that you reduce the size of the buffer you need to keep in the 
>>> shared memory. 
> 
> Correct.  For large messages, when using CICO, we copy the first fragment and 
> the necessary meta data to the shmem block.  When the receiver ACKs the first 
> fragment, we pipeline CICO the rest of the large message through the shmem 
> block.  With the sender and receiver (more or less) simultaneously writing 
> and reading to the circular shmem block, we probably won't fill it up -- 
> meaning that the sender hypothetically won't need to block.
> 
> I'm skipping a bunch of details, but that's the general idea.
> 
>>> Is it completely wrong? It would be nice if someone could point me 
>>> somewhere I can find more details about this. In the OpenMPI tuning page 
>>> there are several details regarding the protocol utilized for IB but very 
>>> little for SM. 
> 
> Good point.  I'll see if we can get some more info up there.
> 
>> I think I found the answer to my question on Jeff Squyres  blog:
>> http://blogs.cisco.com/performance/shared-memory-as-an-mpi-transport-part-2/
>> 
>> However now I have a new question, how do I know if my machine uses the 
>> copyin/copyout mechanism or the direct mapping? 
> 
> You need the Linux knem module.  See the OMPI README and do a text search for 
> "knem".
> 
> -- 
> Jeff Squyres
> jsquy...@cisco.com
> For corporate legal information go to: 
> http://www.cisco.com/web/about/doing_business/legal/cri/
> 
> 
> _______________________________________________
> users mailing list
> us...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/users


Reply via email to