(57)【特許請求の範囲】
【請求項１】
タスクを複数実行可能なマルチコアプロセッサであって、
少なくとも第１のコアと第２のコアとレイテンシを要因とする処理の実効効率の第１の低下度及び記憶容量を要因とする前記処理の実効効率の第２の低下度のうち少なくとも一つに基づいて前記第１のコアおよび前記第２のコアのいずれかに前記処理を割り当てるスケジューラとを具備し、
前記第１のコアと前記第２のコアは共有メモリ領域にアクセス可能であり、
前記第１のコアは前記共有メモリ領域へのアクセス経路に１つ以上のメモリ階層を備え、該１つ以上のメモリ階層は前記第１のコアのローカルメモリを備え、
前記第１のコアのローカルメモリは第１の不揮発メモリを備え、
前記第２のコアは前記共有メモリ領域へのアクセス経路に１つ以上のメモリ階層を備え、該１つ以上のメモリ階層は前記第２のコアのローカルメモリを備え、
前記第１のコアのローカルメモリと前記第２のコアのローカルメモリは、少なくとも１つの互いに同一のメモリ階層において、互いに単位セル構成が異なるメモリを備えることを特徴とするマルチコアプロセッサ。
【請求項２】
前記第１のコアと前記第２のコアが同一の命令セットを備えることを特徴とする請求項１記載のマルチコアプロセッサ。
【請求項３】
前記第１のコアと前記第２のコアが異なる命令セットを備えることを特徴とする請求項１記載のマルチコアプロセッサ。
【請求項４】
前記第１のコアは、プログラムの実行速度、単位時間あたりの消費電力および動作周波数において前記第２のコアと同一であることを特徴とする請求項２記載のマルチコアプロセッサ。
【請求項５】
前記第１のコアは、プログラムの実行速度、単位時間あたりの消費電力および動作周波数のうち少なくとも１つにおいて前記第２のコアと異なることを特徴とする請求項２記載のマルチコアプロセッサ。
【請求項６】
前記少なくとも１つの互いに同一のメモリ階層において、
前記第２のコアのローカルメモリは揮発メモリを備えることを特徴とする請求項１、４または５記載のマルチコアプロセッサ。
【請求項７】
前記少なくとも１つの互いに同一のメモリ階層において、
前記第２のコアのローカルメモリは第２の不揮発メモリを備え、
前記第１の不揮発メモリと前記第２の不揮発メモリは互いに異なる特徴を有する論理回路を備えることを特徴とする請求項１、４または５記載のマルチコアプロセッサ。
【請求項８】
前記第１の不揮発メモリはＭＲＡＭ（Ｍａｇｎｅｔｉｃ  Ｒａｎｄｏｍ−Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）であり、
前記揮発メモリはＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）であることを特徴とする請求項６記載のマルチコアプロセッサ。
【請求項９】
請求項１記載のマルチコアプロセッサの制御方法であって、
前記スケジューラは、
前記第１のコアと前記第２のコアのいずれか一方に処理を割り当てるステップと、
前記処理の実行効率に基づいて、前記第１のコアおよび前記第２のコアの他方に処理の割り当てを変更可能とするステップと、
を実行する制御方法。
【請求項１０】
請求項１記載のマルチコアプロセッサの制御方法であって、
前記スケジューラは、
前記第１のコアと前記第２のコアそれぞれに処理を実行させるステップと、
前記第１のコアにおける前記処理の実効効率を示す第１の指標と、前記第２のコアにおける前記処理の実効効率を示す第２の指標とを計測するステップと、
前記第１の指標と前記第２の指標の比較結果に基づいて前記第１のコアと前記第２のコアのいずれか一方に前記処理を割り当てるステップと、を実行する制御方法。
【請求項１１】
前記第１の低下度及び前記第２の低下度のうち少なくとも一つを計測するステップと、
前記第１の低下度と前記処理の割り当てを変更する閾値との比較結果、或いは前記第２の低下度と前記処理の割り当てを変更する閾値との比較結果に応じて、または前記第１の低下度と前記第２の低下度の差の絶対値が前記処理の割り当てを変更する閾値を超える場合に、前記処理の割り当てを変更するステップと、をさらに含む請求項９記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、マルチコアプロセッサおよび制御方法に関する。
【背景技術】
【０００２】
近年、ＭＲＡＭ（Magnetic Random-Access Memory）のような不揮発メモリが注目されている。プロセッサのキャッシュメモリに一般的に用いられる揮発メモリ（例えばＳＲＡＭ（Static RAM））を不揮発メモリに置き換えることで、リーク電力の低減と、プロセッサ非動作時の細度な電源遮断による消費電力の削減とを期待することができる。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】X. Wu, J. Li, L. Zhang, E. Speight, R. Rajamony, and Y. Xie. Hybrid Cache Architecture with Disparate Memory Technologies. In Proceedings of the International Symposium on Computer Architecture, 2009
【非特許文献２】G. Sun, X. Dong, Y. Xie, J. Li, and Y. Chen. A novel architecture of the 3D stacked MRAM L2 cache for CMPs. In High Performance Computer Architecture, pages 239-249, Feb. 2009
【発明の概要】
【発明が解決しようとする課題】
【０００４】
一方、不揮発メモリは、揮発メモリと比較して一般的にレイテンシが大きくアクセス電力も大きい。このような性質から、揮発メモリを不揮発メモリに単に置き換えるだけでは、性能低下やアクセス電力増加といった問題が顕在化する。
【課題を解決するための手段】
【０００５】
実施形態によれば、同一のダイ内に第１のコアと第２のコアとを備えるマルチコアプロセッサが提供される。該マルチコアプロセッサは、前記第１のコアと第２のコアとが共有する共有メモリ領域と前記第１のコアとの間に設けられる少なくとも１つの第１のローカルメモリと、前記共有メモリ領域と前記第２のコアとの間に設けられ、前記第１のローカルメモリとは単位セル構成が異なる少なくとも１つの第２のローカルメモリと、実行効率に基づいて前記第１のコアおよび前記第２のコアのいずれかに処理を割り当てるスケジューラと、を具備する。
【図面の簡単な説明】
【０００６】
【図１】実施形態１に係るマルチコアプロセッサを示すブロック図。
【図２】実施形態１に係る第１のコアのＬ２キャッシュを示す図。
【図３】実施形態１に係る第２のコアのＬ２キャッシュを示す図。
【図４】実施形態１に係る処理管理部を示す図。
【図５】実施形態１に係るコア情報テーブルを示す図。
【図６】実施形態１に係る処理情報テーブルを示す図。
【図７】実施形態１に係る処理に対する静的な情報付与方法の例を示す図。
【図８】実施形態１に係る処理情報テーブルを示す図。
【図９】実施形態１に係る処理のコア割り当て方法を示す図。
【図１０】実施形態１に係る処理情報テーブルを示す図。
【図１１】実施形態１に係る処理情報テーブルを示す図。
【図１２】実施形態１に係る処理情報テーブルを示す図。
【図１３】実施形態１に係る処理情報テーブルを示す図。
【図１４】実施形態１に係る処理情報テーブルを示す図。
【図１５】実施形態１に係る処理情報テーブルを示す図。
【図１６】実施形態１に係る処理情報テーブルを示す図。
【図１７】実施形態２に係るマルチコアプロセッサを示すブロック図。
【図１８】実施形態３に係るマルチコアプロセッサを示すブロック図。
【図１９】実施形態４に係るマルチコアプロセッサを示すブロック図。
【図２０】実施形態１に係る第１のコアのＬ２キャッシュの別の例を示す図。
【図２１】実施形態１に係る第２のコアのＬ２キャッシュの別の例を示す図。
【発明を実施するための形態】
【０００７】
以下の実施形態では、マルチコアプロセッサの構成例について示す。実施形態に係るマルチコアプロセッサは、演算を実行するコアを１つのダイ内に複数備える。これらのコアは共有メモリ領域にアクセス可能であって、それぞれのコアは共有メモリ領域へのアクセス経路に、ローカルメモリを含む少なくとも１つのメモリ階層を有する。実施形態に係るマルチコアプロセッサでは、同一階層の少なくとも２つのローカルメモリが、単位セル構成が異なるメモリで構成される。
【０００８】
上記「コア」とは、命令単位で演算を実行する演算装置を指す。「命令」とは、コアが計算可能な種類の演算を定義した機能を指し、「命令セット」とは、コアが実行可能な命令群を指す。
【０００９】
上記「共有メモリ領域」とは、複数のコアが共有するメモリ領域であって、異なるコアから同一のデータにアクセス可能なメモリ領域を指す。例えば、主記憶装置は共有メモリ領域である。
【００１０】
上記「メモリ階層」とは、共有メモリ領域のデータを記憶可能であってコアからのアクセス速度が異なるメモリ群を指す。例えば、レジスタ、Ｌ１キャッシュ、Ｌ２キャッシュで構成されるメモリ群はメモリ階層である。
【００１１】
上記「同一階層のメモリ」とは、コアからの論理的な距離が等しいメモリを指す。例えば、第１のコアと第２のコアの２つのコアを備え、それら各々がＬ１キャッシュとＬ２キャッシュを備える構成において、第１のコアのＬ１キャッシュと第２のコアのＬ１キャッシュは同一階層のメモリであり、第１のコアのＬ２キャッシュと第２のコアのＬ２キャッシュもまた同一階層のメモリである。第１のコアのＬ１キャッシュと第２のコアのＬ２キャッシュは同一階層のメモリではない。これら、Ｌ１キャッシュ・Ｌ２キャッシュ・Ｌ３キャッシュは、それぞれ、物理的に異なるメモリであってもよいし、物理的なメモリを論理的に分割したメモリ領域であってもよい。
【００１２】
上記「ローカルメモリ」とは、あるコアが他のコアよりも高速にアクセス可能なメモリ領域を指す。
【００１３】
上記「単位セル構成が異なるメモリ」とは、一部もしくはすべてのメモリセルにおいて、情報を記憶する物理原理に相違点があるメモリ、もしくは、トランジスタレベルの回路に相違点があるメモリを指す。例えば、揮発メモリと不揮発メモリは単位セル構成が異なるメモリである。具体例としては、ＳＲＡＭとＭＲＡＭは揮発メモリと不揮発メモリであり、単位セル構成が異なるメモリである。同じ不揮発メモリであっても、ＭＲＡＭとＲｅＲＡＭ（Resistance Random-Access Memory）や、ＭＲＡＭとＰＲＡＭ（Phase change RAM）は単位セル構成が異なるメモリである。また、ＳＲＡＭであっても、６トランジスタＳＲＡＭと８トランジスタＳＲＡＭは単位セル構成が異なるメモリである。一方、情報を記憶する物理原理およびトランジスタレベルの回路は同じであり、かつ、容量やレイテンシ等が異なる２つのメモリは単位セル構成が異なるメモリではない。同様に、物理レベルでのみ相違点があるメモリは単位セル構成が異なるメモリではない。例えば、同じ６トランジスタＳＲＡＭであるが利用する製造プロセスのみが異なる２つのメモリはこれに該当する。
【００１４】
（実施形態１）  
［メモリ構成］  
図１に示すように、実施形態１に係るマルチコアプロセッサは、ダイ１０内に第１のコア１００および第２のコア２００を備える。第１のコア１００と第２のコア２００が備える命令セットは、同一であってもよいし、異なっていてもよい。第１のコア１００はローカルメモリとしてＬ１命令キャッシュ１０１と、Ｌ１データキャッシュ１０２と、Ｌ２キャッシュ１０３とを備える。第２のコア２００はローカルメモリとしてＬ１命令キャッシュ２０１と、Ｌ１データキャッシュ２０２と、Ｌ２キャッシュ２０３とを備える。また、本実施形態に係るマルチコアプロセッサは、第１のコア１００と第２のコア２００で共有されるＬ３キャッシュ４００を備える。第１のコア１００のＬ２キャッシュ１０３がバス３００を介してＬ３キャッシュ４００に接続され、第２のコア２００のＬ２キャッシュ２０３がバス３００を介してＬ３キャッシュ４００に接続される。本実施形態では、Ｌ１キャッシュが、命令を格納するＬ１命令キャッシュとデータを格納するＬ１キャッシュとに分割される例を示したが、１つのＬ１キャッシュが命令とデータの両方を格納してもよい。
【００１５】
第１のコア１００および第２のコア２００は、いずれもＬ１命令キャッシュ（１０１，２０１）とＬ１データキャッシュ（２０１，２０２）に揮発メモリであるＳＲＡＭを利用し、共有するＬ３キャッシュ４００に不揮発メモリであるＭＲＡＭを利用する。
【００１６】
また、第１のコア１００はＬ２キャッシュ１０３にＭＲＡＭを利用し、第２のコア２００はＬ２キャッシュ２０３にＳＲＡＭを利用する。第１のコア１００は、同コアからＬ３キャッシュ４００までの経路がＳＲＡＭ（Ｌ１キャッシュ１０１，１０２）→ＭＲＡＭ（Ｌ２キャッシュ１０３）→ＭＲＡＭ（Ｌ３キャッシュ４００）であるのに対して、第２のコア２００はＳＲＡＭ（Ｌ１キャッシュ２０１，２０２）→ＳＲＡＭ（Ｌ２キャッシュ２０３）→ＭＲＡＭ（Ｌ３キャッシュ４００）である。このように、第１のコア１００と第２のコア２００は単位セル構成が異なるメモリ構成である。
【００１７】
なお、本実施形態では、単位セル構成が異なるメモリとしてＭＲＡＭとＳＲＡＭを想定したが、このような異なるメモリはＭＲＡＭとＳＲＡＭの組み合わせに限定されない。単位セル構成が異なるメモリであれば、任意のメモリの組み合わせとしてもよい。また、Ｌ２キャッシュ以外の階層のメモリや構成は本実施形態に限定されるものではない。例えば、Ｌ１キャッシュがＳＲＡＭではなくＭＲＡＭであってもよいし、Ｌ３キャッシュがＭＲＡＭではなくＳＲＡＭであってもよい。また、バスを利用する位置も図１に限定されるわけではない。例えば、Ｌ３キャッシュを保持せず、バスが直接主記憶と接続されている構成でも良い。バスがＬ１キャッシュとＬ２キャッシュの間にあってもよいし、図１のバス３００が無い構成でも良い。
【００１８】
なお、説明の簡単化のため、図１では第１のコア１００のＬ２キャッシュ１０３の全体がＭＲＡＭで構成されており、第２のコア２００のＬ２キャッシュ２０３の全体がＳＲＡＭで構成されているように図示されているが、必ずしもそのような構成でなくてもよい。つまり、第１のコア１００と第２のコア２００のＬ２キャッシュを構成するメモリの一部において、「単位セル構成が異なるメモリ」が用いられていればよい。一例として、図２および図３に、第１のコア１００および第２のコア２００のそれぞれのＬ２キャッシュの詳細な構成を示す。一般的に、キャッシュメモリはタグメモリアレイとラインメモリアレイという２つのメモリアレイで構成される。タグメモリアレイはキャッシュメモリに保持しているデータのアドレス情報を格納するメモリである。ラインメモリアレイはキャッシュメモリに保持しているデータを格納するメモリである。コントローラは、これら２つのメモリアレイへのデータの格納、参照、消去等を管理する情報処理装置である。
【００１９】
図２に示すように、第１のコア１００のＬ２キャッシュ１０３において、タグメモリアレイ１０５にＳＲＡＭを利用し、ラインメモリアレイ１０６にＭＲＡＭを利用する。また図３に示すように、第２のコア２００のＬ２キャッシュ２０３において、タグメモリアレイ２０５にＳＲＡＭを利用し、ラインメモリアレイ２０６にもＳＲＡＭを利用する。このような第１のコア１００および第２のコア２００のＬ２キャッシュ１０３および２０３は、「単位セル構成が異なるメモリ」が用いられた構成に該当する。
【００２０】
図２０に示すように、第１のコア１００のＬ２キャッシュ１０３において、タグメモリアレイ１０５にＳＲＡＭを利用し、一部のラインメモリアレイ１０６にＭＲＡＭを利用し、残りのラインメモリアレイ１０６にＳＲＡＭを利用する。また図２１に示すように、第２のコア２００のＬ２キャッシュ２０３において、タグメモリアレイ２０５にＳＲＡＭを利用し、ラインメモリアレイ２０６にもＳＲＡＭを利用する。このような第１のコア１００および第２のコア２００のＬ２キャッシュ１０３および２０３は、「単位セル構成が異なるメモリ」が用いられた構成に該当する。
【００２１】
もちろん、第１のコア１００のＬ２キャッシュ１０３のタグメモリアレイ１０５およびラインメモリアレイ１０６にＭＲＡＭを利用し、第２のコア２００のＬ２キャッシュ２０３のタグメモリアレイ２０５およびラインメモリアレイ２０６にＳＲＡＭを利用してもよい。
【００２２】
［ハードウェア制御方式］  
図１に示すマルチコアプロセッサのハードウェア制御方式は、コヒーレンシに関して特定の制御方式に限定されない。例えば、第１のコア１００と第２のコア２００のローカルメモリについて、ハードウェアでコヒーレンシを維持してもよいし、ソフトウェアでコヒーレンシを維持してもよいし、コヒーレンシを維持する場合は、例えば、ＭＥＳＩ（Modified Exclusive Shared Invalid）プロトコルを利用してもよいし、ＭＯＥＳＩ（Modified Owner Exclusive Shared Invalid）プロトコルを利用してもよい。例えば、上位キャッシュと下位キャッシュ間のデータ保持方式は、ライトスルーであってもよいし、ライトバックであってもよい。例えば、データをフィルする際の方式はライトアロケートであってもよいし、ノンライトアロケートであってもよい。また、第１のコア１００と第２のコア２００のローカルメモリについて、コヒーレンシを維持しなくてもよい。
【００２３】
図１に示すマルチコアプロセッサを構成するモジュールそれぞれにおいて、データを参照する際の制御方式は、特定の制御方式に限定されない。一例として、図２に示す第１のコア１００のＬ２キャッシュ１０３を用いて説明する。データを参照する際の制御方式の選択肢として、例えば逐次方式と並行方式とがある。逐次方式は、タグメモリアレイ１０５にアクセスして所望のデータが格納されているかチェックしたうえでラインメモリアレイ１０６にアクセスする方式である。並行方式は、タグメモリアレイ１０５とラインメモリアレイ１０６に同時にアクセスし、タグメモリアレイ１０５へのアクセス結果から、所望のデータが格納されていることが判明した場合にのみラインメモリアレイ１０６のアクセス結果を利用する方式である。このような方式はどのようなものが利用されてもよい。前述の例のような第１のコア１００および第２のコア２００の制御方式や、Ｌ１命令キャッシュ、Ｌ１データキャッシュ、Ｌ２キャッシュ、Ｌ３キャッシュの制御方式、ならびにバスの制御方式は任意である。
【００２４】
［ソフトウェア制御方式］  
図４に示される処理管理部２０は、処理に関する情報の管理や、図１に示される第１のコア１００および第２のコア２００に対する処理の割り当てを行う。「処理」とは、２つ以上の命令からなる命令列を指し、例えば、プロセスやスレッドや基本ブロックなどである。処理管理部２０は、スケジューラ２３、処理情報テーブル２１、コア情報テーブル２２、インタフェース部２４を持つ。処理管理部２０は主にソフトウェアで実装されるが、一部もしくはすべてがハードウェアで実装されてもよい。
【００２５】
処理情報テーブル２１は処理毎の情報を記録するテーブルであり、コア情報テーブル２２はコア毎の情報を記録するテーブルである。インタフェース部２４はハードウェア（マルチコアプロセッサ１０）との情報交換を行う入出力機能を担う。スケジューラ２３は処理情報テーブル２１とコア情報テーブル２２の情報をもとに、インタフェース部２４を介して処理をハードウェア（マルチコアプロセッサ１０のいずれかのコア）に割り当てる。また、スケジューラ２３はインタフェース部２４を介しハードウェアからの情報を受け取り、処理情報テーブル２１およびコア情報テーブル２２の内容を更新する。
【００２６】
処理管理部２０がソフトウェアで実装されてもよく、そのプログラムが図１の第１のコア１００もしくは第２のコア２００で実行されてもよいし、第１のコア１００と第２のコア２００以外の演算装置で実行されてもよい。また、処理管理部２０がハードウェアで実装されてもよい。
【００２７】
図１の構成に適用されるコア情報テーブル２２の例を図５に示す。コアＩＤの項目にコアを識別する情報が記録される。本実施形態では、第１のコア１００がＩＤ１であり、第２のコア２００がＩＤ２であるものとする。また、ローカルメモリ記録方式にコアローカルなメモリの種類が記録される。第１のコア１００にはローカルメモリにＭＲＡＭが用いられているため、ＭＲＡＭであることを識別可能な情報（本例では文字列「ＭＲＡＭ」）が記録される。第２のコア２００にはローカルメモリにＳＲＡＭが用いられているため、ＳＲＡＭであることを識別可能な情報（本例では文字列「ＳＲＡＭ」）が記録される。
【００２８】
本実施形態では、コアローカルなメモリの種類を文字列で表現してこれを記録することとしたが、スケジューラ２３がコアの特徴を識別可能な情報であれば、文字列に限らない。例えば、ＭＲＡＭが値「１」に対応し、ＳＲＡＭに値「２」が対応することを仕様としてあらかじめ決めておく。コア情報テーブル２２において、コアＩＤ１のローカルメモリ記録方式として「１」を、コアＩＤ２のローカルメモリ記録方式として「２」を記録してもよい。図５の例では、コア情報テーブル２２にローカルメモリ記録方式のみを情報として記録することを想定したが、それ以外の情報が記録されてもよい。例えば、動作周波数などのコアの演算能力が記録されてもよい。
【００２９】
コアに処理を割り当てる（スケジューリングする）には、幾つかの方法が考えられる。本実施形態では、実行前付与情報に基づいて静的にスケジューリングを行う方法（１）と、実行効率の観点から動的にスケジューリングを行う２つの方法（（２）および（３））と、これら３つの方法を組み合わせた方法（４）の例について説明する。
【００３０】
なお、スケジューリング方法はこれらに限定されない。例えば、消費電力の観点からスケジューリングを行ってもよいし、プロセッサの温度の観点からスケジューリングを行なってもよいし、性能、消費電力、温度等の様々な観点を組み合わせてスケジューリングを行ってもよい。
【００３１】
図１のマルチコアプロセッサにおいて、性能の観点から処理の効率的な割り当てを行う際には以下のような難しさがある。
【００３２】
一般的に、ＭＲＡＭはＳＲＡＭと比較してレイテンシは大きい（低速である）が、単位面積あたりの記憶容量（以下、単に「容量」という）は大きい。一方、ＳＲＡＭはＭＲＡＭと比較してレイテンシは小さい（高速である）が、単位面積あたりの容量は小さい。つまり、第１のコア１００のＬ２キャッシュ１３０と第２のコア２００のＬ２キャッシュ２０３とをダイ１０上に同一面積で配置した場合、これら２種類のメモリはレイテンシと容量がトレードオフ関係にある。したがって、ある処理を実行する場合、どちらのメモリをもつコア（第１のコア１００と第２のコア２００のいずれか）で実行効率が高くなるかは実行する処理の特徴によって異なる。理想的には、レイテンシよりも容量（キャッシュミス）が実行効率に大きな影響を与える処理が第１のコア１００に割り当てられ、容量よりもレイテンシが実行効率に大きな影響を与える処理が第２のコア２００に割り当てられることが望ましい。
【００３３】
（１）実行前付与情報に基づく割り当て
プログラムの実行開始前に処理のコア割り当て情報が指定され、これに基づく処理属性に応じてスケジューラ２３がコアに対する処理の割り当てを行う方法について述べる。図６は、処理に対する実行前付与情報をもとに処理管理部２０が生成する処理情報テーブル２１の例を示したものである。処理ＩＤは処理を識別する一意な識別子であり、処理属性が処理を割り当てるべきコアの情報である。処理管理部２０は、処理に対応付けられた実行前付与情報を読み込み、処理ＩＤ  ０ｘ１の処理の処理属性には文字列ＭＲＡＭを記録し、処理ＩＤ  ０ｘ１２の処理の処理属性には文字列ＳＲＡＭを記録する。なお、処理属性「ＭＲＡＭ」は、対象の処理をＭＲＡＭのローカルメモリを備えたコアに割り当てるべきであることを表し、処理属性「ＳＲＡＭ」は、対象の処理をローカルメモリにＳＲＡＭを備えたコアに割り当てるべきであることを示す情報であるものとする。
【００３４】
本実施形態では、割り当てるべきコアの情報を文字列で表現したが、スケジューラ２３が割り当てるべきコアを判別可能な情報であればどのような形式であってもよい。例えば、ＭＲＡＭをローカルメモリ持つコアに割り当てるべき処理属性が値「１」に対応し、ＳＲＡＭをローカルメモリに持つコアに割り当てるべき処理属性に値「２」に対応することを仕様としてあらかじめ決めておく。処理ＩＤｘ１の処理属性として値「１」を、処理ＩＤｘ１２の処理属性として値「２」を記録してもよい。あるいは、これらの値の代わりにコアＩＤを記録してもよい。
【００３５】
処理への実行前付与情報の指定方法としては、どのコアに割り当てるべき処理であるかという情報を処理管理部２０が識別可能である限り、任意である。例えば、プログラマがプログラム記述時に情報を付与し、そのプログラムをコンパイルすることで実行前付与情報をバイナリに埋め込む方法が考えられる。また、前回の実行時に割り当てるべきコアの情報を処理情報テーブル２１に記録しておいてもよい。プログラム記述時の情報の付与方法としては、例えば図７のように、新しいプロセスを生成する際に、ＭＲＡＭのローカルメモリを持つコアに割り当てるべき処理であることを示す処理属性「ＭＲＡＭ」を引数として指定する方法が考えられる。この場合、処理管理部２０は、該プログラムをコンパイルしたバイナリをロードし、ｆｏｒｋ（）関数の引数を読み取り、処理情報テーブル２１にｆｏｒｋ（）で生成される処理（プロセス）の処理ＩＤと処理属性である「ＭＲＡＭ」を登録すればよい。このような処理属性の指定方法および指定を行う主体には他にも様々なバリエーションが考えられる。指定方法については、例えば、プログラム起動時にＯＳのコンソール等から情報を付与することが考えられる。また、指定を行う主体については、例えば、コンパイラ等のプログラム静的解析機能をもつツールが自動で処理属性を指定してもよい。
【００３６】
スケジューラ２３はまず処理情報テーブル２１を参照して、対象処理はどのようなメモリ（処理属性）を持つコアに割り当てるべきであるかの情報を得る。例えば、処理ＩＤ０ｘ１を割り当てる際に、スケジューラ２３は図６の処理情報テーブル２１の内容から、当該処理はＭＲＡＭのローカルメモリを持つコアに割り当てるべきことを把握する。次に、スケジューラ２３はＭＲＡＭのローカルメモリを持つコアの情報を得るため、図５のコア情報テーブル２２を参照する。これにより、スケジューラ２３はコアＩＤ１のコアがＭＲＡＭのローカルメモリを備えていることを把握する。最後に、スケジューラ２３はインタフェース部２４を介し、処理ＩＤ０ｘ１の処理をコアＩＤ１のコア（図１における第１のコア１００）に割り当てる。
【００３７】
なお、スケジューラ２３は処理属性に厳格に従ってコアに処理を割り当てなくてもよい。例えば、処理を割り当てようとするコアで既に別の処理が実行中である場合が考えられる。このような場合には、負荷均衡の観点から、処理属性で指定されていないコアに処理が割り当てられてもよい。
【００３８】
（２）実行効率の情報に基づく処理割り当て
処理実行前に処理への情報付与が行われていない場合などにおいて、処理の実行中に何らかの別の情報に基づいて動的に処理の割り当てを行う。ここでは、実行効率の情報に基づいて、スケジューラ２３が処理割り当てを行う方法を示す。
【００３９】
「実行効率」は、あるコアにおける処理の実行効率を表すことが可能な任意の情報である。本実施形態では、実行効率として例えばＩＰＣ（１クロックあたりの命令実行数）を利用する。なお、実行効率としてはＩＰＣに限らず他の様々な指標が利用可能である。例えばＩＰＳ（１秒当たりの命令実行数）、実行クロックサイクル数、消費電力、単位消費電力あたりの性能などを実行効率を表す情報としてもよい。
【００４０】
図１に示されるマルチコアプロセッサにおいて、処理に対する静的な情報付与が行われていない場合、スケジューラ２３は第１のコア１００と第２のコア２００のどちらに処理を割り当てるべきか判断することができない。本実施形態では、初期の処理割り当てをＭＲＡＭのローカルメモリをもつコア（ここでは第１のコア１００）とする例を示す。なお、初期の処理割り当てをＳＲＡＭのローカルメモリを持つコア（ここでは第２のコア２００）としてもよい。
【００４１】
まず、スケジューラ２３はＭＲＡＭのローカルメモリをもつコアであるコアＩＤ１に処理を割り当てる。コアＩＤ１に該当する第１のコア１００は割り当てられた処理の実行を開始する。
【００４２】
スケジューラ２３はトリガイベント発生時パフォーマンスカウンタ等で実行情報の取得を開始する。次のトリガイベント発生時にパフォーマンスカウンタ等で計測された情報をもとに、ＩＰＣの値を図８に示した処理情報テーブル２１の「ＩＤ１コアのＩＰＣ」の項目に記録する。なお、トリガイベントはスケジューラ２３が検知できるものであればどのようなものでも良い。例えば、プロセスの開始／終了、スレッドの開始／終了、割り込み、特別な命令の実行などでもよい。一定サイクル数毎にトリガイベントが発生してもよい。次に、スケジューラ２３はコアＩＤ１に割り当てた処理をコアＩＤ２に割り当てる。コアＩＤ２に該当する第２のコア２００は割り当てられた処理の実行を開始する。トリガイベント発生時にパフォーマンスカウンタ等で実行情報の取得を開始する。次のトリガイベントが発生すると、スケジューラ２３はパフォーマンスカウンタ等で計測された情報をもとに第２のコア２００におけるＩＰＣの値を処理情報テーブル２１の「ＩＤ２コアのＩＰＣ」の項目に記録する。
【００４３】
さらに次のトリガイベントが発生すると、スケジューラ２３は処理情報テーブル２１に記録されている「ＩＤ１コアのＩＰＣ」と「ＩＤ２コアのＩＰＣ」の大小比較を行い、数字が大きい方のコアに処理を移動する。例えば、図８の処理ＩＤ０ｘ１については、「ＩＤ１コアのＩＰＣ」の方が大きいため第１のコア１００に処理を移動する。図８の処理ＩＤ０ｘ１２については、「ＩＤ２コアのＩＰＣ」の方が大きいため、処理は移動せずそのまま第２のコア２００での実行を継続する。
【００４４】
（３）実行効率低下度の情報に基づく割り当て
(２)実行効率の情報に基づく処理割り当て に記載したＩＰＣの情報に基づく処理割り当てと同様に、処理の実行中に動的な処理割り当てを行う別の方法を示す。図１のようなアーキテクチャでは、処理管理部２０が初期の処理割り当てが、第１のコア１００（ＭＲＡＭのローカルメモリをもつ）である場合と、第２のコア２００（ＳＲＡＭのローカルメモリをもつ）である場合とが考えられる。まず、初期の処理割り当てが第１のコア１００（ＭＲＡＭコア）である場合の動的な処理割り当てを説明し、次に、初期の処理割り当てが第２のコア２００（ＳＲＡＭコア）である場合の動的な処理割り当てを説明する。
【００４５】
［初期ＭＲＡＭコア割り当ての例］  
処理の初期割り当てが第１のコア１００（ローカルメモリがＭＲＡＭであるコア）である場合の動的な処理割り当て（スケジューリング）を図９のフローチャートを参照しながら説明する。
【００４６】
まず、スケジューラ２３はインタフェース部２４を介して第１のコア１００に処理を割り当てる。第１のコア１００は処理を実行し、レイテンシ実行効率低下度とキャッシュミス実行効率低下度をそれぞれ計測する（ステップＳ１）。レイテンシ実行効率低下度とは、コアから要求されるデータが対象のメモリに存在した場合に、コアが要求を発行してからデータがコアに転送されるまでの時間により、コアの実行効率が低下する度合いである。キャッシュミス実行効率低下度とは、コアから要求されるデータが対象のメモリに存在しなかった場合、すなわちキャッシュミスの場合に、コアが要求を発行してからデータがコアに転送されるまでの時間により、コアの実行効率が低下する度合いである。
【００４７】
なお、本実施形態の場合では「対象のメモリ」はＬ２キャッシュである。また、「実行効率低下度」は、コアの実行効率が低下する度合いを数値で表す。実行効率低下度は、例えば全実行時間に占めるコアのストール時間の割合でもよいし、コアのストール時間（例えば、実時間やクロックサイクル数）でもよいし、コア内に存在する演算器の不利用率でもよい。なお、ここでの時間とは、時刻のような単位で計測してもよいし、クロックサイクル数のようなコア内の事象の単位で計測してもよい。これらの情報は、パフォーマンスカウンタ等によってコアのストールサイクル数を計測する方法が最も直接的である。しかし、このような機能をもつパフォーマンスカウンタが存在しない場合には、それ以外のパフォーマンスカウンタの情報を用いて近似的に算出してもよい。レイテンシ実行効率低下度は、例えば、命令あたりの対象のメモリへのヒット数から算出してもよい。キャッシュミス実行効率低下度は、例えば、命令あたりのキャッシュミス数から算出してもよい。
【００４８】
このような方法で取得された情報は、インタフェース部２４を介しスケジューラ２３がハードウェアから情報を取得する。スケジューラ２３は、図１０に示すように、処理ＩＤ毎に処理情報テーブル２１にレイテンシ実行効率低下度とキャッシュミス実行効率低下度を記録する。これらの情報を本実施形態では自然数で記録することとしたが、スケジューラ２３が大小を識別可能な形式であればどのようなものでも良い。例えば、小数であってもよいし、文字列であってもよい。また、処理情報テーブル２１には、レイテンシ実行効率低下度とキャッシュミス実行効率低下度が記録されることとしたが、それ以外の情報が記録されてもよい。例えば、ＩＰＣや処理の実行時間が記録されてもよい。
【００４９】
スケジューラ２３はトリガイベント発生時に、ステップＳ１で計測された情報をもとに、レイテンシ実行効率低下度とキャッシュミス実行効率低下度の２つの大小判定を行う（ステップＳ２）。トリガイベントはスケジューラ２３が検知できるものであればどのようなものでも良い。例えば、プロセスの開始／終了、スレッドの開始／終了、割り込み、特別な命令の実行などでもよい。一定時間ごとの命令でも良いし、一定命令数毎の命令でも良い。一定サイクル数毎にトリガイベントが発生してもよい。処理情報テーブル２１のレイテンシ実行効率低下度とキャッシュミス実行効率低下度はトリガイベント発生時に記録されているものとして例示したが、トリガイベントと同時に記録してもよいし、トリガイベント以前に適宜記録してもよい。また、トリガイベント発生時にレイテンシ実行効率低下度とキャッシュミス実行効率低下度の大小を比較しているが、処理情報テーブル２１に記録する段階で大小を記録しておいてもよい。例えば、レイテンシ実行効率低下度をキャッシュミス実行効率低下度で減算するというポリシであれば、結果が負の数であればキャッシュミス実行効率低下度が大きいことが判別可能であり、結果が正の数であればレイテンシ実行効率低下度が大きいことが判別可能である。
【００５０】
ステップＳ２での大小判定の結果、図１０の処理ＩＤ  ０ｘ１のようにキャッシュミス実行効率低下度が大きい場合には、スケジューラ２３は現在実行中のコアよりも大容量のローカルメモリを持つコアが存在するかについてコア情報テーブル２２をチェックする（ステップＳ３）。この例の場合、第１のコア１００（ＭＲＡＭ）より大容量のローカルメモリを持つコアは存在しないため、処理のコア割り当ては変更しない。本例のように、コア割り当てを変更する選択肢がないことが既知の場合にはステップＳ３を省略してもよい。
【００５１】
一方、ステップＳ２での大小判定の結果、図１０の処理ＩＤ  ０ｘ４０のようにレイテンシ実行効率低下度が大きい場合には、スケジューラ２３は現在実行中のコアよりレイテンシの小さいローカルメモリを持つコアが存在するかについてコア情報テーブル２２をチェックする（ステップＳ７）。この場合、レイテンシの小さいローカルメモリ（ＳＲＡＭ）を持つ第２のコア２００が存在するため、差異度の算出を行う（ステップＳ８）。例えば、レイテンシ実行効率低下度からキャッシュミス実行効率低下度の減算を行い、９３０という自然数を得る。差異度の算出はステップＳ２の大小判定と同時に行ってもよい。差異度はレイテンシ実行効率低下度とキャッシュミス実行効率低下度の差の程度を表すものであればよい。差異度は、クロックサイクル数、実時間、あるいは処理の実行時間に対する割合であってもよい。次に、スケジューラ２３は、ステップＳ８で算出された差異度とコア変更閾値（本実施形態ではコア変更閾値が２００であるものとする）とを比較する（ステップＳ９）。差異度がコア変更閾値よりも大きい場合には、第１のコア１００で実行中の処理をインタフェース部２４を介して第２のコア２００に移動する。すなわち、処理が割り当てられるコアが変更される。処理の移動の手段は、一般的にはＯＳのスケジューラ２３によるマイグレーションが考えられる。しかし、コア間で処理を移動する手段は特に限定されない。例えば、ハードウェアで実装された処理移動手段であってもよい。また、マイグレーションは如何なるタイミングで行ってもよい。前記の例のようにトリガイベントと同時に行ってもよいし、ＯＳによるコンテキストスイッチのタイミングで行なってもよいし、それ以外でも良い。
【００５２】
なお、コア変更閾値とは、処理のコア移動の容易性を調節するためのパラメータである。コア変更閾値は、例えば、事前に与えられたパラメータでもよいし、処理のコア移動に伴うオーバヘッドから算出してもよいし、トリガイベントの時間間隔に対するレイテンシ実行効率低下度やキャッシュミス実行効率低下度の支配率から算出してもよい。例えば、ステップＳ２での大小判定の結果、図１０の処理ＩＤ  ０ｘ８０のようにレイテンシ実行効率低下度が高い場合でも、その差異度は５３でありコア変更閾値２００を超えないため、処理のコア移動は行わない。
【００５３】
［初期ＳＲＡＭコア割り当ての例］  
処理の初期割り当てが第２のコア２００（ローカルメモリがＳＲＡＭであるコア）である場合の動的な処理割り当て（スケジューリング）を図９のフローチャートに沿って説明する。なお、以下に記載する語句の定義や設計のバリエーションは前述した初期ＭＲＡＭコア割り当ての例と同様である。
【００５４】
まず、スケジューラ２３はインタフェース部２４を介し処理を第２のコア２００に割り当てる。第２のコア２００は処理を実行し、レイテンシ実行効率低下度とキャッシュミス実行効率低下度をそれぞれ計測する（ステップＳ１）。
【００５５】
スケジューラ２３は、図１１に示すように、処理を識別可能なＩＤ毎に、処理情報テーブル２１にレイテンシ実行効率低下度とキャッシュミス実行効率低下度を記録する。
【００５６】
スケジューラ２３はトリガイベント発生時に、ステップＳ１で計測された情報をもとに、レイテンシ実行効率低下度とキャッシュミス実行効率低下度の２つの大小判定を行う（ステップＳ２）。
【００５７】
ステップＳ２での大小判定の結果、図１１の処理ＩＤ  ０ｘ１００のようにレイテンシ実行効率低下度が大きい場合、スケジューラ２３は現在実行中のコアよりも小さなレイテンシのローカルメモリを持つコアが存在するかについてコア情報テーブル２２をチェックする（ステップＳ３）。この例の場合、第２のコア２００のローカルメモリ（ＳＲＡＭ）よりもレイテンシが小さいローカルメモリを持つコアは存在しないため、処理のコア割り当ては変更しない。本例のように、コア割り当てを変更する選択肢がないことが既知の場合にはステップＳ３を省略してもよい。
【００５８】
一方、ステップＳ２での大小判定の結果、図１１の処理ＩＤ  ０ｘ１４０のように、キャッシュミス実行効率低下度が大きい場合には、スケジューラ２３は現在実行中のコアよりも大容量のローカルメモリを持つコアが存在するかについてコア情報テーブル２２をチェックする（ステップＳ３）。この場合、ローカルメモリ大容量のローカルメモリ（ＭＲＡＭ）を持つ第１のコア１００が存在するため、差異度の算出を行う（ステップＳ４）。例えば、キャッシュミス実行効率低下度からレイテンシ実行効率低下度の減算を行い、差異度として１６９０という自然数を得る。差異度の算出はステップＳ２の大小判定と同時に行ってもよい。スケジューラ２３は、ステップＳ５で算出された差異度とコア変更閾値（本例では２００であるものとする）を比較する（ステップＳ５）。ここでは差異度が大きいため、第２のコア２００で実行中の処理をインタフェース部２４を介して第１のコア１００に移動する（ステップＳ６）。
【００５９】
なお、ステップＳ２での大小判定の結果、図１１の処理ＩＤ  ０ｘ１８０のようにレイテンシ実行効率低下度が大きい場合でも、その差異度は８０でありコア変更閾値２００を超えないため、処理のコア割り当て変更は行わない。
【００６０】
このような(３)実行効率低下度の情報に基づく割り当て は、より単純な形態をとることも可能である。前述した例では、レイテンシ実行効率低下度とキャッシュミス実行効率低下度という２つの実行効率情報と閾値とを用いたが、どちらか１つの実行効率と閾値のみでも制御が可能である。その例を以下に示す。
【００６１】
[初期ＭＲＡＭコア割り当ての例]では、例えば、レイテンシ実行効率低下度のみを計測し、それが閾値以上であれば、ＳＲＡＭコアへと処理を再割り当てする方式が考えられる。これは、図９の制御方式において、キャッシュミス実行効率低下度を０と固定した場合と同等の制御である。
【００６２】
［初期ＳＲＡＭコア割り当ての例］では、例えば、キャッシュミス実行効率低下度のみを計測し、それが閾値以上であればＭＲＡＭコアへと処理の再割り当てをする方式が考えられる。これは、図９の制御方式において、レイテンシミス実行効率低下度を０と固定した場合と同等の制御である。
【００６３】
このような制御を行う場合、図１０と図１１の処理情報テーブルは、レイテンシ実行効率低下度とキャッシュミス実行効率低下度のどちらか一方を記録するテーブルとなっていてもよい。
【００６４】
（４）組み合わせによる処理割り当て
図１のマルチコアプロセッサを対象として、上記（１）〜（３）の組み合わせによるスケジューリングを行ってもよい。本スケジューリングの概要は以下とおりである。
【００６５】
（概要手順１）上記（３）のスケジューリングを行い、処理のコア割り当て変更を行う必要がない場合は、実行中のコアのローカルメモリを処理属性として処理情報テーブル２１に記録し、下記（概要手順３）へ進む。処理のコア割り当て変更を行う場合は下記（概要手順２）へ進む。
【００６６】
（概要手順２）割り当て変更前のコアのＩＰＣと、割り当て変更後のコアのＩＰＣをそれぞれ計測する。これらＩＰＣの計測結果に基づいて、上記（２）のスケジューリングを行って最適なコアを特定する。特定された最適なコアのローカルメモリを処理属性として処理情報テーブル２１に記録する。
【００６７】
（概要手順３）２回目以降の処理の実行は、処理属性が記録されていれば、その情報をもとに上記（１）のスケジューリングを行う。
【００６８】
本スケジューリングのアルゴリズムの詳細を図１２のフローチャートに示す。説明を簡単化するため、上記（３）の例で述べた処理が終了した直後であるステップＳ１４以降を重点的に説明する。ここでは、ＭＲＡＭのローカルメモリをもつ第１のコア１００に初期の処理割り当てを行うポリシを例として用いる。
【００６９】
本例に用いる処理情報テーブル２１を図１３に示す。同図のように、本例に用いる処理情報テーブル２１は、処理ＩＤ毎に、上記（１）のスケジューリングで用いた処理属性と、上記（２）のスケジューリングで用いたＩＤ１コアのＩＰＣおよびＩＤ２コアのＩＰＣと、上記（３）のスケジューリングで用いたレイテンシ実行率低下度およびキャッシュミス実行率低下度の項目を持つ。
【００７０】
処理の実行開始時において、スケジューラ２３は図１３の処理情報テーブル２１の処理属性の項目をチェックする（ステップＳ１）。この時点では情報が登録されていないため、第１のコア１００に処理割り当てを行う。図１４は、トリガイベントが発生した時の状態である。スケジューラ２３は、上記（３）のスケジューリングに用いるレイテンシ実行効率低下度およびキャッシュミス実行効率低下度に加えて、上記（２）のスケジューリングに用いる第１のコア１００での実行時のＩＰＣを処理情報テーブル２１に記録する（ステップＳ２）。
【００７１】
上記（３）の例で示したように、処理０ｘ１についてはコアの割り当て変更を行う必要が無いため、処理の移動は行わず、第１のコア１００の実行を継続する。この場合は、処理属性に第１のコア１００のローカルメモリの情報を示す「ＭＲＡＭ」を記録する。同様に、処理０ｘ８０もコアの割り当て変更を行う必要は無いが、キャッシュミス実行効率低下度と比較してレイテンシ実行効率低下度が非常に大きいわけではなく、第１のコア１００に適している処理という判断も行えないため、処理属性には情報を登録しない。処理０ｘ４０はコアの割り当て変更が必要であるため、処理属性への記録は行わずコアの割り当て変更を行う。ここまでの手順を終えた処理情報テーブル２１を図１５に示す。なお、ここまでの制御に関しても、(３)実行効率低下度の情報に基づく割り当て と同様、より単純な形態をとることも可能である。例えば、レイテンシ実行効率低下度と閾値のみを利用し、コアの割り当て変更を判断してもよい。
【００７２】
処理０ｘ４０の処理は、コアの割り当て変更の後、第２のコア２００で実行が開始される。スケジューラ２３はトリガイベントを検知すると、処理０ｘ４０の処理について、第２のコア２００による実行時のＩＰＣを計測して処理情報テーブル２１に記録する（ステップＳ１４）。
【００７３】
なお、第２のコア２００でのＩＰＣは２．２であったものとする。同時に、スケジューラ２３はＩＤ１コアのＩＰＣである１．５とＩＤ２コアのＩＰＣである２．２の大小比較を行う（ステップＳ１５）。この例では、ＩＤ２コアのＩＰＣが大きいことから、コア割り当ての変更は必要ないものと判断する。スケジューラ２３は、処理属性を第２のコア２００のローカルメモリの情報であるＳＲＡＭを処理ＩＤ０ｘ４０の処理属性に記録する。ここまでの手順を終えた処理情報テーブル２１を図１６に示す。一方、ステップＳ１５の判定において、ＩＰＣの差異が閾値以上である場合には、この閾値よりもＩＰＣが大きい方のコアを最適コアとして記録し、該最適コアに処理を割り当てる（ステップＳ１５，Ｓ１６）。
【００７４】
処理ＩＤ０ｘ１や処理ＩＤ０ｘ４０の処理を再度実行する場合には、上記（１）のスケジューリングを行うことが出来る。スケジューラ２３は、図１６の処理情報テーブル２１の処理属性の項目をチェックし（ステップＳ１）、処理０ｘ１と０ｘ４０はそれぞれ第１のコア１００と第２のコア２００に割り当てが行われる（ステップＳ１６）。このような方法で、処理の適切なコアへの割り当てが実現できる。
【００７５】
スケジューラ２３は、上記のような方法で適切なコアを決定した後も、実行中のコアでのＩＰＣの計測をトリガイベント毎に実施してもよい（ステップＳ１７）。スケジューラ２３は、処理情報テーブル２１に記録されている前トリガイベント発生時のＩＰＣと、現トリガイベント発生時のＩＰＣを比較し（ステップＳ１８）、ＩＰＣ閾値以上に変化があった場合は処理の特性が変化したものと判断し、再び適切なコアを選択するスケジューリングを実施する（上記（３）→（２）→（１）の順序でスケジューリングを実施する）。ＩＰＣを計測している間、処理の特性変化に備えてレイテンシ実行効率低下度とキャッシュミス実行効率低下度を計測し続けてもよいし、処理の特性変化を検知した後で計測を再開してもよい。
【００７６】
なお、必ずしも上記（１）〜（４）のスケジューリングのポリシに厳密に従って処理のコア割り当てを行わなくてもよい。例えば、上記（１）〜（４）のスケジューリングで処理を割り当てようとするコアにおいて、既に処理が実行中である場合が考えられる。このような場合には、負荷均衡などの他の観点も考慮し、上記（１）〜（４）のスケジューリングで判断されたコア以外に処理を割り当ててもよいし、コアへの処理割り当てを延期してもよいし、コアへの処理割り当てを中止してもよい。このようなスケジューリングは、上記（１）〜（４）のスケジューリングと付加均衡を目的としたスケジューリング技術との組み合わせで実現可能である。
【００７７】
（実施形態２）
実施形態１では、異種メモリ構成をＬ２キャッシュに適用する例を示した。実施形態２では、異種メモリ構成をＬ１キャッシュに適用する例を示す。
【００７８】
図１７は、実施形態２に係るマルチコアプロセッサを示している。Ｌ２キャッシュ１０３および２０３、ならびにＬ３キャッシュ４００にＭＲＡＭを利用しているが、これらについてはどのようなメモリが利用されてもよい。例えば、Ｌ２キャッシュ１０３および２０３がＤＲＡＭやＳＲＡＭであってもよいし、Ｌ３キャッシュ４００がＤＲＡＭやＳＲＡＭであってもよい。
【００７９】
実施形態２において、ダイ３０内に設けられる第１のコア１００のＬ１キャッシュ１０７および１０８にＭＲＡＭを利用し、第２のコア２００のＬ１キャッシュ２０７および２０８にＳＲＡＭを利用する。第１のコア１００については、同コアからＬ３キャッシュ４００までの経路がＭＲＡＭ（Ｌ１キャッシュ１０７および１０８）→ＭＲＡＭ（Ｌ２キャッシュ１０３）→ＭＲＡＭ（Ｌ３キャッシュ４００）である。一方、第２のコア２００については、同コアからＬ３キャッシュ４００までの経路がＳＲＡＭ（Ｌ１キャッシュ２０７および２０８）→ＭＲＡＭ（Ｌ２キャッシュ２０３）→ＭＲＡＭ（Ｌ３キャッシュ４００）である。このように、第１のコア１００と第２のコア２００は、単位セル構成が異なるメモリ構成となっている。
【００８０】
図１７に示す実施形態２では、第１のコア１００のＬ１キャッシュ１０７および１０８の全体がＭＲＡＭで構成されており、第２のコア２００のＬ１キャッシュ２０７および２０８の全体がＳＲＡＭで構成されているように図示されているが、必ずしもそのような構成でなくてもよい。つまり、第１のコア１００と第２のコア２００のそれぞれのＬ１キャッシュを構成するメモリの一部において単位セル構成が異なるメモリが用いられていればよい。例えば、第１のコア１００のＬ１命令キャッシュ１０７にＭＲＡＭを利用し、Ｌ１データキャッシュ１０８にＳＲＡＭを利用し、第２のコア２００のＬ１キャッシュ２０７および２０８の全体にＳＲＡＭを利用してもよい。あるいは、第１のコア１００のＬ１命令キャッシュ１０７にＳＲＡＭを利用し、Ｌ１データキャッシュ１０８にＭＲＡＭを利用し、第２のコア２００のＬ１キャッシュ２０７および２０８の全体にＳＲＡＭを利用してもよい。
【００８１】
本実施形態のマルチコアプロセッサのハードウェア制御方法は実施形態１と同様であっても良い。また、ソフトウェア制御方法についても実施形態１と同様に上記（１）〜（４）のスケジューリングが利用可能であるが、これらの方式に限定されるものではない。
【００８２】
（実施形態３）  
実施形態１および実施形態２では、コアが均一なマルチコアプロセッサの実施形態を示した。実施形態３では、コアが不均一なマルチコアプロセッサの実施形態を示す。
【００８３】
図１８は、実施形態３に係るマルチコアプロセッサを示している。ダイ４０内に設けられる第１のコア５００と、同一のダイ４０内に設けられる第２のコア６００は、同一の命令セットを備えるが、第１のコア５００と第２のコア６００は性能が異なる。コアの性能とは、コアの性質を示す定量値を指す。例えば、プログラムの実行速度や、単位時間当たりの消費電力がコアの性能であるといえる。より具体的な例としては、コアの演算器の数やメモリサイズ等から判断可能である。本実施形態では、コアの性能は例えばコアの動作周波数である。また、第１のコア５００の動作周波数は、第２のコア６００の動作周波数よりも低いものとする。
【００８４】
図１８に示すように、Ｌ２キャッシュ５０３および６０３、ならびにＬ３キャッシュ４００にＭＲＡＭを利用するものとするが、これらキャッシュとしてどのようなメモリが利用されてもよい。例えば、Ｌ２キャッシュ５０３および６０３がＤＲＡＭやＳＲＡＭであってもよいし、Ｌ３キャッシュ４００がＤＲＡＭやＳＲＡＭであってもよい。また、第１のコア５００のＬ１キャッシュ５０１および５０２にＭＲＡＭを利用し、第２のコア６００のＬ１キャッシュ６０１および６０２にＳＲＡＭを利用している。
【００８５】
第１のコア５００は、同コアからＬ３キャッシュ４００までの経路がＭＲＡＭ（Ｌ１キャッシュ５０１および５０２）→ＭＲＡＭ（Ｌ２キャッシュ５０３）→ＭＲＡＭ（Ｌ３キャッシュ４００）であるのに対して、第２のコアは、同コアからＬ３キャッシュ４００までの経路がＳＲＡＭ（Ｌ１キャッシュ６０１および６０２）→ＭＲＡＭ（Ｌ２キャッシュ６０３）→ＭＲＡＭ（Ｌ３キャッシュ４００）である。このように、第１のコア５００と第２のコア６００は、単位セル構成が異なるメモリ構成となっている。
【００８６】
図１８に示す実施形態３では、第１のコア５００のＬ１キャッシュ５０１および５０２の全体がＭＲＡＭで構成されており、第２のコア６００のＬ１キャッシュ６０１および６０２の全体がＳＲＡＭで構成されているように図示されているが、必ずしもそのような構成でなくてもよい。つまり、第１のコア５００と第２のコア６００のそれぞれのＬ１キャッシュを構成するメモリの一部において単位セル構成が異なるメモリが用いられていればよい。例えば、第１のコア５００のＬ１命令キャッシュ５０１にＭＲＡＭを利用し、Ｌ１データキャッシュ５０２にＳＲＡＭを利用し、第２のコア６００のＬ１キャッシュ６０１および６０２の全体にＳＲＡＭを利用してもよい。あるいは、第１のコア５００のＬ１命令キャッシュ５０１にＳＲＡＭを利用し、Ｌ１データキャッシュ５０２にＭＲＡＭを利用し、第２のコア６００のＬ１キャッシュ６０１および６０２の全体にＳＲＡＭを利用してもよい。
【００８７】
本実施形態のマルチコアプロセッサのハードウェア制御方法は実施形態１と同様であっても良い。また、ソフトウェア制御方法についても実施形態１と同様に上記（１）〜（４）のスケジューリングが利用可能であるが、これらの方式に限定されるものではない。
【００８８】
（実施形態４）  
実施形態１〜３では、全てのコアが同一の命令セットを備えることを想定している。本実施形態では、命令セットが異なる複数のコアを搭載したマルチコアプロセッサに関する。
【００８９】
図１９に、実施形態４に係るマルチコアプロセッサの例を示す。ダイ５０内に設けられる第１のコア７００は例えば汎用的なＣＰＵであり、同一のダイ５０内に設けられる第２のコア８００は例えば画像処理を行うＧＰＵである。
【００９０】
図１９の構成において、Ｌ２キャッシュ７０３および８０２、ならびにＬ３キャッシュ４００にＭＲＡＭを利用しているが、これらキャッシュはどのようなメモリが利用されてもよい。例えば、Ｌ２キャッシュ７０３および８０２がＤＲＡＭやＳＲＡＭであってもよいし、Ｌ３キャッシュ４００がＤＲＡＭやＳＲＡＭであってもよい。また、第１のコア７００のＬ１キャッシュ７０１および７０２にＭＲＡＭを利用し、第２のコア８００のＬ１キャッシュ８０１にＳＲＡＭを利用している。
【００９１】
第１のコア７００については、同コアからＬ３キャッシュ４００までの経路がＭＲＡＭ（Ｌ１キャッシュ７０１および７０２）→ＭＲＡＭ（Ｌ２キャッシュ７０３）→ＭＲＡＭ（Ｌ３キャッシュ４００）である。一方、第２のコア８００については、同コアからＬ３キャッシュ４００までの経路がＳＲＡＭ（Ｌ１キャッシュ８０１）→ＭＲＡＭ（Ｌ２キャッシュ８０２）→ＭＲＡＭ（Ｌ３キャッシュ４００）である。このように、第１のコア７００と第２のコア８００は、単位セル構成が異なるメモリ構成となっている。
【００９２】
図１９に示す実施形態４では、第１のコア７００のＬ１キャッシュ７０１および７０２の全体がＭＲＡＭで構成されており、第２のコア８００のＬ１キャッシュ８０１の全体がＳＲＡＭで構成されているように図示されているが、必ずしもそのような構成でなくてもよい。
【００９３】
つまり、第１のコア７００および第２のコア８００のＬ１キャッシュ７０１および７０２、ならびに８０１を構成するメモリの一部に「単位セル構成が異なるメモリ」が用いられていればよい。例えば、第１のコア７００のＬ１命令キャッシュ７０１にＭＲＡＭを利用し、Ｌ１データキャッシュ７０２にＳＲＡＭを利用し、第２のコア８００のＬ１キャッシュ８０１にＳＲＡＭを利用してもよい。あるいは、第１のコア７００のＬ１命令キャッシュ７０１にＳＲＡＭを利用し、Ｌ１データキャッシュ７０２にＭＲＡＭを利用し、第２のコアのＬ１キャッシュ８０１にＳＲＡＭを利用してもよい。
【００９４】
本実施形態のマルチコアプロセッサのハードウェア制御方法は実施形態１と同様であっても良い。また、ソフトウェア制御方法についても実施形態１と同様に上記（１）〜（４）のスケジューリングが利用可能であるが、これらの方式に限定されるものではない。
【００９５】
以上のように、マルチコアプロセッサにおいて、一部のコアのローカルキャッシュに不揮発メモリを利用し、残りのコアのローカルキャッシュに揮発メモリを利用するハイブリッドなキャッシュ構成を採ることについて説明した。その代表的な例は、マルチコアプロセッサにおいて多数のコアのローカルメモリにＭＲＡＭのような不揮発メモリを利用し、残りの一部のコアのローカルメモリにＳＲＡＭのような揮発メモリを利用するものである。さらに、コアへ処理割り当てを行うスケジューラが、コアへの処理割り当てを通じて、該処理に適したメモリ（ローカルキャッシュ）を選択することについて説明した。
【００９６】
したがって、以上のようなハイブリッドなキャッシュ構成にすることで、プログラムの性質に応じてソフトウェアが適切なメモリを選択することが可能となり、ハードウェア設計コストや回路面積の増大を抑えつつプロセッサの処理効率を向上させることが可能となる。
【００９７】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００９８】
１００…第１のコア
１０１…Ｌ１命令キャッシュ
１０２…Ｌ１データキャッシュ
１０３…Ｌ２キャッシュ
２００…第２のコア
２０１…Ｌ１命令キャッシュ
２０２…Ｌ２データキャッシュ
２０３…Ｌ２キャッシュ
３００…バス
４００…Ｌ３キャッシュ
【要約】 
【課題】従来の不揮発メモリは、そのリード速度あるいはライト速度が遅いために速度向上効果が低い、あるいはまたリード時あるいはライト時の消費電力が大きいために省電力効果が低い、等の問題があった。
【解決手段】実施形態によれば、同一のダイ内に第１のコアと第２のコアとを備えるマルチコアプロセッサが提供される。該マルチコアプロセッサは、前記第１のコアと第２のコアとが共有する共有メモリ領域と前記第１のコアとの間に設けられる少なくとも１つの第１のローカルメモリと、前記共有メモリ領域と前記第２のコアとの間に設けられ、前記第１のローカルメモリとは単位セル構成が異なる少なくとも１つの第２のローカルメモリと、実行効率に基づいて前記第１のコアおよび前記第２のコアのいずれかに処理を割り当てるスケジューラと、を具備する。
【選択図】図１【図１】
0005591969.tif 000002
【図２】
0005591969.tif 000003
【図３】
0005591969.tif 000004
【図４】
0005591969.tif 000005
【図５】
0005591969.tif 000006
【図６】
0005591969.tif 000007
【図７】
0005591969.tif 000008
【図８】
0005591969.tif 000009
【図９】
0005591969.tif 000010
【図１０】
0005591969.tif 000011
【図１１】
0005591969.tif 000012
【図１２】
0005591969.tif 000013
【図１３】
0005591969.tif 000014
【図１４】
0005591969.tif 000015
【図１５】
0005591969.tif 000016
【図１６】
0005591969.tif 000017
【図１７】
0005591969.tif 000018
【図１８】
0005591969.tif 000019
【図１９】
0005591969.tif 000020
【図２０】
0005591969.tif 000021
【図２１】
0005591969.tif 000022