0

当我执行 PGO 优化步骤(使用LINK.EXE /LTCG:PGU)时,Visual Studio 2010 链接器抱怨:

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 回答