Computing

CUDA PTX - 1 : Introduction 본문

가속기 Accelerator/GPU

CUDA PTX - 1 : Introduction

jhson989 2022. 3. 19. 13:26

PTX (or PTX ISA)

이 포스트는 CUDA PTX (Parallel Thread Execution)에 대하여 정리한다. 다음 자료[1]를 참고하였다.

 

CUDA PTX는 a low-level parallel thread execution virtual machine and instruction set architecture (ISA)를 의미한다. .cu file을 컴파일 해서 나오는 GPU를 작동 시키는 ISA라고 생각할 수 있다. nvcc는 CUDA kernel code를 PTX instruction으로 컴파일한다. 컴파일된 PTX instruction은 GPU driver 내에 있는 또 다른 compiler에 의해 binary code로 번역되어 GPU를 작동시킨다.

 

ISA를 공개한다는 것은 low-level device architecture를 공개하는 것과 같다고 한다. 그렇기에 NVIDIA는 GPU driver가 생성하는 instruction은 공개하지 않고, device에 독립적인 PTX ISA만을 공개한다. 이러한 방식은 또 다른 장점이 있는데, CPU와는 달리 GPU 기술은 아직 거의 표준이 된 ISA가 없고 (NVIDIA, Intel, AMD, Qualcomm이나 각자만의 GPU 구조를 가지고 있으며, NVIDIA 제품 내에서도 pascal, volta, turing, ampere로 거치면 계속 디자인이 변경됨), GPU architecture는 계속 진화하기에 (ex, tensor code 추가 등) 이렇게 device 독립적인 PTX ISA만 공개하고 이를 device driver가 각자 device에 맞게 한 번 더 컴파일한다. (구체적인 .cu -> binary code 컴파일 과정은 다음에 정리해봐야지)

 

정리하자면 PTX는 virtual assembly이다.

  • Runtime 시 실제 GPU에서 돌아가는 machine code로 번역된다.
  • 따라서 Hardare implementation이 달라져도 동일한 PTX ISA를 사용할 수 있다.

 

 

 

Inline PTX assembly

CUDA는 inline PTX assembly를 지원하기에, CUDA kernel를 CUDA C로 작성하는 것뿐만 아니라 PTX로 작성하는 것도 가능하다. C++ asm("")를 사용해서 assembler statement를 추가하는 것이 가능하듯이 CUDA C도 asm("") 구문을 사용해서 assembler statement을 코드 내에 추가할 수 있다. 또한 NVCC 컴파일러에서 옵션을 --ptx를 주면 CUDA C로 작성된 kernel 코드를 PTX instruction으로 컴파일하여 보여준다. 

https://docs.nvidia.com/pdf/Inline_PTX_Assembly.pdf

 

 

PTX matmul example

PTX로 matrix multiplication 예제를 구현하고 있다. PTX로 작성한 코드 예제가 별로 없어 최적화된 코드 구현은 아직 어렵지만 점점 업데이트될 예정이다.

https://github.com/jhson989/cuda-ptx

 

GitHub - jhson989/cuda-ptx: Inline PTX Assembly in CUDA example

Inline PTX Assembly in CUDA example. Contribute to jhson989/cuda-ptx development by creating an account on GitHub.

github.com

 

 

Reference

[1] https://docs.nvidia.com/cuda/parallel-thread-execution/index.html