定義:
PTXは,CUDAコンパイラ[nvcc]によって生成され,実際にGPU上で実行される前にJIT[Just-In-Time]コンパイルによって最終的なGPUの機械語であるSASS[Streaming Assembly]に変換される.
PTXはCPUにおけるLLVM IRのような役割を担い,特定のGPUアーキテクチャ[Ampere, Hopper, Ada Lovelace]に依存しない仮想命令セットである.
NVIDIAのCUDA Toolkitには,PTXを扱うためのコンパイラやデバッガが含まれている.
例えば,CUDA C/C++ からPTXを生成する場合,以下のように nvcc を用いる.
nvcc -ptx my_kernel.cu -o my_kernel.ptx
中国のDeepSeekはNvidiaの高性能品が輸出規制を受ける中で,Nvidiaが中国向けに性能を落としたH800を2,048個の性能を最大限に引き出すために,PTXを用いて132基あるストリーミングマルチプロセッサー[SM]のうち20基を通信やデータ圧縮専用に割当て,GPU間転送の高速化やワープ単位のスケジューリングや圧縮アルゴリズムといったチューニング実施を実施し,Mixture of Experts方式の大規模モデルのボトルネックを解消したとされている.OpenAIのo1[2024-09公開.Strawberry]と同等性能を有しながら開発費約560万ドルのDeepSeek-R1[2025-01-20公開]の開発の背景にはPTXがあったのである.
ツール | 役割 |
nvcc | CUDAコード[.cu]をPTX[.ptx]にコンパイルする. |
ptxas | PTX[.ptx]をSASS[GPUの機械語]にアセンブルする. |
cuobjdump | PTX/SASSコードの逆アセンブルを行う. |
cuda-gdb | CUDAデバッガ.PTXコードのデバッグもできる. |
Mathematics is the language with which God has written the universe.