Fortran Mex文件中的计时(通过使用自动并行化)

Fortran Mex文件中的计时(通过使用自动并行化),fortran,timing,mex,Fortran,Timing,Mex,我目前正在尝试比较两个Fortran子程序的运行时。因此,我编写了Matlab MEX文件,以便于从那里访问代码。我做的第一件事是测量每个例程的单个调用的时间(在MEX文件中): 及 程序1为1.53s,程序2为0.93s 现在,为了对DTIME分辨率不够好的较小问题执行计时,我将上面的调用放入一个循环以解决问题,比如说10次: CALL DTIME( TARRAY, TIME ) DO 10 K = 1, 10 CALL MY_PROGRAM1/2( ... ) 10

我目前正在尝试比较两个Fortran子程序的运行时。因此,我编写了Matlab MEX文件,以便于从那里访问代码。我做的第一件事是测量每个例程的单个调用的时间(在MEX文件中):

程序1为1.53s,程序2为0.93s

现在,为了对DTIME分辨率不够好的较小问题执行计时,我将上面的调用放入一个循环以解决问题,比如说10次:

   CALL DTIME( TARRAY, TIME )
   DO 10 K = 1, 10
      CALL MY_PROGRAM1/2( ... )
10 CONTINUE
   CALL DTIME( TARRAY, TIME )
但是,现在程序1得到了9.23s(现在应该是15.3s),程序2得到了9.16s,因此计时关系与上面两个调用完全不同

我有一台64位的ubuntu机器,有4个内核,所以我想在程序1的DO循环中可能会有一些自动并行化。但似乎程序2并没有做到这一点,尽管我使用了相同的混合选项。有没有人知道上面的问题是什么以及如何解决它(可能会阻止上面循环中的自动并行化?)?非常感谢


Matthias

我真的看不出有什么问题,我总是相信十次呼叫的平均值,而不是一次呼叫的测量值。在您的计算机上可能会发生很多事情来降低第一个程序的执行速度(系统负载过大等),这可能不会影响对第二个程序的调用。在对函数计时时,总是对大量调用进行平均,如果可能的话,最好超过10次。我会运行每个程序1、10、100、1000。。。对每次呼叫进行计时,并根据平均次数绘制每次呼叫的平均计时。您应该看到计时收敛到一个值,然后可以安全地假定该值为每个函数每次调用的时间。
   CALL DTIME( TARRAY, TIME )
   CALL MY_PROGRAM2( ... )
   CALL DTIME( TARRAY, TIME )
   CALL DTIME( TARRAY, TIME )
   DO 10 K = 1, 10
      CALL MY_PROGRAM1/2( ... )
10 CONTINUE
   CALL DTIME( TARRAY, TIME )