static_partitioner クラス

概要

並列アルゴリズムが複数のスレッドにわたってワークを均等に分散し、ロード・バランシングを行わないように指定します。

ヘッダー

#include "tbb/partitioner.h"
      

構文

class static_partitioner;

説明

static_partitioner のアルゴリズムは、複数のスレッドにわたってワークをほぼ等しいサイズのサブ範囲で分散します。サブ範囲の数は、task_scheduler_init および task_arena クラスで指定される、タスク実行に参加できるスレッド数と同じです。これらのサブ範囲はこれ以上分割されません。

注意

static_partitioner は、もともとワークのバランスがとれていた並列アルゴリズムのオーバーヘッドを小さくします。しかし、利用可能な並列処理も制限されます。また、ワークのバランスがとれていない場合、パフォーマンスは低下します。

注意

範囲の型が比例分割をサポートしない場合、または grainsize の値がタスク実行に参加するスレッド数で分割された範囲のサイズよりも大きな値に設定された場合、サブ範囲サイズの規則性は保証されません。

また、static_partitioner は、決定性のあるタスク・アフィニティー・パターンを使用して、サブ範囲をスレッドに割り当てる方法をタスク・スケジューラーに伝えます。その結果、affinity_partitioner と同様にキャッシュの局所性が向上します。

ヒント

以下の場合は static_partitioner を使用することを推奨します。

  • ロード・バランシングが可能な、小さなバランスの取れたワークロードを並列化すると、パフォーマンスの利点よりもオーバーヘッドが大きくなる。
  • 複数のスレッドにわたって決定性のあるワークを分割することが重要な場合に、OpenMP* 並列ループを schedule(static) でスケジュールする。

メンバー

namespace tbb {
    class static_partitioner {
    public:
        static_partitioner();
        ~static_partitioner();
    };
}
      
次の表は、このクラスのメンバーの詳細な情報を提供します。
メンバー 説明
static_partitioner()

static_partitioner を構築します。

~static_partitioner()

この static_partitioner を破棄します。

関連情報