[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 */
- [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 <=
- [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, 2016/08/14
- [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