問題タブ [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 に答える
2282 参照

assembly - CUDA/GPU での SASS 解析結果の見方

CUDA Binary Utilities の 1 つである cuobjdump を使用して SASS コードを生成しました。サンプルの結果は次のとおりです。これらのコードは、グローバル メモリからロードしようとします。

  1. 各命令の意味を説明する SASS コードの完全なマニュアルはどこで入手できますか。「cuda binary utility」では、命令の意味の一般的な説明のみを提供します。たとえば、「R1.cc」、「IMAD.HI.X」、および LD.e の意味を説明していません。

  2. 2番目の指示の意味. 最初の命令は各スレッドがロードするメモリアドレスを計算することであり、3番目の命令はグローバルメモリをレジスタにロードすることだと思います。2番目の指示の意味がわかりません。

  3. cuda は、グリッド サイズ、ブロック サイズ、配列のベース アドレスなどのパラメータ情報を定数メモリに保存していると思います。この場合、c[0x0][0x20] は配列のベースアドレスです。私の質問は、どうすればそれらの情報を取得できるかです。

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

cuda - CUDA PTX f32.f32 テクスチャ読み取り

浮動小数点インデックスを直接使用して CUDA テクスチャから読み取ることは可能ですか?たとえば、tex.1d.v4.f32.f32.

これにより、ファイルを見ると 2 つの命令が節約されているように見え.ptx、これはベンチマーク時のパフォーマンスの向上に反映されています。ただし、かなり重大な欠点は、これが問題なく実行されているように見えても、望ましい結果が得られないことです。

以下のコードは、この問題を示しています。

いくつかのカード (K40、C2070) といくつかの CUDA バージョン (6.0、7.0) でこれを試しましたが、すべて同じ出力が得られます。

これは可能ですか、それとも間違ったツリーを吠えていますか?

0 投票する
0 に答える
166 参照

assembly - Cudaの同じレジスタへの「冗長な」移動操作

CUDA SASS コードを表示していて、同じレジスターへの大量の移動操作に気付きました。元:

これらの移動操作の目的は何ですか? それはタイミングのためであり、彼らは「ノー」のように振る舞いますか、それともそれほど明白ではありませんか?

注: これらは PTX コードには含まれず、SASS のみに含まれます。I と assume は、PTX 操作中ではなく、操作の合間に使用されます。ただし、文脈上、PTX は次のとおりです。

実際のc++コードは、上記の ptx のインライン アセンブリです。

更新: を使用してコンパイルされ、Cuda Toolkit 7.5 を使用sm_52compute_52x64Visual Studio 2013 でコンパイルされました。デバイス: GTX 970 (Maxwell GPU)。

Debugからに切り替えると、Releaseこの非効率性が解消されます。

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

cuda - Cuda符号付き128ビット乗算エラー

符号付き整数を使用して cuda PTX で 128 ビットの符号付き乗算を行うときに問題を発見したと思います。ここに私のサンプルコードがあります:

これにより、結果が生成されresult_lo = 0x0, result_hi = 0x0ます。ただし、これは結果を生成します。これは、間違いがなく、明らかにゼロでない場合result_lo = 0x0, result_hi = 0xFFFFFFFFFFFFFFFFの実際の値です。2^127 - (2^126 - 1)

まず、私の理解が正しいことを確認したいのですが、これを回避する方法はありますか?

更新Debugmod からモードに変更するReleaseと、この問題が修正されますが、これは cuda のバグなのかどうかまだ疑問に思っていますか?

Update 2 このバグを NVIDIA に報告しました

x64 DebugVisual Studio 2013でCuda ツールキット 7.5 を使用しましsm_52compute_52

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

cuda - CUDA: -arch と -code および SM と COMPUTE の使用方法

nvcc でビルドするときに、コード生成用のアーキテクチャを適切に指定する方法がまだわかりません。マシン コードと PTX コードがバイナリに埋め込まれており、これはコントローラー スイッチ-code-arch(または を使用して両方の組み合わせ-gencode) を介して制御できることを認識しています。

これによれば、2 つのコンパイラ フラグsm_XXとは別に、アーキテクチャを指定する 2 つの方法もありcompute_XXます。フラグは仮想アーキテクチャ ( など) の識別子のみを取得しますが、フラグは実際のアーキテクチャと仮想アーキテクチャの両方の識別子を取得します。compute_XXsm_XX-archcompute_XX-code

ドキュメントには-arch、入力ファイルがコンパイルされる仮想アーキテクチャを指定することが記載されています。ただし、この PTX コードはマシン コードに自動的にコンパイルされるのではなく、むしろ「前処理ステップ」です。

では-code、PTX コードがアセンブルおよび最適化されるアーキテクチャを指定することになっています。

ただし、どの PTX またはバイナリ コードがバイナリに埋め込まれているかは明確ではありません。たとえば を指定した場合-arch=compute_30 -code=sm_52、コードは最初に機能レベル 3.0 PTX にコンパイルされ、その後、機能レベル 5.2 のマシン コードが作成されるということですか? そして、何が埋め込まれますか?

何が起こるかを指定した場合はどうなります-code=sm_52か?V5.2 PTX コードから作成された V5.2 用のマシン コードのみが組み込まれますか? との違いは-code=compute_52何ですか?

0 投票する
2 に答える
686 参照

cuda - CUDA - PTX キャリー伝搬

CUDA PTX に 2 つの 32 ビット符号なし整数を追加したいのですが、キャリーの伝播も処理したいと考えています。以下のコードを使用してそれを実行していますが、結果は期待どおりではありません。
ドキュメントによると、add.cc.u32 d, a, bは整数加算を実行し、キャリーアウト値を条件コード レジスタに書き込みますCC.CF
一方、キャリーインでaddc.cc.u32 d, a, b整数加算を行い、キャリーアウトした値をコンディションコードレジスタに書き込みます。この命令のセマンティクスは. 私も違いなしで試しました。
d = a + b + CC.CFaddc.u32 d, a, b

私の知る限り、結果が変数に収まらない場合はキャリーが発生します。これはここで発生し、符号ビットが破損している場合はオーバーフローしますが、符号なしの値で作業しています。
上記のコードは に追加しようとして0xFFFFFFFFいます0x2が、もちろん結果は 32 ビットに適合しません。なぜ__uaddc(0,0)呼び出し後に 1 を取得しないのですか?

編集

Nvidia Geforce GT 520mx
Windows 7 Ultimate、64 ビット
Visual Studio 2012
CUDA 7.0

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

cuda - PTX コードのパフォーマンス

私は CUDA (悪くはない) を知っていますが、 PTXを知らないので、私の質問は次のとおりです。

  • ptx コードを学習すると、gpu (CUDA) コードのパフォーマンスが向上しますか?
  • はいの場合、パフォーマンスを向上させるために CUDA コードと組み合わせることができる ptx コードを作成する方法はありますか?