IntelとApple SiliconのMacbook Airを比較してみた
Apple M1搭載のMacbook Air買ったものが届いたので、早速ベンチマークをとって手元のIntel Core i5搭載の2020年モデルMacbook Airと比較していきましょう。
スペック
Apple Silicon Macbook Air | Intel Macbook Air | |
---|---|---|
CPU | Apple M1 8 core CPU + 7 core GPU | Core i5-1030NG7 4 core 8 threads |
RAM | 16GB LPDDR4X 4266MHz | 16GB LPDDR4X 3733MHz |
SSD | 256GB (thru PCIeGen4) | 2556GB (thru PCIeGen3x4 8GT/s) |
両方とも下位モデルをカスタマイズしたもの。Intel Macbook Airはi3をi5にして、RAMを16GBにカスタマイズ。Apple SiliconのMacbook AirはRAMのみ16GBにカスタマイズしました。
Cinebench R23
Apple M1 | Rosetta | Intel | |
---|---|---|---|
Multi Core | 6785 pts | 4301 pts | 2454 pts |
Single Core | 1489 pts | 977 pts | 930 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 M1 | Intel | |
---|---|---|
Safari | 62800 | 39094 |
Chrome | 64250 | 44532 |
Apple M1の方が1.5倍ほどいいスコア出てますね。一般的なjavascriptの実行はそれなりに速くなりそうです。単純なjavascriptの実行速度はSafariよりChromeの方が速いみたいですね
Speedometer
色々なフロントエンドライブラリを用いてDOM操作した際の反応速度を見るベンチマークです。Javascriptの実行速度も関わってきますが、それ以上にDOMの構築や変更を行う速度が影響するテストです。なので、ページの表示速度とかはこっちのスコアの方が参考になるはず。
Apple M1 | Intel | |
---|---|---|
Safari | 221 | 114 |
Chrome | 188 | 71 |
おお、今度はSafariが圧勝。そしてやっぱりM1は速い。この感じだと、ネットサーフィンするだけでもM1かなり強そう。
AES暗号
以下のコマンドで、AES暗号化を1秒間にどれだけ出来るか測定してみます。ちなみに、-evp
を外すとIntelではAES-NIがオフになるのですが、ARMv8だとAESアクセラレータをオフに出来なかった(opensslのリビルドが必要で面倒だった)ので、どちらともハードウェア支援の効いた状態での勝負です。
$ openssl speed -evp aes-256-cbc
Block Size | 16 bytes | 64 bytes | 256 bytes | 1024 bytes | 8192 bytes |
---|---|---|---|---|---|
Apple M1 | 227237.57kB/s | 230424.21kB/s | 235776.87kB/s | 238902.03kB/s | 238949.32kB/s |
Rosetta | 637390.87kB/s | 603587.66kB/s | 725078.97kB/s | 729077.22kB/s | 731510.19kB/s |
Intel | 1087767.54kB/s | 1196800.87kB/s | 1224105.67kB/s | 1195929.24kB/s | 1223411.45kB/s |
$ openssl speed -evp aes-256-cbc -multi 8
Block Size | 16 bytes | 64 bytes | 256 bytes | 1024 bytes | 8192 bytes |
---|---|---|---|---|---|
Apple M1 | 1253712.79kB/s | 1346698.23kB/s | 1326250.09kB/s | 1394681.05kB/s | 1388761.85kB/s |
Rosetta | 3468724.59kB/s | 4284917.84kB/s | 4009748.47kB/s | 4059098.41kB/s | 4129145.58kB/s |
Intel | 5032489.06kB/s | 7292463.38kB/s | 7223941.77kB/s | 7179903.67kB/s | 7067247.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. GitHub Gist: instantly share code, notes, and snippets.
Apple M1 | Rosetta | Intel |
---|---|---|
1.11s | 1.69s | 1.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にあるやつを使えって話になるんですけど。
Rosetta | Intel |
---|---|
1.49s | 1.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 M1 | Intel |
---|---|
8分22秒 | 23分16秒 |
Apple M1のNeural Engineは伊達じゃないって感じでしょうか。それ以上に、Intelマシンが4000枚処理したあたりからファンがフル回転して、明らかに速度が落ちてたのが印象的でした。Macbook Airの冷却機構がクソなため、明らかにサーマルスロットリング起こしてますよね。それに対して、M1機はファンレスでさっさと処理を終わらせてたので、違うなって感じました。
とりあえず感じたこと
いくつかテストしてみた限り、Apple Silicon搭載機の方が遅い処理は一部あるものの、概ねIntelよりも高い性能を叩き出せてる感じです。AVXやAES-NIなどCPUの拡張命令を使うような処理はIntelに分があるって感じでしょうか。まあCISCの設計思想的には当たり前な感じ。ただ、ARMv8も一部CISC的な拡張命令を持ってたりするので、それもソフトウェアの最適化が進めば時間が解決してくれる程度な気もします。
コメント