Profiling OpenCV based C++ application using NSight

Hi,

I have been actively looking for the best options to profile my C++ application on Jetson TX1. I would like to know information like CPU cycles consumed at function level and memory traffic. Following are some of the queries I have regarding the same :

  1. Based on my research so far NVIDIA NSight seems to be the most appropriate tool to do so. Since my application does not make use of CUDA as yet, I would like to know if I should still go ahead with NVIDIA NSight remote profiling. If so, is there is any useful link which states the procedure to achieve the same with explanation of every step?

  2. Are there any other alternative profiling tools which could be used specifically for Jetson TX1 (for non-CUDA based applications) ?

  3. I am also looking for ways to implement a logger in my application for debugging purposes. It would greatly help if someone can suggest a lightweight logger which is easy to use .

I have tried my hand at NVIDIA NSight but somehow I havent been able to profile/build on target (TX1) using Linux based host. I am able to run an already built executable on target system from my host machine but would like to get to profiling/ building as soon as possible. Any help in this direction would be of great help to me.

Thanks

Hi,

Thanks for your question.
NSight targets for GPU usage profiling (ex. CUDA stream, memcpy…) although it also contains some CPU summary.

If your application is CPU-based, it’s recommended to use TegraSystemProfiler, which can be installed via JetPack.
Tegra System Profiler can profile more CPU behaviour and trace path in function call.

For log, I think any lightweight logger for Linux should be also good for tx1.

Tegra System Profiler
https://developer.nvidia.com/tegra-system-profiler
http://docs.nvidia.com/tegra-system-profiler/index.html

Nsight
https://devblogs.nvidia.com/parallelforall/nvidia-nsight-eclipse-edition-for-jetson-tk1/
[url]https://devtalk.nvidia.com/default/topic/978541/jetson-tx1/cross-compiler-tx1-with-vectoradd-example-and-nsight-eclipse/post/5081425/#5081425[/url]

Hi,

Thanks for your reply. After reading your post I now feel that TegraSystemProfiler could be a better fit for my use. If I understand its functioning right, it would mean that I need to install the software from the link that you have shared. I hope it will support Linux based host as well as target systems. I have some queries as mentioned below :

  1. I referred to the link mentioned by you. It has download option only for ubuntu 14.04 while I need it for 16.04. Also it mentions support for Tegra X1 while I need it for Tegra TX1. Do you think this will be an issue going forward.

  2. It also recommends installing the latest release of Codeworks for Android before installing individual components warning that such components might not work properly. I do not need Android support. Would you recommend me to go ahead with installing the way it is being suggested ?

  3. The documentation suggests that minimal version number of the kernel support of Tegra System Profiler on a target device required is 1.82. The version number retrieved using the command mentioned returns 1.107 on the target device. Could you tell me how to upgrade this?

  4. How to run Nvidia Tegra System Profiler on the host machine. I have not been able to find a way to start the application. Could you please help?

Hi,

Thanks for your feedback and also sorry for my late reply.
I think there is some confusion in my previous post.

For L4T, TegraSystemProfiler should be installed by JetPack directly. Surely, it support ubuntu14.04 host and L4T-rel24.2.1 target.
Tool is launch on host and link to device via SSH with IP/Account/Password information.

Please try it again and let us know the results.
Thanks.

Hi,

Thanks for your reply. I am able to follow that tool has to be launched from host and linked to device via SSH. However, following are some of my queries :

  1. I am having trouble with launching the tool. Is there a command which can be run on the terminal as I am unable find the executable on my host machine.

  2. While installing I had checked all possible options. Hopefully, TegraSystemProfiler was installed at the time of installation. Is there a way I can verify that it has been installed ?

I know some of my queries are very elementary. This is because I am using this board for the first time. It would be great if you can help me out.

Thanks.

Hi,

Thanks for your feedback.

TegraSystemProfiler is downloaded into Jetpack folder on host.

For example, I used Jetpack3.0 and I can found my TegraSystemProfiler is located at:
“[Jetpack folder]/host-x64-linux-public-3.7.224-e982b7b/Host-x86_64/”

Please execute it with

sudo ./TegraSystemProfiler

Thanks.

Hi,

Thanks for the pointer. I am now able to launch TegraSystemProfiler and do some basic profiling on TX1. I would wish to know if there is a possibility to find the memory trace so as to calculate the memory footprint that a particular application or module might be using ?

Hi,

NVVP(Nsight’s backend) can profile the memory transfer. Ex. MemCpy(DtoH).

For the memory usage in TX1, you can check it via tegrastats on device.

sudo ./tegrastats