(57)【要約】コンピューティングシステムは、データを記憶するためのメモリと、ネットワークトラフィックを生成するための１つ以上のクライアントと、ネットワークスイッチを備えた通信ファブリックと、を使用する。ネットワークスイッチは、個別の入力及び出力記憶構造ではなく、集中型記憶構造を含む。ネットワークスイッチは、受信したパケットに対応する特定のメタデータを、単一の集中型折り畳みキューに記憶する。パケットのエイジは、キューエントリ位置に対応する。パケットのペイロードデータが別のメモリに記憶されるので、ネットワークスイッチでは、パケットの存続期間中に比較的大量のデータがシフトされることがない。ネットワークスイッチは、折り畳み可能なキュー内のスパースなキューエントリを選択し、選択されたキューエントリを割り当て解除し、割り当てられたままのキューエントリを、ネットワークスイッチの基数に比例する遅延で、キューの第１の端に向けてシフトする。【選択図】図３
2021521529.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークスイッチ内のキューであって、
データを、前記キューの先頭に最も近い最初の利用可能なエントリから開始してインオーダで連続して記憶するように構成されている複数のキューエントリと、
制御論理と、
複数のスケジューラと、を備え、
前記複数のスケジューラの各々は、
割り当て解除のために前記複数のキューエントリのキューエントリを選択することと、
単一のビット遷移を伴う複数のビットを含むビットベクトルを生成することであって、前記ビットベクトル内の前記ビット遷移の位置は、割り当て解除のために選択されたキューエントリを識別する、ことと、を行うように構成されており、
前記制御論理は、前記複数のキューエントリのうち少なくとも２つの非連続エントリを識別する前記複数のスケジューラから複数のビットベクトルを受信したことに応じて、
前記少なくとも２つの非連続エントリの各々を割り当て解除することと、
割り当てられたままのエントリが前記キューの先頭から開始する連続したエントリに配置されるように、割り当てられたままのキューエントリを前記キューの先頭に向けてシフトすることと、を行うように構成されている、
キュー。
【請求項２】
前記キューは、Ｎ（Ｎは整数）個の読み取りポートと、Ｎ個の書き込みポートと、をさらに備え、割り当て解除するために選択されたキューエントリの数はＮに等しい、
請求項１のキュー。
【請求項３】
前記選択されたキューエントリは、サービス品質（ＱｏＳ）パラメータに関してアウトオブオーダで前記複数のスケジューラによる割り当て解除のために選択される、
請求項２のキュー。
【請求項４】
前記データは、エイジに関してインオーダで前記複数のキューエントリに記憶される、
請求項３のキュー。
【請求項５】
前記制御論理は、受信したビットベクトル内の各ビット位置を、受信した他のビットベクトルに記憶された値に基づく量だけ最下位ビット位置に向けてシフトすることによって、前記受信したビットベクトルの変換ビットベクトルを生成するように構成されている、
請求項１のキュー。
【請求項６】
前記量は、他の変換ビットベクトルに記憶された値に基づいている、
請求項５のキュー。
【請求項７】
前記キュー内の所定の位置にある前記キュー内のキューエントリは、前記所定の位置に等しい変換ビットベクトルのビット位置に記憶された値に基づいて、前記キューの先頭に向けてシフトされる、
請求項５のキュー。
【請求項８】
前記キューは、前記キューに記憶されたデータに対応するデータを記憶するように構成されたメモリへの第１のインターフェースを備え、
前記制御論理は、データを読み取るために、前記選択されたキューエントリに記憶されたメモリアドレスを前記メモリに送信するように構成されている、
請求項１のキュー。
【請求項９】
前記キューは、メモリ内のエントリを識別するメモリアドレスを記憶するように構成されたインオーダ循環バッファへの第２のインターフェースを備え、
前記制御論理は、割り当てるメモリエントリを識別するために使用される前記循環バッファのエントリを更新するために、選択されたキューエントリに記憶されたメモリアドレスを、前記第２のインターフェースを介して前記循環バッファに送信するように構成されている、
請求項８のキュー。
【請求項１０】
前記制御論理は、
前記第２のインターフェースを介して、割り当てられた前記メモリのエントリを識別する、前記循環バッファに記憶されたメモリアドレスを受信することと、
受信したメモリアドレスを、使用可能なキューエントリに記憶することと、を行うように構成されている、
請求項９のキュー。
【請求項１１】
データを、ネットワークスイッチ内のキューの複数のキューエントリに、前記キューの先頭に最も近い最初の利用可能なエントリから開始してインオーダで連続して記憶することと、
複数のスケジューラによって、割り当て解除のために前記複数のキューエントリのキューエントリを選択することと、
前記複数のスケジューラによって、複数のビットベクトルを生成することであって、各ビットベクトルは、単一のビット遷移を伴う複数のビットを備え、前記ビットベクトル内の前記ビット遷移の位置は、割り当て解除のために選択されたキューエントリを識別する、ことと、
前記複数のキューエントリのうち少なくとも２つの非連続エントリを識別する前記複数のスケジューラから複数のビットベクトルを受信したことに応じて、
前記キュー内の制御論理によって、前記少なくとも２つの非連続エントリの各々を割り当て解除することと、
前記制御論理によって、割り当てられたままのエントリが前記キューの先頭から開始する連続したエントリに配置されるように、割り当てられたままのキューエントリを前記キューの先頭に向けてシフトすることと、を含む、
方法。
【請求項１２】
受信したビットベクトル内の各ビット位置を、受信した他のビットベクトルに記憶された値に基づく量だけ最下位ビット位置に向けてシフトすることによって、前記受信したビットベクトルの変換ビットベクトルを生成することをさらに含む、
請求項１１の方法。
【請求項１３】
前記量は、他の変換ビットベクトルに記憶された値に基づいている、
請求項１２の方法。
【請求項１４】
前記キュー内の前記制御論理によって、所定のエントリ位置にある前記キュー内のキューエントリを、前記所定のエントリ位置に等しい変換ビットベクトルのビット位置に記憶された値に基づいて、前記キューの先頭に向けてシフトすることをさらに含む、
請求項１２の方法。
【請求項１５】
データを読み取るために、前記選択されたキューエントリに記憶されたメモリアドレスをメモリに送信することをさらに含む、
請求項１４の方法。
【請求項１６】
ネットワークスイッチであって、
データを、キューの先頭に最も近い最初の利用可能なエントリから開始してインオーダで連続して記憶するように構成された複数のキューエントリを備えるキューと、
前記キューに記憶された前記データに対応するデータを記憶するように構成されたメモリと、
前記メモリ内のエントリを識別するメモリアドレスを管理するように構成されたインオーダ循環バッファと、を備え、
前記キューは、
割り当て解除のために前記複数のキューエントリのキューエントリを選択することと、
単一のビット遷移を伴う複数のビットを含むビットベクトルを生成することであって、前記ビットベクトル内の前記ビット遷移の位置は、割り当て解除のために選択された前記キューエントリを識別する、ことと、を行うように構成されており、
前記複数のキューエントリのうち少なくとも２つの非連続エントリを識別する複数のスケジューラから複数のビットベクトルを受信したことに応じて、
前記少なくとも２つの非連続エントリの各々を割り当て解除することと、
割り当てられたままのエントリが前記キューの先頭から開始する連続したエントリに配置されるように、割り当てられたままのキューエントリを前記キューの先頭に向けてシフトすることと、を行うように構成されている、
ネットワークスイッチ。
【請求項１７】
前記キューは、受信したビットベクトル内の各ビット位置を、受信した他のビットベクトルに記憶された値に基づく量だけ最下位ビット位置に向けてシフトすることによって、前記受信したビットベクトルの変換ビットベクトルを生成するように構成されている、
請求項１６のネットワークスイッチ。
【請求項１８】
前記量は、他の変換ビットベクトルに記憶された値に基づいている、
請求項１７のネットワークスイッチ。
【請求項１９】
前記キューは、所定の位置にある前記キュー内のキューエントリを、前記所定の位置に等しい変換ビットベクトルのビット位置に記憶された値に基づいて、前記キューの先頭に向けてシフトするように構成されている、
請求項１７のネットワークスイッチ。
【請求項２０】
前記キューは、データを読み取るために、前記選択されたキューエントリに記憶されたメモリアドレスを前記メモリに送信するように構成されている、
請求項１７のネットワークスイッチ。
【発明の詳細な説明】
【背景技術】
【０００１】
コンピューティングシステムにおいて、いくつかのタイプのアプリケーションは、他のアプリケーションよりも並列処理及び共有メモリをうまく利用する機能を実行する。このようなアプリケーションの例には、機械学習アプリケーション、エンターテインメント及びリアルタイムアプリケーション、並びに、ビジネス、科学、医療及び他のアプリケーションが含まれる。いくつかのプロセッサアーキテクチャは、複数の処理ユニット（例えばＣＰＵ、ＧＰＵ等）又は処理コアを含むが、メモリに接続された１つ又は２つの追加の処理ユニット又はコアは、所望のレベルのパフォーマンスを提供するのに十分なレベルの並列処理を必ずしも提供しない。さらに、従来のバスベース及びクロスバー相互接続アーキテクチャは、一般に、処理ユニットの数が増えるほど拡張性がなくなる。その結果、処理ユニットの数が増えるにつれて、処理ユニットへの命令及びデータの供給の遅延も増加する。マルチプロセッシングユニットシステムが所望のレベルのパフォーマンスをサポートするために、いくつかのシステムは、バスベース及びクロスバー相互接続アーキテクチャからネットワークオンチップ（ＮｏＣ）アーキテクチャに移行している。ＮｏＣアーキテクチャは、システムレベルのネットワーク技術を使用して、オンチップトラフィックを転送する。バスベースのアーキテクチャによって提供される階層化及びセグメント化されたアプローチとは対照的に、ＮｏＣアーキテクチャは、データを転送するためにより均質で拡張可能なスイッチファブリックネットワークを提供する。適切なスループットを維持するために、ＮｏＣアーキテクチャのＮｏＣスイッチは、その内部構造を介してクロックサイクル毎に多くのパケットを処理することが期待される。
【０００２】
上記を考慮して、オンチップネットワークトラフィックを効率的に転送する方法及びシステムが望まれている。
【０００３】
添付図面と共に以下の説明を参照することによって、本明細書に記載された方法及びメカニズムの利点をより良く理解することができる。
【図面の簡単な説明】
【０００４】
【図１】コンピューティングシステムの一実施形態のブロック図である。
【図２】ネットワークオンチップ（ＮｏＣ）スイッチの一実施形態のブロック図である。
【図３】ネットワークスイッチのスループットを管理する方法の一実施形態のフロー図である。
【図４】折り畳み可能（collapsible）なキュー更新論理（ロジック）の一実施形態のブロック図である。
【図５】変換ビットベクトル論理の一実施形態のブロック図である。
【図６】変換キューエントリ論理の一実施形態のブロック図である。
【図７】キューを折り畳むためのシフト量を決定する方法の一実施形態のフロー図である。
【図８】キューを折り畳む方法の一実施形態のフロー図である。
【図９】キュー状態情報の折り畳みの一実施形態のブロック図である。
【発明を実施するための形態】
【０００５】
本発明は、様々な変形及び代替形態を許容可能であるが、具体的な実施形態を図面に例示し、本明細書において詳細に説明する。しかしながら、図面及びその詳細な説明は、本発明を開示された特定の形態に限定することを意図するものではなく、逆に、本発明は、添付の特許請求の範囲によって定義される本発明の範囲内にある全ての変形、均等物及び代替物を包含することを理解されたい。
【０００６】
以下の説明では、本明細書に提示される方法及びメカニズムの十分な理解を提供するために、多くの具体的な詳細が記載されている。しかしながら、当業者は、これらの具体的な詳細無しに様々な実施形態が実施され得ることを認識すべきである。場合によっては、本明細書で説明するアプローチを曖昧にすることを避けるために、周知の構造、コンポーネント、信号、コンピュータプログラム命令及び技術が詳細に示されていない。説明を簡単且つ明確にするために、図に示される要素は、必ずしも縮尺通りに描かれていないことが理解されよう。例えば、いくつかの要素の寸法は、他の要素と比較して誇張される場合がある。
【０００７】
オンチップネットワークトラフィックを効率的に転送する様々なシステム、装置、方法及びコンピュータ可読媒体が開示されている。様々な実装形態では、コンピューティングシステムは、１つ以上のクライアントを含む。このようなクライアントの例には、汎用中央処理装置（ＣＰＵ）、グラフィックス処理装置（ＧＰＵ）、アクセラレーテッド処理装置（ＡＰＵ）、マルチメディアエンジン等が含まれる。これらの１つ以上のクライアントは、プログラム命令の処理中に、メモリに記憶されたデータへのアクセス要求を生成する。いくつかの実施形態では、複数のクライアントが、システムオンチップ（ＳＯＣ）等の単一のダイ内で接続されている。
【０００８】
様々な実装形態では、コンピューティングシステムは、クライアント間、及び、メモリとクライアントと間でデータを転送するための通信ネットワーク（又は、「ファブリック」）を含む。様々な実装形態では、通信ファブリックは、所定のソースからデータを受信し、受信したデータを所定の宛先に伝達するように構成されたエンティティとしてみなし得るネットワークスイッチを含む。所望のスループットを維持するために、ネットワークスイッチは、最大で、クロックサイクルで受信したパケット数と等しいクロックサイクル当たりのパケット数を処理する。所定のクロックサイクルで受信したパケット数は、ネットワークスイッチの読み取りポートの数と等しい（それ以下である）。データを受信する読み取りポートの数は、データを伝達するための書き込みポートの数と等しい。この読み取りポート及び書き込みポート（又は、スイッチポート）の数は、ネットワークスイッチの「基数（radix）」とも呼ばれる。したがって、８つの読み取りポートを備えたネットワークスイッチの基数は、８になる。
【０００９】
いくつかの実装形態では、ネットワークスイッチは、別々の入力及び出力データ記憶構造ではなく、集中型データ記憶構造を含む。集中型データ記憶構造により、データのバッファリングにおける冗長性が回避される。冗長なバッファリングは、オンダイ領域及び消費電力の両方を増加させる。ネットワークスイッチは、受信したパケットに対応するメタデータを、対応するパケットのエイジ（age）がキューエントリ位置に対応する単一の集中型折り畳み可能キューに記憶する。ここでのエイジとは、スイッチがパケットを受信した時間を指す。したがって、パケットのエイジは暗黙的であり、エイジの表示を個別に記憶する必要はない。パケットのペイロード（データ）は、メタデータとは別のメモリ構造に記憶される。このようにして、折り畳み可能なキュー内のメタデータの折り畳み中に、比較的大量のデータがシフトされることもない。
【００１０】
様々な実施形態では、ネットワークスイッチは、割り当て解除のために、折り畳み可能なキュー内のスパース又は非連続キューエントリを選択する制御論理を含む。２つの連続するキューエントリは互いに隣接して配置されるが、２つのスパースキューエントリの間には、１つ以上の他のキューエントリが配置される。したがって、割り当て解除のために選択された２つのスパースキューエントリの間には、割り当て解除のために選択されていない１つ以上の他のキューエントリがある。フルスループットを維持するために、各クロックサイクルで割り当て解除のために選択されたキューエントリの数は、ネットワークスイッチの基数に等しい（それ以下である）。
【００１１】
ネットワークスイッチの制御論理は、選択されたキューエントリの各々を配置し、割り当て解除する。また、制御論理は、割り当てられたままのキューエントリ（remaining allocated queue entries）が連続するように、割り当てられたままのキューエントリをキューの第１の端に向けてシフトする。このシフトは、「折り畳み」とも呼ばれる。以下の説明では、第１の端がキューの先頭と呼ばれ、他方の端がキューの末尾と呼ばれる。このように、キューの先頭に向けてシフトされる割り当てられたままのキューエントリは、シフト操作後に、キューの先頭に連続して配置される。シフト操作後に割り当て可能なエントリは、キューの末尾の連続したエントリに配置される。
【００１２】
次に、図１を参照すると、コンピューティングシステム１００の一実施形態の一般化されたブロック図が示されている。図示するように、コンピューティングシステム１００は、メモリコントローラ１４０，１４２の各々と複数のクライアントとの間にある通信ファブリック１１０を含む。メモリコントローラ１４０，１４２は、メモリ１５０，１５２とインターフェースするために使用される。複数のクライアントの例には、中央処理装置（ＣＰＵ）複合体（complex）１６０、グラフィックス処理装置（ＧＰＵ）１６２及びハブ１６４である。ハブ１６４は、マルチメディアエンジン１６６との通信に使用される。いくつかの実施形態では、１つ以上のハブが、マルチメディアプレーヤ（すなわち、マルチメディアエンジン１６６用のハブ１６４）、ディスプレイユニット、又は、その他とインターフェースするために使用される。このような場合、ハブは、コンピューティングシステム１００内のクライアントである。各ハブには、様々な通信プロトコルに従ってトラフィックを処理するための制御論理及び記憶要素がさらに含まれている。３つのクライアントが示されているが、他の実施形態では、コンピューティングシステム１００は、任意の数のクライアントと、他のタイプのクライアント（例えば、ディスプレイユニット、１つ以上の入力／出力（Ｉ／Ｏ）周辺機器等）と、を含む。
【００１３】
いくつかの実施形態では、コンピューティングシステム１００は、図示した各コンポーネントが単一の半導体ダイ上で統合されたシステムオンチップ（ＳｏＣ）である。他の実施形態では、コンポーネントは、システムインパッケージ（ＳｉＰ）又はマルチチップモジュール（ＭＣＭ）内の個々のダイである。様々な実施形態では、ＣＰＵ１６０、ＧＰＵ１６２及びマルチメディアエンジン１６６は、スマートフォン、タブレットコンピュータ、ゲーム機、スマートウォッチ、デスクトップコンピュータ、バーチャルリアリティヘッドセット等で使用される。ＣＰＵ１６０、ＧＰＵ１６２及びマルチメディアエンジン１６６は、オンチップネットワークトラフィックを生成可能なクライアントの例である。ネットワークトラフィックの例には、メモリアクセス要求、メモリアクセス応答、及び、クライアント間の他のネットワークメッセージが含まれる。
【００１４】
トラフィックを効率的にルーティングするために、様々な実施形態では、通信ファブリック１１０は、ネットワークスイッチ１７０〜１７８を含むルーティングネットワーク１２０を使用する。いくつかの実施形態では、ネットワークスイッチ１７０〜１７８は、ネットワークオンチップ（ＮｏＣ）スイッチである。実施形態では、ルーティングネットワーク１２０は、ポイントツーポイント（Ｐ２Ｐ）リングトポロジにおいて複数のネットワークスイッチ１７０〜１７８を使用する。他の実施形態では、ルーティングネットワーク１２０は、メッシュトポロジにおいてプログラム可能なルーティングテーブルを備えたネットワークスイッチ１７０〜１７８を使用する。さらに他の実施形態では、ルーティングネットワーク１２０は、トポロジを組み合わせてネットワークスイッチ１７０〜１７８を使用する。いくつかの実施形態では、ルーティングネットワーク１２０は、コンピューティングシステム１００内のワイヤの数を減らすために１つ以上のバスを含む。例えば、インターフェース１３０〜１３２のうち１つ以上は、ルーティングネットワーク１２０内の単一のバス上で読み取り応答及び書き込み応答を送信する。
【００１５】
様々な実施形態において、通信ファブリック１１０（「ファブリック」）は、ＣＰＵ１６０、ＧＰＵ１６２及びマルチメディアエンジン１６６との間でトラフィックを転送する。また、ファブリック１１０は、メモリ１５０，１５２と、ＣＰＵ１６０、ＧＰＵ１６２及びマルチメディアエンジン１６６等のクライアントとの間でトラフィックを転送する。ネットワークトラフィックが、要求されたデータを取得するためのネットワークメッセージを含む場合、インターフェース１１２，１１４，１１６，１３０，１３２及びネットワークスイッチ１７０〜１７８のうち１つ以上は、要求されたデータのターゲットアドレスを変換する。
【００１６】
様々な実施形態では、ファブリック１１０及びルーティングネットワーク１２０のうち１つ以上は、要求、応答及び制御パラメータを記憶するための状態レジスタ、制御レジスタ及び他の記憶要素を含む。いくつかの実施形態では、ファブリック１１０は、通信、データ通信、及び、１つ以上のバスを介してトラフィックをルーティングするためのネットワークプロトコルをサポートする制御論理を含む。いくつかの実施形態では、ファブリック１１０は、アドレスフォーマット、インターフェース信号、及び、同期／非同期クロックドメインの使用をサポートする制御論理を含む。
【００１７】
フルスループットを維持するために、いくつかの実施形態では、ネットワークスイッチ１７０〜１７８の各々は、スイッチ内の読み取りポートの数に等しいクロックサイクル当たりパケット数を処理する。様々な実施形態では、スイッチ内の読み取りポートの数は、スイッチ内の書き込みポートの数と等しい。この読み取りポートの数は、ネットワークスイッチの基数とも呼ばれる。ネットワークスイッチ１７０〜１７８のうち１つ以上が、クロックサイクル当たりの基数よりも少ない数のパケットを処理する場合、ルーティングネットワーク１２０の帯域幅は、最大値未満である。したがって、ネットワークスイッチ１７０〜１７８は、クロックサイクル当たりのパケットの基数に等しい処理速度を維持するための記憶構造及び制御論理を含む。
【００１８】
いくつかの実施形態では、ネットワークスイッチ１７０〜１７８は、別々の入力及び出力記憶構造ではなく、集中型記憶構造を含む。１つ以上のネットワークスイッチ１７０〜１７８の集中型記憶構造は、オンダイ領域及び電力消費の両方の増加につながるバッファリングの冗長性を回避する。さらに、記憶構造を別々の入力記憶構造と出力記憶構造に分割すると、ネットワークスイッチ内のパケットの存続期間においてパケットのローカルエイジを維持することがさらに複雑になる。対照的に、ネットワークスイッチ１７０〜１７８は、受信したパケットに対応するメタデータを、パケットのエイジがキュー内のその位置に対応する単一の集中型折り畳み可能なキューに記憶する。したがって、パケットのエイジは暗黙的であり、パケットのエイジの情報を別に記憶する必要がない。パケットのペイロードデータは別のメモリ構造に記憶されるので、折り畳み可能なキューのシフト中に比較的大量のデータがシフトされることはない。
【００１９】
いくつかの実施形態では、１つ以上のネットワークスイッチ１７０〜１７８は、単一のクロックサイクルでの割り当て解除のために非連続キューエントリを選択する制御論理及び回路を含む。フルスループットを維持するために、割り当て解除のために選択されたキューエントリの数は、最大で、ネットワークスイッチの基数（つまり、単一のクロックサイクルでスイッチが受信可能なパケットの最大数）である。また、制御論理は、割り当て解除のためにキューエントリを識別することに加えて、残りのキューエントリ（割り当て解除されていないもの）を、キューの先頭に向けてシフトする。割り当てられたままのキューエントリの全てが、キューの先頭の連続したエントリに配置される。次に、割り当て可能な全てのキューエントリは、キューの末尾の連続したエントリに配置される。いくつかの実施形態では、１つ以上のネットワークスイッチ１７０〜１７８の制御論理は、単一のクロックサイクル内でキューの折り畳みを実行する。
【００２０】
インターフェース１１２〜１１６は、ルーティングネットワーク１２０とＣＰＵ１６０、ＧＰＵ１６２及びマルチメディアエンジン１６６との間でデータ、要求及び確認応答（acknowledgment responses）を転送するために使用される。インターフェース１３０〜１３２は、メモリコントローラ１４０〜１４２とルーティングネットワーク１２０との間でデータ、要求及び確認応答を転送するために使用される。実施形態において、インターフェース１１２〜１１６，１３０〜１３２は、アドレス空間とメモリチャネルとの間のマッピングを有する。様々な実施形態では、インターフェース１１２〜１１６，１３０〜１３２及びメモリコントローラ１４０〜１４２は、機能を提供するアルゴリズムを実装するハードウェア回路及び／又はソフトウェアを含む。
【００２１】
インターフェース１１２〜１１６は、ＣＰＵ１６０、ＧＰＵ１６２及びマルチメディアエンジン１６６との通信プロトコルをサポートする。いくつかの実施形態では、インターフェース１１２〜１１６は、要求及び応答を記憶するためのキューと、ルーティングネットワーク１２０に要求を送信する前に受信した要求間を調停するための選択論理と、を含む。また、インターフェース１１２〜１１６は、パケットを生成し、パケットを復号し、ルーティングネットワーク１２０との通信をサポートするための論理も含む。いくつかの実施形態では、インターフェース１１２〜１１６の各々は、図示するように、単一のクライアントと通信する。他の実施形態では、１つ以上のインターフェース１１２〜１１６は、複数のクライアントと通信し、クライアントを識別する識別子を使用してクライアントとのトラフィックを追跡する。
【００２２】
メモリ１５０に対して単一のメモリコントローラ１４０が示されており、メモリ１５２に対して単一のメモリコントローラ１４２が示されているが、他の実施形態では、コンピューティングシステム１００は、それぞれ１つ以上のメモリチャネルをサポートする複数のメモリコントローラを含む。メモリコントローラ１４０〜１４２は、要求及び応答を記憶するためのキューを含む。さらに、メモリコントローラ１４０〜１４２は、バーストモードをサポートするメモリ１５０〜１５２のタイミング仕様に基づいて、メモリ１５０〜１５２に送信される要求をグループ化して要求をメモリ１５０〜１５２に送信する制御論理を含む。
【００２３】
メモリコントローラ１４０〜１４２は、制御パラメータを記憶するための状態レジスタ及び制御レジスタを含む。さらに、メモリコントローラ１４０〜１４２は、効率的なアウトオブオーダ処理のために、受信したメモリアクセス要求及び応答を並べ替える論理を含む。並べ替えは、優先度レベル、サービス品質（ＱｏＳ）パラメータ、メモリアクセス要求若しくは応答のパケットのエイジ、又は、他の考慮事項のうち１つ以上に基づいている。
【００２４】
様々な実施形態では、メモリ１５０〜１５２は、様々なランダムアクセスメモリ（ＲＡＭ）のうち何れかを含む。いくつかの実施形態では、メモリ１５０〜１５２は、データ及び対応するメタデータを同期ＲＡＭ（ＳＲＡＭ）に記憶する。他の実施形態では、メモリ１５０〜１５２は、データ及び対応するメタデータを様々なダイナミックＲＡＭ（ＤＲＡＭ）のうち１つに記憶する。例えば、実施形態に応じて、メモリ１５０〜１５２は、データを、従来のＤＲＡＭ又は互いに積層された複数の三次元（３Ｄ）メモリダイに記憶する。
【００２５】
図２を参照すると、ネットワークスイッチ２００の一実施形態の一般化されたブロック図が示されている。ネットワークスイッチ２００は、バッファ２１０と、制御キュー２２０と、パケットメモリ２３０と、を含む。様々な実施形態では、パケットメモリ２３０は、受信したパケットのパケットペイロードデータを記憶する。バッファ２１０は、メモリ２３２内のエントリのアドレスを記憶し、これは、パケットインデックスとも呼ばれる。図示した例では、バッファ２１０は、１６個のエントリ（０〜１５）を含む。実施形態では、各パケットインデックスは、メモリ２３２内のエントリのうち特定のエントリを指す。このような実施形態では、パケットメモリ２３０は、データを、ダイレクトマップ機構に記憶する。他の実施形態では、パケットメモリ２３０は、データを、セットアソシエイティブ機構又はフルアソシアティブ機構等の別の機構を使用して記憶する。
【００２６】
いくつかの実施形態では、バッファ２１０は、インオーダ循環バッファとして管理される。いくつかの実施形態では、読み取りポインタ２１２及び書き込みポインタ２１４の各々は、リセット時に同じ値（例えば、バッファエントリ０）に設定される。いくつかの実施形態では、バッファ２１０のバッファエントリに記憶されたパケットインデックスは、バッファエントリに対応する値にリセットされる。例えば、バッファエントリ０に記憶されているインデックスのリセット値は、０である。同様に、バッファエントリ１に記憶されているインデックスのリセット値は、１である。以下同様である。バッファ２１０及びパケットメモリ２３０の各々は、１６個のエントリを含むように示されているが、他の実施形態では、バッファ２１０及びパケットメモリ２３０の各々は、別の数のエントリを含む。
【００２７】
ネットワークスイッチ２００がパケットを受信すると、読み取りポインタ２１２が指すバッファエントリに記憶されたパケットインデックスがパケットインデックス２１６として読み取られる。いくつかの実施形態では、複数のパケットが同時に受信され、読み取りポインタ２１２が指すバッファエントリに記憶されたパケットインデックスから始まる複数のパケットインデックスがバッファ２１０から読み取られる。実施形態では、バッファ２１０から読み取られたパケットインデックス２１６は、パケットメモリ２３０内の割り当て論理２３４及び制御キュー２２０の両方に送信される。いくつかの実施形態では、受信したパケットの数は、バッファ２１０から読み取られたパケットインデックスの数に等しく、これは、ネットワークスイッチ２００のポートの数に等しい。この数は、ネットワークスイッチ２００の基数と呼ばれる。図示した実施形態では、基数は、０以外の整数値Ｎである。実施形態では、読み取りポインタ２１２は、受信したパケットの数だけ増分される。
【００２８】
実施形態では、割り当て論理２３４は、何れのメモリエントリが割り当てられているかを決定するためにマルチプレクサを使用する。他の組み合わせ論理も可能であり、考えられる。図示するように、割り当て論理２３４内のマルチプレクサのデータ入力は、入力されたパケットのペイロードデータを受信する。割り当て論理２３４内のマルチプレクサの選択ラインは、バッファ２１０から取得されたパケットインデックス２１６のデコード値を受信する。デコーダ（図示省略）は、受信したパケットインデックス２１６をデコードして、割り当てられるメモリエントリ２３２を選択する。様々な実施形態では、パケットメモリ２３０は、データ記憶のためにＳＲＡＭを使用する。パケットメモリ２３０に記憶されたパケットのペイロードデータは、メモリエントリ間でシフトしないが、パケットのペイロードデータがネットワークを介した送信のために読み取られるまで、選択されたメモリエントリに残る。
【００２９】
制御キュー２２０は、パケットインデックス２１６を受信し、これらを、制御キュー２２０の利用可能なエントリに記憶する。パケットメモリ２３０とは対照的に、パケットインデックス２１６は、何れのキューエントリが割り当てのために選択されるかを決定しない。実施形態では、パケットメモリ２３０は、受信したパケットのペイロードデータを記憶し、一方、制御キュー２２０は、受信したパケットのメタデータを記憶する。様々な実施形態では、制御キュー２２０は、折り畳み可能なキューである。インオーダバッファ２１０とは対照的に、制御キュー２２０は、割り当て解除のためのキューエントリを必ずしもインオーダで選択するわけではない。代わりに、制御キュー２２０は、任意の所望の順序でパケットを選択する。選択は、優先度レベル、サービス品質（ＱｏＳ）パラメータ、パケットのエイジ等のうち１つ以上に基づいている。いくつかの実施形態では、制御キュー２２０は、ネットワークスイッチ２００のポート毎に１つのスケジューラを含む。したがって、制御キュー２２０は、基数Ｎ（ここで、Ｎは整数）個のスケジューラ２２２を含む。
【００３０】
いくつかの実施形態では、キュー２２０のキューエントリに記憶されたデータは、エイジに従ってインオーダで連続して記憶される。例えば、実施形態では、最も古いパケットのデータは、制御キュー２２０の先頭から開始して配置されている、連続して割り当てられたキューエントリに記憶される。割り当てに利用可能な無効な情報を記憶するキューエントリは、割り当てられたエントリに続いて、制御キュー２２０の末尾に配置される。受信したパケットインデックス２１６は、パケットの送信元及び宛先のクライアント識別子、優先度レベルやＱｏＳパラメータ、パケットのデータサイズ等のうち１つ以上とともに、利用可能なキューエントリに記憶される。いくつかの実施形態では、エイジの指標は、制御キュー２２０のキューエントリに記憶されない。むしろ、いくつかの実施形態では、エイジは、キューエントリの位置によって暗示され、キューの先頭に近いエントリは、キューの末尾に近いエントリよりも古いものである。
【００３１】
１つ以上のスケジューラ２２２が、処理してネットワーク上に送信するためのパケットを選択すると、スケジューラ２２２は、選択されたキューエントリに記憶されているスケジュールされたパケットインデックス２２４を、バッファ２１０及びパケットメモリ２３０の各々に送信する。バッファ２１０は、パケットインデックス２２４を、書き込みポインタ２１４が指すバッファエントリから開始して順にバッファエントリに記憶する。書き込みポインタ２１４は、受信したパケットインデックス２２４の数だけ増分する。フルスループットが達成されている場合、受信したパケットインデックス２２４の数は、ネットワークスイッチ２００の基数Ｎに等しい。
【００３２】
割り当て解除論理２３６は、スケジュールされたパケットインデックス２２４を受信し、対応するメモリエントリを選択する。デコーダ（図示省略）は、割り当て解除するメモリエントリを選択するために、スケジュールされたパケットインデックス２２４をデコードする。実施形態では、割り当て解除論理２３６は、何れのメモリエントリが割り当て解除されているかを決定するためにマルチプレクサを使用する。他の組み合わせ論理も可能であり、考えられる。図示するように、割り当て解除論理２３６内のマルチプレクサのデータ入力は、メモリエントリ内のデータを受信する。割り当て解除論理２３６内のマルチプレクサの選択ラインは、スケジュールされたパケットインデックス２２４のデコード値を受信する。パケットのペイロードデータは、ネットワークスイッチ２００から送信され、ネットワーク上でその宛先にルーティングされる。
【００３３】
パケットがネットワークスイッチ２００によって送受信されると、インターフェース論理（図示省略）が通信プロトコルを管理する。実施形態では、バッファ２１０、制御キュー２２０及びパケットメモリ２３０間のインターフェース（図示省略）は、データを送受信するための１つ以上のバッファを備えるワイヤを含む。実施形態では、パケットがクロックサイクル内で処理されるので、バッファ２１０、制御キュー２２０及びパケットメモリ２３０間で順次素子（sequential elements）は使用されない。したがって、スケジューラ２２２は、制御キュー２２０のキューエントリを選択し、クロックサイクル内で、選択されたキューエントリが割り当て解除され、パケットメモリ２３０内の対応するメモリエントリが割り当て解除され、バッファ２１０内のバッファエントリが更新され、書き込みポインタ２１４が更新される。さらに、クロックサイクル内で、制御キュー２２０は、割り当てられたままのキューエントリをキューの端に向けてシフトし、割り当てられたままのキューエントリが制御キュー２２０内で連続して配置されるようにする。
【００３４】
様々な実施形態では、スケジューラ２２２は、制御キュー２２０内の任意のキューエントリを選択する。したがって、選択されたキューエントリは、スパースなキューエントリである。２つの連続するキューエントリは互いに隣接して配置されるが、２つのスパースなキューエントリの間には１つ以上の他のキューエントリが配置される。したがって、割り当て解除のために選択された２つのスパースなキューエントリの間には、割り当て解除のために選択されていない１つ以上の割り当てられたキューエントリを有する。
【００３５】
フルスループットを維持するために、割り当て解除のために選択されたキューエントリの数は、ネットワークスイッチ２００の基数Ｎに等しい（それ以下である）。一例では、Ｎは４である。このような例では、スケジューラ２２２は、制御キュー２２０内の割り当て解除のために４つのスパースなキューエントリを選択する。制御キュー２２０内の制御論理（図示省略）は、選択されたキューエントリの各々を見つけて、割り当て解除する。単一のクロックサイクル内で、制御論理は、割り当てられたままのキューエントリが連続するように、割り当てられたままのキューエントリを制御キュー２２０の先頭に向けてシフトする。いくつかの実施形態では、制御キュー２２０内の制御論理は、クロックサイクル内で、Ｎ個の２：１のマルチプレクサを介した伝搬遅延と同等の遅延で、折り畳みを実行する。したがって、制御キュー２２０を折り畳む制御論理は拡張可能である。コンポーネント２１０，２２０，２３０は、ネットワークスイッチに関して説明されているが、他の実施形態では、コンポーネント２１０，２２０，２３０のうち１つ以上は、ネットワークスイッチの外部でも使用されることに留意されたい。例えば、いくつかの実施形態では、１つ以上のコンポーネントは、プロセッサコア、通信ファブリック、メモリコントローラ、ＳＯＣ内の別のクライアント等を含む。したがって、図３〜図９に示すさらなる説明は、ネットワークスイッチの外部の回路及びハードウェア／ソフトウェア制御論理にも適用される。
【００３６】
図３を参照すると、折り畳み可能なキューの更新論理３００の一実装形態の一般化されたブロック図が示されている。図示した例では、論理３００とも呼ばれる折り畳み可能なキューの更新論理３００は、スケジューラから受信したシフトベクトル状態３１０を含む。例えば、実施形態では、シフトベクトル状態３１０は、（図２の）スケジューラ２２２等のスケジューラ内の順次素子の出力である。図示した実施形態では、ネットワークスイッチの基数Ｎは、３である。したがって、シフトベクトル状態３１０は、３つのシフトベクトル−ＳＶ０  ３１２、ＳＶ１  ３１４及びＳＶ２  ３１６を含む。図示するように、シフトベクトル状態３１２〜３１６の各々は、６ビットベクトルである。組み合わせ論理３２０は、シフトベクトル状態３１０を受信し、シフトベクトル状態３３２〜３３６を含む変更シフトベクトル状態３３０を生成する。図示するように、シフトベクトル状態３３２は、シフトベクトル状態３１２と同じである。しかしながら、シフトベクトル状態３３４，３３６は、シフトベクトル状態３１４，３１６とは異なる。
【００３７】
組み合わせ論理３５０は、シフトベクトル状態３３０を受信する。さらに、組み合わせ論理３５０は、キュー状態３４０を受信する。キュー状態３４０は、折り畳み可能なキューにおけるキューエントリの出力である。図示した実施形態では、折り畳み可能なキューは、６つのエントリを含む。キューエントリ０はデータ「Ａ」を記憶し、キューエントリ１はデータ「Ｂ」を記憶する。以下同様である。キューエントリ０〜５は、データＡ〜Ｆを記憶する。組み合わせ論理３５０は、受信した入力に基づいて、キュー更新状態値３６０を生成する。実施形態では、キュー更新状態値３６０は、並べ替え後に折り畳み可能なキューに送信され記憶される。様々な実施形態では、外部スケジューラからシフトベクトル状態３１０を受信してから、記憶のためにキュー更新状態値３６０を折り畳み可能なキューに送信するまでの伝搬遅延は、単一のクロックサイクルである。
【００３８】
外部スケジューラは、キューにおいて割り当て解除するキューエントリを選択する。いくつかの実施形態では、これらの外部スケジューラは、ビットの第１のセグメント（各ビットが第１の値を記憶する）及びビットの第２のセグメント（各ビットが第２の値を記憶する）の両方を含むビットベクトルも生成する。様々な実施形態では、第１のセグメントと第２のセグメントとがビットベクトル内で接触する位置が、割り当て解除するために選択されたキューエントリを示す。例えば、シフトベクトルＳＶ０とも呼ばれるシフトベクトル３１２は、６ビットのビットベクトルである。
【００３９】
シフトベクトル３１２の第１のセグメントは、ビット位置０，１に２つのビットを含み、それぞれバイナリ値０を記憶する。シフトベクトル３１２の第２のセグメントは、ビット位置２〜５に４つのビットを含み、それぞれバイナリ値１を記憶する。この例では、シフトベクトル３１２は、キューエントリ２が割り当て解除されることを示している。したがって、データＣを記憶するキューエントリ２が割り当て解除される。シフトベクトル３１４の第１のセグメントは、ビット位置０〜３に４つのビットを含み、それぞれバイナリ値０を記憶する。シフトベクトル３１４の第２のセグメントは、ビット位置４〜５に２つのビットを含み、それぞれバイナリ値１を記憶する。この例では、シフトベクトル３１４は、キューエントリ４が割り当て解除されることを示している。したがって、データＥを記憶するキューエントリ４が割り当て解除される。シフトベクトル３１４は、シフトベクトルＳＶ１とも呼ばれる。同様に、シフトベクトル３１６は、キューエントリ５が割り当て解除されることを示している。したがって、データＦを記憶するキューエントリ５が割り当て解除される。シフトベクトル３１６は、シフトベクトルＳＶ２とも呼ばれる。
【００４０】
図示するように、組み合わせ論理３２０は、シフトベクトル３１２を変更しない。実施形態では、シフトベクトル３３２は、その６ビットベクトル内にシフトベクトル３１２と同じ値を有する。組み合わせ論理３２０は、シフトベクトル３１４を変更する。シフトベクトル３１４は、ＳＶ１とも呼ばれる。シフトベクトル３３４は、｛ＳＶ１｝とも呼ばれる。様々な実施形態では、論理３２０とも呼ばれる組み合わせ論理３２０は、シフトベクトル３１４の各ビット位置を、シフトベクトル３１２に記憶された値に基づく量だけ最下位ビット位置に向けてシフトすることによって、変換シフトベクトル３３４を生成する。例えば、値ＳＶ０［０］はバイナリ０であるため、｛ＳＶ１｝［０］は、ＳＶ１［０］と同じ値、すなわち０を有する。
【００４１】
上記と同様に、値ＳＶ０［１］はバイナリ０であるため、｛ＳＶ１｝［１］は、ＳＶ１［１］と同じ値、すなわち０を有する。上位のビット位置に移動を続けると、値ＳＶ０［２］はバイナリ１であるため、｛ＳＶ１｝［２］は、ＳＶ１［２］ではなくＳＶ１［３］と同じ値を有する。ＳＶ１［３］及び｛ＳＶ１｝［２］の各々の値は０である。したがって、｛ＳＶ１｝［２］は、バイナリ０の値を取得するが、ＳＶ１［０］及びＳＶ１［１］とは異なる条件によるものである。上位のビット位置に移動を続けると、値ＳＶ０［３］はバイナリ１であるため、｛ＳＶ１｝［３］は、ＳＶ１［３］ではなくＳＶ１［４］と同じ値を有する。ＳＶ１［４］の値は１である。したがって、｛ＳＶ１｝［３］は、値１を有する。
【００４２】
さらに上位のビット位置に移動すると、値ＳＶ０［４］はバイナリ１であるため、｛ＳＶ１｝［４］は、ＳＶ１［４］ではなくＳＶ１［５］と同じ値を有する。ＳＶ１［５］の値は１である。したがって、｛ＳＶ１｝［４］は、値１を有する。最後に、値ＳＶ０［５］はバイナリ１であるため、｛ＳＶ１｝［５］は所定の値を有する。いくつかの実施形態では、値は、ＳＶ１［５］と同じである。ＳＶ１［５］の値は１である。したがって、｛ＳＶ１｝［５］は、値１を有する。論理３２０は、同様のステップを実行して、｛ＳＶ２｝とも呼ばれる変換シフトベクトル値３３６を生成する。しかしながら、論理３２０は、ＳＶ０のみではなく、{ＳＶ１｝及びＳＶ０の各々に記憶された値を使用する。したがって、論理３２０は、他の受信ビットベクトル（つまり、ＳＶ０）に記憶された値と、他の変換ビットベクトル（つまり、｛ＳＶ１｝)に記憶された値との両方に基づいて、変換シフトベクトル｛ＳＶ１｝の値を生成する。
【００４３】
いくつかの実施形態では、論理３２０は、以下のステップを使用して、変換シフトベクトル｛ＳＶ２｝を生成する。値｛ＳＶ１｝［０］はバイナリ０であるため、ＳＶ０［１］ではなくＳＶ０［０］がチェックされる。ＳＶ０［０］の値はバイナリ０であるため、｛ＳＶ２｝［０］は、ＳＶ２［０］と同じ値、すなわち０を有する。次に、値｛ＳＶ１｝［１］はバイナリ０であるため、ＳＶ０［２］ではなくＳＶ０［１］がチェックされる。ＳＶ０［１］の値はバイナリ０であるため、｛ＳＶ２｝［１］は、ＳＶ２［１］と同じ値、すなわち０を有する。次いで、値｛ＳＶ１｝［２］はバイナリ０であるため、ＳＶ０［３］ではなくＳＶ０［２］がチェックされる。ＳＶ０［２］の値はバイナリ１であるため、｛ＳＶ２｝［２］は、ＳＶ２［２］の値ではなくＳＶ２［３］と同じ値、すなわち０を有する。同様に、｛ＳＶ２｝［３：５］の値が生成される。
【００４４】
上述したように、｛ＳＶ１｝［０：５］であるシフトベクトル３１４を生成する場合、各ビット位置には、ＳＶ１［０：５］と同じビット位置の値が割り当てられるか、同じビット位置に記憶されたＳＶ０［０：５］の対応する値に基づいて、１つ増分されたビット位置の値が割り当てられる。｛ＳＶ２｝［０：５］であるシフトベクトル３１６を生成する場合、各ビット位置には、ＳＶ２［０：５］と同じビット位置の値が割り当てられるか、｛ＳＶ１}［０：５］及びＳＶ０［０：５］の対応する値に基づいて、次の２つ増分されたビット位置のうち１つの値が割り当てられる。
【００４５】
論理３５０は、変換ビットベクトル値３３０を受信し、上記と同様に、キュー状態３４０の値の位置を変換する。結果は、キュー更新状態値３６０として示される。図示するように、キューエントリ２，４，５は割り当て解除されており、キューエントリが折り畳まれている。キューエントリに示されるバックスラッシュ「／」は、割り当てに利用可能なキューエントリを示す。
【００４６】
図４を参照すると、変換ビットベクトル論理４００の一実施形態の一般化されたブロック図が示されている。変換ビットベクトル論理４００は、論理４００とも呼ばれる。実施形態では、論理４００は、（図３の）論理３２０として使用される。図示するように、マルチプレクサ４１０Ａ〜４１０Ｆは、データ入力ライン４０２Ａ〜４０２Ｆ上でビットベクトルＳＶ１［０：５］を受信する。マルチプレクサ４１０Ａ〜４１０Ｆは、選択入力ライン４１２Ａ〜４１２Ｆ上で異なるビットベクトルＳＶ０［０：５］を受信する。マルチプレクサ４１０Ａ〜４１０Ｆは、変換ビットベクトル｛ＳＶ１｝［０：５］を出力ライン４２０Ａ〜４２０Ｆに提供する。
【００４７】
図示するように、マルチプレクサ４４０Ａ〜４４０Ｆは、データ入力ライン４３２Ａ〜４３２Ｆ上でビットベクトルＳＶ２［０：５］を受信する。マルチプレクサ４１０Ａ〜４１０Ｆは、選択入力ライン４４２Ａ〜４４２Ｆ上で異なるビットベクトルＳＶ０［０：５］を受信する。マルチプレクサ４４０Ａ〜４４０Ｆは、中間ビットベクトルを出力ライン４５０Ａ〜４５０Ｆに提供し、中間ビットベクトルは、データ入力としてマルチプレクサ４６０Ａ〜４６０Ｆに送信される。マルチプレクサ４６０Ａ〜４６０Ｆは、選択入力ライン４６２Ａ〜４６２Ｆ上で変換ビットベクトル｛ＳＶ１｝［０：５］を受信する。マルチプレクサ４６０Ａ〜４６０Ｆは、変換ビットベクトル｛ＳＶ２｝［０：５］を出力ライン４７０Ａ〜４７０Ｆに提供する。
【００４８】
図５を参照すると、変換キューエントリ論理５００の一実施形態の一般化されたブロック図が示されている。変換キューエントリ論理５００は、論理５００とも呼ばれる。実施形態では、論理５００は、（図３の）論理３５０として使用される。図示するように、マルチプレクサ５１０Ａ〜５１０Ｆは、キューエントリに記憶されたデータＡ〜Ｆの各々からのビットを含むビットベクトルを受信する。データＡ〜Ｆのデータサイズは、キューに記憶された様々なデータサイズのうち１つであってもよい。実施形態では、キューエントリに記憶されたビット毎に論理５００が複製されるため、実際のビット位置が示されていない。データＡ〜Ｆの各々からのビットは、データ入力ライン５０２Ａ〜５０２Ｆ上で受信される。マルチプレクサ５１０Ａ〜５１０Ｆは、選択入力ライン５１２Ａ〜５１２Ｆ上でビットベクトルＳＶ０［０：５］を受信する。マルチプレクサ５１０Ａ〜５１０Ｆは、中間ビットベクトルを出力ライン５２０Ａ〜５２０Ｆに提供し、中間ビットベクトルは、データ入力としてマルチプレクサ５３０Ａ〜５３０Ｆに送信される。
【００４９】
マルチプレクサ５３０Ａ〜５３０Ｆは、選択入力ライン５３２Ａ〜５３２Ｆ上で変換ビットベクトル｛ＳＶ１｝［０：５］を受信する。マルチプレクサ５３０Ａ〜５３０Ｆは、中間ビットベクトルを出力ライン５４０Ａ〜５４０Ｆに提供し、中間ビットベクトルは、データ入力としてマルチプレクサ５５０Ａ〜５５０Ｆに送信される。マルチプレクサ５５０Ａ〜５５０Ｆは、選択入力ライン５５２Ａ〜５５２Ｆ上で変換ビットベクトル｛ＳＶ２｝［０：５］を受信する。マルチプレクサ５５０Ａ〜５５０Ｆは、変換ビットベクトル｛Ａ｝〜｛Ｆ｝を出力ライン５６０Ａ〜５６０Ｆに提供する。
【００５０】
図６を参照すると、ネットワークオンチップスイッチのスループットを管理する方法６００の一実施形態が示されている。説明のために、本実施形態（及び、図７〜図８）のステップを順番に示す。しかしながら、記載された方法の様々な実施形態では、記載された要素のうち１つ以上が、同時に実行されてもよいし、図示した順序と異なる順序で実行されてもよいし、完全に省略されてもよいことに留意されたい。必要に応じて、他の追加の要素も実行される。本明細書に記載された様々なシステム又は装置の何れも方法６００を実施するように構成されている。
【００５１】
様々な実施形態では、通信ファブリックは、１つ以上のクライアントと１つ以上のメモリコントローラとの間でトラフィックを転送する。様々な実施形態では、通信ファブリックは、要求及び応答をキューイングし、制御パラメータを記憶するための状態レジスタ、制御レジスタ及び他の記憶要素を含む。様々な実施形態では、通信ファブリックは、１つ以上の通信及びネットワークプロトコルに従い、１つ以上のバス上で送信元と宛先との間のトラフィックを効率的にルーティングするための制御論理を含む。トラフィックを効率的にルーティングするために、様々な実施形態では、通信ファブリックは、複数のネットワークオンチップ（ＮｏＣ）スイッチも使用する。
【００５２】
ＮｏＣスイッチは、データを受信する（ブロック６０２）。様々な実施形態では、受信したデータは、ネットワークメッセージである。いくつかの実施形態では、ファブリックは、ポイントツーポイント（Ｐ２Ｐ）リングトポロジでＮｏＣスイッチを使用する。他の実施形態では、通信ファブリックは、クラスタートポロジでプログラム可能なルーティングテーブルとともにＮｏＣスイッチを使用する。さらに他の実施形態では、通信ファブリックは、トポロジの組み合わせにおいてＮｏＣスイッチを使用する。ＮｏＣスイッチは、メモリアドレスを取得するためにアクセスされるバッファを含む（ブロック６０４）。いくつかの実施形態では、バッファは、インオーダ循環バッファである。
【００５３】
パケットのペイロードデータ等の受信したデータの一部は、取得されたメモリアドレスが指すメモリのエントリに記憶される（ブロック６０６）。受信したデータ（すなわち、ネットワークメッセージ）のメモリアドレス及び指標は、キューのキューエントリに記憶される（ブロック６０８）。メモリからネットワーク上に送信されるメッセージが選択される（ブロック６１０）。いくつかの実施形態では、クロックサイクル内で、選択されたメッセージの指標を記憶するキューエントリが割り当て解除される（ブロック６１２）。クロックサイクル内で、割り当てられたままのキューエントリは、割り当てられたままのキューエントリがキューにおいて連続して配置されるように、キューの端に向けてシフトされる（ブロック６１４）。
【００５４】
図７を参照すると、キューを折り畳むためのシフト量を決定する方法７００の一実施形態が示されている。受信したメッセージのメモリアドレス及び指標は、キューのキューエントリに記憶される（ブロック７０２）。ネットワーク上に送信されるメッセージが選択される（ブロック７０４）。ビットベクトルが生成される（ブロック７０６）。様々な実施形態では、生成されたビットベクトルは、選択されたメッセージの指標を記憶するキューエントリを識別する。第１のビットベクトル以外のビットベクトルが選択される（ブロック７０８）。上述した例を参照すると、ビットベクトルＳＶ０［０：５］は、後の変換のために選択されていない。
【００５５】
他の生成されたビットベクトルに記憶された値に基づいてシフト量が決定される（ブロック７１０）。例えば、ビットベクトルＳＶ０［０：５］は、（図４の）論理４００で先に示したように、マルチプレクサの選択ラインに送信される。また、シフト量は、１つ以上の他の変換ビットベクトルに記憶された値に基づいて決定される（ブロック７１２）。例えば、変換ビットベクトル｛ＳＶ０｝［０：５］が、（図４の）論理４００で先に示したように、マルチプレクサの選択ラインに送信される。選択されたビットベクトルに対して変換ビットベクトルが生成される（ブロック７１４）。
【００５６】
様々な実施形態では、変換ビットベクトルは、選択されたビットベクトルの各ビット位置を、決定された量だけ最下位ビット位置に向けてシフトすることによって生成される。他の実施形態では、値は、ビット位置毎に、最上位ビット位置に向けてシフトされる。最後のベクトルに到達していない場合（条件付きブロック７１６：「いいえ」）、方法７００の制御フローは、ブロック７０８に戻り、第１のベクトル以外のベクトルが選択される。最後のベクトルに到達した場合（条件付きブロック７１６：「はい」）、変換ビットベクトルの生成が完了する（ブロック７１８）。いくつかの実施形態では、変換ビットベクトルの生成は、単一のクロックサイクル内で実行される。
【００５７】
図８を参照すると、キューを折り畳む方法８００の一実施形態が示されている。受信したネットワークメッセージの指標を記憶するキュー内のキューエントリが選択される（ブロック８０２）。キュー内のキューエントリの位置と等しいビット位置が選択される（ブロック８０４）。シフト量は、変換ビットベクトルの各々における選択されたビット位置に記憶された値に基づいて決定される（ブロック８０６）。例えば、（図５の）論理５００は、キューエントリに記憶されたデータのビットをシフトするためのビット位置の数を決定するために、マルチプレクサの選択ライン上で、変更されていないビットベクトルと、１つ以上の変換ビットベクトルと、を受信する。使用する変換ビットベクトルの数は、ネットワークスイッチの基数に基づいており、基数は、キューから割り当て解除するキューエントリの最大数である。
【００５８】
選択されたキューエントリの内容は、決定された量だけキューの端に向けてシフトされる（ブロック８０８）。最後のキューエントリに到達していない場合（条件付きブロック８１０：「いいえ」）、方法８００の制御フローは、ブロック８０２に戻り、別のキューエントリが選択される。最後のキューエントリに到達している場合（条件付きブロック８１０：「はい」）、キューの折り畳みが完了する（ブロック８１２）。いくつかの実施形態では、キューの折り畳みは、単一のクロックサイクル内で実行される。
【００５９】
図９を参照すると、折り畳み可能なキューの更新論理９００の別の実施形態の一般化されたブロック図が示されている。図示するように、基数は、前述した例の３ではなく、４である。ビットベクトル９０２〜９０８は、外部スケジューラの順次素子から受信される。論理９１０〜９１４は、（図４の）論理４００について先に示したのと同じタイプの多重化選択論理を、分散された態様で示す。例えば、論理９１０は、ビットベクトル９０４を変換するために使用される。ビットベクトルＳＶ０［０：１５］の論理ハイ値によるビットベクトル９０４からその変換ビットベクトルへの遷移は、ビットベクトル９０４において矢印記号「−＞」で示されている。マルチプレクサの選択ライン上の論理ハイ値による同様の遷移は、ビットベクトル９０６，９０８で示されている。
【００６０】
外部制御キューの初期状態は、状態９２０に示されている。キューの折り畳みをもたらす中間変換は、中間結果９２２〜９２６に示されている。中間結果９２２〜９２６間のマルチプレクサは、（図５の）論理５００について先に示したのと同じタイプの多重化選択論理を、分散された態様で示している。制御キューの最終状態は、状態９２８に示されている。状態９２８に記憶された値は、外部制御キュー内の順次素子に送信される。図示するように、中間結果９２２〜９２６は、ビットベクトル９０４〜９０８が変換される際に同時に生成される。様々な実施形態では、キューの折り畳みは、クロックサイクル内で、Ｎ個の２：１のマルチプレクサを介した伝搬遅延と同等の遅延で発生する。ここで、Ｎは、ネットワークスイッチの基数に等しい０以外の整数である。したがって、キューを折り畳むための制御論理は、拡張可能である。
【００６１】
様々な実施形態では、ソフトウェアアプリケーションのプログラム命令を使用して、上述した方法及び／又はメカニズムを実施する。プログラム命令は、Ｃ言語等の高水準プログラミング言語でハードウェアの挙動を記述する。或いは、Ｖｅｒｉｌｏｇ等のハードウェア設計言語（ＨＤＬ）が使用される。プログラム命令は、非一時的なコンピュータ可読記憶媒体に記憶される。多くのタイプの記憶媒体が利用可能である。記憶媒体は、使用中コンピューティングシステムによってアクセス可能であり、プログラム命令及び付随するデータをプログラム実行のためにコンピューティングシステムに提供する。コンピューティングシステムは、１つ以上のメモリと、プログラム命令を実行するための１つ以上のプロセッサと、を含む。上記の実施形態は、実施形態の非限定的な例に過ぎないことを強調しておきたい。上記の開示が十分に理解されれば、多くの変形及び変更が当業者に明らかになるであろう。以下の特許請求の範囲は、このような変形及び変更の全てを包含するように解釈されることが意図される。
【図１】
2021521529.tif 000003
【図２】
2021521529.tif 000004
【図３】
2021521529.tif 000005
【図４】
2021521529.tif 000006
【図５】
2021521529.tif 000007
【図６】
2021521529.tif 000008
【図７】
2021521529.tif 000009
【図８】
2021521529.tif 000010
【図９】
2021521529.tif 000011
【国際調査報告】
2021521529.tif 000012
2021521529.tif 000013
2021521529.tif 000014