Add an option to run inference on hvx into build script
Change: 144246159
This commit is contained in:
parent
ab96b0910e
commit
54e2be2f62
@ -21,7 +21,7 @@ echo "false")
|
||||
|
||||
# Hexagon integration
|
||||
ifdef HEXAGON_LIBS
|
||||
LIBGEMM_WRAPPER := $(HEXAGON_LIBS)/libgemm_wrapper.so
|
||||
LIBGEMM_WRAPPER := $(HEXAGON_LIBS)/libhexagon_controller.so
|
||||
ifeq ($(shell test -f $(LIBGEMM_WRAPPER) 2> /dev/null; echo $$?), 0)
|
||||
$(info "Use hexagon libs at " $(LIBGEMM_WRAPPER))
|
||||
else
|
||||
@ -271,7 +271,7 @@ ifeq ($(TARGET),ANDROID)
|
||||
|
||||
ifdef HEXAGON_LIBS
|
||||
INCLUDES += -I$(HEXAGON_INCLUDE)
|
||||
LIBS += -lgemm_wrapper
|
||||
LIBS += -lhexagon_controller
|
||||
LDFLAGS += -L$(HEXAGON_LIBS)
|
||||
CXXFLAGS += -DUSE_HEXAGON_LIBS
|
||||
endif
|
||||
|
@ -22,21 +22,32 @@ usage() {
|
||||
echo "-s [sub_makefiles] sub makefiles separated by white space"
|
||||
echo "-t [build_target] build target for Android makefile [default=all]"
|
||||
echo "-T only build tensorflow"
|
||||
echo "-x use hexagon library located at ../hexagon/<libs and include>"
|
||||
echo "-x use hexagon library located at tensorflow/contrib/makefile/downloads/hexagon"
|
||||
echo "-X download hexagon deps and run hexagon_graph_execution"
|
||||
exit 1
|
||||
}
|
||||
|
||||
download_and_push() {
|
||||
URL="$1"
|
||||
LOCAL_DEST="$2"
|
||||
ANDROID_DEST="$3"
|
||||
curl -Ls "${URL}" -o "${LOCAL_DEST}"
|
||||
adb shell mkdir -p "${ANDROID_DEST}"
|
||||
adb push "${LOCAL_DEST}" "${ANDROID_DEST}"
|
||||
}
|
||||
|
||||
if [[ -z "${NDK_ROOT}" ]]; then
|
||||
echo "NDK_ROOT should be set as an environment variable" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
while getopts "s:t:Tx" opt_name; do
|
||||
while getopts "s:t:TxX" opt_name; do
|
||||
case "$opt_name" in
|
||||
s) SUB_MAKEFILES="${OPTARG}";;
|
||||
t) BUILD_TARGET="${OPTARG}";;
|
||||
T) ONLY_MAKE_TENSORFLOW="true";;
|
||||
x) USE_HEXAGON="true";;
|
||||
X) DOWNLOAD_AND_USE_HEXAGON="true";;
|
||||
*) usage;;
|
||||
esac
|
||||
done
|
||||
@ -49,6 +60,8 @@ cd ${SCRIPT_DIR}/../../../
|
||||
source "${SCRIPT_DIR}/build_helper.subr"
|
||||
JOB_COUNT="${JOB_COUNT:-$(get_job_count)}"
|
||||
|
||||
HEXAGON_DOWNLOAD_PATH="tensorflow/contrib/makefile/downloads/hexagon"
|
||||
|
||||
if [[ "${ONLY_MAKE_TENSORFLOW}" != "true" ]]; then
|
||||
# Remove any old files first.
|
||||
make -f tensorflow/contrib/makefile/Makefile clean
|
||||
@ -63,10 +76,30 @@ else
|
||||
make -f tensorflow/contrib/makefile/Makefile clean_except_protobuf_libs
|
||||
fi
|
||||
|
||||
if [[ "${DOWNLOAD_AND_USE_HEXAGON}" == "true" ]]; then
|
||||
URL_BASE="https://storage.googleapis.com/download.tensorflow.org"
|
||||
|
||||
rm -rf "${HEXAGON_DOWNLOAD_PATH}"
|
||||
mkdir -p "${HEXAGON_DOWNLOAD_PATH}/libs"
|
||||
|
||||
download_and_push "${URL_BASE}/deps/hexagon/libhexagon_controller.so" \
|
||||
"${HEXAGON_DOWNLOAD_PATH}/libs/libhexagon_controller.so" "/data/local/tmp"
|
||||
|
||||
download_and_push "${URL_BASE}/deps/hexagon/libhexagon_nn_skel.so" \
|
||||
"${HEXAGON_DOWNLOAD_PATH}/libs/libhexagon_nn_skel.so" "/vendor/lib/rfsa/adsp"
|
||||
|
||||
download_and_push "${URL_BASE}/example_images/img_299x299.jpg" \
|
||||
"${HEXAGON_DOWNLOAD_PATH}/img_299x299.jpg" "/data/local/tmp"
|
||||
|
||||
USE_HEXAGON="true"
|
||||
SUB_MAKEFILES="$(pwd)/tensorflow/contrib/makefile/sub_makefiles/hexagon_graph_execution/Makefile.in"
|
||||
BUILD_TARGET="hexagon_graph_execution"
|
||||
fi
|
||||
|
||||
if [[ "${USE_HEXAGON}" == "true" ]]; then
|
||||
HEXAGON_PARENT_DIR=$(cd ../hexagon && pwd)
|
||||
HEXAGON_PARENT_DIR=$(cd "${HEXAGON_DOWNLOAD_PATH}" && pwd)
|
||||
HEXAGON_LIBS="${HEXAGON_PARENT_DIR}/libs"
|
||||
HEXAGON_INCLUDE=$(cd tensorflow/core/platform/hexagon && pwd)
|
||||
HEXAGON_INCLUDE=$(cd "tensorflow/core/platform/hexagon" && pwd)
|
||||
fi
|
||||
|
||||
if [[ -z "${BUILD_TARGET}" ]]; then
|
||||
@ -80,3 +113,14 @@ else
|
||||
HEXAGON_LIBS="${HEXAGON_LIBS}" HEXAGON_INCLUDE="${HEXAGON_INCLUDE}" \
|
||||
SUB_MAKEFILES="${SUB_MAKEFILES}" "${BUILD_TARGET}"
|
||||
fi
|
||||
|
||||
if [[ "${DOWNLOAD_AND_USE_HEXAGON}" == "true" ]]; then
|
||||
ANDROID_EXEC_FILE_MODE=755
|
||||
echo "Run hexagon_graph_execution"
|
||||
adb push -p "./tensorflow/contrib/makefile/gen/bin/hexagon_graph_execution" "/data/local/tmp/"
|
||||
adb wait-for-device
|
||||
adb shell chmod "${ANDROID_EXEC_FILE_MODE}" "/data/local/tmp/hexagon_graph_execution"
|
||||
adb wait-for-device
|
||||
adb shell 'LD_LIBRARY_PATH=/data/local/tmp:$LD_LIBRARY_PATH' \
|
||||
"/data/local/tmp/hexagon_graph_execution"
|
||||
fi
|
||||
|
@ -26,9 +26,9 @@ limitations under the License.
|
||||
namespace tensorflow {
|
||||
|
||||
const bool SHOW_DBG_IN_SOC = false;
|
||||
const bool DBG_DUMP_RESULT = false;
|
||||
const bool DBG_USE_DUMMY_INPUT = false;
|
||||
const bool DBG_USE_SAMPLE_INPUT = false;
|
||||
const bool DBG_SHOW_RESULT = false;
|
||||
const int64 FLAG_ENABLE_PANDA_BINARY_INPUT = 0x01;
|
||||
|
||||
#ifdef USE_HEXAGON_LIBS
|
||||
@ -213,7 +213,7 @@ bool HexagonControlWrapper::ReadOutputNode(
|
||||
// TODO: Accept all results
|
||||
std::get<2>(output) = DT_FLOAT;
|
||||
outputs->emplace_back(output);
|
||||
if (DBG_DUMP_RESULT) {
|
||||
if (DBG_SHOW_RESULT) {
|
||||
const int byte_size = std::get<1>(output);
|
||||
const int element_count = byte_size / sizeof(float);
|
||||
const float* float_array = reinterpret_cast<float*>(std::get<0>(output));
|
||||
|
Loading…
Reference in New Issue
Block a user