| 36 | } |
| 37 | |
| 38 | TensorLayoutArray get_layouts(const ConvBiasImpl::NCBKernSizeParam& p) { |
| 39 | megdnn_assert(p.filter_meta.format == param::ConvBias::Format::NCHW); |
| 40 | UNPACK_CONV_NCB_KERN_SIZES(p); |
| 41 | MEGDNN_MARK_USED_VAR(SH); |
| 42 | MEGDNN_MARK_USED_VAR(SW); |
| 43 | MEGDNN_MARK_USED_VAR(PH); |
| 44 | MEGDNN_MARK_USED_VAR(PW); |
| 45 | MEGDNN_MARK_USED_VAR(OW); |
| 46 | MEGDNN_MARK_USED_VAR(OH); |
| 47 | MEGDNN_MARK_USED_VAR(N); |
| 48 | TensorLayout src_layout({1, IC, IH, IW}, p.src_type); |
| 49 | TensorLayout filter_layout({OC, IC, FH, FW}, p.filter_type); |
| 50 | TensorLayout bias_layout{{}, p.bias_type}; |
| 51 | if (p.bias_mode == BiasMode::BROADCAST_CHANNEL_BIAS) { |
| 52 | bias_layout = TensorLayout({1, OC, 1, 1}, p.bias_type); |
| 53 | } else if (p.bias_mode == BiasMode::BIAS) { |
| 54 | bias_layout = TensorLayout({1, OC, OH, OW}, p.bias_type); |
| 55 | } |
| 56 | TensorLayout dst_layout = TensorLayout({1, OC, OH, OW}, p.dst_type); |
| 57 | return {src_layout, filter_layout, bias_layout, dst_layout}; |
| 58 | } |
| 59 | |
| 60 | void kern_default(const ConvBiasImpl::NCBKernParam& p) { |
| 61 | dt_byte* workspace_ptr = static_cast<dt_byte*>(p.workspace_ptr); |
no test coverage detected