[CPU][ARM] Correct execution of the Reorder via Transpose (#20018)
This commit is contained in:
parent
7452656e5a
commit
ae00b3e2ab
@ -37,4 +37,4 @@ public:
|
||||
};
|
||||
|
||||
} // namespace intel_cpu
|
||||
} // namespace ov
|
||||
} // namespace ov
|
||||
|
@ -119,8 +119,8 @@ void Reorder::executeDynamicImpl(dnnl::stream strm) {
|
||||
|
||||
#if defined(OV_CPU_ARM_ENABLE_FP16)
|
||||
void Reorder::prepareReorderAsTranspose(MemoryDescPtr parentDesc, MemoryDescPtr childDesc) {
|
||||
auto getOrder = [](const MemoryDesc& lhs, const MemoryDesc& rhs) -> std::pair<std::vector<size_t>, std::vector<size_t>> {
|
||||
const auto& in = lhs.getShape().getStaticDims();
|
||||
auto getOrderAndBlockedDims = [](const MemoryDesc& lhs, const MemoryDesc& rhs) -> std::pair<std::vector<size_t>, std::vector<size_t>> {
|
||||
const auto& in = lhs.as<BlockedMemoryDesc>()->getBlockDims();
|
||||
const auto rank = lhs.getShape().getRank();
|
||||
|
||||
if (lhs.hasLayoutType(LayoutType::ncsp) && rhs.hasLayoutType(LayoutType::nspc)) {
|
||||
@ -142,17 +142,17 @@ void Reorder::prepareReorderAsTranspose(MemoryDescPtr parentDesc, MemoryDescPtr
|
||||
}
|
||||
};
|
||||
|
||||
auto order = getOrder(*parentDesc, *childDesc);
|
||||
auto order = getOrderAndBlockedDims(*parentDesc, *childDesc);
|
||||
const auto& transposeOrder = order.first;
|
||||
const auto& transposedDims = order.second;
|
||||
const auto& transposedBlockDims = order.second;
|
||||
|
||||
auto transposedDesc = std::make_shared<CpuBlockedMemoryDesc>(parentDesc->getPrecision(), Shape{transposedDims});
|
||||
auto transposedDesc = std::make_shared<CpuBlockedMemoryDesc>(parentDesc->getPrecision(), Shape{transposedBlockDims});
|
||||
|
||||
TransposeParams transposeParams;
|
||||
transposeParams.permuteParams.src_block_dims = parentDesc->as<BlockedMemoryDesc>()->getBlockDims();
|
||||
transposeParams.permuteParams.src_block_order = parentDesc->as<BlockedMemoryDesc>()->getOrder();
|
||||
transposeParams.permuteParams.dst_block_dims = transposedDesc->as<BlockedMemoryDesc>()->getBlockDims();
|
||||
transposeParams.permuteParams.dst_block_order = transposedDesc->as<BlockedMemoryDesc>()->getOrder();
|
||||
transposeParams.permuteParams.dst_block_dims = transposedBlockDims;
|
||||
transposeParams.permuteParams.dst_block_order = transposeParams.permuteParams.src_block_order;
|
||||
transposeParams.permuteParams.order = transposeOrder;
|
||||
transposeParams.permuteParams.data_size = parentDesc->getPrecision().size();
|
||||
|
||||
@ -163,9 +163,9 @@ void Reorder::prepareReorderAsTranspose(MemoryDescPtr parentDesc, MemoryDescPtr
|
||||
transpose_context);
|
||||
dnnl::primitive_attr attr;
|
||||
transposeExecutor = factory->makeExecutor(transposeParams,
|
||||
{parentDesc},
|
||||
{transposedDesc},
|
||||
attr);
|
||||
{parentDesc},
|
||||
{transposedDesc},
|
||||
attr);
|
||||
getSelectedPrimitiveDescriptor()->setImplementationType(transposeExecutor->getImplType());
|
||||
return;
|
||||
}
|
||||
|
@ -176,11 +176,11 @@ void Transpose::prepareParams() {
|
||||
auto builder = [&srcDesc, &dstDesc, this](const PermuteParams& key) -> std::shared_ptr<TransposeExecutor> {
|
||||
dnnl::primitive_attr attr;
|
||||
auto selectedPD = getSelectedPrimitiveDescriptor();
|
||||
auto jitExec = selectedPD->getExecutorFactoryAs<TransposeExecutorFactory>()->makeExecutor(transposeParams,
|
||||
{srcDesc},
|
||||
{dstDesc},
|
||||
attr);
|
||||
return jitExec;
|
||||
auto executor = selectedPD->getExecutorFactoryAs<TransposeExecutorFactory>()->makeExecutor(transposeParams,
|
||||
{srcDesc},
|
||||
{dstDesc},
|
||||
attr);
|
||||
return executor;
|
||||
};
|
||||
|
||||
auto cache = context->getParamsCache();
|
||||
|
Loading…
Reference in New Issue
Block a user