インストラクター：このレッスンでは､
CPUの機能について説明します｡
これには､ マルチスレッド､ 対称型マルチプロセッシング､
シングルコアとマルチコアの比較､
仮想化サポートなどが含まれる｡
さて､ 最初に取り上げるのはマルチスレッディングと呼ばれるもので､
どのCPUを買うかによって､ SMT､ 同時マルチスレッディング､
ハイパースレッディングとも呼ばれる｡
ハイパースレッディングとは､ インテルがこのプロセスを指す言葉だ｡
そして､ より一般的な用語はSMT（同時マルチスレッド）である｡
スレッディングとは､ ソフトウェア・アプリケーションからプロセッサに送られる1つの命令ストリームの概念である｡
現在､ ほとんどのアプリケーションは､ 単一スレッドで単一プロセスを実行するように設計されている｡
そしてこれは､ そのソフトウェアがすべてをシリアル方式で行うことを意味する｡
だから､ もし私があなたに5つの異なることを指示したら､
あなたはそれらを1､ 2､ 3､
4､ 5と順番に行うだろう｡
仮に1回に10分かかるとしたら､
合計50分だ｡
しかし､ もしマルチスレッディングを許可して､ これらのことを順番に実行したり､
同時に実行したりできるようにすれば､ これらのことを異なるスレッドや異なるストリームに送ることで､ 一度に複数のことを実行できるようになる｡
例えば､ 右手で何かを書き留めると同時に､
左手で机を叩いてほしいと言ったとしよう｡
2本の糸､ あるいは2本の手があるからこそ､
その2つを同時に行うことができるのだ｡
これがマルチスレッドの考え方だ｡
そこでインテルや他のメーカーが行ったのは､
ソフトウェアがプロセッサと通信し､
1つのプロセッサ内で複数の並列スレッドを同時に実行できるようにする方法を開発することだった｡
こうすることで､ これらのスレッドがそのプロセッサで実行され､
CPUが次のアクションを待っているアイドル時間を減らすことができる｡
こうすることで､ 私たちは本質的に能力を高め､
より多くのことをプロセッサーに処理させ､ 同じ時間内により多くのことを成し遂げようとすることができる｡
ソフトウェアがそれを利用し､ 同時に複数のスレッドを使用したいことをシステムに伝えることができるように理解できなければならない｡
これは､ ハイパースレッディングのようなものを扱う場合の大きな制限だ｡
さて､ これを乗り越えるもうひとつの方法は､
対称型マルチプロセッシング（SMP）と呼ばれるものだ｡
さて､ SMPはワークステーションやサーバーが実際に複数のプロセッサーを搭載していたため､
伝統的な方法である｡
そのためには､ 2つのプロセッサー・ソケットか4つのプロセッサー・ソケットを持つマザーボードを用意し､
そのマザーボードに2つまたは4つのプロセッサーを取り付ける必要がある｡
その際､ すべてのプロセッサーが同じタイプで同じスピードである必要がある｡
また､ 基盤となるオペレーティング・システムは､ 複数のプロセッサーの使い方を理解しなければならない｡
デフォルトでは､ ほとんどのOSはそうなっていなかった｡
そのため､ ウィンドウズ・サーバー2019のようなサーバーベースのオペレーティング・システムで､
複数のプロセッサーをサポートできるようにする必要があった｡
このため､ SMP（対称型マルチプロセッシング）はデスクトップやラップトップではあまり役に立たなかった｡
そしてその代わりに､ ほとんどのデスクトップやノートパソコンは､
インテル・プロセッサーのハイパースレッディングや､
AMDプロセッサーを使用している場合は同時マルチスレッディング（SMT）に頼らざるを得なかった｡
ハイパースレッディングとSMTは､ 長い間とてもうまく機能したが､
最終的には､ 処理したいものの量が多く､ それを処理するプロセッサが1つしかないという限界にぶつかった｡
現在､ ほとんどのオペレーティング・システムは､
特定のマザーボード上で複数のソケットや複数のプロセッサーを扱う方法を知らなかったため､
メーカーはマルチコア・パッケージと呼ばれるものを作り始めた｡
今､ 私がパッケージと言ったのはCPUのことで､
物理的なチップのことだ｡
マザーボード上の2つの異なるソケットに､
2つの物理的なパッケージ､ あるいは2つの物理的なチップを搭載する代わりに､
これらのメーカーが採用したのは､ 1つのCPUとして動作する1つのパッケージを作ることだった｡
しかし､ そのパッケージの中には､
実際には複数のCPU､ あるいは複数のプロセッサーが入っていた｡
つまり､ マザーボードからは物理的には1つのCPUに見えるが､
その内部には複数のコア（中央演算処理装置コア）が存在するのだ｡
これにより､ どのようなオペレーティング・システムでも､
単一のプロセッサーやプロセッサー・パッケージと対話することができるようになり､ プロセッサー・パッケージ自体が､ CPU内部のマルチコアに命令を分配することができるようになる｡
こう考えてみよう｡
ベッドルームが4つある家ですね｡
もし誰かが玄関にやってきて､ 一晩ベッドが必要だと言ったら､
一晩のベッドさえあれば､
この4つのうちどれを使っても構わないのだ｡
そして､ 玄関を入り､ 1つの部屋に案内し､
1つの部屋しか見せない｡
このマルチコア・プロセッサーの本質はそこにある｡
ドアから新しい人が入ってくると､
一部屋に案内し､ そこで一晩寝かせたり､
手続きをさせたりして､ また外に送り出す｡
この場合､
マルチコアパッケージである｡
そして､ その仕事をするために必要な個々のコンパートメント､
あるいは個々のサブプロセッサーに入れる｡
それがマルチコアパッケージのアイデアだ｡
なぜなら､ あなたのシステムにはマルチコアプロセッサが搭載されているからだ｡
おそらくデュアルコアプロセッサー､ つまり1つのチップの中に2つのCPUを搭載しているか､
クアッドプロセッサー､ つまり1つのチップの中に4つのプロセッサーを搭載しているのだろう｡
あるいは､ ヘキサプロセッサー､
つまり1つのチップの中に6つのコアがある｡
あるいは､ オクタ・プロセッサー､
つまり1つのチップに8つのコアが搭載されている｡
例えば､ 私のデスクトップ・コンピューターには8コアのCPUが搭載されているが､
物理的には1つのチップだが､ その内部には8つのサブ・プロセッサーがある｡
そのため､ これは8コア､ あるいはマルチコア・プロセッサーとして知られている｡
マルチコアとハイパースレッディングに加えて､
この2つを組み合わせることもできる｡
その1つのパッケージの中に8つのプロセッサーがあり､
その8つのプロセッサーはそれぞれハイパースレッディングにも対応している｡
つまり､ 8つのCPUで16のスレッドがあり､
そのマシンで大量の処理ができるのだ｡
さて､ この時点で､ このレッスンで取り上げたい4つのことのうち3つについて話した｡
ハイパースレッディングと､ SMTとして知られる同時マルチスレッディングについて話してきた｡
対称型マルチプロセッシング､ つまりソケットに複数のCPUを搭載すること､
それからマルチコア・プロセッサーのアイデアについて話したが､ これは1つのCPUの中に2つ､ 4つ､ 6つ､ あるいは8つといった複数のプロセッサーを搭載するものだ｡
さて､ 最後にお話ししなければならないのは仮想化だ｡
さて､ 仮想化はCPUのもうひとつの特徴のようなものだが､
今話した3つとはあまり関係がない｡
今話した3つは､ 1つのチップ､
あるいは複数のチップからより高い性能を引き出す方法についてです｡
しかし､ 仮想化というのは､
実際には存在しないハードウェアをエミュレートできるということだ｡
これは､ VTとして知られるインテルの仮想化技術か､
AMD-Vとして知られるAMDの仮想化技術によって実現される｡
現在､ これら2つのプロセッサは､ 仮想化をサポートするためのプロセッサ拡張機能を提供しており､
これはハードウェア・アシスト仮想化と呼ばれている｡
仮想化とは何か？
仮想化とは､ あるコンピューターが､ それ自身の内部で他の複数のコンピューターを動かしているように見せかける機能だ｡
つまり､ MacBookのようなラップトップを1台持つということだ｡
そしてそのMacBookには､ macOSという1つのオペレーティングシステムが入っている｡
今､ ウィンドウズやリナックスを動かそうと思ったら､
マシンを再フォーマットして､ そのソフトウェアをインストールしなければならない｡
それは本当に不便だ｡
しかし､ 仮想化ではその必要がない｡
その代わりに､ VMwareやVirtualbox､
Parallelsのようなプログラムを起動し､ そのソフトウェアの中で仮想コンピューターを作成することができる｡
プロセッサーを1つにしたいとか､ 2つにしたいとか､
4つにしたいとか｡
メモリ容量やストレージ容量も指示できる｡
そして､ ソフトウェアの中にしか存在しない仮想コンピュータを作成する｡
今､ ウィンドウズなどの新しいオペレーティング・システムをその中で動かすと､
これは2コアのプロセッサーだと言えるかもしれない｡
RAMは4ギガバイト､ ハードディスクは50ギガバイト｡
すべてはソフトウェアの中にしか存在しない｡
しかし､ その仮想マシンにウィンドウズをインストールすると､ ウィンドウズはそれを完全なコンピューターだと勘違いする｡
プロセッサーは2つ､ メモリーは4ギガバイト､
ハードディスクは50ギガバイトある｡
だからウィンドウズは､
物理的なハードウェアをすべて持っていると思っている｡
コンピュータを仮想化し､ 仮想ハードウェアを与えることで､
単一の物理ホスト内で複数のオペレーティング・システムを実行できるようになる｡
VTとAMD-Vに加え､ 最近のプロセッサーには第2レベルの仮想化ハードウェア・サポートがある｡
インテル・システムでは､ これはEPT（拡張ページテーブル）として知られている｡
AMDプロセッサーでは､ これをラピッド仮想化インデキシング（RVI）と呼んでいる｡
これらはいずれも､ ソフトウェア仮想化のセカンド・レベル・アドレス変換（SLAT）機能であり､
ハードウェア・プロセッサによってサポートされることで､
より優れた仮想メモリ管理が可能になり､ 仮想マシン内でのメモリ使用時のパフォーマンスが向上します｡
IntelのVTやAMDのAMD-Vをサポートするプロセッサーなど､
仮想化機能を持つプロセッサーは､ そうでないプロセッサーよりも仮想化時のパフォーマンスが向上します｡
そのため､ マシンを構築し､
その上で他の多くの仮想サーバーを実行するサーバーのような仮想化に使用したい場合は､ 選択するプロセッサがVTまたはAMD-Vのいずれかを搭載していることを確認し､ 直接ハードウェアアクセラレーションによる仮想化をサポートできるようにしたい｡