| 120 | namespace rocm { |
| 121 | |
| 122 | void ReduceForwardImpl::exec( |
| 123 | _megdnn_tensor_in src, _megdnn_tensor_out dst, _megdnn_workspace workspace) { |
| 124 | using namespace device_reduce; |
| 125 | check_exec(src.layout, dst.layout, workspace.size); |
| 126 | size_t A, B, C; |
| 127 | reduce::get_ABC(src.layout, A, B, C, param().axis); |
| 128 | auto stream = hip_stream(this->handle()); |
| 129 | #define CASE(_mode, _op) \ |
| 130 | case _mode: \ |
| 131 | return dispatch_dtype<_op>( \ |
| 132 | stream, src, dst, workspace, A, B, C, param().data_type); |
| 133 | switch (param().mode) { |
| 134 | CASE(Mode::SUM, SumOp) |
| 135 | CASE(Mode::SUM_SQR, SumSqrOp) |
| 136 | CASE(Mode::PRODUCT, ProdOp) |
| 137 | CASE(Mode::MIN, MinOp) |
| 138 | CASE(Mode::MAX, MaxOp) |
| 139 | CASE(Mode::MEAN, MeanOp) |
| 140 | default: |
| 141 | megdnn_assert_internal(false); |
| 142 | #undef CASE |
| 143 | } |
| 144 | } |
| 145 | |
| 146 | size_t ReduceForwardImpl::get_workspace_in_bytes( |
| 147 | const TensorLayout& src, const TensorLayout& dst) { |
nothing calls this directly
no test coverage detected