This is an old revision of the document!


Short answer: ensure you compile your program on the same CPU architecture as the compute node you will then run it on.

You may run across an error when you try to run an application that tells you the operating system or processor does not support certain instructions. This is often accompanied by a list of acronyms which correspond to the instructions. This is an example error message:

Please verify that both the operating system and the processor support Intel(R) X87, CMOV, MMX, FXSAVE, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, MOVBE, POPCNT, AVX, F16C, FMA, BMI, LZCNT, AVX2, AVX512F, AVX512DQ, ADX, AVX512CD, AVX512BW and AVX512VL instructions.

This happens because your program was compiled in a system that supports these instructions, but is running in a system that doesn't. Most likely you may have compiled your program on a different node than the one you are running your program from.

To get around this, you can make sure you compile your program in the same system that it will run. For example: if you need to run your program on one of the himem nodes, then you can submit a job that compiles your program, and subsequent jobs that then use the resulting executables to run your program. Alternatively, you can start an interactive session on a node with the target CPU architecture and compile your code interactively there. For example, assuming you want to compile your program for the himem nodes you could do srun –time=01:00:00 –partition=himem –pty /bin/bash. This will queue an interactive session lasting up to one hour on which you can compile your code.