| 70 | } |
| 71 | |
| 72 | void VarValueChecker::on_comp_seq_exec_finished(const cg::event::CompSeqExecFinished&) { |
| 73 | if (!m_init_val_dumped) { |
| 74 | m_init_val_dumped = true; |
| 75 | mgb_assert(!m_vars.empty()); |
| 76 | m_cur_var_idx = m_init_var_idx; |
| 77 | m_nr_exec = 0; |
| 78 | m_checker.reset(); |
| 79 | } else { |
| 80 | ++m_nr_exec; |
| 81 | if (m_nr_exec != m_var_switch_interval) |
| 82 | return; |
| 83 | |
| 84 | m_nr_exec = 0; |
| 85 | ++m_cur_var_idx; |
| 86 | } |
| 87 | |
| 88 | if (m_cur_var_idx >= m_vars.size()) { |
| 89 | fprintf(stderr, |
| 90 | "VarValueChecker: all check passed; " |
| 91 | "start from beginning\n"); |
| 92 | m_cur_var_idx = 0; |
| 93 | } |
| 94 | auto var = m_vars[m_cur_var_idx]; |
| 95 | fprintf(stderr, "VarValueChecker: going to check #%zu: %s\n", m_cur_var_idx, |
| 96 | cg::dump_var_info({var}).c_str()); |
| 97 | m_checker.reset(); |
| 98 | } |
| 99 | |
| 100 | void VarValueChecker::on_var_computed(VarNode* var) { |
| 101 | if (!var->dev_tensor_valid()) { |