CamlFloat

演習3で最終的にsparse matrixの計算をするところまできました。といっても、O氏ほどヘビーな計算をするわけでもなく、MATLABソースを一生懸命読んだところ、縦横画素数くらいの行列で連立一次方程式を解くだけです。簡単ですね(?)
ライブラリなんかは自分では作らない、というかそれは先学期の話ということで。むしろ、何を使えばいいのかわからないのもいかがなものか。BLAS + LAPACKがわりと業界標準ぽいにおい。地学科の某友人もそんなことをいっていたような気がするから、間違いないだろう。BLASが行列演算のみのライブラリで、その上のレイヤーにLAPACKが各種計算を行っているといったところか。Fortranの関数はどうにもぱっとみで何の関数だかわからない。
CPUベンダも作っているようで、Intelは有償なのに、AMDはFreeで配ってるらしい。なわけで、AMDの行列計算ライブラリ(ACML)なんてのもありか。ドキュメントがそろってるだろうからそれの方がよかった気もするが、むしろATLASに惹かれてしまった。これは、BLAS(とLAPACKの一部)にアーキテクチャ依存な最適化をがんがんかけたものらしい。makeするときに質問に答えるのだが、アーキテクチャに始まり、SSE2命令、pthreadの有無、CPUの個数まで聞かれた。なんとも頼もしい。
しかしいかんせん、ドキュメントが少ない。どうしたものかと思っていたとき、ふとOCamlでないのかと思ったら、CamlFloatというライブラリを発見。これ、バックエンドではBLASを使っているとのことで速度も信頼性も十分。さらに、OCaml的(?)な<=>演算子がでてきたりして、なんともあれげである。
そういえば、C++のoperator <<になれてしまった身としては、どうしたものかと思ったので・・・

let (<<) o s = output_string o s; o

stdout << "hoge" << "fuga"

まぁ、どうでもいいですね。
ついでに、cygwin版のocaml graphicsはcygwinX11が必要とのこと。win32 nativeなバイナリをインストールして使ってみたら、ちゃんとwindows nativeなwindowが表示されました。VC版はnative compile時にVCがないとエラーが。mingw版がいいですね。
そういえば、Javaで作ってくれるとうれしいとかいわれてたな。JavaどころかCどころか・・・。いかがなものか。まぁ、速度的に(と時間的に)余裕があったらJavaの行列ライブラリも探してみるかな。むしろ、こういうところでHaskellの勉強をしておけという話もありますが。