昨日読んだ論文から
- native の 20-40%の速度が出たらしい
- ソフトウェアで実装される VM では命令のフェッチとデコード(実行ルーチンへのディスパッチ処理)がそのまま実行のオーバーヘッドになる
- これらはネイティブコードにはない固有の処理である
- 実行する命令数を減らす(ループの回数を減らす)
- ディスパッチを高速化する(→ direct threaded code 対応済み)
- これらはネイティブコードにはない固有の処理である
- 複数の命令を組み合わせた命令を作ることで実行する命令数を減らすことができる
- ただし1つの命令の長さが長くなるとフェッチやデコードの処理に時間がかかるおそれがあり一定のトレードオフが存在する
- VM の1命令毎に他方向分岐があるので分岐予測的に不利
- どの命令を合成するかが性能を左右する
- 命令の合成
- operator1 + operator2 => operator1_2
- オペランドの合成
- operator operand => operand_oprand