現代魔法を操る世界


by kagurayouyou
カレンダー
S M T W T F S
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

コンパイラレベルになるとすごくOSに気を使う

【プログラミング】
Intel C++ Compiler9.1非商用版をSUSE Linux10.0に入れてみたんだけど微妙。
まだプログラムをちゃんと設定した計算機で回したわけではないのでわからないが、
手元のPC(Pen3 866Mhz 512MB)で、Segmentation faultが起きる。
GCCではならないから不思議だ。
単純な∑のプログラムなのでそれほど変な風にはならないはずなのだが…。
どこかで配列を間違ったのかもしれない。
しかもGCCより遅い…

以下メモ。
キャッシュに乗らないほど大きなスパースネスで非ゼロが多い行列。
通常スパースネスと呼ばれるとき99%が0とかになる。
つまり50万要素くらいある場合、99%でも5000要素も計算しなければならない。
それが2000ベクトルくらいあると1千万になる。つまりは10Mだ。
これがint型なら4バイトなので40MBのCPUのキャッシュがあればいい。
一次ならせいぜい16Kバイトとかだし、二次ならせいぜい2MBくらいだろう。
つまりこれではCPUに乗らず、メモリに乗ることになる。
これは結構なロスだ。

で99パーセントといったが、実際言語処理ではngramで多くして30くらいだろう。
つまりは30*2000*4だと1.2MB。
問題は最近のマシンだとこの部分の高速化が必要かということにぶつかる。

あと、実際人はどれくらい我慢ができるのだろう。
マルチクラスをしても2000だと15分くらいで済む。
これを10分にしたところで嬉しいだろうか?
つまりは通常何もせずに待っていられると思える速度は3分くらいかもしれない。
なので10分と15分では、別なことをしている間に、とかなった場合50歩100歩にしか
見えない。また精度とかを見ると1パーセント上がるだけで20問くらいの正解率が増える。
これは嬉しいのではないのだろうか?

つまり言いたいのは絶対数として見たとき、どう感じるだろうか?
ということ。
ただ研究と言うのは積み重ねなのでいきなりは難しいのが当たり前なのかもしれない。

そこら辺私はまだ常識を知らないので、これは無駄なのか、有用なのかわからない。
[PR]
by kagurayouyou | 2006-09-30 15:38 | プログラミング