現在、2 つの 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.53 秒、プログラム 2 では 0.93 秒になります。
ここで、DTIME の解像度が十分でない小さな問題のタイミングも実行するために、上記の呼び出しをループに入れて問題を解決します (たとえば 10 回):
CALL DTIME( TARRAY, TIME )
DO 10 K = 1, 10
CALL MY_PROGRAM1/2( ... )
10 CONTINUE
CALL DTIME( TARRAY, TIME )
しかし、今ではプログラム 1 で 9.23 秒 (現在は 15.3 秒のようになっているはず) とプログラム 2 で 9.16 秒を取得しているため、タイミングの関係は上記の 2 つの呼び出しとはまったく異なります。
私は 4 コアの 64 ビット ubuntu マシンを持っているので、プログラム 1 の DO ループで自動並列化が行われている可能性があると思います。上記の問題が何であり、それを解決する方法を知っている人はいますか? よろしくお願いします!
マティアス