We're installing EasyBuild 2.9.0 on our new cluster, and user application codes should be built on top of the latest foss-2016 toolchain.

Since our cluster has 4 different generations of Intel Xeon hardware (Nehalem, Sandy/Ivy Bridge, Haswell, Broadwell), users want to compile their application codes optimized for the compute node hardware (gcc -march=native).

Question: Is there a best practices method for providing EasyBuild modules which are compiled for different hardware architectures?

I can see some possible solutions:

1. Build totally separate and complete EB module trees for each of the architectures. Mount the correct EB module tree by NFS on the same mount point (/home/modules, say) on compute nodes based upon its architecture.

2. Within a single EB hierarchy, build multiple versions of just the application code modules requiring optimized code. This has the advantage of a shared module tree for all non-application-code modules. Users must then identify the compute node's architecture at run-time and load the correct module for that architecture (this sounds complicated for users).


Bonus question: What's the most portable, reliable and lightweight way to determine which Intel Xeon architecture you're working on? Googling the question suggests using /proc/cpuinfo:

# grep "model name" /proc/cpuinfo | head -1
model name      : Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz

but then you must parse this string to discover whether you're on Xeon, Xeon v2, v3, v4, or v5 (from next year).

Thanks for sharing your insights,
Ole

Reply via email to