diff options
author | Tom Rondeau <trondeau@vt.edu> | 2013-03-14 16:23:01 -0400 |
---|---|---|
committer | Tom Rondeau <trondeau@vt.edu> | 2013-03-14 16:23:01 -0400 |
commit | 16173a1d2443d25f188d5160c2a0f979ff8326b9 (patch) | |
tree | 94a25cb42d9f924ad404780af71994d3fb736737 /gnuradio-core/src/lib/runtime | |
parent | da29413c111cbed2c4ae0a9a96cc2e27239fd074 (diff) |
core: changed PC get functions to return instantaneous value. Average values now use _avg suffix on functions (like _var before).
Diffstat (limited to 'gnuradio-core/src/lib/runtime')
-rw-r--r-- | gnuradio-core/src/lib/runtime/gr_block.cc | 122 | ||||
-rw-r--r-- | gnuradio-core/src/lib/runtime/gr_block.h | 50 | ||||
-rw-r--r-- | gnuradio-core/src/lib/runtime/gr_block_detail.cc | 75 | ||||
-rw-r--r-- | gnuradio-core/src/lib/runtime/gr_block_detail.h | 13 |
4 files changed, 242 insertions, 18 deletions
diff --git a/gnuradio-core/src/lib/runtime/gr_block.cc b/gnuradio-core/src/lib/runtime/gr_block.cc index cb38df27a8..8c8b85dc7e 100644 --- a/gnuradio-core/src/lib/runtime/gr_block.cc +++ b/gnuradio-core/src/lib/runtime/gr_block.cc @@ -330,6 +330,17 @@ gr_block::pc_noutput_items() } float +gr_block::pc_noutput_items_avg() +{ + if(d_detail) { + return d_detail->pc_noutput_items_avg(); + } + else { + return 0; + } +} + +float gr_block::pc_noutput_items_var() { if(d_detail) { @@ -352,6 +363,17 @@ gr_block::pc_nproduced() } float +gr_block::pc_nproduced_avg() +{ + if(d_detail) { + return d_detail->pc_nproduced_avg(); + } + else { + return 0; + } +} + +float gr_block::pc_nproduced_var() { if(d_detail) { @@ -374,6 +396,17 @@ gr_block::pc_input_buffers_full(int which) } float +gr_block::pc_input_buffers_full_avg(int which) +{ + if(d_detail) { + return d_detail->pc_input_buffers_full_avg(static_cast<size_t>(which)); + } + else { + return 0; + } +} + +float gr_block::pc_input_buffers_full_var(int which) { if(d_detail) { @@ -396,6 +429,17 @@ gr_block::pc_input_buffers_full() } std::vector<float> +gr_block::pc_input_buffers_full_avg() +{ + if(d_detail) { + return d_detail->pc_input_buffers_full_avg(); + } + else { + return std::vector<float>(1,0); + } +} + +std::vector<float> gr_block::pc_input_buffers_full_var() { if(d_detail) { @@ -418,6 +462,17 @@ gr_block::pc_output_buffers_full(int which) } float +gr_block::pc_output_buffers_full_avg(int which) +{ + if(d_detail) { + return d_detail->pc_output_buffers_full_avg(static_cast<size_t>(which)); + } + else { + return 0; + } +} + +float gr_block::pc_output_buffers_full_var(int which) { if(d_detail) { @@ -440,6 +495,17 @@ gr_block::pc_output_buffers_full() } std::vector<float> +gr_block::pc_output_buffers_full_avg() +{ + if(d_detail) { + return d_detail->pc_output_buffers_full_avg(); + } + else { + return std::vector<float>(1,0); + } +} + +std::vector<float> gr_block::pc_output_buffers_full_var() { if(d_detail) { @@ -462,6 +528,17 @@ gr_block::pc_work_time() } float +gr_block::pc_work_time_avg() +{ + if(d_detail) { + return d_detail->pc_work_time_avg(); + } + else { + return 0; + } +} + +float gr_block::pc_work_time_var() { if(d_detail) { @@ -487,7 +564,14 @@ gr_block::setup_pc_rpc() #ifdef GR_CTRLPORT d_rpc_vars.push_back( rpcbasic_sptr(new rpcbasic_register_get<gr_block, float>( - alias(), "avg noutput_items", &gr_block::pc_noutput_items, + alias(), "noutput_items", &gr_block::pc_noutput_items, + pmt::mp(0), pmt::mp(32768), pmt::mp(0), + "", "noutput items", RPC_PRIVLVL_MIN, + DISPTIME | DISPOPTSTRIP))); + + d_rpc_vars.push_back( + rpcbasic_sptr(new rpcbasic_register_get<gr_block, float>( + alias(), "avg noutput_items", &gr_block::pc_noutput_items_avg, pmt::mp(0), pmt::mp(32768), pmt::mp(0), "", "Average noutput items", RPC_PRIVLVL_MIN, DISPTIME | DISPOPTSTRIP))); @@ -501,7 +585,14 @@ gr_block::setup_pc_rpc() d_rpc_vars.push_back( rpcbasic_sptr(new rpcbasic_register_get<gr_block, float>( - alias(), "avg nproduced", &gr_block::pc_nproduced, + alias(), "nproduced", &gr_block::pc_nproduced, + pmt::mp(0), pmt::mp(32768), pmt::mp(0), + "", "items produced", RPC_PRIVLVL_MIN, + DISPTIME | DISPOPTSTRIP))); + + d_rpc_vars.push_back( + rpcbasic_sptr(new rpcbasic_register_get<gr_block, float>( + alias(), "avg nproduced", &gr_block::pc_nproduced_avg, pmt::mp(0), pmt::mp(32768), pmt::mp(0), "", "Average items produced", RPC_PRIVLVL_MIN, DISPTIME | DISPOPTSTRIP))); @@ -515,7 +606,14 @@ gr_block::setup_pc_rpc() d_rpc_vars.push_back( rpcbasic_sptr(new rpcbasic_register_get<gr_block, float>( - alias(), "avg work time", &gr_block::pc_work_time, + alias(), "work time", &gr_block::pc_work_time, + pmt::mp(0), pmt::mp(1e9), pmt::mp(0), + "", "clock cycles in call to work", RPC_PRIVLVL_MIN, + DISPTIME | DISPOPTSTRIP))); + + d_rpc_vars.push_back( + rpcbasic_sptr(new rpcbasic_register_get<gr_block, float>( + alias(), "avg work time", &gr_block::pc_work_time_avg, pmt::mp(0), pmt::mp(1e9), pmt::mp(0), "", "Average clock cycles in call to work", RPC_PRIVLVL_MIN, DISPTIME | DISPOPTSTRIP))); @@ -529,7 +627,14 @@ gr_block::setup_pc_rpc() d_rpc_vars.push_back( rpcbasic_sptr(new rpcbasic_register_get<gr_block, std::vector<float> >( - alias(), "avg input \% full", &gr_block::pc_input_buffers_full, + alias(), "input \% full", &gr_block::pc_input_buffers_full, + pmt::make_c32vector(0,0), pmt::make_c32vector(0,1), pmt::make_c32vector(0,0), + "", "how full input buffers are", RPC_PRIVLVL_MIN, + DISPTIME | DISPOPTSTRIP))); + + d_rpc_vars.push_back( + rpcbasic_sptr(new rpcbasic_register_get<gr_block, std::vector<float> >( + alias(), "avg input \% full", &gr_block::pc_input_buffers_full_avg, pmt::make_c32vector(0,0), pmt::make_c32vector(0,1), pmt::make_c32vector(0,0), "", "Average of how full input buffers are", RPC_PRIVLVL_MIN, DISPTIME | DISPOPTSTRIP))); @@ -543,7 +648,14 @@ gr_block::setup_pc_rpc() d_rpc_vars.push_back( rpcbasic_sptr(new rpcbasic_register_get<gr_block, std::vector<float> >( - alias(), "avg output \% full", &gr_block::pc_output_buffers_full, + alias(), "output \% full", &gr_block::pc_output_buffers_full, + pmt::make_c32vector(0,0), pmt::make_c32vector(0,1), pmt::make_c32vector(0,0), + "", "how full output buffers are", RPC_PRIVLVL_MIN, + DISPTIME | DISPOPTSTRIP))); + + d_rpc_vars.push_back( + rpcbasic_sptr(new rpcbasic_register_get<gr_block, std::vector<float> >( + alias(), "avg output \% full", &gr_block::pc_output_buffers_full_avg, pmt::make_c32vector(0,0), pmt::make_c32vector(0,1), pmt::make_c32vector(0,0), "", "Average of how full output buffers are", RPC_PRIVLVL_MIN, DISPTIME | DISPOPTSTRIP))); diff --git a/gnuradio-core/src/lib/runtime/gr_block.h b/gnuradio-core/src/lib/runtime/gr_block.h index dd17ea2ca2..f13f54870d 100644 --- a/gnuradio-core/src/lib/runtime/gr_block.h +++ b/gnuradio-core/src/lib/runtime/gr_block.h @@ -379,72 +379,108 @@ class GR_CORE_API gr_block : public gr_basic_block { // --------------- Performance counter functions ------------- /*! - * \brief Gets average noutput_items performance counter. + * \brief Gets instantaneous noutput_items performance counter. */ float pc_noutput_items(); /*! + * \brief Gets average noutput_items performance counter. + */ + float pc_noutput_items_avg(); + + /*! * \brief Gets variance of noutput_items performance counter. */ float pc_noutput_items_var(); /*! - * \brief Gets average num items produced performance counter. + * \brief Gets instantaneous num items produced performance counter. */ float pc_nproduced(); /*! + * \brief Gets average num items produced performance counter. + */ + float pc_nproduced_avg(); + + /*! * \brief Gets variance of num items produced performance counter. */ float pc_nproduced_var(); /*! - * \brief Gets average fullness of \p which input buffer. + * \brief Gets instantaneous fullness of \p which input buffer. */ float pc_input_buffers_full(int which); /*! + * \brief Gets average fullness of \p which input buffer. + */ + float pc_input_buffers_full_avg(int which); + + /*! * \brief Gets variance of fullness of \p which input buffer. */ float pc_input_buffers_full_var(int which); /*! - * \brief Gets average fullness of all input buffers. + * \brief Gets instantaneous fullness of all input buffers. */ std::vector<float> pc_input_buffers_full(); /*! + * \brief Gets average fullness of all input buffers. + */ + std::vector<float> pc_input_buffers_full_avg(); + + /*! * \brief Gets variance of fullness of all input buffers. */ std::vector<float> pc_input_buffers_full_var(); /*! - * \brief Gets average fullness of \p which input buffer. + * \brief Gets instantaneous fullness of \p which input buffer. */ float pc_output_buffers_full(int which); /*! + * \brief Gets average fullness of \p which input buffer. + */ + float pc_output_buffers_full_avg(int which); + + /*! * \brief Gets variance of fullness of \p which input buffer. */ float pc_output_buffers_full_var(int which); /*! - * \brief Gets average fullness of all output buffers. + * \brief Gets instantaneous fullness of all output buffers. */ std::vector<float> pc_output_buffers_full(); + + /*! + * \brief Gets average fullness of all output buffers. + */ + std::vector<float> pc_output_buffers_full_avg(); + /*! * \brief Gets variance of fullness of all output buffers. */ std::vector<float> pc_output_buffers_full_var(); /*! - * \brief Gets average clock cycles spent in work. + * \brief Gets instantaneous clock cycles spent in work. */ float pc_work_time(); /*! * \brief Gets average clock cycles spent in work. */ + float pc_work_time_avg(); + + /*! + * \brief Gets average clock cycles spent in work. + */ float pc_work_time_var(); /*! diff --git a/gnuradio-core/src/lib/runtime/gr_block_detail.cc b/gnuradio-core/src/lib/runtime/gr_block_detail.cc index c05b7b96a0..c85c0e9fba 100644 --- a/gnuradio-core/src/lib/runtime/gr_block_detail.cc +++ b/gnuradio-core/src/lib/runtime/gr_block_detail.cc @@ -41,14 +41,19 @@ gr_block_detail::gr_block_detail (unsigned int ninputs, unsigned int noutputs) d_ninputs (ninputs), d_noutputs (noutputs), d_input (ninputs), d_output (noutputs), d_done (false), + d_ins_noutput_items(0), d_avg_noutput_items(0), d_var_noutput_items(0), + d_ins_nproduced(0), d_avg_nproduced(0), d_var_nproduced(0), + d_ins_input_buffers_full(ninputs, 0), d_avg_input_buffers_full(ninputs, 0), d_var_input_buffers_full(ninputs, 0), + d_ins_output_buffers_full(noutputs, 0), d_avg_output_buffers_full(noutputs, 0), d_var_output_buffers_full(noutputs, 0), + d_ins_work_time(0), d_avg_work_time(0), d_var_work_time(0), d_pc_counter(0) @@ -246,35 +251,43 @@ gr_block_detail::stop_perf_counters(int noutput_items, int nproduced) gruel::high_res_timer_type diff = d_end_of_work - d_start_of_work; if(d_pc_counter == 0) { + d_ins_work_time = diff; d_avg_work_time = diff; d_var_work_time = 0; + d_ins_nproduced = nproduced; d_avg_nproduced = nproduced; d_var_nproduced = 0; + d_ins_noutput_items = noutput_items; d_avg_noutput_items = noutput_items; d_var_noutput_items = 0; for(size_t i=0; i < d_input.size(); i++) { float pfull = static_cast<float>(d_input[i]->items_available()) / static_cast<float>(d_input[i]->max_possible_items_available()); + d_ins_input_buffers_full[i] = pfull; d_avg_input_buffers_full[i] = pfull; d_var_input_buffers_full[i] = 0; } for(size_t i=0; i < d_output.size(); i++) { float pfull = 1.0f - static_cast<float>(d_output[i]->space_available()) / static_cast<float>(d_output[i]->bufsize()); + d_ins_output_buffers_full[i] = pfull; d_avg_output_buffers_full[i] = pfull; d_var_output_buffers_full[i] = 0; } } else { float d = diff - d_avg_work_time; + d_ins_work_time = diff; d_avg_work_time = d_avg_work_time + d/d_pc_counter; d_var_work_time = d_var_work_time + d*d; d = nproduced - d_avg_nproduced; + d_ins_nproduced = nproduced; d_avg_nproduced = d_avg_nproduced + d/d_pc_counter; d_var_nproduced = d_var_nproduced + d*d; d = noutput_items - d_avg_noutput_items; + d_ins_noutput_items = noutput_items; d_avg_noutput_items = d_avg_noutput_items + d/d_pc_counter; d_var_noutput_items = d_var_noutput_items + d*d; @@ -283,6 +296,7 @@ gr_block_detail::stop_perf_counters(int noutput_items, int nproduced) static_cast<float>(d_input[i]->max_possible_items_available()); d = pfull - d_avg_input_buffers_full[i]; + d_ins_input_buffers_full[i] = pfull; d_avg_input_buffers_full[i] = d_avg_input_buffers_full[i] + d/d_pc_counter; d_var_input_buffers_full[i] = d_var_input_buffers_full[i] + d*d; } @@ -292,6 +306,7 @@ gr_block_detail::stop_perf_counters(int noutput_items, int nproduced) static_cast<float>(d_output[i]->bufsize()); d = pfull - d_avg_output_buffers_full[i]; + d_ins_output_buffers_full[i] = pfull; d_avg_output_buffers_full[i] = d_avg_output_buffers_full[i] + d/d_pc_counter; d_var_output_buffers_full[i] = d_var_output_buffers_full[i] + d*d; } @@ -309,18 +324,66 @@ gr_block_detail::reset_perf_counters() float gr_block_detail::pc_noutput_items() { - return d_avg_noutput_items; + return d_ins_noutput_items; } float gr_block_detail::pc_nproduced() { - return d_avg_nproduced; + return d_ins_nproduced; } float gr_block_detail::pc_input_buffers_full(size_t which) { + if(which < d_ins_input_buffers_full.size()) + return d_ins_input_buffers_full[which]; + else + return 0; +} + +std::vector<float> +gr_block_detail::pc_input_buffers_full() +{ + return d_ins_input_buffers_full; +} + +float +gr_block_detail::pc_output_buffers_full(size_t which) +{ + if(which < d_ins_output_buffers_full.size()) + return d_ins_output_buffers_full[which]; + else + return 0; +} + +std::vector<float> +gr_block_detail::pc_output_buffers_full() +{ + return d_ins_output_buffers_full; +} + +float +gr_block_detail::pc_work_time() +{ + return d_ins_work_time; +} + +float +gr_block_detail::pc_noutput_items_avg() +{ + return d_avg_noutput_items; +} + +float +gr_block_detail::pc_nproduced_avg() +{ + return d_avg_nproduced; +} + +float +gr_block_detail::pc_input_buffers_full_avg(size_t which) +{ if(which < d_avg_input_buffers_full.size()) return d_avg_input_buffers_full[which]; else @@ -328,13 +391,13 @@ gr_block_detail::pc_input_buffers_full(size_t which) } std::vector<float> -gr_block_detail::pc_input_buffers_full() +gr_block_detail::pc_input_buffers_full_avg() { return d_avg_input_buffers_full; } float -gr_block_detail::pc_output_buffers_full(size_t which) +gr_block_detail::pc_output_buffers_full_avg(size_t which) { if(which < d_avg_output_buffers_full.size()) return d_avg_output_buffers_full[which]; @@ -343,13 +406,13 @@ gr_block_detail::pc_output_buffers_full(size_t which) } std::vector<float> -gr_block_detail::pc_output_buffers_full() +gr_block_detail::pc_output_buffers_full_avg() { return d_avg_output_buffers_full; } float -gr_block_detail::pc_work_time() +gr_block_detail::pc_work_time_avg() { return d_avg_work_time; } diff --git a/gnuradio-core/src/lib/runtime/gr_block_detail.h b/gnuradio-core/src/lib/runtime/gr_block_detail.h index 32a01e763a..8a5a08bcf3 100644 --- a/gnuradio-core/src/lib/runtime/gr_block_detail.h +++ b/gnuradio-core/src/lib/runtime/gr_block_detail.h @@ -184,6 +184,14 @@ class GR_CORE_API gr_block_detail { std::vector<float> pc_output_buffers_full(); float pc_work_time(); + float pc_noutput_items_avg(); + float pc_nproduced_avg(); + float pc_input_buffers_full_avg(size_t which); + std::vector<float> pc_input_buffers_full_avg(); + float pc_output_buffers_full_avg(size_t which); + std::vector<float> pc_output_buffers_full_avg(); + float pc_work_time_avg(); + float pc_noutput_items_var(); float pc_nproduced_var(); float pc_input_buffers_full_var(size_t which); @@ -205,15 +213,20 @@ class GR_CORE_API gr_block_detail { bool d_done; // Performance counters + float d_ins_noutput_items; float d_avg_noutput_items; float d_var_noutput_items; + float d_ins_nproduced; float d_avg_nproduced; float d_var_nproduced; + std::vector<float> d_ins_input_buffers_full; std::vector<float> d_avg_input_buffers_full; std::vector<float> d_var_input_buffers_full; + std::vector<float> d_ins_output_buffers_full; std::vector<float> d_avg_output_buffers_full; std::vector<float> d_var_output_buffers_full; gruel::high_res_timer_type d_start_of_work, d_end_of_work; + float d_ins_work_time; float d_avg_work_time; float d_var_work_time; float d_pc_counter; |