0

(を使用して)PGO最適化手順を実行すると、VisualStudio2010LINK.EXE /LTCG:PGUリンカーは次のように文句を言います。

Merging foo!1.pgc
'FOO_EDGE::get_input': Arc 2 --> 4 has negative count (-414343)
Expectation failed: f line 4241
'FOO_DELAY::set_delay': Block 18 outgoing counts differ from block count (-9 diff)
Expectation failed: f line 4261
Expectation failed: f line 4211
'FOO_DELAY::set_delay': Arc 12 --> 23 has negative count (-3)
Expectation failed: f line 4220
Generating code
907 of 4948 ( 18.33%) profiled functions will be compiled for speed
4948 of 4948 functions (100.0%) were optimized using profile data
42912225037 of 42912225037 instructions (100.0%) were optimized using profile data

これらの「期待の失敗」の原因は何ですか?どのように対処すればよいですか?PGOはまだコードを最適化しているようですが、これらのメッセージが存在する場合の最適化の品質/完全性には少し疑いがあります。

4

1 に答える 1

0

これらのエラーは、マルチスレッドアプリケーションのPGOインストルメント化された実行を実行するときに発生するようです。これらは、x64のフラグを使用して(リンクせずに)コンパイルすることで回避できます。/PogoSafeMode

このフラグに関するMSDNドキュメントは特に明確ではありませんでした。マルチスレッドコードでPGOを実行するための正しい手順は次のとおりです。

  1. でコンパイルcl.exe /PogoSafeMode
  2. とのリンクlink.exe /LTCG:PGI
  3. マルチスレッドプロファイリング実行を実行します
  4. と再リンクlink.exe /LTCG:PGO
于 2013-01-29T23:13:55.440 に答える