术语“ 静态链接”和“ 动态链接”与并行计算没有直接关系,尽管一段时间以来人们已经知道,动态加载(而不是加载静态编译的可执行文件)在网络文件系统上由于负载繁重而无法很好地扩展由动态加载程序搜索目标库的加载路径导致的元数据加载。
关于静态或动态库在高性能计算中是否更好,很难一概而论。当然,对于大多数超级计算应用程序而言,静态链接更简单且更可取。为什么是这样?在当前的超级计算机上,每个节点通常只有一个作业正在运行,这大大降低了由于共享库而减少内存消耗的任何好处。此外,就语言功能或程序设计而言,科学计算代码往往不是很复杂,并且它们很少利用需要动态加载的语言功能(例如插件模块)。动态库还有一个额外的困难,那就是静态库在整个操作系统中的可移植性要差得多。
所有这些的结果是,大多数HPC系统在可用时使用静态编译。静态库被视为更快,更容易安装和维护,并且通常更健壮。基于Python的HPC代码是这种情况的例外之一,但是它们仍然受到与动态加载相关的性能问题的影响(scicomp上的多个用户现在实际上正在解决此问题!)。
在选择静态与动态链接时,需要考虑如何以及在何处部署代码,底层库是否可能更改或移动以及网络文件系统的性能特征。您还应该评估是否需要通过库依赖或与动态脚本语言(例如Python)进行互操作的动态链接。
单个动态库是英特尔特定的术语。它是指将其动态库打包到单个元库中,以简化链接过程。如果将动态链接与Intel库一起使用,则除非您要进行复杂的操作,否则最好采用这种形式。
-mkl
标志,该标志将消除大多数情况下使用链接行顾问程序的需要。