在 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
仍然很奇怪 printf
或 sleep
如何能够阻止 segfault
但调用 NOP
1E8
次却没有。
我很乐意接受对此行为的任何解释作为答案。
在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
仍然很奇怪 printf
或 sleep
如何能够阻止 segfault
但调用 NOP
1E8
次却没有。
我很乐意接受对此行为的任何解释作为答案。