# VOLK - vector multiplication

**URL:** <https://www.ruby-forum.com/t/volk-vector-multiplication/239928>\
**Category:** GNU Radio\
**Created:** [March 20, 2014, 12:07pm UTC](https://www.ruby-forum.com/t/volk-vector-multiplication/239928 "2014-03-20T12:07:17Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![musicdenotation](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/ea666f/32.png) [@musicdenotation](https://www.ruby-forum.com/u/musicdenotation)\
**Post date:** [March 20, 2014, 12:07pm UTC](https://www.ruby-forum.com/t/volk-vector-multiplication/239928/1 "2014-03-20T12:07:17Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![nesazeri](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e19adc/32.png) [@nesazeri](https://www.ruby-forum.com/u/nesazeri)\
**Post date:** [March 20, 2014, 3:09pm UTC](https://www.ruby-forum.com/t/volk-vector-multiplication/239928/2 "2014-03-20T15:09:34Z")

</div>

On Thu, Mar 20, 2014 at 7:05 AM, Nasi [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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:

> **[Nearly 50 Minutes of Volk! — Rondeau Research](http://www.trondeau.com/blog/2013/6/12/nearly-50-minutes-of-volk.html)**
>
> I want to announce that a slide show plus audio of me talking about our Volk library has been published by the IEEE Signal Processing Society here: 
> http://www.brainshark.com/SPS/vu?pi=zH8zQcV8dzAXPbz0  
> This is based on a paper and presentation...

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

---

<div class="post-metadata">

**Author:** ![nesazeri](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e19adc/32.png) [@nesazeri](https://www.ruby-forum.com/u/nesazeri)\
**Post date:** [March 20, 2014, 3:11pm UTC](https://www.ruby-forum.com/t/volk-vector-multiplication/239928/3 "2014-03-20T15:11:54Z")

</div>

I had the same question. Thanks! 🙂

---

<div class="post-metadata">

**Author:** ![nesazeri](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e19adc/32.png) [@nesazeri](https://www.ruby-forum.com/u/nesazeri)\
**Post date:** [March 20, 2014, 3:30pm UTC](https://www.ruby-forum.com/t/volk-vector-multiplication/239928/4 "2014-03-20T15:30:01Z")

</div>

On Thu, Mar 20, 2014 at 10:09 AM, Aditya D. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> I had the same question. Thanks! 🙂

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

---

<div class="post-metadata">

**Author:** ![nesazeri](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e19adc/32.png) [@nesazeri](https://www.ruby-forum.com/u/nesazeri)\
**Post date:** [March 20, 2014, 5:52pm UTC](https://www.ruby-forum.com/t/volk-vector-multiplication/239928/5 "2014-03-20T17:52:35Z")

</div>

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. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

---

<div class="post-metadata">

**Author:** ![nesazeri](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e19adc/32.png) [@nesazeri](https://www.ruby-forum.com/u/nesazeri)\
**Post date:** [March 20, 2014, 7:18pm UTC](https://www.ruby-forum.com/t/volk-vector-multiplication/239928/6 "2014-03-20T19:18:27Z")

</div>

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. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

---

<div class="post-metadata">

**Author:** ![nesazeri](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e19adc/32.png) [@nesazeri](https://www.ruby-forum.com/u/nesazeri)\
**Post date:** [March 20, 2014, 7:48pm UTC](https://www.ruby-forum.com/t/volk-vector-multiplication/239928/7 "2014-03-20T19:48:49Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![nesazeri](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e19adc/32.png) [@nesazeri](https://www.ruby-forum.com/u/nesazeri)\
**Post date:** [March 20, 2014, 6:05pm UTC](https://www.ruby-forum.com/t/volk-vector-multiplication/239928/8 "2014-03-20T18:05:26Z")

</div>

On Thu, Mar 20, 2014 at 12:51 PM, Nasi [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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
