I have been itching to make some new gnuradio blocks that make use of
volk. So to avoid disturbing the delicate balance of code in
gnuradio-core, I have produced a new component called gr-basic.
The goal of gr-basic is to replace many of the blocks in gnuradio-core
with vector optimized blocks that call into volk; and to make it easy
for users to extend blocks to support new data types. You can see the
branch here: http://gnuradio.org/cgit/jblum.git/log/?h=gr_basic
So far, gr-basic has the familiar add, multiply, subtract and divide
block, but with 2 major differences:
It is very easy to add new data types to these blocks. So it doesn’t
suffer from the confusing code generation or naming convention issues
with the existing adder. So rather than generating gr_add_* for each
data type, there is one block add, which takes as a parameter, the data
Some of the adder implementations use volk routines. We happened to
already have a volk routine for adding floats, so rather than calling
into the generic implementation, we call into a work function that calls
the volk add routine, seen here:
Just as a rough benchmark, you can expect a 30% savings in overhead from
the adder (tested on a sse machine).
I hope that this gives users a good starting point for optimizing
gnuradio blocks with volk!