Coding Memorandum

プログラミングに関する備忘録

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Hack The Cell 再び

shinhさんがHack The Cellのまとめ資料を書かれていました。
資料はコンパクトに纏まっていて,さっくりと読めます。楽しく読ませて頂きました。

この資料に感化されて,自分自身のまとめを書いておこうと思いました。たいしたことは書けないのですが,以前の勉強会で触れなかった部分を書いていきたい思います。(勉強会資料-pdf

命令の手動配置について
      手動配置作業ファイル

このファイルは,手作業で命令配置を行ったときのアウトプットです。
表の最初の状態は,左側に「mt行列の計算」,右側に「tempering処理」の命令が書かれていました。左右それぞれeven odd命令を分けて書いています。

「tempering処理」はほとんどがeven命令なので一旦置いておき,「mt行列の計算」から最適化を行います。「mt行列の計算」の命令群を変数の依存関係に注意しながら,できるだけevenとodd命令が重なるように配置していきます。表の色塗り部分が「mt行列の計算」を縮めた結果を示しています。

続いて,「mt行列の計算」の空いている部分に「tempering処理」の命令を入れ込んでいきます。
「tempering処理」の最後の方ではodd命令が現れるため,若干の調整を必要としました。

この表を5ループ分作成します。

配置の確認

表での 配置を終えたら,CSV形式で出力し,even-odd命令が互い違いになるよう1列に並べかえます。この状態で普通のCプログラムになります。ですので,これをコンパイルすることで実行結果を確認でき,配置の正しさを検証することができます。

アセンブラへの変換

実行結果がOKとなったら,続いてアセンブラコードへ変換します。
アセンブラへの変換はCプログラムの文字列を変換するコンバータを作成しました。

この辺り文字列操作に長けている言語を使えれば良いのですが,残念ながらマスターしている言語がないためCで書いています。
     アセンブラ・コンバータ

手抜きプログラムなので,変換元のCプログラムの書き方に色々な制約を課しています。(空白の入れ方等)

これで出力したコードには,まだC変数が書かれていますので,最後にsedでcellのレジスタ名に一括で置換します。これで最適化されたコードが完成です。

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://msirocoder.blog35.fc2.com/tb.php/25-f38feac8
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。