13#ifndef RTCTK_EXAMPLEDATATASK_COMPUTATION_HPP
14#define RTCTK_EXAMPLEDATATASK_COMPUTATION_HPP
31using namespace rtctk::componentFramework;
43 m_n_slopes = n_slopes;
47 m_im.resize(m_n_acts, m_n_slopes);
48 m_cm.resize(m_n_slopes, m_n_acts);
49 m_ipiv.resize(m_n_acts);
52 LOG4CPLUS_DEBUG(m_logger,
"m_n_slopes: " << m_n_slopes);
53 LOG4CPLUS_DEBUG(m_logger,
"m_n_acts: " << m_n_acts);
57 m_im = std::move(data);
59 if (m_n_acts != m_im.GetNrows() || m_n_slopes != m_im.GetNcols()) {
60 std::stringstream err_text;
61 err_text <<
"IM wrong shape, "
62 <<
"expected:" << m_n_acts <<
" x " << m_n_slopes
63 <<
"received: " << m_im.GetNrows() <<
" x " << m_im.GetNcols();
78 auto time_start = std::chrono::steady_clock::now();
82 memcpy(m_cm.data(), m_im.data(), m_n_slopes * m_n_acts *
sizeof(
float));
84 LAPACK_ROW_MAJOR, m_n_acts, m_n_slopes, m_cm.data(), m_n_slopes, m_ipiv.data());
85 LAPACKE_sgetri(LAPACK_ROW_MAJOR, m_n_slopes, m_cm.data(), m_n_acts, m_ipiv.data());
88 py::gil_scoped_acquire gil;
92 auto py_compute_module = py::module::import(
"rtctk_example_data_task_py_lib");
93 auto py_inversion = py_compute_module.attr(
"inversion");
95 py_inversion(&m_im, &m_cm);
98 auto elapsed = std::chrono::steady_clock::now() - time_start;
100 return {.cm=m_cm, .stats={elapsed}};
104 log4cplus::Logger& m_logger;
116 std::vector<int> m_ipiv;
A buffer class representing 2D matrix data.
Definition matrixBuffer.hpp:28
The RtctkException class is the base class for all Rtctk exceptions.
Definition exceptions.hpp:213
Definition computation.hpp:36
Result Compute(Algorithm algorithm)
Definition computation.hpp:77
rtctk::componentFramework::MatrixBuffer< T > MatrixBuffer
Definition computation.hpp:41
void SetDynamicConfig(MatrixBuffer< float > &&data)
Definition computation.hpp:56
Computation()
Definition computation.hpp:39
void SetStaticConfig(size_t n_slopes, size_t n_acts)
Definition computation.hpp:42
Algorithm
Definition computation.hpp:37
@ SimpleInversion
Definition computation.hpp:37
@ PythonInversion
Definition computation.hpp:37
Provides macros and utilities for exception handling.
Logging Support Library based on log4cplus.
Declaration of the embedded Python module for MatrixBuffer classes.
Declaration of the MatrixBuffer template class used in APIs.
log4cplus::Logger & GetLogger(const std::string &name="app")
Get handle to a specific logger.
Definition logger.cpp:192
Definition businessLogic.cpp:27
Definition computation.hpp:43
struct rtctk::exampleDataTask::Computation::Result::@344315031211130374123213135274146162054312272367 stats
const MatrixBuffer< float > & cm
Definition computation.hpp:70
std::chrono::duration< double > elapsed
Definition computation.hpp:73