2

Fortran 90 で書かれたライブラリと、それを使用する C および C++ のいくつかのアプリケーションがあります。以前は、MinGW GCC 4.4.0 (mingw.org からダウンロードしたいくつかのバイナリ アーカイブから作成したもの) を使用して、それらすべてをコンパイルしました。

今日、最新の MinGW (GCC 4.7.0、ネット インストール) をダウンロードし、すべてのコードを再構築しました。驚くべきことに、アプリケーションの動作が非常に遅くなり、約 30 倍以上遅くなりました。その間、再コンパイルされたバージョンとバックアップから復元されたバージョンの両方が同様に機能します-問題は、PATHから取得されたgfortran DLLにあるようです(つまり、アプリケーションのバージョンに関係なく新しいMinGW)。

問題の原因は何ですか?また、どのように解決できますか? 一時的に古い MinGW に戻りました。

4

1 に答える 1

0

この問題に戻った後、回避策を見つけることに成功しました(ただし、理由はわかりません)。

私のプログラムでは、計算量の多い fortran サブルーチンが C 側の複数のスレッドから呼び出されました。何らかの理由で、mingw-gfortran 4.6.2 または 4.7.0 ではプログラムが 15 倍遅くなり、4.4.0 ではプログラムが速くなります。サブルーチンが 1 つのスレッドからのみ呼び出されている場合、4.7.0 は速度に関して 4.4.0 と等しくなります。

現在、速度は私にとって十分であるため、呼び出し元の環境を 1 つのスレッドに制限しました。

于 2012-08-08T09:39:52.563 に答える