Yaohui,

The callback functions are registered by any modules that can handle network 
communications. In your specific case I would guess it is the PML. Look in 
mca/pml/ob1/pml_ob1.c starting from line 364 to see what callbacks are 
registered by OB1.

  george.

On Mar 17, 2010, at 01:22 , hu yaohui wrote:

> Hi Geogre,
> Thank you very much!
> i know ,it's really a receive callback in this send function 
> mca_btl_self_send,what i want to know is where  this callback function(line 
> 303).
> <snip>
> 303    reg = mca_btl_base_active_message_trigger + tag;
> 304    reg->cbfunc( btl, tag, des, reg->cbdata );
> </snip>
> mapped to,where this function is initialized.in which file,which function,the 
> mca_bml_r2_register was called.
>  
> Thanks & Regards
> Yaohui
> 
> On Wed, Mar 17, 2010 at 12:42 PM, George Bosilca <bosi...@eecs.utk.edu> wrote:
> Yoahui,
> 
> The self component is special. While is does behave as a "normal" BTL, it 
> takes a lot of shortcuts as all operations are in the memory of a single 
> process. However, as the simplest BTLs in Open MPI, I guess it is a good 
> starting point.
> 
> As stated previously, the self BTL exhibit a lot of differences compared with 
> the others BTL. For your case, in the self BTL the send function trigger the 
> receiver callback, as there is other simple way to drain the "network". This 
> explain why we compute the btl_active_message_callback_t directly in the send 
> function. Usually, this is done on the progress function, once some data have 
> been extracted from the network. Basically, everything in the 
> mca_btl_self_send function starting from the "/* upcall */" comment is the 
> receive operation.
> 
>  george.
> 
> On Mar 17, 2010, at 00:30 , hu yaohui wrote:
> 
> > Hi George,
> > what i want to do is to modify the self component to meet my needs,i just 
> > want to modify the send function of the self component to test whether my 
> > implemented send function ,which based on some emulation platform, is 
> > right.so i copied all the self component code,modified the component name 
> > to mine ,the i wanted to subsitude its send and receive to my implemented 
> > send/receive function.i dont know whether this is right,if not ,or you need 
> > more information ,please let me know.
> >
> > Thanks & Regards
> > Yaohui Hu .
> >
> > On Wed, Mar 17, 2010 at 12:05 PM, George Bosilca <bosi...@eecs.utk.edu> 
> > wrote:
> > Yaohui,
> >
> > The whole infrastructure at the level where you're looking is similar to 
> > Active Messages. The register function is used to register callback for a 
> > specific tag. A tag is a uint8_t, and thus there are 256 callbacks 
> > possible. However, there are some rules regarding which level is allowed to 
> > register callbacks in a specific range, in order to avoid conflict between 
> > several modules loaded in same time.
> >
> > Anyway, as far as I understood you're looking at writing a new BTL. Every 
> > time a message is drained from the network, the BTL is supposed to know 
> > that tag it was send to and trigger the corresponding callback (this only 
> > on the receiver side). How this "tag" is moved around depends on the BTL 
> > capabilities. Some will have to push it explicitly through the network (TCP 
> > as an example), while others have other means to move it around (for MX 
> > this tag is part of the 64 bits key used for each message). Therefore, the 
> > first thing you should make sure is that you really have a way to retrieve 
> > this tag on the receiver side. Once you have the tag and the content of the 
> > message, you should call the callback corresponding to the tag (using the 
> > simple addition you noticed), and pass the correct arguments. This should 
> > at least let you start the eager protocol.
> >
> >  george.
> >
> > On Mar 16, 2010, at 23:22 , hu yaohui wrote:
> >
> > > Hi Jeff & All
> > > Yes,you are right,i was just a little dizzy then. i need to modify the 
> > > send function of component self in btl framework.
> > > i just met a problem right now.
> > > when i browse the function 
> > > mca_btl_self_send(~/ompi/mca/btl/self/btl_self.c),i think it use this to 
> > > send the data
> > > <snip>
> > > 303    reg = mca_btl_base_active_message_trigger + tag;
> > > 304    reg->cbfunc( btl, tag, des, reg->cbdata );
> > > </snip>
> > > i trace through the "mca_btl_base_active_message_trigger" to the function 
> > > where it get its value ,then i find function 
> > > mca_bml_r2_register(~/ompi/mca/bml/bml_r2.c),it like this:
> > > <snip>
> > > 728    mca_btl_base_active_message_trigger[tag].cbfunc = cbfunc;
> > > 729    mca_btl_base_active_message_trigger[tag].cbdata = data;
> > > <snip>
> > > when i trace through mca_bml_r2_register ,in the same file,i get this 
> > > structure:
> > > <snip>
> > > mca_bml_r2_module_t mca_bml_r2 = {
> > >     {
> > >         &mca_bml_r2_component,
> > >         mca_bml_r2_add_procs,
> > >         mca_bml_r2_del_procs,
> > >         mca_bml_r2_add_btl,
> > >         mca_bml_r2_del_btl,
> > >         mca_bml_r2_del_proc_btl,
> > >         mca_bml_r2_register, <------------------------------------
> > >         mca_bml_r2_register_error,
> > >         mca_bml_r2_finalize,
> > >         mca_bml_r2_ft_event
> > >     }
> > >
> > > };
> > > <snip>
> > > after this ,i find the place where mca_bml_r2 is initialized,but i cannt 
> > > find anything related to mca_bml_r2_register.i just want to know reg = 
> > > mca_btl_base_active_message_trigger + tag;
> > > really is.and i want to modify the send function of self ,is this the 
> > > right way? or you can tell me the right way to modify the send function 
> > > of self component.
> > >
> > > Thanks & Regards
> > > Yaohui Hu
> > >
> > > On Wed, Mar 17, 2010 at 12:52 AM, Jeff Squyres <jsquy...@cisco.com> wrote:
> > > On Mar 16, 2010, at 9:45 AM, hu yaohui wrote:
> > >
> > > > it just said,i had a wrong command format,when i use mpirun --help,i 
> > > > really
> > > > didn't find the --mca parameter.why the tcp FAQ part list these command 
> > > > lines,
> > > > but it cann't execute successfully on my machine.Is there any another 
> > > > way to control the specific
> > > > btl components to be used?
> > >
> > > Make sure you're using the right mpirun -- you might have multiple 
> > > installed on your machine.
> > >
> > > OMPI's "mpirun --help" definitely includes a description of the --mca 
> > > parameter:
> > >
> > >   -mca|--mca <arg0> <arg1>
> > >                         Pass context-specific MCA parameters; they are
> > >                         considered global if --gmca is not used and only
> > >                         one context is specified (arg0 is the parameter
> > >                         name; arg1 is the parameter value)
> > >
> > > --
> > > Jeff Squyres
> > > jsquy...@cisco.com
> > > For corporate legal information go to:
> > > http://www.cisco.com/web/about/doing_business/legal/cri/
> > >
> > >
> > > _______________________________________________
> > > devel mailing list
> > > de...@open-mpi.org
> > > http://www.open-mpi.org/mailman/listinfo.cgi/devel
> > >
> > > _______________________________________________
> > > devel mailing list
> > > de...@open-mpi.org
> > > http://www.open-mpi.org/mailman/listinfo.cgi/devel
> >
> >
> > _______________________________________________
> > devel mailing list
> > de...@open-mpi.org
> > http://www.open-mpi.org/mailman/listinfo.cgi/devel
> >
> > _______________________________________________
> > devel mailing list
> > de...@open-mpi.org
> > http://www.open-mpi.org/mailman/listinfo.cgi/devel
> 
> 
> _______________________________________________
> devel mailing list
> de...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/devel
> 
> _______________________________________________
> devel mailing list
> de...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/devel


Reply via email to