24小时热门版块排行榜    

Znn3bq.jpeg
查看: 913  |  回复: 8
当前主题已经存档。

dellus

木虫 (职业作家)

[交流] 【求助】Fortran中有什么好方法计算CPU时间?【已完结】

Fortran中SECOND子程序(or function)是怎么用的?
大家有什么好的办法计算CPU时间?
我试过secnds和CPU_Time,好象都有BUG

比如把一个运算放在一个do循环里运行,分别在循环前和循环后记录时间,最后写出时间
如果最后的write语句中加上循环中运行的结果,需要7、8秒,如果只输出时间,只有10(-5)秒

[ Last edited by 余泽成 on 2010-1-27 at 22:20 ]
回复此楼
岂能尽如人意,但求无愧于心。
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

nono2009

超级版主 (文学泰斗)

No gains, no pains.

优秀区长优秀区长优秀区长优秀区长优秀版主

★ ★
dellus(金币+2,VIP+0):版主帮忙啊 12-17 17:56
以前自己在77下写过一个子程序。不知新版的fortran是否提供了更好的函数?跟着学
2楼2009-12-17 17:25:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

nono2009

超级版主 (文学泰斗)

No gains, no pains.

优秀区长优秀区长优秀区长优秀区长优秀版主

★ ★ ★
波不动(金币+1,VIP+0):辛苦了。 12-17 19:30
dellus(金币+2,VIP+0):谢谢!F95里有DATE_AND_TIME,包括date和time的作用,而且不存在date的2000年的问题,不过这个函数计时精度不够 12-18 06:14
我看了一下Compaq Visual Fortran 6.6 Language Reference,里面有date和time两个内部函数,应该可以解决你的问题。
3楼2009-12-17 18:14:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

nono2009

超级版主 (文学泰斗)

No gains, no pains.

优秀区长优秀区长优秀区长优秀区长优秀版主

从我N年以前的程序中摘了点给你看,也不知行不行

★ ★ ★ ★ ★ ★ ★ ★ ★
波不动(金币+2,VIP+0):感谢应助! 12-17 19:30
dellus(金币+3,VIP+0):谢谢!很热心的版主 12-18 06:16
dellus(金币+4,VIP+0): 12-23 14:05
...
      INTEGER(4) int_time0,int_time1
      character*8 char_time

!  show the starting time of this calculation
        call TIME(char_time)
        print *, 'Starting time on the PC is ', char_time
...
        int_time0=TIME( )
...
        int_time1=TIME( )
        print *, 'This calculation lasts ',int_time1-int_time0,'(s)'
4楼2009-12-17 18:19:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)

★ ★ ★ ★ ★ ★ ★ ★
jjdg(金币+2,VIP+0):感谢应助!欢迎新虫! 12-17 18:59
dellus(金币+3,VIP+0):谢谢!试过了,也有BUG 12-18 06:18
dellus(金币+1,VIP+0):3 12-23 14:06
dellus(金币+2,VIP+0): 12-23 14:07
http://www.programfan.com/club/showtxt.asp?id=305205

从上面这个地方看到一种方法,用的是system_clock函数

call system_clock(t1)
call system_clock(t2)
t=t2-t1
单位是微秒。
5楼2009-12-17 18:41:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)

★ ★ ★ ★ ★
波不动(金币+2,VIP+0):感谢应助! 12-17 19:30
dellus(金币+1,VIP+0):谢谢! 12-18 06:19
dellus(金币+2,VIP+0): 12-23 14:07
话说,如果是*unix系统,直接用time命令就好了。我在win下实现了一个,凑合能用。
6楼2009-12-17 18:44:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dellus

木虫 (职业作家)

senlia(金币+0,VIP+0):我算出来都是5.156左右 每次运行时间都不完全一样 但都差不过十几毫秒 12-18 08:43
两段程序几乎一样,除了输出语句略有差别,但t1的运行结果一个是1.999999767576810E-006,一个是7.15873999999985。有谁知道怎么回事吗?还是只有我用的系统有这样的问题?

program main
      integer :: i
      double precision :: f0, f1, t0, t1
      f0 = 0
      f1 = 0
      t0 = secnds (0.0d0)
      do i = 1, 100000000
            f1 = f1 + dcos(f1)
      end do
      t1 = secnds(t0)
      write(*,*) t1
end program main


program main
      integer :: i
      double precision :: f0, f1, t0, t1
      f0 = 0
      f1 = 0
      t0 = secnds (0.0d0)
      do i = 1, 100000000
            f1 = f1 + dcos(f1)
      end do
      t1 = secnds(t0)
      write(*,*) t1, f1
end program main
岂能尽如人意,但求无愧于心。
7楼2009-12-18 06:27:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
senlia(金币+2,VIP+0):感谢应助 12-18 15:38
dellus(金币+5,VIP+0):谢谢!我用的是Linux,gcc。我试过real的精度,结果和双精度是一样的。我同一个程序不同次运行之间的差距也不止百分之一秒。 12-18 22:02
dellus(金币+3,VIP+0): 12-23 14:06
首先,不知道你用的什么编译器,什么系统。
我在winxp下,用gfortran 4.4.2编译了这两段程序。有如下问题

1、seconds的参数必须是kind 4的。而你的是double,也就是kind 8的。这个我改了一下,然后编译通过。
2、我的运行时间是:13.218750和13.171875,不知道为什么第二个会快百分之一秒。

另弱的问一下nono老大,write和print在输出到console的时候有什么区别吗?
8楼2009-12-18 15:27:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

15890734984

木虫 (小有名气)

★ ★ ★ ★
jjdg(金币+2,VIP+0):辛苦了!感谢参与! 12-20 02:33
dellus(金币+2,VIP+0):这个程序是做什么的? 12-20 15:01
real K(1:8922,1:8922),a(1:89103,1:3)
  open(unit=1,file='filestiffness.txt',status='old')
  open(unit=2,file='kk.txt',status='new')
        read(1,*)((a(i,j),j=1,3),i=1,89103)
        do 10 i=1,8922
            do 20 j=1,8922
               do 30 n=1,89103
                   if (a(n,1).eq.i.and.a(n,2).eq.j) then
                             K(i,j)=a(n,3)
       end if
30      continue
20      continue
10      continue
!100     format(1x,8922(e19.12,1x))
  write(2,*) ((K(i,j),j=1,8922),i=1,8922)
        end


这个程序的功能是将数组a的第一列和第二列作为行号和列号给第三列在k中定位.
filestiffness.txt内容如下:
10   9   2558
6    4    5285
3    3  5582
…………
……………
9楼2009-12-19 22:13:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 dellus 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[论文投稿] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +3 x0mp7owy2b 2026-05-15 3/150 2026-05-16 17:50 by j6b2pdz07o
[考博] 光量子物理方向 博士招生 1人(2026.09) +3 sandyworld 2026-05-15 3/150 2026-05-16 17:11 by zznnnj
[有机交流] 求有机合成大神指点三硫酸乙烯酯(CAS:2793408-99-6)的合成路线 30+3 Leekmid 2026-05-13 10/500 2026-05-16 16:37 by czyzsu
[公派出国] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +5 l7k6xnh0yc 2026-05-14 5/250 2026-05-16 16:35 by x28q7dxf75
[有机交流] 如何实现卤原子转化 10+3 BT20230424 2026-05-15 5/250 2026-05-16 16:20 by czyzsu
[硕博家园] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +3 k37jurhrau 2026-05-16 3/150 2026-05-16 13:57 by vcdazktkjx
[考博] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +4 l7k6xnh0yc 2026-05-14 4/200 2026-05-16 11:36 by h3oerqvkv9
[硕博家园] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +4 cjf4bx70cj 2026-05-14 6/300 2026-05-16 11:16 by h3oerqvkv9
[硕博家园] 申请博士 +3 呃?呃 2026-05-15 3/150 2026-05-16 11:01 by a4742549
[文学芳草园] 裁员滚滚,退居二线 +4 J_wei 2026-05-10 4/200 2026-05-16 10:52 by zh10246
[考博] 2026博士还有哪些学校有名额 +5 小王求读研 2026-05-15 6/300 2026-05-16 10:44 by a4742549
[硕博家园] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +4 l7k6xnh0yc 2026-05-14 5/250 2026-05-16 04:29 by k37jurhrau
[找工作] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +3 l7k6xnh0yc 2026-05-14 3/150 2026-05-16 01:49 by k37jurhrau
[考博] 西南大学考核制博士 +4 lijunjie84 2026-05-11 7/350 2026-05-15 23:20 by 同仁堂教主
[论文投稿] 有带发论文的吗 +4 山楂之术 2026-05-09 4/200 2026-05-15 15:40 by 妹子不好惹
[基金申请] 精华III评审感受-评审感受-评审感受 +14 ferrarichen 2026-05-11 18/900 2026-05-15 11:12 by cmhchen
[考博] 材料类只有一篇综述能申博么 +4 乐逍遥谷 2026-05-13 4/200 2026-05-14 12:05 by zhyzzh
[基金申请] 请问大佬b0816评完了吗 +3 市民华南虎 2026-05-12 7/350 2026-05-14 07:41 by 市民华南虎
[论文投稿] 求助大佬sci投稿哪个好中 +3 江沅188 2026-05-12 4/200 2026-05-13 14:35 by 江沅188
[考博] 现在不知道怎么办,感觉很痛苦 +4 qweww 2026-05-11 5/250 2026-05-11 20:23 by Oversize
信息提示
请填处理意见