コンパイラ

JavaとC

SPECjvm98の_201_compressをC言語に移植して性能を測定した。移植したソースはここに載せるとマズいと思うので秘密。Javaで書かれたプログラムをCに移植する際に色々とやり方はあると思うが、とりあえずJavaのクラスは構造体とした。compressはオブジェクト…

キーワード「コンパイラ」

「コンパイラ」を含む日記を眺めているとたまに面白いことやってる人がひっかかるので役に立つ。日記の数もせいぜい10個/日くらいだし適量。さすがにコンパイラ作ってる人はめったにいないが……。

IBM、特許を寄贈

ううむ……。なんか見覚えのある研究もチラホラ。 US6324631 Method and system for detecting and coalescing free areas during garbage collection US6301652 Instruction cache alignment mechanism for branch targets based on predicted execution freq…

nop

最内ループ中のあるロード命令の後にnop命令を一つ入れるか入れないかだけで性能が10%も変わる例を発見して鬱になる。しかも、nop命令を入れたほうが速くなるのだ。コードが仮想メモリ空間に配置されるアドレスも、nop命令のぶんを除いて完全に同一であるこ…

命令スケジューリングとリストスケジューリング

命令スケジューリングは特にUltraSPARCのようなイン・オーダー発行のプロセッサでは重要である。最適なスケジューリングを見つけるには、 依存グラフを構築する 依存関係を満たす全ての命令順に対してクロック数を計算する 最小のクロック数を与える命令順を…

コンパイラ研究のトレンドと展望

先週参加したLCPC2004では私が好きな解析系の話題(「こういう解析をしてこれだけ速くなりました」という話)はやはり少なかった。全体的に見て Embedded System Domain Specific Optimization High Level Language Compiler の3つが流行りのようであり、パ…

アーキテクチャ依存/非依存

これまでJITコンパイラを書いてきた僅かな経験から言うと、コンパイラで一番面倒くさいのは最適化の実装ではなく、アーキテクチャ依存部分と非依存部分を切り分ける作業であり、それと表裏一体の中間言語の設計である。アーキテクチャ依存部分ではSPARCべっ…

mulとdiv(続き)

divと右算術シフトの同一視、という誤解は古くからあるらしく、Guy Steel Jr. が"Arithmetic Shifting Considered Harmful"というレポートを1976年*1に書いている。内容はだいたい、 DEC PDP-10やSystem/360のマニュアルをはじめとして、昔からありとあらゆ…

mulとdiv

mulの一方の引数が2のn乗の定数である場合、nビットのshift_leftで代用できる。これはたとえオーバーフローが起きる場合でもmulと同一の結果を返す。ではdivの除数が2のn乗の定数である場合、nビットのarithmetic_shift_rightで代用できるか、というと必ずし…