サマーウォーズの試写会に行ってきた

新宿でのサマーウォーズの試写会の抽選に外れてがっかりしていたら、なんと友達が当選したとか!しかも自分を誘ってくれたので友達に感謝しつつ試写会に行ってきました。
僕は普段そんなに映画を見ませんし、試写会なんて行ったこともありません。サマーウォーズだけなんでこんなに注目しているかというと、出身地である長野県上田市が物語の舞台になっているからです。時かけの監督の次回作だっていうのもありますが…。長野県が舞台になるアニメは他にもありますが、ここまで地元がクローズアップされるとなると、興奮しないわけにいきませんよね。しかもしかも、僕の母校が実名で登場するらしいではないですか!これはもう見るっきゃないと思い、特典付きの前売券まで買ってきてしまいました(笑)。8月にもう一回見に行く予定です。
さて、試写会の感想ですが、笑いあり感動あり興奮あり地元ありで大満足でした。この映画のキーワードは「仮想都市」と「家族」です。仮想都市の世界観が素晴らしく、どんどん物語に引き込まれてしまいました。家族の絆の深さも感動につながって、鳥肌たちっぱなしでした(笑)。
地元が舞台ということを無視しても、僕のオススメ度は100%です。是非見ていただきたいと思いました。夏に実家に帰ったら、聖地巡礼でもしてみようかな、なんて考えています。

24歳の目標

先日24歳の誕生日を迎えました。ついったーでお祝いの言葉をくれた皆さん、ありがとうございました!今までオフ会というものに無縁だったのですが、オフ会に参加してみるのも面白いかもしれませんね。参加してみたいという気持ちはあるのですが、なかなか行動に移せずにいます。今年は1回くらいオフ会に行けたらいいなぁ。
さて、24歳の抱負です。今年こそ朝型の生活を送りたいです。最近は毎日8時半に起き、11時ごろ研究室に行き、23時くらいまで研究室にいます。せめて10時には研究室に行きたいですね。いわゆるコアタイムは無い研究室なので自由があっていいのですが、ついだらけてしまいがちです。
今年の最終目標は、9時に研究室に行き21時には帰る生活です。…これってごく普通の研究生では?

「プログラマの数学」を読んで

プログラマの数学という本を読みました。この本は、プログラミングで必要となる数学的な考え方や論理的な考え方を、とてもわかりやすく記述してあります。図も多く、また説明もかなり詳しく書いてあるので、数学やプログラミングが苦手な方でもサクサク読み進められるのでは無いでしょうか。
情報系の大学の学生なら知っていて当たり前なことなのですが、授業でやっただけだと結構忘れていますし、学生によってはまったく履修をしていない分野というのもあるかもしれません。情報系の学生には是非読んでほしいと思います。僕も大学院に入ってから読みましたが、よい復習になったし、より理解を深めることが出来ました。特に、第2章の論理と第6章の再帰が分かりやすく、目から鱗でした。
大学の図書館にも置いてあるかもしれませんし、勉強のために1冊持っていても損はしないと思います。もし図書館などで借りることが出来るのなら、是非読んでみることをオススメします。

プログラマの数学

プログラマの数学

期末試験&レポート期間

もうすぐ期末試験期間に入ります。大学院の授業はレポートがほとんどですが、試験も2つあるみたいです。最近は授業のレポートに追われて、なかなか自分の研究が出来てません。前期に必要単位の8割くらいを履修しているので、前期さえ乗りきれば楽になるのですが…。
今月末に再びTOEICを受けようと思います。単語力がまったくないことに気がついたので、今は英単語を覚えようと頑張っています。大学受験のときに使って挫折したDUO3.0を実家から持ってきて、一生懸命覚えています。まだ一周も出来てないですが。
昔は例文を紙に殴り書きして覚えていたのですが、今は読んだり声に出したりするだけにしています。書いた方が覚えることができると思うのですが、その分作業として大変なので、すぐに飽きてしまうのです。そして、必ずCDを何度も聞くようにしています。耳から覚えるというのは、大学受験時は意味が無いと決めつけてまったくやらなかったのですが、最近この方法が素晴らしいことに気がつきました。耳から聞いた英文というのは意外と頭に残るもので、単語を思い出そうとするときもネイティブの発音が蘇ってくるような気がします。
まだまだ単語力は乏しいですが、月末のTOEICに向けてひたすら覚えるだけです。

倍精度浮動小数点数演算

GTX295など、GTX200シリーズではGPUカーネル上で倍精度の演算を行うことが出来ます。単精度による丸め誤差の影響が少なくなる分、計算速度がある程度遅くなるとのことなので試してみました。
以前CUDAのサンプルプログラムを参考(というかほぼ丸写し)にして作った行列乗算を並列に行うプログラムを、単精度から倍精度に機械的に変更してみました。CPUとGPU間のデータ転送速度も含めた実行時間は以下の用になりました。*1

行列のサイズ 単精度演算 倍精度演算
512 2.2 ms 6.0 ms
1024 13.5 ms 40.5 ms
2048 98 ms 304 ms

もっと行列のサイズを大きくしてみないと何とも言えないですが、この結果からすると倍精度演算は単精度演算に比べ3倍程度計算に時間がかかるみたいです。CUDAの倍精度演算って、ハード的に実装されてるんじゃないのかな?3倍は微妙なラインですねぇ。うまく単精度と倍精度を併用して、誤差と速度の妥協点を見つけろということなんでしょうか。

倍精度演算を含むプログラムのコンパイル

float を double に置き換え、コンパイルして実行してみると、帰ってくる値が全て0になってしまいました。そんなバカな、と思って色々調べたのですが、どうやら倍精度演算を行うにはコンパイルオプション"-arch=sm_13"を指定しなければならないようです。

% nvcc hoge.cu -lcutil -arch=sm_13

これで倍精度演算を含むCUDAプログラムのコンパイルが出来ます。

*1:適当な計測なので信頼度は低いですが…

やっとグラフィックボードが届いた…!

ご無沙汰しています。授業が忙しかったり、休講期間があったりとなかなかブログを更新できていませんでした。休みが少し続いたので、久しぶりにけいおん!をリアルタイムで見ることが出来ました(笑)。普段は金曜の午前中の授業に差し支えるので、録画をして翌日以降に見ていましたが、やっぱりリアルタイムで見たいですね。しかし次回が最終回とは。特別編があるとかないとからしいですが、早いもんですねぇ…。
さて、卒研で使う予定のグラフィクスボードが本日やっと届きました。どこも品薄だそうで、入荷待ちの状態が続いていたようです。かなり待たされましたが、これで本格的にCUDAプログラミングをすることができます。頑張らないと!
でも今日は休みボケでとてつもなく眠いです。ああ、もう帰って寝たい…zzz

CUDAプログラミングに挑戦!

無事にCUDA環境も整ったので、CUDAプログラミングを始めてみました。手始めにサンプルプログラミングを動かしてみました。
~/NVIDIA_CUDA_SDK/以下にmakefileがあります。これをmakeすることで、サンプルプログラムやライブラリ等がビルドされます。

% cd ~/NVIDIA_CUDA_SDK/
% make

サンプルプログラムの実行ファイルは、~/NVIDIA_CUDA_SDK/bin/linux/release/以下に作られます。CUDAがきちんとインストールされたか確認するために、matrixMulあたりを実行してみます。

% ./matrixMul
Processing time: 0.117000 (ms) 
Test PASSED 

Press ENTER to exit...

このように表示されれば成功です。
こんなのつまらないという方には、oceanFFTやparticles、simpleGL、smokeParticles、fluidsGLあたりが絵も表示されて見た目にも面白いです。中でもparticlesは僕も気に入っていて、たまに実行しては遊んでいます(笑)

ヘッダファイル、ライブラリファイルが見つからない

とりあえず去年作った、簡単なCUDAプログラムをコンパイルしてみました。

% nvcc hoge.cu -lcutil
hoge.cu:5:22: error: cutil.h: No such file or directory

しかし、上のようなエラーが出てしまいました。CUDAを使うときは、プログラム内でcutil.hをインクルードします。どうやらcutil.hが見つからないようです。~/NVIDIA_CUDA_SDK/でmakeを実行すると、~/NVIDIA_CUDA_SDK/common/inc/以下にcutil.hが作成されるようなので、これを/usr/include以下にコピーしました。(~/NVIDIA_CUDA_SDK/common/inc/以下にはcutil.h以外にも多くのヘッダファイルがあるが、全てコピーした方がいいのかは不明。というか、この方法が正しいのかも分からない…)

% cd /usr/include
% sudo cp ~/NVIDIA_CUDA_SDK/common/inc/cutil.h .

これでさっきのエラーは出なくなります。しかし今度は、

/usr/bin/ld: cannot find -lcutil
collect2: ld はステータス 1 で終了しました

というエラーが。今度はライブラリが無いと言われているようなので、~/NVIDIA_CUDA_SDK/lib/以下のlibcutil.a、libparamgl.a、librendercheckgl.aという3つのファイルを/usr/lib/にコピーします。

% cd /usr/lib/
% sudo cp ~/NVIDIA_CUDA_SDK/lib/lib* .

これで無事にコンパイル出来るようになりました。