| @@ -19,6 +19,7 @@ | |||||
| #define private public | #define private public | ||||
| #define protected public | #define protected public | ||||
| #include "graph/utils/graph_utils.h" | #include "graph/utils/graph_utils.h" | ||||
| #include "common/profiling/profiling_manager.h" | |||||
| #include "graph/load/new_model_manager/davinci_model.h" | #include "graph/load/new_model_manager/davinci_model.h" | ||||
| using namespace std; | using namespace std; | ||||
| @@ -36,6 +37,7 @@ class UtestDavinciModel : public testing::Test { | |||||
| TEST_F(UtestDavinciModel, init_success) { | TEST_F(UtestDavinciModel, init_success) { | ||||
| DavinciModel model(0, nullptr); | DavinciModel model(0, nullptr); | ||||
| ComputeGraphPtr graph = make_shared<ComputeGraph>("default"); | ComputeGraphPtr graph = make_shared<ComputeGraph>("default"); | ||||
| ProfilingManager::Instance().is_load_profiling_ = true; | |||||
| GeModelPtr ge_model = make_shared<GeModel>(); | GeModelPtr ge_model = make_shared<GeModel>(); | ||||
| ge_model->SetGraph(GraphUtils::CreateGraphFromComputeGraph(graph)); | ge_model->SetGraph(GraphUtils::CreateGraphFromComputeGraph(graph)); | ||||
| @@ -53,40 +55,63 @@ TEST_F(UtestDavinciModel, init_success) { | |||||
| op_input->AddOutputDesc(tensor); | op_input->AddOutputDesc(tensor); | ||||
| op_input->SetInputOffset({1024}); | op_input->SetInputOffset({1024}); | ||||
| op_input->SetOutputOffset({1024}); | op_input->SetOutputOffset({1024}); | ||||
| NodePtr node_input = graph->AddNode(op_input); | |||||
| NodePtr node_input = graph->AddNode(op_input); // op_index = 0 | |||||
| OpDescPtr op_kernel = CreateOpDesc("square", "Square"); | |||||
| op_kernel->AddInputDesc(tensor); | |||||
| op_kernel->AddOutputDesc(tensor); | |||||
| op_kernel->SetInputOffset({1024}); | |||||
| op_kernel->SetOutputOffset({1024}); | |||||
| NodePtr node_kernel = graph->AddNode(op_kernel); // op_index = 1 | |||||
| OpDescPtr op_memcpy = CreateOpDesc("memcpy", MEMCPYASYNC); | OpDescPtr op_memcpy = CreateOpDesc("memcpy", MEMCPYASYNC); | ||||
| op_memcpy->AddInputDesc(tensor); | op_memcpy->AddInputDesc(tensor); | ||||
| op_memcpy->AddOutputDesc(tensor); | op_memcpy->AddOutputDesc(tensor); | ||||
| op_memcpy->SetInputOffset({1024}); | op_memcpy->SetInputOffset({1024}); | ||||
| op_memcpy->SetOutputOffset({5120}); | op_memcpy->SetOutputOffset({5120}); | ||||
| NodePtr node_memcpy = graph->AddNode(op_memcpy); | |||||
| NodePtr node_memcpy = graph->AddNode(op_memcpy); // op_index = 2 | |||||
| OpDescPtr op_output = CreateOpDesc("output", NETOUTPUT); | OpDescPtr op_output = CreateOpDesc("output", NETOUTPUT); | ||||
| op_output->AddInputDesc(tensor); | op_output->AddInputDesc(tensor); | ||||
| op_output->SetInputOffset({5120}); | op_output->SetInputOffset({5120}); | ||||
| op_output->SetSrcName( { "memcpy" } ); | op_output->SetSrcName( { "memcpy" } ); | ||||
| op_output->SetSrcIndex( { 0 } ); | op_output->SetSrcIndex( { 0 } ); | ||||
| NodePtr node_output = graph->AddNode(op_output); | |||||
| NodePtr node_output = graph->AddNode(op_output); // op_index = 3 | |||||
| domi::TaskDef *task_def = model_task_def->add_task(); | |||||
| task_def->set_stream_id(0); | |||||
| task_def->set_type(RT_MODEL_TASK_MEMCPY_ASYNC); | |||||
| domi::MemcpyAsyncDef *memcpy_async = task_def->mutable_memcpy_async(); | |||||
| domi::TaskDef *task_def1 = model_task_def->add_task(); | |||||
| task_def1->set_stream_id(0); | |||||
| task_def1->set_type(RT_MODEL_TASK_KERNEL); | |||||
| domi::KernelDef *kernel_def = task_def1->mutable_kernel(); | |||||
| kernel_def->set_stub_func("stub_func"); | |||||
| kernel_def->set_args_size(64); | |||||
| string args(64, '1'); | |||||
| kernel_def->set_args(args.data(), 64); | |||||
| domi::KernelContext *context = kernel_def->mutable_context(); | |||||
| context->set_op_index(1); | |||||
| context->set_kernel_type(2); // ccKernelType::TE | |||||
| uint16_t args_offset[9] = {0}; | |||||
| context->set_args_offset(args_offset, 9 * sizeof(uint16_t)); | |||||
| domi::TaskDef *task_def2 = model_task_def->add_task(); | |||||
| task_def2->set_stream_id(0); | |||||
| task_def2->set_type(RT_MODEL_TASK_MEMCPY_ASYNC); | |||||
| domi::MemcpyAsyncDef *memcpy_async = task_def2->mutable_memcpy_async(); | |||||
| memcpy_async->set_src(1024); | memcpy_async->set_src(1024); | ||||
| memcpy_async->set_dst(5120); | memcpy_async->set_dst(5120); | ||||
| memcpy_async->set_dst_max(512); | memcpy_async->set_dst_max(512); | ||||
| memcpy_async->set_count(1); | memcpy_async->set_count(1); | ||||
| memcpy_async->set_kind(RT_MEMCPY_DEVICE_TO_DEVICE); | memcpy_async->set_kind(RT_MEMCPY_DEVICE_TO_DEVICE); | ||||
| memcpy_async->set_op_index(1); | |||||
| memcpy_async->set_op_index(2); | |||||
| EXPECT_EQ(model.Assign(ge_model), SUCCESS); | EXPECT_EQ(model.Assign(ge_model), SUCCESS); | ||||
| EXPECT_EQ(model.Init(), SUCCESS); | EXPECT_EQ(model.Init(), SUCCESS); | ||||
| EXPECT_EQ(model.input_addrs_list_.size(), 1); | EXPECT_EQ(model.input_addrs_list_.size(), 1); | ||||
| EXPECT_EQ(model.output_addrs_list_.size(), 1); | EXPECT_EQ(model.output_addrs_list_.size(), 1); | ||||
| EXPECT_EQ(model.task_list_.size(), 1); | |||||
| EXPECT_EQ(model.op_list_.size(), 3); | |||||
| EXPECT_EQ(model.task_list_.size(), 2); | |||||
| ProfilingManager::Instance().is_load_profiling_ = false; | |||||
| } | } | ||||
| TEST_F(UtestDavinciModel, init_data_op) { | TEST_F(UtestDavinciModel, init_data_op) { | ||||
| @@ -165,4 +190,96 @@ TEST_F(UtestDavinciModel, init_netoutput_op_subgraph) { | |||||
| EXPECT_TRUE(output_op_list.empty()); | EXPECT_TRUE(output_op_list.empty()); | ||||
| } | } | ||||
| TEST_F(UtestDavinciModel, init_unknown) { | |||||
| DavinciModel model(0, nullptr); | |||||
| model.SetKnownNode(true); | |||||
| ComputeGraphPtr graph = make_shared<ComputeGraph>("default"); | |||||
| GeModelPtr ge_model = make_shared<GeModel>(); | |||||
| ge_model->SetGraph(GraphUtils::CreateGraphFromComputeGraph(graph)); | |||||
| AttrUtils::SetInt(ge_model, ATTR_MODEL_MEMORY_SIZE, 5120000); | |||||
| AttrUtils::SetInt(ge_model, ATTR_MODEL_STREAM_NUM, 1); | |||||
| shared_ptr<domi::ModelTaskDef> model_task_def = make_shared<domi::ModelTaskDef>(); | |||||
| ge_model->SetModelTaskDef(model_task_def); | |||||
| GeTensorDesc tensor(GeShape(), FORMAT_NCHW, DT_FLOAT); | |||||
| TensorUtils::SetSize(tensor, 512); | |||||
| OpDescPtr op_input = CreateOpDesc("data", DATA); | |||||
| op_input->AddInputDesc(tensor); | |||||
| op_input->AddOutputDesc(tensor); | |||||
| op_input->SetInputOffset({1024}); | |||||
| op_input->SetOutputOffset({1024}); | |||||
| NodePtr node_input = graph->AddNode(op_input); // op_index = 0 | |||||
| OpDescPtr op_kernel = CreateOpDesc("square", "Square"); | |||||
| op_kernel->AddInputDesc(tensor); | |||||
| op_kernel->AddOutputDesc(tensor); | |||||
| op_kernel->SetInputOffset({1024}); | |||||
| op_kernel->SetOutputOffset({1024}); | |||||
| NodePtr node_kernel = graph->AddNode(op_kernel); // op_index = 1 | |||||
| OpDescPtr op_memcpy = CreateOpDesc("memcpy", MEMCPYASYNC); | |||||
| op_memcpy->AddInputDesc(tensor); | |||||
| op_memcpy->AddOutputDesc(tensor); | |||||
| op_memcpy->SetInputOffset({1024}); | |||||
| op_memcpy->SetOutputOffset({5120}); | |||||
| NodePtr node_memcpy = graph->AddNode(op_memcpy); // op_index = 2 | |||||
| OpDescPtr op_output = CreateOpDesc("output", NETOUTPUT); | |||||
| op_output->AddInputDesc(tensor); | |||||
| op_output->SetInputOffset({5120}); | |||||
| op_output->SetSrcName( { "memcpy" } ); | |||||
| op_output->SetSrcIndex( { 0 } ); | |||||
| NodePtr node_output = graph->AddNode(op_output); // op_index = 3 | |||||
| domi::TaskDef *task_def1 = model_task_def->add_task(); | |||||
| task_def1->set_stream_id(0); | |||||
| task_def1->set_type(RT_MODEL_TASK_KERNEL); | |||||
| domi::KernelDef *kernel_def = task_def1->mutable_kernel(); | |||||
| kernel_def->set_stub_func("stub_func"); | |||||
| kernel_def->set_args_size(64); | |||||
| string args(64, '1'); | |||||
| kernel_def->set_args(args.data(), 64); | |||||
| domi::KernelContext *context = kernel_def->mutable_context(); | |||||
| context->set_op_index(1); | |||||
| context->set_kernel_type(2); // ccKernelType::TE | |||||
| uint16_t args_offset[9] = {0}; | |||||
| context->set_args_offset(args_offset, 9 * sizeof(uint16_t)); | |||||
| domi::TaskDef *task_def2 = model_task_def->add_task(); | |||||
| task_def2->set_stream_id(0); | |||||
| task_def2->set_type(RT_MODEL_TASK_MEMCPY_ASYNC); | |||||
| domi::MemcpyAsyncDef *memcpy_async = task_def2->mutable_memcpy_async(); | |||||
| memcpy_async->set_src(1024); | |||||
| memcpy_async->set_dst(5120); | |||||
| memcpy_async->set_dst_max(512); | |||||
| memcpy_async->set_count(1); | |||||
| memcpy_async->set_kind(RT_MEMCPY_DEVICE_TO_DEVICE); | |||||
| memcpy_async->set_op_index(2); | |||||
| EXPECT_EQ(model.Assign(ge_model), SUCCESS); | |||||
| EXPECT_EQ(model.Init(), SUCCESS); | |||||
| EXPECT_EQ(model.input_addrs_list_.size(), 1); | |||||
| EXPECT_EQ(model.output_addrs_list_.size(), 1); | |||||
| EXPECT_EQ(model.task_list_.size(), 2); | |||||
| EXPECT_EQ(model.task_list_[0]->UpdateArgs(), SUCCESS); | |||||
| EXPECT_EQ(model.task_list_[1]->UpdateArgs(), SUCCESS); | |||||
| vector<string> out_shape_info; | |||||
| model.GetModelAttr(out_shape_info); | |||||
| vector<InputOutputDescInfo> input_descs; | |||||
| vector<InputOutputDescInfo> output_descs; | |||||
| EXPECT_EQ(model.GetInputOutputDescInfo(input_descs, output_descs), SUCCESS); | |||||
| int32_t virtual_addr = 0; | |||||
| const vector<void *> inputs = { &virtual_addr }; | |||||
| const vector<void *> outputs = { &virtual_addr }; | |||||
| EXPECT_EQ(model.UpdateKnownNodeArgs(inputs, outputs), SUCCESS); | |||||
| } | |||||
| } // namespace ge | } // namespace ge | ||||