SandyBridge対応のOpenBLAS 0.2.2を試す
以前の記事でGotoBLASの後継として開発が進められているOpenBLASをFreeBSDで利用する方法を記述しました.
ところで,当該記事の公開時点ではSandyBridgeと呼ばれるマイクロアーキテクチャはサポートされず,Nehalemマイクロアーキテクチャとして検出が行われていましたが,先頃公開された0.2系からはSandy Bridgeマイクロアーキテクチャがサポートされ,新たな浮動小数点拡張命令群であるAVX (Advanced Vector eXtensions)を利用するカーネルが追加されました.そこで,今日はこれを試してみます.
とはいえ,CVSWebのsrc/sys/amd64/amd64/fpu.cを見る限り,現在公開されているリリース版のFreeBSDではAVXはサポートされないようです.したがって,FreeBSDでAVXの恩恵を受けるには9-Stable等の開発版を利用する必要があります.
さて,もしも現在利用しているFreeBSDがAVXをサポートしているならばSandyBridge対応のOpenBLASを利用するのは簡単です.例によってredportsからportsを取得してインストールを行うだけです.
svn co https://svn.redports.org/ejsib/math/openblas
cd openblas
make WITH_SANDYBRIDGE=true install clean
実際の効果の方ですが以下の要件で速度を測ってみました.
結果は以下のようになりました.
- 84.7Gflops (Sandy Bridge assembly)
- 45.2Gflops (Nehalem assembly)
概ね二倍になる辺りAVXの恩恵はかなり明確であるようです.
なお,今回は安定開発版を自分でビルドしてインストールしましたが,FreeBSDの次期リリースである9.1-ReleaseからはAVXが標準でサポートされるようになると思われます.