憂鬱な午後のひととき
『旅のラゴス』(筒井康隆)
ストーリーも文章もプロフェッショナル. 奇をてらわなくても存分に読ませる人なんだよなと今更ながら再認識.
主人公の思慮深さは見倣いたいな.
・
HackTheCellPostMortem
学生から普段は表に現れない凄い方まで意外と分散していてとても刺激になった. 上位の人は粘りが違うなと.
・kikiさんにRからRへの関数全体のなすRベクトル空間V:=Map(R, R)の基底の構成法は?と聞かれたとき即答できなかったけど,
無限次元ベクトル空間の基底の存在証明をそのままなぞる形が欲しかったもんやろか.
つまりS={A⊆X:Aの任意の有限部分集合がR上線型独立}とする.{id_R}∈SだからSは空でない. Sは帰納的順序集合なので極大元Bを持つ. BはVの基底. 具体的って言ってもなあ.
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のインテリセンスについてなども見てると
オブジェ生成&ライブラリ生成&リンクなどの境界がどんどん曖昧になってきてるんだな.
喉の異物を見てもらう. 最初近所の内科→これは外科だね→エコー→腫瘍?内に血液?→うちじゃ手に負えないので大病院の外科紹介→そのまま移動&2時間半待ちで再度エコー→これは耳鼻咽頭科かな→2時間待ち→造影剤投与でCT→1時間待ち→リンパ?→血液検査→次回.
締めて約2万円. 疲れた.
懇親会参加. ああいう濃い参加者たちの中で事務系の女の人が話あわせるの大変だろなと思った.
第二回 LLVM 勉強会行ってみた.
シェーディングのキャッシュによる高速化はJITでなくてもできるんだから, なんで今までされてなかったんだろうって思った.
朝起きたら喉仏の上あたりにピンポン玉ぐらい(直径4cm)の巨大なしこりができてたんだが, これってやばくないか.
・ここ数日, 唐突に
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 と評価され、不定の結果を返します。
そこまでするか.
L"abc""def"や"abc"L"def"は現状のC++の規格では未定義らしい. gccだとwchar_tとしてくっつく. VCだとエラー. C++0xでは現行のgccの挙動になるようだ.
TZV上のペアリングだって.
久しく数学やってないから読めるかな. どの程度使えそうなんだろう. どなたか教えて.
第73回 人工知能基本問題研究会
全くの門外漢だけど面白かった. 聞いててむずむずしてきたので論文みて実装してみようかな.
・
結果
Cだったのかよっ.
・医療費の還付のために自転車でちょっと遠めの役所に行った帰り, 気が付いたら迷子になっていた.
寝不足でぼけっとしていたのと, まだ引っ越して1年でそっち方面にはあんまり行ったことないとはいえ, 方向音痴は健在だった.
・
括弧ありなし
これなら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には入らないっぽい.
既存の処理系でマクロを使わないでできないかな.
・nasmをupdateしたらXbyakの64bit call/jmpの単体テストが通らなくなった. nasmもバグってたみたい. で,
update.
・
tempering
F
232上の同型写像だから逆写像とxorを使ってmt[]に持って行けるかというのは考えたけど, 一部だけ修正というのは考えなかったなあ.
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さんがもっと凄いやり方を出してくれるような気はしますが.
・『沈黙のフライバイ』(野尻抱介)と『妙なる技の乙女たち』(小川一水)
軌道エレベータがもう実現してると錯覚しながら読んだ. いいなあこれ.
・昨日はC++の会議に参加. 海外の人はUnicodeやる気ねーんだなーという感じ.
間際に出したやつが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さんの革命的アイデアを知りたい.
リモート環境は素晴らしかったです. フィックスターズの方々ありがとうございました.
ゲームオーバー. 結局80倍ちょっとで終わった. asm使うかどうか迷いつつ, 面倒そうだなあとだらだらとCのみで進もうとしたのが愚かだった.
今朝になって試しにPythonで*.sを生成させてみたら, 60倍程度のとりあえず動作するものは意外と簡単にできてしまった.
おおー, と思いつつしこしこパイプライン埋め始めたけど時間切れ. 後の祭り.
こんなことなら「ここにvolatileつけたら速くなる」なんてやってないでさっさとasmに絞っとけばよかった. 無念.
本社で開発発表会. まあぼちぼちと. ちょっと一息.
昔
御意見は光成滋生<herumi@nifty.com>までお願いします