Illegal Instruction on Milk-V Duo
error log | 日志或报错信息 | ログ
NCNN:
[root@milkv-duo]~# ./benchncnn
syscall error -1
loop_count = 4
num_threads = 1
powersave = 0
gpu_device = -1
cooling_down = 1
Illegal instruction
Kernel:
[ 1291.709723] benchncnn[1362]: unhandled signal 4 code 0x1 at 0x00000000000c5b14 in benchncnn[10000+10c000]
[ 1291.709772] CPU: 0 PID: 1362 Comm: benchncnn Tainted: GF O 5.10.4-tag- #1
[ 1291.709782] epc: 00000000000c5b14 ra : 00000000000c5a60 sp : 0000003fffe6c530
[ 1291.709791] gp : 000000000012b800 tp : 0000003fc58aea38 t0 : fffffffffffffff8
[ 1291.709800] t1 : 0000000000000040 t2 : 0000000000000040 s0 : 0000003fc55c8790
[ 1291.709809] s1 : 0000003fc55c89e0 a0 : 0000003fc55badf8 a1 : 0000000200000001
[ 1291.709817] a2 : 0000000000000040 a3 : 0000003fc55b6040 a4 : 0000000000000040
[ 1291.709826] a5 : 0000000000000000 a6 : 0000003fc55baf00 a7 : 0000000000000000
[ 1291.709835] s2 : 0000003fffe6c760 s3 : 0000000000000001 s4 : 0000003fc55badf0
[ 1291.709843] s5 : 0000000000000040 s6 : 0000000000000001 s7 : 0000000000000001
[ 1291.709852] s8 : 0000000000000001 s9 : 0000003fffe6c808 s10: 0000003fea52f8c0
[ 1291.709860] s11: 0000000000000001 t3 : 0000003fc55baf00 t4 : 0000000000000009
[ 1291.709867] t5 : 0000003fc55b41d0 t6 : 0000000000000024
[ 1291.709876] status: 8000000201806020 badaddr: 000000000206e407 cause: 0000000000000002
context | 编译/运行环境 | バックグラウンド
Host: openSUSE Leap 15.5 x86_64
Target: Buildroot for Milk-V Duo, Linux 5.10.4 riscv64
how to reproduce | 复现步骤 | 再現方法
- Extract duo-app-sdk-v1.2.0
export RISCV_ROOT_PATH="/path-to-duo-sdk/riscv64-linux-musl-x86_64"- Create
ncnn-20231027-full-source/toolchains/milkv-duo.toolchain.cmake:
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR riscv64)
set(C906 False)#set(C906 True)
#Setting to True leads to compile error: 'vfrec7_v_f32m1' was not declared in this scope
if(DEFINED ENV{RISCV_ROOT_PATH})
file(TO_CMAKE_PATH $ENV{RISCV_ROOT_PATH} RISCV_ROOT_PATH)
else()
message(FATAL_ERROR "RISCV_ROOT_PATH env must be defined")
endif()
set(RISCV_ROOT_PATH ${RISCV_ROOT_PATH} CACHE STRING "root path to riscv toolchain")
set(CMAKE_C_COMPILER "${RISCV_ROOT_PATH}/bin/riscv64-unknown-linux-musl-gcc")
set(CMAKE_CXX_COMPILER "${RISCV_ROOT_PATH}/bin/riscv64-unknown-linux-musl-g++")
set(CMAKE_FIND_ROOT_PATH "${RISCV_ROOT_PATH}/riscv64-unknown-linux-musl")
set(CMAKE_SYSROOT "${RISCV_ROOT_PATH}/sysroot")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(CMAKE_C_FLAGS "-mcpu=c906fdv -march=rv64imafdcv0p7xthead -mcmodel=medany -mabi=lp64d")
set(CMAKE_CXX_FLAGS "-mcpu=c906fdv -march=rv64imafdcv0p7xthead -mcmodel=medany -mabi=lp64d")
# cache flags
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags")
cd ncnn-20231027-full-source && mkdir build && cd buildcmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/milkv-duo.toolchain.cmake -DCMAKE_BUILD_TYPE=relwithdebinfo -DNCNN_OPENMP=OFF -DNCNN_THREADS=OFF -DNCNN_RUNTIME_CPU=OFF -DNCNN_RVV=ON -DNCNN_SIMPLEOCV=ON -DNCNN_BUILD_EXAMPLES=ON .. && make- Run benchncnn on the target
more | 其他 | その他
@Ratizux 你好兄弟,解决了这个问题吗?
@Ratizux 你好兄弟,解决了这个问题吗?
没有,不确定是 Milk-V Duo 工具链还是别的问题,之后就没有在 Duo 上碰过它了
Illegal instruction 是编译参数有问题,cmake toolchain 用 https://github.com/Tencent/ncnn/blob/master/toolchains/c906-v240.toolchain.cmake
试了下,还是Killed。(所使用的的工具链:Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.4.0)
[root@milkv-duo]~/ncnn/duo-build/benchmark# ./benchncnn
syscall error -1
loop_count = 4
num_threads = 1
powersave = 0
gpu_device = -1
cooling_down = 1
Killed
试了下,还是Killed。(所使用的的工具链:Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.4.0)
[root@milkv-duo]~/ncnn/duo-build/benchmark# ./benchncnn syscall error -1 loop_count = 4 num_threads = 1 powersave = 0 gpu_device = -1 cooling_down = 1 Killed
Killed 应该是内存不足的原因,可以跑 fastestdet 这类超小模型,或者把 milkv-duo 内存扩大些
试了下,还是Killed。(所使用的的工具链:Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.4.0)
[root@milkv-duo]~/ncnn/duo-build/benchmark# ./benchncnn syscall error -1 loop_count = 4 num_threads = 1 powersave = 0 gpu_device = -1 cooling_down = 1 KilledKilled 应该是内存不足的原因,可以跑 fastestdet 这类超小模型,或者把 milkv-duo 内存扩大些
我这边测试了下,目前有三个模型的跑分测试是通过的:yolo-fastest-1.1、yolo-fastestv2和FastestDet。
[root@milkv-duo]~/benchmark# ./benchncnn
syscall error -1
loop_count = 4
num_threads = 1
powersave = 0
gpu_device = -1
cooling_down = 1
yolo-fastest-1.1 min = 476.45 max = 885.46 avg = 589.69
yolo-fastestv2 min = 232.36 max = 237.37 avg = 235.09
FastestDet min = 245.77 max = 248.08 avg = 246.99
这个是使用了玄铁900系的工具链(Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.4.0)的结果,后面我抽空再试试duo-sdk的结果。
试了下,还是Killed。(所使用的的工具链:Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.4.0)
[root@milkv-duo]~/ncnn/duo-build/benchmark# ./benchncnn syscall error -1 loop_count = 4 num_threads = 1 powersave = 0 gpu_device = -1 cooling_down = 1 KilledKilled 应该是内存不足的原因,可以跑 fastestdet 这类超小模型,或者把 milkv-duo 内存扩大些
我这边测试了下,目前有三个模型的跑分测试是通过的:yolo-fastest-1.1、yolo-fastestv2和FastestDet。
[root@milkv-duo]~/benchmark# ./benchncnn syscall error -1 loop_count = 4 num_threads = 1 powersave = 0 gpu_device = -1 cooling_down = 1 yolo-fastest-1.1 min = 476.45 max = 885.46 avg = 589.69 yolo-fastestv2 min = 232.36 max = 237.37 avg = 235.09 FastestDet min = 245.77 max = 248.08 avg = 246.99这个是使用了玄铁900系的工具链(Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.4.0)的结果,后面我抽空再试试duo-sdk的结果。
开了linux的swap 内存吗
试了下,还是Killed。(所使用的的工具链:Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.4.0)
[root@milkv-duo]~/ncnn/duo-build/benchmark# ./benchncnn syscall error -1 loop_count = 4 num_threads = 1 powersave = 0 gpu_device = -1 cooling_down = 1 KilledKilled 应该是内存不足的原因,可以跑 fastestdet 这类超小模型,或者把 milkv-duo 内存扩大些
我这边测试了下,目前有三个模型的跑分测试是通过的:yolo-fastest-1.1、yolo-fastestv2和FastestDet。
[root@milkv-duo]~/benchmark# ./benchncnn syscall error -1 loop_count = 4 num_threads = 1 powersave = 0 gpu_device = -1 cooling_down = 1 yolo-fastest-1.1 min = 476.45 max = 885.46 avg = 589.69 yolo-fastestv2 min = 232.36 max = 237.37 avg = 235.09 FastestDet min = 245.77 max = 248.08 avg = 246.99这个是使用了玄铁900系的工具链(Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.4.0)的结果,后面我抽空再试试duo-sdk的结果。
开了linux的swap 内存吗
我当时是直接运行benchncnn的,并没开swap内存。