在使用VTune API时避免使用Intel® Compiler优化开关

我以前写过关于如何使用VTune API的文章,里面包含具体的示例。用户可以比较随意地收集性能数据,在自己感兴趣的代码区域。

然而当我们用Intel的C++编译器来Build这个示例,且优化开关打开时,问题来了。

# icpc -g -O2 test.cpp -I/opt/intel/vtune_amplifier_xe_2011/include /opt/intel/vtune_amplifier_xe_2011/lib64/libittnotify.a -lpthread -o test

# amplxe-cl -collect hotspots -start-paused -- ./test

使用amplxe-gui 导入结果,发现结果是空的。因为编译器的优化开关把对象foo_data_collected()工作量减为零也就是说,代码中__itt_resume()即使Resume了,也采不到数据。



结论:在使用VTune API过程中,应该避免使用Intel C++编译器中的优化开关,诸如 “-O2”,“-O3",  "-ipo” 等

有关编译器优化的更完整信息,请参阅优化通知