共有メモリ (OpenCL 用語では「ローカル メモリ」) のサイズは、現在のほとんどの nVIDIA GPU でわずか 16 KiB です。
10,000 個の整数を持つ配列を作成する必要があるアプリケーションがあります。したがって、10,000 個の整数を収めるのに必要なメモリ量 = 10,000 * 4b = 40kb となります。
- どうすればこれを回避できますか?
- 共有メモリが 16 KiB を超える GPU はありますか?
共有メモリ (OpenCL 用語では「ローカル メモリ」) のサイズは、現在のほとんどの nVIDIA GPU でわずか 16 KiB です。
10,000 個の整数を持つ配列を作成する必要があるアプリケーションがあります。したがって、10,000 個の整数を収めるのに必要なメモリ量 = 10,000 * 4b = 40kb となります。
共有メモリは、明示的に管理されるキャッシュと考えてください。配列をグローバル メモリに格納し、必要に応じてその一部を共有メモリにキャッシュする必要があります。これには、複数のパスを作成するか、グローバル メモリへの/からのロードとストアの数を最小限に抑えるその他のスキームを使用します。
これをどのように実装するかは、アルゴリズムによって異なります。実装しようとしているものが正確に何であるかの詳細を提供できれば、より具体的な提案が得られる可能性があります。
最後のポイント - 共有メモリはブロック内のすべてのスレッド間で共有されることに注意してください- ブロック内のすべてのスレッドに共通の単一のデータ構造がない限り、スレッドごとに 16 kb 未満しかありません。
すべてのコンピューティング機能2.0以降のデバイス(ほとんどが過去1〜2年)には、マルチプロセッサごとに48KBの使用可能な共有メモリがあります。そうは言っても、Paulの答えは正しいです。おそらく、すべての10K整数を単一のマルチプロセッサにロードしたくないでしょう。