[CPU] Add cache support to transpose node (#9513)
* Add cache support to transpose * Re-enable test case * comments apply
This commit is contained in:
1 parent
a2cf98bebb
commit
822cb48a1e
4 files changed
+367
-324
No files matched your search
@@ -12,6 +12,7 @@
|
||||
#include "utils/bfloat16.hpp"
|
||||
|
||||
#include "cpu/x64/jit_generator.hpp"
|
||||
#include <common/primitive_hashing_utils.hpp>
|
||||
|
||||
using namespace InferenceEngine;
|
||||
using namespace MKLDNNPlugin;
|
||||
@@ -387,3 +388,25 @@ void PermuteKernel::referenceExecute(const uint8_t* src_data, uint8_t* dst_data,
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
size_t PermuteParams::hash() const {
|
||||
using namespace dnnl::impl;
|
||||
using namespace dnnl::impl::primitive_hashing;
|
||||
|
||||
size_t seed = 0;
|
||||
seed = get_vector_hash(seed, src_block_dims);
|
||||
seed = get_vector_hash(seed, dst_block_dims);
|
||||
seed = get_vector_hash(seed, src_block_order);
|
||||
seed = get_vector_hash(seed, dst_block_order);
|
||||
seed = get_vector_hash(seed, order);
|
||||
seed = hash_combine(seed, data_size);
|
||||
return seed;
|
||||
}
|
||||
|
||||
bool PermuteParams::operator==(const PermuteParams& rhs) const {
|
||||
return (src_block_dims == rhs.src_block_dims) &&
|
||||
(dst_block_dims == rhs.dst_block_dims) &&
|
||||
(src_block_order == rhs.src_block_order) &&
|
||||
(dst_block_order == rhs.dst_block_order) && (order == rhs.order) &&
|
||||
(data_size == rhs.data_size);
|
||||
}
|
||||
@@ -17,6 +17,9 @@ struct PermuteParams {
|
||||
InferenceEngine::SizeVector dst_block_order;
|
||||
InferenceEngine::SizeVector order;
|
||||
size_t data_size;
|
||||
|
||||
size_t hash() const;
|
||||
bool operator==(const PermuteParams& rhs) const;
|
||||
};
|
||||
|
||||
struct jit_permute_config_params {
|
||||
|
||||
@@ -7,12 +7,13 @@
|
||||
|
||||
#include <algorithm>
|
||||
#include <string>
|
||||
#include "mkldnn_extension_utils.h"
|
||||
#include <common/primitive_hashing_utils.hpp>
|
||||
|
||||
using namespace mkldnn;
|
||||
using namespace MKLDNNPlugin;
|
||||
using namespace InferenceEngine;
|
||||
|
||||
|
||||
bool MKLDNNTransposeNode::isSupportedOperation(const std::shared_ptr<const ov::Node>& op, std::string& errorMessage) noexcept {
|
||||
try {
|
||||
if (!one_of(op->get_type_info(),
|
||||
@@ -127,7 +128,19 @@ void MKLDNNTransposeNode::prepareParams() {
|
||||
params.order.assign(orderPtr, orderPtr + orderLen);
|
||||
}
|
||||
|
||||
execPtr = std::make_shared<TransposeJitExecutor>(params);
|
||||
auto engine = getEngine();
|
||||
auto builder = [&engine](const PermuteParams& key) -> std::shared_ptr<TransposeJitExecutor> {
|
||||
return std::make_shared<TransposeJitExecutor>(key);
|
||||
};
|
||||
|
||||
auto cache = getRuntimeCache();
|
||||
auto result = cache->getOrCreate(params, builder);
|
||||
|
||||
if (!result.first) {
|
||||
IE_THROW() << "Primitive descriptor was not found for node " << getName() << ".";
|
||||
}
|
||||
|
||||
execPtr = result.first;
|
||||
}
|
||||
|
||||
void MKLDNNTransposeNode::createPrimitive() {
|
||||
|
||||
Reference in new issue
Block a user