+-----------------------------------------------------------------------
| Customizing openmpi execution on OpenBSD
+-----------------------------------------------------------------------

The OpenMPI runtime is controlled by numerous values specified
on the command line or with environment variables. See mpirun(1) and
ompi_info(1).  Example**:

    $ export PMIX_MCA_gds=hash
    $ mpirun -np 2 -H localhost:2 \
             -mca btl tcp,self \
             -mca mpi_yield_when_idle 1 -- \
             ./mpitest

These values (at least) are useful:

   OMPI_MCA_btl=self,tcp,vader
      Avoid "vader" when launching many processes per node
      and you have an NFS swap file.  Or use local backing store.
      (BTL is byte transfer layer.  "vader" is shared memory
      communication module.)

   OMPI_MCA_mpi_yield_when_idle=1
      Set to 1 may improve throughput when launching many
      processes per node.

   PMIX_MCA_gds=hash
      This is the one gds (general data service) that works on OpenBSD.

   OMPI_MCA_io=romio321
      This is the prefered IO component on OpenBSD.

**Example code taken from:
https://hpcc.usc.edu/support/documentation/examples-of-mpi-programs/
(now only available via waybackmachine)

Compile with:

	$ mpicc -o mpitest mpitest.c

/* Adapted from mpihello.f by drs */

#include <mpi.h>
#include <stdio.h>
#include <unistd.h>

int main(int argc, char **argv)
{
	int rank;
	char hostname[256];

	MPI_Init(&argc, &argv);
	MPI_Comm_rank(MPI_COMM_WORLD, &rank);
	gethostname(hostname, 255);

	printf("Hello world!  I am process number: %d on host %s\n",
		rank, hostname);

	MPI_Finalize();

	return 0;
}
