| 533 | } |
| 534 | |
| 535 | void PoolingImpl::AlgoInt8Filter3MaxStride2::exec(const PoolingKernParam& param) const { |
| 536 | auto IH = param.isz[0], IW = param.isz[1]; |
| 537 | auto OH = param.osz[0], OW = param.osz[1]; |
| 538 | auto N = param.n, C = param.ic; |
| 539 | auto PH = param.padding[0]; |
| 540 | auto PW = param.padding[1]; |
| 541 | |
| 542 | auto src_ptr = param.src<dt_int8>(); |
| 543 | auto dst_ptr = param.dst<dt_int8>(); |
| 544 | |
| 545 | MIDOUT_BEGIN(megdnn_arm_common_pooling, midout_iv(7)) { |
| 546 | WorkspaceBundle wbundle = get_bundle(param); |
| 547 | auto run = [C, IH, IW, OH, OW, PH, PW, src_ptr, dst_ptr, wbundle = wbundle, |
| 548 | workspace_ptr = param.workspace<dt_byte>()]( |
| 549 | size_t index, size_t thread_id) { |
| 550 | auto ws = wbundle; |
| 551 | ws.set(workspace_ptr + thread_id * ws.total_size_in_bytes()); |
| 552 | size_t n = index / C; |
| 553 | size_t c = index % C; |
| 554 | do_max_pooling_3x3_s2x2_int8_NEON( |
| 555 | src_ptr + n * C * IH * IW + c * IH * IW, |
| 556 | dst_ptr + n * C * OH * OW + c * OH * OW, IH, IW, OH, OW, PH, PW, |
| 557 | ws); |
| 558 | }; |
| 559 | MEGDNN_DISPATCH_MULTI_THREAD_CPU_KERN( |
| 560 | static_cast<::megdnn::naive::HandleImpl*>(param.handle), N * C, run); |
| 561 | } |
| 562 | MIDOUT_END(); |
| 563 | } |
| 564 | |
| 565 | bool PoolingImpl::AlgoFilter3ModexStridexNCHW44::usable( |
| 566 | const PoolingKernSizeParam& param) const { |
nothing calls this directly
no test coverage detected