ハードウェア構成法
CPU実験とのギャップを埋めるために今年からCPUの動きを教える事にしたらしい。うぉ、小林先生最高 & ナイスタイミングすぎ。今手元に先生が書かれた小型CPUのコードが有るので観賞中。but written in VHDL。
話によると、先生はまず信号パターンを決めてからVHDLに落とすらしい。実際にコードもそのようになっていて、トップ階層に if や case がずらずらと並んでおり、信号パターンを精密に再現したコードになっている。これは絶対速いんだろうけれど、それは設計が良いからで有って(職人芸)、初学者がこんなコードを書こうモノなら一瞬で挫折するだろうなぁと思った。全く言語の機能を全く活用していない(opencores.orgのコードなんかを見ていると、もうちょっと modularize されている)。まぁもうちょっと観賞しよう。
"<="オペレーターが並列的に代入される事を頭に入れておけとTAの人がおっしゃっていた。そういわれてみると、ロジック記述の他は、コードが並列的に実行されている様子が頭に浮かんで来る。なるほどー。頭にCPUが流れ込んでくるようでちょっと興奮。女の人の方がこういうのに向いていそうだなーと、ふと思った。
# TAの人に日記捕捉されてるのには参った...。
SigScheme開発録 (53)
本日も8時寝2時起きで真夜中Hack。しかし明日はフランス語の試験なので、良い所で切り上げる。半分ぐらいはシケプリ目を通したけど、右から左へ抜けていっている気がする。
- SCM_OBJ_COMPACT
- 実行時間測定 (time ./sscm bench/bench-fib.scm)
- 以下のような結果になった。思ったより速度低下が無い感じ。
ビルドオプション | 実行時間 |
---|---|
SCM_DEBUG = 0, SCM_OBJ_COMPACT = 0 | 2.49s user 0.01s system 99% cpu 2.513 total |
SCM_DEBUG = 0, SCM_OBJ_COMPACT = 1 | 3.05s user 0.00s system 99% cpu 3.059 total |
- メモリプロファイリング
- 前にoxy君に教えてもらった方法で、valgrind 付属の massif を使ってメモリ使用量をグラフ化してみた。
- libtool --mode=execute valgrind --tool=massif ./sscm bench/bench-let-loop.scm
当然ながら半分になっている。こっちは速度が2倍近く遅くなっているな。パフォーマンスチューニングが必要だ。
Haskell : List and Multiple Values as Monad
リストも Monad ですか。多値も Monad ですか。そうですか。考えた奴頭良すぎ...。以下SOEより。
{- List as Monad -} instance Monad [] where m >>= k = concat (map k m) return x = [x] fail x = [] (>>=) :: [a] -> (b -> [b]) -> [b] return :: a -> [a] {- Multiple Values -} do x <- [1, 2, 3] y <- [4, 5, 6] return (x, y) <=> [1, 2, 3] >>= ( \x -> ( [4. 5. 6] >>= ( \y -> return (x, y) ))) <=> [(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]