開発のために期間限定で手元にiMac Proが来ています。すぐに返却するので、じっくりした評価は行えませんが(評価目的ではないので)、ためしにAppleScriptによる大きめの処理を試してみました。
マシン1:MacBook Pro 2012 Retina Core i7 2.6GHz 4core RAM 8GB
マシン2:iMac Pro 2017 Xeon 3.2GHz 8 core RAM 32GB
(1)700箇所の位置情報から最寄りの駅検索
アーケードゲーム「戦場の絆」が導入されている2015年の時点の約700箇所の日本全国のゲームセンターについて、最寄りの鉄道駅(約8,000箇所)との距離を求め最短のものを最寄駅とし、それぞれ最寄駅までの距離が短い順にソートするという、GUIアプリケーションに依存しない処理です。CoreLocationの機能を用いて距離計算を行います。
もともと90分かかっていたところを隣接都道府県テーブルの導入により10分へ短縮、そしてデータの形式を見直すことで5分程度に処理短縮していたものですが、実験したバージョンでは詳細な分析のために扱う情報を増やしており、マシン1で7分程度かかります。
マシン1:7分13秒
マシン2:4分17秒
CPUの動作クロック1.2倍にもかかわらず演算時間6割ということで、Xeonの性能の高さが見て取れました。扱うデータも割と巨大ですが、メモリ容量の大きさにより良好な結果が得られていることが伺われます。
(2)指定のAppleScript書類のコメント部分のみ除去して返す
245行のAppleScript書類を構文書式設定をもとに解釈し、構文色分け情報をもとにコメント部分のみ除去する処理です。つい最近まで、テストデータに対して十数秒かかっていたのですが、「カラーキャッシュ」という機構により大幅な高速化を遂げてしまったものです。
マシン1:1.55秒
マシン2:1.07秒
こちらも、想定以上の速度を叩き出せています。
(3)指定の文字列の順列組み合わせ計算(Permutations)
{“G”, “C”, “T”, “A”} などの文字列リスト(配列)の順列組み合わせ総当たり計算(Permutations)を行うものです。Cocoaの機能を用いて、メモリ上で大量のデータを処理するため、演算性能以上にメモリアクセス速度や容量(要素数が増えると8GBだとつらいもよう)の制約が少ないことが効いてきそうです。
・8要素時
マシン1:107.27秒
マシン2:64.83秒
これは、素直に速いといえる感じです。
(4)実践的なデータ照合
Adobe Illustratorの書類からピックアップしたテキストフレームのデータと元のCSVデータの比較を行います。単なるテキスト比較とバカにしてはいけません。元CSVデータとの照合を行うために、ゆらぎ吸収用の外部データ(同一視する表記を列挙)の内容を反映して、考えられるありとあらゆるパターンでチェックを行います。
Illustratorからテキスト抽出する際には、グループ化されたアイテムはリストとして取り出し、照合時にこのグループ化されていたデータは順列組み合わせ(Permutations)計算により、元データとの照合を行います(6つのテキストフレームがグループ化されている場合には、6x5x4x3x2x1=720パターンと200項目程度のCSVデータ項目との照合を行うため、(1項目あたり)14万回ぐらい比較を行います。実際のAppleScriptによる処理に近い、たいへん実践的な処理内容です。
マシン1:10.69秒
マシン2:6.25秒
ちなみに、MacBook Pro (13-inch, 2017 Two Thunderbolt 3 Ports RAM 16GB。macOS 10.14.5)だと、10秒強程度かかります。2012年から5年後のマシンがこんなに遅い(速くなっていない)とは思ってもみませんでした(^ー^;;
最近では、照合するデータを文字の集合としてとらえ、どれだけ集合同士が近似しているかとか、照合データを形態素解析してさらに類似している単語に展開し、展開したデータ同士の類似度を計算するといった意味類似度ベース/確率計算ベースの照合も行っています。こうした処理にもCPUパワー、とくにシングルスレッドの処理の速さが必要です。
マシン強化はプログラムの高速化手段のひとつ
高価で高速なマシンを使うというのはひとつの解決策ですが、では実際に高価なマシンを使うとどの程度の速度向上を期待できるのか、というのはこれまで実測したことがありませんでした。iMac Proは(Mac Pro不在の)現時点では最高峰のマシンであり、現時点でこれより高速なMacは存在していません(より高速なCPUは市場に存在しているので、そこが悩ましい。たしかに自分で組みたくなる)。
# 2019年のCore i9 5K iMacはiMac Proよりシングルスレッド性能で見ると上かも
ここにあげた処理は、CPUのシングルスレッドの演算能力に大きく依存するような処理であり、そのままではなかなか性能を上げにくいものでもあります。実際に調べてみると動作クロック比率以上の性能向上を見せており、感心させられました。
ただし、コストパフォーマンスの面からいえば20万円前後のマシンに対して(しかもノート)、50万円以上するデスクトップ機がこの程度ということで、
「高いマシンを買ったからといって価格に見合った演算性能を得られるわけではない」
ということを再確認したにとどまりました(MacBook Pro Retina 2012優秀すぎ。2017年のMacBook Pro 13インチの安い方より高速だし)。より低価格なiMacと異なり、購入後にあとからメモリを増設できないとか(仕様)。2017年に登場して以来アップデートされていないとか。Mac Pro 2019(Cheese Grater)が出てくるまでの「つなぎ」なんでしょう。
もちろん、安定性と快適さ、静粛性はくらべものにならないほどiMac Proが「上」です。外部ディスプレイを3台接続したときにマシン1では放熱ファンが回りまくり、外部冷却ファンを回さないと速度低下するケースも見られるためです(CPUのグリス塗り直しが必要か?)。また、アプリケーションの起動もきわめて高速です。
とくに、1,000行を超えるような巨大なAppleScriptの編集中にはScript Debuggerの応答速度が極端に下がります(カーソル移動に秒単位でかかるとか)。iMac Pro使用時にはこの極端な速度低下を避けられたので、これだけでも効果がありました。
もしも、バッチ処理速度の向上だけを目的として新規マシンの導入を行うのであれば、Mac miniを数台導入して分散処理したほうが得策です。これだと、GUIベースのアプリケーションを操作するAppleScriptのプログラムを、ほぼ何も書き換えずとも良好な結果が得られます。Parallelsなどの仮想環境にゲストOSとしてmacOSをインストールし、これらの環境との間で分散処理してもよいでしょう(こちらはぜんぜん実験していませんけれども)。
また、処理内容がIllustratorやInDesignなどのGUIベースのアプリケーションを用いていない場合には、プログラムを書き換えて並列処理するよう変更してもよいでしょう。
腰をすえてじっくり使う機会があれば、iMac Proのような強力で多コアなデスクトップマシン上で並列処理によりどの程度処理時間を短縮できるのか試してみたいところです。