MCPcopy Create free account
hub / github.com/MegEngine/MegEngine / ParamFusePass::VarNamer

Class ParamFusePass::VarNamer

src/gopt/impl/inference.cpp:431–495  ·  view source on GitHub ↗

! * \brief get name for new param */

Source from the content-addressed store, hash-verified

429 * \brief get name for new param
430 */
431class ParamFusePass::VarNamer {
432#if MGB_BUILD_SLIM_SERVING
433public:
434 const std::string& name(VarNode*) {
435 static std::string ret("fuse");
436 return ret;
437 }
438#else
439 using SrcSet = SharedSet<OperatorNodeBase*>;
440 //! map from var to source SharedDeviceTensor/MultiSharedDeviceHolder oprs
441 //! that it depends on
442 ThinHashMap<OperatorNodeBase*, SrcSet> m_opr2srcs;
443 std::string m_name_cache;
444 std::vector<const char*> m_cur_name;
445
446 SrcSet& get_src_set(OperatorNodeBase* opr) {
447 auto opr_typeinfo = opr->dyn_typeinfo();
448
449 auto iter = m_opr2srcs.find(opr);
450 if (iter != m_opr2srcs.end()) {
451 return iter->second;
452 }
453 auto&& ret = m_opr2srcs[opr];
454 if (opr->input().empty()) {
455 if (opr_typeinfo == opr::SharedDeviceTensor::typeinfo() ||
456 opr_typeinfo == opr::MultipleDeviceTensorHolder::typeinfo()) {
457 ret.insert(opr);
458 } else {
459 mgb_assert(opr_typeinfo == opr::ImmutableTensor::typeinfo());
460 }
461 return ret;
462 }
463
464 for (auto i : opr->input()) {
465 ret.merge_from(get_src_set(i->owner_opr()));
466 }
467 return ret;
468 }
469
470public:
471 const std::string& name(VarNode* var) {
472 m_cur_name.clear();
473 for (auto i : get_src_set(var->owner_opr())) {
474 m_cur_name.push_back(i->cname());
475 }
476
477 auto cmp = [](const char* x, const char* y) { return strcmp(x, y) < 0; };
478 std::sort(m_cur_name.begin(), m_cur_name.end(), cmp);
479 m_name_cache.clear();
480 m_name_cache.append(mgb_cstr_log("fuse("));
481 bool first = true;
482 for (auto i : m_cur_name) {
483 if (first) {
484 first = false;
485 } else {
486 m_name_cache.push_back(',');
487 }
488 m_name_cache.append(i);

Callers

nothing calls this directly

Calls 14

sortFunction · 0.85
merge_fromMethod · 0.80
findMethod · 0.45
endMethod · 0.45
emptyMethod · 0.45
inputMethod · 0.45
insertMethod · 0.45
owner_oprMethod · 0.45
clearMethod · 0.45
push_backMethod · 0.45
cnameMethod · 0.45
beginMethod · 0.45

Tested by

no test coverage detected