/** * Copyright 2019-2020 Huawei Technologies Co., Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef GE_SINGLE_OP_SINGLE_OP_H_ #define GE_SINGLE_OP_SINGLE_OP_H_ #include #include #include #include #include #include "common/ge_inner_error_codes.h" #include "framework/executor/ge_executor.h" #include "runtime/stream.h" #include "task/op_task.h" #include "cce/aicpu_engine_struct.h" #include "hybrid/executor/hybrid_model_executor.h" namespace ge { class StreamResource; struct SingleOpModelParam; class SingleOp { public: SingleOp(StreamResource *stream_resource, std::mutex *stream_mutex, rtStream_t stream); ~SingleOp(); Status ExecuteAsync(const std::vector &inputs, const std::vector &outputs); void SetStream(rtStream_t stream); private: Status ValidateArgs(const std::vector &inputs, const std::vector &outputs); Status UpdateArgs(const std::vector &inputs, const std::vector &outputs); Status GetArgs(const std::vector &inputs, const std::vector &outputs); friend class SingleOpModel; StreamResource *stream_resource_ = nullptr; std::mutex *stream_mutex_; rtStream_t stream_ = nullptr; std::vector input_addr_list_; std::vector input_sizes_; std::vector output_addr_list_; std::vector output_sizes_; std::vector args_; std::vector tasks_; std::vector> arg_table_; std::unique_ptr running_param_; std::unique_ptr hybrid_model_; std::unique_ptr hybrid_model_executor_; std::vector inputs_desc_; }; class DynamicSingleOp { public: DynamicSingleOp(uintptr_t resource_id, std::mutex *stream_mutex_, rtStream_t stream); ~DynamicSingleOp() = default; Status ExecuteAsync(const vector &input_desc, const std::vector &inputs, std::vector &output_desc, std::vector &outputs); private: friend class SingleOpModel; Status ValidateParams(const vector &input_desc, const std::vector &inputs, std::vector &output_desc, std::vector &outputs) const; Status SetHostTensorValue(const std::vector> &inputs_size, const vector &input_desc, const std::vector &input_buffers); std::unique_ptr op_task_; std::unique_ptr hybrid_model_; std::unique_ptr hybrid_model_executor_; uintptr_t resource_id_ = 0; std::mutex *stream_mutex_; rtStream_t stream_ = nullptr; size_t num_inputs_ = 0; size_t num_outputs_ = 0; ComputeGraphPtr compute_graph_; }; } // namespace ge #endif // GE_SINGLE_OP_SINGLE_OP_H_