ncnn icon indicating copy to clipboard operation
ncnn copied to clipboard

Illegal Instruction on Milk-V Duo

Open Ratizux opened this issue 2 years ago • 8 comments

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 | 复现步骤 | 再現方法

  1. Extract duo-app-sdk-v1.2.0
  2. export RISCV_ROOT_PATH="/path-to-duo-sdk/riscv64-linux-musl-x86_64"
  3. 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")
  1. cd ncnn-20231027-full-source && mkdir build && cd build
  2. cmake -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
  3. Run benchncnn on the target

more | 其他 | その他

Ratizux avatar Nov 03 '23 10:11 Ratizux

@Ratizux 你好兄弟,解决了这个问题吗?

HuPengsheet avatar Dec 10 '23 06:12 HuPengsheet

@Ratizux 你好兄弟,解决了这个问题吗?

没有,不确定是 Milk-V Duo 工具链还是别的问题,之后就没有在 Duo 上碰过它了

Ratizux avatar Dec 16 '23 14:12 Ratizux

Illegal instruction 是编译参数有问题,cmake toolchain 用 https://github.com/Tencent/ncnn/blob/master/toolchains/c906-v240.toolchain.cmake

nihui avatar Dec 18 '23 03:12 nihui

试了下,还是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

Chrithon avatar Dec 18 '23 04:12 Chrithon

试了下,还是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 内存扩大些

nihui avatar Dec 18 '23 07:12 nihui

试了下,还是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 内存扩大些

我这边测试了下,目前有三个模型的跑分测试是通过的: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的结果。

Chrithon avatar Dec 18 '23 13:12 Chrithon

试了下,还是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 内存扩大些

我这边测试了下,目前有三个模型的跑分测试是通过的: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 内存吗

HuPengsheet avatar Dec 19 '23 04:12 HuPengsheet

试了下,还是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 内存扩大些

我这边测试了下,目前有三个模型的跑分测试是通过的: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内存。

Chrithon avatar Dec 19 '23 04:12 Chrithon