2016-06-17 11 views
1

Visual Studio +インテルFortranを使用してFortranプログラムをコンパイルしています。プログラムは連続してうまく動作します。インテルFortran - chkstk.asmが見つかりません

しかし、コードを並列化しようとするとエラーが発生します:chkstk.asm not found

面白いことに、私の配列のサイズを小さくすると、コードは再び並列化され、エラーは発生しません。

私は解決策を試しましたthis link:解決策(プロジェクトではない)のプロパティページで、共通プロパティ/デバッグソースファイルの下でchkstk.asmファイルを "no debbuging"の中に列挙します。

以下はエラーの印刷画面です。

enter image description here

+1

これは単なるデバッガ通知です。 chkstk.asmはCRT関数のソースファイルで、[__chkstk()](http://stackoverflow.com/questions/8400118/what-is-the-purpose-of-the-chkstk-function)です。プログラムがこのWebサイトの名前でクラッシュしないことを確認します。それが起こる前に、それが起こったときにあなたはほとんど見ることができないので、重要です。あるいは、プログラムがクラッシュすることはありませんが、ランダムにメモリが破壊される可能性があります。かなり典型的なFortranの問題です。大きな配列が好きです。だから、起こるはずのことが起こらなかったので、スタックトレースがその話を伝えます。ここからは見えません。 –

答えて

1

問題は、あなたのプログラムの中で発生していると、あなたのデバッガ(このケースでのVisual Studio)が通知されました。デバッガは、問題の場所に関連付けられたソースコードを探しています。そのソースコードは、インストールされていない(基本的なCランタイムライブラリの一部です)ため、見つからない可能性があります。

しかし、問題の性質を理解するためにそのソースコードを特に必要としない(または望む)わけではありません。

名前のとおり、chkstk.asmのコードはスタックのチェック/プローブを行い、スタック割り当てに十分な領域がスタックにコミットされていることを確認します。スタックスペースが不足しているため、チェックに失敗した可能性があります。コールスタックウィンドウを使用して、スタック割り当てに関連するFortranソースコードの場所を特定することができます。これは、プロシージャの呼び出し(関数のローカル変数用の記憶域の作成)または式(作成機能結果等のための一時記憶装置)。

並列コードは、特定の実行スレッドに固有の記憶域を作成する簡単な方法であるため、スタックの使用量を大幅に増やす傾向があります。関連する実行可能プロジェクトのプロパティでは、各スタックに予約されているメモリ量を増やす必要があります(リンカ>システム>スタック予約サイズのデフォルト値は1MB程度です)。また、スタックベースではなくヒープベースの割り当てを使用するようにコンパイラに指示することもできます(Fortran>最適化のプロジェクトプロパティでは、ヒープ配列を0に設定します)。

この種の問題については、Intelのフォーラムに多数の記事と記事があります。

関連する問題