Hi,
it's been some time since and I'd like to give an update on the issue.
Sorry for the long mail!
On Thu, Jul 22, 2010 at 08:34:54AM -0400, Jeff Squyres wrote:
> If anything moves on this front, let me know and I can create a mercurial
> branch out on bitbucket.org and add the relevant configury magic for the
> GCC intrinsics.
I investigated several solutions lately and I'd like to share my "results".
Please bear in mind that I am in no way in expert in this and I can try to
work on the issue but the more help I can get the better. I guess I can get
Open MPI to compile on all platforms but that does not neccessarily mean
that it works.
So, as a summary (I can give details if needed):
* Debian currently cares about 12 architectures officially, as well as
9 ports. Of those, Open MPI comiles on 8 and 3, respectively.[1] The
ones failing are armel, mips, mipsel, and s390. (For the ports: arm,
armhf, avr32, hppa, m68k, and sh4.)
* The parts can be ignored but of those at least hppa and m68k have a
userbase that seems to be interested in having Open MPI.
* I tried to build OpenPA on all architectures and ports. It compiled
and passed the test suite on 10 of them. I was not able to test mipsel
(no porterbox available) but mips is fine so I expect mipsel to be OK
too. I was not able to test on sparc (same reason) but it build on
sparc64. Unfortunately, the test suite failed. So all architectures we
care about can be build with a fallback to OpenPA, though it may not
produce anything that works. On hppa the test suite failed, and I was
not able to test m68k at all.
* OpenPA is not in Debian as a seperate package but as part of MPICH2. I
think we will split it out as a separate package so Open MPI could be
linked against it. MPICH2 builds on all of the official architectures,
so this in an indicator that OpenPA might be a suitable alternative.
* I also talked to the porters about the GCC intrinsics. The result was
that if the atomic operations are defined, they are implemented and
working. I did not check on which platforms this is the case but my
current understanding is that all of the official architectures have
them defined. I can test this at request, though I do not know how to
verify that they work correctly.[2]
* I had a look at libatomic-ops. It builds on all official architectures.
It fails on 3 ports, one being m68k.
* Atomic operations are also provided by glib. libglib2.0 builds on all
official architectures. It fails on 2 ports, one being m68k. I may
very well be that it does not provide all operations necessary, though.
My personal conclusion from this is:
* All choices (OpenPA, GCC intrinsics, libatomic-ops, glib) would enable
Open MPI to build on all official arches, as well as hppa. m68k does
not work with any of them but since it's a port only, I do not (and
don't have to) care about that.
* libatomic-ops and glib provide their own data types etc. This might
make integration harder.
* OpenPA seems a reasonable choice since it's used by MPICH2 and as far
as I know you already have good contact to the MPICH2 developers, so
everyone could benefit.
* GCC intrinsics are fine as well. My understanding is that the OpenPA
implementation might be faster.
That's about the status quo. Jeff, if you could create a branch to play
with I can do so. Not sure if I will succeed but I'll give it a shot. I
have not touched Mercurial for a while but I'll find my way. (I'm using
Git but DVCS are not that different after all.)
Please let me know which solution is the preffered by the developers. If
I can do more tests or provide additional information, feel free to ask!
Best regards,
Manuel
[1] Archticture that I was not able to test were counted as failing, but
this is only an issues for the ports. I have results for all official
architectures.
[2] If someone knows a simple test case that I could run, please point me
to it. Also, I'm not totally clear about which operations are currently
used in Open MPI.