interaction with gprof

Salvatore Filippone filippone.salvatore@gmail.com
Mon Nov 18 13:24:00 GMT 2013


Follow up: I have found the *actual* subroutine called.
-----------------------------------------------
                0.00   88.43     816/816         psb_d_base_inner_vect_sv_ [19]
[20]    30.4    0.00   88.43     816         psb_d_csr_cssv_ [20]
               88.43    0.00     816/816         psb_s_fix_coo_ [21]
                0.00    0.00    1632/20175368
__psb_string_mod_MOD_psb_toupperc [107]
                0.00    0.00     816/163361240
__psb_error_mod_MOD_psb_erractionrestore [113]
                0.00    0.00     816/180409801
__psb_error_mod_MOD_psb_erractionsave [110]
                0.00    0.00    1632/31338388
__psb_base_mat_mod_MOD_psb_base_get_nrows [173]
                0.00    0.00     816/2425
__psb_base_mat_mod_MOD_psb_base_is_asb [1159]
                0.00    0.00     816/2233
__psb_base_mat_mod_MOD_psb_base_is_triangle [1160]
                0.00    0.00     816/816
__psb_base_mat_mod_MOD_psb_base_is_lower [1172]
                0.00    0.00     816/1423
__psb_base_mat_mod_MOD_psb_base_is_unit [1165]
--------------------------------------------------
Now the peculiar thing is that psb_d_csr_cssv does *not* call
psb_s_fix_coo; rather, it calls an internal (contained) subroutine
(called inner_csrsv). It would seem that internal subroutines are
confusing the profiler; I vaguely remember seeing other instances, can
dig some more if needed.

So I ask again: is this a bug or a known feature?

Thanks
Salvatore


On Mon, Nov 18, 2013 at 1:58 PM, Salvatore Filippone
<filippone.salvatore@gmail.com> wrote:
> Hello,
> I have been tracking some performance issues, and I  came across
> something strange.
> I have a test program taken from my numerical libraries which I am
> using on a certain test case; I have been using the -pg option
> (together with -O3) to investigate hotspots, and I have found that
> compiling with 4.6.4 and 4.8.2, exact same program  and test case,
> produces two different profiles. The first few lines are as follows:
> -------------------------------------------------------
> 4.6.4:
> --------------------------------------------------------
> Flat profile:
>
> Each sample counts as 0.01 seconds.
>   %   cumulative   self              self     total
>  time   seconds   seconds    calls   s/call   s/call  name
>  28.01     88.60    88.60      816     0.11     0.11  psb_s_coo_csgetrow_
>  10.31    121.23    32.63      601     0.05     0.05  psb_d_csr_csmv_
>   7.82    145.96    24.73     1069     0.02     0.02  daxpby_
>   7.77    170.55    24.59    27320     0.00     0.00
> __mld_diluk_impl_mod_MOD_iluk_fact
>   6.80    192.05    21.50 79808971     0.00     0.00  msort_up_
>   3.32    202.55    10.50      325     0.03     0.03
> __psb_d_base_vect_mod_MOD_d_base_bld_x
>   2.72    211.16     8.61        6     1.44     1.44  dnumbmm_
>   2.67    219.62     8.46      325     0.03     0.03
> __psb_d_base_vect_mod_MOD_d_base_zero
>   2.66    228.05     8.43 67196690     0.00     0.00  psi_int_heap_get_first_
>   2.64    236.40     8.35        6     1.39     2.49  symbmm_
> -------------------------------------------------------
> 4.8.2
> -------------------------------------------------------
> Flat profile:
>
> Each sample counts as 0.01 seconds.
>   %   cumulative   self              self     total
>  time   seconds   seconds    calls   s/call   s/call  name
>  30.43     88.43    88.43      816     0.11     0.11  psb_s_fix_coo_
>  11.14    120.80    32.37      601     0.05     0.05  psb_d_csr_csmv_
>   9.49    148.38    27.58        1    27.58   113.22
> __mld_diluk_impl_mod_MOD_mld_diluk_factint
>   6.92    168.50    20.12 79808971     0.00     0.00  msort_up_
>   4.09    180.38    11.88     1069     0.01     0.01  daxpby_
>   3.72    191.19    10.81      325     0.03     0.03
> __psb_d_base_vect_mod_MOD_d_base_bld_x
>   2.91    199.66     8.47        6     1.41     2.52  symbmm_
>   2.91    208.12     8.46        6     1.41     1.41  dnumbmm_
>   2.77    216.17     8.05 67196690     0.00     0.00  psi_int_heap_get_first_
>   2.69    224.00     7.83       31     0.25     1.01  psb_d_fix_coo_inner_
>
> ========================================================
> Now the disturbing fact is that the first routine mentioned in the
> profile, with the same number of calls and the same accumulated time,
> appears with two different names, and BOTH NAMES ARE WRONG.
> In my naming scheme the _s_ stands for single precision version,
> whereas the program (as can be seen from the second routine
> psb_d_csr_csmv) is a double precision version, no single precision
> routine is called. Indeed I even put some prints in the two routines
> that GPROF is saying are called, and they do not show up.
>
> So my question is: is this supposed to work?
> If not, why (aka, what am I doing wrong)?
> If yes, is it a problem on gprof's side, gfortran's side, an
> interaction with MPI wrappers, all of the above, none of the above?
> Anybody has any suggestions on how to reduce this and/or want to look
> at the source code?
> Thanks
>
> Very perplexed yours
> Salvatore



More information about the Fortran mailing list