インテル® FPGA SDK for OpenCL™プロ・エディション: プログラミング・ガイド

ID 683846
日付 4/01/2019
Public
ドキュメント目次

5.3. ローカル・メモリー・サイズへのポインターの最適化に向けたプログラミング手法

ローカルカーネルへのポインター引数を使用し、ローカルメモリーの割り当てを作成する場合、 インテル® FPGA SDK for OpenCL™オフライン・コンパイラーは、FPGAに構築するローカル・メモリー・システムのサイズを、ランタイムではなくコンパイル時に決定する必要があります。 clSetKernelArgでランタイムに要求するサイズを指定することで、メモリーサイズを最適化できます。 このサイズを指定することでオフライン・コンパイラーは、ポインター引数に正しいサイズのローカル・メモリー・システムを構築できるようになります。このサイズを指定しない場合は、オフライン・コンパイラーはデフォルトのサイズを使用します。
デフォルトの16キロバイト (kB) 以外のサイズを指定するには、local_mem_size(N) 属性をカーネル・ソースコードのポインター宣言に含めます。
Nの値は、要求するメモリーサイズをバイト単位で指定します。効率を高めるため、Nは2のべき乗にしてください。
例:
__kernel void myLocalMemoryPointer(
                  __local float * A,
                  __attribute__((local_mem_size(1024))) __local float * B,
                  __attribute__((local_mem_size(32768))) __local float * C)
{
	//statements
}

myLocalMemoryPointerカーネルにおいて、ローカルメモリーの16 KB (デフォルト) はポインターAに、1 KBはポインターBに、そして32 KBはポインターCに割り当てられています。

重要: ローカルカーネルへのポインター引数を使用する代わりに、インテルでは、カーネル・スコープにローカル・メモリー・システムを定義することを推奨しています。