本の虫

著者:江添亮
GitHub pages: https://ezoeryou.github.io/blog/
Blogger: http://cpplover.blogspot.jp/
メール: boostcpp@gmail.com
Twitter: https://twitter.com/EzoeRyou
GitHub: https://github.com/EzoeRyou

アマゾンの江添のほしい物リストを著者に送るとブログ記事のネタになる

筆者にブログのネタになる品物を直接送りたい場合、住所をメールで質問してください。

macOSのM1とx86-64におけるベンチマーク比較の考察

世間ではAppleの新しい製品に使われるARM64 CPUであるM1の話題でもちきりだ。ただし、日本語を話す記者というのは極めて非科学的かつ無能であり、M1の現物を手にしても、末端のソフトウェアを動かして、体感で早いだの遅いだのと語るだけだ。そういう感想は居酒屋で酒を片手に漏らすべきであって、報道と呼ぶべきシロモノではない。

と思っていたら、Phoronixがやってくれた。M1とi7で動くmacOSでベンチマークをしている。

これを考察すると、M1のMac Miniは、一世代前のi7のMac Miniに比べて、メモリ性能とI/O性能が高く、演算性能は低いようだ。このことを考えると、M1の性能特性としては、動画のエンコードやソフトウェアレイトレーシングをするには不向きだが、その他の作業は遜色ないだろう。

問題は、仮想化とRosettaを組み合わせることができないという点だ。x86-64のユーザースペースのdockerイメージをM1 macOSで実行するには、かなり大掛かりな独自の実装が必要になるだろうし、結局本番環境はGNU/Linux x86-64なので、開発者受けはよくないだろう。ただし、サーバーがARMを採用するのが一般的なれば話はまた変わってくるかもしれない。ただし、その場合もサーバーOSの首位はGNU/Linuxで揺るぎないだろうから、macOSは使いづらく、開発者はGNU/LinuxかWindows WSLを選ぶだろう。ARM64 macOSの上で動く仮想化の上で動くGNU/Linux ARM64という選択肢はあるかもしれない。

Apple M1 ARM Performance With A 2020 Mac Mini Review - Phoronix

M1で動くmacOSでソフトウェアを実行するには、ARM64ネイティブコードを動かす方法と、x86-64バイナリをRosettaという変換レイヤーを通してリアルタイムにARM64に変換して実行する方法がある。すでにある体感による報道では、Rosettaはi7よりも早いという。本当だろうか。早速ベンチマーク結果を見ていこう。

Apple M1 ARM Performance With A 2020 Mac Mini Review - Phoronix

分子動力学シミュレーションのNANDでは一世代前のi7のMac Miniと比べて変換が走っているとは思えないスコアを出す。一世代前のi7を搭載したmac Miniよりスコアが高い。ただしDNAの多重整列をするMAFFTのRosetta経由のスコアは低い。ネイティブのスコアはi7を超える。

WebPによる画像圧縮やLibRawによる画像ポストプロセッシングのスコアはi7とRosettaで遜色がない。

Zstdによる圧縮はなぜかResettaがぶっちぎりで圧倒的スコアを叩き出している。どういうことだろう。Zstdの圧縮処理は軽いので、これは演算能力ではなくメモリ帯域をベンチマークしているのではないだろうか。つまり一世代前のi7 Mac MiniよりM1 Mac Miniのほうがメモリ性能がよいのだ。

Apple M1 ARM Performance With A 2020 Mac Mini Review - Phoronix

Intelによってx86-64用に最適化されているOSRayによるレイトレーシングや画像ノイズ除去ではRosettaは振るわない。他のレイトレーシングソフトウェアのパフォーマンスを見ても、Rosettaはi7を超えているようには見えない。変換レイヤーを経由しているにしては実用的な性能ではある。

SQLiteやgitをみてみると、Rosettaはi7を大きく上回るパフォーマンスを出し、M1ネイティブだと更に素晴らしいパフォーマンスを叩き出す。これはI/O性能に律速される処理だから、I/O性能が一世代前のMac Miniに比べて高いのだろう。

Apple M1 ARM Performance With A 2020 Mac Mini Review - Phoronix

PyBenchやPHPBenchといった割と複合的なベンチマークスコアではM1はi7と遜色ないパフォーマンス、Rosettaは変換するにしてはよくやっているので実用的なパフォーマンス

KvazaarによるH.265の動画エンコードはM1がi7に圧倒的に負けている。純粋な演算性能はi7に劣るようだ。

Apple M1 ARM Performance With A 2020 Mac Mini Review - Phoronix

Java 2D Benchmark、Rosettaが強い。SeleniumをFirefoxで計測、M1が強い。

Apple M1 ARM Performance With A 2020 Mac Mini Review - Phoronix

Basis UniversalはGPU用のテクスチャ圧縮をするソフトウェアだ。このスコアはメモリ帯域に律速されると思われるが、M1が圧倒的に早い。

Botanは暗号処理のライブラリだ。M1によるネイティブ実行はできないが、Rosettaはなかなか速い。7zipやxzではM1が速い。

Fhourstonesはconnect-4というボードゲームの配置情報を計算するベンチマークで、おそらく演算自体は単純でメモリ性能に律速される処理だと思われる。M1が速い

FLACによる音声の可逆圧縮エンコードは、M1ネイティブがRosettaに負けている。FLACの実装がARM64に最適化されていないものと思われる。

Apple M1 ARM Performance With A 2020 Mac Mini Review - Phoronix

GraphicMagickのベンチマークはM1が速い。DBやサーバー環境などを模したベンチマークでもM1やRosettaが優秀な結果を出している。