


マルチコアプロセッサ(MCP)は、単一の集積回路(IC)上に2つ以上の独立した中央処理装置(CPU)を持つマイクロプロセッサであり、その多重度を強調するためにコアと呼ばれます(たとえば、デュアルコアまたはクアッドコア)。各コアはプログラム命令、[ 1 ] 、具体的には通常のCPU命令(加算、データ移動、分岐など)を読み取って実行します。ただし、MCPは別々のコアで同時に命令を実行できるため、マルチスレッドやその他の並列計算手法をサポートするプログラムの全体的な速度が向上します。[ 2 ]メーカーは通常、チップマルチプロセッサ(CMP )と呼ばれる単一のICダイにコアを統合するか、単一のチップパッケージ内の複数のダイにコアを統合します。2024年の時点で、ほぼすべての新しいパーソナルコンピュータで使用されているマイクロプロセッサはマルチコアです。
マルチコアプロセッサは、単一の物理パッケージにマルチプロセッシングを実装します。設計者は、マルチコアデバイス内のコアを密結合することも疎結合することもできます。たとえば、コアはキャッシュを共有することも共有しないこともでき、また、メッセージパッシングまたは共有メモリによるコア間通信方法を実装できます。コアを相互接続するために使用される一般的なネットワークトポロジには、バス、リング、2次元メッシュ、クロスバーなどがあります。同種マルチコアシステムには同一のコアのみが含まれます。異種マルチコアシステムには同一ではないコアが含まれます(たとえば、big.LITTLEには同じ命令セットを共有する異種コアがありますが、AMD Accelerated Processing Unitsには同じ命令セットを共有しないコアがあります)。シングルプロセッサシステムと同様に、マルチコアシステムのコアは、VLIW、スーパースカラー、ベクター、マルチスレッディングなどのアーキテクチャを実装できます。
マルチコアプロセッサは、汎用、組み込み、ネットワーク、デジタル信号処理(DSP)、グラフィックス(GPU)など、多くのアプリケーション分野で広く利用されています。コア数は数十個にもなり、特殊なチップでは10,000個を超えます[ 3 ]。スーパーコンピュータ(チップクラスター)では、その数は1,000万個を超えることもあります(場合によっては、ホストプロセッサに加えて最大2,000万個の処理要素が使用されることもあります)。[ 4 ]
マルチコアプロセッサの使用によるパフォーマンスの向上は、使用されるソフトウェアアルゴリズムとその実装に大きく依存します。特に、実現可能な向上は、複数のコアで同時に並列実行できるソフトウェアの割合によって制限されます。この効果はアムダールの法則によって説明されます。最良のケースでは、いわゆる「恥ずかしいほど並列」な問題は、コア数に近い速度向上率を実現できる可能性があります。あるいは、問題が各コアのキャッシュに収まるように分割され、はるかに低速なメインシステムメモリの使用を回避できれば、それ以上の速度向上が実現できる可能性があります。しかし、ほとんどのアプリケーションは、プログラマがリファクタリングに労力を費やさない限り、それほど高速化されません。[ 5 ]
ソフトウェアの並列化は、現在も重要な研究テーマとなっています。マルチプロセッサアプリケーションの共和分は、ネットワークアーキテクチャ設計に柔軟性をもたらします。並列モデル内での適応性は、これらのプロトコルを利用するシステムの付加的な特徴です。[ 6 ]
消費者市場では、2000年代後半からデュアルコアプロセッサ(つまり、2つのユニットを持つマイクロプロセッサ)がパーソナルコンピュータに普及し始めました。[ 7 ] 2010年代初頭には、クアッドコアプロセッサもハイエンドシステムに採用され始め、2010年代半ばには標準となりました。2010年代後半には、ヘキサコア(6つのコア)が主流になり始め、 [ 8 ] 2020年代初頭以降は多くの分野でクアッドコアを追い抜いています。[ 9 ]
マルチコアおよびデュアルコアという用語は、一般的には中央処理装置(CPU)を指しますが、デジタル信号プロセッサ(DSP)やシステムオンチップ(SoC)にも適用されることがあります。これらの用語は、通常、同一の集積回路ダイ上に製造されるマルチコアマイクロプロセッサのみを指し、同一パッケージ内の個別のマイクロプロセッサダイは、マルチチップモジュールなど、別の名称で呼ばれることがよくあります。この記事では、特に断りのない限り、 同一の集積回路上に製造されるCPUに対して「マルチコア」および「デュアルコア」という用語を使用します。
マルチコア システムとは対照的に、マルチ CPUという用語は、物理的に分離された複数の処理ユニット (多くの場合、相互の通信を容易にするための特殊な回路を含む) を指します。
メニーコアや大規模マルチコアという用語は、特に多数のコア(数十から数千[ 10 ])を備えたマルチコアアーキテクチャを説明するために使用されることがあります。[ 11 ]
一部のシステムでは、単一のFPGA上に多数のソフトマイクロプロセッサコアを配置しています。各「コア」はCPUコアと同様に 「半導体IPコア」とみなすことができます。
製造技術の向上により個々のゲートサイズが縮小する一方で、半導体ベースのマイクロエレクトロニクスの物理的限界が設計上の大きな懸念事項となっています。これらの物理的限界は、深刻な熱放散やデータ同期の問題を引き起こす可能性があります。CPUの性能向上のために、様々な手法が用いられています。スーパースカラーパイプラインなどの命令レベル並列処理(ILP)手法は多くのアプリケーションに適していますが、予測が困難なコードを含むアプリケーションには非効率的です。多くのアプリケーションはスレッドレベル並列処理(TLP)手法に適しており、システム全体のTLPを向上させるために複数の独立したCPUが一般的に使用されています。製造プロセスの改良による利用可能なスペースの増加とTLP増加の需要の組み合わせが、マルチコアCPUの開発につながりました。
1985年、アップルのエンジニアであるサム・ホランドは、将来のMacに搭載する独自の4プロセッサCPUチップ「Scorpius」を開発するようアップルを説得した。[ 12 ] [ 13 ]このプロセッサに提案された機能セットは非常に野心的で、4つのコアとプロセッサ間通信機能を備えたSIMD(ベクター)サポートが含まれていた。[ 14 ]この設計は当時の製造能力を超えていたため、プロジェクトは1989年に終了した。[ 15 ]
1990年代、クンレ・オルコトゥンはスタンフォード大学のHydraチップ・マルチプロセッサ(CMP)研究プロジェクトを主導しました。このプロジェクトは、複数のプロセッサを単一チップに統合するという概念の実現可能性を初めて実証したプロジェクトの一つであり、今日のマルチコアプロセッサの基礎を築きました。Hydraプロジェクトは、スレッドレベルの投機的処理(TLS)のサポートを導入し、プログラムのより効率的な並列実行を可能にしました。
マルチコアアーキテクチャの開発を牽引するビジネス上の動機はいくつかあります。数十年にわたり、集積回路(IC)の面積を縮小することでCPUの性能を向上させることが可能であり、IC上のデバイスあたりのコストを削減できました。あるいは、同じ回路面積でより多くのトランジスタを設計に使用できるようになり、特にCISC(複合命令セットコンピューティング)アーキテクチャにおいて機能性が向上しました。クロック周波数も20世紀後半の数十年間で桁違いに向上し、1980年代の数MHzから2000年代初頭の数GHzに達しました。
クロック速度の向上が鈍化するにつれ、全体的な処理性能の向上を目指して、マルチコアプロセッサによる並列コンピューティングの利用が拡大しました。複数のコアを同一のCPUチップ上に搭載することで、2コア以上のCPUチップの売上向上につながる可能性があります。例えば、インテルはクラウドコンピューティングの研究用に48コアプロセッサを開発しており、各コアはx86アーキテクチャを採用しています。[ 16 ] [ 17 ]
コンピュータ製造業者は長い間、個別の CPU を使用して対称型マルチプロセッシング(SMP) 設計を実装してきたため、マルチコア プロセッサ アーキテクチャの実装とソフトウェアによるサポートに関する問題はよく知られています。
さらに:
汎用プロセッサの継続的なパフォーマンス向上を実現するために、IntelやAMDなどのメーカーは、一部のアプリケーションやシステムにおいて、製造コストの削減と引き換えにパフォーマンス向上を実現すべく、マルチコア設計へと転換してきました。マルチコアアーキテクチャの開発は進む一方、代替アーキテクチャの開発も進んでいます。既存市場において特に有力な候補となるのは、周辺機能のチップへのさらなる統合です。
複数のCPUコアを同一ダイ上に近接配置することで、キャッシュコヒーレンシ回路は、信号をチップ外へ送る場合よりもはるかに高いクロックレートで動作できます。同等のCPUを単一ダイ上に統合することで、キャッシュスヌープ(別名:バススヌーピング)動作の性能が大幅に向上します。簡単に言えば、これは異なるCPU間の信号の移動距離が短くなり、信号劣化が少なくなることを意味します。これらの高品質な信号により、個々の信号の長さが短くなり、繰り返し回数が少なくなるため、一定時間内により多くのデータを送信できます。
ダイが物理的にパッケージに収まると仮定すると、マルチコアCPU設計では、マルチチップSMP設計よりもプリント基板(PCB)の面積が大幅に削減されます。また、デュアルコアプロセッサは、チップ外部の信号を駆動するために必要な電力が削減されるため、2つのシングルコアプロセッサを結合した場合よりも消費電力がわずかに少なくなります。さらに、コアはL2キャッシュやフロントサイドバス(FSB)へのインターフェースなど、一部の回路を共有しています。利用可能なシリコンダイ面積を巡る競合技術の観点から見ると、マルチコア設計では実績のあるCPUコアライブラリ設計を活用できるため、コアサイズがより大きな新しい設計を考案するよりも設計エラーのリスクが低い製品を開発できます。また、キャッシュメモリの拡張は、収益逓減の法則に影響を受けます。
マルチコアチップは、より少ない消費電力でより高い性能を実現します。これは、バッテリー駆動のモバイルデバイスにおいて大きな要素となり得ます。マルチコアCPUの各コアは一般的にエネルギー効率が高いため、単一の大きなモノリシックコアを搭載するよりもチップ全体の効率が向上します。これにより、より少ない消費電力でより高い性能が得られます。しかしながら、並列コード記述に伴う追加のオーバーヘッドが課題となります。[ 19 ]
マルチコアプロセッサが提供するコンピューティングリソースを最大限に活用するには、オペレーティングシステム(OS)のサポートと既存のアプリケーションソフトウェアの両方を調整する必要があります。また、マルチコアプロセッサがアプリケーションのパフォーマンスを向上させる能力は、アプリケーション内でのマルチスレッドの使用に依存します。
マルチコアチップを統合すると、チップの製造歩留まりが低下する可能性があります。また、低密度のシングルコア設計よりも熱管理が難しくなります。Intel は、統合キャッシュを備えた 1 つのダイ上に 2 つのデュアルコアを組み合わせたクアッドコア設計を作成することで、この最初の問題を部分的に解決しました。そのため、1 つのダイに 4 つのコアを製造し、4 つすべてを動作させてクアッドコア CPU を製造するのではなく、動作する任意の 2 つのデュアルコア ダイを使用できます。アーキテクチャの観点から見ると、最終的にはシングル CPU 設計の方がマルチプロセッシング コアよりもシリコンの表面積を有効活用できるため、このアーキテクチャに従って開発を進めると、陳腐化のリスクを伴う可能性があります。最後に、生の処理能力だけがシステム パフォーマンスの制約ではありません。同じシステム バスとメモリ帯域幅を共有する 2 つのプロセッシング コアは、現実世界でのパフォーマンスの利点を制限します。
プロセッサ開発の傾向は、コア数がますます増加する方向に向かっており、数百、あるいは数千のコアを持つプロセッサが理論的に可能となっている。[ 20 ]さらに、同時マルチスレッド、メモリオンチップ、および特殊用途の「異種」(または非対称)コアを組み合わせたマルチコアチップは、特にマルチメディア、認識、およびネットワークアプリケーションの処理において、さらなる性能と効率の向上を約束している。例えば、big.LITTLEコアは、高性能コア(「big」と呼ばれる)と低電力コア(「LITTLE」と呼ばれる)を含む。また、高度な細粒度または超細粒度の電力管理と動的な電圧および周波数スケーリング(すなわち、ラップトップコンピュータおよびポータブルメディアプレーヤー)を用いてワットあたりの性能に重点を置くことで、エネルギー効率を向上させる傾向もある。
最初から多数のコア向けに設計されたチップ(単一コア設計から進化したものではなく)は、質的な違いを強調して、 メニーコア設計と呼ばれることもあります。
マルチコアアーキテクチャにおけるコアの構成とバランスは多種多様です。1つのコア設計を一貫して繰り返すアーキテクチャ(「均質」)もあれば、異なる役割に最適化され、複数のコアを混在させる「異質」なアーキテクチャもあります。
複数のコアがどのように実装され統合されるかは、開発者のプログラミングスキルと、消費者のアプリやデバイスに対するインタラクションへの期待の両方に大きな影響を与えます。[ 21 ]オクタコアとして宣伝されているデバイスは、単に固定クロック速度の2組のクアッドコアではなく、真のオクタコアとして宣伝されている場合にのみ、独立したコアを備えています。[ 22 ] [ 23 ]
リック・メリットによるEE Times 2008の記事「CPU設計者がマルチコアの将来について議論」[ 24 ]には次のようなコメントが含まれています。
チャック・ムーアは、コンピューターは携帯電話のように、さまざまな特殊コアを使用して、高レベルのアプリケーションプログラミングインターフェイスによってスケジュールされたモジュール式ソフトウェアを実行するべきだと提案しました。
[...]ルネサスのシニアチーフエンジニアである長谷川篤氏も概ね同意した。彼は、携帯電話で多数の専用コアが協調して動作する仕組みは、将来のマルチコア設計の良いモデルになるだろうと示唆した。
[...]スタートアップ企業Tileraの創業者兼CEOであるアナント・アガルワル氏は、これとは反対の見解を示した。彼は、ソフトウェアモデルをシンプルに保つためには、マルチコアチップは汎用コアの均質な集合体である必要があると述べた。
古いバージョンのアンチウイルスアプリケーションは、スキャン処理のために新しいスレッドを作成する一方で、GUIスレッドはユーザーからのコマンド(スキャンのキャンセルなど)を待機することがあります。このような場合、単一のスレッドがすべての重い処理を実行し、複数のコア間で作業を均等に分散できないため、マルチコアアーキテクチャはアプリケーション自体にとってほとんどメリットがありません。真にマルチスレッド化されたコードのプログラミングでは、多くの場合、スレッド間の複雑な調整が必要となり、スレッド間で共有されるデータの処理が複雑に絡み合うため、発見が困難なバグが容易に発生する可能性があります(スレッドセーフティを参照)。その結果、このようなコードは、シングルスレッドコードよりもデバッグがはるかに困難になります。消費者レベルでは、コンピュータハードウェアを最大限に活用するという需要が比較的少ないため、消費者レベルのスレッドアプリケーションを作成するモチベーションが低いと認識されてきました。また、ビデオコーデックで使用されるエントロピー符号化アルゴリズムのデコードなどの逐次タスクは、生成された各結果がエントロピー復号アルゴリズムの次の結果の作成に使用されるため、並列化が不可能です。
プロセッサのクロック速度が今後大幅に向上すると、深刻な熱問題と消費電力問題が発生することから、マルチコアチップ設計の重要性が高まっています。そのため、これらの新しいチップを最大限に活用するためにソフトウェアをどの程度マルチスレッド化できるかが、将来のコンピュータパフォーマンスにおける最大の制約となる可能性が高いでしょう。開発者がマルチコアが提供するリソースを最大限に活用するソフトウェアを設計できない場合、最終的にはパフォーマンスの限界に達してしまうでしょう。
通信市場は、データパスと制御プレーンにマルチコアプロセッサが急速に導入されたため、並列データパスパケット処理の新しい設計を最初に必要とした市場の一つでした。これらのMPUは、独自のマイクロコードまたはピココードに基づく従来のネットワークプロセッサに取って代わることになります[ 25 ]。
並列プログラミング技術は、マルチコアの恩恵を直接受けることができます。Cilk Plus、OpenMP、OpenHMPP、FastFlow、Skandium、MPI、Erlangといった既存の並列プログラミングモデルは、マルチコアプラットフォームで使用できます。Intelは、C++並列処理のための新しい抽象化であるTBBを導入しました。その他の研究としては、Codeplay Sieve System、CrayのChapel、SunのFortress、IBMのX10などがあります。
マルチコア処理は、現代の計算ソフトウェア開発能力にも影響を与えています。新しい言語でプログラミングする開発者は、その最新言語がマルチコア機能をサポートしていないことに気付くかもしれません。そうなると、C#などの新しい言語よりも高速に数学計算を実行するCやFortranなどの言語で書かれたコードにアクセスするために数値ライブラリを使用する必要があります。IntelのMKLとAMDのACMLはこれらのネイティブ言語で書かれており、マルチコア処理の利点を活用しています。プロセッサ間でアプリケーションのワークロードを分散させることは、特にプロセッサのパフォーマンス特性が異なる場合は問題になることがあります。この問題に対処するための様々な概念モデルがあり、例えば、調整言語とプログラム構成要素(プログラミングライブラリまたは高階関数)を使用します。各構成要素は、プロセッサの種類ごとに異なるネイティブ実装を持つことができます。ユーザーはこれらの抽象化を使用してプログラミングするだけで、インテリジェントなコンパイラがコンテキストに基づいて最適な実装を選択します。[ 26 ]
並列アプリケーションの開発においては、同時実行性の管理が中心的な役割を果たします。並列アプリケーションを設計する基本的な手順は次のとおりです。
一方、サーバー側では、マルチコアプロセッサが理想的です。なぜなら、多数のユーザーが同時にサイトに接続し、独立した実行スレッドを持つことができるからです。これにより、Webサーバーとアプリケーションサーバーのスループットが大幅に向上します。
ベンダーによっては、一部のソフトウェアを「プロセッサ単位」でライセンス供与する場合があります。「プロセッサ」は単一のコアで構成される場合もあれば、複数のコアの組み合わせで構成される場合もあるため、この方法では曖昧さが生じる可能性があります。

組み込みコンピューティングは、「主流」のPCとは異なるプロセッサ技術の領域で動作します。マルチコア化に向けた同様の技術的推進力は、組み込みコンピューティングにも当てはまります。実際、タスクを複数のプロセッサ間で容易に分割できる場合、多くの場合、アプリケーションはマルチコア技術に「自然に」適合します。
さらに、組み込みソフトウェアは通常、特定のハードウェアリリース向けに開発されるため、ソフトウェアの移植性、レガシーコード、独立系開発者のサポートといった問題は、PCやエンタープライズコンピューティングの場合ほど重要ではありません。その結果、開発者は新しい技術を導入しやすくなり、マルチコア処理アーキテクチャやサプライヤーの多様性が高まります。
2010年現在、マルチコアネットワークプロセッサが主流となり、フリースケール・セミコンダクタ、カビウム・ネットワークス、Wintegra、ブロードコムなどの企業が8コアプロセッサを搭載した製品を製造している。システム開発者にとって重要な課題は、対称型マルチプロセッシング(SMP)オペレーティングシステムに固有のパフォーマンス制限にもかかわらず、これらのデバイスのすべてのコアを活用してシステムレベルで最大のネットワークパフォーマンスを達成する方法である。6WINDなどの企業は、ネットワークデータプレーンがネットワークデバイスのオペレーティングシステム外部の高速パス環境で動作するように設計されたポータブルなパケット処理ソフトウェアを提供している。[ 29 ]
デジタル信号処理においても同様の傾向が見られます。Texas Instrumentsは3コアのTMS320C6488と4コアのTMS320C5441、Freescaleは4コアのMSC8144と6コアのMSC8156をリリースしています(両社とも8コアの後継製品の開発を進めていると発表しています)。最近の製品としては、Stream Processors, Inc.のStorm-1ファミリーが挙げられます。これはチップあたり40個と80個の汎用ALUを搭載し、すべてSIMDエンジンとしてC言語でプログラム可能です。また、通信アプリケーションに特化したPicochipは、1つのダイに300個のプロセッサを搭載しています。
システムが複数種類のプロセッサまたはコアを使用するヘテロジニアスコンピューティングでは、マルチコアソリューションがますます一般的になりつつあります。Xilinx Zynq UltraScale+ MPSoCは、クアッドコアのARM Cortex-A53とデュアルコアのARM Cortex-R5を搭載しています。OpenAMPなどのソフトウェアソリューションは、プロセッサ間通信を支援するために使用されています。
モバイル デバイスでは、ARM big.LITTLEアーキテクチャが使用される場合があります。
マルチコアプロセッサの研究開発では、多くの選択肢を比較することが多く、そのような評価を支援するためにベンチマークが開発されています。既存のベンチマークとしては、SPLASH-2、PARSEC、そしてヘテロジニアスシステム向けのCOSMICなどがあります。[ 53 ]
。Galaxyスマートフォンは、オクタコア(2.3GHzクアッド+1.6GHzクアッド)またはクアッドコア(2.15GHz+1.6GHzデュアル)プロセッサを搭載しています。