2017-05-16 7 views
0

일부 CUDA 커널을 실행하기 위해 JCuda를 사용하는 Java 코드를 작성했습니다. 스트림이 겹쳐지고 겹쳐져있는 것을 이해하기 위해 어플리케이션을 프로파일 링하고 싶습니다. 커널의 실행 시간을 얻기 위해 cudaEventElpasedTime과 같은 cuda 이벤트 호출을 사용할 수 있지만 같은 커널에 대해 시작 및 종료 타임 스탬프를 얻는 방법을 모르겠습니다.nvprof를 사용하지 않고 CUDA 이벤트 시작 및 종료 시간을 얻는 방법

nvprof는 이러한 결과를 생성하고 타임 라인을 표시 할 수 있지만 Java 응용 프로그램과 함께 nvprof를 실행할 수있는 방법을 찾지 못합니다.

편집 : 답변 덕분에 Java 응용 프로그램의 프로파일 링에 nvprof를 사용하는 방법을 알았습니다. 나는 여전히 더 많은 컨트롤을 가질 수 있도록 cudaEvent 호출을 사용하여 시작 및 종료 시간을 얻는 것을 선호합니다. nvprof가 해당 정보를 얻을 수 있지만 최종 사용자가 그렇게 할 API가 없다고 생각하십니까? 이 작업을 수행하는 두 가지 방법이 있습니다

+0

@Shadow 프로파일 링 대상을 더 많이 제어 할 수 있으므로 cudaEvent 호출을 사용하여 시작 및 종료 시간을 얻는 것을 선호합니다. – Xiangyu

+0

Visal 프로파일 러를 사용할 수도 있습니다. [다른 버전] (https://forum.byte-welt.net/t/jcuda-and-nvvp-visual-profiler/3667)에서 [작동하지 않았다] (https://devtalk.nvidia.com)/default/topic/524531/profiler-error-message-when-profiling-jcuda-application /), 마침내 CUDA 8.0에서 다시 작동하는 것처럼 보입니다. – Marco13

+0

@ Marco13,이 기능은 Windows에서만 작동합니까? 나는 그것이 작동하도록 .bat을 만들 필요가 있음을 읽고 리눅스에서 .sh 스크립트를 시도하지 않았다. – Xiangyu

답변

2

: 당신이 명령 줄을 통해 JCuda 응용 프로그램을 실행할 수있는 경우 실행할 수없는 경우

  1. , 당신은 명령 nvprof --profile-child-processes <command to run your JCuda application>

  2. 를 사용하여 프로파일 링 할 수 있습니다 당신의 응용 프로그램을 명령 줄을 통해 열고, 터미널을 열고 nvprof --profile-all-processes 명령을 사용하여 nvprof를 실행하십시오. Nvprof는 데몬 모드로 들어가서 CUDA 활동이 일어날 때까지 기다리게됩니다. 이제 IDE에서 평소대로 응용 프로그램을 시작하면 CUDA 활동이 발생하고 응용 프로그램이 종료되면 nvprof는 터미널 세션에서 결과를 인쇄합니다.

+0

이것은 훌륭한 대답입니다. JCuda 응용 프로그램은 여러 스레드에서 실행되므로 --profile-child-processes는 하나의 JVM에서 실행 시간 만 리턴 할 수 있다고 생각합니다. 나중에 살펴보고 나중에 알아볼 것입니다. – Xiangyu