Hi Paul! On 06/05/16 11:53, Paul McIntosh wrote:
> So I am guessing that things like freetype are built to support multiple > architectures and contain opcodes that never get hit. This is probably quite likely, so I'm afraid I suspect you'll run into a sort of halting problem with this where the only way to know whether it will work will be to run it. Certainly Intel compilers seem to incorporate code to detect whether the current architecture matches what it was compiled for. For example compiling on Haswell with -xHOST and running on Nehalem provokes: [samuel@merri-m cpu]$ ./cpu Please verify that both the operating system and the processor support Intel(R) MOVBE, F16C, AVX, FMA, BMI, LZCNT and AVX2 instructions. Intel explains it thus: https://software.intel.com/en-us/articles/how-to-detect-new-instruction-support-in-the-4th-generation-intel-core-processor-family # In order to correctly use the new instructions and avoid # runtime crashes, applications must properly detect hardware # support for the new instructions using CPUID checks. It is # important to understand that a new instruction is supported # on a particular processor only if the corresponding CPUID # feature flag is set. Applications must not assume support # of any instruction set extension simply based on, for example, # checking a CPU model or family and must instead always check # for _all_ the feature CPUID bits of the instructions being # used. [...] # Below is the complete list of CPUID flags that generally must # be checked: # # CPUID.(EAX=01H, ECX=0H):ECX.FMA[bit 12]==1 && # CPUID.(EAX=07H, ECX=0H):EBX.AVX2[bit 5]==1 && # CPUID.(EAX=07H, ECX=0H):EBX.BMI1[bit 3]==1 && # CPUID.(EAX=07H, ECX=0H):EBX.BMI2[bit 8]==1 && # CPUID.(EAX=80000001H):ECX.LZCNT[bit 5]==1 && # CPUID.(EAX=01H, ECX=0H):ECX.MOVBE[bit 22]==1 That'll be just half the problem though, it tells you what the architecture provides but not what the program requires. :-( I suspect the simplest way to do that might be to have a Slurm partition per hardware architecture and then (based on the module loaded) set the SBATCH_PARTITION variable to direct things appropriately (be nicer to use the Slurm constraint mechanism but that doesn't appear to be available via environment variables). That may solve the issue for things you've built, but I don't see a solution for user code other than education. :-/ Best of luck! Chris -- Christopher Samuel Senior Systems Administrator VLSCI - Victorian Life Sciences Computation Initiative Email: sam...@unimelb.edu.au Phone: +61 (0)3 903 55545 http://www.vlsci.org.au/ http://twitter.com/vlsci _______________________________________________ Beowulf mailing list, Beowulf@beowulf.org sponsored by Penguin Computing To change your subscription (digest mode or unsubscribe) visit http://www.beowulf.org/mailman/listinfo/beowulf