我正在使用英特尔的 amplxe 分析一些OpenMP代码。它给了我一些令人困惑的结果,我不确定是否有奇怪的事情发生在探查器上。
我使用__itt_pause();
和__itt_resume();
来隔离代码的OpenMP部分,但我的自下而上的视图如下所示:
_raw_spin_lock vmlinux 23.474s
update_cfs_rq_blocked_load vmlinux 15.215s
__schedule vmlinux 10.695s
put_prev_task_fair vmlinux 7.918s
update_cfs_shares vmlinux 7.447s
这可能是过度并行化的OpenMP区域的影响还是我的探查器报告的奇怪之处?我期望在分析器结果中看到更多与OpenMP相关的信息,但它们都在底层,运行时由基于内核的例程支配。
有人可以解释一下,这些可能是OpenMP配置文件中可能会看到的内容以及cfs
函数究竟做了什么? (我的理解是......调度程序中有很多锁定!?!)