diff --git a/src/opr/impl/tensor_manip.cpp b/src/opr/impl/tensor_manip.cpp index 03e453bc..9cbae01e 100644 --- a/src/opr/impl/tensor_manip.cpp +++ b/src/opr/impl/tensor_manip.cpp @@ -1410,8 +1410,11 @@ SymbolVar ParamPackConcat::make(const SmallVector& inp, void ParamPackConcat::scn_do_execute() { mgb_assert(m_opr.comp_node() == comp_node()); auto&& inputs = input(); - m_inp_ptr.resize(inputs.size() - 1); - auto ptr = m_inp_ptr.data(); + if (!m_inp_ptr) { + void** raw_inp_ptr = (void**)comp_node().alloc_host(sizeof(void*)*inputs.size()); + m_inp_ptr = {raw_inp_ptr, [comp_node=comp_node()](void** ptr){comp_node.free_host(ptr);}}; + } + auto ptr = m_inp_ptr.get(); for (size_t i = 0; i < inputs.size() - 1; i++) { ptr[i] = inputs[i]->dev_tensor().as_megdnn().raw_ptr; } diff --git a/src/opr/include/megbrain/opr/tensor_manip.h b/src/opr/include/megbrain/opr/tensor_manip.h index dd3713e3..74d4f2ed 100644 --- a/src/opr/include/megbrain/opr/tensor_manip.h +++ b/src/opr/include/megbrain/opr/tensor_manip.h @@ -544,7 +544,7 @@ MGB_DEFINE_OPR_CLASS(Concat, cg::SingleCNOutshapePureByInshapeOprBase) // { */ MGB_DEFINE_OPR_CLASS(ParamPackConcat, cg::SingleCNOperatorNodeBase) // { //! input pointer buffer - SmallVector m_inp_ptr; + std::shared_ptr m_inp_ptr; std::vector m_offsets; intl::UniqPtrWithCN m_opr;