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

Method dispatch_preprocess_kerns

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

Source from the content-addressed store, hash-verified

465}
466
467SmallVector<ConvBiasImpl::NCBKern> ConvBiasImpl::AlgoIm2col::dispatch_preprocess_kerns(
468 const NCBKernSizeParam& param) const {
469 MIDOUT_BEGIN(megdnn_fallback_im2col, 0, 3) {
470 size_t OC = param.filter_meta.ocpg;
471 size_t oc_tile_size = 0, ohw_tile_size = 0;
472 size_t GROUP = param.filter_meta.group;
473 fallback::MatrixMulImpl::AlgoBase::MatmulDescription matmul_desc =
474 m_matmul_algo->matmul_description();
475 choice_ohw_oc_block(
476 param, oc_tile_size, ohw_tile_size, matmul_desc.innerblocksize.m,
477 matmul_desc.innerblocksize.n, m_ohw_tile_size, matmul_desc.packmode);
478 WorkspaceBundle bundle =
479 get_bundle(param, m_matmul_algo, oc_tile_size, ohw_tile_size);
480
481 Pack_Mode packmode = matmul_desc.packmode;
482 bool default_pack = packmode == Pack_Mode::DEFAULT;
483 bool only_packA = packmode == Pack_Mode::ONLY_PACKA;
484 size_t packa_parallel_times = 0;
485
486 if (only_packA) {
487 packa_parallel_times = div_ceil<size_t>(OC, oc_tile_size);
488 } else if (default_pack) {
489 packa_parallel_times = div_ceil<size_t>(OC, matmul_desc.innerblocksize.m);
490 } else {
491 return {};
492 }
493 auto matmul_param = get_matmul_kern_param(
494 param, ohw_tile_size, default_pack ? OC : oc_tile_size);
495
496 StrategyParam strategyparam;
497 strategyparam.enable_filter_preprocess = is_enable_filter_preprocess(param);
498 strategyparam.packA_group_size = packA_group_size(
499 m_matmul_algo, matmul_param, matmul_desc, packa_parallel_times);
500 SmallVector<ConvBiasImpl::NCBKern> ret_kern;
501 StrategyBase* im2colstrategy =
502 Factory::get_im2col_strategy(param, m_matmul_algo);
503
504 auto kern_packA = [bundle, matmul_algo = m_matmul_algo, matmul_param,
505 im2colstrategy, strategyparam = strategyparam,
506 matmul_desc = matmul_desc](
507 const NCBKernParam& param,
508 const NCBKernIndex& ncb_index) mutable {
509 bundle.set(param.workspace_ptr);
510 im2colstrategy->packA_kern(
511 bundle, param, matmul_param, matmul_algo, ncb_index, matmul_desc,
512 strategyparam);
513 };
514 ret_kern.push_back({kern_packA, {GROUP, packa_parallel_times}});
515 return ret_kern;
516 }
517 MIDOUT_END();
518 return {};
519}
520
521// vim: syntax=cpp.doxygen

Callers 1

get_preprocess_kimplMethod · 0.45

Calls 8

choice_ohw_oc_blockFunction · 0.85
packA_group_sizeFunction · 0.85
get_bundleFunction · 0.70
get_matmul_kern_paramFunction · 0.70
MIDOUT_BEGINFunction · 0.50
setMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected