以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略する。
まず、上述した問題点の発生について、図10乃至図17を用いて説明する。図10は、関連技術にかかる一般的なクロスバを含むクロスバ制御装置90の構成を示すブロック図である。
クロスバ制御装置90は、リクエスタ91と、調停制御部92と、FIFO(First In First Out)9301、9302、9303、・・・、9315、9316と、クロスバ94と、メモリポート9501、9502、9503、・・・、9515、9316とを備える。リクエスタ91は、命令を発行するリクエスタである。調停制御部92は、クロスバ94の調停を行なう調停制御部である。FIFO9301乃至9316は、リクエストが蓄えられるFIFO方式のバッファであり、リクエスタ91から発行されたリクエストが順次、蓄えられる。FIFO9301乃至9316に格納されたリクエストのうち、各FIFOにおいて最初に格納されたリクエストが調停制御部92による調停の対象となる。クロスバ94は、実際にリクエストが通過するクロスバ本体である。図10では、クロスバ94は、入力ポートが16、出力ポートが16である16x16のクロスバを示している。メモリポート9501乃至9316は、出力先である。図10では、メモリポート9501乃至9316は、アクセス先のメモリポートを示している。このような構成のクロスバ制御装置90は、1つのロードストア命令で、複数の要素のメモリアクセスを実施するベクトルアーキテクチャで見られる構成でもある。
図11は、関連技術にかかるFIFO(キュー)のキューイング状態の例を示す図である。FIFO9301乃至9316、すなわち、キューは、クロスバ94の入力ポートPi0、Pi1、・・・、Pi15のそれぞれに対応して存在する。図11では、入力ポートPi0に対応するキューであるFIFO9301には、Entry0〜15に要素e000、e016、・・・、e240の順序でキューイングされていることを示す。同様に、入力ポートPi15に対応するキューであるFIFO9316には、Entry0〜15に要素e015、e031、・・・、e255の順序でキューイングされていることを示す。
この状態のキューからリクエストがクロスバ94を通過する様子を図12及び図13の二例を図示する。図12に一例目を示す。図12は、同一ライン内の要素の行き先が別ポートである場合におけるクロスバの出力タイミングの例を示す図である。ここで、同一ラインとは、調停制御部92が調停する際に、同時に調停対象となる要素が16であることを示す。例えば、入力ポートPi0乃至Pi15における同一ラインとは、図11のEntry0の要素e000、e001、・・・、e015を指す。そして、同一ライン内の要素の行き先が別ポートである場合とは、入力ポートPi0乃至Pi15における同一ラインの要素e000、e001、・・・、e015のそれぞれの行き先である出力ポートが別ポートである場合を示す。このときには、クロスバ94は、出力ポートが競合しないため、全16要素が同じタイミングで通過する。よって、図12中の全256要素を、出力ポートPo0〜Po15の16ポートに時刻T0からT15の16サイクルで転送させることができる。
図13に二例目を示す。図13は、同一ライン内の要素の行き先が同一ポートである場合におけるクロスバの出力タイミングの例を示す図である。すなわち、入力ポートPi0乃至Pi15における同一ラインの要素e000、e001、・・・、e015の全ての行き先が同じ出力ポートである場合を示す。
図13では、1ライン目(e000、・・・、e015)の行き先が出力ポートPo0、2ライン目(e016、・・・、e031)の行き先が出力ポートPo1、・・・、以下同様に繰り返して、16ライン目(e240、・・・、e255)の行き先が出力ポートPo15である場合を示している。この場合、1ライン目の全16要素が、全て同じ行き先であるため競合が発生し、競合に負けたポートは待たされることになる。競合が発生したため、全256要素のクロスバの通過には、時刻T0からT30の31サイクルを要している。
次に、図14乃至図17を用いて命令が連続したケースにおける問題点を説明する。ここでは、e000〜e255までの256要素を含む命令が2つ連続して入力される。以下では、先に入力された命令を先の命令、当該先の命令の後に入力された命令を後の命令と呼ぶ。そして、先の命令及び後の命令についてクロスバ94を利用して転送する場合を対象とする。
図14は、同一ライン内の要素の行き先が別ポートである場合(先の命令C1及び後の命令C2の2命令が連続して入力された場合)におけるクロスバ94の出力タイミングの例を示す図である。尚、説明の便宜上、先の命令C1は、要素e000、e016、・・・、e240の行き先を出力ポートPo0、要素e001、e017、・・・、e241の行き先を出力ポートPo1、・・・、要素e015、e031、・・・、e255の行き先を出力ポートPo15とする。また、後の命令C2は、要素e000、e016、・・・、e240の行き先を出力ポートPo15、要素e001、e017、・・・、e241の行き先を出力ポートPo0、・・・、要素e015、e031、・・・、e255の行き先を出力ポートPo14とする。図14では、同一ライン内の全ての要素の行き先が別であるため、先の命令C1及び後の命令C2共に競合が発生することなくクロスバ94を通過するので、性能低下は発生していない。
図15は、同一ライン内の要素の行き先が同一ポートである場合(先の命令C1a及び後の命令C2aの2命令が連続して入力された場合)におけるクロスバの出力タイミングの例を示す図である。尚、説明の便宜上、先の命令C1aは、要素e000、e001、・・・、e015の行き先を出力ポートPo0、要素e016、e017、・・・、e031の行き先を出力ポートPo1、・・・、要素e240、e241、・・・、e255の行き先を出力ポートPo15とする。また、後の命令C2は、要素e000、e001、・・・、e015の行き先を出力ポートPo15、要素e016、e017、・・・、e031の行き先を出力ポートPo0、・・・、要素e240、e241、・・・、e255の行き先を出力ポートPo14とする。
図15では、同一ライン内で行き先が同じであるため、先頭ラインで競合が発生する。具体的には、Entry0の要素e000、e001、・・・、e015の全ての行き先が、出力ポートPo0であるため、調停制御部92による調停の結果、時刻T0においては、例えば、要素e000のみが出力ポートPo0に出力される。そして、時刻T1において、Entry0の要素e001、・・・、e015と、Entry1の要素e016、e017、・・・、e031とが調停される。その結果、例えば、要素e001が出力ポートPo0に出力され、要素e016が出力ポートPo1に出力される。以下、同様に、時刻T15まで調停及び出力が行われる。
また、時刻T16では、先の命令C1aのEntry1〜15の未出力の要素についての調停と、後の命令C2aのEntry0の要素e000、e001、・・・、e015についての調停が行われる。その結果、例えば、後の命令C2aの要素e016が出力ポートPo0に出力され、先の命令C1aの要素e031、e046、・・・、e241がそれぞれ出力ポートPo1、Po2、・・・、Po15に出力される。以降、同様に、調停及び出力され、時刻T30において、先の命令C1aの全ての256要素について出力される。
つまり、図14の先の命令C1と比べて、図15の先の命令C1aには、15サイクルが余分に要することとなる。そして、先の命令C1aと後の命令C2aとの二命令を合わせた合計では、47サイクルを要することとなる。尚、図15の制御例では、説明の便宜上、先の命令C1aと後の命令C2aの間に隙間は空いていないものとする。
但し、図15に示すような制御方式を採用した場合、例えば、入力ポートPi15に何らかの遅延があった場合には、先の命令C1aの要素e255のクロスバへの発行が遅れ、反対に入力ポートPi0に位置している後の命令C2aの要素e000の発行が先に行なわれることがある。このとき、先の命令C1aの要素e255と後の命令C2aの要素e000の到着順序の逆転現象が発生する場合がある。
図16は、同一ライン内の要素の行き先が同一ポートである場合(先の命令C1b及び後の命令C2bの2命令が連続して入力された場合)において、到着順序の逆転現象が発生した場合のクロスバの出力タイミングの例を示す図である。図16では、先の命令C1b及び後の命令C2bの要素及び各要素の行き先は、図15と同様であるものとする。図16では、先の命令C1bの要素e255と後の命令C2bの要素e000の到着順序の逆転現象が発生していることを示し、それ以外の要素は、図15と同じタイミングで出力されることを示す。
ここで、先の命令と後の命令の間で要素の到着順序の保証が必要なければ、図15の制御方式で問題はない。しかし、先の命令と後の命令の間で要素の到着順序の保証が必要な場合、すなわち、先の命令の要素が、必ず後の命令の要素よりも先に出力ポートに到着しなければならない場合は問題となる。
この問題を回避するための手段の一例が図17に示す制御方法である。この制御方法をホールドオール制御と定義する。図17は、同一ライン内の要素の行き先が同一ポートである場合(先の命令C1c及び後の命令C2cの2命令が連続して入力された場合)において、到着順序の逆転現象が発生した際に、ホールドオール制御を行った場合のクロスバの出力タイミングの例を示す図である。
ホールドオール制御では、先の命令C1cの全ての要素がクロスバ94を通過した後(T30)に、後の命令C2cの先頭要素のクロスバ94への転送が開始される(T31)。先の命令C1cの全要素の転送が行なわれてから、後の命令C2cの要素の転送が開始されるため、命令間で要素の到着順の逆転現象は発生しなくなり、命令間での順序保証が保たれることになる。但し、ホールドオール制御の場合、後の命令C2cは先の命令C1cの転送を待つため、先の命令C1cと後の命令C2cの間で15サイクルのペナルティが発生し、順序保証をするために性能を大きく落としている。そのため、クロスバ94を流れる命令間で、到着順序の保証が必要な場合には、依存関係のある後続の命令を一時止める必要があったため、クロスバ94に空きができ、スループットをフルに出せない問題があった。
従って、性能維持のためにホールドオール制御を行わない状態で到着順序を保証する方式が必要である。以下の実施形態では、スループットを維持しつつ、命令間の順序保証を行うための要求転送装置及び要求転送方法について説明する。
<発明の実施の形態1>
図1は、本発明の実施の形態1にかかる要求転送装置20の構成を示すブロック図である。図1では、要求転送装置20は、複数の要求元11、12、・・・、1k(kは、2以上の整数。)のそれぞれから要求群110等を受け付ける。また、要求転送装置20は、受け付けた要求群110等に含まれる各要求に指定された要求先31、32、・・・、3m(mは、2以上の整数。)へ出力する。
ここで、要求群110には、複数の要求111、112、・・・、11n(nは、2以上の整数。)が含まれる。要求111〜11nは、要求先31〜3mのいずれかへ任意の処理を要求するための命令の要素であるか、データを転送するためのパケットデータ等である。そのため、要求111〜11nは、それぞれ行き先として要求先31〜3mのいずれかが指定されている。そして、要求群110に含まれる要求111〜11nのそれぞれは、行き先が異なる場合や全てが同じである場合があり得るものとする。
また、要求元11〜1kは、要求転送装置20を介して要求先31〜3mへ要求群110等を送信するものである。要求元11〜1kは、例えば、コンピュータが備えるプロセッサであるか、ネットワークにおけるサーバやクライアント等である。また、要求先31〜3mは、要求転送装置20から自己が行き先として指定された要求を受信し、所定の処理を行う。要求先31〜3mは、例えば、コンピュータが備えるメモリであるか、ネットワークにおけるサーバやクライアント等である。
要求転送装置20は、バッファ割当部21と、バッファ221、222、・・・、22mと、要求出力部23とを備える。バッファ221〜22mのそれぞれは、複数の要求先である要求先31〜3mに対応し、バッファ割当部21が受け付けた要求を格納するバッファである。そして、バッファ221〜22mのそれぞれは、要求群110等を識別するための識別情報を対応付けた複数の領域に予め分割されている。
例えば、バッファ221は、領域2211、2212、・・・、221kに分割されている。そして、領域2211には、要求22111、22112、・・・、2211nを格納するための領域が確保されている。同様に、領域2212には、要求22121、22122、・・・、2212nを格納するための領域が確保されており、領域221kには、要求221k1、221k2、・・・、221knを格納するための領域が確保されている。
また、バッファ222は、領域2221、2222、・・・、222kに分割されている。同様に、バッファ22mは、領域22m1、22m2、・・・、22mkに分割されている。尚、本発明の実施の形態1においては、要求群110に含まれる要求数nと、各バッファ内に分割された各領域に格納可能な要求数nとが、同一と限定するものではない。同様に、本発明の実施の形態1においては、要求元11〜1kの要求元数kと、各バッファ内に分割された領域数kとが、同一と限定するものではない。
バッファ割当部21は、複数の要求元のそれぞれから、複数の要求先のいずれかが指定された複数の要求を含む要求群を受け付けて、当該要求群に含まれる各要求を、当該要求に指定された要求先に対応する複数のバッファ221〜22mへ格納する。その際、バッファ割当部21は、受け付けた要求群110に含まれる各要求に対して、当該要求群110に対応する識別情報を付加し、各要求に指定された要求先に対応するバッファ221〜22m内で付加された識別情報に対応付けられた領域へ各要求を格納する。ここで、バッファ割当部21は、複数の要求元11〜1kのそれぞれに対応するk個の入力バッファと、当該k個の入力バッファのそれぞれからバッファ221〜22mへのk×m種類の入出力の機構備えるクロスバ等の装置とを備えていてもよい。この場合、バッファ割当部21は、受け付けた要求群に含まれる全ての要求について同一の識別情報を付加し、その後、当該要求群の要求元に対応する入力バッファへ各要求を格納する。そして、バッファ割当部21は、クロスバ等の装置により、各入力バッファに格納された要求について、指定された要求先に応じてバッファ221〜22mのいずれかへ出力する。
要求出力部23は、バッファ221〜22mに格納された各要求を読み出して、各要求先へ出力する。そして、要求出力部23は、識別情報に対応付けられた領域単位に、バッファ221〜22mのそれぞれに格納された各要求を読み出す。つまり、要求出力部23は、バッファ221〜22mに格納された各要求について、格納順に関わらず、領域単位で読み出しを行う。
図2は、本発明の実施の形態1にかかる要求転送方法の処理の流れを示すフローチャートである。まず、バッファ割当部21は、要求群を受け付ける(S11)。すなわち、バッファ割当部21は、複数の要求元のそれぞれから、複数の要求先のいずれかが指定された複数の要求を含む要求群を受け付ける。
次に、バッファ割当部21は、要求群に含まれる各要求に当該要求群を識別する識別情報を付加する(S12)。そして、バッファ割当部21は、要求先に対応するバッファ内の識別情報に対応する領域へ各要求を格納する(S13)。
例えば、バッファ割当部21は、要求群110に、領域2211、2221、・・・、22m1に対応する識別情報を付加したものとする。そして、要求111の行き先が要求先31、要求112の行き先が要求先32、・・・、要求11nの行き先が要求先3mであるものとする。この場合、バッファ割当部21は、要求111をバッファ221内の領域2211に格納する。同様に、バッファ割当部21は、要求112をバッファ222内の領域2221に格納し、要求11nをバッファ22m内の領域22m1に格納する。
続いて、要求出力部23は、識別情報に対応付けられた領域単位にバッファから要求を読み出す(S14)。そして、要求出力部23は、読み出した要求を、当該要求に指定された要求先に出力する(S15)。例えば、要求出力部23は、バッファ221内の領域2221、2222、・・・、222kの順序で格納された要求を読み出し、要求先31へ出力する。
このように、本発明の実施の形態1では、バッファ221〜22mが識別情報単位で領域に分割されており、バッファ割当部21は、各要求を識別情報に基づいて各領域に格納する。そのため、バッファ割当部21によるバッファの格納順序が要求群の受け付け順と異なったとしても、要求出力部23が領域単位で読み出すことで、スループットを維持しつつ、命令間の順序保証を行うことができる。
<発明の実施の形態2>
図3は、本発明の実施の形態2にかかるクロスバ制御装置30の概念を説明するための図である。クロスバ制御装置30は、FIFO3100、3101、・・・、3114、3115と、入力ポート3200、3201、・・・、3214、3215と、クロスバ33と、出力ポート3400、・・・、3415と、VNバッファ3500、・・・、3515と、メモリポート3600、・・・、3615とを備える。
FIFO3100〜3115は、クロスバ33の入力ポート側に位置するFIFOキューである。FIFO3100〜3115には、外部のプロセッサ等から受け付けた複数の要素を含む命令が格納されている。例えば、FIFO3100には、命令0の要素e000、e016、・・・、e240、命令1の要素e000、e016、・・・、e240、・・・、命令3の要素e000、e016、・・・、e240の順で格納されていることを示す。FIFO3100〜3115のその他については、図10に示したFIFO9301〜9316と同等の構成である。
クロスバ33は、入力ポート3200〜3215を介してFIFO3100〜3115に格納された各命令の要素を、当該要素に指定された宛先であるメモリポートに対応する出力ポート3400乃至3415のいずれかへ出力する。
VNバッファ3500〜3515は、出力ポート3400〜3415のそれぞれに対応するVirtual Network用Bufferである。VNバッファ3500〜3515のそれぞれは、命令を識別する識別番号に対応する領域に予め分割されている。例えば、VNバッファ3500は、命令0に対応するVN0用バッファ35000、命令1に対応するVN1用バッファ35001、・・・、命令3に対応するVN3用バッファ35003に分割されている。そして、各領域には、複数の命令の要素を格納することが可能である。例えば、VN0用バッファ35000には、命令0の要素e000、e001、・・・、e015、VN1用バッファ35001には、命令1の要素e000、e001、・・・、e015、・・・、VN3用バッファ35003には、命令3の要素e000、e001、・・・、e015がそれぞれ格納される。
同様に、VNバッファ3515は、命令0に対応するVN0用バッファ35150、・・・、命令3に対応するVN3用バッファ35153に分割されている。VN0用バッファ35150には、命令0の要素e240、e241、・・・、e255、・・・、VN3用バッファ35153には、命令3の要素e240、e241、・・・、e255がそれぞれ格納される。
メモリポート3600〜3615は、メモリ(不図示)へのアクセス要求を受け付けるポートである。メモリポート3600〜3615は、上述したように、出力ポート3400〜3415のそれぞれに対応する。
本発明の実施の形態2は、Virtual Network方式によりホールドオール制御を削除することで、クロスバの転送性能を落とすことなく、命令の到着順序の保証を可能にするものである。本発明の実施の形態2の概要を以下に説明する。
(1)命令毎にVirtual Network番号を割り当てる。入力ポート3200〜3215の上にあるFIFO3100〜3115にキューイングされる前に、命令毎に、命令を識別する識別情報であるVirtual Network番号(以下、「VN番号」という。)を割り当てる。
(2)順序保証が必要な命令列でもホールドをさせることなくクロスバを通過させる。例えば、クロスバ33を通過する命令1と命令2の間でホールドオール制御を行なわないため、クロスバの転送性能を維持している。
(3)命令間の順序保証(シリアライズ)は、クロスバの出力ポートにあるVirtual Network毎に設けられたVNバッファ3500〜3515からの読み出し時に行なう。VNバッファ3500〜3515がVirtual Network用Bufferである。クロスバ33からリクエストが出てくると、出力ポート毎に設けられたVNバッファにリクエストが書き込まれる。VNバッファ内部は、VN番号毎にエリアが区切られており、当該リクエストは自身のVN番号と同じVN番号のエリアに書き込まれる。VNバッファからの読み出し処理時には、古いVN番号のエリアから行なう。すなわち、古いVN番号は、先に発行された命令に割り当てられているため、読み出しを先頭VN番号バッファから行なうことで、命令間での順序を保証することができる。
図5は、本発明の実施の形態2にかかるクロスバ制御装置50の構成を示すブロック図である。クロスバ制御装置50は、リクエスタ51と、VN割当制御部52と、調停制御部53と、FIFO5401、5402、5403、・・・、5415、5416と、クロスバ55と、VNバッファ5601、5602、5603、・・・、5615、5616と、VN解放制御部57と、メモリポート5801、5802、5803、・・・、5815、5816とを備える。
リクエスタ51と、調停制御部53と、FIFO5401〜5416と、クロスバ55と、メモリポート5801〜5816とは、図10のリクエスタ91と、調停制御部92と、FIFO9301〜9316と、クロスバ94と、メモリポート9501〜9516と同等である。
リクエスタ51は、リクエストを生成する。図5で想定しているリクエスタ51は、1つの命令から、要素毎に行き先の異なる複数の要素のリクエストを発行する機能を有しているものとする。例えば、リクエスタ51は、1命令につき、要素e000〜e255までの256の要素を発行している。つまり、リクエスタ51が発行する命令は、複数のメモリのいずれかを要求先として指定された複数のメモリアクセスリクエストを含む一群の命令であり、要求群であるといえる。
調停制御部53は、クロスバ55に対する調停の制御を行なう。例えば、ある特定の出力ポートに対して、同タイミングで複数の入力ポートからの要求があった場合には、調停制御部53は、1つのリクエストのみを通し、残りのリクエストはホールドさせる。
FIFO5401〜5416は、クロスバ55の入力ポート側に存在するキューである。調停制御部53による調停制御で競合負けした場合には、後続のリクエストは順次FIFOで待たされることになる。
クロスバ55は、複数の入力ポートと複数の出力ポートを接続する結合網である。図5では、入力ポートを16、出力ポートを16と仮定して記載している。すなわち、クロスバ55は、16x16の構成になっている。
メモリポート5801〜5816は、リクエストが最終的に到達するポートである。特に、メモリへのアクセスは、データのリードライト順を考慮しなければならないため、本発明の実施の形態2にかかる出力先ポートの一例として示している。
また、本発明の実施の形態2にかかるクロスバ制御装置50は、図10のクロスバ制御装置90と比べて、新たにVN割当制御部52と、VNバッファ5601〜5616と、VN解放制御部57とが追加されたものである。そのため、以下では、これらの構成要素について説明する。
VN割当制御部52は、リクエスタ51から発行されたリクエストに対して、VN番号の割当を行なうバッファ割当部である。ここで、VN番号とは、当該リクエストが属する命令を識別するための識別情報である。つまり、同一の命令に属するリクエストについては、同一のVN番号が割当られる。このとき、VN割当制御部52は、VN番号当たりに割り当てたリクエスト数をVNバッファ5601〜5616へ通知する。つまり、VN割当制御部52は、出力ポートごとに存在するVNバッファ5601〜5616に対して、いくつのリクエストが当該VNバッファ5601〜5616に到着するかを、予め通知しておく機能も有する。尚、VN割当制御部52は、識別情報当たりに付加した要求数をVN解放制御部57へ通知してもよい。
また、VN割当制御部52がリクエストにVN番号を割り当てる際、未割り当てのVN番号がない場合には、リクエストは待たされることになる。つまり、VN割当制御部52は、予め割当可能なVN番号の上限値に達した場合、後続の命令に属するリクエストへのVN番号の割当を保留する。そして、VN割当制御部52は、割当済みのVN番号のうち割当可能となったVN番号から、当該保留したリクエストに対して割当を再開する。
VNバッファ5601〜5616は、命令間の順序保証(シリアライズ)を行なう機能を有している出力ポート毎に設けられたバッファである。クロスバ55からリクエストが出力されると、出力ポート毎に設けられたVNバッファ5601〜5616にリクエストが書き込まれる。VNバッファ5601〜5616内部は、VN番号毎にエリアが区切られており、当該リクエストは自身のVN番号と同じVN番号のエリアに書き込まれる。
VN解放制御部57は、VNバッファ5601〜5616のそれぞれからエリア単位にリクエストを読み出し、VNバッファ5601〜5616に対応するメモリポート5801〜5816へ出力する要求出力部である。VN解放制御部57は、VNバッファ5601〜5616のそれぞれについて、VN割当制御部52においてより先に割り当てられたVN番号のエリア内のエントリから、リクエストの読み出しを行う。例えば、VN解放制御部57は、VNバッファ5601〜5616内のVN番号の小さい順に読み出しを行う。すなわち、読み出しをリクエストの格納順ではなく、VN番号順で行なうことで、命令間の順序を保証する。
言い換えると、VN解放制御部57は、任意のVNバッファにおける複数の領域のうち、VN割当制御部52においてより先に割り当てられた識別情報に対応する領域から優先して要求を読み出す。これにより、エリアの上限に満たない場合、優先度の高い領域から読み出しを行なうため、順序保証を保ちつつ処理速度を向上させることができる。すなわち、優先度の高い領域に格納された全ての要求の読み出しが完了するまでは、例え、読み出しの優先度の低い領域について要求が格納されたとしても読み出しが開始されない。
また、VN解放制御部57は、複数のバッファの全てにおける同一の識別情報に対応付けられた各領域に格納された全ての要求が読み出された場合に、つまり、各領域において、VN割当制御部52から通知された要求数分の要求の読み出しが完了した場合に、当該識別情報をVN割当制御部52へ通知する。そして、VN割当制御部52は、VN解放制御部57から通知された識別情報を、新たに受け付けた要求群を識別するための識別情報として用いる。
図6は、本発明の実施の形態2にかかるVNバッファ6の概念を説明するための図である。VNバッファ6本体自体は、例えば、通常のSRAM(Static Random Access Memory)などで構成される。本発明の実施の形態2にかかるVNバッファ6は、さらに、補助機能として、VN番号ごとのエリアが予め定められている。図6では、VNバッファ6は、領域60、61、62、・・・、6k−1、6kに分割されていることを示す。そして、領域60には、要求領域601、602、・・・、60nが確保されている。同様に、領域61には、要求領域611、612、・・・、61n、領域62には、要求領域621、622、・・・、62n、・・・、領域6k−1には、要求領域6k−11、6k−12、・・・、6k−1n、領域6kには、要求領域6k1、6k2、・・・、6knがそれぞれ確保されている。また、図6では、各要求領域に"要求"と記載されているものには、VN割当制御部52によりリクエストが格納済みであることを示し、"未"と記載されているものには、リクエストが未格納であることを示す。尚、リクエストが未格納である場合には、そもそも命令に含まれる要素数が領域内で確保された要素数未満である場合も含まれる。
ここで、リクエスタ51から出力されたリクエストにはVN番号が付与されているため、VNバッファ6への書き込み時には当該VN番号のエリアが利用される。また、VN解放制御部57によるVNバッファ6からの読み出し時には、命令ごとの順序を保証する。VNバッファ6からの読み出し順序は、図6中の通りである。つまり、VN解放制御部57は、あるVN番号に対応する領域からの読み出しが完全に完了すると、VN番号+1に対応する領域からの読み出しが行う。
例えば、VN解放制御部57は、領域60から要求領域601、602、・・・に格納されたリクエストをこの順序で読み出す。そして、要求領域60nには未格納であるため、VN解放制御部57は、次のVN番号に対応する領域61から要求領域611に格納されたリクエストを読み出す。そして、要求領域612、・・・、61nには未格納であるため、VN解放制御部57は、次のVN番号に対応する領域62から要求領域621、622、・・・、62nに格納されたリクエストを読み出す。以後、VN解放制御部57は、領域6kまで読み出しを完了した場合、領域60からの読み出しを行う。
また、VN解放制御部57は、VN番号の解放確認を行う。このとき、全てのVNバッファにおける当該VN番号に対応する領域から全てのリクエストの読み出しが完了していた場合、VN解放制御部57は、VN割当制御部52に対して当該VN番号が解放されたことを解放通知により通知する。
図7は、本発明の実施の形態2にかかるリクエスト転送処理の流れを説明するためのフローチャートである。まず、リクエスタ51は、リクエストを発行する(S21)。具体的には、リクエストごとに異なるメモリポートを宛先とし、複数のリクエストを要素とした命令を発行する。このとき、リクエスタ51は、複数の命令を連続して発行する。
次に、VN割当制御部52は、VN番号割当処理を行う(S22)。そして、VN割当制御部52は、VN番号の割当が完了したか否かを判定する(S23)。VN番号は有限であるため、割当が可能なときと不可能なときがあるためである。ステップS23において、割当が不可能と判定された場合、ステップS22に戻り、VN解放制御部57からVN番号の解放通知を受信するまで、当該リクエストへのVN番号の割当を保留する。
ステップS23において、割当が可能と判定された場合、そのまま処理は次のステップS24及びS31へ進む。VN割当制御部52は、VN番号へ割り当てたリクエスト数をカウントアップし、VNバッファ5601〜5616へカウンタを通知する(S31)。また、VN割当制御部52は、FIFO5401〜5416へキューイングする(S24)。
続いて、調停制御部53は、FIFO5401〜5416の先頭に格納されたリクエストに対して、調停を行う(S25)。そして、クロスバ55は、調停されたリクエストを通過させて、当該リクエストに指定された行き先に対応する出力ポートへ出力する(S26)。その後、クロスバ55を通過したリクエストは、VNバッファ5601〜5616に書き込まれる(S27)。このとき、各リクエストは、自己に割り当てられたVN番号に対応するエリア内に書き込まれる。
続いて、VN解放制御部57は、VNバッファ5601〜5616からリクエストの読み出しを行う(S28)。このとき、VN解放制御部57は、より古くから割り当てられたVN番号に対応するエリアから読み出しを行う。VN解放制御部57は、最も古いVN番号のエントリからの読み出しが全て完了すると、次のVN番号からの読み出しを行なえるようになる。
尚、最も古いVN番号のエントリからの読み出しが全て完了したか否かの判定は、カウンタ制御により行われる。つまり、ステップS31においてVN割当制御部52から通知されたカウンタに応じて、VN解放制御部57は、各エリア内からのリクエストの読み出しが完了したか否かを判定する。具体的には、VNバッファ5601〜5616は、ステップS31においてVN割当制御部52から当該出力ポートの当該VN番号に対していくつのリクエストが発行されたかが通知されている。そして、VN解放制御部57は、通知されたリクエスト数から、当該出力ポートの当該VN番号に対するリクエストの受信完了判定を行い、かつ、当該出力ポートの当該VN番号からのリクエストの発行完了を確認する。この確認が完了すると、当該ポートの当該VN番号からの全ての読み出しが完了したことになる。そのため、VN解放制御部57は、次に古いVN番号からの読み出しを開始する。
VN解放制御部57は、全出力ポート上のもっとも古いVN番号からの読み出しが完了したことにより、VN番号を解放する(S29)。そして、VN解放制御部57は、全出力ポート上のもっとも古いVN番号からの読み出しが完了したことを確認すると、VN割当制御部52にVN番号の解放通知を発行する(S32)。そして、VN割当制御部52は、解放通知を受信すると、当該VN番号を再利用する。そのため、ステップS23で割当が不可能と判定された場合、VN割当制御部52は、VN番号の解放通知を受信するまで、リクエストへのVN番号の割当を保留する。保留されたリクエストは、過去に利用していたVN番号が解放された後、VN番号が割り当てられ、その後、次のステップに進む。
また、VN解放制御部57により読み出されたリクエストは、メモリポート5801〜5816へメモリアクセスする(S30)。以上のVN番号の割当処理、VN番号を利用したVNバッファへの書き込み、VNバッファからの読み出し処理及びVN番号の解放処理を用いて、性能低下を引き起こすことなく命令間のアクセスの順序保証を実現している。
図4は、本発明の実施の形態2にかかるクロスバの出力タイミングの例を示す図である。図4は、図16と同様の場合であり、同一ライン内の要素の行き先が同一ポートである場合(先の命令C1d及び後の命令C2dの2命令が連続して入力された場合)におけるクロスバの出力タイミングの例を示す図である。また、図4では、先の命令C1dの要素e255と後の命令C2dの要素e000の到着順序の逆転現象が発生していることを示し、それ以外の要素は、図15と同じタイミングで出力されることを示す。
そして、本発明の実施の形態2では、VN割当制御部52は、先の命令C1dに含まれる要素e000〜e255について、VN番号として"VN0"を付加している。また、VN割当制御部52は、後の命令C2dに含まれる要素e000〜e255について、VN番号として"VN1"を付加している。そのため、時刻T30に、"VN1"が付加された後の命令C2dの要素e000がFIFO5416に格納され、時刻T31に、"VN0"が付加された先の命令C1dの要素e255がFIFO5416に格納される。
しかし、後の命令C2dの要素e000がクロスバ55を介してVNバッファ5616に格納される際には、VNバッファ5616内の"VN1"に対応する領域の先頭に格納される。その後、先の命令C1dの要素e255がクロスバ55を介してVNバッファ5616内の"VN0"に対応する領域の末尾に格納される。
そして、VN解放制御部57は、VNバッファ5616内の"VN0"に対応する領域にリクエストが格納され始めた後に、当該領域からリクエストを読み出し始める。そして、VN割当制御部52からVNバッファ5616に"VN0"に割り当てられたリクエスト数が"16"である旨が通知されているため、VN解放制御部57は、VNバッファ5616から"16"個のリクエストの読み出しが完了するまで、"VN1"に対応する領域からのリクエストの読み出しを開始しない。つまり、VN解放制御部57は、VNバッファ5616から要素を読み出す際には、"VN1"より"VN0"に対応する領域から優先して読み出しを行う。
そのため、VN解放制御部57は、"VN0"に対応する領域に先の命令C1dの要素e255が格納され、当該領域から全ての要素の読み出しを行った後、"VN1"に対応する領域から要素の読み出しを開始する。よって、先の命令C1dと後の命令C2dとの到着順序が保証される。
本発明の実施の形態2は、一つのリクエスタが複数の経路を利用し、かつ、命令間(データ間)での順序を保証したいときに起きる問題を解決するものである。例えば、ベクトルアーキテクチャは、1命令で複数のメモリアクセスを発行するため、複数の経路を使っている。また、ベクトルアーキテクチャは、ディスティネーションもメモリであるため、順序の保証も必要となるため、この構成が適用可能である。
本発明の実施の形態2では、順序を保証すべき単位ごとにVN番号を割り当て、割り当てられたVN番号順にリクエストを読み出すことで、順序を保証している。その結果、順序を保証するためのホールドオール制御を削除することができ、クロスバの利用効率の低下を防いでいる。
<発明の実施の形態3>
前述の実施の形態2では、1命令毎に1つのVN番号の割当を行なっていた。しかし、現実的には、VN番号は有限個であり、VN番号が枯渇すると後続の命令の発行を止める必要があった。また、反対に、十分に大きなVN番号までをサポートした場合には、通常状態では、過剰なハードウェアの投資になってしまい、費用対効果が合わない。そこで、本発明の実施の形態3では、VN番号をより効率的に利用する方法について説明する。
まず、前述の実施の形態2における課題の発生について図8を用いて説明する。図8は、本発明の実施の形態2にかかる1命令毎に1つのVN番号の割当を行なっている状態を説明するための図である。前述の実施の形態2では、命令毎にVN番号を消費するので、多くのVN番号を必要とする。図8では、仮に最大VN番号数を"8"とする。そのため、命令1〜8には、VN番号0〜7が割り当てられていることを示す。同様に、命令9〜16、命令17〜24、命令25〜32についてもVN番号0〜7が割り当てられていることを示す。
そして、例えば、命令1のVN番号0の解放通知が何らかの事情により遅れると、命令9は、VN番号0の割当が保留される。つまり、命令9にはホールドオール制御がかかり、クロスバとは別の箇所での性能低下が発生する。
ここで、命令には、先行命令との順序保証が必要な場合ばかりでなく、順序保証が不要な場合もある。つまり、順序保証が必要な場合とは、当該命令が先行命令を追い越してはいけないことを示す。また、順序保証が不要な場合とは、当該命令が先行命令を追い越しても構わないことを示す。
そこで、本発明の実施の形態3では、本発明の実施の形態2にかかるバッファ割当部に改良を加え、受け付けた要求群が先行する要求群との順序保証が不要である場合、当該受け付けた要求群に含まれる各要求に対して、先行する要求群に対応する識別情報を付加することを特徴とする。ここでは、リクエスタから発行される各命令には、予め順序保証が必要か否かを示す情報が含まれているものとする。そして、本発明の実施の形態3にかかるバッファ割当部は、受け付けた命令に順序保証が必要か否かを判定し、順序保証が不要と判定された場合には、例えば、直前の命令に割り当てたVN番号を継続して割当に用いる。これにより、VN番号が枯渇する可能性を軽減し、後続の命令の発行が止められ難くなる。よって、本発明の実施の形態2に比べてさらなる性能の向上を実現することができる。
図9は、本発明の実施の形態3にかかるクロスバ制御方式を説明するための図である。まず、命令1〜32には、それぞれ"先行命令との順序保証"の要否が予め定められていることを示す。そして、この場合、本発明の実施の形態3にかかるバッファ割当部は、命令2に、VN番号1が割り当てる。命令2には、"先行命令との順序保証"が"要"と定められており、順序保証をするため、直前の命令1とは異なるVN番号である"1"を取得する必要があるためである。しかし、本発明の実施の形態3にかかるバッファ割当部は、命令3〜6について"先行命令との順序保証"が"不要"であると判定するため、引き続き、VN番号1が割り当てる。命令3〜6には、到着の順序に制約は存在しないためである。命令7以降についても以降、同様に"先行命令との順序保証"の要否が判定され、適宜、VN番号が継続して割り当てられる。
このように、本発明の実施の形態3にかかる割当方法により、VN番号の有効利用が可能になり、多くのハードウェアを投入することなく、VN番号が枯渇する可能性を大きく緩和することができる。
<その他の発明の実施の形態>
本発明の利用が考えられる分野としては、クロスバのような多入力対多出力の通信網を持ち、かつ、通信網を通るパケット(命令列、もしくは、データ列)間で到着順序の保証を必要とするようなコンピュータシステム、もしくは、ネットワークスイッチにおける利用の可能性が考えられる。
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。