(57)【特許請求の範囲】
【請求項１】
命令を一時記憶する第１の記憶手段と、
命令及びデータを一時記憶する第２の記憶手段と、
前記第２の記憶手段に一時記憶されている命令を前記第１の記憶手段に転送する転送手段と、
第３の記憶手段に格納されている命令を前記第２の記憶手段に読み込む第１の制御と前記転送手段に対して前記第２の記憶手段へ読み込まれた命令を前記第１の記憶手段に対して転送させる第２の制御とを行う制御手段と、
を具備し、
前記第１の制御及び前記第２の制御によって処理される命令は、所定の処理を実行するプロセッサである他のプロセッサに対して転送されうる命令であり、
前記他のプロセッサが前記所定の処理を実行している間に、前記所定の処理を行わず、前記第１の制御及び前記第２の制御を行う
プロセッサ。
【請求項２】
前記制御手段は、前記第３の記憶手段に記憶されている命令又はデータを前記第２の記憶手段に読み込ませる命令であるロード命令を実行することで前記第１の制御を行い、前記転送手段に前記転送を行わせる命令であるキャッシュ間転送要求命令を実行することで前記第２の制御を行う、
請求項１に記載のプロセッサ。
【請求項３】
前記転送手段は、転送前の前記命令が一時記憶されていた前記第２の記憶手段のアドレスと転送後に前記命令が一時記憶される前記第１の記憶手段のアドレスとが同一になるように転送することを特徴とする、
請求項１又は２に記載のプロセッサ。
【請求項４】
命令及びデータを格納する第３の記憶手段と、
命令を一時記憶する第１の記憶手段と、命令及びデータを一時記憶する第２の記憶手段と、前記第２の記憶手段に一時記憶されている命令を前記第１の記憶手段に転送する転送手段と、前記第３の記憶手段に格納されている命令を前記第２の記憶手段に読み込む第１の制御と前記転送手段に対して前記第２の記憶手段へ読み込まれた命令を前記第１の記憶手段に対して転送させる第２の制御とを行う制御手段と、を具備するプロセッサを複数備え、
複数の前記プロセッサのうち、第１のプロセッサが所定の処理を実行し、
前記所定の処理を実行しない前記第１のプロセッサ以外のプロセッサは、前記第１のプロセッサが前記所定の処理を実行している間に、前記第１の制御及び前記第２の制御を行い、
前記第１の制御及び前記第２の制御によって処理される命令は、前記第１のプロセッサに対して転送されうる命令である
情報処理装置。
【請求項５】
前記第１の記憶手段に一時記憶されている命令又は前記第２の記憶手段に一時記憶されているデータの前記複数のプロセッサ間での転送を制御する転送制御手段を更に備える、
請求項４に記載の情報処理装置。
【請求項６】
前記複数のプロセッサが具備する各々の前記転送手段は、転送前の前記命令が一時記憶されていた前記第２の記憶手段のアドレスと転送後の前記命令が一時記憶される前記第１の記憶手段のアドレスとが同一になるように前記転送を行うことを特徴とする、
請求項４又は５に記載の情報処理装置。
【請求項７】
前記転送制御手段は、前記複数のプロセッサが有する前記第１の記憶手段又は前記第２の記憶手段に一時記憶されている命令又はデータの内容及び記憶場所が対応付けられた制御情報を有する、
請求項５に記載の情報処理装置。
【請求項８】
前記転送手段は、前記転送が完了したことを示す転送完了信号を前記転送制御手段へ出力し、
前記転送制御手段は、前記転送完了信号に基づいて前記制御情報を更新する、
請求項７に記載の情報処理装置。
【請求項９】
複数のプロセッサのうち、第１のプロセッサにより所定の処理を実行し、
複数のプロセッサのうち、前記所定の処理を実行しない前記第１のプロセッサ以外のプロセッサにより、前記第１のプロセッサが前記所定の処理を実行している間に、第３の記憶手段に格納されている命令を第２の記憶手段に読み込み、前記第２の記憶手段に読み込まれ一時記憶されている命令を第１の記憶手段に転送し、
前記第１の記憶手段に転送された前記命令を、前記第１のプロセッサに対して転送する
情報処理方法。
【請求項１０】
複数のプロセッサを有する情報処理装置において、
第１のプロセッサに所定の処理を実行させ、
前記所定の処理を実行しない前記第１のプロセッサ以外のプロセッサに、前記第１のプロセッサが前記所定の処理を実行している間に、前記第１のプロセッサで実行されうる命令をデータキャッシュにロードさせる処理と、前記ロードされた命令を前記データキャッシュから命令キャッシュに転送させる処理と、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプロセッサ、情報処理装置、情報処理方法及びシステム起動プログラムに関し、特に命令キャッシュとデータキャッシュ間での転送機能を有するプロセッサ、そのプロセッサを含む情報処理装置、そのプロセッサを用いた情報処理方法、及びそのプロセッサに実行させるプログラムに関する。
【背景技術】
【０００２】
機器の多様化や高機能化が進む組込機器の分野においては、電源投入と同時に使用できることが基本的に要求されており、システム起動処理の高速化がより一層重要度を増してきている。
【０００３】
一般的に、システム起動処理では、システム起動処理の実行開始時にRead Only Memory(以降ＲＯＭと記載)やＮＯＲ型フラッシュメモリ(以降ＮＯＲと記載)などよりも高速なDynamic Random Access Memory(以降ＤＲＡＭと記載)にＲＯＭやＮＯＲ内に格納されている命令とデータが一旦転送される。そして、ＤＲＡＭ内の命令とデータを使用してシステム起動処理が行われ、システム起動処理の実行中にキャッシュミスヒットが発生した場合は、Central Processing Unit（以降ＣＰＵと記載）は、命令とデータをＲＯＭやＮＯＲなどから再取得するのではなくＤＲＡＭから取得する方式が採られている。
【０００４】
しかし、システムの起動直後では、ＤＲＡＭの初期化が完了しておらず、ＤＲＡＭを使用できない区間が存在する。そのため、キャッシュミスヒットが発生した場合、ＣＰＵは、このＤＲＡＭを使用できない区間ではＤＲＡＭよりも低速なＲＯＭやＮＯＲなどから命令またはデータを再度読み込む必要がある。
【０００５】
そこで、ＤＲＡＭが使用できない区間においてキャッシュミスヒットが発生した場合に行うＲＯＭやＮＯＲなどからの読み込みの回数を軽減する方法として、マルチＣＰＵを有するシステムにおけるキャッシュのマイグレーション技術が開発されている。
【０００６】
図８に、上述のキャッシュマイグレーションに関する情報処理装置のブロック図を示す。ＣＰＵ−１〜ＮとＮＯＲ８０２の間にはＣＰＵ間キャッシュ共有制御モジュール８０３が配置される。ＣＰＵ間キャッシュ共有制御モジュール８０３は、ＣＰＵ−１でキャッシュミスヒットが発生した場合、ＣＰＵ間キャッシュ共有制御モジュール８０３自身が管理するキャッシュの内容を示す制御情報を参照して他のＣＰＵ−２〜ＮのLevel1キャッシュ(以降Ｌ１キャッシュと記載)内に必要な命令３００またはデータ３０１が存在するかを確認する。ＣＰＵ−２〜ＮのＬ１キャッシュ８０４内にＣＰＵ−１でキャッシュミスヒットした命令３００またはデータ３０１が存在する場合には、ＣＰＵ間キャッシュ共有制御モジュール８０３は、ＣＰＵ−２〜ＮのＬ１キャッシュ８０４内に存在している命令３００またはデータ３０１をＣＰＵ−１のＬ１キャッシュ８０４に転送するキャッシュ間転送を行う。このように、ＣＰＵ−１〜Ｎのキャッシュ間のコヒーレンシを保つようにＣＰＵ間キャッシュ共有制御モジュール８０３が動作することで、ＣＰＵ−１〜Ｎの間でキャッシュを共有することができ、処理の高速化が実現されている。
【０００７】
また、上述のキャッシュマイグレーションに関連する技術として、複数のマイクロプロセッサを有するシステムにおいてメモリを共有する技術が特許文献１に開示されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００５−０５０３６８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
マルチＣＰＵを有するシステムにおいて、いくつかのＣＰＵが命令フェッチを行わない場合がある。例えば、システム起動処理の開始時点では１つのＣＰＵのみが動作し、他のＣＰＵは割り込み待ちなどの待ち合わせ処理の実行中となっている場合がある。
【００１０】
システム起動処理ではデバイスを初期化する順序が決められており、各デバイスを初期化する場合に、デバイスのレジスタに値を設定する順序も予め決められている。複数のＣＰＵで並列に１つのデバイスのレジスタへ値を設定するためには、複雑な排他制御が必要となるため逆に待ち時間が多くなり、並列化のメリットが享受できない。そのため、システム起動処理では、複数ではなく１つのＣＰＵで動作する場合が多く、他のＣＰＵは割り込み待ちなどの待ち合わせ処理の実行中となっている。
【００１１】
命令キャッシュとデータキャッシュが分離しているハーバードアーキテクチャを採用しているシステムでは、ＲＯＭやＮＯＲに格納されている命令は、ＣＰＵが命令を実行する前に行う命令フェッチの際に命令キャッシュに載せられる。つまり、命令フェッチが行われない限り、ＲＯＭやＮＯＲに格納されている命令が命令キャッシュに存在しないことになる。
【００１２】
このようにシステム起動処理を１つのＣＰＵが行い、他のＣＰＵは待ち合わせ処理の実行中となる場合には、他のＣＰＵにおいて命令フェッチが行われないため、他のＣＰＵの命令キャッシュに命令が格納されていない。従って、キャッシュのマイグレーション技術を導入しても、キャッシュミスヒット時に行うＲＯＭやＮＯＲへのアクセス回数を削減できないという問題が生じることになる。
【００１３】
本発明は上記の課題を鑑み、複雑な排他制御を必要とせずにキャッシュの有効利用を可能とするシステムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明にかかるプロセッサは、命令を一時記憶する第１の記憶手段と、命令及びデータを一時記憶する第２の記憶手段と、前記第２の記憶手段に一時記憶されている命令を前記第１の記憶手段に転送する転送手段と、第３の記憶手段に格納されている命令を前記第２の記憶手段に読み込む第１の制御と前記転送手段に対して前記第２の記録手段へ読み込まれた命令を前記第１の記憶手段に対して転送させる第２の制御とを行う制御手段と、を具備する。
【００１５】
また、本発明にかかる情報処理装置は、命令及びデータを格納する第３の記憶手段と、命令を一時記憶する第１の記憶手段と、命令及びデータを一時記憶する第２の記憶手段と、前記第２の記憶手段に一時記憶されている命令を前記第１の記憶手段に転送する転送手段と、前記第３の記憶手段に格納されている命令を前記第２の記憶手段に読み込む第１の制御と前記転送手段に対して前記第２の記録手段へ読み込まれた命令を前記第１の記憶手段に対して転送させる第２の制御とを行う制御手段と、を具備するプロセッサを複数備える。
【００１６】
また、本発明にかかる情報処理方法は、命令をデータキャッシュにロードする第１ロード工程と、前記ロードされた命令とロード先のデータキャッシュ及びアドレスとの対応関係を記した制御情報を記憶する記憶工程と、前記データキャッシュにロードされた命令を命令キャッシュへ転送する転送工程と、前記転送が完了したことを通知する通知工程と、前記通知に基づいて前記制御情報を更新する更新工程と、を有する。
【００１７】
また、本発明にかかるプログラムは、複数のプロセッサを有する情報処理装置において、第１のプロセッサにシステムの起動に関する処理を実行させ、前記第１のプロセッサ以外のプロセッサに、前記第１のプロセッサで実行されうる命令をデータキャッシュにロードさせる処理と、前記ロードされた命令を前記データキャッシュから命令キャッシュに転送させる処理と、を実行させる。
【発明の効果】
【００１８】
本発明によれば、複雑な排他制御を必要とすることなくキャッシュの共有化を図ることが可能となる。
【図面の簡単な説明】
【００１９】
【図１】本発明にかかるプロセッサを示すブロック図である。
【図２】本発明にかかる転送モジュールの動作のフローチャートを示す図である。
【図３】キャッシュ間の転送の様子を示す概念図である。
【図４】実施の形態１にかかる情報処理装置を示すブロック図である。
【図５】ＮＯＲから複数のＣＰＵへのロードの様子を示す概念図である。
【図６】ＣＰＵ間キャッシュ共有制御モジュールが有する制御情報を示す図である。
【図７】ＣＰＵ間キャッシュ共有制御モジュールが有する制御情報を示す図である。
【図８】背景技術にかかる情報処理装置を示すブロック図である。
【発明を実施するための最良の形態】
【００２０】
以下、本発明について図面を参照して説明する。
【００２１】
図１は、本発明にかかるＣＰＵのブロック図である。本発明のシステムは、ハーバードアーキテクチャを採用しており、ＣＰＵ１００は、命令キャッシュ１０１とデータキャッシュ１０２の２つの分離したＬ１キャッシュを有する。
【００２２】
命令キャッシュ１０１は、後述する制御部１０３で実行される命令が一時的に格納される第１の記録手段である。命令は、図示せぬ外部のＲＯＭやＮＯＲなどに格納されており、命令が実行される前段階に行われる命令フェッチによって命令キャッシュに取り出される。当該命令は、制御部１０３で解読された後に実行される。
【００２３】
データキャッシュ１０２は、ＮＯＲ等から読み込まれた内容が一時的に格納される第２の記憶手段である。通常、ハーバードアーキテクチャでは、命令系統とデータ系統が分離されているため、データキャッシュに命令が格納されることはない。しかし、本発明では、所定の場合に命令もデータキャッシュ１０２に一時的に格納されることを特徴とする。なお、データキャッシュ１０２に格納された命令は、この状態では制御部で実行すべき命令としてフェッチされることはない。
【００２４】
制御部１０３は、図示せぬＲＯＭやＮＯＲなどの低速メモリに格納されている内容をデータキャッシュ１０２へロードする。ＲＯＭやＮＯＲは、命令やデータを格納する第３の記憶手段であり、第３の記憶手段は、第１の記憶手段である命令キャッシュや第２の記憶手段であるデータキャッシュといったＬ１キャッシュよりも読み込み速度が遅いことで特徴づけられる。
【００２５】
上記のロード方法としては、既存のロード命令を用いることができる。ここで、ロード命令とは、指定されたアドレスに格納されている内容をデータキャッシュに読み込む命令のことを言う。なお、ロード命令では、複数のアドレスを指定して、一括してデータ等を読み込むことが可能となっている。
【００２６】
制御部１０３は、キャッシュ間転送要求命令に基づいて、後述するキャッシュ間転送モジュール１０４に対してキャッシュ間転送要求を出力する。キャッシュ間転送要求命令は、新たに定義された命令であり、キャッシュ間転送モジュール１０４に対してデータキャッシュの内容を命令キャッシュに転送させるための命令である。
【００２７】
キャッシュ間転送モジュール１０４は、制御部１０３から出力されたキャッシュ間転送要求に基づいて、データキャッシュ１０２に格納されている内容を命令キャッシュ１０１に転送する。
【００２８】
図２に上記キャッシュ間転送モジュール１０４の動作のフローチャートを示す。
【００２９】
キャッシュ間転送モジュール１０４は、制御部１０３よりキャッシュ間転送要求が出力されたかどうかの判断を行う（ステップ１）。キャッシュ間転送要求を受け取っていない場合には、引き続き待機状態を維持する。
【００３０】
キャッシュ間転送モジュール１０４は、キャッシュ間転送要求を受け取った場合は、データキャッシュ１０２からダーティビット部分以外のキャッシュラインの内容を読み出す（ステップ２）。なお、この段階のデータキャッシュ１０２にはＮＯＲからロードされた命令が格納されている。命令は更新されることがなく、命令キャッシュ１０１にダーティビットは存在しない。従って、ダーティビットの転送は不要であるから、読み出される範囲は、ダーティビット部分以外のキャッシュラインの内容となる。
【００３１】
次に、キャッシュ間転送モジュール１０４は、読み出したデータキャッシュ１０２の内容を命令キャッシュ１０１にコピーする（ステップ３）。
【００３２】
次に、キャッシュ間転送モジュール１０４は、読み出した範囲がキャッシュラインの終端に到達したかどうかの判断を行う（ステップ４）。キャッシュラインの終端まで読み出しが完了していない場合は、再度ステップ２に戻り、すべての読み出しが完了するまでステップ２〜ステップ４の処理を繰り返し行う。
【００３３】
キャッシュラインの終端まで読み出しが完了した場合は、キャッシュ間転送モジュール１０４は、データキャッシュ１０２から命令キャッシュ１０１への転送が完了したことを図示せぬＣＰＵ間キャッシュ共有制御モジュールに対して通知する（ステップ５）。その後、キャッシュ間転送モジュール１０４は、再びステップ１へ戻って待機状態となる。
【００３４】
図３に、データキャッシュ１０２に格納された内容がキャッシュ間転送モジュール１０４によって命令キャッシュ１０１に転送される様子を示す。データキャッシュ内に格納されている命令は、格納場所を示すアドレス及びダーティビットと対応付けされている。キャッシュ間転送モジュール１０４は、データキャッシュ１０２に格納されている命令を、その命令内容及び格納アドレスを変更することなくそのまま命令キャッシュ１０１へ転送する。
【００３５】
制御部１０３は、上記キャッシュ間転送後に再度ロードを実行し、ＮＯＲ等に格納されているデータをデータキャッシュ１０２に読み込む。
【００３６】
このように、ＣＰＵ１００内に分離されて存在している命令キャッシュ１０１とデータキャッシュ１０２の間にキャッシュ間転送モジュール１０３を搭載することで、本来独立している２つのキャッシュ間にパスが形成される。従って、ＮＯＲ等から一度に多くの命令をロードしデータキャッシュ１０２に載せた後に、その命令を命令キャッシュ１０１へ転送することで、命令フェッチを行うことなく命令を命令キャッシュ１０１に載せることが可能となる。
【００３７】
上記のように、本発明のプロセッサは、第１の記憶手段である命令キャッシュと第２の記憶手段であるデータキャッシュの２つのキャッシュを有する。さらに、本発明のプロセッサは、前記第２の記憶手段に一時記憶されている命令を命令キャッシュに転送する転送手段を有する。また、制御手段は、第３の記憶手段としての外部メモリに格納されている命令をデータキャッシュに読み込む第１の制御と前記転送手段に転送を行わせる第２の制御とを行う。このような構成をとることにより、プロセッサは、命令フェッチを行わなくても命令を命令キャッシュに格納することができる。
【００３８】
また、上記転送手段による転送は、新たに定義されたキャッシュ間転送要求命令によって可能となる。すなわち、上記制御手段は、転送手段に上記転送を行わせる命令であるキャッシュ間転送要求命令を実行することで上記第２の制御を行う。制御手段が、第３の記憶手段に記憶されている命令又はデータを前記第２の記憶手段に読み込ませる命令であるロード命令を実行することで上記第１の制御を行う。制御手段は、第３の記憶手段に記憶されている命令の範囲を指定してロード命令を実行し、命令が第２の記憶手段に読み込まれた後に、上記第１の制御を行うことで命令を第１の記憶手段に一時記憶させることが可能となる。このように、新たにキャッシュ間転送要求命令を定義し、制御手段が、当該命令を実行することによりキャッシュ間転送が開始される。
【００３９】
また、上記転送手段は、転送前後で、命令が一時記憶されている第２の記憶手段のアドレスと第１の記憶手段のアドレスが同一になるように当該命令を転送する。このように転送手段は、各々の記憶手段での格納アドレスを変更することなく転送することで、転送前後でも管理が簡単となる。転送手段は、転送処理が完了すると、外部に転送完了を通知することで、自プロセッサのキャッシュ間転送が完了し、マイグレーションが可能な状態であることを通知する。
【００４０】
また、本発明の情報処理方法では、第１の工程として、外部記憶手段から第１のキャッシュであるデータキャッシュに命令を読み込む。次に、第２の工程として、データキャッシュに読み込まれた命令を、命令の内容及び格納するアドレスを同一に保った状態で第２のキャッシュである命令キャッシュに転送する。次に、第３の工程として、転送が完了したことを通知する。
【００４１】
以上により、Ｌ１キャッシュのマイグレーションが実施される場合には、必要な命令の多くが命令キャッシュに存在しているため、キャッシュヒット率が向上し、処理が高速となる。以下、この点に関して各実施の形態でより詳細に説明する。
【００４２】
（実施の形態１）
図４に本実施の形態１における情報処理システムのブロック図を示す。本システムは、大きく分けてＣＰＵ−１〜４の４つのＣＰＵ１００ (以降各ＣＰＵ１００をＣＰＵ１００−１〜ＣＰＵ１００−４と記載する)、ＤＲＡＭ２０１、ＮＯＲ２０２、及びＣＰＵ間キャッシュ共有制御モジュール２０３から構成される。なお、以下ではＣＰＵが４つである場合について説明するが、ＣＰＵの数については４つに限定するものではなく、Ｎ個のＣＰＵを有するシステムについて拡張可能である。
【００４３】
低速メモリであるＮＯＲ２０２には命令３００とデータ３０１が格納されている。電源が投入され、システム起動処理が開始されると、命令３００及びデータ３０１はＮＯＲ１０２から高速メモリであるＤＲＡＭ２０１へ転送される。ただし、初期化等の理由によりＤＲＡＭ２０１が使用できない区間では、命令３００とデータ３０１はＮＯＲ２０２から直接各ＣＰＵ１００へ読み込まれる。
【００４４】
ＣＰＵ間キャッシュ共有制御モジュール２０３は、ＮＯＲ２０２と各ＣＰＵ１００との間に配置されている。ＣＰＵ間キャッシュ共有制御モジュール２０３は、Ｌ１キャッシュのマイグレーション機能を有しており、各ＣＰＵ１００内のキャッシュのコヒーレンシを保たせるための制御を行う。
【００４５】
各ＣＰＵ１００は、命令フェッチによって取り出した命令を解読・実行して制御処理や演算処理などを行う。以下、システム起動時における各ＣＰＵ１００の個別処理について具体的に説明する。本実施の形態では、４つのＣＰＵのうちＣＰＵ１００−１のみがシステム起動処理を行う場合について説明する。なお、システム起動処理を１つのＣＰＵが行う理由は、システム起動処理を複数のＣＰＵで実行しても、逆に待ち時間が多くなり並列化のメリットが享受できないからである。すなわち、システム起動処理において実行されるデバイス初期化処理では、デバイスのレジスタに値を設定する順序が決められているが、複数のＣＰＵで並列に1つのデバイスのレジスタへ値を設定するためには複雑な排他制御が必要となる。そのため、この複雑な排他制御を避けるために、システム起動処理を複数のＣＰＵ１００で並列して行うのではなく、従来どおりＣＰＵ１００−１のみで行うこととする。
【００４６】
まず、システム起動時において、システム起動処理を行わないＣＰＵ１００−２からＣＰＵ１００−４の動作に関して説明する。ここで言うシステム起動処理とは、デバイスの初期化のことをいう。通常、システム起動時においては、デバイスの初期化の順序が決められており、各デバイスを初期化する場合は、デバイスのレジスタに値を設定する処理が必要となる。ここでは、ＣＰＵ１００−２からＣＰＵ１００−４の動作は同一であるため、代表してＣＰＵ１００−２の動作について説明し、ＣＰＵ１００−３とＣＰＵ１００−４については動作の説明を省略する。
【００４７】
ＣＰＵ１００−２内の制御部１０３は、ロード命令を実行し、ＮＯＲ２０２に格納されている命令３００をロードして、命令３００をデータキャッシュ１０２に格納する。図５は、当該ロードの様子を示した図である。各ＣＰＵ１００は、他のＣＰＵのロード範囲と重複しない範囲で自ＣＰＵがロードする範囲を指定しロード命令を実行する。各ＣＰＵがロードする範囲は、最小で命令キャッシュ１０１のキャッシュラインのサイズであり、最大で命令キャッシュ１０１の全体サイズである。ロードする範囲は、ＮＯＲ２０２からの読み出し速度に応じて変更することも可能である。しかし、ＣＰＵが、ＮＯＲ２０２からの読み出し性能を上回る範囲を指定した場合、命令キャッシュ２０１の構築が、後述するキャッシュミスヒット時に行うＬ１キャッシュのマイグレーション処理に間に合わず、キャッシュヒットしない可能性がある。従って、各ＣＰＵ１００は、ＮＯＲ２０２の読み出し性能範囲内でロードする範囲を指定することが望ましい。
【００４８】
ＮＯＲ２０２からロード命令で読み出された命令３００は、システムとして採用したキャッシュの構造に依存することなく、アドレスとその内容という構造でキャッシュ内に格納される。ＮＯＲ２０２からロード命令で読み出された命令３００については、ＣＰＵ間キャッシュ共有制御モジュール２０３が把握している。ＣＰＵ間キャッシュ共有制御モジュール２０３はＣＰＵ１００−２からＣＰＵ１００−４のＬ１キャッシュ内に必要な命令３００またはデータ３０１が存在するのかを、ＣＰＵ間キャッシュ共有制御モジュール２０３自身が管理するキャッシュの内容を示す制御情報から確認する。
【００４９】
図６に、上記制御情報の一例を示す。ＣＰＵ間キャッシュ共有制御モジュール２０３はこのような管理テーブルを記録・更新しており、ロード命令により指定されたアドレス範囲の内容がデータキャッシュ１０２に存在することを記録している。
【００５０】
次に、制御部１０３は、データキャッシュ１０２に格納された命令３００を命令キャッシュ１０１に転送するために、キャッシュ間転送要求をキャッシュ間転送モジュール１０４に出す。このキャッシュ間転送要求は、新たに追加定義された命令３００であるキャッシュ間転送要求命令４００に従って実行される。すなわち、制御部１０３は、ＮＯＲ内に格納されている上記キャッシュ間転送要求命令４００を命令フェッチして取り出し、実行してキャッシュ間転送要求をキャッシュ間転送モジュール１０４へ出す。
【００５１】
ここで、キャッシュ間転送要求命令４００は、転送する範囲も同時に指定することが可能である。つまり、キャッシュ間転送モジュール１０４に対して、データキャッシュ１０２からどれだけの命令３００を命令キャッシュ１０１に転送させるのかを指定することが可能である。キャッシュ間転送モジュール１０４は、キャッシュ間転送要求に基づいて、指定された範囲でデータキャッシュ１０２に一時保管されている命令を命令キャッシュ１０１へ転送する。
【００５２】
データキャッシュ１０２と命令キャッシュ１０１の構造は両方ともアドレスとその内容で対になっている構造であるため、キャッシュ間転送モジュール１０４は、データキャッシュ１０２に格納された内容をそのまま命令キャッシュ１０１に転送することが可能となる。すなわち、キャッシュ間転送モジュール１０４は、データキャッシュ１０２に格納された内容である命令を変更することなく、また、各キャッシュ内でのアドレスを変更することなく転送することができる。
【００５３】
次に、キャッシュ間転送モジュール１０４は、ＣＰＵ間キャッシュ共有制御モジュール２０３に対してデータキャッシュ１０２の内容を命令キャッシュ１０１に転送したことを通知する。
【００５４】
ＣＰＵ間キャッシュ共有制御モジュール２０３は、キャッシュ間転送モジュールからの転送完了通知を受けると、内部で管理しているキャッシュの内容を示す制御情報を更新する。
【００５５】
図７に更新後の制御情報の内容を示す。図６に示す制御情報と比較して、更新後の制御情報では、命令の格納先がデータキャッシュから命令キャッシュに変更されて記録されている。キャッシュ間転送モジュール１０４が行った転送処理により、データキャッシュ内にあった命令が命令キャッシュに転送されているためである。このように、ＣＰＵ間キャッシュ共有制御モジュール２０３は、キャッシュ間転送モジュール１０４より転送完了通知を受けると、命令が現在格納されている場所を正しく特定できるように制御情報を更新する。
【００５６】
次に制御部１０３は、ロード命令を実行して、ＮＯＲからデータをロードし、データキャッシュの構築を行う。
【００５７】
以上のようにＣＰＵ１００―２からＣＰＵ１００−４が動作することにより、システム起動処理に必要となる可能性がある命令及びデータを、各々のＬ１キャッシュ内にキャッシュのコヒーレンシが保たれた状態で格納することができる。なお、ＮＯＲ２０２から多くの命令３００をロード命令により一度にデータキャッシュ１０２に格納するようにシステム起動処理に関するプログラムの内容に変更が加えられている。
【００５８】
また、上記説明したようにキャッシュ間転送要求命令４００が新たに追加定義されている。そのため、コンパイラにも変更が加えられている。コンパイラでは、本発明を使用することを示すコンパイルオプションを新たに定義する。該当のコンパイルオプションが指定された場合、システム起動処理を行うＣＰＵ１００−１以外のＣＰＵ１００−２〜ＣＰＵ１００−４が上述した４つの処理（１：命令のロード．２：転送処理．３：転送完了通知．４：データのロード．）を繰り返して行うコードを生成する。  
【００５９】
次にＣＰＵ１００−１の動作に関して説明する。ＣＰＵ１００−１は、システム起動時において、各デバイスの初期化といったシステムの起動に関する処理を行う。以下、システム起動処理中にキャッシュミスヒットが発生した場合の処理について具体的に説明する。
【００６０】
ＣＰＵ１００−１内の制御部１０３は、キャッシュミスヒットが発生した場合に、ＣＰＵ間キャッシュ共有制御モジュール２０３に対して必要な命令３００又はデータ３０１の転送要求を行う。
【００６１】
ＣＰＵ間キャッシュ共有制御モジュール２０３は、ＣＰＵ１００−１からの転送要求を受け取ると、自己が管理しているキャッシュの内容とその格納場所を示す制御情報を参照して、要求されている命令３００又はデータ３０１が他ＣＰＵの命令キャッシュ又はデータキャッシュに存在するかどうかを確認する。当該命令３００やデータ３０１が他ＣＰＵのキャッシュに存在する場合には、ＣＰＵ間キャッシュ共有制御モジュール２０３は当該命令３００を他ＣＰＵの命令キャッシュからＣＰＵ１００−１の命令キャッシュへ、また、当該データ３０１を他ＣＰＵのデータキャッシュからＣＰＵ１００−１のデータキャッシュへそれぞれ転送する制御を行う。なお、制御情報に当該命令３００又はデータ３０１に関する情報が記録されていない場合には、ＣＰＵ間キャッシュ共有制御モジュール２０３は、キャッシュ間共有はできないと判断し、ＮＯＲ２０２からこれらの命令等を取得する制御を行う。
【００６２】
このように、本発明にかかわる情報処理装置は、複数のＣＰＵを搭載している。各ＣＰＵは、命令を一時記憶する第１の記憶手段としての命令キャッシュと、命令及びデータを一時記憶する第２の記憶手段としてのデータキャッシュの２つのＬ１キャッシュを有する。また、各ＣＰＵは、前記命令キャッシュから命令を取り出して命令を実行する実行手段と、前記データキャッシュに一時記憶されている命令を前記命令キャッシュに転送する転送手段とを有している。そして、情報処理装置は、前記命令キャッシュに一時記憶されている命令又は前記データキャッシュに一時記憶されているデータの前記複数のＣＰＵ間での転送を制御する転送制御手段と、を有する。このように構成することで、１のＣＰＵでキャッシュミスヒット時でも他のＣＰＵの命令キャッシュに記憶されている命令を転送することができる。
【００６３】
また、前記各ＣＰＵ内の転送手段は、データキャッシュから命令キャッシュへの転送が完了した場合に、転送が完了したことを示す転送完了信号を前記転送制御手段へ出力する。前記転送制御手段は、前記転送完了信号に基づいて前記制御情報を更新する。より具体的には、前記転送制御手段は、前記通知完了信号を入力すると、転送された命令に関する制御情報について、当該命令が格納されている場所をデータキャッシュから命令キャッシュに変更する。ただし、キャッシュ内でのアドレスは同一に保たれたまま転送されるため、制御情報に記されているアドレスは変更しない。このように制御情報を更新することであるＣＰＵ内においてデータキャッシュから命令キャッシュへの転送行われても、転送制御手段は、適切に各ＣＰＵのキャッシュ内の情報を管理することができる。
【００６４】
また、本発明にかかわるシステム起動プログラムでは、複数のＣＰＵを有する情報処理装置において、第１のＣＰＵにシステムの起動に関する処理を実行させ、前記第１のＣＰＵ以外のＣＰＵに、前記第１のＣＰＵで実行される命令をデータキャッシュにロードさせる処理と、前記ロードされた命令を前記データキャッシュから命令キャッシュに転送させる処理と、を実行させる。ここで第１のＣＰＵが実行するシステム起動に関する処理には、例えばデバイスの初期化処理が含まれ、より具体的には、デバイスのレジスタへ値を設定する処理が含まれる。このように、本発明にかかわるシステム起動プログラムは、一のＣＰＵにシステム起動処理を担当させ、その他のＣＰＵは、システム起動処理を実行しているＣＰＵが必要とする命令の一部を、命令フェッチを行うことなく転送機能を用いて命令キャッシュに格納させる。従って、キャッシュのマイグレーションが可能な状態であるため、システム起動処理を実行しているＣＰＵにおいてキャッシュミスヒットが起きても、他のＣＰＵの命令キャッシュから適切に命令を転送させることができる。
【００６５】
以上のように、本実施の形態の発明では、システム起動処理を行うＣＰＵ以外のＣＰＵ内の命令キャッシュとデータキャッシュに、システム起動処理の処理内容である命令３００とその処理に必要なデータ３０１がそれぞれ格納される。これらの命令３００やデータ３０１に対してキャッシュ間共有が行われることにより起動処理の高速化が実現できる。
【００６６】
従来のマルチＣＰＵシステムにおいては、４つのＣＰＵを備えていてもＣＰＵ−２からＣＰＵ−４は単に割り込み待ちなどの待ち合わせ処理の実行中状態となっておりＣＰＵ−２からＣＰＵ−４のＬ１キャッシュにはシステム起動処理に必要となる命令３００やデータ３０１が存在しないため、まったくキャッシュヒットしない。そのため、キャッスミスヒットが起こる度に命令３００およびデータ３０１の再取得のためＮＯＲへアクセスする必要があり、システム起動処理時間がＮＯＲへのアクセス時間分長くなっていた。
【００６７】
しかし、本発明のマルチＣＰＵシステムにおいては、新たにキャッシュ間転送モジュールがＣＰＵに搭載され、従来では待ち合わせ処理の実行中であったＣＰＵでも所定の処理が行われる。すなわち、ロード命令によりＮＯＲ等から命令をデータキャッシュに読み込む処理と、キャッシュ間転送要求命令により、データキャッシュの内容をそのまま命令キャッシュに転送する処理を行う。これらの処理は、システムの起動に関する処理とは異なるため、システム起動処理を実行しているＣＰＵを意識せずに行うことができる。すなわち、システム起動処理を実行しているＣＰＵは、複雑な排他制御を行う必要はなく、他のＣＰＵの処理完了を待ち合わせる必要もない。このように構成することで、システム起動処理を担当していないＣＰＵでも命令を命令キャッシュに格納しておくことができる。
【００６８】
つまり、本実施の形態の発明ではＣＰＵ−２からＣＰＵ−４のＬ１キャッシュにはシステム起動処理の処理内容である命令３００と、その処理に必要なデータ３０１が対応するそれぞれのキャッシュ内に存在する。そこで、ＣＰＵ間キャッシュ共有制御モジュール２０３が制御情報に基づいて必要な命令３００やデータ３０１が格納されているキャッシュを特定し、ＣＰＵ−１のキャッシュに命令３００およびデータ３０１を転送する。この構成により、ＮＯＲへアクセスする場合と比較して高速にシステム起動処理を継続することが可能となる。
【００６９】
このように、キャッシュ間のコヒーレンシを保つＣＰＵ間キャッシュ共有制御モジュール２０３がキャッシュミスヒット時に行うＬ１キャッシュのマイグレーションにおいて、マイグレーションの対象として検索するＣＰＵ内のＬ１キャッシュの範囲が従来に比較してＣＰＵの数分大きくなる。マイグレーションの対象として検索するＣＰＵ内のＬ１キャッシュの範囲が大きくなればキャッシュヒット率が向上し、処理の高速化を実現する。
【００７０】
なお、上記説明では、電源投入時におけるシステム起動の動作を中心に説明したが、これに限るものではなく、組込機器が通常稼働している場合においても本発明を利用することができる。しかし、処理の繰り返しが少ないという特徴があるシステム起動処理ではキャッシュヒット率が低く、必要な命令やデータを再取得するためのＮＯＲへアクセスが頻繁に発生するため、特に本発明を実施することにより得られる効果が高い。
【００７１】
また、上記説明では命令とデータの格納先はＮＯＲとして説明したが、格納先の記憶手段としては命令とデータが格納できれば特に限定はしない。
【００７２】
また、命令キャッシュとデータキャッシュが採用しているキャッシュの構造は、例えば、フルアソシアティブ(Full Associative)方式、ダイレクトマップ(Direct Map)方式、またはセットアソシアティブ(Set Associative)方式などのいずれの方式の構造とすることができる。ただし、命令キャッシュとデータキャッシュは同じ方式を採用していることが求められる。
【００７３】
なお、上記説明ではマルチＣＰＵの場合について説明したが、マルチコアの場合でも同様に本発明を適用することができる。この場合、図４のＣＰＵ１００−１〜４を、それぞれコア１〜４としてとらえればよい。
【００７４】
また、上記説明では、制御部とキャッシュ間転送モジュールとを分離されたブロックとして説明したが、これに限るものではなく、当該制御部が転送機能を取り込む形で構成されていても良い。この場合、制御部は、命令フェッチにより新たに定義されているキャッシュ間転送要求命令を実行し、制御部自身が図２に示すフローに従ってデータキャッシュ内に格納されている命令を命令キャッシュに転送する処理を行っても良い。
【００７５】
（その他の実施の形態）
本実施の形態に関する情報処理装置の具体的構成は、実施の形態１と同一であるため図１を援用して説明する。すなわち、ＣＰＵは、データキャッシュと命令キャッシュとキャッシュ間転送モジュールと制御部を備えており、情報処理装置はこのようなＣＰＵを複数備えたマルチＣＰＵシステムである。
【００７６】
電源が投入されると、ＣＰＵ−１はシステム起動処理を開始する。
【００７７】
ＣＰＵ−２〜ＣＰＵ−４は、実施の形態１と同様、命令キャッシュ１０１及びデータキャッシュ１０２に命令とデータの格納を行う。すなわち、第１の処理として、ロード命令を実行してＮＯＲから命令をデータキャッシュにロードする。次に、データキャッシュに格納した命令を命令キャッシュへ転送する。そして、再度ロード命令を実行し、データをデータキャッシュに格納する。
【００７８】
ここで、ＣＰＵ−２〜ＣＰＵ−４は、ＣＰＵ−１が実行している命令よりも先の処理内容を命令キャッシュ１０１とデータキャッシュ１０２にあらかじめ構築しておく。すなわち、システム起動処理の中で現在ＣＰＵ−１が実行している処理よりも後で必要となる命令及びデータをそれぞれ命令キャッシュ及びデータキャッシュに格納しておく。
【００７９】
次に、システム起動処理を行うＣＰＵをＣＰＵ−１からＣＰＵ−２〜４のいずれかのＣＰＵに変更する。この変更は自発的に行われてもよいし、システム起動処理を実行していたＣＰＵ１が何らかのトラブルで起動処理を継続できなくなった場合に、ＣＰＵ２〜４にその担当が移譲される構成であってもよい。
【００８０】
このように、マルチＣＰＵを有するシステムにおいて、１つのＣＰＵがシステム起動処理を行い、他のＣＰＵはシステム起動処理の担当の移譲に備えて、必要となる命令及びデータのキャッシュ構築を予め行ったうえで待機しておく。そして、担当の移譲が行われた場合には、移譲されたＣＰＵが引き続きシステム起動処理を継続する。
【００８１】
このように、システム起動処理を行うＣＰＵの変更が可能となる構成とすることで、システム起動処理を行っていたＣＰＵに復旧および実行継続不可能なハードウェア障害が発生しても、別のＣＰＵでシステム起動処理を継続して実行でき、システム全体の対障害性が向上する。すなわち、システム起動処理を行うＣＰＵを別のＣＰＵに変更する、システム起動処理自体のマイグレーションが可能となる。
【００８２】
なお、上記説明では１つのＣＰＵのみがシステム起動処理を実行する場合について説明したがこれに限定するものではない。すなわち、Ｎ個のＣＰＵを有するマルチＣＰＵシステムにおいて、一部のＣＰＵ群が排他制御を行いながらシステム起動処理を担当し、他のＣＰＵ群がロード命令及びキャッシュ間転送要求命令を実行して、システム起動処理で必要となる命令を命令キャッシュに格納するよう動作しても良い。
【００８３】
なお、上述したプログラムは、コンピュータ・システムがアクセス可能な様々な種類の記憶媒体に格納することが可能である。また、このプログラムは、通信媒体を介して伝達されることが可能である。ここで、記憶媒体には、例えば、フレキシブルディスク、ハードディスク、磁気ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＤＶＤ、ＲＯＭカートリッジ、バッテリバックアップ付きＲＡＭメモリカートリッジ、フラッシュメモリカートリッジ、不揮発性ＲＡＭカートリッジ等が含まれる。また、通信媒体には、電話回線等の有線通信媒体、マイクロ波回線等の無線通信媒体等が含まれ、インターネットも含まれる。
【００８４】
また、上記説明では、命令キャッシュとデータキャッシュの２つのＬ１キャッシュ間での転送について説明したが、キャッシュが階層化されている場合にはこれらのキャッシュ間での転送に拡張することも可能である。すなわち、Ｌｎキャッシュ（ｎは２以上の整数）まで階層化されている場合には、ｎ階層のデータキャッシュに読み込まれた命令をｎ階層の命令キャッシュに転送する制御を上述の制御手段が行う構成であっても良い。
【００８５】
また、上記説明では組込機器における場合について説明したがこれに限るものではなく、様々な種類の情報処理装置について本発明を利用することができる。
【００８６】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変形・変更することが可能である。本発明の実施の形態としては様々な態様が考えられ、例えば以下のような実施の形態が可能である。
【００８７】
（１）命令を一時記憶する第１の記憶手段と、命令及びデータを一時記憶する第２の記憶手段と、前記第２の記憶手段に一時記憶されている命令を前記第１の記憶手段に転送する転送手段と、第３の記憶手段に格納されている命令を前記第２の記憶手段に読み込む第１の制御と前記転送手段に対して前記第２の記録手段へ読み込まれた命令を前記第１の記憶手段に対して転送させる第２の制御とを行う制御手段と、を具備するプロセッサ。
（２）前記制御手段は、前記第３の記憶手段に記憶されている命令又はデータを前記第２の記憶手段に読み込ませる命令であるロード命令を実行することで前記第１の制御を行い、前記転送手段に前記転送を行わせる命令であるキャッシュ間転送要求命令を実行することで前記第２の制御を行う、（１）に記載のプロセッサ。
（３）前記転送手段は、転送前の前記命令が一時記憶されていた前記第２の記憶手段のアドレスと転送後に前記命令が一時記憶される前記第１の記憶手段のアドレスとが同一になるように転送することを特徴とする、（１）又は（２）に記載のプロセッサ。
（４）前記第１の制御及び第２の制御によって処理される命令は、他のプロセッサに対して転送されるための命令であることを特徴とする（１）から（３）に記載のプロセッサ。
（５）前記第１の制御及び第２の制御は、他のプロセッサがシステム起動処理を実行している間に行われる、（１）から（４）に記載のプロセッサ。
（６）命令及びデータを格納する第３の記憶手段と、命令を一時記憶する第１の記憶手段と、命令及びデータを一時記憶する第２の記憶手段と、前記第２の記憶手段に一時記憶されている命令を前記第１の記憶手段に転送する転送手段と、前記第３の記憶手段に格納されている命令を前記第２の記憶手段に読み込む第１の制御と前記転送手段に対して前記第２の記録手段へ読み込まれた命令を前記第１の記憶手段に対して転送させる第２の制御とを行う制御手段と、を具備するプロセッサを複数備える、情報処理装置。
（７）前記第１の記憶手段に一時記憶されている命令又は前記第２の記憶手段に一時記憶されているデータの前記複数のプロセッサ間での転送を制御する転送制御手段を更に備える、（６）に記載の情報処理装置。
（８）前記複数のプロセッサが具備する各々の前記転送手段は、転送前の前記命令が一時記憶されていた前記第２の記憶手段のアドレスと転送後の前記命令が一時記憶される前記第１の記憶手段のアドレスとが同一になるように前記転送を行うことを特徴とする、（６）又は（７）に記載の情報処理装置。
（９）前記転送制御手段は、前記複数のプロセッサが有する前記第１の記憶手段又は前記第２の記憶手段に一時記憶されている命令又はデータの内容及び記憶場所が対応付けられた制御情報を有する、（６）から（８）に記載の情報処理装置。
（１０）前記転送手段は、前記転送が完了したことを示す転送完了信号を前記転送制御手段へ出力し、前記転送制御手段は、前記転送完了信号に基づいて前記制御情報を更新する、（９）に記載の情報処理装置。
（１１）命令をデータキャッシュにロードする第１ロード工程と、前記ロードされた命令とロード先のデータキャッシュ及びアドレスとの対応関係を記した制御情報を記憶する記憶工程と、前記データキャッシュにロードされた命令を命令キャッシュへ転送する転送工程と、前記転送が完了したことを通知する通知工程と、前記通知に基づいて前記制御情報を更新する更新工程と、を有する情報処理方法。
（１２）前記更新工程は、前記通知に基づいて前記命令の格納先を示す情報をアドレスは同一に保ちつつデータキャッシュから命令キャッシュに変更して前記制御情報を更新する、（１１）に記載の情報処理方法。
（１３）第１のプロセッサにシステム起動に関する処理を実行させ、前記第１のプロセッサ以外のプロセッサに、前記第１のプロセッサで実行されうる命令をデータキャッシュにロードさせる処理と、前記ロードされた命令を前記データキャッシュから命令キャッシュに転送させる処理と、を実行させるシステム起動方法。
（１４）第１のプロセッサにシステム起動に関する処理を実行させ、前記第１のプロセッサ以外のプロセッサに、前記第１のプロセッサで実行されうる命令をデータキャッシュにロードさせる処理と、前記ロードされた命令を前記データキャッシュから命令キャッシュに転送させる処理と、を実行させるシステム起動方法。
（１５）第１のプロセッサにシステムの起動に関する処理を実行させ、前記第１のプロセッサ以外のプロセッサに、前記第１のプロセッサで実行されうる命令をデータキャッシュにロードさせる処理と、前記ロードされた命令を前記データキャッシュから命令キャッシュに転送させる処理と、を実行させ、所定の条件に基づいてシステム起動処理の実行担当を前記第１のプロセッサから他のプロセッサに変更する処理をいずれかのプロセッサに実行させる、システム起動方法。
（１６）複数のプロセッサを有する情報処理装置において、第１のプロセッサにシステムの起動に関する処理を実行させ、前記第１のプロセッサ以外のプロセッサに、前記第１のプロセッサで実行されうる命令をデータキャッシュにロードさせる処理と、前記ロードされた命令を前記データキャッシュから命令キャッシュに転送させる処理と、を実行させるプログラム。
（１７）複数のプロセッサを有する情報処理装置において、第１のプロセッサにシステムの起動に関する処理を実行させ、前記第１のプロセッサ以外のプロセッサに、前記第１のプロセッサで実行されうる命令をデータキャッシュにロードさせる処理と、前記ロードされた命令を前記データキャッシュから命令キャッシュに転送させる処理と、を実行させ、所定の条件に基づいてシステム起動処理の実行担当を前記第１のプロセッサから他のプロセッサに変更する処理をいずれかのプロセッサに実行させる、プログラム。
【符号の説明】
【００８８】
１００  ＣＰＵ
１０１  命令キャッシュ
１０２  データキャッシュ
１０３  制御部
１０４  キャッシュ間転送モジュール
２０１  ＤＲＡＭ
２０２  ＮＯＲ
２０３  ＣＰＵ間キャッシュ共有制御モジュール
３００  命令
３０１  データ
８００  ＣＰＵ
８０１  ＤＲＡＭ
８０２  ＮＯＲ
８０３  ＣＰＵ間キャッシュ共有制御モジュール
８０４  Ｌ１キャッシュ
【図１】
0005644539.tif 000002
【図２】
0005644539.tif 000003
【図３】
0005644539.tif 000004
【図４】
0005644539.tif 000005
【図５】
0005644539.tif 000006
【図６】
0005644539.tif 000007
【図７】
0005644539.tif 000008
【図８】
0005644539.tif 000009