OpenCLではCompute Unit等のデバイスモデルを以下にリストするワークグループ(Work Group)とその部分を構成するワークアイテム(Work Item)からなる、並列処理モデルにマッピングを行います。
Work Itemはカーネルと呼ばれるGPUやCPU等のOpenCLデバイスで呼び出す関数に1対1でマップしますので、各ワークグループには複数のワークアイテムが存在します。ワークアイテムはOpenCLが実行できる最小処理単位です。
ワークグループについては以下の2つの識別子(ID)によって各ワークアイテムが紐づけられたグループを特定することができます。
グローバルIDとローカルIDの関連については下記の「図表:ワークグループ(1次元)」(図2.4「図表:ワークグループ(1次元)」)を見てください。ローカルIDはワークグループ内のID、グローバルIDはワークグループを横断したIDとして存在します。
例えばグローバルID、アプリケーションが使っているデータを、OpenCLデバイスのメモリー領域にコピーする際に、データのアクセスに使うことができます。
ローカルIDの用途としては以下のようなものがあります。
ワークグループの使い方にはこれ以外にも画像・演算処理の際の次元を定義するためにも使うことができます。
ワークグループにあるワークアイテム(スレッド)の個数は、ワークグループサイズと呼びます。ワークグループサイズはNVIDIAであれば32個(warp)、AMDであれば64個(wavefront)が目安となります。
OpenCLで処理させたいワークグループの個数については最低でもCUの数を超える値が必要となります。しかし、ワークグループに割り当て可能なワークアイテムを決定するには、各デバイスで設定されているワークアイテムの最大値(CL_DEVICE_MAX_WORK_ITEM_SIZES)の情報を取得しなくてはいけません。
Intel HD 4000では512が最大ワークグループサイズです。
表2.13 ワークグループ数とワークグループサイズの最適化
必要なローカルメモリーサイズ | 推奨ワークグループサイズ | 最大並行ワークグループ数 | ワークアイテム数 |
0 | 16 | 128 | 2048 |
4K | 64 | 32 | |
8K | 128 | 16 | |
16K | 256 | 8 | |
32K | 512 | 4 |
Intelの推奨は各ワークグループに64ワークアイテムを割当てることです。理由としてCPUとGPUの両方に適合する数だということです。
Intelの内蔵GPU(HD Graphics等)ではワークアイテム数やワークグループ数には3つの制限があります。
Copyright 2018-2019, by Masaki Komatsu