◆IntelBurnTest V2.54 & Intel MKL Benchmarks Suite 2019.6.004(グラフ62・63)

AgentGOD
http://www.xgamingstudio.com
Intel
https://software.intel.com/en-us/articles/intel-mkl-benchmarks-suite

さて、ここからのテストは今回追加した、ワークステーション向けのベンチマークである。こちらでは想定メモリを64GBとしているので、Ryzen 9 3900X/3950Xのスコアは無しである。

まずは算術演算性能ということでLINPACKを行おうと思ったのだが、Intel MKL(Math Kernel Library)はAMDのCPU上では動作しない。そこでちょっと悩んだのだが、今回はIntelBurnTestを利用した。

ちなみに上に示したLinkはReadmeに記載されているものだが、既にこのサイトそのものが存在しない。ただ多数のダウンロードサイトに収録されているので、"IntelBurnTest 2.54"を検索すれば入手可能である(筆者はTechPowerUpから入手した)。

IntelBurnTestのオリジナルはIntel MKL(Math Kernel Library)で提供されるLINPACKを利用しているが、なにしろバージョンが古い(ReadMeによれば2012年にリリースされている)から、最新の拡張命令はサポートされていない。実際Compatibilityを見ると、一番新しいコアでもCore i7-3610QM(IvyBridge)であり、しかももっと古いPhenom IIだのPentium IIIだのまで記載されているあたり、恐らくはSSEまでしか拡張命令をサポートしていないと思われる(というよりも、そういう古いLINPACKをベースに構築したと思われる)。

さて使い方であるが、割と単純である。立ち上げるとこんな画面(Photo11)になる。設定箇所は"Times to run"(繰り返し回数)と"Stress Level"(利用メモリ量)の2つしかない。Stress LevelはPhoto12に示すように4段階+Customがある。

  • Photo11: "Output results to results.log"にチェックを入れてファイル出力してもいいのだが、結果はまとめてCopy&Pasteできるので、筆者は使わなった。

  • Photo12: Customを選ぶと、横の入力欄で具体的なメモリ利用量を指定できる。

ここで

Standard :1GB
High :2GB
Very High:4GB
Maximum :利用可能な全メモリ

となっている。LINPACKの場合、利用可能メモリ量が多ければ多いほど性能が上がりやすい(勿論上限はある)。

  • グラフ62

ということでグラフ62がその結果である。ピーク性能はMaximumの場合がほぼ近いと思うが、

Threadripper 2990WX > Core i9-10980XE > Threadripper 3960X > Threadripper 3970X

という構図は明白である。Core i9-10980XEも、AVX512をフルに使わないと、あまりピーク性能は高くないというあたりか。

  • グラフ63

ではAVX512をフルに使うとどうか? ということで、こちらはCore i9-10980XE単独の結果であるがIntel MKL Benchmarkを実施した結果がグラフ63である。ピークだと1168.73GFlopsとなっており、ほぼ5倍ほどの性能アップが可能になっている。では同じ様にRyzenもきちんと動かせばグラフ62の5倍の性能が出るか? といえばまず無理で、そもそもAVX512を実装していないから、ここまでの性能向上は見込めないだろう。あくまでもグラフ62は、SSEを利用した場合の性能比較、と考えてほしい。

◆MATLAB R2019b(グラフ64・65)

MathWorks
https://jp.mathworks.com/

お次はMathWorksのMATLABを利用したベンチマークである。MATLAB自体は別にベンチマーク機能は無いというか、単なる数値解析ソフトウェアであるが、これを利用したベンチマーク用のワークロードファイルがあり、今回はこれを利用した。

さてMATLAB自体は有償であるが、30日間利用可能な無料評価版(機能は有料版と同じ)が提供されており、これを入手して実行している。問題のワークロードファイルであるが、これはCore i9-10980XEの評価用にIntelから提供されたものである。中身は

Sparse:Solving a symmetric sparse linear system(疎行列の演算)
FFT:Fast Fourier Transform of a vector(FFT)
LU:LU Matrix Factorization(LU分解)
Cholesky:Cholesky factorization(コレスキー分解)
QR:QR Factorization(QR分解)
Inverse:Matrix inverse(逆行列)
Matrix Multiplication:Matrix Multiplication(行列乗算)
SVD:Singular Value Decomposition(特異値分解)
Pseudo Inverse:Moore-Penrose pseudoinverse(ムーア-ペンローズの擬似逆行列)

という9種類の科学技術計算を、行列のサイズを2500/5000/7500/10000の4つでそれぞれ実行し、その際の所要時間を測定して示してくれるというものである。

Intel製、ということでIntelに有利なコードが入っていたりするのではないか? という疑念は当然あると思うが、ワークロードファイルを見てみると、実際にはこの9種類の演算はMatlabの内部関数を呼んで処理しているだけで、特にIntelに有利とかそういう種類のものでは無いと判断したため、今回評価に利用してみた。ちなみに結果はcsvファイルの形で出力される。

  • グラフ64

前置きが長くなったが、グラフ64が素の結果である。テストによって所要時間の桁が大分違うのでちょっと判りにくいかもしれないが、このグラフのみ「短いほど高速」となる。全般的にRyzen Threadripper 2990WXの所要時間が長めなのが判るかと思うが、今一つ性能差は判りにくい。

  • グラフ65

そこで、一番遅いRyzen Threadripper 2990WXの所要時間を基準に相対性能を示したのがグラフ65である。御覧の通り、Core i9-10980XEが非常に高い性能を示している。ただ、一部のMATLAB内部関数がAVX512をサポートしているとはいえ、ここまで性能差が出るか? という疑問は当然ある。

実はMATLABは内部的にIntel MKLを利用しており、なのでRyzen ThreadripperではMKLの恩恵に預かれない、という事情がある。AVX512を有効に利用するためにMKLを利用するのはある意味当然だが、これが逆にAMDに不利に働いているという訳だ。実は機材を返却したあとでこのあたりに気が付いたのだが、同様の状況にExtremeTechもぶつかっており、しかも彼らは解決策を見出した。結果から言えばMATLABを実行する前に環境変数で

MKL_DEBUG_CPU_TYPE=5

を追加しておくと、Threadripperでの性能が大幅に上がる(ExtremeTechでのテストでは、32~37%の性能改善が図られたそうだ)。ExtremeTechでの結果はこちらになるが、モノによって効果はまちまち(Sparseは3倍以上高速化されるが、FFTは変わらない、など)であるが、結果から言えばもう少しThreadripperは互角に勝負できそうな雰囲気である(まぁこのあたりの事情を理解しているからIntelはMATLABをテスト項目に追加したのかもしれない)。