Merge pull request #27802 from opencv-pushbot:gitee/alalek/issue_27724

core: restore parallel name on failure attempt
This commit is contained in:
Alexander Smorkalov 2025-09-22 08:29:44 +03:00 committed by GitHub
commit 64bb4ad035
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -71,7 +71,7 @@ std::shared_ptr<ParallelForAPI> createParallelForAPI()
std::shared_ptr<ParallelForAPI> backend = info.backendFactory->create(); std::shared_ptr<ParallelForAPI> backend = info.backendFactory->create();
if (!backend) if (!backend)
{ {
CV_LOG_VERBOSE(NULL, 0, "core(parallel): not available: " << info.name); CV_LOG_DEBUG(NULL, "core(parallel): not available: " << info.name);
continue; continue;
} }
CV_LOG_INFO(NULL, "core(parallel): using backend: " << info.name << " (priority=" << info.priority << ")"); CV_LOG_INFO(NULL, "core(parallel): using backend: " << info.name << " (priority=" << info.priority << ")");
@ -95,9 +95,16 @@ std::shared_ptr<ParallelForAPI> createParallelForAPI()
else else
{ {
if (!isKnown) if (!isKnown)
CV_LOG_INFO(NULL, "core(parallel): unknown backend: " << name); {
CV_LOG_INFO(NULL, "core(parallel): unknown backend: " << name << ", fallback on builtin code");
}
else
{
CV_LOG_INFO(NULL, "core(parallel): backend=" << name << " is not available, fallback on builtin code");
}
} }
g_initializedParallelForAPI = true; g_initializedParallelForAPI = true;
getParallelBackendName() = std::string();
return std::shared_ptr<ParallelForAPI>(); return std::shared_ptr<ParallelForAPI>();
} }
@ -127,6 +134,10 @@ bool setParallelForBackend(const std::string& backendName, bool propagateNumThre
{ {
CV_TRACE_FUNCTION(); CV_TRACE_FUNCTION();
bool saved_initialized = g_initializedParallelForAPI;
std::string saved_backendName = getParallelBackendName();
std::shared_ptr<ParallelForAPI> saved_backend; // don't call getCurrentParallelForAPI() if g_initializedParallelForAPI = false to avoid unnecessary "default" initialization
std::string backendName_u = toUpperCase(backendName); std::string backendName_u = toUpperCase(backendName);
if (g_initializedParallelForAPI) if (g_initializedParallelForAPI)
{ {
@ -138,8 +149,9 @@ bool setParallelForBackend(const std::string& backendName, bool propagateNumThre
} }
else else
{ {
saved_backend = getCurrentParallelForAPI();
// ... re-create new // ... re-create new
CV_LOG_DEBUG(NULL, "core(parallel): replacing parallel backend..."); CV_LOG_DEBUG(NULL, "core(parallel): replacing parallel backend (old=" << saved_backendName << " new=" << backendName << ")...");
getParallelBackendName() = backendName_u; getParallelBackendName() = backendName_u;
getCurrentParallelForAPI() = createParallelForAPI(); getCurrentParallelForAPI() = createParallelForAPI();
} }
@ -154,7 +166,19 @@ bool setParallelForBackend(const std::string& backendName, bool propagateNumThre
{ {
if (!backendName.empty()) if (!backendName.empty())
{ {
CV_LOG_WARNING(NULL, "core(parallel): backend is not available: " << backendName << " (using builtin legacy code)"); // restore previous backend or build default
getParallelBackendName() = saved_backendName;
if (saved_initialized)
{
CV_LOG_WARNING(NULL, "core(parallel): backend is not available: " << backendName << " (keep previous)");
getCurrentParallelForAPI() = saved_backend;
}
else
{
CV_LOG_WARNING(NULL, "core(parallel): backend is not available: " << backendName << " (use default)");
g_initializedParallelForAPI = false;
getCurrentParallelForAPI() = createDefaultParallelForAPI();
}
return false; return false;
} }
else else