AVXとAESがOfficeに及ぼす効果次第


 プロセッサ性能だけに着眼してコンピュータ性能を決定づける場合の話です。

 正直、現状のコンピュータは、プロセッサよりもチップセットに依存する部分が大きいです。

 以下は全て自己研究による単なる憶測と主観に基づいて私見を述べているので、信じたいなら信じてください。
 加えて、素人の主観です。

1. コンピュータ性能を決定づける要素

  1. I/O 性能
  2. メモリ容量
  3. プロセッサ性能
1-1. I/O 性能

 簡単に言えば、ディスクです。 次にバス転送速度となります。
 メインボードによりますが、ネットワークのスループットが向上しない原因にバス速度がボトルネックとなっている事があると聞いたことがあります。

 ディスクは、遅いです。 フロッピーディスクやテープに比べれば遙かに早いですが、下と比較しても意味はなく、贅沢、我慢とか精神論を持ち出すのは逃避です。

 大容量のメモリが安く売られているのですから、Windows が標準でメモリディスクを提供すれば性能改善に役立つのに何故か実装しません。
 メモリディスクはデータロストと表裏一体ですが、現在はメールとブラウザとオフィスしか使いません。
 一時ファイルをメモリディスクに保存することで、消さずに放置するOSとアプリケーションがディスク容量を浪費する問題が解決する上に速度向上を見込める。
 何故、実装しないんでしょうね? 不思議です。 Windows 10で「メモリディスクを実装して性能がxxx向上しました!」とかお為ごかしを垂れるのでしょうか。

 ディスクをSSD に換装すれば、際立った性能向上が見込めます。 それぐらい、ディスク(ハードドライブ)は遅いです。

 次にバス転送速度。 SATA 6.0G が普及し始める気配があります。 3.0でもSSD に換装することで目に見えて性能が改善されます。
 ユーザファイルをハードドライブ、システムドライブをSSD に配置して利用すると、比較的SSD の寿命によるデータロストを回避できます
 ですが、正直なところ、SSD のみで運用して定期的にバックアップを取る事が理想的であると考えます。

 ロストを恐れるなら、寿命を延ばす工夫よりもバックアップを取れ、と言いたいわけです。

 どうせ壊れますから。

1-2. メモリ容量

 スラッシングを回避するために物理メモリ容量を増やす。 これによりディスクへのアクセスが少なくなるので、性能が改善されます。

 但し、無制限に物理メモリを増やした所で意味はありません。 タスクマネージャの「コミットチャージ」の「最大」をチェックします。
 この数字より多くなるように物理メモリを増やすことがポイントです。 この数字以上に増やしても、メモリ容量による性能改善は見込めません。

 まずは、普通にコンピュータを利用して、電源を落とす前にタスクマネージャを開き、コミットチャージの最大を確認してください。

 尚、普通は考えにくいですが、コミットチャージの最大値が2[GBytes]を超えているという希有な方が、64bitOSへ移行することを検討しているとします。
 この場合は、一度64bitOSへ移行した後にコミットチャージの最大値を再計測してください。 恐らく32bitOSの時に比べて2倍に近い数字になっていると思います。

 64bitOSは、ポインタ(=アドレス情報)が8バイト、整数情報の基本単位が8バイトとなり、単純計算、どんぶり勘定で2倍のメモリを消費する事になります。

「64bitOSで、より大量のメモリ空間を使用できます!!」

 ではなく、

「64bitOSで、より大量のメモリを浪費できます!!」

 が正しい理解です。 64bitの整数を必要とするシーンは多いですが、多くの場合は、メモリを浪費する原因です。

1-3. プロセッサ性能

 プロセッサ性能は、どこを観ればいいんですか? 以下は私見です。

  1. キャッシュメモリ容量(プロセッサ内蔵)
  2. コア数、およびスレッド数

 現状だと、この二つで大体は決定されると考えております。

 プリエンプション(時分割スレッド切り替え方式)OSの宿命ですね。 プロセッサ速度と比較して、メモリは遅いからです。
 簡単に言えば、キャッシュサイズ以上のメモリを利用するアプリケーションを使っているとキャッシュに収まらないから、物理メモリからデータを入力します。

 この辺りの動きは、OSとプロセッサキャッシュの利用アルゴリズムとアプリケーションのプログラムに依存するはずです。
 プロセッサのキャッシュがどのように使われているかを詳しくは知りませんが、キャッシュと物理メモリの容量比と速度から想像して、

  1. プログラムのルーチンサイズとアクセスするデータ領域が小さい
  2. スレッド切り替えを行う単位時間より短い時間でI/O 入力待ち状態まで持って行く
  3. もしくは、単位時間あたりにアクセスするメモリ領域が少ない

 こういう条件を満たしたアプリケーションでないと、キャッシュの利用効率と性能向上には役立たない。
 そして、プロセッサキャッシュを占有させるAPI はみたことがありません。
 実装されても全てのアプリケーションが占有を主張して、結果意味がないですからね。 実際の所、Windows カーネルが大部分を占有しているんじゃないかな?と思います…。

 ただ、Windows カーネルがプロセッサキャッシュの大部分を占有する作りの方がコンピュータの性能は向上するのかもですね。
 15[MB]程度じゃ、カーネル全ては乗らないと思いますけども。
 ntoskrnl.exe は5.5[MB]程度の様ですが、デバイスやスレッド、ハンドルやウィンドウマネージャの管理メモリを含めたら、無理でしょうね。

 コア数、スレッド数を考える場合、現状だと必ずコンピュータに鎮座する「ウィルス対策ソフトウェア」の存在があります。

 ほとんどの場合、必ず常駐してリアルタイム監視が実行されているはずです。

 これ自体は、ファイルアクセスやネットワークアクセスの処理を止めて、定義ファイルを使ってチェックします。
 コンピュータ性能(応答性能、スループット)を引き落とす最大の要因です。
 条件が整い、コンセンサスを確保できるなら、クライアントコンピュータからは完全に撤廃して、ファイアウォールなどでスキャンする方が良いと考えます。

 条件がシビアで、

  1. クライアントコンピュータへ直接ファイルを持ち込まない(リムーバブルメディアの利用を禁止)
  2. リムーバブルメディアからファイルを持ち込む場合は、専用のコンピュータで検疫(ウィルススキャン)を掛ける
  3. ネットワーク経由での持ち込みに対して、メール、プロキシ、ftp、ファイアウォールで検疫を掛ける

 となります。 正直、1と2が現実的に不可能に近いです。
 これを全員が了承するというのは

「全員の銀行口座の預金を10万円でカットして、余剰分をぼくちゃんファンドまるっとぱくぱくが貰いますね^^^vとかとか〜♪」

 と会議の席で発言して、全員がOKと言うシチュエーションと同じです。 もう少し現実的な表現でいうと

「計画停電する。 いやなら消費電力を80%節電しろ。 節電した分も料金払え。 未来永劫な」

 になると思います。 「いやなら〜払え」の部分を取り除くとより正しい表現と考えます。

 ただ、正直ウィルス対策ソフトウェアのリアルタイム監視は、コンピュータリソースの無駄遣いなのは間違いないと思っています。
 プロセッサ性能を向上させても、こいつに多くを喰われますからね。

 コア数を増やす動機は、こいつのためにある。 スレッド数を増やして並行処理で処理時間を短縮可能なアプリケーションというのは少ない。

 インタラクティブに利用するワープロ、プレゼンファイル編集においては、文字入力が大部分を占める。 漢字変換の辞書探索を並行処理して高速化しろとでも?
 今でも十分にレスポンスタイムは速いのですけどね。 バックグラウンドで走る英字のスペルチェックぐらいですか?
 表計算は、言うほどに使いませんよ?

 プロセッサのキャッシュメモリを増やしても、たいした性能向上にはつながらない。
 コア数を増やしてもウィルス対策ソフトウェアは、全てのファイルとメモリとネットワーク送受信をブロックしてチェックする。
 ウィルス対策ソフトウェアの検疫を高速化する専用命令セットをプロセッサに実装した方が性能向上に直結するんじゃないんですかね?

 AVX やAES-NI機能がそれに当たるのでしょうか? それを使って現状のウィルス対策ソフトウェアは実装されているのでしょうか?

 そうじゃないから、宣伝されていないのですよね?


最終更新日:2012/05/19