1

TBBを使用するときにスレッドスケジューリング(特にアフィニティ)を変更する方法を知っている人はいますか?単純な並列アプリケーションで高レベルの分析を行うと、TBBは、パフォーマンスを低下させる方法で、基盤となるスレッドのアフィニティを指定しているようです。具体的には、私が実行しているコアではハイパースレッディングが有効になっており、完全にアンロードされたままの別のコアがある場合でも、TBBは同じコアにスレッドをアフィニティ化しているようです。

FWIW、TBBが「正しいこと」を行っている可能性があり、スレッドのアフィニティを変更するとパフォーマンスが低下するだけだと思います。それが実際に当てはまるかどうかを確認するために、それを試してみたいと思います。

4

1 に答える 1

2

TBB 2.1 では、キャッシュ アフィニティに基づいてタスクをスレッドに割り当てるアフィニティ パーティショナーが追加されました。デフォルトのパーティショナーの代わりにこのパーティショナーを使用すると、うまくいくかもしれません。個々のタスクに飛び込んで使用することもできますtbb::task::set_affinity(ドキュメントはこちら)。tbb::taskのサブクラスがコールバックを実装している場合、アフィニティによって示されるスレッド以外のスレッドでタスクが実行された場合、スケジューラは通知できnote_affinity()ます。

于 2010-03-09T00:40:05.260 に答える