At present Open MPI only supports ARMv7 processors.  Attached is a
patch against current trunk (r26270) that extends the atomic
operations and memory barriers code to work with ARMv5 and ARMv6 ones,
too.

For v6, the only changes were to use "mcr p15, 0, r0, c7, c10, 5"
instead of the unavailable DMB instruction, and to disable the 64 bit
compare-exchange function (which I understand is not vital for Open
MPI on 32 bit platforms?).  For v5, it was a bit trickier; the
processor lacks nice memory barrier instructions or proper atomic
operations.  Fortunately, the Linux kernel offers several helper
functions on ARM, and I've used those here.

The changes build and pass all of the assembly-related tests in the
test folder and the hello world examples run on my "armv5tel" box
running Debian with Linux 2.6.32-5.  It should also run fine on ARMv6
boxes, and presumably v4, but I don't have either to test on.

Documentation for the Linux kernel helper functions:
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=Documentation/arm/kernel_user_helpers.txt

I've sent in a contributor agreement so there should be no IP problems.

Hopefully this is useful,
Evan Clinton

Attachment: ompi_armv5.diff
Description: Binary data

Reply via email to