我正在为 I-32A 架构使用英特尔 C 编译器。当我使用以下选项编译我的 C 程序时:
icl mytest.c /openmp /QxHost /fp:fast /fast
测试运行需要 3.3 秒。现在我尝试使用 PGO,所以我编译了:
icl mytest.c /openmp /QxHost /fp:fast /fast /Qprof-gen
然后,我使用示例输入运行可执行文件 2-3 次,然后再次编译:
icl mytest.c /openmp /QxHost /fp:fast /fast /Qprof-use
希望它将考虑到收集的信息。事实上,它告诉我它正在使用 .dyn 文件,但生成的可执行文件比没有使用 Qprof 时要慢(3.85 秒),而且这与执行运行的数据完全相同(对于 PGO 来说应该是完美的)。我尝试将 openmp 线程设置为一个,认为它可能会与 .dyn 输出混淆,但结果是相同的 - 它比简单编译慢。
我的问题是:这在理论上是否可行,或者我用编译器选项以某种方式搞砸了 PGO 进程?