aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar A. Unique TensorFlower <gardener@tensorflow.org>2017-01-11 13:59:05 -0800
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2017-01-11 14:10:00 -0800
commit54e2be2f62dc34fbaef0fd052ad28d656ede6535 (patch)
treebdd5957dc8238b70dfffef9a18bf6145bca4c935
parentab96b0910ecb05ed84a04d0c5d12f00c5f7e12b8 (diff)
Add an option to run inference on hvx into build script
Change: 144246159
-rw-r--r--tensorflow/contrib/makefile/Makefile4
-rwxr-xr-xtensorflow/contrib/makefile/build_all_android.sh52
-rw-r--r--tensorflow/core/kernels/hexagon/hexagon_control_wrapper.cc4
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));