commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] [gnuradio] 14/28: basic: integrated volk routine for f


From: git
Subject: [Commit-gnuradio] [gnuradio] 14/28: basic: integrated volk routine for float multiply const
Date: Mon, 15 Aug 2016 00:47:06 +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 2c44aa57e126cb7dda1317ba5d5156f9aae02eb3
Author: Josh Blum <address@hidden>
Date:   Wed Nov 9 13:26:18 2011 -0800

    basic: integrated volk routine for float multiply const
---
 gr-basic/lib/gr_basic_multiply_const.cc          | 51 ++++++++++++++++++++++--
 volk/include/volk/volk_32f_s32f_multiply_32f_a.h |  8 ++--
 2 files changed, 52 insertions(+), 7 deletions(-)

diff --git a/gr-basic/lib/gr_basic_multiply_const.cc 
b/gr-basic/lib/gr_basic_multiply_const.cc
index 469ffe9..a1b62f8 100644
--- a/gr-basic/lib/gr_basic_multiply_const.cc
+++ b/gr-basic/lib/gr_basic_multiply_const.cc
@@ -46,12 +46,12 @@ public:
     gr_basic_multiply_const_fc32(void):
         gr_sync_block(
             "multiply const fc32",
-            gr_make_io_signature (1, 1, sizeof(std::complex<float>)),
-            gr_make_io_signature (1, 1, sizeof(std::complex<float>))
+            gr_make_io_signature (1, 1, sizeof(type)),
+            gr_make_io_signature (1, 1, sizeof(type))
         )
     {
         _val.resize(1);
-        const int alignment_multiple = volk_get_alignment() / 
(sizeof(std::complex<float>));
+        const int alignment_multiple = volk_get_alignment() / (sizeof(type));
         set_output_multiple(std::max(1, alignment_multiple));
     }
 
@@ -81,6 +81,50 @@ protected:
 };
 
 /***********************************************************************
+ * FC32 multiply const implementation
+ **********************************************************************/
+class gr_basic_multiply_const_f32 : public gr_basic_multiply_const{
+public:
+    typedef float type;
+
+    gr_basic_multiply_const_f32(void):
+        gr_sync_block(
+            "multiply const f32",
+            gr_make_io_signature (1, 1, sizeof(type)),
+            gr_make_io_signature (1, 1, sizeof(type))
+        )
+    {
+        _val.resize(1);
+        const int alignment_multiple = volk_get_alignment() / sizeof(type);
+        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 type scalar = _val[0];
+        type *out = reinterpret_cast<type *>(output_items[0]);
+        const type *in = reinterpret_cast<const type *>(input_items[0]);
+        volk_32f_s32f_multiply_32f_a(out, in, scalar, noutput_items);
+        return noutput_items;
+    }
+
+    void _set_value(const std::vector<std::complex<double> > &val){
+        if (val.size() != _val.size()){
+            throw std::invalid_argument("set_value called with the wrong 
length");
+        }
+        for (size_t i = 0; i < val.size(); i++){
+            conv(val[i], _val[i]);
+        }
+    }
+
+protected:
+    std::vector<type> _val;
+};
+
+/***********************************************************************
  * Generic multiply const implementation
  **********************************************************************/
 template <typename type>
@@ -141,6 +185,7 @@ protected:
 gr_basic_multiply_const::sptr gr_basic_multiply_const::make(op_type type, 
const size_t vlen){
 
     if (type == OP_FC32 && vlen == 1) return sptr(new 
gr_basic_multiply_const_fc32());
+    if (type == OP_F32 && vlen == 1) return sptr(new 
gr_basic_multiply_const_f32());
 
     switch(type){
     case OP_FC64: return sptr(new 
gr_basic_multiply_const_generic<std::complex<double> >(vlen));
diff --git a/volk/include/volk/volk_32f_s32f_multiply_32f_a.h 
b/volk/include/volk/volk_32f_s32f_multiply_32f_a.h
index 6aef173..37223dc 100644
--- a/volk/include/volk/volk_32f_s32f_multiply_32f_a.h
+++ b/volk/include/volk/volk_32f_s32f_multiply_32f_a.h
@@ -12,9 +12,9 @@
   \param scalar the scalar value
   \param num_points The number of values in aVector and bVector to be 
multiplied together and stored into cVector
 */
-static inline void volk_32f_s32f_multiply_32f_a_generic(float* cVector, float* 
aVector, const float scalar, unsigned int num_points){
+static inline void volk_32f_s32f_multiply_32f_a_generic(float* cVector, const 
float* aVector, const float scalar, unsigned int num_points){
   unsigned int number = 0;
-  float* inputPtr = aVector;
+  const float* inputPtr = aVector;
   float* outputPtr = cVector;
   for(number = 0; number < num_points; number++){
     *outputPtr = (*inputPtr) * scalar;
@@ -32,8 +32,8 @@ static inline void 
volk_32f_s32f_multiply_32f_a_generic(float* cVector, float* a
   \param scalar the scalar value
   \param num_points The number of values in aVector and bVector to be 
multiplied together and stored into cVector
 */
-extern void volk_32f_s32f_multiply_32f_a_orc_impl(float* dst, float* src, 
const float scalar, unsigned int num_points);
-static inline void volk_32f_s32f_multiply_32f_a_orc(float* cVector, float* 
aVector, const float scalar, unsigned int num_points){
+extern void volk_32f_s32f_multiply_32f_a_orc_impl(float* dst, const float* 
src, const float scalar, unsigned int num_points);
+static inline void volk_32f_s32f_multiply_32f_a_orc(float* cVector, const 
float* aVector, const float scalar, unsigned int num_points){
     volk_32f_s32f_multiply_32f_a_orc_impl(cVector, aVector, scalar, 
num_points);
 }
 #endif /* LV_HAVE_GENERIC */



reply via email to

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