| 163 | } |
| 164 | |
| 165 | static WorkspaceBundle get_bundle( |
| 166 | const fallback::ConvBiasImpl::NCBKernSizeParam& param, |
| 167 | MatrixMulImpl::AlgoBase* matmul_algo, size_t oc_tile_size, |
| 168 | size_t ohw_tile_size) { |
| 169 | UNPACK_CONV_F32_NCB_KERN_SIZES(param); |
| 170 | MEGDNN_MARK_USED_VAR(OH); |
| 171 | MEGDNN_MARK_USED_VAR(OW); |
| 172 | MEGDNN_MARK_USED_VAR(FH); |
| 173 | MEGDNN_MARK_USED_VAR(FW); |
| 174 | MEGDNN_MARK_USED_VAR(SW); |
| 175 | MEGDNN_MARK_USED_VAR(SH); |
| 176 | |
| 177 | auto IW2 = IH + 2 * PH; |
| 178 | auto IH2 = IW + 2 * PW; |
| 179 | bool no_need_pading = (PH == 0 && PW == 0); |
| 180 | size_t padding = 0, packa_size = 0, packa_group_size = 0; |
| 181 | size_t nr_threads = param.nr_threads; |
| 182 | size_t GROUP = param.filter_meta.group; |
| 183 | fallback::MatrixMulImpl::AlgoBase::MatmulDescription matmul_desc = |
| 184 | matmul_algo->matmul_description(); |
| 185 | bool default_pack = matmul_desc.packmode == Pack_Mode::DEFAULT; |
| 186 | |
| 187 | //! packmode is default should use oc |
| 188 | //! packmode is onlypackA should use oc_tile_size |
| 189 | auto im2col_kern_param = get_matmul_kern_param( |
| 190 | param, ohw_tile_size, default_pack ? OC : oc_tile_size); |
| 191 | if (is_enable_filter_preprocess(param)) { |
| 192 | packa_group_size = 0; |
| 193 | } else { |
| 194 | size_t oc_parallel_times = div_ceil<size_t>(OC, oc_tile_size); |
| 195 | packa_group_size = packA_group_size( |
| 196 | matmul_algo, im2col_kern_param, matmul_desc, oc_parallel_times); |
| 197 | } |
| 198 | |
| 199 | if (no_need_pading) { |
| 200 | padding = 0; //! not need padding |
| 201 | } else { |
| 202 | padding = (GROUP * N * IC * IH2 * IW2) * param.src_type.size(); //! for padding |
| 203 | } |
| 204 | |
| 205 | packa_size = GROUP * packa_group_size; //! for packA size = GROUP * a_size |
| 206 | |
| 207 | WorkspaceBundle ws = get_thread_bundle( |
| 208 | param, matmul_algo, im2col_kern_param, matmul_desc, oc_tile_size, |
| 209 | ohw_tile_size); |
| 210 | return {nullptr, {padding, packa_size, ws.total_size_in_bytes() * nr_threads}}; |
| 211 | } |
| 212 | |
| 213 | } // namespace |
| 214 |
no test coverage detected