summaryrefslogtreecommitdiff
path: root/gnuradio-core/src/lib/runtime
diff options
context:
space:
mode:
authorTom Rondeau <trondeau@vt.edu>2013-03-14 16:23:01 -0400
committerTom Rondeau <trondeau@vt.edu>2013-03-14 16:23:01 -0400
commit16173a1d2443d25f188d5160c2a0f979ff8326b9 (patch)
tree94a25cb42d9f924ad404780af71994d3fb736737 /gnuradio-core/src/lib/runtime
parentda29413c111cbed2c4ae0a9a96cc2e27239fd074 (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.cc122
-rw-r--r--gnuradio-core/src/lib/runtime/gr_block.h50
-rw-r--r--gnuradio-core/src/lib/runtime/gr_block_detail.cc75
-rw-r--r--gnuradio-core/src/lib/runtime/gr_block_detail.h13
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;