Skip to content
This repository was archived by the owner on Mar 3, 2025. It is now read-only.

CoCo-Japan-pan/cpu2023-compiler

Repository files navigation

CPU実験 2023 第3班 コンパイラ

シミュレータを分離したものなので、浮動小数の定数畳み込み等が実機の挙動と異なります。

実行方法

  • レイトレ run.sh size
  • レイトレ以外はcargo run (-r) -- --lib ./programs/libs/stdlibs.ml *.ml
  • e.g cargo run -- --lib ./programs/libs/stdlibs.ml ./programs/others/gcd.ml
  • cargo run -- --helpでコマンドオプションは確認してください
  • ライブラリを最初にconcatするので、mincamlみたく未定義なら外部関数扱いということはせず、未定義は全部エラーになります
  • concatはコマンドライン引数libで与えた順番で行われるので、グローバル変数とかは最初にお願いします。
  • レイトレの三角関数用ライブラリがprograms/libs/trigs.ml, レイトレのその他ライブラリはprograms/libs/miniMLRuntime.ml ここのprint_intには0~999しか引数にこないと仮定して末尾呼び出しにしています。
  • レイトレ以外のテストで用いるライブラリはprograms/libs/stdlibs.ml こちらはprint_intに与える引数の数として一般の整数が取れるよう、末尾呼び出しじゃない形にしています。

中間コードのテスト

  • ocamlソースに変換できる段階の中間コードを出力したら、それらはtest_intercode/others.shで、programs/others/*.mlの実行結果が正しいものになるかどうかをテストできるようにしています。レイトレも、sin/cos/atanを自作ライブラリに置き換え、浮動小数定数は単精度に丸めて、配布のmakeをした結果と合致するかをtest_intercode/raytracer.shでテストできます。

アセンブリのシミュ結果

1st ISA

最適化(追加順) サイズ4・P6 サイズ256・P6
無し 13,713,335 20,333,480,365
traceを引く
boolをなくす前にfcmpのインライン化
12,858,559 18,676,604,129
末尾呼び出し最適化 12,485,473 18,121,239,556
インライン化 サイズ100まで
(と一度しか呼ばないもの)
5,290,298 8,045,816,356
インライン化 サイズ135 4,783,880 7,226,113,263
stack_mapを基本ブロック毎ではなく関数毎に
定数0のzero置き換え
4,295,913 6,615,568,679
Spill,スケジューリング対応
(Save/Restoreはスケジューリングしていない)
インラインサイズ500
実行命令数 3,772,126
クロック数 6,935,893
IPC 0.54385585
実行命令数 5,648,212,479
クロック数 10,797,569,061
IPC 0.52310038

2nd ISA

最適化(追加順) サイズ4・P6 サイズ256・P6
2nd ISA 対応 (インライン500) 3,193,404 4,585,022,644
callee導入 3,144,216 4,495,230,321
tailだけの基本ブロック合体
mirで定数畳み込み
2,981,677 4,170,782,796
faddabs導入 2,945,739 4,094,593,586
共通部分式削除 2,779,969 3,826,670,547
ifの6bit即値化 2,628,491 3,563,836,725
float_tableによるいくつかの浮動小数命令即値化 2,538,240 3,473,356,762
bf*.zeroの導入 2,503,145 3,423,089,378
ifの中にない比較はifを新たに入れずに比較演算で代用 2,484,816 3,418,293,409
fmax, fminの導入 2,482,610 3,414,894,235
0/1を返すifを比較に変換し、それをなるべくifに埋め込み 2,458,725 3,367,255,713
mir削除の修正 K正規化形のifの種類増やした 2,438,994 3,351,222,061
float_tableにある定数の読み込みはaddfi使用 2,408,478 3,342,585,055
virtでもcse(loadについては保守的) 2,307,820 3,289,306,003
xorのif埋め込み、コピー伝播(干渉グラフによる) 2,283,990 3,273,752,601
virtでのloadのcseを改善 2,275,597 3,253,716,109
5,732,490,480クロック
小さい基本ブロックを複製により合体(サイズ4), store直後のload除去 2,203,303 3,136,734,509
5,561,185,457クロック

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published