我目前正在尝试比较两个 Fortran 子例程的运行时。因此,我编写了 Matlab MEX 文件,以便更轻松地从那里访问代码。我做的第一件事是测量每个例程的单独调用时间(在 MEX 文件中):
CALL DTIME( TARRAY, TIME )
CALL MY_PROGRAM1( ... )
CALL DTIME( TARRAY, TIME )
和
CALL DTIME( TARRAY, TIME )
CALL MY_PROGRAM2( ... )
CALL DTIME( TARRAY, TIME )
程序 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 )
但是,现在我得到 Program 1 的 9.23s(现在应该像 15.3s)和 Program 2 的 9.16s,所以时间关系与上面的两个调用完全不同。
我有一台 4 核的 64 位 ubuntu 机器,所以我想程序 1 的 DO 循环中可能会有一些自动并行化。但似乎程序 2 没有这样做,即使我使用了相同的混合选项。有谁知道上面的问题可能是什么以及如何解决它(也许只是在上面的循环中阻止自动并行化?)?提前谢谢了!
马蒂亚斯