我尝试使用 OpenMP 将我的 C++ 程序的一个热点并行化,但它无法扩展。虽然 1 个线程需要 25 秒,但 2 个线程只需要 21 秒。我使用 Intel VTune Amplifier 进行了 Locks & Wait 分析,但它并没有真正帮助我。看起来像:
我特别不明白 mkl_blas_dcopy 来自哪里以及它调用它的内容(即使我删除了我的并行区域,我也有这个调用和时间轴中的第二个线程)。
我试图从 Top-Down Tree 中获取更多信息,但这对我并没有真正的帮助。
高级热点分析也没有给我更多信息。为了确定问题,我必须如何解决这个问题?
附加信息:在我的整体运行时差很多之前,但我在串行代码中做了很多优化,可以提高性能,但在那之后我的代码没有更多的可扩展性。
提前谢谢了!
编辑:这里还有时间线,没有显示任何过渡,与我放大的距离无关。在这种情况下,我使用了另一个具有 8 个线程的测试用例。