【问题标题】:TBB parallel_for with less number of threads线程数较少的 TBB parallel_for
【发布时间】:2013-03-20 16:39:46
【问题描述】:
我使用opencv人脸检测器编写了一个多视图人脸检测代码。我在一张图像上运行五个检测器(针对不同的姿势角度进行了训练),并采用它们的权重来检测图像中的人脸。我使用 TBB parallel_for 使代码并行,但它仅将性能提高了 1.7 倍。我想问有没有更好的方法来并行运行五个检测器?
我在一个 16 核的集群上运行我的代码。我认为线程数(在我的情况下是 5 个)太少而无法利用全部功能。
有什么建议吗?
谢谢,
【问题讨论】:
标签:
opencv
detection
tbb
parallel-for
【解决方案1】:
需要调查的一些可能的问题:
- 其中一个检测器的运行时间比其他检测器长。例如,如果一个检测器需要 4 个单位的时间,而其他四个检测器每个需要 1 个单位的时间,则最可能的加速是 2 倍。在这种情况下,并行化慢速检测器本身可能会有所帮助。
- 检测器运行得如此之快,以至于 parallel_for 没有时间来分散工作。如果每个检测器至少需要 0.1 秒,这应该不是问题。
- 内存带宽可能是一种限制资源,尤其是在工作集不适合外层缓存的情况下。
诸如 Intel(R) VTune(TM) Amplifier 之类的分析器有时可以帮助追踪这些问题。 Amplifier 存在商业和non-commercial 许可证。 [免责声明:我为英特尔工作。]