0

opencv 顔検出器を使用して多視点顔検出コードを作成しました。画像に対して 5 つの検出器 (さまざまなポーズ角度用にトレーニング済み) を実行し、それらの重みを使用して画像内の顔を検出しています。TBB parallel_for を使用してコードを並列化しましたが、パフォーマンスはわずか 1.7 倍向上しました。5 つの検出器を並行して実行するためのより良い方法はありますか?

16 コアのクラスターでコードを実行しています。スレッドの数 (私の場合は 5) が少なすぎて、完全なパワーを利用できないと思います。

助言がありますか?

ありがとう、

4

1 に答える 1

1

検討すべきいくつかの考えられる問題:

  • 検出器の 1 つは、他の検出器よりも実行に時間がかかります。たとえば、1 つの検出器に 4 単位の時間がかかり、他の 4 つの検出器にそれぞれ 1 単位の時間がかかる場合、可能な限り高速化できるのは 2 倍です。この種の状況では、低速検出器自体を並列化すると役立つ場合があります。
  • 検出器は非常に高速に実行されるため、parallel_for には作業を分散させる時間がありません。それぞれの検出器に少なくとも 0.1 秒かかる場合、これは問題になりません。
  • 特にワーキング セットが外部レベルのキャッシュに収まらない場合は、メモリ帯域幅が制限リソースになる可能性があります。

インテル(R) VTune(TM) Amplifier などのプロファイラーは、これらの問題の追跡に役立つ場合があります。Amplifier には、商用ライセンスと非商用ライセンスの両方が存在します。[免責事項: 私はインテルで働いています。]

于 2013-03-22T15:14:55.450 に答える