discuss-gnuradio
[Top][All Lists]
Advanced

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

Re: Problem using volk_32fc_s32fc_multiply_32fc function with vector par


From: George Edwards
Subject: Re: Problem using volk_32fc_s32fc_multiply_32fc function with vector params
Date: Tue, 3 May 2022 21:46:48 -0500

Hi Johannes,

Thank you very much! Really appreciate your help.

George

On Tue, May 3, 2022 at 10:07 AM Johannes Demel <demel@ant.uni-bremen.de> wrote:
Hi George,

yes, you need to add `#include <volk/volk_alloc.hh>` to use
`volk::vector`. A `volk::vector` is a specially templated `std::vector`.
You still use it with `.data()`.
An example would be:
```
#include <volk/volk.h>
#include <volk/volk_alloc.hh>

...

volk::vector <gr_complex> my_val (240);
volk_32fc_s32fc_multiply_32fc(my_val.data(), my_val.data(), scale, 240);
```

If you look at the `std::vector` docs:
https://en.cppreference.com/w/cpp/container/vector

You can see `std::vector` has a second template argument that defaults
to `class Allocator = std::allocator<T>`. `volk::vector` provides a
different `Allocator` for it. Thus, you can use a `volk::vector` just
like a `std::vector`. Be aware that different template arguments lead to
different classes and thus, a function that accepts a `std::vector` will
not accept a `volk::vector` and vice versa.

Cheers
Johannes

On 03.05.22 16:01, George Edwards wrote:
> Hi Johannes,
>
> Thank you very much! Thanks for also providing an alternative solution
> if I were to define the vector as a volk vector. Please allow me to
> confirm my understanding of how to use volk vectors. So with my current
> definition using std::vector <gr_complex> my_val (240); you and Brian
> suggested the solution should look as follows:
> volk_32fc_s32fc_multiply_32fc(my_val.data(), my_val.data(), scale, 240);
>
> Based on your volk vector suggested solution, my interpretation is that
> I would write my code as follows:
> volk::vector <gr_complex> my_val (240);
> ....
> volk_32fc_s32fc_multiply_32fc(my_val, my_val, scale, 240); // Or do I
> need to use &my_val
> Also, my current code has the following: #include <volk/volk.h>do I in
> addition need to include #include  <volk/volk_alloc.hh> ?
>
> Thank you very much!
> George
>
>
> On Tue, May 3, 2022 at 3:35 AM Johannes Demel <demel@ant.uni-bremen.de
> <mailto:demel@ant.uni-bremen.de>> wrote:
>
>     Hi George,
>
>     All VOLK functions require pointers as you already noticed. You can
>     access the underlying data structure of a vector via its `.data()`
>     method as Brian noted.
>     Moreover, you can use `volk::vector` if you want your vectors to be
>     aligned. `volk::vector` is almost a `std::vector` but uses its own
>     allocator that ensures alignment.
>     `volk::vector` is available in `volk/volk_alloc.hh`. Since it is a C++
>     only feature.
>
>     Cheers
>     Johannes
>
>     On 03.05.22 04:28, George Edwards wrote:
>      > Hello GNURadio Community,
>      >
>      > I am having a problem using the above function with
>     vector parameters.
>      > If I use an array say:
>      > gr_complex my_val[240];
>      > volk_32fc_s32fc_multiply_32fc(my_val, my_val, scale, 240);
>      >
>      > It works! But if I change my_val to be a vector like below, it fails:
>      > std::vector <gr_complex> my_val(240);
>      >
>      > The reason I need to use a vector is that with arrays, the size
>     must be
>      > known at compile time, while with vectors one can build it at
>     runtime.
>      >
>      > I would appreciate any suggestions.
>      > Thank you!
>      >
>      > George
>

reply via email to

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