憂鬱な午後のひととき


3月31日_
『旅のラゴス』(筒井康隆)
ストーリーも文章もプロフェッショナル. 奇をてらわなくても存分に読ませる人なんだよなと今更ながら再認識. 主人公の思慮深さは見倣いたいな.
3月28日_
HackTheCellPostMortem
学生から普段は表に現れない凄い方まで意外と分散していてとても刺激になった. 上位の人は粘りが違うなと.
・kikiさんにRからRへの関数全体のなすRベクトル空間V:=Map(R, R)の基底の構成法は?と聞かれたとき即答できなかったけど, 無限次元ベクトル空間の基底の存在証明をそのままなぞる形が欲しかったもんやろか. つまりS={A⊆X:Aの任意の有限部分集合がR上線型独立}とする.{id_R}∈SだからSは空でない. Sは帰納的順序集合なので極大元Bを持つ. BはVの基底. 具体的って言ってもなあ.
3月25日_
VCの定数伝搬最適化続き.
// b.lib作成
cl /Ox /GL /c b.cpp
lib /out:b.lib /LTCG b.obj
// c.lib作成
cl /Ox /GL /c c.cpp
lib /out:c.lib /LTCG c.obj
// a.cppとリンク
cl /Ox /GL a.cpp b.lib c.lib /W4
>a.cpp(5) : warning C4723: 除算の 2 番目のオペランドは、
>コンパイル時に0と評価され、不定の結果を返します。
ライブラリにしてもOKなのか. エディット・コンティニューやVC10のインテリセンスについてなども見てると オブジェ生成&ライブラリ生成&リンクなどの境界がどんどん曖昧になってきてるんだな.
3月24日_
喉の異物を見てもらう. 最初近所の内科→これは外科だね→エコー→腫瘍?内に血液?→うちじゃ手に負えないので大病院の外科紹介→そのまま移動&2時間半待ちで再度エコー→これは耳鼻咽頭科かな→2時間待ち→造影剤投与でCT→1時間待ち→リンパ?→血液検査→次回. 締めて約2万円. 疲れた.
3月23日_
懇親会参加. ああいう濃い参加者たちの中で事務系の女の人が話あわせるの大変だろなと思った.
3月22日_
第二回 LLVM 勉強会行ってみた. シェーディングのキャッシュによる高速化はJITでなくてもできるんだから, なんで今までされてなかったんだろうって思った.
3月20日_
朝起きたら喉仏の上あたりにピンポン玉ぐらい(直径4cm)の巨大なしこりができてたんだが, これってやばくないか.
3月19日_
・ここ数日, 唐突にmoshをWindowsに移植し始めてとりあえずFizzBuzzぐらいは動くようになった. 本当は『プログラミングGauche』(Kahuaプロジェクト)を読み始めてたんだが処理系の移植に熱中してしまった. というわけでまだ「(print "hello")が動きません」と質問してるレベル.
・今日思わず笑ってしまったVCの定数伝搬最適化.
>cat a.cpp
#include <stdio.h>
double zero();
int main()
{
    double a = 1 / zero();
    printf("a=%f\n", a);
}
>cat b.cpp
double one();
double minus_one();
double zero() { return one() + minus_one(); }
>cat c.cpp
double one() { return 1; }
double minus_one() { return -1; }
コンパイルすると
>cl /Ox /GL a.cpp b.cpp c.cpp /W3
>a.cpp(7) : warning C4723: 除算の 2 番目のオペランドは、
>コンパイル時に 0 と評価され、不定の結果を返します。
そこまでするか.
3月18日_
L"abc""def"や"abc"L"def"は現状のC++の規格では未定義らしい. gccだとwchar_tとしてくっつく. VCだとエラー. C++0xでは現行のgccの挙動になるようだ.
3月15日_
TZV上のペアリングだって. 久しく数学やってないから読めるかな. どの程度使えそうなんだろう. どなたか教えて.
3月13日_
第73回 人工知能基本問題研究会
全くの門外漢だけど面白かった. 聞いててむずむずしてきたので論文みて実装してみようかな.
3月12日_
結果
Cだったのかよっ.
・医療費の還付のために自転車でちょっと遠めの役所に行った帰り, 気が付いたら迷子になっていた. 寝不足でぼけっとしていたのと, まだ引っ越して1年でそっち方面にはあんまり行ったことないとはいえ, 方向音痴は健在だった.
3月11日_
括弧ありなし
これならVC/gcc同じ挙動を示した.
#include <stdio.h>
int main()
{
    int a;
    printf("a=%d\n", a);
    int b = int();
    printf("b=%d\n", b);
}
//
a=2019276528
b=0
・配列の要素数を取得するマクロ
#define NUM_OF_ARRAY(x) (sizeof(x) / sizeof(*x))
template<class T, size_t N>
size_t NUM_OF_ARRAY(const T (&)[N]) { return N; }
にすると
int a[] = { 1, 2, 3 };
char b[NUM_OF_ARRAY(a)];
が通らないんだよな. C++0xのconstexprだと大丈夫そうだけどVC10には入らないっぽい. 既存の処理系でマクロを使わないでできないかな.
3月10日_
・nasmをupdateしたらXbyakの64bit call/jmpの単体テストが通らなくなった. nasmもバグってたみたい. で, update.
tempering
F232上の同型写像だから逆写像とxorを使ってmt[]に持って行けるかというのは考えたけど, 一部だけ修正というのは考えなかったなあ.
3月9日_
cntb
私も似たようなこと考えていたのですが, 最内ループでは32個のtemporaryレジスタt[i]に対して各bitのcntb(y[i])だけ求めてaddしておき(8x5=40なので繰り上がりなし), 終わったところでt[i] = sumb(t[i], t[i + 16])すれば16bitシフトと加算ができるのでそれを足していくのが手数が少なそう(a x 176, cntb x 160, sumb x 16)と思いました. 実際にはCでやってみるとtemporaryレジスタがstackに取られてしまって遅くなってしまって多少妥協したのですがasmならその辺うまくできるんじゃないかと.
ま, kikxさんがもっと凄いやり方を出してくれるような気はしますが.
3月8日_
・『沈黙のフライバイ』(野尻抱介)と『妙なる技の乙女たち』(小川一水)
軌道エレベータがもう実現してると錯覚しながら読んだ. いいなあこれ.
・昨日はC++の会議に参加. 海外の人はUnicodeやる気ねーんだなーという感じ.
3月7日_
間際に出したやつがC版の82倍. 昨日やり始めたasm版はまだ全然パイプラインが埋まってないので論外なんだけど oddが1030(a x 152, ai x 1, and x 32, sel x 317, xor x 528). evenが1222(lqr x 336, rotqbii x 317, rotqbyi x 225, shli x 4, stqr x 162, sumb x 16, etc). oddがかなり空いてるんでsumbやshliをoddに持って行けばshinhさんに並べたかもしれない. 本当はそういうことに時間をとるべきだったので何を考えていたのか, あまりに愚かだ. それはともかく時間切れのためレポートもまともに書いてないのでこちらに書いておこう. x86と違って全てのクロックが決定的なのは新鮮だった. kikxさんの革命的アイデアを知りたい. リモート環境は素晴らしかったです. フィックスターズの方々ありがとうございました.
3月6日_
ゲームオーバー. 結局80倍ちょっとで終わった. asm使うかどうか迷いつつ, 面倒そうだなあとだらだらとCのみで進もうとしたのが愚かだった. 今朝になって試しにPythonで*.sを生成させてみたら, 60倍程度のとりあえず動作するものは意外と簡単にできてしまった. おおー, と思いつつしこしこパイプライン埋め始めたけど時間切れ. 後の祭り. こんなことなら「ここにvolatileつけたら速くなる」なんてやってないでさっさとasmに絞っとけばよかった. 無念.
3月5日_
本社で開発発表会. まあぼちぼちと. ちょっと一息.

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