LoginSignup
1

More than 3 years have passed since last update.

PTX Compiler API のメモ

Posted at

CUDA 11.1 から, (ひっそりと) PTX compiler API が追加されました.

PTX のコンパイルをドライバ側ではなく, Toolkit ライブラリ側で行います.
(ドライバ側でコンパイルだと, 古いドライバだと最新の PTX 機能が使えないなどがあるとドキュメントにあります)

PTX compiler API 自体は static library です. 自前アプリに組み込んで配布が可能となります.

コンパイルされた elf バイナリが取得できるので, 自前でキャッシュ関連の実装が必要ですが, PTX JIT compile 結果のキャッシュができるようになります.

使い方

CUDA Toolkit の samples にサンプルコードがなくてつらいです :cry:

API はそんなに多くないので, ドキュメントにあるサンプルコードで事足りるでしょうか.
とりあえずサンプルコードが動くのを確認しました.

PTX Compiler API 自体は CUDA API に依存していないので, PTX compile 自体だけなら cuda 関連のヘッダのインクルードやライブラリのリンクは不要です.
Linux の場合, 最低限 pthreads と libm のリンクが必要です.

再配布可能なライセンス

https://docs.nvidia.com/cuda/eula/index.html

にあるように, libnvptxcompiler_static.a は, (自身のアプリに組み込んで)再配布可能になっています.
(cudart.dll など動的ライブラリも実は再配布可能なのですね)

CUDA -> PTX の作成

PTX compile をクライアント側で処理するなら, cu -> PTX も NVRTC や nvcc とかではなく自前で JIT コンパイルしたくなりますね.

Clang で CUDA コードを NVPTX に変換するメモ
https://qiita.com/syoyo/items/4e60543aded0210fde49

libclang を使えば, libcuda 非依存で, 自前アプリに .cu -> .ptx の JIT コンパイル機能も追加できるはずです!

libClang/LLVM で C++ コードの JIT コンパイルを行う.
https://qiita.com/syoyo/items/486ce53a0dd7a8c73d71

CUDA C++ STL?

libcxx をベースにした CUDA 用の C++ Standard Library があります.
が, 現状提供されているのは atomic とかだけです.

std::vector とかのコンテナは提供されていないため, C++ STL 相当すべてが使えるわけではないことに注意ください.

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1