@@ -168,7 +168,7 @@ function run_llamabench()
168
168
}
169
169
170
170
171
- function run_test-backend- ops()
171
+ function run_test-ops()
172
172
{
173
173
prepare_run_on_phone test-backend-ops
174
174
@@ -178,6 +178,38 @@ function run_test-backend-ops()
178
178
179
179
}
180
180
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
+
181
213
function run_ut_add()
182
214
{
183
215
prepare_run_on_phone ggml-qnn-ut
@@ -208,18 +240,101 @@ function run_ut_mul()
208
240
209
241
}
210
242
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
+ }
211
322
212
323
function show_usage()
213
324
{
214
325
echo " Usage:"
326
+ echo " $0 help"
327
+ echo " $0 print_oplist"
215
328
echo " $0 build"
216
329
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
+
223
338
echo -e " \n\n\n"
224
339
}
225
340
@@ -238,12 +353,14 @@ elif [ $# == 1 ]; then
238
353
elif [ " $1 " == " help" ]; then
239
354
show_usage
240
355
exit 1
356
+ elif [ " $1 " == " print_oplist" ]; then
357
+ print_oplist
358
+ exit 1
241
359
elif [ " $1 " == " build" ]; then
242
360
build_ggml_qnn
243
361
exit 0
244
-
245
- elif [ " $1 " == " run_testop" ]; then
246
- run_test-backend-ops
362
+ elif [ " $1 " == " run_testops" ]; then
363
+ run_test-ops
247
364
exit 0
248
365
249
366
elif [ " $1 " == " updateqnnlib" ]; then
@@ -276,6 +393,107 @@ elif [ $# == 2 ]; then
276
393
run_ut_mul
277
394
exit 0
278
395
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
279
497
else
280
498
show_usage
281
499
exit 1
0 commit comments