Skip to content

Commit 46df92e

Browse files
committed
Consolidate functions, address PR comments
1 parent b003381 commit 46df92e

File tree

3 files changed

+46
-47
lines changed

3 files changed

+46
-47
lines changed

onnxruntime/core/providers/qnn/builder/qnn_backend_manager.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1572,7 +1572,7 @@ Status QnnBackendManager::SetPerThreadHtpPowerConfigs(const std::thread::id& thr
15721572
htp_power_configs.rpc_control_latency,
15731573
htp_power_configs.rpc_polling_time));
15741574
}
1575-
} else if (!pre_run && htp_power_configs.post_run_perf_mode_set) {
1575+
} else if (htp_power_configs.post_run_perf_mode_set) {
15761576
ORT_RETURN_IF_ERROR(SetHtpPowerConfig(htp_power_config_id, htp_power_configs.post_run_perf_mode));
15771577
}
15781578

onnxruntime/core/providers/qnn/qnn_execution_provider.cc

Lines changed: 35 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -598,6 +598,8 @@ QNNExecutionProvider::QNNExecutionProvider(const ProviderOptions& provider_optio
598598
}
599599
}
600600

601+
managed_htp_power_config_id_ = std::make_shared<ManagedHtpPowerConfigId>(qnn_backend_manager_);
602+
601603
#if defined(_WIN32)
602604
if (onnxruntime::logging::EtwRegistrationManager::SupportsETW()) {
603605
auto& etwRegistrationManager = logging::EtwRegistrationManager::Instance();
@@ -660,12 +662,6 @@ QNNExecutionProvider::~QNNExecutionProvider() {
660662
logging::EtwRegistrationManager::Instance().UnregisterInternalCallback(callback_ETWSink_provider_);
661663
}
662664
#endif
663-
{
664-
std::lock_guard<std::mutex> lock(htp_power_config_id_mutex_);
665-
if (managed_htp_power_config_id_) {
666-
managed_htp_power_config_id_.reset();
667-
}
668-
}
669665
}
670666

671667
// Logs information about the supported/unsupported nodes.
@@ -965,7 +961,10 @@ QNNExecutionProvider::GetCapability(const onnxruntime::GraphViewer& graph_viewer
965961
if (IsNpuBackend(qnn_backend_manager_->GetQnnBackendType())) {
966962
// Set the power config id and the default power mode from provider option for main thread,
967963
// otherwise it will mess up the power mode if user just create session without run it.
968-
CreateHtpPowerConfigId();
964+
managed_htp_power_config_id_->CreateHtpPowerConfigId(device_id_,
965+
default_htp_performance_mode_,
966+
default_rpc_control_latency_,
967+
default_rpc_polling_time_);
969968
}
970969

971970
// Report error if QNN CPU backend is loaded while CPU fallback is disabled
@@ -1380,7 +1379,7 @@ qnn::PerThreadHtpPowerConfigs_t QNNExecutionProvider::GetPerThreadHtpPowerConfig
13801379
qnn::HtpPerformanceMode post_run_htp_performance_mode = qnn::HtpPerformanceMode::kHtpDefault;
13811380

13821381
qnn::PerThreadHtpPowerConfigs_t per_thread_htp_power_configs;
1383-
per_thread_htp_power_configs.power_config_id = GetHtpPowerConfigId();
1382+
per_thread_htp_power_configs.power_config_id = managed_htp_power_config_id_->GetHtpPowerConfigId();
13841383

13851384
std::string htp_perf_mode = "";
13861385
if (TryGetConfigEntry(config_options, kOrtRunOptionsConfigQnnPerfMode, htp_perf_mode)) {
@@ -1430,7 +1429,7 @@ Status QNNExecutionProvider::OnRunStart(const onnxruntime::RunOptions& run_optio
14301429

14311430
const ConfigOptions& config_options = RunOptions__GetConfigOptions(run_options);
14321431

1433-
if (IsHtpPowerConfigIdValid()) {
1432+
if (managed_htp_power_config_id_->IsValid()) {
14341433
auto thread_id = std::this_thread::get_id();
14351434
auto per_thread_htp_power_configs = GetPerThreadHtpPowerConfigs(config_options);
14361435
ORT_RETURN_IF_ERROR(qnn_backend_manager_->AddPerThreadHtpPowerConfigMapping(thread_id,
@@ -1454,7 +1453,7 @@ Status QNNExecutionProvider::OnRunEnd(bool /*sync_stream*/, const onnxruntime::R
14541453
return Status::OK();
14551454
}
14561455

1457-
if (IsHtpPowerConfigIdValid()) {
1456+
if (managed_htp_power_config_id_->IsValid()) {
14581457
auto thread_id = std::this_thread::get_id();
14591458
qnn_backend_manager_->RemovePerThreadHtpPowerConfigs(thread_id);
14601459
}
@@ -1521,8 +1520,8 @@ Status QNNExecutionProvider::SetEpDynamicOptions(gsl::span<const char* const> ke
15211520
}
15221521
qnn::HtpPerformanceMode htp_performance_mode = qnn::HtpPerformanceMode::kHtpDefault;
15231522
ParseHtpPerformanceMode(value, htp_performance_mode);
1524-
if (IsHtpPowerConfigIdValid()) {
1525-
ORT_RETURN_IF_ERROR(qnn_backend_manager_->SetHtpPowerConfig(GetHtpPowerConfigId(),
1523+
if (managed_htp_power_config_id_->IsValid()) {
1524+
ORT_RETURN_IF_ERROR(qnn_backend_manager_->SetHtpPowerConfig(managed_htp_power_config_id_->GetHtpPowerConfigId(),
15261525
htp_performance_mode));
15271526
}
15281527
} else {
@@ -1537,54 +1536,52 @@ Status QNNExecutionProvider::SetEpDynamicOptions(gsl::span<const char* const> ke
15371536
return Status::OK();
15381537
}
15391538

1540-
QNNExecutionProvider::ManagedHtpPowerConfigId::ManagedHtpPowerConfigId(uint32_t htp_power_config_id,
1541-
std::shared_ptr<qnn::QnnBackendManager> qnn_backend_manager)
1542-
: htp_power_config_id_(htp_power_config_id),
1543-
qnn_backend_manager_(qnn_backend_manager) {
1539+
QNNExecutionProvider::ManagedHtpPowerConfigId::ManagedHtpPowerConfigId(std::shared_ptr<qnn::QnnBackendManager> qnn_backend_manager)
1540+
: qnn_backend_manager_(qnn_backend_manager) {
15441541
}
15451542

15461543
QNNExecutionProvider::ManagedHtpPowerConfigId::~ManagedHtpPowerConfigId() {
15471544
ORT_IGNORE_RETURN_VALUE(qnn_backend_manager_->DestroyHTPPowerConfigID(htp_power_config_id_));
15481545
}
15491546

1550-
uint32_t QNNExecutionProvider::ManagedHtpPowerConfigId::GetHtpPowerConfigId() {
1551-
return htp_power_config_id_;
1552-
}
1553-
1554-
void QNNExecutionProvider::CreateHtpPowerConfigId() const {
1555-
std::lock_guard<std::mutex> lock(htp_power_config_id_mutex_);
1556-
if (managed_htp_power_config_id_) {
1547+
void QNNExecutionProvider::ManagedHtpPowerConfigId::CreateHtpPowerConfigId(uint32_t device_id,
1548+
qnn::HtpPerformanceMode default_htp_performance_mode,
1549+
uint32_t default_rpc_control_latency,
1550+
uint32_t default_rpc_polling_time) {
1551+
std::lock_guard<std::mutex> lock(config_id_mutex_);
1552+
if (is_valid_) {
15571553
return;
15581554
}
15591555

15601556
constexpr uint32_t core_id = 0;
15611557
uint32_t htp_power_config_id;
15621558

1563-
Status rt = qnn_backend_manager_->CreateHtpPowerCfgId(device_id_, core_id, htp_power_config_id);
1559+
Status rt = qnn_backend_manager_->CreateHtpPowerCfgId(device_id, core_id, htp_power_config_id);
15641560

15651561
if (rt == Status::OK()) {
1566-
managed_htp_power_config_id_ = std::make_shared<ManagedHtpPowerConfigId>(htp_power_config_id, qnn_backend_manager_);
1562+
htp_power_config_id_ = htp_power_config_id;
15671563

1568-
if (qnn::HtpPerformanceMode::kHtpDefault != default_htp_performance_mode_) {
1569-
ORT_IGNORE_RETURN_VALUE(qnn_backend_manager_->SetHtpPowerConfig(htp_power_config_id,
1570-
default_htp_performance_mode_));
1564+
if (qnn::HtpPerformanceMode::kHtpDefault != default_htp_performance_mode) {
1565+
ORT_IGNORE_RETURN_VALUE(qnn_backend_manager_->SetHtpPowerConfig(htp_power_config_id_,
1566+
default_htp_performance_mode));
15711567
}
1572-
if (default_rpc_control_latency_ > 0 || default_rpc_polling_time_ > 0) {
1573-
ORT_IGNORE_RETURN_VALUE(qnn_backend_manager_->SetRpcPowerConfigs(htp_power_config_id,
1574-
default_rpc_control_latency_,
1575-
default_rpc_polling_time_));
1568+
if (default_rpc_control_latency > 0 || default_rpc_polling_time > 0) {
1569+
ORT_IGNORE_RETURN_VALUE(qnn_backend_manager_->SetRpcPowerConfigs(htp_power_config_id_,
1570+
default_rpc_control_latency,
1571+
default_rpc_polling_time));
15761572
}
1573+
1574+
is_valid_ = true;
15771575
}
15781576
}
15791577

1580-
bool QNNExecutionProvider::IsHtpPowerConfigIdValid() {
1581-
std::lock_guard<std::mutex> lock(htp_power_config_id_mutex_);
1582-
return managed_htp_power_config_id_ != nullptr;
1578+
bool QNNExecutionProvider::ManagedHtpPowerConfigId::IsValid() {
1579+
std::lock_guard<std::mutex> lock(config_id_mutex_);
1580+
return is_valid_;
15831581
}
15841582

1585-
uint32_t QNNExecutionProvider::GetHtpPowerConfigId() {
1586-
std::lock_guard<std::mutex> lock(htp_power_config_id_mutex_);
1587-
return managed_htp_power_config_id_->GetHtpPowerConfigId();
1583+
uint32_t QNNExecutionProvider::ManagedHtpPowerConfigId::GetHtpPowerConfigId() {
1584+
return htp_power_config_id_;
15881585
}
15891586

15901587
} // namespace onnxruntime

onnxruntime/core/providers/qnn/qnn_execution_provider.h

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,27 +85,29 @@ class QNNExecutionProvider : public IExecutionProvider {
8585
private:
8686
class ManagedHtpPowerConfigId {
8787
public:
88-
ManagedHtpPowerConfigId(uint32_t htp_power_config_id, std::shared_ptr<qnn::QnnBackendManager> qnn_backend_manager);
88+
ManagedHtpPowerConfigId(std::shared_ptr<qnn::QnnBackendManager> qnn_backend_manager);
8989

9090
~ManagedHtpPowerConfigId();
9191

92+
void CreateHtpPowerConfigId(uint32_t device_id,
93+
qnn::HtpPerformanceMode default_htp_performance_mode,
94+
uint32_t default_rpc_control_latency,
95+
uint32_t default_rpc_polling_time);
96+
97+
bool IsValid();
9298
uint32_t GetHtpPowerConfigId();
9399

94100
private:
101+
bool is_valid_ = false;
102+
std::mutex config_id_mutex_;
103+
95104
uint32_t htp_power_config_id_;
96105
std::shared_ptr<qnn::QnnBackendManager> qnn_backend_manager_;
97106
};
98107

99-
void CreateHtpPowerConfigId() const;
100-
101-
bool IsHtpPowerConfigIdValid();
102-
103-
uint32_t GetHtpPowerConfigId();
104-
105108
qnn::PerThreadHtpPowerConfigs_t GetPerThreadHtpPowerConfigs(const ConfigOptions& config_options);
106109

107110
mutable std::shared_ptr<ManagedHtpPowerConfigId> managed_htp_power_config_id_ = nullptr;
108-
mutable std::mutex htp_power_config_id_mutex_;
109111

110112
qnn::HtpGraphFinalizationOptimizationMode htp_graph_finalization_opt_mode_ = qnn::HtpGraphFinalizationOptimizationMode::kDefault;
111113
// Note: Using shared_ptr<QnnBackendManager> so that we can refer to it with a weak_ptr from a

0 commit comments

Comments
 (0)