2011-10-17 3 views
3

임의의 CUDA 응용 프로그램을 디버깅하려고 시도합니다. 엔비디아 GPU 컴퓨팅 SDK 4.0에서 행렬 곱셈 또는 convolutionSeparable 샘플, 난 항상 유사한 출력을 얻을 :CUDA Nvidia NSight 디버깅 : "CUDA 그리드 실행 실패"


Parallel Nsight Debug 
CUDA grid launch failed: CUcontext: 2059192 CUmodule: 348912936 Function: _Z9matrixMulILi32EEvPfS0_S0_ii 
…… 
…… 

그리고 다음과 같은 내용으로 파일은 나타나지된다


    Parallel Nsight CUDA Debugger 

응용 프로그램 무관 Nexus CUDA 디버거로 디버깅 한 후 관련 소스를 찾을 수 없습니다. 이는 여러 가지 이유 때문일 수 있습니다.

1) CUDA가 초기화되지 않았습니다. cuInit가 호출되었는지 확인하고 성공적인 결과를 반환합니다.

2) CUDA 컨텍스트가 생성되지 않았습니다. 컨텍스트가 만들어지면 컨텍스트에서 메모리를 검사 할 수 있습니다. 각 컨텍스트 은 Visual Studio 스레드 뷰에서 단일 "스레드"로 표시됩니다. (Debug | Windows | Threads)

3) 어떤 상황에서도 활성 CUDA 그리드가 없습니다. 중단 점을 맞추기 위해 그리드를 실행해야합니다.

4) Visual Studio 스레드 뷰에서 "기본 컨텍스트"를 선택했습니다. 이 컨텍스트는 사용 가능한 실제 CUDA 컨텍스트가 없을 때 표시되는 자리 표시 자입니다. 실제 데이터를 표시하지 않습니다.

5) CUDA 모듈이로드되지 않았습니다. Visual Studio 모듈보기를 표시하여 각 CUDA 컨텍스트에로드 된 모듈을 확인할 수 있습니다. (Debug | Windows | Modules)

6)로드 된 .cubin에 대한 기호가 없습니다. 모듈을 디버그 정보로 빌드해야합니다. 구축 할 때 -G0 스위치를 지정하십시오.

7) 커널을 실행하는 동안 그리드 시작에 실패했습니다.


해당 ".cu"파일 내의 각 중단 점은 실행 중에 완전히 무시됩니다. Nsight 디버깅없이 응용 프로그램을 실행할 때 프로그램은 아무 문제없이 실행됩니다.

이 문제를 해결하려면 어떻게해야합니까?

내 설정 :

  • 1xIntel GPU와 1 배 NV 570GTX, 나는 로컬 디버깅 옵션
  • 윈 7 프로 64 비트
  • 데브 봉투 : VS2008 또는 VS2010
  • CUDA를 사용하려면 4.0 & 병렬 Nsight 2.0
  • NV 드라이버 버전 : 285.38
  • WPF를 사용할 수
  • TDR이 비활성화되어 있습니다
  • Windows가 기본 모드에서 실행
  • (NO 항공)
  • 프로젝트 Propertys : CUDA는 런타임 API -> 위해 GPU> GPU 디버그 정보를 생성 -> 예 (-g0)

답변

2

첫째, 디스플레이가 NVIDIA GPU가 아닌 Intel 통합 그래픽에 의해 구동되도록해야합니다. 이것은 CUDA 코드에서 중단 점을 맞았을 때 전체 GPU를 멈추게하기 때문에 같은 GPU가 디스플레이에 사용 되었다면 시스템이 자연스럽게 고정되기 때문입니다. 병렬 Nsight의 hardware requirements 당신이 하나를 가지고 반면 당신이 이 지원되는 GPU를을 필요로 표시하지만, if I understand correctly이 (나는 시도하지 않은) 디스플레이를 위해 비 인텔의 GPU를 사용할 수 있다는

참고.

위와 같은 가정하에 Parallel Nsight에 포함 된 샘플을 시험해보십시오. 시작 메뉴의 Parallel Nsight 메뉴 그룹에서 찾을 수 있습니다.

+0

현재 내 디스플레이가 인텔 장치에 의해 구동되고 있습니다. 그렇지 않으면 다른 NSight 오류 메시지가 발생할 수 있습니다. 나는 이미 이것을 시도했기 때문에 나는 알고있다. 내가 아는 한, 추가로 임의의 그래픽 장치 하나가 필요합니다. 제 생각에는 의견이 분분합니다. – Impulse

+0

@Impulse Parallel Nsight 샘플을 사용해 보셨습니까? (CUDA SDK 샘플과 반대)? – Tom

+0

예, SDK 샘플을 사용해 보았습니다. matrixMul 샘플은 Parallel Nsight와 함께 제공됩니다. 이 특정 예를 들어 출력 : CUcontext : 46427088 CUmodule : 139,693,888 기능 : 병렬 Nsight 디버그 CUDA 그리드 발사는 실패 _Z9matrixMulPfS_S_ii – Impulse

2

CUDA 그리드 실행에는 다양한 원인이 있습니다. 이것은 아마도 할당 된 크기를 초과하는 배열에 액세스하고있을 것입니다. x86 세계에서 세분화 오류 (segmentation fault)라고 불리는 것은 무엇입니까? 나는 오류가 사라질 때까지 테스트중인 커널의 일부를 선택적으로 주석 처리하여 이들을 디버깅합니다. (우리가 늑대 울타리 디버깅이라고 부른 것). 그리드 실행 실패의 또 다른 원인은 커널이 실행하는 데 너무 오래 걸리는 경우입니다 (1 초 또는 2 초).

디버거가 도움이되지 않는 이유는 디버거가 1 블록에서 1 스레드 만 중지한다는 것입니다! 그 전에 액세스 오류가 발생했습니다. 또한 그리드 실행 실패시 출력이 반환되지 않으므로 printf를 사용하여 버그를 찾을 수 없습니다.

+1

그러나 이상한 것은 커널이 옵션을 디버깅하지 않고 normaly 실행되고 있다는 점이다. – Impulse

0

이에 대한 대답은 Parallel NSight 설치에 올바른 드라이버를 사용하고 있다는 것입니다. 최신 버전 (현재 2.1 RC2)의 경우 이것은 드라이버 버전 285.86입니다. 현재 안정 버전 2.0의 경우 드라이버 버전 270.81이며 언급 된 또 다른 포스터입니다.

1

이미 주어진 답변 위에 잠재적 솔루션을 추가하려면 오류를 방지하는 한 가지 방법은 관리자 권한으로 NSight 모니터를 실행하는 것입니다.

+0

아무 것도 변경되지 않고 디버깅이 실패하고 커널을 디버깅하지 않고도 문제없이 실행 되었기 때문에이 작업이 저에게 도움이되었습니다. – user2965003

관련 문제