12#ifndef RTCTK_EXAMPLEDATATASK_COMPUTATION_HPP
13#define RTCTK_EXAMPLEDATATASK_COMPUTATION_HPP
30using namespace rtctk::componentFramework;
42 m_n_slopes = n_slopes;
46 m_im.resize(m_n_acts, m_n_slopes);
47 m_cm.resize(m_n_slopes, m_n_acts);
48 m_ipiv.resize(m_n_acts);
51 LOG4CPLUS_DEBUG(m_logger,
"m_n_slopes: " << m_n_slopes);
52 LOG4CPLUS_DEBUG(m_logger,
"m_n_acts: " << m_n_acts);
56 m_im = std::move(data);
58 if (m_n_acts != m_im.GetNrows() || m_n_slopes != m_im.GetNcols()) {
59 std::stringstream err_text;
60 err_text <<
"IM wrong shape, "
61 <<
"expected:" << m_n_acts <<
" x " << m_n_slopes
62 <<
"received: " << m_im.GetNrows() <<
" x " << m_im.GetNcols();
77 auto time_start = std::chrono::steady_clock::now();
81 memcpy(m_cm.data(), m_im.data(), m_n_slopes * m_n_acts *
sizeof(
float));
83 LAPACK_ROW_MAJOR, m_n_acts, m_n_slopes, m_cm.data(), m_n_slopes, m_ipiv.data());
84 LAPACKE_sgetri(LAPACK_ROW_MAJOR, m_n_slopes, m_cm.data(), m_n_acts, m_ipiv.data());
87 py::gil_scoped_acquire gil;
91 auto py_compute_module = py::module::import(
"rtctk_example_data_task_py_lib");
92 auto py_inversion = py_compute_module.attr(
"inversion");
94 py_inversion(&m_im, &m_cm);
97 auto elapsed = std::chrono::steady_clock::now() - time_start;
99 return {.cm = m_cm, .stats = {elapsed}};
103 log4cplus::Logger& m_logger;
106 size_t m_n_slopes = 0;
115 std::vector<int> m_ipiv;
A buffer class representing 2D matrix data.
Definition matrixBuffer.hpp:27
The RtctkException class is the base class for all Rtctk exceptions.
Definition exceptions.hpp:220
Definition computation.hpp:35
Result Compute(Algorithm algorithm)
Definition computation.hpp:76
rtctk::componentFramework::MatrixBuffer< T > MatrixBuffer
Definition computation.hpp:40
void SetDynamicConfig(MatrixBuffer< float > &&data)
Definition computation.hpp:55
Computation()
Definition computation.hpp:38
void SetStaticConfig(size_t n_slopes, size_t n_acts)
Definition computation.hpp:41
Algorithm
Definition computation.hpp:36
@ SimpleInversion
Definition computation.hpp:36
@ PythonInversion
Definition computation.hpp:36
Provides macros and utilities for exception handling.
log4cplus::Logger & GetLogger(const std::string &name="app")
Get handle to a specific logger.
Definition logger.cpp:191
Logging Support Library based on log4cplus.
Declaration of the embedded Python module for MatrixBuffer classes.
Declaration of the MatrixBuffer template class used in APIs.
Definition businessLogic.cpp:26
Definition computation.hpp:42
struct rtctk::exampleDataTask::Computation::Result::@344315031211130374123213135274146162054312272367 stats
const MatrixBuffer< float > & cm
Definition computation.hpp:69
std::chrono::duration< double > elapsed
Definition computation.hpp:72