在MNN与opencl进行联合编译中,需要注意一些事项:
1、在MNN中cmakelists进行修改后
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
};
然后在进行交叉编译,请参考之前的链接
3、使用MNN进行CPU和GPU(opencl)在全志T507(GPU:mail31),进行模型耗时对比测试.
gpu的性能还是比较低的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)