在 FORTRAN 中插入一个 NOP

Inserting a NOP in FORTRAN

C中,我会使用asm ("nop");插入内联NOP指令。但是,我找不到使用 FORTRAN.

的方法

有没有办法强制编译器发出 NOP?我用 gfortran.

这背后的原因是我的 MPI 程序在调用 MPI_Finalize 时出现段错误,而当我在 MPI_Finalize 之前插入 print *, ''sleep(1) 时却没有.为了进一步隔离此行为,我想在调用之前插入一个 NOP 并查看段错误是否仍然发生。

编辑: 我不确定为什么对这个问题有反对票和关闭请求。进一步搜索,这个问题类似于 Segmentation fault during MPI_FINALIZE() in Fortran

似乎 segfault 是由于我假设 MPI_Finalize(IERR) 中的 IERR 是一个可选参数。当我提供一个参数时,它不再崩溃了。

为了内联NOP,我写了一个C函数,用fortran中的BIND C做了一个接口

C函数

void noop(long n)
{
    while (--n > 0)
        __asm__("nop");
}

FORTRAN 接口

interface
    subroutine nop_inline(n) bind(c, name="noop")
        use ISO_C_BINDING, only: c_long
        implicit none
        integer (c_long), value :: n
    end subroutine nop_inline
end interface

仍然很奇怪 printfsleep 如何能够阻止 segfault 但调用 NOP 1E8 次却没有。

我很乐意接受对此行为的任何解释作为答案。