discuss-gnuradio
[Top][All Lists]
Advanced

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

Re: [Discuss-gnuradio] Small cleanups for inband code


From: Stefan Brüns
Subject: Re: [Discuss-gnuradio] Small cleanups for inband code
Date: Fri, 30 Jan 2009 18:35:29 +0100
User-agent: KMail/1.9.9

Here is another series of patches. These come in 3 flavours:

Independent, general cleanups and additions, which neither influence API nor 
ABI
        c1255: Minor optimization, assume well formed list as common case
        c1256: Avoid some double type casting
        c1261: Add some unit test for pmt_subsetp and pmt_memq

Changes in ABI, changing no functionality
        c1257: Make function arguments const& (incomplete)
        c1260: Make function arguments const& (continued)

Intrusive changes (pun intended)
        c1258: Switch from shared_ptr to intrusive_ptr for pmt_t

Some more comments:
Patches in the first group should need no further discussion, as these are 
just some optimizations which are completely invisible (despite speedup) from 
the outside.
The second group should be unproblematic as well. Although a recompile of 
anything dependent on pmt is needed, behaviour is unchanged.

The third one may need some more comments:
currently (trunk) pmt_t is defined as boost::shared_ptr<pmt_base>. Although 
the refcounting is quite nice, it comes at a quite high cost. Every shared 
pointer is combined from 3 objects, one being the "data" (in this case, 
pmt_base), one the object for the refcounting, and the third one the 
shared_ptr itself, holding pointers to two aforementioned objects. The last 
one may be created on the stack, but the other two are allocated on the heap.

This costs are cut by half if using intrusive_ptr's. The refcount is stored in 
the object itself. Some more speed is gained by the fact that some operations 
are just simpler for intrusive_ptr than for shared_ptr (have a look at eg 
operator= ....). Although the gain is high, there are no code changes needed, 
just a simple recompile

All patches have been tested by running the mblock and pmt qa tests.

---
Benchmarks:
P4 HT @ 2.80GHz
test_usrp_inband_tx with a constant value for the signal generator:

Results of running "time ./test_usrp_inband_tx" (trunk)
real    0m20.670s
user    0m7.348s
sys     0m2.328s

Results of running "time ./test_usrp_inband_tx" (all patches applied)
real    0m20.574s
user    0m3.632s
sys     0m1.992s
---

Regards,

Stefan

PS: Not finished yet. Next is switching pmt_list* from pairs to vectors and 
mb_message to intrusive_ptr as well. Also nice to have: lockless 
implementation of the message queue ...

-- 
Stefan Brüns  /  Bergstraße 21  /  52062 Aachen
mailto:lurch at gmx.li  http://www.kawo1.rwth-aachen.de/~lurchi/
   phone: +49 241 53809034     mobile: +49 151 50412019

Attachment: c1255.diff
Description: Text Data

Attachment: c1260.diff
Description: Text Data

Attachment: c1261.diff
Description: Text Data

Attachment: c1256.diff
Description: Text Data

Attachment: c1257.diff
Description: Text Data

Attachment: c1258.diff
Description: Text Data


reply via email to

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