Go to the documentation of this file.
9 #ifndef RTCTK_EXAMPLEDATATASK_COMPUTATION_HPP
10 #define RTCTK_EXAMPLEDATATASK_COMPUTATION_HPP
29 template<
class TopicType>
37 , m_dp_slopes(
"/common/static/wfs_1/slopes")
38 , m_dp_modes(
"/" + m_name +
"/" +
"static/computation/modes")
39 , m_dp_iterations(
"/" + m_name +
"/" +
"static/common/samples_to_read")
40 , m_dp_gpu(
"/" + m_name +
"/" +
"static/common/gpu")
41 , m_dp_s2m(
"/" + m_name +
"/" +
"dynamic/computation/slopes2modes")
42 , m_dp_avg_slopes(
"/common/dynamic/wfs_1/avg_slopes")
43 , m_dp_avg_modes(
"/common/dynamic/wfs_1/avg_modes")
44 , m_dp_stats_iteration(
"/" + m_name +
"/" +
"statistics/computation/iteration")
45 , m_dp_stats_time(
"/" + m_name +
"/" +
"statistics/computation/time")
46 , m_dp_stats_last_id(
"/" + m_name +
"/" +
"statistics/computation/last_sample_id")
49 m_callback_counter = 0;
53 m_oldb.CreateDataPoint(m_dp_stats_iteration,
"RtcInt32");
54 m_oldb.CreateDataPoint(m_dp_stats_time,
"RtcDouble");
55 m_oldb.CreateDataPoint(m_dp_stats_last_id,
"RtcInt32");
56 m_oldb.SetDataPoint<
int32_t>(m_dp_stats_iteration, 0);
57 m_oldb.SetDataPoint<
double>(m_dp_stats_time, 0.0);
58 m_oldb.SetDataPoint<
int32_t>(m_dp_stats_last_id, 0);
71 m_n_slopes = m_rtr.GetDataPoint<
int32_t>(m_dp_slopes);
72 m_n_modes = m_rtr.GetDataPoint<
int32_t>(m_dp_modes);
73 m_n_iterations = m_rtr.GetDataPoint<
int32_t>(m_dp_iterations);
74 m_gpu = m_rtr.GetDataPoint<
int32_t>(m_dp_gpu);
77 m_buffer_matrix.resize(m_n_iterations, m_n_slopes);
78 m_avg_slopes.resize(m_n_slopes);
79 m_s2m_matrix.resize(m_n_modes, m_n_slopes);
80 m_avg_modes.resize(m_n_modes);
83 std::fill (m_avg_slopes.begin(), m_avg_slopes.end(), 0.0);
84 std::fill (m_avg_modes.begin(), m_avg_modes.end(), 0.0);
86 LOG4CPLUS_DEBUG(
GetLogger(),
"m_n_slopes: " << m_n_slopes);
87 LOG4CPLUS_DEBUG(
GetLogger(),
"m_n_modes: " << m_n_modes);
88 LOG4CPLUS_DEBUG(
GetLogger(),
"m_n_iterations: " << m_n_iterations);
89 LOG4CPLUS_DEBUG(
GetLogger(),
"m_gpu: " << m_gpu);
92 m_gpu_comp = std::make_unique<exampleGpuLib>(m_n_slopes, m_n_modes, m_gpu);
95 m_gpu_comp->SetAvgSlopes(m_avg_slopes);
105 if(m_n_modes != (
int) m_s2m_matrix.get_nrows() || m_n_slopes != (int) m_s2m_matrix.get_ncols())
107 LOG4CPLUS_INFO(
GetLogger(),
"Computation::DynamicLoad() - s2m wrong shape ");
108 LOG4CPLUS_INFO(
GetLogger(),
"Computation::DynamicLoad() - Expected: " << m_n_modes <<
" x " << m_n_slopes);
109 LOG4CPLUS_INFO(
GetLogger(),
"Computation::DynamicLoad() - recieved: " << m_s2m_matrix.get_nrows() <<
" x " << m_s2m_matrix.get_ncols());
110 throw std::runtime_error(
"s2m wrong shape");
112 assert((
int)m_s2m_matrix.get_nrows() == m_n_modes);
113 assert((
int)m_s2m_matrix.get_ncols() == m_n_slopes);
116 m_gpu_comp->SetMatrix(m_s2m_matrix.data());
122 m_gpu_comp->initReaderThread();
129 m_sample_id = sample.sample_id;
130 m_gpu_comp->NewSample(sample.wfs.slopes.data(), m_callback_counter);
131 m_callback_counter++;
144 LOG4CPLUS_INFO(
GetLogger(),
"Computation::Compute() - samples: " << m_callback_counter);
147 auto time_start = std::chrono::system_clock::now();
148 m_gpu_comp->Compute();
149 auto time_stop = std::chrono::system_clock::now();
150 std::chrono::duration<double> elapsed = time_stop - time_start;
152 m_avg_slopes = m_gpu_comp->GetAvgSlopes();
153 m_avg_modes = m_gpu_comp->GetResults();
156 m_rtr.SetDataPoint<std::vector<float>>(m_dp_avg_slopes, m_avg_slopes);
157 m_rtr.SetDataPoint<std::vector<float>>(m_dp_avg_modes, m_avg_modes);
160 m_oldb.SetDataPoint<
int32_t>(m_dp_stats_iteration, m_iteration);
161 m_oldb.SetDataPoint<
double>(m_dp_stats_time, elapsed.count());
162 m_oldb.SetDataPoint<
int32_t>(m_dp_stats_last_id, m_sample_id);
174 m_callback_counter = 0;
176 std::fill (m_avg_slopes.begin(), m_avg_slopes.end(), 0.0);
177 m_gpu_comp->SetAvgSlopes(m_avg_slopes);
std::vector< float > m_avg_modes
Definition: computationGpu.hpp:214
DataPointPath m_dp_avg_slopes
Definition: computationGpu.hpp:193
DataPointPath m_dp_stats_last_id
Definition: computationGpu.hpp:199
DataPointPath m_dp_stats_iteration
Definition: computationGpu.hpp:197
DataPointPath m_dp_modes
Definition: computationGpu.hpp:187
MatrixBuffer< float > m_s2m_matrix
Definition: computationGpu.hpp:216
DataPointPath m_dp_avg_modes
Definition: computationGpu.hpp:194
std::atomic< unsigned int > m_callback_counter
Definition: computationGpu.hpp:203
unsigned int m_sample_id
Definition: computationGpu.hpp:201
void Compute()
Definition: computationGpu.hpp:140
Definition: rtcComponent.hpp:17
Header file for OldbApiIf, which defines the API for OldbAdapters.
Declaration of the MatrixBuffer template class used in APIs.
void StaticLoad()
Definition: computationGpu.hpp:68
int m_n_iterations
Definition: computationGpu.hpp:210
bool isComputing()
Definition: computationGpu.hpp:168
log4cplus::Logger & GetLogger(const std::string &name="")
Definition: oldbApiIf.hpp:18
std::atomic< bool > m_computation_running
Definition: computationGpu.hpp:204
Definition: businessLogic.hpp:22
std::string m_name
Definition: computationGpu.hpp:183
rtctk::componentFramework::RuntimeRepoApiIf & m_rtr
Definition: computationGpu.hpp:181
std::unique_ptr< exampleGpuLib > m_gpu_comp
Definition: computationGpu.hpp:206
void OnDataAvailable(TopicType const &sample)
Definition: computationGpu.hpp:126
Definition: runtimeRepoApiIf.hpp:59
void DynamicLoad()
Definition: computationGpu.hpp:101
DataPointPath m_dp_s2m
Definition: computationGpu.hpp:190
MatrixBuffer< float > m_buffer_matrix
Definition: computationGpu.hpp:215
DataPointPath m_dp_iterations
Definition: computationGpu.hpp:188
unsigned int m_iteration
Definition: computationGpu.hpp:202
int m_n_slopes
Definition: computationGpu.hpp:208
rtctk::componentFramework::OldbApiIf & m_oldb
Definition: computationGpu.hpp:182
DataPointPath m_dp_stats_time
Definition: computationGpu.hpp:198
~ComputationGpu()
Definition: computationGpu.hpp:63
int m_gpu
Definition: computationGpu.hpp:211
std::vector< float > m_avg_slopes
Definition: computationGpu.hpp:213
int m_n_modes
Definition: computationGpu.hpp:209
DataPointPath m_dp_slopes
Definition: computationGpu.hpp:186
Header file for RuntimeRepoApiIf, which defines the API for RuntimeRepoAdapters.
void ResetComputation()
Definition: computationGpu.hpp:171
Logging Support Library based on log4cplus.
void ThreadInit()
Definition: computationGpu.hpp:120
int int32_t
Definition: mudpi.h:17
Definition: dataPointPath.hpp:30
ComputationGpu(rtctk::componentFramework::RuntimeRepoApiIf &rtr, rtctk::componentFramework::OldbApiIf &oldb, std::string const &name)
Definition: computationGpu.hpp:33
Definition: computationGpu.hpp:31
DataPointPath m_dp_gpu
Definition: computationGpu.hpp:189
Definition: matrixBuffer.hpp:19
void Reset()
Definition: computationGpu.hpp:134