- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!CellVM
{{category 論文読み}}
* ヘテロジニアスアーキテクチャの上に均質なVMを作る
* Java Threadを各コアに分配する
* 現在の実装では,8スレッドを8コのコアに分配する
* SPEではCoreVMが走る
** PPEからのinterventionとassistanceなしにJavaのbytecodeを実行
** ローカルでは実行できないときだけShellVM(PPE)に助けを依頼(=> cooperative interpretation; co-interpretationと呼ぶ)
* new objects(array含む)を作るopcodeは,ShellVMで実行される
** すべてのJava heapはメインメモリにあるから
* native method実行もShellVMで扱われる
** 普通,そんなにない
** Java heapを操作することになる(array copyingとか)
* JavmVMの拡張
** direct threaded interpreter
*** 各バイトコード命令は対応するコードブロックのアドレス
*** machine-level分岐の数/opcodeが削減される
** opcode rewriting: to store resolved information in the operand of an instruction(Sec 3.2)
* SPEのL.S.を効率良く使うことが目標
** DMA転送は数百サイクルのレイテンシが必要
* 各CoreVMは,現在の状態を表わす内部レジスタを管理する.
** ローカル変数へのポインタ,stack top pointer,現在のフレームへの参照
* method実行毎にJava frame作る
** method codeはメインメモリ
!Tech talk: Gauche Scheme
http://jp.youtube.com/watch?v=WEBOdWyGE3Eとか見る.
直前の式の結果をスタックに積まずにレジスタに入れるっていうのは,
schemeだから,大きな効果があるのかな?
!Escape analysis for object-oriented languages: application to Java
{{category 論文読み}}
Escape analysis [27, 14, 5] is a static analysis that determines
whether the lifetime of data exceeds its static scope.The main
originality of our escape analysis is that it determines precisely the
effect of assignments, which is necessary to apply it to object
oriented languages with promising results, whereas previous work [27,
14, 5] applied it to functional languages and were very imprecise on
assignments. Our implementation analyses the full Java(TM) Language.We
have applied our analysis to stack allocation and synchronization
elimination. We manage to stack allocate 13% to 95% of data, eliminate
more than 20% of synchronizations on most programs (94% and 99% on two
examples) and get up to 44% speedup (21% on average). Our detailed
experimental study on large programs shows that the improvement comes
from the decrease of the garbage collection and allocation times than
from improvements on data locality [7], contrary to what happened for
ML [5].
@article{320387,
author = {Bruno Blanchet},
title = {Escape analysis for object-oriented languages: application to Java},
journal = {SIGPLAN Not.},
volume = {34},
number = {10},
year = {1999},
issn = {0362-1340},
pages = {20--34},
doi = {http://doi.acm.org/10.1145/320385.320387},
publisher = {ACM},
address = {New York, NY, USA},
}
!Escape analysis for Java
{{category 論文読み}}
This paper presents a simple and efficient data flow algorithm for
escape analysis of objects in Java programs to determine (i) if an
object can be allocated on the stack; (ii) if an object is accessed
only by a single thread during its lifetime, so that synchronization
operations on that object can be removed. We introduce a new program
abstraction for escape analysis, the connection graph, that is used to
establish reachability relationships between objects and object
references. We show that the connection graph can be summarized for
each method such that the same summary information may be used
effectively in different calling contexts. We present an
interprocedural algorithm that uses the above property to efficiently
compute the connection graph and identify the non-escaping objects for
methods and threads. The experimental results, from a prototype
implementation of our framework in the IBM High Performance Compiler
for Java, are very promising. The percentage of objects that may be
allocated on the stack exceeds 70% of all dynamically created objects
in three out of the ten benchmarks (with a median of 19%), 11% to 92%
of all lock operations are eliminated in those ten programs (with a
median of 51%), and the overall execution time reduction ranges from
2% to 23% (with a median of 7%) on a 333 MHz PowerPC workstation with
128 MB memory.
@article{320386,
author = {Jong-Deok Choi and Manish Gupta and Mauricio Serrano and Vugranam C. Sreedhar and Sam Midkiff},
title = {Escape analysis for Java},
journal = {SIGPLAN Not.},
volume = {34},
number = {10},
year = {1999},
issn = {0362-1340},
pages = {1--19},
doi = {http://doi.acm.org/10.1145/320385.320386},
publisher = {ACM},
address = {New York, NY, USA},
}