C++ 使用英特尔VTune放大器的OpenMP程序分析:什么是;kmp打印存储地图gtip“;

C++ 使用英特尔VTune放大器的OpenMP程序分析:什么是;kmp打印存储地图gtip“;,c++,openmp,intel-vtune,C++,Openmp,Intel Vtune,我试图分析一个与英特尔OpenMP和英特尔Composer XE 2014并行的C++程序的缩放行为。当我运行“高级热点分析”时,我得到的结果是,一个名为“kmp打印存储映射gtip”的库函数消耗了整个运行时中第二长的部分。我在谷歌上搜索了一下这个程序的意义,但没有得到结果。这个例程是否与我在算法的这一部分中使用的std::map数据结构相关? 提前谢谢 编辑 现在我消除了一个障碍,可以加速一切。但现在一个新的热点开始发挥作用。突然,当我进行锁和等待分析时,我的第一个位置是“OMP连接屏障mkl

我试图分析一个与英特尔OpenMP和英特尔Composer XE 2014并行的C++程序的缩放行为。当我运行“高级热点分析”时,我得到的结果是,一个名为“kmp打印存储映射gtip”的库函数消耗了整个运行时中第二长的部分。我在谷歌上搜索了一下这个程序的意义,但没有得到结果。这个例程是否与我在算法的这一部分中使用的std::map数据结构相关? 提前谢谢

编辑
现在我消除了一个障碍,可以加速一切。但现在一个新的热点开始发挥作用。突然,当我进行锁和等待分析时,我的第一个位置是“OMP连接屏障mkl_blas_daxpy_OMP:115”和“OMP连接屏障mkl_blas_dcopy:155”“。但我没有明确调用任何mkl例程。我如何进一步调查这一点

每当环境变量
kmp\u storage\u map
设置为
true
verbose
时,就会调用
kmp\u print\u storage\u map\gtid
。它将OpenMP运行时库使用的各种对象的位置打印到标准错误流中。由于I/O操作通常很慢,因此花费大量程序执行时间并不奇怪,特别是在涉及短测试用例时


由于
KMP\u STORAGE\u MAP
是未记录的,其默认值为
false
,因此可以安全地假定它仅在特殊情况下由其他工具使用,例如VTune在进行热点分析时使用。当您的程序正常运行时,该函数根本不会被调用。

您可以在代码中跟踪MKL调用,查看右侧的堆栈面板,当自下而上选择了“MKL\u blas\u dcopy”热点时,您应该能够看到main()的调用链。也许从代码中调用的其他库使用MKL。

我忘了提到它包含在OpenMP库中。您的测试需要多长时间,是不是很短?这是一个需要3.5秒的测试用例。通过使用更大的数据,我在位置2和3处获得了_kmp_屏障和_kmp_x86_暂停。这看起来“更好”,即更现实。谢谢,我认为一个3.5秒的测试用例就足够了。