2014-05-11 1 views
0

몇 가지 테스트를하고 있는데 컴파일 할 때 -G 매개 변수를 사용하면 나보다 성능이 좋지 않음을 알게되었습니다.nvcc 컴파일러로 -G 매개 변수로 컴파일 할 때 GPU 성능이 좋지 않음

--device-debug (-G)       
    Generate debug information for device code. 

를하지만 나에게 그런 나쁜 성능을 제공하는 이유를 알고 나에게 도움이되지 않습니다

나는 엔비디아의 문서를 확인했다. 이 디버그 정보를 생성하는 위치는 언제입니까? 이 나쁜 성과의 원인은 무엇일까요?

+2

nvcc에 대한 세부 사항을 모르지만 일반적으로 디버그 정보를 켜면 컴파일러 최적화 더미가 비활성화되어 생성 된 코드가 소스와 더 잘 일치하게됩니다. – DrC

답변

5

-G 스위치 disables most compiler optimizations을 사용하면 nvcc이 장치 코드에서 수행 될 수 있습니다. 결과 코드는 종종 -G으로 컴파일되지 않은 코드보다 느리게 실행됩니다.

각 사례의 실행 파일을 cuobjdump -sass myexecutable을 통해 실행하고 생성 된 장치 코드를 살펴보면 알기 쉽습니다. 비 -G 경우 일반적으로 장치 코드가 적게 표시되며 특정 최적화의 차이점을 확인할 수도 있습니다.

이유 중 하나는 고도로 최적화 된 장치 코드가 실제 소스 코드 및 실제 소스 코드 줄을 제거 할 수 있기 때문입니다. 이로 인해 코드를 디버그하는 것이 매우 어려워 질 수 있습니다. 따라서 디버깅을 사용하려면 -G으로 대부분의 최적화가 비활성화됩니다.

Thrust의 경우 -G 스위치 may result in unpredictable behavior을 사용합니다. 추력의 최신 버전은 더 잘 작동해야하지만 추력 코드를 컴파일 할 때 예기치 않은 문제가있을 수 있습니다 (-G).

+0

매우 자세한 설명과 출처에 감사드립니다. –