MATLABは、エンジニアリング会社、大学、およびその他の研究機関で使用されている一般的な数学計算環境です。
その操作のいくつかは、Intel MKL(Math Kernel Library)を活用するように作成できます。
これは、AMD Ryzenプロセッサー向けに最適化されておらず、悪名高いほど低速です。
RedditユーザーのNedflanders1976は、AVX2などの高度な命令セットを使用するようにMATLABに強制することにより、RyzenおよびRyzen Threadripperプロセッサーで20〜300%のパフォーマンスを復元する方法を考案しました。
デフォルトでは、MKLはプロセッサのベンダーID文字列を照会し、「GenuineIntel ...」以外の何かを検出した場合、SSEにフォールバックします。
IA SSE4、AVX、およびAVX2が完全に実装されている「AuthenticAMD」Ryzenプロセッサーにパフォーマンス上の重大なデメリットをもたらします。
この調整は、AMD Ryzenユーザーが手動で適用することを意図しており、CPU Vendor IDクエリの結果に関係なく、MKLにAVX2を強制的に使用させます。 微調整は、強力であるのと同じくらい簡単です。
引数のセットを持つ単純な4行のWindowsバッチファイルは、AVX2モードでMKLを起動します。
システム環境変数を作成することにより、調整を「永続的」にすることもできます。
環境変数は、バッチファイルによって生成されたインスタンスだけでなく、MATLABのすべてのインスタンスに適用されます。
Nedflanders1976は、AVX2のパフォーマンスへの影響を強調するベンチマークスクリプトも投稿しましたが、独自のスクリプトを使用して結果を投稿できます。
※ クリックすると別Window・タブで拡大します
コメントの中から有用なものをピックアップして載せます。
ユーザー:ncrs
これ今に始まったことではありません。 Intelは長い間アンフェアなことをしてきました。
MKLは、多くのPythonを高速化するために使用でき、Microsoft R Openのデフォルトの数学ライブラリです。 基本的に、アカデミックな使用はそれから多くの利益を得ます。 この「修正」は、これらすべてにも機能します。
ユーザー:Xaled
微調整? 実際、これはIntelのチートを回避する作業です。 İnyleとMATLABの開発者はどちらもこの点で罰せられるべきです
ユーザー:Vya Domus
>İnyleとMATLABの開発者はどちらもこの点で罰せられるべきです
幸運なことに、Intelのコンパイラトリックに関するFTCの和解は、おそらく私がこれまで読んだ中で最も愚かなことの1つです。 基本的に、インテルは、コンパイラーがエンドユーザーではなく、それを使用する開発者のみに偏っていることを開示するように強制します。 言い換えれば、それは完全に価値がなく、Intelはユーザーが望むパフォーマンスを意図的に損なうソフトウェアを自由に配布することができます。
ユーザー:Vya Domus
>遅かれ早かれ、この主題は明らかになります。
しかし、それが問題であり、注目されました。
「IntelコンピューターコンパイラーがIntelチップと非Intelチップを区別することをソフトウェア開発者に開示し、また、Intel以外のチップのすべての機能を登録していない場合があります。また、Intelは、Intel以外のコンパイラを使用してソフトウェアを再コンパイルするすべてのソフトウェアベンダーに弁償する必要があります。 」
別名、「続行」。
私はそれをお仕置きとさえ呼びません、それは多すぎるでしょう。
これは十分に文書化されており、この時点で何十年も続いているので、ええ、これを変更するものは何もないと言います。
技術的にはこれはすでに解決されており、誰もそれに戻るつもりはありません。
ソース:techpowerup - MATLAB MKL Codepath Tweak Boosts AMD Ryzen MKL Performance Significantly
解説:
IntelとAMDのCPU、性能が同程度のモデル同士でなぜ差がつくのか?
上の問いの端的な答えとなる話だったのでコメントも含めて翻訳してみました。
Intel製コンパイラでコンパイルしたプログラムはIntel以外のCPUで実行すると、拡張命令を意図的に実行しない遅いプログラムとなります。
記事中で語られているバッチファイルはこの問題を回避するたためのものです。
MKLは数学計算のライブラリのようですが、「自分は使わない」と思っていてもライブラリの場合、思ってもみないところで使われていたりします。
この記事のコメントでは
MKLは、多くのPythonを高速化するために使用でき、Microsoft R Openのデフォルトの数学ライブラリです。
とあります。
ご自分で使っているソフトでMKLが使われているかいないかを調べてみて、もし使っている場合はこちらの修正を実行してみると良いでしょう。
多くのユーザーは「フェアでない」「Intelのチート」「コンパイラトリック」などと呼んで激しく非難していますが、Intelは古くはK7のころからこういうことをやっています。
私的には当たり前ですが、使っているユーザーとしては気分はよくないでしょうね。
AMDを選択される方はこういうことも念頭においてください。
初心者の方は知らなくても仕方ないですが、自作をされるような方は当然知っておくべきです。
AMDが自力で何とかするのが一番良いのですが、ソフトウェアに対するサポートまでは手が回らないというのはAMDのよく知られている欠点の一つです。
余談ですが、このような事情があるので、独自の拡張命令を実装するよりも、マルチコア化に舵を切った方がユーザーにアピールできるので、そういう意味でもRyzenの設計は非常に優れていると私は思います。
Ryzen 9000シリーズ
Ryzen 7000X3Dシリーズ
Ryzen 8000GシリーズAPU(GPU内蔵)
Ryzen 5000/4000シリーズ