我尝试分析C ++程序的扩展行为 - 我已经与英特尔OpenMP和英特尔Composer XE 2014进行了并行化。当我运行"高级热点分析"时,我得到了结果,一个名为" kmp的库函数打印存储映射gtip"消耗总运行时间的第二长的部分。我用Google搜索了这个例程的含义,但我没有得到结果。这个例程是否与std :: map数据结构有关,我在算法的这一部分中使用了这个例程? 提前致谢!
EDIT 现在我删除了一个屏障,可以加快一切。但现在一个新的热点开始发挥作用。突然当我做一个Locks&等待分析我在第一个位置" OMP加入障碍mkl_blas_daxpy_omp:115"和#34; OMP加入障碍mkl_blas_dcopy:155""。但我没有明确地调用任何mkl例程。我该如何进一步调查?
答案 0 :(得分:1)
__kmp_print_storage_map_gtid
设置为KMP_STORAGE_MAP
或true
,就会调用{p> verbose
。它将标准错误流打印到OpenMP运行时库使用的各种对象的位置。由于I / O操作总体上很慢,所以它需要很多程序的执行时间并不奇怪,特别是在测试用例较短时。
由于KMP_STORAGE_MAP
未记录且其默认值为false
,因此可以安全地假设它仅在特殊情况下由其他工具使用,例如通过VTune进行热点分析。当你的程序正常运行时,函数根本不会被调用。
答案 1 :(得分:1)
您可以在代码中查看MKL调用,查看右侧的堆栈面板,当在Bottom-up中选择“mkl_blas_dcopy”热点时 - 您应该可以看到调用链到main()。也许从你的代码调用的其他一些库使用MKL。