作曲・指導・C言語・Linux

金沢音楽制作

金沢音楽制作では、楽曲・楽譜の制作と、作曲や写譜などレッスンを行っています。


147)M1の性能や如何に

Apple謹製CPUであるM1を搭載したMac miniを買ってみた。レビューというほどではないが、M1について二つ感想を述べたい。一つは動作するアプリケーションに関して。もう一つは性能についてである。

まず、現状M1ではサードパーティ製のアプリケーションは殆ど動かないと思ってよさそうだ。DAWで言えば、Cubaseすらインストールできなかったので、実質Logicしか使えないのではないか。他方、ターミナルでは、パッケージ管理ソフトのHomebrewもそのままではインストールできず、アプリケーションの情報にある「Rosettaを使う」にチェックを入れなければならない(Rosettaは、x86命令をエミュレートする)。またbrewからNeovimをインストールできなかったのが辛い。

追記(2021-03-11):brewは、M1ネイティブで動作し、Neovimもインストール可能になった。

さて、気になるのはその性能である。M1登場と共に、その性能を称賛する声が多くあがったがどうだろうか。ここでは、簡単な自作のベンチマークを使って処理速度を測定する。10億回加算するだけのシンプルなプログラム10個を並列処理させたものだ。このベンチマークはレンダリングには不関与で、加算という単純すぎる計算速度しか分からないものなので注意が必要だ。次にコードを載せておく。

/* bench.c */
#include <stdio.h>

int main(void)
{
  int i;

  for (i = 0; i < 1000000000; i++) {
  }

  printf("%d\n", i);

  return 0;
}

シェルで並列処理をさせる。コマンドの最後に&を書いてバックグラウンド実行させるだけだ。UNIXシステムコールのfork()がうまくやってくれる(はず)。

#!/bin/bash
# bench.sh

fn_main() {
  for i in {01..10}; do
    echo "$i $(./bench)" &
  done
  wait
}

time fn_main

処理時間は、timeコマンドで測定される。timeコマンドの見方は次の通りである。realは、プログラムが始まった終わるまでの時間。userは、プログラム本体の処理時間。sysは、プログラム以外のOSが行った処理の時間である。並列処理をしたので、realよりもuserの方が長くなっている。

$ ./bench.sh
02 1000000000
03 1000000000
01 1000000000
08 1000000000
04 1000000000
07 1000000000
05 1000000000
09 1000000000
10 1000000000
06 1000000000

real    0m7.338s
user    0m28.912s
sys     0m0.059s

ぼくが所有する次の四つのmacを比較してみた。MacBook Air(2015)、MacBook Air(2020)、Mac mini(2020)、iMac(2020)という不平等なもので、結果は以下の通りである。

# MacBook Air(2015, i7-5650U 2.2GHz, DDR3 8G)
real    0m7.369s
user    0m28.882s
sys     0m0.055s
# MacBook Air(2020, i7-1060NG7 1.2GHz, LPDDR4X 16G)
real    0m3.590s
user    0m25.573s
sys     0m0.074s
# Mac mini(2020, Apple M1, UMA 16G)
real    0m3.776s
user    0m26.714s
sys     0m0.068s
# Mac mini(2020, Apple M1, UMA 16G)
# Using Rosetta
real    0m3.623s
user    0m27.681s
sys     0m0.181s
# iMac(2020, i9-10910 3.6GHz, DDR4 64G)
real    0m1.572s
user    0m11.882s
sys     0m0.029s

んー、結果はi9が圧勝で、M1思ったほど大したことないじゃないの、と思った人は数字に騙されている(かも)。実はここに書かれていない情報も多い。前述したとおり、単純な計算を計測したものであるが、それ以外のハードウェアの情報も必要だ。まず、Macbook AirのCore i7は、名前こそi7であるが、2コアのTDP15Wというモバイル向けCPUである。また、iMacのCore i9は10コアのTDP95Wという非常にパワフルなものである。そして、M1は、詳細こそ公開されていないが、やはりTDPが15W程度だと想定されるが、MacbookとMac miniでは違うかもしれない。

つまり、単純なスペックパワーは、intelマシンの方が上であるが、消費電力や価格(Mac miniは10万弱、iMacは55万)を考えると、M1の方が費用を含めた全体的なバランスがよい、といえるだろう。しかし、いわれているほど圧倒的な差を感じなかったのも事実である(レンダリング処理はどうだろうか)。そして、従来のアプリケーションの大半が使えないという、デメリットはかなり目立つが、それは時間の問題か。願わくば、Macbook Air(2020)のintelとM1で比較したいところである。

2020-12-15