Intel Threading Building Blocks (TBB)parallel_for
のオーバーヘッドが大きいのはなぜですか? セクション 3.2.2 によると、その約 0.5 ミリ秒の自動チャンク。Tutorial.pdf
これはチュートリアルからの特技です:
注意: 通常、ループのパフォーマンスを向上させるには、parallel_for に少なくとも 100 万クロック サイクルかかる必要があります。たとえば、2 GHz プロセッサで少なくとも 500 マイクロ秒かかるループは、parallel_for の恩恵を受ける可能性があります。
私がこれまでに読んだことによると、TBB はスレッドプール (ワーカー スレッドのプール) パターンを内部で使用し、ワーカー スレッドを最初に 1 回だけ生成することで、このような悪いオーバーヘッドを防ぎます (数百マイクロ秒のコストがかかります)。
では、何が時間を取っているのでしょうか。ミューテックスを使ったデータ同期ってそんなに遅くないですか?また、TBB はロックフリーのデータ構造を同期に利用していませんか?