CPUのコア数とは?物理コア・論理コア・SMTの違いと用途別の最適な選び方

はじめに

「CPU:コア数」とは何を意味するのか。PCやサーバ、スマートフォンを選ぶ際に「コアが多いほうが速い」といった説明を見聞きしますが、コア数は性能を決める要素の一つに過ぎません。本コラムでは「コアとは何か」から始め、論理コア・物理コア・SMT(同時マルチスレッディング)、性能スケーリングの限界、キャッシュやメモリ設計、OSのスケジューリング、用途別の選び方、測定方法までを詳しく解説します。

コアとは何か(物理コアの定義)

CPU(Central Processing Unit、中央演算処理装置)の「コア」は、命令を実行するための基本的な演算ユニットです。かつては1つのCPUパッケージに1つのコアしか存在しませんでしたが、技術の進歩により1つのチップ上に複数のコアを集積する「マルチコア」設計が主流になりました。各物理コアは通常、命令デコーダ、実行ユニット、レジスタ、キャッシュ(L1/L2など)を備え、独立してプログラムスレッドを処理できます。

物理コアと論理コア(スレッド)

  • 物理コア:物理的に存在する演算ユニット。物理コア数が増えると、同時に実行できる独立スレッド数(理論上)は増える。
  • 論理コア(ロジカルコア):OSから見える実行コンテキストの数。SMT(Simultaneous Multithreading、IntelではHyper-Threading)などにより、1つの物理コアが複数の論理コアをエクスポーズすることがある。

例えば、4物理コア×2スレッド=8論理コアのように表示されることがあります。ただし、論理コアは必ずしも物理コアと同等の演算能力を持つわけではありません。SMTは、物理コアの空いている実行リソースを別スレッドで活用してスループットを向上させるもので、理想的には70〜30%程度の追加効率を得られるケースが多いですが、ワークロードに依存します。

SMT(同時マルチスレッディング)とその挙動

SMTは1つの物理コア上で複数のスレッドを同時に処理する手法です。IntelのHyper-ThreadingやAMDのSMTは一般的に「1物理コア→2論理コア」を実現しますが、プロセッサ設計によっては異なる数のスレッドをサポートするもの(例えば一部のIBM POWERは多重スレッディングで4~8スレッドをサポート)もあります。

SMTの効果はワークロード依存です。メモリ待ちや分岐ミスで実行ユニットが遊んでいるような状況では別スレッドが有効にリソースを使い、スループットを向上させます。一方で、既に実行ユニットが飽和している計算集約型ワークロードでは、SMTが逆に競合を起こして性能を低下させることもあります。

コア数が増えれば速くなるのか?—スケーリングの現実

コア数の増加は「並列で処理できる仕事量(並列スループット)」を高めますが、プログラムがどの程度並列化できるかに依存します。Amdahlの法則は並列化の限界を理論的に示しており、並列化不可能な処理が存在する限り、コア数を無限に増やしても限界性能に達します。

(要点)

  • 単純な並列処理(独立した多数のタスクを並列実行できる)ではコア増加がほぼ効く。
  • 同期や共有リソース(ロック、メモリ、I/O)の存在はスケーリングを阻害する。
  • 単一スレッド性能(IPC:Instructions Per Cycle とクロック周波数)も重要。コア数だけで判断してはならない。

コア数とクロック、IPC、TDPのトレードオフ

プロセッサ設計には面積・消費電力・発熱という制約があり、同じダイサイズやTDP(Thermal Design Power)下では「コア数を増やすと各コアの最大クロックが下がる」「コア数を増やすと省電力設計が必要になる」といったトレードオフが発生します。

一般的に単一スレッド性能を重視する設計(高いIPCと高クロック)と、多数のコアで並列処理をこなす設計はバランスが異なります。さらにIntelのTurbo BoostやAMDのPrecision Boostのような「負荷に応じてコアのブーストを制御する機能」により、少数コア動作時には高クロック、全コア利用時には低めのクロックに落ち着くことが一般的です。

キャッシュ階層とコア間通信(コヒーレンシ、バス/メッシュ)

コア間でデータをやり取りする際の効率はキャッシュ設計やインターコネクト(リングバス、メッシュ、クロスバーなど)に大きく依存します。キャッシュコヒーレンシ(cache coherence)機構は、複数コアが同じメモリ領域を扱う際に正しいデータを保証するため必須ですが、この処理自体がオーバーヘッドになります。

大規模なコア数になると、コア間のレイテンシや帯域の差(特にNUMA:Non-Uniform Memory Access環境)が性能に影響します。NUMAでは「近いメモリ」は高速アクセス、「遠いメモリ」は遅くなるため、スレッドの配置やメモリ割当ての最適化が重要です。

OSのスケジューリングとスレッド割り当て

OSは利用可能な論理コアに対してスレッドを割り当てます。モダンなカーネル(LinuxやWindows)は負荷分散やキャッシュ利用を考慮してスケジューリングを行いますが、アプリケーション側でスレッドアフィニティ(CPUピンニング)やスレッドプールの設計を行うことで、より効率的な実行が可能です。

たとえば、NUMA環境では「タスクをメモリに近いコアで実行する」ことや、ハードウェアスレッド(論理コア)ではなく物理コア単位でバインドすることで遅延とキャッシュミスを低減できます。

用途別:何コアあれば良いか(目安)

  • 一般的なオフィス作業・ブラウジング:2〜4コアで十分(高クロックの低コア数でも体感は良好)。
  • 写真編集・動画編集(エンコード)・3Dレンダリング:6〜16コア以上が有効。特にレンダリングやエンコードは高い並列性を持つ。
  • ゲーム:多くのゲームは依然として単一/少数スレッドに依存するため、コア数より高いIPCと高クロックが重要。ただし背景タスク(配信、録画)を同時に行うなら6〜8コア以上が望ましい。
  • サーバ/仮想化:同時接続数やVM数に応じて多数コア(16〜数百コア)が必要。NUMAやメモリ帯域が重要。
  • AI/機械学習推論・トレーニング:多くはGPU/アクセラレータで処理されるが、データ前処理や軽量推論などはCPUコア数とメモリ帯域が効く。

仮想化・コンテナ環境でのコア割当

仮想化では物理コアに対して複数の仮想CPU(vCPU)を割り当てることが一般的です。オーバーコミット(物理コア以上のvCPUを割り当てる)は可能ですが、過度に行うとCPU競合でパフォーマンスが大幅に低下します。各VM/コンテナがどの程度CPUを消費するかを理解し、必要なら専有割当を行うことが重要です。

ベンチマークと測定:何を見ればよいか

コア数を見るだけでなく、次の指標を確認してください。

  • 単一スレッドベンチ(Single-thread performance)— 単体タスクの速さを示す。
  • マルチスレッドベンチ(Multi-thread/throughput)— 多数コア使用時のスループット。
  • IPC(Instructions Per Cycle)とブースト時のクロック周波数。
  • 消費電力(TDP)とサーマル挙動 — 長時間負荷でクロックが下がるか。
  • 実使用ワークロードでの測定 — 合成ベンチだけでなく実アプリでの挙動を確認。

トラブルシューティングのヒント

  • 期待通りスケールしない場合は、プロファイラでシリアル部分やロックのボトルネックを探す。
  • 高コア数環境で遅延が出る場合はNUMAやキャッシュコヒーレンシの影響を疑う。
  • SMTが効果を出さない場合は、SMTを無効化して物理コア単位で評価してみる(ときに有効化/無効化で結果が大きく変わる)。

最近のトレンド:ヘテロジニアスコア(big.LITTLE)や多コア化の進展

近年はコアの「量」だけでなく「質」を組み合わせる設計が増えています。ARM系のbig.LITTLE設計や、AppleのMシリーズのように高性能コアと高効率コアを混在させ、負荷に応じて適切なコアを使い分けることで、モバイル機器で高効率かつ高性能を実現しています。サーバ領域でも大量の小さなコアを並べて高効率を狙う設計が登場しています。

まとめ

「コア数」はCPU性能を理解する上で重要な指標の一つですが、それだけで性能を判断してはいけません。物理コアと論理コア(SMT)の違い、シングルスレッド性能(IPC+クロック)、キャッシュ・メモリ階層、TDPとサーマル動作、OSスケジューリングやアプリケーションの並列化可能性など、多くの要因が相互に影響します。用途に応じたバランスのとれた選択と、実測による検証が最も確実です。

参考文献