(57)【特許請求の範囲】
【請求項１】
複数の要求先に対応する複数のバッファと、
複数の要求元のそれぞれから、前記複数の要求先のいずれかが指定された複数の要求を含む要求群を受け付けて、当該要求群に含まれる各要求を、当該要求に指定された要求先に対応する前記複数のバッファへ格納するバッファ割当部と、
前記複数のバッファに格納された各要求を読み出して、各要求先へ出力する要求出力部と、を備え、
前記複数のバッファのそれぞれは、所定の順序に従った識別情報が対応付けられた複数の領域に予め分割され、
前記バッファ割当部は、前記受け付けた要求群に含まれる各要求に対して、当該要求群の受付順に対応する前記所定の順序に従った前記識別情報を付加し、各要求に指定された要求先に対応する前記バッファ内で前記付加された識別情報に対応付けられた領域へ各要求を格納し、
前記要求出力部は、前記所定の順序に従った前記識別情報に対応付けられた領域単位に、前記複数のバッファのそれぞれに格納された各要求を読み出し、当該読み出した要求を、当該要求に指定された要求先へ出力する
ことを特徴とする要求転送装置。
【請求項２】
前記バッファ割当部は、前記受け付けた要求群が先行する要求群との順序保証が不要である場合、当該受け付けた要求群に含まれる各要求に対して、前記先行する要求群に対応する前記識別情報を付加することを特徴とする請求項１に記載の要求転送装置。
【請求項３】
前記バッファ割当部は、前記識別情報を付加した要求数を前記要求出力部へ通知し、
前記要求出力部は、前記複数のバッファの全てにおける同一の識別情報に対応付けられた各領域において、前記バッファ割当部から通知された要求数分の要求の読み出しが完了した場合に、当該識別情報を前記バッファ割当部へ通知し、
前記バッファ割当部は、前記要求出力部から通知された識別情報を、新たに受け付けた要求群を識別するための識別情報として用いる
ことを特徴とする請求項１又は２のいずれか１項に記載の要求転送装置。
【請求項４】
前記要求群は、複数のメモリのいずれかを前記要求先として指定された複数のメモリアクセスリクエストを含む一群の命令である
ことを特徴とする請求項１乃至３のいずれか１項に記載の要求転送装置。
【請求項５】
複数の要求元のそれぞれから、複数の要求先のいずれかが指定された複数の要求を含む要求群を受け付け、
前記受け付けた要求群に含まれる各要求に対して、当該要求群の受付順に対応する所定の順序に従った識別情報を付加し、
前記所定の順序に従った識別情報が対応付けられた複数の領域に予め分割され、前記複数の要求先に対応する複数のバッファのうち、各要求に指定された要求先に対応するバッファ内で前記付加された識別情報に対応付けられた領域へ各要求を格納し、
前記複数のバッファのそれぞれから、前記所定の順序に従った前記識別情報に対応付けられた領域単位に、格納された要求を読み出し、
前記読み出した要求を、当該要求に指定された要求先へ出力する、
要求転送方法。
【請求項６】
前記受け付けた要求群が先行する要求群との順序保証が不要である場合、当該受け付けた要求群に含まれる各要求に対して、前記先行する要求群に対応する前記識別情報を付加することを特徴とする請求項５に記載の要求転送方法。
【請求項７】
前記識別情報を付加した要求数を計測し、
前記複数のバッファの全てにおいて、同一の識別情報に対応付けられた各領域において、前記計測された要求数分の要求の読み出しが完了した場合に、当該識別情報を、新たに受け付けた要求群を識別するための識別情報として用いる
ことを特徴とする請求項５又は６に記載の要求転送方法。
【請求項８】
前記要求群は、複数のメモリのいずれかを前記要求先として指定された複数のメモリアクセスリクエストを含む一群の命令である
ことを特徴とする請求項５乃至７のいずれか１項に記載の要求転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、要求転送装置及び要求転送方法に関し、特に、多入力対多出力の機構を備え、複数の要求群の順序保証をするための要求転送装置及び要求転送方法に関する。
【背景技術】
【０００２】
複数の要求元から、複数の要求先への複数の要求を含む要求群を複数受け付けて、各要求先へ振り分けを行う際には、多入力対多出力の機構を備えるクロスバ等の装置が用いられる。そして、当該要求群には、各要求先へ到達する際に順序保証が必要となる場合がある。
【０００３】
例えば、多入力対多出力の機構を備える装置として、特許文献１には、メモリアクセス順序を保証するための処理による処理の中断を減少するためのデータ転送装置に関する技術が開示されている。特許文献１では、データ転送装置から１６台のインタリーブ構成のメモリ装置へのリクエスト送出は、データ転送装置内多段クロスバネットワークを介して行なわれる。コマンド生成部は、１つのベクトル転送命令をアドレスの異なる複数の命令に分解して、アドレス生成部に送出する。この際、分解されたリクエスト同士で同一のメモリアドレスに対するアクセスが存在するか判別する。同一アドレスに対するアクセスが存在する場合、アドレス生成部に対し送出する分解後の命令の間に、ＳＹＮＣ命令を挿入する。アドレス生成部は、コマンド生成部からＳＹＮＣ命令が発行された時、各クロスバのステディをチェックし、メモリからのリプライを待つことなく、以前に発行したリクエストがクロスバ上に残っていないことを確認し、ＳＹＮＣ命令に続くリクエストをクロスバに送出する。
【０００４】
また、多入力対多出力の機構を備える装置としては、ネットワークスイッチ等が挙げられる。例えば、特許文献２には、マルチメディア通信処理に求められる遅延時間とバッファ消費量の最小化を行い効率のよいＡＴＭ通信制御を実現するＡＴＭ通信制御方法並びに送信及び受信装置に関する技術が開示されている。特許文献２に開示されるＡＴＭ通信制御方法は、ＡＴＭ通信網における送信装置と受信装置の間のＡＴＭセルの送受信方法であって、送信装置と受信装置の間に複数のＶＣ（バーチャルチャネル）を設定し、送信装置は送信すべきセルに複数のＶＣの数と同数の優先度を予め定めたパターンで繰り返す順序に従って付与し、各優先度を付与された各セルを優先度に対応づけられた複数のＶＣの内の対応するＶＣに送信し、併せて送信セルへの優先度付与順序のパターンを受信装置に通知し、受信装置は送信セルへの優先度付与順序のパターンに基づいて複数のＶＣをポーリングする順序を規定するＶＣ出口ポーリング順序を決定し、ＶＣ出口ポーリング順序に従ってＶＣ出口ポーリングを行って、送信装置より送信されたセルを優先度に応じて選択的に受信する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−１７５６３４号公報
【特許文献２】特開平１０−３０８７４０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述した特許文献１では、クロスバ等を通過する命令間で出力ポートにおける到着順序を保証するために、先に入力された命令の全ての要素が出力し終わるまで、後に入力された命令の出力を待機させる制御（後述するホールドオール制御）を必要としていた。しかしながら、特許文献１では、このホールド制御が、クロスバの利用効率を著しく低下させるという問題点があった。尚、特許文献２においても同様の問題点が発生する。
【０００７】
本発明は、このような問題点を解決するためになされたものであり、スループットを維持しつつ、命令間の順序保証を行うための要求転送装置及び要求転送方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の第１の態様にかかる要求転送装置は、複数の要求先に対応する複数のバッファと、複数の要求元のそれぞれから、前記複数の要求先のいずれかが指定された複数の要求を含む要求群を受け付けて、当該要求群に含まれる各要求を、当該要求に指定された要求先に対応する前記複数のバッファへ格納するバッファ割当部と、前記複数のバッファに格納された各要求を読み出して、各要求先へ出力する要求出力部と、を備え、前記複数のバッファのそれぞれは、前記要求群を識別するための識別情報を対応付けた複数の領域に予め分割され、前記バッファ割当部は、前記受け付けた要求群に含まれる各要求に対して、当該要求群に対応する前記識別情報を付加し、各要求に指定された要求先に対応する前記バッファ内で前記付加された識別情報に対応付けられた領域へ各要求を格納し、前記要求出力部は、前記識別情報に対応付けられた領域単位に、前記複数のバッファのそれぞれに格納された各要求を読み出す。
【０００９】
本発明の第２の態様にかかる要求転送方法は、複数の要求元のそれぞれから、複数の要求先のいずれかが指定された複数の要求を含む要求群を受け付け、前記受け付けた要求群に含まれる各要求に対して、当該要求群を識別するための識別情報を付加し、前記識別情報を対応付けた複数の領域に予め分割され、前記複数の要求先に対応する複数のバッファのうち、各要求に指定された要求先に対応するバッファ内で前記付加された識別情報に対応付けられた領域へ各要求を格納し、前記複数のバッファのそれぞれから、前記識別情報に対応付けられた領域単位に、格納された要求を読み出し、前記読み出した要求を、当該要求に指定された要求先へ出力する。
【発明の効果】
【００１０】
本発明により、スループットを維持しつつ、命令間の順序保証を行うための要求転送装置及び要求転送方法を提供することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施の形態１にかかる要求転送装置の構成を示すブロック図である。
【図２】本発明の実施の形態１にかかる要求転送方法の処理の流れを示すフローチャートである。
【図３】本発明の実施の形態２にかかるクロスバ制御装置の概念を説明するための図である。
【図４】本発明の実施の形態２にかかるクロスバの出力タイミングの例を示す図である。
【図５】本発明の実施の形態２にかかるクロスバ制御装置の構成を示すブロック図である。
【図６】本発明の実施の形態２にかかるＶＮバッファの概念を説明するための図である。
【図７】本発明の実施の形態２にかかるリクエスト転送処理の流れを説明するためのフローチャートである。
【図８】本発明の実施の形態２にかかる１命令毎に１つのＶＮ番号の割当を行なっている状態を説明するための図である。
【図９】本発明の実施の形態３にかかるクロスバ制御方式を説明するための図である。
【図１０】関連技術にかかるクロスバを含むクロスバ制御装置の構成を示すブロック図である。
【図１１】関連技術にかかるＦＩＦＯのキューイング状態の例を示す図である。
【図１２】同一ライン内の要素の行き先が別ポートである場合におけるクロスバの出力タイミングの例を示す図である。
【図１３】同一ライン内の要素の行き先が同一ポートである場合におけるクロスバの出力タイミングの例を示す図である。
【図１４】同一ライン内の要素の行き先が別ポートである場合（２命令連続）におけるクロスバの出力タイミングの例を示す図である。
【図１５】同一ライン内の要素の行き先が同一ポートである場合（２命令連続）におけるクロスバの出力タイミングの例を示す図である。
【図１６】同一ライン内の要素の行き先が同一ポートである場合（２命令連続）において、到着順序の逆転現象が発生した場合のクロスバの出力タイミングの例を示す図である。
【図１７】同一ライン内の要素の行き先が同一ポートである場合（２命令連続）において、到着順序の逆転現象が発生した際に、ホールドオール制御を行った場合のクロスバの出力タイミングの例を示す図である。
【発明を実施するための形態】
【００１２】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略する。
【００１３】
まず、上述した問題点の発生について、図１０乃至図１７を用いて説明する。図１０は、関連技術にかかる一般的なクロスバを含むクロスバ制御装置９０の構成を示すブロック図である。
【００１４】
クロスバ制御装置９０は、リクエスタ９１と、調停制御部９２と、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）９３０１、９３０２、９３０３、・・・、９３１５、９３１６と、クロスバ９４と、メモリポート９５０１、９５０２、９５０３、・・・、９５１５、９３１６とを備える。リクエスタ９１は、命令を発行するリクエスタである。調停制御部９２は、クロスバ９４の調停を行なう調停制御部である。ＦＩＦＯ９３０１乃至９３１６は、リクエストが蓄えられるＦＩＦＯ方式のバッファであり、リクエスタ９１から発行されたリクエストが順次、蓄えられる。ＦＩＦＯ９３０１乃至９３１６に格納されたリクエストのうち、各ＦＩＦＯにおいて最初に格納されたリクエストが調停制御部９２による調停の対象となる。クロスバ９４は、実際にリクエストが通過するクロスバ本体である。図１０では、クロスバ９４は、入力ポートが１６、出力ポートが１６である１６ｘ１６のクロスバを示している。メモリポート９５０１乃至９３１６は、出力先である。図１０では、メモリポート９５０１乃至９３１６は、アクセス先のメモリポートを示している。このような構成のクロスバ制御装置９０は、１つのロードストア命令で、複数の要素のメモリアクセスを実施するベクトルアーキテクチャで見られる構成でもある。
【００１５】
図１１は、関連技術にかかるＦＩＦＯ（キュー）のキューイング状態の例を示す図である。ＦＩＦＯ９３０１乃至９３１６、すなわち、キューは、クロスバ９４の入力ポートＰｉ０、Ｐｉ１、・・・、Ｐｉ１５のそれぞれに対応して存在する。図１１では、入力ポートＰｉ０に対応するキューであるＦＩＦＯ９３０１には、Ｅｎｔｒｙ０〜１５に要素ｅ０００、ｅ０１６、・・・、ｅ２４０の順序でキューイングされていることを示す。同様に、入力ポートＰｉ１５に対応するキューであるＦＩＦＯ９３１６には、Ｅｎｔｒｙ０〜１５に要素ｅ０１５、ｅ０３１、・・・、ｅ２５５の順序でキューイングされていることを示す。
【００１６】
この状態のキューからリクエストがクロスバ９４を通過する様子を図１２及び図１３の二例を図示する。図１２に一例目を示す。図１２は、同一ライン内の要素の行き先が別ポートである場合におけるクロスバの出力タイミングの例を示す図である。ここで、同一ラインとは、調停制御部９２が調停する際に、同時に調停対象となる要素が１６であることを示す。例えば、入力ポートＰｉ０乃至Ｐｉ１５における同一ラインとは、図１１のＥｎｔｒｙ０の要素ｅ０００、ｅ００１、・・・、ｅ０１５を指す。そして、同一ライン内の要素の行き先が別ポートである場合とは、入力ポートＰｉ０乃至Ｐｉ１５における同一ラインの要素ｅ０００、ｅ００１、・・・、ｅ０１５のそれぞれの行き先である出力ポートが別ポートである場合を示す。このときには、クロスバ９４は、出力ポートが競合しないため、全１６要素が同じタイミングで通過する。よって、図１２中の全２５６要素を、出力ポートＰｏ０〜Ｐｏ１５の１６ポートに時刻Ｔ０からＴ１５の１６サイクルで転送させることができる。
【００１７】
図１３に二例目を示す。図１３は、同一ライン内の要素の行き先が同一ポートである場合におけるクロスバの出力タイミングの例を示す図である。すなわち、入力ポートＰｉ０乃至Ｐｉ１５における同一ラインの要素ｅ０００、ｅ００１、・・・、ｅ０１５の全ての行き先が同じ出力ポートである場合を示す。
【００１８】
図１３では、１ライン目（ｅ０００、・・・、ｅ０１５）の行き先が出力ポートＰｏ０、２ライン目（ｅ０１６、・・・、ｅ０３１）の行き先が出力ポートＰｏ１、・・・、以下同様に繰り返して、１６ライン目（ｅ２４０、・・・、ｅ２５５）の行き先が出力ポートＰｏ１５である場合を示している。この場合、１ライン目の全１６要素が、全て同じ行き先であるため競合が発生し、競合に負けたポートは待たされることになる。競合が発生したため、全２５６要素のクロスバの通過には、時刻Ｔ０からＴ３０の３１サイクルを要している。
【００１９】
次に、図１４乃至図１７を用いて命令が連続したケースにおける問題点を説明する。ここでは、ｅ０００〜ｅ２５５までの２５６要素を含む命令が２つ連続して入力される。以下では、先に入力された命令を先の命令、当該先の命令の後に入力された命令を後の命令と呼ぶ。そして、先の命令及び後の命令についてクロスバ９４を利用して転送する場合を対象とする。
【００２０】
図１４は、同一ライン内の要素の行き先が別ポートである場合（先の命令Ｃ１及び後の命令Ｃ２の２命令が連続して入力された場合）におけるクロスバ９４の出力タイミングの例を示す図である。尚、説明の便宜上、先の命令Ｃ１は、要素ｅ０００、ｅ０１６、・・・、ｅ２４０の行き先を出力ポートＰｏ０、要素ｅ００１、ｅ０１７、・・・、ｅ２４１の行き先を出力ポートＰｏ１、・・・、要素ｅ０１５、ｅ０３１、・・・、ｅ２５５の行き先を出力ポートＰｏ１５とする。また、後の命令Ｃ２は、要素ｅ０００、ｅ０１６、・・・、ｅ２４０の行き先を出力ポートＰｏ１５、要素ｅ００１、ｅ０１７、・・・、ｅ２４１の行き先を出力ポートＰｏ０、・・・、要素ｅ０１５、ｅ０３１、・・・、ｅ２５５の行き先を出力ポートＰｏ１４とする。図１４では、同一ライン内の全ての要素の行き先が別であるため、先の命令Ｃ１及び後の命令Ｃ２共に競合が発生することなくクロスバ９４を通過するので、性能低下は発生していない。
【００２１】
図１５は、同一ライン内の要素の行き先が同一ポートである場合（先の命令Ｃ１ａ及び後の命令Ｃ２ａの２命令が連続して入力された場合）におけるクロスバの出力タイミングの例を示す図である。尚、説明の便宜上、先の命令Ｃ１ａは、要素ｅ０００、ｅ００１、・・・、ｅ０１５の行き先を出力ポートＰｏ０、要素ｅ０１６、ｅ０１７、・・・、ｅ０３１の行き先を出力ポートＰｏ１、・・・、要素ｅ２４０、ｅ２４１、・・・、ｅ２５５の行き先を出力ポートＰｏ１５とする。また、後の命令Ｃ２は、要素ｅ０００、ｅ００１、・・・、ｅ０１５の行き先を出力ポートＰｏ１５、要素ｅ０１６、ｅ０１７、・・・、ｅ０３１の行き先を出力ポートＰｏ０、・・・、要素ｅ２４０、ｅ２４１、・・・、ｅ２５５の行き先を出力ポートＰｏ１４とする。
【００２２】
図１５では、同一ライン内で行き先が同じであるため、先頭ラインで競合が発生する。具体的には、Ｅｎｔｒｙ０の要素ｅ０００、ｅ００１、・・・、ｅ０１５の全ての行き先が、出力ポートＰｏ０であるため、調停制御部９２による調停の結果、時刻Ｔ０においては、例えば、要素ｅ０００のみが出力ポートＰｏ０に出力される。そして、時刻Ｔ１において、Ｅｎｔｒｙ０の要素ｅ００１、・・・、ｅ０１５と、Ｅｎｔｒｙ１の要素ｅ０１６、ｅ０１７、・・・、ｅ０３１とが調停される。その結果、例えば、要素ｅ００１が出力ポートＰｏ０に出力され、要素ｅ０１６が出力ポートＰｏ１に出力される。以下、同様に、時刻Ｔ１５まで調停及び出力が行われる。
【００２３】
また、時刻Ｔ１６では、先の命令Ｃ１ａのＥｎｔｒｙ１〜１５の未出力の要素についての調停と、後の命令Ｃ２ａのＥｎｔｒｙ０の要素ｅ０００、ｅ００１、・・・、ｅ０１５についての調停が行われる。その結果、例えば、後の命令Ｃ２ａの要素ｅ０１６が出力ポートＰｏ０に出力され、先の命令Ｃ１ａの要素ｅ０３１、ｅ０４６、・・・、ｅ２４１がそれぞれ出力ポートＰｏ１、Ｐｏ２、・・・、Ｐｏ１５に出力される。以降、同様に、調停及び出力され、時刻Ｔ３０において、先の命令Ｃ１ａの全ての２５６要素について出力される。
【００２４】
つまり、図１４の先の命令Ｃ１と比べて、図１５の先の命令Ｃ１ａには、１５サイクルが余分に要することとなる。そして、先の命令Ｃ１ａと後の命令Ｃ２ａとの二命令を合わせた合計では、４７サイクルを要することとなる。尚、図１５の制御例では、説明の便宜上、先の命令Ｃ１ａと後の命令Ｃ２ａの間に隙間は空いていないものとする。
【００２５】
但し、図１５に示すような制御方式を採用した場合、例えば、入力ポートＰｉ１５に何らかの遅延があった場合には、先の命令Ｃ１ａの要素ｅ２５５のクロスバへの発行が遅れ、反対に入力ポートＰｉ０に位置している後の命令Ｃ２ａの要素ｅ０００の発行が先に行なわれることがある。このとき、先の命令Ｃ１ａの要素ｅ２５５と後の命令Ｃ２ａの要素ｅ０００の到着順序の逆転現象が発生する場合がある。
【００２６】
図１６は、同一ライン内の要素の行き先が同一ポートである場合（先の命令Ｃ１ｂ及び後の命令Ｃ２ｂの２命令が連続して入力された場合）において、到着順序の逆転現象が発生した場合のクロスバの出力タイミングの例を示す図である。図１６では、先の命令Ｃ１ｂ及び後の命令Ｃ２ｂの要素及び各要素の行き先は、図１５と同様であるものとする。図１６では、先の命令Ｃ１ｂの要素ｅ２５５と後の命令Ｃ２ｂの要素ｅ０００の到着順序の逆転現象が発生していることを示し、それ以外の要素は、図１５と同じタイミングで出力されることを示す。
【００２７】
ここで、先の命令と後の命令の間で要素の到着順序の保証が必要なければ、図１５の制御方式で問題はない。しかし、先の命令と後の命令の間で要素の到着順序の保証が必要な場合、すなわち、先の命令の要素が、必ず後の命令の要素よりも先に出力ポートに到着しなければならない場合は問題となる。
【００２８】
この問題を回避するための手段の一例が図１７に示す制御方法である。この制御方法をホールドオール制御と定義する。図１７は、同一ライン内の要素の行き先が同一ポートである場合（先の命令Ｃ１ｃ及び後の命令Ｃ２ｃの２命令が連続して入力された場合）において、到着順序の逆転現象が発生した際に、ホールドオール制御を行った場合のクロスバの出力タイミングの例を示す図である。
【００２９】
ホールドオール制御では、先の命令Ｃ１ｃの全ての要素がクロスバ９４を通過した後（Ｔ３０）に、後の命令Ｃ２ｃの先頭要素のクロスバ９４への転送が開始される（Ｔ３１）。先の命令Ｃ１ｃの全要素の転送が行なわれてから、後の命令Ｃ２ｃの要素の転送が開始されるため、命令間で要素の到着順の逆転現象は発生しなくなり、命令間での順序保証が保たれることになる。但し、ホールドオール制御の場合、後の命令Ｃ２ｃは先の命令Ｃ１ｃの転送を待つため、先の命令Ｃ１ｃと後の命令Ｃ２ｃの間で１５サイクルのペナルティが発生し、順序保証をするために性能を大きく落としている。そのため、クロスバ９４を流れる命令間で、到着順序の保証が必要な場合には、依存関係のある後続の命令を一時止める必要があったため、クロスバ９４に空きができ、スループットをフルに出せない問題があった。
【００３０】
従って、性能維持のためにホールドオール制御を行わない状態で到着順序を保証する方式が必要である。以下の実施形態では、スループットを維持しつつ、命令間の順序保証を行うための要求転送装置及び要求転送方法について説明する。
【００３１】
＜発明の実施の形態１＞
図１は、本発明の実施の形態１にかかる要求転送装置２０の構成を示すブロック図である。図１では、要求転送装置２０は、複数の要求元１１、１２、・・・、１ｋ（ｋは、２以上の整数。）のそれぞれから要求群１１０等を受け付ける。また、要求転送装置２０は、受け付けた要求群１１０等に含まれる各要求に指定された要求先３１、３２、・・・、３ｍ（ｍは、２以上の整数。）へ出力する。
【００３２】
ここで、要求群１１０には、複数の要求１１１、１１２、・・・、１１ｎ（ｎは、２以上の整数。）が含まれる。要求１１１〜１１ｎは、要求先３１〜３ｍのいずれかへ任意の処理を要求するための命令の要素であるか、データを転送するためのパケットデータ等である。そのため、要求１１１〜１１ｎは、それぞれ行き先として要求先３１〜３ｍのいずれかが指定されている。そして、要求群１１０に含まれる要求１１１〜１１ｎのそれぞれは、行き先が異なる場合や全てが同じである場合があり得るものとする。
【００３３】
また、要求元１１〜１ｋは、要求転送装置２０を介して要求先３１〜３ｍへ要求群１１０等を送信するものである。要求元１１〜１ｋは、例えば、コンピュータが備えるプロセッサであるか、ネットワークにおけるサーバやクライアント等である。また、要求先３１〜３ｍは、要求転送装置２０から自己が行き先として指定された要求を受信し、所定の処理を行う。要求先３１〜３ｍは、例えば、コンピュータが備えるメモリであるか、ネットワークにおけるサーバやクライアント等である。
【００３４】
要求転送装置２０は、バッファ割当部２１と、バッファ２２１、２２２、・・・、２２ｍと、要求出力部２３とを備える。バッファ２２１〜２２ｍのそれぞれは、複数の要求先である要求先３１〜３ｍに対応し、バッファ割当部２１が受け付けた要求を格納するバッファである。そして、バッファ２２１〜２２ｍのそれぞれは、要求群１１０等を識別するための識別情報を対応付けた複数の領域に予め分割されている。
【００３５】
例えば、バッファ２２１は、領域２２１１、２２１２、・・・、２２１ｋに分割されている。そして、領域２２１１には、要求２２１１１、２２１１２、・・・、２２１１ｎを格納するための領域が確保されている。同様に、領域２２１２には、要求２２１２１、２２１２２、・・・、２２１２ｎを格納するための領域が確保されており、領域２２１ｋには、要求２２１ｋ１、２２１ｋ２、・・・、２２１ｋｎを格納するための領域が確保されている。
【００３６】
また、バッファ２２２は、領域２２２１、２２２２、・・・、２２２ｋに分割されている。同様に、バッファ２２ｍは、領域２２ｍ１、２２ｍ２、・・・、２２ｍｋに分割されている。尚、本発明の実施の形態１においては、要求群１１０に含まれる要求数ｎと、各バッファ内に分割された各領域に格納可能な要求数ｎとが、同一と限定するものではない。同様に、本発明の実施の形態１においては、要求元１１〜１ｋの要求元数ｋと、各バッファ内に分割された領域数ｋとが、同一と限定するものではない。
【００３７】
バッファ割当部２１は、複数の要求元のそれぞれから、複数の要求先のいずれかが指定された複数の要求を含む要求群を受け付けて、当該要求群に含まれる各要求を、当該要求に指定された要求先に対応する複数のバッファ２２１〜２２ｍへ格納する。その際、バッファ割当部２１は、受け付けた要求群１１０に含まれる各要求に対して、当該要求群１１０に対応する識別情報を付加し、各要求に指定された要求先に対応するバッファ２２１〜２２ｍ内で付加された識別情報に対応付けられた領域へ各要求を格納する。ここで、バッファ割当部２１は、複数の要求元１１〜１ｋのそれぞれに対応するｋ個の入力バッファと、当該ｋ個の入力バッファのそれぞれからバッファ２２１〜２２ｍへのｋ×ｍ種類の入出力の機構備えるクロスバ等の装置とを備えていてもよい。この場合、バッファ割当部２１は、受け付けた要求群に含まれる全ての要求について同一の識別情報を付加し、その後、当該要求群の要求元に対応する入力バッファへ各要求を格納する。そして、バッファ割当部２１は、クロスバ等の装置により、各入力バッファに格納された要求について、指定された要求先に応じてバッファ２２１〜２２ｍのいずれかへ出力する。
【００３８】
要求出力部２３は、バッファ２２１〜２２ｍに格納された各要求を読み出して、各要求先へ出力する。そして、要求出力部２３は、識別情報に対応付けられた領域単位に、バッファ２２１〜２２ｍのそれぞれに格納された各要求を読み出す。つまり、要求出力部２３は、バッファ２２１〜２２ｍに格納された各要求について、格納順に関わらず、領域単位で読み出しを行う。
【００３９】
図２は、本発明の実施の形態１にかかる要求転送方法の処理の流れを示すフローチャートである。まず、バッファ割当部２１は、要求群を受け付ける（Ｓ１１）。すなわち、バッファ割当部２１は、複数の要求元のそれぞれから、複数の要求先のいずれかが指定された複数の要求を含む要求群を受け付ける。
【００４０】
次に、バッファ割当部２１は、要求群に含まれる各要求に当該要求群を識別する識別情報を付加する（Ｓ１２）。そして、バッファ割当部２１は、要求先に対応するバッファ内の識別情報に対応する領域へ各要求を格納する（Ｓ１３）。
【００４１】
例えば、バッファ割当部２１は、要求群１１０に、領域２２１１、２２２１、・・・、２２ｍ１に対応する識別情報を付加したものとする。そして、要求１１１の行き先が要求先３１、要求１１２の行き先が要求先３２、・・・、要求１１ｎの行き先が要求先３ｍであるものとする。この場合、バッファ割当部２１は、要求１１１をバッファ２２１内の領域２２１１に格納する。同様に、バッファ割当部２１は、要求１１２をバッファ２２２内の領域２２２１に格納し、要求１１ｎをバッファ２２ｍ内の領域２２ｍ１に格納する。
【００４２】
続いて、要求出力部２３は、識別情報に対応付けられた領域単位にバッファから要求を読み出す（Ｓ１４）。そして、要求出力部２３は、読み出した要求を、当該要求に指定された要求先に出力する（Ｓ１５）。例えば、要求出力部２３は、バッファ２２１内の領域２２２１、２２２２、・・・、２２２ｋの順序で格納された要求を読み出し、要求先３１へ出力する。
【００４３】
このように、本発明の実施の形態１では、バッファ２２１〜２２ｍが識別情報単位で領域に分割されており、バッファ割当部２１は、各要求を識別情報に基づいて各領域に格納する。そのため、バッファ割当部２１によるバッファの格納順序が要求群の受け付け順と異なったとしても、要求出力部２３が領域単位で読み出すことで、スループットを維持しつつ、命令間の順序保証を行うことができる。
【００４４】
＜発明の実施の形態２＞
図３は、本発明の実施の形態２にかかるクロスバ制御装置３０の概念を説明するための図である。クロスバ制御装置３０は、ＦＩＦＯ３１００、３１０１、・・・、３１１４、３１１５と、入力ポート３２００、３２０１、・・・、３２１４、３２１５と、クロスバ３３と、出力ポート３４００、・・・、３４１５と、ＶＮバッファ３５００、・・・、３５１５と、メモリポート３６００、・・・、３６１５とを備える。
【００４５】
ＦＩＦＯ３１００〜３１１５は、クロスバ３３の入力ポート側に位置するＦＩＦＯキューである。ＦＩＦＯ３１００〜３１１５には、外部のプロセッサ等から受け付けた複数の要素を含む命令が格納されている。例えば、ＦＩＦＯ３１００には、命令０の要素ｅ０００、ｅ０１６、・・・、ｅ２４０、命令１の要素ｅ０００、ｅ０１６、・・・、ｅ２４０、・・・、命令３の要素ｅ０００、ｅ０１６、・・・、ｅ２４０の順で格納されていることを示す。ＦＩＦＯ３１００〜３１１５のその他については、図１０に示したＦＩＦＯ９３０１〜９３１６と同等の構成である。
【００４６】
クロスバ３３は、入力ポート３２００〜３２１５を介してＦＩＦＯ３１００〜３１１５に格納された各命令の要素を、当該要素に指定された宛先であるメモリポートに対応する出力ポート３４００乃至３４１５のいずれかへ出力する。
【００４７】
ＶＮバッファ３５００〜３５１５は、出力ポート３４００〜３４１５のそれぞれに対応するＶｉｒｔｕａｌ  Ｎｅｔｗｏｒｋ用Ｂｕｆｆｅｒである。ＶＮバッファ３５００〜３５１５のそれぞれは、命令を識別する識別番号に対応する領域に予め分割されている。例えば、ＶＮバッファ３５００は、命令０に対応するＶＮ０用バッファ３５０００、命令１に対応するＶＮ１用バッファ３５００１、・・・、命令３に対応するＶＮ３用バッファ３５００３に分割されている。そして、各領域には、複数の命令の要素を格納することが可能である。例えば、ＶＮ０用バッファ３５０００には、命令０の要素ｅ０００、ｅ００１、・・・、ｅ０１５、ＶＮ１用バッファ３５００１には、命令１の要素ｅ０００、ｅ００１、・・・、ｅ０１５、・・・、ＶＮ３用バッファ３５００３には、命令３の要素ｅ０００、ｅ００１、・・・、ｅ０１５がそれぞれ格納される。
【００４８】
同様に、ＶＮバッファ３５１５は、命令０に対応するＶＮ０用バッファ３５１５０、・・・、命令３に対応するＶＮ３用バッファ３５１５３に分割されている。ＶＮ０用バッファ３５１５０には、命令０の要素ｅ２４０、ｅ２４１、・・・、ｅ２５５、・・・、ＶＮ３用バッファ３５１５３には、命令３の要素ｅ２４０、ｅ２４１、・・・、ｅ２５５がそれぞれ格納される。
【００４９】
メモリポート３６００〜３６１５は、メモリ（不図示）へのアクセス要求を受け付けるポートである。メモリポート３６００〜３６１５は、上述したように、出力ポート３４００〜３４１５のそれぞれに対応する。
【００５０】
本発明の実施の形態２は、Ｖｉｒｔｕａｌ  Ｎｅｔｗｏｒｋ方式によりホールドオール制御を削除することで、クロスバの転送性能を落とすことなく、命令の到着順序の保証を可能にするものである。本発明の実施の形態２の概要を以下に説明する。
【００５１】
（１）命令毎にＶｉｒｔｕａｌ  Ｎｅｔｗｏｒｋ番号を割り当てる。入力ポート３２００〜３２１５の上にあるＦＩＦＯ３１００〜３１１５にキューイングされる前に、命令毎に、命令を識別する識別情報であるＶｉｒｔｕａｌ  Ｎｅｔｗｏｒｋ番号（以下、「ＶＮ番号」という。）を割り当てる。
【００５２】
（２）順序保証が必要な命令列でもホールドをさせることなくクロスバを通過させる。例えば、クロスバ３３を通過する命令１と命令２の間でホールドオール制御を行なわないため、クロスバの転送性能を維持している。
【００５３】
（３）命令間の順序保証（シリアライズ）は、クロスバの出力ポートにあるＶｉｒｔｕａｌ  Ｎｅｔｗｏｒｋ毎に設けられたＶＮバッファ３５００〜３５１５からの読み出し時に行なう。ＶＮバッファ３５００〜３５１５がＶｉｒｔｕａｌ  Ｎｅｔｗｏｒｋ用Ｂｕｆｆｅｒである。クロスバ３３からリクエストが出てくると、出力ポート毎に設けられたＶＮバッファにリクエストが書き込まれる。ＶＮバッファ内部は、ＶＮ番号毎にエリアが区切られており、当該リクエストは自身のＶＮ番号と同じＶＮ番号のエリアに書き込まれる。ＶＮバッファからの読み出し処理時には、古いＶＮ番号のエリアから行なう。すなわち、古いＶＮ番号は、先に発行された命令に割り当てられているため、読み出しを先頭ＶＮ番号バッファから行なうことで、命令間での順序を保証することができる。
【００５４】
図５は、本発明の実施の形態２にかかるクロスバ制御装置５０の構成を示すブロック図である。クロスバ制御装置５０は、リクエスタ５１と、ＶＮ割当制御部５２と、調停制御部５３と、ＦＩＦＯ５４０１、５４０２、５４０３、・・・、５４１５、５４１６と、クロスバ５５と、ＶＮバッファ５６０１、５６０２、５６０３、・・・、５６１５、５６１６と、ＶＮ解放制御部５７と、メモリポート５８０１、５８０２、５８０３、・・・、５８１５、５８１６とを備える。
【００５５】
リクエスタ５１と、調停制御部５３と、ＦＩＦＯ５４０１〜５４１６と、クロスバ５５と、メモリポート５８０１〜５８１６とは、図１０のリクエスタ９１と、調停制御部９２と、ＦＩＦＯ９３０１〜９３１６と、クロスバ９４と、メモリポート９５０１〜９５１６と同等である。
【００５６】
リクエスタ５１は、リクエストを生成する。図５で想定しているリクエスタ５１は、１つの命令から、要素毎に行き先の異なる複数の要素のリクエストを発行する機能を有しているものとする。例えば、リクエスタ５１は、１命令につき、要素ｅ０００〜ｅ２５５までの256の要素を発行している。つまり、リクエスタ５１が発行する命令は、複数のメモリのいずれかを要求先として指定された複数のメモリアクセスリクエストを含む一群の命令であり、要求群であるといえる。
【００５７】
調停制御部５３は、クロスバ５５に対する調停の制御を行なう。例えば、ある特定の出力ポートに対して、同タイミングで複数の入力ポートからの要求があった場合には、調停制御部５３は、１つのリクエストのみを通し、残りのリクエストはホールドさせる。
【００５８】
ＦＩＦＯ５４０１〜５４１６は、クロスバ５５の入力ポート側に存在するキューである。調停制御部５３による調停制御で競合負けした場合には、後続のリクエストは順次ＦＩＦＯで待たされることになる。
【００５９】
クロスバ５５は、複数の入力ポートと複数の出力ポートを接続する結合網である。図５では、入力ポートを１６、出力ポートを１６と仮定して記載している。すなわち、クロスバ５５は、１６ｘ１６の構成になっている。
【００６０】
メモリポート５８０１〜５８１６は、リクエストが最終的に到達するポートである。特に、メモリへのアクセスは、データのリードライト順を考慮しなければならないため、本発明の実施の形態２にかかる出力先ポートの一例として示している。
【００６１】
また、本発明の実施の形態２にかかるクロスバ制御装置５０は、図１０のクロスバ制御装置９０と比べて、新たにＶＮ割当制御部５２と、ＶＮバッファ５６０１〜５６１６と、ＶＮ解放制御部５７とが追加されたものである。そのため、以下では、これらの構成要素について説明する。
【００６２】
ＶＮ割当制御部５２は、リクエスタ５１から発行されたリクエストに対して、ＶＮ番号の割当を行なうバッファ割当部である。ここで、ＶＮ番号とは、当該リクエストが属する命令を識別するための識別情報である。つまり、同一の命令に属するリクエストについては、同一のＶＮ番号が割当られる。このとき、ＶＮ割当制御部５２は、ＶＮ番号当たりに割り当てたリクエスト数をＶＮバッファ５６０１〜５６１６へ通知する。つまり、ＶＮ割当制御部５２は、出力ポートごとに存在するＶＮバッファ５６０１〜５６１６に対して、いくつのリクエストが当該ＶＮバッファ５６０１〜５６１６に到着するかを、予め通知しておく機能も有する。尚、ＶＮ割当制御部５２は、識別情報当たりに付加した要求数をＶＮ解放制御部５７へ通知してもよい。
【００６３】
また、ＶＮ割当制御部５２がリクエストにＶＮ番号を割り当てる際、未割り当てのＶＮ番号がない場合には、リクエストは待たされることになる。つまり、ＶＮ割当制御部５２は、予め割当可能なＶＮ番号の上限値に達した場合、後続の命令に属するリクエストへのＶＮ番号の割当を保留する。そして、ＶＮ割当制御部５２は、割当済みのＶＮ番号のうち割当可能となったＶＮ番号から、当該保留したリクエストに対して割当を再開する。
【００６４】
ＶＮバッファ５６０１〜５６１６は、命令間の順序保証（シリアライズ）を行なう機能を有している出力ポート毎に設けられたバッファである。クロスバ５５からリクエストが出力されると、出力ポート毎に設けられたＶＮバッファ５６０１〜５６１６にリクエストが書き込まれる。ＶＮバッファ５６０１〜５６１６内部は、ＶＮ番号毎にエリアが区切られており、当該リクエストは自身のＶＮ番号と同じＶＮ番号のエリアに書き込まれる。
【００６５】
ＶＮ解放制御部５７は、ＶＮバッファ５６０１〜５６１６のそれぞれからエリア単位にリクエストを読み出し、ＶＮバッファ５６０１〜５６１６に対応するメモリポート５８０１〜５８１６へ出力する要求出力部である。ＶＮ解放制御部５７は、ＶＮバッファ５６０１〜５６１６のそれぞれについて、ＶＮ割当制御部５２においてより先に割り当てられたＶＮ番号のエリア内のエントリから、リクエストの読み出しを行う。例えば、ＶＮ解放制御部５７は、ＶＮバッファ５６０１〜５６１６内のＶＮ番号の小さい順に読み出しを行う。すなわち、読み出しをリクエストの格納順ではなく、ＶＮ番号順で行なうことで、命令間の順序を保証する。
【００６６】
言い換えると、ＶＮ解放制御部５７は、任意のＶＮバッファにおける複数の領域のうち、ＶＮ割当制御部５２においてより先に割り当てられた識別情報に対応する領域から優先して要求を読み出す。これにより、エリアの上限に満たない場合、優先度の高い領域から読み出しを行なうため、順序保証を保ちつつ処理速度を向上させることができる。すなわち、優先度の高い領域に格納された全ての要求の読み出しが完了するまでは、例え、読み出しの優先度の低い領域について要求が格納されたとしても読み出しが開始されない。
【００６７】
また、ＶＮ解放制御部５７は、複数のバッファの全てにおける同一の識別情報に対応付けられた各領域に格納された全ての要求が読み出された場合に、つまり、各領域において、ＶＮ割当制御部５２から通知された要求数分の要求の読み出しが完了した場合に、当該識別情報をＶＮ割当制御部５２へ通知する。そして、ＶＮ割当制御部５２は、ＶＮ解放制御部５７から通知された識別情報を、新たに受け付けた要求群を識別するための識別情報として用いる。
【００６８】
図６は、本発明の実施の形態２にかかるＶＮバッファ６の概念を説明するための図である。ＶＮバッファ６本体自体は、例えば、通常のＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などで構成される。本発明の実施の形態２にかかるＶＮバッファ６は、さらに、補助機能として、ＶＮ番号ごとのエリアが予め定められている。図６では、ＶＮバッファ６は、領域６０、６１、６２、・・・、６ｋ−１、６ｋに分割されていることを示す。そして、領域６０には、要求領域６０１、６０２、・・・、６０ｎが確保されている。同様に、領域６１には、要求領域６１１、６１２、・・・、６１ｎ、領域６２には、要求領域６２１、６２２、・・・、６２ｎ、・・・、領域６ｋ−１には、要求領域６ｋ−１１、６ｋ−１２、・・・、６ｋ−１ｎ、領域６ｋには、要求領域６ｋ１、６ｋ２、・・・、６ｋｎがそれぞれ確保されている。また、図６では、各要求領域に"要求"と記載されているものには、ＶＮ割当制御部５２によりリクエストが格納済みであることを示し、"未"と記載されているものには、リクエストが未格納であることを示す。尚、リクエストが未格納である場合には、そもそも命令に含まれる要素数が領域内で確保された要素数未満である場合も含まれる。
【００６９】
ここで、リクエスタ５１から出力されたリクエストにはＶＮ番号が付与されているため、ＶＮバッファ６への書き込み時には当該ＶＮ番号のエリアが利用される。また、ＶＮ解放制御部５７によるＶＮバッファ６からの読み出し時には、命令ごとの順序を保証する。ＶＮバッファ６からの読み出し順序は、図６中の通りである。つまり、ＶＮ解放制御部５７は、あるＶＮ番号に対応する領域からの読み出しが完全に完了すると、ＶＮ番号＋１に対応する領域からの読み出しが行う。
【００７０】
例えば、ＶＮ解放制御部５７は、領域６０から要求領域６０１、６０２、・・・に格納されたリクエストをこの順序で読み出す。そして、要求領域６０ｎには未格納であるため、ＶＮ解放制御部５７は、次のＶＮ番号に対応する領域６１から要求領域６１１に格納されたリクエストを読み出す。そして、要求領域６１２、・・・、６１ｎには未格納であるため、ＶＮ解放制御部５７は、次のＶＮ番号に対応する領域６２から要求領域６２１、６２２、・・・、６２ｎに格納されたリクエストを読み出す。以後、ＶＮ解放制御部５７は、領域６ｋまで読み出しを完了した場合、領域６０からの読み出しを行う。
【００７１】
また、ＶＮ解放制御部５７は、ＶＮ番号の解放確認を行う。このとき、全てのＶＮバッファにおける当該ＶＮ番号に対応する領域から全てのリクエストの読み出しが完了していた場合、ＶＮ解放制御部５７は、ＶＮ割当制御部５２に対して当該ＶＮ番号が解放されたことを解放通知により通知する。
【００７２】
図７は、本発明の実施の形態２にかかるリクエスト転送処理の流れを説明するためのフローチャートである。まず、リクエスタ５１は、リクエストを発行する（Ｓ２１）。具体的には、リクエストごとに異なるメモリポートを宛先とし、複数のリクエストを要素とした命令を発行する。このとき、リクエスタ５１は、複数の命令を連続して発行する。
【００７３】
次に、ＶＮ割当制御部５２は、ＶＮ番号割当処理を行う（Ｓ２２）。そして、ＶＮ割当制御部５２は、ＶＮ番号の割当が完了したか否かを判定する（Ｓ２３）。ＶＮ番号は有限であるため、割当が可能なときと不可能なときがあるためである。ステップＳ２３において、割当が不可能と判定された場合、ステップＳ２２に戻り、ＶＮ解放制御部５７からＶＮ番号の解放通知を受信するまで、当該リクエストへのＶＮ番号の割当を保留する。
【００７４】
ステップＳ２３において、割当が可能と判定された場合、そのまま処理は次のステップＳ２４及びＳ３１へ進む。ＶＮ割当制御部５２は、ＶＮ番号へ割り当てたリクエスト数をカウントアップし、ＶＮバッファ５６０１〜５６１６へカウンタを通知する（Ｓ３１）。また、ＶＮ割当制御部５２は、ＦＩＦＯ５４０１〜５４１６へキューイングする（Ｓ２４）。
【００７５】
続いて、調停制御部５３は、ＦＩＦＯ５４０１〜５４１６の先頭に格納されたリクエストに対して、調停を行う（Ｓ２５）。そして、クロスバ５５は、調停されたリクエストを通過させて、当該リクエストに指定された行き先に対応する出力ポートへ出力する（Ｓ２６）。その後、クロスバ５５を通過したリクエストは、ＶＮバッファ５６０１〜５６１６に書き込まれる（Ｓ２７）。このとき、各リクエストは、自己に割り当てられたＶＮ番号に対応するエリア内に書き込まれる。
【００７６】
続いて、ＶＮ解放制御部５７は、ＶＮバッファ５６０１〜５６１６からリクエストの読み出しを行う（Ｓ２８）。このとき、ＶＮ解放制御部５７は、より古くから割り当てられたＶＮ番号に対応するエリアから読み出しを行う。ＶＮ解放制御部５７は、最も古いＶＮ番号のエントリからの読み出しが全て完了すると、次のＶＮ番号からの読み出しを行なえるようになる。
【００７７】
尚、最も古いＶＮ番号のエントリからの読み出しが全て完了したか否かの判定は、カウンタ制御により行われる。つまり、ステップＳ３１においてＶＮ割当制御部５２から通知されたカウンタに応じて、ＶＮ解放制御部５７は、各エリア内からのリクエストの読み出しが完了したか否かを判定する。具体的には、ＶＮバッファ５６０１〜５６１６は、ステップＳ３１においてＶＮ割当制御部５２から当該出力ポートの当該ＶＮ番号に対していくつのリクエストが発行されたかが通知されている。そして、ＶＮ解放制御部５７は、通知されたリクエスト数から、当該出力ポートの当該ＶＮ番号に対するリクエストの受信完了判定を行い、かつ、当該出力ポートの当該ＶＮ番号からのリクエストの発行完了を確認する。この確認が完了すると、当該ポートの当該ＶＮ番号からの全ての読み出しが完了したことになる。そのため、ＶＮ解放制御部５７は、次に古いＶＮ番号からの読み出しを開始する。
【００７８】
ＶＮ解放制御部５７は、全出力ポート上のもっとも古いＶＮ番号からの読み出しが完了したことにより、ＶＮ番号を解放する（Ｓ２９）。そして、ＶＮ解放制御部５７は、全出力ポート上のもっとも古いＶＮ番号からの読み出しが完了したことを確認すると、ＶＮ割当制御部５２にＶＮ番号の解放通知を発行する（Ｓ３２）。そして、ＶＮ割当制御部５２は、解放通知を受信すると、当該ＶＮ番号を再利用する。そのため、ステップＳ２３で割当が不可能と判定された場合、ＶＮ割当制御部５２は、ＶＮ番号の解放通知を受信するまで、リクエストへのＶＮ番号の割当を保留する。保留されたリクエストは、過去に利用していたＶＮ番号が解放された後、ＶＮ番号が割り当てられ、その後、次のステップに進む。
【００７９】
また、ＶＮ解放制御部５７により読み出されたリクエストは、メモリポート５８０１〜５８１６へメモリアクセスする（Ｓ３０）。以上のＶＮ番号の割当処理、ＶＮ番号を利用したＶＮバッファへの書き込み、ＶＮバッファからの読み出し処理及びＶＮ番号の解放処理を用いて、性能低下を引き起こすことなく命令間のアクセスの順序保証を実現している。
【００８０】
図４は、本発明の実施の形態２にかかるクロスバの出力タイミングの例を示す図である。図４は、図１６と同様の場合であり、同一ライン内の要素の行き先が同一ポートである場合（先の命令Ｃ１ｄ及び後の命令Ｃ２ｄの２命令が連続して入力された場合）におけるクロスバの出力タイミングの例を示す図である。また、図４では、先の命令Ｃ１ｄの要素ｅ２５５と後の命令Ｃ２ｄの要素ｅ０００の到着順序の逆転現象が発生していることを示し、それ以外の要素は、図１５と同じタイミングで出力されることを示す。
【００８１】
そして、本発明の実施の形態２では、ＶＮ割当制御部５２は、先の命令Ｃ１ｄに含まれる要素ｅ０００〜ｅ２５５について、ＶＮ番号として"ＶＮ０"を付加している。また、ＶＮ割当制御部５２は、後の命令Ｃ２ｄに含まれる要素ｅ０００〜ｅ２５５について、ＶＮ番号として"ＶＮ１"を付加している。そのため、時刻Ｔ３０に、"ＶＮ１"が付加された後の命令Ｃ２ｄの要素ｅ０００がＦＩＦＯ５４１６に格納され、時刻Ｔ３１に、"ＶＮ０"が付加された先の命令Ｃ１ｄの要素ｅ２５５がＦＩＦＯ５４１６に格納される。
【００８２】
しかし、後の命令Ｃ２ｄの要素ｅ０００がクロスバ５５を介してＶＮバッファ５６１６に格納される際には、ＶＮバッファ５６１６内の"ＶＮ１"に対応する領域の先頭に格納される。その後、先の命令Ｃ１ｄの要素ｅ２５５がクロスバ５５を介してＶＮバッファ５６１６内の"ＶＮ０"に対応する領域の末尾に格納される。
【００８３】
そして、ＶＮ解放制御部５７は、ＶＮバッファ５６１６内の"ＶＮ０"に対応する領域にリクエストが格納され始めた後に、当該領域からリクエストを読み出し始める。そして、ＶＮ割当制御部５２からＶＮバッファ５６１６に"ＶＮ０"に割り当てられたリクエスト数が"１６"である旨が通知されているため、ＶＮ解放制御部５７は、ＶＮバッファ５６１６から"１６"個のリクエストの読み出しが完了するまで、"ＶＮ１"に対応する領域からのリクエストの読み出しを開始しない。つまり、ＶＮ解放制御部５７は、ＶＮバッファ５６１６から要素を読み出す際には、"ＶＮ１"より"ＶＮ０"に対応する領域から優先して読み出しを行う。
【００８４】
そのため、ＶＮ解放制御部５７は、"ＶＮ０"に対応する領域に先の命令Ｃ１ｄの要素ｅ２５５が格納され、当該領域から全ての要素の読み出しを行った後、"ＶＮ１"に対応する領域から要素の読み出しを開始する。よって、先の命令Ｃ１ｄと後の命令Ｃ２ｄとの到着順序が保証される。
【００８５】
本発明の実施の形態２は、一つのリクエスタが複数の経路を利用し、かつ、命令間（データ間）での順序を保証したいときに起きる問題を解決するものである。例えば、ベクトルアーキテクチャは、１命令で複数のメモリアクセスを発行するため、複数の経路を使っている。また、ベクトルアーキテクチャは、ディスティネーションもメモリであるため、順序の保証も必要となるため、この構成が適用可能である。
【００８６】
本発明の実施の形態２では、順序を保証すべき単位ごとにＶＮ番号を割り当て、割り当てられたＶＮ番号順にリクエストを読み出すことで、順序を保証している。その結果、順序を保証するためのホールドオール制御を削除することができ、クロスバの利用効率の低下を防いでいる。
【００８７】
＜発明の実施の形態３＞
前述の実施の形態２では、１命令毎に１つのＶＮ番号の割当を行なっていた。しかし、現実的には、ＶＮ番号は有限個であり、ＶＮ番号が枯渇すると後続の命令の発行を止める必要があった。また、反対に、十分に大きなＶＮ番号までをサポートした場合には、通常状態では、過剰なハードウェアの投資になってしまい、費用対効果が合わない。そこで、本発明の実施の形態３では、ＶＮ番号をより効率的に利用する方法について説明する。
【００８８】
まず、前述の実施の形態２における課題の発生について図８を用いて説明する。図８は、本発明の実施の形態２にかかる１命令毎に１つのＶＮ番号の割当を行なっている状態を説明するための図である。前述の実施の形態２では、命令毎にＶＮ番号を消費するので、多くのＶＮ番号を必要とする。図８では、仮に最大ＶＮ番号数を"８"とする。そのため、命令１〜８には、ＶＮ番号０〜７が割り当てられていることを示す。同様に、命令９〜１６、命令１７〜２４、命令２５〜３２についてもＶＮ番号０〜７が割り当てられていることを示す。
【００８９】
そして、例えば、命令１のＶＮ番号０の解放通知が何らかの事情により遅れると、命令９は、ＶＮ番号０の割当が保留される。つまり、命令９にはホールドオール制御がかかり、クロスバとは別の箇所での性能低下が発生する。
【００９０】
ここで、命令には、先行命令との順序保証が必要な場合ばかりでなく、順序保証が不要な場合もある。つまり、順序保証が必要な場合とは、当該命令が先行命令を追い越してはいけないことを示す。また、順序保証が不要な場合とは、当該命令が先行命令を追い越しても構わないことを示す。
【００９１】
そこで、本発明の実施の形態３では、本発明の実施の形態２にかかるバッファ割当部に改良を加え、受け付けた要求群が先行する要求群との順序保証が不要である場合、当該受け付けた要求群に含まれる各要求に対して、先行する要求群に対応する識別情報を付加することを特徴とする。ここでは、リクエスタから発行される各命令には、予め順序保証が必要か否かを示す情報が含まれているものとする。そして、本発明の実施の形態３にかかるバッファ割当部は、受け付けた命令に順序保証が必要か否かを判定し、順序保証が不要と判定された場合には、例えば、直前の命令に割り当てたＶＮ番号を継続して割当に用いる。これにより、ＶＮ番号が枯渇する可能性を軽減し、後続の命令の発行が止められ難くなる。よって、本発明の実施の形態２に比べてさらなる性能の向上を実現することができる。
【００９２】
図９は、本発明の実施の形態３にかかるクロスバ制御方式を説明するための図である。まず、命令１〜３２には、それぞれ"先行命令との順序保証"の要否が予め定められていることを示す。そして、この場合、本発明の実施の形態３にかかるバッファ割当部は、命令２に、ＶＮ番号１が割り当てる。命令２には、"先行命令との順序保証"が"要"と定められており、順序保証をするため、直前の命令１とは異なるＶＮ番号である"１"を取得する必要があるためである。しかし、本発明の実施の形態３にかかるバッファ割当部は、命令３〜６について"先行命令との順序保証"が"不要"であると判定するため、引き続き、ＶＮ番号１が割り当てる。命令３〜６には、到着の順序に制約は存在しないためである。命令７以降についても以降、同様に"先行命令との順序保証"の要否が判定され、適宜、ＶＮ番号が継続して割り当てられる。
【００９３】
このように、本発明の実施の形態３にかかる割当方法により、ＶＮ番号の有効利用が可能になり、多くのハードウェアを投入することなく、ＶＮ番号が枯渇する可能性を大きく緩和することができる。
【００９４】
＜その他の発明の実施の形態＞
本発明の利用が考えられる分野としては、クロスバのような多入力対多出力の通信網を持ち、かつ、通信網を通るパケット（命令列、もしくは、データ列）間で到着順序の保証を必要とするようなコンピュータシステム、もしくは、ネットワークスイッチにおける利用の可能性が考えられる。
【００９５】
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【符号の説明】
【００９６】
１１、１２、・・・、１ｋ  要求元
１１０  要求群
１１１、１１２、・・・、１１ｎ  要求
２０  要求転送装置
２１  バッファ割当部
２２１、２２２、・・・、２２ｍ  バッファ
２２１１、２２１２、・・・、２２１ｋ  領域
２２２１、２２２２、・・・、２２２ｋ  領域
２２ｍ１、２２ｍ２、・・・、２２ｍｋ  領域
２２１１１、２２１１２、・・・、２２１１ｎ  要求
２２１２１、２２１２２、・・・、２２１２ｎ  要求
２２１ｋ１、２２１ｋ２、・・・、２２１ｋｎ  要求
２３  要求出力部
３１、３２、・・・、３ｍ  要求先
３０  クロスバ制御装置
３１００、３１０１、・・・、３１１４、３１１５  ＦＩＦＯ
３２００、３２０１、・・・、３２１４、３２１５  入力ポート
３３  クロスバ
３４００、・・・、３４１５  出力ポート
３５００、・・・、３５１５  ＶＮバッファ
３５０００、・・・、３５１５０  ＶＮ０用バッファ
３５００１、・・・、３５１５１  ＶＮ１用バッファ
３５００３、・・・、３５１５３  ＶＮ３用バッファ
３６００、・・・、３６１５  メモリポート
５０  クロスバ制御装置
５１  リクエスタ
５２  ＶＮ割当制御部
５３  調停制御部
５４０１、５４０２、５４０３、・・・、５４１５、５４１６  ＦＩＦＯ
５５  クロスバ
５６０１、５６０２、５６０３、・・・、５６１５、５６１６  ＶＮバッファ
５７  ＶＮ解放制御部
５８０１、５８０２、５８０３、・・・、５８１５、５８１６  メモリポート
６  ＶＮバッファ
６０、６１、６２、・・・、６ｋ−１、６ｋ  領域
６０１、６０２、・・・、６０ｎ  要求領域
６１１、６１２、・・・、６１ｎ  要求領域
６２１、６２２、・・・、６２ｎ  要求領域
６ｋ−１１、６ｋ−１２、・・・、６ｋ−１ｎ  要求領域
６ｋ１、６ｋ２、・・・、６ｋｎ  要求領域
９０  クロスバ制御装置
９１  リクエスタ
９２  調停制御部
９３０１、９３０２、９３０３、・・・、９３１５、９３１６  ＦＩＦＯ
９４  クロスバ
９５０１、９５０２、９５０３、・・・、９５１５、９５１６  メモリポート
Ｃ１、Ｃ１ａ、Ｃ１ｂ、Ｃ１ｃ、Ｃ１ｄ  先の命令
Ｃ２、Ｃ２ａ、Ｃ２ｂ、Ｃ２ｃ、Ｃ２ｄ  後の命令
Ｐｉ０、Ｐｉ１、・・・、Ｐｉ１５  入力ポート
Ｐｏ０、Ｐｏ１、・・・、Ｐｏ１５  出力ポート
Ｔ０、・・・、Ｔ６１  時刻
【図１】
0005691419.tif 000002
【図２】
0005691419.tif 000003
【図３】
0005691419.tif 000004
【図４】
0005691419.tif 000005
【図５】
0005691419.tif 000006
【図６】
0005691419.tif 000007
【図７】
0005691419.tif 000008
【図８】
0005691419.tif 000009
【図９】
0005691419.tif 000010
【図１０】
0005691419.tif 000011
【図１１】
0005691419.tif 000012
【図１２】
0005691419.tif 000013
【図１３】
0005691419.tif 000014
【図１４】
0005691419.tif 000015
【図１５】
0005691419.tif 000016
【図１６】
0005691419.tif 000017
【図１７】
0005691419.tif 000018