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