Skip to content

Commit 3335332

Browse files
author
zhouwg
committed
ggml-hexagon: code on AP(arm-cpu) side is stable now
1 parent 29843c0 commit 3335332

File tree

1 file changed

+41
-42
lines changed

1 file changed

+41
-42
lines changed

ggml/src/ggml-qnn/ggml-qnn.cpp

Lines changed: 41 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ static void ggmlqnn_compute_timestep_embedding(ggml_backend_qnn_context * ctx,
158158
static void ggmlqnn_compute_diag_mask(ggml_backend_qnn_context * ctx, ggml_tensor * dst, float value);
159159

160160
static size_t ggmlqnn_get_op_index(const ggml_tensor * tensor);
161+
static const char * ggmlqnn_get_hwaccel_approach_name(int hwaccle_approach);
161162
static void * ggmlqnn_type_trait(ggml_backend_qnn_context * ctx, ggml_tensor * op);
162163
static void ggmlqnn_get_opkey_from_op(const ggml_tensor * op, std::string & output);
163164

@@ -875,6 +876,33 @@ static void ggmlqnn_dump_tensor(const ggml_tensor * tensor, const char * name) {
875876
GGMLQNN_LOG_DEBUG("\n");
876877
}
877878

879+
static void ggmlqnn_get_timestring(char * p_currenttime) {
880+
time_t n_seconds = 0;
881+
struct tm * p_tm = nullptr;
882+
883+
if (nullptr == p_currenttime)
884+
return;
885+
886+
time(&n_seconds);
887+
p_tm = localtime(&n_seconds);
888+
snprintf(p_currenttime, GGML_QNN_TMPBUF_LEN, "%04d-%02d-%02d,%02d:%02d:%02d",
889+
p_tm->tm_year + 1900, p_tm->tm_mon + 1, p_tm->tm_mday,
890+
p_tm->tm_hour, p_tm->tm_min, p_tm->tm_sec);
891+
}
892+
893+
static void ggmlqnn_print_running_timestamp(ggml_backend_qnn_context * ctx) {
894+
GGMLQNN_LOG_INFO("hwaccel approach is %d(%s)", g_qnn_params.hwaccel_approach,
895+
ggmlqnn_get_hwaccel_approach_name(g_qnn_params.hwaccel_approach));
896+
char timestamp[GGML_QNN_TMPBUF_LEN];
897+
ggmlqnn_get_timestring(timestamp);
898+
if (HWACCEL_CDSP == g_qnn_params.hwaccel_approach) {
899+
GGMLQNN_LOG_INFO("only offload GGML_OP_ADD : %s", g_qnn_params.enable_q_mulmat ? "NO" : "YES");
900+
} else {
901+
GGMLQNN_LOG_INFO("only offload GGML_OP_ADD: NO");
902+
}
903+
GGMLQNN_LOG_INFO("running timestamp:%s", timestamp);
904+
}
905+
878906
class qnn_perf {
879907
public:
880908
qnn_perf(const std::string & perf_name) : _perf_name(std::move(perf_name)) {};
@@ -1065,20 +1093,6 @@ static char * ggmlqnn_strndup(const char * source, size_t maxlen) {
10651093
#endif
10661094
}
10671095

1068-
static void ggmlqnn_get_timestring(char * p_currenttime) {
1069-
time_t n_seconds = 0;
1070-
struct tm * p_tm = nullptr;
1071-
1072-
if (nullptr == p_currenttime)
1073-
return;
1074-
1075-
time(&n_seconds);
1076-
p_tm = localtime(&n_seconds);
1077-
snprintf(p_currenttime, GGML_QNN_TMPBUF_LEN, "%04d-%02d-%02d-%02d-%02d-%02d",
1078-
p_tm->tm_year + 1900, p_tm->tm_mon + 1, p_tm->tm_mday,
1079-
p_tm->tm_hour, p_tm->tm_min, p_tm->tm_sec);
1080-
}
1081-
10821096
// =================================================================================================
10831097
// section-5: QNN helper function
10841098
// =================================================================================================
@@ -2123,7 +2137,7 @@ static int ggmlhexagon_init_dsp(ggml_backend_qnn_context * ctx) {
21232137

21242138
static void ggmlhexagon_close_cdsp(ggml_backend_qnn_context * ctx) {
21252139
int hexagon_error = AEE_SUCCESS;
2126-
GGMLQNN_LOG_DEBUG("enter %s", __func__);
2140+
GGMLQNN_LOG_INFO("enter %s", __func__);
21272141
if (-1 != ctx->ggmlop_handle) {
21282142
hexagon_error = ggmlop_dsp_close(ctx->ggmlop_handle);
21292143
if (AEE_SUCCESS != hexagon_error) {
@@ -2139,7 +2153,7 @@ static void ggmlhexagon_close_cdsp(ggml_backend_qnn_context * ctx) {
21392153
ctx->rpc_mempool_len = 0;
21402154
ctx->domain_id = -1;
21412155
}
2142-
GGMLQNN_LOG_DEBUG("leave %s", __func__);
2156+
GGMLQNN_LOG_INFO("leave %s", __func__);
21432157
}
21442158

21452159
static void ggmlhexagon_compute(ggml_backend_qnn_context * ctx, struct ggml_tensor * op) {
@@ -3693,7 +3707,7 @@ int qnn_instance::qnn_finalize() {
36933707
int ret_status = 0;
36943708
Qnn_ErrorHandle_t error = QNN_SUCCESS;
36953709

3696-
GGMLQNN_LOG_DEBUG("enter %s\n", __func__);
3710+
GGMLQNN_LOG_INFO("enter %s\n", __func__);
36973711
ggmlqnn_reset_idx();
36983712

36993713
free_rpcmem();
@@ -3760,7 +3774,7 @@ int qnn_instance::qnn_finalize() {
37603774
unload_backend();
37613775
unload_system();
37623776

3763-
GGMLQNN_LOG_DEBUG("leave %s\n", __func__);
3777+
GGMLQNN_LOG_INFO("leave %s\n", __func__);
37643778
return ret_status;
37653779
}
37663780

@@ -4149,20 +4163,13 @@ static Qnn_OpConfig_t ggmlqnn_create_op_config(const char * name, const char * p
41494163
return opcfg;
41504164
}
41514165

4152-
static Qnn_Tensor_t * ggmlqnn_create_general_tensor(qnn_instance * instance, Qnn_GraphHandle_t graph_handle,
4153-
const ggml_tensor * tensor, const char * name,
4154-
Qnn_TensorType_t qnn_tensor_type,
4155-
Qnn_DataType_t qnn_data_type,
4156-
uint32_t rank, uint32_t * dims,
4157-
void * data, uint32_t data_size,
4158-
bool b_transpose = false);
41594166
static Qnn_Tensor_t * ggmlqnn_create_general_tensor(qnn_instance * instance, Qnn_GraphHandle_t graph_handle,
41604167
const ggml_tensor * tensor, const char * name,
41614168
Qnn_TensorType_t qnn_tensor_type,
41624169
Qnn_DataType_t qnn_data_type,
41634170
uint32_t rank, uint32_t * dims,
41644171
void * data, uint32_t data_size,
4165-
bool b_transpose) {
4172+
bool b_transpose = false) {
41664173
Qnn_ErrorHandle_t error = QNN_SUCCESS;
41674174
char tensor_name[GGML_MAX_NAME] = {};
41684175

@@ -4196,14 +4203,6 @@ static Qnn_Tensor_t * ggmlqnn_create_general_tensor(qnn_instance * instance, Qnn
41964203

41974204
ggmlqnn_get_qnn_dimensions_from_ggml_dimensions(transpose_dims, reverse_dims, ggml_n_dims(tensor));
41984205
tensor_dims = transpose_dims;
4199-
#if 0
4200-
for (size_t idx = 0; idx < 4; idx++) {
4201-
GGMLQNN_LOG_DEBUG("origin dim[%d]=%d\n", idx, reverse_dims[idx]);
4202-
}
4203-
for (size_t idx = 0; idx < 4; idx++) {
4204-
GGMLQNN_LOG_DEBUG("trans dim[%d]=%d\n", idx, transpose_dims[idx]);
4205-
}
4206-
#endif
42074206
}
42084207

42094208
Qnn_Tensor_t qnn_tensor = {
@@ -4763,11 +4762,6 @@ static const char * ggml_backend_qnn_name(ggml_backend_t backend) {
47634762
static void ggml_backend_qnn_free(ggml_backend_t backend) {
47644763
GGMLQNN_LOG_DEBUG("enter %s", __func__ );
47654764
ggml_backend_qnn_context * ctx = (ggml_backend_qnn_context *)backend->context;
4766-
GGMLQNN_LOG_DEBUG("device idx %d, name:%s", ctx->device, g_qnn_mgr[ctx->device].name);
4767-
4768-
if (HWACCEL_CDSP == g_qnn_params.hwaccel_approach) {
4769-
ggmlhexagon_close_cdsp(ctx);
4770-
}
47714765

47724766
qnn_instance * instance = (qnn_instance*)g_qnn_mgr[ctx->device].instance;
47734767
if (instance != nullptr) {
@@ -4791,8 +4785,13 @@ static void ggml_backend_qnn_free(ggml_backend_t backend) {
47914785
}
47924786

47934787
if (g_qnn_mgr[ctx->device].backend != nullptr) {
4788+
if (HWACCEL_CDSP == g_qnn_params.hwaccel_approach) {
4789+
ggmlhexagon_close_cdsp(ctx);
4790+
}
4791+
47944792
delete backend;
47954793
g_qnn_mgr[ctx->device].backend = nullptr;
4794+
ggmlqnn_print_running_timestamp(ctx);
47964795
}
47974796
GGMLQNN_LOG_DEBUG("leave %s", __func__ );
47984797
}
@@ -5155,7 +5154,7 @@ const char * ggml_backend_qnn_get_devname(size_t dev_num) {
51555154

51565155
static qnn_instance * ggmlqnn_init_qnn_instance(size_t device, const char * qnn_lib_path) {
51575156
int result = 0;
5158-
GGMLQNN_LOG_INFO("inference approach=%d(%s)", g_qnn_params.hwaccel_approach,
5157+
GGMLQNN_LOG_INFO("hwaccel approach=%d(%s)", g_qnn_params.hwaccel_approach,
51595158
ggmlqnn_get_hwaccel_approach_name(g_qnn_params.hwaccel_approach));
51605159

51615160
qnn_instance * instance = nullptr;
@@ -5219,7 +5218,7 @@ ggml_backend_t ggml_backend_qnn_init(size_t device, const char * qnn_lib_path) {
52195218
return g_qnn_mgr[device].backend;
52205219
}
52215220

5222-
//don't initialize QNN when inference approach is offload ggml op to Hexagon cDSP directly
5221+
//don't initialize QNN when hwaccel approach is offload ggml op to Hexagon cDSP directly
52235222
if (HWACCEL_CDSP != g_qnn_params.hwaccel_approach) {
52245223
qnn_instance * instance = ggmlqnn_init_qnn_instance(device, qnn_lib_path);
52255224
if (nullptr == instance)
@@ -5287,7 +5286,7 @@ static inline bool ggmlqnn_is_valid_params(ggml_backend_qnn_context * ctx, const
52875286
}
52885287

52895288
/*
5290-
* provide a general skeleton to offload ggml op to QNN backend or Hexagon cDSP: perform element-wise
5289+
* provide a general skeleton to offload ggml op to QNN backend: perform element-wise
52915290
* operation on 1/2 input tensors and 1 output tensors
52925291
*/
52935292
static void ggmlqnn_compute_elementwise(ggml_backend_qnn_context * ctx, ggml_tensor * op) {

0 commit comments

Comments
 (0)