2.13. ワークグループ

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として存在します。

図2.4 図表:ワークグループ(1次元)

images/OpenCLWorkGroup.png

例えばグローバルID、アプリケーションが使っているデータを、OpenCLデバイスのメモリー領域にコピーする際に、データのアクセスに使うことができます。

ローカルIDの用途としては以下のようなものがあります。

ワークグループの使い方にはこれ以外にも画像・演算処理の際の次元を定義するためにも使うことができます。

ワークグループにあるワークアイテム(スレッド)の個数は、ワークグループサイズと呼びます。ワークグループサイズはNVIDIAであれば32個(warp)、AMDであれば64個(wavefront)が目安となります。

2.13.1. CL_DEVICE_MAX_WORK_ITEM_SIZES

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つの制限があります。

  • ローカルメモリーを使う場合、サブスライスに対して64KBのメモリーがあり各ワークグループの最低使用領域は4kb(4096ビット)なので、メモリーの使用領域でグループに上限ができます。
  • バリアーを使う場合、サブスライスに対して16までのバリアーがサポートされるので、16を目安とできる。
  • SLMの割当粒度(細分性)は1KBのため、使えるワークグループ数は32, 16、8等に集約される。

Copyright 2018-2019, by Masaki Komatsu