問題タブ [gpu-shared-memory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gpu - GPU 共有メモリのサイズが非常に小さい - どうすればよいですか?
共有メモリ (OpenCL 用語では「ローカル メモリ」) のサイズは、現在のほとんどの nVIDIA GPU でわずか 16 KiB です。
10,000 個の整数を持つ配列を作成する必要があるアプリケーションがあります。したがって、10,000 個の整数を収めるのに必要なメモリ量 = 10,000 * 4b = 40kb となります。
- どうすればこれを回避できますか?
- 共有メモリが 16 KiB を超える GPU はありますか?
opencl - OpenCL ローカル メモリに制限はありますか?
今日__local
、カーネルにさらに 4 つの変数を追加して、中間結果をダンプしました。しかし、さらに 4 つの変数をカーネルの署名に追加し、対応するカーネル引数を追加するだけで、カーネルのすべての出力が「0」にレンダリングされます。どの cl 関数もエラー コードを返しません。
さらに、2 つの小さい変数の 1 つだけを追加しようとしました。1つだけ追加すると機能しますが、両方を追加すると機能しなくなります。
では、OpenCL のこの動作は、多くの__local
メモリを割り当てたことを意味するのでしょうか? __local
自分が使用できるメモリの量を確認するにはどうすればよいですか?
c++ - 共有メモリの割り当て
定数パラメーターを使用して共有メモリを割り当てようとしていますが、エラーが発生します。私のカーネルは次のようになります。
そして、私はエラーが発生しています
エラー: 式には定数値が必要です
カウントは定数です!このエラーが発生するのはなぜですか? どうすればこれを回避できますか?
c - ローカルメモリはCUDAの共有メモリより遅いですか?
ローカル メモリは、スレッドごとに 2 つのタイプであるレジスタ メモリよりも遅いというコメントしか見つかりませんでした。
共有メモリは高速であるはずですが、[スレッドの] ローカル メモリよりも高速ですか?
私がやりたいのは、メディアン フィルターのようなものですが、メディアンの代わりに特定のパーセンタイルを使用します。したがって、リストのチャンクを取得してソートし、適切なものを選択する必要があります。しかし、共有メモリ リストの並べ替えを開始できないか、問題が発生します。ローカル メモリにコピーするだけでパフォーマンスが大幅に低下しますか?
cuda - CUDA: 共有メモリでのアトミック操作
私のcudaカーネルは、ブロック実行の最後にホストに供給されるものを生成します。
スケルトンは次のとおりです。
データが書き込まれる host_data は、ホスト マップド メモリとして割り当てられます。
host_data_count は、生成されたデータの数を示すマップされたメモリでもあります。
私が使用している GPU は、Fermi アーキテクチャと CC 2.0 を備えた GTX 580 です。
このカーネル コードには何が欠けていますか?
誰でも助けることができますか?
cuda - CUDA で共有メモリと定数メモリを使用する
テキストファイルを読み込んで配列に保存したい。次に、配列をホストからデバイスに転送し、共有メモリに格納します。以下のコードを書きましたが、グローバルメモリを使用した場合に比べて実行時間が長くなりました。理由がわかりませんか?また、誰かが定数メモリを使用してこのコードを書くのを手伝ってくれると助かります。
cuda - 実行時に既知のサイズで CUDA 共有メモリを定義する方法は?
CUDAの__shared__
メモリは、コンパイル時に既知のサイズを必要とするようです。ただし、私の問題では、__shared__
メモリサイズは実行時にしかわかりません。つまり、
これは「エラー: 定数値が不明です」というエラーが発生し、この問題を回避する方法がわかりません。
cuda - 100%MP負荷のCUDAでの最大(ブロックあたりの共有メモリ)/(ブロックあたりのスレッド)
CUDA 2.0(NVIDIA 590)で大きな構造の配列を処理しようとしています。共有メモリを使用したいのですが。各スレッドが配列の要素全体を処理できるように、スレッドごとに最大共有メモリを割り当てようとして、CUDA占有計算機を試しました。ただし、(ブロックあたりの共有メモリ)/(ブロックあたりのスレッド)の最大値は、100%マルチプロセッサ負荷の計算機で確認できます。32バイトであり、単一の要素(桁違い)には不十分です。(ブロックあたりの共有メモリ)/(ブロックあたりのスレッド)の可能な最大値は32バイトですか?配列の一部をグローバルメモリに割り当てるか、負荷の少ないマルチプロセッサを使用するか、どちらの代替が望ましいかを判断することはできますか?それとも実験によってしか決定できないのでしょうか?私が見ることができるさらに別の選択肢は、いくつかのパスで配列を処理することですが、それは最後の手段のように見えます。
cuda - 共有メモリから int 配列を読み取ると、バンクの競合が防止されますか?
スレッド ブロックあたり 16 スレッドで起動される CUDA カーネルを設計しています。処理したい共有メモリ (つまり、スレッド ブロックごと) に N 個の int の配列があります。
スレッドのアクセス パターンが配列内で連続している場合、バンクの競合が発生しないということですか? 配列がchar配列の場合、バンクの競合が発生することは理解していますが、int配列の場合はどうなるか完全にはわかりません。4 つの連続する int の各セットが同じメモリ バンクを共有するため、バンクの競合が発生すると思いますか?
これが正しい場合、銀行の競合を防ぐための正しい解決策は何ですか? ヒストグラム サンプルのようなスクランブリングに対処しますか?
cuda - ローカル、グローバル、コンスタント&共有メモリ
ローカルメモリについて言及しているCUDAのドキュメントを読みました。(これは主に初期のドキュメントです。)device-propertiesは、local-memサイズ(スレッドごと)を報告します。「ローカル」メモリとはどういう意味ですか?「ローカル」メモリとは何ですか?「ローカル」メモリはどこにありますか?「ローカル」メモリにアクセスするにはどうすればよいですか?__device__
記憶ですよね?
device-propertiesは、グローバル、共有、および一定のmemサイズも報告します。これらのステートメントは正しいですか:
グローバルメモリは__device__
メモリです。グリッドスコープとグリッド(カーネル)の存続期間があります。
コンスタントメモリは__device__ __constant__
メモリです。グリッドスコープとグリッド(カーネル)の有効期間があります。
共有メモリは__device__ __shared__
メモリです。単一のブロックスコープと(スレッドの)そのブロックの存続期間があります。
共有メモリはSMメモリだと思います。つまり、その単一のSMのみが直接アクセスできるメモリ。かなり限られたリソース。SMは一度にたくさんのブロックを割り当てられていませんか?これは、SMが異なるブロックの実行をインターリーブできる(またはインターリーブできない)ことを意味しますか?つまり、ブロック* A *スレッドをストールするまで実行します。次に、ブロック* B *スレッドを停止するまで実行します。次に、再びブロック* A *スレッドにスワップバックします。またはSMは、ブロック* A *のスレッドのセットを、ストールするまで実行しますか。次に、別のブロック* A *スレッドのセットがスワップインされます。このスワップは、ブロック* A *が使い果たされるまで続きます。それからそしてその時だけ、作業はブロック* Bで始まります*。共有メモリのためにお願いします。1つのSMが2つの異なるブロックからコードをスワップインしている場合、SMはどのようにして共有メモリチャンクをすばやくスワップイン/スワップアウトしますか?(後のsenerioは真であり、共有メモリスペースのスワップイン/スワップアウトはないと思います。Block* A *は完了するまで実行され、次にblock * B *が実行を開始します。注:block * A *は異なる場合があります。ブロックよりカーネル* B *。)