Top 上へ 目次
Ver.11.2ぐらいの話(続き)
前回で終わろうと思ったんですが、やや大きな改修のわりに更新履歴の記載が1行にしかならないことに気がつきました。
Zipの対象拡張子の拡充を入れても2行です。
いくらなんでも寂しいので、もう少し盛ります。
最近のVer.11.0.7.0で追加した、exe,lnk,ico,cur,sln,ani,scr以外のアイコン画像は1回しか読み込まない設定です。
速度はそこそこ、極端に速度低下しないというのが強み。
正確性はあまり自信がありません。
というわけで、性能を大幅にアップするチューニングしつつ堅牢に・・・と丸ごと組みなおしました。
試作段階ですがファイル1個当たりミリ秒単位のアイコン画像取得が、マイクロ秒単位の世界になります。
F5キーを連打して一覧の更新をすると今まではチラついていましたが、速過ぎて更新の描画が視認できなくなります。
どうも「チラつき」があることで更新されたことを認識するように脳に刷り込まれてたみたいで「あれ?更新してない?」とF5連打することも多々あり、少し慣れが必要かもしれません。
かなり体感速度に差が出てますし、ディスクアクセス量も回数も負荷も下がってます。省エネでエコでハンパねぇっす。
EXCELマクロとか、アイコン画像の取得時にウィルススキャンソフトの走査がないというのが実にすばらしい。
(もちろん開こうとしたらスキャンされます)
速度面に関しては、このオプションのOFFの状態はもう使いたくないんですけど・・・というレベルですね。
次に正確性についてなんですが、対象の拡張子をチョイスした理由は、私の記憶にあるファイルごとにアイコン画像を持っている拡張子を全部並べただけです。
他にも、この拡張子は画像が変わるぞ!とか、この設定がONだとこういうシーンで困る!とかありましたらご連絡ください。
exe・・・いわゆる実行ファイル
lnk・・・リンク、実行ファイルの画像
ico・・・アイコン
cur・・・マウスカーソル
sln・・・Visual Studioのソリューションファイル、xmlの内容に沿ってアイコンが変わる
ani・・・アニメーションカーソル
scr・・・スクリーンセーバー、exeと同じ
可能であれば「デフォルト値をONにしたくてたまらない」を通り過ぎて「設定を削除してOFFにできないようにしたい」というくらいの速度差なので、情報を求めてますです。はい。
※slnと同じようにVisual studioのバージョンセレクタが使用されている拡張子は怪しい気がしますが、今のとこsln以外は変化していない認識です。
あと、OpenMPループスケジュールについての考察です。
簡単に説明すると、for文のループで100回ほど回るとして、何個のスレッドに分割して並列処理をするか?というものです。
5個に分割するなら、20回ループ×5個の並列処理という風に分割するわけです。
単純に言えば5倍の性能アップ!というのが並列処理の本質です。
これをどのようにスレッドに割り振るか?というのを従来は、いわゆる指定なし、つまりAuto(自動)にしていました。
当初はSandyBridge機で他のスケジュールモードも評価検証していましたが大して差が出なくてねぇ、100万ファイルの列挙で誤差と言って良いほどの差しか出ませんでした。
で、このAutoってモードはコンパイラがループスケジュールを決めるものなので、実行環境の差で大きく差が出るカモ・・・。
というわけで動的にスケジューリングするモードで、手元にある環境でSkyLake機とCoffeeLake機で試してみたところ、あらびっくり。
OpenMPを使って並列化しているところに限って、平均して約20%も速度アップしてました。
AVX2使用版だと平均して25%くらい速度アップですかね。
200回ほど計測したベンチマークの感じだと、最速はほぼ同じなのですが、タイムのばらつきが減って速い方へ分布が固まってるため平均が上がっているイメージです。
そういえば、並列処理でのソートを検証したときにスレッドが増えれば増えるほど、クイックソートよりもマージソートの方が速くなる傾向があったんですが、分割した単位のタスクの計算量のバラつきが原因だったのを思い出しました。(クイックソートはピボットの選択次第でスレッド同期のロスが大きくなるため)
とまぁ今更感がアレですが、SandyBridge機って時代遅れなんだと初めて実感しました。(苦笑)
ただトータルで言えば4〜6%ほどの一覧性能の向上にとどまり・・・いつものように100万ファイルの表示時間が2.60秒が2.45秒になったところで体感速度で言えば誤差でしかありません。
大幅な進歩のはずなのですが、体感速度的に納得できるものではないわけで、解せぬ・・・