2015-01-13 4 views
1

나는 이것을 최적화하기 위해 nvprof and nvvp (5.5)으로 응용 프로그램을 프로파일 링했습니다. 그러나 디버그 (-G) 및 코드의 릴리스 버전을 프로파일 링 할 때 inst_replay_overhead, ipc 또는 branch_efficiency 등과 같은 일부 메트릭/이벤트에 대해 완전히 다른 결과를 얻습니다.프로파일 디버그 또는 릴리스 쿠다 코드?

내 질문은 : 그래서 버전을 프로파일해야합니까? 릴리스 또는 디버그 버전? 또는 선택은 내가 무엇을 찾고 있는지에 달려 있습니다.

CUDA - Visual Profiler and Control Flow Divergence 디버그 (-G) 버전은 분기 브랜치를 제대로 측정하는 데 필요하지만 다른 측정 항목에 대해서는 확실하지 않다고 나와 있습니다.

+1

당신이 제공 한 링크에는 G가 분기 분기 통계를 제대로 측정하는 데 필요하다고 표시되지 않습니다. 참조되는 특정 프로파일 러 기능 (소스에 대한 역 참조)은 릴리스 또는 디버그 버전에서 제공되는 답변에서 자세히 설명하는대로 수행 할 수 있습니다. –

+0

Robert Crovella, 정확합니다. 링크의 소스는 두 가지 옵션을 제공하며, 나는 언급하지 않습니다. 고맙습니다. – ScHuMi

답변

4

프로파일 링은 대개 성능을 중요시 함을 의미합니다.

성능에 신경 쓰면 CUDA 코드의 출시 버전을 프로파일 링해야합니다.

디버그 버전 (-G)은 일반적으로 느리게 실행되는 다른 코드를 생성합니다. CUDA 코드의 디버그 버전에 대한 성능 분석 (실행 시간 측정, 벤치마킹, 프로파일 링 등 포함)에 대한 요점은 제 의견으로는 이런 이유 때문입니다.

-G 스위치는 장치 코드 컴파일러가 일반적으로 수행 할 수있는 대부분의 최적화를 해제합니다. 이는 코드 생성에 큰 영향을 미치며 종종 성능에 큰 영향을 미칩니다. 최적화를 비활성화하는 이유는 코드 디버깅을 용이하게하는 것이므로 이것이 -G 스위치와 코드 디버그 버전의 주된 이유입니다.

+1

일반적으로 전체 릴리스 빌드를 수행하려고합니다. 소스 상관 실험을 사용하려면 -lineinfo를 추가하십시오. 응용 프로그램의 논리 제어 흐름을 살펴볼 필요가있는 경우 -G는 -lineinfo보다 유용 할 수 있습니다. -G를 사용할 때 다른 측정 항목을 보지 마십시오. –