MCPcopy Create free account
hub / github.com/MegEngine/MegEngine / get_bundle

Function get_bundle

dnn/src/fallback/conv_bias/im2col/algos.cpp:165–211  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

163}
164
165static 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

Callers 3

get_workspaceMethod · 0.70
dispatch_kernsMethod · 0.70

Calls 6

packA_group_sizeFunction · 0.85
total_size_in_bytesMethod · 0.80
get_matmul_kern_paramFunction · 0.70
get_thread_bundleFunction · 0.70
sizeMethod · 0.45

Tested by

no test coverage detected