레이블이 IDE-Nsight인 게시물을 표시합니다. 모든 게시물 표시
레이블이 IDE-Nsight인 게시물을 표시합니다. 모든 게시물 표시

7/08/2019

Nsight Eclipse Edition

1.  Nsight Eclipse Edition 

이전의 Nsight Eclipse 사용법을 보면,  거의 유사하며 SSH로 vi를 이용하여 개발하는 것 보다 IDE Tool를 이용하여 편하게 개발하고자 아래와 같이 사용하고자 한다.

기본사용법은 Eclipse-CDT의 개발환경구축을 참조
  https://ahyuo79.blogspot.com/2016/02/eclipse.html

개발하고자하는 C/C++과 CUDA관련 소스라면, Nsight에서 Host에서 빌드를 통하여, Target으로 전송하는 방법은 가능하다.

  2. Nsight Eclipse Edition관련 부분 참조
  https://ahyuo79.blogspot.com/2019/01/nvidia-nsight-tools-jetpack-33.html


  • Nsight Eclipse Edition 실행 
$ sudo /usr/local/cuda-10.0/bin/nsight       // Jetpack 4.2 의 Nsight Eclipse  실행  

상위 nsight를 sudo로 실행을 했을 경우와 그냥 실행경우의 환경값의 저장되는 위치가 다르므로, 반드시 본인의 필요에 따라 sudo를 사용하자.


1.1. Target 기반 개발환경구성  

DeepStream SDK 3.0 설치 및 구성
  https://ahyuo79.blogspot.com/2019/06/deepstream-sdk-30-jetpack-42-411.html


우선 DeepStream의 소스 구성을 보면, Target 내부에서 빌드가 되어야 동작되는 시스템이다.




  • Remote System Explorer 창의 Remote System 에서 Connection 생성 



상위 좌측의 Remote System에서 New를 이용하여 새로운 Connection 생성





  • Remote System Explorer에서 SSH연결 
  1. SSH 접속 및 STFP 접속 
  2. SSH Terminal 별도 실행 
  3. SFTP에서 직접 파일을 선택하여, File을 수정 
  4. SSH 에서 직접 빌드 



상위구성은 기본적인 Editor하고, Build만 사용이 가능하고, index기능을 사용할 수 가 없기에, 사용하기가 좀 불편하다.


  • Remote System Explorer 와 C/C++ 탭 연결 
  1. 상위 Remote System Exploerer 탭에서 좌측에 SFTP 탐색기 창에서 개발소스를 찾자 
  2. Source를 선택 후 우측마우스클릭 -> Create Remote Project   실행  ( SSH로 Project 파일생성)
  3. SFTP 탐색기에서 우측마우스 클릭->Import To Project 실행 (아래와 같이 추가)
  4. 아래창에서 반드시 into folder 창에서 관련소스 넣어주자.


상위가 제대로 되었다면, Team Synchronizing Tab이 생성이되며, C/C++ Tab에도 생성,
나의 경우는 Team Synchronizing Tab 을 제거

상위 우측 탭 C/C++ 탭으로 돌아오면, 아래와 같이 Project Explorer 프로젝트 생성확인



1.2 Target 기반 개발환경  세부설정 (옵션) 

상위까지만 해도, 대충 사용이 가능하며, RSE라는 기능이 있기에, 관련부분을 설정을 해보자는 생각으로 각각의 세부설정까지 설정을 시도.
결과는 크게 변화는 없는 것 같음

  • Main Manue->Window->Preferences 설정확인 
RSE 설정 하고, SSH 설정을 확인하자.





Eclipse Manual
  https://help.eclipse.org/kepler/index.jsp?topic=%2Forg.eclipse.ptp.rdt.doc.user%2Fhtml%2Fgettingstarted%2Fcreating_a_remote_project.html


  • Main->Run->Run Configuration 설정 
원하는 Makefile에서 생성된 File을 실행하고자 한다면, 각각의 Configuration을 설정을 해주자.
좌측의 Makefile 기준이 있는 부분에, Run Configuration을 설정해주자.



기본설정이 CUDA이므로, 상위에서 Select Other에서 Legacy 로 변경



상위처럼 설정하고 Run하면 동작될 줄 알았으나, PATH에러가 생기고 있음
이부분은 테스트 하면서 수정방법 고안


1.3 Target 기반의 개발환경 구성 

Eclipse의 Remote system을 이용하여 Target에서 Build환경을 구축을 해보려고 했으나, 이부분이 상위처럼 복잡하고 귀찮아서, 쉬운방법으로 NFS를 이용하여 구축하기로 했다.
NFS Server / Client는 본인이 원하는대로 구성하자. (Host: NFS Server or Client)


  • Host PC NFS Server 설정 
$ sudo apt-get install nfs-kernel-server nfs-common portmap
$ sudo vi /etc/exports
/home/jhlee/deepstream_sdk_on_jetson *(rw,no_root_squash,all_squash,sync)

$ sudo /etc/init.d/portmap restart    
$ sudo /etc/init.d/nfs-kernel-server restart


  https://help.ubuntu.com/lts/serverguide/network-file-system.html


  • Jetson NFS Client 구성 및 Mount 
$ dpkg -l nfs*  // 확인 
$ sudo apt install nfs-common

$ cd ~ 
$ mkdir deepstream_sdk_nfs
$ sudo mount -t nfs -o nolock 192.168.55.107:/home/jhlee/deepstream_sdk_on_jetson ~/deepstream_sdk_nfs


상위와 같이 하며,  Server  NFS Directory의 ID는 상관이 없는데, Client의 Directory가 ID가 ubuntu(1000)로 변경됨
client에서 sudo chown nvidia:nvidia -R ./deepstream_sdk_nfs 사용하고 싶다면, server 옵션을 all_squash -> no_all_squash 변경
상위와 같이 하면, 2차적인 문제가 발생해서, 다른 방법을 찾고 있음

  • SSH를 이용하여, Command 입력

$ ssh nvidia@192.168.55.1 "ls"     // SSH로 원격 명령어 실행
$ ssh nvidia@192.168.55.1 "make -f ~/deepstream_sdk_nfs/sources/apps/sample_apps/deepstream-app/Makefile"             // make 실행 
$ ssh nvidia@192.168.55.1 "cd ~/deepstream_sdk_nfs/sources/apps/sample_apps/deepstream-app&&make"                        //명령어가 두개 이상이면, && 연결 
$ ssh nvidia@192.168.55.1 "cd ~/deepstream_sdk_nfs/sources/apps/sample_apps/deepstream-app&&make clean&&make"   // 명령어 3개 연결 , 복잡하면, ShellScript 사용 


아래의 장점은 Index의 사용 및 Make Target 를 설정가능이라고 생각하지만, 권한문제로 역시 문제가 발생을 하고 있다




상위와 같이 해야 Inex가 생성이 되며, Make Target에 각각의 상위


Make Target를 직접 SSH Command로 지정하여 실행하도록 한다.



상위에서 발생하는 문제들은 대부분 권한문제이며, 이를 해결해야 제대로 해결이 된다.



2. Host 기반 개발환경 구성 

Target 기반으로 개발환경을 구성을 해보면, Index도 제대로 동작이 되지 않고, 느리며, 해서 Host에도 참조할 수 있도록 다음과 같이 별도로 추가를 진행한다.
아래는 빠른 Index기능을 이용하여 소스분석을 위해서만 사용할 뿐, 소스가 Host에 있기때문에 별다른 의미가 없다.
Host기반의 프로젝트면,  다음과 같이 구성해서 쉽게 할수 있을 것이다.


Nsight에서는 Project를 다음과 같이 나누어 구분을 한다.
  1. CUDA C/C++ Project 
  2. C++ Project
  3. C Project 
  4. Makefile Project with 



NVIDIA에서 무료로 제공해주고 있는 Deepstream Source를 아래와 같이 등록을 해보자.


  • MakeFile이 존재하는 Project로 생성 
이전 Nsight Eclipse Edition은 조금 다르게, Tool Chain이 처음부터 3개로 구분되어 나온다.
Target에 사용할 것이므로, Cross GCC로 선택 ( 만약 CUDA 관련이라면, Program은 맨상위)



생성되면, 자동으로 Index 생성되고 소스분석이 쉬움



Nsight Ecplise Edition Manual
  https://docs.nvidia.com/cuda/nsight-eclipse-edition-getting-started-guide/index.html

CUDA Manual
  https://docs.nvidia.com/cuda/index.html

5/28/2019

NVIDIA Nsight Tools (Jetpack 4.2 )

1. Host 에 설치된 Nvidia 개발 Tool 확인 

Jetpack 3.3->4.2로 Upgrade되면서 추가된 Nvidia의 개발툴들을 알아보고자 아래와 같이 간단히 정리를 한다.
Jetpack 4.2를 설치 후 Ubuntu에서 자동으로 찾거나 잡히면 다행이지만, 못찾는다면, 아래에서 설치되었는지 확인하고,이를 직접실행을 해주자.
(나의 경우는 거의 자동을 찾지를 못했기 때문에, NVIDIA의 Manual을 보고 다 찾아 실행을 함)


  • JetPack 3.3 Nsight Tools 확인 
JetPack 4.2와 3.3은 거의 유사하기 때문에, 아래의 블로그를 읽고 정확히 안다음에 보자
  https://ahyuo79.blogspot.com/2019/01/nsight-nvidia.html

나의 경우는 Nsight System은 쉽게 잡히는데, Nisght Graphic는 안잡혀서 아래와 같이 직접 찾아서 실행을 했다.

1.1 JetPack 4.2 Highlights 변경사항

변경사항들을 간단히 정리를 했으며,  읽기쉬운 영어라서 별도로 번역은 하지 않았다.

  • Nsight Eclipse Edition
True plugins can be installed in the developer’s own Eclipse environment
Offers an all-in-one integrated environment to edit, build, and debug CUDA applications


  • NVIDIA Nsight Systems
Improved correlation highlighting on the timeline
Improved performance and responsiveness of the timeline
Added support for launching profiler as superuser (root)


  • NVIDIA Nsight Graphics
Nsight Compute is a new interactive kernel profiler for CUDA applications bundled with CUDA Toolkit. It provides detailed performance metrics for analysis and enables results comparison between baselines and the current run. This first version of Nsight Compute supports Jetson AGX Xavier.

  https://developer.nvidia.com/embedded/jetpack
  https://developer.nvidia.com/tools-overview


2. NVIDIA Nsight Ecplise 10.0

CUDA Version이 의 9.0에서 10.0으로 변경되면서 Nsight Eclipse 역시 동일하게 변경이 되었다.  기능은 기존에 사용하는 방법과 거의 유사한 것 같다

  • Nsight Ecplise Edition 위치 확인 및 실행 
$ /usr/local/cuda-10.0/bin/nsight // JetPack 4.2 
or
$ /usr/local/cuda-9.0/bin/nsight // JetPack 3.3


실행할 경우 , 동일한 Workspace를 가지면, 아래와 같이 이전에 사용한 Project 역시 사용가능하다.
기본적인 사용방법은 Ecplise-CDT 와 거의 동일하다고 보면된다.





  • NVIDIA Visual Profiler
NVIDIA Visual Profiler (JetPack3.3) 가 상위의 Profile Tab으로 합쳐졌으며, 별도로 실행을 할 필요가 없다.
만약 별도로 실행하고자 하면 , 아래 내용 참고하고  사용방법 역시 동일하니 관련부분은 참조

$ sudo /usr/local/cuda-9.0/bin/nvvp // JetPack 3.3
or 
$ sudo /usr/local/cuda-10.0/bin/nvvp // JetPack 4.2   




3.  NVIDIA Nsight System 2019.3.2

기존의 사용하던 Tegra System Profiler (NVIDIA System Profiler)가 Nsight System으로 변경되고, User Interface도 거의 동일하다.
새로운 기능인줄 알았으나, 착각이며, 기존 같이 SSH로 연결하여 사용하면 된다.
관련내용은 기존 JetPack 3.3 참고하며, 쉽게 Process와 함께 다양한 것을 분석해준다.

  • Nsight Systems  JetPack 4.2 위치 확인 
$ ls /opt/nvidia
nsight-graphics-for-l4t  nsightsystems  sdkmanager

$ ls /opt/nvidia/nsightsystems/nsightsystems-2019.3.2/
Host-x86_64  Target-arm  Target-arm-linux

$ /opt/nvidia/nsightsystems/nsightsystems-2019.3.2/Host-x86_64/nsight-sys  // Nsight System 2019.3.2 Version 실행  아래와 같이 실행 

  •  Tegra System Profiler (NVIDIA System Profiler)  JetPack 3.3 위치 확인 
$ cd ~/project/jetsonTX2   // Jetpack 3.3 설치장소 
$ cd  NVIDIA_System_Profiler
$ ls 
Host-x86_64  Target-arm  Target-arm-linux

$ cd Host-x86_64
$ ./SystemProfiler                // Tegra System Profiler  실행 



  • Nsight System 2019.3.2 Version 확인 및 실행  (JetPack4.2)


NVIDIA NSIGHT System  (추후에 다 통합 될것 같다)


  1. Proejct 생성 
  2. Android에서 Linux 변경 
  3. Select Device for Profiling->Config Devices 선택 



SSH 설정




  • Sample Target Process 설정 
Sample Rate : 높을 수록 정확도가 높다.
Target Application: Attach or Launch 선택 후  Process 선택


아래와 같이 선택 후 옵션을 선택 Profile Start

설정된 Process를 Sample rate로 Data 분석중


STOP을 선택하면, 이제 분석된 Data를 아래와 같이 볼수 있다.


CPU 점유율도 볼수 있으며, 성능측정이 쉽게 할수 있다.




4.  NVIDIA Nsight Graphics 

기존에 사용하던 Tegra Graphics Debugger가 이것으로 변경된 것 같은데, 전에는 사용해보지 못해지만, 현재는 동작이 되어 아래 기능들을 확인을 해본다.
주로 기능을 보면 GPU의 Profiling 부분 과  GPU Trace  및 다양한 기능을 제공을 해주는데, 사용법은 관련 프로그램과 같이 다양한 실습을 해봐야 알 것 같다.


  • Nsight Graphics  위치 확인 및 실행  (JetPack 4.2)
$ ls /opt/nvidia
nsight-graphics-for-l4t  nsightsystems  sdkmanager

$ sudo /opt/nvidia/nsight-graphics-for-l4t/nsight-graphics-for-l4t-2018.7/host/linux-desktop-nomad-x64/nv-nsight-gfx   // JetPack 4.2에서 실행 , sudo로 해야 파일 Save가능


  • Tegra-Graphics-Debugger ( JetPack 3.3)
$ cd ~/project/jetsonTX2   // Jetpack 3.3 설치장소 
$ cd devtools_docs
$ ls 
NVIDIA System Profiler 4.0  Tegra Graphics Debugger 2.5     // 관련 Manual 참조 

$ sudo /usr/local/Tegra-Graphics-Debugger-2.5/nvidia-gfx-debugger    // Tegra Graphic-Debugger 실행 


  • Nsight Graphics 실행화면 
Connect 로 가서 SSH로 연결하여 실행하자.


Connect 사용 SSH로 연결 ( USB로 이미 연결됨, 192.168.55.1 ) 후 Program을 돌릴 경우, 하단 아래에 PID정보를 확인가능



4.1 NVIDIA Nsight Graphics 준비 

우선 아래와 같이 Multimedia가 동작되는 소스기반으로 테스트를 진행을 해본다.

Multimedia Sample 예제 준비

$ cd ~/tegra_multimedia_api/samples/backend // Multimedia 예제 

$ cat test.sh  // 테스트를 위한 Shell Script 생성 
./backend 1 ../../data/Video/sample_outdoor_car_1080p_10fps.h264 H264 \
    --trt-deployfile ../../data/Model/GoogleNet_one_class/GoogleNet_modified_oneClass_halfHD.prototxt \
    --trt-modelfile ../../data/Model/GoogleNet_one_class/GoogleNet_modified_oneClass_halfHD.caffemodel \
    --trt-proc-interval 1 -fps 10



아래와 같이 새로생성된 ShellScript or 파일 선택 및 연결가능


 Activity의 주요 기능 중 3개 중 하나를 선택 후 Launch 시작 (현재 이 3개의 기능만 지원)
  1. Frame Debugger
  2. Frame Profiler
  3. Generate C++ Capture

  • Additional options 확인 



4.2  Activity->Frame Debugger Mode 

실시간으로 동영상 Frame을 분석하는 기능으로 Breaking Point와 함께 영상의 Frame을 Debuging이 가능

Frame Debugger 선택 후 Launch 시작 
제대로 실행이되면, HDMI 화면에서 동영상이 나오면서, 아래와 같이 작동


  • Frame Debugger->Caputre for Live Analysis 선택 
다양한 기능을 제공하고 있으며, 실시간으로 소스의 세부분석도 가능하면, Breaking Point와 함께 세부 동작을 알수 있다.
(HDMI로 보면 동일한 화면으로 정지)



  • Capture for Live Analysis->Profile Frame->Range Profiler View 제공 

기능 좀 불안정하며, 완벽하게 작동은 되지 않는 것 같으며, 아래의 NVIDIA Site에서 사용법을 제대로 익히자.


4.3 Activity->Frame profiler Mode
Frame profiler 선택 후 Launch 시작 
실시간으로 그래프를 확인가능



  • Capture for Live Analysis 선택 
상위와 좀 다르게 구성되지만, 얼추 거의 비슷한 기능같으며, Range Profiler View가 쉽게 볼수 있다.

Range Profiler VIew-> Metrics 및 선택을 해서 각 값들을 확인 가능한데, 솔직히 무슨의미 인지 잘모르기에, 이부분은 추측으로만 파악하고 기능을 확인해야겠다.



4.4 Activity->Generate C++ Capture  Mode 
동작 중인 파일을 C++ Code로 생성하여, 이를 Build하고 Install 하고 이를 실행하는 기능같다.
쉽게 Reverse Engineering 기능을 제공해주는 것 같은데, 에러 없이 동작은 되지만, 완벽히는 동작되는 것 같지 않다.

  • 상위 Tap Generate C++ Capture 선택 
상위 탭 Generate C++ Caputre  클릭 할 경우, 현재 화면 Capture 가능 및 분석가능
상위에서 제공하던 Capture for Live Analysis 미지원
반드시 sudo 로 실행이 되어야 파일이 Save가 됨


상위의 Build 부분 NV_TOPDIR을 찾지 못하는 문제발생하며, 상위 주소는 Jetpack 설치장소 설정


  • Main Menu에서 Tools->Options 선택  (JetPack 4.1.1 선택)



C++ 파일이 생성 및 Caputre 화면 확인



  • SDK PATH 설정 후 Build에서 Build 실행 
나의 경우는 SDK 설정을 하고 Build가 되다가, nvgles.h 내에서 gl30platform.h 가 없다고 해서 에러가 발생했지만 아래와 같이 Package를 설치하면 문제해결됨

Ubunut에서 Host에서 아래 Package 설치

 $ sudo apt install  libgles2-mesa-dev 

GLES3/gl3platform.h error 문제
  https://packages.ubuntu.com/xenial-updates/amd64/libgles2-mesa-dev/filelist
  https://www.khronos.org/opengl/wiki/Platform_specifics:_Linux




  • Build 문제 해결 



  • Target 에 Build 된 File을 Install  후 실행 
Install 할 경우  Target 에 /tmp/backend .... 설치가 진행완료
아래의 Run->Execute 실행하면 Taraget에 Seriaized Window 화면 생성 (HDMI로 확인)


나의 경우는 SerializedWindow가 화면이 검정색이여서 아래 Output Message를 분석했더니,
아래와 같이 GL_INVALID_OPERATION 문제발생
이 부분은 추후 이기능이 필요시 사용을 해야겠다.



4.4 기타 사항 

  • Output Message 

아래의 아이콘 클릭시 확인가능


  • 오동작될 경우 환경설정 확인사항 

$ ps -aux | grep test.sh   // Jetson 에서 확인 (오동작)
nvidia   24227  0.0  0.0   6124  2660 ?        Ss   06:54   0:00 bash -c cd /home/nvidia/tegra_multimedia_api/samples/backend && ENABLE_VK_LAYER_NV_nomad="1" LD_PRELOAD="/tmp/var/linux-v4l_l4t-nomad-t210-a64/libNvda.Graphics.Interception.so" NOMAD_AGGRESSIVE_REPLAY_THREAD_CONTROL="Auto" NOMAD_ALLOW_UNSUPPORTED_CAPTURE="0" NOMAD_BLOCK_ON_FIRST_INCOMPATIBILITY="0" NOMAD_COLLECT_SHADER_DISASSEMBLY="1" NOMAD_COLLECT_SHADER_REFLECTION="1" NOMAD_COLLECT_SHADER_SOURCE="1" NOMAD_D3D11_SHADER_COMPILE_SYNCHRONOUS="0" NOMAD_D3D12_REPLAY_FENCE_BEHAVIOR="Default" NOMAD_DRIVER_INSTRUMENTATION="1" NOMAD_DXGI_SYNC_INTERVAL="0" NOMAD_FORCE_REPAINT="0" NOMAD_FRAME_CAPTURE_SINGLETHREADED="0" NOMAD_HWPM_COLLECTION="1" NOMAD_OPENGL_DELIMITER="SwapBuffers" NOMAD_REPORT_FORCE_FAILED_QUERY_INTERFACES="1" NOMAD_REPORT_UNKNOWN_OBJECTS="1" NOMAD_RTX_ACCELERATION_STRUCTURE_ALLOW_SHALLOW_GEOMETRY_COPY="0" NOMAD_RTX_ACCELERATION_STRUCTURE_COLLECT_TO_VIDMEM="0" NOMAD_RTX_ACCELERATION_STRUCTURE_COPY_GEOMETRY_MODE="Collect Full Builds And Refits" NOMAD_SASS_COLLECTION="0" NOMAD_SERIALIZATION="1" NOMAD_TARGET_HUD="1" NOMAD_UNWEAVE_THREADS="0" NOMAD_VULKAN_COHERENT_BUFFER_COLLECTION="1" NOMAD_VULKAN_FORCE_VALIDATION="0" NOMAD_VULKAN_HEAP_RESERVE_MB="0" NOMAD_VULKAN_SAFE_OBJECT_LOOKUP="Auto" NOMAD_VULKAN_SERIALIZATION_OBJECT_SET="Only Active" NOMAD_VULKAN_UNSAFE_PNEXT_INSPECTION="0" NSIGHT_DISABLE_OPENGL_SHADER_DEBUGGER_DRIVER_SUPPORT="0" NVIDIA_PROCESS_INJECTION_CRASH_REPORTING="1" NVTX_INJECTION64_PATH="Nvda.Graphics.Interception.dll" NV_TPS_LAUNCH_TOKEN="Frame Debugger" NV_TPS_LAUNCH_UUID="{c2a1ac93-0cec-4ff1-a96a-d7c39f2dc84c}" "/home/nvidia/tegra_multimedia_api/samples/backend/test.sh" 

$ ps -aux | grep test.sh  // Jetson 에서 확인 (제대로 동작)
nvidia   24916  0.0  0.0   6124  2880 ?        Ss   07:12   0:00 bash -c cd /home/nvidia/tegra_multimedia_api/samples/backend && DISPLAY=":0" ENABLE_VK_LAYER_NV_nomad="1" LD_PRELOAD="/tmp/var/linux-v4l_l4t-nomad-t210-a64/libNvda.Graphics.Interception.so" NOMAD_AGGRESSIVE_REPLAY_THREAD_CONTROL="Auto" NOMAD_ALLOW_UNSUPPORTED_CAPTURE="0" NOMAD_BLOCK_ON_FIRST_INCOMPATIBILITY="0" NOMAD_COLLECT_SHADER_DISASSEMBLY="1" NOMAD_COLLECT_SHADER_REFLECTION="1" NOMAD_COLLECT_SHADER_SOURCE="1" NOMAD_D3D11_SHADER_COMPILE_SYNCHRONOUS="0" NOMAD_D3D12_REPLAY_FENCE_BEHAVIOR="Default" NOMAD_DRIVER_INSTRUMENTATION="1" NOMAD_DXGI_SYNC_INTERVAL="0" NOMAD_FORCE_REPAINT="0" NOMAD_FRAME_CAPTURE_SINGLETHREADED="0" NOMAD_HWPM_COLLECTION="1" NOMAD_OPENGL_DELIMITER="SwapBuffers" NOMAD_REPORT_FORCE_FAILED_QUERY_INTERFACES="1" NOMAD_REPORT_UNKNOWN_OBJECTS="1" NOMAD_RTX_ACCELERATION_STRUCTURE_ALLOW_SHALLOW_GEOMETRY_COPY="0" NOMAD_RTX_ACCELERATION_STRUCTURE_COLLECT_TO_VIDMEM="0" NOMAD_RTX_ACCELERATION_STRUCTURE_COPY_GEOMETRY_MODE="Collect Full Builds And Refits" NOMAD_SASS_COLLECTION="0" NOMAD_SERIALIZATION="1" NOMAD_TARGET_HUD="1" NOMAD_UNWEAVE_THREADS="0" NOMAD_VULKAN_COHERENT_BUFFER_COLLECTION="1" NOMAD_VULKAN_FORCE_VALIDATION="0" NOMAD_VULKAN_HEAP_RESERVE_MB="0" NOMAD_VULKAN_SAFE_OBJECT_LOOKUP="Auto" NOMAD_VULKAN_SERIALIZATION_OBJECT_SET="Only Active" NOMAD_VULKAN_UNSAFE_PNEXT_INSPECTION="0" NSIGHT_DISABLE_OPENGL_SHADER_DEBUGGER_DRIVER_SUPPORT="0" NVIDIA_PROCESS_INJECTION_CRASH_REPORTING="1" NVTX_INJECTION64_PATH="Nvda.Graphics.Interception.dll" NV_TPS_LAUNCH_TOKEN="Frame Debugger" NV_TPS_LAUNCH_UUID="{56668efa-f1f6-4747-9b8f-5c7177c9b9cd}" "/home/nvidia/tegra_multimedia_api/samples/backend/test.sh" 

//처음 아래의 설정때문에 오동작되는 것으로 생각했는데, 이 문제가 아님 
NVTX_INJECTION64_PATH="Nvda.Graphics.Interception.dll"  


접속에러일 경우, Auto Connection을 NO로 하고, 상위와 같이 Target에서 설정확인
  https://devtalk.nvidia.com/default/topic/1047040/nsight-graphics/connection-error-detected-while-trying-to-launch-net-core-application/

NVTX_INJECTION64_PATH 확인
  https://docs.nvidia.com/cuda/profiler-users-guide/index.html


처음에는 상위와 같이 잘 동작하다가, 갑자기 아래와 같이 동작되지 않는 현상 발생

$ sudo /opt/nvidia/nsight-graphics-for-l4t/nsight-graphics-for-l4t-2018.7/host/linux-desktop-nomad-x64/nv-nsight-gfx  // 실행시 문제발생시, Log 기록  
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
[13341:13341:0704/154153.945344:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
[13351:13351:0704/154153.976574:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
Running Firefox as root in a regular user's session is not supported.  ($HOME is /home/jhlee which is owned by jhlee.)
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: iceweasel: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: seamonkey: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: mozilla: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: epiphany: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: konqueror: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: chromium-browser: not found
[13380:13380:0704/154154.152895:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: www-browser: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: links2: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: elinks: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: links: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: lynx: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: w3m: not found
xdg-open: no method available for opening 'https://developer.nvidia.com/nsight-graphics'
[13470:13470:0704/154209.229063:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
[13480:13480:0704/154209.252690:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
Running Firefox as root in a regular user's session is not supported.  ($HOME is /home/jhlee which is owned by jhlee.)
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: iceweasel: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: seamonkey: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: mozilla: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: epiphany: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: konqueror: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: chromium-browser: not found
[13508:13508:0704/154209.297859:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: www-browser: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: links2: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: elinks: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: links: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: lynx: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: w3m: not found
xdg-open: no method available for opening 'https://developer.nvidia.com/nsight-graphics'


현재 원인으로는 저장시  /home/jhlee/문서/NVIDIA Nsight Graphics 로 저장되어 한글때문에 문제가 발생하는 것으로 추측


  • 해결방법
help->Reset Application Data 로 완전 초기화 


4.5  NVIDIA SITE의 사용예제 

  • Range-Based GPU Profiling ( NVIDIA 사이트의 예제 가져옴  )
아래의 NVIDIA SIte에서 이용되어지는 화면을 가져옴


Tegra Graphics Debugger
  https://developer.nvidia.com/tegra-graphics-debugger
  https://docs.nvidia.com/tegra-graphics-debugger/2.4/index.html#developertools/mobile/tegra_graphics_debugger/tgd_setup_linux.htm%3FTocPath%3D_____4

Nsight Graphics Manual
  https://developer.nvidia.com/nsight-graphics

Nsight Graphics Manual
  https://docs.nvidia.com/nsight-graphics/UserGuide/index.html

1/17/2019

Nvidia 개발환경-Nsight Tools (JetPack 3.3)

1. Nvidia의 Nsight 기본소개  

Nsight는 NVIDIA에서 제공하는 IDE Development Tool로 손쉽게 개발환경을 구축하는것을 도와준다.
현재 EVM Jetson TX2의 JetPack을 설치를 진행했다면, 기본으로 설치가 되어있으며, 본인이 별도로 원한다면 별도 설치도 가능한 것 같다.


Nsight Eclipse Edition
  https://developer.nvidia.com/nsight-eclipse-edition

Nsight Eclipse Edition 관련 Manual
  https://docs.nvidia.com/cuda/nsight-eclipse-edition-getting-started-guide/index.html#introduction
  https://docs.nvidia.com/cuda/nsight-eclipse-plugins-guide/index.html


1.1 JetPack 3.3 기능확인  

JetPack은 3.3 과 4.1.1 이 존재하지만  JetPack 4.1.1 아직 설치를 해보지 못했으며, 현재 JetPack 3.3만 설치를 진행을 한 상태이다.
JetPack은 Nvidia사에서 제공해주는 Host Development Tool 과 각 Device의 SDK로 구성이 되어있으며, 각 기능을 구분해서 잘 알아두자.

NVIDIA에서 JetPack에서는 Jetson TX2 SDK를 다음과 같은 기능 제공해준다.
자세한 내용은 Download 사이트와 Manual 참조
  • OS : Ubuntu  (L4T28.2.1)
  • Libraries : TensorRT/cuDNN / VisionWorks/ OpenCV /MultiMedia API 
  • Developer Tools

CUDA Tools
  https://developer.nvidia.com/debugging-solutions

Nsight Systems
  https://developer.nvidia.com/nsight-systems

Nsight Graphics
  https://developer.nvidia.com/nsight-graphics

TensorRT
  https://docs.nvidia.com/deeplearning/sdk/tensorrt-sample-support-guide/index.html
 https://github.com/NVIDIA-AI-IOT/tf_to_trt_image_classification#convert

Deep Learning SDK
  https://docs.nvidia.com/deeplearning/sdk/index.html


  https://ngc.nvidia.com/catalog/landing

  • JetPack Download
JetPack의 기능 및 Version 그리고 해당 보드 관련사항 확인
  https://developer.nvidia.com/embedded/jetpack

  • JetPack Manual 
상위정보들이 자세히 설명되어있으니, 반드시 확인
  https://docs.nvidia.com/jetson/jetpack/index.html

  • JetPack Archive
각 개별 JetPack Version들을 알아보자
  https://developer.nvidia.com/embedded/jetpack-archive


1.2 CUDA Toolkit 

NVIDIA에서는 CUDA Toolkit을 배포하고 있으며, 이안에는 NVCC/CUDA-GDB 및 개발환경이 구성이 되어있다.
TI처럼 NVIDIA의 Compiler 및  관련 Binutil을 별도로 제공하고 있으며,  Cross GCC의 개념으로 이해하면 될 것 같다.

NVIDIA에서는 CUDA관련된 Version에 이름이 존재하는 것 같으며 각각 Maxwell, Pascal 이 존재하는 것 같다.

CUDA Toolkit Version 별 배포
  https://developer.nvidia.com/cuda-toolkit-archive

CUDA Toolkit 및 NVCC 관련정보
  https://docs.nvidia.com/cuda/index.html

CUDA NVCC(CUDA Compiler) GDB 관련정보
  https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html
  https://docs.nvidia.com/cuda/cuda-gdb/index.html

1.3 NVIDIA 기타 개발툴 정보 

아직 사용해보지 못했으며, 추후 기회가 있다면 다시 검토를 해보자.

NVIDIA에서 제공하는 Developer Tools
  https://developer.nvidia.com/tools-overview

Nsight Visual Studio Edition
  https://developer.nvidia.com/nsight-visual-studio-edition

1.4 Jetson TX2의 Gstreamer 관련 정보 

추후 이부분은 python or command로 간단히 테스트를 진행을 해봐야 할 것 같으며, 간단히 간단히 테스트 한 후
관련기능을 따로 분리하여 기술한다.

Jetson Tx2 Gstreamer 관련정보
  https://developer.download.nvidia.com/embedded/L4T/r28_Release_v1.0/Docs/Jetson_TX2_Accelerated_GStreamer_User_Guide.pdf?fyfql6tLeytPjeEWlf9cmzFMS-kKyNcs3JrYDhp9oRT4q2MrtQc6r_NvoeMQIvlwddGG0FEeRTX3gIVF_qITlT_BmK9C5TZCxnc0dd3sKEZj0v8sykAGEozzCQB28U_3kajqqA4Sybn6tIz5v0CMBMkIHigbgTkBdh15DJf207mYxn35u8euwDWBM6SYyyE-Lw

2. Nsight Eclipse Edition 

JestsonTX2 개발환경에서 JetPack3.3 설치하여 자동으로 Ubuntu 16.04에  Nsight가 설치되었으며, 별도의 설치를 진행하지 않았다.

$ which nsight       // nsight 설치 위치 
/usr/local/cuda-9.0/bin/nsight

$ ls /usr/local/cuda-9.0/bin/
bin2c        cuda-gdb                     cuda-memcheck  cuobjdump            nsight                       nvcc.profile  nvprof   ptxas
computeprof  cuda-gdbserver               cudafe         fatbinary            nsight_ee_plugins_manage.sh  nvdisasm      nvprune
crt          cuda-install-samples-9.0.sh  cudafe++       gpu-library-advisor  nvcc                         nvlink        nvvp

$ nsight    // Nsight 실행 


별도의 설치를 한다면 상위 Nsight Eclipse Version 별도로 Download하여 설치를 추후 진행을 해보자.

Eclipse 기본사용법
  https://ahyuo79.blogspot.com/search/label/IDE-Eclipse

Nsight Eclipse
  https://devblogs.nvidia.com/cuda-jetson-nvidia-nsight-eclipse-edition/


2.1 Nsight 의 TEST Program 작성 및 기본 TEST

현재 CUDA C/C++ Project는 문제가 없으므로, C/C++ 중심으로 테스트를 진행을 해본다.

File->New->C++ Project 실행













빌드 후 생성된 TEST ELF 파일을  sftp 이용하여 command 전송 후 테스트를 진행해 본다.


  • Host PC (Ubuntu 16.04) SFTP 전송 

$ cd ~/cuda-workspace/TEST/Debug/
$ ls 
TEST  makefile  objects.mk  sources.mk  src

$ readelf -a TEST | head    // ARM Version 인지 확인 
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           AArch64
  Version:                           0x1


//SFTP 이용하여 TEST File 전송 

$ sftp nvidia@10.0.0.170   // JestonTx2 유선 연결 
or
$ sftp nvidia@192.168.55.2 // JetsonTx2 USB Ethernet 연결 

sftp> ls
Desktop                         Documents                       Downloads                       Music                           
NVIDIA_CUDA-9.0_Samples         Pictures                        Public                          Templates                       
Videos                          VisionWorks-SFM-0.90-Samples    examples.desktop                jetson_clocks.sh                
jhlee                           tegra_multimedia_api            tegrastats                      weston.ini  

sftp> put TEST 
Uploading TEST to /home/nvidia/TEST
TEST                                                                                           100%   67KB  67.4KB/s   00:00  

sftp> exit


  • HOST PC USB-ACM0 접속 

Host에서 USB ACM0 or USB CDC-ECM 으로 접속하여 Target에서 실행

$ sudo minicom -s   //ttyACM0 접속 

nvidia@tegra-ubuntu:~$ ./TEST
!!!Hello World!!!



2.2 SSH와  CUDA-GDB 이용하여 Debug 기능 설정  

Project Explorer창에서  TEST Project에서 우측 마우스 버튼을 클릭
  1. Run As->Run Configurations 선택  
  2. Debug As->Debug Configurations 선택 

  • Run Configuration 창 


Remote Connection의 우측 Manage 선택


Remote Connection 설정

이미 JetsonTx2의 usb0의 주소 192.168.55.2 설정됨
nvidia / ubuntu  두개의 ID 중 선택




상위 Remote toolkit을 아래와 같이 설정
/usr/local/cuda/bin




  • Run Configuration 설정확인




  • Run Configuration 의 CUDA-GDB -> Legacy Remote 변경 
현재 CUDA-GDB를 이용하고 있으며, 이를 일반적으로 변경을 원한다면  Run Configuration의 하단의

Using CUDA-GDB Remote Debugging Launcher- Select other 선택 


  • Debug Configuration 의 CUDA-GDB -> Legacy Remote 변경 
좀 더 다양한 기능을 제공하지만 현재 CUDA-GDB Remote Debugging Launcher만 작동
(일반 GDB와 통신지원이 되지 않는다)


GDB Remote
  http://sourceware.org/gdb/onlinedocs/gdb/Connecting.html
  https://sourceware.org/gdb/onlinedocs/gdb/Server.html
  https://www.hahwul.com/2015/11/debugging-gdb-using-gdb-for-remote.html


2.3  Remote Debug 및 BreakPoint 기능제공

상위에서 기본적으로 CUDA-GDB Remote 시스템으로 설정을 하면 아래와 같이 원격 Debug Mode가 작동이 되며,
Break Point 및 다양한 기능을 사용할 수 있다.

  • Break point 설정 
JTAG에서 제공하는 프로그램 처럼 GDB를 이용하여 프로그램의 Breakpoint를 사용하여 제어가 가능하다.




  • Debug Mode 실행확인 
  1. Project Explorer창에서  TEST Project에서 우측 마우스 버튼을 클릭
  2. Debug As->Remote C/C++ Application 선택 




아래의 영상은 CUDA C/C++를 이용하여 TEST를 진행을 하고 있으며, 이를 참조하여 Cuda도 적용해보자.
    https://www.youtube.com/watch?v=2Mi3MRKtg2M

예전에 GDB를 이용한 DDD처럼 각 기능을 Eclipse에서 사용할 수 있어 편했으며, Nsight의 기본기능확인이니,
세부기능인 Profiler / Memory Access / Disasemble/ Graph 기능 지원여부를 알아보도록하자.

TI에서 지원되는 것처럼 다 지원이 될 것 같은데, 다만 JTAG 대신 GDB을 이용하여 하기 때문에 기능제한이 있을 거라고 생각한다.

3. Tegra System Profiler (NVIDIA System Profiler)


$ cd ~/project/jetsonTX2   // Jetpack 3.3 설치장소 
$ cd  NVIDIA_System_Profiler
$ ls 
Host-x86_64  Target-arm  Target-arm-linux

$ cd Host-x86_64
$ ./SystemProfiler                // Tegra System Profiler  실행 

실행시 다음과 같이 실행

  • SSH를 이용하여 Jetson TX2 과 연결 



  • PID를 이용하여 Profile 진행 


상위에 지원되지 않는 Trace는 우측에 !로 표시되므로 관련부분은 미체크하고 실행


4.  NVIDIA Visual Profiler

Nsight Ecplise Edition에 포함되는 기능으로 개별적으로 실행이 가능하지만, 가급적 상위 Ecplise Edition으로 실행해서 사용하는 것이 좋다.


$ cd ~/project/jetsonTX2   // Jetpack 3.3 설치장소 
$ cd devtools_docs
$ ls 
NVIDIA System Profiler 4.0  Tegra Graphics Debugger 2.5     // 관련 Manual 참조 

  • 실행방법 
$ sudo /usr/local/cuda-9.0/bin/nvvp 



동일하게 SSH로 연결이 되지만 어떻게 사용하는 것인지는 매뉴얼을 자세히 봐야겠다.


관련메뉴얼
  https://docs.nvidia.com/cuda/profiler-users-guide/index.html#visual


5.  Tegra-Graphics-Debugger


  • 관련 설명서 참고 

$ cd ~/project/jetsonTX2   // Jetpack 3.3 설치장소 
$ cd devtools_docs
$ ls 
NVIDIA System Profiler 4.0  Tegra Graphics Debugger 2.5     // 관련 Manual 참조 

아직 필요성을 크게 느끼지 못해 사용하지 않고 있으며, 추후 자세한 기능을 알게된다면, 그때 다시 사용하도록 하자.


  • 실행방법 

$ sudo /usr/local/Tegra-Graphics-Debugger-2.5/nvidia-gfx-debugger 

//Error 
/usr/local/Tegra-Graphics-Debugger-2.5/nvidia-gfx-debugger.bin: error while loading shared libraries: libgstreamer-0.10.so.0: cannot open shared object file: No such file or directory

Ubuntu 16.04는 gstreamer 0.10을 현재 미지원
   https://github.com/toggl/toggldesktop/issues/1894

Gstreamer 0.10을 직접 Download
  https://devtalk.nvidia.com/default/topic/1026605/linux-graphics-debugger/error-loading-shared-libraries/

관련 메뉴얼
   https://developer.nvidia.com/tegra-graphics-debugger