Go to the documentation of this file. 1 #ifndef RTCTK_EXAMPLEDATATASK_COMPUTATION_HPP
2 #define RTCTK_EXAMPLEDATATASK_COMPUTATION_HPP
21 template<
class TopicType>
29 , m_dp_slopes(
"/common/static/wfs_1/slopes")
30 , m_dp_modes(
"/" + m_name +
"/" +
"static/computation/modes")
31 , m_dp_iterations(
"/" + m_name +
"/" +
"static/common/samples_to_read")
32 , m_dp_s2m(
"/" + m_name +
"/" +
"dynamic/computation/slopes2modes")
33 , m_dp_avg_slopes(
"/common/dynamic/wfs_1/avg_slopes")
34 , m_dp_avg_modes(
"/common/dynamic/wfs_1/avg_modes")
35 , m_dp_stats_iteration(
"/" + m_name +
"/" +
"statistics/computation/iteration")
36 , m_dp_stats_time(
"/" + m_name +
"/" +
"statistics/computation/time")
37 , m_dp_stats_last_id(
"/" + m_name +
"/" +
"statistics/computation/last_sample_id")
41 m_callback_counter = 0;
45 m_oldb.CreateDataPoint(m_dp_stats_iteration,
"RtcInt32");
46 m_oldb.CreateDataPoint(m_dp_stats_time,
"RtcDouble");
47 m_oldb.CreateDataPoint(m_dp_stats_last_id,
"RtcInt32");
48 m_oldb.SetDataPoint<
int32_t>(m_dp_stats_iteration, 0);
49 m_oldb.SetDataPoint<
double>(m_dp_stats_time, 0.0);
50 m_oldb.SetDataPoint<
int32_t>(m_dp_stats_last_id, 0);
58 m_n_slopes = m_rtr.GetDataPoint<
int32_t>(m_dp_slopes);
59 m_n_modes = m_rtr.GetDataPoint<
int32_t>(m_dp_modes);
60 m_n_iterations = m_rtr.GetDataPoint<
int32_t>(m_dp_iterations);
63 m_buffer_matrix.resize(m_n_iterations, m_n_slopes);
64 m_avg_slopes.resize(m_n_slopes);
65 m_s2m_matrix.resize(m_n_modes, m_n_slopes);
66 m_avg_modes.resize(m_n_modes);
69 std::fill (m_avg_slopes.begin(), m_avg_slopes.end(), 0.0);
70 std::fill (m_avg_modes.begin(), m_avg_modes.end(), 0.0);
73 LOG4CPLUS_DEBUG(
GetLogger(),
"m_n_slopes: " << m_n_slopes);
74 LOG4CPLUS_DEBUG(
GetLogger(),
"m_n_modes: " << m_n_modes);
75 LOG4CPLUS_DEBUG(
GetLogger(),
"m_n_iterations: " << m_n_iterations);
85 if(m_n_modes != (
int) m_s2m_matrix.get_nrows() || m_n_slopes != (int) m_s2m_matrix.get_ncols())
87 LOG4CPLUS_INFO(
GetLogger(),
"Computation::DynamicLoad() - s2m wrong shape ");
88 LOG4CPLUS_INFO(
GetLogger(),
"Computation::DynamicLoad() - Expected: " << m_n_modes <<
" x " << m_n_slopes);
89 LOG4CPLUS_INFO(
GetLogger(),
"Computation::DynamicLoad() - recieved: " << m_s2m_matrix.get_nrows() <<
" x " << m_s2m_matrix.get_ncols());
90 throw std::runtime_error(
"s2m wrong shape");
92 assert((
int)m_s2m_matrix.get_nrows() == m_n_modes);
93 assert((
int)m_s2m_matrix.get_ncols() == m_n_slopes);
98 m_sample_id = sample.sample_id;
100 std::copy(sample.wfs.slopes.begin(), sample.wfs.slopes.end(), m_buffer_matrix.begin() + m_callback_counter*m_n_slopes);
101 m_callback_counter++;
114 m_computation_running =
true;
115 LOG4CPLUS_INFO(
GetLogger(),
"Computation::Compute() - samples: " << m_callback_counter);
118 auto time_start = std::chrono::system_clock::now();
120 for(
int i = 0 ; i < m_n_iterations; i++)
122 for(
int j = 0; j < m_n_slopes; j++)
124 m_avg_slopes[j] += m_buffer_matrix(i,j);
128 for(
int j = 0; j < m_n_slopes; j++)
130 m_avg_slopes[j] = m_avg_slopes[j]/
static_cast<float>(m_n_iterations);
138 my_sgemv(m_s2m_matrix.data(), m_avg_slopes.data(), m_avg_modes.data(), m_n_modes, m_n_slopes);
139 auto time_stop = std::chrono::system_clock::now();
140 std::chrono::duration<double> elapsed = time_stop - time_start;
143 m_rtr.SetDataPoint<std::vector<float>>(m_dp_avg_slopes, m_avg_slopes);
144 m_rtr.SetDataPoint<std::vector<float>>(m_dp_avg_modes, m_avg_modes);
147 m_oldb.SetDataPoint<
int32_t>(m_dp_stats_iteration, m_iteration);
148 m_oldb.SetDataPoint<
double>(m_dp_stats_time, elapsed.count());
149 m_oldb.SetDataPoint<
int32_t>(m_dp_stats_last_id, m_sample_id);
152 m_computation_running =
false;
162 m_callback_counter = 0;
171 out_vec[i] = my_dot_product(
mat + i*cols, in_vec, cols);
rtctk::componentFramework::OldbApiIf & m_oldb
Definition: computation.hpp:186
Definition: computation.hpp:23
void Reset()
Definition: computation.hpp:104
DataPointPath m_dp_stats_iteration
Definition: computation.hpp:200
DataPointPath m_dp_slopes
Definition: computation.hpp:190
Definition: rtcComponent.hpp:17
std::vector< float > m_avg_modes
Definition: computation.hpp:214
rtctk::componentFramework::RuntimeRepoApiIf & m_rtr
Definition: computation.hpp:185
void ResetComputation()
Definition: computation.hpp:159
Header file for OldbApiIf, which defines the API for OldbAdapters.
Declaration of the MatrixBuffer template class used in APIs.
unsigned int m_sample_id
Definition: computation.hpp:204
MatrixBuffer< float > m_buffer_matrix
Definition: computation.hpp:216
bool isComputing()
Definition: computation.hpp:155
void Compute()
Definition: computation.hpp:111
void my_sgemv(const float *mat, const float *in_vec, float *out_vec, uint32_t rows, uint32_t cols)
Definition: computation.hpp:167
std::string m_name
Definition: computation.hpp:187
int m_n_modes
Definition: computation.hpp:210
DataPointPath m_dp_stats_last_id
Definition: computation.hpp:202
log4cplus::Logger & GetLogger(const std::string &name="")
DataPointPath m_dp_avg_slopes
Definition: computation.hpp:196
mat
Definition: rtctkExampleDataTaskGenFitsData.py:14
Definition: oldbApiIf.hpp:18
Definition: businessLogic.hpp:22
DataPointPath m_dp_avg_modes
Definition: computation.hpp:197
std::atomic< bool > m_computation_running
Definition: computation.hpp:207
Definition: runtimeRepoApiIf.hpp:59
std::vector< float > m_avg_slopes
Definition: computation.hpp:213
DataPointPath m_dp_stats_time
Definition: computation.hpp:201
Computation(rtctk::componentFramework::RuntimeRepoApiIf &rtr, rtctk::componentFramework::OldbApiIf &oldb, std::string const &name)
Definition: computation.hpp:25
unsigned int uint32_t
Definition: mudpi.h:16
unsigned int m_iteration
Definition: computation.hpp:205
Header file for RuntimeRepoApiIf, which defines the API for RuntimeRepoAdapters.
Logging Support Library based on log4cplus.
void DynamicLoad()
Definition: computation.hpp:81
int int32_t
Definition: mudpi.h:17
int m_n_iterations
Definition: computation.hpp:211
DataPointPath m_dp_modes
Definition: computation.hpp:191
Definition: dataPointPath.hpp:30
DataPointPath m_dp_s2m
Definition: computation.hpp:193
std::atomic< unsigned int > m_callback_counter
Definition: computation.hpp:206
float my_dot_product(const float *x, const float *y, uint32_t n)
Definition: computation.hpp:175
void OnDataAvailable(TopicType const &sample)
Definition: computation.hpp:96
Definition: matrixBuffer.hpp:19
void StaticLoad()
Definition: computation.hpp:55
MatrixBuffer< float > m_s2m_matrix
Definition: computation.hpp:217
DataPointPath m_dp_iterations
Definition: computation.hpp:192
int m_n_slopes
Definition: computation.hpp:209