Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

Subject: Re: [OMPI devel] how to add a component in the ompi?
From: George Bosilca (bosilca_at_[hidden])
Date: 2010-03-17 00:42:42


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 <bosilca_at_[hidden]> 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 <jsquyres_at_[hidden]> 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
> > jsquyres_at_[hidden]
> > For corporate legal information go to:
> > http://www.cisco.com/web/about/doing_business/legal/cri/
> >
> >
> > _______________________________________________
> > devel mailing list
> > devel_at_[hidden]
> > http://www.open-mpi.org/mailman/listinfo.cgi/devel
> >
> > _______________________________________________
> > devel mailing list
> > devel_at_[hidden]
> > http://www.open-mpi.org/mailman/listinfo.cgi/devel
>
>
> _______________________________________________
> devel mailing list
> devel_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/devel
>
> _______________________________________________
> devel mailing list
> devel_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/devel