Hi Ron, Excellent work! Indeed - simply dropping the DMBs can lead to memory consistency issues even on ARMv6.
The architectural semantics for memory barriers exist in ARMv6 though - they just weren't given dedicated mnemonics. What you could do is to simply replace the inline "dmb" sequences with inline cp15 operations: - "MCR p15, 0, r0, c7, c10, 5" (the 'r0' is an encoding artefact and doesn't affect the register contents) LDREXD/STREXD weren't part of the ARMv6 base architecture, although they are supported by the 1176 which is used in the Raspberry PI. If your tools support detecting/building for extension subarchitecture ARMv6k (supported by 1176), you can actually keep the 64-bit atomics in. Best Regards, Leif References: http://infocenter.arm.com/help/topic/com.arm.doc.ddi0301h/Babfdddg.html http://infocenter.arm.com/help/topic/com.arm.doc.ddi0301h/Babhejba.html > -----Original Message----- > From: Jeffrey Squyres [mailto:jsquy...@cisco.com] > Sent: 28 February 2012 12:30 > To: Ron Broberg; Open MPI Developers > Cc: Leif Lindholm > Subject: Re: [OMPI devel] Compiling OpenMPI 1.5.4 on Debian 6 qemu > arm6l > > Ron -- Many thanks! > > Leif -- can you comment on this? (yes, I'm passing the buck to our ARM > Open MPI representative :-) ) > > > On Feb 26, 2012, at 1:22 PM, Ron Broberg wrote: > > > I would like to report the following information regarding compiling > OpenMPI on Debian ARMv6. I won't submit this as a patch because I don't > believe that "delete all 'dmb' instructions" can be considered a well > developed patch. But this information may be of use to someone down the > line. > > > > I was able to compile the upstream openmpi-1.5.4 distribution on a > Debian6 armv6l qemu emulation. > > http://www.open-mpi.org/software/ompi/v1.4/downloads/openmpi- > 1.4.5.tar.bz2 > > > > > > You have to make 3 changes to the package > > 1) Delete all references to the RISC instruction 'dmb' > > 2) Modify the 'configure' file to include an 'armv6' option > > 3) Compile with CFLAGS=-march=armv6 > > > > ## 1) make the following edits to these three files > > ./opal/asm/generated/atomic-local.s > > delete all dmb instructions > > ./opal/asm/base/ARM.asm > > delete all dmb instructions > > ./opal/include/opal/sys/arm/atomic.h > > change the lines: > > #if OPAL_WANT_SMP_LOCKS > > #define MB() __asm__ __volatile__ ("dmb" : : : "memory") > > #define RMB() __asm__ __volatile__ ("dmb" : : : "memory") > > #define WMB() __asm__ __volatile__ ("dmb" : : : "memory") > > #else > > #define MB() > > #define RMB() > > #define WMB() > > #endif > > > > to read: > > #define MB() > > #define RMB() > > #define WMB() > > > > ## 2) add the following to the 'configure' file at line 26946 of > 171183 > > goto line 26946, there should be an 'alpha-' section above and an > 'armv7' below > > insert the following > > armv6*) > > ompi_cv_asm_arch="ARM" > > OPAL_ASM_SUPPORT_64BIT=0 > > OMPI_GCC_INLINE_ASSIGN='"mov %0, #0" : "=&r"(ret)' > > ;; > > > > ## 3) compile and install with the following CFLAGS > > CFLAGS=-march=armv6 > > ./configure CFLAGS=-march=armv6 > > make > > sudo make install > > > > more information about my build at > > http://rhinohide.wordpress.com/2012/02/26/openmpi-on-raspberry-pi/ > > > > > > _______________________________________________ > > devel mailing list > > de...@open-mpi.org > > http://www.open-mpi.org/mailman/listinfo.cgi/devel > > > -- > Jeff Squyres > jsquy...@cisco.com > For corporate legal information go to: > http://www.cisco.com/web/about/doing_business/legal/cri/ > -- IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.