TBB parallel_for具有较少的线程数

时间:2013-03-20 16:39:46

标签: opencv detection tbb parallel-for

我使用opencv人脸检测器编写了一个多视图人脸检测代码。我正在图像上运行五个探测器(针对不同的姿势角训练)并且使用它们的权重来检测图像中的面部。我使用TBB parallel_for使代码并行,但它的性能提高了1.7倍。我想问一下是否有更好的方法可以同时运行五个探测器?

我在具有16核的群集上运行我的代码。我认为线程的数量(在我的情况下是5个)太少,无法利用完整的功率。

有什么建议吗?

谢谢,

1 个答案:

答案 0 :(得分:1)

可能会遇到一些问题:

  • 其中一个探测器比其他探测器运行时间更长。例如,如果一个探测器需要4个单位时间,而另外四个探测器每个需要1个单位时间,则最可能的加速时间为2x。并行化慢速探测器本身可能有助于这种情况。
  • 探测器运行得如此之快,以至于parallel_for没有时间分散工作。如果探测器每个至少需要0.1秒,这应该不是问题。
  • 内存带宽可能是一种限制性资源,特别是如果工作集不适合外层缓存。

英特尔(R)VTune(TM)放大器等分析器有时可以帮助追踪这些问题。 Amplifier存在商业许可和non-commercial许可。 [免责声明:我为英特尔工作。]