MCPcopy Create free account
hub / github.com/MegEngine/MegEngine / check_single_input

Method check_single_input

src/plugin/impl/var_sanity_check.cpp:225–283  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

223}
224
225void VarSanityCheck::check_single_input(
226 bool add_debug_log, cg::OperatorNodeBase* recv_opr, VarNode* var) {
227 if (var->contain_flag(VarNode::Flag::DISALLOW_VAR_SANITY_CHECK))
228 return;
229
230 auto checksum = calc_checksum(var);
231
232 ChecksumResult checksum_expect;
233 {
234 MGB_LOCK_GUARD(m_id2chksum_mtx);
235 auto&& node_prop = recv_opr->node_prop();
236 if (node_prop.contain(
237 cg::OperatorNodeBase::NodeProp::Flag::FORCE_UPDATE_INPUT_VAR)) {
238 m_modified_vars.insert(var);
239 }
240 auto chk_iter = m_var2chksum.find(var);
241 if (chk_iter == m_var2chksum.end()) {
242 // PERSISTENT_DEVICE_VALUE vars can be read by oprs on other comp
243 // nodes without being waited on
244 mgb_assert(
245 var->contain_flag(VarNode::Flag::PERSISTENT_DEVICE_VALUE),
246 "var checksum uncomputed, and its owner opr is not "
247 "PERSISTENT_DEVICE_VALUE: %s",
248 cg::dump_var_info({var}).c_str());
249 auto rst = m_var2chksum.emplace(var, checksum);
250 mgb_assert(rst.second);
251 return;
252 } else {
253 checksum_expect = chk_iter->second;
254 }
255 }
256
257 if (add_debug_log) {
258 m_debug_log.on_var_received(var);
259 }
260
261 if (checksum != checksum_expect) {
262#if MGB_ENABLE_GETENV
263 mgb_throw(
264 Error,
265 "var sanity check failed: var: %s"
266 " (checksum: expect=%s got=%s); receiver: %s{%s}(%zu);"
267 " you can set " LOG_DETAILS_ENV_VAR_NAME
268 "=%zu to get more details; pass=%d",
269 cg::dump_var_info({var}).c_str(), str(checksum_expect).c_str(),
270 str(checksum).c_str(), recv_opr->cname(),
271 recv_opr->dyn_typeinfo()->name, recv_opr->id(), var->id(),
272 !add_debug_log);
273#else
274 mgb_throw(
275 Error,
276 "var sanity check failed: var: %s"
277 " (checksum: expect=%s got=%s); receiver: %s{%s}(%zu);",
278 cg::dump_var_info({var}).c_str(), str(checksum_expect).c_str(),
279 str(checksum).c_str(), recv_opr->cname(),
280 recv_opr->dyn_typeinfo()->name, recv_opr->id());
281#endif
282 }

Callers

nothing calls this directly

Calls 10

strFunction · 0.85
on_var_receivedMethod · 0.80
contain_flagMethod · 0.45
containMethod · 0.45
insertMethod · 0.45
findMethod · 0.45
endMethod · 0.45
emplaceMethod · 0.45
cnameMethod · 0.45
idMethod · 0.45

Tested by

no test coverage detected