MNN aarch64平台交叉编译

MNN aarch64平台交叉编译

背景

虽然用了MNN挺长一段时间,却没有用交叉编译环境编译过MNN, 手上的firefly 3328板子吃灰了很久, 这次拿出来跑给net看看速度怎样。
我主机系统:Ubuntu20, 板子型号:firefly 3328, cpu有4个cotex A53 核,具体如下:

firefly@firefly:~/code/test_mnn/build$ cat /proc/cpuinfo 
processor       : 0
BogoMIPS        : 48.00
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4

processor       : 1
BogoMIPS        : 48.00
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4

processor       : 2
BogoMIPS        : 48.00
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4

processor       : 3
BogoMIPS        : 48.00
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4

Serial          : b2815d42d3832002

环境配置

MNN文档中对交叉编译有些介绍,但是其下载的文件有问题, 没法直接用。所以我还是重新写下吧。
1. 下载MNN代码到本地
2. 下载linaro交叉编译环境, 我的是aarch64,所以从链接下载了** gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz**,下载后解压到本地路径,并将其加入到cross_compile_toolchain环境变量:export cross_compile_toolchain=/home/lyy/258G/code/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu
3. 下面就可以开始编译MNN了, MNN目录下:

	mkdir build && cd build
	cmake .. \
	-DCMAKE_BUILD_TYPE=Release \
	-DMNN_BUILD_DEMO=ON \
	-DMNN_BUILD_BENCHMARK=true \
	-DCMAKE_SYSTEM_NAME=Linux \
	-DCMAKE_SYSTEM_VERSION=1 \
	-DCMAKE_SYSTEM_PROCESSOR=aarch64 \
	-DCMAKE_C_COMPILER=${cross_compile_toolchain}/bin/aarch64-linux-gnu-gcc \
	-DCMAKE_CXX_COMPILER=${cross_compile_toolchain}/bin/aarch64-linux-gnu-g++
	make -j4

上面加上了build_demobuild_bencmark两个flag, 为了方便后面的测试。编译完成后,将其copy到板子上, 同时也要将 bencmark/models文件夹copy到板子上,这里面都是mnn模型库, 后面会用到。

测试

ssh登陆板子, 进入刚才copy的buid目录开始测试。

./benchmark.out ../models 10 0

其中models为刚才复制过来的模型路径, 10为运行10次, 0表示backend为cpu。
每个参数的意思:

benchmark.out models_folder [loop_count] [warmup] [forwardtype] [numberThread] [precision]

输出结果:

MNN benchmark
Forward type: **CPU** thread=4** precision=2
--------> Benchmarking... loop = 10, warmup = 0
[ - ] resnet-v2-50.mnn            max =  943.660ms  min =  469.640ms  avg =  546.525ms
[ - ] SqueezeNetV1.0.mnn          max =  112.491ms  min =  110.247ms  avg =  111.333ms
[ - ] mobilenet-v1-1.0.mnn        max =   97.783ms  min =   93.974ms  avg =   94.855ms
[ - ] inception-v3.mnn            max = 2295.329ms  min =  848.981ms  avg = 1015.068ms
[ - ] MobileNetV2_224.mnn         max =  175.199ms  min =   56.063ms  avg =   73.848ms

板子cpu还是比较羸弱的。。。。
当然你也可以根据文档中的介绍自己转换模型再跑下其他测试model, 这里就不一一介绍了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值