(57)【特許請求の範囲】
【請求項１】
少なくとも２以上のプロセッサに個別に対応する複数のキャッシュメモリと、
各キャッシュメモリ間でデータを転送するデータ転送部と、を備え、
前記データ転送部は、第１のプロセッサが処理し更に第２のプロセッサが処理を加えるデータであって前記複数のキャッシュメモリよりも下位の記憶階層の特定アドレスにある特定データを前記第１のプロセッサが処理した後、処理された該特定データを該第２のプロセッサに対応するキャッシュメモリへ転送し、
前記第２のプロセッサに対応するキャッシュメモリは、前記データ転送部から前記特定データが転送されるまでは該第２のプロセッサによる前記特定アドレスのデータへのアクセスを保留し、該データ転送部から該特定データが転送された後アクセスを再開する処理を、キャッシュメモリのデータの有効性を示す情報に基づいて実行し、
前記第２のプロセッサに対応するキャッシュメモリには、前記第１のプロセッサが処理したデータを格納するための記憶領域が確保されており、
前記第２のプロセッサに対応するキャッシュメモリは、前記データ転送部から前記特定データが転送されると、該特定データを前記記憶領域へ格納すると共に該記憶領域のデータが有効である旨の有効情報を保持し、前記第２のプロセッサによる前記特定アドレスのデータへのアクセスの許否を該有効情報の有無に基づいて判定する、
キャッシュ装置。
【請求項２】
前記データ転送部は、前記特定データを前記第１のプロセッサが処理した後、処理された該特定データを前記特定アドレスの情報と共に前記第２のプロセッサに対応するキャッシュメモリへ転送し、
前記第２のプロセッサに対応するキャッシュメモリは、前記データ転送部から前記特定データが転送されるまでは前記第２のプロセッサによる前記特定アドレスのデータへのアクセスを保留すると共に、保留するアクセス先のアドレスの情報を保持し、前記データ転送部から転送されたアドレスの情報が、保持しているアドレスの情報と一致している場合、アクセスを再開する、
請求項１に記載のキャッシュ装置。
【請求項３】
前記データ転送部は、前記第１のプロセッサに対応するキャッシュメモリから前記下位
の記憶階層の前記特定アドレスへ該第１のプロセッサが処理した前記特定データが書き込まれた後、処理された該特定データを前記第２のプロセッサに対応するキャッシュメモリへ転送する、
請求項１または２に記載のキャッシュ装置。
【請求項４】
少なくとも２以上のプロセッサと、
各プロセッサに個別に対応する複数のキャッシュメモリと、
各キャッシュメモリ間でデータを転送するデータ転送部と、を備え、
前記データ転送部は、第１のプロセッサが処理し更に第２のプロセッサが処理を加えるデータであって前記複数のキャッシュメモリよりも下位の記憶階層の特定アドレスにある特定データを前記第１のプロセッサが処理した後、処理された該特定データを該第２のプロセッサに対応するキャッシュメモリへ転送し、
前記第２のプロセッサに対応するキャッシュメモリは、前記データ転送部から前記特定データが転送されるまでは該第２のプロセッサによる前記特定アドレスのデータへのアクセスを保留し、該データ転送部から該特定データが転送された後アクセスを再開する処理を、キャッシュメモリのデータの有効性を示す情報に基づいて実行し、
前記第２のプロセッサに対応するキャッシュメモリには、前記第１のプロセッサが処理したデータを格納するための記憶領域が確保されており、
前記第２のプロセッサに対応するキャッシュメモリは、前記データ転送部から前記特定データが転送されると、該特定データを前記記憶領域へ格納すると共に該記憶領域のデータが有効である旨の有効情報を保持し、前記第２のプロセッサによる前記特定アドレスのデータへのアクセスの許否を該有効情報の有無に基づいて判定する、
情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、キャッシュ装置、及び情報処理装置を開示する。
【背景技術】
【０００２】
近年、複数のプロセッサを内蔵したコンピュータがある（例えば、特許文献１，３を参照）。また、複数段の処理を段階毎に各プロセッサに割り当て、各プロセッサの処理をソフトウェアパイプラインでオーバーラップさせながら実行させることも行なわれている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１−２５１２５０号公報
【特許文献２】特開２００４−３８６００号公報
【特許文献３】特開昭６３−８１５４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
大量のデータに複数段の処理を施したい場合に、複数のプロセッサを用いることができるのであれば、特定の処理を実行するプロセッサの動作と該特定の処理よりも後段の処理を実行するプロセッサの動作とをオーバーラップさせることが望ましい。
【０００５】
ところで、コンピュータには、プロセッサとメインメモリとの間の速度差を補うためにキャッシュメモリが用いられる。よって、各プロセッサが特定のデータに対して施す処理が適正な順序で実行されるようにするためには、該特定のデータが各キャッシュメモリ間で矛盾なく共有される必要がある。すなわち、該特定のデータへのアクセスが排他的に行なわれるようにする必要があり、そのための方策としては、例えば、後段の処理を実行するプロセッサがキューをポーリングで監視するか、前段の処理を実行するプロセッサが後段に対して割り込みをかけるなどの何らかの通信を行なうことが考えられる。しかし、ポーリングや割り込みを行なうハードウェア構成の実現には高コストを要する。
【０００６】
そこで、本願は、簡単な構成で各プロセッサが特定のデータを排他的に処理できるキャッシュ装置、及び情報処理装置を提供することを課題とする。
【課題を解決するための手段】
【０００７】
本願は、次のような装置を開示する。
少なくとも２以上のプロセッサに個別に対応する複数のキャッシュメモリと、
各キャッシュメモリ間でデータを転送するデータ転送部と、を備え、
前記データ転送部は、第１のプロセッサが処理し更に第２のプロセッサが処理を加えるデータであって前記複数のキャッシュメモリよりも下位の記憶階層の特定アドレスにある特定データを前記第１のプロセッサが処理した後、処理された該特定データを該第２のプロセッサに対応するキャッシュメモリへ転送し、
前記第２のプロセッサに対応するキャッシュメモリは、前記データ転送部から前記特定データが転送されるまでは該第２のプロセッサによる前記特定アドレスのデータへのアクセスを保留し、該データ転送部から該特定データが転送された後アクセスを再開する、
キャッシュ装置。
【０００８】
また、本願は、次のような装置を開示する。
少なくとも２以上のプロセッサと、
各プロセッサに個別に対応する複数のキャッシュメモリと、
各キャッシュメモリ間でデータを転送するデータ転送部と、を備え、
前記データ転送部は、第１のプロセッサが処理し更に第２のプロセッサが処理を加えるデータであって前記複数のキャッシュメモリよりも下位の記憶階層の特定アドレスにある特定データを前記第１のプロセッサが処理した後、処理された該特定データを該第２のプロセッサに対応するキャッシュメモリへ転送し、
前記第２のプロセッサに対応するキャッシュメモリは、前記データ転送部から前記特定データが転送されるまでは該第２のプロセッサによる前記特定アドレスのデータへのアクセスを保留し、該データ転送部から該特定データが転送された後アクセスを再開する、
情報処理装置。
【発明の効果】
【０００９】
簡単な構成で、各プロセッサが特定のデータを排他的に処理できる。
【図面の簡単な説明】
【００１０】
【図１】第一実施形態に係るコンピュータの構成図である。
【図２】データ送受信部の構成図である。
【図３】コンピュータが処理するデータの一例を示す第一の図である。
【図４】コンピュータが処理するデータの一例を示す第二の図である。
【図５】コンピュータの動作フロー図である。
【図６】第二実施形態に係るコンピュータの構成図である。
【図７】キャッシュメモリの構成図である。
【図８】キャッシュメモリＣ１１に確保されたメモリ領域の一例を示す図である。
【図９】キャッシュメモリＣ１２に確保されたメモリ領域の一例を示す図である。
【図１０】ライト完了処理の処理フロー図である。
【図１１】リード処理の処理フロー図である。
【図１２】ライト処理の処理フロー図である。
【図１３】タイミングチャートを示した図である。
【発明を実施するための形態】
【００１１】
第一実施形態に係るコンピュータの構成を図１に示す。コンピュータ１は、図１に示すように、プロセッサコアＰ１，Ｐ２を有するプロセッサ部２、データ送受信部Ｄ１，Ｄ２やキャッシュメモリＣ１，Ｃ２、キャッシュ間データ転送部Ｔを有するキャッシュメモリ部３、及びメインメモリ４を備えている。
【００１２】
なお、図１では、キャッシュメモリＣ１，Ｃ２やデータ送受信部Ｄ１，Ｄ２がプロセッサコアＰ１，Ｐ２と別に設けられているが、プロセッサコアＰ１，Ｐ２に内置されていてもよい。また、本実施形態では、キャッシュメモリＣ１，Ｃ２とメインメモリ４という２つの記憶階層がある場合を例に説明しているが、更なる階層の記憶装置類があってもよい。また、以下、データという場合は、コンピュータ１が実行するプログラムなども含めて、プロセッサコアＰ１，Ｐ２とメインメモリ４との間で転送される全ての情報を指すものとする。
【００１３】
プロセッサコアＰ１は、命令デコーダ等を内蔵しており、プログラムカウンタ（ＰＣ）の値に基づいてキャッシュメモリＣ１にアクセスし、各種命令を解釈して実行する。プロセッサコアＰ１は、データアクセスが生じた場合、データ送受信部Ｄ１を経由してキャッシュメモリＣ１にアクセスする。プロセッサコアＰ２もプロセッサコアＰ１と同様である。
【００１４】
データ送受信部Ｄ１は、プロセッサコアＰ１とキャッシュメモリＣ１との間に配置され
、プロセッサコアＰ１からのアクセスやキャッシュ間データ転送部Ｔからのアクセスを調停する。データ送受信部Ｄ２も、データ送受信部Ｄ１と同様である。
【００１５】
キャッシュメモリＣ１は、ＳＲＡＭ（Static Random Access Memory）であり、プロセ
ッサコアＰ１に最も近い記憶階層を形成する。キャッシュメモリＣ１は、プロセッサコアＰ１のために用意された独立のキャッシュメモリである。キャッシュメモリＣ１は、プロセッサコアＰ１から送られたアドレス値に対応するタグを照会し、アドレス値に対応するタグの有効ビットがオンであればデータをプロセッサコアＰ１へ送出し、アドレス値に対応するタグが索出できないか或いは索出したタグの有効ビットがオフであれば（キャッシュミスであれば）メインメモリ４の該当アドレスにアクセスしてデータを取得しプロセッサコアＰ１へ送出する。キャッシュメモリＣ２についても、キャッシュメモリＣ１と同様である。
【００１６】
キャッシュ間データ転送部Ｔは、データ送受信部Ｄ１とデータ送受信部Ｄ２との間でデータを転送する。データ送受信部Ｄ１とデータ送受信部Ｄ２がキャッシュ間データ転送部Ｔによって相互に接続されているため、メインメモリ４を介さなくても、プロセッサコアＰ１とプロセッサコアＰ２がデータを共有できる。
【００１７】
メインメモリ４は、各プロセッサコアＰ１，Ｐ２が共有する記憶階層であり、キャッシュメモリ部３よりも下位に位置する記憶階層である。なお、本実施形態では、キャッシュメモリ部３よりも下位の記憶階層をメインメモリ４と称しているが、共有のキャッシュメモリなどであってもよい。
【００１８】
なお、下位とは、各プロセッサコアＰ１，Ｐ２からのアクセスに要する時間に関し、メインメモリ４がキャッシュメモリＣ１，Ｃ２よりも長いことを意味する。本実施形態では、プロセッサ部２が、まず、キャッシュメモリ部３にアクセスし、キャッシュメモリ部３にデータが無ければメインメモリ４からキャッシュメモリ部３へデータが送られる。そして、プロセッサ部２がキャッシュメモリ部３のデータを取得する。このような手順を採るため、メインメモリ４は、キャッシュメモリ部３よりも下位になっている。
【００１９】
データ送受信部Ｄ１の構成を図２に示す。データ送受信部Ｄ２の構成は、データ送受信部Ｄ１と同様であるため、図２では符号“Ｄ２”を併記する。データ送受信部Ｄ１（Ｄ２）は、図２に示すように、全体制御部１−Ｄ１（Ｄ２）、アクセス保留制御部２−Ｄ１（Ｄ２）、データ送信制御部３−Ｄ１（Ｄ２）、データ受信制御部４−Ｄ１（Ｄ２）、アクセス要求選択部５−Ｄ１（Ｄ２）を備える。
【００２０】
全体制御部１−Ｄ１（Ｄ２）は、データ送受信部Ｄ１（Ｄ２）を構成する各部の動作を調停する。また、全体制御部１−Ｄ１（Ｄ２）は、プロセッサコアＰ１（Ｐ２）からのアクセスを、キャッシュメモリＣ１（Ｃ２）の状態に応じて調停する。全体制御部１−Ｄ１（Ｄ２）は、例えば、プロセッサコアＰ１（Ｐ２）からアクセスがあった場合に、当該プロセッサコアＰ１（Ｐ２）がアクセスするアドレスに対応する有効なデータが格納されるのをキャッシュメモリＣ１（Ｃ２）が待っている状態であり、アクセスを一時的に受け付けることができない状態であれば、当該プロセッサコアＰ１（Ｐ２）に対してＢＵＳＹ状態であることを通知する。
【００２１】
アクセス保留制御部２−Ｄ１（Ｄ２）は、プロセッサコアＰ１（Ｐ２）からのアクセスを保留するか否かを、キャッシュメモリＣ１（Ｃ２）の状態に応じて決定する。保留の要否は、プロセッサコアＰ１（Ｐ２）がアクセスするアドレスに対応する有効なデータがキャッシュメモリＣ１（Ｃ２）に格納されているか否かに応じて決定される。アクセス保留制御部２−Ｄ１（Ｄ２）は、プロセッサコアＰ１（Ｐ２）からのアクセスを保留する場合
にはアクセス情報（すなわち、プロセッサコアＰ１（Ｐ２）がアクセスしようとしているメインメモリ４上のアドレスの情報）を記憶しておき、データ受信制御部４−Ｄ１（Ｄ２）から通知されたアドレスが、記憶しているアクセス情報のアドレスに一致している場合に、プロセッサコアＰ１（Ｐ２）からキャッシュメモリＣ１（Ｃ２）へのアクセスを再開する。
【００２２】
データ送信制御部３−Ｄ１（Ｄ２）は、プロセッサコアＰ１（Ｐ２）によるデータの処理状況に応じて、当該データのキャッシュ間データ転送部Ｔへの送出を行なう。一般的に、プロセッサコアが処理したキャッシュメモリのデータがメインメモリに書き込まれれば、当該プロセッサコアによるデータの処理は完了したものとみなせる。そこで、データ送信制御部３−Ｄ１（Ｄ２）は、プロセッサコアＰ１（Ｐ２）からデータ書き込み完了通知（ライト完了）を受けたら、キャッシュメモリＣ１（Ｃ２）から当該データを取得してこれをキャッシュ間データ転送部Ｔに出力する。これにより、プロセッサコアＰ１（Ｐ２）が処理したデータがプロセッサコアＰ２（Ｐ１）へ送られる。
【００２３】
データ受信制御部４−Ｄ１（Ｄ２）は、キャッシュ間データ転送部Ｔからデータが送られてきた場合にこれを処理する。具体的には、データ受信制御部４−Ｄ１（Ｄ２）は、キャッシュ間データ転送部Ｔからデータが送られてきたらこれをキャッシュメモリＣ１（Ｃ２）に格納し、そのアドレスをアクセス保留制御部２Ｄ１（Ｄ２）に通知する。
【００２４】
アクセス要求選択部５−Ｄ１（Ｄ２）は、プロセッサコアＰ１（Ｐ２）、アクセス保留制御部２−Ｄ１（Ｄ２）、データ送信制御部３−Ｄ１（Ｄ２）、データ受信制御部４−Ｄ１（Ｄ２）の各部からのアクセス要求が競合した場合に、既定の優先順位に従って各部からの出力を調停する。既定の優先順位は、アクセス要求選択部５−Ｄ１（Ｄ２）に予め設定されており、例えば、各キャッシュメモリ間のデータの整合性を確保するために最も優先されるべき機能部から順に出力が選択されるように設定される。本実施形態では、例えば、データ受信制御部４−Ｄ１（Ｄ２）からの出力が最も優先され、データ送信制御部３−Ｄ１（Ｄ２）、アクセス保留制御部２−Ｄ１（Ｄ２）、プロセッサコアＰ１（Ｐ２）の順に優先順位が下がるように設定されているものとする。各部からのアクセス情報が競合した場合には、既定の優先順位に従って決定される何れかのアクセス情報がアクセス要求選択部５−Ｄ１（Ｄ２）を通過してキャッシュメモリＣ１（Ｃ２）へ送出されることになる。
【００２５】
次に、コンピュータ１の動作について説明する。コンピュータ１の動作説明は、プロセッサコアＰ１で処理したデータをプロセッサコアＰ２が引き継いで更に処理することを前提とする。以下、プロセッサコアＰ１が実行するプログラムを処理Ａプログラムといい、プロセッサコアＰ２が実行するプログラムを処理Ｂプログラムということにする。また、主にプロセッサコアＰ１側で実行される処理を前段側処理と呼び、主にプロセッサコアＰ２側で実行される処理を後段側処理と呼ぶことにするが、各プロセッサコアに優劣を設ける意図はない。すなわち、コンピュータ１は、プロセッサコアＰ２で処理したデータをプロセッサコアＰ１が引き継いで更に処理することも可能である。また、コンピュータ１は、プロセッサコアＰ１で処理したデータをプロセッサコアＰ２が引き継いで更に処理したのち、再びプロセッサコアＰ１へ引き継いで処理することも可能である。
【００２６】
コンピュータ１が処理するデータについて説明する。例えば、画像処理などのように、ある出力データを得るために一部の入力データを用いるような特性がある場合、大量の画像データの処理にあたっては処理Ａと処理Ｂとをオーバーラップさせることが望ましい。図３は、コンピュータ１が処理するデータの一例を説明する図である。処理Ａの処理イメージを図３の上段側に、処理Bの処理イメージを図３の下段側に示す。処理Ａは、画像の
横方向に７ブロック分のデータを参照し、１ブロック分のデータを出力するものとする。
また、処理Ｂは、画像の縦方向に３ブロック分のデータを参照し、１ブロック分のデータを出力するものとする。このような処理は、画像のフィルタ処理に多く見られる。
【００２７】
このような処理においては、図４に示すように、処理Ａによってデータが逐次処理されて、処理Ｂを開始できるだけの十分なデータが揃ったタイミングで処理Ｂを開始することにより、処理Ａと処理Ｂとをオーバーラップさせることができる。処理Ｂが処理するデータは、必ず処理Ａが行われた後のものでなければならない。このため、あるデータに対して処理Ｂを行う際には、参照するデータに対する処理Ａの完了を確認しなければならない。
【００２８】
このようなデータ処理を行う場合を例に、以下、コンピュータ１の動作を説明する。コンピュータ１の動作フローを図５に示す。コンピュータ１が起動して所定のプログラムが実行され、処理ＡのタスクがプロセッサコアＰ１によって実行されると、プロセッサコアＰ１は、領域確保の旨のコマンドをデータ送受信部Ｄ１に送る。すなわち、プロセッサコアＰ１は、メインメモリ４の特定の領域に、処理したデータを格納するための領域を確保する旨の制御コマンドをデータ送受信部Ｄ１に送る。データ送受信部Ｄ１では、当該コマンドがアクセス要求選択部５−Ｄ１を介してキャッシュメモリＣ１へ送られる。これにより、キャッシュメモリＣ１には、メインメモリ４に確保されたメモリ領域に対応するメモリ領域が、メインメモリ４のアドレスの情報に対応付けて確保される（Ｓ１０１）。
【００２９】
キャッシュメモリＣ１にメモリ領域が確保されたら、プロセッサコアＰ１は、処理Ａを実行する。プロセッサコアＰ１は、処理Ａを実行する過程で、データの“リード”や“ライト”、“ライト完了”といった各種のコマンドをデータ送受信部Ｄ１に送る。なお、ステップＳ１０１の処理において確保されたメモリ領域は本プログラムが任意に確保した領域であるため、当該メモリ領域に対する読み出しアクセスのデータの信憑性は保証されない。データ送受信部Ｄ１にコマンドが送られると、アクセス保留制御部２−Ｄ１によって、キャッシュメモリＣ１に記憶されている対応データの有効性の情報に基づき、当該コマンドの許否の判定が行われる。そして、プロセッサコアＰ１が処理したデータが、ステップＳ１０１で確保されたキャッシュメモリＣ１のメモリ領域へ逐次格納されていく（Ｓ１０２）。なお、キャッシュメモリＣ１の当該メモリ領域への“ライト”処理は、ライトバック方式であることが望ましい。プロセッサコアＰ１から“ライト完了”コマンドが通知されるまでは、当該メモリ領域のデータが確定せず、更に処理が施され得るからである。プロセッサコアＰ１から“ライト完了”コマンドが通知されたら、キャッシュメモリＣ１は、データをメインメモリ４へ書き込んでよい。なお、“ライト完了”が通知された後にキャッシュメモリＣ１の当該領域にデータが書き込まれても、書き込まれたデータが後段側の処理で用いられず、処理結果が保証されない。
【００３０】
プロセッサコアＰ１は、処理Ａを実行する過程で一定量のデータを処理したら（Ｓ１０３）、データ送受信部Ｄ１に対して“ライト完了”コマンドを送る（Ｓ１０４）。プロセッサコアＰ１が送る“ライト完了”コマンドは、書き込みが完了したデータについては処理Ａが完了しており、当該データに対して処理Ｂを更に行うことができることを意味する。そこで、データ送受信部Ｄ１では、プロセッサコアＰ１から送られた“ライト完了”コマンドを、キャッシュメモリＣ１からキャッシュメモリＣ２へのデータ送信要求として取り扱う。ここで、一定量のデータとは、他のキャッシュメモリへデータ転送を行なうことが望ましい蓄積データ量であり、例えば、キャッシュメモリＣ１の１キャッシュラインあたりのデータ量である。
【００３１】
プロセッサコアＰ１は、全データに対する処理Ａの実行が完了するまで、上記一連の処理（Ｓ１０１〜Ｓ１０５）を繰り返す（Ｓ１０５）。
【００３２】
プロセッサコアＰ１は、全データに対する処理Ａの実行が完了したら、メインメモリ４に確保していたメモリ領域を解放する旨の制御コマンドをデータ送受信部Ｄ１に送る（Ｓ１０６）。これにより、プロセッサコアＰ１における一連の処理（Ｓ１０１〜Ｓ１０６）が完了する。
【００３３】
プロセッサコアＰ１で上記一連の処理（Ｓ１０１〜Ｓ１０６）が実行されている間にデータ送受信部Ｄ１，Ｄ２で実行されるキャッシュ間の転送処理について説明する。
【００３４】
上述したＳ１０４の処理でデータ送受信部Ｄ１に“ライト完了”コマンドが送られると、データ送信制御部３−Ｄ１は、キャッシュメモリＣ１の要求された領域に関する読み出しアクセス情報を生成し、これをアクセス要求選択部５−Ｄ１に送る（Ｓ２０１）。
【００３５】
アクセス要求選択部５−Ｄ１に送られたコマンドは、キャッシュメモリＣ１へ送られる。キャッシュメモリＣ１では、アクセス要求選択部５−Ｄ１から送られたコマンドに従い、要求された領域のデータをデータ送受信部Ｄ１に送る（Ｓ２０２）。
【００３６】
キャッシュメモリＣ１からデータ送受信部Ｄ１へ送られたデータは、当該データが格納されているメインメモリ４上のアドレス情報と共に、キャッシュ間データ転送部Ｔを介してデータ送受信部Ｄ２へ送られる（Ｓ２０３）。これにより、処理Ａが行われた一定量のデータが、キャッシュメモリＣ２側へ送られることになる。
【００３７】
前段側処理の内容については以上の通りである。次に、後段側処理の内容について説明する。上述したＳ２０３の処理でデータ送受信部Ｄ１から送られたデータをデータ送受信部Ｄ２が受信すると、データ受信制御部４−Ｄ２は、当該データをキャッシュメモリＣ２へ書き込む旨のコマンドを、当該データやアドレス情報と共にアクセス要求選択部５−Ｄ２へ送る（Ｓ３０１）。
【００３８】
アクセス要求選択部５−Ｄ２に送られたデータは、当該データのメインメモリ４上のアドレス情報と共に、キャッシュメモリＣ２へ送られる。キャッシュメモリＣ２では、送られたデータを、当該データのメインメモリ４上のアドレス情報に対応する領域へ格納すると共に、格納したデータが有効である旨の情報を保持する。また、データ受信制御部４−Ｄ２は、当該アドレス情報をアクセス保留制御部２−Ｄ２へ通知する（Ｓ３０２）。
【００３９】
ところで、上記一連の処理（Ｓ１０１〜Ｓ３０２）が実行されている間、プロセッサコアＰ２側では以下の処理が実行される。すなわち、コンピュータ１が起動して所定のプログラムが実行され、処理ＢのタスクがプロセッサコアＰ２によって実行されると、プロセッサコアＰ２は、領域確保の旨のコマンドをデータ送受信部Ｄ２に送る。ここで、プロセッサコアＰ２が送るコマンドは、ステップＳ１０１の処理においてプロセッサコアＰ１がメインメモリ４に確保したメモリ領域に対応するメモリ領域を、キャッシュメモリＣ２に確保する旨のコマンドである。データ送受信部Ｄ２では、当該コマンドがアクセス要求選択部５−Ｄ２を介してキャッシュメモリＣ２へ送られる。これにより、キャッシュメモリＣ２には、ステップＳ１０１においてメインメモリ４に確保されたメモリ領域に対応するメモリ領域であって、処理Ｂによるデータの処理に必要なメモリ領域が、メインメモリ４のアドレスの情報に対応付けて確保される（Ｓ４０１）。すなわち、キャッシュメモリＣ２には、キャッシュメモリＣ１に確保されたメモリ領域とアドレスが対応するメモリ領域が確保される。ただし、キャッシュメモリＣ２には、当該メモリ領域のデータが無効である旨の情報が格納される。前記所定のプログラムがキャッシュメモリＣ１とキャッシュメモリＣ２の両方に、メインメモリ４の特定のアドレスに対応するメモリ領域が確保されるように予めプログラミングされていることにより、整合性のとれたメモリ領域が確保される。
【００４０】
キャッシュメモリＣ２にメモリ領域が確保されたら、プロセッサコアＰ２は、処理Ｂを実行する（Ｓ４０２）。ここで、本実施形態に係るコンピュータ１は、プロセッサコアＰ１で処理したデータをプロセッサコアＰ２が引き継いで更に処理することを前提としている。このため、プロセッサコアＰ２の支配下にあるキャッシュメモリＣ２にプロセッサコアＰ１が処理したデータが格納されていない場合はアクセスが保留され、プロセッサコアＰ２はデータの処理を中断することになる。具体的には、ステップＳ４０２で処理Ｂを実行する過程で、処理Ｂを行おうとしている処理対象のデータが、当該データがステップＳ３０２の処理によってキャッシュメモリＣ１からキャッシュメモリＣ２へ転送されていない場合、キャッシュメモリＣ２にはプロセッサコアＰ１が処理したデータがまだ格納されていないことになる。
【００４１】
そこで、プロセッサコアＰ２がステップＳ４０２の処理Ｂを実行する過程で、アクセス保留制御部２−Ｄ２は、プロセッサコアＰ２がアクセスしようとするデータが有効であるか否かを、キャッシュメモリＣ２に記憶されている対応データの有効性の情報に基づいて判定する（Ｓ４０３）。アクセス保留制御部２−Ｄ２は、処理Ｂの過程でプロセッサコアＰ２がアクセスを要求するデータが、キャッシュメモリＣ２に未だ転送されておらず、アクセスしようとするアドレスのデータの有効性を示す情報がキャッシュメモリＣ２に無い場合、否定判定を行う。
【００４２】
アクセス保留制御部２−Ｄ２は、ステップＳ４０３の処理で否定判定を行なった場合、プロセッサコアＰ２のアクセスを保留する（Ｓ４０４）。そして、アクセス保留制御部２−Ｄ２は、プロセッサコアＰ２がアクセスしようとしたアドレスの情報を保持する。
【００４３】
プロセッサコアＰ２のアクセスがアクセス保留制御部２−Ｄ２によって保留されている間にステップＳ３０２の処理が実行されて、データ受信制御部４−Ｄ２からアドレスの情報が通知されると、アクセス保留制御部２−Ｄ２は、保留しているアクセスのアドレス情報と通知されたアドレスの情報とが一致するか否かを判定する（Ｓ４０５）。
【００４４】
アクセス保留制御部２−Ｄ２は、保留していたアクセスのアドレス情報と、データ受信制御部４−Ｄ２から通知されたアドレスの情報とが一致していたら、保留していたプロセッサコアＰ２のアクセスを再開する。これにより、保留されていたアクセスのキャッシュ動作が実現されて処理Ｂが再開される（Ｓ４０６）。なお、上述したステップＳ４０３の判定処理において、アクセス保留制御部２−Ｄ２がアクセスの許可を行った場合には、ステップＳ４０４〜Ｓ４０５の処理が省略され、通常のキャッシュ動作が実現されて処理Ｂが行われる。
【００４５】
プロセッサコアＰ２は、全データに対する処理Ｂの実行が完了するまで、上記一連の処理Ｓ４０１〜Ｓ４０６までの処理を繰り返す（Ｓ４０７）。
【００４６】
プロセッサコアＰ２は、全データに対する処理Ｂの実行が完了したら、キャッシュメモリＣ２に確保されていた、ステップＳ４０１の処理で確保した領域の設定を解放する旨のコマンドをデータ送受信部Ｄ２に送る（Ｓ４０８）。これにより、プロセッサコアＰ２における一連の処理（Ｓ４０１〜Ｓ４０８）が完了する。
【００４７】
後段側処理の内容については以上の通りである。本実施形態に係るコンピュータ１であれば、キャッシュ間データ転送部Ｔによるデータ転送により、キャッシュ間のデータの整合性が保たれる。また、後段側でデータを処理する際は、キャッシュメモリに格納されているデータの信憑性が、データ転送によって反転するデータの属性の情報に基づいて確認される。よって、例えば、各プロセッサコアで共有のキャッシュメモリや主記憶を介した
転送や割り込みを使った通信に比べて、高速な処理を実現できる。すなわち、キャッシュメモリＣ１，Ｃ２に使われるメモリは、プロセッサコアＰ１，Ｐ２の動作周波数において数サイクルでアクセス可能である。一方、各プロセッサコアで共有のキャッシュメモリを用いる場合は数１０サイクルを要し、更に他のプロセッサコアとのアクセス競合によりアクセス時間がさらに長くなる可能性がある。また、割り込み応答には少なくとも数１０サイクル（少なくとも汎用レジスタ退避のため、汎用レジスタ本数×１サイクル）の時間がかかる。しかし、本実施形態に係るコンピュータ１であれば、このような時間を短縮できる。なお、上記一連の処理で参照されるアドレス値は、物理アドレスの値であってもよいり、論理アドレスの値であってもよい。また、上記コンピュータ１は、３以上のプロセッサコアを備えるものであってもよい。
【００４８】
第二実施形態に係るコンピュータの構成を図６に示す。本実施形態に係るコンピュータ１１は、上述した実施形態のデータ送受信部Ｄ１，Ｄ２に相当する構成がキャッシュメモリＣ１１，Ｃ１２に内蔵されている。その他の点については第一実施形態に係るコンピュータ１と同様である。例えば、プロセッサコアＰ１，Ｐ２やキャッシュ間データ転送部Ｔは、第一実施形態のものと同様であるため、説明を省く。
【００４９】
キャッシュメモリＣ１１の構成を図７に示す。キャッシュメモリＣ１２の構成は、キャッシュメモリＣ１１と同様であるため、図７では符号（Ｃ１２）を併記している。キャッシュメモリＣ１１は、図７に示すように、プロセッサコアインターフェース部１−Ｃ１１（Ｃ１２）、アクセス保留制御部２−Ｃ１１（Ｃ１２）、データ送信制御部３−Ｃ１１（Ｃ１２）、データ受信制御部４−Ｃ１１（Ｃ１２）、アクセス要求選択部５−Ｃ１１（Ｃ１２）、キャッシュメモリ制御部６−Ｃ１１（Ｃ１２）、タグメモリ部７−Ｃ１１（Ｃ１２）、データメモリ部８−Ｃ１１（Ｃ１２）、下位記憶階層インターフェース部９−Ｃ１１（Ｃ１２）、キャッシュ間データ転送インターフェース部１０−Ｃ１１（Ｃ１２）を備える。
【００５０】
プロセッサコアインターフェース部１−Ｃ１１（Ｃ１２）は、プロセッサコアＰ１（Ｐ２）からのアクセス要求を受け付け、応答を返すインターフェースである。プロセッサコアＰ１（Ｐ２）からは、下記のアクセス・コマンドが要求されるものとする。各アクセス・コマンドはプロセッサの命令語等に対応しており、プログラムから制御可能である。
・領域確保コマンド
・リードアクセス
・ライトアクセス
・ライト完了コマンド
・領域解放コマンド
【００５１】
アクセス保留制御部２−Ｃ１１（Ｃ１２）やデータ送信制御部３−Ｃ１１（Ｃ１２）、データ受信制御部４−Ｃ１１（Ｃ１２）、アクセス要求選択部５−Ｃ１１（Ｃ１２）の動作は、上述した第一実施形態のものと同様である。
【００５２】
すなわち、アクセス保留制御部２−Ｃ１１（Ｃ１２）は、プロセッサコアＰ１（Ｐ２）からのアクセスを保留するか否かを判定し、保留する場合はアクセス先のアドレスの情報を保持する。そして、データ受信制御部４−Ｃ１１（Ｃ１２）から通知されたアドレスの情報が、保持しているアドレスの情報に一致している場合にアクセスを再開する。
【００５３】
データ送信制御部３−Ｃ１１（Ｃ１２）は、プロセッサコアＰ１（Ｐ２）から送られる“ライト完了”コマンドに従い、データメモリ部８−Ｃ１１（Ｃ１２）のデータをキャッシュ間データ転送インターフェース部１０−Ｃ１１（Ｃ１２）に出力させる。
【００５４】
データ受信制御部４−Ｃ１１（Ｃ１２）は、キャッシュ間データ転送インターフェース部１０−Ｃ１１（Ｃ１２）から受け取ったデータをデータメモリ部８−Ｃ１１（Ｃ１２）に格納し、また、当該データのアドレスをアクセス保留制御部２−Ｃ１１（Ｃ１２）へ通知する。
【００５５】
アクセス要求選択部５−Ｃ１１（Ｃ１２）は、プロセッサコアインターフェース部１−Ｃ１１（Ｃ１２）、アクセス保留制御部２−Ｃ１１（Ｃ１２）、データ送信制御部３−Ｃ１１（Ｃ１２）、データ受信制御部４−Ｃ１１（Ｃ１２）の各部からのアクセス要求を調停し、キャッシュメモリ制御部６−Ｃ１１（Ｃ１２）に送出する。
【００５６】
キャッシュメモリ制御部６−Ｃ１１（Ｃ１２）は、キャッシュメモリ−Ｃ１１（Ｃ１２）を構成する各部の動作を調停する。また、キャッシュメモリ制御部６−Ｃ１１（Ｃ１２）は、プロセッサコアＰ１（Ｐ２）からのアクセスを受け付けることができない場合に、ＢＵＳＹ状態であることを通知する。
【００５７】
タグメモリ部７−Ｃ１１（Ｃ１２）は、データメモリ部８−Ｃ１１（Ｃ１２）のデータに付随する情報を格納する記憶領域である。本実施形態に係るコンピュータ１１では、各キャッシュラインのタグが、Ｖ（有効ビット）、Ｍ（更新ビット）、Ｌ（ロックビット）、ＡＤＤＲ（キャッシュラインアドレス）、Ｗ（データ有効ビット）、ＰＩＤ（データ送信先プロセッサＩＤ）を有している。以下、各ビットについて説明する。
【００５８】
Ｖ（有効ビット）：キャッシュラインの有効性を示す。
【００５９】
Ｍ（更新ビット）：キャッシュライン内のデータがプロセッサコアによって更新されているか否かを示す。Ｍ＝１となっているキャッシュラインは、キャッシュメモリから追い出される際に、下位の記憶階層へ書き込みを行う必要がある。
【００６０】
Ｌ（ロックビット）：キャッシュラインが追い出し禁止になっているか否かを示す。Ｌ＝１となっているキャッシュラインは、置き換えの対象にならない。
【００６１】
Ｗ（データ有効ビット）：キャッシュライン内のデータの有効性を示す。すなわち、当該キャッシュライン内のデータが、他のキャッシュメモリ内の対応するキャッシュライン内のデータと整合しているか否かを示す。例えば、Ｗ＝１となっているキャッシュラインにアクセスが行われた場合、アクセス保留制御部２−Ｃ１１（Ｃ１２）は、アクセスを保留してアクセス情報を保持する。
【００６２】
ＡＤＤＲ（キャッシュラインアドレス）：キャッシュライン内のデータのメインメモリ４におけるアドレスを示す。なお、キャッシュメモリＣ１，Ｃ２は、１ラインあたり６４バイトの全１２８ライン、８ｋビットのキャッシュメモリである。よって、本実施形態では、メインメモリ４のアドレスを構成する３２ビットのアドレス値のうち、上位１９ビットのみをＡＤＤＲに格納し、中間の７ビットでキャッシュラインを選択している。下位の６ビットはバイトオフセットである。なお、キャッシュメモリＣ１，Ｃ２は、このようなものに限定されるものでなく、例えば、３２や１２８バイトといった様々なキャッシュライン長のキャッシュメモリ等を適用することができる。
【００６３】
ＰＩＤ（データ送信先プロセッサＩＤ）：データ転送先のプロセッサＩＤを示す。ＰＩＤが無指定の場合は、キャッシュ間データ転送部Ｔに接続された全プロセッサコアにデータを送信する必要がある。なお、プロセッサコアが２つの場合は省くこともできる。
【００６４】
データメモリ部８−Ｃ１１（Ｃ１２）は、キャッシュライン単位でデータを格納する部
分である。
【００６５】
下位記憶階層インターフェース部９−Ｃ１１（Ｃ１２）は、キャッシュメモリＣ１１（Ｃ１２）よりも下位の記憶階層を構成する機器（本実施形態でいうメインメモリ４が該当する）と接続するためのインターフェースである。下位記憶階層インターフェース部９−Ｃ１１（Ｃ１２）は、キャッシュメモリ制御部６−Ｃ１１（Ｃ１２）からの指示を受けてメインメモリ４へアクセス要求を送出する。また、メインメモリ４からの応答を受けたらこれをキャッシュメモリ制御部６−Ｃ１１（Ｃ１２）に通知し、受け取ったデータをデータメモリ部８−Ｃ１１（Ｃ１２）に格納したり、プロセッサコアインターフェース部１−Ｃ１１（Ｃ１２）に送出したりする。
【００６６】
キャッシュ間データ転送インターフェース部１０−Ｃ１１（Ｃ１２）は、キャッシュ間データ転送部Ｔに接続するためのインターフェースである。キャッシュ間データ転送インターフェース部１０−Ｃ１１（Ｃ１２）は、データ送信制御部３−Ｃ１１（Ｃ１２）から送出されたデータや、メインメモリ４でのアドレスの情報を、キャッシュ間データ転送部Ｔへ送出する。この情報は、キャッシュ間データ転送部Ｔを介して送り先のキャッシュメモリＣ１２（Ｃ１１）のデータ受信制御部４−Ｃ１２（Ｃ１１）へ送られる。
【００６７】
次に、コンピュータ１１の動作について説明する。なお、コンピュータ１１の動作は、第一実施形態においてデータ送受信部Ｄ１，Ｄ２で行なわれていた処理がキャッシュメモリＣ１１，Ｃ１２で行なわれるという点以外、第一実施形態に係るコンピュータ１が実行する図５の処理フローと基本的に同様である。そこで、以下に説明する動作説明においては、図５の処理フローを参照しつつ、第一実施形態に係るコンピュータ１と処理が異なっている点を中心に説明する。
【００６８】
本実施形態に係るコンピュータ１１では、ステップＳ１０１において実行される領域確保が、次のようにして実行される。すなわち、プロセッサコアＰ１が領域確保の旨のコマンドをキャッシュメモリＣ１１へ送ると、キャッシュメモリ制御部６−Ｃ１１は、メインメモリ４に確保された特定のメモリ領域に対応するメモリ領域を、データメモリ部８−Ｃ１１の何れかのキャッシュラインに確保する。また、キャッシュメモリ制御部６−Ｃ１１は、データメモリ部８−Ｃ１１に確保したメモリ領域に対応するタグメモリ部７−Ｃ１１のキャッシュラインのタグを、次のように設定する。
Ｖ＝１（有効）、Ｍ＝１（更新）、Ｌ＝１（ロック）、Ｗ＝０（データ有効）、ＡＤＤＲ＝指定された領域のアドレス
【００６９】
キャッシュメモリＣ１１に確保されたメモリ領域の一例を図８に示す。キャッシュメモリ制御部６−Ｃ１１がタグを設定する際、キャッシュリフィル動作（メインメモリ４からデータメモリ部８−Ｃ１１へのデータの複写）は行われない。処理Ａプログラムを実行する過程でデータが上書きされてしまうためである。また、キャッシュメモリ制御部６−Ｃ１１は、当該コマンドにおいて指定された領域に対応するキャッシュラインが既に存在する場合、当該キャッシュラインのタグを上書きする。このとき、キャッシュラインが更新されていたとしても、メインメモリ４へのデータ書き込みは行わない。キャッシュメモリＣ１１内に空きのキャッシュラインが無い場合は、既存のリプレースアルゴリズムで置き換えるキャッシュラインを決定し、置き換えを行う。置き換えるキャッシュラインが更新されている場合（Ｍ＝１の場合）は、メインメモリ４へのデータ書き込みを行う。なお、キャッシュメモリ制御部６−Ｃ１１は、設定するタグに、送信先のプロセッサコアを特定する情報（ＰＩＤ）を含めても良い。
【００７０】
キャッシュメモリＣ１１にメモリ領域が確保されたら、プロセッサコアＰ１は、処理Ａを実行する。プロセッサコアＰ１は、処理Ａを実行する過程で、データの“リード”や“
ライト”、“ライト完了”といった各種のコマンドをキャッシュメモリＣ１１に送る。キャッシュメモリＣ１１では、アクセス保留制御部２−Ｃ１１によってタグメモリ７−Ｃ１１の情報等に基づく当該コマンドの許否の判定が行われ、プロセッサコアＰ１が処理したデータがデータメモリ部８−Ｃ１１へ格納されていく（Ｓ１０２）。
【００７１】
前段側のプロセッサコアＰ１のリード処理は、第一実施形態で述べたのと同様、通常のキャッシュアクセスと同様に行われる。また、ステップＳ１０１で確保された領域に対する読み出しアクセスは保証されない。
【００７２】
また、前段側のプロセッサコアＰ１のライト処理は、第一実施形態で述べたのと同様、通常のキャッシュアクセスと同様に行う。また、ステップＳ１０１で確保された領域に対する書き込みアクセスについても、第一実施形態と同様、ライトバック方式であることが望ましい。第一実施形態でも述べたように、ステップＳ１０１で確保された領域に対してライト完了処理が行われた後にライトを行った場合の処理結果については保証されない。
【００７３】
また、前段側のプロセッサコアＰ１のライト完了は、例えば、キャッシュライン単位で指定する。換言すると、プロセッサコアＰ１は、例えば、一キャッシュライン分のデータを処理したら、ライト完了コマンドを送出する。ライト完了処理の処理フローを図１０に示す。キャッシュメモリ制御部６−Ｃ１１は、プロセッサコアＰ１から“ライト完了”の旨のコマンドが送られたら、指定されたキャッシュラインのデータをデータメモリ部８−Ｃ１１から読み出す（Ｓ５０１）。対応するキャッシュラインにデータが存在していれば（Ｓ５０２）、当該データメインメモリ４におけるアドレス情報をキャッシュ間データ転送部Ｔへ送る（Ｓ５０３）。そして、読み出したデータをキャッシュ間データ転送部Ｔへ送る（Ｓ５０４）。データ転送は、全データ（当該キャッシュラインの全データ）の送信が完了するまで行う（Ｓ５０５）。なお、当該キャッシュラインに前述のＰＩＤが設定されている場合は、設定されたプロセッサコアに対してデータを転送する。
【００７４】
なお、キャッシュメモリ制御部６−Ｃ１１は、キャッシュ間データ転送部Ｔへデータを転送したら、タグメモリ７−Ｃ１１にアクセスし、当該キャッシュラインのタグを「Ｖ＝１，Ｍ＝１，Ｌ＝０，Ｗ＝０」に変更してもよい（Ｓ５０６）。当該キャッシュラインのタグが「Ｌ＝０」になっていれば、当該キャッシュラインのデータをキャッシュメモリＣ１１から追い出して他のデータに割り当てることができる。
【００７５】
プロセッサコアＰ１は、一定量のデータを処理したら（Ｓ１０３）、“ライト完了”コマンドをキャッシュメモリＣ１１へ送る（Ｓ１０４）。これにより、データ送信制御部３−Ｃ１１でアクセス情報が生成され、データメモリ部８−Ｃ１１のデータがキャッシュ間データ転送部Ｔへ送られる（Ｓ２０３）。
【００７６】
このように、プロセッサコアＰ１では、全データに対する処理Ａの実行が完了するまで、第一実施形態で述べたのと同様な一連の処理（Ｓ１０１〜Ｓ１０５）が繰り返される。また、キャッシュメモリＣ１１では、第一実施形態で述べたのと同様な一連の処理（Ｓ２０１〜Ｓ２０３）が繰り返される。
【００７７】
プロセッサコアＰ１は、全データに対する処理Ａの実行が完了したら、メインメモリ４に確保していたメモリ領域を解放する旨のコマンドをキャッシュメモリＣ１１へ送る（Ｓ１０６）。キャッシュメモリ制御部６−Ｃ１１は、当該コマンドが送られたらタグメモリ部７−Ｃ１１にアクセスし、ステップＳ１０１で確保したメモリ領域の該当キャッシュラインのタグを「Ｌ＝１」から「Ｌ＝０」へ変更する。これにより、当該キャッシュラインのデータをキャッシュメモリＣ１１から追い出し、当該キャッシュラインを別のデータに割り当てることが可能となる。以上により、プロセッサコアＰ１における一連の処理（Ｓ
１０１〜Ｓ１０６）が完了する。
【００７８】
プロセッサコアＰ２側では、Ｓ２０３の処理でキャッシュメモリＣ１１から送られたデータをキャッシュメモリＣ１２が受信すると、データ受信制御部４−Ｃ１２が、当該データをデータメモリ部８−Ｃ１２へ書き込む旨のコマンドを、当該データやアドレス情報と共にアクセス要求選択部５−Ｃ１２へ送る（Ｓ３０１）。当該データは、データメモリ部８−Ｃ１２のキャッシュラインのうち送られたアドレス情報に対応するキャッシュラインへ格納される。また、タグメモリ部７−Ｃ１２のキャッシュラインのうちデータを格納したキャッシュラインのタグを「Ｗ＝１」から「Ｗ＝０」へ変更する。また、データ受信制御部４−Ｃ１２は、当該アドレス情報をアクセス保留制御部２−Ｃ１２へ通知する（Ｓ３０２）。
【００７９】
本実施形態に係るコンピュータ１１では、一連の処理（Ｓ１０１〜Ｓ３０２）が行われている間に実行される、ステップＳ４０１において実行される領域確保が、次のようにして実行される。すなわち、コンピュータ１１が起動して所定のプログラムが実行され、処理ＢのタスクがプロセッサコアＰ２によって実行されると、プロセッサコアＰ２は、領域確保の旨のコマンドをキャッシュメモリＣ１２へ送る。このコマンドは、ステップＳ１０１の処理においてプロセッサコアＰ１がメインメモリ４に確保したメモリ領域に対応するメモリ領域を、キャッシュメモリＣ１２に確保する旨のコマンドである。キャッシュメモリ制御部６−Ｃ１２は、当該コマンドを受けると、ステップＳ１０１においてメインメモリ４に確保されたメモリ領域に対応するメモリ領域であって、処理Ｂによるデータの処理に必要なメモリ領域を、データメモリ部８−Ｃ１２の何れかのキャッシュラインに確保する。また、キャッシュメモリ制御部６−Ｃ１２は、データメモリ部８−Ｃ１２に確保したメモリ領域に対応するタグメモリ部７−Ｃ１２のキャッシュラインのタグを、次のように設定する。
Ｖ＝１（有効）、Ｍ＝０（未更新）、Ｌ＝１（ロック）、Ｗ＝１（データ無効）、ＡＤＤＲ＝指定された領域のアドレス
【００８０】
キャッシュメモリＣ１２に確保されたメモリ領域の一例を図９に示す。キャッシュメモリ６−Ｃ１２がタグを設定する際、キャッシュリフィル動作は行われない。また、キャッシュメモリ制御部６−Ｃ１２は、当該コマンドにおいて指定された領域に対応するキャッシュラインが既に存在する場合、当該キャッシュラインのタグを上書きする。このとき、キャッシュラインが更新されていたとしても、メインメモリ４へのデータ書き込みは行わない。キャッシュメモリＣ１２内に空きのキャッシュラインが無い場合は、既存のリプレースアルゴリズムで置き換えるキャッシュラインを決定し、置き換えを行う。置き換えるキャッシュラインが更新されている場合（Ｍ＝１の場合）は、メインメモリ４へのデータ書き込みを行う。
【００８１】
キャッシュメモリＣ１２にメモリ領域が確保されたら、プロセッサコアＰ２は、処理Ｂを実行する。プロセッサコアＰ２は、処理Ｂを実行する過程で、データの“リード”や“ライト”、“ライト完了”といった各種のコマンドをキャッシュメモリＣ１２に送る。プロセッサコアＰ２がステップＳ４０２の処理Ｂを実行する過程で、キャッシュメモリ制御部６−Ｃ１２は、プロセッサコアＰ２がアクセスしようとするデータが有効であるか否かをタグメモリ部７−Ｃ１２の情報に基づいて判定する（Ｓ４０３）。キャッシュメモリ制御部６−Ｃ１２は、プロセッサコアＰ２がアクセスしようとするデータのタグが「Ｗ＝１」の場合は、プロセッサコアＰ２のアクセスをアクセス保留制御部２−Ｃ１２に保留させる（Ｓ４０４）。
【００８２】
例えば、後段側のプロセッサコアＰ２のリード処理は、次のように行われる。リード処理の処理フローを図１１に示す。すなわち、プロセッサコアＰ２から“リード”コマンド
が送られると、キャッシュメモリ制御部６−Ｃ１２は、アクセス先のアドレスに対応するキャッシュラインを読み出す（Ｓ６０１）。キャッシュメモリ制御部６−Ｃ１２は、対応するキャッシュラインが存在しなければ（Ｓ６０２）、通常のキャッシュミス時のリードアクセスを行う（Ｓ６０９）。また、キャッシュメモリ制御部６−Ｃ１２は、対応するキャッシュラインが存在していれば（Ｓ６０２）、当該キャッシュラインのタグを参照する。キャッシュメモリ制御部６−Ｃ１２は、キャッシュラインのタグが「Ｖ＝１，Ｗ＝０」の場合（Ｓ６０３）、キャッシュヒット時のリードアクセスを行う（Ｓ６０８）。また、キャッシュメモリ制御部６−Ｃ１２は、キャッシュラインのタグが「Ｖ＝１，Ｗ＝１」の場合（Ｓ６０３）、以降のリードアクセスを行わず、アクセス情報をアクセス保留制御部２−Ｃ１２に記憶させる（Ｓ６０４）。
【００８３】
上述のリード処理においてアクセスが保留されている間に、キャッシュ間データ転送部Ｔを介して前段側のプロセッサコアＰ１側からデータが転送され、該当するキャッシュラインにデータが格納されると（Ｓ６０５）、キャッシュメモリ制御部６−Ｃ１２は、タグメモリ部７−Ｃ１２にアクセスし、当該キャッシュラインのタグを「Ｗ＝１」から「Ｗ＝０」へ変更する（Ｓ６０６）。なお、キャッシュメモリ制御部６−Ｃ１２は、当該キャッシュラインのタグについても「Ｌ＝１」から「Ｌ＝０」へ変更してもよい。プロセッサコアＰ１側からデータが一旦転送されてしまえば、その後も、キャッシュメモリＣ１２に確保されたメモリ領域をキャッシュメモリＣ１１と対応させ続ける必要も無い為である。タグが「Ｌ＝０」の場合、当該キャッシュラインのデータを追い出し、他のデータに割り当てることができる。
【００８４】
また、キャッシュ間データ転送部Ｔから送られたデータのアドレスが、アクセス保留制御部２−Ｃ１２に記憶されているアクセス情報のアドレスと一致していれば（Ｓ６０７）、アクセス保留制御部２−Ｃ１２は、保留していたアクセス要求を送出する。これにより、上記ステップＳ６０１以降の処理が再び繰り返される。当該アクセス要求のアドレスに対応するキャッシュラインのタグは、この時点で「Ｖ＝１」、「Ｗ＝０」となっているので、以降は、通常のキャッシュヒット時のリードアクセスが行われることになる。また、アクセス保留制御部２−Ｃ１２は、保留していたアクセス要求を送出したら、記憶していたアクセス情報を消去する。
【００８５】
なお、キャッシュ間データ転送部Ｔから送られたデータのアドレスがアクセス保留制御部２−Ｃ１２に通知されない構成を採る場合には、例えば、アクセス保留制御部２−Ｃ１２が、タグメモリ部７−Ｃ１２に定期的にアクセスするようにしてもよい。そして、保留しているアクセス要求に対応するアドレスのキャッシュラインのタグが「Ｗ＝１」から「Ｗ＝０」になったら、当該キャッシュラインのデータがプロセッサコアＰ２へ送出されるようにしてもよい。
【００８６】
また、アクセス保留制御部２−Ｃ１２は、複数のアクセス情報を記憶できるようにしてもよい。すなわち、アクセス保留制御部２−Ｃ１２に複数個のエントリを用意し、上述したステップＳ６０７の一致比較を全エントリに対して行う。そして、一致したエントリの再開可能フラグをセットし、再開可能フラグがセットされたエントリの中からアクセス情報を順次選択していく。アクセス保留制御部２−Ｃ１２がこのように構成されていれば、保留されたアクセスの後続のアクセスが実行可能であれば追い越して実行させることにより、リードアクセスをアウトオブオーダーにすることが可能となる。
【００８７】
また、後段側のプロセッサコアＰ２のライト処理は、次のように行われる。ライト処理の処理フローを図１２に示す。すなわち、プロセッサコアＰ２から“ライト”コマンドが送られると、キャッシュメモリ制御部６−Ｃ１２は、アクセス先のアドレスに対応するキャッシュラインを読み出す（Ｓ７０１）。キャッシュメモリ制御部６−Ｃ１２は、対応す
るキャッシュラインが存在しなければ（Ｓ７０２）、通常のキャッシュミス時のライトアクセスを行う（Ｓ７０９）。また、キャッシュメモリ制御部６−Ｃ１２は、対応するキャッシュラインが存在していれば（Ｓ７０２）、当該キャッシュラインのタグを参照する。キャッシュメモリ制御部６−Ｃ１２は、キャッシュラインのタグが「Ｖ＝１，Ｗ＝０」の場合（Ｓ７０３）、通常のキャッシュヒット時のライトアクセスを行う（Ｓ７０８）。また、キャッシュメモリ制御部６−Ｃ１２は、キャッシュラインのタグが「Ｖ＝１，Ｗ＝１」の場合（Ｓ７０３）、以降のライトアクセスを行わず、アクセス情報をアクセス保留制御部２−Ｃ１２に記憶させる（Ｓ７０４）。キャッシュメモリＣ１２が、ライトされたデータをメインメモリ４に直接出力するライトスルーモードに設定されていたとしても、ライトアクセスがアクセス保留制御部２−Ｃ１２に記憶されることで保留される場合は、メインメモリ４へ書き込まれない。
【００８８】
上述のライト処理においてアクセスが保留されている間に、キャッシュ間データ転送部Ｔを介して前段側のプロセッサコアＰ１側からデータが転送され、該当するキャッシュラインにデータが格納されると（Ｓ７０５）、キャッシュメモリ制御部６−Ｃ１２は、タグメモリ部７−Ｃ１２にアクセスし、当該キャッシュラインのタグを「Ｗ＝１」から「Ｗ＝０」へ変更する（Ｓ７０６）。また、前述したように、キャッシュメモリ制御部６−Ｃ１２は、当該キャッシュラインのタグについても「Ｌ＝１」から「Ｌ＝０」へ変更してもよい。
【００８９】
また、キャッシュ間データ転送部Ｔから送られたデータのアドレスが、アクセス保留制御部２−Ｃ１２に記憶されているアクセス情報のアドレスと一致していれば（Ｓ７０７）、アクセス保留制御部２−Ｃ１２は、保留していたアクセス要求を送出する。これにより、上記ステップＳ７０１以降の処理が再び繰り返される。当該アクセス要求のアドレスに対応するキャッシュラインのタグは、この時点で「Ｖ＝１」、「Ｗ＝０」となっているので、以降は、通常のキャッシュヒット時のライトアクセスが行われることになる。また、アクセス保留制御部２−Ｃ１２は、保留していたアクセス要求を送出したら、記憶していたアクセス情報を消去する。
【００９０】
なお、リード処理の説明でも述べたように、アクセス保留制御部２−Ｃ１２は、複数のアクセス情報を記憶できるようにしてもよい。アクセス保留制御部２−Ｃ１２がこのように構成されていれば、ライトアクセスをアウトオブオーダーにすることが可能となる。
【００９１】
また、キャッシュメモリ制御部６−Ｃ１２は、ステップＳ７０５の処理の段階で、アクセス保留制御部２−Ｃ１２に記憶されているアクセス情報のアドレスと、キャッシュ間データ転送部Ｔから送られたデータのアドレスとを比較し、一致していれば受信したデータとライトデータとをマージしてもよい。そして、該当するキャッシュラインにデータを格納すると共に、対応するキャッシュラインのタグを「Ｍ＝０」から「Ｍ＝１」へ変更する。この場合、データメモリ部８−Ｃ１２に対するライトアクセス回数を減らすことが可能になる。なお、マージしたデータはキャッシュラインのみならず、同時にメインメモリ４へ格納してもよい。
【００９２】
図５の処理フローを使った全体の処理の流れの説明に戻る。図１１の処理フローでも詳しく説明したように、プロセッサコアＰ２のアクセスが保留されている間にステップＳ３０２の処理が実行されて、データ受信制御部４−Ｃ１２からアドレスの情報が通知されると、アクセス保留制御部２−Ｃ１２は、保留しているアクセスのアドレス情報と通知されたアドレスの情報とが一致するか否かを判定する（Ｓ４０５）。そして、アドレス情報が一致していたら、保留していたプロセッサコアＰ２のアクセスを再開する。これにより、保留されていたアクセスのキャッシュ動作が実現されて処理Ｂが再開される（Ｓ４０６）。なお、上述したステップＳ４０３の判定処理において、タグが「Ｗ＝０」だった場合に
は、ステップＳ４０４〜Ｓ４０５の処理が省略され、通常のキャッシュ動作が実現されて処理Ｂが行われる。
【００９３】
プロセッサコアＰ２は、全データに対する処理Ｂの実行が完了するまで、上記一連の処理Ｓ４０１〜Ｓ４０６までの処理を繰り返す（Ｓ４０７）。また、プロセッサコアＰ２は、全データに対する処理Ｂの実行が完了したら、キャッシュメモリＣ１２に確保されていた領域の設定を解放する旨のコマンドを送る（Ｓ４０８）。プロセッサコアＰ２から領域解放のコマンドが送られると、キャッシュメモリ制御部６−Ｃ１２は、タグメモリ部７−Ｃ１２にアクセスし、ステップＳ４０１の処理で確保した領域のキャッシュラインのタグを「Ｌ＝０，Ｗ＝０」に変更する。当該キャッシュラインのタグが「Ｌ＝０」になっていれば、当該キャッシュラインのデータをキャッシュメモリＣ１２から追い出して他のデータに割り当てることができる。なお、アクセス保留制御部２−Ｃ１２に保留中のアクセスが存在する場合は、データメモリ部８−Ｃ１２に対して通常のリード処理またはライト処理を行い、保留していたアクセスを処理したのち、当該領域を解放する。これにより、プロセッサコアＰ２における一連の処理（Ｓ４０１〜Ｓ４０８）が完了する。
【００９４】
上記一連の処理（Ｓ４０１〜Ｓ４０８）のタイミングチャートを図１３に示す。プロセッサコアＰ２が処理するデータが、キャッシュメモリＣ１１からキャッシュメモリＣ１２へ転送されていない場合、プロセッサコアＰ２のアクセスは保留される（Ｔ１，Ｓ４０４）。
【００９５】
また、キャッシュメモリＣ１１からキャッシュメモリＣ１２へデータが転送されても、当該データのアドレスが保留中のアクセスのアドレスと一致していなければ、プロセッサコアＰ２のアクセスは保留されたままになる（Ｔ２，Ｓ４０５）。
【００９６】
一方、キャッシュメモリＣ１１からキャッシュメモリＣ１２へ転送されたデータのアドレスが、保留中のアクセスのアドレスと一致していれば、保留されていたプロセッサコアＰ２のアクセスは再開される（Ｔ３，Ｓ４０６）。そして、当該データに対するアクセスは、通常のキャッシュアクセスとして処理される（Ｔ４）。
【００９７】
また、プロセッサコアＰ２が他のアドレスのデータにアクセスしようとした際に、当該データがキャッシュメモリＣ１１からキャッシュメモリＣ１２へ転送されていない場合、プロセッサコアＰ２のアクセスは再び保留される（Ｔ５，Ｓ４０４）。
【００９８】
本実施形態に係るコンピュータ１１は、図１３のタイミングチャートが示すように、前段側のプロセッサコアＰ１が実行する処理Ａと後段側のプロセッサコアＰ２が実行する処理Ｂがオーバーラップしながら実行される。しかし、キャッシュメモリＣ１２に書き込まれていない前段側のプロセッサコアＰ１が処理したデータに対する処理は、後段側のプロセッサコアＰ２側で保留されるため、結果が矛盾することが無い。また、前段側のプロセッサコアＰ１は、後段側のプロセッサコアＰ２の処理状況を考慮せずに処理Ａを実行できる。
【００９９】
特定のデータに対して複数の処理を施す場合に、一般的に知られているキュー（ＦＩＦＯ）構造を用いる場合、次のような問題がある。すなわち、一般的に知られているキュー構造を用いて処理Ａの結果を順次キューに挿入し、処理Ｂを行うに先だって必要なデータをキューから取得する方法であれば、処理Ａと処理Ｂをオーバーラップして実行することができる。ここで、処理Ｂに必要なデータに対する処理Ａが前段で完了していない場合、データを取得する際に、処理Ａが必要なデータを出力するまで待つことにより、矛盾なくオーバーラップ処理を行うことができる。しかし、キュー構造を管理しているデータは各コア間で矛盾なく共有される必要がある。より具体的には、何らかの排他アクセスが必要
となる。また、後段が前段の処理Ａの完了を待つ間、後段は、キューをポーリングで監視するか、前段が後段に対して割り込みをかけるなどの何らかの通信を行わなければならない。よって、これらを行うハードウェア構成の実現に高コストを要する。
【０１００】
また、一般的に知られているキャッシュコヒーレンシ（バススヌープ等）を用いる場合、次のような問題がある。すなわち、前段と後段がメインメモリの同一アドレスをキャッシュメモリに格納している場合、前段のキャッシュメモリの内容と後段のキャッシュメモリの内容の一貫性は保たれる。しかし、キャッシュメモリの内容だけでは、参照アドレスのデータが前段の処理完了後のものであるか否かが判断できないため、前段の処理完了を通知する何らかの通信を行わなければならない。よって、これらを行うハードウェア構成の実現に高コストを要する。
【０１０１】
一方、上記各実施形態であれば、データそのものの転送のみで、各プロセッサが特定のデータを排他的に処理できる。すなわち、データが有効になったことを表す、共有メモリへのアクセスや割り込みなどといったハードウェアのコストが高い通信を行わなくても、処理Ｂの実行過程で、当該データが有効であるか否かが判断できる。簡単なハードウェア構成で、処理対象のデータが処理Ａによって処理されているか否かが処理Ｂの過程で判断できる。そして、各プロセッサが特定のデータを排他的に処理でき、処理結果が矛盾することが無い。
【符号の説明】
【０１０２】
１，１１・・コンピュータ
２・・プロセッサ部
３・・キャッシュメモリ部
４・・メインメモリ
Ｐ１，Ｐ２・・プロセッサコア
Ｄ１，Ｄ２・・データ送受信部
Ｔ・・キャッシュ間データ転送部
【図１】
0005625536.tif 000002
【図２】
0005625536.tif 000003
【図３】
0005625536.tif 000004
【図４】
0005625536.tif 000005
【図５】
0005625536.tif 000006
【図６】
0005625536.tif 000007
【図７】
0005625536.tif 000008
【図８】
0005625536.tif 000009
【図９】
0005625536.tif 000010
【図１０】
0005625536.tif 000011
【図１１】
0005625536.tif 000012
【図１２】
0005625536.tif 000013
【図１３】
0005625536.tif 000014