(57)【要約】分岐命令を内部に有するプログラムを実行するためのマルチプロセッサデータ処理システム。各分岐命令はその分岐命令によってプログラムが分岐するときに実行すべき命令を規定する分岐先アドレスをプログラム中に指定する。このデータ処理システムは、機能ユニット、ローカルメモリ、およびポインタを備えた複数の処理セクションを有する。ローカルメモリはその処理セクション内の機能ユニットで実行すべきプログラムからの命令シーケンスを格納する。ポインタは機能ユニットで実行すべきローカルメモリ内の次の命令を規定する値を有する。各処理セクションのポインタは分岐命令のうちの一つに応答して機能ユニットが分岐するときに、その分岐命令の分岐先アドレスによって決まる新しい値にリセットされる。
2006504152.tif 000002
【特許請求の範囲】
【請求項１】
分岐命令を内部に有するプログラムを実行するためのデータ処理システムであって、前記分岐命令のそれぞれが該分岐命令によって前記プログラムが分岐するときに実行すべき命令を規定する分岐先アドレスを前記プログラム中に指定するものであって、前記データ処理システムが複数の処理セクションからなり、該処理セクションが、
その処理セクションで実行すべき前記プログラムからの様々な長さの命令を含む命令シーケンスを格納するためのローカルメモリと、
前記ローカルメモリに格納された命令を実行するための機能ユニットと、
前記機能ユニットで実行すべき前記ローカルメモリ内にある次の命令を規定する値を有するポインタとを含み、
前記処理セクションのそれぞれが前記プログラムの一部を実行し、
前記機能ユニットのそれぞれが他の機能ユニットと同期して命令を実行し、
前記処理セクションのそれぞれにおける前記ポインタが、前記分岐命令のうちの１つに応答して前記機能ユニットが分岐するときに、該分岐命令の分岐先アドレスによって決まる新しい値にリセットされる、データ処理システム。
【請求項２】
前記プログラム中の前記分岐先アドレスのそれぞれについて該分岐先アドレスに対応する前記ポインタに対して前記ポインタ値のうちの１つを指定するマッピングを格納するためのメモリを更に含む、請求項１に記載のデータ処理システム。
【請求項３】
前記プログラムがスーパーインストラクションに分割され、該スーパーインストラクションのそれぞれが線形コードブロックを含み、前記スーパーインストラクションには前記コードブロックに対応する開始アドレスからしか入ることができず、前記コードブロックのそれぞれが１以上の分岐命令を含み、該分岐命令のうちの少なくとも１つが前記プログラム中のスーパーインストラクションに対応する分岐先アドレスを有する、請求項１に記載のデータ処理システム。
【請求項４】
前記スーパーインストラクションのうちの１つが、前記処理セクションのそれぞれについて各クロックサイクルで実行すべき１つの命令を含む、請求項１に記載のデータ処理システム。
【請求項５】
前記処理セクションのうちの１つにおける前記ローカルメモリがキャッシュメモリを含む、請求項１に記載のデータ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマルチプロセッサに基づくコンピュータシステムに関し、詳しくは各サイクルにおいて複数の命令を実行するコンピュータシステムに関する。
【背景技術】
【０００２】
計算処理装置の動作速度には限界がある。いったん限界に達すると、それ以上の計算処理能力の向上は、複数の計算機能ユニットを同時に動かしてプログラムを実行することによる、ある種の並列処理によってしか得ることができない。ある種の多重処理システムでは、各マシンサイクルにおいて、複数のプロセッサがそれぞれ、プログラムからの１つの命令を実行する。次の命令サイクルで実行すべき命令群は、１つの非常に長い命令語（ＶＬＩＷ）としてプロセッサバンクに与えられる。各プロセッサはそのＶＬＩＷの一部を実行する。
【０００３】
ＶＬＩＷプロセッサは、各サイクルにおいて同時に機能ユニットで発行される一連の処理を制御するための命令語を必要とする。ＶＬＩＷ命令ユニットの最も単純な実施形態は「水平マイクロコントローラ」と呼ばれる。水平マイクロコントローラは、各機能ユニットについて個別のフィールドに分割された水平命令語を規定する。各機能ユニット（ＦＵ）は、そのＦＵで実行すべき処理を指定するために、異なるビット数の情報を必要とする場合がある。各処理のフォーマットは、オペレーションコード、レジスタオペランド指定、リテラルオペランド指定、およびＦＵで可能な処理を指定するのに必要なその他の情報などのフィールドに、さらに部分分割される場合がある。一般に各機能ユニットは、水平命令レジスタ内の特定位置に置かれた現在の処理を復号して実行する働きをもつ。
【０００４】
単純な水平マイクロコントローラの中の命令レジスタは、最も単純な形態の場合、個別の固定サイズのオペレーションフィールドに分割される。各オペレーションフィールドは、ＦＵのうちの１つに対して制御処理を提供する働きをもつ。各オペレーションフィールドのサイズは、対応するＦＵで実行される全ての処理を符号化するのに十分なサイズでなければならない。各ＦＵは命令語の中の自分の部分がどこから始まるのかを「知っている」ので、個々のＦＵが命令語の残りの部分を解釈する必要はない。
【０００５】
この単純な水平マイクロコントローラには多数の利点がある。第１に、命令メモリから水平命令レジスタへの命令のフェッチが直接的であり、命令メモリから得た命令ビットをシフトしたり多重化したりする必要がまったくないことである。命令レジスタ内の各オペレーションフィールドが１つの機能ユニットに配線されていて、シフトや多重化を行なうことなく処理を対応する機能ユニットに適切に与えることができる。
【０００６】
第２に、水平マイクロコントローラに対する命令が、メモリ内で順番に配置されることである。一つの命令の中の複数の処理は連続していて、その後に次の命令が続く。
【０００７】
第３に、水平マイクロコントローラは拡張可能なＶＬＩＷ構成で実施することができることである。その際、命令メモリは各機能ユニットについて個別の命令メモリに分割される。各機能ユニットは、個別の命令シーケンサを用いて自分の命令メモリから各処理を選択する。分岐は、分岐先アドレスを全ての命令シーケンサに対して同報通信することによって実施される。全てのオペレーションフィールドのサイズが固定であるため、分岐先アドレスを用いて全ての命令メモリの中を同じように指定することで、全機能ユニットに対して適当な次の処理を選択させることができる。命令キャッシュも同様にして簡単に分散させることができる。
【０００８】
残念ながら、水平マイクロコントローラは理想的なものとは言えない。具体的には、ＶＬＩＷプログラムを表現するのに必要な命令メモリの量が多すぎることが多い。ＶＬＩＷプログラムはＮＯＯＰ処理を頻繁に使用する。ＮＯＯＰ処理は対応する機能ユニットをアイドル状態のままにするコマンドであり、プログラム中のかなりの数の処理がＮＯＯＰ処理で表現される場合がある。原理上ＮＯＯＰは非常に少ない命令ビット数で指定することができるが、水平マイクロ命令は簡単さを維持するために固定サイズのフィールドを使用する。ある機能ユニットでＮＯＯＰを表現するのに必要なビット数は、その機能ユニットで最も長い処理を表現するのに必要なビット数と同じである。長い処理は、ラテラル、分岐先アドレス、および複数の入出力オペランドなどを指定することが多い。長い処理を規定すればするほど、非常に少ない情報を同じように指定する処理は、多くの無駄を伴なうことになる。
【０００９】
可変幅ＶＬＩＷフォーマットは、この問題を軽減するように設計されている。Multiflow社とCydrome社のＶＬＩＷプロセッサはいずれも、ＶＬＩＷプログラムの中でＮＯＯＰ処理をさらに効率的に表現する機能を備えている。それらのマシンはいずれも、可変幅ＶＬＩＷ命令の概念を用いて１サイクル内で実行される一連の処理をさらに効率的に表現する。コードサイズの観点からすれば、各機能ユニットで可変幅の処理を可能にすることは魅力的である。可変幅処理によれば、わずか数ビットで表現することが可能になる処理もあれば、表現するビット数が実質的に長くなる処理もある。処理を可変サイズにする場合はＶＬＩＷ命令も可変サイズにし、１サイクル内で複数の可変サイズの処理が実行されるような独自仕様にすることが望ましい。
【００１０】
残念ながら、可変幅フォーマットを用いてＶＬＩＷ命令表現を圧縮する場合、ハードウェアは比較的複雑なものになる。可変幅ＶＬＩＷ命令用の命令ユニットを作成する際の問題は、概して２つの下位問題に分けることができる。第１の下位問題は、命令メモリから位置合わせされた命令語を取得することに関する問題である。可変命令幅を可能にするためには、命令取得ユニットが、前の命令の始点から可変量だけずらした位置にある命令フィールドを取得するようにしなければならない。新たにフェッチした各命令は、前の命令のサイズに応じて可変量だけシフトさせなければならない。命令が可変サイズであるため、命令は固定ワードサイズの命令メモリ内でワード境界にまたがることもある。
【００１１】
第２の下位問題は、位置合わせされた命令内の各処理を識別し、それらを対応する各機能ユニットへ送信することに関する問題である。命令が位置合わせされているので、一番左側の処理は位置合わせされているものと考えられる。命令の始点から開始して、全処理を左側へスキップすることにより、次の処理をそれぞれ識別する。しかしながら、各処理が可変幅であるため、これを行なうためにはフィールドを実質的にシフトさせ、各処理を正しく分離しなければならない。これらの問題を克服するのに必要なハードウェアは、このような可変幅命令の実施形態のコストを大幅に増大させる。
【発明の開示】
【発明が解決しようとする課題】
【００１２】
本発明の目的は概して、改良された可変幅ＶＬＩＷプロセッサを提供することである。
【００１３】
本発明の更に他の目的は、従来技術によるプロセッサに比べて必要なメモリが少なく、複雑な復号化ハードウェアを必要としない、可変幅ＶＬＩＷプロセッサを提供することである。
【００１４】
本発明のそれらの目的および他の目的は、本発明の以下の詳細な説明および添付の図面から当業者に明らかになるであろう。
【課題を解決するための手段】
【００１５】
本発明は、分岐命令を内部に含むプログラムを実行するためのマルチプロセッサデータ処理システムである。分岐命令によってプログラムが分岐するときに実行すべき命令を定義しているプログラムの中では、各分岐命令によって分岐先アドレスが指定される。このデータ処理システムは複数の処理セクションを有する。各処理セクションは、機能ユニット、ローカルメモリ、およびポインタを有する。ローカルメモリは、その処理セクションの機能ユニットで実行すべき、プログラムからの命令シーケンスを記憶する。ポインタは、機能ユニットで実行すべきローカルメモリ内にある次の命令を規定する値を有する。各処理セクションはプログラムの一部を実行し、各機能ユニットがその他の機能ユニットと同期して命令を実行する。分岐命令のうちの１つに応じて機能ユニットが分岐するとき、各処理セクションのポインタは、その分岐命令の分岐先アドレスによって決まる新しい値にリセットされる。このデータ処理システムは、プログラム中の各分岐先アドレスのマッピングを記憶するメモリを有する。このマッピングは、各分岐先アドレスについて各ポインタの値を指定する。本発明の好ましい実施形態では、ローカルメモリのうちの１つに記憶される命令シーケンスが様々な長さの命令を含む。本発明の一実施形態では、プログラムがスーパーインストラクションに分割される。各スーパーインストラクションは線形コードブロックを有し、該線形コードブロックにはそのブロックに対応する開始アドレスからしか入ることができない。また、各コードブロックは１以上の分岐命令を含み、それらの分岐命令のうちの少なくとも１つがプログラム中のスーパーインストラクションに対応する分岐先アドレスを有する。スーパーインストラクションは、各マシンサイクルにおいて各プロセッサで実行すべき命令群に分割される。ローカルメモリがキャッシュメモリとして実施される実施形態を実施することもできる。
【発明を実施するための最良の形態】
【００１６】
本発明が利点を提供する様式は、水平マイクロコントローラ１０を示すブロック図である図１を参照することにより、更に容易に理解することができる。マイクロコントローラ１０は、符号１３で図示されＦ１、・・・、Ｆｎというラベルが付されたＮ個の機能ユニットを有する。各機能ユニットは、水平命令レジスタ１２の一部から次の命令を取得する。水平命令レジスタは各サイクルごとに符号１１で図示した命令メモリからロードされる。命令メモリは一連のベクトルとして構成され、各ベクトルは１タイムサイクルで実行すべき処理を規定するＮ個のオペランドで構成される。水平マイクロコントローラ１０に対する命令はメモリ内に連続的に配置される。ＶＬＩＷ命令を表現する従来の方法では、各命令が使用される時間に従って命令メモリ内に水平に表現される。すなわち、１サイクル中に発行された命令ビットはすべて命令メモリ内に連続的に配置される。機能ユニットでＴ１に実行される各処理は連続していて、その後機能ユニットでＴ２に実行される処理が続き、以下同様に続けられる。
【００１７】
上記のように、この種のアーキテクチャではメモリの使用が非効率的であったり、機能ユニットのハードウェアが複雑であったりすることが避けられない。すべてのオペランドを固定長にした場合、各ベクトルは固定長になり、各ベクトルはベクトル内の情報量に関係なく同量のメモリを必要とする。メモリ節約のためにオペランドを可変長にした場合、各機能ユニットは、その機能ユニットのオペランドが命令レジスタ内のどこに配置されているのかの判定するためのハードウェアを備える必要がある。また、次の命令の位置はタイムサイクル毎に大きく変わる可能性があるので、各機能ユニットは命令レジスタのうちのかなりの部分にアクセスできなければならない。したがって、命令レジスタと機能ユニットの間の相互接続ハードウェアは、固定長命令語の場合に必要なものよりもはるかに複雑にならざるを得ない。
【００１８】
本発明によるＶＬＩＷプロセッサは分散型ＶＬＩＷプロセッサ（ＤＶＬＩＷ）と呼ぶことにする。ＤＶＬＩＷプロセッサは、各機能ユニットが自分の命令シーケンスを格納するためのローカルメモリを有するアーキテクチャを用いて、上で述べた問題を回避する。さらに、プログラムを「垂直」レイアウトになるようにコンパイルし、そのレイアウトによって各機能ユニットに対する命令シーケンスを分離し、機能ユニット間の同期を維持しながらそのコードを可変長命令語として管理できるようにすることで、コード圧縮率を向上させる。
【００１９】
概して、プログラムはスーパーブロックと呼ばれるプログラム領域に分割される。スーパーブロックは、先頭部分からしか入ることができない線形コードシーケンスである。このコードシーケンスは、条件付きで実行される分岐処理によって表現された複数の出口をスーパーブロック内に有することができる。この領域に入る唯一の方法は、スーパーブロックの最初の命令へ分岐することである。理由は後で説明するが、スーパーブロックは以下で詳しく説明する「スーパーインストラクション」の一形態である。通常、あるスーパーブロック内における他のスーパーブロックへの分岐は、分岐先スーパーブロックをその「名前」で参照する。ただし、この名前は、その分岐先スーパーブロックのコードがメインメモリに格納されているアドレスであってもよい。
【００２０】
コンピュータコード内のスーパーブロックは、ＤＷＬＩＷプロセッサで実行される１以上のスーパーインストラクションにコンパイルされる。スーパーインストラクションの概略的な形は図２のように表すことができる。この図は、スーパーインストラクションの各マシンサイクルで実行される処理を示している。テーブル内の各エントリは、あるマシンサイクルにおいて機能ユニットで実行すべき処理を表している。各マシンサイクルは１行で表現される。ある行の処理はすべて同時に、対応するマシンサイクルで発行される。一機能ユニットにつき１つの処理が発行される。列は、処理を実行する機能ユニットに対応する。「Ｘ」はそれぞれ、行で指定された時間に列で指定された機能ユニットで実行すべき任意サイズの処理を意味する。空白のままの四角はＮＯＯＰを示す。
【００２１】
次に図３を参照する。この図はスーパーインストラクションのメインメモリ表現の例を示している。ラベル「ADDR_START」はスーパーインストラクションの開始アドレスを示す。最初の２ワードは、タプルリスト（（Ｆ１，４），（Ｆ２，１），（Ｆ３，１），（Ｆ５，２））を含むタグワードである。アスタリスクはそのタプルリストの終端を示すエンドマーカである。最後のマークＮはこのスーパーインストラクションによって実行される総サイクル数を示す。この説明で使用した各記号には、詳細なバイナリコードを割り当てなければならない。実際に使用されるバイナリコードについては、設計上の選択の問題であるため、本明細書では詳しく説明しないことにする。
【００２２】
各タプルは、実行を行なう機能ユニットと、その機能ユニットで実行すべき処理のリストを表現するのに必要なメインメモリの命令語の数とを指定している。つまり、（Ｆ１，４）は、タグヘッダの後ろにある最初の４ワード（Ｃ１というラベルが付されている）を機能ユニット１に対応する分散型命令キャッシュへ送信すべきことを意味している。それらの４ワードは処理文を含み、その処理文がＦ１の処理デコーダによって解釈されると、スーパーインストラクションのＦ１の列に指定された一連の処理（ＮＯＯＰを含む）が実行される。本発明の好ましい実施形態では、スーパーインストラクションの実行時間全体にわたってアイドルのままであるＦＵについてはタプルを作成しない。そのようにタプルのない部分は、適当な長さのＮＯＯＰシーケンスであるものとして解釈される。
【００２３】
次に図４を参照する。この図は本発明によるＤＶＬＩＷプロセッサを示すブロック図である。プロセッサ５０は複数の処理セクション５１から構成される。各処理セクションは、ローカル命令メモリ５３と、機能ユニット５２と、機能ユニット５２で実行すべきメモリ５３内の次の命令を指定するポインタ５４とを含む。ローカルメモリは、各スーパーインストラクションのうちの、そのローカルメモリに対応する機能ユニットで実行すべき部分を有する。すなわち、図２に示すフォーマットで表現されるようなスーパーインストラクションのうちの、その機能ユニットに対応する列から得られたコードを有する。各処理セクションは互いに同期していて、各機能ユニットが常に正しい処理を実行するようになっている。すなわち、各マシンサイクルにおいて行が変わるのに従って、各処理セクションはスーパーインストラクションを一度に一行づつ進める。
【００２４】
機能ユニットのうちの１つが分岐を行なうときは、その分岐先を全機能ユニットとコントローラ５５とに同報通信する。分岐先は、実行すべき次のスーパーインストラクションの「名前」である。この名前は通常、メインメモリ内のスーパーブロックのアドレスである。コントローラ５５は、ルックアップテーブル５７を用いて、各命令メモリにおいてその新たなスーパーインストラクションが開始されるローカルアドレスを確認する。Ｎ個の処理セクションがある場合、そのようなアドレスはＮ個あることになる。次に、それらのアドレスをそれぞれ、対応する処理セクションのポインタレジスタにロードする。次に各処理セクションは、内部に格納しているプログラムの実行をそのポインタで指定された位置から再開する。
【００２５】
ローカル命令メモリは、プログラムの開始時にメインメモリからロードすることができる。あるいはローカルメモリは、なんらかのスーパーインストラクションへ分岐するときに、そのスーパーインストラクションに対応するコードを受信するようにしてもよい。それら２つの方法を組み合わせて実施することも可能である。たとえば、２回以上実行されるスーパーインストラクションのコードはローカルメモリに格納し、あまり使用されないコードはメインメモリに格納するようにしてもよい。ローカル命令メモリは、従来のメモリまたはキャッシュメモリとして実施することができる。
【００２６】
上に述べたルックアップテーブル５７は各ローカル命令メモリに分散させることもできる。その場合、各処理セクションのローカル命令メモリには、そのローカルメモリに関連する特定の機能ユニットに関する情報だけを格納する。そのような実施形態の場合、各処理セクションは、同報通信された分岐先によって識別されるスーパーインストラクションに対応する適当なローカル開始アドレスを検索する。
【００２７】
あるスーパーインストラクションの実行が分岐することなく完了する場合、実行中のプログラムの中でその現在のスーパーインストラクションのすぐ後に続く実行不可能なスーパーインストラクションを識別する仕組みが必要になる。コンパイラは、機能ユニットのうちの１つに対する命令シーケンスの終わりに次のスーパーインストラクションを識別する分岐命令を付加することにより、この問題を解決することができる。あるいはルックアップテーブル５７に、各スーパーインストラクションのサイクル数と「実行不可能」なスーパーインストラクションの識別情報とを格納する列を含めてもよい。そして、機能ユニットのうちの１つが分岐を行うことなくそのサイクル数を越えた場合、コントローラ５５によって強制的に分岐させる場合がある。
【００２８】
各機能ユニットはそれぞれ別々に自分の処理文ストリームを解釈する機能を有する。処理文ストリームを解釈すると、仮想的なスーパーインストラクションタイミング要件に一致する実行パターンが得られる。仮想プログラムスケジュールの正確さを維持するためには、ＮＯＯＰ処理も処理文ストリームの中に符号化する必要がある。各機能ユニットは必要に応じて、可変幅の命令符号化方式と固定幅の命令符号化方式のいずれかを使用することができる。解釈は各ＦＵで個別に実施されるため、ある機能ユニットにおける解釈と別の機能ユニットにおける解釈との間に相互関係はない。したがって本発明は、可変長オペレーションフィールドを用いた従来技術のシステムに匹敵するコード圧縮率を維持ししつつ、そのハードウェアの複雑さを回避する。
【００２９】
上記のように、本発明はローカルメモリがキャッシュである実施形態で実施することも可能である。ここで図５を参照する。この図は本発明による分散型命令キャッシュ１００を示す概略図である。命令キャッシュ１００は、マスタタグアレイ１０２と、各機能ユニットに対するローカル命令キャッシュ１０４とを有する。プログラムの分岐が発生すると、メインメモリ１０６内の分岐先位置のアドレスを用いて各命令キャッシュ１０４内の適当なデータが識別される。各命令キャッシュ１０４は連想キャッシュタグアレイ１０８を有する。連想キャッシュタグアレイ１０８は、対応する機能ユニットの処理シーケンスがその機能ユニット用のキャッシュデータアレイ内のどこにあるかを識別するローカルアドレスを、分岐先アドレスに関連付ける。
【００３０】
機能ユニットが作動するとキャッシュが空にされ、分岐の結果、すべての連想タグアレイで検索の失敗が起こる。これによりキャッシュミスが起こる。次いで、分岐先アドレスを各タグアレイに格納し、各ローカルアドレスタグを初期化して対応する機能ユニットに対する命令文が何もないことを示す空の値にする。キャッシュを埋めるために、スーパーインストラクションのヘッダを分離する。各ＦＵタプルを識別し、それらを用いて各ＦＵの処理文をその装置へ送信する。
【００３１】
各ローカルキャッシュの連想タグアレイ内のメモリアドレスフィールドは、分岐先スーパーインストラクションのアドレス値を有する。処理文を何らかの機能ユニットに送信する場合、対応するローカルキャッシュデータアレイ１１０内の空き位置を識別して、その位置にＦＵ処理文を入れる。各機能ユニットは自分の処理文を受信すると、その情報を対応するキャッシュデータアレイ１１０に格納する。連想タグアレイのローカルアドレスフィールド１１２は、スーパーインストラクションのメインメモリアドレス１１１を機能ユニットの処理文に関連付けるのに使用される。大きなスーパーインストラクションに対処するため、キャッシュデータアレイ１１０は、連結リスト技法を用いて処理文のサイズを拡大できるようにするための次フィールド１１６を有する。
【００３２】
スーパーインストラクションは、全機能ユニットに対して処理文のロードが完了したことを示す最後のタプルを処理すると、マスタタグアレイ１０２をロードして終了する。マスタタグアレイ内の空きエントリを識別し、そのスーパーインストラクションのアドレスをメモリアドレスフィールド１１３に入れる。スーパーインストラクションのヘッダ部から得られたサイクル数Ｎは、マスタタグアレイのフィールド１１４に入れる。メインメモリのスーパーインストラクション文を完全に構文解析した後、メモリ内の次のスーパーインストラクションのアドレスを識別し、そのアドレスをマスタタグアレイのフィールド１１５に入れる。
【００３３】
ローカルキャッシュデータアレイ内の空きエントリは、空きリストのヘッド部１２１にリンクされる。新たなスーパーインストラクションが命令キャッシュに置かれると、標準的な連結リスト技法を用いて空きのデータアレイエントリが識別される。命令キャッシュからスーパーインストラクションがパージされると、対応するデータエントリはすべて空きリストのテイル部１２２にリンクされ、対応する連想タグエントリがすべてクリアされる。
【００３４】
本発明の好ましい実施形態において、スーパーインストラクションは必ず、命令キャッシュ内に全部存在しているか、または全く存在しないかのどちらか一方の状態にある。スーパーインストラクションが大きすぎて命令キャッシュに収まらない場合、そのスーパーインストラクションは、命令キャッシュに収まるような更に小さいスーパーインストラクションに分割される。
【００３５】
スーパーインストラクション内で分岐に遭遇すると、そのスーパーインストラクションで指定された分岐先アドレスが各機能ユニットへ同報通信される。分岐先スーパーインストラクションのアドレスを用いて、各ＦＵに関する対応する処理文を検索する。検索はすべて並列に実施される。各ＦＵは、ＦＵ固有の命令フォーマットを用いて処理ストリームの解釈を開始する。スーパーインストラクションを実行するために全体に送信しければならない唯一の情報が、分岐先アドレスだけであることに注意して星い。
【００３６】
上記のように、スーパーインストラクションの実行が分岐することなく完了する場合、メインメモリ内で現在のスーパーインストラクションのすぐ後に続く実行不可能なスーパーインストラクションを識別する仕組みが必要である。図５に示した実施形態では、スーパーインストラクションの終わりに達したときに、マスタタグアレイが分岐をシミュレートすることによってそのタスクを実行する。スーパーインストラクションの終わりはサイクル数を用いて検出され、サイクル数はスーパーインストラクションが終了するまでデクリメントされる。次のスーパーインストラクションは、キャッシュ内で現在のスーパーインストラクションと連続していなくてもよいが、分岐の際の連想タグの検索をシミュレートすることによって識別できるものでなければならない。スーパーインストラクションが完了すると、マスタタグアレイの次アドレスを用いてその後に続く実行不可能なスーパーインストラクションへの分岐をシミュレートする。
【００３７】
本発明は、分岐をパイプライン化して、分岐の実行に２サイクル以上が必要となるようにした実施形態で実施することも可能である。そのような実施形態では、タグアレイの検索や、各ＦＵの実際の処理文に対するキャッシュローカルアドレスポインタを用いた索引付けを実行するのに、２サイクル以上かけてもよい。分岐をパイプライン化する場合、マスタタグアレイによって構成されるような実行不可能な分岐も同様にしてパイプライン化される。
【００３８】
当業者であれば、本発明に対する様々な変更は、上記の説明と添付の図面から明らかであろう。したがって、本発明は特許請求の範囲の記載によってしか制限されるべきではない。
【図面の簡単な説明】
【００３９】
【図１】水平マイクロコントローラ１０を示すブロック図である。
【図２】スーパーインストラクションの各マシンサイクルで実行される処理を示す図である。
【図３】スーパーインストラクションのメインメモリ表現の例を示す図である。
【図４】本発明によるＤＶＬＩＷプロセッサを示すブロック図である。
【図１】
2006504152.tif 000003
【図２】
2006504152.tif 000004
【図３】
2006504152.tif 000005
【図４】
2006504152.tif 000006
【図５】
2006504152.tif 000007
【国際調査報告】
2006504152.tif 000008
2006504152.tif 000009