ちょっとした妄想

投稿者名: 
Aqualight
ホストOS: 
N/A
ゲストOS: 
N/A
本文: 

構想とは言ってもシモネタ全開の話ではありません。 (笑)

 

 読者の皆様、こんにちは、こんばんは。 Aqualight です。
今回の投稿は処理高速化についての話です。
但し、これは私の妄想を多分に含むもので、賛同して頂く必要などありません。
ただ、「こういう考え方もあるのだなぁ…」とご理解頂ければ幸いです。

 

 最初に宣言しておきます。
安定度と経済性、利便性を考慮すれば、CPU の処理速度は既に上限に達しています。
だからマルチコア化による並列処理で1タスク当たりの処理時間を稼ぐしか無いのです。

 CPUの処理速度は動作クロック周波数依存です。
なぜななら処理機構単体では1クロックで1命令しか実行できないからです。
だから処理クロック周波数を高める事で高速化可能だった訳です。
この方法にも限界があり、それは発熱(消費電力)という経済性から上限があります。
だから Pentium Ⅲ の時代には CPU を零下にまで冷却して オーバークロックで動作させたりしました。
仮に経済性や安定性を無視すれば現行販売品のCPUのクロックは 10 GHz 程度には上がるでしょう。
でも、その方法は一般家庭で可能でしょうか? という事なので、手軽で安定した動作を意識すると、
クロック周波数の上限は 5 GHz 以下になってしまう訳です。

 他にも理由はあります。
上記は CPU だけに注目しての話です。
しかし実際は CPU に接続されたペリフェラルが非同期であっても同様に高速化しないと実現出来ないからです。
だから CPU だけ冷却しても動作が不安定になってしまう訳です。

 Intel は Pentium Ⅳ の頃にクロックを上げるだけでは高速化に限界がある事を知り、
その後の製品名にクロック周波数表示を辞め、CPUナンバーに替えてました。
そして高速化の手段として多コア化を始めました。

なぜ多コア化が高速化に寄与するか

 タネを明かせば、OSが タイムシェアリングによるマルチタスクだからです。
マルチタスクOSではユーザーが起動したアプリ以外にも裏側で様々なタスクが動作しています。
時分割によるマルチタスクでは、ユーザーは全CPU時間を利用できないのです。
言い換えれば CPUの処理能力の一部しか使っていないという事です。
つまり最初から 100% の速度を出しきれていないのです。

 多コア化すると、1クロックでコア数分の命令を同時処理可能になり、ユーザー・タスクが利用するCPU時間が
増える事になります。
これが多コアが高速化に寄与するカラクリです。
単純計算では、同数のタスクでは4コアでは1コアの4倍の処理能力を発揮する計算なのですが、
残念ながら4倍にはなりません。
それはバスを占有するタイミングを調停する必要が生まれ、そのために待たされるからです。
実質 3.5 倍が上限でしょうか。

 で、ここからが妄想の始まりです。 (笑)

 「スレッド」という単語をご存知でしょうか?
掲示板での話題の単位をスレッドとは言いますが、そちらではなくプログラム実行に関するスレッドです。
プログラムはメモリー上に展開され実行されます。 この状態をタスクと呼び、プログラムはタスクその物と言って良いでしょう。
最近のプログラムは「オブジェクト指向」としてソフトウェアの部品の集合体です。
JOB の流れでは利用しない部品も出てきますが、この部品と認識可能な部分をスレッドと呼びます。
この定義は説明を行うためのもので、厳密には違いますが、取り敢えず そう理解して下さい。

 現在の多コアCPUではスレッド単位で並列処理して高速化しています。
単純に言えば1クロックで複数命令を処理している…と。
これをスレッド単位ではなくタスク単位で運用すると どうなるでしょう?
まぁ、そういう事なのです。

 これは言い換えると、特定タスクに 100% のCPU時間を与える事に相当します。
結果の表示処理や入力処理などを無視すると 特定タスクに対して CPU を全力疾走させる事になります。
こうなると、完全にクロック・スピードで計算可能な最短処理時間が実現します。
これは「マルチタスクの中にシングル・タスクを持ち込む」という手法です。
複数コアCPUにこの機能を組み込めば最速処理機能は簡単に組み込めます。
でも、この方法は はすぐに実現可能であっても誤魔化しに過ぎません。
なぜなら、需要があれば既に実現しているからです。
Windows など ある程度 タスクに与える処理時間を設定可能ですが、特定タスクの優先度を最大にしてしまうと
他のタスク時間が削られ妙な事になってしまいます。
そもそもハードウェアもソフトウェアもマルチタスクが前提の仕様で作られ、わざわざシングルタスクを割り込む仕様に
作られていないからです。

 なぜ4コア化しても4倍速にならない?

 簡単です。 先に述べたようにバスが1組しか無く調停の必要があるからです。
じゃ、そのバス調停をしなくて済む方法は?
それはコア毎にローカルバスを持ちメモリーにアクセス出来れば解決です。
まぁ、この場合も表示や入力処理に関しては調停が必要なのですが、それでも高速化は可能な筈です。
でもね…
これを実現してしまうと CPU が配線の化物になってしまうか、CPU の物理サイズが現行品の 10倍以上になってしまいます。
やはり妄想の産物ですね。 (笑)

 実際、高クロック化による高速化では消費電力(発熱)が致命的で絶対にモバイル転用出来ません。
だからこその多コア化で、その目的は1クロック当たりの実行命令数増加です。
私としては次世代の高速化手法はスレッド単位ではなくタスク単位での多コア化と妄想してますが…

 こんな CPU があるんですね。

サーバー向け CPU Intel Xeon E-54669 v3

 何と 18 コア 36 スレッド ですが クロック周波数を確認して下さい。
2.1 GHz で最大でも 2.9 GHz と思ったより低速です。
ですが消費電力も同時に確認して下さい。 135 W です。
確かに 1コア当たりの消費電力はシリーズ中 最小ですが、コア数分だけ増加している計算です。
このコア数で高クロック化出来れば最高なのでしょうが、コア数分だけの発熱量から低クロックに
甘んじているのでしょうね。  私にはジレンマと思えます。

 結局、マルチタスクだからこその高速化手法には違いありませんが、高クロック化による処理速度高速化は
既に限界である証拠なのでしょう。
まぁ、だからスパコンなどでは液体窒素による強制冷却などが使われるのでしょう。
そんな方法は一般家庭ではまず無理ですけどね。

 で、最後に VirtualBox との関係です。
仮想マシンをストレス無く扱うには、結局 大量のメモリーを利用可能な 高クロック 64 bit CPU が望ましい…となる訳ですが、
こんな与太話や妄想からでも納得出来ましたでしょうか?
本当は x86 アーキテクチャにも問題があって…という話は今後の話題として今回は公開しませんが、
仮想マシンで再現する古いOS自体が そもそも仮想化に対応していない事が問題です。
一般人が実用として仮想マシンを利用するのが当たり前となるには、まだまだ時間が掛かりそうです。
今回は処理速度という視点から色々と与太話を持ち出しましたが「現行のままではNG」は
誰もが知るところです。

 サーバーとしての仮想マシンは既に運用が開始されていて一般人も恩恵を置けていますが、
仮想化が一般化しているとは言えない現状では仮想マシンのメリットを宣伝しても「暖簾に腕押し、糠に釘」です。
やはりハードウェアが仮想化を前提とした構成にならない限り、仮想マシンは一般化しないのかもしれません。

 という事で、今回の投稿は処理高速化のあれこれでした。
グダグダなのはいつもの話、お読み頂き 有難うございました。

 

 

 

コメントを追加

Filtered HTML

  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 使用できるHTMLタグ: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <p> <br />
  • 行と段落は自動的に折り返されます。

Plain text

  • HTMLタグは利用できません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 行と段落は自動的に折り返されます。
CAPTCHA
スパム投稿防止の為以下のテキストを入力してください
Image CAPTCHA
Enter the characters shown in the image.