11.2. 共有ローカルメモリ

注記

共有ローカルメモリについて詳しくは「bank」(「バンク」)と「表:ワークアイテム・グループ関数」(表B.102「表:ワークアイテム・グループ関数」)を参照ください。

この章で紹介するヒストグラム集計アルゴリズムでは、共有ローカルメモリ(SLM)を使います。

この際にローカルメモリにおいて考慮すべき点が2点あります。

前者については、ワークグループ内で共有したメモリ空間の配列にアトミック関数を使うのが最も頻繁に使われるパターンです。ただしアトミック関数は遅延を引き起こす原因となるため、アトミック処理を行わないメモリアクセスパターンを設計せねばならない状況も頻繁に発生します。

アトミック処理を使わない方式では、同時に加算処理が発生しないようにメモリ空間を拡張します。例えば、256のカテゴリに対して、64のローカルスレッドがある場合、256個の要素を持つ配列に64個のスレッドが同時に加算しようとするのではなく、ローカルスレッドの固有の添字を割り振って、スレッドに固有なメモリ空間となる256x64の配列を確保し、各スレッドが加算処理するインデックス空間は64列(64倍)となり独立した添字をアップデートします。

ローカルスレッドが32あるなら、256x32のメモリ空間が必要となります。この場合256行の行空間が32列あるメモリ空間を確保します。しかしこの方式は2次元配列を想定するため、データによっては列アクセスが集中してバンクコンフリクトを起こしやすくする可能性があるかもしれません。

次の項目ではメモリアクセスについてより具体的に例をあげながら解説します。

Copyright 2018-2019, by Masaki Komatsu