🦁
CUDA PTX Compiler API では sm version を実行環境に合わせないと実行できない
PTX Compiler API で, ptx を gpu bin(elf 形式)にホスト側(ドライバではなくユーザーの app 側)でコンパイルできますが, コンパイルしたコードを実行するとき, sm version は実行する GPU のバージョン(アーキ)に合わせないとダメでした.
バージョンが合わないと, コンパイルしたバイナリを cuModuleLoadDataEx でロードするときに CUDA_ERROR_INVALID_SOURCE エラーが出ます.
ドキュメントには CUDA_ERROR_INVALID_SOURCE が帰り値には列挙されていないのでややこしい.
--gpu-name 複数指定はできず, --gpu-name=sm_70,sm_80 みたいにコンマ区切りで複数も指定できないので, fat binary(複数アーキ混在) な elf は直接には作れない模様.
PTX compiler API で JIT compile する場合, --gpu=name は実行 GPU のアーキを指定してあげる必要があります.
cubin のバイナリ(assembly)は上位互換あるのかと思っていましたが(sm_70(Volta)でコンパイルしたコードは sm_80(Ampere)でも動く), そうではありませんでした.
Discussion