| 10 | using namespace mgb; |
| 11 | |
| 12 | void NumRangeChecker::Checker::init(VarNode* var, float range) { |
| 13 | if (m_func) |
| 14 | return; |
| 15 | |
| 16 | m_inp = std::make_shared<DeviceTensorND>(var->comp_node(), var->dtype()); |
| 17 | m_out = std::make_unique<HostTensorND>(); |
| 18 | auto cg = ComputingGraph::make(); |
| 19 | cg->options().log_level = 0; |
| 20 | auto vi = opr::VolatileSharedDeviceTensor::make(*cg, m_inp), |
| 21 | chk = opr::abs(vi) < range, good = opr::reduce_min(chk, chk.make_scalar(1)); |
| 22 | auto cb = [d = m_out.get()](DeviceTensorND& dv) { d->copy_from(dv).sync(); }; |
| 23 | m_func = cg->compile({{good, cb}}); |
| 24 | } |
| 25 | |
| 26 | bool NumRangeChecker::Checker::check(VarNode* var) { |
| 27 | auto&& val = var->dev_tensor(); |
no test coverage detected