28 #ifndef SPLA_CPU_M_EADD_HPP
29 #define SPLA_CPU_M_EADD_HPP
52 return "sequential element-wise add matrix operation";
56 auto t = ctx.
task.template cast_safe<ScheduleTask_m_eadd>();
61 return execute_lil(ctx);
64 return execute_lil(ctx);
71 auto t = ctx.
task.template cast_safe<ScheduleTask_m_eadd>();
81 auto* p_R = R->template get<CpuLil<T>>();
82 const auto* p_A = A->template get<CpuLil<T>>();
83 const auto* p_B = B->template get<CpuLil<T>>();
84 const auto&
function = op->function;
86 const uint N = R->get_n_rows();
87 const auto fill_value_R = R->get_fill_value();
91 for (
uint i = 0; i < N; i++) {
92 auto& row_R = p_R->Ar[i];
93 const auto& row_A = p_A->Ar[i];
94 const auto& row_B = p_B->Ar[i];
96 auto iter_A = row_A.begin();
97 auto iter_B = row_B.begin();
99 auto end_A = row_A.end();
100 auto end_B = row_B.end();
102 while (iter_A != end_A && iter_B != end_B) {
103 const auto [i_A, x_A] = *iter_A;
104 const auto [i_B, x_B] = *iter_B;
113 }
else if (i_B < i_A) {
118 r =
function(x_A, x_B);
124 if (r != fill_value_R) {
125 row_R.emplace_back(j, r);
129 while (iter_A != end_A) {
130 const auto [i_A, x_A] = *iter_A;
132 if (r != fill_value_R) {
133 row_R.emplace_back(i_A, r);
138 while (iter_B != end_B) {
139 const auto [i_B, x_B] = *iter_B;
141 if (r != fill_value_R) {
142 row_R.emplace_back(i_B, r);
Status of library operation execution.
Definition: cpu_m_eadd.hpp:43
~Algo_m_eadd_cpu() override=default
Status execute(const DispatchContext &ctx) override
Definition: cpu_m_eadd.hpp:55
std::string get_description() override
Definition: cpu_m_eadd.hpp:51
std::string get_name() override
Definition: cpu_m_eadd.hpp:47
Algorithm suitable to process schedule task based on task string key.
Definition: registry.hpp:66
Automates reference counting and behaves as shared smart pointer.
Definition: ref.hpp:117
std::uint32_t uint
Library index and size type.
Definition: config.hpp:56
Definition: algorithm.hpp:37
Execution context of a single task.
Definition: dispatcher.hpp:46
ref_ptr< ScheduleTask > task
Definition: dispatcher.hpp:48
#define TIME_PROFILE_SCOPE(name)
Definition: time_profiler.hpp:92