gpt4 book ai didi

Android caffe Forward Prefilled() 在多线程对象中不起作用

转载 作者:搜寻专家 更新时间:2023-11-01 08:34:20 26 4
gpt4 key购买 nike

我在使用 m_caffe_net->forwardPrefilled 时遇到问题,但仅限于 android 线程情况。

我的算法是一个基本的caffe过程,例如:

加载模型->处理->得到结果。 (CPU模式)

如果我将代码集成到 ui 线程中,一切正常。但是Android说这不是一个好提示,因为它卡住了 gui。

我测试了线程、AsyncTask 和可运行对象,并且总是得到相同的 SIGSEV 11 错误

所以我在 Android Studio 中测试了我的调用堆栈,我注意到最后一个调用是 omp_get_num_threads。

enter image description here

在多核模式下是否需要使用 openmp set_num_threads omp 函数来执行 forwardPrefilled()?

我的示例与此类似:

https://github.com/sh1r0/caffe-android-demo

Caffe lib编译是这样的:

https://github.com/sh1r0/caffe-android-lib

提前致谢。

最佳答案

最后我找到了解决办法:

我在 caffe 脚本/build_caffe.sh 文件中禁用了 openmp 选项。

cmake -DCMAKE_TOOLCHAIN_FILE="${WD}/android-cmake/android.toolchain.cmake" \
-DANDROID_NDK="${NDK_ROOT}" \
-DCMAKE_BUILD_TYPE=Release \
-DANDROID_ABI="${ANDROID_ABI}" \
-DANDROID_NATIVE_API_LEVEL=21 \
-DANDROID_USE_OPENMP=OFF \
-DADDITIONAL_FIND_PATH="${ANDROID_LIB_ROOT}" \
-DBUILD_python=OFF \
-DBUILD_docs=OFF \
-DCPU_ONLY=ON \
-DUSE_LMDB=ON \
-DUSE_LEVELDB=OFF \
-DUSE_HDF5=OFF \
-DBLAS=${BLAS} \
-DBOOST_ROOT="${BOOST_HOME}" \
-DGFLAGS_INCLUDE_DIR="${GFLAGS_HOME}/include" \
-DGFLAGS_LIBRARY="${GFLAGS_HOME}/lib/libgflags.a" \
-DGLOG_INCLUDE_DIR="${GLOG_ROOT}/include" \
-DGLOG_LIBRARY="${GLOG_ROOT}/lib/libglog.a" \
-DOpenCV_DIR="${OPENCV_ROOT}" \
-DPROTOBUF_PROTOC_EXECUTABLE="${ANDROID_LIB_ROOT}/protobuf_host/bin/protoc" \
-DPROTOBUF_INCLUDE_DIR="${PROTOBUF_ROOT}/include" \
-DPROTOBUF_LIBRARY="${PROTOBUF_ROOT}/lib/libprotobuf.a" \
-DCMAKE_INSTALL_PREFIX="${ANDROID_LIB_ROOT}/caffe" \

结果有点慢,但它有效:)。

关于Android caffe Forward Prefilled() 在多线程对象中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37995729/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com