Ideal Reality

興味の赴くままに

IntelとApple SiliconのMacbook Airを比較してみた

Apple M1搭載のMacbook Air買ったものが届いたので、早速ベンチマークをとって手元のIntel Core i5搭載の2020年モデルMacbook Airと比較していきましょう。

Contents
スポンサーリンク

スペック

Apple Silicon Macbook AirIntel Macbook Air
CPUApple M1
8 core CPU + 7 core GPU
Core i5-1030NG7
4 core 8 threads
RAM16GB LPDDR4X 4266MHz16GB LPDDR4X 3733MHz
SSD256GB (thru PCIeGen4)2556GB (thru PCIeGen3x4 8GT/s)

両方とも下位モデルをカスタマイズしたもの。Intel Macbook Airはi3をi5にして、RAMを16GBにカスタマイズ。Apple SiliconのMacbook AirはRAMのみ16GBにカスタマイズしました。

Cinebench R23

Apple M1RosettaIntel
Multi Core6785 pts4301 pts2454 pts
Single Core1489 pts977 pts930 pts

Apple M1がすごい速い。僕のメイン機であるi9搭載iMacが10221なのでそれには及ばないですけど、ファンレスのモバイル機ですよこれ。 Cinebench動かしている間も筐体がほんのり暖かくなる程度で、ファンレスなのでもちろんうるさくないです。

あと、Rosetta 2がかなり健闘してます。というかソフトウェアでリアルタイムバイナリ変換してるのに、シングルスレッド性能はIntel CPUと同等、マルチになるとIntel CPUを上回っちゃってます。これ、普段使ってるソフトがApple M1に対応してなくても全然移行しちゃっていいんじゃ...

スポンサーリンク

SSD

AmorphousDiskMarkで測定しました。どちらともFileVaultがオンの状態です。

IntelのMacbook AirはPCIeGen3x4だったのが、Apple M1ではPCIeGen4x4になり、スループットが倍になりました。だからというわけじゃないですが、SSDの速度も倍近くなってます。ただ、ランダムライトが遅くて気になる。NANDコントローラーのキャッシュ容量とか少ないかもしれないですが、詳細はわかりません。

RAM

以下のコマンドでRamDiskを作成し、その速度をAmorphousDiskMarkで測定しました。

$ sudo hdiutil attach -nomount ram://4096000
/dev/disk3
$ diskutil apfs create /dev/disk3 ramdisk

は?えっメモリってSiPにのっけただけでこんなに速くなるの?ここ曰く、RAMはLPDDR4X-4266で、Intelで使われてたLPDDR4X-3733とそこまで変わらないはずなので、メモリアクセス方法が改善されたってことみたい。

ランダムアクセスが遅いのはファイルシステムがボトルネックかな?こればっかりは実際にC言語でアクセス速度を確認したほうが良かった気がする。

スポンサーリンク

ブラウザ

Safari 14.0.1とChrome 87.0.4280.67、両方ともネイティブ環境で実験

Octane 2.0

Javascriptの実行速度を測るやつ。Google曰く、これだけがブラウザの快適さを表すわけじゃないって話だけど、CPUの性能を見るなら良さげ

Apple M1Intel
Safari6280039094
Chrome6425044532

Apple M1の方が1.5倍ほどいいスコア出てますね。一般的なjavascriptの実行はそれなりに速くなりそうです。単純なjavascriptの実行速度はSafariよりChromeの方が速いみたいですね

Speedometer

色々なフロントエンドライブラリを用いてDOM操作した際の反応速度を見るベンチマークです。Javascriptの実行速度も関わってきますが、それ以上にDOMの構築や変更を行う速度が影響するテストです。なので、ページの表示速度とかはこっちのスコアの方が参考になるはず。

Apple M1Intel
Safari221114
Chrome18871

おお、今度はSafariが圧勝。そしてやっぱりM1は速い。この感じだと、ネットサーフィンするだけでもM1かなり強そう。

AES暗号

以下のコマンドで、AES暗号化を1秒間にどれだけ出来るか測定してみます。ちなみに、-evpを外すとIntelではAES-NIがオフになるのですが、ARMv8だとAESアクセラレータをオフに出来なかった(opensslのリビルドが必要で面倒だった)ので、どちらともハードウェア支援の効いた状態での勝負です。

$ openssl speed -evp aes-256-cbc
Block Size16 bytes64 bytes256 bytes1024 bytes8192 bytes
Apple M1227237.57kB/s230424.21kB/s235776.87kB/s238902.03kB/s238949.32kB/s
Rosetta637390.87kB/s603587.66kB/s725078.97kB/s729077.22kB/s731510.19kB/s
Intel1087767.54kB/s1196800.87kB/s1224105.67kB/s1195929.24kB/s1223411.45kB/s
$ openssl speed -evp aes-256-cbc -multi 8
Block Size16 bytes64 bytes256 bytes1024 bytes8192 bytes
Apple M11253712.79kB/s1346698.23kB/s1326250.09kB/s1394681.05kB/s1388761.85kB/s
Rosetta3468724.59kB/s4284917.84kB/s4009748.47kB/s4059098.41kB/s4129145.58kB/s
Intel5032489.06kB/s7292463.38kB/s7223941.77kB/s7179903.67kB/s7067247.01kB/s

ちょっと待ってApple Siliconネイティブが遅すぎる。Rosettaに負けるってのはどういうことだよ・・・

AESアクセラレータがそもそも遅いってこと?LibreSSLの最適化が出来てないってのはあり得る話だけど、これだけ見るとIntelの圧勝だね。

どうしてこういう結果になるのか、僕には分からないので、分かる人いたら教えてください。

スポンサーリンク

numpy

numpyの速度が気になるって人がいたので、回してみました。

Accelerate.framework

まずはmacOSにプリインストールされてるpython2.7にて実験。こちらで使えるnumpyではblasにAppleが開発したAccelerate frameworkが利用されています。なので、そのままApple SiliconでもSIMD演算はできるはず。

とりあえず以下のサンプルコードを用いて4096x4096の行列積を計算してみました。

Benchmark numpy with matrix multiplication

Benchmark numpy with matrix multiplication. GitHub Gist: instantly share code, notes, and snippets.

Apple M1RosettaIntel
1.11s1.69s1.11s

実行時間変わらないですね・・・。ただ、Accelerate frameworkを使う限りAVX命令に対応してないRosettaでもよしなに変換してSIMD演算してくれるみたいで、そこまで実行速度は遅くありませんでした。参考

ちなみに、pipで入るnumpyはAccelerate.frameworkを使ってるみたいなので、pipでnumpyをインストールすればpython3でも同様の結果になるはずです。

OpenBLAS

pipを使わず、Homebrewでnumpyをインストールすると、OpenBLASが利用されます。OpenBLASはARMのNEON使ってくれるはずと思ってたんですけど、どうやらまだApple Siliconに対応してないみたいでビルドできなかったので、Rosettaのみの実行結果です。まあ、まだ現状HomebrewがApple Siliconに対応してないので、Python3欲しかったらXcode Command Line Toolsにあるやつを使えって話になるんですけど。

RosettaIntel
1.49s1.52s

え、ちょっと待って、なんでAVX命令使えてるはずのIntelネイティブの方が遅いの?

macOSのOpenBLASがあまり最適化されていないか、Apple SiliconがRosetta経由した状態でSIMD演算なんか使わずともAVXよりも速く行列を計算できるのか・・・ワカンナイダレカオシエテ

ただ、同じスクリプトをiMacで動かすと、i9-9900Kは0.43sで処理するんですよ。そうなると機械学習の実験用途としてはあまり期待でき無さそうですね・・・

Create ML

Appleが作った機械学習フレームワーク。誰でも画像を放り込むだけで機械学習モデルを作れるという、中身の全くわからないやつです。Siriとかは似たような実装を使ってるんじゃないでしょうか。

とりあえず、こいつにCIFAR-10の画像50000枚をイテレーション数25で学習させる...のはめっちゃ時間かかりそうだったので、binary versionのdata_batch_1.binにある10000枚をイテレーション数5でトレーニングさせてみました。実行時間が知りたいだけだから、完成するモデルの精度なんてどうでもいいしね。

ちなみに、Create MLがトレーニングにかかった時間をログに出力してくれなかったので、手元のストップウォッチで時間を測定しました。

Apple M1Intel
8分22秒23分16秒

Apple M1のNeural Engineは伊達じゃないって感じでしょうか。それ以上に、Intelマシンが4000枚処理したあたりからファンがフル回転して、明らかに速度が落ちてたのが印象的でした。Macbook Airの冷却機構がクソなため、明らかにサーマルスロットリング起こしてますよね。それに対して、M1機はファンレスでさっさと処理を終わらせてたので、違うなって感じました。

スポンサーリンク

とりあえず感じたこと

いくつかテストしてみた限り、Apple Silicon搭載機の方が遅い処理は一部あるものの、概ねIntelよりも高い性能を叩き出せてる感じです。AVXやAES-NIなどCPUの拡張命令を使うような処理はIntelに分があるって感じでしょうか。まあCISCの設計思想的には当たり前な感じ。ただ、ARMv8も一部CISC的な拡張命令を持ってたりするので、それもソフトウェアの最適化が進めば時間が解決してくれる程度な気もします。

スポンサーリンク

コメント

投稿されたコメントはありません

名前

メールアドレス(任意)

コメント

関連する投稿

QEMUにaarch64版のAlpine Linuxをインストールする

Raspberry PiでKVMを動かす