Illegal Instruction

When running cardiacmodelling/ap-nimbus-app-manager, cardiacmodelling/appredict-with-emulators or cardiacmodelling/appredict-no-emulators there is a possibility that ApPredict will fail to run with the message indicating “illegal instruction”, e.g. “PETSC ERROR: Caught signal number 4 Illegal instruction: Likely due to memory corruption”.

This was encountered in early builds (i.e. builds before May 2020, or more specifically, since commit e560e78), due to the use of the ApPredict build flag b=GccOptNative, rather than b=GccOpt. The outcome of which was that when the container (and therefore ApPredict) was being built, at compile time it was picking up the server’s native cpu flags but in some cases these were unlikely to be found in the container’s deployment environment (e.g. sse4_1 and sse4_2 – use cat /proc/cpuinfo for examples).