2017/12/15

try Qualcomm NPE SDK

就是照著 snapdragon-neural-processing-engine 做
另外,forume 有一篇問到 625 - Forums - Snapdragon 625 (MSM8953) is available for using GPU?
I'd like to know that Snapdragon 625 is available for GPU.
 
On this URL, SnapDragon 625(MSM8953) supports SNPE.
 
https://developer.qualcomm.com/software/snapdragon-neural-processing-engine
 
Supported devices: 
SnapDragon 820, 835, 625, 626, 650, 652, 653, 660 and 630
 
So I measured to Qualcomm's SNPE demo app(alexnet) on MSM8953 device.
Then I changed device CPU to GPU on demo app, But it seems not to work GPU.
 
MSM8953
   CPU
      ave: 0.209[sec]
      max: 0.150[sec]
      min: 0.163[sec]
   
   GPU
      ave: 0.182[sec]
      max: 0.170[sec]
      min: 0.172[sec]
 
On MSM8953 device, libOpenCL.so is allocated here:
 
    /system/vendor/lib/libOpenCL.so
 
 
And on this document, it looks that SnapDragon 625(MSM8953) is not supported device.
 
snpe-1.2.2/doc/html/overview.html
Supported devices: 
SnapDragon 835, 821, 820, 660, 652
 
I'd like to know Snapdragon 625 (MSM8953) is not supported or not.
Or what is needed to check this device is available for GPU ?
(OpenCL's version or other infomation?)
 
FYI, other device's perfomance that I tried on Qualcomm's SNPE demo app(alexnet).
 
Snapdragon 820(MSM8996)
   CPU 
      ave: 1.777[sec]
      max: 1.947[sec]
      min: 1.671[sec]
 
   GPU
      ave: 0.035[sec]
      max: 0.033[sec]
      min: 0.034[sec]
 
Snapdragon 810(MSM8994)
 
   CPU
      ave: 0.216[sec]
      max: 0.167[sec]
      min: 0.187[sec]
 
   GPU
      ave: 0.077[sec]
      max: 0.048[sec]
      min: 0.059[sec]
看起來625 的 gpu 似乎無作用。


follow : getting start

要先註冊,所以用公司的 email 註冊。
password:AKB48hellokitty

登入,下載..snpe-1.8.0

為了跟 getting start 一樣,所以從 android studio 的 android sdk manager 安裝 ndk:install ndk from sdk manager
Download tensorflow model 時,要先active tensorflow (因為是裝在virtualenv):
source ~/tensorflow/bin/activate
python ./models/inception_v3/scripts/setup_inceptionv3.py -a ./temp-assets-cache -d
需要 Android-26 版本的 Sdk
用androidstudio build fail,說他不認識,沒辦法讀取 raw_alexnet.zip.flat 的 metadta.
用 command build 說找不到 gradlw-3.0.1

follow debug message,到 https://jcenter.bintray.com/com/android/tools/build/gradle/ 去看,只有 2.3.3,所以改 build.gradle:
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
    }
    
然後出現找不到 tools.jar..
apt-get install default-jdk..
build 成功。

adb install app-debug.apk 到 APQ8053EVB
要記得 adb remount,然後 安裝 3 次才成功,前兩次都是download 到一半 no response。
執行..
因為解析度的關係,影像幾乎看不到,但是一樣可以測試。
發現 使用 CPU 和 GPU 的差異不大(和論壇內容一致)

使用 alex 的 zenfone ? (625) 的手機測試:

sample program 內建5張圖:
分別可以選擇使用 cpu , gpu 辨識。

2017/12/12

phabricator -- test install

ref: 但是..
stretch (9), default php 版本是 7
所以第一個安裝就fail...
apt-get install git mysql-server apache2 dpkg-dev php5 php5-mysql php5-gd php5-dev php5-curl php-apc php5-cli php5-json
php-apc 沒有,然後 php5 的一堆not meet dependency..

所以先裝 php 就好...
就自動裝了 apache2, php7.0-cli, php7.0-json
其他還要自己裝 (?)

2017/12/11

test .. video from twitter embedded code..

這只是測試一下 twitter 的內嵌影片的標記

2017/12/7

就 download snpe-1.8.zip
解開,follow getting start, rename to snpe-sdk

follow instructions, install tensorflow on ~/tensorflow:
sudo apt-get install python-pip python-dev python-virtualenv 
mkdir ~/tensorflow; virtualenv --system-site-packages ~/tensorflow; source ~/tensorflow/bin/activate 
pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.0-cp27-none-linux_x86_64.whl
其實就是參考 tensorflow, intall linux

run dependencies.sh 和 check_python_depends.sh 檢查系統需要的 package 是不是都 OK 了。
設好環境變數 ANDROID_NDK_ROOT 之後,run tensorflow 的環境設定:
source ~/snpe-sdk/bin/envsetup.sh -t ~/tensorflow/
INFO: Setting TENSORFLOW_HOME=/home/charles-chang/tensorflow/
INFO: Found ANDROID_NDK_ROOT at /home/charles-chang/Android/Sdk/ndk-bundle
WARNING: Cannot find /home/charles-chang/snpe-sdk/lib/arm-android-gcc4.9/libgnustl_shared.so
         libgnustl_shared.so found at /home/charles-chang/Android/Sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/libgnustl_shared.so
         copying to /home/charles-chang/snpe-sdk/lib/arm-android-gcc4.9
INFO: Adding libgnustl_shared.so to /home/charles-chang/snpe-sdk/android/snpe-release.aar
  adding: jni/armeabi-v7a/libgnustl_shared.so (deflated 66%)
WARNING: Cannot find /home/charles-chang/snpe-sdk/lib/aarch64-android-gcc4.9/libgnustl_shared.so
         libgnustl_shared.so found at /home/charles-chang/Android/Sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/libs/arm64-v8a/libgnustl_shared.so
         copying to /home/charles-chang/snpe-sdk/lib/aarch64-android-gcc4.9
INFO: Adding libgnustl_shared.so to /home/charles-chang/snpe-sdk/android/snpe-release.aar
  adding: jni/arm64-v8a/libgnustl_shared.so (deflated 73%)

download tensorflow model
source ~/tensorflow/bin/active
python models/inception_v3/scripts/setup_inceptionv3.py -a ./temp-assets-cache -d



2021 update --

snpe-1.49
說需要知道 tensorflow install folder.
我是用 conda 安裝,所以是在
~/miniconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow

額外需要...說..
SDK Android binaries built with clang require libc++_shared.so which is shipped with the SDK. (See Platform Runtime Libraries below).
但是好像是用 ndk build native C++ program 才要?

這個在/usr/lib/x86_64-linux-gnu/libatomic.so.1
system ld path,所以應該不用 copy...

2017/11/8

MINIX 作者給 intel 的公開信

最近的大新聞,intel 讓 CPU 的 Management Engine Run MINIX。
然後就是 MINIX 的作者的公開信:An Open Letter to Intel

大意是說,他也是看報紙知道的...

但是他想想,前幾年好像就有些蛛絲馬跡了。
例如,intel 的工程師要求減少 memory footprint和把一些功能用 #ifdef 關閉。
也有討論過 license 問題。

他本人是覺得 OK, 本來 MINIX 3 就是 BSD license,
使用,修改者沒有義務通知原作者。

他很開心,但是他小小聲說,要是 intel 的工程師可以私底下通知他,他會更高興。


雖然 BSD license 而不是 GPL 可能是intel 選擇 MINIX 3 的原因。
但是他寧可相信是 MINIX 3 優異的 micro kernel 設計,高度模組化的 OS function ,
讓 intel 選擇了 MINIX。


* 後續:
computer vendors start disabling intel management engine

2017/11/3

build qt5-toolchain for Qt Creator

bitbake meta-toolchain-qt5
然後...
ERROR: meta-toolchain-qt5-1.0-r0 do_populate_sdk: Function failed: do_populate_sdk
ERROR: Logfile of failure stored in: /home/charles-chang/ann3/buildqtwayland/tmp/work/cortexa7hf-neon-poky-linux-gnueabi/meta-toolchain-qt5/1.0-r0/temp/log.do_populate_sdk.27843
ERROR: Task (/home/charles-chang/ann3/meta-qt5/recipes-qt/meta/meta-toolchain-qt5.bb:do_populate_sdk) failed with exit code '1'

去看一下 log ..有..
ERROR: Unable to install packages. Command 
'/home/charles-chang/ann3/buildqtwayland/tmp/sysroots/x86_64-linux/usr/bin/opkg 
 --volatile-cache 
 -f /home/charles-chang/ann3/buildqtwayland/tmp/work/cortexa7hf-neon-poky-linux-gnueabi/meta-toolchain-qt5/1.0-r0/opkg.conf
 -t /home/charles-chang/ann3/buildqtwayland/tmp/work/cortexa7hf-neon-poky-linux-gnueabi/meta-toolchain-qt5/1.0-r0/temp/ipktemp/
 -o /home/charles-chang/ann3/buildqtwayland/tmp/work/cortexa7hf-neon-poky-linux-gnueabi/meta-toolchain-qt5/1.0-r0/sdk/image/opt/poky-st/2.2.1/sysroots/cortexa7hf-neon-poky-linux-gnueabi
 --force_postinstall
 --prefer-arch-to-version
 install
 packagegroup-qt5-toolchain-target
 packagegroup-core-standalone-sdk-target
 packagegroup-core-standalone-sdk-target-dbg
' returned 255:
...
Installing libsegfault (2.24) on root.Collected errors:
 * calculate_dependencies_for: Cannot satisfy the following dependencies for packagegroup-qt5-toolchain-target:
 *      qtenginio-mkspecs *     qtenginio-qmlplugins *
 * opkg_solver_install: Cannot install package packagegroup-qt5-toolchain-target.
去devshell 單獨 run 這個 command 試試看...
$ bitbake meta-toolchain-qt5 -c devshell

# /home/charles-chang/ann3/buildqtwayland/tmp/sysroots/x86_64-linux/usr/bin/opkg --volatile-cache -f /home/charles-chang/ann3/buildqtwayland/tmp/work/cortexa7hf-neon-poky-linux-gnueabi/meta-toolchain-qt5/1.0-r0/opkg.conf -t /home/charles-chang/ann3/buildqtwayland/tmp/work/cortexa7hf-neon-poky-linux-gnueabi/meta-toolchain-qt5/1.0-r0/temp/ipktemp/ -o /home/charles-chang/ann3/buildqtwayland/tmp/work/cortexa7hf-neon-poky-linux-gnueabi/meta-toolchain-qt5/1.0-r0/sdk/image/opt/poky-st/2.2.1/sysroots/cortexa7hf-neon-poky-linux-gnueabi  --force_postinstall --prefer-arch-to-version   install packagegroup-qt5-toolchain-target packagegroup-core-standalone-sdk-target packagegroup-core-standalone-sdk-target-dbg

...
...
...
Collected errors:
 * calculate_dependencies_for: Cannot satisfy the following dependencies for packagegroup-qt5-toolchain-target:
 *      qtenginio-mkspecs *     qtenginio-qmlplugins * 
 * opkg_solver_install: Cannot install package packagegroup-qt5-toolchain-target.

然後,就去 b/recipes-qt/packagegroups/packagegroup-qt5-toolchain-target.bb 把 qtenginio-mkspec 和 qtenginio-qmlplugins 移除,再 build 一次,就沒有問題。

diff --git a/recipes-qt/packagegroups/packagegroup-qt5-toolchain-target.bb b/recipes-qt/packagegroups/packagegroup-qt5-toolchain-target.bb
index 25bc530..aa9631d 100755
--- a/recipes-qt/packagegroups/packagegroup-qt5-toolchain-target.bb
+++ b/recipes-qt/packagegroups/packagegroup-qt5-toolchain-target.bb
@@ -60,8 +60,6 @@ RDEPENDS_${PN} += " \
     qttranslations-qmlviewer \
     qttranslations-qtdeclarative \
     qtenginio-dev \
-    qtenginio-mkspecs \
-    ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'qtenginio-qmlplugins', '', d)} \
     ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'qtgraphicaleffects-qmlplugins', '', d)} \
     qtimageformats-dev \
     qtimageformats-plugins \

另一個,在 bitbake release image target 的 bb file 中,把 qtenginio-mkspecs , qtenginio-qmlplugins 加到 IMAGE_QT_OPTIONAL_PART 中 看看...
結果 build fail..
所以.. 大概真的 build 不出來...

到 這裡 下載 Qt Creator installer

sdk 和 qt creator 安裝參考:
直接 run, 不用 root,sudo .. 安裝在自己的 home 下 (~/pokyqtsdk/2.2.1)
Poky (Yocto Project Reference Distro) SDK installer version 2.2.1
=================================================================
Enter target directory for SDK (default: /opt/poky-st/2.2.1): /home/charles-chang/pokyqtsdk/2.2.1
You are about to install the SDK to "/home/charles-chang/pokyqtsdk/2.2.1". Proceed[Y/n]? 
Extracting SDK.................................................................................................................................................................................done
Setting it up...done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
 $ . /home/charles-chang/pokyqtsdk/2.2.1/environment-setup-cortexa7hf-neon-poky-linux-gnueabi


然後裝 qtcreator..
用 debian 付的,所以會莊一堆 for x86 的 tool..

然後就是最麻煩的設定 Qtcreator...
要設定的東西大概是...
  • 先新增加一個 target device -- 例如 imx, st, rpi..-- 其實這個就是你的 toolchain-sdk 板子
  • 再增加 tool,給他一個名子(通常就是 target device 的名子) -- g++, gcc -- 指定到sdk 安裝目錄中的 ooxx-g_++, ooxx-gcc
  • 設定 sdk 的 sysroot 的位置,qt creator 會自己找出Qt 版本和 qmake 位置
  • 把上面的 整合在 Kits -- 指定 Device, tool, sysroot 位置..
這樣就產生了 Kits
以後 New Project 就可以指定是用那一個 Kits

然後 new project 來測試,一直 fail, 說 sdk 裡的 lib (Gui, Core... etc) 都不合。
看一下 Makefile (qmake 產生的)。
CC = g++
沒有用 sdk 的環境變數 (OE_QMAKE_CC)
Makefile 一開始會有...
# Command: /home/charles-chang/pokyqtsdk/2.2.1/sysroots/x86_64-pokysdk-linux/usr/bin/qt5/qmake 
 -spec linux-g++ 
 CONFIG+=debug CONFIG+=qml_debug 
 -o Makefile ../ooow/ooow.pro
這格好像是錯的, -spec 應該要是 linux-oe-g++

所以去 Qt creator 的 OPtion , Kits 設定,有一項:Qt mkspec 是空的,填上 linux-oe-g++ 之後,clean 再 build,就 OK 了。

另外,要 run qtcreator 之前,要先 run sdk 的環境變術設定。