diff options
author | A. Unique TensorFlower <gardener@tensorflow.org> | 2017-01-11 13:59:05 -0800 |
---|---|---|
committer | TensorFlower Gardener <gardener@tensorflow.org> | 2017-01-11 14:10:00 -0800 |
commit | 54e2be2f62dc34fbaef0fd052ad28d656ede6535 (patch) | |
tree | bdd5957dc8238b70dfffef9a18bf6145bca4c935 | |
parent | ab96b0910ecb05ed84a04d0c5d12f00c5f7e12b8 (diff) |
Add an option to run inference on hvx into build script
Change: 144246159
-rw-r--r-- | tensorflow/contrib/makefile/Makefile | 4 | ||||
-rwxr-xr-x | tensorflow/contrib/makefile/build_all_android.sh | 52 | ||||
-rw-r--r-- | tensorflow/core/kernels/hexagon/hexagon_control_wrapper.cc | 4 |
3 files changed, 52 insertions, 8 deletions
diff --git a/tensorflow/contrib/makefile/Makefile b/tensorflow/contrib/makefile/Makefile index 2bf246bdf9..97d963ede2 100644 --- a/tensorflow/contrib/makefile/Makefile +++ b/tensorflow/contrib/makefile/Makefile @@ -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 diff --git a/tensorflow/contrib/makefile/build_all_android.sh b/tensorflow/contrib/makefile/build_all_android.sh index c826431dea..3d80f0fd2d 100755 --- a/tensorflow/contrib/makefile/build_all_android.sh +++ b/tensorflow/contrib/makefile/build_all_android.sh @@ -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 diff --git a/tensorflow/core/kernels/hexagon/hexagon_control_wrapper.cc b/tensorflow/core/kernels/hexagon/hexagon_control_wrapper.cc index 1648a54f2f..c6fb461c42 100644 --- a/tensorflow/core/kernels/hexagon/hexagon_control_wrapper.cc +++ b/tensorflow/core/kernels/hexagon/hexagon_control_wrapper.cc @@ -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)); |