問題タブ [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.
c++ - CUDA PTX JIT コンパイルを高速化する方法はありますか?
GPU で PTX サブプログラムを生成、JIT コンパイル、実行するプログラムがあります。プログラムは問題なく動作しており、実行時間もかなり良好です。CPU に対して約 500 倍のスピードアップです。問題は、コンパイルに時間がかかりすぎて、GPU の高速化がすべて消去されて速度が低下することです:)
質問は、これを行うためのより高速で効率的な方法はありますか? 一部のリソースを再利用して、プロセスをよりストリームのようにすることはできますか?
編集: 各 PTX プログラムは 1 回だけ実行され、それらはすべて非常に異なるため、JIT キャッシュは何のメリットもありません。
これは私のコードで、nvidia が提供するサンプル JIT アプリとほぼ同じです。
cuda - CUDA Funnel Shift コード生成
64 ビット整数を使用する場合、CUDA は SM35 でファンネル シフト命令を内部的に生成しますか? 私のカーネルは、通常のshl.b64命令を示す PTX への SM35 ターゲットでコンパイルされます。この PTX 出力はまだ完全には最適化されておらず、モジュールが読み込まれると ( cuModuleLoad ) ネイティブ アーキテクチャ コードが生成されることは承知しています。
opencl - OpenCL Nvidia コンパイラ (nvcc) がレジスタを 2 回使用しないのはなぜですか?
Nvidia ドライバーを使用して小さな OpenCL ベンチマークを実行しています。私のカーネルは 1024 個のヒューズ乗算加算を実行し、結果を配列に格納します。
しかし、生成された PTX を見ると、次のように表示されます。
私が正しければ、PTX は1026個の float レジスタを使用して 1024 個の演算を実行し、2 つのレジスタのみを使用してすべての乗加算演算を実行できたとしても、レジスタを 2 回再利用することはありません。1026 は、(仕様によると) スレッドが持つことができるレジスタの最大数をはるかに超えているため、これはメモリの流出につながると思います。
それはコンパイラのバグですか、それとも完全に何かが欠けていますか?
Quadro K2000 GPU で nvcc バージョン 6.5 を使用しています。
編集
実際、私は仕様で何かを見逃していました:
「PTX は仮想レジスタをサポートしているため、コンパイラ フロントエンドが多数のレジスタ名を生成することは非常に一般的です。すべての名前の明示的な宣言を必要とするのではなく、PTX は、共通のプレフィックス文字列が追加された一連の変数を作成するための構文をサポートしています。整数サフィックス。たとえば、プログラムが %r0、%r1、...、%r99 という名前の .b32 変数を多数、たとえば 100 個使用しているとします。
c++ - Cuda PTX レジスタの宣言と使用
カーネルで使用するレジスタの数を減らそうとしているので、インライン PTX を試すことにしました。
このカーネル:
14 個のレジスタを使用すると、これは必要以上のものになると考えられるため、Inline PTX と記述します。
しかし、このカーネルも 14 個のレジスタを使用します! 私は少し混乱しています。10 個のレジスタのみを宣言しました。ptx ファイルには他の変数はありません。どうすればこの状況を解決できますか?
cuda - prefetch と prefetchu ptx 命令の違いは何ですか?
ここのドキュメントではprefetch
、prefetchu
ptx 命令は「指定された状態空間内の指定されたレベルのメモリ階層にあるジェネリック アドレスを含む行をプリフェッチする」と記載されています。構文が
uniform cache
ここで言及されていることを知りたいです。構文 (2 行目) では、データが L1 にプリフェッチされることを指定していますか? L1にもプリフェッチできる命令があるのにprefetchu
冗長じゃない?prefetch
たとえば、以下のコード行の違いは何ですか?
cuda - CUDA の基本ブロック
CUDA ソース コードの基本ブロック情報を表示する方法はありますか? CUDAコードをコンパイルして、出力がすべての基本ブロックがリストされたファイルになるようにしようとしています。しかし、これまでのところ、それを可能にするオプションを nvcc で見つけることができませんでした。
IR (PTX) から基本ブロック情報を抽出できれば、それも役立ちます。