GotoBLAS in VISTA

基本的にGotoBLASはVISTAサポートはされてないようなのだけど、動かんわけあるめえということで実験中。Cygwin上であれば普通に動くと言えば動くんだけども、permission設定の周りをちゃんとやっておかないと途中で止まったりする。主にTopディレクトリの.aファイルで躓いたりしている。後、Cygwinにもいろいろ入れておかないと不都合が生じるのでそのたびにcygwinのsetup.exeを起動するはめに。具体的には、/bin/shperlとmakeとgccくらいでいいはずなんだけど・・・
コンパイルが通るとしても問題は残っていて、なぜかCore 2 QuadなのにProc数が2と表示される。理由は不明。ソースを読んだけども、

  GetSystemInfo(&sysinfo);
  printf("%d", sysinfo.dwNumberOfProcessors);

とのことらしい。うーん?ざっと見た感じ間違ってなさそうだけど、もう少し調査が必要か。
強制的にスレッド数を変更するのは簡単で、Makefile.ruleの中の値を入れてやればいい。Quadなので4で。で、dllを作ってリンク。
ところが、なんか今のところマルチスレッドになっていない。パフォーマンスモニタで見る限り、Coreが一つだけしか動いていない。理由は不明。どっかにパラメータ入れなきゃいかんのかもしれない。

で、現状の性能的には倍精度で大体7G Flops弱。SSE使用に関しては不明。微妙なライン。微妙なラインであると思う根拠の一つとしては、単精度の計算が現状の3倍程度であること。周波数的には2.4GHzのモデルであることを考えると、SSE使用していると考えるのが妥当か?
http://todotani.cocolog-nifty.com/blog/2008/05/core2_quad_1020.html
後、このページによると、

コア数を増やした際に、メモリアクセス競合によって性能が低下するようなことはありませんでした。行列積は計算量に対してメモリアクセスが比較的少なく、複数のコアが同時にメモリアクセスを行った際に、片方のコアで計算がストールするシーンがないものと思われます

基本的には、4コア行列積くらいではメモリアクセス競合はめったに起きないといえる。・・・が、キャッシュ競合が起きることについては否定できない。メモリアクセスは比較的少ないので、うまくやればキャッシュの競合も起きにくくできるけども、このあたりはgotoBLASの腕の見せ所なんだろうなと思う。