2008-08-04
■外せない言語
言語オタが非オタの彼女に言語世界を軽く紹介するための10言語
元の話になるべく近い論理でやろうとするわけなのだけれど、ここで蛇足な言語として気になるのがRubyとPHPだな。
言語同士間の、ある程度似通っていて、かつどうしようもなく違う。そんな紹介をするためには、Perlをひとつ目に押すんならRubyとPHPは全く不要。
Rubyの位置に出すべきなのは、まさにJavaじゃなかろうか。Perlで始まりJavaで終わる。逆でもいい。メジャー度という観点で見ても、エヴァとハルヒという元のリストに合致・該当するものとしては、この二つでいいんじゃないか。どうしてもRubyを入れたいならPerlを外すというのもアリ。
後はPHPの位置にはFortranを押しておきたい。数値計算端の人間だから、というのもあるし、この言語の特殊性は異常と言わざるを得ない。MPIやらOpenMPやら使って、というのをCでやるのは理解できるが、Fortranはそのあたりをがっつり取り込んでしまおうという方針が異常。好きか嫌いかは置いといて。
2008-08-03
■Open Campas
明日からSWoPP旅行なので、その前に書いとこう。すでに水曜の話だけど。
東大でオープンキャンパスがあったらしく、全体的に高校生とか保護者とかがいっぱい。で、TAとして手伝いやってました。理学部では2000人程度の人が来たらしく、そのうち情報に見に来てくれた人は500人とも600人とも。特にH木先生の講演は大人気。一度は236では入りきらずに214に移動するというハプニングも。それでも立ち見が出るくらいで、来ていただいた方々はありがとうございます。
基本的な仕事は、136にて研究室紹介。といっても、自分の研究室以外ばかり説明をしていた気がする。まあその他の研究室の方が多いんだから当然か。それと講演や情報科学科の部屋見学への勧誘。どういうわけかは知らないけれど、結構女の子がやってきていた気がする。だったらもうちょっと大学入学した後でも情報科学科に女の子が増えればいいと思う。あと、別に女子高生の携帯番号とか聞いたりしてないんだからね!
全てが終わった後は打ち上げ。約一名不思議な人物はいたものの、比較的面白く。本来的には理学部での打ち上げでバーベキューがあったのだけれども、ハイエナのように群がる人々が大量にいたのであきらめて136にて飲み会を仕切り直した。M田さんありがとうございます。後、衣食が足らないんだから礼節なんてありえないよね、と。
HIROX
2008/08/04 01:39 今から女の子増えても自分たちには意味ない気がw
succeed
2008/08/04 07:29 SDKには、今度こそ女の子が入ってくるヨカーン
おrz
2008/08/09 01:26 魚拓希望
2008-07-26 暑くて頭がフットーしそう
■バグハケーン
うまくCPU数を認識できてないと思ったら、
#ifdef defined(__WIN32__) || defined(__WIN64__)
ってのが間違ってることに気づいた。Cygwin GCCを使うのであれば、
#ifdef defined(__WIN32__) || defined(__WIN64__) \\ || defined(__CYGWIN32__)
とすればおk。一応
#ifdef defined(__WIN32__) || defined(__WIN64__) \\ || defined(__CYGWIN32__) || defined(__CYGWIN64__)
のほうが安全か?
落ち着いたらパッチでも投げるかな。
■GCJ Round 1A
オワタ・・・・いろんな意味で。
まず、BとCは無理。でかいInputはどう考えても終わらない。計算量的に。早々にあきらめて、全探索とか普通のnewton法とかに逃げた。未だに解き方は不明。もうちょい考えてみよう。
さらに、AのLarge inputを間違えた。・・・・良くある形だが、longにしなかった俺の負け。
k.inabaさんのちょい上だからまあ良しとするかw
一応603位なので通過はしたんじゃないかと思っているが、どうなのだろう。どちらにしても、終了5分前にCのsmall inputを通していなかったら終わっていた。本当にやばい。今後大丈夫なんだろうか・・・
今後のScheduleを見ると、Round 2は1000人、Round 3は500人通過らしい。・・・3つに分けられた上で600位とかもはや死んでいるといわざるを得ないwwwwww仮にAのlarge inputを通していたとしても、448位だったわけで。気合を入れないと次で死んでもおかしくない。
追記として:とりあえず通貨はできたっぽい。あとB,Cともに理解した。Bは問題を細かく読まないと解けない系、Cは紙と鉛筆がないと無理系。
■GotoBLAS続き
マルチスレッド化の方法は判明。MakefileのコメントアウトされたSMP=1のコメントを外せばいい。ただ、どうにも性能が出ない。倍精度で25G Flopsくらい、単精度でも45G Flopsまでしか出ていない。
理由として考えられることの一つは、やはりキャッシュサイズ。使っているのがQ6600なのだけども、これはL2が4M * 2になっている。だけども、見た感じだと4Mに設定されている。ここをうまく変更すると、もうちょっと速くなるかもしれない。
一応の目標性能、というか予想性能的には、倍精度で40GFlops弱。もう少し早くなってもおかしくはない。
2008-07-25
■GotoBLAS in VISTA
基本的にGotoBLASはVISTAサポートはされてないようなのだけど、動かんわけあるめえということで実験中。Cygwin上であれば普通に動くと言えば動くんだけども、permission設定の周りをちゃんとやっておかないと途中で止まったりする。主にTopディレクトリの.aファイルで躓いたりしている。後、Cygwinにもいろいろ入れておかないと不都合が生じるのでそのたびにcygwinのsetup.exeを起動するはめに。具体的には、/bin/shとperlとmakeとgccくらいでいいはずなんだけど・・・
コンパイルが通るとしても問題は残っていて、なぜかCore 2 QuadなのにProc数が2と表示される。理由は不明。ソースを読んだけども、
GetSystemInfo(&sysinfo); printf("%d", sysinfo.dwNumberOfProcessors);
とのことらしい。うーん?ざっと見た感じ間違ってなさそうだけど、もう少し調査が必要か。
強制的にスレッド数を変更するのは簡単で、Makefile.ruleの中の値を入れてやればいい。Quadなので4で。で、dllを作ってリンク。
ところが、なんか今のところマルチスレッドになっていない。パフォーマンスモニタで見る限り、Coreが一つだけしか動いていない。理由は不明。どっかにパラメータ入れなきゃいかんのかもしれない。
で、現状の性能的には倍精度で大体7G Flops弱。SSE使用に関しては不明。微妙なライン。微妙なラインであると思う根拠の一つとしては、単精度の計算が現状の3倍程度であること。周波数的には2.4GHzのモデルであることを考えると、SSE使用していると考えるのが妥当か?
http://todotani.cocolog-nifty.com/blog/2008/05/core2_quad_1020.html
後、このページによると、
コア数を増やした際に、メモリアクセス競合によって性能が低下するようなことはありませんでした。行列積は計算量に対してメモリアクセスが比較的少なく、複数のコアが同時にメモリアクセスを行った際に、片方のコアで計算がストールするシーンがないものと思われます
基本的には、4コア行列積くらいではメモリアクセス競合はめったに起きないといえる。・・・が、キャッシュ競合が起きることについては否定できない。メモリアクセスは比較的少ないので、うまくやればキャッシュの競合も起きにくくできるけども、このあたりはgotoBLASの腕の見せ所なんだろうなと思う。
2008-07-20
■来週のGCJ Round 1
火曜までに日時を決めなきゃいかんので、まあ適当に。朝10時とか起きれない可能性もあるけれど。
まだそんなに苦しい戦いにはならないと思うけど、自分の能力がいろいろ落ちていることを実感するQualification Roundだったことを考えると、恐ろしい。
ということで問題ごとの雑感。Aに関してはGreedyでおk、とすぐ気付いた。とはいえ、問題の意味を読み取るのにちょっと苦労。まあ、スライム問題の倒し方に関する直観は衰えていない気はしたが、最近C90ばっかり書いていることもあって、forの中でindexの変数宣言をするのを忘れることが多々。後、Serach Engineにspaceが入っているという仕様により、ScannerのnextLineを呼ぶところでごちゃごちゃと。すぐに気づけるとはいえ、こういうところが今後の命取りになるかも。
問題BもSortするだけなんだけども、ひさびさにimplements Comparableとか書いたわけで、順序を逆にしていて失敗。後はoutput formatで2回もErrorを。直観と解き方自体は決して間違ってないものの、こういうはまり方は良くない。今後修正せねば。
問題Cは大失敗。最初、外側の枠を除外した状態で通りぬけない確率をDirectに計算しようとしてダメ。これを計算するには、横のガットと縦のガットに当たる確率をそれぞれ計算して、両方に当たる確率を引けばいいわけだけど、両方に当たる確率の計算がほぼ不可能。角の丸い正方形と円の共通部分とか無理無理無理。次はメッシュに切って計算始めたけれども、id:tanakhさんが指摘しているように細いガットがたくさんあるとダメ。うまくいかない。4桁くらいまでは合うんだけど。これを考えると、モンテカルロも無理そうだというのがすぐわかる。で、ふつうに通りぬけない確率を考えれば図形がシンプルになることに気づいて終了。
問題セットとしては、意外と難しかった、くらいか。Qualificationというくらいだから、もう一段階くらい優しい問題になるかと思ってたけども、A, Bでさえ誰でも解ける問題じゃなかった気がする。これが解けなきゃ話にならないというのは事実だと思うけど。
おrz
gcc
2008-07-14
■こねこね
そういえば、フランスの最終週に某東大の先生とお話しする機会があって、そこで聞いた話。小中学校の教員とかはともかくとして、大学の先生に関して言うならば、海外の方が日本よりもコネ社会である、と。本質的にコネの使い方が違うらしい。コネ採用を受ける側からすれば、どちらでも同じようなものかもしれないし、コネをねたむものからすればどちらもにくいのだと思うのだけども、コネで採用を行う側の意識が全く違うと主張されていた。
いわく、日本のコネの多くは自分のためのコネ採用をしていることが多い、と。たとえば自分の勢力を伸ばすためであったり、貸しを作ったり。しかし、海外のコネはそうじゃない。自分が良く知っている人を採用することで、結果に対して信用ができるから採用するんだ、と。つまり知っている人を採用することの方が組織全体のためになるからそうやっているんだと。その意味で日本のコネと海外のコネは全く違うと仰っていた。後、東大に関して言うならば、そのあたりはちゃんとしているらしい。
全ての海外の大学がどうなのかは知らないし、日本の大学の状況ですら良くわからないけども、こうやって聞くと普通の話だよなあ、コネって。というか、コネを使うってことはその後の借りが残るわけで、ここぞという時以外にはあまり使いたくはないな。と言いながらもかなりコネっぽい何かで何とかしている気がしなくもない。
2008-07-12
■Scilab 5.0ビルド
昨日あたりからtry中。ただし、VC++ 2008 Express Editionで。やり方自体はここらへんに書いてはある。
問題は、やはりCとFortranの共存にある。VC++はFortranのコンパイルができるわけもないので、ここでIntel Fortran Compiler使うか(コンパイラの共存はできるようになってる)、あるいはf2cコマンドでCに変換してからVC++に任せるか、という流れになる。
このあたりは、ソリューションファイルで提供されているはずなんだけど、ARPACKという疎行列関連のライブラリがなぜかコンパイルできなかった。正確には、ARPACKのルーチンをf2cにかけてるところで落ちる。・・・んだけど、手動でf2cかけたらちゃんと動くんだよね、これ。
事前に手で変換かけて、それから実行すれば何とかなったんだけど、どうなってんだろう。エラーメッセージが読めないのでよくわからん。
追記:ほぼ全て解決した。理由はパス名に日本語がある点だった。フォルダ名のスペースは大丈夫なようだが、日本語文字はまずい。これだから海外製のソフトウェアは・・・・
2008-07-08
sage
18℃に設定すればよろしくてよ
pぁ
ついでに3つくらい一緒に扇風機当てればいいんじゃないかな