[CPU] Fixed Eltwise node endless loop in case nthreads = 1 (#3008)

This commit is contained in:
Gorokhov Dmitriy 2020-11-10 10:56:22 +03:00 committed by GitHub
parent eeafc8e7dc
commit ae1f2be763
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 2 deletions

View File

@ -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];

View File

@ -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