第一実施形態に係るコンピュータの構成を図1に示す。コンピュータ1は、図1に示すように、プロセッサコアP1,P2を有するプロセッサ部2、データ送受信部D1,D2やキャッシュメモリC1,C2、キャッシュ間データ転送部Tを有するキャッシュメモリ部3、及びメインメモリ4を備えている。
なお、図1では、キャッシュメモリC1,C2やデータ送受信部D1,D2がプロセッサコアP1,P2と別に設けられているが、プロセッサコアP1,P2に内置されていてもよい。また、本実施形態では、キャッシュメモリC1,C2とメインメモリ4という2つの記憶階層がある場合を例に説明しているが、更なる階層の記憶装置類があってもよい。また、以下、データという場合は、コンピュータ1が実行するプログラムなども含めて、プロセッサコアP1,P2とメインメモリ4との間で転送される全ての情報を指すものとする。
プロセッサコアP1は、命令デコーダ等を内蔵しており、プログラムカウンタ(PC)の値に基づいてキャッシュメモリC1にアクセスし、各種命令を解釈して実行する。プロセッサコアP1は、データアクセスが生じた場合、データ送受信部D1を経由してキャッシュメモリC1にアクセスする。プロセッサコアP2もプロセッサコアP1と同様である。
データ送受信部D1は、プロセッサコアP1とキャッシュメモリC1との間に配置され
、プロセッサコアP1からのアクセスやキャッシュ間データ転送部Tからのアクセスを調停する。データ送受信部D2も、データ送受信部D1と同様である。
キャッシュメモリC1は、SRAM(Static Random Access Memory)であり、プロセ
ッサコアP1に最も近い記憶階層を形成する。キャッシュメモリC1は、プロセッサコアP1のために用意された独立のキャッシュメモリである。キャッシュメモリC1は、プロセッサコアP1から送られたアドレス値に対応するタグを照会し、アドレス値に対応するタグの有効ビットがオンであればデータをプロセッサコアP1へ送出し、アドレス値に対応するタグが索出できないか或いは索出したタグの有効ビットがオフであれば(キャッシュミスであれば)メインメモリ4の該当アドレスにアクセスしてデータを取得しプロセッサコアP1へ送出する。キャッシュメモリC2についても、キャッシュメモリC1と同様である。
キャッシュ間データ転送部Tは、データ送受信部D1とデータ送受信部D2との間でデータを転送する。データ送受信部D1とデータ送受信部D2がキャッシュ間データ転送部Tによって相互に接続されているため、メインメモリ4を介さなくても、プロセッサコアP1とプロセッサコアP2がデータを共有できる。
メインメモリ4は、各プロセッサコアP1,P2が共有する記憶階層であり、キャッシュメモリ部3よりも下位に位置する記憶階層である。なお、本実施形態では、キャッシュメモリ部3よりも下位の記憶階層をメインメモリ4と称しているが、共有のキャッシュメモリなどであってもよい。
なお、下位とは、各プロセッサコアP1,P2からのアクセスに要する時間に関し、メインメモリ4がキャッシュメモリC1,C2よりも長いことを意味する。本実施形態では、プロセッサ部2が、まず、キャッシュメモリ部3にアクセスし、キャッシュメモリ部3にデータが無ければメインメモリ4からキャッシュメモリ部3へデータが送られる。そして、プロセッサ部2がキャッシュメモリ部3のデータを取得する。このような手順を採るため、メインメモリ4は、キャッシュメモリ部3よりも下位になっている。
データ送受信部D1の構成を図2に示す。データ送受信部D2の構成は、データ送受信部D1と同様であるため、図2では符号“D2”を併記する。データ送受信部D1(D2)は、図2に示すように、全体制御部1−D1(D2)、アクセス保留制御部2−D1(D2)、データ送信制御部3−D1(D2)、データ受信制御部4−D1(D2)、アクセス要求選択部5−D1(D2)を備える。
全体制御部1−D1(D2)は、データ送受信部D1(D2)を構成する各部の動作を調停する。また、全体制御部1−D1(D2)は、プロセッサコアP1(P2)からのアクセスを、キャッシュメモリC1(C2)の状態に応じて調停する。全体制御部1−D1(D2)は、例えば、プロセッサコアP1(P2)からアクセスがあった場合に、当該プロセッサコアP1(P2)がアクセスするアドレスに対応する有効なデータが格納されるのをキャッシュメモリC1(C2)が待っている状態であり、アクセスを一時的に受け付けることができない状態であれば、当該プロセッサコアP1(P2)に対してBUSY状態であることを通知する。
アクセス保留制御部2−D1(D2)は、プロセッサコアP1(P2)からのアクセスを保留するか否かを、キャッシュメモリC1(C2)の状態に応じて決定する。保留の要否は、プロセッサコアP1(P2)がアクセスするアドレスに対応する有効なデータがキャッシュメモリC1(C2)に格納されているか否かに応じて決定される。アクセス保留制御部2−D1(D2)は、プロセッサコアP1(P2)からのアクセスを保留する場合
にはアクセス情報(すなわち、プロセッサコアP1(P2)がアクセスしようとしているメインメモリ4上のアドレスの情報)を記憶しておき、データ受信制御部4−D1(D2)から通知されたアドレスが、記憶しているアクセス情報のアドレスに一致している場合に、プロセッサコアP1(P2)からキャッシュメモリC1(C2)へのアクセスを再開する。
データ送信制御部3−D1(D2)は、プロセッサコアP1(P2)によるデータの処理状況に応じて、当該データのキャッシュ間データ転送部Tへの送出を行なう。一般的に、プロセッサコアが処理したキャッシュメモリのデータがメインメモリに書き込まれれば、当該プロセッサコアによるデータの処理は完了したものとみなせる。そこで、データ送信制御部3−D1(D2)は、プロセッサコアP1(P2)からデータ書き込み完了通知(ライト完了)を受けたら、キャッシュメモリC1(C2)から当該データを取得してこれをキャッシュ間データ転送部Tに出力する。これにより、プロセッサコアP1(P2)が処理したデータがプロセッサコアP2(P1)へ送られる。
データ受信制御部4−D1(D2)は、キャッシュ間データ転送部Tからデータが送られてきた場合にこれを処理する。具体的には、データ受信制御部4−D1(D2)は、キャッシュ間データ転送部Tからデータが送られてきたらこれをキャッシュメモリC1(C2)に格納し、そのアドレスをアクセス保留制御部2D1(D2)に通知する。
アクセス要求選択部5−D1(D2)は、プロセッサコアP1(P2)、アクセス保留制御部2−D1(D2)、データ送信制御部3−D1(D2)、データ受信制御部4−D1(D2)の各部からのアクセス要求が競合した場合に、既定の優先順位に従って各部からの出力を調停する。既定の優先順位は、アクセス要求選択部5−D1(D2)に予め設定されており、例えば、各キャッシュメモリ間のデータの整合性を確保するために最も優先されるべき機能部から順に出力が選択されるように設定される。本実施形態では、例えば、データ受信制御部4−D1(D2)からの出力が最も優先され、データ送信制御部3−D1(D2)、アクセス保留制御部2−D1(D2)、プロセッサコアP1(P2)の順に優先順位が下がるように設定されているものとする。各部からのアクセス情報が競合した場合には、既定の優先順位に従って決定される何れかのアクセス情報がアクセス要求選択部5−D1(D2)を通過してキャッシュメモリC1(C2)へ送出されることになる。
次に、コンピュータ1の動作について説明する。コンピュータ1の動作説明は、プロセッサコアP1で処理したデータをプロセッサコアP2が引き継いで更に処理することを前提とする。以下、プロセッサコアP1が実行するプログラムを処理Aプログラムといい、プロセッサコアP2が実行するプログラムを処理Bプログラムということにする。また、主にプロセッサコアP1側で実行される処理を前段側処理と呼び、主にプロセッサコアP2側で実行される処理を後段側処理と呼ぶことにするが、各プロセッサコアに優劣を設ける意図はない。すなわち、コンピュータ1は、プロセッサコアP2で処理したデータをプロセッサコアP1が引き継いで更に処理することも可能である。また、コンピュータ1は、プロセッサコアP1で処理したデータをプロセッサコアP2が引き継いで更に処理したのち、再びプロセッサコアP1へ引き継いで処理することも可能である。
コンピュータ1が処理するデータについて説明する。例えば、画像処理などのように、ある出力データを得るために一部の入力データを用いるような特性がある場合、大量の画像データの処理にあたっては処理Aと処理Bとをオーバーラップさせることが望ましい。図3は、コンピュータ1が処理するデータの一例を説明する図である。処理Aの処理イメージを図3の上段側に、処理Bの処理イメージを図3の下段側に示す。処理Aは、画像の
横方向に7ブロック分のデータを参照し、1ブロック分のデータを出力するものとする。
また、処理Bは、画像の縦方向に3ブロック分のデータを参照し、1ブロック分のデータを出力するものとする。このような処理は、画像のフィルタ処理に多く見られる。
このような処理においては、図4に示すように、処理Aによってデータが逐次処理されて、処理Bを開始できるだけの十分なデータが揃ったタイミングで処理Bを開始することにより、処理Aと処理Bとをオーバーラップさせることができる。処理Bが処理するデータは、必ず処理Aが行われた後のものでなければならない。このため、あるデータに対して処理Bを行う際には、参照するデータに対する処理Aの完了を確認しなければならない。
このようなデータ処理を行う場合を例に、以下、コンピュータ1の動作を説明する。コンピュータ1の動作フローを図5に示す。コンピュータ1が起動して所定のプログラムが実行され、処理AのタスクがプロセッサコアP1によって実行されると、プロセッサコアP1は、領域確保の旨のコマンドをデータ送受信部D1に送る。すなわち、プロセッサコアP1は、メインメモリ4の特定の領域に、処理したデータを格納するための領域を確保する旨の制御コマンドをデータ送受信部D1に送る。データ送受信部D1では、当該コマンドがアクセス要求選択部5−D1を介してキャッシュメモリC1へ送られる。これにより、キャッシュメモリC1には、メインメモリ4に確保されたメモリ領域に対応するメモリ領域が、メインメモリ4のアドレスの情報に対応付けて確保される(S101)。
キャッシュメモリC1にメモリ領域が確保されたら、プロセッサコアP1は、処理Aを実行する。プロセッサコアP1は、処理Aを実行する過程で、データの“リード”や“ライト”、“ライト完了”といった各種のコマンドをデータ送受信部D1に送る。なお、ステップS101の処理において確保されたメモリ領域は本プログラムが任意に確保した領域であるため、当該メモリ領域に対する読み出しアクセスのデータの信憑性は保証されない。データ送受信部D1にコマンドが送られると、アクセス保留制御部2−D1によって、キャッシュメモリC1に記憶されている対応データの有効性の情報に基づき、当該コマンドの許否の判定が行われる。そして、プロセッサコアP1が処理したデータが、ステップS101で確保されたキャッシュメモリC1のメモリ領域へ逐次格納されていく(S102)。なお、キャッシュメモリC1の当該メモリ領域への“ライト”処理は、ライトバック方式であることが望ましい。プロセッサコアP1から“ライト完了”コマンドが通知されるまでは、当該メモリ領域のデータが確定せず、更に処理が施され得るからである。プロセッサコアP1から“ライト完了”コマンドが通知されたら、キャッシュメモリC1は、データをメインメモリ4へ書き込んでよい。なお、“ライト完了”が通知された後にキャッシュメモリC1の当該領域にデータが書き込まれても、書き込まれたデータが後段側の処理で用いられず、処理結果が保証されない。
プロセッサコアP1は、処理Aを実行する過程で一定量のデータを処理したら(S103)、データ送受信部D1に対して“ライト完了”コマンドを送る(S104)。プロセッサコアP1が送る“ライト完了”コマンドは、書き込みが完了したデータについては処理Aが完了しており、当該データに対して処理Bを更に行うことができることを意味する。そこで、データ送受信部D1では、プロセッサコアP1から送られた“ライト完了”コマンドを、キャッシュメモリC1からキャッシュメモリC2へのデータ送信要求として取り扱う。ここで、一定量のデータとは、他のキャッシュメモリへデータ転送を行なうことが望ましい蓄積データ量であり、例えば、キャッシュメモリC1の1キャッシュラインあたりのデータ量である。
プロセッサコアP1は、全データに対する処理Aの実行が完了するまで、上記一連の処理(S101〜S105)を繰り返す(S105)。
プロセッサコアP1は、全データに対する処理Aの実行が完了したら、メインメモリ4に確保していたメモリ領域を解放する旨の制御コマンドをデータ送受信部D1に送る(S106)。これにより、プロセッサコアP1における一連の処理(S101〜S106)が完了する。
プロセッサコアP1で上記一連の処理(S101〜S106)が実行されている間にデータ送受信部D1,D2で実行されるキャッシュ間の転送処理について説明する。
上述したS104の処理でデータ送受信部D1に“ライト完了”コマンドが送られると、データ送信制御部3−D1は、キャッシュメモリC1の要求された領域に関する読み出しアクセス情報を生成し、これをアクセス要求選択部5−D1に送る(S201)。
アクセス要求選択部5−D1に送られたコマンドは、キャッシュメモリC1へ送られる。キャッシュメモリC1では、アクセス要求選択部5−D1から送られたコマンドに従い、要求された領域のデータをデータ送受信部D1に送る(S202)。
キャッシュメモリC1からデータ送受信部D1へ送られたデータは、当該データが格納されているメインメモリ4上のアドレス情報と共に、キャッシュ間データ転送部Tを介してデータ送受信部D2へ送られる(S203)。これにより、処理Aが行われた一定量のデータが、キャッシュメモリC2側へ送られることになる。
前段側処理の内容については以上の通りである。次に、後段側処理の内容について説明する。上述したS203の処理でデータ送受信部D1から送られたデータをデータ送受信部D2が受信すると、データ受信制御部4−D2は、当該データをキャッシュメモリC2へ書き込む旨のコマンドを、当該データやアドレス情報と共にアクセス要求選択部5−D2へ送る(S301)。
アクセス要求選択部5−D2に送られたデータは、当該データのメインメモリ4上のアドレス情報と共に、キャッシュメモリC2へ送られる。キャッシュメモリC2では、送られたデータを、当該データのメインメモリ4上のアドレス情報に対応する領域へ格納すると共に、格納したデータが有効である旨の情報を保持する。また、データ受信制御部4−D2は、当該アドレス情報をアクセス保留制御部2−D2へ通知する(S302)。
ところで、上記一連の処理(S101〜S302)が実行されている間、プロセッサコアP2側では以下の処理が実行される。すなわち、コンピュータ1が起動して所定のプログラムが実行され、処理BのタスクがプロセッサコアP2によって実行されると、プロセッサコアP2は、領域確保の旨のコマンドをデータ送受信部D2に送る。ここで、プロセッサコアP2が送るコマンドは、ステップS101の処理においてプロセッサコアP1がメインメモリ4に確保したメモリ領域に対応するメモリ領域を、キャッシュメモリC2に確保する旨のコマンドである。データ送受信部D2では、当該コマンドがアクセス要求選択部5−D2を介してキャッシュメモリC2へ送られる。これにより、キャッシュメモリC2には、ステップS101においてメインメモリ4に確保されたメモリ領域に対応するメモリ領域であって、処理Bによるデータの処理に必要なメモリ領域が、メインメモリ4のアドレスの情報に対応付けて確保される(S401)。すなわち、キャッシュメモリC2には、キャッシュメモリC1に確保されたメモリ領域とアドレスが対応するメモリ領域が確保される。ただし、キャッシュメモリC2には、当該メモリ領域のデータが無効である旨の情報が格納される。前記所定のプログラムがキャッシュメモリC1とキャッシュメモリC2の両方に、メインメモリ4の特定のアドレスに対応するメモリ領域が確保されるように予めプログラミングされていることにより、整合性のとれたメモリ領域が確保される。
キャッシュメモリC2にメモリ領域が確保されたら、プロセッサコアP2は、処理Bを実行する(S402)。ここで、本実施形態に係るコンピュータ1は、プロセッサコアP1で処理したデータをプロセッサコアP2が引き継いで更に処理することを前提としている。このため、プロセッサコアP2の支配下にあるキャッシュメモリC2にプロセッサコアP1が処理したデータが格納されていない場合はアクセスが保留され、プロセッサコアP2はデータの処理を中断することになる。具体的には、ステップS402で処理Bを実行する過程で、処理Bを行おうとしている処理対象のデータが、当該データがステップS302の処理によってキャッシュメモリC1からキャッシュメモリC2へ転送されていない場合、キャッシュメモリC2にはプロセッサコアP1が処理したデータがまだ格納されていないことになる。
そこで、プロセッサコアP2がステップS402の処理Bを実行する過程で、アクセス保留制御部2−D2は、プロセッサコアP2がアクセスしようとするデータが有効であるか否かを、キャッシュメモリC2に記憶されている対応データの有効性の情報に基づいて判定する(S403)。アクセス保留制御部2−D2は、処理Bの過程でプロセッサコアP2がアクセスを要求するデータが、キャッシュメモリC2に未だ転送されておらず、アクセスしようとするアドレスのデータの有効性を示す情報がキャッシュメモリC2に無い場合、否定判定を行う。
アクセス保留制御部2−D2は、ステップS403の処理で否定判定を行なった場合、プロセッサコアP2のアクセスを保留する(S404)。そして、アクセス保留制御部2−D2は、プロセッサコアP2がアクセスしようとしたアドレスの情報を保持する。
プロセッサコアP2のアクセスがアクセス保留制御部2−D2によって保留されている間にステップS302の処理が実行されて、データ受信制御部4−D2からアドレスの情報が通知されると、アクセス保留制御部2−D2は、保留しているアクセスのアドレス情報と通知されたアドレスの情報とが一致するか否かを判定する(S405)。
アクセス保留制御部2−D2は、保留していたアクセスのアドレス情報と、データ受信制御部4−D2から通知されたアドレスの情報とが一致していたら、保留していたプロセッサコアP2のアクセスを再開する。これにより、保留されていたアクセスのキャッシュ動作が実現されて処理Bが再開される(S406)。なお、上述したステップS403の判定処理において、アクセス保留制御部2−D2がアクセスの許可を行った場合には、ステップS404〜S405の処理が省略され、通常のキャッシュ動作が実現されて処理Bが行われる。
プロセッサコアP2は、全データに対する処理Bの実行が完了するまで、上記一連の処理S401〜S406までの処理を繰り返す(S407)。
プロセッサコアP2は、全データに対する処理Bの実行が完了したら、キャッシュメモリC2に確保されていた、ステップS401の処理で確保した領域の設定を解放する旨のコマンドをデータ送受信部D2に送る(S408)。これにより、プロセッサコアP2における一連の処理(S401〜S408)が完了する。
後段側処理の内容については以上の通りである。本実施形態に係るコンピュータ1であれば、キャッシュ間データ転送部Tによるデータ転送により、キャッシュ間のデータの整合性が保たれる。また、後段側でデータを処理する際は、キャッシュメモリに格納されているデータの信憑性が、データ転送によって反転するデータの属性の情報に基づいて確認される。よって、例えば、各プロセッサコアで共有のキャッシュメモリや主記憶を介した
転送や割り込みを使った通信に比べて、高速な処理を実現できる。すなわち、キャッシュメモリC1,C2に使われるメモリは、プロセッサコアP1,P2の動作周波数において数サイクルでアクセス可能である。一方、各プロセッサコアで共有のキャッシュメモリを用いる場合は数10サイクルを要し、更に他のプロセッサコアとのアクセス競合によりアクセス時間がさらに長くなる可能性がある。また、割り込み応答には少なくとも数10サイクル(少なくとも汎用レジスタ退避のため、汎用レジスタ本数×1サイクル)の時間がかかる。しかし、本実施形態に係るコンピュータ1であれば、このような時間を短縮できる。なお、上記一連の処理で参照されるアドレス値は、物理アドレスの値であってもよいり、論理アドレスの値であってもよい。また、上記コンピュータ1は、3以上のプロセッサコアを備えるものであってもよい。
第二実施形態に係るコンピュータの構成を図6に示す。本実施形態に係るコンピュータ11は、上述した実施形態のデータ送受信部D1,D2に相当する構成がキャッシュメモリC11,C12に内蔵されている。その他の点については第一実施形態に係るコンピュータ1と同様である。例えば、プロセッサコアP1,P2やキャッシュ間データ転送部Tは、第一実施形態のものと同様であるため、説明を省く。
キャッシュメモリC11の構成を図7に示す。キャッシュメモリC12の構成は、キャッシュメモリC11と同様であるため、図7では符号(C12)を併記している。キャッシュメモリC11は、図7に示すように、プロセッサコアインターフェース部1−C11(C12)、アクセス保留制御部2−C11(C12)、データ送信制御部3−C11(C12)、データ受信制御部4−C11(C12)、アクセス要求選択部5−C11(C12)、キャッシュメモリ制御部6−C11(C12)、タグメモリ部7−C11(C12)、データメモリ部8−C11(C12)、下位記憶階層インターフェース部9−C11(C12)、キャッシュ間データ転送インターフェース部10−C11(C12)を備える。
プロセッサコアインターフェース部1−C11(C12)は、プロセッサコアP1(P2)からのアクセス要求を受け付け、応答を返すインターフェースである。プロセッサコアP1(P2)からは、下記のアクセス・コマンドが要求されるものとする。各アクセス・コマンドはプロセッサの命令語等に対応しており、プログラムから制御可能である。
・領域確保コマンド
・リードアクセス
・ライトアクセス
・ライト完了コマンド
・領域解放コマンド
アクセス保留制御部2−C11(C12)やデータ送信制御部3−C11(C12)、データ受信制御部4−C11(C12)、アクセス要求選択部5−C11(C12)の動作は、上述した第一実施形態のものと同様である。
すなわち、アクセス保留制御部2−C11(C12)は、プロセッサコアP1(P2)からのアクセスを保留するか否かを判定し、保留する場合はアクセス先のアドレスの情報を保持する。そして、データ受信制御部4−C11(C12)から通知されたアドレスの情報が、保持しているアドレスの情報に一致している場合にアクセスを再開する。
データ送信制御部3−C11(C12)は、プロセッサコアP1(P2)から送られる“ライト完了”コマンドに従い、データメモリ部8−C11(C12)のデータをキャッシュ間データ転送インターフェース部10−C11(C12)に出力させる。
データ受信制御部4−C11(C12)は、キャッシュ間データ転送インターフェース部10−C11(C12)から受け取ったデータをデータメモリ部8−C11(C12)に格納し、また、当該データのアドレスをアクセス保留制御部2−C11(C12)へ通知する。
アクセス要求選択部5−C11(C12)は、プロセッサコアインターフェース部1−C11(C12)、アクセス保留制御部2−C11(C12)、データ送信制御部3−C11(C12)、データ受信制御部4−C11(C12)の各部からのアクセス要求を調停し、キャッシュメモリ制御部6−C11(C12)に送出する。
キャッシュメモリ制御部6−C11(C12)は、キャッシュメモリ−C11(C12)を構成する各部の動作を調停する。また、キャッシュメモリ制御部6−C11(C12)は、プロセッサコアP1(P2)からのアクセスを受け付けることができない場合に、BUSY状態であることを通知する。
タグメモリ部7−C11(C12)は、データメモリ部8−C11(C12)のデータに付随する情報を格納する記憶領域である。本実施形態に係るコンピュータ11では、各キャッシュラインのタグが、V(有効ビット)、M(更新ビット)、L(ロックビット)、ADDR(キャッシュラインアドレス)、W(データ有効ビット)、PID(データ送信先プロセッサID)を有している。以下、各ビットについて説明する。
V(有効ビット):キャッシュラインの有効性を示す。
M(更新ビット):キャッシュライン内のデータがプロセッサコアによって更新されているか否かを示す。M=1となっているキャッシュラインは、キャッシュメモリから追い出される際に、下位の記憶階層へ書き込みを行う必要がある。
L(ロックビット):キャッシュラインが追い出し禁止になっているか否かを示す。L=1となっているキャッシュラインは、置き換えの対象にならない。
W(データ有効ビット):キャッシュライン内のデータの有効性を示す。すなわち、当該キャッシュライン内のデータが、他のキャッシュメモリ内の対応するキャッシュライン内のデータと整合しているか否かを示す。例えば、W=1となっているキャッシュラインにアクセスが行われた場合、アクセス保留制御部2−C11(C12)は、アクセスを保留してアクセス情報を保持する。
ADDR(キャッシュラインアドレス):キャッシュライン内のデータのメインメモリ4におけるアドレスを示す。なお、キャッシュメモリC1,C2は、1ラインあたり64バイトの全128ライン、8kビットのキャッシュメモリである。よって、本実施形態では、メインメモリ4のアドレスを構成する32ビットのアドレス値のうち、上位19ビットのみをADDRに格納し、中間の7ビットでキャッシュラインを選択している。下位の6ビットはバイトオフセットである。なお、キャッシュメモリC1,C2は、このようなものに限定されるものでなく、例えば、32や128バイトといった様々なキャッシュライン長のキャッシュメモリ等を適用することができる。
PID(データ送信先プロセッサID):データ転送先のプロセッサIDを示す。PIDが無指定の場合は、キャッシュ間データ転送部Tに接続された全プロセッサコアにデータを送信する必要がある。なお、プロセッサコアが2つの場合は省くこともできる。
データメモリ部8−C11(C12)は、キャッシュライン単位でデータを格納する部
分である。
下位記憶階層インターフェース部9−C11(C12)は、キャッシュメモリC11(C12)よりも下位の記憶階層を構成する機器(本実施形態でいうメインメモリ4が該当する)と接続するためのインターフェースである。下位記憶階層インターフェース部9−C11(C12)は、キャッシュメモリ制御部6−C11(C12)からの指示を受けてメインメモリ4へアクセス要求を送出する。また、メインメモリ4からの応答を受けたらこれをキャッシュメモリ制御部6−C11(C12)に通知し、受け取ったデータをデータメモリ部8−C11(C12)に格納したり、プロセッサコアインターフェース部1−C11(C12)に送出したりする。
キャッシュ間データ転送インターフェース部10−C11(C12)は、キャッシュ間データ転送部Tに接続するためのインターフェースである。キャッシュ間データ転送インターフェース部10−C11(C12)は、データ送信制御部3−C11(C12)から送出されたデータや、メインメモリ4でのアドレスの情報を、キャッシュ間データ転送部Tへ送出する。この情報は、キャッシュ間データ転送部Tを介して送り先のキャッシュメモリC12(C11)のデータ受信制御部4−C12(C11)へ送られる。
次に、コンピュータ11の動作について説明する。なお、コンピュータ11の動作は、第一実施形態においてデータ送受信部D1,D2で行なわれていた処理がキャッシュメモリC11,C12で行なわれるという点以外、第一実施形態に係るコンピュータ1が実行する図5の処理フローと基本的に同様である。そこで、以下に説明する動作説明においては、図5の処理フローを参照しつつ、第一実施形態に係るコンピュータ1と処理が異なっている点を中心に説明する。
本実施形態に係るコンピュータ11では、ステップS101において実行される領域確保が、次のようにして実行される。すなわち、プロセッサコアP1が領域確保の旨のコマンドをキャッシュメモリC11へ送ると、キャッシュメモリ制御部6−C11は、メインメモリ4に確保された特定のメモリ領域に対応するメモリ領域を、データメモリ部8−C11の何れかのキャッシュラインに確保する。また、キャッシュメモリ制御部6−C11は、データメモリ部8−C11に確保したメモリ領域に対応するタグメモリ部7−C11のキャッシュラインのタグを、次のように設定する。
V=1(有効)、M=1(更新)、L=1(ロック)、W=0(データ有効)、ADDR=指定された領域のアドレス
キャッシュメモリC11に確保されたメモリ領域の一例を図8に示す。キャッシュメモリ制御部6−C11がタグを設定する際、キャッシュリフィル動作(メインメモリ4からデータメモリ部8−C11へのデータの複写)は行われない。処理Aプログラムを実行する過程でデータが上書きされてしまうためである。また、キャッシュメモリ制御部6−C11は、当該コマンドにおいて指定された領域に対応するキャッシュラインが既に存在する場合、当該キャッシュラインのタグを上書きする。このとき、キャッシュラインが更新されていたとしても、メインメモリ4へのデータ書き込みは行わない。キャッシュメモリC11内に空きのキャッシュラインが無い場合は、既存のリプレースアルゴリズムで置き換えるキャッシュラインを決定し、置き換えを行う。置き換えるキャッシュラインが更新されている場合(M=1の場合)は、メインメモリ4へのデータ書き込みを行う。なお、キャッシュメモリ制御部6−C11は、設定するタグに、送信先のプロセッサコアを特定する情報(PID)を含めても良い。
キャッシュメモリC11にメモリ領域が確保されたら、プロセッサコアP1は、処理Aを実行する。プロセッサコアP1は、処理Aを実行する過程で、データの“リード”や“
ライト”、“ライト完了”といった各種のコマンドをキャッシュメモリC11に送る。キャッシュメモリC11では、アクセス保留制御部2−C11によってタグメモリ7−C11の情報等に基づく当該コマンドの許否の判定が行われ、プロセッサコアP1が処理したデータがデータメモリ部8−C11へ格納されていく(S102)。
前段側のプロセッサコアP1のリード処理は、第一実施形態で述べたのと同様、通常のキャッシュアクセスと同様に行われる。また、ステップS101で確保された領域に対する読み出しアクセスは保証されない。
また、前段側のプロセッサコアP1のライト処理は、第一実施形態で述べたのと同様、通常のキャッシュアクセスと同様に行う。また、ステップS101で確保された領域に対する書き込みアクセスについても、第一実施形態と同様、ライトバック方式であることが望ましい。第一実施形態でも述べたように、ステップS101で確保された領域に対してライト完了処理が行われた後にライトを行った場合の処理結果については保証されない。
また、前段側のプロセッサコアP1のライト完了は、例えば、キャッシュライン単位で指定する。換言すると、プロセッサコアP1は、例えば、一キャッシュライン分のデータを処理したら、ライト完了コマンドを送出する。ライト完了処理の処理フローを図10に示す。キャッシュメモリ制御部6−C11は、プロセッサコアP1から“ライト完了”の旨のコマンドが送られたら、指定されたキャッシュラインのデータをデータメモリ部8−C11から読み出す(S501)。対応するキャッシュラインにデータが存在していれば(S502)、当該データメインメモリ4におけるアドレス情報をキャッシュ間データ転送部Tへ送る(S503)。そして、読み出したデータをキャッシュ間データ転送部Tへ送る(S504)。データ転送は、全データ(当該キャッシュラインの全データ)の送信が完了するまで行う(S505)。なお、当該キャッシュラインに前述のPIDが設定されている場合は、設定されたプロセッサコアに対してデータを転送する。
なお、キャッシュメモリ制御部6−C11は、キャッシュ間データ転送部Tへデータを転送したら、タグメモリ7−C11にアクセスし、当該キャッシュラインのタグを「V=1,M=1,L=0,W=0」に変更してもよい(S506)。当該キャッシュラインのタグが「L=0」になっていれば、当該キャッシュラインのデータをキャッシュメモリC11から追い出して他のデータに割り当てることができる。
プロセッサコアP1は、一定量のデータを処理したら(S103)、“ライト完了”コマンドをキャッシュメモリC11へ送る(S104)。これにより、データ送信制御部3−C11でアクセス情報が生成され、データメモリ部8−C11のデータがキャッシュ間データ転送部Tへ送られる(S203)。
このように、プロセッサコアP1では、全データに対する処理Aの実行が完了するまで、第一実施形態で述べたのと同様な一連の処理(S101〜S105)が繰り返される。また、キャッシュメモリC11では、第一実施形態で述べたのと同様な一連の処理(S201〜S203)が繰り返される。
プロセッサコアP1は、全データに対する処理Aの実行が完了したら、メインメモリ4に確保していたメモリ領域を解放する旨のコマンドをキャッシュメモリC11へ送る(S106)。キャッシュメモリ制御部6−C11は、当該コマンドが送られたらタグメモリ部7−C11にアクセスし、ステップS101で確保したメモリ領域の該当キャッシュラインのタグを「L=1」から「L=0」へ変更する。これにより、当該キャッシュラインのデータをキャッシュメモリC11から追い出し、当該キャッシュラインを別のデータに割り当てることが可能となる。以上により、プロセッサコアP1における一連の処理(S
101〜S106)が完了する。
プロセッサコアP2側では、S203の処理でキャッシュメモリC11から送られたデータをキャッシュメモリC12が受信すると、データ受信制御部4−C12が、当該データをデータメモリ部8−C12へ書き込む旨のコマンドを、当該データやアドレス情報と共にアクセス要求選択部5−C12へ送る(S301)。当該データは、データメモリ部8−C12のキャッシュラインのうち送られたアドレス情報に対応するキャッシュラインへ格納される。また、タグメモリ部7−C12のキャッシュラインのうちデータを格納したキャッシュラインのタグを「W=1」から「W=0」へ変更する。また、データ受信制御部4−C12は、当該アドレス情報をアクセス保留制御部2−C12へ通知する(S302)。
本実施形態に係るコンピュータ11では、一連の処理(S101〜S302)が行われている間に実行される、ステップS401において実行される領域確保が、次のようにして実行される。すなわち、コンピュータ11が起動して所定のプログラムが実行され、処理BのタスクがプロセッサコアP2によって実行されると、プロセッサコアP2は、領域確保の旨のコマンドをキャッシュメモリC12へ送る。このコマンドは、ステップS101の処理においてプロセッサコアP1がメインメモリ4に確保したメモリ領域に対応するメモリ領域を、キャッシュメモリC12に確保する旨のコマンドである。キャッシュメモリ制御部6−C12は、当該コマンドを受けると、ステップS101においてメインメモリ4に確保されたメモリ領域に対応するメモリ領域であって、処理Bによるデータの処理に必要なメモリ領域を、データメモリ部8−C12の何れかのキャッシュラインに確保する。また、キャッシュメモリ制御部6−C12は、データメモリ部8−C12に確保したメモリ領域に対応するタグメモリ部7−C12のキャッシュラインのタグを、次のように設定する。
V=1(有効)、M=0(未更新)、L=1(ロック)、W=1(データ無効)、ADDR=指定された領域のアドレス
キャッシュメモリC12に確保されたメモリ領域の一例を図9に示す。キャッシュメモリ6−C12がタグを設定する際、キャッシュリフィル動作は行われない。また、キャッシュメモリ制御部6−C12は、当該コマンドにおいて指定された領域に対応するキャッシュラインが既に存在する場合、当該キャッシュラインのタグを上書きする。このとき、キャッシュラインが更新されていたとしても、メインメモリ4へのデータ書き込みは行わない。キャッシュメモリC12内に空きのキャッシュラインが無い場合は、既存のリプレースアルゴリズムで置き換えるキャッシュラインを決定し、置き換えを行う。置き換えるキャッシュラインが更新されている場合(M=1の場合)は、メインメモリ4へのデータ書き込みを行う。
キャッシュメモリC12にメモリ領域が確保されたら、プロセッサコアP2は、処理Bを実行する。プロセッサコアP2は、処理Bを実行する過程で、データの“リード”や“ライト”、“ライト完了”といった各種のコマンドをキャッシュメモリC12に送る。プロセッサコアP2がステップS402の処理Bを実行する過程で、キャッシュメモリ制御部6−C12は、プロセッサコアP2がアクセスしようとするデータが有効であるか否かをタグメモリ部7−C12の情報に基づいて判定する(S403)。キャッシュメモリ制御部6−C12は、プロセッサコアP2がアクセスしようとするデータのタグが「W=1」の場合は、プロセッサコアP2のアクセスをアクセス保留制御部2−C12に保留させる(S404)。
例えば、後段側のプロセッサコアP2のリード処理は、次のように行われる。リード処理の処理フローを図11に示す。すなわち、プロセッサコアP2から“リード”コマンド
が送られると、キャッシュメモリ制御部6−C12は、アクセス先のアドレスに対応するキャッシュラインを読み出す(S601)。キャッシュメモリ制御部6−C12は、対応するキャッシュラインが存在しなければ(S602)、通常のキャッシュミス時のリードアクセスを行う(S609)。また、キャッシュメモリ制御部6−C12は、対応するキャッシュラインが存在していれば(S602)、当該キャッシュラインのタグを参照する。キャッシュメモリ制御部6−C12は、キャッシュラインのタグが「V=1,W=0」の場合(S603)、キャッシュヒット時のリードアクセスを行う(S608)。また、キャッシュメモリ制御部6−C12は、キャッシュラインのタグが「V=1,W=1」の場合(S603)、以降のリードアクセスを行わず、アクセス情報をアクセス保留制御部2−C12に記憶させる(S604)。
上述のリード処理においてアクセスが保留されている間に、キャッシュ間データ転送部Tを介して前段側のプロセッサコアP1側からデータが転送され、該当するキャッシュラインにデータが格納されると(S605)、キャッシュメモリ制御部6−C12は、タグメモリ部7−C12にアクセスし、当該キャッシュラインのタグを「W=1」から「W=0」へ変更する(S606)。なお、キャッシュメモリ制御部6−C12は、当該キャッシュラインのタグについても「L=1」から「L=0」へ変更してもよい。プロセッサコアP1側からデータが一旦転送されてしまえば、その後も、キャッシュメモリC12に確保されたメモリ領域をキャッシュメモリC11と対応させ続ける必要も無い為である。タグが「L=0」の場合、当該キャッシュラインのデータを追い出し、他のデータに割り当てることができる。
また、キャッシュ間データ転送部Tから送られたデータのアドレスが、アクセス保留制御部2−C12に記憶されているアクセス情報のアドレスと一致していれば(S607)、アクセス保留制御部2−C12は、保留していたアクセス要求を送出する。これにより、上記ステップS601以降の処理が再び繰り返される。当該アクセス要求のアドレスに対応するキャッシュラインのタグは、この時点で「V=1」、「W=0」となっているので、以降は、通常のキャッシュヒット時のリードアクセスが行われることになる。また、アクセス保留制御部2−C12は、保留していたアクセス要求を送出したら、記憶していたアクセス情報を消去する。
なお、キャッシュ間データ転送部Tから送られたデータのアドレスがアクセス保留制御部2−C12に通知されない構成を採る場合には、例えば、アクセス保留制御部2−C12が、タグメモリ部7−C12に定期的にアクセスするようにしてもよい。そして、保留しているアクセス要求に対応するアドレスのキャッシュラインのタグが「W=1」から「W=0」になったら、当該キャッシュラインのデータがプロセッサコアP2へ送出されるようにしてもよい。
また、アクセス保留制御部2−C12は、複数のアクセス情報を記憶できるようにしてもよい。すなわち、アクセス保留制御部2−C12に複数個のエントリを用意し、上述したステップS607の一致比較を全エントリに対して行う。そして、一致したエントリの再開可能フラグをセットし、再開可能フラグがセットされたエントリの中からアクセス情報を順次選択していく。アクセス保留制御部2−C12がこのように構成されていれば、保留されたアクセスの後続のアクセスが実行可能であれば追い越して実行させることにより、リードアクセスをアウトオブオーダーにすることが可能となる。
また、後段側のプロセッサコアP2のライト処理は、次のように行われる。ライト処理の処理フローを図12に示す。すなわち、プロセッサコアP2から“ライト”コマンドが送られると、キャッシュメモリ制御部6−C12は、アクセス先のアドレスに対応するキャッシュラインを読み出す(S701)。キャッシュメモリ制御部6−C12は、対応す
るキャッシュラインが存在しなければ(S702)、通常のキャッシュミス時のライトアクセスを行う(S709)。また、キャッシュメモリ制御部6−C12は、対応するキャッシュラインが存在していれば(S702)、当該キャッシュラインのタグを参照する。キャッシュメモリ制御部6−C12は、キャッシュラインのタグが「V=1,W=0」の場合(S703)、通常のキャッシュヒット時のライトアクセスを行う(S708)。また、キャッシュメモリ制御部6−C12は、キャッシュラインのタグが「V=1,W=1」の場合(S703)、以降のライトアクセスを行わず、アクセス情報をアクセス保留制御部2−C12に記憶させる(S704)。キャッシュメモリC12が、ライトされたデータをメインメモリ4に直接出力するライトスルーモードに設定されていたとしても、ライトアクセスがアクセス保留制御部2−C12に記憶されることで保留される場合は、メインメモリ4へ書き込まれない。
上述のライト処理においてアクセスが保留されている間に、キャッシュ間データ転送部Tを介して前段側のプロセッサコアP1側からデータが転送され、該当するキャッシュラインにデータが格納されると(S705)、キャッシュメモリ制御部6−C12は、タグメモリ部7−C12にアクセスし、当該キャッシュラインのタグを「W=1」から「W=0」へ変更する(S706)。また、前述したように、キャッシュメモリ制御部6−C12は、当該キャッシュラインのタグについても「L=1」から「L=0」へ変更してもよい。
また、キャッシュ間データ転送部Tから送られたデータのアドレスが、アクセス保留制御部2−C12に記憶されているアクセス情報のアドレスと一致していれば(S707)、アクセス保留制御部2−C12は、保留していたアクセス要求を送出する。これにより、上記ステップS701以降の処理が再び繰り返される。当該アクセス要求のアドレスに対応するキャッシュラインのタグは、この時点で「V=1」、「W=0」となっているので、以降は、通常のキャッシュヒット時のライトアクセスが行われることになる。また、アクセス保留制御部2−C12は、保留していたアクセス要求を送出したら、記憶していたアクセス情報を消去する。
なお、リード処理の説明でも述べたように、アクセス保留制御部2−C12は、複数のアクセス情報を記憶できるようにしてもよい。アクセス保留制御部2−C12がこのように構成されていれば、ライトアクセスをアウトオブオーダーにすることが可能となる。
また、キャッシュメモリ制御部6−C12は、ステップS705の処理の段階で、アクセス保留制御部2−C12に記憶されているアクセス情報のアドレスと、キャッシュ間データ転送部Tから送られたデータのアドレスとを比較し、一致していれば受信したデータとライトデータとをマージしてもよい。そして、該当するキャッシュラインにデータを格納すると共に、対応するキャッシュラインのタグを「M=0」から「M=1」へ変更する。この場合、データメモリ部8−C12に対するライトアクセス回数を減らすことが可能になる。なお、マージしたデータはキャッシュラインのみならず、同時にメインメモリ4へ格納してもよい。
図5の処理フローを使った全体の処理の流れの説明に戻る。図11の処理フローでも詳しく説明したように、プロセッサコアP2のアクセスが保留されている間にステップS302の処理が実行されて、データ受信制御部4−C12からアドレスの情報が通知されると、アクセス保留制御部2−C12は、保留しているアクセスのアドレス情報と通知されたアドレスの情報とが一致するか否かを判定する(S405)。そして、アドレス情報が一致していたら、保留していたプロセッサコアP2のアクセスを再開する。これにより、保留されていたアクセスのキャッシュ動作が実現されて処理Bが再開される(S406)。なお、上述したステップS403の判定処理において、タグが「W=0」だった場合に
は、ステップS404〜S405の処理が省略され、通常のキャッシュ動作が実現されて処理Bが行われる。
プロセッサコアP2は、全データに対する処理Bの実行が完了するまで、上記一連の処理S401〜S406までの処理を繰り返す(S407)。また、プロセッサコアP2は、全データに対する処理Bの実行が完了したら、キャッシュメモリC12に確保されていた領域の設定を解放する旨のコマンドを送る(S408)。プロセッサコアP2から領域解放のコマンドが送られると、キャッシュメモリ制御部6−C12は、タグメモリ部7−C12にアクセスし、ステップS401の処理で確保した領域のキャッシュラインのタグを「L=0,W=0」に変更する。当該キャッシュラインのタグが「L=0」になっていれば、当該キャッシュラインのデータをキャッシュメモリC12から追い出して他のデータに割り当てることができる。なお、アクセス保留制御部2−C12に保留中のアクセスが存在する場合は、データメモリ部8−C12に対して通常のリード処理またはライト処理を行い、保留していたアクセスを処理したのち、当該領域を解放する。これにより、プロセッサコアP2における一連の処理(S401〜S408)が完了する。
上記一連の処理(S401〜S408)のタイミングチャートを図13に示す。プロセッサコアP2が処理するデータが、キャッシュメモリC11からキャッシュメモリC12へ転送されていない場合、プロセッサコアP2のアクセスは保留される(T1,S404)。
また、キャッシュメモリC11からキャッシュメモリC12へデータが転送されても、当該データのアドレスが保留中のアクセスのアドレスと一致していなければ、プロセッサコアP2のアクセスは保留されたままになる(T2,S405)。
一方、キャッシュメモリC11からキャッシュメモリC12へ転送されたデータのアドレスが、保留中のアクセスのアドレスと一致していれば、保留されていたプロセッサコアP2のアクセスは再開される(T3,S406)。そして、当該データに対するアクセスは、通常のキャッシュアクセスとして処理される(T4)。
また、プロセッサコアP2が他のアドレスのデータにアクセスしようとした際に、当該データがキャッシュメモリC11からキャッシュメモリC12へ転送されていない場合、プロセッサコアP2のアクセスは再び保留される(T5,S404)。
本実施形態に係るコンピュータ11は、図13のタイミングチャートが示すように、前段側のプロセッサコアP1が実行する処理Aと後段側のプロセッサコアP2が実行する処理Bがオーバーラップしながら実行される。しかし、キャッシュメモリC12に書き込まれていない前段側のプロセッサコアP1が処理したデータに対する処理は、後段側のプロセッサコアP2側で保留されるため、結果が矛盾することが無い。また、前段側のプロセッサコアP1は、後段側のプロセッサコアP2の処理状況を考慮せずに処理Aを実行できる。
特定のデータに対して複数の処理を施す場合に、一般的に知られているキュー(FIFO)構造を用いる場合、次のような問題がある。すなわち、一般的に知られているキュー構造を用いて処理Aの結果を順次キューに挿入し、処理Bを行うに先だって必要なデータをキューから取得する方法であれば、処理Aと処理Bをオーバーラップして実行することができる。ここで、処理Bに必要なデータに対する処理Aが前段で完了していない場合、データを取得する際に、処理Aが必要なデータを出力するまで待つことにより、矛盾なくオーバーラップ処理を行うことができる。しかし、キュー構造を管理しているデータは各コア間で矛盾なく共有される必要がある。より具体的には、何らかの排他アクセスが必要
となる。また、後段が前段の処理Aの完了を待つ間、後段は、キューをポーリングで監視するか、前段が後段に対して割り込みをかけるなどの何らかの通信を行わなければならない。よって、これらを行うハードウェア構成の実現に高コストを要する。
また、一般的に知られているキャッシュコヒーレンシ(バススヌープ等)を用いる場合、次のような問題がある。すなわち、前段と後段がメインメモリの同一アドレスをキャッシュメモリに格納している場合、前段のキャッシュメモリの内容と後段のキャッシュメモリの内容の一貫性は保たれる。しかし、キャッシュメモリの内容だけでは、参照アドレスのデータが前段の処理完了後のものであるか否かが判断できないため、前段の処理完了を通知する何らかの通信を行わなければならない。よって、これらを行うハードウェア構成の実現に高コストを要する。
一方、上記各実施形態であれば、データそのものの転送のみで、各プロセッサが特定のデータを排他的に処理できる。すなわち、データが有効になったことを表す、共有メモリへのアクセスや割り込みなどといったハードウェアのコストが高い通信を行わなくても、処理Bの実行過程で、当該データが有効であるか否かが判断できる。簡単なハードウェア構成で、処理対象のデータが処理Aによって処理されているか否かが処理Bの過程で判断できる。そして、各プロセッサが特定のデータを排他的に処理でき、処理結果が矛盾することが無い。