On Mon, Jun 23, 2008 at 6:37 PM, Eric B. [email protected] wrote:
On Mon, Jun 23, 2008 at 05:42:16PM -0400, Mikyung H. 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.
./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 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 >&, 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, std::complex
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