I'm currently trying to compile software for the use on a HPC-Cluster using Intel compilers. The login-node, which is where I compile and prepare the computations uses [Intel Xeon Gold 6148](https://ark.intel.com/content/www/us/en/ark/products/120489/intel-xeon-gold-6148-processor-27-5m-cache-2-40-ghz.html) Processors, while the compute nodes use either Haswell- ([Intel Xeon E5-2660 v3](https://ark.intel.com/content/www/de/de/ark/products/81706/intel-xeon-processor-e5-2660-v3-25m-cache-2-60-ghz.html) / [Intel Xeon Processor E5-2680 v3](https://ark.intel.com/content/www/us/en/ark/products/81908/intel-xeon-processor-e5-2680-v3-30m-cache-2-50-ghz.html)) or Skylake-processors ([Intel Xeon Gold 6138](https://www.intel.com/content/www/us/en/products/processors/xeon/scalable/gold-processors/gold-6138.html)).

As far as I understand from the links above, my login-node supports Intel SSE4.2, Intel AVX, Intel AVX2, as well as Intel AVX-512 but my compute nodes only support either Intel AVX2 (Haswell) or Intel AVX-512 (Skylake)

If I compile with the option `-xHost` on the login node, it should automatically use the highest instruction set available. But which one is the highest? And how can I ensure, that my program runs on both compute-systems with best performance? Do I have to compile two versions?
Bonus question: Which `-march` do I have to specify in this case?