| 300 | } |
| 301 | |
| 302 | void RelayoutFormat::deduce_format(TensorFormat src, TensorFormat& dst) { |
| 303 | size_t align = handle()->image2d_pitch_alignment(); |
| 304 | auto vendor_type = handle()->vendor_type(); |
| 305 | using Param = param::RelayoutFormat; |
| 306 | #define CHECK_SRC(_expect) \ |
| 307 | megdnn_assert( \ |
| 308 | src == _expect, "invalid src format: expect=%s got=%s", \ |
| 309 | _expect.to_string().c_str(), src.to_string().c_str()) |
| 310 | switch (param().mode) { |
| 311 | case Param::Mode::NHWC_NHWCD4: |
| 312 | CHECK_SRC(DefaultTensorFormat::make()); |
| 313 | dst = src; |
| 314 | break; |
| 315 | case Param::Mode::NHWCD4_NHWC: |
| 316 | CHECK_SRC(DefaultTensorFormat::make()); |
| 317 | dst = src; |
| 318 | break; |
| 319 | case Param::Mode::NHWC_NHWCD4I: |
| 320 | CHECK_SRC(DefaultTensorFormat::make()); |
| 321 | dst = Image2DPack4TensorFormat::make_raw(2, align, vendor_type); |
| 322 | break; |
| 323 | case Param::Mode::NCHW_NHWCD4: |
| 324 | CHECK_SRC(DefaultTensorFormat::make()); |
| 325 | dst = src; |
| 326 | break; |
| 327 | case Param::Mode::NCHW_NHWCD4I: |
| 328 | CHECK_SRC(DefaultTensorFormat::make()); |
| 329 | dst = Image2DPack4TensorFormat::make_raw(2, align, vendor_type); |
| 330 | break; |
| 331 | case Param::Mode::NHWCD4I_NHWC: |
| 332 | case Param::Mode::NHWCD4I_NCHW: |
| 333 | CHECK_SRC(Image2DPack4TensorFormat::make_raw(2, align, vendor_type)); |
| 334 | dst = DefaultTensorFormat::make(); |
| 335 | break; |
| 336 | case Param::Mode::NHWCD4_NCHW: |
| 337 | CHECK_SRC(DefaultTensorFormat::make()); |
| 338 | dst = src; |
| 339 | break; |
| 340 | case Param::Mode::INTER_WEIGHT_DENSE: |
| 341 | CHECK_SRC(DefaultTensorFormat::make()); |
| 342 | dst = src; |
| 343 | break; |
| 344 | case Param::Mode::INTER_WEIGHT_DENSEI: |
| 345 | case Param::Mode::INTER_WEIGHT_DENSEI_DOT: |
| 346 | CHECK_SRC(DefaultTensorFormat::make()); |
| 347 | dst = Image2DPack4TensorFormat::make_raw(3, align, vendor_type); |
| 348 | break; |
| 349 | case Param::Mode::INTER_WEIGHT_GROUP: |
| 350 | CHECK_SRC(DefaultTensorFormat::make()); |
| 351 | dst = src; |
| 352 | break; |
| 353 | case Param::Mode::INTER_WEIGHT_GROUPI: |
| 354 | case Param::Mode::INTER_WEIGHT_GROUPI_DOT: |
| 355 | CHECK_SRC(DefaultTensorFormat::make()); |
| 356 | dst = Image2DPack4TensorFormat::make_raw(4, align, vendor_type); |
| 357 | break; |
| 358 | case Param::Mode::INTER_WEIGHT_CHAN: |
| 359 | CHECK_SRC(DefaultTensorFormat::make()); |
no test coverage detected