| 378 | namespace naive { |
| 379 | |
| 380 | WorkspaceBundle PoolingForwardImpl::get_workspace_bundle( |
| 381 | void* ptr, const TensorLayout& src, const TensorLayout& dst) const { |
| 382 | SmallVector<size_t> sizes; |
| 383 | TensorLayout fsrc = src; |
| 384 | TensorLayout fdst = dst; |
| 385 | auto get_workspace = [&sizes](TensorLayout& layout) { |
| 386 | if (layout.dtype.enumv() == DTypeEnum::Quantized4Asymm || |
| 387 | layout.dtype.enumv() == DTypeEnum::QuantizedS4) { |
| 388 | layout.dtype = dtype::Int8(); |
| 389 | layout.format = TensorLayout::Format(layout.dtype); |
| 390 | sizes.push_back(layout.span().dist_byte()); |
| 391 | } |
| 392 | }; |
| 393 | get_workspace(fsrc); |
| 394 | get_workspace(fdst); |
| 395 | return {ptr, std::move(sizes)}; |
| 396 | }; |
| 397 | |
| 398 | size_t PoolingForwardImpl::get_workspace_in_bytes( |
| 399 | const TensorLayout& src, const TensorLayout& dst) { |