昨日得た知識だけで自動並列化について書く日記

昨日のことを書く日記。


mapとか、いうような依存性の無いものを並列化するのってなんというか、そのまんまじゃないかー、と、か。
そういうのが楽しみたいんだったら、FORTRANでループでも書いておけばよろしいんじゃないでしょうか的な。
(というか、いまどき依存性の無いループを書く人なんているのかなー。←とか書くと科学計算とかの人に怒られる)


本物のFORTRANコンパイラなら、いくつか前のループの結果に依存とか、いくつか後のループの結果に依存、とか、その程度なら、依存性を見つけて、並列化する、とかやってくれる。(←ここらへんが昨日得た知識)

(FORTRAN知らないので、表記は、アヤシゲな言語としておいてください)
for i in (n,m)
  a[i] = b[i] * c[i] + a[i-1]
end

こういうループがあったとして、

b[i]*c[i]

の部分は、依存性が無いので、先に並列化して計算→その結果と依存性のある部分でループ。というような変換をする…はず。多分。一回の乗算程度だと、どうなんか知らないけど、この計算が重かったら、それなりに違いが出てくるはず。(妄想だけで語ってます。あー、一回くらい本物のFORTRANコンパイラ触るようなコード書いてみたいなー)


多分、Haskellでいうと、foldlとかそういうのを並列化してくれてる、ということになるんだと思う。

foldl (\c (a,b) -> a*b + c) 0 (zip [1,2,3,...] [4,5,6,...])

これを並列化できるか?みたいな話題。


と、まあ、そんな感じで、「自動並列化」というのは、単純に「副作用の無い言語があればいい」みたいなつまらない話じゃなくて、もっと、「シーケンシャルな処理から、依存性を解析して、並列化可能な部分を見つける」と、いうような、言語の構造からは独立した面白い話題になるんじゃないかなー、と思う。Haskellでいうなら、IOモナドの並びから、並列化できる部分を見つける、みたいな話なんじゃないかなー。
もしくは、そういうののためのヒントになる構文はどういうのがあればよいか?とか。pragma ompは十分か?何が足りないか?とか。妄想すると妄想。

あひりえいと

昨日読んでたのはこれ
isbn:4254121393
の最後のほう。
データ分散と通信の話とかは、「これからCELLってやるぜ」っていう人には面白い話題なんではないかなー…などと書きつつ、こういうときにあひっておけば、がっぽがっぽうっはうっはなような気がしたけど、それは控えておく。


いや、別にあひを貼っておくのはいいんだけど、あれで物を買う人の気持ちがわからんのよなー。だって、あひで買ったやつとか、絶対積むやん?あれだけ、webとかで評判調べたりとか、本屋で吟味したあとで買った本ですら積むというのに、ひとのぶろぐを数分読んだだけで購入を決めちゃうようなそれを積まないわけがない。