憂鬱な午後のひととき


5月28日_
いろいろいじりたいがあまり時間をとれない. とりあえずmprotectの第二引数はpage sizeの倍数になってなくてもいいことを確認した(mm/sys_mprotect.c).
    len = PAGE_ALIGN(len);
5月26日_
Xbyak 2.02修正した.
・↓4の問題は結局はローカルラベルをサポートしていないことによる. そのための情報はVC++なら__FUNCSIG__, gccなら__PRETTY_FUNCTION__で取得可能(C90の__func__だと情報量が少ないのでC++では使えない). だが, これらはメソッドのデフォルト引数には使えないようだ. つまりjmp("lp");としたときにjmp("lp", __FUNCSIG__);とさせられない. となるとマクロを使うことになるがLなんてマクロを定義したくないし全ての分岐命令のマクロも用意したくない. さてどうしたものか. ばっさり諦めるべきかなあ.
5月25日_
これひょっとしてダメか
本当だ. ご指摘ありがとうございます. mprotectの第二引数はページサイズに丸める必要はなかったのか. 余計なことしてバグったってやつだな.
・手作業での2.4から2.6移行は無謀かなあ. なんだか泥沼状態.
5月24日_
ちょっとまじめ(アルゴリズムの改良) + せこい(マルチコア) + ネタ(busy loop)で最高記録達成. 来月のペアリングフォーラムで喋るか.
5月23日_
futexで実装しようと思ったが我が家のメインLinuxマシンのカーネルは2.4系列(一応ほぼ最新)でそんなもん無かった. ええ加減新しいのを入れた方がさくっと便利なのは分かってるのだが(2.4はgcc4でコンパイルするのも大変だ), いろいろいじって愛着があって馴染んでるので使い続けてる. どうしよう.
5月22日_
・busy loop調節したら60%ほど速くなった. なかなかの好成績. 計算直前にthread起こすようにしたら1割遅くなった. それでも上出来かな. ただLinuxではもとより遅くなった. あとWindowsのEVENT相当はfutexを使って実装すればええんかな. 意外と情報少ないなあ.
Xbyak2.01に@@, @F, @Bを追加してみた(適当Ver)
入れようと思ったんやけど
void func1()
{
    L("@@");
    ...
    jmp("@f");
}
void func2()
{
    L("@@");
    func1();
    jmp("@f");
}
ってしたときの挙動が分かりにくいバグを招きかねないなあ. どうしよう.
5月20日_
週末から風邪引いて辛い.
OSのコンテキストスイッチよりも細かいタイミングで同期を取りたい場合はbusy loopで回すしかないんだろうか.
    void *para_;
    void (*func_)(void*);
    void threadEntry() /* 別スレッドで待機 */
    {
        do {
            while (state_ == WAIT) _mm_pause(); // busy loop
            func_(para_);
            _mm_sfence(); // storeのシリアライズ
            state_ = WAIT; // stop
        } while (state_ != QUIT);
    }
    /*
        本体
        func(para1)とfunc(para2)を別々のCPUに計算させる
    */
    void calc(void *para1, void *para2, void func(void*))
    {
        para_ = para1;
        func_ = func;
        _mm_sfence();
        state_ = RUNNING;
        func(para2);
        while (state_ == RUNNING) _mm_pause();
    }
まあ実際には使えないだろうけど速度命の場合はこんな感じ?
5月15日_
YAPC::Asia 2008に行ってきた. 会場のあまりの寒さに体の調子がおかしくなる. 私が行ってた大学では大講義室でも天井にほこりを舞い散らすだけの扇風機があっただけな気がするが. 贅沢というか時代に逆行してるというか.
天気がよくてキャンパスの芝生でひなたぼっこできたのがせめてもの幸い.
5月13日_
エコナビ2008:三菱UFJシステム障害 原因は単純ミス
根拠はなかったねえ.
5月8日_
やっぱ疲れてるのかな. 昨晩の地震に気がつかなかった.
5月7日_
・64bit Lniuxでは呼び出し直後の[rsp]~[rsp-128]はrspを変更しない限り呼び出された側で自由に使ってよい領域(red zone)らしい. 割り込みハンドラでそこを使わないことが保証されている. 末尾の関数(そこから何も呼びださない)ときはスタックをいじらなくても多少はそこに退避できるというわけだ. Power PCにもred zoneはあるが64bit Windowsにはないみたい. 残念.
・気がついたらゴールデンウィークが終わってた. めっちゃ眠くてしんどくてひたすら寝ていた.

御意見は光成滋生<herumi@nifty.com>までお願いします