[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] [gnuradio] 25/28: core: added set_output_alignment (po
From: |
git |
Subject: |
[Commit-gnuradio] [gnuradio] 25/28: core: added set_output_alignment (policy 2 version) |
Date: |
Mon, 15 Aug 2016 00:47:08 +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 936d56836c53f8f10683af7813de75541d3891ad
Author: Josh Blum <address@hidden>
Date: Tue Nov 15 13:09:43 2011 -0800
core: added set_output_alignment (policy 2 version)
---
gnuradio-core/src/lib/runtime/gr_block.cc | 10 ++++++++++
gnuradio-core/src/lib/runtime/gr_block.h | 13 +++++++++++++
gnuradio-core/src/lib/runtime/gr_block_executor.cc | 13 +++++++++++++
3 files changed, 36 insertions(+)
diff --git a/gnuradio-core/src/lib/runtime/gr_block.cc
b/gnuradio-core/src/lib/runtime/gr_block.cc
index 498c928..0e7de93 100644
--- a/gnuradio-core/src/lib/runtime/gr_block.cc
+++ b/gnuradio-core/src/lib/runtime/gr_block.cc
@@ -34,6 +34,7 @@ gr_block::gr_block (const std::string &name,
gr_io_signature_sptr output_signature)
: gr_basic_block(name, input_signature, output_signature),
d_output_multiple (1),
+ d_output_alignment (1),
d_relative_rate (1.0),
d_history(1),
d_fixed_rate(false),
@@ -89,6 +90,15 @@ gr_block::set_output_multiple (int multiple)
}
void
+gr_block::set_output_alignment (int alignment)
+{
+ if (alignment < 1)
+ throw std::invalid_argument ("gr_block::set_output_alignment");
+
+ d_output_alignment = alignment;
+}
+
+void
gr_block::set_relative_rate (double relative_rate)
{
if (relative_rate < 0.0)
diff --git a/gnuradio-core/src/lib/runtime/gr_block.h
b/gnuradio-core/src/lib/runtime/gr_block.h
index d0b3e8d..5981682 100644
--- a/gnuradio-core/src/lib/runtime/gr_block.h
+++ b/gnuradio-core/src/lib/runtime/gr_block.h
@@ -171,6 +171,18 @@ class GR_CORE_API gr_block : public gr_basic_block {
int output_multiple () const { return d_output_multiple; }
/*!
+ * \brief Constrain the output alignment passed to work
+ *
+ * genral_work is called with noutput_items multiple of alignment.
+ * When this cannot be satisfied, genral_work will be called
+ * with sub-alignment noutput_items until alignment is regained.
+ *
+ * \param alignment a alignment multiple in number of items
+ */
+ void set_output_alignment (int alignment);
+ int output_alignment () const { return d_output_alignment; }
+
+ /*!
* \brief Tell the scheduler \p how_many_items of input stream \p
which_input were consumed.
*/
void consume (int which_input, int how_many_items);
@@ -248,6 +260,7 @@ class GR_CORE_API gr_block : public gr_basic_block {
private:
int d_output_multiple;
+ int d_output_alignment;
double d_relative_rate; // approx output_rate /
input_rate
gr_block_detail_sptr d_detail; // implementation details
std::vector<bool> d_inplace;
diff --git a/gnuradio-core/src/lib/runtime/gr_block_executor.cc
b/gnuradio-core/src/lib/runtime/gr_block_executor.cc
index 737b26f..4273407 100644
--- a/gnuradio-core/src/lib/runtime/gr_block_executor.cc
+++ b/gnuradio-core/src/lib/runtime/gr_block_executor.cc
@@ -366,6 +366,19 @@ gr_block_executor::run_one_iteration()
for (int i = 0; i < d->ninputs(); i++)
d_start_nitems_read[i] = d->nitems_read(i);
+ // constrain the noutput_items to meet alignment requirements
+ if (m->output_alignment() > 1){
+ const int alignment_extra = m->nitems_written(0) %
m->output_alignment();
+ //written non-multiple? this logic will re-align to multiple
+ if (alignment_extra != 0){
+ noutput_items = std::min(noutput_items, m->output_alignment() -
alignment_extra);
+ }
+ //aligned? keep submitting multiples until we cant
+ else if (noutput_items > m->output_alignment()){
+ noutput_items -= noutput_items % m->output_alignment();
+ }
+ }
+
// Do the actual work of the block
int n = m->general_work (noutput_items, d_ninput_items,
d_input_items, d_output_items);
- [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, 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 <=
- [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
- [Commit-gnuradio] [gnuradio] 07/28: basic add/mult const, needs test, git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 15/28: basic: added super fast signal source, git, 2016/08/14