「トップページ」の編集履歴(バックアップ)一覧はこちら
「トップページ」(2007/03/20 (火) 18:54:36) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
**↓の変更を受けて、命令セットにlws,sws命令追加
lw,sw命令においてベースレジスタがsp(r16)の場合は、lws,sws命令とする。即値の減算でアドレス計算をする。こうすることにより、lw,lws,sw,sws命令のいずれにおいても、即値部は必ず正の数となる。
**スタックへのロードストアの変更 3/12 4:07
学校に居る人々が協議中
次に学校に行くときには全て完成してソースコードがアップされていて、
俺だけ祭りに乗り遅れた雰囲気になっている予定。
**ライブラリ精度向上&アセンブラによる最適化 3/12
simulatorの速度向上により、contest.sldでの精度テストが可能に。
新たに精度問題が多数浮上したので改善。
ひそかにcosにバグがありました。
結果的に、根本的に直りそうも無いbitが2箇所
sqrt関連らしき、値が2以上離れるbitが1箇所
値の差が1のbitが15箇所になりました。
また、inline175段+アセンブラによるsetlおよび、浮動小数定数ロードの最適化によって
contest->3,857,809,023になりました。
**直近24hour 3/11 16:30
base=668,718,046 -> 334,706,332
contest=9,075,570,267 -> 4,050,016,257
多分これで900secは切るはず。よほどのことが無ければ。
あとはsetl命令の実装で何もしなくても
base->315,000,000 contest->3.900,000,000
ぐらいはいくはずです。
**FPU命令の追加
|fabs(111010) $rd,$rs|rd = abs(rs)|
|fiszero $rd, $rs(111001)|if rs = 0 then $rd = 1(0x1) else $rd = 0(0x0)|
|fispos $rd, $rs(111000)|if rs >= 0 then $rd = 1(0x1) else $rd = 0(0x0)|
|fisneg $rd, $rs(111011)|if rs < 0 then $rd = 1(0x1) else $rd = 0(0x0)|
|fless $rd, $rs, $rt(111100)|if rs < rt then $rd = 1(0x1) else $rd = 0(0x0)|
|setl $rd(31-26), label(25-0) (000011)|$rd = label|
**simulator高速化&コンパイラinline展開100段&fneg改良&新命令の呼び出し最適化 3/11 03:41
contest=4,398,155,842
base=373,005,090
simulatorは今までbaseで1minだったのを20secまで早くしときますた。
**sqrt最適化 3/11 01:37
base = 517626091
コンパイラのinline展開をしてないので、したら4億弱まではいくぽ。
**finv最適化 3/10 23:57
base = 557239562
**cmpiのバグ取れた 3/10 22:41
base.sld = 567010433
**16bit即値最適化 3/10 22:15
base.sld = 597859356に削減
cmpiのバグが取れませんが。。。
**li命令の最適化 3/10 20:36
base.sld = 631809300に削減
llo命令の実装を
rd = Hi(rd) or Lo(rs) ->
rd = 0 or Lo(rs)
に変更しました。
*ライブラリ完成 3/10 17:57
sqrtの実装が完了
print_int,print_char,read_int,read_floatに関しては、
PPM(画像データ)の出力をバイナリで行うことでprint_byte,read_word以外は不要になりました。
現在sqrt入れてbaseでdiff=6
命令数はbase.sld&&P3(txt data)出力で668718046になりました。
ライブラリの見直しでまだ20%ぐらいは削れそうですが、
それ以上は全体的な見直しが必要かも。
contest2.sld=9075570267instructions(P6)
*todo & コンパイラ係進捗 3/9 22:34
fdivの実装完了instructionが若干増えたけど若干。
現在baseでdiff=4。
のこりはsqrt,print_int,print_char,read_int,read_floatの実装、sin,cos,atanの新fdiv向け変更
ハードウェアと協調したアセンブラの最終確認
及び、それに伴うシミュレータの改造
*simulatorバグ 3/9 19:41
ライブラリファイルの最後のjrでリターンできずに終了してしまう。
用はinstructionの最後でjrを行ったときに終了フラグがたってる?
今はライブラリの最後に
hoge:
jr
とか書いてごまかしてます。
*fdiv実装について 3/9 17:38
floatの実数値って-126<=e<=127でおk?by m
とりあえず64エントリのテーブル作って実装してます。
*simulator仕様変更について 3/9 10:24
RS232Cの通信基盤が完成したら、
simulator上でstackの最大サイズを求められる拡張をしてください。
同時にheapのサイズも測定できるようにしてください。
*simulatorのfcmp命令にバグあり。3/07 19:04
floatの比較をintのまま行っていたので直しておきました。 by森口
--- 本当に申し訳ないでした。 by ゲェン
*out命令の変更 3/05 1:40
out命令をByte出力用のoutb、4Byte(Word)出力用のoutwに分けました。
*li,ll命令の変更 3/03 20:58
li,llをaddiのシンタックスシュガーにしていましたが、
32bit即値を扱えないので、
新しくllo,lhi命令をハード実装にして、
li rd Imm -> llo rd Lo(Imm); lhi rd Hi(Imm)
ll rd label -> llo rd Lo(Address[label]); lhi rd Hi(Address[label])
を加えてください。
*fnegの実装 3/04 1:06
ハード実装にします。
というか、FPU実装でもなく、アーキテクチャ側で符号ビットの反転でいいかと。
*コンパイラ大課題完成しますた。
その勢いでsin,cos,atanのライブラリ実装も完了 2/28 12:28
*今後の目標、優先順位など思ってることby森口
**ハードウェア側
1.SRAMを用いたLoad,Storeの実装
2.通信回路rs232c周辺の作成
3.FPU bag-fix
4.インストラクションキャッシュktkrの実装
**ソフトウェア側
5.ライブラリ作成(scanf,printf,fdiv)
6.アセンブラ作成 2/28中に完成させてアップしてください。
7.シミュレータ作成
**コンパイラのみ
8.コンパイラ bag-fix
**役割分担(優先順位 高→低)
そうだ:1,4,2,3
あらい:2,1,3,4
グェン:6,7
もりぐち:5,8
*注意事項
あらい氏の優先順位は適当につけますた。
自分で決めていいと思います。
ハードウェアは二人で相互に成果物を理解しながら進めたほうが後々楽だと思います。
具体的にハードは僕には詳しいことまではわからないのでお任せします。
ライブラリの実装は3/3までにはもりぐちが全てやります。
アセンブラは28日中に実装完了してください。
そうだ氏との連絡不足でオペコードが策定できなかった場合は
期限を明日午前中まで伸ばします。
シミュレータはバイトコードを受け取り、シミュレーションを行ってください。
3/3までに命令を言語のプリミティブで表現したシミュレータを、
(たとえば、 fmul,mul を * で表現して実装するシミュレータ)
3/8までにCPU内部のビット操作を模倣したシミュレータを完成させてください。
デコード操作などはCPUの操作を研究して作るほうが後々楽だと思います。
3/3締め切りのシミュレータは動作スピードもそれなりに考えて実装してください。
10M Instructionを100秒ぐらいを期待してます。
*命令セット一部変更 2/27 22:26
ジャンプ命令において、
ジャンプ先がラベルである場合と、レジスタの内容である場合があるので、
今まで j, jal 命令であったものを、
|j rs|pc = rs|
|jl label|pc = label|
|jal rs|pc = rs|
|jall label|pc = label|
の4命令に分割しました。
またjr命令の引数を無しとしました。
|jr|pc = $ra|
----
**では
とりあえずソースとかをアップするための
UPLOADERとしてでも使ってください。
[[うぷろだ]]
全員分のページを用意しときました。
こんなことやったよ~とか、
いついるよ~とか書いたらいいかな~と思いまして。
なので、適当に書き換えといてください。
wikiについての要望は森口に伝えてくれれば何とかします。
**今後の予定
関数呼出規約の制定
SRAM,USBを月曜までにできるといいな。
発表資料作成
**SPIM MIPS simulator
[[SPIM homepage>http://www.cs.wisc.edu/~larus/spim.html]]
こんなのありますた。
Win版しか試してないけど、アセンブル、シミュレーションをやってくれます。
**春休み 3/20 18:52
みなさまいかがお過ごしでしょうか
しばらく休み、疲れも癒えたことと思います。
今後レイトレ完全動作のために必要なこと、
など、考えていることを記します。
ハードウェア係はとにかくCPUを書く、
そしてデバッグするということに尽きると思います。
そこでソフトウェア側からのサポートとして、
ソフトウェアによるデバッグ環境の整備、
コンパイラ、アセンブラ、シミュレータの使用方法の伝達が必要と考えています。
つきましては、明日の午後、地下にてそれらの作業を行いたいと思います。
**↓の変更を受けて、命令セットにlws,sws命令追加
lw,sw命令においてベースレジスタがsp(r16)の場合は、lws,sws命令とする。即値の減算でアドレス計算をする。こうすることにより、lw,lws,sw,sws命令のいずれにおいても、即値部は必ず正の数となる。
**FPU命令の追加
|fabs(111010) $rd,$rs|rd = abs(rs)|
|fiszero $rd, $rs(111001)|if rs = 0 then $rd = 1(0x1) else $rd = 0(0x0)|
|fispos $rd, $rs(111000)|if rs >= 0 then $rd = 1(0x1) else $rd = 0(0x0)|
|fisneg $rd, $rs(111011)|if rs < 0 then $rd = 1(0x1) else $rd = 0(0x0)|
|fless $rd, $rs, $rt(111100)|if rs < rt then $rd = 1(0x1) else $rd = 0(0x0)|
|setl $rd(31-26), label(25-0) (000011)|$rd = label|
*ライブラリ完成 3/10 17:57
sqrtの実装が完了
print_int,print_char,read_int,read_floatに関しては、
PPM(画像データ)の出力をバイナリで行うことでprint_byte,read_word以外は不要になりました。
*out命令の変更 3/05 1:40
out命令をByte出力用のoutb、4Byte(Word)出力用のoutwに分けました。
*命令セット一部変更 2/27 22:26
ジャンプ命令において、
ジャンプ先がラベルである場合と、レジスタの内容である場合があるので、
今まで j, jal 命令であったものを、
|j rs|pc = rs|
|jl label|pc = label|
|jal rs|pc = rs|
|jall label|pc = label|
の4命令に分割しました。
またjr命令の引数を無しとしました。
|jr|pc = $ra|
----
**では
とりあえずソースとかをアップするための
UPLOADERとしてでも使ってください。
[[うぷろだ]]
全員分のページを用意しときました。
こんなことやったよ~とか、
いついるよ~とか書いたらいいかな~と思いまして。
なので、適当に書き換えといてください。
wikiについての要望は森口に伝えてくれれば何とかします。
**今後の予定
関数呼出規約の制定
SRAM,USBを月曜までにできるといいな。
発表資料作成
**SPIM MIPS simulator
[[SPIM homepage>http://www.cs.wisc.edu/~larus/spim.html]]
こんなのありますた。
Win版しか試してないけど、アセンブル、シミュレーションをやってくれます。