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)。
下面是调用了这四个时间函数的例子:
对上面的程序进行编译得到的结果如下:
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)得到小时。
希望和大家一起交流进步。
本文介绍了Fortran中用于获取时间的三个内置子程序:CPU_TIME、ITIME和DATE_AND_TIME。通过示例代码展示了它们的用法和返回值,其中CPU_TIME提供CPU运行时间,ITIME和DATE_AND_TIME则提供实际时间,后者在处理长时间计算时更为方便。在并行计算中,CPU_TIME可能不准确。文章还给出了itime的有效计算范围和system_clock在长时计算中的优势。
2479

被折叠的 条评论
为什么被折叠?



