[CPU] Fixed Eltwise node endless loop in case nthreads = 1 (#3008)
This commit is contained in:
parent
eeafc8e7dc
commit
ae1f2be763
@ -1213,13 +1213,17 @@ void MKLDNNEltwiseNode::createPrimitive() {
|
|||||||
fullWorkAmount *= dims_out[i];
|
fullWorkAmount *= dims_out[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isDynBatchEnabled = config.dynBatchSupport;
|
||||||
|
|
||||||
size_t minimalConcurrency = parallel_get_max_threads();
|
size_t minimalConcurrency = parallel_get_max_threads();
|
||||||
size_t minimalJitWorkAmount = 256;
|
size_t minimalJitWorkAmount = 256;
|
||||||
size_t currentJitWorkAmount = dims_out[dims_out.size() - 1];
|
size_t currentJitWorkAmount = dims_out[dims_out.size() - 1];
|
||||||
int collapsedDims = 0;
|
int collapsedDims = 0;
|
||||||
if (canUseOptimizedImpl) {
|
if (canUseOptimizedImpl) {
|
||||||
bool hasDifferentDims = false;
|
bool hasDifferentDims = false;
|
||||||
while (currentJitWorkAmount < minimalJitWorkAmount) {
|
while (currentJitWorkAmount < minimalJitWorkAmount && currentJitWorkAmount < fullWorkAmount &&
|
||||||
|
// we shouldn't collapse batch dimension in case dynamic batch is enabled
|
||||||
|
(!isDynBatchEnabled || (config.outConfs[0].desc.getBlockingDesc().getBlockDims().size() - collapsedDims > 2))) {
|
||||||
if (dims_out.size() - collapsedDims - 2 < 0)
|
if (dims_out.size() - collapsedDims - 2 < 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1271,7 +1275,6 @@ void MKLDNNEltwiseNode::createPrimitive() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
isDynBatchEnabled = config.dynBatchSupport;
|
|
||||||
batchDimIdx = tensorRank - config.outConfs[0].desc.getBlockingDesc().getBlockDims().size() + collapsedDims;
|
batchDimIdx = tensorRank - config.outConfs[0].desc.getBlockingDesc().getBlockDims().size() + collapsedDims;
|
||||||
schedulerWorkAmount = fullWorkAmount / dims_out[dims_out.size() - 1];
|
schedulerWorkAmount = fullWorkAmount / dims_out[dims_out.size() - 1];
|
||||||
|
|
||||||
|
@ -64,4 +64,36 @@ const auto multiply_params = ::testing::Combine(
|
|||||||
::testing::Values(additional_config));
|
::testing::Values(additional_config));
|
||||||
|
|
||||||
INSTANTIATE_TEST_CASE_P(smoke_CompareWithRefs, EltwiseLayerTest, multiply_params, EltwiseLayerTest::getTestCaseName);
|
INSTANTIATE_TEST_CASE_P(smoke_CompareWithRefs, EltwiseLayerTest, multiply_params, EltwiseLayerTest::getTestCaseName);
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<std::vector<std::vector<size_t>>> inShapesSingleThread = {
|
||||||
|
{{1, 2, 3, 4}},
|
||||||
|
{{2, 2, 2, 2}},
|
||||||
|
{{2, 1, 2, 1, 2, 2}}
|
||||||
|
};
|
||||||
|
|
||||||
|
std::vector<ngraph::helpers::EltwiseTypes> eltwiseOpTypesSingleThread = {
|
||||||
|
ngraph::helpers::EltwiseTypes::ADD,
|
||||||
|
ngraph::helpers::EltwiseTypes::POWER,
|
||||||
|
};
|
||||||
|
|
||||||
|
std::map<std::string, std::string> additional_config_single_thread = {
|
||||||
|
{"CPU_THREADS_NUM", "1"}
|
||||||
|
};
|
||||||
|
|
||||||
|
const auto single_thread_params = ::testing::Combine(
|
||||||
|
::testing::ValuesIn(inShapesSingleThread),
|
||||||
|
::testing::ValuesIn(eltwiseOpTypesSingleThread),
|
||||||
|
::testing::ValuesIn(secondaryInputTypes),
|
||||||
|
::testing::ValuesIn(opTypes),
|
||||||
|
::testing::ValuesIn(netPrecisions),
|
||||||
|
::testing::Values(InferenceEngine::Precision::UNSPECIFIED),
|
||||||
|
::testing::Values(InferenceEngine::Precision::UNSPECIFIED),
|
||||||
|
::testing::Values(InferenceEngine::Layout::ANY),
|
||||||
|
::testing::Values(CommonTestUtils::DEVICE_CPU),
|
||||||
|
::testing::Values(additional_config_single_thread));
|
||||||
|
|
||||||
|
INSTANTIATE_TEST_CASE_P(smoke_SingleThread, EltwiseLayerTest, single_thread_params, EltwiseLayerTest::getTestCaseName);
|
||||||
|
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
Loading…
Reference in New Issue
Block a user