MCPcopy Create free account
hub / github.com/MegEngine/MegEngine / output_tensor_copy_optimize

Method output_tensor_copy_optimize

lite/src/mge/network_impl.cpp:933–981  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

931}
932
933void NetworkImplDft::output_tensor_copy_optimize(
934 Var var, std::shared_ptr<Tensor> tensor) {
935 size_t index;
936 for (index = 0; index < m_load_result.output_var_list.size(); ++index) {
937 if (m_load_result.output_var_list[index].node() == var.node()) {
938 break;
939 }
940 }
941 LITE_ASSERT(index != m_load_result.output_var_list.size());
942 LITE_ASSERT(
943 !(m_user_config->options.force_output_use_user_specified_memory &&
944 m_user_config->options.force_output_dynamic_alloc),
945 "Can't set force_output_use_user_specified_memory and "
946 "force_output_dynamic_alloc at the same time.");
947 if (m_user_config->options.force_output_use_user_specified_memory) {
948 bool in_record = m_user_config->options.comp_node_seq_record_level > 0;
949 TensorHelper::implement(tensor)
950 ->cast_final_safe<TensorImplDft>()
951 .set_reset_callback(
952 [this, index, in_record](TensorImplDft* dft_tensor) {
953 auto var = this->m_load_result.output_var_list[index];
954 dft_tensor->device_share_host_memory();
955 auto dv = dft_tensor->dev_tensor().get();
956 dv->comp_node(var.node()->comp_node(), true);
957 var.node()->init_mem_plan(dv);
958 if (in_record) {
959 auto&& device_tensor = var.node()->mutable_dev_tensor();
960 device_tensor.only_reset_raw_storage(dv->storage());
961 } else {
962 var.node()->reset_dev_tensor_from_tensor(*dv);
963 }
964 });
965 }
966 if (m_user_config->options.force_output_dynamic_alloc) {
967 TensorHelper::implement(tensor)
968 ->cast_final_safe<TensorImplDft>()
969 .set_get_memory_callback([this, index](TensorImplDft* dft_tensor) {
970 auto var = this->m_load_result.output_var_list[index];
971 if (dft_tensor->is_host()) {
972 auto host_tensor = dft_tensor->m_host_tensor;
973 *host_tensor =
974 HostTensorND::make_proxy(var.node()->dev_tensor());
975 } else {
976 auto dev_tensor = dft_tensor->m_dev_tensor;
977 *dev_tensor = var.node()->dev_tensor();
978 }
979 });
980 }
981}
982
983std::shared_ptr<Tensor> NetworkImplDft::get_io_tensor(
984 std::string io_name, LiteTensorPhase phase) {

Callers

nothing calls this directly

Calls 11

set_reset_callbackMethod · 0.80
storageMethod · 0.80
is_hostMethod · 0.80
sizeMethod · 0.45
nodeMethod · 0.45
getMethod · 0.45
dev_tensorMethod · 0.45
comp_nodeMethod · 0.45

Tested by

no test coverage detected