FE EXAM

マルチコアプロセッサ(1つのCPUに複数のコア)

1つのCPUに複数の処理コアを搭載して並列処理する仕組み

DIAGRAM
コアL1キャッシュ共有キャッシュ(L2/L3)メモリ
1つのCPU(マルチコアプロセッサ)コア1命令を実行する装置L1キャッシュ各コア専用の高速メモリコア2命令を実行する装置L1キャッシュ各コア専用の高速メモリコア3命令を実行する装置L1キャッシュ各コア専用の高速メモリコア4命令を実行する装置L1キャッシュ各コア専用の高速メモリ共有キャッシュ(L2 / L3)全コアで共有する中速メモリ — コア間のデータ受け渡しにも使うメモリバス主記憶(メインメモリ)プログラムやデータを置く大容量メモリ4つのコアが同時に別々の処理を実行できる → 全体の処理能力が向上シングルコアは1個のコアしか持たないため、同時に1つの処理しか進められない
解説

📌
マルチコアとは

1つのCPUコア1コア2コア3コア4

マルチコアプロセッサとは、1つのCPU(=コンピュータの頭脳)の中に、命令を実行する「コア」を複数搭載したプロセッサのことです。コアとは、実際に計算や命令の実行を行う中核部分のことを指します。

身近な例で考えると、1つのレジに複数の店員さんがいるイメージです。コア(店員)が4人いれば、4人のお客さんの会計を同時にさばけます。コアが1つしかないと、お客さんを1人ずつしか対応できません。

上の図解では、1つのCPUの中に4つのコアがあり、それぞれが専用のL1キャッシュ(コアのすぐ近くにある超高速メモリ)を持ち、その下で共有キャッシュと主記憶につながっている様子を示しています。「コアが2つ=デュアルコア」「4つ=クアッドコア」のように呼びます。

📌
シングルコアとの違い

シングルコアコア×1同時に1処理マルチコア同時に複数処理

シングルコアはコアが1つだけのCPUで、ある瞬間に進められる処理は1つだけです。これに対しマルチコアは複数のコアで本当に同時に処理を進められます。

項目シングルコアマルチコア
コア数1個複数(2/4/8…)
同時実行1処理だけコア数だけ同時に
性能向上の方法クロック周波数を上げるコアを増やす
発熱・消費電力高速化で増えやすい低めのクロックで効率的

かつてはCPUを速くするためにクロック周波数(1秒あたりの処理回数)を上げる方法が主流でした。しかし周波数を上げすぎると発熱と消費電力が急激に増えるという限界にぶつかりました。そこで「1つを速くする」のではなく「数を増やして手分けする」マルチコアへと進化したのです。

📌
並列処理の利点

大きな仕事を4分割して同時処理大仕事コア1コア2コア3コア4

並列処理とは、複数のコアで仕事を手分けして同時に進めることです。マルチコアの最大の利点はここにあります。

並列処理のメリット:
処理速度が上がる:1つの大きな仕事を分割し、複数コアで同時に計算できる
複数アプリを快適に動かせる:動画再生とファイルダウンロードを別々のコアが担当できる
消費電力あたりの性能が良い:低めのクロックでも数で性能を稼げる

ただし注意点もあります。コアを2倍にしても、処理が必ず2倍速くなるわけではありません。仕事の中には「どうしても順番にやるしかない部分(並列化できない部分)」があり、その割合が大きいほど高速化の効果は頭打ちになります。これをアムダールの法則と呼び、並列処理を理解するうえで重要なポイントです。

📌
アムダールの法則(なぜ速くならない部分があるのか)

直列部分(並列化不可)順番にやるしかない処理並列部分(複数コアで分担)コア1の担当コア2の担当コア3の担当コア4の担当直列部分の割合が大きいほど、コアを増やす効果は小さくなる「1割でも直列なら、どれだけコアを増やしても10倍以上にはならない」

アムダールの法則とは、「並列化できない部分が残る限り、コアを増やしても速くなる上限がある」という考え方です。プログラムの処理には「複数コアに分けられる部分」と「どうしても1本道で順番にやるしかない部分」の2種類があります。

なぜ上限があるのか。たとえば「全体の処理のうち9割を並列化できるプログラム」を考えます。コアを無限に増やして並列部分をゼロ秒にしても、残りの1割(直列部分)は絶対に省けないため、どんなに頑張っても元の時間の1割より速くはなれません。つまり最速でも10倍が上限になります。

身近な例で考えると、4人でカレーを作る場面に似ています。野菜を切る・炒めるなどは手分けできますが、「鍋で煮込む時間(直列部分)」は4人でやっても短縮できません。料理全体の速さは、並列化できない煮込み時間に縛られます。マルチコアも同様で、「並列化できる割合をいかに増やすか」がプログラムの設計で重要になります。

📌
キャッシュメモリの階層(なぜL1・L2・L3に分かれているのか)

L1キャッシュ最速・最小L2キャッシュ中速・中容量L3キャッシュ(共有)低速・大容量主記憶(メインメモリ)— さらに低速・大容量

キャッシュメモリとは、CPUのすぐそばに置かれた超高速の小さなメモリのことです。メインメモリ(主記憶)は大容量ですが読み書きが遅く、CPUが毎回メインメモリから取りに行くと待ち時間が生じます。そこで「よく使うデータをCPUの近くに置いておく」のがキャッシュの役割です。

なぜL1・L2・L3と段階があるのか。それは「速さ」と「容量」がトレードオフ(どちらかを上げるともう一方が下がる関係)だからです。
L1キャッシュ:コア専用・最速・容量は少ない(数十KB程度)
L2キャッシュ:コア専用またはコア間共有・中速・中容量(数百KB〜数MB)
L3キャッシュ:全コアで共有・比較的低速・大容量(数十MB)

身近な例で考えると、机の引き出し(L1)・本棚(L2)・物置(L3)・倉庫(メインメモリ)のような関係です。よく使うものほど手元の引き出しに置いておき、めったに使わないものは物置や倉庫へ。CPUが必要なデータをL1に見つければ一瞬で取り出せますが、メインメモリまで取りに行くと時間がかかります。マルチコアではL3が全コアの共有棚として機能し、コア間のデータ受け渡しにも使われます。

関連コンテンツ