/ / OpenCLのローカルメモリに制限はありますか? - opencl、gpgpu、gpu-shared-memory

OpenCLローカルメモリには制限がありますか? - opencl、gpgpu、gpu-shared-memory

今日、私はさらに4つ追加しました __local カーネルに中間変数をダンプするための変数しかし、カーネルのシグネチャにさらに4つの変数を追加し、対応するKernel引数を追加するだけで、カーネルのすべての出力が "0"になります。cl関数はいずれもエラーコードを返しません。

私はさらに2つの小さい変数のうちの1つだけを追加しようとしました。どちらか一方だけを追加した場合は機能しますが、両方を追加した場合は機能しません。

OpenCLのこの振る舞いは、私が多くの人に割り当てたということを意味します。 __local メモリ?どのように私は見つけるのですか、どのくらい __local メモリは私には使えますか?

回答:

回答№1の19

デバイスが各計算ユニットで提供するローカルメモリの量は、次のコマンドを使用して照会できます。 CL_DEVICE_LOCAL_MEM_SIZE とフラグ clGetDeviceInfo 関数:

cl_ulong size;
clGetDeviceInfo(deviceID, CL_DEVICE_LOCAL_MEM_SIZE, sizeof(cl_ulong), &size, 0);

返されるサイズはバイト単位です。 各ワークグループは、この多くのメモリを自分自身に厳密に割り当てることができます。ただし、最大割り当てを行うと、同じ計算ユニットで他のワークグループを同時にスケジューリングできなくなる可能性があります。


回答№2の6

ローカルメモリがあるので、もちろんあります 物理的 のではなく、 バーチャル.

私たちは、仮想アドレスで作業することから慣れています理論的には必要なだけのメモリを確保するために、CPU上のスペースを確保します。物理RAMとディスクにマップできます。

これは、実際のRAMの特定の領域にアクセスする必要があるコンピュータのOSカーネル(またはその下位レベルの部分)のようなものには当てはまりません。

GPUのグローバルおよびローカルメモリにも当てはまりません。ありません* メモリページング(認識されたスレッドの再マッピング)物理メモリアドレスへのアドレス)。スワッピングはありません。特にローカルメモリに関しては、すべての計算ユニット(= GPU上のすべての対称型マルチプロセッサ)にローカルメモリとして使用される多数のRAMがあります。ここに緑の厚板:

ここに画像の説明を入力

そのような各スラブのサイズはあなたが得るものです

clGetDeviceInfo( · , CL_DEVICE_LOCAL_MEM_SIZE, · , ·).

説明するには nVIDIAケプラー GPUでは、ローカルメモリサイズは16 KBまたは48 KBのいずれかです(64 KBの補数は、グローバルメモリへのアクセスのキャッシュに使用されます)。だから、今日のように、 GPUローカルメモリは、グローバルデバイスメモリに比べて非常に小さいです。.


1 - Pascalアーキテクチャ以降のnVIDIA GPUでは、ページングがサポートされています。しかしそれはデバイスメモリの一般的な使い方ではありません。


回答№3の4

よくわからないが、これは見なければならないと感じた。

以下のリンクをたどってください。それを読んで。

素晴らしい読み物: OpenCL - メモリスペース.

ちょっと関連したもの: