問題タブ [ptx]
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 - Nvidia の NVCC コンパイラで複数の「arch」フラグを使用する目的は何ですか?
私は最近、NVCC がさまざまなコンピューティング アーキテクチャ用に CUDA デバイス コードをコンパイルする方法に頭を悩ませています。
私の理解では、NVCC の -gencode オプションを使用する場合、"arch" はプログラマーのアプリケーションに必要な最小の計算アーキテクチャであり、NVCC の JIT コンパイラが PTX コードをコンパイルする最小のデバイス計算アーキテクチャでもあります。
また、-gencode の「コード」パラメータは、NVCC がアプリケーションを完全にコンパイルする計算アーキテクチャであるため、JIT コンパイルは不要であることも理解しています。
さまざまな CUDA プロジェクトの Makefile を調べたところ、次のことが定期的に発生していることに気付きました。
いくつか読んだ後、1 つのバイナリ ファイル (この場合は sm_20、sm_21) で複数のデバイス アーキテクチャをコンパイルできることがわかりました。
私の質問は、なぜそんなに多くのアーキテクチャ/コードのペアが必要なのですか? 「arch」のすべての値が上記で使用されていますか?
それと言うの違いは何ですか:
「アーチ」フィールドで最も初期の仮想アーキテクチャが自動的に選択されていますか、それとも他のあいまいな動作がありますか?
他に注意すべきコンパイルおよび実行時の動作はありますか?
http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#gpu-compilationのマニュアルを読みましたが、コンパイルまたは実行時に何が起こるかについてはまだ明確ではありません。
cuda - PTX - CTA とは?
PTX を勉強していますが、CTA (計算スレッド配列) と CUDA ブロックの違いがわかりません。
それらは同じものですか?今のところ (私は PTX ドキュメントの冒頭にいるだけです)、それらはまったく同じであるように思えます
cuda - PTX - .reg レジスタはどこにありますか?
.reg
レジスタを宣言するために使用するとき..それらはどこにありますか?
つまり.reg
、デバイス関数内でレジスタを使用すると、各スレッドが持つレジスタファイルに格納されます...しかし.reg
、モジュール内の変数をグローバルスコープ(.global
単にグローバルスコープではなく)で宣言するとどうなりますか?
cuda - CUDAでunsigned long longにキャストするタイプ?
基本的に私が欲しいのは、hiloint2uint64() のように機能する関数で、2 つの 32 ビット整数を結合し、結果を uint64 として再解釈するだけです。
CUDA でこれを実行できる関数が見つかりません。とにかく、そのような型キャストを実行できる ptx コードはありますか?
cuda - 逆アセンブルされた CUDA マイクロコードの明らかに冗長な操作
in
グローバル メモリ マトリックスへのグローバル メモリマトリックスの単純な割り当てを実行する次のカーネルがありますout
。
によってダンプされた逆アセンブルされたマイクロコードを調べていcuobjdump
ます:
逆アセンブルされたコードの上または横のコメントは私自身のものです。
ご覧のとおり、明らかに役に立たない???
操作がいくつかあり、コメントででマークさ れています。本質的に、それらはレジスター自体への移動です。
次に、次の2つの質問があります。
- それらが役に立たない場合、それらは無駄に計算時間を消費していると思います。逆アセンブルされたマイクロコードを削除して最適化できますか?
- PTX ファイルは、CUDA コードでインライン化できます。ただし、PTX は、GPU 間の移植性に必要な中間言語にすぎません。最適化された逆アセンブルされたマイクロコードをどうにかして「インライン化」できますか?
事前にどうもありがとうございました。
編集: SM = 2.0 のリリース モードでコンパイルされた同じコード
編集:SM = 2.1のリリースモードでコンパイルされた同じコード
cuda - 実行時に CUDA カーネルを生成、コンパイル、実行する方法
さて、私はかなりデリケートな質問があります:)
私が持っているものから始めましょう:
- Data、データの大規模な配列、GPU にコピー
- Program、CPU (ホスト) によって生成され、その配列内のすべてのデータについて評価する必要があります
- プログラムは非常に頻繁に変更され、CUDA 文字列、PTX 文字列、またはその他 (?) として生成される可能性があり、変更のたびに再評価する必要があります。
私が欲しいもの:基本的には、これをできるだけ効果的(高速)にしたいだけです。CUDA から PTX へのコンパイルを回避します。ソリューションは完全にデバイス固有であってもかまいません。ここでは大きな互換性は必要ありません:)
私が知っていること:ファイルに保存された PTX コードからカーネルをロードおよび作成できる関数cuLoadModuleを既に知っています。しかし、最初にファイルに保存せずに、カーネルを直接作成する方法が他にあるに違いないと思います。あるいは、バイトコードとして保存することは可能でしょうか?
私の質問: どうやってそれをしますか? 例を投稿するか、同様のトピックの Web サイトへのリンクを投稿していただけますか? タイ
編集: OK、PTX カーネルはPTX文字列 (文字配列) から直接実行できます。とにかく、私はまだ疑問に思っていますが、これに対するより良い/より速い解決策はありますか? 文字列から一部の PTX バイトコードへの変換がまだありますが、これはおそらく回避する必要があります。また、PTX からデバイス固有の Cuda バイナリを作成する巧妙な方法が存在するのではないかと考えています。これにより、JIT コンパイラのラグが解消されます (小さいですが、実行するカーネルが膨大な数に達すると、合計される可能性があります) :)