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

実際の効果の方ですが以下の要件で速度を測ってみました.

  • CPU Core i5 2310
  • 主記憶 8GB
  • FreeBSD 9.1-BETA1 (amd64)
  • GCC 4.6.4
  • 3000*3000の行列に対してdgemmを適用

結果は以下のようになりました.

  • 84.7Gflops (Sandy Bridge assembly)
  • 45.2Gflops (Nehalem assembly)

概ね二倍になる辺りAVXの恩恵はかなり明確であるようです.

なお,今回は安定開発版を自分でビルドしてインストールしましたが,FreeBSDの次期リリースである9.1-ReleaseからはAVXが標準でサポートされるようになると思われます.