GDKとLLVM
      (横浜PF部向け)
               でむら なりかず

Jan 27, 2013
自己紹介
 ●
     黄色とげとげの人です
     (@checkela)
     –   富山から飛行機に乗ってやって来
         ました
     –   無事に飛んでよかったです(笑)
 ●
     コード書いたり、本書いたりし
     ています
     –   文章を書く量 < コードを書く量
         が今年の目標
Jan 27, 2013
NDK本第2版



                  数少ないNDK本の一つ。
                  昨年末に発売になりました
                  買ってね
                  http://www.amazon.co.jp/gp/product/4798036307




Jan 27, 2013
日経Linuxに連載中(全3回)




連載開始してます。
全三回だから、気がつくと終わっているかもよ。
早いところ買って読んでね
Jan 27, 2013
宣伝終わり


Jan 27, 2013
横浜Androidプラットフォーム部
          改め
 横浜Android and モバイルOS
     プラットフォーム部

Jan 27, 2013
記念すべき最初の発表


Jan 27, 2013
ゆるめに行きます(笑)
       ほとんどコード
        出てきません

Jan 27, 2013
結論からいうと
       「LLVMやっとけ」

Jan 27, 2013
2012年Android
Advent Calendar
 向けのエントリー
Jan 27, 2013
NDKの後継開発キット-GDK




Jan 27, 2013
               http://blog.cnu.jp/2012/12/11/android-gdk/
GDKというtoolkitがリ
   リースされるかも!?

GDK使うとこんなメリット
     あるよ!
Jan 27, 2013
濃いめのエントリー
      としては
    予想以上の反響

Jan 27, 2013
(色々な意味で)
  低い方が好きな方々向け
      におさらい

Jan 27, 2013
GDKとは

●
    NDKの後継開発キット
●
    キモはgcc → LLVM/clang


    Jan 27, 2013
LLVM/clang
               エルエルブイエム   クラン(グ)
               と読みます      と読みます




Jan 27, 2013
LLVM/clang


Jan 27, 2013
LLVM =
   LowLevelVirtualMachine
     低レイヤー向け仮想マシン
    CPUをVM化したような感じ

 コンパイル、リンク、ランタイム
     全部面倒見るよ!
Jan 27, 2013
だいたいの流れ




Jan 27, 2013
                   http://www.aosabook.org/en/llvm.html
LLVMのうれしい点
●
    CPUアーキテクチャ、言語から独立
●
    ライセンスがBSDライセンス似
    –   University of Illinois Open Source
        License
●
    JIT、AOT、GCがある
    – 普通のCPUよりスゴイ!

Jan 27, 2013
LLVM/clang


Jan 27, 2013
Clang
           =
      (荒っぽく言うと)
        gcc互換
       フロントエンド
Jan 27, 2013
clang=gcc互換のフロントエンド

               gcc向けのコードが
               そのままビルド可能




Jan 27, 2013
                     http://www.aosabook.org/en/llvm.html
LLVMはAndroidで
既に使われているよ!

Jan 27, 2013
RenderScript

   Renderscript provides a
   platform-independent
   computation engine that
   operates at the native level.



         LLVMが裏で支えているから
Jan 27, 2013
話をGDKに戻して


Jan 27, 2013
GDK
     =
NDKの後継開発キット

Jan 27, 2013
なぜそう言えるのか?


Jan 27, 2013
gdk-buildのコメント
               gdk関連のコードをビルドするため
               のコマンド

# Ensure we get the full path of this script's directory
# this is needed if the caller uses the -C <path> GNU Make
# option, as in:
#
#   cd ndk
#   ./ndk-build -C <project-path>
#

Jan 27, 2013
どう見てもndk-
buildのコピーです。
 本当にありが(ry
Jan 27, 2013
GDKのメリット


Jan 27, 2013
(1)
 CPUアーキテクチャの
    分別が不要

Jan 27, 2013
LLVMがもともとそういう技術だし




Jan 27, 2013
(2)
コードがシンプルになる

Jan 27, 2013
JNIを利用しないから!
      JNI(NDK)利用時
     #include <jni.h>

     jint
     Java_com_example_HelloLLVM_addValues( JNIEnv*
     env,jobject thiz, jint a, jint b )
     {
        return a + b;
     }

               GDK利用時
               int addValues(int a, int b){
                  return a+b;
Jan 27, 2013   }
(3)
       ソフトが高速化する
          (らしい)

Jan 27, 2013
gcc vs LLVM
 ●
     NDKサンプルPlasmaで検証した例


     LLVMでは80 fps,
                                                     約4倍の高速化!
 ●


 ●
     GCCでは19 fps.
 ●
     Nexus Sにて
     http://www.kandroid.org/board/data/board/conference/file_in_body/1/610th_kandroidllvmclang.pdf




Jan 27, 2013
GDKは本採用となる
     のか?

Jan 27, 2013
本採用となる気がする

               根拠は2つ
Jan 27, 2013
(1)Android NDKr8cより
   Clang3.1をサポート(実験的に)




               http://developer.android.com/tools/sdk/ndk/index.html
Jan 27, 2013
(2)
対Oracleとの裁判対策

   最悪の結果を考慮して
     のリスクヘッジ
Jan 27, 2013
Android開発当初は、
そこまで深く考えてな
 かったんだろうなあ

Jan 27, 2013
LLVMの今後

Jan 27, 2013
割と広がりを見せそうな気配


 ●
     FreeBSDでLLVM
 ●
     組み込みLinuxでLLVM
 ●
     LLVMをFPGAで

Jan 27, 2013
LLVM対応はBSD系
  が先行している

Jan 27, 2013
FreeBSD 10-CURRENTより
  デフォルトコンパライラが
    LLVM/clangへ移行




               http://gihyo.jp/admin/clip/01/fdt/201211/12
Jan 27, 2013
理由
GPLv3がFreeBSDの
  目標と合わない
       http://unix.stackexchange.com/questions/49906/why-is-freebsd-deprecating-
       gcc-in-favor-of-clang-llvm

               http://news.mynavi.jp/articles/2010/05/25/bsdcan01/index.html


Jan 27, 2013
Linuxカーネルも
       LLVM対応は進行中

Jan 27, 2013
Embedded Linux
               Conference 2013
    LLVMLinux: Compiling the
    Linux Kernel with LLVM




Jan 27, 2013
LLVMの
               ハードウェア化

Jan 27, 2013
LLVMをFPGAへ




Jan 27, 2013
                 http://rssi.ncsa.illinois.edu/proceedings/academic/Lee.pdf
ARMプロセッサ



将来はLLVMに...?




Jan 27, 2013
           http://www.arm.com/ja/products/processors/instruction-set-architectures/index.php
基幹技術としてLLVM
   は押さえておくべき

Jan 27, 2013
ご清聴ありがとう
          ございました

Jan 27, 2013

GDKとLLVM(横浜PF部向け)