Thank you so much Marcus,

I've learnt so much from you here :)
The algorithm of finding the Max of a vector by comparing one half to the
other half, is an appropriate idea! I can't use GNURadio blocks for this
calculation because I must do these within my own block.

Unfortunately, I'm not familiar with optimization and parallelization
algorithm, so I just want to compute fast not necessarily as fast as
possible :)

Best,
Mostafa

On Wed, Oct 8, 2014 at 5:56 AM, Marcus Müller <marcus.muel...@ettus.com>
wrote:

>  Hi Mostafa,
>
> VOLK is but an accelerated Library of Vector Optimized Kernels.
> What you want is basically three operations:
> a) finding maximum absolute
> b) finding average absolute
> c) dividing these two values
>
> Now, looking closer at a) and b), one notices that both require the
> samples to be converted to their magnitudes, first. And because we're in
> the business of optimizing things, let's just use the squared magnitude,
> because that's faster to compute by one sqrt, usually. So this boils down to
> a) take mag_squared of input (length N)
> b1) find maximum of a)
> b2) find sum of a)
> c) sqrt(b2/b1)/N
>
> As you can see, c) is not a vector operation, and thus not a case for volk.
> For a) ("Complex to Mag ^ 2") there is a GNU Radio block that uses VOLK.
> That's the example for using VOLK that I would have recommended to read,
> anyway :)
>
> In other terms: If you don't have to write your own highly optimized
> block, don't use VOLK directly, use the standard GNU Radio blockset. It's
> rather optimized ;)
>
> Now, for the maximum search b1, things are a bit more complicated.
> Searching for a maximum is not *easily* vectorizable, because it is a
> inherently sequential operation (think of it as the first step of a bubble
> sort).
> Now, you can achieve *awesome* performance by basically turning your
> linear search into a N-ary tree, with N being the order of parallelism you
> can achieve by using a maximum-finding SIMD instruction. But that requires
> the size of the problem to be a power of N. That just doesn't fly well with
> the usually more "multiple of 64 bit"-typey alignment restrictions.
> You're however, highly encouraged to try just that: use the existing
> volk_32f_x2_max_32f, which compares two vectors, and stores the
> element-wise maximum in a third one, to compare the first with the second
> half of your mag_squared vector, and repeat the same with the first and
> second half of the result (and so on) until you have a single maximum
> value. That's the comparison tree from above for the N=2 case. You can
> employ clever overlapping to use as many values twice in the input to
> virtually extend your input's length to a power of two, and then just waltz
> on.
>
> For b2) you can simply use the "integrate" block, which is not VOLK
> optimized (possibly because it's a gengen template and these are *so much
> fun* to specialize). But seeing as it is simply an accumulating for loop, I
> kind of expect your compiler to make the best of the situation. However,
> you can also use the volk_32f_accumulator_s32f VOLK kernel. I kind of want
> to use that in integrate, because for my machine, the SSE VOLK kernel is 4
> times as fast as the generic implementation, which nicely matches the
> 4-operand SSE SIMD instruction behind it.
>
> Greetings,
> Marcus
>
>
> On 07.10.2014 21:49, Mostafa Alizadeh wrote:
>
> Hello all,
>
> I wondered about volk. I want it to compute mean to peak value of a complex
> array. How could I do this?
> Besides, I really need to know is there any example of using volk? The code
> itself, doesn't reflect input and output parameters explicitly.
>
> Best,
> Mostafa
>
>
>
>
> _______________________________________________
> Discuss-gnuradio mailing 
> listDiscuss-gnuradio@gnu.orghttps://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>
>
>
> _______________________________________________
> Discuss-gnuradio mailing list
> Discuss-gnuradio@gnu.org
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>
>


-- 
***********************************************************
Department of Electrical Engineering
Aboureyhan Building
MMWCL LAB
Amirkabir University Of Technology
Tehran
IRAN
Tel: +98 (919) 158-7730
LAB: http://ele.aut.ac.ir/~mmwcl/?page_id=411
Homepage: http://ele.aut.ac.ir/~alizadeh/
***********************************************************
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to