Haskell beats C
経緯
GHC、vector、DPH の SIMD 対応始まる
New project to support SIMD vector instructions in GHC (x86 SSE & AVX, ARM's NEON etc) http://t.co/7q7vBf2g
2011-11-14 21:50:53SIMD Support for the vector library http://t.co/YgxBYptM
2012-03-27 09:04:49Adding SIMD Support to Data Parallel Haskell http://t.co/p6Sux2TE
2012-04-18 22:06:39これらの開発は HEAD ではなく simd という branch を使って行われました。
GHC HEAD に SIMD 対応が入る
GHC HEAD に、simd branch で行われていた「SIMD 命令を使ったベクトル演算用の primitive を追加する」変更が入りました。 http://t.co/fCfUdk7A
2013-02-02 09:22:50ghc-commits に自動投稿されたメールの表示が一部「master:」ではなく「:」になってますが、無事 review した全ての変更が入っているようです。 https://t.co/vF12IxMu
2013-02-02 09:26:23現時点の実装では「SIMD 命令を使ったベクトル演算用の primitive」は LLVM バックエンドでのみ SIMD 命令にコンパイルされます。native code-generator などではコンパイルエラーになります。 https://t.co/SGKDb6vz
2013-02-02 09:26:50LLVM や LLVM バックエンドには他に Win32/Win64 固有の問題もあるので、今後「native code-generator にも対応するか、Win32/Win64 固有の問題が解決される」ことに期待したいですね。
2013-02-02 09:27:44後で書いていますが、HEAD で SIMD 対応が入ったのは今のところ GHC 本体のみです。primitive、vector、DPH にはまだ入っていません。念のため。
GHC 及び primitive、vector、DPH の SIMD 対応について書いた論文が紹介される
「SIMD 対応を HEAD に入れるための最終的なレビューを求めるメール [http://www.haskell.org/pipermail/ghc-devs/2013-January/000229.html ]」から始まったスレッドの中で紹介されました。 http://www.haskell.org/pipermail/ghc-devs/2013-February/000270.html
で、SIMD 対応については前々から気になっていたので読んでみたという感じです。
内容紹介
"Haskell Beats C Using Generalized Stream Fusion" http://t.co/SxVe3ohT (via http://t.co/ujgCe7yQ )
2013-02-05 15:38:11(チャンク単位での処理やベクトル演算を扱えるよう)一般化した Stream Fusion を使って、Haskell で C に勝つ! http://t.co/SxVe3ohT
2013-02-05 15:38:23このつぶやきのリンク先には、2013年3月現在、PLDI に投稿された古いバージョンしか置いてありません。ICFP に投稿された最新版の論文の草稿を読みたい方は以下の URL からダウンロードして下さい。 http://research.microsoft.com/en-us/um/people/simonpj/papers/ndp/
この論文では GHC の SIMD 対応そのものよりも、vector の改良が話のメインです。GHC のベクトル演算用の primitive をそのまま使ったコード (e.g. https://gist.github.com/NicolasT/4974223 ) はでてきません。
(Monadic) Stream Fusion の「vector の HEAD や simd branch に入っているチャンク単位で処理を行うための拡張や、simd branch に入っているベクトル演算を行うためのの拡張」について説明する論文ですね。
2013-02-05 15:39:01チャンク単位の処理のために入ったのが Bundle、ベクトル演算のために入ったのが(後で出てくる) MultiStream です。
ちなみに vector HEAD では、Monadic Stream Fusion 上にチャンク単位で処理を行うための Bundle というものが実装されています。(Stream 内部に実装されていた Facets から外部に実装される Bundle に変わりました。)
2012-11-04 23:14:54