下面对Fortran中的几种调用时间的子程序(CPU_TIME,SYSTEM_CLOCK,DATA_AND_TIME,DATA_AND_TIME)进行对比研究。


CPU_TIME——Returns a REAL value representing the elapsed CPU time in seconds. (详细信息见 https://gcc.gnu.org/onlinedocs/gfortran/CPU_005fTIME.html)

语法: CALL CPU_TIME(TIME)。TIME的类型是实数型。


SYSTEM_CLOCK——(详细信息见 https://gcc.gnu.org/onlinedocs/gfortran/SYSTEM_005fCLOCK.html)

语法: CALL SYSTEM_CLOCK([COUNT, COUNT_RATE, COUNT_MAX])。COUNT,COUNT_RATE和COUNT_MAX是整数类型。当参数count的kind不同时,count的单位也会不一样。count是INTEGER(4)类型的话,返回的时间是毫秒,count的类型是INTEGER(8)类型,那么返回的时间是纳秒。所以在计算时间的时候为了得到时间的单位为秒,需要使用COUNT/COUNT_RATE。


DATA_AND_TIME————(详细信息见https://gcc.gnu.org/onlinedocs/gfortran/ITIME.html)


语法: DATE_AND_TIME(DATE, TIME, ZONE, VALUES)。DATA,TIME,ZONE是可选参数。在计算程序的运行时间上使用VALUES就足够了。 VALUES的类型是一维整型数组(8个元素)。

VAUES(1)得到的是年;VAUES(2)得到的是月;VAUES(3)得到的是月中的第几天;VAUES(4)得到的值的是分钟——Time difference with UTC in minutes;VAUES(5)得到的是一天中的几点(只包含小时不包括分钟,秒等等);VAUES(6)得到的是一小时中的多少分钟;VAUES(7)得到的是一分钟的多少秒;VAUES(8)得到的是一秒中的多少毫秒。




ITIME——详细信息见https://gcc.gnu.org/onlinedocs/gfortran/ITIME.html

语法: CALL ITIME(TIME)。TIME的类型是有3个元素的整型一维数组。TIME(1)得到的是一天中的小时(范围是1-24);TIME(2)得到的是一小时中的分钟(范围是1-60);TIME(3)得到的是一分钟的多少秒(范围是1-60)。


下面是调用了这四个时间函数的例子:

Fortran中的time子程序比较

对上面的程序进行编译得到的结果如下:

 cpu_time is   5.32920074    s
 itime is           6 s
 SYSTEM_CLOCK time is   5.33099985     s
 date_and_time time is   5.33099985     s

小结:

1. cpu_time子程序得到的是cpu运行的时间。对于串行计算,cpu计算时间与真是时间差别并不是很大,但是对于并行计算并不推荐使用(https://stackoverflow.com/questions/6878246/fortran-intrinsic-timing-routines-which-is-better-cpu-time-or-system-clock)

2. itime,system_clock和data_and_time计算的都是真实时间,itime的最小计算单位是秒,最大计算单位是小时。也就是说itime有效的计算时间是24个小时,如果计算的时间超过24小时不建议使用itime;system_clock和data_and_time对于计算时间超过24小时的可以使用,但是使用data_and_time会更方便一些,可以直接使用VAALUES(3)直接得到天数,VALUES(5)得到小时。


希望和大家一起交流进步。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-03-04
  • 2021-04-29
  • 2021-10-16
  • 2021-12-01
  • 2022-12-23
猜你喜欢
  • 2021-12-14
  • 2021-11-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-05
相关资源
相似解决方案