


マルチコアプロセッサ( MCP ) は、単一の集積回路(IC) 上に、2 つ以上の独立した中央処理装置(CPU)を備えたマイクロプロセッサです。これらの CPU は、その多重性を強調するためにコアと呼ばれます(たとえば、デュアルコアまたはクアッドコア)。各コアは、プログラム命令( [ 1 ]特に通常のCPU 命令(加算、データ移動、分岐など) を読み込んで実行します。ただし、MCP は、複数のコアで同時に命令を実行できるため、マルチスレッドやその他の並列コンピューティング技術をサポートするプログラムの全体的な速度が向上します。[ 2 ]メーカーは通常、チップマルチプロセッサ( CMP )と呼ばれる単一の ICダイにコアを統合するか、単一のチップパッケージ内の複数のダイに統合します。2024 年現在、ほぼすべての新しいパーソナルコンピュータで使用されているマイクロプロセッサはマルチコアです。
マルチコアプロセッサは、単一の物理パッケージ内でマルチプロセッシングを実現します。設計者は、マルチコアデバイス内のコアを密接に結合することも、疎に結合することもできます。たとえば、コアはキャッシュを共有する場合と共有しない場合があり、メッセージパッシングまたは共有メモリによるコア間通信方式を実装する場合があります。コアを相互接続するために使用される一般的なネットワークトポロジには、バス、リング、2次元メッシュ、クロスバーなどがあります。同種マルチコアシステムには同一のコアのみが含まれます。異種マルチコアシステムには同一ではないコアが含まれます(たとえば、big.LITTLEは同じ命令セットを共有する異種コアを持ち、AMD Accelerated Processing Unitは同じ命令セットを共有しないコアを持ちます)。シングルプロセッサシステムと同様に、マルチコアシステムのコアは、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コアであると同時に「半導体知的財産コア」とみなすことができます。
製造技術の向上により個々のゲートのサイズは縮小しているものの、半導体ベースのマイクロエレクトロニクスの物理的な限界が設計上の大きな懸念事項となっている。これらの物理的な限界は、大きな放熱問題やデータ同期の問題を引き起こす可能性がある。CPU のパフォーマンスを向上させるために、さまざまな方法が用いられている。スーパースカラパイプラインなどの命令レベル並列処理(ILP) 手法は多くのアプリケーションに適しているが、予測困難なコードを含むアプリケーションには非効率的である。多くのアプリケーションはスレッドレベル並列処理(TLP) 手法により適しており、システムの全体的な TLP を向上させるために複数の独立した CPU が一般的に使用されている。製造プロセスの洗練による利用可能なスペースの増加と TLP 向上への需要が相まって、マルチコア CPU の開発につながった。
1985年、Appleのエンジニアであるサム・ホランドは、将来のMacに搭載する独自の4プロセッサCPUチップ「Scorpius」を開発するようAppleを説得した[ 12 ] [ 13 ] 。このプロセッサの提案された機能セットは非常に野心的で、4つのコアとSIMD(ベクトル)サポート、プロセッサ間通信機能などが含まれていた[ 14 ] 。当時の製造能力を超えた設計であったため、このプロジェクトは1989年に終了した[ 15 ]。
1990年代、クンレ・オルコトゥンはスタンフォード大学のハイドラ・チップ・マルチプロセッサ(CMP)研究プロジェクトを率いました。このプロジェクトは、複数のプロセッサを単一チップ上に統合することの実現可能性を実証した最初の取り組みの一つであり、今日のマルチコアプロセッサの基礎を築きました。ハイドラ・プロジェクトはスレッドレベル投機(TLS)のサポートを導入し、プログラムのより効率的な並列実行を可能にしました。
マルチコアアーキテクチャの開発を推進するビジネス上の動機はいくつかある。数十年にわたり、集積回路(IC)の面積を縮小することでCPUの性能を向上させ、IC上のデバイスあたりのコストを削減することが可能だった。あるいは、同じ回路面積でより多くのトランジスタを設計に組み込むことで、特に複雑命令セットコンピューティング(CISC)アーキテクチャにおいて機能性を向上させることができた。クロック周波数も20世紀後半の数十年間で桁違いに上昇し、1980年代の数メガヘルツから2000年代初頭の数ギガヘルツへと達した。
クロック速度の向上ペースが鈍化するにつれて、全体的な処理性能を向上させるために、マルチコアプロセッサの形で並列コンピューティングの利用が拡大されてきた。同じCPUチップ上に複数のコアが使用されるようになり、2つ以上のコアを持つCPUチップの販売促進につながる可能性がある。例えば、Intelはクラウドコンピューティングの研究用に48コアプロセッサを開発した。各コアはx86アーキテクチャを採用している。[ 16 ] [ 17 ]
コンピュータメーカーは長年にわたり、個別のCPUを用いた対称型マルチプロセッシング(SMP)設計を実装してきたため、マルチコアプロセッサアーキテクチャの実装とソフトウェアによるサポートに関する課題はよく知られている。
さらに:
汎用プロセッサの性能向上を継続的に実現するため、インテルやAMDなどのメーカーはマルチコア設計を採用し、一部のアプリケーションやシステムにおいて、製造コストの削減と引き換えに高い性能を実現している。マルチコアアーキテクチャの開発は進められているが、代替案も開発されている。特に既存市場において有力な候補となっているのは、周辺機能をチップにさらに統合することである。
同一ダイ上に複数のCPUコアが近接して配置されているため、キャッシュコヒーレンシ回路は、信号がチップ外を伝送される場合よりもはるかに高いクロックレートで動作できます。同等のCPUを単一のダイ上に統合することで、キャッシュスヌープ(別名:バススヌープ)処理のパフォーマンスが大幅に向上します。簡単に言えば、これは異なるCPU間の信号伝送距離が短くなり、信号の劣化が少なくなることを意味します。信号品質が向上することで、個々の信号が短くなり、繰り返し伝送する必要が少なくなるため、一定時間内に送信できるデータ量が増加します。
ダイが物理的にパッケージに収まることを前提とすると、マルチコアCPU設計は、マルチチップSMP設計よりもプリント基板(PCB)のスペースをはるかに少なく必要とします。また、デュアルコアプロセッサは、主にチップ外部の信号を駆動するために必要な電力が減少するため、2つのシングルコアプロセッサを組み合わせた場合よりも消費電力がわずかに少なくなります。さらに、コアはL2キャッシュやフロントサイドバス(FSB)へのインターフェースなど、一部の回路を共有します。利用可能なシリコンダイ面積をめぐる競合技術の観点から見ると、マルチコア設計は実績のあるCPUコアライブラリ設計を活用でき、新しいより広いコア設計を考案するよりも設計エラーのリスクが低い製品を製造できます。また、キャッシュを増やしても、効果は逓減します。
マルチコアチップは、より低いエネルギーでより高いパフォーマンスを実現する。これは、バッテリーで動作するモバイルデバイスにとって大きな要素となる。マルチコアCPUの各コアは一般的にエネルギー効率が高いため、単一の大きなモノリシックコアを持つよりもチップの効率が高くなる。これにより、より少ないエネルギーでより高いパフォーマンスを実現できる。ただし、この方法の課題は、並列コードを記述するための追加のオーバーヘッドである。[ 19 ]
マルチコアプロセッサが提供するコンピューティングリソースを最大限に活用するには、オペレーティングシステム(OS)のサポートと既存のアプリケーションソフトウェアの両方を調整する必要があります。また、マルチコアプロセッサによるアプリケーションパフォーマンスの向上は、アプリケーション内でのマルチスレッドの利用状況にも左右されます。
マルチコアチップの統合は、チップの生産歩留まりを低下させる可能性があります。また、低密度のシングルコア設計よりも熱管理が困難です。インテルは、2つのデュアルコアを1つのダイに統合し、キャッシュを統合することでクアッドコア設計を作成し、この最初の問題を部分的に解決しました。これにより、1つのダイに4つのコアを生成し、4つすべてが動作して初めてクアッドコアCPUになるのではなく、動作する2つのデュアルコアダイを使用できます。アーキテクチャの観点からは、最終的には、シングルCPU設計の方がマルチプロセッシングコアよりもシリコン表面積をより有効に活用できる可能性があるため、このアーキテクチャの開発に注力すると、陳腐化のリスクが伴う可能性があります。最後に、システムパフォーマンスの制約は、生の処理能力だけではありません。2つのプロセッシングコアが同じシステムバスとメモリ帯域幅を共有すると、実際のパフォーマンス上の利点が制限されます。
プロセッサ開発のトレンドは、コア数がますます増加する方向に向かっており、数百または数千のコアを持つプロセッサが理論的に可能になっています。[ 20 ]さらに、同時マルチスレッド、オンチップメモリ、および特殊用途の「異種」(または非対称)コアを組み合わせたマルチコアチップは、特にマルチメディア、認識、およびネットワークアプリケーションの処理において、さらなるパフォーマンスと効率の向上を約束します。たとえば、big.LITTLEコアは、高性能コア(「big」と呼ばれる)と低消費電力コア(「LITTLE」と呼ばれる)で構成されています。また、高度なきめ細かいまたは超きめ細かい電力管理と動的な電圧および周波数スケーリング(ラップトップコンピュータやポータブルメディアプレーヤーなど)により、ワットあたりのパフォーマンスに焦点を当ててエネルギー効率を向上させる傾向もあります。
最初から多数のコアを搭載するように設計されたチップ(シングルコア設計から発展したものではない)は、質的な違いを強調するために、マルチコア設計と呼ばれることがある。
マルチコアアーキテクチャにおけるコアの構成とバランスは、非常に多様である。一部のアーキテクチャは、同一のコア設計を一貫して繰り返し使用する(「均質」)一方、他のアーキテクチャは、それぞれ異なる役割に最適化された複数の異なるコアを組み合わせて使用する(「異質」)。
複数のコアの実装と統合方法は、開発者のプログラミングスキルと、デバイスに対するアプリとインタラクティビティに対する消費者の期待の両方に大きな影響を与えます。[ 21 ]オクタコアとして宣伝されているデバイスは、固定クロック速度を持つクアッドコアの 2 セットだけではなく、 「真のオクタコア」または同様のスタイルで宣伝されている場合にのみ、独立したコアを備えています。[ 22 ] [ 23 ]
Rick MerrittによるEE Times 2008の記事「CPU設計者がマルチコアの未来について議論」[ 24 ]には、次のようなコメントが含まれています。
チャック・ムーアは、コンピュータは携帯電話のように、さまざまな専用コアを使用して、高レベルのアプリケーションプログラミングインターフェースによってスケジュールされたモジュール型ソフトウェアを実行するべきだと提案した。
[...]ルネサスのシニアチーフエンジニアである長谷川篤氏も概ね同意した。同氏は、携帯電話が多数の特殊コアを連携させて使用していることは、将来のマルチコア設計の良いモデルになると示唆した。
[...]スタートアップ企業Tileraの創業者兼最高経営責任者であるAnant Agarwal氏は反対の見解を示した。同氏は、ソフトウェアモデルをシンプルに保つためには、マルチコアチップは汎用コアの均質な集合体である必要があると述べた。
古いバージョンのウイルス対策アプリケーションでは、スキャン処理用に新しいスレッドが作成され、GUIスレッドはユーザーからのコマンド (スキャンのキャンセルなど) を待機します。このような場合、単一のスレッドがすべての重い処理を実行し、複数のコア間で作業を均等に分散できないため、マルチコア アーキテクチャはアプリケーション自体にはほとんどメリットがありません。真のマルチスレッド コードをプログラミングするには、スレッドの複雑な調整が必要になることが多く、スレッド間で共有されるデータの処理が相互に絡み合うため、微妙で見つけにくいバグが容易に発生する可能性があります (スレッド セーフティを参照)。したがって、このようなコードは、シングル スレッド コードよりも、エラーが発生した場合のデバッグがはるかに困難です。コンシューマー レベルのコンピュータ ハードウェアを最大限に活用したいという需要が比較的まれであるため、コンシューマー レベルのスレッド アプリケーションを作成する動機が不足しているという認識がありました。また、ビデオ コーデックで使用されるエントロピー エンコードアルゴリズムのデコードなどのシリアル タスクは、生成された各結果がエントロピー デコード アルゴリズムの次の結果を作成するのに役立つため、並列化できません。
プロセッサのクロック速度をさらに大幅に上げると、深刻な熱問題や消費電力の問題が生じるため、マルチコアチップ設計への注目が高まっている。こうした状況を踏まえると、ソフトウェアをマルチスレッド化してこれらの新しいチップの性能を最大限に活用できるかどうかが、将来のコンピュータ性能における最大の制約要因となる可能性が高い。開発者が複数のコアが提供するリソースを最大限に活用できるソフトウェアを設計できなければ、最終的には克服不可能な性能の限界に達してしまうだろう。
通信市場は、データパスと制御プレーンにこれらのマルチコアプロセッサが非常に急速に採用されたため、並列データパスパケット処理の新しい設計が必要となった最初の市場の1つでした。これらの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年現在マルチコアネットワークプロセッサは主流となり、 Freescale Semiconductor、Cavium Networks、Wintegra、Broadcomなどの企業が8つのプロセッサを搭載した製品を製造しています。システム開発者にとって重要な課題は、対称型マルチプロセッシング(SMP)オペレーティングシステムに内在するパフォーマンスの制限にもかかわらず、これらのデバイスのすべてのコアを活用してシステムレベルで最大のネットワークパフォーマンスを実現することです。6WINDなどの企業は、ネットワークデータプレーンがネットワークデバイスのオペレーティングシステムとは別の高速パス環境で実行されるように設計されたポータブルパケット処理ソフトウェアを提供しています。[ 29 ]
デジタル信号処理においても同様の傾向が見られます。テキサス・インスツルメンツは3コアのTMS320C6488と4コアのTMS320C5441を、フリースケールは4コアのMSC8144と6コアのMSC8156をそれぞれ提供しており(両社とも8コアの後継機種を開発中であると発表しています)、さらに新しい製品としては、Stream Processors社のStorm-1ファミリー(チップあたり40個と80個の汎用ALUを搭載し、すべてC言語でSIMDエンジンとしてプログラム可能)や、通信アプリケーションに特化した1つのダイ上に300個のプロセッサを搭載したPicochipなどがあります。
異種混在コンピューティング、つまりシステムが複数の種類のプロセッサやコアを使用する環境では、マルチコアソリューションがますます一般的になっています。例えば、ザイリンクスの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デュアルコア)プロセッサのいずれかで動作します。