【问题标题】:Does recompiling a compiler has effects on the compiled code?重新编译编译器会对编译后的代码产生影响吗?
【发布时间】:2014-04-02 08:43:26
【问题描述】:

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

  • GCC 4.8
  • automake、autoconf、cmake
  • openmpi
  • lapack 库
  • gromacs

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

谢谢

【问题讨论】:

    标签: linux gcc compiler-construction system-administration


    【解决方案1】:

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

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

    另一种选择是使用Portland Group compiler。

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

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

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

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

    【讨论】:

    • 谢谢!来自专家用户的出色听力反馈。我通常让 gromacs 构建自己的 FFTW,并假设它知道自己在做什么(或者更好的是,gromacs 的作者会这样做:))。我曾考虑过英特尔编译器,但在 gromacs 安装说明中,他们声称使用最新的 AMD 处理器 gcc 应该更快。不过,我可以试一试。我也会考虑安装专门的 lapack 库。
    • 那是我不记得了! (关于 fftw - 上次我这样做是在前一段时间)。在这种情况下,您应该在目标机器上自行执行 Gromacs 编译 - 在队列系统中发送的批处理脚本中(或要求系统执行此操作....我知道我知道 - 我是 HPC 用户支持专家)
    • 是的,感谢我们使用交互式外壳。 fftw 自动构建功能相对较新(gromacs 4.6 及更高版本),而且非常方便。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-12
      • 1970-01-01
      • 2023-02-07
      • 2012-04-28
      • 1970-01-01
      • 2011-09-30
      相关资源
      最近更新 更多