【发布时间】:2012-11-16 15:35:36
【问题描述】:
在这里使用其他人的代码。它用 gfortran 编译得很好。但是,在 Portland Group 下,我收到一个错误:
pgf90 -DsysLinux -DcompPGF90 -I/home/cables/GITM/share/Library/src -c -r8 -fast ModUtilities.F90
PGF90-S-0084-Illegal use of symbol mpi_wtime - not public entity of module (ModUtilities.F90: 419)
0 inform, 0 warnings, 1 severes, 0 fatal for sleep
违规行如下所示:
use ModMpi, ONLY : MPI_wtime
(这里显然有很多 MPI 的东西,但我认为这不是重点。)所以我转到 ModMpi 的源代码,即 ModMpi.f90,我看不到任何参考MPI_WTIME,但我明白了:
use ModMpiInterfaces
所以最后,我去ModMpiInterface 的源代码,我找到了这条线:
public:: mpi_wtime
好的,我可以通过编辑 ModMpi.f90 并将 mpi_wtime 声明为公开来从 PGI 获得编译。但是,我仍然想知道:为什么 gfortran 假设(显然)mpi_wtime 是公开的,但 PGI 必须明确告知这一点?为什么 PGI 不假设原始公开声明在整个“使用链”中都成立?
我认为其中一种行为更接近 Fortran 标准。那会是哪个?
【问题讨论】: