(57)【特許請求の範囲】
【請求項１】
複数のスレッドを同時に取り扱うことが可能な構成可能処理回路であって、
スレッドデータストアと、
複数の構成可能実行ユニットと、
前記スレッドデータストアを前記実行ユニットに接続する構成可能ルーティングネットワークと、
構成インスタンスを記憶し、該構成インスタンスのそれぞれがルーティングネットワークの構成及び前記複数の実行ユニットのうち１つ以上の構成を規定している、構成データストアと、
前記実行ユニット、前記ルーティングネットワーク及び前記スレッドデータストアから形成されるとともに複数のパイプラインセクションを備え、該複数のパイプラインセクションが、各クロックサイクルにおいて各スレッドが一つのパイプラインセクションから次のパイプラインセクションに伝播するように構成されている、パイプラインとを備え、
（ｉ）各スレッドを構成インスタンスと関連付け、
（ｉｉ）各クロックサイクルにおいて、前記複数のパイプラインセクションのそれぞれを、そのクロックサイクル中にそのパイプラインセクション内を伝播する各スレッドと関連付けられた構成インスタンスに従うように構成し、
（ｉｉｉ）前記スレッドデータストア内のどの位置から読み出すか、及び、前記スレッドデータストア内のどの位置に前記実行ユニットが書き込むかを、前記構成インスタンスに基づき選択するように構成された回路。
【請求項２】
各構成インスタンスを構成識別子と関連付けるように構成された、請求項１に記載の構成可能処理回路。
【請求項３】
スレッドと関連付けられた構成識別子を、該スレッドと協調して前記パイプライン内を伝播させるように構成された、請求項２に記載の構成可能処理回路。
【請求項４】
前記構成データストアが、複数のメモリを備え、
前記構成インスタンスを前記複数のメモリに亘って分割して、各メモリが特定のパイプラインセクションに適用可能な前記構成インスタンスの部分を記憶するように構成された、請求項１〜３のいずれか一項に記載の構成可能処理回路。
【請求項５】
各パイプラインセクションが、それに適用可能な前記構成インスタンスの部分を記憶する前記メモリにアクセスすることにより構成インスタンスにアクセスするように構成されている、請求項４に記載の構成可能処理回路。
【請求項６】
前記パイプラインの各セクションが、スレッドと関連付けられた前記構成識別子を使用して、前記構成データストア内のそのスレッドと関連付けられた前記構成インスタンスにアクセスするように構成されている、請求項２、３、請求項２に従属する請求項４又は５のいずれか一項に記載の構成可能処理回路。
【請求項７】
前記複数のスレッドが独立している、請求項１〜６のいずれか一項に記載の構成可能処理回路。
【請求項８】
２つ以上のスレッドを同一の構成識別子と関連付けるように構成された、請求項１〜７のいずれか一項に記載の構成可能処理回路。
【請求項９】
前記構成可能ルーティングネットワークが、複数のネットワーク入力及び複数のネットワーク出力を備え、各ネットワーク入力をネットワーク出力に接続するように構成可能である、請求項１〜８のいずれか一項に記載の構成可能処理回路。
【請求項１０】
前記構成可能ルーティングネットワークが、任意のネットワーク入力を任意のネットワーク出力に接続することが可能である、請求項９に記載の構成可能処理回路。
【請求項１１】
前記構成可能ルーティングネットワークが、任意のネットワーク入力を前記ネットワーク出力のうちの任意の１つ以上に接続することが可能である、請求項９又は１０に記載の構成可能処理回路。
【請求項１２】
前記構成可能ルーティングネットワークの出力が、前記実行ユニットの入力に接続されている、請求項１〜１１のいずれか一項に記載の構成可能処理回路。
【請求項１３】
前記構成可能ルーティングネットワークが、マルチステージスイッチを備える、請求項１〜１２のいずれか一項に記載の構成可能処理回路。
【請求項１４】
前記マルチステージスイッチが、各ステージに１つ以上のスイッチを備え、各スイッチが、複数のスイッチ入力及び複数のスイッチ出力を有し、各スイッチ入力をスイッチ出力に接続するように構成可能である、請求項１３に記載の構成可能処理回路。
【請求項１５】
前記マルチステージスイッチの各ステージにおけるスイッチが、同じ数のスイッチ入力及びスイッチ出力を備える、請求項１４に記載の構成可能処理回路。
【請求項１６】
前記マルチステージスイッチの１つのステージに備えられた前記スイッチが、他のステージに備えられた前記スイッチとは異なる数のスイッチ入力及びスイッチ出力を備える、請求項１４に記載の構成可能処理回路。
【請求項１７】
１つのパイプラインセクションが、前記マルチステージスイッチの１つ以上のステージに備えられた前記スイッチから形成されている、請求項１３〜１６のいずれか一項に記載の構成可能処理回路。
【請求項１８】
前記マルチステージスイッチの内側ステージにおけるスイッチから形成されたパイプラインセクションが、該マルチステージスイッチにおける、前記マルチステージスイッチの外側ステージに備えられたスイッチから形成されたパイプラインセクションとは異なる数のステージからのスイッチを備える、請求項１７に記載の構成可能処理回路。
【請求項１９】
前記構成可能ルーティングネットワークが、Ｃｌｏｓネットワークを備える、請求項１〜１８のいずれか一項に記載の構成可能処理回路。
【請求項２０】
前記構成可能ルーティングネットワークが、１つ以上のクロスバースイッチを備える、請求項１〜１９のいずれか一項に記載の構成可能処理回路。
【請求項２１】
前記構成可能ルーティングネットワークが、非ブロッキングである、請求項１〜２０のいずれか一項に記載の構成可能処理回路。
【請求項２２】
前記構成可能ルーティングネットワークが、完全に構成可能である、請求項１〜２１のいずれか一項に記載の構成可能処理回路。
【請求項２３】
前記構成可能ルーティングネットワークが、部分的に構成可能である、請求項１〜２１のいずれか一項に記載の構成可能処理回路。
【請求項２４】
各実行ユニットのために専用のオンチップメモリを備える、請求項１〜２３のいずれか一項に記載の構成可能処理回路。
【請求項２５】
前記スレッドデータストア内に記憶されたデータが有効であることをチェックするチェックユニットを備える、請求項１〜２４のいずれか一項に記載の構成可能処理回路。
【請求項２６】
前記スレッドデータストア内の位置が、２つの有効ビットと関連付けられている、請求項１〜２５のいずれか一項に記載の構成可能処理回路。
【請求項２７】
前記構成可能ルーティングネットワークが、前記スレッドデータストアから読み出されたデータを運ぶためのマルチプルビットワイドであるデータ経路を備える、請求項１〜２６のいずれか一項に記載の構成可能処理回路。
【請求項２８】
２つの構成可能ルーティングネットワークを備え、前記構成可能ルーティングネットワークの一方が、他方よりも広いデータ経路を備える、請求項１〜２７のいずれか一項に記載の構成可能処理回路。
【請求項２９】
フラクチャブル実行ユニットを備える、請求項１〜２８のいずれか一項に記載の構成可能処理回路。
【請求項３０】
動的再構成が可能な、請求項１〜２９のいずれか一項に記載の構成可能処理回路。
【請求項３１】
スレッドデータストアと、複数の構成可能実行ユニットと、前記スレッドデータストアを前記実行ユニットに接続する構成可能ルーティングネットワークと、前記実行ユニット、前記ルーティングネットワーク及び前記スレッドデータストアから形成され、複数のパイプラインセクションを備えるパイプラインとを備える構成可能処理回路において、複数のスレッドを同時に取り扱う方法であって、
各スレッドを、前記ルーティングネットワークの構成と、前記複数の実行ユニットのうちの１つ以上の構成と、前記データストア内のどの位置から読み出すか、及び、前記データストア内のどの位置に前記実行ユニットが書き込むかと、を規定する構成インスタンスと関連付けることと、
各クロックサイクルで、各スレッドを、一つのパイプラインセクションから次のパイプラインセクションに伝播させることと、
各クロックサイクルにおいて、前記複数のパイプラインセクションのそれぞれを、そのクロックサイクル中にそのパイプラインセクション内を伝播する各スレッドと関連付けられた前記構成インスタンスに応じるように構成することと
を含む方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、集積回路のためのプロセッサデザインに関する。
【背景技術】
【０００２】
集積回路は、典型的に、インターコネクト回路により互いに接続された多数の機能ユニットを備える。機能ユニット及びインターコネクト回路が構成可能な場合もある。これは、機能ユニットを、特定の挙動を採用するようにプログラムできるとともに、インターコネクト回路を、回路の異なる部分を接続するようにプログラムできることを意味する。構成可能回路の良く知られた例が、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）であり、これは、幅広い範囲の異なる機能を実施するようにユーザがプログラムできるものである。構成可能集積回路の他の例が、特許文献１，２及び３に記載されている。
【０００３】
多くの構成可能回路には、速度と柔軟性との間にトレードオフが存在する。柔軟性を最大化するためには、できるだけ多くの異なる組み合わせの機能ユニットを互いに接続できることが望ましい。これは、実行ユニットがチップ上において離間している場合には、長いインターコネクト経路が必要となる。一般に、集積回路は、１回のクロック周期で行える最も長い動作よりも速くクロックさせることはできない。多くの場合、インターコネクトが原因の遅延は、機能ユニットが原因の遅延よりも影響が大きいため、データを長いインターコネクト経路を介して伝送するのに要する時間は、最終的に回路全体のクロック速度を制限しうる制約となる。
【０００４】
集積回路における時間の遅延に対して上限を設ける選択肢の一つとしては、１回のクロック周期に横断する全てのインターコネクト経路の長さを制限することがある。これは、データが集積回路内を移動する際にそのデータにパイプライン処理を施すことによって実現できる。一例が特許文献４に記載されており、この例では、インターコネクトネットワーク内のスイッチセルへの入力が、そのインターコネクトネットワーク内をデータが送られる際にそのデータにパイプライン処理を施すラッチを有する。この手法の問題は、必要なラッチを組み込むために、ユーザのデザインを修正する必要がある場合があることである。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第７，２７６，９３３号明細書
【特許文献２】米国特許第８，４９３，０９０号明細書
【特許文献３】米国特許第６，２８２，６２７号明細書
【特許文献４】米国特許第６，９４０，３０８号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従って、改良された柔軟な処理回路の要求がある。
【課題を解決するための手段】
【０００７】
一実施例によれば、複数のスレッドを同時に取り扱うことが可能な構成可能処理回路であって、スレッドデータストアと、複数の構成可能実行ユニットと、スレッドデータストア内の位置を実行ユニットに接続する構成可能ルーティングネットワークと、構成インスタンスを記憶し、該構成インスタンスのそれぞれがルーティングネットワークの構成及び複数の実行ユニットのうち１つ以上の構成を規定している、構成データストアと、実行ユニット、ルーティングネットワーク及びスレッドデータストアから形成されるとともに複数のパイプラインセクションを備え、それら複数のパイプラインセクションが、各クロックサイクルにおいて各スレッドが一つのパイプラインセクションから次のパイプラインセクションに伝播するように構成されている、パイプラインとを備え、（ｉ）各スレッドを構成インスタンスと関連付け、（ｉｉ）各クロックサイクルに対して、複数のパイプラインセクションのそれぞれを、そのクロックサイクル中にそのパイプラインセクション内を伝播する各スレッドと関連付けられた構成インスタンスに従うように構成するように構成された回路が提供される。
【０００８】
回路は、各構成インスタンスを構成識別子と関連付けるように構成されてもよい。
【０００９】
回路は、スレッドと関連付けられた構成識別子を、そのスレッドと協調してパイプライン内を伝播させるように構成されてもよい。
【００１０】
構成データストアは、複数のメモリを備えてもよく、回路は、構成インスタンスを複数のメモリに亘って分割して、各メモリが特定のパイプラインセクションに適用可能な構成インスタンスの部分を記憶するように構成されてもよい。
【００１１】
各パイプラインセクションは、それに適用可能な構成インスタンスの部分を記憶するメモリにアクセスすることにより構成インスタンスにアクセスするように構成されてもよい。
【００１２】
パイプラインの各セクションは、スレッドと関連付けられた構成識別子を使用して、構成データストア内のそのスレッドと関連付けられた構成インスタンスにアクセスするように構成されてもよい。
【００１３】
複数のスレッドは独立していてもよい。
【００１４】
回路は、２つ以上のスレッドを同一の構成識別子と関連付けるように構成されてもよい。
【００１５】
回路は、スレッドが回路内の第２の後続の経路とは異なる回路内の一経路上の構成に追従できるように、そのスレッドと関連付けられた構成識別子を変更することが可能であってもよい。
【００１６】
回路は、スレッドと関連付けられた入力に対して動作を行う際に、実行ユニットの１つにより生成された出力に基づき構成識別子を変更するように構成されてもよい。
【００１７】
構成可能ルーティングネットワークは、複数のネットワーク入力及び複数のネットワーク出力を備えてもよく、各ネットワーク入力をネットワーク出力に接続するように構成可能であってもよい。
【００１８】
構成可能ルーティングネットワークは、任意のネットワーク入力を任意のネットワーク出力に接続することが可能であってもよい。
【００１９】
構成可能ルーティングネットワークは、任意のネットワーク入力をネットワーク出力のうちの任意の１つ以上に接続することが可能であってもよい。
【００２０】
構成可能ルーティングネットワークの出力は、実行ユニットの入力に接続されていてもよい。
【００２１】
構成可能ルーティングネットワークは、マルチステージスイッチを備えてもよい。
【００２２】
マルチステージスイッチは、各ステージに１つ以上のスイッチを備えてもよく、各スイッチは、複数のスイッチ入力及び複数のスイッチ出力を有し、各スイッチ入力をスイッチ出力に接続するように構成可能であってもよい。
【００２３】
マルチステージスイッチの各ステージにおけるスイッチは、同じ数のスイッチ入力及びスイッチ出力を備えてもよい。
【００２４】
マルチステージスイッチの１つのステージに備えられたスイッチは、他のステージに備えられたスイッチとは異なる数のスイッチ入力及びスイッチ出力を備えてもよい。
【００２５】
パイプラインセクションが、マルチステージスイッチの１つ以上のステージに備えらえたスイッチから形成されていてもよい。
【００２６】
マルチステージスイッチの内側ステージにおけるスイッチから形成されたパイプラインセクションが、そのマルチステージスイッチにおける、マルチステージスイッチの外側ステージに備えられたスイッチから形成されたパイプラインセクションとは異なる数のステージからのスイッチを備えてもよい。
【００２７】
構成可能ルーティングネットワークは、Ｃｌｏｓネットワークを備えてもよい。
【００２８】
構成可能ルーティングネットワークは、１つ以上のクロスバースイッチを備えてもよい。
【００２９】
構成可能ルーティングネットワークは、非ブロッキングであってもよい。
【００３０】
構成可能ルーティングネットワークは、完全に構成可能であってもよい。
【００３１】
構成可能ルーティングネットワークは、部分的に構成可能であってもよい。
【００３２】
回路は、各実行ユニットのために専用のオンチップメモリを備えてもよい。
【００３３】
回路は、スレッドデータストア内に記憶されたデータが有効であることをチェックするチェックユニットを備えてもよい。
【００３４】
チェックユニットは、無効データを認識すると、実行ユニットがスレッドデータストアに書き込みを行うのを一旦停止するように構成されてもよく、且つ／又は、それらが無効データを読み出したスレッドに対して動作しているときに、メモリアクセス動作を実行してもよい。
【００３５】
回路は、無効データを読み出したスレッドを、回路内のその次の経路上での同じ状態と関連付けるように構成されてもよい。
【００３６】
スレッドデータストア内の位置は、２つの有効ビットと関連付けられていてもよい。
【００３７】
構成可能ルーティングネットワークは、スレッドデータストアから読み出されたデータを運ぶためのマルチプルビットワイドであるデータ経路を備えてもよい。
【００３８】
回路は、２つの構成可能ルーティングネットワークを備えてもよく、構成可能ルーティングネットワークの一方が、他方よりも広いデータ経路を備えてもよい。
【００３９】
回路は、フラクチャブル実行ユニットを備えてもよい。
【００４０】
回路は、入力を交換可能に構成された実行ユニットを備えてもよい。構成可能ルーティングネットワークは、スレッドデータストアを、実行ユニットを交換可能な入力と、実行ユニットを交換不可能な入力とに接続するように構成されてもよく、構成可能ルーティングネットワークの最外側のステージが、スレッドデータストアを実行ユニットを交換可能な入力に接続するように構成された第１の数のスイッチと、スレッドデータストアを実行ユニットを交換不可能な入力に接続するように構成された第２の数のスイッチとを備えてもよく、第１の数が、接続された入力１つ当たりで、第２の数よりも少なくてもよい。
【００４１】
回路は、動的再構成が可能であってもよい。
【００４２】
本発明の第２実施例によれば、スレッドデータストアと、複数の構成可能実行ユニットと、スレッドデータストアを実行ユニットに接続する構成可能ルーティングネットワークと、実行ユニット、ルーティングネットワーク及びスレッドデータストアから形成され、複数のパイプラインセクションを備えるパイプラインとを備える構成可能処理回路において、複数のスレッドを同時に取り扱う方法であって、各スレッドを、ルーティングネットワークの構成及び複数の実行ユニットのうちの１つ以上の構成を規定する構成インスタンスと関連付けることと、各クロックサイクルにおいて、各スレッドを、一つのパイプラインセクションから次のパイプラインセクションに伝播させることと、各クロックサイクルにおいて、複数のパイプラインセクションのそれぞれを、そのクロックサイクル中にそのパイプラインセクション内を伝播する各スレッドと関連付けられた構成インスタンスに応じるように構成することとを含む方法が提供される。
【００４３】
以下、本発明を、添付の図面を参照して例を用いて説明する。
【図面の簡単な説明】
【００４４】
【図１】構成可能処理回路の一例を示す。
【図２】ルーティングネットワークの一例を示す。
【図３】クロスバースイッチの一例を示す。
【図４】実行ユニットの一例を示す。
【図５】加算器として構成された実行ユニットの一例を示す。
【図６】パイプライン化ＡＬＵとして構成された実行ユニットの一例を示す。
【図７】長レイテンシ実行ユニットの一例を示す。
【図８】スレッド用の構成インスタンス識別子を設定する実行ユニットの一例を示す。
【図９】フラクチャブル実行ユニットの一例を示す。
【図１０】最適化ルックアップテーブルの２つの例を示す。
【発明を実施するための形態】
【００４５】
構成可能処理回路は、好ましくは、複数のスレッドを同時に取り扱うことが可能である。回路は、スレッドデータストアと、１つ以上の構成可能ルーティングネットワークと、幾つかの構成可能実行ユニットとを備える。データストアからの値が読み出され、そしてルーティングネットワークを介して実行ユニットに送られる。実行ユニットは、これらの値に対して動作を行い、それらの出力から新しい値を送達する。実行ユニットの出力は、データストアに書き戻される。
【００４６】
回路は、パイプラインも備える。パイプラインは、データストア、ルーティングネットワーク及び実行ユニットから形成される。これは、複数のパイプラインセクションを備え、各クロックサイクルにおいて各スレッドが一つのパイプラインセクションから次のパイプラインセクションに伝播するようになっている。回路は、好ましくは、パイプラインセクションがその時点で取り扱うスレッドに各クロックサイクルが適合するようそれらのパイプラインセクションを構成するように配置される。スレッドの構成は、そのスレッドで回路「内をクロックして」各スレッドのデータが処理回路内のそれ自体の特定の経路に向かうようになっているものとして考えることができる。
【００４７】
回路は、複数の構成インスタンスを保持するオンチップメモリも備える。回路は、データストア内のどの位置から読み出すか、及び、データストア内のどの位置に実行ユニットが書き込むかを、構成インスタンスに基づき選択する。また回路は、ルーティングネットワークを介して得られたルートを設定し、構成インスタンスを用いて実行ユニットの挙動を制御するように構成されている。各構成インスタンスは、構成インスタンス識別子により独自に参照することができる。回路は、スレッドを特定の構成インスタンス識別子と関連付けることにより、どの構成インスタンスをそのスレッドに対して使用するかを選択するように構成してもよい。
【００４８】
ＧＰＵ（グラフィック処理ユニット）の出現により、プログラマーは、互いに対する相互作用が低い多数のスレッドを使用して計算問題を解くのが習慣になっている。これらの概ね独立したスレッドは、本明細書に記載のマルチスレッド化された再構成可能プロセッサにより処理されるのに理想的に適している。ＧＰＵは、多くの場合複数の同一のプロセッサから構築され、ホモジニアスコンピューティングと称される。ＧＰＵとは異なり、本明細書に記載の回路は、複数の異なる実行ユニットを可能とし、ヘテロジニアスコンピューティングの一形態である。回路の特定のインスタンスにおける実行ユニットの数及び能力は、特定のクラスの問題に適合するように選択できる。これにより、ＧＰＵと比較して、任意の所定のタスクをより効率的に実装できるようになる。
【実施例】
【００４９】
回路の概説
構成可能処理回路の一例を図１に示す。この回路は、構成可能ルーティングネットワーク（この例では、２つのルーティングネットワーク１１１，１１２として実装される）を備える。回路は、幾つかの構成可能実行ユニット（１１５，１１６）も含む。回路は、パイプライン化されており、図において点線１０２により表されている。図示の例において、パイプラインは、図の下側に沿って数字で示すように、８つのステージから構成される。パイプラインセクション間の境界は、最大クロック速度に対応できるように、いずれかのパイプラインセクションにおいて要する最長時間を制限するよう適切に選択される。
【００５０】
以下の説明は、パイプラインを介したスレッドの伝播を発動するのが立ち上がりクロックエッジであることを前提としている。これが例示のみのためのものであり立ち下がりクロックエッジも同様に使用してもよいことは理解すべきである。同様に、立ち上がりエッジ及び立ち下がりエッジの混合をパイプライン全体に使用してもよい。各パイプラインステージは、それ自体のクロックを有してもよい（ただし、それらのクロックは、全てのパイプラインステージにおいてクロックエッジが同時に起こるように同期される）。
【００５１】
回路は、複数のスレッドを同時に取り扱うように構成されている。ハードウェアにおけるスレッドは一般に、他のスレッドから独立して実行される一連のアクションであると考えられる。また、スレッドは、そのスレッドに対してのみ利用可能な何らかの状態を有することが多い。スレッドは通常、プロセス内に含まれる。プロセスは、複数のスレッドを含みうる。同じプロセス内に存在するスレッドは、メモリ等のリソースを共有することができる。
【００５２】
スレッドカウンタ１０１は、各クロックサイクルにおいて、新規のスレッドを回路に投入する。ある状況において、この新規のスレッドは、パイプラインを介した伝播を完了したばかりのスレッドの繰り返しであってもよい。スレッド番号を、各クロックサイクルにおいて、一つのパイプラインセクションから次のパイプラインセクションに伝播させてもよい。スレッド番号を伝播させる選択肢の一つは、各パイプラインセクション内に、そのパイプラインセクションに現在あるスレッドのスレッド番号を記憶するためのレジスタ１０８を有することである。
【００５３】
スレッドカウンタは、それ自体が構成可能であってもよい。典型的に、スレッドカウンタは、外部プロセッサにより構成されて、例えば、シーケンス及び／又はシーケンス長を変更する。
【００５４】
各構成インスタンスは、数千ビットを含みうる。この例において、各インスタンスは、構成インスタンスよりも小さい多数のビットから構成され便利なショートハンドとして働く識別子と関連付けられる。パイプラインにおける第１のステージは、現在のスレッドが使用する構成インスタンス識別子をレジスタストア（１０３）からルックアップするように構成されている。構成インスタンス識別子は、レジスタ（１０５）を使用して、パイプラインを介して伝播される。構成インスタンス識別子は、各パイプラインステージにおいて、そのパイプラインステージに必要な構成インスタンスの部分をルックアップするために使用される。これは、構成インスタンスを、各パイプラインステージ（１０４）のための別々のオンチップメモリに分割することにより実現できる。パイプラインステージは、それが特定のスレッドのために必要とする構成インスタンスを、メモリのその特定のセクションにおいてそのスレッドの構成識別子をルックアップすることにより取得する。各スレッドが、パイプラインを介して移動する際、その構成インスタンス識別子と関連付けられた構成インスタンスのみを経験する。
【００５５】
構成インスタンスを含むオンチップメモリは、任意のスレッドが任意の構成インスタンスを使用できるようにスレッド間で共有される。一つのスレッドは、他のものと同じ構成インスタンスを使用できる。スレッドは、異なる構成インスタンスを使用することもできる。多くのインスタンスにおいて、スレッドは、回路内においてそれに先行するスレッドとは全く異なる構成インスタンスを使用してもよい。従って、いかなる時も回路内で複数の構成インスタンスがアクティブとなっている可能性もある（実際、その可能性は高い）。スレッドの実行によって、回路内における次の経路上でそれがどの構成インスタンス識別子を使用するか（ひいては、どの構成インスタンスを使用するか）を変更してもよい。
【００５６】
スレッド番号及び幾つかの構成インスタンスビットを使用して、データストアからの値にアクセスする。この例において、これは、便宜上レジスタストア（１０６）により実施される。本発明の一実施例において、スレッドは、他のスレッドにより使用されているレジスタストア内の値にはアクセスできない。レジスタストアの値は、後続のクロックサイクルにおいてデータルーティングネットワーク１１１に入力される。データルーティングネットワークは、値を特定の実行ユニットに送ることが可能である。データルーティングネットワークは構成可能であるが、ルーティングネットワークを介したスイッチングの少なくとも一部を、ある一つのクロックサイクルから次のクロックサイクルに変更できる。ルーティングネットワークの一つのパイプライン化ステージから次のパイプライン化ステージに伝播する際に各入力が経験するスイッチングは、ネットワーク内においてそれに追従する構成インスタンス識別子から導出される構成インスタンスによって決まる。
【００５７】
データルーティングネットワーク内のデータ経路は、好ましくは、マルチプルビットワイドである。データ経路の正確な幅は、特定の用途に応じて調整できる。いずれの所定のルーティングネットワーク内においても、データ経路の全てが同じ幅を有している必要はない。例えば、データ経路のうちの幾つかの経路は、他のものよりも広い入力に対応するようにしてもよい。これは、ある状況においては、ルーティングの柔軟性を制限する可能性がある。データ経路のうち十分に広い経路を介して入力を送る必要があり、スレッドの他の入力に利用可能なルートを制限してしまう可能性がある。入力は、データ経路の全幅を利用する必要はないが、ネットワークの出力は、データルーティングネットワーク内の最も広い経路と等しい幾つかのビットに対応できなければならない。
【００５８】
本発明の幾つかの実施例では、単一のモノリシックなルーティングネットワークよりも、幾つかの別個のルーティングネットワークを有する方が便利なことがある。本発明の一実施例において、制御値及びデータ値は分離され、それぞれが、それ自体のレジスタストア（１０６及び１０７）及びルーティングネットワーク（１１１及び１１２）の組みを有する。一例において、ルーティングネットワーク（１１１）は、制御値のための幅が１ビットのみのデータ経路を備えてもよく、他のルーティングネットワーク（１１２）は、データ値のための幅が３２ビットのデータ経路を備えてもよい。ルーティングネットワークのサイズは、入力及び出力の数によって決まり、そのように異なるルーティングネットワークは、異なるパイプライン深さを必要とする場合がある。図１のルーティングネットワークは、１つ又は２つのパイプラインステージを有してのみ示されている。実際は、ルーティングネットワークは、典型的に１２前後のパイプラインステージを有することができる。
【００５９】
入力選択ユニットは、ルーティングネットワークからの各出力を実行ユニット（１１５）の入力に接続する。実行ユニットは、それらが入力に対して行うその動作が構成インスタンスからのビットによって決まるように構成可能である。実行ユニットにより実行されるその動作は、スレッドデータからの１以上のビット（例えば、そのデータに含まれる制御値）によって決まることもある。典型的に、実行ユニットは、パイプラインの単一のセクションを形成するが、幾つかの実行ユニットが、２つ以上のクロックサイクル（１１６）を必要とするより長い動作を実行するように構成されてもよく、これらの実行ユニットが、２つ以上のパイプラインセクションを形成するようにしてもよい。同様に、実行ユニットは、スレッドが１つ実行ユニットのから他の実行ユニット（不図示）に伝播するようにパイプラインの端部において互いに連結されてもよい。
【００６０】
各実行ユニットは、それが書き込むことのできるレジスタストア（１１７）に結果の値を書き込んでもよい。各レジスタストアには、１つの実行ユニットによってのみ書き込まれる。実行ユニットは、２つ以上のレジスタストアに書き込んでもよい。幾つかの実行ユニットは、共通の共有リソース（例えば、外部メモリ）に対して読み出し及び書き込むができる。共有リソース（オンチップ又は外部）に対する読み出し及び書き込みは、１回のクロックサイクルよりも長くできる可変レイテンシ動作となる傾向がある。
【００６１】
幾つかのレジスタストア内の幾つかのレジスタの位置を、その位置に記憶されたデータが有効か否かをアサートする有効ビットと関連付けてもよい。典型的に、可変レイテンシ実行ユニットと関連付けられたレジスタストアのみが、各位置を有効又は無効としてマークするための余分なビットを有している必要がある。他のレジスタストアは、常に有効値を保持すると考えられてもよい。
【００６２】
有効ビットは、書き込み動作の開始時に「無効」に設定され、書き込み動作が完了したときにのみ「有効」に戻るようにしてもよい。回路には、スレッドが読み出したいレジスタの位置が有効であることを、そのスレッドが実行ユニット（１１０）に達する前に確認する手段が組み込まれてもよい。これらの手段は、ルーティングネットワークと同じパイプラインセクション内に効率的に配置することができる。この役割は、スレッドに適切な有効ビットを、それが実行ユニットに投入される前に読み出すように構成されたチェックユニットによって実行されてもよい。チェックユニットは、無効データに対して動作する実行ユニットにスレッドが投入される場合、それらの実行ユニットを全て停止（又は、少なくとも、それらのメモリへの書き込み及びレジスタストアへの書き込みを停止）してもよい。これにより、「無効」データに対して実行された動作の結果がレジスタ又は他のメモリに書き込まれるのを阻止する。
【００６３】
一例において、２つの有効ビットが、それらを必要とする各レジスタストアの位置に割り当てられる。あるレジスタストアの位置に記憶されたデータは、その２つの有効ビットが異なる場合は無効であり、２つのビットが同じであれば有効であるとみなしてもよい（又は、その逆）。２つの有効ビットを有することによって、２つの異なるパイプラインステージにより同時にそれらを書き込むことが可能となる。典型的に、レジスタストア内のデータを無効化したいパイプラインステージは、有効ビットの一方をフリップするように構成され、レジスタストア内のデータを有効化する他のパイプラインステージは、有効ビットの他方をフリップするように構成される。
【００６４】
実行ユニット（１１８）は、特定のスレッドが回路内の他の経路で使用する構成インスタンスを、そのスレッド（１１９）と関連付けられた構成インスタンス識別子を変更することによって変更することもできる。新規の構成インスタンス識別子は、そのスレッドのために、回路内の次の経路において使用される。
【００６５】
実行ユニットは時々、スレッドの前回の実行による結果に基づく動作を行う必要がある。その一例として、アキュムレート動作がある。回路は、そのような動作を行う専用の１つ以上のユニットを備えてもよい。その一例として、アキュムレートレジスタストアがある。これらのレジスタストア（例えば：１１４）は、ルーティングネットワーク内を移動する必要がなく、必要なルーティングネットワークの大きさを低減できる。
【００６６】
実行ユニットは、典型的に、その内部にフィードバックを何ら有さない。フィードバックは、レジスタストア又は外部メモリに記憶されたデータを変更する、且つ／又は、スレッドの構成インスタンス識別子を変更するあるスレッドの実施によって、全回路ベースで実現される。
【００６７】
レジスタストア
各レジスタストアは、別個の値を記憶する複数の位置を含む。回路は、レジスタストアアドレスを用いて位置を選択してもよい。本発明の一実施例において、スレッドは、各レジスタストア内の位置の別個の組みにアクセスする。これは、レジスタストアに対する読み出しアドレス及び書き込みアドレスの一部が（適切なパイプラインステージにおける）スレッド番号並びにゼロ以上の構成インスタンスビットに基づくことを確保することによって実装できる。この実施例において、スレッドは、他のスレッドと関連付けられたレジスタストア内に保持された値にアクセスすることはできない。
【００６８】
レジスタストアは、通常、異なるパイプラインステージ内において読み出し及び書き込みが行われるため、任意の所定のクロックサイクルにおけるそのレジスタストアに対する読み出しアドレス及び書き込みアドレスが異なる場合が多い。従って、レジスタストアは、１つのクロックサイクルにおいて別個の読み出し動作及び書き込み動作を行うことが可能なオンチップメモリに実装すると有利である。
【００６９】
ルーティングネットワーク
ルーティングネットワークは、基本的に、複数の入力を複数の出力に接続するスイッチである。入力は、単一の出力又は複数の出力に接続させることができる。ルーティングネットワークは、好ましくは、そのスイッチングの少なくとも一部が構成インスタンスからのビットによってクロックサイクル毎に設定できるように、構成可能である。
【００７０】
ルーティングネットワークは、任意の入力又は任意の出力（更に、幾つかの実施例において、２つ以上の出力）に接続可能であってもよい。ルーティングネットワークは、入力を任意の組み合わせで出力に接続することができるように、非ブロッキング（ｎｏｎ−ｂｌｏｃｋｉｎｇ）としてもよい。
【００７１】
構成可能ルーティングネットワークを実施するのに適切なスイッチの一例として、クロスバースイッチがある。「クロスバースイッチ」という用語は、完全に柔軟なスイッチを称するのに使用される場合があるが、それぞれ且つ全ての入力を１つ（そして１つのみ）の出力に接続する能力を有するスイッチを称するのにも使用される。大きなスイッチに対して、Ｃｌｏｓネットワークが適切な場合もある。Ｃｌｏｓネットワークは、マルチステージスイッチである。選択肢の一つは、Ｃｌｏｓネットワークを複数のクロスバースイッチから構築することである。Ｃｌｏｓネットワークは、典型的に、それぞれ且つ全ての入力を、制限なく１つの出力に接続できる。また、これは常に可能というわけではないが、必要な接続性に応じて、入力を複数の出力に接続することも可能である。
【００７２】
ルーティングネットワークを実装するのに適切なスイッチの一例を、図２に示す。この図は、Ｎ×ＮのＣｌｏｓネットワークを示し、ここで、ネットワークの少なくとも２つの外側ステージが、２×２クロスバースイッチ（２０１）により実装されている。ネットワークの内側部分は、２つのＮ／２クロスバースイッチにより実装されていることが示されている（２０３）。これらのより大きなクロスバースイッチは、「入れ子（ネスト）」になっていてもよく、例えば、それら自体をクロスバースイッチ（又は何らかの他のスイッチ）の複数のステージにより実装されたＣｌｏｓネットワークとしてもよい。スイッチは、レジスタ２０２により示されるように、パイプライン化されている。レジスタは、１つのクロックサイクルから次のクロックサイクルへのスレッドデータを保持するように構成されている。
【００７３】
ルーティングネットワークをパイプライン化する利点は、それにより、長いデータ経路をより小さいセクションに分割することが可能となることである。これらのより小さいセクションは、より迅速に移動させることができ、それらに沿った伝搬は、速いクロックであっても単一のクロックサイクルに対応できる。選択肢の一つは、（スイッチの各ステージがパイプラインの一セクションを表すように）入れ子化されたマルチステージスイッチの全てのレベルにおいてレジスタを有することである。しかしながら実際は、これは、スイッチの内側ステージにおける距離がずっと短くなる傾向がありクロック速度を抑制しそうにない場合には不必要である。従って、単一のパイプラインセクションが、マルチステージスイッチの内側ステージを２つ以上備えて、レジスタがスイッチの各ステージに必要ないようにしてもよい。
【００７４】
２×２クロスバースイッチの一例を、図３に示す。このスイッチは、２つの入力３０１を受信し２つの出力３０４を出力するように配置されている。スイッチは、２つのマルチプレクサ３０２を備える。各マルチプレクサは、２つの入力のそれぞれを受信し、１つを出力として選択する。各マルチプレクサは、その入力の特定の１つをその出力として選択するように、構成インスタンスビット３０３により制御される。従って、構成インスタンスは、入力３０１から出力３０４へのマッピングを制御する。２×２クロスバーは、単純な例であるが、２×２クロスバーのレイヤを積層することによって、複数の入力を取り込みそれらを複数の出力に送ることができる柔軟なルーティングネットワークを構築することが可能である。これにより、入力を、更なる処理のために回路の適切な位置に送達することができる。
【００７５】
２×２クロスバーは、クロスバースイッチの単なる一例であり、他の大きさのクロスバーを使用することもできる（例えば、３×３、４×４又はそれ以上）。マルチステージスイッチは、異なるステージにおいて異なる大きさのクロスバーを使用してもよい。
【００７６】
実行ユニット
実行ユニットは、これらに限定はされないが、算出演算、論理演算若しくはシフト演算、又は、メモリの読み出し若しくは書き込み動作を含む一連の動作を実行することが可能となるようにデザインできる。実行ユニットは、そのデータ入力からのビット（例えばスレッドの制御値）に加えて構成インスタンスからのビットを使用でき、それにより特定のスレッドに対してどの動作を実行するかを決定できる。幾つかの実行ユニットは、他の実行ユニットとは異なる固有の能力を有してもよい。例えば、他の実行ユニットが実行できない動作を実行することが可能であってもよい。実行ユニットの数及び能力は、特定の用途に適合するように変更することができる。
【００７７】
実行ユニットの一例を、図４に示す。実行ユニット４０１は、構成インスタンスビット４０７に基づき動作を実行するように構成可能である。実行ユニットがデータに対してどのように動作するかを決定するのは、構成インスタンスビットである。実行ユニットは、データ入力４０５も備える。典型的に、これらの入力は、データルーティング回路により実行ユニットに送られたスレッドデータを受信する。これらの入力の幾つかは、実行ユニットがどのように動作するかに対して影響も及ぼす。実行ユニットは、クロック信号４０２及びスレッド番号４０３も受信する。クロック信号が、パイプラインを制御する。スレッド番号により、実行ユニットが現在処理しているスレッドが識別される。最終入力４０４が、レジスタの書き込みを可能とし、以下、より詳細に説明する。
【００７８】
実行ユニットは、データを、その専用のレジスタストア（４０８，４０９）への書き込みのために出力する。出力データは、実行ユニットがその入力に対して実行した動作の結果を表す。各データ出力４１２には、好ましくは、２つの添付出力、すなわち、書き込みイネーブル４１０及び書き込みアドレス４１１が設けられる。書き込みイネーブル４１０は、レジスタの書き込みを可能とする入力４０４によって設定される。データは、書き込みイネーブルが適切な値（典型的に１又は０）に保持されている場合にのみ、レジスタに書き込みしてもよい。書き込み動作は、書き込みイネーブルが適切な値でない場合に停止される。これを、レジスタの位置が無効であると判明した場合に用いて、その位置が再び有効となるまで、全てのレジスタの書き込みを禁止することができる（これは、以下の「パイプライン」セクションにおいてより詳細に説明する）。書き込みアドレス４１１は、通常、スレッド番号及び幾つかの構成インスタンスビットによって決まる。
【００７９】
特定の実行ユニットの幾つかの例を、図５〜１０に示す。
【００８０】
図５は、簡単な加算器として構成された実行ユニットを示す。実行ユニットは、書き込みを可能とする入力５０１と、スレッド番号を識別するための入力５０２とを備える。実行ユニットは、加算すべきデータのための入力５０３，５０４も備える。この例において、実行ユニットは、加算のみ行うことができる（５０７）。構成インスタンスから抽出される１つの構成インスタンスビットによって、加算器の結果をレジスタストアに書き込むかが決まる（５０５）。現在のスレッドの値がいずれも有効でない場合に高く駆動されるレジスタの書き込みを可能とする入力は、加算器の結果が書き込まれるのを阻止することもできる。実行ユニットの出力５０８は、書き込みデータ、書き込みアドレス及びレジスタストアのための書き込みイネーブルを出力する。
【００８１】
図６は、パイプライン化ＡＬＵとして構成された実行ユニットを示す。このより複雑な例において、実行ユニットは、幾つかの異なる動作を実行できる。幾つかの構成インスタンスビット及び入力６０１からのビットにより、ＡＬＵが何を行うかが制御される（６０３）。例えば、一構成においてＡＬＵはマルチプレクサとして動作し、他の構成においてＡＬＵはキャリービットとして制御入力を使用してＡｄｄを実行し、他の構成において制御入力はＡＬＵがＡｄｄ又はＳｕｂｔｒａｃｔのいずれを実行するかを選択できる。レジスタ６０２が設けられて、他の入力をパイプライン化してＡＬＵパイプラインに適合させる。ＡＬＵは、出力６０４並びにデータ値を生成する。一例として、この１ビットの出力は、ＡＬＵの結果がゼロの場合に高くなる。
【００８２】
図７は、長レイテンシオペレータ７０１を有する実行ユニットを示す。この例において、複数のレジスタ７０２が設けられて、書き込みイネーブル及び書き込みアドレスの値をパイプライン化する。これらの値は、各クロックサイクルにおいてレジスタを通って伝播し、新規のスレッドが実行ユニットに投入されて各クロックサイクルにおいて長レイテンシ動作を開始するのを可能とする。レジスタの数は、好ましくは、動作のレイテンシと適合する。オペレータ７０１は、パイプライン化されていてもされていなくてもよい。長レイテンシの動作の一部はオペレータにより実行されないため、幾つかのオペレータはパイプライン化を必要としない。例えば、この動作は、外部メモリに対する読み出し動作や書き込み動作であり、この場合、レイテンシは、そのメモリへのシステムバスを介したアクセスと関連付けられる。
【００８３】
図８は、スレッドが回路内の次の経路で使用する構成インスタンス識別子を変更する実行ユニットの一例を示す。この例において、選択は、８つの構成インスタンス識別子８０２のうちの１つを選択する３つの制御ビット８０１によって制御される。実行ユニットは、選択された構成インスタンス識別子を記憶するための出力８０３を備える。
【００８４】
実行ユニットはフラクチャブルであってもよい。すなわち、スレッドの要件に応じて、より小さい個別の実行可能ユニットに分離可能であってもよい。一例を図９に示す。図９の実行ユニットは、２つの３２ビットＡＬＵに分割可能な６４ビットＡＬＵ９０１を備える。２対の３２ビットの値又は１対の６４ビットの値に対して、入力９０２，９０３を使用できる。構成インスタンスビットは、ＡＬＵが、６４ビットＡＬＵとして動作するか、又は、２つの３２ビットＡＬＵとして動作するかを設定する。フラクチャブル実行ユニットの利点の一つは、２つ以上の個別のユニットよりも実装が廉価で済むことである。
【００８５】
従来、幾つかの実行ユニットは、特定の順序で入力が示されている必要がある。好ましくは、実行ユニットは、可能であれば、入力の順序が問題とならないように構成される。２つの例は、図１０に示すルックアップテーブルを含む。これらのルックアップテーブルは、入力が提示される順序に影響を受けないように構成され、これにより幾つかのスイッチをルーティングネットワークから取り除くことが可能となる。
【００８６】
パイプライン
命令が完了するのにかかる時間は、あるレジスタストアの読み出しとそれに対応するレジスタストアの書き込みとの間のパイプラインステージの最大数（「ｐ」で示す）、及び、プロセッサのクロック周波数（「ｆ」で示す）によって決まる。そして、１命令当たりのレイテンシは、ｐ／ｆとなる。しかしながら、パイプラインは、クロックサイクル毎に、ｐ以上の異なるスレッドからの命令を処理することができる。スレッドは、連続的に循環し、クロックサイクル毎に１つずつ、パイプラインに発行される。
【００８７】
レジスタストアから読みだされた値が有効でないとみなされる場合には常に、そのスレッドは、あらゆるレジスタストアへの書き込みやその構成インスタンス識別子の変更が阻止される。これにより、スレッドは、そのスレッドに可視な状態を変更することが不可能となり、それがパイプラインに再発行された際には同じ状態から再開する。好ましくは、回路は、各スレッドがそれ自体の（上述のような）レジスタストアにのみアクセスするように構成される。そして、全ての他のスレッドは、他のスレッドのいずれかが無効値に当たるか否かに関係なく、それらの読み出された値が有効であることを条件に影響を受けていないパイプライン内を進行する。無効なレジスタの値は可変レイテンシを有する実行ユニットから生じ、従って、無効レジスタの値は最終的に有効となり、前回は状態を更新することを阻止されていたスレッドが、それを行うことが可能となる。このようにして、個々のスレッドは、パイプライン自体が値を伝播し続けていても、「ストールしている（ｓｔａｌｌｅｄ）」とみなされうる。
【００８８】
ユーザは、パイプラインレジスタの可視性を持たない。これにより、プログラムは、異なるパイプラインを回路が有する場合であっても、変形させることなく本明細書に記載の原理に応じて、設計された異なる回路上で動作することが可能となる。唯一の違いは、各命令を完了するのにかかる時間の長さである。
【００８９】
構成インスタンス
オンチップメモリには、１組の構成インスタンスがある。本発明の一実施例において、その構成インスタンスメモリには外部プロセッサによってアクセスしうる。個々の構成インスタンスは、構成インスタンスメモリに書き込むことによってロードできる。構成メモリが同じクロックサイクルで読み出し及び書き込みできる場合には、スレッドは、構成インスタンスがロードされている間も、パイプライン内を進行し続けることができる。パイプライン内のいずれかのスレッドにより使用されている構成インスタンスは、ロードされないようにすべきである。これは、使用中の全ての構成インスタンス識別子を監視するオペレーティングシステム又は何らかの追加ハードウェアによって実現できる。
【００９０】
１つの構成インスタンスを、レジスタストアを変更したりメモリへのアクセスを行ったりできないようにしてもよい。この「ヌル」構成インスタンスは、スレッドが非アクティブのとき（例えば起動時）に、パイプライン内のスロットに対して使用しうる。
【００９１】
本発明の一実施例において、ルーティングの特定の実行ユニット又は一部のための回路を動的に変更してもよい。オペレーティングシステムは、どのスレッドも、動的に変更されている最中の回路を使用しないことを確実にするように構成する必要がある。動的に回路を変更可能な技術の一例として、ＦＰＧＡがある。典型的に、この種の再プログラミングは、オフチップからプログラムファイルをダウンロードして回路の全て又は一部を再構成することを伴う。このプロセスは、典型的に、ミリセカンドオーダーで行われる（それに対して、各スレッドに対する回路の構成は、ナノセカンドオーダーで行われる）。回路が、暗号化や何らかの他の集中的な処理動作等の幾つかの専門処理を一度に実行する必要がある場合には、遅延は正当化される。本明細書に記載の回路は、その内部に実行ユニットが含まれるため、この種の動的再構成に特に適している。それらは、周囲の回路の構造を変更する必要なく、変更することができる。
【００９２】
上述の特定の例は、本発明の範囲内において様々な形で変更することができる。例えば、上述の回路は、スレッドが、それが回路内の次の経路で使用する構成インスタンス識別子を変更することにより、又は、制御データを書き込むことにより、その構成インスタンスを変更することを可能としている。将来実装されうる他の可能性としては、スレッドに、他のスレッドに適用される構成インスタンス識別子を変更させることや、スレッドに、構成インスタンスメモリに直接書き込みさせることが挙げられる。
【００９３】
出願人は、本明細書に記載の個々の特徴及びそのような特徴の２つ以上のあらゆる組み合わせを分離して開示しているが、その開示は、そのような特徴及び組み合わせが本明細書に開示の問題を解決するかどうかにかかわらず、且つ、特許請求の範囲に対して何ら限定することなく、そのような特徴及び組み合わせを当業者の一般的常識に鑑み本明細書全体に基づき実行可能となる程度になされている。出願人は、本発明の態様が、任意のそのような個々の特徴又は特徴の組み合わせから構成されうることを指摘する。前述の説明に鑑み、当業者にとって、本発明の範囲内において様々な変更を行ってもよいことは明らかであろう。
【図１】
0006708552.tif 000002
【図２】
0006708552.tif 000003
【図３】
0006708552.tif 000004
【図４】
0006708552.tif 000005
【図５】
0006708552.tif 000006
【図６】
0006708552.tif 000007
【図７】
0006708552.tif 000008
【図８】
0006708552.tif 000009
【図９】
0006708552.tif 000010
【図１０】
0006708552.tif 000011