Gilles, Nathan, Jeff, George, and the OMPI Developer Community, Thank you all for your kind and helpful responses.
I have been gathering your advice and trying to put the various pieces together. Currently, I have managed to graft a new function MPI_LIBPNBC_Start at the MPI level with a corresponding pointer into mca->coll->libpnbc->mca_coll_libpnbc_start() and I can get it to fire from my test code. This required good deal of hacking on some of the core files in trunk/ompi/mpi/c/… and trunk/ompi/mca/coll/… Not ideal, I’m sure, but for my purposes (and level of familiarity) just getting this to fire is a breakthrough. I will delve into some of the cleaner looking methods that you all have provided—I still need much more familiarity with the codebase, as I often find myself way out in the woods :) Thanks again to all of you for your help. It is nice to find a welcoming community of developers. I hope to be in touch soon with some more useful findings for you. Best Regards, -Bradley On Jul 31, 2016, at 5:28 PM, George Bosilca <bosi...@icl.utk.edu<mailto:bosi...@icl.utk.edu>> wrote: Bradley, We had similar needs in one of our projects and as a quick hack we extended the GRequest interface to support persistent requests. There are cleaner ways, but we decided that highjacking the OMPI_REQUEST_GEN was good enough for a proof-of-concept. Then add a start member to the ompi_grequest_t in request/grequest.h, and then do what Nathan suggested by extending the switch in the ompi/mpi/c/start.c (and startall), and directly call your own start function. George. On Sat, Jul 30, 2016 at 6:29 PM, Jeff Squyres (jsquyres) <jsquy...@cisco.com<mailto:jsquy...@cisco.com>> wrote: Also be aware of the Open MPI Extensions framework, explicitly intended for adding new/experimental APIs to mpi.h and the Fortran equivalents. See ompi/mpiext. > On Jul 29, 2016, at 11:16 PM, Gilles Gouaillardet > <gilles.gouaillar...@gmail.com<mailto:gilles.gouaillar...@gmail.com>> wrote: > > For a proof-of-concept, I'd rather suggest you add MPI_Pcoll_start(), and add > a pointer in mca_coll_base_comm_coll_t. > If you add MCA_PML_REQUEST_COLL, then you have to update all pml components > (fastidious), if you update start.c (quite simple), then you also need to > update start_all.c (less trivial) > If the future standard mandates the use of MPI_Start and MPI_Startall, then > we will reconsider this. > > From a performance point of view, that should not change much. > IMHO, non blocking collectives come with a lot of overhead, so shaving a few > nanoseconds here and then will unlikely change the big picture. > > If I oversimplify libnbc, it basically schedule MPI_Isend, MPI_Irecv and > MPI_Wait (well, MPI_Test since this is on blocking, but let's keep it simple) > My intuition is your libpnbc will post MPI_Send_init, MPI_Recv_init, and > schedule MPI_Start and MPI_Wait. > Because of the overhead, I would only expect marginal performance > improvement, if any. > > Cheers, > > Gilles > > On Saturday, July 30, 2016, Bradley Morgan > <morg...@auburn.edu<mailto:morg...@auburn.edu>> wrote: > > Hello Gilles, > > Thank you very much for your response. > > My understanding is yes, this might be part of the future standard—but > probably not from my work alone. I’m currently just trying get a > proof-of-concept and some performance metrics. > > I have item one of your list completed, but not the others. I will look into > adding the MCA_PML_REQUEST_COLL case to mea_pml_ob1_start. > > Would it also be feasible to create a new function and pointer in > mca_coll_base_comm_coll_t struct, (i.e. mca_coll_base_module_istart, etc.) > just to get a proof of concept? Do you think this would be a fairly accurate > representation (in regard to performance, not necessarily semantics) of how > the standard\official implementation would work? > > > Once again, thanks very much for this information! > > > Regards, > > -Bradley > > > >> On Jul 29, 2016, at 10:54 AM, Gilles Gouaillardet >> <gilles.gouaillar...@gmail.com<mailto:gilles.gouaillar...@gmail.com>> wrote: >> >> Out of curiosity, is MPI_Ibcast_init (and friends) something that will/might >> be part of the future standard ? >> >> if you want to implement this as a MCA, then you have (at least) to >> - add an Ibcast_init field (function pointer) to mca_coll_base_comm_coll_t >> struct >> - add a 'case MCA_PML_REQUEST_COLL:' in mca_pml_ob1_start >> - ensure these request are progressed >> - ensure these requests can be MPI_{Wait,Test,Probe!Request_free!Cancel } >> and friends >> >> note all coll components must initialize the new ibcast_init field to NULL >> and all pml components should handle MCA_PML_REQUEST_COLL. >> >> >> Cheers, >> >> Gilles >> >> >> On Saturday, July 30, 2016, Bradley Morgan >> <morg...@auburn.edu<mailto:morg...@auburn.edu>> wrote: >> Hello OpenMPI Developers, >> >> (I am new to the community, so please forgive me if I violate any protocols >> or seem naive here…) >> >> >> I am currently working on a prototype component for persistent nonblocking >> collectives (ompi->mca->coll->libpnbc). >> >> I have integrated my new component and mapped MPI_IBcast to my own _init >> function, which initiates a request but does not start it. Next, I would >> like to create a function pointer for MPI_Start to kick off these requests. >> However, the pointer(s) for MPI_Start live in the pml (point-to-point) >> framework and its implementation seems tacit to MCA. I was able to trace >> the default mapping of MPI_Start for my build to >> pml->ob1->pml_ob1_start.c->mca_pml_ob1_start(), but I can’t seem to >> translate the magic in that path to my own component. >> >> Alternatively, if trying to map MPI_Start is too difficult, I think I could >> also create a custom function like LIBPNBC_Start just to get past this and >> begin testing, but I have not yet found a clean way to make a custom >> component function visible and useable at the MPI level. >> >> >> If anyone has any advice or can direct me to any applicable resources >> (mostly regarding function mapping \ publishing for MPI components) it would >> be greatly appreciated! >> >> >> Thanks very much! >> >> >> -Bradley >> _______________________________________________ >> devel mailing list >> devel@lists.open-mpi.org<mailto:devel@lists.open-mpi.org> >> https://rfd.newmexicoconsortium.org/mailman/listinfo/devel >> _______________________________________________ >> devel mailing list >> devel@lists.open-mpi.org<mailto:devel@lists.open-mpi.org> >> https://rfd.newmexicoconsortium.org/mailman/listinfo/devel > > _______________________________________________ > devel mailing list > devel@lists.open-mpi.org<mailto:devel@lists.open-mpi.org> > https://rfd.newmexicoconsortium.org/mailman/listinfo/devel -- Jeff Squyres jsquy...@cisco.com<mailto:jsquy...@cisco.com> For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/ _______________________________________________ devel mailing list devel@lists.open-mpi.org<mailto:devel@lists.open-mpi.org> https://rfd.newmexicoconsortium.org/mailman/listinfo/devel _______________________________________________ devel mailing list devel@lists.open-mpi.org<mailto:devel@lists.open-mpi.org> https://rfd.newmexicoconsortium.org/mailman/listinfo/devel
_______________________________________________ devel mailing list devel@lists.open-mpi.org https://rfd.newmexicoconsortium.org/mailman/listinfo/devel