1つのCPUに複数の処理コアを搭載して並列処理する仕組み
マルチコアプロセッサとは、1つのCPU(=コンピュータの頭脳)の中に、命令を実行する「コア」を複数搭載したプロセッサのことです。コアとは、実際に計算や命令の実行を行う中核部分のことを指します。
身近な例で考えると、1つのレジに複数の店員さんがいるイメージです。コア(店員)が4人いれば、4人のお客さんの会計を同時にさばけます。コアが1つしかないと、お客さんを1人ずつしか対応できません。
上の図解では、1つのCPUの中に4つのコアがあり、それぞれが専用のL1キャッシュ(コアのすぐ近くにある超高速メモリ)を持ち、その下で共有キャッシュと主記憶につながっている様子を示しています。「コアが2つ=デュアルコア」「4つ=クアッドコア」のように呼びます。
シングルコアはコアが1つだけのCPUで、ある瞬間に進められる処理は1つだけです。これに対しマルチコアは複数のコアで本当に同時に処理を進められます。
| 項目 | シングルコア | マルチコア |
|---|---|---|
| コア数 | 1個 | 複数(2/4/8…) |
| 同時実行 | 1処理だけ | コア数だけ同時に |
| 性能向上の方法 | クロック周波数を上げる | コアを増やす |
| 発熱・消費電力 | 高速化で増えやすい | 低めのクロックで効率的 |
かつてはCPUを速くするためにクロック周波数(1秒あたりの処理回数)を上げる方法が主流でした。しかし周波数を上げすぎると発熱と消費電力が急激に増えるという限界にぶつかりました。そこで「1つを速くする」のではなく「数を増やして手分けする」マルチコアへと進化したのです。
並列処理とは、複数のコアで仕事を手分けして同時に進めることです。マルチコアの最大の利点はここにあります。
並列処理のメリット:
・処理速度が上がる:1つの大きな仕事を分割し、複数コアで同時に計算できる
・複数アプリを快適に動かせる:動画再生とファイルダウンロードを別々のコアが担当できる
・消費電力あたりの性能が良い:低めのクロックでも数で性能を稼げる
ただし注意点もあります。コアを2倍にしても、処理が必ず2倍速くなるわけではありません。仕事の中には「どうしても順番にやるしかない部分(並列化できない部分)」があり、その割合が大きいほど高速化の効果は頭打ちになります。これをアムダールの法則と呼び、並列処理を理解するうえで重要なポイントです。
アムダールの法則とは、「並列化できない部分が残る限り、コアを増やしても速くなる上限がある」という考え方です。プログラムの処理には「複数コアに分けられる部分」と「どうしても1本道で順番にやるしかない部分」の2種類があります。
なぜ上限があるのか。たとえば「全体の処理のうち9割を並列化できるプログラム」を考えます。コアを無限に増やして並列部分をゼロ秒にしても、残りの1割(直列部分)は絶対に省けないため、どんなに頑張っても元の時間の1割より速くはなれません。つまり最速でも10倍が上限になります。
身近な例で考えると、4人でカレーを作る場面に似ています。野菜を切る・炒めるなどは手分けできますが、「鍋で煮込む時間(直列部分)」は4人でやっても短縮できません。料理全体の速さは、並列化できない煮込み時間に縛られます。マルチコアも同様で、「並列化できる割合をいかに増やすか」がプログラムの設計で重要になります。
キャッシュメモリとは、CPUのすぐそばに置かれた超高速の小さなメモリのことです。メインメモリ(主記憶)は大容量ですが読み書きが遅く、CPUが毎回メインメモリから取りに行くと待ち時間が生じます。そこで「よく使うデータをCPUの近くに置いておく」のがキャッシュの役割です。
なぜL1・L2・L3と段階があるのか。それは「速さ」と「容量」がトレードオフ(どちらかを上げるともう一方が下がる関係)だからです。
・L1キャッシュ:コア専用・最速・容量は少ない(数十KB程度)
・L2キャッシュ:コア専用またはコア間共有・中速・中容量(数百KB〜数MB)
・L3キャッシュ:全コアで共有・比較的低速・大容量(数十MB)
身近な例で考えると、机の引き出し(L1)・本棚(L2)・物置(L3)・倉庫(メインメモリ)のような関係です。よく使うものほど手元の引き出しに置いておき、めったに使わないものは物置や倉庫へ。CPUが必要なデータをL1に見つければ一瞬で取り出せますが、メインメモリまで取りに行くと時間がかかります。マルチコアではL3が全コアの共有棚として機能し、コア間のデータ受け渡しにも使われます。