2006年11月29日

x86 asm

nu先生にx86のアセンブリについて色々教えていただいた。asm volatile内をごりごり書けるようになった。これぐらい出来なかったの?とか言われそうであるが...。

最初にごりごり書いたアセンブラが独自アーキテクチャのアセンブラ(自分で作った奴)なのでそっちに脳内変換されるのだが、あんまり良くない。

Asyncronous I/O

ソース。

AsyncIOについて(その1)
AsyncIOについて(その2)

またあちこちのBlogを見る限りNonBlockingI/OやNonBlockingI/O+シグナルとAIOが混同されている気がしたので,それら整理してみたい.

大体以下のような理解でいいのでしょうかね。もしかしたらきっちりした定義が有るのかもしれませんが。

Asyncronous I/Oの続きを読む

安全なCFLAGS

ソース

うーむ、参考になる。

加えてFedoraCore6上のgcc 4.1.1では-ftrapvをつけると、あるソースをコンパイル中にSegmentation Faultしてしまう事を確認しました。ちょっとここらで安全なCFLAGというのをgcc projectの人に書いてもらいたい所だなぁ。

2006年11月27日

FFTによる多倍長演算 by Haskell

C言語で書いたときに再帰が綺麗だったので関数型で書いてみた。

FFTによる多倍長演算 by Haskellの続きを読む

FFTによる多倍長乗算

レジュメ

FFTを使うと多倍長乗算のオーダーをnlog(n)に落とせて乗算が速くなるよという話だったんだが実装が結構つらかった...。Web上にFFTのプログラムなんてのはごろごろ転がってるけど理論から理解しないと見ても分からないんだよなぁ。

結局、Cooley-Tukey FFT algorithmを再帰を使う分かりやすいプログラムにして実装。ビット反転を使用してバタフライ演算を実現する気力は無かった。これをアセンブラでゴリゴリ書いたら円周率とか高速に求まって嬉しいんだろう。

今から筆算方式の乗算を適当に書いた後レポートを書いて提出予定。徹夜つらい。

追記:
出した。1 << 16桁ぐらいで筆算方式が遅すぎて時間計測できなくなった。

2006年11月26日

うはー

仙石さんと一緒に未踏してた学生ってこの2人だったのか...。

2006年11月21日

RubyCGIのデバッグ

ソース

なんとなく反応してみる。僕はとりあえず "p" で事足りています。そんなに大規模なものを書いたことが無い(ほとんど使い捨てスクリプト)というのが大きいけど。CGI書くときはこんなのを使っています。


begin
  main
rescue
  p $!
end

$!には起こっている例外が入るので、ブラウザ上に例外の内容が表示されてデバッグ効率が上がります。"tail -f /var/log/httpd/error_log"しながら開発するのも良いですが、なんかイチイチ目を移すのが面倒なのでこんなのを使っています。レンタルサーバーの人にもおすすめ。

以上、子ネタでした。

2006年11月17日

献本して頂きました(2)

少し報告が遅れましたが、高林さんから噂のBinary Hacksを献本していただきました。

Binary Hacks ―ハッカー秘伝のテクニック100選
高林 哲 鵜飼 文敏 佐藤 祐介 浜地 慎一郎 首藤 一幸
オライリー・ジャパン
売り上げランキング: 92

PS.
生協に山積みされていたBinary Hacksが全部売れていた。

献本して頂きました(2)の続きを読む

2006年11月15日

連続系演習第2回

OpenMPを用いた分散行列積計算プログラム

提出完了。次はFFTですか。FFTって何~?から始めんとな...。

献本して頂きました(1)

布留川さんにActionScript 3.0ゲームプログラミングブックを献本していただきました。裏表紙にJavaのDuke君の絵も書いてもらいました(笑)

ActionScript 3.0ゲームプログラミングブック
布留川 英一
毎日コミュニケーションズ
売り上げランキング: 1285
おすすめ度の平均: 5.0
5 ActionScript3.0を勉強するならこの本!!

献本して頂きました(1)の続きを読む

2006年11月13日

Async IO on lighttpd

lighty's lifeによると、次期lighttpdはaioを使って80%ほどスループットが向上したようである。

The idea is:

1. create a buffer in /dev/shm and mmap() it
2. start a async read() from the source file to the mmap() buffer
3. wait until the data is ready
4. use sendfile() to send the data from /dev/shm to the network socket

Important for the performance: the data is never copied into user space. We only move it from one side of the kernel to the other side.

賢い。確かに早くなるのは分かるんだけど、エラー処理の部分が気になるなぁ。コード見てみる。しかしまずlibaio.hというのが何処にあるか分からんぞ...。このライブラリはどこから来ておるのだ...。

2006年11月11日

CPU実験(15)

動いた!まえださんにPS3の発売日に間に合わせる!と宣言してたら同じ日になってしまった。丁度1ヶ月ー。その後nyaasanを加えてレイトレ動作飲み。深夜辺りの記憶が無い。色々ばぐっていたような気がする。ご迷惑をかけた皆様、ごめんなさい(笑)

参照:
- naoki
- yama
- ush
- nuはまだ満足していないらしい(笑)

2006年11月09日

CPU実験(14)

グロ画像ゲット。

追記:

おお。約780秒。

参考:

yamaさん, ushさん

2006年11月08日

CPU実験(13)

USB制御回路にバグが有る。

sldファイルを正常に送れない模様。

黒画像は出たけど、これはちょっとはまりそう。

2006年11月07日

CPU実験(12)

今日中に動くかと思われたが、制御系のバグがまだ有る模様。

あと2,3個バグを取れば絶対動くはず。

あと fadd を1 clockで返せるかもしれないアイデアを思いついたので、レイトレが動いたら試してみよう。

2006年11月05日

CPU実験(11)

「かけざんが上手くわけられない」

と寝言を言っていたらしい。

病気だ。

迷走しまくっている5班も、シミュレーター上でようやく絵が出たらしく良い感じに競争になってきたかも。

2006年11月04日

CPU実験(10)

Pipelined FPUがとりあえず出来た。

  • fadd / sub
  • fmul
  • itof
  • ftoi
  • finv
  • fsinv

nuさんがfinv, fsinvを書いてくれた。fadd / sub, fmul, finv, fsinvだけだと、「Text-based Post-Place & Route Static Timing Report」によると100MHzで動くらしい。ftoi, itofは意外とHW量食う事が分かったので将来的に無くす方向で。精度チェックもした。とりあえず50MHzで動かすので全然問題は無い。ほんとかな。

しかし10 ns / stageで動かすのは相当骨が折れた。先輩が100HMzで動かしてなかったら努力しなかったと思う。今はFPUだけだが、CPU本体と合わせると配線遅延もあるしまだまだチューニングがいる気がする。先人は偉大だ...。

さて、ISEのバグではまっていらっしゃるnaokiさんの尻を叩けばを手伝えば来週中にレイトレが動くか!?

2006年11月03日

CPU実験(9)

100MHzの世界が見えてきた

FPUも100MHzが見えてきた。

CPUはISEのバグを踏んだらしい

CompilerはregisterAllocationで悶絶している。

本当は今週中に絵を張りたかったのだが...来週こそ。

寝れないとEmacsを立ち上げる人間しか周りにいない。

TV見るぐらいなら、Emacs立ち上げる。

そのための、alias e='emacs -nw'なのです。