summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrant Cox <grant.cox@deepspaceamps.com>2019-11-20 23:18:56 -0600
committerMartin Braun <martin.braun@ettus.com>2020-01-04 23:32:42 -0800
commitebe8ffc58503a1b4f167a13d5663e8849379eaaf (patch)
treecd7b03d36b79966cf9b967bd4305da0bcb5149b1
parent27a466a9c8a03392270fadde9e5bafef5c062e61 (diff)
gr-blocks: VOLKize add_const_ff implementation
- Use volk_32fc_x2_add_32fc to volk add constants to the input vector of the block - use volk::vector in add_const_ff_impl: Rather than using float* for variable length vector addition in volk, use volk::vector<float> for easier resizing. - Use scoped_lock when modifying private data members in add_const_ff_impl.cc. Remove getter functions for the d_k_copy vector. Cast with static_cast rather than typical cast. Use vector.data() rather than &vector[0].
-rw-r--r--gr-blocks/include/gnuradio/blocks/add_const_cc.h1
-rw-r--r--gr-blocks/include/gnuradio/blocks/add_const_ff.h1
-rw-r--r--gr-blocks/lib/add_const_cc_impl.cc26
-rw-r--r--gr-blocks/lib/add_const_cc_impl.h4
-rw-r--r--gr-blocks/lib/add_const_ff_impl.cc26
-rw-r--r--gr-blocks/lib/add_const_ff_impl.h4
6 files changed, 32 insertions, 30 deletions
diff --git a/gr-blocks/include/gnuradio/blocks/add_const_cc.h b/gr-blocks/include/gnuradio/blocks/add_const_cc.h
index 810f04133e..3b8f1b2a21 100644
--- a/gr-blocks/include/gnuradio/blocks/add_const_cc.h
+++ b/gr-blocks/include/gnuradio/blocks/add_const_cc.h
@@ -25,6 +25,7 @@
#include <gnuradio/blocks/api.h>
#include <gnuradio/sync_block.h>
+#include <volk/volk_alloc.hh>
namespace gr {
namespace blocks {
diff --git a/gr-blocks/include/gnuradio/blocks/add_const_ff.h b/gr-blocks/include/gnuradio/blocks/add_const_ff.h
index 66fb9e5d07..9145c3dbb2 100644
--- a/gr-blocks/include/gnuradio/blocks/add_const_ff.h
+++ b/gr-blocks/include/gnuradio/blocks/add_const_ff.h
@@ -25,6 +25,7 @@
#include <gnuradio/blocks/api.h>
#include <gnuradio/sync_block.h>
+#include <volk/volk_alloc.hh>
namespace gr {
namespace blocks {
diff --git a/gr-blocks/lib/add_const_cc_impl.cc b/gr-blocks/lib/add_const_cc_impl.cc
index 6c326f1e1f..384efbbc6a 100644
--- a/gr-blocks/lib/add_const_cc_impl.cc
+++ b/gr-blocks/lib/add_const_cc_impl.cc
@@ -43,6 +43,13 @@ add_const_cc_impl::add_const_cc_impl(gr_complex k)
{
}
+void add_const_cc_impl::set_k(gr_complex k)
+{
+ gr::thread::scoped_lock guard(d_setlock);
+ d_k = k;
+ std::fill(d_k_copy.begin(), d_k_copy.end(), d_k);
+}
+
int add_const_cc_impl::work(int noutput_items,
gr_vector_const_void_star& input_items,
gr_vector_void_star& output_items)
@@ -50,23 +57,14 @@ int add_const_cc_impl::work(int noutput_items,
const gr_complex* iptr = (const gr_complex*)input_items[0];
gr_complex* optr = (gr_complex*)output_items[0];
- int size = noutput_items;
+ unsigned long input_size = static_cast<unsigned long>(noutput_items);
- while (size >= 8) {
- *optr++ = *iptr++ + d_k;
- *optr++ = *iptr++ + d_k;
- *optr++ = *iptr++ + d_k;
- *optr++ = *iptr++ + d_k;
- *optr++ = *iptr++ + d_k;
- *optr++ = *iptr++ + d_k;
- *optr++ = *iptr++ + d_k;
- *optr++ = *iptr++ + d_k;
- size -= 8;
+ gr::thread::scoped_lock guard(d_setlock);
+ if (d_k_copy.size() < input_size) {
+ d_k_copy.resize(input_size, d_k);
}
- while (size-- > 0) {
- *optr++ = *iptr++ + d_k;
- }
+ volk_32fc_x2_add_32fc(optr, iptr, d_k_copy.data(), noutput_items);
return noutput_items;
}
diff --git a/gr-blocks/lib/add_const_cc_impl.h b/gr-blocks/lib/add_const_cc_impl.h
index 075328fc2a..7f2adf34dc 100644
--- a/gr-blocks/lib/add_const_cc_impl.h
+++ b/gr-blocks/lib/add_const_cc_impl.h
@@ -32,6 +32,7 @@ class BLOCKS_API add_const_cc_impl : public add_const_cc
{
private:
gr_complex d_k;
+ volk::vector<gr_complex> d_k_copy;
public:
add_const_cc_impl(gr_complex k);
@@ -39,7 +40,8 @@ public:
void setup_rpc();
gr_complex k() const { return d_k; }
- void set_k(gr_complex k) { d_k = k; }
+
+ void set_k(gr_complex k);
int work(int noutput_items,
gr_vector_const_void_star& input_items,
diff --git a/gr-blocks/lib/add_const_ff_impl.cc b/gr-blocks/lib/add_const_ff_impl.cc
index 110c5450eb..3671546529 100644
--- a/gr-blocks/lib/add_const_ff_impl.cc
+++ b/gr-blocks/lib/add_const_ff_impl.cc
@@ -43,6 +43,13 @@ add_const_ff_impl::add_const_ff_impl(float k)
{
}
+void add_const_ff_impl::set_k(float k)
+{
+ gr::thread::scoped_lock guard(d_setlock);
+ d_k = k;
+ std::fill(d_k_copy.begin(), d_k_copy.end(), d_k);
+}
+
int add_const_ff_impl::work(int noutput_items,
gr_vector_const_void_star& input_items,
gr_vector_void_star& output_items)
@@ -50,23 +57,14 @@ int add_const_ff_impl::work(int noutput_items,
const float* iptr = (const float*)input_items[0];
float* optr = (float*)output_items[0];
- int size = noutput_items;
+ unsigned long input_size = static_cast<unsigned long>(noutput_items);
- while (size >= 8) {
- *optr++ = *iptr++ + d_k;
- *optr++ = *iptr++ + d_k;
- *optr++ = *iptr++ + d_k;
- *optr++ = *iptr++ + d_k;
- *optr++ = *iptr++ + d_k;
- *optr++ = *iptr++ + d_k;
- *optr++ = *iptr++ + d_k;
- *optr++ = *iptr++ + d_k;
- size -= 8;
+ gr::thread::scoped_lock guard(d_setlock);
+ if (d_k_copy.size() < input_size) {
+ d_k_copy.resize(input_size, d_k);
}
- while (size-- > 0) {
- *optr++ = *iptr++ + d_k;
- }
+ volk_32f_x2_add_32f(optr, iptr, d_k_copy.data(), noutput_items);
return noutput_items;
}
diff --git a/gr-blocks/lib/add_const_ff_impl.h b/gr-blocks/lib/add_const_ff_impl.h
index df07aab1c3..a8f5cb2016 100644
--- a/gr-blocks/lib/add_const_ff_impl.h
+++ b/gr-blocks/lib/add_const_ff_impl.h
@@ -32,6 +32,7 @@ class BLOCKS_API add_const_ff_impl : public add_const_ff
{
private:
float d_k;
+ volk::vector<float> d_k_copy;
public:
add_const_ff_impl(float k);
@@ -39,7 +40,8 @@ public:
void setup_rpc();
float k() const { return d_k; }
- void set_k(float k) { d_k = k; }
+
+ void set_k(float k);
int work(int noutput_items,
gr_vector_const_void_star& input_items,