| 33 | |
| 34 | template <typename T> |
| 35 | void PowCImpl::do_exec_ct( |
| 36 | _megdnn_tensor_in src, _megdnn_tensor_out dst, _megdnn_workspace workspace) { |
| 37 | auto handle = concrete_handle(this->handle()); |
| 38 | auto ws_bundle = make_bundle(src.layout, dst.layout); |
| 39 | ws_bundle.set(workspace.raw_ptr); |
| 40 | |
| 41 | CnnlTensorDescriptor desc_inp, desc_exp, desc_out; |
| 42 | auto cnnl_layout = CNNL_LAYOUT_ARRAY; |
| 43 | desc_inp.set(src.layout, cnnl_layout); |
| 44 | desc_out.set(dst.layout, cnnl_layout); |
| 45 | std::vector<size_t> dims = {1}; |
| 46 | desc_exp.set(1, dims, convert_to_cnnl_datatype(DTypeTrait<T>::enumv), cnnl_layout); |
| 47 | T v_exp = static_cast<T>(param().exp); |
| 48 | T* dev_exp = static_cast<T*>(ws_bundle.get(0)); |
| 49 | cnnl_check(cnnlFill_v3( |
| 50 | handle->cnnl_handle(), CNNL_POINTER_MODE_HOST, (void*)&v_exp, |
| 51 | desc_exp.desc(), dev_exp)); |
| 52 | cnnl_check(cnnlPow( |
| 53 | handle->cnnl_handle(), CNNL_COMPUTATION_HIGH_PRECISION, desc_inp.desc(), |
| 54 | src.raw_ptr(), desc_exp.desc(), dev_exp, ws_bundle.get(1), |
| 55 | ws_bundle.get_size(1), desc_out.desc(), dst.raw_ptr())); |
| 56 | } |
| 57 | |
| 58 | void PowCImpl::exec( |
| 59 | _megdnn_tensor_in src, _megdnn_tensor_out dst, _megdnn_workspace workspace) { |
nothing calls this directly
no test coverage detected