MPI 是否应该使用与应用程序相同的编译器套件构建
Should MPI be built with the same compiler suite as the application
我正在开发用于科学计算的 MPI 应用程序。我正在研究我们的分发过程,它提出了 MPI 版本的问题。
我在网上的一些地方读到 MPI 应该使用与应用程序相同的编译器套件构建,但没有真正解释原因。
所以我想知道 MPI 的版本在编译后是什么定义的?只是源码包的版本,还是源码包的版本加上编译器套件及其已经编译过MPI的版本?
MPI植入的版本是绝对必须的。一个典型的例子是版本之间发生变化的类型。
您还应该使用相同的编译器版本编译所有涉及的库——尤其是 MPI。一个典型的例子是特定于编译器的库。一个编译器用内置的优化版本替换了对 memcpy
的调用。如果您尝试 link 使用不同的编译器,但它的库中没有提供优化的函数,您会收到 linker 错误。系统库通常很好,但对于高度优化的构建和 C++ 代码,这类库 ABI(应用程序二进制接口)不兼容很常见并且非常痛苦。
我正在开发用于科学计算的 MPI 应用程序。我正在研究我们的分发过程,它提出了 MPI 版本的问题。
我在网上的一些地方读到 MPI 应该使用与应用程序相同的编译器套件构建,但没有真正解释原因。
所以我想知道 MPI 的版本在编译后是什么定义的?只是源码包的版本,还是源码包的版本加上编译器套件及其已经编译过MPI的版本?
MPI植入的版本是绝对必须的。一个典型的例子是版本之间发生变化的类型。
您还应该使用相同的编译器版本编译所有涉及的库——尤其是 MPI。一个典型的例子是特定于编译器的库。一个编译器用内置的优化版本替换了对 memcpy
的调用。如果您尝试 link 使用不同的编译器,但它的库中没有提供优化的函数,您会收到 linker 错误。系统库通常很好,但对于高度优化的构建和 C++ 代码,这类库 ABI(应用程序二进制接口)不兼容很常见并且非常痛苦。