著者
大平 怜 平木 敬
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.46, no.SIG1(PRO24), pp.134-148, 2005-01-15

実行時の安全を保証するための例外機構は一方で速度低下の原因となるため,部分冗長性除去(Partial Redundancy Elimination; PRE)で上方移動を用いて不要な例外命令を削除することが有効である.しかし我々はプログラムの意味を保つために例外命令どうしの順序関係である例外依存関係を保つ必要がある.したがって,従来の部分冗長性除去では例外命令の上方移動が阻害されることが多い.本研究で我々はプログラムの意味を保存しつつ例外依存関係を越える部分冗長性除去,Sentinel PRE を提案する.Sentinel PRE は例外依存関係を無視して上方移動を行い,その後で高速な解析により例外順序の入れ替わりを検出する.順序が入れ替わった例外命令で例外が起きた場合,プログラムの意味を保つために上方移動する前の状態に脱最適化でコードを戻す.現実のプログラムで例外が起きることは稀であるため,ほとんどの場合は上方移動により最適化された高速なコードが実行される.Sentinel PRE は特別なハードウェアのサポートには依存せず,動的なコード書き換えにより脱最適化を実現する.我々はSentinel PRE をJava の実行時コンパイラに実装して実験を行い,Java Grande Benchmark 中のheapsort プログラムで8.4%の性能向上を得た.