Eugene Loh wrote:
Put more strongly, the "correct" (subjective term) way for an MPI
implementation to bind processes is upon process creation and waiting
until MPI_Init is "wrong". This point of view has nothing to do with
asking the MPI implementation to support binding of non-MPI processes.
I wanted to clarify my comment. That notion of correct/wrong here is,
as I indicated, quite subjective. It reflects a particular point of
view (the challenge of getting local memory on a NUMA node). There is
no "standard" to tell us what is right or wrong here. An equally valid
point of view is that users should not expect any MPI support (including
for something as nonstandard as process binding) until MPI_Init has been
called. I was just trying to help Geoffroy make a case here: why we
might want to bind processes even if they don't call -- er, haven't yet
called :^) -- MPI_Init.
I've used another hack when using an MPI implementation whose binding
support either doesn't exist or I don't know how to use it or I don't
trust it. Instead of launching the executables, I launch a process that
looks like this (I'm typing this from memory, probably full of typos and
not guaranteed to work):
#!/bin/csh
set CPULIST = ( 47 23 19 8 43 12 )
@ me = $OMPI_COMM_WORLD_RANK + 1
pbind -b $CPULIST[$me] $$
./a.out
I hope you get the idea. Anyhow, it's a wrapper script that binds the
process before launching the MPI executable.
Mainly, just wanted to clarify that I wasn't saying unequivocally what
was right/wrong here. Only expressing one point of view to help
represent Geoffroy's case.