[기본] Visual Studio에서 CUDA 디버깅 하기
CUDA를 이용하여 개발을 하다 보면 익숙하지 않은 동작과 환경 때문에 어려움이 많습니다. 그래서 C++에서 디버깅하던 방식 그대로 Breakpoint를 걸어서 내가 원하는 값의 상태를 보면 좋겠다는 생각을 많이 하게 될 것입니다. 그래서 이번 글에서는 Nsight Visual Studio Edition을 이용하여 간단하게 디버깅 하는 법을 공유해볼까 합니다.
먼저 CUDA를 디버깅 하기 위해서는 Nvidia의 Nsight가 설치되어 있어야 합니다.
(아래의 링크에서 설치 줍니다.)
https://developer.nvidia.com/nsight-visual-studio-edition
NVIDIA Nsight Visual Studio Edition
For compute developers working in Eclipse development environment, please see Nsight Eclipse Edition NVIDIA® Nsight™ Visual Studio Edition is an application development environment for heterogeneous platforms which brings GPU computing into Microsoft Vi
developer.nvidia.com
그리고 Visual Studio에서 CUDA를 디버깅 하기 위해서는 기본적으로 아래의 옵션이 Yes로 등록되어 있어야 합니다.
만약 CMake로 빌드한다면, 아래 처럼 CMakeLists.txt에서 설정할 수 있습니다.
하지만, 다른 점이 있다면 kernel 함수에 Breakpoint를 걸 수 있고 해당 지점에서 멈춘다는 점입니다.
이때 Breakpoint가 걸린 상태에서 Extensions > Windows를 클릭하면 아래 처럼 다양한 정보 창들을 선택하여 볼 수 있습니다.
저는 디버깅을 할 때 Warp Watch와 Lanes 창을 주로 사용합니다.
Lanes는 거의 Thread Index를 보는데 사용하고, 나머지 디버깅을 위해 값을 확인하는 작업은 Warp Watch를 활용합니다.
아래의 이미지 처럼 Breakpoint시점에 Warp내 값들을 조회해 보면서 현재 계산이 정상적으로 이루어지는지 확인해 볼 수 있습니다.
그 밖에도 Warp Info, Resources, GPU Registers와 같은 정보 창도 존재하는데, 해당 창의 사용법은 위의 Nividia Nsight 홈페이지에서 쉽게 확인할 수 있습니다.