MNN aarch64平台交叉编译

本文档详细记录了如何在Ubuntu 18.04上为Aarch64平台交叉编译MNN深度学习框架的过程,包括环境配置、编译选项设置以及解决OpenCL初始化错误的方法。通过添加特定的OpenCL库路径,确保在全志T507板子上的顺利运行。
摘要由CSDN通过智能技术生成

MNN aarch64平台交叉编译

MNN是一个非常实用的深度学习推理框架,今天在华为笔记本ubuntu18.04上进行MNN的交叉编译,并在全志T507进行部署

2、环境配置

(1) MNN选择master版本(1.2.0tag版本有错误)
(2)下载linaro交叉编译环境, 我的是aarch64,

3. 下面就可以开始编译MNN了, MNN目录下:

	mkdir build && cd build
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DMNN_BUILD_DEMO=ON \
-DMNN_BUILD_BENCHMARK=true \
-DCMAKE_SYSTEM_NAME=Linux \
-DMNN_BUILD_QUANTOOLS=true \
-DMNN_USE_INT8_FAST=true \
-DMNN_BUILD_TEST=true\
-DMNN_OPENCL=ON \
-DCMAKE_SYSTEM_VERSION=1 \
-DCMAKE_SYSTEM_PROCESSOR=aarch64 \
-DCMAKE_SYSTEM_PROCESSOR=aarch64 -DCMAKE_C_COMPILER=/shihj_mnt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc \
-DCMAKE_CXX_COMPILER=/shihj_mnt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ \
-DCMAKE_INSTALL_PREFIX=/shihj_mnt/MNN_OPENCL_INSTALL \

# -DMNN_BUILD_CONVERTER=true \
make -j4

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

-DMNN_BUILD_CONVERTER=true 编译报错,转换在本地转

测试

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

2、在source/backend/opencl/core/runtime中OpenCLWarpper.cpp中文件进行修改。否则在编译过程中不报错,而在执行过程报以下错误:

OpenCL init error, fallback ..

例如我们使用全志T507的liunx系统进行开发,需要把liunx下opencl链接库进行添加和修改

static const std::vector<std::string> gOpencl_library_paths = {
 
#if defined(__APPLE__) || defined(__MACOSX)
    "libOpenCL.so", "/System/Library/Frameworks/OpenCL.framework/OpenCL"
#elif defined(__ANDROID__)
    "libOpenCL.so",
    "libGLES_mali.so",
    "libmali.so",
#if defined(__aarch64__)
    // Qualcomm Adreno
    "/system/vendor/lib64/libOpenCL.so",
    "/system/lib64/libOpenCL.so",
    // Mali
    "/system/vendor/lib64/egl/libGLES_mali.so",
    "/system/lib64/egl/libGLES_mali.so",
#else
    // Qualcomm Adreno
    "/system/vendor/lib/libOpenCL.so", "/system/lib/libOpenCL.so",
    // Mali
    "/system/vendor/lib/egl/libGLES_mali.so", "/system/lib/egl/libGLES_mali.so",
    // other
    "/system/vendor/lib/libPVROCL.so", "/data/data/org.pocl.libs/files/lib/libpocl.so"
#endif
#elif defined(__linux__)
    // "/usr/lib/libOpenCL.so",
    // "/usr/local/lib/libOpenCL.so",
    // "/usr/local/lib/libpocl.so",
    // "/usr/lib64/libOpenCL.so",
    // "/usr/lib32/libOpenCL.so",
    // "libOpenCL.so"
    "/gzy_mnt/SDK/aarch64-linux-gnu-7.4.1/lib64/libmali.so.0",   //添加opencl动态链接库的路径
    "/gzy_mnt/SDK/aarch64-linux-gnu-7.4.1/lib64/libOpenCL.so.2"
/*
 *  0: System32, 1: SysWOW64
 *  --------------------------------------
 *  | Real CPU /          |  x64  |  x86  |
 *  |        / Target CPU |       |       |
 *  --------------------------------------
 *  |         x64         | 0 / 1 |   1   |
 *  --------------------------------------
 *  |         x86         | Error |   0   |
 *  --------------------------------------
 *  0 / 1: 0 if OpenCL.dll (System32, 64bit on x64), otherwise 1 (SysWOW64, 32bit compatible on 64bit OS)
 */
#elif defined(_WIN64)
    "C:/Windows/System32/OpenCL.dll",
    "C:/Windows/SysWOW64/OpenCL.dll"
#elif defined(_WIN32)
    "C:/Windows/SysWOW64/OpenCL.dll",
    "C:/Windows/System32/OpenCL.dll"
#endif
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值