Fix the power mode issue for the case that run from context model (#23330)

### Description
Set power config id and the default power mode from provider option (if there is) for main thread, otherwise it will mess up the power mode if user just create session without run it.

The issue fixed by this PR is:
Process 1 just creates the session without run it.
Then, start process 2 which creates the session and run it with power saver mode. The result is with burst power mode.
This commit is contained in:
Hector Li 2025-01-16 09:07:54 -08:00 committed by carzh
parent 7c8b06ed7c
commit 29c4f43ece

View file

@ -707,6 +707,12 @@ QNNExecutionProvider::GetCapability(const onnxruntime::GraphViewer& graph_viewer
return result;
}
if (IsNpuBackend(qnn_backend_manager_->GetQnnBackendType())) {
// Set the power config id and the default power mode from provider option for main thread,
// otherwise it will mess up the power mode if user just create session without run it.
GetPerThreadContext();
}
// Report error if QNN CPU backend is loaded while CPU fallback is disabled
if (disable_cpu_ep_fallback_ && qnn_backend_manager_->GetQnnBackendType() == qnn::QnnBackendType::CPU) {
LOGS(logger, ERROR) << "Qnn CPU backend is loaded while CPU fallback is disabled.";
@ -905,7 +911,6 @@ Status QNNExecutionProvider::CompileFromOrtGraph(const std::vector<FusedNodeAndG
Status QNNExecutionProvider::Compile(const std::vector<FusedNodeAndGraph>& fused_nodes_and_graphs,
std::vector<NodeComputeInfo>& node_compute_funcs) {
const auto& logger = *GetLogger();
bool is_qnn_ctx_model = qnn::IsFusedGraphHasCtxNode(fused_nodes_and_graphs);
onnxruntime::PathString context_cache_path;