Diary/2009-7-24
JRubyで親クラスのメソッドを呼ぶ
JRubyでオーバライドして定義ししたメソッドで,
親クラスのメソッドを呼ぶときは,単にsuper(引数)でいいみたい.
Javaでよく書く,
paintComponent(Graphics g){ super.paintComponent(g); }
みたいなのは,
def paintComponent(g) super(g) end
になる.
Improving Program Efficiency by Packing Instructions into Registers
[論文読み]
ISCA '05
Harnessing Horizontal Parallelism and Vertical Instruction Packing of Programs to Improve System Overall Efficiency のIRF的な親論文.
良く使う命令をレジスタにおいておくことで効率的にアクセスするというのが目的.
IRF(instruction register file)とIMM(immidate table)を定義している.
結果
- IFの後部分かIDの前部分にいれると,クリティカルパスには影響しない
- 平均19%のコードサイズの削減
- 32エントリのIRFを使うことで,平均37%のI-Fetchエネルギーを削減
- 全体では15%
ISAの拡張
IRFの命令を使うためにISAを拡張する
- Loosely Packed Instruction
- 通常のMIPSコードの下位5bitを使ってIRFを埋めこむ
- IRFを実行した後に,MIPSコードを実行する
- IRFが呼べない時には,IRF部分をnopにしておけば通常のMIPSコードになる
- shamtは,rsと共用
- lhiでは,16bit即値が読めなくなる
- luiで,前の命令のrsと16bit即値で21bitを表現.(luiにはIRFは埋め込めない)
- Thigtly Packed Instrcutoins
- opcodeに続けて最大5個のIRFを呼びだす.
- 命令コードのうち即値だけが違うものは,IMMへのポインタと組み合わせる
- IMMへのポインタ(param)は最大2個.この時IRFは最大3個
- Positional Register
- 組み合わせることでより効率があがる
Compilerの変更
- the compiler is a part of VPO for the MIPS architecture
- parformance statisticsを取得するためにSimpleScalarのPISAにも使えるように
- GASのpseudoinstructionsで簡単に
- IRFの選択
- profiling the application
- selecting the most frequently ocurring
- the top 32 immediate valuesを求めてIMMに登録.