PTX(Parallel Thread Execution)는 NVIDIA GPU의 가상 ISA(명령어 집합 아키텍처)이다. CUDA 코드가 GPU에서 실행되려면 여러 단계의 컴파일을 거치는데, PTX는 그 중간 표현에 해당한다. Java의 바이트코드와 비슷한 위치다.
- CUDA C++ (.cu) → nvcc 프론트엔드가 컴파일
- PTX (.ptx) → 가상 어셈블리. 특정 GPU에 종속되지 않는다
- SASS → ptxas가 PTX를 변환한 실제 GPU 기계어. sm_75, sm_89 같은 특정 아키텍처에 종속된다
- cubin/fatbin → GPU 실행 바이너리. fatbin은 PTX와 SASS를 함께 묶어둔 것으로, 런타임에 맞는 SASS가 있으면 그걸 쓰고 없으면 PTX를 JIT 컴파일한다
PTX 버전과 CUDA 버전
Section titled “PTX 버전과 CUDA 버전”PTX 버전은 CUDA 버전에 대응된다.
- CUDA 12.0 → PTX ISA 8.0
- CUDA 12.4 → PTX ISA 8.4
- CUDA 12.8 → PTX ISA 8.8
상위 CUDA 런타임은 하위 PTX를 JIT 컴파일할 수 있다. 반대 방향은 안 된다. 하위 CUDA 런타임이 상위 PTX를 만나면 모르는 명령어가 있어서 실패한다. PTX 인라인 어셈블리를 직접 쓰는 커스텀 커널(예: vLLM의 Marlin 커널)은 이 문제에 특히 민감해서, 빌드 환경과 실행 환경의 CUDA 버전이 다르면 커널 로드가 깨질 수 있다.
참고