問題タブ [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.

0 投票する
1 に答える
1742 参照

c++ - CUDA PTX JIT コンパイルを高速化する方法はありますか?

GPU で PTX サブプログラムを生成、JIT コンパイル、実行するプログラムがあります。プログラムは問題なく動作しており、実行時間もかなり良好です。CPU に対して約 500 倍のスピードアップです。問題は、コンパイルに時間がかかりすぎて、GPU の高速化がすべて消去されて速度が低下することです:)

質問は、これを行うためのより高速で効率的な方法はありますか? 一部のリソースを再利用して、プロセスをよりストリームのようにすることはできますか?

編集: 各 PTX プログラムは 1 回だけ実行され、それらはすべて非常に異なるため、JIT キャッシュは何のメリットもありません。

これは私のコードで、nvidia が提供するサンプル JIT アプリとほぼ同じです。

0 投票する
1 に答える
749 参照

cuda - CUDA Funnel Shift コード生成

64 ビット整数を使用する場合、CUDA は SM35 でファンネル シフト命令を内部的に生成しますか? 私のカーネルは、通常のshl.b64命令を示す PTX への SM35 ターゲットでコンパイルされます。この PTX 出力はまだ完全には最適化されておらず、モジュールが読み込まれると ( cuModuleLoad ) ネイティブ アーキテクチャ コードが生成されることは承知しています。

0 投票する
1 に答える
457 参照

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 個使用しているとします。

0 投票する
1 に答える
880 参照

c++ - Cuda PTX レジスタの宣言と使用

カーネルで使用するレジスタの数を減らそうとしているので、インライン PTX を試すことにしました。

このカーネル:

14 個のレジスタを使用すると、これは必要以上のものになると考えられるため、Inline PTX と記述します。

しかし、このカーネルも 14 個のレジスタを使用します! 私は少し混乱しています。10 個のレジスタのみを宣言しました。ptx ファイルには他の変数はありません。どうすればこの状況を解決できますか?

0 投票する
1 に答える
728 参照

cuda - prefetch と prefetchu ptx 命令の違いは何ですか?

ここのドキュメントではprefetchprefetchuptx 命令は「指定された状態空間内の指定されたレベルのメモリ階層にあるジェネリック アドレスを含む行をプリフェッチする」と記載されています。構文が

uniform cacheここで言及されていることを知りたいです。構文 (2 行目) では、データが L1 にプリフェッチされることを指定していますか? L1にもプリフェッチできる命令があるのにprefetchu冗長じゃない?prefetchたとえば、以下のコード行の違いは何ですか?

0 投票する
1 に答える
574 参照

architecture - アーキテクチャ内の NVPTX 汎用メモリ空間の場所

CUDA プログラムの NVPTX(LLVM IR) には、0 から 5 までのメモリ アドレス空間の識別子があります (下の表を参照)。

ここに画像の説明を入力

同じ LLVM IR プログラムで見たのですが、メモリ アドレスは、図に示すように「ジェネリック」またはその他のタイプとして識別されます。

「汎用」の場合 (デフォルトでは、識別子はありません): ここに画像の説明を入力

共有対象': ここに画像の説明を入力

私の質問は、汎用メモリ アドレス空間の場合、データは実際にはハードウェア、オフチップ、オンチップ メモリ、またはローカル レジスタのどこにあるのでしょうか? 一般的なタイプのアドレス空間が最終的にどのように管理されるかを誰か説明できますか?

0 投票する
1 に答える
141 参照

cuda - CUDA の基本ブロック

CUDA ソース コードの基本ブロック情報を表示する方法はありますか? CUDAコードをコンパイルして、出力がすべての基本ブロックがリストされたファイルになるようにしようとしています。しかし、これまでのところ、それを可能にするオプションを nvcc で見つけることができませんでした。

IR (PTX) から基本ブロック情報を抽出できれば、それも役立ちます。