数学の計算が重い複雑なCおよびC++コードがあります。コンパイルする最新のアップデートであるIntelC++を使用しています。私は最適化を使用していますが、アプリケーションは期待される答えを提供しません。長い間、私は問題をEXCEPTION_FLT_STACK_CHECK0xc0000092を取得するように減らすことができました。最適化せずにコンパイルした場合-プログラムは期待どおりに動作します。
これは、Winxp64のシングルスレッドコードです(アプリケーションは32ビットです)。
MSVC 2010は、デバッグビルドまたはリリースビルドで同じ結果を提供します。(つまり、Good =期待される結果)
誰かがどこを見ればいいのか教えてもらえますか?現在、コンパイラのバグが疑われます。自分のアセンブリコードがないため、コンパイラで生成されたコードのみです。アセンブラを調べたところ、SSE/x87混合コードです。
探すべき道順を探しています。(インテル®コンパイラーの)試用版を使用しているので、調査する時間があまりありません。
/ Qfp-stack-check tommorowを使用して、コードに問題があるかどうかを確認します。
*更新* インテル®コンパイラーにバグが見つかりました。関数はst(0)に値を返しますが、呼び出し元の関数はそれを削除しません。そうすれば、スタック例外が発生します。回避策は、常に必要とは限らない場合でも、戻り値を使用することです。共有できるコードで再現してみます。
この回避策の後、同じコードでIntelはmsvc2010よりも35%高速でした。-それが主な結果です。
モーディ