(57)【特許請求の範囲】
【請求項１】
マルチスレッド超長命令語プロセッサであって、
マルチスレッド命令ストリームから複数の命令を実行するための複数の機能単位であって、該命令がコンパイラによってパケットにグループ化され、該コンパイラが、該パケット内の該命令を分割できるかどうかの指標を該パケット内に含むようなものである複数の機能単位と、
該命令ストリームから命令を選択して該命令を前記複数の機能単位に転送するアロケータであって、前記指標が前記パケットを分割できることを示す場合に、命令を該命令パケットの少なくとも１つから複数の前記機能単位に対して割り当てるようになっているアロケータとを含むマルチスレッド超長命令語プロセッサ。
【請求項２】
前記指標は分割ビットである、請求項１に記載のマルチスレッド超長命令語プロセッサ。
【請求項３】
前記アロケータは、前記機能単位の可用性によって許可された数の命令を所与の命令パケットから割り当てる、請求項１に記載のマルチスレッド超長命令語プロセッサ。
【請求項４】
所与の命令パケットから所与のサイクル内で機能単位に割り当てられなかった命令の指示を後のサイクルで実行するために保存するためのレジスタをさらに備える、請求項１に記載のマルチスレッド超長命令語プロセッサ。
【請求項５】
マルチスレッド超長命令語プロセッサにおいてマルチスレッド命令ストリームから命令を処理する方法であって、
複数の機能単位を使用して、コンパイラによってパケットにグループ化された命令を実行するステップであって、該コンパイラが、該パケット内の該命令を分割できるかどうかの指標を該パケット内に含ませるような前記命令を実行するステップと、
該指標が前記パケットを分割できると示している場合に、該命令パケットの少なくとも１つからの命令を該複数の機能単位に割り当てるステップと、
該選択された命令を該複数の機能単位に転送するステップと、を含むことを特徴とする方法。
【請求項６】
前記指標は分割ビットである、請求項５に記載の方法。
【請求項７】
前記割り当てるステップは、前記機能単位の可用性によって許可された数の命令を所与の命令パケットから割り当てる、請求項５に記載の方法。
【請求項８】
所与の命令パケットから所与のサイクル内で機能単位に割り当てられなかった命令の指示を後のサイクルで実行するために格納するステップをさらに含む請求項７に記載の方法。
【請求項９】
複数のスレッドを有する命令ストリームから命令を処理するためのマルチスレッド超長命令語（ＶＬＩＷ）プロセッサにおいて用いるためのプログラムを格納するプロセッサ読み取り可能な記録媒体であって、該プログラムは、該マルチスレッドＶＬＩＷプロセッサに
コンパイラによってパケットにグループ化されている命令であって、該コンパイラが、該パケット内の該命令を分割できるかどうかの指標を該パケットに含ませるようになっている命令を、複数の機能単位を使用して実行させるステップと、
該指標が該パケットを分割できることを示す場合に、該命令パケットの少なくとも１つからの命令を該複数の機能単位に割り当てさせるステップと、
該選択された命令を前記複数の機能単位に転送させるステップと、を実行させるものであることを特徴とするプロセッサ読み取り可能な記録媒体。
【請求項１０】
マルチスレッド超長命令語プロセッサのためのコンパイラであって、
コンピュータ読み取り可能なコードを格納するためのメモリと、
該メモリに動作上結合されているプロセッサであって、該メモリから該コンピュータ読み取り可能なコードを受信しおよび解読して、プログラムからの命令を機械語に翻訳し、複数の該命令をパケットにグループ化し、および該パケット内の該命令を分割できるかどうかを示す指標を該パケットに提供するように構成されているプロセッサと、からなることを特徴とするコンパイラ。
【請求項１１】
前記命令パケットは、前記コンパイラによって組み立てられた前記命令パケットのセマンティックスが違反していない場合に分割できる、請求項１０に記載のコンパイラ。
【請求項１２】
前記命令パケットは、該パケットの第１の部分にある命令の１つに関するソースレジスタが、該パケットの第２の部分にある命令の１つによって変更されていない場合に分割できる、請求項１０に記載のコンパイラ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は一般にマルチスレッドプロセッサに関し、特に、このようなマルチスレッドプロセッサ内でパケットを分割するための方法および装置に関する。
【０００２】
【従来の技術】
コンピュータアーキテクチャの設計は、さらに早くワークロードを完了しようと試みている。プログラムの平行処理を使用するための、多くのアーキテクチャ設計が提案または提言されてきた。一般に、一度に複数の動作を開始できるアーキテクチャは、一度に１つの動作しか開始できないアーキテクチャよりも早くプログラムを実行できる。コンピュータアーキテクチャにおけるもっとも最近の発展は、一度に１つ以上の動作を開始し、それによってプログラム動作の速度を上げる方法に向けられてきた。図１は、従来のマイクロプロセッサのアーキテクチャ１００を示す。具体的には、マイクロプロセッサ１００はプログラムカウンタ（ＰＣ）１１０、レジスタセット１２０、および多くの機能単位（ＦＵ）１３０−Ｎを含む。冗長機能単位１３０―１〜１３０―Ｎは、例としてのマイクロプロセッサのアーキテクチャ１００に十分なハードウェアリソースを提供して、対応する数の動作を並列的に実行する。
【０００３】
プログラム内で平行処理を使用するアーキテクチャは、一度に複数の機能単位にオペランドを発行して、プログラム実行の速度を上げる。スーパースカラープロセッサ、超長命令語プロセッサ、およびマルチスレッドプロセッサを含む、並列アーキテクチャを伴う多くのアーキテクチャが提案または提言されており、各々はそれぞれ、図２、図４、および図５と共に下記に説明される。一般に、スーパースカラープロセッサは実行時にハードウェアを使用して、単一の命令ストリームからの多くの動作が独立しているか否かを動的に決定し、独立している場合は、プロセッサは並列演算論理機構（ＡＬＵ）を使用して命令を実行する。ソースオペランドがそれに先行する命令の宛先オペランドに依存していない場合、２つの命令は独立していると言われる。超長命令語プロセッサは、依存性の情報に基づいてコンパイル中に命令を評価し、動作を適切にグループ分けし、並列実行する。他方マルチスレッドプロセッサは、単一の命令ストリーム内で並列処理を使用しようと試みるのではなく、複数の命令ストリームを並列に実行する。
【０００４】
図２に示されたスーパースカラープロセッサのアーキテクチャ２００は、各々に有効なデータが提供された場合、独立して動作する多くの機能単位を有する。たとえば図２に示されたように、スーパースカラープロセッサ２００は演算論理機構２３０―Ｎとして具現化された３つの機能単位を有し、その各々は同時に結果を計算できる。スーパースカラープロセッサ２００は、命令フェッチブロック２１０、命令復号ブロック２１５、および命令順序付けユニット２２０（発行ブロック）を有するフロントエンド部２０８を含む。命令フェッチブロック２１０は単一スレッドの命令ストリームの入力待ち行列２０５から命令を得る。命令順序付けユニット２２０は、知られた方法で使用可能な演算論理機構２３０―Ｎの中で同時に実行できる独立した命令を識別する。詳細化ブロック２５０は命令が完了することを可能にし、バッファ化および再順序付けを提供して、結果をレジスタセット２４０に書き込んで戻す。
【０００５】
図３に示されたプログラムフラグメント３１０の中で、命令Ｌ２およびＬ３の中にあるソースオペランドのいずれもそれに先行する任意の命令の宛先オペランドに依存していないという点で、場所Ｌ１、Ｌ２、およびＬ３にある命令は独立している。プログラムカウンタが場所Ｌ１に設定されている時、命令順序付けユニット２２０は命令ストリームの先を見越して、Ｌ２およびＬ３における命令が独立していることを検出するので、したがってこれら３つすべてが３つの使用可能な機能単位２３０―Ｎに同時に発行できる。スーパースカラープロセッサのさらに詳細な説明に関しては、たとえば、参照により本明細書に援用された、ＩＥＥＥ（１９９５年１２月）の議事録の、Ｊａｍｅｓ．Ｅ．ＳｍｉｔｈおよびＧｕｒｉｎｄａｒ．Ｓ．Ｓｏｈｉによる「The Microarchitecture of Superscalar Processors」を参照されたい。
【０００６】
先に示したように、図４に示された超長命令語プロセッサ４００は、ハードウェアを使用して実行時に動的に並列処理を検出するのではなく、ソフトウェアに頼って単一の命令ストリームからコンパイル時にデータの並列処理を検出する。ＶＬＩＷコンパイラは図３のコードフラグメント３１０を生成するために使用されたソースコードを与えられると、命令の独立性を検出し、３つの動作すべてから成る単一の非常に長い命令を構築する。実行時には、プロセッサ４００の発行論理はこの大きな命令を１つのサイクルで発行し、データをすべての使用可能な機能単位４３０―Ｎに向ける。図４に示したように、超長命令語プロセッサ４００は統合フェッチ／復号ブロック４２０を含み、統合フェッチ／復号ブロック４２０は前もってグループ分けされた命令４１０をメモリから得る。超長命令語プロセッサのさらに詳細な説明に関しては、たとえば、参照により本明細書に援用されている、SPIE Real Time Signal Processing ＩＶ（１９８１）の２４１〜２４８ページにある、Ｂｕｒｔｏｎ  Ｊ．Ｓｍｉｔｈによる「Architecture and Applications of the HEP Multiprocessor Computer System」を参照されたい。
【０００７】
ＶＬＩＷプロセッサの一変形例は、たとえば、ＩＥＥＥ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ｃｏｍｐｕｔｅｒｓ  （１９９８年８月）のＲｏｂｅｒｔ  Ｐ．Ｃｏｌｗｅｌlらによる「A VLIW Architecture for a Trace Scheduling Compiler」で論じられているようなマルチフローアーキテクチャによって代表され、固定長命令を使用して、そこにおいてあらかじめ定義されたフィールドがデータを一度にすべての機能単位４３０―Ｎに向ける。大きな命令の中で指定されたすべての動作が完了すると、プロセッサは新しい、多数の動作の命令を発行する。テキサス州ダラスのＴｅｘａｓ  Ｉｎｓｔｒｕｍｅｎｔｓから市販されているＣ６ｘプロセッサや、カリフォルニア州サンタクララのＩｎｔｅｌ  Ｃｏｒｐから市販されているＥＰＩＣ  ＩＡ−６４などのいくつかのより最近のＶＬＩＷプロセッサは、その代わりに可変長命令パケットを使用し、可変長命令パケットは互いにバンドルされている１つまたは複数の動作を含む。
【０００８】
図５に示されたマルチスレッドプロセッサ５００は単一の命令ストリーム内で平行処理を使用しようと試みるのではなく、複数の命令ストリームを並列に実行することによってパフォーマンスの向上を得る。図５に示されたマルチスレッドプロセッサ５００は、プログラムカウンタ５１０―Ｎ、レジスタセット５２０―Ｎ、および機能単位５３０―Ｎを含み、各々は対応する命令ストリームＮに専用である。マルチスレッドプロセッサ５００の代替の実装は、いくつかのレジスタセット５２０―Ｎおよびプログラムカウンタ５１０―Ｎを伴う単一の機能単位５３０を使用してきた。このような代替のマルチスレッドプロセッサ５００は、プロセッサ５００が、１つまたは２つのサイクル内で命令発行を１つのプログラムカウンタ／レジスタセット５１０―Ｎ／５２０−Ｎから、別のプログラムカウンタ／レジスタセット５１０−Ｎ／５２０−Ｎに切り換えることができるように設計されている。したがって、ＬＯＡＤ命令などの待ち時間が長い命令は、別の命令ストリームからのより短い動作と重ねることができる。ワシントン州シアトルのＴｅｒａ  Ｃｏｍｐｕｔｅｒ  Ｃｏｍｐａｎｙから市販されているＴＥＲＡ  ＭＴＡアーキテクチャはこのタイプの１つの例である。
【０００９】
同時マルチスレッド化と呼ばれる、マルチスレッドアーキテクチャ５００の拡張は、図２と共に上記に説明されたスーパースカラーアーキテクチャと、図５と共に上記に説明されたマルチスレッド設計との両方を組み合わせている。同時マルチスレッド化技法の詳細な説明に関しては、たとえば、参照により本明細書に援用されている、第２２回  Ａｎｎｕａｌ  Ｉｎｔ’ｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（１９９５年６月、イタリア、Ｓａｎｔａ  Mａｒｇｈｅｒｉｔａ  Ｌｉｇｕｒｅ）の議事録、３９２〜４０３ページにある、Ｄｅａｎ  Ｔｕｌｌｓｅｎらによる「Simultaneous Multithreading: Maximizing On-Chip Parallelism」を参照されたい。一般に、同時マルチスレッド化アーキテクチャでは機能単位のプールがあり、そのうち任意の数が、多くのプログラムカウンタ／レジスタセット構造のうち任意の１つから発行できる命令に動的に割り当てられる。機能単位を多くのプログラムスレッドの間で共有することにより、同時マルチスレッド化アーキテクチャは図５に示されているより効率的にハードウェアを使用することができる。
【００１０】
【発明が解決しようとする課題】
同時マルチスレッドアーキテクチャの組み合わされた手法は、スーパースカラアーキテクチャまたはマルチスレッドアーキテクチャの個別の手法よりも改善された効率を提供するが、同時マルチスレッドアーキテクチャは依然として、ダイナミックに命令ストリームを検討して潜在的な並列処理を検出するために、精巧な発行論理を必要とする。さらに動作が多数のサイクルをとる時、使用可能な動作のソースが他にないので、命令発行論理はストールする可能性がある。従来のマルチスレッドプロセッサは、もっとも広い潜在的な発行に対応するように設計された機能単位で、命令の組から命令を同時に発行する。したがって、２つの命令ストリームが独立しているか否かをダイナミックに決定する必要のない、マルチスレッドプロセッサのアーキテクチャに対するニーズが存在する。さらに、同時マルチスレッド化を提供するマルチスレッドアーキテクチャに対するニーズが存在する。さらに、各サイクルに関してプロセッサリソースの使用を改善する方法および装置に対するニーズが存在する。
【００１１】
【課題を解決するための手段】
全体として、マルチスレッド超長命令語プロセッサにおいて機能単位を割り当てるための方法および装置が開示される。本発明は従来の超長命令語アーキテクチャの技法および従来のマルチスレッドアーキテクチャの技法を組み合わせている。本発明の組み合わされたアーキテクチャは、個別のプログラム内、およびワークロード全体で実行時間を軽減する。本発明は命令パケット分割を使用して、従来のマルチスレッドアーキテクチャで失われた効率の一部を回復する。命令パケット分割を使用すると命令バンドルを１つのサイクル内で部分的に発行し、バンドルの残りを続くサイクルの間に発行することが可能になる。このように、本発明はハードウェアリソース（機能単位など）のより大きな使用および、多数のスレッドを含むワークロード全体のより低い経過時間を提供する。
【００１２】
命令パケットは、コンパイラによって組み立てられた命令パケットのセマンティックスに違反せずに分割できない場合がある。特に、レジスタがパケット内の命令の１つによって変更されている場合であっても、レジスタの入力値はそのパケット内の命令に関して同じと仮定されている。パケットが分割され、パケットの第２の部分にある命令の１つに関するソースレジスタがそのパケットの第１の部分にある命令の１つによって変更されている場合、コンパイラのセマンティックスに違反する。
【００１３】
したがって、本発明はパケット分割識別ビットを使用し、命令パケットを分割できる時をハードウェアが効率的に決定することを可能にする。命令パケット分割はすべての命令スレッドにわたってスループットを増加させ、機能単位がアイドルであるサイクルの数を減少させる。本発明の割り当てハードウェアは、パケット分割識別ビットが設定されていない場合、命令パケット内にあるすべての命令を一度に割り当てるのではなく、使用可能な機能単位の数に一致する数の命令を各パケットから割り当てる。機能単位に割り当てられることのできない命令は実行可能状態のレジスタ内に保持される。続くサイクルで、中のすべての命令が機能単位に発行されている命令パケットはそれらのスレッドの命令ストリームから更新され、一方、止められている命令を伴う命令パケットは保持される。機能単位割り当て論理はついで、新しくロードされた命令パケットからの命令および、保持された命令パケットから発行されていない命令を割り当てることができる。
【００１４】
【発明の実施の形態】
本発明は、代理人整理番号（Ｂｅｒｅｎｂａｕｍ  ７−２−３−３）の、「Method and Apparatus for Allocating Functional Units in a Multithreaded Very Large Instruction Word (VLIW) Processor」という名称の米国特許出願と、代理人整理番号（Ｂｅｒｅｎｂａｕｍ  ８−３−４−４）の、「Method and Apparatus for Releasing Functional Units in a Multithreaded Very Large Instruction Word (VLIW) Processor」という名称の米国特許出願と、代理人整理番号（Ｂｅｒｅｎｂａｕｍ  ９−４−５−５）で、「Method and Apparatus for Splitting Packets in a Multithreaded Very Large Instruction Word (VLIW) Processor」という名称の米国特許出願に関連し、各々は本明細書と同時に提出され、本発明の譲渡人に譲渡され、参照により本発明に援用されている。
【００１５】
以下の詳細な説明および図面を参照すれば本発明への理解がより進み、さらなる特徴および理解がわかるであろう。
【００１６】
本発明は、コンパイラを使用してマルチスレッドプロセッサのアーキテクチャ内で並列処理を検出する。したがって動的な決定が必要ないため、単一スレッドＶＬＩＷプロセッサと同じ方法で単一のプログラムシーケンサから多数の命令を発行することによって、また、同時マルチスレッド化と同じように多数のプログラムシーケンサをサポートするが発行論理内で複雑さが軽減されてサポートすることによって、プログラムの並列処理を使用するマルチスレッドＶＬＩＷアーキテクチャが開示される。
【００１７】
図６は、本発明によるマルチスレッドＶＬＩＷプロセッサ６００を示す図である。図６に示したように、３つの命令スレッド、すなわちスレッドＡ（ＴＡ）、スレッドＢ（ＴＢ）およびスレッドＣ（ＴＣ）があり、各々は命令番号ｎで動作している。さらに、例としてのマルチスレッドＶＬＩＷプロセッサ６００は、９つの機能単位６２０−１〜６２０−９を含み、これは任意のスレッドＴＡ―ＴＣに独立的に割り当てることができる。例としての３つのスレッドＴＡ―ＴＣ上の命令の数は９で、例としての使用可能な機能単位６２０の数もまた９なので、３つのスレッドＴＡ―ＴＣすべてからの命令の各々は１つのサイクルで命令パケットを発行でき、次のサイクルで命令ｎ＋１に移動できる。
【００１８】
一般的に、命令とそれによって指定される動作の間には１対１の対応があることに留意されたい。したがって、この用語は本明細書内では相互に交換可能であるように使用される。さらに、命令が多数の動作を指定する状況では、マルチスレッドＶＬＩＷプロセッサ６００は１つまたは複数の多数動作の機能単位６２０を含んで、多数動作を指定する命令を実行すると仮定されていることに留意されたい。多数動作を指定する命令が処理できるアーキテクチャの例は、複雑命令セットコンピュータ（ＣＩＳＣ）である。
【００１９】
本発明は命令を機能単位に割り当て、同じサイクルの中で多数のＶＬＩＷ命令を多数の機能単位に発行する。本発明の割り当て機構は、引数が機能単位にディスパッチされる直前にパイプライン段を占める。図７Ａは従来のパイプライン７００を示し、パイプライン７００はパケットがメモリから得られるフェッチ段７１０、フェッチされた命令に関して必要な機能単位およびレジスタが識別される復号段７２０、および、指定された動作が実行され、かつその結果が処理される実行段７３０を含む。
【００２０】
このように、従来のＶＬＩＷアーキテクチャでは、最高でＫ個までの命令を含むパケットが各サイクルでフェッチされる（フェッチ段７１０）。復号段７２０では最高でＫ個までの命令が復号化され、（最高で）Ｋ個の機能単位に送信される。実行段７３０では、命令に対応するレジスタが読み出され、機能単位はそれについて動作してその結果がレジスタに書き込まれて戻される。１機能単位あたり最高で３つまでのレジスタが読み出され、最高で１つのレジスタが書き込まれると仮定されている。
【００２１】
図７Ｂは本発明によるパイプライン７５０を示し、ここでは図８と共にさらに以下に説明される割り当て段７８０が追加されて、マルチスレッドＶＬＩＷプロセッサを実装する。一般に、割り当て段７８０は動作をグループ化して効率を最大限にする方法を決定する。パイプライン７５０は、最高でＮ個までのパケットがメモリから得られるフェッチ段７６０、フェッチされた命令（最高でＮ＊Ｋ個の命令）に関して機能単位およびレジスタが識別される復号段７７０、適切な命令が選択されＦＵに割り当てられる割り当て段７８０、および、指定された動作が実行され、かつその結果が処理される実行段７９０を含む。
【００２２】
本発明のマルチスレッドＶＬＩＷプロセッサ６００では、最高でＮ個までのスレッドがハードウェア内でサポートされる。Ｎ個のスレッドのコンテキストが存在し、単一のスレッドの可能なすべてのレジスタと、必要なすべての状態情報とを含む。マルチスレッドＶＬＩＷプロセッサ６００はＭ個の機能単位を有し、ＭはＫより大きいか等しい。図７Ｂに示された修正されたパイプライン段７５０は、次の方法で動作する。フェッチ段７６０では各サイクルにおいて、最高でＮ個までのパケット（各々は最高でＫ個の命令を含む）がフェッチされる。復号段７７０では最高でＮ＊Ｋ個までの命令を復号化し、その要件および、読み出され、かつ書き込まれるレジスタを決定する。割り当て段７８０では（最高で）Ｎ＊Ｋ個の命令からＭ個の命令を選択し、それらをＭ個の機能単位に転送する。各機能単位は最高で３個までのレジスタを読み出すことができ、１個のレジスタに書き込むことができると仮定されている。実行段７９０では、最高でＭ個までの機能単位が最高で３＊Ｍ個までのレジスタを読み出し、最高でＭ個までのレジスタに書き込む。
【００２３】
割り当て段７８０は、段７６０および７７０でフェッチされ、かつ復号化された（最高で）Ｎ＊Ｋ個の命令から適切なＭ個の命令を選択して実行する。選択の判定基準はスレッドの優先順位またはリソースの可用性またはその両方である。スレッドの優先順位判定基準の下では、種々のスレッドは異なる優先順を有することができる。割り当て段７８０は、実装されている優先順位の方針にしたがってもっとも高い優先順位を伴うスレッドに属するパケット（またはパケットからの命令）を選択し転送して実行する。多数の優先順位方針を実装できる。たとえば、Ｎ個のコンテキスト（Ｎ個のハードウェアスレッド）をサポートするマルチスレッドＶＬＩＷプロセッサに関する優先順位方針は、Ｎ個の優先順位レベルを有することが可能である。プロセッサ内のもっとも優先順位の高いスレッドは、他のどのスレッドよりも前に割り当てられる。等しい優先順位を伴うスレッドの間では、もっとも長いこと割り当てを待っていたスレッドが優先される。
【００２４】
リソースの可用性判定基準の下では、（最高でＫ個までの命令を有する）パケットは、そのパケットによって必要とされるリソース（機能単位）が次のサイクルについて使用可能である場合にのみ、割り当てられる。機能単位はその可用性を割り当て段７８０に報告する。
【００２５】
図８は、割り当て段７８０の実装の概略構成図である。図８に示されたように、割り当て段７８０を実装するために必要とされるハードウェアは、優先順位符号器８１０および２つのクロスバスイッチ８２０、８３０を含む。一般に、優先順位符号器８１０は各スレッドの中で多数の動作の状態、および使用可能な機能単位の状態を検討する。優先順位符号器８１０は、第１のクロスバスイッチ８２０を実行して設定しようとするパケットを選択するので、適切なレジスタの内容が次のサイクルの最初で機能単位に転送される。優先順位符号器８１０の出力は第１のクロスバスイッチ８２０を構成して、選択されたスレッドからのデータを適切な機能単位にルーティングする。これはたとえば、（スレッド識別子を含む）レジスタ識別子を機能単位に送信し、機能単位に別のデータネットワークを介してレジスタの内容を読み取らせ、クロスバスイッチ８１０を使用して適切なレジスタの内容を、次のサイクルの初めに機能単位によって読み出されるラッチに移動することによって達成できる。
【００２６】
優先順位符号器８１０はフェッチ段７６０（図７Ｂ）によってフェッチされたＮ個のパケットから、優先順位およびリソースの可用性に従って最高でＮ個までのパケットを選択して実行する。言い換えれば、優先順位符号器は、もっとも優先順位が高く、しかも実行のために使用不可能なリソースを必要としないスレッドを選択する。ついで、優先順位符号器は第１のクロスバスイッチ８１０を設定する。入力クロスバスイッチ８１０は最高で３Ｋ＊Ｎ個の入力を最高で３＊Ｍ個の出力にルーティングする。第１のクロスバスイッチ８１０は各パケットのレジスタ識別子（または適切なレジスタの内容）を適切な機能単位に転送する機能を有する。
【００２７】
同じサイクル内で選択できるスレッドは最高でＮ個までであり、各スレッドは最高でＫ個までの命令のパケットを発行でき、各命令は最高で３個までのレジスタを読み出せるので、選択元のレジスタ識別子は３Ｋ＊Ｎ個である。機能単位はＭ個しかなく、各機能単位は単一の命令を受け取ることができるので、選択されるべきレジスタ識別子は３Ｍ個のみである。したがって、クロスバスイッチはレジスタ識別子（またはレジスタの内容）の、３Ｋ＊Ｎから３Ｍへのルーティングを実装する。
【００２８】
出力クロスバスイッチ８３０は、Ｍ個の入力をＮ＊Ｍ個またはＮ＊Ｋ個の出力にルーティングする。第２のクロスバスイッチ８３０は適切な時間に設定され、機能単位の結果を適切なレジスタに転送して戻す。第２のクロスバスイッチ８３０は、（スレッド識別子を含む）レジスタ識別子を機能単位に送信することによって、別のネットワークとして実装できる。機能単位が結果を計算する時、機能単位はその結果を所与のレジスタ識別子にルーティングする。最高でＮ個までのスレッドにルーティングされるべき結果はＭ個ある。各スレッドは最高でＫ個までの結果を受け取ることができる。第２のクロスバスイッチ８３０は、Ｍ個の結果をＮ＊Ｋ個の可能な宛先にルーティングする。第２のクロスバスイッチ８３０は、Ｎ個のレジスタファイルすべてに接続されたＭ個のバスとして実装できる。この場合、ルーティングはＭ個になり、Ｎ＊Ｍ個の可能な宛先へルーティングすることになる（レジスタファイルがＭ個の結果を受け取る機能を有している場合）。
【００２９】
従来の単一スレッドＶＬＩＷアーキテクチャでは、１つの命令パケット内のすべての動作は同時に発行される。常に十分な機能単位がパケットを発行するために使用可能である。動作が多数のサイクルをとる時、使用可能な動作のソースが他にないので、命令発行論理はストールする可能性がある。他方、本発明によるマルチスレッドＶＬＩＷプロセッサでは、これらの制限はあてはまらない。
【００３０】
図９は従来のマルチスレッド式実装（本発明の利点がない）に関する３つのスレッドＴＡからＴＣの実行を示し、スレッドＢおよびＣはスレッドＡよりも高い優先順位を有する。スレッドＡはもっとも低い優先順位で実行されるので、その動作は最後に割り当てられることになる。図９に示されたように、より高い優先順位のスレッドＴＢおよびＴＣの現在のサイクル内で５つの動作を実装するために、５つの機能単位９２０が割り当てられている。スレッドＡは４つの動作を有するが、使用可能な機能単位９２０は２つしかない。したがって、従来のマルチスレッド実装ではスレッドＡはストールする。
【００３１】
すべてのスレッドにわたってスループットを最大にし、機能単位がアイドルであるサイクルの数を最小にするために、本発明は命令パケット分割を使用する。図８と共に上に論じられた割り当てハードウェア７８０は、命令パケット内のすべての動作を一度に割り当てるのではなく、使用可能な機能単位の数に一致する数の動作を各パケットから割り当てる。一致しない動作は実行可能状態レジスタ８５０（図８）の中で保持される。続くサイクルで、中のすべての動作が機能単位に発行されている命令パケットはそれらのスレッドの命令ストリームから更新され、一方、止められている動作を伴う命令パケットは保持される。機能単位割り当て論理７８０はついで、新しくロードされた命令パケットからの動作および、保持された命令パケットから発行されていない動作を割り当てることができる。
【００３２】
本発明による命令パケット分割の動作は図１０Ａおよび１０Ｂに示されている。図１０Ａでは３つのスレッドがあり、各々はサイクルｘの開始時に実行の準備のできている場所ｎからの命令パケットを伴う。スレッドＡはもっとも低い優先順位で実行されるので、その動作は一番最後に割り当てられることになる。スレッドＢおよびＣは、実行のために７つの使用可能な機能単位１０２０のうち５つを必要とする。機能単位１０２０−２および１０２０−６の２つだけが残っているので、スレッドＡからの最初の２つの動作が割り当てられて実行される。７つの機能単位１０２０のすべては次に十分に割り当てられる。
【００３３】
サイクルｘの完了時に、スレッドＢおよびＣに関する命令パケットがリタイアされる。図１０Ｂに示されたように、スレッドに関連づけられた命令発行論理は、命令パケットをアドレスｎ＋１に関する命令パケットで置き換える。スレッドＡに関する命令パケットがまだ完了していないので、アドレスｎからのパケットは保持され、最初の２つの動作は完了とマークされる。図１０Ｂに示された次のサイクルｘ＋１で、スレッドＡからの最後の２つの動作が機能単位に割り当てられ、同時にスレッドＢおよびＣからのすべての動作も割り当てられる。このように、本発明はハードウェアリソース（たとえば機能単位１０２０）のより大きな使用および多数のスレッドを含むワークロード全体のより少ない経過時間を提供する。
【００３４】
命令パケットは、分割がコンパイラによって組み立てられた命令パケットのセマンティックスに違反することを確認せずに分割することはできない。特に、レジスタの入力値は、レジスタがパケット内の命令の１つによって変更されている場合でも、パケット内の命令に関して同じであると仮定されている。パケットが分割され、パケットの第２の部分にある命令の１つに関するソースレジスタがそのパケットの第１の部分にある命令の１つによって変更されている場合、コンパイラのセマンティックスに違反する。これは図１１のプログラムフラグメント１１１０に示されている。
【００３５】
図１１に示されているように、場所Ｌ１、Ｌ２およびＬ３にある命令が命令パケットに組み立てられ、Ｒ０＝０、Ｒ１＝２、およびＲ２＝３がパケットの前に実行される場合、Ｒ０の値はパケットの完了後に５となる。他方、パケットが分割され、命令Ｌ１がＬ３の前に実行される場合、Ｒ０の値はパケットの完了後に２となり、コンパイラの仮定に違反する。
【００３６】
プログラムのセマンティックスに違反するパケットの分割を避ける１つの手段は、宛先レジスタが命令パケット内の別の命令においてソースとして使用されている時を識別するハードウェアを命令発行論理に追加することである。このハードウェアはこれらの書込み後読取りハザードの１つが存在している時にパケット分割を禁じる。この機構は、領域リソースをとり、プロセッサのクリティカルパスに影響を与え、したがって、プロセッサの速度を減少させる可能性がある追加のハードウェアを必要とする欠点を有する。
【００３７】
コンパイラは命令パケット内で書込み後読取りハザードを簡単に検出できる。したがって、これらのハザードを伴う命令を命令パケットに組み合わせないように選択することができる。ハードウェアはついで、これらの命令を直列的に実行するように強制され、それによってハザードを避ける。書込み後読取りハザードを有する命令パケットはエラーとみなされ、アーキテクチャは結果を保証しない。この技法はセマンティックの違反からは安全であるが、根底をなすハードウェアがパケットを分割していない場合でも、ハザードを伴う命令パケット内で使用可能な並列処理が失われるので、プログラムにおける潜在的な並列処理を使用しないという欠点を有する。
【００３８】
本発明はコンパイラの知識と少量のハードウェアを組み合わせる。例としての実装では、分割ビットと呼ばれる単一のビットが多数命令パケットの接頭辞内に置かれ、ハードウェアにこのパケットが分割できないことを知らせる。コンパイラはどのパケットが潜在的な書込み後読取りハザードを有するかを知っているので、ハザードが発生するといつでもコンパイラはこのビットをパケットの接頭辞に設定できる。実行時には、ハードウェアはビットセットを伴うパケットを分割せず、そのパケット内のすべての命令が並列に実行できるまで待つ。この概念は図１２〜１５に示されている。
【００３９】
コンパイラは、図１２の３つの命令シーケンス１２１０が安全に分割できることを検出するので、図１３に示すように分割ビットは１に設定される。他方、図１４では、命令Ｌ１とＬ３の間に書込み後読取りハザードがあるため、３つの命令シーケンス１４１０は分割できない。したがって図１５に示すように、分割ビットは０に設定される。
【００４０】
本明細書に示され、説明された実施形態およびその変形例は、本発明の原理の例にすぎず、当業者によって本発明の範囲および精神から逸脱することなく種々の変更例が実装できることを理解されたい。
【図面の簡単な説明】
【図１】従来の一般化されたマイクロプロセッサのアーキテクチャを示す図である。
【図２】従来のスーパースカラープロセッサのアーキテクチャの概略構成図である。
【図３】動作の独立性を示すプログラムフラグメントを示す図である。
【図４】  従来の超長命令語プロセッサのアーキテクチャの概略構成図である。
【図５】従来のマルチスレッドプロセッサの概略構成図である。
【図６】本発明によるマルチスレッドＶＬＩＷプロセッサの図である。
【図７Ａ】マルチスレッドプロセッサに関する従来のパイプラインを示す図である。
【図７Ｂ】本発明によるマルチスレッドプロセッサに関するパイプラインを示す図である。
【図８】図７Ｂの割り当て段の実装の概略構成図である。
【図９】スレッドＢおよびＣがスレッドＡよりも高い優先順位を有する、従来のマルチスレッド実装に関する３つのスレッドＴＡからＴＣの実行を示す図である。
【図１０Ａ】本発明による命令パケット分割の動作を示す図である。
【図１０Ｂ】本発明による命令パケット分割の動作を示す図である。
【図１１】本発明による、分割できないプログラムフラグメントを示す図である。
【図１２】本発明による、分割できるプログラムフラグメントを示す図である。
【図１３】命令分割ビットが設定されている場合の、図１２のプログラムフラグメントに対応するパケットを示す図である。
【図１４】本発明による、分割できないプログラムフラグメントを示す図である。
【図１５】命令分割ビットが設定されていない場合の、図１４のプログラムフラグメントに対応するパケットを示す図である。
【符号の説明】
１００  マイクロプロセッサ
１１０  プログラムカウンタ
１２０  レジスタセット
１３０−Ｎ  機能単位
２００  スーパースカラープロセッサ
２０５  入力待ち行列
２０８  フロントエンド部
２１０  命令フェッチブロック
２１５  命令復号ブロック
２２０  命令順序づけユニット
２３０―Ｎ  演算論理機構
２４０  レジスタセット
２５０  詳細化ブロック
３１０  プログラムフラグメント
４００  超長命令語（ＶＬＩＷ）プロセッサ
４１０  命令
４２０  統合フェッチ／復号ブロック
４３０−Ｎ  機能単位
５００  マルチスレッドプロセッサ
５１０−Ｎ  プログラムカウンタ
５２０−Ｎ  レジスタ
５３０−Ｎ  機能単位
６００  ＶＬＩＷプロセッサ
６２０−Ｎ  機能単位
７００  パイプライン
７１０  フェッチ段
７２０  復号段
７３０  実行段
７５０  パイプライン
７６０  フェッチ段
７７０  復号段
７８０  割り当て段
７９０  実行段
８１０  優先順位符号器
８２０  クロスバスイッチ
８３０  クロスバスイッチ
９２０  機能単位
１０２０  機能単位
１１１０  プログラムフラグメント
１２１０  命令シーケンス
１４１０  命令シーケンス
【図１】
0003797471.tif 000002
【図２】
0003797471.tif 000003
【図３】
0003797471.tif 000004
【図４】
0003797471.tif 000005
【図５】
0003797471.tif 000006
【図６】
0003797471.tif 000007
【図７Ａ】
0003797471.tif 000008
【図７Ｂ】
0003797471.tif 000009
【図８】
0003797471.tif 000010
【図９】
0003797471.tif 000011
【図１０Ａ】
0003797471.tif 000012
【図１０Ｂ】
0003797471.tif 000013
【図１１】
0003797471.tif 000014
【図１２】
0003797471.tif 000015
【図１３】
0003797471.tif 000016
【図１４】
0003797471.tif 000017
【図１５】
0003797471.tif 000018