MNN icon indicating copy to clipboard operation
MNN copied to clipboard

android 无法使用opencl后端进行推理

Open minushuang opened this issue 2 years ago • 2 comments

平台(如果交叉编译请再附上交叉编译目标平台):

编译平台:mac 目标平台:android

Github版本:

9aef4b6ff4ad297bec728317e7b526ad8544a6e7

编译方式:

1.打开根目录下的cmakelist.txt opencl编译选项的开关

# backend options
option(MNN_METAL "Enable Metal" OFF)
option(MNN_OPENCL "Enable OpenCL" ON)
option(MNN_OPENGL "Enable OpenGL" ON)
option(MNN_VULKAN "Enable Vulkan" ON)
option(MNN_ARM82 "Enable ARM82" OFF)
option(MNN_ONEDNN "Enable oneDNN" OFF)
option(MNN_AVX512 "Enable AVX512" OFF)
option(MNN_CUDA "Enable CUDA" OFF)
option(MNN_TENSORRT "Enable TensorRT" OFF)
option(MNN_COREML "Enable CoreML" OFF)

2.进入android工程,执行编译

cd project/android
mkdir build_32 && cd build_32 && ../build_32.sh for armv7
mkdir build_64 && cd build_64 && ../build_64.sh for armv8

编译通过

将编译生成的libMNN_CL.so拷贝到我的项目目录下,在项目的cmakelist中添加libMNN_CL.so链接依赖,并在代码中

System.loadLibrary("MNN");
System.loadLibrary("MNN_CL");
System.loadLibrary("mnncore");

运行后,提示 E/linker: library "/system/vendor/lib64/libOpenCL.so" ("/vendor/lib64/libOpenCL.so") needed or dlopened by "/data/app/~~S-0OWZhOKUsolExRFCMjrQ==/com.taobao.android.mnndemo-tPHUPNGUrLS3eOeDgdXEow==/base.apk!/lib/arm64-v8a/libMNN_CL.so" is not accessible for the namespace: [name="classloader-namespace", ld_library_paths="", default_library_paths="/data/app/~~S-0OWZhOKUsolExRFCMjrQ==/com.taobao.android.mnndemo-tPHUPNGUrLS3eOeDgdXEow==/lib/arm64:/data/app/~~S-0OWZhOKUsolExRFCMjrQ==/com.taobao.android.mnndemo-tPHUPNGUrLS3eOeDgdXEow==/base.apk!/lib/arm64-v8a", permitted_paths="/data:/mnt/expand:/data/data/com.taobao.android.mnndemo"]

minushuang avatar Aug 20 '22 08:08 minushuang

android 什么设备,另外这个日志看着不一定有问题?

jxt1234 avatar Aug 23 '22 11:08 jxt1234

手机:oppo find x3 android版本: 12 mnn_cl依赖的libOpenCL库,无法访问,然后会走cpu推理。我想要opencl加速。 不过用vulkan可以。

minushuang avatar Aug 23 '22 12:08 minushuang

Android API 31以后,xml里面要额外配置uses-native-library,这样APP才能链接到系统的libOpenCL.so。 https://developer.android.google.cn/guide/topics/manifest/uses-native-library-element?hl=zh-cn

paulwgw88 avatar Jan 12 '23 06:01 paulwgw88

Android API 31以后,xml里面要额外配置uses-native-library,这样APP才能链接到系统的libOpenCL.so。 https://developer.android.google.cn/guide/topics/manifest/uses-native-library-element?hl=zh-cn

太强了大佬,解决了

HEMOURENNN avatar May 15 '24 02:05 HEMOURENNN