OpenCL-C言語ではメモリー空間をハードウェアのある下層にまでマップが可能なため、効率的なコードを書くためにはメモリー領域の理解をすることは必須となります。
前の項目で解説した「図表:プロセッサー・アーキテクチャー」(図1.1「図表:プロセッサー・アーキテクチャー」)では、Compute Unit(CU)とProcessing Element(PE)の関係を思い出してみてください。CUは複数のPEからなりますが、おおむねCUはワークグループにマップできPEはワークアイテム(スレッド)にマップされます。
OpenCLがアクセスできるメモリー領域は、「図表:メモリー・アーキテクチャー」図2.7「図表:メモリー・アーキテクチャー」、のように4つのメモリー領域があります。
メモリーの種類
privateメモリはProcessing Element(PE)に割り当てられています。プライベートメモリーはOpenCL C言語でコードする際に変数に対してメモリ修飾子の宣言をしない場合は既定の設定となります。
localメモリはCompute Unit(CE)に割り当てられています。ローカルメモリーは__localまたはlocalという修飾子を宣言すると領域が割り当てられます。
globalメモリはヒープやスタック領域のことを指します。(ヒープやスタックのことは理解しているものとします。)__globalまたはglobalという修飾子を宣言することで領域を割り当てられます。
Copyright 2018-2019, by Masaki Komatsu