重新编译编译器是否会对编译的代码产生影响?

时间:2014-04-02 08:43:26

标签: linux gcc compiler-construction system-administration

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

  • gcc 4.8
  • automake,autoconf,cmake
  • 的openmpi
  • lapack libs
  • GROMACS

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

谢谢

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

你应该追求并检查优化。对于使用英特尔C编译器的英特尔CPU有所作为。您也可以通过AMD观察到一些收益。

另一种方法是使用Portland Group compiler

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

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

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

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