Apple Accelerate を使用して Apple Silicon 上の MATLAB をさらに高速化
※この投稿は 2023 年 12 月 13 日に The MATLAB Blog へ 投稿されたものの抄訳です。
すべては BLAS から
線形代数は現代の技術計算の中心に位置しているため、Intel、AMD、Apple などのチップメーカーは、ハードウェア上で線形代数を行う際にできる限り高速に処理したいと考えています。なのでそれぞれのCPU の特性を完璧に引き出すように精巧にチューニングされた BLAS ライブラリの独自実装を持っています。
もちろん、ブログの常連読者にとってはこれらは何も新しいことではありません。私は BLAS、そしてその兄弟である LAPACK に少し執着心をもっており、Trying out AMD’s AOCL や Apple Silicon の MATLAB ベータ版に関する投稿(これ と これ)などの記事で何度も取り上げられてきました。これらの記事では、特に Apple Silicon に対する MATLAB の BLAS サポートが最近どのように進化してきたかを解説しました。
Apple Silicon の MATLAB で Apple Accelerate を BLAS として使用できるようになりました
まず R2023b Update 4 以降が必要です。そもそも R2023b より前のものは Apple Silicon 上でネイティブ対応してません。R2023b をインストールしましたら、version コマンドでどの Update 版かを確認してください。
パフォーマンスの話
言うまでもなく、線形代数演算に注目しなければ・・この変更によってパフォーマンスの違いは見られないかもしれません。しかし、これは MATLAB の話なので、きっと多くの線形代数演算を含む関数で恩恵があるでしょう。
このページのベンチマークを自分で試されたい場合、私が使用したスクリプトは GitHub にあります。
行列同士の乗算
行列同士の乗算で最も大きい速度の向上がみられました。これは Apple によって BLAS がかなり最適化されていることを示します。
Matrix Size
|
OpenBLAS time (s)
|
Apple Accelerate time (s)
|
x Speed-up
|
1,000
|
0.0172
|
0.0046
|
3.74
|
5,000
|
1.1583
|
0.4171
|
2.78
|
10,000
|
6.8977
|
3.3186
|
2.08
|
LU 分解
LU 分解は LAPACK の処理であり、今回は LAPACK ライブラリを変更していません。しかし、LAPACK は BLAS を利用するので、BLAS を高速化すれば、LAPACK も当然高速になります。
Matrix Size
|
OpenBLAS time (s)
|
Apple Accelerate time (s)
|
x Speed-up
|
1,000
|
0.0124
|
0.0115
|
1.08
|
5,000
|
0.4345
|
0.2556
|
1.7
|
10,000
|
3.5928
|
1.6821
|
2.14
|
固有値
このことについて M1 を持っている同僚と議論しましたが、彼の環境では遅延は見られず、eig に Apple Accelerate を使用する方が常に速い。これは M2 固有の問題であると考えられるので、何が起こっているのかをより詳しく調査する予定です。
Matrix Size
|
OpenBLAS time (s)
|
Apple Accelerate time (s)
|
x Speed-up
|
1,000
|
0.4245
|
0.2407
|
1.76
|
5,000
|
22.8654
|
24.74
|
0.92
|
10,000
|
145.4076
|
201.57
|
0.72
|
テスト環境の詳細
今回電源に接続された状態の M2 ベースの MacBook Pro を使用しました。File Exchangeで入手可能な cpuinfo コマンドの出力は以下の通りです。
Comments
To leave a comment, please click here to sign in to your MathWorks Account or create a new one.