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

参照: