On Wed, Jul 24, 2019 at 09:46:13PM +0000, Jeff Squyres (jsquyres) wrote:
> On Jul 24, 2019, at 5:16 PM, Ralph Castain via users 
> <users@lists.open-mpi.org> wrote:
> > 
> > It doesn't work that way, as you discovered. You need to add this 
> > information at the same place where vader currently calls modex send, and 
> > then retrieve it at the same place vader currently calls modex recv. Those 
> > macros don't do an immediate send/recv like you are thinking - the send 
> > simply adds the value to an aggregated payload, then the "fence" call 
> > distributes that payload to everyone, and then the read extracts the 
> > requested piece from that payload.
> 
> Just to expand on what Ralph said, think of it like this:
> 
> 1. each component/module does a modex "send", which just memcopies the data 
> blob
> 
> 2. the "fence()" is deep within ompi_mpi_init(), which does the actual data 
> exchange of all the module blobs in an efficient manner
> 
> 3. each component/module can then later do a modex "receive", which just 
> memcopies the relevant blob from the module blobs that were actually received 
> in step #2

Thanks for the clarifications how this works. I was expecting something
completely different.

> (BTW, "modex" = "module exchange")

Ah, also good to know. I was not really sure what it means.

I opened a pull request completely without modex : 
https://github.com/open-mpi/ompi/pull/6844

I would have preferred to have the user namespace detection earlier than
the actual {put,get}(), but I was not able to make it work.

I hope I included all relevant information about my changes in the PR.
Let's continue the discussion there. Thanks everyone for the support.

                Adrian

> >> On Jul 24, 2019, at 5:23 AM, Adrian Reber <adr...@lisas.de> wrote:
> >> 
> >> On Mon, Jul 22, 2019 at 04:30:50PM +0000, Ralph Castain wrote:
> >>>> On Jul 22, 2019, at 9:20 AM, Adrian Reber <adr...@lisas.de> wrote:
> >>>> 
> >>>> I have most of the code ready, but I still have troubles doing
> >>>> OPAL_MODEX_RECV. I am using the following lines, based on the code from
> >>>> orte/test/mpi/pmix.c:
> >>>> 
> >>>> OPAL_MODEX_SEND_VALUE(rc, OPAL_PMIX_LOCAL, "user_ns_id", &value, 
> >>>> OPAL_INT);
> >>>> 
> >>>> This sets rc to 0. For receiving:
> >>>> 
> >>>> OPAL_MODEX_RECV_VALUE(rc, "user_ns_id", &wildcard_rank, &ptr, OPAL_INT);
> >>> 
> >>> You need to replace "wildcard_rank" with the process name of the proc who 
> >>> published the "user_ns_id" key. If/when we have mpirun provide the value, 
> >>> then you can retrieve it from the wildcard rank as it will be coming from 
> >>> the system and not an application proc
> >> 
> >> So I can get the user namespace ID from all involved processes back to
> >> the main process (MCA_BTL_VADER_LOCAL_RANK == 0). But now only this
> >> process knows that the user namespace IDs are different and I have
> >> trouble using MODEX to send the information (do not use cma) back to the
> >> other involved processes. It seems am not able to used MODEX_{SEND,RECV}
> >> at the same time. One process sent and waits then on receive from the
> >> other processes. Something like this works
> >> 
> >>    PROC 0                     PROC 1
> >>    recv()                     sent()
> >> 
> >> 
> >> Bit this does not work:
> >> 
> >>    PROC 0                     PROC 1
> >>    recv()                     sent()
> >>    sent()                     recv()
> >> 
> >> If I start the recv() immediately after the send() on PROC 1 no messages
> >> are delivered anymore and everything hangs, even if different MODEX keys
> >> are used. It seems like MODEX can not fetch messages in another order
> >> than it was sent. Is that so?
> >> 
> >> Not sure how to tell the other processes to not use CMA, while some
> >> processes are still transmitting their user namespace ID to PROC 0.
> >> 
> >>            Adrian
> >> 
> >>>> and rc is always set to -13. Is this how it is supposed to work, or do I
> >>>> have to do it differently?
> >>>> 
> >>>>          Adrian
> >>>> 
> >>>> On Mon, Jul 22, 2019 at 02:03:20PM +0000, Ralph Castain via users wrote:
> >>>>> If that works, then it might be possible to include the namespace ID in 
> >>>>> the job-info provided by PMIx at startup - would have to investigate, 
> >>>>> so please confirm that the modex option works first.
> >>>>> 
> >>>>>> On Jul 22, 2019, at 1:22 AM, Gilles Gouaillardet via users 
> >>>>>> <users@lists.open-mpi.org> wrote:
> >>>>>> 
> >>>>>> Adrian,
> >>>>>> 
> >>>>>> 
> >>>>>> An option is to involve the modex.
> >>>>>> 
> >>>>>> each task would OPAL_MODEX_SEND() its own namespace ID, and then 
> >>>>>> OPAL_MODEX_RECV()
> >>>>>> 
> >>>>>> the one from its peers and decide whether CMA support can be enabled.
> >>>>>> 
> >>>>>> 
> >>>>>> Cheers,
> >>>>>> 
> >>>>>> 
> >>>>>> Gilles
> >>>>>> 
> >>>>>> On 7/22/2019 4:53 PM, Adrian Reber via users wrote:
> >>>>>>> I had a look at it and not sure if it really makes sense.
> >>>>>>> 
> >>>>>>> In btl_vader_{put,get}.c it would be easy to check for the user
> >>>>>>> namespace ID of the other process, but the function would then just
> >>>>>>> return OPAL_ERROR a bit earlier instead of as a result of
> >>>>>>> process_vm_{read,write}v(). Nothing would really change.
> >>>>>>> 
> >>>>>>> A better place for the check would be 
> >>>>>>> mca_btl_vader_check_single_copy()
> >>>>>>> but I do not know if at this point the PID of the other processes is
> >>>>>>> already known. Not sure if I can check for the user namespace ID of 
> >>>>>>> the
> >>>>>>> other processes.
> >>>>>>> 
> >>>>>>> Any recommendations how to do this?
> >>>>>>> 
> >>>>>>>               Adrian
> >>>>>>> 
> >>>>>>> On Sun, Jul 21, 2019 at 03:08:01PM -0400, Nathan Hjelm wrote:
> >>>>>>>> Patches are always welcome. What would be great is a nice big 
> >>>>>>>> warning that CMA support is disabled because the processes are on 
> >>>>>>>> different namespaces. Ideally all MPI processes should be on the 
> >>>>>>>> same namespace to ensure the best performance.
> >>>>>>>> 
> >>>>>>>> -Nathan
> >>>>>>>> 
> >>>>>>>>> On Jul 21, 2019, at 2:53 PM, Adrian Reber via users 
> >>>>>>>>> <users@lists.open-mpi.org> wrote:
> >>>>>>>>> 
> >>>>>>>>> For completeness I am mentioning my results also here.
> >>>>>>>>> 
> >>>>>>>>> To be able to mount file systems in the container it can only work 
> >>>>>>>>> if
> >>>>>>>>> user namespaces are used and even if the user IDs are all the same 
> >>>>>>>>> (in
> >>>>>>>>> each container and on the host), to be able to ptrace the kernel 
> >>>>>>>>> also
> >>>>>>>>> checks if the processes are in the same user namespace (in addition 
> >>>>>>>>> to
> >>>>>>>>> being owned by the same user). This check - same user namespace - 
> >>>>>>>>> fails
> >>>>>>>>> and so process_vm_readv() and process_vm_writev() will also fail.
> >>>>>>>>> 
> >>>>>>>>> So Open MPI's checks are currently not enough to detect if 'cma' 
> >>>>>>>>> can be
> >>>>>>>>> used. Checking for the same user namespace would also be necessary.
> >>>>>>>>> 
> >>>>>>>>> Is this a use case important enough to accept a patch for it?
> >>>>>>>>> 
> >>>>>>>>>     Adrian
> >>>>>>>>> 
> >>>>>>>>>> On Fri, Jul 12, 2019 at 03:42:15PM +0200, Adrian Reber via users 
> >>>>>>>>>> wrote:
> >>>>>>>>>> Gilles,
> >>>>>>>>>> 
> >>>>>>>>>> thanks again. Adding '--mca btl_vader_single_copy_mechanism none' 
> >>>>>>>>>> helps
> >>>>>>>>>> indeed.
> >>>>>>>>>> 
> >>>>>>>>>> The default seems to be 'cma' and that seems to use 
> >>>>>>>>>> process_vm_readv()
> >>>>>>>>>> and process_vm_writev(). That seems to require CAP_SYS_PTRACE, but
> >>>>>>>>>> telling Podman to give the process CAP_SYS_PTRACE with 
> >>>>>>>>>> '--cap-add=SYS_PTRACE'
> >>>>>>>>>> does not seem to be enough. Not sure yet if this related to the 
> >>>>>>>>>> fact
> >>>>>>>>>> that Podman is running rootless. I will continue to investigate, 
> >>>>>>>>>> but now
> >>>>>>>>>> I know where to look. Thanks!
> >>>>>>>>>> 
> >>>>>>>>>>     Adrian
> >>>>>>>>>> 
> >>>>>>>>>>> On Fri, Jul 12, 2019 at 06:48:59PM +0900, Gilles Gouaillardet via 
> >>>>>>>>>>> users wrote:
> >>>>>>>>>>> Adrian,
> >>>>>>>>>>> 
> >>>>>>>>>>> Can you try
> >>>>>>>>>>> mpirun --mca btl_vader_copy_mechanism none ...
> >>>>>>>>>>> 
> >>>>>>>>>>> Please double check the MCA parameter name, I am AFK
> >>>>>>>>>>> 
> >>>>>>>>>>> IIRC, the default copy mechanism used by vader directly accesses 
> >>>>>>>>>>> the remote process address space, and this requires some 
> >>>>>>>>>>> permission (ptrace?) that might be dropped by podman.
> >>>>>>>>>>> 
> >>>>>>>>>>> Note Open MPI might not detect both MPI tasks run on the same 
> >>>>>>>>>>> node because of podman.
> >>>>>>>>>>> If you use UCX, then btl/vader is not used at all (pml/ucx is 
> >>>>>>>>>>> used instead)
> >>>>>>>>>>> 
> >>>>>>>>>>> 
> >>>>>>>>>>> Cheers,
> >>>>>>>>>>> 
> >>>>>>>>>>> Gilles
> >>>>>>>>>>> 
> >>>>>>>>>>> Sent from my iPod
> >>>>>>>>>>> 
> >>>>>>>>>>>> On Jul 12, 2019, at 18:33, Adrian Reber via users 
> >>>>>>>>>>>> <users@lists.open-mpi.org> wrote:
> >>>>>>>>>>>> 
> >>>>>>>>>>>> So upstream Podman was really fast and merged a PR which makes my
> >>>>>>>>>>>> wrapper unnecessary:
> >>>>>>>>>>>> 
> >>>>>>>>>>>> Add support for --env-host : 
> >>>>>>>>>>>> https://github.com/containers/libpod/pull/3557
> >>>>>>>>>>>> 
> >>>>>>>>>>>> As commented in the PR I can now start mpirun with Podman 
> >>>>>>>>>>>> without a
> >>>>>>>>>>>> wrapper:
> >>>>>>>>>>>> 
> >>>>>>>>>>>> $ mpirun --hostfile ~/hosts --mca orte_tmpdir_base 
> >>>>>>>>>>>> /tmp/podman-mpirun podman run --env-host --security-opt 
> >>>>>>>>>>>> label=disable -v /tmp/podman-mpirun:/tmp/podman-mpirun 
> >>>>>>>>>>>> --userns=keep-id --net=host mpi-test /home/mpi/ring
> >>>>>>>>>>>> Rank 0 has cleared MPI_Init
> >>>>>>>>>>>> Rank 1 has cleared MPI_Init
> >>>>>>>>>>>> Rank 0 has completed ring
> >>>>>>>>>>>> Rank 0 has completed MPI_Barrier
> >>>>>>>>>>>> Rank 1 has completed ring
> >>>>>>>>>>>> Rank 1 has completed MPI_Barrier
> >>>>>>>>>>>> 
> >>>>>>>>>>>> This is example was using TCP and on an InfiniBand based system 
> >>>>>>>>>>>> I have
> >>>>>>>>>>>> to map the InfiniBand devices into the container.
> >>>>>>>>>>>> 
> >>>>>>>>>>>> $ mpirun --mca btl ^openib --hostfile ~/hosts --mca 
> >>>>>>>>>>>> orte_tmpdir_base /tmp/podman-mpirun podman run --env-host -v 
> >>>>>>>>>>>> /tmp/podman-mpirun:/tmp/podman-mpirun --security-opt 
> >>>>>>>>>>>> label=disable --userns=keep-id --device /dev/infiniband/uverbs0 
> >>>>>>>>>>>> --device /dev/infiniband/umad0 --device /dev/infiniband/rdma_cm 
> >>>>>>>>>>>> --net=host mpi-test /home/mpi/ring
> >>>>>>>>>>>> Rank 0 has cleared MPI_Init
> >>>>>>>>>>>> Rank 1 has cleared MPI_Init
> >>>>>>>>>>>> Rank 0 has completed ring
> >>>>>>>>>>>> Rank 0 has completed MPI_Barrier
> >>>>>>>>>>>> Rank 1 has completed ring
> >>>>>>>>>>>> Rank 1 has completed MPI_Barrier
> >>>>>>>>>>>> 
> >>>>>>>>>>>> This is all running without root and only using Podman's rootless
> >>>>>>>>>>>> support.
> >>>>>>>>>>>> 
> >>>>>>>>>>>> Running multiple processes on one system, however, still gives 
> >>>>>>>>>>>> me an
> >>>>>>>>>>>> error. If I disable vader I guess that Open MPI is using TCP for
> >>>>>>>>>>>> localhost communication and that works. But with vader it fails.
> >>>>>>>>>>>> 
> >>>>>>>>>>>> The first error message I get is a segfault:
> >>>>>>>>>>>> 
> >>>>>>>>>>>> [test1:00001] *** Process received signal ***
> >>>>>>>>>>>> [test1:00001] Signal: Segmentation fault (11)
> >>>>>>>>>>>> [test1:00001] Signal code: Address not mapped (1)
> >>>>>>>>>>>> [test1:00001] Failing at address: 0x7fb7b1552010
> >>>>>>>>>>>> [test1:00001] [ 0] 
> >>>>>>>>>>>> /lib64/libpthread.so.0(+0x12d80)[0x7f6299456d80]
> >>>>>>>>>>>> [test1:00001] [ 1] 
> >>>>>>>>>>>> /usr/lib64/openmpi/lib/openmpi/mca_btl_vader.so(mca_btl_vader_send+0x3db)[0x7f628b33ab0b]
> >>>>>>>>>>>> [test1:00001] [ 2] 
> >>>>>>>>>>>> /usr/lib64/openmpi/lib/openmpi/mca_pml_ob1.so(mca_pml_ob1_send_request_start_rdma+0x1fb)[0x7f62901d24bb]
> >>>>>>>>>>>> [test1:00001] [ 3] 
> >>>>>>>>>>>> /usr/lib64/openmpi/lib/openmpi/mca_pml_ob1.so(mca_pml_ob1_send+0xfd6)[0x7f62901be086]
> >>>>>>>>>>>> [test1:00001] [ 4] 
> >>>>>>>>>>>> /usr/lib64/openmpi/lib/libmpi.so.40(PMPI_Send+0x1bd)[0x7f62996f862d]
> >>>>>>>>>>>> [test1:00001] [ 5] /home/mpi/ring[0x400b76]
> >>>>>>>>>>>> [test1:00001] [ 6] 
> >>>>>>>>>>>> /lib64/libc.so.6(__libc_start_main+0xf3)[0x7f62990a3813]
> >>>>>>>>>>>> [test1:00001] [ 7] /home/mpi/ring[0x4008be]
> >>>>>>>>>>>> [test1:00001] *** End of error message ***
> >>>>>>>>>>>> 
> >>>>>>>>>>>> Guessing that vader uses shared memory this is expected to fail, 
> >>>>>>>>>>>> with
> >>>>>>>>>>>> all the namespace isolations in place. Maybe not with a 
> >>>>>>>>>>>> segfault, but
> >>>>>>>>>>>> each container has its own shared memory. So next step was to 
> >>>>>>>>>>>> use the
> >>>>>>>>>>>> host's ipc and pid namespace and mount /dev/shm:
> >>>>>>>>>>>> 
> >>>>>>>>>>>> '-v /dev/shm:/dev/shm --ipc=host --pid=host'
> >>>>>>>>>>>> 
> >>>>>>>>>>>> Which does not segfault, but still does not look correct:
> >>>>>>>>>>>> 
> >>>>>>>>>>>> Rank 0 has cleared MPI_Init
> >>>>>>>>>>>> Rank 1 has cleared MPI_Init
> >>>>>>>>>>>> Rank 2 has cleared MPI_Init
> >>>>>>>>>>>> [test1:17722] Read -1, expected 80000, errno = 1
> >>>>>>>>>>>> [test1:17722] Read -1, expected 80000, errno = 1
> >>>>>>>>>>>> [test1:17722] Read -1, expected 80000, errno = 1
> >>>>>>>>>>>> [test1:17722] Read -1, expected 80000, errno = 1
> >>>>>>>>>>>> [test1:17722] Read -1, expected 80000, errno = 1
> >>>>>>>>>>>> [test1:17722] Read -1, expected 80000, errno = 1
> >>>>>>>>>>>> [test1:17722] Read -1, expected 80000, errno = 1
> >>>>>>>>>>>> [test1:17722] Read -1, expected 80000, errno = 1
> >>>>>>>>>>>> [test1:17722] Read -1, expected 80000, errno = 1
> >>>>>>>>>>>> [test1:17722] Read -1, expected 80000, errno = 1
> >>>>>>>>>>>> [test1:17722] Read -1, expected 80000, errno = 1
> >>>>>>>>>>>> Rank 0 has completed ring
> >>>>>>>>>>>> Rank 2 has completed ring
> >>>>>>>>>>>> Rank 0 has completed MPI_Barrier
> >>>>>>>>>>>> Rank 1 has completed ring
> >>>>>>>>>>>> Rank 2 has completed MPI_Barrier
> >>>>>>>>>>>> Rank 1 has completed MPI_Barrier
> >>>>>>>>>>>> 
> >>>>>>>>>>>> This is using the Open MPI ring.c example with SIZE increased 
> >>>>>>>>>>>> from 20 to 20000.
> >>>>>>>>>>>> 
> >>>>>>>>>>>> Any recommendations what vader needs to communicate correctly?
> >>>>>>>>>>>> 
> >>>>>>>>>>>>    Adrian
> >>>>>>>>>>>> 
> >>>>>>>>>>>>> On Thu, Jul 11, 2019 at 12:07:35PM +0200, Adrian Reber via 
> >>>>>>>>>>>>> users wrote:
> >>>>>>>>>>>>> Gilles,
> >>>>>>>>>>>>> 
> >>>>>>>>>>>>> thanks for pointing out the environment variables. I quickly 
> >>>>>>>>>>>>> created a
> >>>>>>>>>>>>> wrapper which tells Podman to re-export all OMPI_ and PMIX_ 
> >>>>>>>>>>>>> variables
> >>>>>>>>>>>>> (grep "\(PMIX\|OMPI\)"). Now it works:
> >>>>>>>>>>>>> 
> >>>>>>>>>>>>> $ mpirun --hostfile ~/hosts ./wrapper -v /tmp:/tmp 
> >>>>>>>>>>>>> --userns=keep-id --net=host mpi-test /home/mpi/hello
> >>>>>>>>>>>>> 
> >>>>>>>>>>>>> Hello, world (2 procs total)
> >>>>>>>>>>>>> --> Process #   0 of   2 is alive. ->test1
> >>>>>>>>>>>>> --> Process #   1 of   2 is alive. ->test2
> >>>>>>>>>>>>> 
> >>>>>>>>>>>>> I need to tell Podman to mount /tmp from the host into the 
> >>>>>>>>>>>>> container, as
> >>>>>>>>>>>>> I am running rootless I also need to tell Podman to use the 
> >>>>>>>>>>>>> same user ID
> >>>>>>>>>>>>> in the container as outside (so that the Open MPI files in 
> >>>>>>>>>>>>> /tmp) can be
> >>>>>>>>>>>>> shared and I am also running without a network namespace.
> >>>>>>>>>>>>> 
> >>>>>>>>>>>>> So this is now with the full Podman provided isolation except 
> >>>>>>>>>>>>> the
> >>>>>>>>>>>>> network namespace. Thanks for you help!
> >>>>>>>>>>>>> 
> >>>>>>>>>>>>>    Adrian
> >>>>>>>>>>>>> 
> >>>>>>>>>>>>>> On Thu, Jul 11, 2019 at 04:47:21PM +0900, Gilles Gouaillardet 
> >>>>>>>>>>>>>> via users wrote:
> >>>>>>>>>>>>>> Adrian,
> >>>>>>>>>>>>>> 
> >>>>>>>>>>>>>> 
> >>>>>>>>>>>>>> the MPI application relies on some environment variables (they 
> >>>>>>>>>>>>>> typically
> >>>>>>>>>>>>>> start with OMPI_ and PMIX_).
> >>>>>>>>>>>>>> 
> >>>>>>>>>>>>>> The MPI application internally uses a PMIx client that must be 
> >>>>>>>>>>>>>> able to
> >>>>>>>>>>>>>> contact a PMIx server
> >>>>>>>>>>>>>> 
> >>>>>>>>>>>>>> (that is included in mpirun and the orted daemon(s) spawned on 
> >>>>>>>>>>>>>> the remote
> >>>>>>>>>>>>>> hosts).
> >>>>>>>>>>>>>> 
> >>>>>>>>>>>>>> located on the same host.
> >>>>>>>>>>>>>> 
> >>>>>>>>>>>>>> 
> >>>>>>>>>>>>>> If podman provides some isolation between the app inside the 
> >>>>>>>>>>>>>> container (e.g.
> >>>>>>>>>>>>>> /home/mpi/hello)
> >>>>>>>>>>>>>> 
> >>>>>>>>>>>>>> and the outside world (e.g. mpirun/orted), that won't be an 
> >>>>>>>>>>>>>> easy ride.
> >>>>>>>>>>>>>> 
> >>>>>>>>>>>>>> 
> >>>>>>>>>>>>>> Cheers,
> >>>>>>>>>>>>>> 
> >>>>>>>>>>>>>> 
> >>>>>>>>>>>>>> Gilles
> >>>>>>>>>>>>>> 
> >>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>> On 7/11/2019 4:35 PM, Adrian Reber via users wrote:
> >>>>>>>>>>>>>>> I did a quick test to see if I can use Podman in combination 
> >>>>>>>>>>>>>>> with Open
> >>>>>>>>>>>>>>> MPI:
> >>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>> [test@test1 ~]$ mpirun --hostfile ~/hosts podman run 
> >>>>>>>>>>>>>>> quay.io/adrianreber/mpi-test /home/mpi/hello
> >>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>> Hello, world (1 procs total)
> >>>>>>>>>>>>>>> --> Process #   0 of   1 is alive. ->789b8fb622ef
> >>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>> Hello, world (1 procs total)
> >>>>>>>>>>>>>>> --> Process #   0 of   1 is alive. ->749eb4e1c01a
> >>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>> The test program (hello) is taken from 
> >>>>>>>>>>>>>>> https://raw.githubusercontent.com/openhpc/ohpc/obs/OpenHPC_1.3.8_Factory/tests/mpi/hello.c
> >>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>> The problem with this is that each process thinks it is 
> >>>>>>>>>>>>>>> process 0 of 1
> >>>>>>>>>>>>>>> instead of
> >>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>> Hello, world (2 procs total)
> >>>>>>>>>>>>>>> --> Process #   1 of   2 is alive.  ->test1
> >>>>>>>>>>>>>>> --> Process #   0 of   2 is alive.  ->test2
> >>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>> My questions is how is the rank determined? What resources do 
> >>>>>>>>>>>>>>> I need to have
> >>>>>>>>>>>>>>> in my container to correctly determine the rank.
> >>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>> This is Podman 1.4.2 and Open MPI 4.0.1.
> >>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>>    Adrian
> >>>>>>>>>>>>>>> _______________________________________________
> >>>>>>>>>>>>>>> users mailing list
> >>>>>>>>>>>>>>> users@lists.open-mpi.org
> >>>>>>>>>>>>>>> https://lists.open-mpi.org/mailman/listinfo/users
> >>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>> _______________________________________________
> >>>>>>>>>>>>>> users mailing list
> >>>>>>>>>>>>>> users@lists.open-mpi.org
> >>>>>>>>>>>>>> https://lists.open-mpi.org/mailman/listinfo/users
> >>>>>>>>>>>>> _______________________________________________
> >>>>>>>>>>>>> users mailing list
> >>>>>>>>>>>>> users@lists.open-mpi.org
> >>>>>>>>>>>>> https://lists.open-mpi.org/mailman/listinfo/users
> >>>>>>>>>>>> _______________________________________________
> >>>>>>>>>>>> users mailing list
> >>>>>>>>>>>> users@lists.open-mpi.org
> >>>>>>>>>>>> https://lists.open-mpi.org/mailman/listinfo/users
> >>>>>>>>>>> _______________________________________________
> >>>>>>>>>>> users mailing list
> >>>>>>>>>>> users@lists.open-mpi.org
> >>>>>>>>>>> https://lists.open-mpi.org/mailman/listinfo/users
> >>>>>>>>>> _______________________________________________
> >>>>>>>>>> users mailing list
> >>>>>>>>>> users@lists.open-mpi.org
> >>>>>>>>>> https://lists.open-mpi.org/mailman/listinfo/users
> >>>>>>>>> _______________________________________________
> >>>>>>>>> users mailing list
> >>>>>>>>> users@lists.open-mpi.org
> >>>>>>>>> https://lists.open-mpi.org/mailman/listinfo/users
> >>>>>>>               Adrian
> >>>>>>> 
> >>>>>> _______________________________________________
> >>>>>> users mailing list
> >>>>>> users@lists.open-mpi.org
> >>>>>> https://lists.open-mpi.org/mailman/listinfo/users
> >>>>> 
> >>>>> 
> >>>>> _______________________________________________
> >>>>> users mailing list
> >>>>> users@lists.open-mpi.org
> >>>>> https://lists.open-mpi.org/mailman/listinfo/users
> > 
> > 
> > _______________________________________________
> > users mailing list
> > users@lists.open-mpi.org
> > https://lists.open-mpi.org/mailman/listinfo/users
_______________________________________________
users mailing list
users@lists.open-mpi.org
https://lists.open-mpi.org/mailman/listinfo/users

Reply via email to