Fortran编写程序运行计时器

runtime

很多编程用的IDE在调试时,当程序结束时会有类似[Finished in 0.012s]字样来统计程序运行总时长,在有些情况我们需要用到这样一个小功能,在此我将用Fortran实现这样一个小程序。

功能分析

  • runtime后的命令行整体作为目标命令在框架内执行。
  • 在执行目标命令前后获取系统时间(精确到毫秒)相减得到目标命令运行时长。

代码实现

  1. 命令行处理
character(len=1024) :: cmd_line
character(len=64) :: args(16)
integer :: i, narg, time(0:1)
narg = iargc()
do i = 1, narg
    call getarg(i,args(i))
end do
write(cmd_line,"(TR1,16A)") args(1:narg) ! 由输入参数拼接出目标指令
  1. 执行命令行前后获取系统时间
call system_clock(time(0))
call system(cmd_line)
call system_clock(time(1))
  1. 计算并输出时长信息
write(*,"('[Finished in ',(F0.3),'s]')") real(time(1)-time(0))/1000
  • 完整代码
program main
    ! 
    ! Execute program and count it's running time.
    ! 
    ! Usage: runtime [command]
    ! 
    ! Author: ph
    ! Email: huipan.hnu@qq.com
    ! Date: 2017.08.14
    ! 
    implicit none
    character(len=1024) :: cmd_line ! 规定了命令行最大长度
    character(len=64) :: args(16) ! 规定了每个参数的最大长度
    integer :: i, narg, time(0:1)
    narg = iargc()
    do i = 1, narg
        call getarg(i,args(i))
    end do
    write(cmd_line,"(TR1,16A)") args(1:narg)
    call system_clock(time(0))
    call system(cmd_line)
    call system_clock(time(1))
    write(*,"('[Finished in ',(F0.3),'s]')") real(time(1)-time(0))/1000
end program main
  • 编译执行
    gfortran runtime.f90 -o runtime
    ./runtime xxx

知识要点

  1. 命令行处理
    • iargc()获取参数个数。
    • call getarg(i, arg)获取第i个参数。
  2. 字符串处理
    • write(str_variable, format) variables将变量列表variables按照指定格式format输入到字符串变量str_variable中。
    • write(unit, fmt)的格式化输出。
  3. 获取系统日期和时间
    • call system_clock(count [, count_rate] [, count_max])从系统时钟获取当前时间,count为整型变量,存储当天时间到毫秒。如果要计算长时间运行的程序时间,则需要添加count_max参数来增大统计上限或者改用data_and_time

结语

这只是统计运行时间的一种简单实现方法,但可以满足我的需求,更优的方法还有待摸索!

参考资料

[1] 彭国伦.《Fortran95程序设计》.北京:中国电力出版社,2002.06.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,993评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,779评论 18 399
  • 2016年国庆假期终于把此书过完,整理笔记和体会于此。 关于书名 书名源于俄罗斯的演员斯坦尼斯拉夫斯基创作的《演员...
    李剑飞的简书阅读 7,310评论 2 65
  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 4,782评论 0 11
  • 你惟一能表达清楚的要求,就是想来到外边,来到风中,来到光中。 阳光会把你枯皱的脸变成金黄,春风会撩起你干枯灰白的稀...
    鹿缤纷阅读 240评论 0 0