| 122 | } |
| 123 | |
| 124 | void ConvBiasForwardImpl::AlgoBatchedMatmul::exec(const ExecArgs& args) const { |
| 125 | auto bundle = get_workspace_bundle(args.workspace.raw_ptr, args); |
| 126 | TensorND conv_dst_tensor = *args.dst_tensor; |
| 127 | if (args.dst_layout->dtype.enumv() != args.bias_layout->dtype.enumv()) { |
| 128 | conv_dst_tensor = TensorND{bundle.get(1), args.dst_tensor->layout}; |
| 129 | conv_dst_tensor.layout.dtype = DType(); |
| 130 | args.opr->check_or_deduce_dtype_fwd( |
| 131 | args.src_layout->dtype, args.filter_layout->dtype, |
| 132 | conv_dst_tensor.layout.dtype); |
| 133 | } |
| 134 | |
| 135 | ExecArgs conv_args = args; |
| 136 | conv_args.dst_tensor = &conv_dst_tensor; |
| 137 | conv_args.dst_layout = &conv_dst_tensor.layout; |
| 138 | { |
| 139 | auto config = prepare_sub_opr(args); |
| 140 | |
| 141 | TensorND A{args.filter_tensor->raw_ptr(), config.first[0]}, |
| 142 | B{args.src_tensor->raw_ptr(), config.first[1]}, |
| 143 | C{args.dst_tensor->raw_ptr(), config.first[2]}; |
| 144 | config.second->exec(A, B, C, bundle.get_workspace(0)); |
| 145 | } |
| 146 | handle_bias_and_nonlinear( |
| 147 | args.handle, args.nonlinear_mode, &conv_dst_tensor, args.dst_tensor, |
| 148 | args.bias_tensor); |
| 149 | } |
| 150 | |
| 151 | // vim: syntax=cpp.doxygen |
nothing calls this directly
no test coverage detected