【发布时间】:2017-06-11 04:33:37
【问题描述】:
在C 中,我将使用asm ("nop"); 插入内联NOP 指令。但是,我找不到使用FORTRAN 的方法。
有没有办法强制编译器发出NOP?我使用 gfortran。
这背后的原因是我的 MPI 程序在调用 MPI_Finalize 时会出现段错误,而当我在 MPI_Finalize 之前插入 print *, '' 或 sleep(1) 时不会。为了进一步隔离这种行为,我想在调用之前插入一个NOP,看看是否仍然发生段错误。
编辑:我不知道为什么这个问题会有反对票和关闭请求。进一步搜索,这个问题类似于Segmentation fault during MPI_FINALIZE() in Fortran
【问题讨论】:
-
您是否尝试过在所有运行时检查打开的情况下编译和运行,即 -fcheck=all?您可能也需要 -g 。您描述的行为通常是由于您写入了一些您不应该写入的内存,并且检查可能会帮助您找到这种情况 - 尽管在 MPI 代码中不能保证。
-
@IanBush 我默认使用 -fcheck=all 和 -ggdb 。编译很干净。
-
是的,我应该这样做。但是,我还是不明白
sleep或print是如何完全避免segfault 的。 -
它可以修复它,因为它改变了程序在内存中的布局,从而阻止你丢弃立即导致错误的东西,而是可能产生一些更微妙和阴险的效果.
标签: assembly fortran gfortran fortran90 inline-assembly