[dcmf] Question about DCMF Library from a new user

Michael Blocksome blocksom at us.ibm.com
Thu Feb 7 14:12:46 CST 2008


Rajesh,

These are excellent questions! We need to provide better documentation on 
how the callback flow works ... baring that, I'll answer your questions as 
they come and maybe we can pull together a document after answering these 
questions on the mailing list.


There are two types of callbacks - think of them as "local completion" and 
"remote notification" callbacks.

The local completion callbacks are specified not at registration time, but 
when an individual operation is started (DCMF_Send(), for example). This 
callback is invoked by the dcmf runtime, when the local node calls the 
DCMF_Messager_advance() function, after the source buffer has been 
completely sent.  Once the local completion callback is invoked all 
buffers associated with the operation may be deallocated, etc.

The callbacks that are registered for DCMF_Send (and DCMF_Control, etc) 
with the DCMF_Send_register() function are invoked by the dcmf runtime on 
the remote node when that node call the DCMF_Messager_advance() function. 
Typically all nodes in the system will periodically poll with 
DCMF_Messager_advance() to make progress, however the BGP messager can be 
configured to enable an interupt to be fired when a core receives a 
packet.  In this interrupt mode active polling is not required - although 
you do take a performance hit because of the overhead of processing the 
interrupts.

The remote callbacks for DCMF_Send are invoked before any data has been 
written to the remote node.  There are two callback types and each has 
slightly different use by the application programmer.

The DCMF_RecvSendShort ("short") callbacks are invoked when the entire 
message has been received by the remote node into a temporary location (on 
BGP this is a single packet of data that has been received by the DMA into 
a memory fifo).  The application's responsibility is to copy the data out 
of the temporary buffer and into the final destination buffer. This 
callback type was created specifically to allow the dcmf implementation to 
optimize the performance for small messages.

The DCMF_RecvSend ("long" or "asynhcronous") callbacks are invoked when 
the control information has been received by the remote node into a 
temporary location (on BGP the control information will be contained in a 
single packet).  The application's responsibility is to allocate memory 
(DCMF_Request_t) for the dcmf runtime to use to receive the rest of the 
data, as well as specify the destination buffer and length and a 
("recv_done") callback. This "recv_done" callback is invoked by the dcmf 
runtime when the data has been completely received and written to the 
destination buffer.  Typically applications will free/deallocate the 
DCMF_Request_t memory that was allocated previously.



DCMF_Put and memory regions (i.e., registration, pinning)

The DCMF_Put in the library is just stubbed in as we didn't have a need 
for it in release 1 of the BG/P software.  However, we are actively 
working on adding the DCMF_Put() into the API which will also require a 
memory region API. The existing DCMF_Get API will be updated to use these 
new memory regions objects.  Perhaps we should go into more detail on the 
memory region API in a separate email.


I hope this helps!

Michael Blocksome
Blue Gene Messaging Team Lead
Advanced Systems SW Development
blocksom at us.ibm.com




"Rajesh Nishtala" <rajeshn at eecs.berkeley.edu> 
Sent by: dcmf-bounces at lists.anl-external.org
02/07/2008 12:01 PM

To
dcmf at lists.anl-external.org
cc
upc-devel at lbl.gov
Subject
[dcmf] Question about DCMF Library from a new user






Hi,
 I am porting GASNet, our portable runtime layer for the Berkeley UPC
compiler, to the BlueGene/P and i'm using DCMF as the lower level
messaging layer. I have some high level questions regarding the
library that will influence the design of our BlueGene/P port. The
main difference between our library and MPI is that we focus on
one-sided communication so my main questions are regarding these
issues.

+ When does the callback that gets registered with DCMF_Send() get
called? Does it get called after the data has been committed to the
memory on the remote node or does it simply imply that the data buffer
is safe to reuse on the local node?

+ I notice that when I do an nm on the dcmf libraries there is
DCMF_Put() function, however when i waded through the code a little
bit more I noticed that the function simply called an abort which to
me implies that it is not implemented. Is this why it doesn't show up
in the dcmf.h header files?

+ I have heard that the BlueGene/P supports RDMA operations. Are there
any special considerations for managing the memory registration (i.e.
memory pinning) to enable these operations or is this done
automatically under the covers?


Thanks in advance for any help!

Sincerely,
Rajesh Nishtala
_______________________________________________
dcmf mailing list
dcmf at lists.anl-external.org
http://lists.anl-external.org/cgi-bin/mailman/listinfo/dcmf
http://dcmf.anl-external.org/wiki

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.alcf.anl.gov/pipermail/dcmf/attachments/20080207/6aa1e758/attachment.htm>


More information about the dcmf mailing list