RejectKaigi2007
RubyKaigi 2007がおわって撤収作業中に、RubyKaigiでreject(採択にならなかった)ネタをあつめての一人2分半でのプレゼンテーションがRejectKaigi2007だ。2分半という時間は絶対で、ノートの設定用30秒も含めて、2分半たつと強制的に打ち切りで画面が切られる。
まとめページはTAKESAKOさんのページを参照。
http://labs.cybozu.co.jp/blog/takesako/2007/06/rejectkaigi2007.html
全部で19人、一人2分半の持ち時間でも結構しゃべれるのね、と思いました。
こんな素晴らしい発表をリジェクトするなんて、本家RubyKaigi2007のCFPの応募がいかに充実していたのか想像できます。むしろ、リジェクトしたことを後悔させるぐらいの意気込みだったのかも。発表者の皆さん、スタッフの皆さん、大変楽しい時間をありがとうございました&お疲れ様でした。
さてわたしの持ネタ(笑)のキャッシュミス。キャッシュミスを削減する方法というのは昔はいろいろ大変で素人にはなかなか手が出せなかったのだが、昨今はツールも充実しプロセッサの機能も豊富になってきたので、お手軽にためせるようになった。ハードウェアエンジニア(プロセッサのアーキテクト)でなくても、各種ツールでキャッシュミスを測定できる。linuxだったらoprofileだ。
さて、発表した持ネタは下記のブログを再構成したものである。時系列でまとめるので、参考にしてほしい。
そもそものきっかけは、カーネル読書会で小崎さんがmallocのお話をして、そのとき、ささださんがGCでの動作の質問をして、ふとキャッシュミス測定してみたら面白いんじゃないと思ったのがはじまりである。
その時のビデオも公開しているので参考にしてほしい。質問が聞きとりにくいとか、いろいろ限界もあるのだけど、雰囲気だけでも感じとってね。
今回もmalloc/freeのコストについてRubyの笹田さんがRubyでのメモリ管理の観点から細かい突込みを入れていたが、OSとアプリケーション(この場合はプログラミング言語の実装)の境界を越えて、いろいろ議論できるのが楽しい。
第67回カーネル読書会、ビデオ公開
http://blog.miraclelinux.com/yume/2006/09/67_8c37.html
まづ手始めに自分のノートで測定してみた。ノートPCなので、acpi関係のロードが大きい。
Rubyのプロファイリング (ユメのチカラ)
http://blog.miraclelinux.com/yume/2006/10/ruby_0b0e.html
そこで会社のXeonで測定してみたのが下記。os_each_obj にキャッシュミスを多発している部分を発見する。
ソースとoprofileの結果をつきあわせてみて特定した。
for (;p < pend; p++) {
if (p->as.basic.flags) { /* ここの部分 */
...
というコードなので、prefetchでいけるだろうと考えた。
Rubyのキャッシュミスを測定する。(未来のいつか/hyoshiokの日記)
http://d.hatena.ne.jp/hyoshiok/20061002#p2
でquick and dirty hackが
for (;p < pend; p++) {
+ if ( (p+1) < pend) {
+ __asm__ __volatile__ (
+ " prefetch (%0)\n"
+ : : "r" ((p+1)->as.basic.flags) );
+ }
みたいなパッチになる。
L1 キャッシュミスを約41.8%削減した。実行スピードにはほとんど影響をあたえなかったが(とほほ)。
Cache Aware Ruby Patch (未来のいつか/hyoshiokの日記)
http://d.hatena.ne.jp/hyoshiok/20061003#p1
最後に上記の実験で得た知見をまとめたのが、「コードを読むな、理解しろ」である。
コードを読むな、理解しろ (ユメのチカラ)
http://blog.miraclelinux.com/yume/2006/10/post_e3d6.html
詳細は「コードを読むな、理解しろ」を参照していただくとして、キャッシュミスの削減という従来であれば「深い技術」が、オープンソースと各種ツールの整備のおかげで、いとも簡単に実装実験できる「浅い技術」までおりてきたのである。
わたしが実施しお見せしたような事が、このブログを見ているキャッシュミス削減なんか考えたこともないプログラマや、あるいはベテランなんだけどもオープンソースに土地勘のないプログラマにも再現可能な事として誰でも実施できるようになったのである。
研究のコモディティ化(?)である。こんなに楽しいことを大学や企業の研究室の中だけで閉じこめておくのはもったいない。
カーネル読書会というオープンソースのコミュニティの議論をきっかけにあたらしい知見が生みだされたという実例なのである。つくづく恐しい時代になったものだなあ(笑)
RejectKaigi2007に参加して、そんなことを思ったのだけど2分半のプレゼンには全然もりこめていない。
発表資料は下記。
http://blog.miraclelinux.com/yume/files/rubykaigi070610.pdf
Happy Hacking!




コメント