• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright 2022 Huawei Technologies Co., Ltd
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include "src/control_flow/control_actor_creator.h"
18 #include "src/litert/kernel_exec_util.h"
19 #ifndef CONTROLFLOW_TENSORLIST_CLIP
20 #include "src/control_flow/actor/switch_actor.h"
21 #include "src/control_flow/actor/entrance_actor.h"
22 #include "src/control_flow/actor/exit_actor.h"
23 #include "src/litert/parallel_lite_actor.h"
24 
25 namespace mindspore::lite {
CreateActor(kernel::KernelExec * kernel,lite::InnerContext * ctx)26 std::shared_ptr<LiteOpActor> CreateActor(kernel::KernelExec *kernel, lite::InnerContext *ctx) {
27   std::shared_ptr<LiteOpActor> actor = nullptr;
28   if (kernel::KernelExecUtil::IsSwitchTypeCall(kernel)) {
29     actor = std::make_shared<LiteSwitchOpActor>(kernel, ctx);
30   } else if (kernel->subgraph_type() == kernel::kEntranceSubGraph) {
31     actor = std::make_shared<LiteEntranceOpActor>(kernel, ctx);
32   } else if (kernel->subgraph_type() == kernel::kExitSubGraph) {
33     actor = std::make_shared<LiteExitOpActor>(kernel, ctx);
34   } else if (kernel->subgraph_type() != kernel::kNotSubGraph) {
35     auto subgraph_kernel = reinterpret_cast<kernel::SubGraphKernel *>(kernel);
36     if (subgraph_kernel->nodes().size() > 1 && ctx->inter_op_parallel_num_ > 1 &&
37         (kernel->subgraph_type() == kernel::kCpuFP32SubGraph || kernel->subgraph_type() == kernel::kCpuFP16SubGraph)) {
38       actor = std::make_shared<ParallelLiteActor>(kernel, ctx);
39     } else {
40       actor = std::make_shared<LiteOpActor>(kernel, ctx);
41     }
42   } else {
43     actor = std::make_shared<LiteOpActor>(kernel, ctx);
44   }
45   return actor;
46 }
47 }  // namespace mindspore::lite
48 
49 #else
50 namespace mindspore::lite {
CreateActor(kernel::KernelExec * kernel,lite::InnerContext * ctx)51 std::shared_ptr<LiteOpActor> CreateActor(kernel::KernelExec *kernel, lite::InnerContext *ctx) {
52   if (kernel::KernelExecUtil::IsSwitchTypeCall(kernel) || (kernel->subgraph_type() == kernel::kEntranceSubGraph) ||
53       (kernel->subgraph_type() == kernel::kExitSubGraph)) {
54     return nullptr;
55   }
56   return std::make_shared<LiteOpActor>(kernel, ctx);
57 }
58 }  // namespace mindspore::lite
59 #endif
60