static_partitioner
[algorithms.static_partitioner]
並列アルゴリズムがワークを複数のスレッドで均一に分散し、余計な負荷分散を行わないように指定します。
static_partitioner
を使用するアルゴリズムは、範囲をほぼ均等なサイズのサブ範囲にしてスレッドに分散します。サブ範囲の数は、global_contol または task_arena クラスで指定され、タスクの実行に参加できるスレッド数と同じです。このサブ範囲はそれ以上分割されることはありません。
警告
範囲タイプが比例分割をサポートしなかったり、粒度サイズが範囲サイズを (タスクの実行に参加する) スレッド数で割った値よりも大きく設定されている場合は、サブ範囲サイズの規則性は保証されません。
さらに、static_partitioner
は、決定論的なタスク・アフィニティー・パターンを使用してサブ範囲をスレッドに割り当てることをタスク・スケジューラーに通知します。
static_partitioner
クラスは、ISO C++ [utility.arg.requirements] の CopyConstructibe 要件を満たしています。
ヒント
以下のために static_partitioner
を使用します:
バランスの取れた小さなワークロードを並列化する場合、過度な負荷分散を許容するとパフォーマンスの利点よりもオーバーヘッドが顕著になります。
スレッド間の決定論的なワーク分割な重要である場合、OpenMP* 並列ループを
schedule(static)
でスケジュールします。
// <oneapi/tbb/partitioner.h> ヘッダーで定義
namespace oneapi {
namespace tbb {
class static_partitioner {
public:
static_partitioner() = default;
~static_partitioner() = default;
};
} // namespace tbb
} // namespace oneapi
参照: