WEBVTT

00:00.000 --> 00:00.990
インストラクター：このレッスンでは､

00:00.990 --> 00:03.390
CPUの機能について説明します｡

00:03.390 --> 00:05.340
これには､ マルチスレッド､ 対称型マルチプロセッシング､

00:05.340 --> 00:07.050
シングルコアとマルチコアの比較､

00:07.050 --> 00:10.950
仮想化サポートなどが含まれる｡

00:10.950 --> 00:12.180
さて､ 最初に取り上げるのはマルチスレッディングと呼ばれるもので､

00:12.180 --> 00:15.840
どのCPUを買うかによって､ SMT､ 同時マルチスレッディング､

00:15.840 --> 00:21.480
ハイパースレッディングとも呼ばれる｡

00:21.480 --> 00:24.780
ハイパースレッディングとは､ インテルがこのプロセスを指す言葉だ｡

00:24.780 --> 00:29.340
そして､ より一般的な用語はSMT（同時マルチスレッド）である｡

00:29.340 --> 00:37.350
スレッディングとは､ ソフトウェア・アプリケーションからプロセッサに送られる1つの命令ストリームの概念である｡

00:37.350 --> 00:42.150
現在､ ほとんどのアプリケーションは､ 単一スレッドで単一プロセスを実行するように設計されている｡

00:42.150 --> 00:45.720
そしてこれは､ そのソフトウェアがすべてをシリアル方式で行うことを意味する｡

00:45.720 --> 00:48.930
だから､ もし私があなたに5つの異なることを指示したら､

00:48.930 --> 00:50.730
あなたはそれらを1､ 2､ 3､

00:50.730 --> 00:53.250
4､ 5と順番に行うだろう｡

00:53.250 --> 00:55.260
仮に1回に10分かかるとしたら､

00:55.260 --> 00:57.510
合計50分だ｡

00:57.510 --> 01:01.650
しかし､ もしマルチスレッディングを許可して､ これらのことを順番に実行したり､

01:01.650 --> 01:09.360
同時に実行したりできるようにすれば､ これらのことを異なるスレッドや異なるストリームに送ることで､ 一度に複数のことを実行できるようになる｡

01:09.360 --> 01:12.450
例えば､ 右手で何かを書き留めると同時に､

01:12.450 --> 01:17.070
左手で机を叩いてほしいと言ったとしよう｡

01:17.070 --> 01:18.570
2本の糸､ あるいは2本の手があるからこそ､

01:18.570 --> 01:22.020
その2つを同時に行うことができるのだ｡

01:22.020 --> 01:23.970
これがマルチスレッドの考え方だ｡ 

01:23.970 --> 01:26.700
そこでインテルや他のメーカーが行ったのは､

01:26.700 --> 01:28.860
ソフトウェアがプロセッサと通信し､

01:28.860 --> 01:35.610
1つのプロセッサ内で複数の並列スレッドを同時に実行できるようにする方法を開発することだった｡

01:35.610 --> 01:37.050
こうすることで､ これらのスレッドがそのプロセッサで実行され､

01:37.050 --> 01:43.080
CPUが次のアクションを待っているアイドル時間を減らすことができる｡

01:43.080 --> 01:45.030
こうすることで､ 私たちは本質的に能力を高め､

01:45.030 --> 01:52.410
より多くのことをプロセッサーに処理させ､ 同じ時間内により多くのことを成し遂げようとすることができる｡

01:52.410 --> 02:02.790
ソフトウェアがそれを利用し､ 同時に複数のスレッドを使用したいことをシステムに伝えることができるように理解できなければならない｡

02:02.790 --> 02:06.630
これは､ ハイパースレッディングのようなものを扱う場合の大きな制限だ｡

02:06.630 --> 02:08.400
さて､ これを乗り越えるもうひとつの方法は､

02:08.400 --> 02:13.320
対称型マルチプロセッシング（SMP）と呼ばれるものだ｡

02:13.320 --> 02:17.304
さて､ SMPはワークステーションやサーバーが実際に複数のプロセッサーを搭載していたため､

02:17.304 --> 02:20.370
伝統的な方法である｡

02:20.370 --> 02:25.290
そのためには､ 2つのプロセッサー・ソケットか4つのプロセッサー・ソケットを持つマザーボードを用意し､

02:25.290 --> 02:28.890
そのマザーボードに2つまたは4つのプロセッサーを取り付ける必要がある｡

02:28.890 --> 02:34.290
その際､ すべてのプロセッサーが同じタイプで同じスピードである必要がある｡

02:34.290 --> 02:39.690
また､ 基盤となるオペレーティング・システムは､ 複数のプロセッサーの使い方を理解しなければならない｡

02:39.690 --> 02:42.690
デフォルトでは､ ほとんどのOSはそうなっていなかった｡ 

02:42.690 --> 02:45.150
そのため､ ウィンドウズ・サーバー2019のようなサーバーベースのオペレーティング・システムで､

02:45.150 --> 02:49.350
複数のプロセッサーをサポートできるようにする必要があった｡

02:49.350 --> 02:55.620
このため､ SMP（対称型マルチプロセッシング）はデスクトップやラップトップではあまり役に立たなかった｡

02:55.620 --> 02:58.770
そしてその代わりに､ ほとんどのデスクトップやノートパソコンは､

02:58.770 --> 03:01.110
インテル・プロセッサーのハイパースレッディングや､

03:01.110 --> 03:06.720
AMDプロセッサーを使用している場合は同時マルチスレッディング（SMT）に頼らざるを得なかった｡

03:06.720 --> 03:09.480
ハイパースレッディングとSMTは､ 長い間とてもうまく機能したが､

03:09.480 --> 03:16.920
最終的には､ 処理したいものの量が多く､ それを処理するプロセッサが1つしかないという限界にぶつかった｡

03:16.920 --> 03:19.020
現在､ ほとんどのオペレーティング・システムは､

03:19.020 --> 03:23.220
特定のマザーボード上で複数のソケットや複数のプロセッサーを扱う方法を知らなかったため､

03:23.220 --> 03:27.420
メーカーはマルチコア・パッケージと呼ばれるものを作り始めた｡

03:27.420 --> 03:28.770
今､ 私がパッケージと言ったのはCPUのことで､

03:28.770 --> 03:31.500
物理的なチップのことだ｡

03:31.500 --> 03:33.570
マザーボード上の2つの異なるソケットに､

03:33.570 --> 03:37.020
2つの物理的なパッケージ､ あるいは2つの物理的なチップを搭載する代わりに､

03:37.020 --> 03:42.390
これらのメーカーが採用したのは､ 1つのCPUとして動作する1つのパッケージを作ることだった｡

03:42.390 --> 03:43.740
しかし､ そのパッケージの中には､

03:43.740 --> 03:47.160
実際には複数のCPU､ あるいは複数のプロセッサーが入っていた｡

03:47.160 --> 03:49.410
つまり､ マザーボードからは物理的には1つのCPUに見えるが､

03:49.410 --> 03:57.600
その内部には複数のコア（中央演算処理装置コア）が存在するのだ｡

03:57.600 --> 03:59.910
これにより､ どのようなオペレーティング・システムでも､

03:59.910 --> 04:10.890
単一のプロセッサーやプロセッサー・パッケージと対話することができるようになり､ プロセッサー・パッケージ自体が､ CPU内部のマルチコアに命令を分配することができるようになる｡

04:10.890 --> 04:11.812
こう考えてみよう｡ 

04:11.812 --> 04:14.250
ベッドルームが4つある家ですね｡ 

04:14.250 --> 04:16.320
もし誰かが玄関にやってきて､ 一晩ベッドが必要だと言ったら､

04:16.320 --> 04:17.580
一晩のベッドさえあれば､

04:17.580 --> 04:20.880
この4つのうちどれを使っても構わないのだ｡

04:20.880 --> 04:22.710
そして､ 玄関を入り､ 1つの部屋に案内し､

04:22.710 --> 04:25.620
1つの部屋しか見せない｡

04:25.620 --> 04:28.560
このマルチコア・プロセッサーの本質はそこにある｡ 

04:28.560 --> 04:30.570
ドアから新しい人が入ってくると､

04:30.570 --> 04:32.790
一部屋に案内し､ そこで一晩寝かせたり､

04:32.790 --> 04:35.700
手続きをさせたりして､ また外に送り出す｡

04:35.700 --> 04:36.720
この場合､

04:36.720 --> 04:40.860
マルチコアパッケージである｡

04:40.860 --> 04:43.200
そして､ その仕事をするために必要な個々のコンパートメント､

04:43.200 --> 04:46.890
あるいは個々のサブプロセッサーに入れる｡

04:46.890 --> 04:49.290
それがマルチコアパッケージのアイデアだ｡ 

04:49.290 --> 04:55.110
なぜなら､ あなたのシステムにはマルチコアプロセッサが搭載されているからだ｡

04:55.110 --> 04:57.120
おそらくデュアルコアプロセッサー､ つまり1つのチップの中に2つのCPUを搭載しているか､

04:57.120 --> 05:03.960
クアッドプロセッサー､ つまり1つのチップの中に4つのプロセッサーを搭載しているのだろう｡

05:03.960 --> 05:05.730
あるいは､ ヘキサプロセッサー､

05:05.730 --> 05:08.340
つまり1つのチップの中に6つのコアがある｡

05:08.340 --> 05:09.840
あるいは､ オクタ・プロセッサー､

05:09.840 --> 05:12.300
つまり1つのチップに8つのコアが搭載されている｡

05:12.300 --> 05:16.090
例えば､ 私のデスクトップ・コンピューターには8コアのCPUが搭載されているが､

05:16.090 --> 05:21.630
物理的には1つのチップだが､ その内部には8つのサブ・プロセッサーがある｡

05:21.630 --> 05:25.410
そのため､ これは8コア､ あるいはマルチコア・プロセッサーとして知られている｡

05:25.410 --> 05:29.991
マルチコアとハイパースレッディングに加えて､

05:29.991 --> 05:37.530
この2つを組み合わせることもできる｡

05:37.530 --> 05:40.050
その1つのパッケージの中に8つのプロセッサーがあり､

05:40.050 --> 05:43.710
その8つのプロセッサーはそれぞれハイパースレッディングにも対応している｡

05:43.710 --> 05:46.860
つまり､ 8つのCPUで16のスレッドがあり､

05:46.860 --> 05:50.850
そのマシンで大量の処理ができるのだ｡

05:50.850 --> 05:56.010
さて､ この時点で､ このレッスンで取り上げたい4つのことのうち3つについて話した｡

05:56.010 --> 06:00.090
ハイパースレッディングと､ SMTとして知られる同時マルチスレッディングについて話してきた｡

06:00.090 --> 06:02.460
対称型マルチプロセッシング､ つまりソケットに複数のCPUを搭載すること､

06:02.460 --> 06:14.010
それからマルチコア・プロセッサーのアイデアについて話したが､ これは1つのCPUの中に2つ､ 4つ､ 6つ､ あるいは8つといった複数のプロセッサーを搭載するものだ｡

06:14.010 --> 06:17.400
さて､ 最後にお話ししなければならないのは仮想化だ｡ 

06:17.400 --> 06:20.490
さて､ 仮想化はCPUのもうひとつの特徴のようなものだが､

06:20.490 --> 06:23.220
今話した3つとはあまり関係がない｡

06:23.220 --> 06:24.780
今話した3つは､ 1つのチップ､

06:24.780 --> 06:28.710
あるいは複数のチップからより高い性能を引き出す方法についてです｡

06:28.710 --> 06:30.300
しかし､ 仮想化というのは､

06:30.300 --> 06:35.730
実際には存在しないハードウェアをエミュレートできるということだ｡

06:35.730 --> 06:39.450
これは､ VTとして知られるインテルの仮想化技術か､

06:39.450 --> 06:44.700
AMD-Vとして知られるAMDの仮想化技術によって実現される｡

06:44.700 --> 06:47.340
現在､ これら2つのプロセッサは､ 仮想化をサポートするためのプロセッサ拡張機能を提供しており､

06:47.340 --> 06:52.050
これはハードウェア・アシスト仮想化と呼ばれている｡

06:52.050 --> 06:55.470
仮想化とは何か？

06:55.470 --> 07:02.729
仮想化とは､ あるコンピューターが､ それ自身の内部で他の複数のコンピューターを動かしているように見せかける機能だ｡

07:02.729 --> 07:07.140
つまり､ MacBookのようなラップトップを1台持つということだ｡

07:07.140 --> 07:11.700
そしてそのMacBookには､ macOSという1つのオペレーティングシステムが入っている｡ 

07:11.700 --> 07:13.710
今､ ウィンドウズやリナックスを動かそうと思ったら､

07:13.710 --> 07:16.920
マシンを再フォーマットして､ そのソフトウェアをインストールしなければならない｡

07:16.920 --> 07:18.780
それは本当に不便だ｡ 

07:18.780 --> 07:21.360
しかし､ 仮想化ではその必要がない｡ 

07:21.360 --> 07:22.830
その代わりに､ VMwareやVirtualbox､

07:22.830 --> 07:30.000
Parallelsのようなプログラムを起動し､ そのソフトウェアの中で仮想コンピューターを作成することができる｡

07:30.000 --> 07:32.370
プロセッサーを1つにしたいとか､ 2つにしたいとか､

07:32.370 --> 07:34.950
4つにしたいとか｡

07:34.950 --> 07:38.010
メモリ容量やストレージ容量も指示できる｡

07:38.010 --> 07:42.510
そして､ ソフトウェアの中にしか存在しない仮想コンピュータを作成する｡

07:42.510 --> 07:44.645
今､ ウィンドウズなどの新しいオペレーティング・システムをその中で動かすと､

07:44.645 --> 07:48.660
これは2コアのプロセッサーだと言えるかもしれない｡

07:48.660 --> 07:52.770
RAMは4ギガバイト､ ハードディスクは50ギガバイト｡ 

07:52.770 --> 07:54.750
すべてはソフトウェアの中にしか存在しない｡ 

07:54.750 --> 07:59.670
しかし､ その仮想マシンにウィンドウズをインストールすると､ ウィンドウズはそれを完全なコンピューターだと勘違いする｡

07:59.670 --> 08:02.340
プロセッサーは2つ､ メモリーは4ギガバイト､

08:02.340 --> 08:06.270
ハードディスクは50ギガバイトある｡

08:06.270 --> 08:07.200
だからウィンドウズは､

08:07.200 --> 08:11.400
物理的なハードウェアをすべて持っていると思っている｡

08:11.400 --> 08:13.659
コンピュータを仮想化し､ 仮想ハードウェアを与えることで､

08:13.659 --> 08:20.280
単一の物理ホスト内で複数のオペレーティング・システムを実行できるようになる｡

08:20.280 --> 08:28.860
VTとAMD-Vに加え､ 最近のプロセッサーには第2レベルの仮想化ハードウェア・サポートがある｡

08:28.860 --> 08:33.480
インテル・システムでは､ これはEPT（拡張ページテーブル）として知られている｡

08:33.480 --> 08:39.810
AMDプロセッサーでは､ これをラピッド仮想化インデキシング（RVI）と呼んでいる｡

08:39.810 --> 08:45.450
これらはいずれも､ ソフトウェア仮想化のセカンド・レベル・アドレス変換（SLAT）機能であり､

08:45.450 --> 08:48.060
ハードウェア・プロセッサによってサポートされることで､

08:48.060 --> 08:56.913
より優れた仮想メモリ管理が可能になり､ 仮想マシン内でのメモリ使用時のパフォーマンスが向上します｡

08:57.870 --> 09:03.480
IntelのVTやAMDのAMD-Vをサポートするプロセッサーなど､

09:03.480 --> 09:19.260
仮想化機能を持つプロセッサーは､ そうでないプロセッサーよりも仮想化時のパフォーマンスが向上します｡

09:19.260 --> 09:20.698
そのため､ マシンを構築し､

09:20.698 --> 09:40.653
その上で他の多くの仮想サーバーを実行するサーバーのような仮想化に使用したい場合は､ 選択するプロセッサがVTまたはAMD-Vのいずれかを搭載していることを確認し､ 直接ハードウェアアクセラレーションによる仮想化をサポートできるようにしたい｡
