FLTV
August 31st, 2009 | Published in Uncategorized
FLTV に参加して、 並列に動かす何か というタイトルでしゃべらせていただきました。 主催者の さん、会場提供のチームラボさん さんありがとうございました。チームラボの環境ナイスでした。
ぼくの話は、いまつくっている並列プログラミングのための何かについてのものでした。 SWoPP 2009 で話した内容そのままですが、日頃あまり並列プログラミングについて考えることないなー、といった方にも興味を持っていただければ、という。
WEB+DB PRESS vol 52 でも takiuchi さんが並列プログラミングのイントロを書いていたり、ちょうど前日に行われた LLTV でも並列プログラムのデバッグ方法について語られていたようで、じわりじわりと並列プログラミングがその地獄への穴を拡大してきているように感じます。 ranha さんは未来なんてない! と叫んでおられましたが、近未来は並列地獄なのかもしれません。
そんな中で、「性能が足りなければハードを買ってくればいいじゃない」というだけでなく、もう少しソフトウェアにできることを考えてみたい。また、単にハードウェアを買い足すだけで性能がそれに応じてスケールする、というそのメカニズムについて、秋の夜長に思いを馳せてみるのはいかがでしょうか。
他の方の発表を聞いていて思ったのは、ただのテキストファイルに、よくこんなにもたくさんの意味を持たせるなープログラミング言語というのは、ということでした。解決したい問題の多様さと、自分の意志を実行可能な形式に落とすための表現力の幅の広がり。 ここ最近では、プログラミング言語なんてどれも大差ないよねー、もとい、同じパラダイムのプログラミング言語ならどれを使ってもその表現力はオーダーが変わるほどじゃないと思うようになってきています。定数項にすぎないだろうと。 それでもなお、こんなにたくさんの表現方法がある、というのはなんなんだろうねと思わされました。 言語が思考を規定する一方で、思考のレベルで言語を使い分けるというのもある。 自分の伝えたいアイデアやメッセージを、かんたんに、正確に、美しく、聞き手が分かるように、伝える方法をずっと探しているのかな。
あと未来では脳直結プログラミングができるようになるからプログラミング言語いらなくなるよ説についてその後考えてみたんだけれど、考えた軌跡としてのプログラムというものを残すためになんらかの言語は残るんじゃないかなと。
そこに残るのは結局 C なのかもしれない。
ふまじめなまとめ
- “継続とは、一言で言うと、死亡フラグのことです”
- 未来派言語使いは Haskell / C++ ラバーが多い模様。どっちも東西の横綱ってかんじするものな
- 未来派言語使いはのんびりしゃべる、というかマイペース
- というか未来なんてない
Grand Central Dispatch をためす (1)
August 29th, 2009 | Published in CS
Snow Leopard がでましたね!
OpenCL と Grand Central Dispatch がおもしろそうなので、そのへんのことを書いていくシリーズです。まずは Grand Central Dispatch について、手がかりのない状態からかるく使ってみるまで。
0. Grand Central Dispatch について
前に少し書いたように、Snow Leopard から入る並列実行基盤ですね。
1. Xcode でドキュメント探し
Xcode のドキュメントビューア (えらくインターフェイスがかわった) から、 Grand Central とか Dispatch とかをキーワードにして検索すると、それらしいタイトルがひっかかります。しかし、内容をみることはまだできないみたい。 ADC の上級メンバーならよいのでしょうが、ヒラ会員の我々は無理なの?
2. カンをつかう
mdfind dispatch とかしてみるわけです。すると
/usr/share/man/man3/dispatch.3
とかひっかかる。これはあやしい。 というわけで man 3 dispatch
→ man 3 dispatch_async
としていくと、概念を紹介するためのサンプルコードが書かれている man ページにあたります。ビンゴですね。
3. 書いてみる
6-9 行がミソですね。 global queue に、ブロックないの処理を非同期で実行するようつっこんでるわけです。
4. 実行してみる
% ./a.out
hoge
... (寝てる)
%
ちゃんと非同期で実行されてます。
5. 確かめてみる
gdb であそんでみましょう。
% gdb a.out
(gdb) b 7 # ブロック内で break
(gdb run
Starting program: /Users/mootoh/gcd_sandbox
[Switching to process 10433]
Breakpoint 1, __main_block_invoke_1 (.block_descriptor=0x100001080) at gcd_sandbox.c:7
7 printf("hoge\n");
とまりました。 switching to process とかでてますね。スレッド切り替えがおこったのでしょう。
(gdb) bt
0 __main_block_invoke_1 (.block_descriptor=0x100001080) at gcd_sandbox.c:7
1 0x00007fff85bc2dc7 in _dispatch_call_block_and_release ()
2 0x00007fff85ba1341 in _dispatch_worker_thread2 ()
3 0x00007fff85ba0c80 in _pthread_wqthread ()
4 0x00007fff85ba0b1d in start_wqthread ()
wqthread とな。 Worker Queue thread とかかな? スレッド全体をみてみましょう。
(gdb) info threads
* 2 port# 0x417 __main_block_invoke_1 (.block_descriptor=0x100001080) at gcd_sandbox.c:7
1 port# 0x903 0x00007fff85bc1ace in __semwait_signal ()
(gdb) thread 1
(gdb) bt
0 0x00007fff85bc1ace in __semwait_signal ()
1 0x00007fff85bc195d in nanosleep ()
2 0x00007fff85c0f320 in sleep ()
3 0x0000000100000e94 in main (argc=1, argv=0x7fff5fbfe9b0) at gcd_sandbox.c:10
ちゃんと元スレッドがいますね。
6. その他
そういえば、 gcc に何のオプションも指定することなく、ふつうに Grand Central Dispatch のブロック構文が使えていました。また、特になにかライブラリをリンクすることもなく、ただ gcc -g gcd_sandbox.c
これだけでビルドできて並列実行できるバイナリが生成されますね。うむむ。
7. まとめ
ADC ヒラ会員なので、まとまったドキュメントとして man 3 dispatch 周りだけをたよりに Grand Central Dispatch を覗いてみました。ブロック構文がちゃんと使えることをまず確認し、 gdb からもちゃんとマルチスレッドの動作が見える、というところまでを追いました。
あと気になるのは、ハイレベル API がどういうものなのか、というところです。 Cocoa 的なのがあるとすれば、 .framework にまとまってるだろうと思うのですけれど、それらしきものはまだ見つけられていません。
次回はもう少し掘り下げてみたいとおもいます。それまでにドキュメント手に入るようにならないかなぁ…
20009-09-02 21:13 JST 追記
その2 を書きました。
Mitaka.rb #4
August 26th, 2009 | Published in Uncategorized
なんかしゃべれと言われたので、 Mitaka.rb #4 に参加してきました。フレンチうまうま。
るりまふぉん、という内容で話してきました。読んで字のごとくですが、るりま を iPhone から見れるようにする何かをつくったよ、という話です。
るりまふぉんのソースは こちら : github:mootoh/rurimaphone。
一昨日に、 Mitaka.rb の用意してないやん、そういえばさいきん Ruby さわってないやん、と気づいてあわててネタをひねりだし、昨日一日でプロトタイプをつくったかんじのものです。
スライドの余談のところにも書いてありますが、 Ruby で書いたコードはほんの少しで、ほとんどは Objective-C のコード。
Future Work に書いたことは割と本気で考えていることで、どこでもプログラミングできる環境というのができてきてると思っているのです。 iPhone だと、任意のコードを実行できるアプリはダメなんだけれど、あちら側にあるソースを、あちら側で実行して、あちら側にある実行結果を見るだけならば、別に問題なかろうと。クラウドとはいえないけれどそういうもの。それは gist と tryruby 的なものを組み合わせればできるんじゃなかろうかと。
もうひとつは、 サンプルコードを共有できるマニュアル という話。こっちの方が元からあったアイデア。 プログラミングをじっさいにやっていく中でだいじなのは、サンプルコードとコミュニケーションかなと。 マニュアル読んでて、じゃあじっさいにどういう風に書けばいいのん、という段になって困る、というのがよくあります。 Ruby だと、拡張ライブラリの rdoc ドキュメントを読んでるときによくそういう状態になったりする。 そんなとき、みんなが持ち寄ったコードを見ながら書き進められるといいんじゃないでしょうか。そのために、みんなでそのクラス、メソッドに対するサンプルコードを共有できるといいのではなかろうかと。 Wiki 的なアプローチというか。 んで、なんか困ったことがあったらビルトインの Twitter / IRC で質問を投げたりできると。
ちなみに iPhone はキーボードがないのでコード入力するには適さないよ、という意見もあるでしょうが、そこは補完入力とか音声認識とかいろいろやり方はあるはず。そろそろ外部機器も使えるようになるはずだし。
そんなこんなで、 iPhone で Ruby な何かをやりたい方は % git clone github:mootoh/rurimaphone
してみたらいいんじゃないの、というお話でした。
フレンチおいしかったです。
PLDIr
August 22nd, 2009 | Published in Uncategorized
PLDI の論文をざくざく読み進める会 PLDIr その1に参加してきました。 初回である今回は PLDI ’97 をざくざくと。
東大の秋葉原ダイビルにあるオフィスにて、9人くらいが参加。30本ほどの論文を各自が 1本 5分 ずつでまとめるという輪講形式でした。 とはいえ、途中で議論がまきおこるのでとても5分じゃ終わりませんでしたね。 みんなきちっと読んで資料つくってきてて研究者さすがだな、と思わせられました。 ぼくはと言えば、アブスト読んで本文からアイデアのかけらを拾い読みし、数式と証明をとばして評価結果を斜め読み、みたいなひどい話。
自分の担当分:
そんなわけで以下の5本を読みました。
自分の関心が薄い領域の論文を読むのはなかなかきついものがありますね… Flick と分散共有メモリの話はわりと読みやすかったんですが、残り3つは馴染みがない領域でしかも数式がたくさんあって参りました。
とはいえ、データフロー解析やコントロールフロー解析はコンパイラの最適化では基本的なものなので復習しておかないと。 Modulo Scheduler の話もソフトウェアパイプライニングを語る上で外せないし。図の基本的なアイデアは分かったんですけれどね。気を抜くと置いてかれる…
自分は既存の研究を押さえるのが苦手なところがあるので、こういう場を活用して研究のトレンド、幹となるものを把握していきたい。
以下、アブスト的なスライド。じっさいに読んでみよう、という気になるためのトリガになればよいなと思います。
おまけのマインドマップ
研究会
研究的な日常をはなれて久しいんだけど、ああそう、研究会ってこんなだったよなーというのを思い出しながら議論に交じっていました。 開発作業にまみれている日々では忘れてしまいがちなものを思い出すいい機会ですね。 とくに質問力がだいじ。角度、その質問からどんな発展的な対話が生まれるか。 そして主張を支える下調べと論理的思考。
勉強会とは温度がちょっと異なりますね。 勉強会は開発よりで、熱気、ハックをたたえる。 研究会はもうちょっとクールに、客観的にお互いに議論する、みたいな。 どちらもやるのがおもしろいし、両輪になっていいものを生み出していく。
余談
議論や談話のなかでよく出てきたことばが「中田先生の本にかいてあるやつだよね」というものでした。
よなー、じゃあ読んだことあるはず、とそのときはぼんやりしていたんですが、帰って調べてみたらどうもこっちな気がする。
中田 育男
朝倉書店
売り上げランキング: 172484
おすすめ度の平均:
最適化を中心にコンパイラの全てを網羅した名著
最適化に特化したコンパイラの本
実用コンパイラの技術
最適化についての記述が豊富
ドラゴンをたおしたら読みにかかりたい。むしろ併読すべき?
あとは LLVM で何かつくろうとしたらやっぱしソース読むことになるよとか、ディペンダブルってなににディペンドするんだろうとか、みんな仲良くしようよねえ、とかいう話をしていた気がします。
次回は9月の最終日です。参加してみたいという方はコメントか までご連絡ください! というかいっしょにやりませんか!
Tags: pldi, research