並列アルゴリズムが複数のスレッドにわたってワークを均等に分散し、ロード・バランシングを行わないように指定します。
#include "tbb/partitioner.h"
class static_partitioner;
static_partitioner のアルゴリズムは、複数のスレッドにわたってワークをほぼ等しいサイズのサブ範囲で分散します。サブ範囲の数は、task_scheduler_init および task_arena クラスで指定される、タスク実行に参加できるスレッド数と同じです。これらのサブ範囲はこれ以上分割されません。
static_partitioner は、もともとワークのバランスがとれていた並列アルゴリズムのオーバーヘッドを小さくします。しかし、利用可能な並列処理も制限されます。また、ワークのバランスがとれていない場合、パフォーマンスは低下します。
範囲の型が比例分割をサポートしない場合、または grainsize の値がタスク実行に参加するスレッド数で分割された範囲のサイズよりも大きな値に設定された場合、サブ範囲サイズの規則性は保証されません。
また、static_partitioner は、決定性のあるタスク・アフィニティー・パターンを使用して、サブ範囲をスレッドに割り当てる方法をタスク・スケジューラーに伝えます。その結果、affinity_partitioner と同様にキャッシュの局所性が向上します。
以下の場合は static_partitioner を使用することを推奨します。
namespace tbb { class static_partitioner { public: static_partitioner(); ~static_partitioner(); }; }
メンバー | 説明 |
---|---|
static_partitioner() |
static_partitioner を構築します。 |
~static_partitioner() |
この static_partitioner を破棄します。 |