3 マルチコアプロセサはどのようになっているのか?

この仕事はこのコアで実行しなければならないというような制約があると、空いているコアがあっても、それが実行できるプロセスが無いということが起こる。しかし、すべてのコアが共通メモリにアクセスできるという構造であると、メモリ上にあるプロセスはどのコアでも実行させることができる。つまり、空いているコアがあればどの仕事でも割り当てることができ、容易にすべてのコアを利用することができる。このため、マルチコアプロセサは、共通メモリをアクセスできる図3.1のような構成になっているものが一般的である。

プロセサコアとそのコアだけが使用するプライベート(Private)キャッシュは、シングルコアのプロセサの設計と同じであり、1組を設計し、それを必要個数並べればマルチコアになる。しかし、マルチコアプロセサの場合は、共通メモリを実現するため、プロセサコア間と全コアで共有するシェアード(Shared)キャッシュやチップ外のメインメモリやI/Oを接続するインタコネクト機構を作る必要がある。

図3.1 マルチコアプロセサの構成

マルチコアチップのすべてのコアはメモリを共有し、どのコアもメモリに書き込みを行うことができ、その書き込まれたデータはどのコアでも読むことができるという図3.1のような構成を「Symmetric Multi-Processor(SMP)」と呼ぶ。

全コアが同じプログラムでスレッド並列の処理を行うというケースは、SMPならばプログラムを格納するメモリ領域は1つ有れば全コアで共用できるし、各コアの処理結果もメモリに書かれるので、他のコアがその結果を読んで次の処理を始めるという複数コアの共同作業も簡単に実行できる。

共通のメモリを持たず、コア間で通信用のバッファメモリを設けたり、LANのような通信路を設けたりしてプロセサコア間でメッセージを送るという通信方法も考えられるが、SMPのようなプログラムメモリの共用はできないし、処理結果もメッセージとして明示的にそのデータを必要とするコアに送ってやる必要があり、プログラム的にも面倒であり、転送時間も掛る。このため、一般に、マルチコアプロセサチップの内部では全コアが共通のメモリをアクセスできるSMP構造が用いられる。

また、サーバ用のマルチコアプロセサでは、複数のマルチコアチップを共有メモリに接続し、複数チップにまたがるSMPを構成する機能を持っているのが普通である。