Hi Michael,

On 2023-11-24 09:30, Andrius Merkys wrote:
On 2023-11-23 19:25, Michael R. Crusoe wrote:
It won't fix the FTBFS on armel / armhf; that's due to them being detected as arm64 and inappropriate NEON intrinsics being used

Thanks for spotting this, I will give it a look, although I understand very little about vectorization.

I successfully patched the build on armel by leaving NEON vectorization for arm64 only:

--- a/libraries/vecmath/src/vecmath.cpp
+++ b/libraries/vecmath/src/vecmath.cpp
@@ -1,4 +1,4 @@
-#if defined(__ARM__) || defined(__ARM64__)
+#if defined(__ARM64__)
     #include "neon_mathfun.h"
 #else
     #if !defined(__PNACL__)
--- a/openmmapi/include/openmm/internal/vectorize.h
+++ b/openmmapi/include/openmm/internal/vectorize.h
@@ -32,7 +32,7 @@
* USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */

-#if defined(__ARM__) || defined(__ARM64__)
+#if defined(__ARM64__)
     #include "vectorize_neon.h"
 #elif defined(__PPC__)
     #include "vectorize_ppc.h"

Build on armel succeeded, however, some tests segfault:

The following tests FAILED:
         10 - TestReferenceCustomCentroidBondForce (SEGFAULT)
         11 - TestReferenceCustomCompoundBondForce (SEGFAULT)
         12 - TestReferenceCustomExternalForce (SEGFAULT)
         13 - TestReferenceCustomGBForce (SEGFAULT)
         15 - TestReferenceCustomIntegrator (SEGFAULT)
         16 - TestReferenceCustomManyParticleForce (SEGFAULT)
         17 - TestReferenceCustomNonbondedForce (Subprocess aborted)
         18 - TestReferenceCustomTorsionForce (SEGFAULT)
         69 - TestReferenceRpmd (Timeout)
        110 - TestParser (SEGFAULT)

I gave TestParser a look with gdb:

(gdb) run
Starting program: /home/merkys/openmm-8.0.0+dfsg/obj-arm-linux-gnueabi/TestParser
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/arm-linux-gnueabi/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
Lepton::CompiledExpression::generateTwoArgCall (this=this@entry=0xbefff004, c=..., dest=..., arg1=..., arg2=..., function=<optimized out>) at ./libraries/lepton/src/CompiledExpression.cpp:511
511         invoke->setArg(0, arg1);
(gdb) print arg1
$1 = (asmjit::_abi_1_9::arm::Vec &) @0x4186f8: {<asmjit::_abi_1_9::arm::Reg> = {<asmjit::_abi_1_9::BaseReg> = {<asmjit::_abi_1_9::Operand> = {<asmjit::_abi_1_9::Operand_> = {_signature = {_bits = 0}, _baseId = 0, _data = {0, 0}}, <No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}

My wild guess is that asmjit is incompatible with armel/armhf as in standalone asmjit (see #1049872). Building openmm without asmjit support seems possible, I will try that.

Best,
Andrius

Reply via email to