Skip to content
Browse files

Merge pull request #4 from tomykaira/presen_1009

10/09ぶん発表資料を作成
  • Loading branch information...
2 parents 514b54d + c7d22cb commit 14f9245699a16889db04075b03440d49b69065cb @tomykaira committed Oct 8, 2012
View
BIN presentation/121009/hanabi.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN presentation/121009/hanabi2.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN presentation/121009/mandelbrot.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
269 presentation/121009/mimic.md
@@ -0,0 +1,269 @@
+author: IS3年 完動班 卜部、冨田、濱中、名取
+title: Mimic architecture
+
+# 完動?
+
+The "fastest" implementation for CPU Ex.
+
+## 「速さ」とはなにか
+
+従来の CPU 実験: レイトレーサを高速に動作させること
+
+私の CPU 実験: レイトレーサを動作させるプロダクトを**短期間で**作成すること
+
+## 結果
+
+本番アーキテクチャ設計開始から**10人日**で実機動作
+
+## 1. ソースとの同一性および再現性
+
+- 同一性: シミュレータとのビットレベルの同一性は確認
+- OCaml との同一性は確認できず
+ - 16384(128*128) ピクセル中 9 ピクセルがことなる
+ - 最適化により演算回数が異なるため、FPU の実行回数がことなり、それによる誤差がことなる
+ - OCaml は内部的に数値を double で扱うため、単精度 ⇔ 倍精度の変換誤差が生じる
+- 再現性: 5回連続でおなじデータが出力された
+
+## 2. 計測結果
+
+コンパイラコード = ハンドコード: 110.26 s
+
+## 3. min-rt.ml の変更
+
+- true, false は削除
+- xor はハードウェア実装
+- 審判サーバとのコミュニケーションのため、0xaa の送信コードを追加
+
+## CPU 仕様
+
+- MIPS ベースの ISA。必要そうなものは入れているので、比較的コンパイラに自由度がある。
+- マルチクロックサイクル(可変サイクル数, 3 - 7)
+- 66MHz(標準クロックでぴったり)
+- 32bit CPU
+- 32 本レジスタ * 2 (GPR, FPR)
+
+## コンパイラ・ライブラリ
+
+CPUExSolver2 を使用
+
+- 命令セットのカスタマイズ性が足りなかったので管理方法を改善(ad-hoc)
+- GUI が使いにくかったので XML 単体で扱いやすいように変更
+- 32 bit CPU で動作しない問題を解消
+- 成果は [tomykaira/CPUExSolver2 at config](https://github.com/tomykaira/cpuexsolver2/tree/config) で公開
+
+今後は ExSolver を捨て、卜部が min-caml をもとに作成する。
+最初は命令数が増えてしまうが、全体を把握したコンパイラができるので、仕様の確認やデバッグが容易になるだろう。
+
+## シミュレータ・アセンブラ
+
+CPUExSolver2 の生成したものに命令流、データ流のダンプを追加。
+
+同様のものを HDL シミュレータから出力し、diff。
+
+- 命令実行時に命令の内容
+- レジスタ書き込み時に書込み先と内容
+- メモリ書き込み時に書込み先と内容
+- IO 命令実行時
+
+## CPU・FPU
+
+フルスクラッチで作成。
+
+- D. Harris, 『ディジタル回路の設計とコンピュータアーキテクチャ』 をもとに最低限の VHDL を記述
+- マルチクロックサイクル用のデコーダを作る
+- 部品をつくる(レジスタ、ALU、FPU、アドレス計算、etc.)
+- FPGA に書きこむ
+- 動く
+
+## CPU・FPU
+
+Verilog と VHDL が混在。
+
+- VHDL は vhdl_doctest で組み合わせ回路の検証ができる
+ ハードウェア実験で使っていたので安心感がある
+- Verilog は記述力が高く、テストベンチや FPU などのモジュールに向く
+
+# 「速さ」のために
+
+アジャイル、XP のプラクティスを参考。
+
+- イテレーティブな開発
+- フィードバックループ
+- テスト駆動開発
+
+これらを実践した結果、レイトレは一発で実機動作。
+
+## イテレーティブな開発
+
+いきなり目標を目指さない。到達可能な地点を目指す。
+
+問題を分割する。次の目標に到達できないことがわかったら、その間になにか飛び石を作ってみる。
+
+- fib
+- 行列計算
+- マンデルブロ <= 用意されていなかったので自分で作った
+- レイトレ
+
+## イテレーションの価値
+
+- いままで自分が作ったものが期待どおり動作することに確信が持てる
+- わかりやすい成果を示せる(発表の時など)
+- 進捗が測りやすい
+- 一度に改善すべき機能の数、対処すべきバグの数が減るので対処しやすい
+
+## イテレーションの価値
+
+実際に、マンデルブロを実機動作させることで Queue の長さがたりないという分かりにくい問題に対処できた。
+
+## フィードバックループ
+
+正しい方向に進んでいるかを常に確認する。
+
+- ソフトウェア実装、CPU シミュレータ
+- 組み合わせ回路のテスト
+- HDL シミュレータ
+- 実機(ダンプコードあり)
+- 実機(大会レギュレーション)
+
+## フィードバックの情報量
+
+「うごいた」はわかりやすいが、「うまく動かない」はわかりにくい。
+
+**「なぜ動かないのか」は無限にある**から。
+
+## フィードバックの情報量
+
+動かない場合は問題領域をできるかぎり縮小する。
+問題領域に対して得ることのできるフィードバックの量が相対的に大きくなる。
+
+ハードウェアのようにフィードバックの量に物理的制限が場合はとくに有効。
+(実機からは実質 RS232C 出力しか得られない)
+
+## ハードウェアデバッグの例
+
+問題: マンデルブロの一部について出力が得られない(データが消える)
+
+- どの領域が表示されないのか
+- その領域を表示するコードだけ切り出してみたらどうか
+- 一行ぶんならどうか
+- 増やしていくとどうなるか
+
+結果、送信バッファの Queue があふれていて、演算が速くすむ部分だけが消えていることがわかった。
+
+## テスト駆動開発
+
+実際にイテレーティブかつフィードバックを得ながら開発するガイドライン。
+
+## テスト駆動開発 - Red
+
+- 動作させたい部分が動作していることを保証できるプログラムを書く
+ まず手書きアセンブラ、それから ML
+- CPU シミュレータで目的が達成できることを確認する
+ 自分のプログラム、シミュレータ、コンパイラ、アセンブラをデバッグしていることにもなる
+
+## テスト駆動開発 - Green
+
+- 回路を記述し、 HDL シミュレータで動作することを命令、ビットレベルで確認する(Green 1)
+ ふたつのシミュレータでまったくおなじ出力を出せるようにしておいて、diff すると便利
+- 実機に載せて動作することを確認する(Green 2)
+
+# 完動のまとめ
+
+- ひとつの課題
+- ことなる目標
+- ことなる速さ
+
+## くわしくは
+
+[CPU 実験完動報告 - tomykaira makes love with codes](http://tomykaira.hatenablog.com/entry/2012/09/19/012014)
+
+環境、流れ、作った/使ったツールに言及しているので実験で参考になるはず。
+
+## 謝辞
+
+- @atetubou さん
+- @furaga さん
+- 細川さん
+
+# 今月の余興
+
+- 生田さんから月一で余興やれとお達しが来たので
+- CPU 高速化とかより余興のほうが好きなので
+
+できるかぎりやります。
+
+今月の余興: 自作 CPU でいろんなもの描いてみたよ
+
+## マンデルブロ
+
+![mandelbrot](mandelbrot.png)
+
+40M 命令ぐらいでコンパイラのデバッグ、ハードウェアの仕上げにちょうどいいサイズ。
+
+ソースコード: https://gist.github.com/3736635
+
+## 花火
+
+![hanabi](hanabi.jpg)
+
+PS1 みたいって言われた……
+
+しょぼいのはレイトレの仕様でオブジェクトが 40 個までしか置けないため。
+
+## 花火2
+
+![hanabi2](hanabi2.png)
+
+あまりにショボかったので専用のプログラムを書いた。
+
+ソースコード: https://gist.github.com/3836880
+
+# 今後の予定
+
+ここからやっと班の話をします。
+
+- 卜部: コンパイラを作る(短期目標:うごかす、長期目標:速くする)
+- 冨田: あそぶ
+- 濱中: FPU が仕様を満たしていることを確認する(短期目標)
+- 名取: シミュレータをリッチにして卜部を助ける
+
+## 進捗状況 - 卜部
+
+- 現在、SPARC用のmin-camlをCPUに合わせて改造中
+- 来週にはまっとうなコンパイラでの実行結果が提示できるはず
+
+## 進捗状況 - 濱中
+
+冨田が作成した finv のテーブルの誤差が大きすぎる問題を修正中。
+
+仕様を満足するためには fdiv = finv * fmul であることから、 4ulp 未満が十分条件。
+
+手作業でテーブルを書き換えることでこの目標を達成できたが、分散が大きいのと、再現性がないので、計算的に書き換える方法を模索中。
+
+- 手打ち修正: ±3ulp以下/8384977 ±4ulp/3631 ±5ulp以上/0
+- 最適化関数: ±3ulp以下/8357217 ±4ulp/30769 ±5ulp/622 ±6ulp以上/0
+
+## 線表?
+
+ 卜部: -------(コンパイラ)--------
+ 濱中: -(FPU)-
+ 名取: -(Sim)-
+
+- マイルストーンがない
+- 予定の依存関係がない
+- 予定は未定
+
+## 課題管理
+
+明確なストーリーがないので、 Github の Issue で管理する。
+
+- 進捗を明確に把握する
+- 変化に対応する
+- コミュニケーションを記録としてのこす
+
+ITS より軽量で使いやすい。
+
+## 来週の予定
+
+- 卜部が作成したコンパイラでの実機動作を披露
+- 濱中による finv テーブルの修正方法についての説明
View
101 presentation/mimic.md
@@ -1,101 +0,0 @@
-author: 東京大学 理学部情報科学科 3年 冨田寛
-title: Mimic architecture
-
-# Concept
-
-The "fastest" implementation for CPU Ex.
-
-## 「速さ」とはなにか
-
-従来の CPU 実験: レイトレーサを高速に動作させること
-
-私の CPU 実験: レイトレーサを動作させるプロダクトを**短期間で**作成すること
-
-# 結果
-
-本番アーキテクチャ設計開始から**10人日**で実機動作
-
-110.26s (おそい!)
-
-## CPU 仕様
-
-- マルチクロックサイクル(可変サイクル数)
-- 66MHz(標準クロックでぴったり)
-- 32bit
-- 32 本レジスタ * 2 (GPR, FPR)
-
-## コンパイラ・ライブラリ
-
-CPUExSolver2 を使用
-
-- 命令セットのカスタマイズ性が足りなかったので管理方法を改善(ad-hoc)
-- GUI が使いにくかったので XML 単体で扱いやすいように変更
-
-## シミュレータ・アセンブラ
-
-CPUExSolver2 の生成したものを改造。
-
-出来あいのはデバッグ能力に欠けるので、命令流、データ流のダンプコードを追加。
-
-## CPU・FPU
-
-フルスクラッチで作成。
-
-ハードウェア実験の資産を活用(FPU、RS232C、SRAM)。
-
-# 「速さ」のために
-
-アジャイル、XP のプラクティスを参考。
-
-- イテレーティブな開発
-- フィードバックループ
-- テスト駆動開発
-
-## イテレーティブな開発
-
-いきなり目標を目指さない。到達可能な地点を目指す。
-
-問題の分割。
-
-- fib
-- 行列計算
-- マンデルブロ
-- レイトレ
-
-## フィードバックループ
-
-正しい方向に進んでいるかを常に確認する。
-
-- ソフトウェア実装、CPU シミュレータ
-- 組み合わせ回路のテスト
-- HDL シミュレータ
-- 実機(ダンプコードあり)
-- 実機(大会レギュレーション)
-
-## テスト駆動開発
-
-実際にイテレーティブかつフィードバックを得ながら開発するガイドライン
-
-- 動作させたい部分が動作していることを保証できるプログラムを書く(アセンブラ、ML)
-- CPU シミュレータで目的が達成できることを確認する
-- 回路を記述し、 HDL シミュレータで動作することを命令、ビットレベルで確認する
-- 実機に載せて動作することを確認する
-
-# まとめ
-
-- ひとつの課題
-- ことなる目標
-- ことなる速さ
-
-## くわしくは
-
-[CPU 実験完動報告 - tomykaira makes love with codes](http://tomykaira.hatenablog.com/entry/2012/09/19/012014)
-
-環境、流れ、作った/使ったツールに言及しているので実験で参考になるはず。
-
-## 謝辞
-
-- @atetubou さん
-- @furaga さん
-- 細川さん
-
View
27 presentation/report121009.md
@@ -1,27 +0,0 @@
-# 進捗報告(1回目)
-
-ほぼ完動
-但し、「非最適化出力」と一致するかは未検証
-- 例えばコンテストルールの(4)の条件を満たしていないかも
-
-# ISA
-
-- MIPSベース、現状変えるつもりは無い
-
-# 今後の予定(案)
-
-コンテストルールに沿うように調整
-- ルール1の同一性の検証(再現性は検証済)
-
-# 線表
-
-(10/3時点では)特に決まっていない
-まずレギュレーションを満たすように
-- (2週間あれば良いでしょう)
-- その後は各自やりたければ高速化、野望実現など
-
-# 各人の役割
-- コンパイラ係 : (するなら)高速化、出力コードの最適化
-- シミュレータ係 : (必要なら)機能追加(GUI, breakpoint等)
-- コア係 : (するなら)高速化、レギュレーションの検証
-- FPU係 : FINV が要求仕様を満たすように調整

0 comments on commit 14f9245

Please sign in to comment.
Something went wrong with that request. Please try again.