プログラムの
ロジックがすっきりするなぁ。
研究のプログラム、メインのソルバーはほぼ書けてしまった。
C++ をやめる理由。
昨日が多すぎる。これであれが実現できるんじゃないか?とか思うと大抵泥沼で
バッドノウハウを積み上がっていく。
結果として元々の実現したかったことは醜く複雑になってしまう。
プログラミングってのは本来難しいことをできるだけ平易にして書くもので、
複雑になっちゃおしまいだよ。
バッドノウハウに感じるのも、バッドノウハウになってしまうのも
習熟が足りないせいっていう反論はあるかもしれないけど、
習熟ってのは慣れで、慣れによってプログラムが自然に見える、
見えないということは確かにある。
けど、正直あそこまで複雑だと言語全体に慣れるまでどれくらい時間を浪費すればいいんだろうね。
You like C++ because you're only using 20% of it. And that's fine, everyone only
uses 20% of C++, the problem is that everyone uses a different 20% :)
というように機能を限定して使えば、better なんだろうけど、限定していって最低限をとれば、C で十分。
おまけに C++ だと GCC も長大なエラーメッセージを吐くし、やってらんないよ。
ということで、可能な限りもう C++ では書かない。
version の
古い、Xcode の入手法。
https://connect.apple.com/ にアクセス。
ログイン、Downloads、右メニュー Developer Tools
おー、
Mac mini に Snow Leopard Server 版が!
Mac OS X Server 利用する選択肢としては、
なので、価格設定としては非常にお得なモデルですね。
しかし、Snow Leopard Sever が unlimited クライアント版なのに、
Ethernet が一つしかない、ハードをばらしたいときに面倒、
HDD 容量もカスタマイズできないしといった点が今一。
Ethernet は USB ポートが5つあるので、1つを Ethernet に変換しろということかしら。
そして、ターゲットとして想定されるのが、
お金をかけずに、小規模ネットワークを構築したい、Server をたてたい、そして何より Mac OS X Server で!
というところでしょうから、需要はそれほどなさそうで、
売れるのか?という疑問。
財布事情的には非常に魅力的なのですけどね。
■
それと Mac OS X で BLAS の関数、例えば、dgemm を呼び出すのにちょっとてこずったので、やり方を書いておく。
まず、ライブラリ含まれているかどうかを調べる。/usr/lib/libatlas.dylib に含まれているはず。
$ otool -v -t /usr/lib/libatlas.dylib|grep dgemm
_scalar_dgemm:
_dgemm_:
_atl_f77wrap_dgemm__:
_cblas_dgemm:
_ATL_dgemm:
_ATL_dgemmNN:
_ATL_dgemmNT:
_ATL_dgemmTN:
_ATL_dgemmTT:
_ATL_dgemmNN_RB:
_ATL_dgemmNT_RB:
_ATL_dgemmTN_RB:
とまぁ含まれている。
しかし、libatlas をロードしてもコンパイルできない。
vecLib/vecLib.h を include すればよいと思っていたのだけれど、
vecLib.h から vBLAS.h を見ると Single precision の関数しかプロトタイプ宣言がない。
なので、自前でヘッダを書かないといけない。
extern "C"{ extern void dgemm_(const char*, const char*, const int*, const int*, const int*, co nst double*, const double*, const int*, const double*, const int*, const double*, d ouble*, const int*); }
これで、libatlas をロードしてやれば ok.
とりゃあっと
BLAS, LAPACK の subroutine がややこしいので wrapper を書いた。
しかし、BLAS や LAPACK は破壊的な subroutine なので、
operator だと内部でコピーするので余計な生成がおきてしまう。
*= += -= とかは、メンバに一時的な配列を加えておいて、copy してごまかした。
+ - * とかはまぁしょうがない。
サイズ等のチェックは手抜きしてるけど、DEBUG マクロの有無でチェックしてログ生成するくらいはやるべきかも。
あと呼び出し operator でうまく利用できるといいけど、とりあえず保留。
しかし、今月はコーディングしかしていないなぁ。