gpt4 book ai didi

time - 在 Fortran 中实现 get_walltime

转载 作者:行者123 更新时间:2023-12-01 23:27:36 37 4
gpt4 key购买 nike

我正在根据 this 中的第一个练习编写 Fortran 程序书(第 34 页)。本书旨在介绍高性能计算。第一个练习要求用户编写代码来估计 pi。根据作者提供的内容,我成功地完成了这项工作。

program compute_pi
double precision :: x, delta_x, sum
!double precision :: S,E,MFLOPS
integer, parameter :: SLICES=10000000
sum = 0.d0 ; delta_x = 1.d0/SLICES
!call get_walltime(S)
do i=0,SLICES-1
x = (i+0.5)*delta_x
sum = sum + 4.d0 / (1.d0 + x*x)
enddo
pi = sum*delta_x
print *, pi
!call get_walltime(E)
!MFLOPS = R*N*2.d0/((E-S)*1.d6)
end program compute_pi

接下来,我尝试计算 MFlops/sec 的性能。为了做到这一点,我按照作者在第 5 页的例子写了

program compute_pi
double precision :: x, delta_x, sum
double precision :: S,E,MFLOPS
integer, parameter :: SLICES=10000000
sum = 0.d0 ; delta_x = 1.d0/SLICES
call get_walltime(S)
do i=0,SLICES-1
x = (i+0.5)*delta_x
sum = sum + 4.d0 / (1.d0 + x*x)
enddo
pi = sum*delta_x
print *, pi
call get_walltime(E)
MFLOPS = R*N*2.d0/((E-S)*1.d6)
end program compute_pi

当我在 Netbeans(我用于 Fortran 的 IDE)中运行上面的代码时,它返回

undefined reference to `get_walltime_'

我不确定为什么引用未定义。

最佳答案

这是 get_walltime 的纯 Fortran 实现(仅经过编译测试):

subroutine get_walltime(wctime)
use iso_fortran_env, only: int64
implicit none
integer, parameter :: dp = kind(1.0d0)
real(dp) :: wctime
integer(int64) :: r, c
call system_clock(c, r)
wctime = real(c, dp) / r
end subroutine get_walltime

更好的是,将其放入模块中以免费进行接口(interface)检查。或者甚至更好,直接调用 system_clock。

关于time - 在 Fortran 中实现 get_walltime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53971752/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com