discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] oprofile callgraph question


From: Mikyung Han
Subject: Re: [Discuss-gnuradio] oprofile callgraph question
Date: Mon, 23 Jun 2008 18:53:07 -0400



On Mon, Jun 23, 2008 at 6:37 PM, Eric Blossom <address@hidden> wrote:
On Mon, Jun 23, 2008 at 05:42:16PM -0400, Mikyung Han wrote:
> BTW, any suggestion for finding out who caused calling the symbols such as
> __ieee754_atan2
> and __kernel_cosf, __kernel_sinf, __ieee754_rem_pio2f from libm-2.5.so?

What kind of a machine are you running on?
uname -a gives
2.6.18-53.1.19.el5 #1 SMP Tue Apr 22 03:01:10 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux
 

The first is of course the guts of atan2.  I'm surprised to see it.
I think the only place it could be getting called is by way of the
complex arg(z) function.   We're replace all the others with calls to gr_fast_atan2

Yeah, I think I used 3.1.1 for atsc example.
 

address@hidden trunk]$ dgs . '\barg[ \t]*('
./gnuradio-core/src/lib/general/gr_remez.cc: *      Change: ColumnVector x=arg(i).vector_value();
./gnuradio-core/src/lib/general/gr_remez.cc: *      to: ColumnVector x(arg(i).vector_value());
./gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.cc:  return -arg(sample*conj(d_constellation[d_current_const_point]));
./gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc:  float angle = arg(accum_error);
./gnuradio-core/src/lib/general/gr_complex_to_xxx.cc:    //    out[i] = std::arg (in[i]);
./gnuradio-core/src/lib/general/gr_quadrature_demod_cf.cc:    // out[i] = d_gain * arg (product);


The last 3 are from the guts of cosf and sinf.

What's your test case?

Besides, atsc example, I tried profiling benchmark_ofdm_rx/tx.py 

- profiling benchmark_ofdm_rx.py now gives

samples  %        app name                 symbol name
226875   22.8492  libgnuradio-core.so.0.0.0 .fcomplex_dotprod_sse64_loop2
79310     7.9875  libgnuradio-core.so.0.0.0 .float_dotprod_sse64_loop2
61142     6.1578  libm-2.5.so              __ieee754_rem_pio2f
57980     5.8393  libm-2.5.so              __kernel_rem_pio2f
31631     3.1856  libgnuradio-core.so.0.0.0 gr_fir_ccf_simd::filter(std::complex<float> const*)
30052     3.0266  libm-2.5.so              __kernel_sinf
26588     2.6778  libm-2.5.so              sincosf
25214     2.5394  libm-2.5.so              __kernel_cosf
23153     2.3318  libgnuradio-core.so.0.0.0 gr_fast_atan2f(float, float)
22000     2.2157  libgnuradio-core.so.0.0.0 gr_single_threaded_scheduler::main_loop()
20853     2.1002  libgnuradio-core.so.0.0.0 .cleanup
13089     1.3182  libmozjs.so              (no symbols)
12536     1.2625  libgnuradio-core.so.0.0.0 gr_ofdm_frame_acquisition::coarse_freq_comp(int, int)
12384     1.2472  libgnuradio-core.so.0.0.0 gr_fft_filter_ccc::work(int, std::vector<void const*, std::allocator<
void const*> >&, std::vector<void*, std::allocator<void*> >&)
12080     1.2166  libm-2.5.so              __ieee754_hypotf
11982     1.2067  libgnuradio-core.so.0.0.0 gr_ofdm_frame_acquisition::general_work(int, std::vector<int, std::al
locator<int> >&, std::vector<void const*, std::allocator<void const*> >&, std::vector<void*, std::allocator<void*
> >&)
11453     1.1535  libgnuradio-core.so.0.0.0 gr_fir_ccf_generic::filterN(std::complex<float>*, std::complex<float>
 const*, unsigned long)
10726     1.0802  libgnuradio-core.so.0.0.0 gr_multiply_cc::work(int, std::vector<void const*, std::allocator<voi
d const*> >&, std::vector<void*, std::allocator<void*> >&)
10250     1.0323  libgnuradio-core.so.0.0.0 gr_peak_detector_fb::work(int, std::vector<void const*, std::allocato
r<void const*> >&, std::vector<void*, std::allocator<void*> >&)
10135     1.0207  libfftw3f.so.3.1.2       t2fv_32

- for profiling benchmark_ofdm_tx.py gives:

21303    10.8694  libpython2.4.so.1.0      (no symbols)
18889     9.6377  vmlinux-2.6.18-53.1.19.el5 mwait_idle
8283      4.2262  libgnuradio-core.so.0.0.0 gr_single_threaded_scheduler::main_loop()
6579      3.3568  libgnuradio-core.so.0.0.0 gr_multiply_const_cc::work(int, std::vector<void const*, std::allocator<void const*> >
&, std::vector<void*, std::allocator<void*> >&)
6266      3.1971  vmlinux-2.6.18-53.1.19.el5 apic_timer_interrupt
5521      2.8170  ehci_hcd                 (no symbols)
5106      2.6052  libc-2.5.so              memcpy
5011      2.5568  libc-2.5.so              strcmp
4356      2.2226  libfftw3f.so.3.1.2       t2bv_64
3691      1.8833  libcrypto.so.0.9.8b      (no symbols)
3471      1.7710  libgnuradio-core.so.0.0.0 gr_ofdm_mapper_bcv::work(int, std::vector<void const*, std::allocator<void const*> >&,
 std::vector<void*, std::allocator<void*> >&)
2769      1.4128  vmlinux-2.6.18-53.1.19.el5 schedule
2675      1.3649  oprofiled                (no symbols)
2534      1.2929  _usrp1.so                usrp1_sink_c::copy_to_usrp_buffer(std::vector<void const*, std::allocator<void const*>
>&, int, int, int&, void*, int, int&)
2403      1.2261  libX11.so.6.2.0          (no symbols)
2212      1.1286  libgnuradio-core.so.0.0.0 gr_ofdm_cyclic_prefixer::work(int, std::vector<void const*, std::allocator<void const*
> >&, std::vector<void*, std::allocator<void*> >&)
1978      1.0092  libgnuradio-core.so.0.0.0 gr_block_detail::input(unsigned int)


> Also .cleanup?

.cleanup is a just a label toward the bottom of the SIMD code.
It's unlikely you're getting any serious amount of hits there, it's
not in a loop.


Eric


I guess I need to study the mapping from python code to c files and assembly codes.
What would you suggest doing, reading, etc in order to figure out this mapping and skeleton of ofdm example?
My eventual goal is to firgure out which piece of code is taking most of the resources for ofdm.


Thanks!

Mikie
reply via email to

[Prev in Thread] Current Thread [Next in Thread]