pgprof - No timeline is required for the analysis

Hello,

I’m trying to run a slam system on pgprof in order to see what are the most computationally heavy functions to future parallelize. I am able to run pgprof but after the analysis, after that typicall message “gerating timeline” i get no timeline at all, just blank…

On the submenu “Analysis”, the screens with the title “results” have the following messages:
No Timeline
Application timeline is required for the analysis.

Why can’t i get the timeline and the details about computation times of each function?

[EDIT]

Just to be clear, this just happens on this program, i’ve tried others much more simpler and it works fine.

Thanks

I managed to found the reason for this behavior. A timeline is only generated for a code that has been parallelized for a GPU.

My code has not been yet parallelized, i only wanted to run the profiler in order to see which function was taking the most. I can’t have this information before starting to parallelize?

Hi Caap,

Pgprof will capture CPU performance (sample based) by default which you can view via the “CPU Details” tab (located near the “Analysis” tab). Note that if you are using nvprof, you can enable CPU profiling via the “–cpu-profiling on” flag.

You can also use NVTX to instrument your code so that the CPU portions of the code are seen in the timeline.

See:
http://docs.nvidia.com/cuda/profiler-users-guide/index.html#nvtx

With Fortran:

Hope this helps,
Mat

Hey Mat,

You are absolutely right, on CPU Details tab i have the information about computation times. Although i have some questions:

  • What exactly is syscall? I understand that it probably is system calls, but what specifically does that represent? Allocation of memory and tasks like that?

  • The syscall represents the most % of time that my application is on, 46% from what the profiler tells me, although, on the tab of time it tells me that syscall takes “720s”. That’s impossible because my execution ran for about 1-2min maximum. What can be happening?

  • My last question is, what represents when it appears “???” ? The profiler couldn’t understand what task was being performed?

Thanks for all the help

What exactly is syscall? I understand that it probably is system calls, but what specifically does that represent? Allocation of memory and tasks like that?

From: http://man7.org/linux/man-pages/man2/syscall.2.html

syscall() is a small library function that invokes the system call
whose assembly language interface has the specified number with the
specified arguments. Employing syscall() is useful, for example,
when invoking a system call that has no wrapper function in the C
library.

No idea why it’s being used here. Are you doing anything with signal handlers or doing a lot of file I/O?

The syscall represents the most % of time that my application is on, 46% from what the profiler tells me, although, on the tab of time it tells me that syscall takes “720s”. That’s impossible because my execution ran for about 1-2min maximum. What can be happening?

If you’re running multiple CPU threads, then the time is aggragated but this would be a lot of threads. Are you sure it’s seconds (s) and not microseconds (ms)?

My last question is, what represents when it appears “???” ? The profiler couldn’t understand what task was being performed?

The profiler is sample based. i.e. is halts execution of the binary periodically and checks where in the program it’s running. Though if the object has been stripped of it’s symbol names (like system libraries), then the profiler doesn’t know the name of the routine were it’s in and hence the “???”.

-Mat

Hi Mat,

No idea why it’s being used here. Are you doing anything with signal handlers or doing a lot of file I/O?

Yes, i’m doing a lot of file I/0. I’m running a SLAM system, so e read hundreds of images.

If you’re running multiple CPU threads, then the time is aggragated but this would be a lot of threads. Are you sure it’s seconds (s) and not microseconds (ms)?

Ahh ok, that explains it. It’s seconds, and yes, it’s doing multiple threads to read images and at the same time reconstruct a map.

The profiler is sample based. i.e. is halts execution of the binary periodically and checks where in the program it’s running. Though if the object has been stripped of it’s symbol names (like system libraries), then the profiler doesn’t know the name of the routine were it’s in and hence the “???”.

Ok. I get a major % of time to ‘???’ tasks, so would be important for me to understand where this is. Is there no way of finding out?