Enviar búsqueda
Cargar
Let's play with Goldfish
•
0 recomendaciones
•
5,970 vistas
Tetsuyuki Kobayashi
Seguir
How to build android emulator And quick review of Eclair source release.
Leer menos
Leer más
Tecnología
Denunciar
Compartir
Denunciar
Compartir
1 de 24
Descargar ahora
Descargar para leer sin conexión
Recomendados
Zynq MPSoC勉強会 Codec編
Zynq MPSoC勉強会 Codec編
Tetsuya Morizumi
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
Mr. Vengineer
ZynqMPのQEMU
ZynqMPのQEMU
Mr. Vengineer
Adaptive optimization of JIT compiler
Adaptive optimization of JIT compiler
nothingcosmos
Zynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチ
Mr. Vengineer
Mruby jitプレゼン
Mruby jitプレゼン
miura1729
Synverll
Synverll
Hidemi Ishihara
【Unite Tokyo 2019】「禍つヴァールハイト」最大100人同時プレイ!モバイルオンラインゲームの実装テクニック
【Unite Tokyo 2019】「禍つヴァールハイト」最大100人同時プレイ!モバイルオンラインゲームの実装テクニック
UnityTechnologiesJapan002
Recomendados
Zynq MPSoC勉強会 Codec編
Zynq MPSoC勉強会 Codec編
Tetsuya Morizumi
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
Mr. Vengineer
ZynqMPのQEMU
ZynqMPのQEMU
Mr. Vengineer
Adaptive optimization of JIT compiler
Adaptive optimization of JIT compiler
nothingcosmos
Zynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチ
Mr. Vengineer
Mruby jitプレゼン
Mruby jitプレゼン
miura1729
Synverll
Synverll
Hidemi Ishihara
【Unite Tokyo 2019】「禍つヴァールハイト」最大100人同時プレイ!モバイルオンラインゲームの実装テクニック
【Unite Tokyo 2019】「禍つヴァールハイト」最大100人同時プレイ!モバイルオンラインゲームの実装テクニック
UnityTechnologiesJapan002
【Unite Tokyo 2019】「禍つヴァールハイト」最大100人同時プレイ!モバイルオンラインゲームの実装テクニック
【Unite Tokyo 2019】「禍つヴァールハイト」最大100人同時プレイ!モバイルオンラインゲームの実装テクニック
UnityTechnologiesJapan002
LLVM overview 20110122
LLVM overview 20110122
nothingcosmos
Task Spooler を試した
Task Spooler を試した
y-uti
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
Shotaro Uchida
Bhyve Internals
Bhyve Internals
Takuya ASADA
Vivado hls勉強会1(基礎編)
Vivado hls勉強会1(基礎編)
marsee101
Synthesijer zynq qs_20150316
Synthesijer zynq qs_20150316
Takefumi MIYOSHI
高位合成ツールVivado hlsのopen cv対応
高位合成ツールVivado hlsのopen cv対応
marsee101
Andoird版OpenCVのJavaサンプルを動かす
Andoird版OpenCVのJavaサンプルを動かす
shobomaru
Windows8でOpenCVを使ったAndroid(MOVERIO)開発体験したい
Windows8でOpenCVを使ったAndroid(MOVERIO)開発体験したい
Yukio Saito
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Mr. Vengineer
Synthesijer jjug 201504_01
Synthesijer jjug 201504_01
Takefumi MIYOSHI
Androidプログラミング初心者のためのゲームアプリ開発入門
Androidプログラミング初心者のためのゲームアプリ開発入門
Masahiko Mizuta
FPGAアクセラレータの作り方
FPGAアクセラレータの作り方
Mr. Vengineer
Vivado hls勉強会4(axi4 master)
Vivado hls勉強会4(axi4 master)
marsee101
Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究
Yuichi Yoshida
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Hiroshi Yoshida
Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6
Kazuo Asano (@kazuo_asa)
Vivado hls勉強会3(axi4 lite slave)
Vivado hls勉強会3(axi4 lite slave)
marsee101
Gstreamer Basics
Gstreamer Basics
Seiji Hiraki
Presentation1
Presentation1
IndiaMART InterMESH Limited
Bondia Lleida 15102012
Bondia Lleida 15102012
Bondia Lleida Sl
Más contenido relacionado
La actualidad más candente
【Unite Tokyo 2019】「禍つヴァールハイト」最大100人同時プレイ!モバイルオンラインゲームの実装テクニック
【Unite Tokyo 2019】「禍つヴァールハイト」最大100人同時プレイ!モバイルオンラインゲームの実装テクニック
UnityTechnologiesJapan002
LLVM overview 20110122
LLVM overview 20110122
nothingcosmos
Task Spooler を試した
Task Spooler を試した
y-uti
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
Shotaro Uchida
Bhyve Internals
Bhyve Internals
Takuya ASADA
Vivado hls勉強会1(基礎編)
Vivado hls勉強会1(基礎編)
marsee101
Synthesijer zynq qs_20150316
Synthesijer zynq qs_20150316
Takefumi MIYOSHI
高位合成ツールVivado hlsのopen cv対応
高位合成ツールVivado hlsのopen cv対応
marsee101
Andoird版OpenCVのJavaサンプルを動かす
Andoird版OpenCVのJavaサンプルを動かす
shobomaru
Windows8でOpenCVを使ったAndroid(MOVERIO)開発体験したい
Windows8でOpenCVを使ったAndroid(MOVERIO)開発体験したい
Yukio Saito
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Mr. Vengineer
Synthesijer jjug 201504_01
Synthesijer jjug 201504_01
Takefumi MIYOSHI
Androidプログラミング初心者のためのゲームアプリ開発入門
Androidプログラミング初心者のためのゲームアプリ開発入門
Masahiko Mizuta
FPGAアクセラレータの作り方
FPGAアクセラレータの作り方
Mr. Vengineer
Vivado hls勉強会4(axi4 master)
Vivado hls勉強会4(axi4 master)
marsee101
Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究
Yuichi Yoshida
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Hiroshi Yoshida
Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6
Kazuo Asano (@kazuo_asa)
Vivado hls勉強会3(axi4 lite slave)
Vivado hls勉強会3(axi4 lite slave)
marsee101
Gstreamer Basics
Gstreamer Basics
Seiji Hiraki
La actualidad más candente
(20)
【Unite Tokyo 2019】「禍つヴァールハイト」最大100人同時プレイ!モバイルオンラインゲームの実装テクニック
【Unite Tokyo 2019】「禍つヴァールハイト」最大100人同時プレイ!モバイルオンラインゲームの実装テクニック
LLVM overview 20110122
LLVM overview 20110122
Task Spooler を試した
Task Spooler を試した
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
Bhyve Internals
Bhyve Internals
Vivado hls勉強会1(基礎編)
Vivado hls勉強会1(基礎編)
Synthesijer zynq qs_20150316
Synthesijer zynq qs_20150316
高位合成ツールVivado hlsのopen cv対応
高位合成ツールVivado hlsのopen cv対応
Andoird版OpenCVのJavaサンプルを動かす
Andoird版OpenCVのJavaサンプルを動かす
Windows8でOpenCVを使ったAndroid(MOVERIO)開発体験したい
Windows8でOpenCVを使ったAndroid(MOVERIO)開発体験したい
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Synthesijer jjug 201504_01
Synthesijer jjug 201504_01
Androidプログラミング初心者のためのゲームアプリ開発入門
Androidプログラミング初心者のためのゲームアプリ開発入門
FPGAアクセラレータの作り方
FPGAアクセラレータの作り方
Vivado hls勉強会4(axi4 master)
Vivado hls勉強会4(axi4 master)
Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6
Vivado hls勉強会3(axi4 lite slave)
Vivado hls勉強会3(axi4 lite slave)
Gstreamer Basics
Gstreamer Basics
Destacado
Presentation1
Presentation1
IndiaMART InterMESH Limited
Bondia Lleida 15102012
Bondia Lleida 15102012
Bondia Lleida Sl
Manage your Projects in One Single Page with Basecamp
Manage your Projects in One Single Page with Basecamp
andrea_chiu
Sunseeker predator 82
Sunseeker predator 82
IbizaYachtClub
Webcast 12 09
Webcast 12 09
Andreas Schulte
Kintone 導入サービス キャンペーン_20140903-1
Kintone 導入サービス キャンペーン_20140903-1
denet_tech_tokyo
WORK EXPERIENCE LETTER
WORK EXPERIENCE LETTER
HARSH SHAH
My place (expresion oral)
My place (expresion oral)
Isabel Abarca Aravena
Destacado
(8)
Presentation1
Presentation1
Bondia Lleida 15102012
Bondia Lleida 15102012
Manage your Projects in One Single Page with Basecamp
Manage your Projects in One Single Page with Basecamp
Sunseeker predator 82
Sunseeker predator 82
Webcast 12 09
Webcast 12 09
Kintone 導入サービス キャンペーン_20140903-1
Kintone 導入サービス キャンペーン_20140903-1
WORK EXPERIENCE LETTER
WORK EXPERIENCE LETTER
My place (expresion oral)
My place (expresion oral)
Similar a Let's play with Goldfish
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
Takuro Iizuka
CMake multiplatform build-tool
CMake multiplatform build-tool
Naruto TAKAHASHI
Android デバッグ小ネタ
Android デバッグ小ネタ
l_b__
Froyo DalvikVM JIT
Froyo DalvikVM JIT
Tetsuyuki Kobayashi
Rocroにおけるgcp活用事例
Rocroにおけるgcp活用事例
Kishin Yagami
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
Yuta Matsumura
普段の開発を少しだけ便利にする3つのレシピ
普段の開発を少しだけ便利にする3つのレシピ
Takuma Maruyama
130710 02
130710 02
openrtm
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
Yohei Fushii
あるRISC-V CPUの 浮動小数点数(異常なし)
あるRISC-V CPUの 浮動小数点数(異常なし)
たけおか しょうぞう
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
NTT DATA Technology & Innovation
JIT のコードを読んでみた
JIT のコードを読んでみた
y-uti
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
Izumi Tsutsui
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
Minoru Nakamura
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Takashi Sogabe
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」
Takakiyo Tanaka
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Developers Summit
2014 dart flight school in Tokyo
2014 dart flight school in Tokyo
nothingcosmos
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
NTT DATA Technology & Innovation
EmitJSの環境をちょこっと調べた
EmitJSの環境をちょこっと調べた
kyon mm
Similar a Let's play with Goldfish
(20)
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
CMake multiplatform build-tool
CMake multiplatform build-tool
Android デバッグ小ネタ
Android デバッグ小ネタ
Froyo DalvikVM JIT
Froyo DalvikVM JIT
Rocroにおけるgcp活用事例
Rocroにおけるgcp活用事例
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
普段の開発を少しだけ便利にする3つのレシピ
普段の開発を少しだけ便利にする3つのレシピ
130710 02
130710 02
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
あるRISC-V CPUの 浮動小数点数(異常なし)
あるRISC-V CPUの 浮動小数点数(異常なし)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
JIT のコードを読んでみた
JIT のコードを読んでみた
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
2014 dart flight school in Tokyo
2014 dart flight school in Tokyo
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
EmitJSの環境をちょこっと調べた
EmitJSの環境をちょこっと調べた
Más de Tetsuyuki Kobayashi
some topic of ffmpeg
some topic of ffmpeg
Tetsuyuki Kobayashi
New VIdeo CODEC AV1
New VIdeo CODEC AV1
Tetsuyuki Kobayashi
Try new transport protocol SRT (ver. 2)
Try new transport protocol SRT (ver. 2)
Tetsuyuki Kobayashi
Try new transport protocol SRT
Try new transport protocol SRT
Tetsuyuki Kobayashi
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Tetsuyuki Kobayashi
WebOS Open Source Edition を試してみた
WebOS Open Source Edition を試してみた
Tetsuyuki Kobayashi
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Tetsuyuki Kobayashi
組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)
Tetsuyuki Kobayashi
組み込みLinuxでのGolangのススメ
組み込みLinuxでのGolangのススメ
Tetsuyuki Kobayashi
Tricky implementation of Go ARM soft float
Tricky implementation of Go ARM soft float
Tetsuyuki Kobayashi
ARM 64bit has come!
ARM 64bit has come!
Tetsuyuki Kobayashi
Virtual memory 20070222-en
Virtual memory 20070222-en
Tetsuyuki Kobayashi
Simple and efficient way to get the last log using MMAP
Simple and efficient way to get the last log using MMAP
Tetsuyuki Kobayashi
Tips of Malloc & Free
Tips of Malloc & Free
Tetsuyuki Kobayashi
Basic of virtual memory of Linux
Basic of virtual memory of Linux
Tetsuyuki Kobayashi
Patch101
Patch101
Tetsuyuki Kobayashi
ADB(Android Debug Bridge): How it works?
ADB(Android Debug Bridge): How it works?
Tetsuyuki Kobayashi
Tweaking Google TV emulator
Tweaking Google TV emulator
Tetsuyuki Kobayashi
Inter-process communication of Android
Inter-process communication of Android
Tetsuyuki Kobayashi
Android is NOT just 'Java on Linux'
Android is NOT just 'Java on Linux'
Tetsuyuki Kobayashi
Más de Tetsuyuki Kobayashi
(20)
some topic of ffmpeg
some topic of ffmpeg
New VIdeo CODEC AV1
New VIdeo CODEC AV1
Try new transport protocol SRT (ver. 2)
Try new transport protocol SRT (ver. 2)
Try new transport protocol SRT
Try new transport protocol SRT
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
WebOS Open Source Edition を試してみた
WebOS Open Source Edition を試してみた
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書く
組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ
組み込みLinuxでのGolangのススメ
Tricky implementation of Go ARM soft float
Tricky implementation of Go ARM soft float
ARM 64bit has come!
ARM 64bit has come!
Virtual memory 20070222-en
Virtual memory 20070222-en
Simple and efficient way to get the last log using MMAP
Simple and efficient way to get the last log using MMAP
Tips of Malloc & Free
Tips of Malloc & Free
Basic of virtual memory of Linux
Basic of virtual memory of Linux
Patch101
Patch101
ADB(Android Debug Bridge): How it works?
ADB(Android Debug Bridge): How it works?
Tweaking Google TV emulator
Tweaking Google TV emulator
Inter-process communication of Android
Inter-process communication of Android
Android is NOT just 'Java on Linux'
Android is NOT just 'Java on Linux'
Let's play with Goldfish
1.
Goldfishをいじってみよう
2009.11.30 京都マイクロコンピュータ 小林 哲之 1
2.
はじめに ●
Androidのソースが公開されてから一年 ● 先日Eclair(Android2.0)のソースがマスターに マージされたので急遽内容を変更しました。 ● ここでの話は発表者の主観に基づくもの。無保 証です。 2
3.
Who am I? ●
組み込み一筋N十年。 – リアルタイムOS iTRON – 組み込み向けJava実行環境 – 組み込み向けLinux – gcc ● ブログ 「組み込みの人。」 – http://d.hatena.ne.jp/embedded/ ● 京都マイクロコンピュータ 2008年3月入社 – http://www.kmckk.co.jp/
4.
本日お話すること ●
Goldfishとは ● Eclair(エクレア)のソースがマージされた ● VFP対応、armv7対応 ● Webkit V8 JavaScriptエンジン ● DalvikVMに実験版のJIT 4
5.
Goldfishとは ●
エミュレータ(コマンド名 emulator) で使われ ている仮想ハードウェア ● CPUは元々arm926だが「換装」可能。
6.
ソースからビルドして動かす方法 ●
envsetup.shを使うと環境設定が簡単。 $ cd mydroid $ source build/envsetup.sh $ lunch genericeng $ time make j4 2>&1 |tee make.log $ emulator &
7.
Eclair(エクレア) ●
2009.11.15 ● デフォルトは変更されていないが、以下のもの がソースに入ってきている ● VFP対応、armv7対応 ● Webkit V8 JavaScriptエンジン ● DalvikVMに実験版のJIT
8.
ARMのアーキテクチャ対応の拡大 ●
DalvikVMのアセンブラ版のインタープリタの 種類が増えた ● armv4t ● armv5te (default) ● armv5te-vfp ● armv7-a ● ビルド時の環境変数TARGET_ARCH_VARIANT
9.
VFP対応版のビルド
$ export TARGET_ARCH_VARIANT=armv5tevfp $ time make j4 2>&1 |tee make.log $ emulator & ● インタープリタはVFP対応版が使われる。 ● それ以外の部分ではVFPは使われない。(-msoft-flaot付きでビルドされるため) ● Kernel, qemuはそのままでOK
10.
armv7a対応版のビルド
$ export TARGET_ARCH_VARIANT=armv7a $ time make j4 2>&1 |tee make.log $ emulator kernel prebuilt/androidarm/ kernel/kernelqemuarmv7 & ● Kernelはarmv7用にビルドされたものを使用する。 ● gcc4.4.0ではコンパイルエラーになる場所があった。armv7対応はまだ枯 れていないかも。もっと新しいコンパイラで後で再チャレンジ。
11.
Webkit V8 Javascriptエンジン ●
http://code.google.com/intl/ja/apis/v8/ ● C++で記述されている ● X86, x86-64, ARMに対応 ● ARMの場合32bitコードを生成する。(Thumbで はない)
12.
V8を有効にしてビルド $ export JS_ENGINE=v8 $ time make j4 2>&1 |tee make.log $ emulator &
13.
V8が生成したコードを見てみる ●
無理やりデバッグ用のコードを有効にする ● webkit/v8Binding/Android.libv8.mk – LOCAL_CFLAGS += -DENABLE_DISASSEMBLER ● webkit/v8Binding/src/flag_definitions.h – print_code を true にセット – print_builtin_code を trueにセット
14.
V8が生成したコード I/v8 ( 201): Builtin: Illegal I/v8 ( 201): kind = BUILTIN I/v8 ( 201): name = Illegal I/v8 ( 201): Instructions (size = 40) I/v8 ( 201): 0x45a50920 0 e59fc014 ldr ip, [pc, #+20] I/v8 ( 201): 0x45a50924 4 e58c1000 str r1, [ip, #+0] I/v8 ( 201): 0x45a50928 8 e2800001 add r0, r0, #1 I/v8 ( 201): 0x45a5092c 12 e59f100c ldr r1, [pc, #+12] I/v8 ( 201): 0x45a50930 16 e59fc00c ldr ip, [pc, #+12] ;; code: STUB, CEntry, minor: 0 I/v8 ( 201): 0x45a50934 20 e12fff1c bx ip I/v8 ( 201): 0x45a50938 24 03000003 constant pool begin I/v8 ( 201): 0x45a5093c 28 aa438d10 constant I/v8 ( 201): 0x45a50940 32 aa2d94e1 constant I/v8 ( 201): 0x45a50944 36 45a50120 constant I/v8 ( 201):
32bitのARMのコードが生成されている。 詳しいことはわかりません。。 $ adb logcat
15.
Dalvik VmのJIT ●
マスターのソースに入ったのは実験途中のスナップ ショットらしい。いろんなやり方を評価中。 ● Cで記述されている。 ● ARMのみ。 ● Armv5te (Thumbのコードを生成) ● Armv5te-vfp (Thumb + VFP呼び出し) ● armv7-a (Thumb2のコードを生成) ● V8と共通のコードは無い。
16.
JITを有効にしてビルド $ export WITH_JIT=true $ time make j4 2>&1 |tee make.log $ emulator &
17.
JITが生成したコードを見てみる ●
無理やりデバッグ用のコードを有効にしてみる ● vm/Init.c setCommandLineDefaults() ● gDvmJit.printMe = true; ●
18.
JITが生成したコード D/dalvikvm( 97): dalvik offset: 0x0062 @ agetbyte D/dalvikvm( 97): 0x44a83544 (0018): ldr r2, [r5, #124] D/dalvikvm( 97): 0x44a83546 (001a): str r3, [r5, #80] D/dalvikvm( 97): 0x44a83548 (001c): mov r3, #128 D/dalvikvm( 97): 0x44a8354a (001e): ldr r3, [r5, r3] D/dalvikvm( 97): 0x44a8354c (0020): cmp r2, #0 D/dalvikvm( 97): 0x44a8354e (0022): beq 0x44a835b6 D/dalvikvm( 97): 0x44a83550 (0024): ldr r0, [r2, #8] D/dalvikvm( 97): 0x44a83552 (0026): add r2, r2, #16 D/dalvikvm( 97): 0x44a83554 (0028): cmp r3, r0 D/dalvikvm( 97): 0x44a83556 (002a): bcs 0x44a835b6 D/dalvikvm( 97): 0x44a83558 (002c): ldrsb r0, [r2, r3] $ adb
logcat
19.
JITが生成したコード
バイト配列のロードのDEXコード D/dalvikvm( 97): dalvik offset: 0x0062 @ agetbyte D/dalvikvm( 97): 0x44a83544 (0018): ldr r2, [r5, #124] D/dalvikvm( 97): 0x44a83546 (001a): str r3, [r5, #80] D/dalvikvm( 97): 0x44a83548 (001c): mov r3, #128 D/dalvikvm( 97): 0x44a8354a (001e): ldr r3, [r5, r3] D/dalvikvm( 97): 0x44a8354c (0020): cmp r2, #0 nullチェック D/dalvikvm( 97): 0x44a8354e (0022): beq 0x44a835b6 D/dalvikvm( 97): 0x44a83550 (0024): ldr r0, [r2, #8] D/dalvikvm( 97): 0x44a83552 (0026): add r2, r2, #16 D/dalvikvm( 97): 0x44a83554 (0028): cmp r3, r0 配列の範囲チェック D/dalvikvm( 97): 0x44a83556 (002a): bcs 0x44a835b6 D/dalvikvm( 97): 0x44a83558 (002c): ldrsb r0, [r2, r3] バイトデータのロード ほぼDEXコードに対応したコード。最適化はされていない
20.
このJITの特徴 ●
インタープリタで実行頻度の高い部分をカウン トし、一定回数以上実行されるとコンパイル要 求がキューに入る。 ● JITコンパイルは別スレッドで行われる ● コンパイルの単位はメソッド単位ではなく、 もっと小さいブロック単位
21.
体感速度はあまり変わらないが... ●
マイクロベンチマークでは3倍程度の性能向上 があるようだ ● 体感速度はVMの実行速度よりも描画速度の比 重が大きい ●
22.
JITコンパイラのトレードオフ ●
コンパイラ自身のサ ● よりよいバランスを イズ 目指して調整が必要 ● コンパイル時間 ● まだまだ実験中なの ● コンパイルしたコー で期待して待とう ドのサイズ ● 最適化の度合い ● ...
23.
今後が楽しみ ●
Thumb2EE ● JITコンパイルに適したarmv7の命令セット。 – ゼロコストnullポインタチェック – 配列の範囲チェック用命令 – ハンドラ呼び出し命令 ● 生成コードのサイズが小さくなり効率化 ● マルチプロセッサ(SMP) ● バックグランドでJITコンパイル
24.
最後に ●
オープンソースの幸せ ● ぜひ自分でソースをいじってビルドして動かし てみてください ● ブログにコメント、トラックバック歓迎 ● ● ● ご清聴ありがとうございました。
Descargar ahora