[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] [gnuradio] 06/28: basic: call volk for float32 multipl
From: |
git |
Subject: |
[Commit-gnuradio] [gnuradio] 06/28: basic: call volk for float32 multiplier types |
Date: |
Mon, 15 Aug 2016 00:47:04 +0000 (UTC) |
This is an automated email from the git hooks/post-receive script.
nwest pushed a commit to annotated tag gr_basic_work
in repository gnuradio.
commit f44b4ead9aa92ffa5cb74419df4de6caad2d58a5
Author: Josh Blum <address@hidden>
Date: Tue Nov 8 17:30:58 2011 -0800
basic: call volk for float32 multiplier types
---
gr-basic/lib/gr_basic_multiply.cc | 82 ++++++++++++++++++++++++++++++++++++++-
1 file changed, 80 insertions(+), 2 deletions(-)
diff --git a/gr-basic/lib/gr_basic_multiply.cc
b/gr-basic/lib/gr_basic_multiply.cc
index f306ddc..decacf7 100644
--- a/gr-basic/lib/gr_basic_multiply.cc
+++ b/gr-basic/lib/gr_basic_multiply.cc
@@ -26,6 +26,84 @@
#include <volk/volk.h>
/***********************************************************************
+ * Multiplier implementation with complex float32 - calls volk
+ **********************************************************************/
+class gr_basic_multiply_fc32 : public basic_multiply{
+public:
+ gr_basic_multiply_fc32(const size_t vlen):
+ gr_sync_block(
+ "multiply fc32",
+ gr_make_io_signature (1, -1, sizeof(std::complex<float>)*vlen),
+ gr_make_io_signature (1, 1, sizeof(std::complex<float>)*vlen)
+ ),
+ _vlen(vlen)
+ {
+ const int alignment_multiple = volk_get_alignment() /
(sizeof(std::complex<float>)*vlen);
+ set_output_multiple(std::max(1, alignment_multiple));
+ }
+
+ int work(
+ int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items
+ ){
+ const size_t n_nums = noutput_items * _vlen;
+ std::complex<float> *out = reinterpret_cast<std::complex<float>
*>(output_items[0]);
+ const std::complex<float> *in0 = reinterpret_cast<const
std::complex<float> *>(input_items[0]);
+
+ for (size_t n = 1; n < input_items.size(); n++){
+ const std::complex<float> *in = reinterpret_cast<const
std::complex<float> *>(input_items[n]);
+ volk_32fc_x2_multiply_32fc_a(out, in0, in, n_nums);
+ in0 = out; //for next input, we do output += input
+ }
+
+ return noutput_items;
+ }
+
+private:
+ const size_t _vlen;
+};
+
+/***********************************************************************
+ * Multiplier implementation with float32 - calls volk
+ **********************************************************************/
+class gr_basic_multiply_f32 : public basic_multiply{
+public:
+ gr_basic_multiply_f32(const size_t vlen):
+ gr_sync_block(
+ "multiply f32",
+ gr_make_io_signature (1, -1, sizeof(float)*vlen),
+ gr_make_io_signature (1, 1, sizeof(float)*vlen)
+ ),
+ _vlen(vlen)
+ {
+ const int alignment_multiple = volk_get_alignment() /
(sizeof(float)*vlen);
+ set_output_multiple(std::max(1, alignment_multiple));
+ }
+
+ int work(
+ int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items
+ ){
+ const size_t n_nums = noutput_items * _vlen;
+ float *out = reinterpret_cast<float *>(output_items[0]);
+ const float *in0 = reinterpret_cast<const float *>(input_items[0]);
+
+ for (size_t n = 1; n < input_items.size(); n++){
+ const float *in = reinterpret_cast<const float *>(input_items[n]);
+ volk_32f_x2_multiply_32f_a(out, in0, in, n_nums);
+ in0 = out; //for next input, we do output += input
+ }
+
+ return noutput_items;
+ }
+
+private:
+ const size_t _vlen;
+};
+
+/***********************************************************************
* Generic multiplyer implementation
**********************************************************************/
template <typename type>
@@ -76,8 +154,8 @@ basic_multiply::sptr basic_make_multiply(
case MULTIPLY_FC64: return boost::shared_ptr<basic_multiply>(new
gr_basic_multiply_generic<std::complex<double> >(vlen));
case MULTIPLY_F64: return boost::shared_ptr<basic_multiply>(new
gr_basic_multiply_generic<double>(vlen));
- case MULTIPLY_FC32: return boost::shared_ptr<basic_multiply>(new
gr_basic_multiply_generic<std::complex<float> >(vlen));
- case MULTIPLY_F32: return boost::shared_ptr<basic_multiply>(new
gr_basic_multiply_generic<float>(vlen));
+ case MULTIPLY_FC32: return boost::shared_ptr<basic_multiply>(new
gr_basic_multiply_fc32(vlen));
+ case MULTIPLY_F32: return boost::shared_ptr<basic_multiply>(new
gr_basic_multiply_f32(vlen));
case MULTIPLY_SC64: return boost::shared_ptr<basic_multiply>(new
gr_basic_multiply_generic<std::complex<int64_t> >(vlen));
case MULTIPLY_S64: return boost::shared_ptr<basic_multiply>(new
gr_basic_multiply_generic<int64_t>(vlen));
- [Commit-gnuradio] [gnuradio] annotated tag gr_basic_work created (now ac6eec1), git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 02/28: gr-basic: volkified the add fn for f32, git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 14/28: basic: integrated volk routine for float multiply const, git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 23/28: Merge branch 'inplace_blocks' of gnuradio.org:jblum into gr_basic, git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 10/28: Volk: add 32fc_s32fc_multiply_32fc to profiler, git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 06/28: basic: call volk for float32 multiplier types,
git <=
- [Commit-gnuradio] [gnuradio] 09/28: Volk: added 32fc x scalar multiply, implemented in Orc & generic. Orc/SSE tested 10x faster than generic., git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 25/28: core: added set_output_alignment (policy 2 version), git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 11/28: basic: use volk multiply scalar function for multiply_const fc32, git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 24/28: basic: set inplace on gr-basic math blocks, git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 16/28: basic: performance tweak for sig source index mod, git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 04/28: basic: added other basic operators, git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 01/28: basic: attempt at new component, partial adder implementation, git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 27/28: basic: added dynamic delay block, git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 13/28: Volk: whoops, git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 17/28: core: squashed in-place block work, git, 2016/08/14