| 98 | } |
| 99 | |
| 100 | void VarValueChecker::on_var_computed(VarNode* var) { |
| 101 | if (!var->dev_tensor_valid()) { |
| 102 | if (m_init_val_dumped && var == m_vars[m_cur_var_idx]) { |
| 103 | // skip vars that are not on device |
| 104 | on_comp_seq_exec_finished({}); |
| 105 | } |
| 106 | return; |
| 107 | } |
| 108 | |
| 109 | if (!m_init_val_dumped) { |
| 110 | #if !__DEPLOY_ON_XP_SP2__ |
| 111 | m_var2val_mtx.lock(); |
| 112 | #endif |
| 113 | auto&& val = m_var2val[var]; |
| 114 | #if !__DEPLOY_ON_XP_SP2__ |
| 115 | m_var2val_mtx.unlock(); |
| 116 | #endif |
| 117 | |
| 118 | mgb_assert(!val); |
| 119 | val = std::make_shared<DeviceTensorND>(); |
| 120 | val->copy_from(var->dev_tensor()); |
| 121 | return; |
| 122 | } |
| 123 | |
| 124 | if (var != m_vars[m_cur_var_idx]) |
| 125 | return; |
| 126 | |
| 127 | if (!m_checker.valid()) { |
| 128 | m_checker.init(var, m_var2val.at(var)); |
| 129 | } |
| 130 | m_checker.check(var); |
| 131 | } |
| 132 | |
| 133 | // vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} |
nothing calls this directly
no test coverage detected