Top  上へ  目次



Ver.4系のβ版(?)Ver.4.30



 Ver.4.30の特徴は、一覧表示性能の向上です。
 他に大したことやってませんので、その背景をつらつら書いてみようと思います。

 ここのところ、開発環境の不具合に振り回されて痛い目にけっこうあってます。
 もうね、古いバージョンで更新やめちゃったほうがいいんじゃないか?とか思ったりもします。


 ただですね、こちらの記事で取り上げてるベンチマークですが、今のテスト環境で計測すると
詳細1,811ms
一覧1,878ms
アイコン1,810ms
 これはVer.2系、つまりVisual Studio 2010を使用しています。

 ※リンク先の記事から、グラフの縮尺をあわせてます。
 ※ベンチマークの比較用の設定なので、初期値ならもっと速い結果が出ます。


 んで、Ver.3系、つまりVisual Studio 2012 Update 1を用いたこちらの記事だと
詳細一覧1,474ms
簡易詳細1,469ms
一覧1,450ms
詳細1,479ms
アイコン1,458ms
 かなり性能が向上していますね。
 これ並列化の強化によってもたらされた改善です。



 Ver.4.0系はサイズシュリンクで微妙に性能上がってますが大したこと無いので割愛します。
 そして最適化しやすいようにデータ構造に手が入ってます。
 んで最適化した結果がVer.4.30なわけです。
詳細一覧1,126ms
簡易詳細1,134ms
一覧1,173ms
詳細1,163ms
アイコン1,155ms
並べて表示1,159ms
コンテンツ1,137ms

 これOpenMPを用いた並列化を、自動ベクトル化が適用されやすい形に変えた事によってもたらされた改善です。
 アルゴリズム的に言えば、オーソドックスな改良型クイックソートから、分岐を減らした改良型マージソート(バイトニックソートに近い形)に変えてます。
 詳しい人はアレ?って思うでしょうけど(一般的にクイックソートの方が速い)、ハードウェア機能を上手いこと使うと、逆転することも多々あるわけです。

 で、Ver.2系と比べて約60%ほど向上した計算になるわけで、かなり性能が向上しています。(新型ツリーなどは無関係の話)
 もちろんVer.2.0の時点でも、かなりギリギリのチューニングをしているので、当時のアルゴリズムがクソだったんじゃね?という訳じゃないですよ。
 この辺りまで来ると、アルゴリズムを変更 & ソフトウェアの工夫だけで改善するレベルではありません。
 単にハードウェアを上手く使う、コンパイラの新しい機能を取り入れた結果に過ぎません。

 比較例をあげるとすれば、テスト環境はLynnfield→IvyBridgeと2世代上がっており、CPUクロックが3.0GHz→3.4GHzなわけですから・・・えーと、CPUの世代性能アップ分は同一クロックで約8%ですか。
 Turbo Boostの分を引くと消えちゃいそうですな・・・

 それと比べて考えれば60%の性能アップというのは、異様に大きな数字です。
 CPUとコンパイラの進化速度と、開発者にとって重要なライブラリの進化速度というものが、いかに離れてるかってぇ事なんですよね。
 なかなか、誰にでも使えるレベルまで落ちて来てくれません。
 ですからコンパイラのバージョンアップも馬鹿に出来ないレベルに化ける場合があると認識してもらえると思います。


 まぁ、Ver.2.0の現時点でも業界最速クラスのくせに、速く!もっと速く!って、どこのスピード競技かよ?と思わないでもないですが、新しい機能の中には使えるネタがまだまだ残ってます。
 が、やっぱ新しいものにはバグあるよねーみたいなトラブルはつきもの・・・(^^;

 と言うわけで、速度のメリット+俺モチベーションと、トラブルのデメリットを天秤に掛けるわけですよ。
 自虐的な表現を使うと、自己満足のための速度追及という自慰行為と、ユーザーに対する高い不具合発生確率の押し付けという言い方をしても良いかもしれません。

 MS社がもっとしっかりしてくれると良いんですけど、新しい物も良いことばかりじゃないんで悩ましいです。
 トラブルがあっても事例が少なくて時間がかかりますが、なるべく何とかしたいと思いますのでご連絡&ご協力ください。



 一応誤解ないように補足しておきますけど、単にコンパイラのバージョン変えただけで性能が上がりません。
 新しいバージョンであるほど、使える手札(新技術)が増えるだけです。