我使用OpenMP并行化了已有的计算机视觉应用程序代码。我认为我设计得很好,因为:
现在,应用程序在使用多个内核时无法扩展,例如:它在15个核心之后不能很好地扩展。
代码使用外部库(即OpenCV和IPP),其中代码已经优化和矢量化,而我尽可能地手动矢量化代码的某些部分。但是,根据英特尔顾问的说法,代码没有很好的矢量化,但没有什么可做的:我已经尽可能地将代码矢量化,而且我无法改进外部库。
所以我的问题是:矢量化可能是代码在某些时候不能很好地扩展的原因吗?如果是这样,为什么?
答案 0 :(得分:0)
与亚当·内夫拉蒙(Adam Nevraumont)的评论一致,VTune Amplifier在确定内存带宽问题方面可以做很多工作:https://software.intel.com/en-us/vtune-amplifier-help-memory-access-analysis。
开始更高级别的分析可能会很有用,例如,查看热点。如果事实证明您的大部分时间都花在了OpenCV或您所关注的类似工具上,那么发现尽早使用可能会节省一些时间,而不是直接挖掘内存瓶颈。