研究日誌。

大規模なグラフ処理に対してメモリ階層構造を考慮した高性能なソフトウェアを開発。

着込みでサバイバル。

2009-12-31 06:40:47 | Weblog
「TOKYO Disney SEA NEW YEAR'S EVE CELEBRATION 2010」へ。

とにかく防寒対策が重要。
これでちょうどいいくらいです。
以下、着たもの。参考になれば。

[頭部]
耳当て、マフラー

[上半身]
半袖HT、長袖HT(ホッカイロ背中とお腹)、タートル、カットソー、セーター、かなりあったかいコート

[下半身]
タイツHT、ズボン

[足]
短靴下、長靴下(ホッカイロ)

[その他]
断熱材、レジャーシート、敷毛布、座布団、座布団型ホッカイロ

そりゃない。

2009-12-29 23:37:25 | Weblog
某大手家電店にて希望の商品がどこにあるか聞く。

1階にて、「それなら3階か4階にあるかと思います。」
3階にて、「こちらにはございません。4階にあるかと。」
4階にて、「こちらにはございません。地下1階か地下2階にあるかと思います。」
地下1階…明らかにない。
地下2階…「ここにはないですよ。3階か4階にあるんじゃないですか?」

ちょっとひどすぎ。。分からない場合の対処法とかないのでしょうか?

大阪。

2009-12-27 12:16:05 | Weblog
研究打ち合わせはキャンセルとなったが、せっかくなので観光として行ってきた。
「龍の巣」というホルモン屋さん。外で待っていたのでもの凄く寒かったが、たらふく食べました。大満足。

6cores x 4sockets = 24cores.

2009-12-24 23:52:02 | Weblog
まるでスピーカのよう。
実際、すごい音。

% grep "core id" /proc/cpuinfo | sort -u | wc -l
6
% grep "physical id" /proc/cpuinfo | sort -u | wc -l
4
% grep -c "core id" /proc/cpuinfo
24
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 16
model           : 8
model name      : Six-Core AMD Opteron(tm) Processor 8439 SE
stepping        : 0
cpu MHz         : 2793.333
cache size      : 512 KB
physical id     : 0
siblings        : 6
core id         : 0
cpu cores       : 6
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 5
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov
                  pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext
                  fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc
                  rep_good nonstop_tsc extd_apicid pni monitor cx16 popcnt
                  lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a
                  misalignsse 3dnowprefetch osvw ibs skinit wdt
bogomips        : 5586.65
TLB size        : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 48 bits physical, 48 bits virtual
power management: ts ttp tm stc 100mhzsteps hwpstate

binary file の magic number。

2009-12-23 14:23:45 | Weblog
今まで binary file の扱いに関して、拡張子で判断なんて危険なことをしていたが、ファイルの頭に判定出来るような印がある方が良い。O'Reilly の「C++プログラミング入門 新版」参照。

以下のような流れで作成すると良いらしい。
※4バイトで考える。

1. 識別用の4文字決める。 ex.) abcd
2. 文字をそれぞれ 16 進数に直す。 ex.) 61626364
3. 0x80808080 を加える。 ex.) 0xe1e2e3e4

Many-to-Many Shortest Path Problem。

2009-12-22 14:58:05 | Weblog
大量の p2p を前処理無しで早く解く方法。凄く単純な方法だがそこそこ早くなるのではないかと思われる。p2p での探索中に出現した点が、他のクエリで使用されていて探索するべき点であった場合、ss タイプに切り替えて、最後まで計算する。というもの。

クエリを始点終点でソートするなどして配列に格納。(素早く検索できるようにしておく)is_many_to_many は、今までの探索点の中に他のクエリが入っているかどうかを判定する関数。

v = source;
d[v] = 0;

do {
 restart:
  for each arc(v,w) {
    if ( d[w] > d[v] + l(v,w) ) {
      d[w] = d[v] + l(v,w);
      if (pi[w] = nil) { Insert(w, Q) } else { DecreaseKey(w, Q); }
      pi[w] = v;
    }
  }
  v = ExtractMin(Q);
} while (v != destination || v != nil);

if ( v != nil && is_many_to_many(v) ) {
  destination = nil;
  goto restart;
}

GotoBLAS2 の WARMUP 機能。

2009-12-21 14:56:47 | Weblog
GotoBLAS2 の warm up についてお答えしたものをここにさらします。

GotoBLAS2 では、main() が始まる前(constructor 属性を付与した関数(driver/others/memory.c))に「スレッド起動」や「性能の良いメモリ(連続領域)の確保」を行っているため、小さな問題に使用した場合、GotoBLAS1 に比べ実行時間がかかってしまうことがある。

この問題の対処方法は、以下の3通り。
1. WARM UP しない: Makefile.rule 中の NO_WARMUP=1 を定義する
2. HugeTLBfs を使用
3. 専用のデバイスドライバを使う(driver/mapper/mapper.c)

WARM UP の流れ。(alloc_mmap())
1. メモリを確保
2. pagesize 毎にアクセスし性能の良いメモリ領域を探す(run_bench())
3. best 以外を解放

11th Live。

2009-12-20 14:57:38 | Weblog
11回目のサークル Live でした。サークル員も100人を有に超え、今回の Live にも80人近くが参加という大所帯。クリスマスプレゼント交換で「SONY製デジタルフォトフレーム」を頂きました。1GB のメモリ、リモコン付き、縦置き横置きに対応(自動判別!)など、決して間に合わせではない逸品。というものの、デジカメを持っていない。欲しい。