我目前正在尝试使用英特尔编译器编译用于 HPC 集群的软件。登录节点是我编译和准备计算的地方英特尔至强金牌 6148 https://ark.intel.com/content/www/us/en/ark/products/120489/intel-xeon-gold-6148-processor-27-5m-cache-2-40-ghz.html处理器,而计算节点使用 Haswell-(英特尔至强 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 / 英特尔至强处理器 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)或 Skylake 处理器(英特尔至强金牌 6138 https://www.intel.com/content/www/us/en/products/processors/xeon/scalable/gold-processors/gold-6138.html).
据我从上面的链接了解,我的登录节点支持 Intel SSE4.2、Intel AVX、Intel AVX2 以及 Intel AVX-512,但我的计算节点仅支持 Intel AVX2 (Haswell) 或 Intel AVX-512 (天湖)
如果我使用选项编译-xHost
在登录节点上,它应该自动使用可用的最高指令集。但哪一个是最高的呢?我如何确保我的程序在两个计算系统上以最佳性能运行?我必须编译两个版本吗?
额外问题:哪个-march
在这种情况下我必须指定吗?
由于您使用的是英特尔编译器,因此您可以使用它的“自动处理器调度”能力,以便创造泛称“胖子”二进制文件,其中包含 SSE 兼容、AVX 兼容等版本。因此,当您在仅支持 SSE 的计算机上运行“胖”二进制文件时,只会执行二进制文件的 SSE 优化部分(代码路径)。当您在 AVX 机器上运行相同的“胖”二进制文件时,将执行二进制文件的 AVX 优化部分。这是一个非常强大但不太为人所知的功能。
您可以使用以下组合来启用它-ax and -x英特尔编译器编译标志。
这个想法基本上是通过 -ax 指定最高 ISA,并通过 -x 指定默认/“最低”ISA。
给定“-ax”脂肪二进制文件技术的简要描述位于https://www.chpc.utah.edu/documentation/software/single-executable.php#submit https://www.chpc.utah.edu/documentation/software/single-executable.php#submit
更多细节可以在给定的精美箔纸甲板的第 9 页找到:https://www.alcf.anl.gov/files/ken_intel_compiler_optimization.pdf https://www.alcf.anl.gov/files/ken_intel_compiler_optimization.pdf
最后,我应该提到,在您的描述中,您稍微混淆了 ISA 关系。采用 AVX512 的 Intel x86 处理器 - 将始终支持 AVX2。 AVX2 机器将始终支持 SSE。这超级简单化解释:AVX512 是 AVX/AVX2 的超集,而 AVX/AVX2 可以被视为 SSE 的超集(事实上并非如此,但 SSE 始终在 AVX 机器上可用,但反之则不然) 。
不管你提到的Haswell(AVX2机器,所以SSE都在船上,但这里自然没有AVX512)和Skylake(AVX512机器,所以AVX2和SSE都在船上)是什么情况。因此,您可能需要类似 -axCORE-AVX512 -xCORE-AVX2 (在您的列表中没有低于 AVX2 的机器 - 即没有 SSE 或 AVX(1) 机器)。您似乎只有 Skylake 服务器和 Haswell 服务器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)