連載:深入り.NETプログラミング

インライン・メソッド・キャッシュによる動的ディスパッチ高速化

NyaRuRu
Microsoft MVP Windows - DirectX(Jan 2004 - Dec 2008)
2008/11/18
Page1 Page2 Page3

 本連載では、筆者が気になって調べてみた.NET関連技術を横断的に紹介していきたい。連載第1回となる今回は、インライン・メソッド・キャッシュについて取り上げる。そもそもなぜ筆者がインライン・メソッド・キャッシュについて調べようと思ったのか、まずはそこからお話ししよう。なお、コードはすべてC#のみで記述する。

次世代JavaScriptエンジン

 ここ数カ月、JavaScriptの高速化が注目を集めている。

JITコンパイラ搭載でJSを大幅高速化へ、Firefox

MozillaファウンデーションのBrendan Eich氏が8月23日付けのブログで明かしたところによれば、Firefox 3.1に含まれる新しいJavaScriptエンジンの「TraceMonkey」は、JITコンパイラを搭載したものとなる。現在のところx86、x86-64、ARMをサポートしている。最適化前の現時点でもすでに、Firefox 3に比べてFirefox 3.1に組み込まれるJavaScriptエンジンはSunSpiderベンチマークで約1.83倍の高速化、画像処理のベンチマークで6.46倍の高速化ができているという。JavaScriptエンジンで比較した場合、Firefox 3はFirefox 2に比べて3倍程度高速で、これを考え合わせるとこの1、2年でJavaScriptは劇的な高速化の局面にあるといえそうだ。


グーグル、独自Webブラウザ「Chrome」を公開へ

(Google Chromeは)新しいJavaScriptエンジン「V8」を搭載する。これは、JavaScript用の仮想マシンであり、JavaScriptコードを解析し、CPUでダイレクトに実行するほか、ガベージ・コレクション機能にも改良が施されており、高速な処理を実現するという。


SquirrelFish Extreme (SFX)

SquirrelFish Extremeは4つの異なる技術を使い、オリジナルのSquirrelFishの性能を改善しました:バイト・コードの最適化、多態インライン・キャッシュ、軽量な「コンテクスト・スレッド」式JITコンパイラ、JITインフラに基づいた新しい正規表現といった技術です。

 これらの次世代JavaScriptエンジンはいずれもオープンソースで実装が公開されており、各地で有志による解析が行われている。国内ではomoさんによるキャッチアップがすごい。筆者としても非常に助かっている。

JavaScriptエンジンに関連するomoさんの記事。

- http://dodgson.org/omo/t/?date=20080506
- http://steps.dodgson.org/?date=20080907
- http://steps.dodgson.org/?date=20080824
- http://steps.dodgson.org/?date=20080823

 さて、発展目覚ましいこれらの次世代JavaScriptエンジンだが、高速化の鍵となったアイデアは案外古かったり、ほかの言語で実証済みだったりする技法らしい。

 例えば、現在TraceMonkeyを開発しているAndreas Gal氏だが、もともと「Tracing JIT」というテーマで博士論文を書いたときには、JVM(Java Virtual Machine)のようなバイト・コード環境を想定している(氏の博士論文)。そのアイデアをSpiderMonkey(Firefox 2.xのJavaScriptエンジン)に組み込み始めてすぐに成果を出していることから、まさにアイデア勝負だったようである。

 一方、同じコンセプトの下にAdobeが力を入れていた「Tamarin Tracing」は、TraceMonkeyに押し出される形でキャンセルされたようであり、これは必ずしもアイデアだけではうまくいかないことを教えてくれる。

 Torsten Bergmann氏によれば、V8の開発者の1人であるLars Bak氏は、かつてAnimorphic Systemsという小さい会社でStrongtalk Smalltalk VMを作っていた経歴を持つ。後にその会社はStrongtalk Smalltalk VMの権利ごとSun Microsystemsに買収され、同技術と氏の能力はJava HotSpot VMに生かされることとなった。

 そんなLars Bak氏は、現在GoogleでV8に取り組んでいる。もしかしたら、彼がV8に取り組むようになった一因に、複雑になっていたStrongtalk Smalltalk VMの権利関係が2006年になってクリアされたことがあるかもしれない。この年、Sunは基となったStrongtalk Smalltalk VMをオープンソースで公開している

 SFXの人たちはSFXの人たちで、Sun Microsystemsで開発されたSelf言語に対して強いリスペクトを示している。Strongtalk Smalltalk VMの系譜を持つという先ほどのV8同様、SFXも1980年代後半から1990年代にかけて開発された動的言語VMに強く影響を受けていることになる。そんなV8とSFXがそろって勧めてくるのが「An Efficient Implementation of Self, a Dynamically-Typed Object-Oriented Language Based on Prototypes」という論文だ。

 近年花開いたように見えるJavaScriptの製品技術の背後にはこのような歴史があり、ならば.NET処理系でも類似技術の採用例があるだろうということで、今回注目したのがインライン・メソッド・キャッシュである。もちろん、ここで紹介した次世代JavaScriptエンジンはいずれもこのテクニックを使っている。それでは、インライン・メソッド・キャッシュがどんなもので、この技法がどのように.NET処理系の高速化と関係しているのかを見ていこう。


 INDEX
  [連載]深入り.NETプログラミング
  インライン・メソッド・キャッシュによる動的ディスパッチ高速化
  1.次世代JavaScriptエンジン
    2.インライン・メソッド・キャッシュ/スタブベース・ディスパッチ
    3.多相的インライン・メソッド・キャッシュ

インデックス・ページヘ  「深入り.NETプログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間