5.2 Using profiling to create superinstructions

作者は Makefile には、 プロファイリングを使用してスーパー命令を作成するためのルールを追加していません(スーパー命令選択の選択肢はたくさんありますが、 それらの選択肢を Makefile にハードコードしたくありませんでした)が、 サポートするスクリプトがいくつかあります。 例:

fib.minitest.mini をトレーニング・プログラムとして使用すると、 以下のようなプロファイルが得られます:

make fib.prof test.prof #数秒かかります

これらのプロファイルは stat.awk で集約できます:

awk -f stat.awk fib.prof test.prof

結果には以下のような行が含まれます:

      2      16        36910041 loadlocal lit

これは、 シーケンス loadlocal lit が 2 つのプロファイルで合計 16 回静的に発生し、 動的実行数が 36910041 であることを意味します。

数値はスーパー命令を選択するためにさまざまな方法で使用できます。 たとえば、 動的実行数が 10000 を超えるシーケンスをすべて選択したい場合は、 以下のパイプラインを使用します:

awk -f stat.awk fib.prof test.prof|
awk '$3>=10000'|                #シーケンスを選択
fgrep -v -f peephole-blacklist| #良くない命令を排除
awk -f seq2rule.awk|  #シーケンスをスーパー命令ルールに変換
sort -k 3 >mini-super.vmg       #シーケンスを並べ替え

ファイル peephole-blacklist には、スタックまたはスタック・ポインター(mini 言語の場合: callreturn)に直接アクセスするすべての命令が含まれています。 並べ替え手順は、 プレフィックスが、 大きなスーパー命令よりも前に配置されるようにするために必要です。

いまや、 あなたは ‘make’ と言うだけでスーパー命令を備えたバージョンの mini 言語を作成できるようになりました。