チャンク化は、並列フレームワークがいくつかのタスクを 1 つのタスクにマージして、オーバーヘッドを軽減または排除することを意味します。例えば、タスクがループ反復である場合、重いタスク制御を実行する前にチャンク化によっていくつかの反復が同時に (チャンクとして) 実行されます。
チャンク化は一般に、並列フレームワークに変更する際に実装されます。
インテル® oneAPI スレッディング・ビルディング・ブロックを使用して、parallel_for()インスタンスを使用します。
OpenMP* では、C/C++ のプラグマ#pragma omp parallel forまたは Fortran のディレクティブ!$omp parallel doを使用して並列フレームワークへ変換する場合に実装されます。
また、チャンク化を有効にするためコードを再構成することもできます。これは、単一のループに新たに外部ループを作成して、2 つのループが同じ反復空間を処理するように変更することで達成できます。ストリップマイニングと呼ばれる手法により、内部ループは小さなチャンクでベクトル操作を活用できます。ループのベクトル化により、ハードウェアは配列データの操作など小さなユニット (通常 64 バイト) で、データを独立して処理することが可能となります。
2 つのループが存在する場合、タスク開始と終了アノテーションで内部ループを囲むように内部ループをタスク・アノテーション内に移動します。外部ループは一定のチャンクサイズでストライドし、内部ループはそれぞれのチャンクをシーケンシャルに繰り返します。
CPU 時間と経過時間がほぼ同じである場合、[Suitability Report (スータビリティー・レポート)] の [Runtime impact for this site (サイト・パフォーマンスのスケーラビリティー)] で、タスクのチャンク化が有効であることを推奨する可能性があります。
[Scalability of Maximum Site Gain (最大サイトゲインのスケーラビリティー)] グラフの右にあるチェックボックス (例えば、[Enable Task Chunking (タスクのチャンク化を有効にする)]) をオンにすると、その値が [Site Gain (サイトゲイン)] と場合によっては [Maximum Site Gain for All Sites (すべてのサイトの最大サイトゲイン)] にも追加されます。