| 931 | } |
| 932 | |
| 933 | void 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 | |
| 983 | std::shared_ptr<Tensor> NetworkImplDft::get_io_tensor( |
| 984 | std::string io_name, LiteTensorPhase phase) { |
nothing calls this directly
no test coverage detected