@@ -1286,8 +1286,8 @@ static Qnn_Tensor_t * ggml_qnn_create_compute_tensor(const ggml_tensor * tensor)
1286
1286
qnn_data_type = qnn_datatype_from_ggml_datatype (tensor->type );
1287
1287
Qnn_Tensor_t * p_qnn_tensor = ggml_qnn_create_general_tensor (tensor, nullptr ,
1288
1288
qnn_tensor_type, qnn_data_type,
1289
- ggml_n_dims (tensor), dimensions,
1290
- nullptr , 0 );
1289
+ ggml_n_dims (tensor), dimensions,
1290
+ nullptr , 0 );
1291
1291
1292
1292
return p_qnn_tensor;
1293
1293
}
@@ -1526,7 +1526,7 @@ class qnn_instance {
1526
1526
using BackendIdType = decltype (QnnInterface_t{}.backendId);
1527
1527
1528
1528
explicit qnn_instance (const std::string & lib_path, const std::string & backend_name,
1529
- const std::string & model_name) :
1529
+ const std::string & model_name) :
1530
1530
_lib_path(std::move(lib_path)),
1531
1531
_backend_name(std::move(backend_name)),
1532
1532
_model_name(std::move(model_name)) {};
@@ -1608,8 +1608,7 @@ class qnn_instance {
1608
1608
if (_qnn_rpc_pollingtime > 0 ) {
1609
1609
QnnHtpPerfInfrastructure_PowerConfig_t rpc_pollingtime;
1610
1610
memset (&rpc_pollingtime, 0 , sizeof (rpc_pollingtime));
1611
- rpc_pollingtime.option =
1612
- QNN_HTP_PERF_INFRASTRUCTURE_POWER_CONFIGOPTION_RPC_POLLING_TIME;
1611
+ rpc_pollingtime.option = QNN_HTP_PERF_INFRASTRUCTURE_POWER_CONFIGOPTION_RPC_POLLING_TIME;
1613
1612
rpc_pollingtime.rpcPollingTimeConfig = _qnn_rpc_pollingtime;
1614
1613
const QnnHtpPerfInfrastructure_PowerConfig_t * power_configs[] = {&rpc_pollingtime, nullptr };
1615
1614
if (_qnn_htp_perfinfra) {
@@ -1694,16 +1693,15 @@ class qnn_instance {
1694
1693
}
1695
1694
1696
1695
void probe_device_meminfo () {
1697
- size_t candidate_size = 0 ;
1698
- uint8_t *rpc_buffer = nullptr ;
1699
- const int SIZE_IN_MB = (1 << 20 );
1700
- size_t probe_slots[] = {1024 , 1536 , 2048 - 48 , 2048 };
1701
- size_t probe_counts = sizeof (probe_slots) / sizeof (size_t );
1696
+ size_t candidate_size = 0 ;
1697
+ uint8_t * rpc_buffer = nullptr ;
1698
+ const int SIZE_IN_MB = (1 << 20 );
1699
+ size_t probe_slots[] = {1024 , 1536 , 2048 - 48 , 2048 };
1700
+ size_t probe_counts = sizeof (probe_slots) / sizeof (size_t );
1702
1701
for (size_t idx = 0 ; idx < probe_counts; idx++) {
1703
1702
rpc_buffer = static_cast <uint8_t *>(alloc_rpcmem_internal (probe_slots[idx] * SIZE_IN_MB, 4 ));
1704
1703
if (nullptr == rpc_buffer) {
1705
- GGMLQNN_LOG_DEBUG (" alloc rpcmem %d (MB) failure, %s\n " , probe_slots[idx],
1706
- strerror (errno));
1704
+ GGMLQNN_LOG_DEBUG (" alloc rpcmem %d (MB) failure, %s\n " , probe_slots[idx], strerror (errno));
1707
1705
break ;
1708
1706
} else {
1709
1707
candidate_size = probe_slots[idx];
@@ -1822,13 +1820,13 @@ void * qnn_instance::alloc_rpcmem_internal(size_t bytes, size_t alignment) {
1822
1820
1823
1821
auto allocate_bytes = static_cast <int32_t >(bytes + alignment);
1824
1822
void * buf = _pfn_rpc_mem_alloc (RPCMEM_HEAP_ID_SYSTEM, RPCMEM_DEFAULT_FLAGS, allocate_bytes);
1825
- if (buf == nullptr ) {
1823
+ if (nullptr == buf ) {
1826
1824
GGMLQNN_LOG_WARN (" failed to allocate rpc memory\n " );
1827
1825
return nullptr ;
1828
1826
}
1829
1827
1830
1828
auto aligned_buf = reinterpret_cast <void *>(ggmlqnn_align_to (alignment,
1831
- reinterpret_cast <intptr_t >(buf)));
1829
+ reinterpret_cast <intptr_t >(buf)));
1832
1830
bool status = _rpcmem_store_map.insert (std::pair<void *, void *>(aligned_buf, buf)).second ;
1833
1831
if (!status) {
1834
1832
GGMLQNN_LOG_WARN (" failed to allocate rpc memory\n " );
@@ -2028,8 +2026,7 @@ void qnn_instance::unregister_rpcmem() {
2028
2026
Qnn_MemHandle_t mem_handle = it->second ;
2029
2027
error = _qnn_interface.qnn_mem_de_register (&mem_handle, 1 );
2030
2028
if (error != QNN_SUCCESS) {
2031
- GGMLQNN_LOG_WARN (" failed to unregister shared memory, error %d\n " ,
2032
- QNN_GET_ERROR_CODE (error));
2029
+ GGMLQNN_LOG_WARN (" failed to unregister shared memory, error %d\n " , QNN_GET_ERROR_CODE (error));
2033
2030
} else {
2034
2031
GGMLQNN_LOG_DEBUG (" unregister shared memory ok" );
2035
2032
}
@@ -2074,9 +2071,9 @@ int qnn_instance::load_backend(std::string & lib_path, const QnnSaver_Config_t *
2074
2071
return 1 ;
2075
2072
}
2076
2073
2077
- auto get_providers =
2078
- load_qnn_functionpointers<_pfn_QnnInterface_getProviders *>( lib_handle,
2079
- " QnnInterface_getProviders" );
2074
+ auto get_providers = load_qnn_functionpointers<_pfn_QnnInterface_getProviders *>(
2075
+ lib_handle,
2076
+ " QnnInterface_getProviders" );
2080
2077
if (nullptr == get_providers) {
2081
2078
GGMLQNN_LOG_WARN (" can not load symbol QnnInterface_getProviders : %s" , dlerror ());
2082
2079
return 2 ;
@@ -2154,7 +2151,7 @@ int qnn_instance::load_backend(std::string & lib_path, const QnnSaver_Config_t *
2154
2151
2155
2152
int qnn_instance::unload_backend () {
2156
2153
int dlclose_error = 0 ;
2157
- for (auto &it : _loaded_lib_handle) {
2154
+ for (auto & it : _loaded_lib_handle) {
2158
2155
dlclose_error = dlclose (it.second );
2159
2156
if (dlclose_error != 0 ) {
2160
2157
GGMLQNN_LOG_WARN (" failed to close QNN backend %d, error %s\n " , it.first , dlerror ());
@@ -2647,7 +2644,7 @@ int qnn_instance::init_qnn_graph(const std::string & graph_name, QNNBackend devi
2647
2644
}
2648
2645
2649
2646
int qnn_instance::init_qnn_graph (const char * graph_name, bool debug, uint8_t do_node_validation,
2650
- const QnnGraph_Config_t ** graph_configs) {
2647
+ const QnnGraph_Config_t ** graph_configs) {
2651
2648
int result = 0 ;
2652
2649
2653
2650
if (nullptr == graph_name) {
@@ -3173,7 +3170,7 @@ static void ggml_qnn_mul_mat(ggml_backend_t backend, ggml_tensor * op) {
3173
3170
Qnn_Param_t out_0_params[] = {
3174
3171
{QNN_PARAMTYPE_SCALAR,
3175
3172
QNN_OP_MAT_MUL_PARAM_TRANSPOSE_IN1,
3176
- .scalarParam = {QNN_DATATYPE_BOOL_8, .bool8Value = 1 }
3173
+ .scalarParam = {QNN_DATATYPE_BOOL_8, .bool8Value = 1 }
3177
3174
}
3178
3175
};
3179
3176
@@ -3223,13 +3220,13 @@ static void ggml_qnn_mul_mat(ggml_backend_t backend, ggml_tensor * op) {
3223
3220
CHECK_QNN_API (error, qnn_raw_interface.graphAddNode (graph_handle,out_trans1_0));
3224
3221
3225
3222
// step-6: finalize qnn graph and execute qnn graph
3226
- CHECK_QNN_API (error, qnn_raw_interface.graphFinalize (graph_handle, NULL , NULL ));
3223
+ CHECK_QNN_API (error, qnn_raw_interface.graphFinalize (graph_handle, nullptr , nullptr ));
3227
3224
Qnn_Tensor_t input_tensors_0[] = {*p_tensor0, *p_tensor1};
3228
3225
Qnn_Tensor_t output_tensors_0[] = {*p_tensor2};
3229
3226
CHECK_QNN_API (error, qnn_raw_interface.graphExecute (graph_handle,
3230
3227
input_tensors_0, 2 ,
3231
3228
output_tensors_0, 1 ,
3232
- NULL , NULL ));
3229
+ nullptr , nullptr ));
3233
3230
3234
3231
qnn_tensors_t ggml_op_mulmat_tensors;
3235
3232
ggml_op_mulmat_tensors.reserve (5 );
@@ -3387,7 +3384,7 @@ static ggml_backend_buffer_i ggml_backend_qnn_buffer_interface = {
3387
3384
/* .get_tensor = */ ggml_backend_qnn_buffer_get_tensor,
3388
3385
/* .cpy_tensor = */ ggml_backend_qnn_buffer_cpy_tensor,
3389
3386
/* .clear = */ ggml_backend_qnn_buffer_clear,
3390
- /* .reset = */ NULL ,
3387
+ /* .reset = */ nullptr ,
3391
3388
};
3392
3389
3393
3390
static const char * ggml_backend_qnn_buffer_type_name (ggml_backend_buffer_type_t buft) {
@@ -3418,7 +3415,7 @@ static size_t ggml_backend_qnn_buffer_type_get_alignment(ggml_backend_buffer_typ
3418
3415
return 32 ;
3419
3416
}
3420
3417
3421
- // FIXME: this value is an experimental value on Xiaomi14
3418
+ // FIXME: this value is an experimental value on Snapdragon 8 Gen3 based phone
3422
3419
static size_t ggml_backend_qnn_buffer_type_get_max_size (ggml_backend_buffer_type_t buft) {
3423
3420
GGML_UNUSED (buft);
3424
3421
@@ -3498,8 +3495,6 @@ static const char * ggml_backend_qnn_device_get_name(ggml_backend_dev_t dev) {
3498
3495
return " unknown" ;
3499
3496
}
3500
3497
return ctx->name ;
3501
-
3502
- GGML_UNUSED (dev);
3503
3498
}
3504
3499
3505
3500
static const char * ggml_backend_qnn_device_get_description (ggml_backend_dev_t dev) {
@@ -3589,10 +3584,10 @@ ggml_backend_buffer_type_t ggml_backend_qnn_buffer_type(size_t device_index) {
3589
3584
/* .alloc_buffer = */ ggml_backend_qnn_buffer_type_alloc_buffer,
3590
3585
/* .get_alignment = */ ggml_backend_qnn_buffer_type_get_alignment,
3591
3586
/* .get_max_size = */ ggml_backend_qnn_buffer_type_get_max_size,
3592
- /* .get_alloc_size = */ NULL ,// defaults to ggml_nbytes
3587
+ /* .get_alloc_size = */ nullptr ,// defaults to ggml_nbytes
3593
3588
/* .is_host = */ ggml_backend_qnn_buffer_is_host
3594
3589
},
3595
- /* .context = */ NULL ,
3590
+ /* .context = */ nullptr ,
3596
3591
};
3597
3592
3598
3593
return &ggml_backend_buffer_type_qnn;
@@ -3630,14 +3625,14 @@ static struct ggml_backend_device_i ggml_backend_qnn_device_interface = {
3630
3625
/* .get_props = */ ggml_backend_qnn_device_get_props,
3631
3626
/* .init_backend = */ ggml_backend_qnn_device_init_backend,
3632
3627
/* .get_buffer_type = */ ggml_backend_qnn_device_get_buffer_type,
3633
- /* .get_host_buffer_type = */ NULL ,
3628
+ /* .get_host_buffer_type = */ nullptr ,
3634
3629
/* .buffer_from_host_ptr = */ ggml_backend_qnn_device_buffer_from_host_ptr,
3635
3630
/* .supports_op = */ ggml_backend_qnn_device_supports_op,
3636
3631
/* .supports_buft = */ ggml_backend_qnn_device_supports_buft,
3637
- /* .offload_op = */ NULL ,
3638
- /* .event_new = */ NULL ,
3639
- /* .event_free = */ NULL ,
3640
- /* .event_synchronize = */ NULL ,
3632
+ /* .offload_op = */ nullptr ,
3633
+ /* .event_new = */ nullptr ,
3634
+ /* .event_free = */ nullptr ,
3635
+ /* .event_synchronize = */ nullptr ,
3641
3636
};
3642
3637
3643
3638
static ggml_backend_i ggml_backend_qnn_interface = {
@@ -3685,9 +3680,8 @@ struct ggml_backend_qnn_reg_context {
3685
3680
};
3686
3681
3687
3682
static const char * ggml_backend_qnn_reg_get_name (ggml_backend_reg_t reg) {
3688
- return " ggml-qnn" ;
3689
-
3690
3683
GGML_UNUSED (reg);
3684
+ return " ggml-qnn" ;
3691
3685
}
3692
3686
3693
3687
static size_t ggml_backend_qnn_reg_get_device_count (ggml_backend_reg_t reg) {
@@ -3708,10 +3702,15 @@ static ggml_backend_dev_t ggml_backend_qnn_reg_get_device(ggml_backend_reg_t reg
3708
3702
static void * ggml_backend_qnn_reg_get_proc_address (ggml_backend_reg_t reg, const char * name) {
3709
3703
GGML_UNUSED (reg);
3710
3704
3711
- if (std::strcmp (name, " ggml_backend_set_n_threads" ) == 0 ) {
3705
+ if (nullptr == name)
3706
+ return nullptr ;
3707
+
3708
+ const char * slot_name = " ggml_backend_set_n_threads" ;
3709
+ // avoid buffer attack rather than strcmp
3710
+ if (0 == std::memcmp (name, slot_name, strlen (slot_name))) {
3712
3711
return (void *)ggml_backend_qnn_set_n_threads;
3713
3712
}
3714
- return NULL ;
3713
+ return nullptr ;
3715
3714
}
3716
3715
3717
3716
static const ggml_backend_reg_i ggml_backend_qnn_reg_interface = {
0 commit comments