GPU(그래픽 처리 장치)에서 실행되는 C++ 코드를 디버그할 수 있습니다. Visual Studio의 GPU 디버깅 지원에는 경합 감지, 프로세스 시작 및 연결, 디버깅 창 통합이 포함됩니다.
지원되는 플랫폼
디버깅은 Windows 7, Windows 8, Windows 10, Windows 11, Windows Server 2008 R2, Windows Server 2012 및 Windows Server 2016에서 지원됩니다. 소프트웨어 에뮬레이터, Windows 8, Windows 10, Windows 11 또는 Windows Server 2012에서 디버깅하려면 Windows Server 2016이 필요합니다. 하드웨어에서 디버깅하려면 그래픽 카드용 드라이버를 설치해야 합니다. 모든 하드웨어 공급업체가 모든 디버거 기능을 구현하는 것은 아닙니다. 제한 사항은 공급업체 설명서를 참조하세요.
비고
Visual Studio에서 GPU 디버깅을 지원하려는 독립 하드웨어 공급업체는 VSD3DDebug 인터페이스를 구현하고 자체 드라이버를 대상으로 하는 DLL을 만들어야 합니다.
GPU 디버깅 구성
디버거는 동일한 앱 실행에서 CPU 코드와 GPU 코드 두 곳 모두 중단할 수 없습니다. 기본적으로 디버거는 CPU 코드에서 중단됩니다. GPU 코드를 디버그하려면 다음 두 단계 중 하나를 사용합니다.
표준 도구 모음의 디버그 형식 목록에서 GPU만 선택합니다.
솔루션 탐색기의 프로젝트에 대한 바로 가기 메뉴에서 속성을 선택합니다. 속성 페이지 대화 상자에서 디버깅을 선택한 다음 디버거 유형 목록에서 GPU만 선택합니다.
애플리케이션 시작 및 연결
Visual Studio 디버깅 명령을 사용하여 GPU 디버깅을 시작하고 중지할 수 있습니다. 자세한 내용은 디버거를 사용하여 코드 탐색을 참조하세요. GPU 디버거를 실행 중인 프로세스에 연결할 수도 있지만 해당 프로세스가 GPU 코드를 실행하는 경우에만 가능합니다. 자세한 내용은 실행 중인 프로세스에 연결을 참조하세요.
현재 타일을 커서로 실행하고 커서로 실행
GPU에서 디버깅하는 경우 커서 위치로 실행하기 위한 두 가지 옵션이 있습니다. 두 옵션에 대한 명령은 코드 편집기의 바로 가기 메뉴에서 사용할 수 있습니다.
커서로 실행 명령은 커서 위치에 도달한 다음 중단될 때까지 앱을 실행합니다. 현재 스레드가 커서로 실행된다는 의미는 아닙니다. 오히려 커서 지점에 도달하는 첫 번째 스레드가 중단을 트리거한다는 의미입니다. 디버거를 사용하여 코드 탐색 참조
현재 타일에서 커서로 실행 명령은 현재 타일의 모든 스레드가 커서에 도달한 다음 중단될 때까지 앱을 실행합니다.
Windows 디버깅
특정 디버깅 창을 사용하여 GPU 스레드를 검사, 플래그 지정 및 중지할 수 있습니다. 자세한 내용은 다음을 참조하세요.
데이터 동기화 예외
디버거는 실행 중에 여러 데이터 동기화 조건을 식별할 수 있습니다. 조건이 검색되면 디버거가 중단 상태로 들어갑니다. 중단 또는 계속의 두 가지 옵션이 있습니다. 예외 대화 상자를 사용하여 디버거가 이러한 조건을 검색하는지 여부와 중단될 조건도 구성할 수 있습니다. 자세한 내용은 디버거를 사용하여 예외 관리를 참조하세요. 또한 옵션 대화 상자를 사용하여 기록된 데이터가 데이터 값을 변경하지 않는 경우 디버거가 예외를 무시하도록 지정할 수 있습니다. 자세한 내용은 일반, 디버깅, 옵션 대화 상자를 참조하세요.
Troubleshooting
액셀러레이터 지정
GPU 코드의 중단점은 코드가 accelerator::direct3d_ref (REF) 가속기에서 실행될 때만 활성화됩니다. 코드에서 액셀러레이터를 지정하지 않으면 REF 가속기가 프로젝트 속성에서 디버깅 가속기 형식 으로 자동으로 선택됩니다. 코드가 명시적으로 가속기를 선택하는 경우 디버깅 중에 REF 가속기가 사용되지 않으며 GPU 하드웨어에서 디버깅 지원이 없는 한 중단점이 적중되지 않습니다. 디버깅 중에 REF 가속기를 사용할 수 있도록 코드를 작성하여 이 문제를 해결할 수 있습니다. 자세한 내용은 프로젝트 속성 및 가속기 및 accelerator_view 개체 그리고 C++ 디버그 구성에 대한 프로젝트 설정을 참조하세요.
조건부 중단점
GPU 코드의 조건부 중단점은 지원되지만 디바이스에서 모든 식을 평가할 수 있는 것은 아닙니다. 디바이스에서 식을 평가할 수 없는 경우 디버거에서 평가됩니다. 디버거는 디바이스보다 더 느리게 실행될 수 있습니다.
오류: 선택한 디버깅 가속기 유형에 대한 구성 문제가 있습니다.
이 오류는 프로젝트 설정과 디버깅 중인 PC의 구성이 일치하지 않을 때 발생합니다. 자세한 내용은 C++ 디버그 구성에 대한 프로젝트 설정을 참조하세요.
오류: 선택한 디버깅 가속기 유형에 대한 디버그 드라이버가 대상 컴퓨터에 설치되어 있지 않습니다.
이 오류는 원격 PC에서 디버깅하는 경우에 발생합니다. 디버거는 런타임까지 드라이버가 원격 PC에 설치되어 있는지 여부를 확인할 수 없습니다. 드라이버는 그래픽 카드 제조업체에서 사용할 수 있습니다.
오류: 원격 사이트에서 TDR(시간 제한 검색 및 복구)을 사용하지 않도록 설정해야 합니다.
C++ AMP 계산이 Windows TDR(시간 제한 검색 및 복구 프로세스)에 의해 설정된 기본 시간 간격을 초과할 수 있습니다. 이 경우 계산이 취소되고 데이터가 손실됩니다. 자세한 내용은 C++ AMP에서 TDR 처리를 참조하세요.