VOLK - vector multiplication

Hi all,

I am using ubuntu 13.04, GNUradio 3.7.
I have a question related to VOLK library.

When I create a vector, lets say:

vector<gr_complex> y1;

Can I multiply this vector to another vector using VOLK?
Is there any good documentation for this?

On Thu, Mar 20, 2014 at 7:05 AM, Nasi [email protected] wrote:

Is there any good documentation for this?


NE

Myself and Nick McCarthy have published and presented on VOLK. Here’s
a pretty good overview video of using it:

To answer your question, yes, building a vector like that is
acceptable for use with volk kernels as long as you are using the
correct data types. Be aware of alignment requirements, though, which
the link above explains.

Tom

I had the same question. Thanks! :slight_smile:

On Thu, Mar 20, 2014 at 10:09 AM, Aditya D. [email protected]
wrote:

I had the same question. Thanks! :slight_smile:

One thing that I forgot to mention is that VOLK is written purely in
C, so C++ vectors as-is won’t work. You need to index them, but
luckily, std::vector’s are guaranteed to be contiguous in memory when
indexed.

In other words:

std::vector<gr_complex> x;
volk_32fc_something_32fc(&x[0], …);

Tom

Thanks!

As I see you apply it to the first element of x as
in volk_32fc_something_32fc(&x[0], …);.
I want to multiply the whole vector like as a inner product of two
vectors. Is it possible?

NE

Четверг, 20 марта 2014, 10:28 -04:00 от Tom R. [email protected]:

I’ve got this error:

/tmp/ccE79VRG.o: In function main': t2_rx_ompalg.cc:(.text+0x6a5): undefined reference to volk_32fc_x2_dot_prod_32fc’
collect2: error: ld returned 1 exit status I was running it inside main
function as
g++ -std=c++11 t2_rx_ompalg.cc -o t2_rx_ompalg -lm -lfftw3

Do you know what is it for?

NE

Thu, 20 Mar 2014 13:04:02 -0400 от Tom R. [email protected]:

On 03/20/2014 07:16 PM, Nasi wrote:

g++ -std=c++11 t2_rx_ompalg.cc -o t2_rx_ompalg -lm -lfftw3

You need to link to VOLK, too.

M

On Thu, Mar 20, 2014 at 12:51 PM, Nasi [email protected] wrote:

Thanks!

As I see you apply it to the first element of x as in
volk_32fc_something_32fc(&x[0], …);.
I want to multiply the whole vector like as a inner product of two vectors.
Is it possible?

NE

Not sure I exactly follow your comment, but you can do something like
this:

int N;
vector<gr_complex> x(N);
vector<gr_complex> y(N);
vector<gr_complex> z(N);

// fill x and y with stuff

volk_32fc_x2_dot_prod_32fc(&z[0], &x[0], &y[0], N);

That will take the dot product of x and y and put the results in z.

Tom