問題タブ [kepler]
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.
cuda - グローバル書き込みでのメモリー合体
CUDA デバイスでは、グローバル メモリ書き込みでの結合は、グローバル メモリ読み取りでの結合と同じくらい重要ですか? はいの場合、どのように説明できますか?また、この問題に関して、初期世代の CUDA デバイスと最新のデバイスとの間に違いはありますか?
cuda - 達成占有率を上げても、計算速度は直線的に向上しません。
カーネルレジスタが理論上の最大占有率を %50 に制限している CUDA プログラムがありました。そこで、ブロック スレッド間で一定であり、カーネルの実行中はほとんど読み取り専用であった変数に対して、レジスタの代わりに共有メモリを使用することにしました。ここでソース コードを提供することはできません。私がしたことは、概念的には次のようなものでした:
私の最初のプログラム:
上記のプログラムを次のように変更しました。
ブロック内のワープのスレッドがブロードキャスト読み取りを実行して、新しく作成された共有メモリ変数にアクセスするようになりました。同時に、スレッドは達成された占有を制限するためにあまり多くのレジスターを使用しません。
2 番目のプログラムでは、理論上の最大占有率が %100 に等しくなります。実際の実行では、最初のプログラムで達成された平均占有率は ~%48 で、2 回目のプログラムでは約 ~%80 でした。しかし、問題は正味速度の向上が約 %5 から %10 であり、占有率の向上を考慮して予想していたものよりもはるかに少ないことです。この相関関係が線形でないのはなぜですか?
Nvidia のホワイトペーパーの下の画像を考えると、私が考えていたのは、占有率が %50 に達した場合、たとえば、SMX (新しいアーキテクチャの場合) コアの半分が一度にアイドル状態になるということでした。これは、他のコアによって過剰に要求されたリソースがそれらを停止するためです。アクティブ。私の理解は間違っていますか?それとも、上記の現象を説明するのは不完全ですか? それとも、追加され__syncthreads();
て共有メモリアクセスのコストがかかりますか?
cuda - Kepler アーキテクチャ用のロード/ストア ユニット (LD/ST) および特殊機能ユニット (SFU)
Kepler アーキテクチャ ホワイトペーパーで、NVIDIA は、SMX に特殊32
機能ユニット (SFU) と32
ロード/ストア ユニット (LD/ST) があると述べています。
SFUは「高速近似超越演算」用です。残念ながら、これが何を意味するのか理解できません。一方、SFU 向けの特別な CUDA 倍精度三角関数では、単精度でしか機能しないと言われています。これは K20Xm でも正しいですか?
LD/ST ユニットは、もちろん保管とロード用です。論文のいずれかを通過するために必要なメモリのロード/ライトはありますか? また、それらはシングルワープとしても使用されますか? 言い換えれば、現在書き込み中または読み取り中のワープは 1 つだけでよいのでしょうか?
乾杯、アンディ
orbit - vpython) ケプラーの第 2 法則をシミュレートするには?
私はPythonを初めて使用しますが、vpythonを使用してケプラーの第2法則をシミュレートする必要があります! 私はこれまで軌道を進めてきましたが、掃引運動をコーディングする方法と、r、シータなどをコーディングする方法がわかりません。誰か助けてもらえますか?
http://en.wikipedia.org/wiki/File:Kepler-second-law.gif これは私が作りたいものです! ご協力ありがとうございました!
caching - nvprof を使用した CUDA コンピューティング機能 3.x の L2 キャッシュのプロファイリング
コンピューティング機能 3.5 の CUDA カードで L2 キャッシュのプロファイリングに問題があります。Kepler (3.x) では、グローバル メモリからのロードは L2 にのみキャッシュされ、L1 にはキャッシュされません。私の質問は、nvprof (コマンドライン プロファイラー) を使用して、グローバル ロードが L2 キャッシュで達成するヒット率を見つける方法です。収集できるすべてのメトリックを照会しましたが、L2 痛に関連するメトリックは次のとおりです。
私が得た唯一のヒット率は、L1 からの読み取りの場合です。しかし、グローバル メモリへの読み取りは、L1 にキャッシュされていないため、L1 から取得されることはありません。それとも私はここで間違っていますか?それはまさに私が望むメトリックですか?
驚くべきことに (またはそうではない)、グローバル メモリ読み取りの L1 ヒット率を示すメトリックがあります。
これはケプラーにとって非ゼロになることがありますか?
乾杯!
cuda - mpあたりのケプラーブロック?
ここのケプラーホワイトペーパーから読んで います
そのケプラーは最大 16 ブロック/mp をサポートします。
ただし、スレッド/ブロック = 1024 およびスレッド/mp = 2048 であるため、ブロック/mp = 2 です。
ここで何か不足していますか?
cuda - nvidia kepler shuffle は「破壊的」ですか?
次のような新しいケプラーのシャッフル命令を使用して、CUDA で並列削減の実装を使用しています: http://devblogs.nvidia.com/parallelforall/faster-parallel-reductions-kepler/
特定の行列の行の最小値を検索していたところ、カーネルの最後に次のコードがありました。
私のブロックは 16*16 であるため、すべてが正常に機能し、そのコードを使用して、まったく同じカーネルの 2 つのサブ行で最小値を取得していました。
ここで、マトリックスのすべての行の最小要素のインデックスも返す必要があるため、「min」を「if」ステートメントに置き換えて、これらのインデックスを同様の方法で処理するつもりでしたが、次のコードで行き詰まりました。
cudaErrors はまったくありませんが、カーネルは現在ゴミを返します。それにもかかわらず、私はそれを修正しました:
したがって、新しい tmp 変数を割り当てて隣接するレジスタに忍び込ませると、すべてが節約されます。ここで質問です: ケプラー シャッフル命令は破壊的ですか? 同じ命令を 2 回呼び出しても同じ結果は得られないという意味で。「my_reg > __shfl_down(my_reg,8,16)」と言ってこれらのレジスタに何も割り当てていません - これは私の混乱を招きます。シャッフルを2回呼び出すことの問題は何ですか?私はCUDAの初心者なので、ダミーの詳細な説明を歓迎します