You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

exe_graph_resource_guard.h 3.1 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /**
  2. * Copyright (c) Huawei Technologies Co., Ltd. 2022. All rights reserved.
  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. #ifndef AIR_CXX_INC_FRAMEWORK_RUNTIME_EXE_GRAPH_RESOURCE_GUARD_H_
  17. #define AIR_CXX_INC_FRAMEWORK_RUNTIME_EXE_GRAPH_RESOURCE_GUARD_H_
  18. #include <memory>
  19. #include <vector>
  20. #include <cstdint>
  21. #include "common/ge_visibility.h"
  22. namespace gert {
  23. class VISIBILITY_EXPORT ResourceGuard {
  24. public:
  25. void *ResetExecutionData(std::unique_ptr<uint8_t[]> execution_data);
  26. void ResetAnyValue(std::unique_ptr<uint8_t[]> any_values, size_t count);
  27. void PushNode(void *node);
  28. void PushWatcher(void *watcher);
  29. void *ResetNodesArray(std::unique_ptr<uint8_t[]> nodes_array);
  30. void *ResetStartNodesArray(std::unique_ptr<uint8_t[]> start_nodes_array);
  31. void *ResetNodesIndgreeArray(std::unique_ptr<uint8_t[]> nodes_indgree_array);
  32. void *ResetNodesWaitIndgreeArray(std::unique_ptr<uint8_t[]> nodes_indgree_array);
  33. void *ResetInputsArray(std::unique_ptr<uint8_t[]> inputs_array);
  34. void *ResetOutputsArray(std::unique_ptr<uint8_t[]> outputs_array);
  35. void *ResetWatchersArray(std::unique_ptr<uint8_t[]> watchers_array);
  36. void *ResetReadyQueue(void *ready_queue);
  37. void *ResetBuffer(std::unique_ptr<uint8_t[]> buffer);
  38. void *ResetComputeNodeInfo(std::unique_ptr<uint8_t[]> compute_node_info);
  39. void *ResetKernelExtendInfo(std::unique_ptr<uint8_t[]> kernel_extend_info);
  40. void *ResetModelDesc(std::unique_ptr<uint8_t[]> model_desc);
  41. ~ResourceGuard();
  42. private:
  43. std::unique_ptr<uint8_t[]> execution_data_holder_;
  44. size_t any_values_num_;
  45. std::unique_ptr<uint8_t[]> any_values_guard_;
  46. std::vector<std::unique_ptr<void, decltype(&free)>> nodes_guarder_;
  47. std::vector<std::unique_ptr<void, decltype(&free)>> watchers_guarder_;
  48. std::unique_ptr<uint8_t[]> continuous_buffer_guarder_;
  49. std::unique_ptr<uint8_t[]> buffer_guarder_;
  50. std::unique_ptr<uint8_t[]> compute_node_info_guarder_;
  51. std::unique_ptr<uint8_t[]> kernel_extend_info_guarder_;
  52. std::unique_ptr<uint8_t[]> model_desc_guarder_;
  53. std::unique_ptr<uint8_t[]> nodes_array_guarder_;
  54. std::unique_ptr<uint8_t[]> start_nodes_array_guarder_;
  55. std::unique_ptr<uint8_t[]> nodes_indgree_array_guarder_;
  56. std::unique_ptr<uint8_t[]> nodes_wait_indgree_array_guarder_;
  57. std::unique_ptr<uint8_t[]> inputs_array_guarder_;
  58. std::unique_ptr<uint8_t[]> outputs_array_guarder_;
  59. std::unique_ptr<uint8_t[]> watchers_array_guarder_;
  60. std::unique_ptr<void, decltype(&free)> ready_queue_guarder_{nullptr, nullptr};
  61. };
  62. } // namespace gert
  63. #endif // AIR_CXX_INC_FRAMEWORK_RUNTIME_EXE_GRAPH_RESOURCE_GUARD_H_

图引擎模块(GE)是MindSpore的一个子模块,其代码由C++实现,位于前端模块ME和底层硬件之间,起到承接作用。图引擎模块以ME下发的图作为输入,然后进行一系列的深度图优化操作,最后输出一张可以在底层硬件上高效运行的图。GE针对昇腾AI处理器的硬件结构特点,做了特定的优化工作,以此来充分发挥出昇腾AI处理器的强大算力。在进行模型训练/推理时,GE会被自动调用而用户并不感知。GE主要由GE API和GE Core两部分组成,详细的架构图如下所示