Browse Source

add inner offset for var addr update

tags/v1.3.0
gengchao4@huawei.com 3 years ago
parent
commit
46ee33364c
3 changed files with 24 additions and 6 deletions
  1. +4
    -4
      ge/graph/build/memory/graph_mem_assigner.cc
  2. +2
    -2
      ge/graph/load/model_manager/model_utils.cc
  3. +18
    -0
      tests/ut/ge/graph/build/mem_assigner_unittest.cc

+ 4
- 4
ge/graph/build/memory/graph_mem_assigner.cc View File

@@ -1514,7 +1514,7 @@ ge::Status GraphMemoryAssigner::UpdateOpInputOffset(const NodePtr &node, vector<
output_list = last_peer_out_op_desc->GetOutputOffset();
auto out_index = static_cast<unsigned long>(peer_out_anchor->GetIdx());
if (output_list.size() > static_cast<size_t>(out_index)) {
int64_t peer_out_inner_offset;
int64_t peer_out_inner_offset = 0;
if (ge::AttrUtils::GetInt(last_peer_out_op_desc->MutableOutputDesc(out_index), ATTR_NAME_INNER_OFFSET,
peer_out_inner_offset)) {
(void)ge::AttrUtils::SetInt(tmp_op_desc->MutableInputDesc(anchor->GetIdx()), ATTR_NAME_INNER_OFFSET,
@@ -1534,7 +1534,7 @@ ge::Status GraphMemoryAssigner::UpdateOpInputOffset(const NodePtr &node, vector<
GE_ERRORLOG_AND_ERRORMSG(ge::FAILED, error.c_str());
return ge::FAILED;
}
int64_t inner_offset;
int64_t inner_offset = 0;
(void)ge::AttrUtils::GetInt(tmp_op_desc->MutableInputDesc(anchor->GetIdx()), ATTR_NAME_INNER_OFFSET,
inner_offset);
GELOGD("Node[%s] input[%d] has origin offset[%ld] origin_inner_offset[%ld]", tmp_op_desc->GetName().c_str(),
@@ -1575,7 +1575,7 @@ ge::Status GraphMemoryAssigner::UpdateRefOpOutputOffset(const NodePtr &node, con
const int ref_in, const int64_t input_offset) const {
auto opdesc = node->GetOpDesc();
GE_CHECK_NOTNULL(opdesc);
int64_t inner_offset;
int64_t inner_offset = 0;
bool has_inner_offset = ge::AttrUtils::GetInt(opdesc->MutableInputDesc(ref_in), ATTR_NAME_INNER_OFFSET, inner_offset);
for (const auto &out2in : out2ins) {
auto out_i = out2in.first;
@@ -1591,7 +1591,7 @@ ge::Status GraphMemoryAssigner::UpdateRefOpOutputOffset(const NodePtr &node, con
origin_output_list[out_i] = input_offset;
opdesc->SetOutputOffset(origin_output_list);
if (has_inner_offset) {
(void)ge::AttrUtils::SetInt(opdesc->MutableOutputDesc(out_i), ATTR_NAME_INNER_OFFSET,inner_offset);
(void)ge::AttrUtils::SetInt(opdesc->MutableOutputDesc(out_i), ATTR_NAME_INNER_OFFSET, inner_offset);
}
GELOGI("Node[%s] output[%d] is updated from reuse input index[%d] to offset[%ld], inner_offset[%ld]", opdesc->GetName().c_str(),
out_i, ref_in, input_offset, inner_offset);


+ 2
- 2
ge/graph/load/model_manager/model_utils.cc View File

@@ -342,7 +342,7 @@ vector<void *> ModelUtils::GetInputDataAddrs(const RuntimeParam &model_param, Co

int64_t input_offset = v_input_offset[non_const_index];
non_const_index++;
int64_t inner_offset;
int64_t inner_offset = 0;
(void)ge::AttrUtils::GetInt(op_desc->MutableInputDesc(i), ATTR_NAME_INNER_OFFSET, inner_offset);
GE_IF_BOOL_EXEC(model_param.var_size != 0 && ge::VarManager::Instance(session_id)->IsVarAddr(input_offset - inner_offset),
uint8_t *variable_addr = nullptr;
@@ -454,7 +454,7 @@ vector<void *> ModelUtils::GetOutputDataAddrs(const RuntimeParam &model_param, C
GELOGD("%s is an optional output, the address don't need to be saved.", tensor_desc->GetName().c_str());
continue;
}
int64_t inner_offset;
int64_t inner_offset = 0;
(void)ge::AttrUtils::GetInt(op_desc->MutableOutputDesc(i), ATTR_NAME_INNER_OFFSET, inner_offset);
GE_IF_BOOL_EXEC(model_param.var_size != 0 && ge::VarManager::Instance(session_id)->IsVarAddr(v_output_offset[i] - inner_offset),
uint8_t *variable_addr = nullptr;


+ 18
- 0
tests/ut/ge/graph/build/mem_assigner_unittest.cc View File

@@ -503,6 +503,24 @@ TEST_F(UtestMemoryAssignerTest, graph_memory_assign_set_input_offset) {
EXPECT_EQ(memoryAssigner.CheckOffset(), GRAPH_SUCCESS);
}

TEST_F(UtestMemoryAssignerTest, graph_memory_assign_check_inner_offset) {
ge::ComputeGraphPtr graph = MakeRefNodeGraph();
auto assign = graph->FindNode("assgin");
auto op_desc = assign->GetOpDesc();
int64_t inner_offset = 0;
EXPECT_EQ(ge::AttrUtils::GetInt(op_desc->MutableInputDesc(0), ATTR_NAME_INNER_OFFSET, inner_offset), false);
EXPECT_EQ(ge::AttrUtils::GetInt(op_desc->MutableInputDesc(1), ATTR_NAME_INNER_OFFSET, inner_offset), false);
GraphMemoryAssigner memoryAssigner(graph);
MemoryOffset memory_offset(RT_MEMORY_HBM, 0);
memoryAssigner.memory_offset_.emplace(RT_MEMORY_HBM, memory_offset);
EXPECT_EQ(memoryAssigner.SetInputOffset(), GRAPH_SUCCESS);
EXPECT_EQ(ge::AttrUtils::GetInt(op_desc->MutableInputDesc(0), ATTR_NAME_INNER_OFFSET, inner_offset), true);
EXPECT_EQ(inner_offset, 100);
EXPECT_EQ(ge::AttrUtils::GetInt(op_desc->MutableOutputDesc(0), ATTR_NAME_INNER_OFFSET, inner_offset), true);
EXPECT_EQ(inner_offset, 100);
EXPECT_EQ(ge::AttrUtils::GetInt(op_desc->MutableInputDesc(1), ATTR_NAME_INNER_OFFSET, inner_offset), false);
}

TEST_F(UtestMemoryAssignerTest, graph_memory_assign_update_ref_op_offset_reverse) {
ge::ut::GraphBuilder builder("graph");
auto data_input = builder.AddNode("data", "Data", 1, 1);


Loading…
Cancel
Save