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