我有一个代码,我在几个不同的集群上运行,它们都有不同的MPI和&组合。 LAPACK。
这可能会导致问题。例如,我目前使用ifort的“-i8”选项,它适用于LAPACK,但现在所有MPI调用都被破坏,因为它需要integer(4)
,而不是integer(8)
。
是否有一个优雅的&灵活的方式来适应基于本地MPI&的整数类型。 LAPACK安装?
对每个特定呼叫的类型进行硬编码似乎非常麻烦且不灵活。
答案 0 :(得分:6)
MPI调用不会指望INTEGER(4)
或INTEGER(8)
,他们只期望INTEGER
。而且,一如既往,请记住那些(4)
和(8)
实际意味着什么Fortran: integer*4 vs integer(4) vs integer(kind=4)
使用-i8
,您正在更改INTEGER
的含义,以及它对应的类型。您可以这样做,但您必须使用相同的设置编译MPI库。图书馆可能准备也可能不准备以这种方式编制,但理论上应该是可能的。
您也可以尝试将integer(int32)
而不是integer
传递给MPI。如果它是与MPI库的默认类型相对应的正确类型,则TKR检查并且所有其他检查应该通过OK。但不建议这样做。
要严格遵守Fortran标准,当您提升默认的整数类型时,您还应该提升默认的实数和逻辑类型。
要保持可移植性,请使用与您使用的库的API相对应的整数,并确保该库适用于该特定编译器以及该特定编译器配置。
通常,为了便携性,我们不应该依赖于推广默认类型,而应该在代码的特定部分使用适合特定目的的特定类型。