問題タブ [ptxas]
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 に実装したいと思います。
アトミック関数でこれを行うことができるとは思いません。いくつかの命令のために、いくつかのグローバル メモリ loc をロックダウンする必要があります。これを PTXAS (アセンブリ) コードで実装できますか?
gcc - PTX 出力による NVCC 個別コンパイル
CUDA が生成するコードの種類を確認するために、オブジェクト ファイルに加えて ptx にコンパイルするのが好きです。ループの展開にはかなりの時間がかかることがあるため、→ *.cu
< *.cu
code>*.ptxと*.cu
→< code>*.o、現在行っています。
行に追加-ptx
するだけnvcc *.cu
で、目的の ptx 出力が得られます。
を使用ptxas -c
してコンパイルする*.ptx
と*.o
動作しますが、実行可能リンクでエラーが発生します: Relocations in generic ELF (EM: 190)
.
*.ptx
withをコンパイルしようとすると、黙っnvcc
て失敗し、何も出力されません。
渡す必要があるオプションはありますptxas
か?別のコンパイルでptx経由で適切にコンパイルするにはどうすればよいですか? nvcc
または、 ptx を保持するように指示できますか?
c++ - CUDA: --ptxas-options=-v 共有メモリと cudaFuncAttributes.sharedSizeBytes が一致しません
reqRegs
構造体でandを使用しsharedSizeBytes
て、cudaFuncAttributes
実行時にカーネルのブロック サイズを動的に最適化しようとしています。
nvcc --ptxas-options=-v
私の現在の実装では、カーネルのレジスタと共有メモリの使用状況を発見するために stdout テキストをざっと読みます。このメソッドは少しハックで、 からの出力テキストの正確な形式に依存しており、--ptxas-options=-v
警告なしに変更される可能性があります。
私の問題は、--ptxas-options=-v
出力で報告されsharedSizeBytes
た「smem」共有メモリ値と構造体で不一致が見られることですcudaFuncAttributes
。これにより、これまで使用してきた共有メモリの見積もりが間違っているか、sharedSizeBytes
つまり、ランタイム ブロック サイズの最適化の目的で使用することはできません。nvcc --ptxas-options=-v
これは、そのようなカーネルの 1 つの出力です ...
cudaFuncAttributes.sharedSizeBytes
...まったく同じカーネルの実行時の = 296 の値と比較。ここで何が起こっているのか知っている人はいますか?
別のカーネルを使用した別の例を次に示します。
ここcudaFuncAttributes.sharedSizeBytes
で、実行時に = 340 です。
ありがとう。
cuda - nvcc がこの単純な協同組合プログラムへのリンクを拒否するのはなぜですか?
という名前のファイルにある次の CUDA プログラムについて考えてみましょうfoo.cu
。
このプログラムはあまり機能しませんが、有効なプログラムです (計算能力がグリッド全体を協調グループとしてサポートするのに十分な場合)。リンクをコンパイルして実行する必要があります。しかし、私はこれを取得します:
びっくり!-l
特定の-L
フラグを追加しても役に立ちません。たとえば、次のようになります。
なぜこうなった?そして、nvcc コマンドラインをどのように変更して、未解決のシンボルを見つけられるようにすればよいでしょうか?
ノート:
- Devuan GNU/Linux 3.0 を使用しています。
- CUDA 10.1 はディストリビューション パッケージとしてインストールされるため、そのライブラリは の下にあり
/usr/lib/x86_64-linux-gnu
ます。 - GeForce 1050 Ti カードを搭載した x86_64 マシン。