ToDo:
酔っ払ってても予戦突破くらいはできるだろうと思っていたけど、 寝てたら無理だとわかった。
マラソンの方は適当に書いたコードで100位くらいだから安全圏だろう。 ほっといてもたぶん大丈夫。
(13:38)
1引数関数しかないけど、 1つ引数を取って「1引数取ってなんかする関数」を返す関数を 書ければ2引数関数みたいなもんだよね、 というような考え方があると思う。 未だにわかってないのだけど、ラムダ計算とかいうやつがそれなんだろうか。
でまぁ、1引数しか無いのであれば、 OO ワールドはとても綺麗なんですよ。 なんというか OO のたまに嫌な点の一つとして、
obj.msg(param1, param2)
とかの引数が左右に散ってる印象を与える時があるんだよな。 特に param1 のメンバ関数でもいいよなぁ…というような時。
でも1引数だけでいいのなら その問題は起きなくて素晴らしい。
param2.(param1.(obj.msg))
全く美しくないな…
obj.msg は obj を保持したメッセージを返している、 クロージャ的なメッセージ。 param1.(obj.msg) も同じくクロージャ的なメッセージで、 そのメッセージを param2 に適用して始めてなんか実行されるというような。
まぁなんかだめだめな感じしかしないけど、 OO のメッセージに環境持たせるって考え方はないのかなぁとかたまに思うというはなし。
(14:24)
お話にならない感じだなあ。
とりあえず提出した時よりはよくなっていて 66 倍程度で、 まぁ適当にやれば 70 倍は越えると思う…が、 それじゃ全然お話になってないよなー。
なにかブレイクスルー的なものがあるといいんだけどなあ。 というか大幅に短くなりそうな部分があるんだけど、 ゆっくり考える時間が無いとできなさそうなんだよなー
そもそも今のコードより提出時のコードの方がはるかに良いので、 この程度の中途半端な更新で再提出する気はおきない。 諦めるかなーぎぎぎ。
(00:16)
http://d.hatena.ne.jp/nagachika/20090302/oo_vs_lambda
あーうーわかりにくくてすいませんという。
msg[obj][param1][param2] と書いて良いのであれば まぁ Ruby はクロージャあるのでできるのですけど、 obj.msg が msg(obj) の syntax sugar にしか見えない瞬間がある 僕としては、逆にクロージャを OO の記法でやるような考え方/言語はないのかなぁとか思ったのでした。
書いていただいた max も処理まとめるという意味では もちろんそれで良いのですけど、 普通のクロージャになってしまってるので 最後の記法が evens.my_max とかになっていない点で 僕の妄想にはマッチしてないかなぁとかいう。
あと、妄想で「無いのかなぁ」と思っただけなので、 別に素晴らしい考え方だとかは思ってません。 むしろメッセージに環境突っ込むと その後で多態的なのはどこ行くんだとか、 マルチプルディスパッチ的なのはどうなるんだとかそんなこんな。
(21:14)
もにょってたら予定よりあっさり70倍は越えた。 80までは適当にいじってりゃ行くと思う。
なんかちょっと大袈裟に悪い方針だったことに気付いたので直したいんだけど、 えらい手間がかかりそうで困る… でも100倍は見えなくもない位置な気がするなぁコレ…
(22:29)
80倍は越えた。 えらい手間がかかりそうな変更はそこまで手間ではなかったけど、 軽く100倍行くほど良い変更ではなかった。
適当にやりゃ90はまぁ越えるだろう。 100は、うーんどうかなー
(20:37)
今の方針じゃ埋まらんだろうと思ってたのに even pipeline 埋まった…手詰まり感が。
うーむまあこれは投了だろうなあ。 予想よりはよくなったけどなんかもうちょいあったんやないのという感はいなめない。 あと kik さんが余裕釈々すぎて腹が立ちますね。 あと KLab が入賞宣言してるのも腹が立つ。
http://dsas.blog.klab.org/archives/51368711.html
うーむ自信があるのはすごいなあ。
(01:46)
寝過ごした。
予戦落ちとかウケますね
忘れてた→酔っ払って寝てた→寝過ごした
とか僕の能力を全て出し切った感じである。 その結果が予戦落ちなのだから、まぁ順当な結果なのだと思う。
(01:50)
http://www.fukkan.com/fk/VoteDetail?no=3761
復刊されたらしい。 らしいっていうか知らせが来るってことは なんかの拍子でリクエストボタン押したんだろうなぁ。 でも買わないと思うんだな。
読むと成田使いたくなくなるけど、 まぁなかなか使わないのも難しいよねというような。
(01:56)
http://longlong.way-nifty.com/blog/2009/03/hack-the-cell-0.html
そんなに不安定ってなんなんだーという。 単純に少ない数字には倍率が減るって話でもないだろうし…
(10:42)
http://longlong.way-nifty.com/blog/2009/03/post-d5ab.html
完敗ですねー。 まぁもともとこいつには勝てんだろ的な人の一人だったので当然な気もします。
まぁいいや。 hack the cell にかこつけて CPU の今後と最適化について僕に教える会を開催したいと思うので、
http://homepage1.nifty.com/herumi/diary/latest.html
http://longlong.way-nifty.com/
http://garakuta.homelinux.org/~nosuke/diary/
http://d.hatena.ne.jp/methane/
あたりの人は東京近辺にいらっしゃったらとりあえずいかがでしょうか。 2ch の人とかよくわからんけどコメント含めて なんらかの手段で通信がいただけたら考える的な。
知らんけど候補日は 3/21 or 3/28 とかそのへんで。
(14:12)
実質負けてたってことだろうなぁ。 命令数的に勝ってる感じがない。
http://homepage1.nifty.com/herumi/diary/0903.html#7
まぁワンオブ勝てんだろー候補だし略
あと README の文章破綻ぷりというか説明する気ないっぷりには 色々理由があって主にねむかったとか。
とりあえず僕もカウントしてみよう。
even 1269 xor 530 selb 284 cntb 155 sumb 105 shli 32 a 80 ah 50 ai 1 and 27 andbi 5
odd 1270 stqr 147 lqr 583 lnop 27 shufb 68 rotqbyi 128 rotqbii 283 rotqmbii 32 hbrr 1 brnz 1
見て比較した感じ、
という感じっぽい。 つか post-mortem のために PS3 欲しいというのは…
(14:30)
herumi さん shuffle 使ってなくね? 説。 なにかコード見た感じ rotq と sel だけでやっちゃってそうな… そのへんは微妙に勝ってそう、かな?
個人的には shufb は今回一番萌えた命令だったんだけど。
(14:37)
http://www.kmonos.net/wlog/95.html#_1109090307
あまり理解してないけど、 Cyan の方が shibuya.lisp で return がうんぬん… とか発表されてたので質問して、 たぶん kinaba さんが今書いておられるようなものだと理解してたので、 ちょっとやってみた。
globalVar = 0 hello = ^(): globalVar = return return(0) x = hello() print x print globalVar(x+1) print "\nDONE\n"
うーん 0 とだけ表示されちゃう。 かえせないってことかなぁ。
retret = ^(): return(return) x = retret() print x
とすると #<cont 219f5c00> とか出てくる。
retret = ^(): return(return) x = retret() print x()
何も出てこない。
retret = ^(): return(return) x = retret() print x()()()()()()()()()
何も出てこない。エラーにならないのもよくわからんが…
なんかしら未定義な感じの動作になってそうだなぁという感じで残念?
http://www.geocities.jp/takt0_h/cyan/doc/ref/about-continuation.html
この説明見るとできても良さそうに思えるんだけどな
(16:33)
http://homepage1.nifty.com/herumi/diary/0903.html#9
http://tripper.kousaku.in/20090307.html#p01
思いついてしかるべきだったなあ…と思います。 幸い計数の部分は工夫する余地はあるけどあまり速度に影響しないんですよね… lqr 減らすのがなんだかんだで一番効きそうな気がするけどどうなのかなー
(01:03)
http://d.hatena.ne.jp/youz/20090308/1236482522
ぱっとわからない。継続脳が全く育ってないなあ。 後で考える or kinaba 先生の何かをわくてかしてまつ
(02:18)
一回戦落ち…300位まで通るんだと思ってたんだけど、 250位まで通して後50人はシードってことだったみたいだ。 そうならそうとはっきり書いてよねえ。
http://www.topcoder.com/tc?module=Static&d1=tournaments&d2=tco09&d3=marathon&d4=schedule
こっちにはちゃんと書いてある
http://www.topcoder.com/tc?module=Static&d1=tournaments&d2=tco09&d3=overview&d4=rules&d5=marathon
(10:37)
http://pc11.2ch.net/test/read.cgi/tech/1173057314/237
よくわからないけど eban さんのご協力のもと できるようになったみたい。
(10:38)
http://d.hatena.ne.jp/odz/20090310/1236698884
#include <stdio.h> struct Foo { int i; }; void with_paren() { Foo* foo = new Foo; foo->i = 42; delete foo; foo = new Foo; printf("with paren: %d\n", foo->i); } void without_paren() { Foo* foo = new Foo; foo->i = 42; delete foo; foo = new Foo(); printf("without paren: %d\n", foo->i); } int main() { with_paren(); without_paren(); }
手元の GCC では同じ結果になりやがったけど、 cl.exe では、
with paren: 5374216 without paren: 0
とかになった。
↑コメントで指摘いただいたけど with と without が逆。ひどい
(00:43)
紙媒体でゲットした。
反応が以上に悪かったけど、 インテルの英語サイトの方にある連絡先に 本全部の注文番号を送って後は ping しまくれば良かった。 ちゃんと通れば1円も払わずにわざわざ海外から送ってくれる。
嬉しいと言わざるをえない。
(10:43)
http://hiraitamado.web.fc2.com/mindex.html
まなぶ以外はどんな感じなのかなあと適当に見てみたらいいの見つけた。 実は新都社すごいんじゃないかな
(22:12)
http://d.hatena.ne.jp/odz/20090311/1236775799
POD型は () をつけるとゼロ初期化だったと思うます。
ゼロじゃなくて各メンバに () つけるとかだったかも知れないけど PODなら実質同じだよね。
あと cl.exe もできたバイナリも wine で動かしてます
dmc.exe とか dmd.exe とか bcc32.exe とかも入ってて、 GCC でクロスコンパイルするとかよりこっちの方がラクなんだよな…
(22:16)
じゃなかったけと思ったけど これだとなんかな…
#include <stdio.h> struct S { int i; }; void print_s_without_paren() { void* i; (&i)[-1] = (void*)42; S s; printf("%d\n", s.i); } void print_s_with_paren() { void* i; (&i)[-1] = (void*)42; S s = S(); //const S& s = S(); printf("%d\n", s.i); } int main() { print_s_without_paren(); print_s_with_paren(); }
まぁなんかしら GCC でもこっちなら movl $0, -0x10(%rbp) とかがあるかどうかが変わる
(22:28)
http://shinh.skr.jp/h/?HackTheCellPostMortem
懇親会は詳しい検討はむずかしいかも、 とのことなのでまぁやる方向でいいんじゃね、 ということに
勝手に書き換えていただけると幸いです。 あと kik さん kodera さん herumi さんは強制参加です。 ぜひ
(23:41)
http://d.hatena.ne.jp/ku-ma-me/20090312/p1
おもしろい。
def f(x) x+1 end def g(x) y=x+1 y+1 end p [1].dmap+1 p f([1].dmap) p g([1].dmap)
g が動くといいんだけどな
(10:07)
_ ku-ma-me [それは [1].map(&method(:g)) を改善していくのがよさそうかなあ。 Python だと g だけで..]
http://shinh.skr.jp/h/?HackTheCellPostMortem
693 ってガロア組かっ!とか思ったけどスレの 693 さんのことだとわかった。
予想以上にあっさり人数が増えてびっくり嬉しいのですけど、 残念ながらそろそろ人数的に厳しいかもらしいのでした…
なんかなんかちゃんとやらんとかなあと思う一方、 こんだけ面白そうな人いたらほっといても面白いだろうという予想も。
http://longlong.way-nifty.com/blog/2009/03/post-4cf4.html
ええまさに懇親会の存在を知ったタイミングでは ああなんか別にやるのは気まずいかと思ったのですが。
とかなんとかでタイミング的には すごい速度で会場提供を持ちかけてくださった woさんに感謝的な
先に懇親会に気付いてたり会場提供無かったらヤメてたと思うし
(14:03)
なんか最近頻尿とか残尿感とかそんな感じだなあとか思ってたけど そろそろなんか明らかにおかしいだろと思ったので病院へ行ってきた。
で、なんかちんこもまれるわケツに指つっこまれるわで大変なのだった。いたかった。 ケツに指つっこむのは前立腺の触診プラス精液回収が目的らしいんだけど、 あんま精液出ないな若いのにとか罵倒されてついでに言葉責めもされた。
老人にケツに指つっこまれて精液出すのが正常だなんてひどい話です。
で、なんか出ないもんだから尿道になんか少し入れられて大変いたかった。 あと運動してるかと聞かれてノーと言うと 運動しないヤツは頭でっかちで中身が無いとか そのうち鬱になるとか言われた。
その時はおもろいオッサンだなーとか思ってたけど、 冷静に考えるとひどい話だった。
でまあ前立腺炎とのこと。 悪いことにはならんけどあんま簡単には治らんとのこと。 ひどい。 運動しろ酒飲むな香辛料喰うなと踏んだりけったりである。
そろそろ自分の体のパーツで健康的な部分が無い気がする。
(22:04)
typedef struct { unsigned long long a: 1; unsigned long long ll: 50; unsigned int r; } S;
に対して
S s; s.ll = 0x123456789aULL;
がこうなる。 こう長くなっちゃうと 最適化しないコンパイラの方が読みにくいとおもう
8048459: 48 b8 9a 78 56 34 12 mov $0x123456789a,%rax 8048460: 00 00 00 8048463: 48 c7 c1 9a 78 56 34 mov $0x3456789a,%rcx 804846a: 48 89 ca mov %rcx,%rdx 804846d: 89 55 ec mov %edx,-0x14(%rbp) 8048470: 48 89 c2 mov %rax,%rdx 8048473: 89 4d e8 mov %ecx,-0x18(%rbp) 8048476: 8b 4d ec mov -0x14(%rbp),%ecx 8048479: 48 89 55 e0 mov %rdx,-0x20(%rbp) 804847d: 8b 55 e8 mov -0x18(%rbp),%edx 8048480: 48 8b 4d e0 mov -0x20(%rbp),%rcx 8048484: 48 89 45 d8 mov %rax,-0x28(%rbp) 8048488: 48 b8 ff ff 03 00 00 mov $0x3ffff,%rax 804848f: 00 00 00 8048492: 48 21 c1 and %rax,%rcx 8048495: 48 89 c8 mov %rcx,%rax 8048498: 48 c1 e0 01 shl $0x1,%rax 804849c: 48 8b 4d f0 mov -0x10(%rbp),%rcx 80484a0: 48 ba 01 00 f8 ff ff mov $0xfffffffffff80001,%rdx 80484a7: ff ff ff 80484aa: 48 21 d1 and %rdx,%rcx 80484ad: 48 89 c2 mov %rax,%rdx 80484b0: 48 89 c8 mov %rcx,%rax 80484b3: 48 09 c2 or %rax,%rdx 80484b6: 48 89 d0 mov %rdx,%rax 80484b9: 48 89 45 f0 mov %rax,-0x10(%rbp)
(00:20)
8048459: 48 b8 9a 78 56 34 12 mov $0x123456789a,%rax 8048460: 00 00 00 8048463: 48 c7 c1 9a 78 56 34 mov $0x3456789a,%rcx 804846a: 48 89 ca mov %rcx,%rdx 804846d: 89 55 ec mov %edx,-0x14(%rbp) // 32, 0x3456789a 8048470: 48 89 c2 mov %rax,%rdx 8048473: 89 4d e8 mov %ecx,-0x18(%rbp) // 32, 0x3456789a 8048476: 8b 4d ec mov -0x14(%rbp),%ecx 8048479: 48 89 55 e0 mov %rdx,-0x20(%rbp) // 64, 0x123456789a // uint32 edx = 0x3456789a; 804847d: 8b 55 e8 mov -0x18(%rbp),%edx // uint64 rcx = 0x123456789a; 8048480: 48 8b 4d e0 mov -0x20(%rbp),%rcx 8048484: 48 89 45 d8 mov %rax,-0x28(%rbp) // 64, 0x123456789a 8048488: 48 b8 ff ff 03 00 00 mov $0x3ffff,%rax 804848f: 00 00 00 // uint64 rcx = 0x3ffff & 0x123456789a; // 18bit from LSB 8048492: 48 21 c1 and %rax,%rcx 8048495: 48 89 c8 mov %rcx,%rax // uint64 rax = (0x3ffff & 0x123456789a) << 1; 8048498: 48 c1 e0 01 shl $0x1,%rax 804849c: 48 8b 4d f0 mov -0x10(%rbp),%rcx 80484a0: 48 ba 01 00 f8 ff ff mov $0xfffffffffff80001,%rdx 80484a7: ff ff ff 80484aa: 48 21 d1 and %rdx,%rcx 80484ad: 48 89 c2 mov %rax,%rdx 80484b0: 48 89 c8 mov %rcx,%rax 80484b3: 48 09 c2 or %rax,%rdx 80484b6: 48 89 d0 mov %rdx,%rax 80484b9: 48 89 45 f0 mov %rax,-0x10(%rbp)
なるほどね。 bitmask が根本的に間違ってるよ。 OK 一見 fix できてる。 つかたぶんこれ x86 でも動くな。
(01:13)
> cat bitfield_ll2.c #include <stdio.h> int main() { struct sbf2 { long long f1 : 3; } st2; st2.f1 = 3; printf("%lld\n", st2.f1); } > gcc bitfield_ll2.c && ./a.out 3 > gcc -m32 bitfield_ll2.c && ./a.out -18650500345888765
GCC ってこのへんどうなの…
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7018
うーん int より小さいものに long long 使うなってか。
(02:28)
http://code.google.com/p/jaikuengine/
opensource すか。
177348 642108 6749045 total
web service の OSS 化って珍しい気もするな。 OpenPNE とかあるか。
一見だからどうした感は否めないけど、 OpenPNE とかみたいにプラグインとかつくれるんなら なんかコミュニティごとに立てるとかできたりするんかいな。 ちなみに OpenPNE に本当にプラグインがあるかは知りません
(03:04)
http://d.hatena.ne.jp/kazuhooku/20090216/1234771983
さすがに 24 はうざいかなあ… とループ書いてみたけど sscanf の方が良い気もした。
#include <stdio.h> #include <stdlib.h> #include <assert.h> int main() { int i; char* buf = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24"; unsigned hits[24]; char* p; for (p = buf, i = 0;; i++) { hits[i] = strtol(p, &p, 10); if (!*p) break; assert(*p == ','); p++; } assert(i == 23); for (i = 0; i < 24; i++) { assert(i+1 == hits[i]); } }
要は assert がうざいのだけど、 strtok は微妙だし strtok_r も標準じゃないしなぁとかいう。 やっぱ split/join は必要なんだよなぁ。
(10:30)
#include <stdio.h> int A = 1; #define A 1+A #define B(x) x int main() { printf("%d\n", B(A)); }
で TCC が 3 とか出力しやがってこまる。 おそらく、 B(A) => B(1+A) => 1+A => 1+1+A の順番で展開されてそうに思える。
でも K&R にある
#define cat(x, y) x ## y cat(cat(1,2), 3)
とかいう例でちゃんとコンパイルコケるってことは 外からやってるのかなぁ。
(11:18)
_ Wcikoeqt [この間も俊太郎の詩をお http://www.stlouisbusinesslist.com/business/5..]
そういえば
「薬三つ出しとくよ、抗生物質と痛み止めと胃薬」 「胃薬ってなんすか」 「抗生物質飲むんだから胃薬必要なのは当たり前でしょ。胃荒れちゃうから」
とかそんなかんじの会話があって、 今にして思うとこれもひどい気がした。 当たり前じゃないよ
(00:07)
http://b.hatena.ne.jp/entry/http://shinh.skr.jp/m/?date=20090316%23p06
個人的な感覚では、バッファ破壊してようが 一旦ポインタのリストを返しちゃうような実装だと strtol 連打より遅くなっちゃうし、 かといって callback 渡すような実装だとめんどくさいし、 それにたぶん今時のアーキテクチャじゃ分岐予測的な観点で最速じゃない。 まあ関数オブジェクトなり C++0x の lambda を渡す実装ならいいんだろうけど。
でまあというわけで split/join とかしたい時は 99% 速度なんて気にしてないという法則から、 普通に vector<string> かえす split がとりあえず あったりいいんじゃないかなぁとか思うわけです。 まあ insert_iterator を引数とする関数でも許せなくはない。 join は input iterator 二つに対して lexical_cast<string> かまして 合成していくようなのがあればいいんじゃないかな。
なんかしら、C++ の遅くなるようなものは加えれない原則は インターフェースを壊滅的に使いにくくしてると思うんだよなぁ。 他には assert(hogeMap.insert(make_pair("abc", 4)).second); とか書き飽きた。 second とか冗談じゃないというかんじ。
(00:24)
最近コンビニで復刊してるので地道に買って読んでいる。 足りない分は中古で補完したり別に面白くない部分は飛ばしたりしつつ。 まあ昔読んだことはあるのだけど、地味に面白いなあと思う。 まず「ぼくの考えた理想の社会」ネタは個人的に好きなんだよなぁ。 自分でもよくぼんやり考えるし。
あれこれ考えると自分的には、 「暗黙のうちに個人同士で助けあう仕組みになっていて、戦争がない」 あたりがとりあえずぼくの考えた無敵の理想社会の要素なわけだけど、 後者は目的の同意は簡単に得られるのに方法論がサッパリ見当がつかないんだよね。 そいう意味で破天荒な SF とは言えその方法論が語られるのは面白い。
あとたぶんかわぐちかいじが見開きのとこかなんかに書いていた、 「この本に出てくる人はどの立場の人もみんな自分の仕事に真摯です」 みたいなのがいいなと。 マンガって安易に悪役出しがちだけど、 実際んとこは自分が悪だとはとても思ってない者同士で あらそうケースの方が多いよねー的な
(00:37)
まとめると、
#define min(a, b) ((a) < (b) ? (a) : (b)) printf("min=%d\n", min(1, min(2, -1)));
は常識で考えて展開してくれないとこまる。
int A = 1; #define A 1+A #define B(x) x printf("%d\n", B(A));
は常識で考えて2回展開されちゃこまる。
さらに、マクロは外から展開していかなければならない。
これらを両立させるには、
という感じでやればいいんだと思う。 TCC 的には nested_list をややこしいことにすればたぶん良い。
(22:17)
かように明らかに不健康であるものの、 健康診断では特に不健康だとは言われないのであった。 これほんとに役に立つんかなー。
前回は身長172.7体重52.9とかで判定 Cb とかで軽度異常とかだったらしいんだけど、 今回は身長172.6体重51.5とかで平均からの逸脱は激しくなってると思うのに 判定 B とかになっていた。 何が基準だかさっぱりわからんがまぁ 体重とかで異常とかわからんということじゃないかと思う。
まあそんなことよりヘモグロビンが足りないらしい。 件の前立腺には亜鉛が良いらしいんだけど、 要は何かしら鉄っぽいものが足りてないのかなぁ。 たしかになんか会社のメシで内蔵とか出ないしな。
(00:17)
なんか zsh が動かんくなっていた。 libncurses がどうこうらしい。 とりあえず .cshrc をどければ普通にログインできるようだった。 ちょっとほげった感じ bash があればとりあえず良さげなので exec /usr/local/bin/bash とかでお茶を濁すことに。
(00:28)
推定4位(99-100倍の範囲に人がいたら5位)かー。 120倍付近にはいたかった感じだなぁ。 未だによくわかってないけど lqr 多すぎとかが メインの死因だったのかなぁ。 今度調べよう。
110倍台のところにいる人はどなたなんだろうか どいう違いがあったんだろうと気になるな。
学生弱いのは cell challenge のおかげで oxy さんみたいな頭おかしいのがいなかったとかありそうだなぁ。
(06:03)
わかってる範囲では
あたりで、 bit いじった人で 現段階で post mortem にもいらっしゃらなさげな方は 110倍台の人だけかなぁという。
(06:18)
def bitonic_sort(a, b, e, z) s = (e-b)/2 return if s == 0 s.times{|i| if a[b+i+s] && ((z != 0) ^ (a[b+i] > a[b+i+s])) a[b+i], a[b+i+s] = a[b+i+s], a[b+i] end } bitonic_sort(a, b, b + s, z) bitonic_sort(a, b + s, e, z) end def bitonic_merge_sort(a) s = 1 n = a.size while n > 1 n /= 2 s *= 2 n.times{|i| bitonic_sort(a, s*i, s*i+s, i%2) } end end a = [*0...32].sort_by{rand} p a bitonic_merge_sort(a) p a
こんなかんじ? 2 の倍数じゃないと動かんが。
(08:20)
http://golf.shinh.org/reveal.rb?Quine/kurimura/1237450284&d
via http://niha.tumblr.com/post/87839196/mixin
なるほどなぁ。
(13:46)
http://www.mail-archive.com/tinycc-devel@nongnu.org/msg01798.html
http://landley.net/code/tinycc/
でこのバグの fix は rob's mail-list とやらにあるはずなんだけど、 その ML 自体見つからんしこまるね
まあ shared object とかの方が面白そうだしそっち見るか
(16:03)
_ niha [>'\0'が〜 ボクもそう思います…]
とりあえずやらにゃならなさそうなのは、
あたりか。
(12:51)
普通に log(n) 回の行列計算でいけるかなーとか思ったら kik さんが書いてた上に諦めていた。
http://d.hatena.ne.jp/kikx/20090321#1237632002
でぱっと見 kodera さんのがそれ実際にやってる感じに見えるけど、 えーと違うのかな。
http://longlong.way-nifty.com/blog/2009/03/hack-the-cell-0.html
なんか違う気がした。
ああそうか、たぶん、分割数が 4 なら、
と担当すればいいって話か。 ただこれは mt の更新行列がそれなりに複雑になっちゃうだろうから、 log(n) べき乗ができるならそっちの方が良さそうだなぁ。
次元の3乗のオーダーを log(n) 回ってそんなに大きくないんじゃないかな… とか思ったけど、 20000次元**3 を 128 並列でできるので、 62ギガ単位の話。 積和命令とかあった気がするし 62G clock でいけるの? よーわからんけど悪くて 124G clock だろう。 8コア使うって前提の話なので、 15G clock か。 今回の mt_kadai のサンプルくらいだと現実的じゃないけど、 もっと激しく大きければ案外いけるくらい?
眠いので根本的に色々まちがっていそうだ。
(03:00)
まあこの手のは基本的にはパズルでしかないので cell 自体の経験はあんま関係ないんじゃないかなぁ。
あたりがどっちかというとメインだった気がする。 even-odd の量をうまく散らすとかは重要だけど、 命令数たいして多くないから おおまかに把握するのにそんなに時間はかからないしなあ。 命令をうまく使って命令数減らすのも重要っちゃ重要だけど kik さん以外はたくさん減るのは見つけてない感じだよねたぶん。
一方 x86 とか経験がすごい生きそうだよなぁ。 herumi さんに勝てる気とか全然しない。
と書いてみて x86-64 でこいうコンテストとかも 割と面白いかもなーとか思った。 Core 2 Duo あたりで。 僕自信は勝負になる気がしないが。 誰かやらんかな。
(03:15)
分割数が 8 として、 num_rand が 8*10**7 だとして、 800 程度進める行列を普通に(log(n)とか考えずに)作るのは たぶん 640000 回ループ回す程度のコストでできて、
とかいう感じで分割すれば、 通常のループを 10**7 回と、 800 進める行列を 10**5 回かける時間で計算できるんじゃないかなぁ。 そしたら 10**7 回のループが律速な感じだから だいたい 8 倍になってる気がするなぁ、 とか思ったけど定かではない。
(03:30)
これで8倍になるんだったら SIMD ったら shufb, selb, rotqw* あたりが消えたりするのかな。 というかそれが
http://pc11.2ch.net/test/read.cgi/tech/1232817361/581
が言っていたことか。やっとわかった。
shufb とかも減れば odd も減りそうだけど、どうなんかな。 だとすると SPU 1個でももっとフザけた倍率出たりするのかな?
(03:37)
http://d.hatena.ne.jp/firewood/20090322/1237659723
いいかげんな正規表現がそれなりに有効というのはとても同意… 元の正規表現で実用上一番問題なのはプラスが入ってないこと、かなぁ?
とかはいいとして、
http://blog.livedoor.jp/dankogai/archives/51189905.html
の From: Anonymous <nobody@example.com> を Perl の正規表現ならできる…っていうのは 実物がもしあるんなら見てみたいな。 自分では全然知らんけど、聞きかじった知識を元に考えると大変そうで、 結構とんでもないことになってそう。
(04:27)
http://longlong.way-nifty.com/blog/2009/03/700-c9db.html
もし良ければ軽く書いていただけるとありがたいかなぁと思います。
僕が最初に60倍ちょい越えの人がやってそうな工夫を 一通り紹介してみようかと思いますので、 基本的な工夫はナシですごい部分だけ書いてもらう感じでどうかな、と。
http://shinh.skr.jp/h/?HackTheCellPostMortem
↑適当にこんな話をしてもらえればいいかなーと 妄想で「何をするか」の欄を更新しておきました。 あと、現場はプロジェクタはあるそうです。
(01:42)
LLVM勉強会は遅れていって yarv2llvm から。
http://d.hatena.ne.jp/miura1729/20090323/1237779835
大変面白かったんだけど、 なんか色々ヘンにつっこんでしまった気がした。 疑問をすぐ聞いてたら なんかあら探しチックになってしまった感じで申し訳なかった。
Clang はまぁ案外面白いことやってるんだなぁとか思った。 tccparser とかもそうだけど、 C コンパイラライブラリって かなり長い間欲しかった感じがするんだけど、 というかそいうのがしたくて binary 2.0 なんちゃらとかで発表したりしたんだけど、 最近あんま興味ないんだよな。
SWIG生成なんかは超実用的だと思うし、 GCCXML 使った cableswig とか実際にあるわけだけど、 こうなんか現実的になりすぎちゃってねえという無いものねだり感が。 GCC plugin branch vs GCCXML vs Clang vs Doxygen とか オルタナティブも色々ある感じだしねえ。
あと LLVM 自体も類似技術との対決は面白いかも。 LLVM vs C-- vs TCG vs ... とかね。
呑み会は他に外せないのがあったので参加できず
(02:19)
_ kodera [ああやっぱり、20人ともなると多少は何かあった方が良いですよね。 簡単にパワポでも用意しときます。すごい部分とか言う..]
_ shinh [ええ、結構時間も長いし、意外と話題も多そうですし、なんか資料的なのはあった方がいいかなぁと。 kik さんには頼んで..]
_ kik [プレゼン形式になってない文書はもうたくさん書いたので 新規で作るのめんどくさいんですが ホワイトボードはありますか?]
_ shinh [あ、はい、あれだけあればあの pdf で十分ではないかと思います。ホワイトボードは…まぁあるんじゃないでしょうかと思..]
_ wo [ホワイトボードはあります]
http://d.hatena.ne.jp/sugyan/20090326/1238007478
via http://d.hatena.ne.jp/kazuhooku/20090326/1238045916
末尾の空白がイヤなら
@s=("%02X")x16;printf"@s\n"x16,0..255;
で良いと思う。
なんかもちょい縮みそうな気はするけど Perl むつかしいな
(19:39)
しんどくて思考ができないけど 寝れないので新都社のマンガを適当に見てみる。 面白いの見つけた。
http://puripeni.web.fc2.com/index.html
人狼としてはまぁどうだろう、 実際の名ログとかの方がはるかに面白いという感じだけど、 途中から脈絡もなく踊ったりしてるのが面白すぎる。
(23:10)
http://www.shimamoto-ele04.ed.jp/syokuin_zidou_top/syokuinkousei.htm
ふと目に入ったのだけど、 人数少なくね… 1学年100人くらいはいたように思うのだけど。
(11:51)
http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20090326#p02
出てるのかあ。 買ってみようかなぁと思うけどPS2もテレビも崩壊してるなあ。
(12:27)
http://shinh.skr.jp/h/?HackTheCellPostMortem
とりあえず、みんな、 「おおこんなこと思いついて俺 SUGEEE って思った瞬間があったけど、 数日経つとなんだ当たり前じゃんねと思い、 kik さんの説明を見るとああ俺はどうしようもなかったんだな…」 と思うというようなあたりの意識を共有できたかと思う。
まあでも kik さんも時間は湯水のごとく使ってるぽいんだよなぁ。 そのへん次回は彼の2倍程度は時間を使うことで対処したいと思う。
といいつつ、 hack the cell は期間が長いから有給取ってないんだよな。 なんていうか、趣味のプログラムに時間を溶かすことが 完全に習慣になっている人間としては、 3ヶ月から数百時間かそこら捻出することは造作もないことなんだよなぁと。 マラソンとか TLE とか ICFPPC くらい短いとそうもいかんわけだけど。
謎めき系
http://0xcc.net/pub/shibuyapm4/0006.html
について
の人に説明したところそれはお前のことだろと指摘されました。 件のプレゼンは現物では見てないけど僕の人生の指針となっていて、 これらの類型にはとてもなりたくない気がするので、 なるべく不明な点が無いように書いてみようと思うのであった。
とりあえず、 ^q-^m とかすると メモモードというかメールを書くモードになるのだけど、 これでまず subject を書くのが問題なんだよなぁ。 subject って途中か最後に書くべきもんだよね本来はたぶん。
いやでもね、
http://shinh.skr.jp/m/?date=20060518#p03
によると大々的に公開することに抵抗があるような 私的なメモであるというような位置付けが書いてあるわけだよね。
実際これを書く前の1年くらいは完全にどこからもリンクはってなかったんだけど、 リファラ経由でぐぐる様が来たりしてヒキコモリ体制が崩れていったんだよなたしか。
まあ僕がちゃんと書くことに関してメリットを感じればちゃんと書くかもですが、 あんま感じなければいい加減に書くのでそのへんは適当に。 気になったことについてのコメントとかはしていただけるとすごい嬉しいです。
ああそいえば今日も思ったんだけど、みんな質問しないよなぁ的な。 俺だけわかってなかったら申し訳ないなーとか思ってしまうので みんな聞いてくれるといいのにとか思うよね。 「何言ってるかわからん」とか質問の体をなしてない僕の質問に 丁寧に答えてくれた kik さんには感謝感謝でした。
あとまあ fixstars のみなさんは色々もう感謝感謝としか言いようがない感じでした。 感謝感謝。
(00:23)
8e5: 48 8b 05 6c 03 20 00 mov 0x20036c(%rip),%rax # 200c58 <_DYNAMIC+0x1c0> 8ec: 8b 00 mov (%rax),%eax 8ee: c9 leaveq 8ef: c3 retq
が正しくて、
75e: 8b 05 9c f8 ff ff mov -0x764(%rip),%eax # 0 <call_gmon_start-0x680> 764: e9 00 00 00 00 jmpq 769 <var_main+0x40> 769: c9 leaveq 76a: c3 retq
はまぁ色々おかしい。 やっぱ fPIC 的なのが無いと イマイチだなあ。 まあどうしても一段はませる感じにはなってしまうか
(15:54)
http://shinh.skr.jp/m/?date=20080525#p03
の時の手順でできないな。
extconf.rb 実行した時に bigdecimal でこける。 なんかよく見ると昔は手元の libruby をリンクしようとしてなかったのだけど、 今はしようとしていて、 CFLAGS の -m32 をひきつがないから、 って感じっぽい。
lib/mkmf.rb がどう CFLAGS を扱っているか… なんてことは深追いする体力もないしやめることに。
(01:10)
http://niha.tumblr.com/post/91457096/c
途中で cpp_akira さんは compile time の速度の話、 Cryolite さんは run time の話をしてるような気がするチックな。
compile time 減らす系の最適化は まぁ compiler が知っとくしかないよなぁ。
あとまぁなんにせよそんなところよりは お墨付とかインストールいらないとかの方が 圧倒的に強い気がする。
(19:16)
http://shinh.skr.jp/h/?HackTheCellPostMortem
なんか集めた方がいいかなーとか思ってたけど、 勝手に上げてくれてる人もいるし、めんどくさいし、 とりあえず適当にリンクとか足しておいた。 足し忘れなどありそうなので なんかある人は足していただけると幸い。
あとなんか感想としてはみんなすごいなぁというのが多くて まぁいつも思うことではあるけど今回は特に思ったなぁ。 比較的属性が共通しててでも違う仕事してる人が 多い感じだったのが良かったなぁと思う。
(20:48)
とりあえず現状で git push 。 今週末くらいにはなんとかしたいね。
今日わかったことは R_X86_64_GOTPCREL というのは shared object で -fPIC な時に必要だということと、 i386 だと rip 相対無いから R_386_GOTPC になるわけだけど、 PC 取ってくるのがあら大変ということを再確認というか
(22:44)
http://d.hatena.ne.jp/yupo5656/20060907/p1
のへんをどうぞ。この手の単語 (R_X86_64_GOTPCREL) は検索で来たりする人がたまにいたりするので… 俺とか俺とか…。
(22:49)
とかそろそろヨタ話ができそうなくらい どうでもいい知識が溜まってきた気がする。
(23:31)
前 | 2009年 3月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。
_ nagachika [複数の引数を取る関数を『「1引数取ってなんかする関数」を返す関数』に分解することならカリー化という技法ではないでしょ..]
_ shinh [分解する技法というより計算パラダイムとしてそういう考え方をラムダ計算っていうのかなぁとかそういう疑問でした。 ht..]