重新编译编译器对编译后的代码有影响吗?

问题描述 投票:0回答:2

我必须在集群服务器上安装一些软件(gromacs模拟包),而无需root访问,可以通过slurm在该服务器上发送作业。我只能直接访问前端机器,并且主目录在所有服务器和前端之间共享。我必须在本地手动构建和安装:

  • 海湾合作委员会4.8
  • automake、autoconf、cmake
  • openmpi
  • lapack 库
  • gromacs

现在,我只在前端安装了所有这些,这是一台较旧的英特尔至强机器。生产服务器配备了新的 AMD 处理器。这是我的问题:为了实现最佳性能,上述堆栈的哪些部分应该在生产服务器上重新编译?我想重建最终的软件(gromacs)也许还有 lapack 库会很有意义,因为指令集和处理器架构不同,但我不确定重建编译器或其他编译器是否有意义。系统的一部分。因此,问题是:使用在不同机器上构建的编译器(以及相关的库)是否会导致生成的二进制文件的执行时间更长? 一般来说,如果给出相同的输出,我希望编译器生成相同的二进制文件,所以答案是否定的;但是那些与另一台机器上的编译器一起编译的库(如 libstdc++)呢?

linux gcc
2个回答
2
投票

为了优化gromacs(并行分子动力学代码),你可以忘记重新编译编译器或编译工具:那是没用的。

您应该继续检查优化。对于 Intel CPU,使用 Intel C 编译器会有所不同。您也可能会观察到 AMD 带来的一些收益。

另一种选择是使用 Portland Group 编译器

关于 MPI,您需要确保它是针对您的互连进行定制的(例如,如果您有 infiniband,请避免使用 TCP 标准版本)。

关于 lapack 库,您需要安装优化的 lapack(ACML 适用于 AMD,MKL 适用于 Intel。您可以使用具有非常好的性能的 GOTO 或 ATLAS blas - 它们包含在许多 Linux 发行版中)。

您没有提到FFT:它们确实对于模拟中的电磁学(埃瓦尔德求和)很重要:这里的FFTW是一个不错的选择。您需要为处理器安装正确的版本或在目标处理器上编译它,因为它在编译过程中执行某种“自动调整”。

低于此范围(工具、编译器)对生成的可执行文件没有任何影响。


2
投票

构建 GCC 编译器已经涉及四阶段引导过程,其目的之一是通过确保最后两个阶段产生相同的输出来对编译器进行质量检查。所以没有理由相信第五阶段会产生任何效果。

© www.soinside.com 2019 - 2024. All rights reserved.