Hi Johannes,

Thank you very much! Really appreciate your help.

George

On Tue, May 3, 2022 at 10:07 AM Johannes Demel <de...@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 <de...@ant.uni-bremen.de
> > <mailto:de...@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