CS/CUDA

[CUDA] CUDA to PTX(intermediate language) compilation with Visual Studio

아이스얼그레이 2022. 5. 10. 19:55

졸업프로젝트를 하면서 CUDA language를 건들이게 되었습니다.

 

졸업프로젝트의 목표가 GPGPU 설계인데, GPGPU를 검증하려면 instruction을 넣어서 제대로 동작하는지 확인해야합니다. 그런데 machine language를 직접 써서 넣을 수는 없으니 compiler를 통해서 변환하는 과정을 거쳐야합니다.

 

CUDA syntax에 대해서는 따로 게시물을 만들 생각입니다.

CUDA ➡ PTX ➡ GPU assembly ➡ machine language

이렇게 3번의 변환을 거쳐야 저희 조가 설계할 GPGPU가 알아먹는 machine language가 됩니다.

 

우선 Visual Studio에서 CUDA runtime project를 만들어 줍니다.

 

프로젝트를 만들면 위와 같이 default CUDA 파일이 들어있습니다. 이 CUDA 파일이 의미하는 내용은 정확히는 모르겠지만, array a와 array b를 parallel로 더해주는 코드인 것 같습니다.

 

이제 PTX로 변환하는 과정을 알아보겠습니다.

 

먼저 솔루션 탐색기에서 project인 CudaRuntime1을 우클릭하고 속성을 클릭해줍니다.

 

그럼 이런 창이 뜨는데요. CUDA C/C++ ➡ Common 으로 이동합니다.

 

여기서 5가지 설정을 바꿔야합니다.

 

1. Compiler Output을 $(ProjectDir)cuda\%(Filename).ptx로 바꿔줍니다.

이 과정이 핵심입니다. 이 설정을 바꾸면 프로젝트가 있는 위치에서 cuda라는 폴더에 .ptx 확장자로 compiler output을 저장해줍니다.

 

빌드되어 나오는 중간파일을 지우지 않고 유지할지의 설정입니다.

 

3. Keep Directory를 $(ProjectDir)cuda로 바꿔줍니다.

 

4. NVCC Compilation Type을 Generate device-only .ptx file(-ptx)로 선택해줍니다.

NVCC는 NVIDIA's CUDA Compiler의 약자인데, cuda를 어떤 type으로 compile 해줄지 결정합니다.

저는 .ptx 파일이 필요하기 때문에 위 옵션을 선택했습니다. device-only는 무슨 의미인지 모르겠네요.

 

5. Target Machine Platform은 64-bit(--machine 64)로 설정해줍니다.

 

 

추가적으로 왼쪽 위의 구성을 Debug로 바꾸고 CUDA C/C++ ➡ Device 로 이동합니다.

​Generate GPU Debug information을 아니요로 바꿉니다. 정확한 이유는 모르지만 저 설정을 예로 해두면 ptx 파일이 유효하지 못한 소스라고 합니다.

 

그리고나서 솔루션 빌드를 하면 위에서 설정한 CudaRuntime1\cuda 에 .ptx 파일이 저장됩니다.

 

위와 같이 NVVM Compiler에 의해 .cu 파일이 .ptx로 변환된 것을 확인할 수 있습니다.

'CS > CUDA' 카테고리의 다른 글

[CUDA] CUDA(.cu) to SSAS(GPU assembly) compilation with Visual Studio  (0) 2022.05.17