坏的矢量化代码会影响可伸缩性吗?

时间:2017-05-26 13:42:43

标签: c++ opencv parallel-processing vectorization intel-ipp

我使用OpenMP并行化了已有的计算机视觉应用程序代码。我认为我设计得很好,因为:

  • 工作量很均衡
  • 没有同步/锁定机制
  • 我将最外面的循环并行化
  • 大部分时间都使用所有核心(没有空闲核心)
  • 每个帖子都有足够的工作

现在,应用程序在使用多个内核时无法扩展,例如:它在15个核心之后不能很好地扩展。

代码使用外部库(即OpenCV和IPP),其中代码已经优化和矢量化,而我尽可能地手动矢量化代码的某些部分。但是,根据英特尔顾问的说法,代码没有很好的矢量化,但没有什么可做的:我已经尽可能地将代码矢量化,而且我无法改进外部库。

所以我的问题是:矢量化可能是代码在某些时候不能很好地扩展的原因吗?如果是这样,为什么?

1 个答案:

答案 0 :(得分:0)

与亚当·内夫拉蒙(Adam Nevraumont)的评论一致,VTune Amplifier在确定内存带宽问题方面可以做很多工作:https://software.intel.com/en-us/vtune-amplifier-help-memory-access-analysis

开始更高级别的分析可能会很有用,例如,查看热点。如果事实证明您的大部分时间都花在了OpenCV或您所关注的类似工具上,那么发现尽早使用可能会节省一些时间,而不是直接挖掘内存瓶颈。