| 179 | } |
| 180 | |
| 181 | void WarpPerspectiveForward::scn_do_execute() { |
| 182 | if (!m_is_multi_src) { |
| 183 | if (input().size() == 3) { |
| 184 | intl::_MegDNNOprMethInvoker<2, 1>::exec(megdnn_opr(), this); |
| 185 | } else { |
| 186 | intl::_MegDNNOprMethInvoker<3, 1>::exec(megdnn_opr(), this); |
| 187 | } |
| 188 | } else { |
| 189 | megdnn::TensorNDArray srcs; |
| 190 | for (size_t i = 0; i < m_srcs_size; i++) { |
| 191 | srcs.push_back(input(i)->dev_tensor().as_megdnn()); |
| 192 | } |
| 193 | if (input().size() - m_srcs_size == 2) { |
| 194 | megdnn_opr()->exec( |
| 195 | srcs, input(m_srcs_size)->dev_tensor().as_megdnn(), |
| 196 | output(0)->dev_tensor().as_megdnn(), |
| 197 | intl::get_megdnn_workspace_from_var(output().back())); |
| 198 | } else { |
| 199 | megdnn_opr()->exec( |
| 200 | srcs, input(m_srcs_size)->dev_tensor().as_megdnn(), |
| 201 | input(m_srcs_size + 1)->dev_tensor().as_megdnn(), |
| 202 | output(0)->dev_tensor().as_megdnn(), |
| 203 | intl::get_megdnn_workspace_from_var(output().back())); |
| 204 | } |
| 205 | } |
| 206 | } |
| 207 | |
| 208 | size_t WarpPerspectiveForward::get_workspace_size_bytes( |
| 209 | const TensorShapeArray& input_shapes, |