我尝试使用OpenMP在C ++中并行化我的程序的一个热点,但它不能扩展。虽然它在1个线程上需要25秒,但我只用2个线程实现21秒。我做了一个Locks&使用英特尔VTune Amplifier进行等待分析,但这对我没有帮助。它看起来像:
我特别不明白mkl_blas_dcopy的来源和调用它的位置(即使我删除了我的并行区域,我有这个调用和时间轴中的第二个线程)。
我试图从自上而下树中获取更多信息,但这对我没有帮助。
高级热点分析也没有给我更多信息。 我如何处理此问题以确定问题?
附加信息:在我的整体运行时间差得多之前,我在串行代码中做了很多优化并且可以提高性能但是之后我的代码没有更多的扩展。
非常感谢提前!
编辑:这里也是没有显示过渡的时间线,与我放大的距离无关。在这种情况下,我使用了另一个包含8个线程的测试用例。
答案 0 :(得分:4)
答案 1 :(得分:1)
显示同步对象的转换。在这种情况下,等待时间可能来自MKL库中的OpenMP运行时。在VTune中,您将在更新的版本中将此时间视为开销和旋转时间。