Skip to content

Commit 75a37a2

Browse files
committed
project: adapt to thread safety test in upstream
1 parent 8edc5ce commit 75a37a2

File tree

3 files changed

+79
-18
lines changed

3 files changed

+79
-18
lines changed

ggml/src/ggml-hexagon/ggml-hexagon.cpp

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -881,9 +881,9 @@ static void ggmlhexagon_get_processname(char * p_name) {
881881
GGMLHEXAGON_LOG_WARN("failed to get process name, reason:%s", strerror(errno));
882882
return;
883883
}
884-
GGMLHEXAGON_LOG_VERBOSE("process name %s", tmpbuf);
884+
GGMLHEXAGON_LOG_DEBUG("process name %s", tmpbuf);
885885
const char * realname = strrchr(tmpbuf, '/') + 1;
886-
GGMLHEXAGON_LOG_VERBOSE("process name %s", realname);
886+
GGMLHEXAGON_LOG_DEBUG("process name %s", realname);
887887
snprintf(p_name, GGMLHEXAGON_TMPBUF_LEN, "%s", realname);
888888
#endif
889889
}
@@ -897,6 +897,9 @@ static bool ggmlhexagon_is_llamabench_running() {
897897
if (0 == memcmp(processname, "llama-bench", strlen("llama-bench"))) {
898898
return true;
899899
}
900+
if (0 == memcmp(processname, "test-thread-safety", strlen("test-thread-safety"))) {
901+
return true;
902+
}
900903
}
901904
return false;
902905
}
@@ -1967,7 +1970,7 @@ static void ggmlhexagon_load_cfg() {
19671970
ggmlhexagon_get_timestring(time_string);
19681971
GGMLHEXAGON_LOG_DEBUG("program running start time:%s", time_string);
19691972
std::string cfg_filename = std::string(g_hexagon_appcfg.runtime_libpath) + std::string(g_hexagon_appcfg.cfgfilename);
1970-
GGMLHEXAGON_LOG_INFO("load hexagon appcfg from %s", cfg_filename.c_str());
1973+
19711974
hexagon_appcfg hexagoncfg_instance;
19721975
hexagoncfg_instance.load(cfg_filename);
19731976
hexagoncfg_instance.dump([](const std::string & section, const std::string & key, const std::string value) {
@@ -2001,18 +2004,35 @@ static void ggmlhexagon_load_cfg() {
20012004
hexagoncfg_instance.get_intvalue("cdsp", "enable_all_q_mulmat", g_hexagon_appcfg.enable_all_q_mulmat, 0);
20022005
hexagoncfg_instance.get_intvalue("cdsp", "thread_counts", g_hexagon_appcfg.thread_counts, 4);
20032006

2004-
GGMLHEXAGON_LOG_INFO("internal ggml_hexagon_version=%s", g_hexagon_appcfg.ggml_hexagon_version);
2005-
GGMLHEXAGON_LOG_INFO("internal ggml_dsp_version=%s", g_hexagon_appcfg.ggml_dsp_version);
2006-
GGMLHEXAGON_LOG_INFO("external ggml_hexagon_version=%s", version.c_str());
2007-
GGMLHEXAGON_LOG_INFO("external ggml_dsp_version=%s", ggmldsp_version.c_str());
20082007
memcpy(g_hexagon_appcfg.ggml_dsp_version, ggmldsp_version.c_str(), strlen(ggmldsp_version.c_str()));
2009-
GGMLHEXAGON_LOG_INFO("hwaccel_approach=%d(%s)", g_hexagon_appcfg.hwaccel_approach,
2010-
ggmlhexagon_get_hwaccel_approach_name(g_hexagon_appcfg.hwaccel_approach));
2011-
GGMLHEXAGON_LOG_INFO("hexagon_backend=%d(%s)", g_hexagon_appcfg.hexagon_backend,
2012-
ggml_backend_hexagon_get_devname(g_hexagon_appcfg.hexagon_backend));
2013-
GGMLHEXAGON_LOG_INFO("runtime libpath=%s", g_hexagon_appcfg.runtime_libpath);
2014-
GGMLHEXAGON_LOG_INFO("enable_perf=%d", g_hexagon_appcfg.enable_perf);
2015-
GGMLHEXAGON_LOG_INFO("enable_profiler=%d", g_hexagon_appcfg.enable_profiler);
2008+
2009+
if (ggmlhexagon_is_llamabench_running()) {
2010+
GGMLHEXAGON_LOG_VERBOSE("load hexagon appcfg from %s", cfg_filename.c_str());
2011+
GGMLHEXAGON_LOG_VERBOSE("internal ggml_hexagon_version=%s", g_hexagon_appcfg.ggml_hexagon_version);
2012+
GGMLHEXAGON_LOG_VERBOSE("internal ggml_dsp_version=%s", g_hexagon_appcfg.ggml_dsp_version);
2013+
GGMLHEXAGON_LOG_VERBOSE("external ggml_hexagon_version=%s", version.c_str());
2014+
GGMLHEXAGON_LOG_VERBOSE("external ggml_dsp_version=%s", ggmldsp_version.c_str());
2015+
GGMLHEXAGON_LOG_VERBOSE("hwaccel_approach=%d(%s)", g_hexagon_appcfg.hwaccel_approach,
2016+
ggmlhexagon_get_hwaccel_approach_name(g_hexagon_appcfg.hwaccel_approach));
2017+
GGMLHEXAGON_LOG_VERBOSE("hexagon_backend=%d(%s)", g_hexagon_appcfg.hexagon_backend,
2018+
ggml_backend_hexagon_get_devname(g_hexagon_appcfg.hexagon_backend));
2019+
GGMLHEXAGON_LOG_VERBOSE("runtime libpath=%s", g_hexagon_appcfg.runtime_libpath);
2020+
GGMLHEXAGON_LOG_VERBOSE("enable_perf=%d", g_hexagon_appcfg.enable_perf);
2021+
GGMLHEXAGON_LOG_VERBOSE("enable_profiler=%d", g_hexagon_appcfg.enable_profiler);
2022+
} else {
2023+
GGMLHEXAGON_LOG_INFO("load hexagon appcfg from %s", cfg_filename.c_str());
2024+
GGMLHEXAGON_LOG_INFO("internal ggml_hexagon_version=%s", g_hexagon_appcfg.ggml_hexagon_version);
2025+
GGMLHEXAGON_LOG_INFO("internal ggml_dsp_version=%s", g_hexagon_appcfg.ggml_dsp_version);
2026+
GGMLHEXAGON_LOG_INFO("external ggml_hexagon_version=%s", version.c_str());
2027+
GGMLHEXAGON_LOG_INFO("external ggml_dsp_version=%s", ggmldsp_version.c_str());
2028+
GGMLHEXAGON_LOG_INFO("hwaccel_approach=%d(%s)", g_hexagon_appcfg.hwaccel_approach,
2029+
ggmlhexagon_get_hwaccel_approach_name(g_hexagon_appcfg.hwaccel_approach));
2030+
GGMLHEXAGON_LOG_INFO("hexagon_backend=%d(%s)", g_hexagon_appcfg.hexagon_backend,
2031+
ggml_backend_hexagon_get_devname(g_hexagon_appcfg.hexagon_backend));
2032+
GGMLHEXAGON_LOG_INFO("runtime libpath=%s", g_hexagon_appcfg.runtime_libpath);
2033+
GGMLHEXAGON_LOG_INFO("enable_perf=%d", g_hexagon_appcfg.enable_perf);
2034+
GGMLHEXAGON_LOG_INFO("enable_profiler=%d", g_hexagon_appcfg.enable_profiler);
2035+
}
20162036

20172037
if (precision_mode.find("fp16") != std::string::npos) {
20182038
g_hexagon_appcfg.precision_mode = 1;
@@ -2040,7 +2060,11 @@ void ggml_backend_set_hexagon_cfg(int new_hexagon_backend, int new_hwaccel_appro
20402060
hexagoncfg_instance.dump([](const std::string & section, const std::string & key, const std::string value) {
20412061
std::ostringstream tmposs;
20422062
tmposs << "section[" << std::setw(10) << std::left << section << "],[" << std::setw(25) << std::left << key << "] = [" << value << "]";
2043-
GGMLHEXAGON_LOG_INFO("%s", tmposs.str().c_str());
2063+
if (ggmlhexagon_is_llamabench_running()) {
2064+
GGMLHEXAGON_LOG_VERBOSE("%s", tmposs.str().c_str());
2065+
} else {
2066+
GGMLHEXAGON_LOG_INFO("%s", tmposs.str().c_str());
2067+
}
20442068
});
20452069
}
20462070

@@ -2051,7 +2075,7 @@ static bool ggmlhexagon_check_valid_appcfg() {
20512075
ggmlhexagon_get_hwaccel_approach_name(g_hexagon_appcfg.hwaccel_approach));
20522076
GGMLHEXAGON_LOG_DEBUG("user's specified hexagon_backend=%d", g_hexagon_appcfg.hexagon_backend);
20532077
if (g_hexagon_appcfg.hexagon_backend >= GGML_HEXAGON_MAX_DEVICES) {
2054-
GGMLHEXAGON_LOG_INFO("using default ggml backend");
2078+
GGMLHEXAGON_LOG_VERBOSE("using default ggml backend");
20552079
is_valid_appcfg = false;
20562080
}
20572081

@@ -2075,7 +2099,7 @@ static bool ggmlhexagon_check_valid_appcfg() {
20752099

20762100
if (1 == g_hexagon_appcfg.enable_all_q_mulmat) {
20772101
if (0 == g_hexagon_appcfg.enable_q_mulmat) {
2078-
GGMLHEXAGON_LOG_VERBOSE("ensure set enable_q_mulmat to 1 firstly when set enable_all_q_mulmat to 1 if you are not currently comparing the performance of GGML_OP_ADD between QNNCPU, QNNGPU, QNNNPU, cDSP, ggml");
2102+
GGMLHEXAGON_LOG_DEBUG("ensure set enable_q_mulmat to 1 firstly when set enable_all_q_mulmat to 1 if you are not currently comparing the performance of GGML_OP_ADD between QNNCPU, QNNGPU, QNNNPU, cDSP, ggml");
20792103
//is_valid_appcfg = false;
20802104
}
20812105
}

scripts/build-run-android.sh

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ PROMPT_STRING="introduce the movie Once Upon a Time in America briefly.\n"
6363
#for llama-cli, 20.4 MiB in models/t5-very-small-random-F32.gguf
6464
TEST_MODEL_NAME=/sdcard/t5-very-small-random-F32.gguf
6565
#for llama-cli, 1.1 GiB, will be downloaded automatically via this script
66-
TEST_MODEL_NAME=/sdcard/t5-277M-F32.gguf
66+
#TEST_MODEL_NAME=/sdcard/t5-277M-F32.gguf
6767

6868
#for llama-bench, 1.12 GiB, will be downloadded automatically via this script
6969
GGUF_MODEL_NAME=/sdcard/qwen1_5-1_8b-chat-q4_0.gguf
@@ -465,6 +465,18 @@ function run_llamabench()
465465
}
466466

467467

468+
function run_threadsafety()
469+
{
470+
prepare_run_on_phone test-thread-safety
471+
472+
adb shell "cd ${REMOTE_PATH} \
473+
&& export LD_LIBRARY_PATH=${REMOTE_PATH} \
474+
&& ${REMOTE_PATH}/test-thread-safety -np 2 -mg $qnnbackend -m ${GGUF_MODEL_NAME}"
475+
476+
}
477+
478+
479+
468480
function run_test-ops()
469481
{
470482
prepare_run_on_phone test-backend-ops
@@ -475,6 +487,7 @@ function run_test-ops()
475487

476488
}
477489

490+
478491
function run_test-op()
479492
{
480493
prepare_run_on_phone test-backend-ops
@@ -594,6 +607,7 @@ function show_usage()
594607
echo " $0 run_testop ADD/MUL_MAT"
595608
echo " $0 run_llamacli 0(QNN_CPU)/1(QNN_GPU)/2(QNN_NPU)/3(cdsp)/4(ggml)"
596609
echo " $0 run_llamabench 0(QNN_CPU)/1(QNN_GPU)/2(QNN_NPU)/3(cdsp)/4(ggml)"
610+
echo " $0 run_threadsafety 0(QNN_CPU)/1(QNN_GPU)/2(QNN_NPU)/3(cdsp)/4(ggml)"
597611
echo " $0 run_benchmark ADD/MUL_MAT 0(QNN_CPU)/1(QNN_GPU)/2(QNN_NPU)/3(cdsp)/4(ggml)"
598612
echo " $0 run_benchmark ADD/MUL_MAT 0(QNN_CPU)/1(QNN_GPU)/2(QNN_NPU)/3(cdsp)/4(ggml) 256/512/1024/2048/4096 256/512/1024/2048/4096"
599613

@@ -655,6 +669,10 @@ elif [ $# == 2 ]; then
655669
qnnbackend=$2
656670
run_llamabench
657671
exit 0
672+
elif [ "$1" == "run_threadsafety" ]; then
673+
qnnbackend=$2
674+
run_threadsafety
675+
exit 0
658676
else
659677
show_usage
660678
exit 1

tests/test-thread-safety.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,26 @@
1212
#include "log.h"
1313
#include "sampling.h"
1414

15+
#ifdef GGML_USE_HEXAGON
16+
#include "ggml-hexagon.h"
17+
#endif
18+
1519
int main(int argc, char ** argv) {
20+
#ifdef GGML_USE_HEXAGON
21+
int backend = HEXAGON_BACKEND_CDSP;
22+
for (int i = 1; i < argc; i++) {
23+
if (0 == strcmp(argv[i], "-mg")) {
24+
backend = atoi(argv[i+1]);
25+
}
26+
}
27+
printf("backend %d\n", backend);
28+
if (backend >= HEXAGON_BACKEND_CDSP) {
29+
ggml_backend_set_hexagon_cfg(backend, HWACCEL_CDSP);
30+
}
31+
if (backend < HEXAGON_BACKEND_CDSP) {
32+
ggml_backend_set_hexagon_cfg(backend, HWACCEL_QNN);
33+
}
34+
#endif
1635
common_params params;
1736

1837
if (!common_params_parse(argc, argv, params, LLAMA_EXAMPLE_COMMON)) {

0 commit comments

Comments
 (0)