MCPcopy Create free account
hub / github.com/alibaba/MNN / _replaceConstOp

Function _replaceConstOp

tools/cpp/compilefornpu.cpp:498–542  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

496}
497
498static NetT* _replaceConstOp(const void* buffer, size_t bufferSize,
499 std::map<int, std::tuple<int, int, std::vector<int>, std::vector<char>>>& constTensorData,
500 std::vector<int>& constOpId) {
501 auto net = flatbuffers::GetRoot<Net>(buffer)->UnPack();
502 for (int i = 0; i < constOpId.size(); ++i) {
503 auto op = net->oplists[constOpId[i]].get();
504 auto index = op->outputIndexes[0];
505 auto iter = constTensorData.find(index);
506 if (iter == constTensorData.end()) {
507 continue;
508 }
509 auto name = op->name;
510 std::unique_ptr<MNN::OpT> newOp(new OpT);
511 newOp->type = OpType_Const;
512 newOp->name = name + "_Const";
513 auto blob = new BlobT;
514 blob->dataFormat = (MNN_DATA_FORMAT)std::get<0>(iter->second);
515 blob->dims = std::get<2>(iter->second);
516 if (std::get<1>(iter->second) == halide_type_float) {
517 blob->dataType = DataType_DT_FLOAT;
518 blob->float32s.resize(std::get<3>(iter->second).size() / 4);
519 memcpy(blob->float32s.data(), std::get<3>(iter->second).data(), std::get<3>(iter->second).size());
520 } else if (std::get<1>(iter->second) == halide_type_int) {
521 blob->dataType = DataType_DT_INT32;
522 blob->int32s.resize(std::get<3>(iter->second).size() / 4);
523 memcpy(blob->int32s.data(), std::get<3>(iter->second).data(), std::get<3>(iter->second).size());
524 } else {
525 continue;
526 }
527 newOp->main.value = blob;
528 newOp->main.type = OpParameter_Blob;
529 newOp->outputIndexes = {index};
530 net->oplists[constOpId[i]] = std::move(newOp);
531 }
532 auto oplist = std::move(net->oplists);
533 for (auto& op : oplist) {
534 if (nullptr != op.get()) {
535 net->oplists.emplace_back(std::move(op));
536 }
537 }
538 return net;
539 // flatbuffers::GetRoot<Net>(buffer)->Pack(builder, net);
540 // std::ofstream outputOs(dstMNN, std::ios::binary);
541 // outputOs.write((const char*)builder.GetBufferPointer(), builder.GetSize());
542}
543
544static std::vector<int> _findBreakIndex(const SubModuleInfo& info, const Net* net, std::shared_ptr<Schedule::ScheduleInfo> sharedConst) {
545 // 0: not used, 1: const, 2: output

Callers 1

mainFunction · 0.85

Calls 7

UnPackMethod · 0.45
sizeMethod · 0.45
getMethod · 0.45
findMethod · 0.45
endMethod · 0.45
resizeMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected