joker8phoeniさんの記事でRに含まれるBLASライブラリをOSXのAccelerate Frameworkが提供しているものと差し替えるだけで行列計算が高速化できることを紹介しています.元ネタは cran の FAQ 10.5 のようですね.
簡単なので,自分の Mac でもやってみました.
以下は Mac mini (Late 2012), 2.6 GHz Intel Core i7, 16GB 1600 MHz DDR3 での結果です.Rはbrew cask installしたものです.たぶん,普通に R の提供元から入手できるバイナリ版と同じものだと思います.
まずはデフォルトの設定での実行結果
種目 | 計算時間 |
---|---|
Matrix (3000,3000) | 49.136 |
Matrix multiplication | 6.27 5.895 5.866 5.898 5.843 |
Matrix inversion | 14.644 14.604 14.628 14.656 14.673 |
Eigenvalues/vectors | 42.685 42.891 43.668 43.442 45.844 |
Linear regression | 4.966 5.181 5.104 5.362 5.351 |
つぎはBLASライブラリとしてAccelerate frameworkのなかの vecLib framework から提供されているものです.Yosemite になって vecLib framework は Accelerate framework に取り込まれたんですね.
種目 | 計算時間 |
---|---|
Creating Matrix (3000*3000) | 1.771 |
Matrix multiplication | 0.202 0.204 0.204 0.204 0.204 |
Matrix inversion | 0.46 0.431 0.434 0.432 0.427 |
Eigenvalues/vectors | 9.093 9.12 9.035 8.994 9.01 |
Linear regression | 3.419 3.382 3.379 3.419 3.374 |
- 行列の生成: 27.7倍
- 行列の乗算: 29.2倍
- 逆行列: 33.5倍
- 固有値・固有ベクトル: 4.83倍
- 線形回帰: 1.53倍
joker8phoeniさんのMacBook Pro (Retina, 15-inch, Late 2013)に比べると高速化率は劣っていますので,機種依存性があるようですね.そうはいっても,この高速化は魅力的です.
Rstudio の FAQ 10.5 によれば,Apple の BLASライブラリの内容に責任は持てないと注意しています.
ベンチマークに使ったスクリプトを共有します.
基本的には joker8phoeni のスクリプトそのままですが,BLAS の差し替えも自動化して手軽に実験できるようにしました.お試しあれ.
つぎは職場の iMac (Retina 5K, 27-inch, Late 2014), 4GHz Intel Core i7, 16GB 1600 MHz DDR3 での結果です.