| 205 | |
| 206 | template<typename T> |
| 207 | void BoxingKernel<T>::ForwardDataContent(KernelContext* ctx) const { |
| 208 | const BoxingOpConf& boxing_conf = op_conf().boxing_conf(); |
| 209 | ep::Stream* stream = ctx->stream(); |
| 210 | const auto BnInOp2Blob = [ctx](const std::string& bn) { return ctx->BnInOp2Blob(bn); }; |
| 211 | if (boxing_conf.in_box_case() == BoxingOpConf::kConcatBox) { |
| 212 | if (boxing_conf.out_box_case() == BoxingOpConf::kSplitBox) { |
| 213 | ConcatSplitDataContent(stream, BnInOp2Blob, op_attribute().input_bns(), |
| 214 | boxing_conf.concat_box().axis(), op_attribute().output_bns(), |
| 215 | boxing_conf.split_box().axis()); |
| 216 | } else if (boxing_conf.out_box_case() == BoxingOpConf::kCloneBox) { |
| 217 | ConcatSplitDataContent(stream, BnInOp2Blob, op_attribute().input_bns(), |
| 218 | boxing_conf.concat_box().axis(), obn_0_, 0); |
| 219 | CopyFromFirstToOtherBlobs(ctx, BnInOp2Blob, op_attribute().output_bns()); |
| 220 | } else { |
| 221 | UNIMPLEMENTED(); |
| 222 | } |
| 223 | } else if (boxing_conf.in_box_case() == BoxingOpConf::kAddBox) { |
| 224 | if (boxing_conf.out_box_case() == BoxingOpConf::kSplitBox) { |
| 225 | CalcSumOfBlobs<T>(ctx, BnInOp2Blob, op_attribute().input_bns(), "middle"); |
| 226 | ConcatSplitDataContent(stream, BnInOp2Blob, ConstructPbRpf("middle"), 0, |
| 227 | op_attribute().output_bns(), boxing_conf.split_box().axis()); |
| 228 | } else if (boxing_conf.out_box_case() == BoxingOpConf::kCloneBox) { |
| 229 | CalcSumOfBlobs<T>(ctx, BnInOp2Blob, op_attribute().input_bns(), obn_0_.Get(0)); |
| 230 | CopyFromFirstToOtherBlobs(ctx, BnInOp2Blob, op_attribute().output_bns()); |
| 231 | } else { |
| 232 | UNIMPLEMENTED(); |
| 233 | } |
| 234 | } else { |
| 235 | UNIMPLEMENTED(); |
| 236 | } |
| 237 | } |
| 238 | |
| 239 | ADD_CPU_DEFAULT_KERNEL_CREATOR(OperatorConf::kBoxingConf, BoxingKernel, |
| 240 | ARITHMETIC_DATA_TYPE_SEQ FLOAT16_DATA_TYPE_SEQ); |
nothing calls this directly
no test coverage detected