我有一个用C编写的openmp代码。我在Stampede上的Intel MIC上执行了代码。我想分析代码以找到代码中的热点,这样我将有助于进一步优化代码。我试图使用profiler gprof,但我在某处读到gprof不能直接在MIC上使用。我试过通过教程使用perf。我可以直到某个步骤,之后当perf注释步骤到来并执行代码时,它会给出错误“)”意外。所以我不知道如何继续描述我的代码。有人可以帮忙吗? 这是我参考perf教程的网站:sandsoftwaresound.net/perf/perf-tutorial-hot-spots/。
答案 0 :(得分:1)
Xeon Phi的80%优化与主机(Xeon)的优化相同。使用gprof,printf,编译器选项和工具包的其余部分,只在主机上执行代码时进行优化。在您不能再做之后,请关注特定的Xeon Phi优化。
当你在Stampede时,我假设你正在使用英特尔编译器。编译器具有很多诊断功能来分析您的代码甚至提供建议。我会为您提供更具体的网址,但我正在度假,带宽有限。
虽然这不是特定于您的问题,但这里有一些其他建议。如果你不是,你很可能会得到大幅提升。英特尔编译器在优化方面具有良好的优势,特别是在英特尔架构上。此外,您应尽可能使用英特尔MKL。 MKL的所有例程都针对不同的IA架构进行了优化,与HPC最相关的是针对MIC进行了优化。
答案 1 :(得分:0)
您有几个选择。
重量级方法是使用英特尔Vtune。首先将-g添加到编译器标志中。 我使用主机命令行中的Vtune,这是我用来在MIC上分析应用程序的命令。 (这是在主机上执行的,主机上的Vtune使用ssh 在MIC上启动应用程序。)
amplxe-cl -collect knc-hotspots -source-search-dir=/mysrc/dir -search-dir=/mybin/dir -- ssh mic0 /home/me/myapp
假设MIC上的应用程序位于/ home / me / myapp,主机上的源目录和源搜索目录。 (至少使用Vtune 15,我需要单独指定这两个,以便让Vtune GUI显示符号信息)
应用完成后,使用amplxe-gui在主机上运行Vtune GUI并打开结果集。
英特尔还开发了一些简化的开源分析工具,支持MIC,Speedometer和Overhead,您可以找到有关它们的信息here
希望这足以帮助您入门。