@@ -168,7 +168,7 @@ function run_llamabench()
168168}
169169
170170
171- function run_test-backend- ops()
171+ function run_test-ops()
172172{
173173 prepare_run_on_phone test-backend-ops
174174
@@ -178,6 +178,38 @@ function run_test-backend-ops()
178178
179179}
180180
181+ function run_test-op()
182+ {
183+ prepare_run_on_phone test-backend-ops
184+
185+ qnnbackendname=qnn-cpu
186+ case $qnnbackend in
187+ 0)
188+ qnnbackendname=qnn-cpu
189+ ;;
190+ 1)
191+ qnnbackendname=qnn-gpu
192+ ;;
193+ 2)
194+ qnnbackendname=qnn-npu
195+ ;;
196+ * )
197+ qnnbackendname=qnn-cpu
198+ ;;
199+ esac
200+
201+ # debug
202+ echo " adb shell cd ${REMOTE_PATH} \
203+ && export LD_LIBRARY_PATH=${REMOTE_PATH} \
204+ && ${REMOTE_PATH} /test-backend-ops test -o $opname -b $qnnbackendname "
205+
206+ echo " \n"
207+ adb shell " cd ${REMOTE_PATH} \
208+ && export LD_LIBRARY_PATH=${REMOTE_PATH} \
209+ && ${REMOTE_PATH} /test-backend-ops test -o $opname -b $qnnbackendname "
210+
211+ }
212+
181213function run_ut_add()
182214{
183215 prepare_run_on_phone ggml-qnn-ut
@@ -208,18 +240,101 @@ function run_ut_mul()
208240
209241}
210242
243+ function print_oplist()
244+ {
245+ oplist=" DUP
246+ ADD
247+ ADD1
248+ ACC
249+ SUB
250+ MUL
251+ DIV
252+ SQR
253+ SQRT
254+ LOG
255+ SIN
256+ COS
257+ SUM
258+ SUM_ROWS
259+ MEAN
260+ ARGMAX
261+ COUNT_EQUAL
262+ REPEAT
263+ REPEAT_BACK
264+ CONCAT
265+ SILU_BACK
266+ NORM
267+ RMS_NORM
268+ RMS_NORM_BACK
269+ GROUP_NORM
270+
271+ MUL_MAT
272+ MUL_MAT_ID
273+ OUT_PROD
274+
275+ SCALE
276+ SET
277+ CPY
278+ CONT
279+ RESHAPE
280+ VIEW
281+ PERMUTE
282+ TRANSPOSE
283+ GET_ROWS
284+ GET_ROWS_BACK
285+ DIAG
286+ DIAG_MASK_INF
287+ DIAG_MASK_ZERO
288+ SOFT_MAX
289+ SOFT_MAX_BACK
290+ ROPE
291+ ROPE_BACK
292+ CLAMP
293+ CONV_TRANSPOSE_1D
294+ IM2COL
295+ IM2COL_BACK
296+ CONV_TRANSPOSE_2D
297+ POOL_1D
298+ POOL_2D
299+ POOL_2D_BACK
300+ UPSCALE
301+ PAD
302+ PAD_REFLECT_1D
303+ ARANGE
304+ TIMESTEP_EMBEDDING
305+ ARGSORT
306+ LEAKY_RELU
307+
308+ FLASH_ATTN_EXT
309+ FLASH_ATTN_BACK
310+ SSM_CONV
311+ SSM_SCAN
312+ WIN_PART
313+ WIN_UNPART
314+ GET_REL_POS
315+ ADD_REL_POS
316+ RWKV_WKV6
317+ GATED_LINEAR_ATTN"
318+
319+ echo " opname list: "
320+ echo ${oplist}
321+ }
211322
212323function show_usage()
213324{
214325 echo " Usage:"
326+ echo " $0 help"
327+ echo " $0 print_oplist"
215328 echo " $0 build"
216329 echo " $0 updateqnnlib"
217- echo " $0 run_testop"
218- echo " $0 run_ut_add 0 (QNN_CPU) / 1 (QNN_GPU) / 2 (QNN_NPU) / 3 (ggml)"
219- echo " $0 run_ut_mulmat 0 (QNN_CPU) / 1 (QNN_GPU) / 2 (QNN_NPU) / 3 (ggml)"
220- echo " $0 run_ut_mul 0 (QNN_CPU) / 1 (QNN_GPU) / 2 (QNN_NPU) / 3 (ggml)"
221- echo " $0 run_llamacli 0 (QNN_CPU) / 1 (QNN_GPU) / 2 (QNN_NPU) / 3 (ggml)"
222- echo " $0 run_llamabench 0 (QNN_CPU) / 1 (QNN_GPU) / 2 (QNN_NPU) / 3 (ggml)"
330+ echo " $0 run_testops"
331+ echo " $0 run_testop [ADD/MUL/MUL_MAT] [0 (QNN_CPU) / 1 (QNN_GPU) / 2 (QNN_NPU)]"
332+ echo " $0 run_ut_add 0 (QNN_CPU) / 1 (QNN_GPU) / 2 (QNN_NPU) / 3 (ggml)"
333+ echo " $0 run_ut_mulmat 0 (QNN_CPU) / 1 (QNN_GPU) / 2 (QNN_NPU) / 3 (ggml)"
334+ echo " $0 run_ut_mul 0 (QNN_CPU) / 1 (QNN_GPU) / 2 (QNN_NPU) / 3 (ggml)"
335+ echo " $0 run_llamacli 0 (QNN_CPU) / 1 (QNN_GPU) / 2 (QNN_NPU) / 3 (ggml)"
336+ echo " $0 run_llamabench 0 (QNN_CPU) / 1 (QNN_GPU) / 2 (QNN_NPU) / 3 (ggml)"
337+
223338 echo -e " \n\n\n"
224339}
225340
@@ -238,12 +353,14 @@ elif [ $# == 1 ]; then
238353 elif [ " $1 " == " help" ]; then
239354 show_usage
240355 exit 1
356+ elif [ " $1 " == " print_oplist" ]; then
357+ print_oplist
358+ exit 1
241359 elif [ " $1 " == " build" ]; then
242360 build_ggml_qnn
243361 exit 0
244-
245- elif [ " $1 " == " run_testop" ]; then
246- run_test-backend-ops
362+ elif [ " $1 " == " run_testops" ]; then
363+ run_test-ops
247364 exit 0
248365
249366 elif [ " $1 " == " updateqnnlib" ]; then
@@ -276,6 +393,107 @@ elif [ $# == 2 ]; then
276393 run_ut_mul
277394 exit 0
278395 fi
396+ elif [ $# == 3 ]; then
397+ opname=$2
398+ # TODO: check opname in oplist
399+ # opname can be found via print_oplist:
400+ # DUP
401+ # ADD
402+ # ADD1
403+ # ACC
404+ # SUB
405+ # MUL
406+ # DIV
407+ # SQR
408+ # SQRT
409+ # LOG
410+ # SIN
411+ # COS
412+ # SUM
413+ # SUM_ROWS
414+ # MEAN
415+ # ARGMAX
416+ # COUNT_EQUAL
417+ # REPEAT
418+ # REPEAT_BACK
419+ # CONCAT
420+ # SILU_BACK
421+ # NORM
422+ # RMS_NORM
423+ # RMS_NORM_BACK
424+ # GROUP_NORM
425+ #
426+ # MUL_MAT
427+ # MUL_MAT_ID
428+ # OUT_PROD
429+ #
430+ # SCALE
431+ # SET
432+ # CPY
433+ # CONT
434+ # RESHAPE
435+ # VIEW
436+ # PERMUTE
437+ # TRANSPOSE
438+ # GET_ROWS
439+ # GET_ROWS_BACK
440+ # DIAG
441+ # DIAG_MASK_INF
442+ # DIAG_MASK_ZERO
443+ # SOFT_MAX
444+ # SOFT_MAX_BACK
445+ # ROPE
446+ # ROPE_BACK
447+ # CLAMP
448+ # CONV_TRANSPOSE_1D
449+ # IM2COL
450+ # IM2COL_BACK
451+ # CONV_TRANSPOSE_2D
452+ # POOL_1D
453+ # POOL_2D
454+ # POOL_2D_BACK
455+ # UPSCALE
456+ # PAD
457+ # PAD_REFLECT_1D
458+ # ARANGE
459+ # TIMESTEP_EMBEDDING
460+ # ARGSORT
461+ # LEAKY_RELU
462+ #
463+ # FLASH_ATTN_EXT
464+ # FLASH_ATTN_BACK
465+ # SSM_CONV
466+ # SSM_SCAN
467+ # WIN_PART
468+ # WIN_UNPART
469+ # GET_REL_POS
470+ # ADD_REL_POS
471+ # RWKV_WKV6
472+ # GATED_LINEAR_ATTN
473+ #
474+ # UNARY
475+ #
476+ # MAP_UNARY
477+ # MAP_BINARY
478+ #
479+ # MAP_CUSTOM1_F32
480+ # MAP_CUSTOM2_F32
481+ # MAP_CUSTOM3_F32
482+ #
483+ # MAP_CUSTOM1
484+ # MAP_CUSTOM2
485+ # MAP_CUSTOM3
486+ #
487+ # CROSS_ENTROPY_LOSS
488+ # CROSS_ENTROPY_LOSS_BACK
489+ # OPT_STEP_ADAMW
490+ qnnbackend=$3
491+ if [ ${qnnbackend} -gt 3 ]; then
492+ show_usage
493+ exit 1
494+ fi
495+ run_test-op
496+ exit 0
279497else
280498 show_usage
281499 exit 1
0 commit comments