パーティショナーのまとめ

並列ループ・テンプレート parallel_for および parallel_reduce には、パーティショナー (ループを実行する手法) を指定するオプションの引数があります。次の表は、パーティショナーの説明および blocked_range とともに使用した場合の効果をまとめたものです。

パーティショナー

パーティショナー

説明

blocked_range(i,j,g) とともに使用した場合

simple_partitioner

チャンクサイズを粒度によって制限します。

g/2 ≤ chunksizeg

auto_partitioner (デフォルト)[4]

チャンクサイズを自動的に設定します。

g/2 ≤ chunksize

affinity_partitioner

チャンクサイズ、キャッシュ・アフィニティーおよび反復の均等分散を自動的に設定します。

static_partitioner

チャンクサイズ、キャッシュ・アフィニティーおよび反復の均等分散をロード・バランシングなしで設定します。

max(g/3, problem_size/num_of_resources) ≤ chunksize

パーティショナーが指定されない場合、auto_partitioner が使用されます。通常は、auto_partitioner または affinity_partitioner を使用してください。これらのパーティショナーは、利用可能な実行リソースに基づいてチャンクの数を調整します。affinity_partitioner および static_partitioner は、指定された比率に分割する Range の機能 (「高度なトピック: 異なる種類の反復空間」を参照) を活用して、計算リソース間で反復をほぼ等しいチャンクサイズに分散します。

次の場合は simple_partitioner が便利です。

関連情報

[4] インテル® スレッディング・ビルディング・ブロック (インテル® TBB) 2.2 より前のバージョンでは、デフォルトが simple_partitioner でした。以前のデフォルトの動作にするには、TBB_DEPRECATED=1 を指定してコンパイルします。