如何在英特尔 MIC 上本地分析 openmp 代码?

Posted

技术标签:

【中文标题】如何在英特尔 MIC 上本地分析 openmp 代码?【英文标题】:How to profile an openmp code natively on Intel MIC? 【发布时间】:2014-07-15 08:24:20 【问题描述】:

我有一个用 C 语言编写的 openmp 代码。我在 Stampede 上的 Intel MIC 上执行了该代码。我想分析代码以找到代码中的热点,以便对我进一步优化代码有所帮助。我尝试使用分析器 gprof,但我在某处读到 gprof 不能直接在 MIC 上使用。我尝试通过教程来使用 perf。我可以走到某个步骤,然后当 perf annotate 步骤到来并执行代码时,它给了我意外的错误“)”。所以我不知道如何继续分析我的代码。有人可以帮忙吗?? 这是我参考 perf 教程的网站:sandsoftwaresound.net/perf/perf-tutorial-hot-spots/。

【问题讨论】:

【参考方案1】:

Xeon Phi 80% 的优化与主机 (Xeon) 相同。使用 gprof、printf、编译器选项和工具包的其余部分,并尽可能仅在主机上执行代码进行优化。在您无能为力之后,再专注于特定的至强融核优化。

当您使用 Stampede 时,我假设您使用的是英特尔编译器。编译器有很多诊断功能来分析你的代码,甚至提供建议。我会为您提供更具体的网址,但我正在度假,带宽有限。

虽然这不是针对您的问题,但这里有一些其他建议。如果你不是,你很可能会在使用它时获得巨大的提升。英特尔编译器擅长优化,尤其是在英特尔架构上。此外,您应该尽可能使用英特尔 MKL。 MKL 的所有例程都针对不同的 IA 架构进行了优化,与 HPC 最相关的例程专门针对 MIC 进行了优化。

【讨论】:

【参考方案2】:

你有几个选择。

重量级方法是使用 Intel 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 并打开结果集。

还有一些由 Intel 开发的简化的开源分析工具,支持 MIC、Speedometer 和 Overhead,您可以找到有关它们的信息here

希望这些信息足以让您入门。

【讨论】:

以上是关于如何在英特尔 MIC 上本地分析 openmp 代码?的主要内容,如果未能解决你的问题,请参考以下文章

MIC编程

微软的 OpenMP spinlock 时间如何控制?

英特尔 MIC - 固有向量元素的总和

英特尔编译器 (C++) 问题与 std::vector 上的 OpenMP 减少有关

OpenMP - 循环中最简单的累加器给出不正确的结果

使用英特尔 OpenMP 找到最佳线程数:只有 1 个线程比许多线程有更好的结果