« August 2011 | Main | October 2011 »

2011.09.26

最近の若者は~

最近の若者は~って聞くと、僕の周りでは「無茶苦茶優秀」って続く場合が多い。IT関連だけかな。

今はさ、高校生くらいから処理系作ってる人いるのに、当時の僕たちの最先端は「ファミリーベーシックぶいすりーーーーーーーーー」だもん。触っているテクノロジーが全然違うよ。

すいません、「ぶいすりーーーーーーーーー」って言いたかっただけです。

| | Comments (0) | TrackBack (0)

2011.09.21

並列処理

最近、F#が好きでちょこちょこと書いています。

let sums = sum_calcs |> Async.Parallel |> Async.RunSynchronously

F#だと、こんな感じで簡単に並列化できるので、とてもうれしいです。僕が書いているプログラムだと、数行の修正で4~5倍の速度になります。費用対効果がすばらしいですね。

F#の場合、データの基本はimmutableなので、スレッドに分けて処理した結果を配列でもらって処理すれば、スレッド周りのややこしい事は発生しない。

とか思っていたら、boost::thread でも同じような事が簡単にできたりして、C++すげーなと思っている。boost::thread でも、プログラムがマルチスレッドになっても良いように作っていれば、これまた数行の修正で、速度が4~5倍になる。マルチスレッドになっても良いようにって言うのは、細かい関数単位の話じゃなくて(それも大事だけど)、アルゴリズムとしてデータの書き換えるタイミングがはっきりしていること。例えば
・入力データはconstにして、沢山のスレッドから同時に読まれても良いようにする。
・出力データはスレッドに分けても上手く合わせられるようにしておく
・中間データは各スレッドに持って、他のスレッドの影響を受けないようにしておく
とかそんな話。

結局の所、プログラミング言語がどのような機能を提供するかよりも、並列処理に適しているデータ構造とアルゴリズムの方が重要なのかなと、今更ながらに思うようになりました。


関係無いけど、プログラミングの魔導書 〜Programmers' Grimoire〜 Vol.2買いました。みんな買え。
http://longgate.co.jp/products.html


| | Comments (2) | TrackBack (0)

« August 2011 | Main | October 2011 »