在Fortran

时间:2018-06-07 09:30:31

标签: fortran fortran90

我有一个代码,我在几个不同的集群上运行,它们都有不同的MPI和&组合。 LAPACK。

这可能会导致问题。例如,我目前使用ifort的“-i8”选项,它适用于LAPACK,但现在所有MPI调用都被破坏,因为它需要integer(4),而不是integer(8)

是否有一个优雅的&灵活的方式来适应基于本地MPI&的整数类型。 LAPACK安装?

对每个特定呼叫的类型进行硬编码似乎非常麻烦且不灵活。

1 个答案:

答案 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相对应的整数,并确保该库适用于该特定编译器以及该特定编译器配置。

通常,为了便携性,我们不应该依赖于推广默认类型,而应该在代码的特定部分使用适合特定目的的特定类型。