AppleM1でC / C ++をコンパイルする





M1の印象的なベンチマークに興味をそそられ、最新のMac Miniを取り出して、C / C ++でのコンパイル速度を測定しました。



ローカルbuild2(パッケージリポジトリなし)測定します。これには、主にC ++コード(611変換ユニット)といくつかのCブロック(29)およびそれらの間のリンク(19)が含まれます。このベンチマークはC ++コンパイラのみを必要とし、Phoronixテストスイートに含まれているため、多数のプロセッサと比較できます。



Phoronixベンチマークは現在build20.12.0を使用しています。0.13.0(現在のリリース)があります。ここでは、ビルドが約10%遅くなっています。


Mac OSをセットアップし、XCode 12.2のコマンドラインツールをインストールすると、必要なものがすべて揃います。



$ clang++ --version
Apple clang version 12.0.0 (clang-1200.0.32.27)
Target: arm64-apple-darwin20.1.0
      
      





_LIBCPP_VERSION



タイトル__version



ファイルlibc++



から 判断すると、このバージョンのAppleのClang Clangバニラは、開発プロセス10.0.0のどこかから分岐しました。



また、AppleClangトリプレットのプロセッサの名前が標準のものとは異なることに気付いたかもしれませんaarch64



実際にconfig.guess



は次のように表示されます。



$ ./config.guess
aarch64-apple-darwin20.1.0
      
      





同じものに2つの名前を使用しないようにするために、build2はで正規化さarm64



れているaarch64



ためbuildfiles



、常にaarch64がで表示されます。


のハードウェアスレッドの数を確認しましょうsysctl







$ sysctl -n hw.ncpu
8
      
      





ここには8つのスレッドがあり、これらは4つの生産的なコアと4つのエネルギー効率の高いコアです。最初の実行では、すべてのコアを使用します。明らかに、これは最良の結果をもたらします。



$ time sh ./build2-install-0.13.0.sh --local --yes ~/install
163s
      
      





build2 0.13.0は、M1より前にリリースされましたが、問題なく動作したことは嬉しい驚きでした。ARMのメモリ順序は弱いため、これはbuild2のマルチスレッド実装とアトミックの多用の追加テストとしても機能しました。


まず、M1を8コアのIntel Xeon E-2288G(基本的にはi9-9900KとECC)上のワークステーションと比較してみましょう。バニラクランでの同じビルドには131秒かかります。これは最良の結果ですが、M1のパフォーマンスは依然として印象的です。特に、コンパイル中にワークステーションが文字通り熱気を吐き出し、飛行機のようにハミングし、M1がほとんど目立たない暖かい空気の流れで静かにざわめくと考えると特にそうです。



シングルスレッドベンチマークは、インクリメンタルビルドのCPUパフォーマンスを評価します。



$ time sh. /build2-install-0.13.0.sh --local --yes-j 1 ~ / install
691s
      
      





E-2288Gコアは826秒かかります。したがって、5GHzXeonコアは実際には3.2GHzM1コアよりも低速です。



もう1つの興味深い結果は、効率的なM1コアのみを使用する4スレッドの実行です。



$ time sh ./build2-install-0.13.0.sh --local --yes -j 4 ~/install
207s
      
      





8コアのテストよりも多少遅くなりますが、使用するメモリは少なくなります。したがって、このオプションは、RAMが不十分なシステムで意味があります(最新のすべてのM1マシンと同様)。



すべての結果の要約は次のとおりです。



CPUコア/スレッド時間
-------------------------
E-2288G 8/16 131s
M1 4 + 4 163s
M1 4 207s
M1 1 691s
E-2288G 1826秒


多くの点で、これがリンゴとオレンジの比較であることは明らかです(ワークステーションとモバイルデバイス、古い設計とプロセス技術と最新など)



。次に、Phoronixベンチマークからいくつかの興味深い結果を追加しましょう。特に、IntelとAMDの最新のワークステーションとモバイルプロセッサの指標を取得することが適切です。これが私の選択です(自分で作成できます。Phoronixの結果に10%を追加することを忘れないでください。また、ほとんどのテストではClangではなくGCCを使用することに注意してください)。



CPUコア/スレッド時間
------------------------------------------
AMD Threadripper 3990X 64/128 56s
AMD Ryzen 5950X 16/32 71s
Intel Xeon E-2288G 8/16 131s
Apple M1 4 + 4 163s
AMD   Ryzen        4900HS   8/16      176s*
Apple                 M1    4         207s
AMD   Ryzen        4700U    8/8       222s
Intel Core         1185G    4/8       281s*
Intel Core         1165G    4/8       295s

* .


残念ながら、最高のモバイルIntel(1185G)およびAMD(4900HS)の結果はまだ入手できず、引用されている数値は時計やその他のベンチマークに基づいて推定されていることに注意してください。



上記の表から、特に電力消費に関しては、AppleM1が印象的なプロセッサであることが簡単にわかります。さらに、これは最初の主流のデスクトップグレードのARMプロセッサです。比較のために、Raspberry Pi 4Bでの同じビルドには1724秒かかりますが、これは10倍以上遅くなります。ここではLinuxまたはWindowsを起動できませんが、それらが適切なパフォーマンスで仮想マシン上で実行されているという証拠がいくつかあります。その結果、ARMベースの連続ビルドパイプラインが標準になる可能性があります。



M1のベンチマークを見て、Appleがこれをどのように行ったか疑問に思わざるを得ません。黒魔術や魔術のいくつかの要素については多くの憶測がありますが、AnandtechのM1に関するこの記事(およびリンクによる別の記事は、私には非常に優れた技術情報のソースのように見えました。ハイライト:



TSMC 5

10 ( 11x5G, 14  E-2288G) 7  AMD/TSMC.



LPDDR4-4266 RAM

Intel AMD .



L1

M1 L1 .



L2

Intel AMD, L2 , L3, M1 L2.





M1には、複数の命令を並列および/または順不同で実行する非常に幅の広いカーネルがあります。ARMの貧弱なメモリ順序と固定サイズの命令コーディングのために、Appleははるかに広いカーネルを作ることができたという推測があります。


Appleがこの設計をより多くのコアに拡張する方法を見るのも興味深いでしょう。



All Articles