(57)【要約】  複数個の命令からなる超長命令語を実行するＶＬＩＷプロセッサにおいて、低コストで、複数の命令流の実行を可能とする。  複数個の命令から構成される超長命令語を実行するプロセッサにおいて、Ｍ個の命令流の前記超長命令語を格納する複数のメモリバンクを備えるＮ（Ｎ＜Ｍ）個の命令キャッシュから、最大Ｍ個の命令流の前記超長命令語を同時にフェッチする。また、各命令流に命令流優先度を設定し、各命令流が使用するメモリバンクの数を示すバンク数情報と、各命令流の命令アドレスとに基づき、各命令流が使用するメモリバンクを全メモリバンクの中から特定し、複数命令流が同一メモリバンクを使用する場合には、前記命令流優先度に基づき、優先度の高い命令流から順に、命令流が使用するメモリバンクを決定し、当該命令流の命令アドレスを当該メモリバンクに供給するようにしてもよい。
2009107462.tif 000002
【特許請求の範囲】
【請求項１】
複数個の命令から構成される超長命令語を実行するプロセッサであって、Ｍ個の命令流の前記超長命令語を格納する複数のメモリバンクを備えるＮ（Ｎ＜Ｍ）個の命令キャッシュから、最大Ｍ個の命令流の前記超長命令語を同時にフェッチすることを特徴とするプロセッサ。
【請求項２】
各命令流に命令流優先度を設定し、各命令流が使用するメモリバンクの数を示すバンク数情報と、各命令流の命令アドレスとに基づき、各命令流が使用するメモリバンクを全メモリバンクの中から特定し、複数命令流が同一メモリバンクを使用する場合には、前記命令流優先度に基づき、優先度の高い命令流から順に、命令流が使用するメモリバンクを決定し、当該命令流の命令アドレスを当該メモリバンクに供給するアドレス供給装置を備えることを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記バンク数情報が、前サイクルにフェッチされた、前記超長命令語の一部のフィールドであることを特徴とする請求項２に記載のプロセッサ。
【請求項４】
前記バンク数情報が、命令流の最初の命令をフェッチする場合に、命令流毎に固定数であることを特徴とする請求項２又は３に記載のプロセッサ。
【請求項５】
前記超長命令語に分岐命令が含まれる場合に、各分岐結果に対応する複数のバンク数情報が、前サイクルにフェッチされた前記超長命令語の一部のフィールドであることを特徴とする請求項２乃至４の何れか１項に記載のプロセッサ。
【請求項６】
各分岐結果に対応する複数の前記バンク数情報は２つであり、それぞれ、分岐が成立した場合又は不成立した場合のバンク数情報として、用いられることを特徴とする請求項５に記載のプロセッサ。
【請求項７】
前記超長命令語に分岐命令が含まれる場合に、一つのバンク数情報と固定数が、それぞれ、分岐成立時または不成立時のバンク数情報として用いられ、前記一つのバンク数情報が、前サイクルにフェッチされた前記超長命令語の一部のフィールドであり、前記固定数は、外部の制御信号又はバンク数情報の変更命令により、設定される数値であることを特徴とする請求項５又は６に記載のプロセッサ。
【請求項８】
前記バンク数情報が、命令流毎に固定数であり、前記固定数は、外部からのバンク数制御信号又はバンク数情報の変更命令により、設定及び変更されることを特徴とする請求項２に記載のプロセッサ。
【請求項９】
前記バンク数情報が、命令流毎に用意されたメモリに格納され、前記メモリは、各命令流の命令アドレスに基づいて参照されることを特徴とする請求項２に記載のプロセッサ。
【請求項１０】
前記命令流優先度は、命令流毎に固定値であり、当該固定値は、外部からの命令流優先度制御信号、命令流優先度の変更命令、前サイクルにフェッチされた超長命令語の一部のフィールドである命令流優先度変更フラグ、の何れかにより設定及び変更されることを特徴とする請求項２乃至９の何れか１項に記載のプロセッサ。
【請求項１１】
前記命令流優先度は、ラウンドロビン方式により決定され、最も高い優先度を与える命令流や優先度が変化する順序が、外部からの制御信号、命令流優先度の変更命令、前サイクルにフェッチされた超長命令語の一部のフィールドである命令流優先度変更フラグ、の何れかにより設定及び変更されることを特徴とする請求項２乃至９の何れか１項に記載のプロセッサ。
【請求項１２】
前サイクルにフェッチされた超長命令語の一部のフィールドである優先度ポインタにより、前記ラウンドロビン方式で、最も高い前記命令流優先度を持つ命令流を設定することを特徴とする請求項１１に記載のプロセッサ。
【請求項１３】
各命令流の命令がフェッチされた又はされなかった回数に基づき、命令流優先度が変更されることを特徴とする請求項２乃至１２の何れか１項に記載のプロセッサ。
【請求項１４】
各命令流の命令がフェッチされた回数の少ない順に、より高い命令流優先度を与えることを特徴とする請求項２乃至１３の何れか１項に記載のプロセッサ。
【請求項１５】
前記命令流優先度は、各命令流の命令がフェッチされなかった回数が多い順に、より高い優先度を与えることを特徴とする請求項２乃至１３の何れか１項に記載のプロセッサ。
【請求項１６】
前記命令流優先度は、特定の命令流では固定値であり、それ以外の命令流については、ラウンドロビン方式、前サイクルにフェッチされた超長命令語の一部のフィールドである命令流優先度フラグ、命令流の命令がフェッチされた回数の少ない順により高い優先度、命令流の命令がフェッチされなかった回数が多い順により高い優先度、の何れか又はその組合せにより決定されることを特徴とする請求項２乃至１５の何れか１項に記載のプロセッサ。
【請求項１７】
各命令流が使用するメモリバンクの重複が最小となる命令アドレスに、各命令流の命令を配置するプログラミング手段又はコンパイラを備えることを特徴とする請求項２乃至１６の何れか１項に記載のプロセッサ。
【請求項１８】
命令流毎に、各命令流が使用するメモリバンク数を指定できるプログラミング手段又はコンパイラを備えることを特徴とする請求項２乃至１６の何れか１項に記載のプロセッサ。
【請求項１９】
命令流毎に、各命令流が使用するメモリバンクを指定できるプログラミング手段又はコンパイラを備えることを特徴とする請求項２乃至１６の何れか１項に記載のプロセッサ。
【請求項２０】
前記命令アドレスは、各命令流の超長命令語がフェッチされた場合に、前記命令アドレスに、フェッチした超長命令語の長さに応じた値と、命令流毎の命令流オフセットとを加算した値が、次サイクルにおける当該命令流の命令アドレスとなることを特徴とする請求項２乃至１９の何れか１項に記載のプロセッサ。
【請求項２１】
前記命令流オフセットは、前記プログラミング手段又は前記コンパイラによって、設定されることを特徴とする請求項２０に記載のプロセッサ。
【請求項２２】
前記命令流オフセットは、命令流毎に固定数であり、当該前記固定数は、外部からの命令流オフセット制御信号、命令流オフセットの変更命令、前サイクルにフェッチされた超長命令語の一部のフィールドである命令流オフセット変更フラグ、の何れかにより設定、変更されることを特徴とする請求項２１に記載のプロセッサ。
【請求項２３】
前記命令流オフセット制御信号、命令流オフセットの変更命令、命令流オフセット変更フラグは、前記プログラミング手段又は前記コンパイラによって、設定されることを特徴とする請求項請求項２０乃至２２の何れか１項に記載のプロセッサ。
【請求項２４】
プロセッサを用いて複数個の命令から構成される超長命令語を実行する超長命令語実行方法であって、Ｍ個の命令流の前記超長命令語を格納する複数のメモリバンクを備えるＮ（Ｎ＜Ｍ）個の命令キャッシュから、最大Ｍ個の命令流の前記超長命令語を同時にフェッチすることを特徴とする超長命令語実行方法。
【請求項２５】
各命令流に命令流優先度を設定し、各命令流が使用するメモリバンクの数を示すバンク数情報と、各命令流の命令アドレスとに基づき、各命令流が使用するメモリバンクを全メモリバンクの中から特定し、複数命令流が同一メモリバンクを使用する場合には、前記命令流優先度に基づき、優先度の高い命令流から順に、命令流が使用するメモリバンクを決定し、当該命令流の命令アドレスを当該メモリバンクに供給することを特徴とする請求項２４に記載の超長命令語実行方法。
【請求項２６】
複数個の命令から構成される超長命令語を実行するプロセッサとしてコンピュータを機能させるための超長命令語実行プログラムであって、Ｍ個の命令流の前記超長命令語を格納する複数のメモリバンクを備えるＮ（Ｎ＜Ｍ）個の命令キャッシュから、最大Ｍ個の命令流の前記超長命令語を同時にフェッチすることを特徴とするプロセッサとしてコンピュータを機能させるための超長命令語実行プログラム。
【請求項２７】
請求項２６に記載の超長命令語実行プログラムにおいて、前記プロセッサは、各命令流に命令流優先度を設定し、各命令流が使用するメモリバンクの数を示すバンク数情報と、各命令流の命令アドレスとに基づき、各命令流が使用するメモリバンクを全メモリバンクの中から特定し、複数命令流が同一メモリバンクを使用する場合には、前記命令流優先度に基づき、優先度の高い命令流から順に、命令流が使用するメモリバンクを決定し、当該命令流の命令アドレスを当該メモリバンクに供給するアドレス供給装置を備えることを特徴とする超長命令語実行プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数命令流を同時実行するプロセッサ、その方法及びそのプログラムに関する。
【背景技術】
【０００２】
複数の命令語（演算、ロードなど）から構成される超長命令語（ＶＬＩＷ：Very Long Instruction Word）を同時に実行するＶＬＩＷプロセッサが提案されている。ＶＬＩＷプロセッサでは、プログラムのコンパイル時に、命令間の順序関係やデータ依存関係を解析し、同時実行可能な命令群を抽出している。これにより、ランタイムオーバーヘッド無しに、複数命令の同時実行による性能向上を実現している。【０００３】
しかし、１つのプログラム（命令流）において、同時に実行可能な命令数には限りがあり、平均的には、２〜３命令／Ｃｙｃｌｅが上限と言われており、これ以上の性能向上が困難となっていた。【０００４】
このため、近年では、複数の命令流を同時実行することにより、さらなる性能向上を実現するＶＬＩＷプロセッサが出現している（例えば特許文献１参照）。特許文献１のプロセッサでは、図２に示すように、Ｍ個の命令流（命令アドレス１〜Ｍ）を同時に実行するため命令流毎の命令を格納する命令キャッシュ１〜Ｍ、フェッチした命令を一時格納する命令バッファ１〜Ｍ、複数の命令流から同時実行する命令を抽出し、選択する命令セレクタが必要となる。更に、命令流毎に、命令シーケンスを制御するプログラムカウンタ（ＰＣ）が必要となる（図２には示していない。）。命令アドレス１〜Ｍは前記ＰＣより供給される。また、当該プロセッサが、最大Ｋ個の命令から構成される超長命令語を実行する命令流を、Ｍ個実行する場合を例として説明する。【０００５】
この場合、特許文献１では、各命令流がフェッチした命令群が分割可能な場合には、Ｍ個の命令群を分割し、命令流の優先順位や同時実行可能な演算器数が最大（Ｋ個）となるように、各命令流から命令を選択し、演算器に提供する。これにより、同時に実行する命令数を増やして、性能を向上させる事が出来る。【０００６】
また、非特許文献１に記載のプロセッサでは、図３に示すように、Ｍ個の命令流を同時に実行するため、各命令流（命令アドレス１〜Ｍ）を供給するＭ個のプログラムカウンタ（ＰＣ）、１つの命令キャッシュ、１つのアドレスセレクタが必要となる。なお、プログラムカウンタ（ＰＣ）は図３には示していない。【０００７】
プログラムカウンタ（ＰＣ）は、命令シーケンスを制御する。１つの命令キャッシュは、Ｍ個の命令流命令を格納する。アドレスセレクタは、命令流制御情報に基づき、Ｍ個のＰＣが指定する命令アドレスを１つ選択し、命令キャッシュに供給する。【０００８】
当該プロセッサでは、１つの命令流において、データのキャッシュミスによるストールなどが発生した場合に、前記アドレスセレクタが、異なる命令流のＰＣが指定する命令アドレスを選択し、実行することにより、ストールによる性能低下を最小限に抑えることが出来る。
【特許文献１】特開２００１−３０６３２４号公報
【非特許文献１】マルチスレッド処理をサポートするＶＬＩＷプロセッサ・アーキテクチャ、ＩＰＳＪ  ＳＩＧ  Ｎｏｔｅｓ、Ｖｏｌ．９３、  Ｎｏ．９１（１９９３年１０月２１日）  ｐｐ．１７−２４
【発明の開示】
【発明が解決しようとする課題】
【０００９】
前述したように、特許文献１に記載のプロセッサでは、複数命令流の命令を同時にフェッチし、複数命令流から同時実行可能な命令を選択することにより、高い性能を得ている。しかし、特許文献１の構成を実現するためには非常に多量のハードウェアが要求される。そして、多量のハードウェアが必要となるということは、低コストなハードウェアで高い性能を実現するというＶＬＩＷプロセッサの目的に反する。特に、Ｍ個の命令メモリのハードウェアコストが問題となる。【００１０】
一般的には、命令キャッシュは、Ｋ個の命令を格納するＬ個の命令メモリと、その管理情報であるキャッシュタグから構成され、特に、大きなハードウェアコストを要求する命令メモリが問題となる。特許文献１に記載の技術では、命令メモリは、最大Ｋ個の命令を同時にフェッチするためのＬ個のメモリバンクから構成される。よって、最大Ｍ×Ｌ個の１Ｒｅａｄ／１Ｗｒｉｔｅのメモリバンクが必要となる。また、キャッシュに用いられるタグと、そのセクレタ群も、Ｍセット必要となる。【００１１】
これらのことから、低コストなシステムや、組み込み向けの画像処理など、限られたハードウェア規模で、複数の命令流を実行するプロセッサを構成する必要がある場合に、特許文献１の方法では、複数命令流を実行するプロセッサを実現することは、困難であると言える。【００１２】
また、非特許文献１に記載のプロセッサでは、１つの命令キャッシュのみで実現できるため、前述したハードウェア規模の課題を解決することが出来る。しかし、１サイクル毎に、異なる１つの命令流からのみ命令アドレスを選択し、命令キャッシュに供給するため、命令フェッチのバンド幅を有効に活用できない場合があり、結果として性能の低下を招くこととなる。【００１３】
例えば、４つのメモリバンクから構成される命令メモリを使って、１サイクルに最大４命令がフェッチ可能な場合を考える。命令流Ａが実行する命令列の命令数が、３、２、１、２とし、命令流Ｂが実行する命令列の命令数が、１、２、３、２とする。この場合に、非特許文献１では、時分割に命令流ＡとＢを切り替えるため、両命令流の命令フェッチが終了するのに、８サイクルを要してしまう。また、１サイクルにフェッチした命令数を計算すると２命令／サイクルである。つまり本例では、１サイクル当たりに、最大で４つの命令フェッチが可能であるにも関わらず、その半分程度の性能しか生かすことが出来ていない。【００１４】
そこで、本発明は、単一の命令流を実行するプロセッサに対して僅かなハードウェアを追加するだけで、複数の命令流の実行を可能とし、プロセッサの命令フェッチのバンド幅を最大限に有効活用することにより、ハードウェアの性能を最大限に発揮することが可能な低コストに複数命令流を実行するプロセッサ、その方法及びそのプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
本発明の第１の観点によれば、複数個の命令から構成される超長命令語を実行するプロセッサであって、Ｍ個の命令流の前記超長命令語を格納する複数のメモリバンクを備えるＮ（Ｎ＜Ｍ）個の命令キャッシュから、最大Ｍ個の命令流の前記超長命令語を同時にフェッチすることを特徴とするプロセッサが提供される。【００１６】
本発明の第２の観点によれば、プロセッサを用いて複数個の命令から構成される超長命令語を実行する超長命令語実行方法であって、Ｍ個の命令流の前記超長命令語を格納する複数のメモリバンクを備えるＮ（Ｎ＜Ｍ）個の命令キャッシュから、最大Ｍ個の命令流の前記超長命令語を同時にフェッチすることを特徴とする超長命令語実行方法が提供される。【００１７】
本発明の第３の観点によれば、複数個の命令から構成される超長命令語を実行するプロセッサとしてコンピュータを機能させるための超長命令語実行プログラムであって、Ｍ個の命令流の前記超長命令語を格納する複数のメモリバンクを備えるＮ（Ｎ＜Ｍ）個の命令キャッシュから、最大Ｍ個の命令流の前記超長命令語を同時にフェッチすることを特徴とするプロセッサとしてコンピュータを機能させるための超長命令語実行プログラムが提供される。
【発明の効果】
【００１８】
本発明によれば、各命令流が使用するメモリバンクを特定し、使用するメモリバンク数が最大となるように、複数命令流の命令フェッチを決定することから、単一の命令流を実行するプロセッサに対して僅かなハードウェアを追加するだけで、複数の命令流の実行を可能とし、プロセッサの命令フェッチのバンド幅を最大限に有効活用することにより、ハードウェアの性能を最大限に発揮し、プロセッサ全体の性能向上を図ることが可能となる。
【図面の簡単な説明】
【００１９】
【図１】本発明の実施形態の基本的構成を表す図である。
【図２】特許文献１の実施形態の全体構成を示すブロック図である。
【図３】非特許文献１の実施形態の全体構成を示すブロック図である。
【図４】本発明の実施形態の全体構成を示すブロック図である。
【図５】超長命令語の構成を示す図である。
【図６】メモリバンクにおける超長命令語の配置図である。
【図７】本発明の最良の実施形態の動作を示すフローチャートである。
【図８】本発明の第一の実施形態の全体構成を示すブロック図である。
【図９】本発明の第一の実施形態の動作を示すフローチャートである。
【図１０】本発明の第二の実施形態の全体構成を示すブロック図である。
【図１１】メモリバンクにおける一般的な超長命令語の配置図である。
【図１２】図１１に示す一般的な超長命令語の配置で処理を実行した場合のサイクル図である。
【図１３】メモリバンクにおいて提案する超長命令語の配置図である。
【図１４】図１３において提案する超長命令語の配置で処理を実行した場合のサイクル図である。
【符号の説明】
【００２０】
１  プロセッサ
２  プログラムメモリ
３  データメモリ
１１  命令供給ユニット
１２  演算ユニット
１３  レジスタユニット
１０１  アドレス供給装置
１０２  命令キャッシュ
１０３  命令セレクタ
１０４  加算器群１０４
【発明を実施するための最良の形態】
【００２１】
以下、図面を参照して本発明を実施するための最良の形態について詳細に説明する。【００２２】
次に、本発明の実施の形態について図面を参照して詳細に説明する。【００２３】
尚、本発明の実施の形態は、下記で説明する実施形態及び実施例に何ら限定されることはなく、本発明の技術的思想の範囲に属する限り様々な形態をとりえる。また、本明細書において用いられる命令流とは、プログラムによって記述された一連の機能単位のことをいう。そして、命令流毎に、異なるシーケンスを持つ。さらには、命令流は、スレッド、プロセス、タスクなどの他の用語で置き換えることも可能で、それらの用語の相違により、本発明の実施の範囲が狭められるものではない。【００２４】
図１は、本発明の実施形態の構成について表すブロック図である。本実施形態ではプロセッサ１と、プログラムメモリ２と、データメモリ３を有する。また。プロセッサ１は命令供給ユニット１１と、演算ユニット１２と、レジスタユニット１３を有する。【００２５】
プロセッサ１は複数個の命令から構成される超長命令語を実行し、Ｍ（≧２）個の命令流の超長命令語を実行する。プログラムメモリ２は、プログラムが格納されているメモリである。また、データメモリ３はプロセッサ１で演算処理を行う際に必要なデータが格納されているメモリである。【００２６】
命令供給ユニット１１は演算ユニット１２に対して命令を供給するユニットである。演算ユニット１２は命令供給ユニット１１から供給された命令に従い演算処理を行う。また、レジスタユニット１３は、演算や実行状態の保持に用いる記憶素子である。【００２７】
図４は、命令供給ユニット１１の構造を示すブロック図であり、複数個の命令から構成される超長命令語を実行し、Ｍ（≧２）個の命令流の超長命令語を実行するプロセッサの概念図である。【００２８】
命令供給ユニット１１は、命令アドレス（命令アドレス１〜Ｍ）、メモリバンク（メモリバンク１〜Ｌ）（Ｌ≧１）、アドレス供給装置１０１、命令キャッシュ１０２、バンク数情報及び命令流優先度を有する。【００２９】
命令アドレス１〜Ｍは、命令流毎に供給される命令アドレスである。メモリバンク１〜Ｌ（Ｌ≧１）は、各命令流の超長命令語が格納される複数のメモリバンクである。命令キャッシュ１０２はマルチバンクメモリのデータ管理を行う。バンク数情報は、各命令流が使用する前記メモリバンクの数を指定する情報である。命令流優先度は、実行する命令流の優先度を示す情報である。【００３０】
アドレス供給装置１０１は、命令アドレス１〜Ｍと、バンク数情報に基づき、各命令流が使用するメモリバンクを特定する。また、複数の命令流が同一のメモリバンクを使用する場合には、命令流優先度に基づき、優先度の高い命令流の命令アドレスを、当該メモリバンクに供給する。【００３１】
以下では、前記アドレス供給装置１０１に供給されるバンク数情報の実装について、詳細に説明する。尚、超長命令語をフェッチする前に、超長命令語が用いるバンク数情報を得る実装方法は、様々に考えられる。以下では、その一例を挙げるが、本発明の実施の形態は、下記の例に何ら限定されることはなく、本発明の技術的思想の範囲に属する限り様々な実装が考えられる。【００３２】
バンク数情報を得る実装の１例として、まず、各命令流の超長命令語が格納されるメモリバンク数を固定とする実装が考えられる（以下この実装をＡ１と表記する）。【００３３】
実装Ａ１では、命令流毎に、これからフェッチする超長命令語が格納されるメモリバンク数を格納するレジスタを設ける。そして、アドレス供給装置１０１が、前記レジスタをメモリバンク数情報として利用する。前記レジスタに設定される値は、プロセッサ外部からの制御信号や、前記レジスタを設定・変更する命令によって、制御される。【００３４】
次に、命令流毎に、バンク数情報を格納する専用のメモリを設ける実装も考えられる（以下この実装をＡ２と表記する）。【００３５】
実装Ａ２では、前記メモリは、各命令流の命令アドレスで参照され、当該命令流が次にフェッチする超長命令語が、何個のメモリバンクを使用するかの情報を格納する。また、当該メモリの内容を、プログラム起動前に設定する実装や、キャッシュとして更新する実装が考えられる。キャッシュとして実装する場合には、図４の命令キャッシュ１０２のキャッシュ制御機構を用いることにより、必要となるハードウェアコストを抑えるという実装も考えられる。【００３６】
次に、図５に示すように、超長命令語を、最大Ｋ個の命令と、次サイクルの命令フェッチで用いるメモリバンク数を示す情報から構成し、前サイクルにフェッチした超長命令語に含まれる前記情報を、バンク数情報として使う実装も考えられる（以下この実装をＡ３と表記する）。また、この際に前記超長命令に含まれる命令数は、固定でであってもよく、また、可変としてもよい。【００３７】
また、実装Ａ３では、命令流の最初の超長命令語をフェッチする場合には、バンク数情報が不明である。よって、命令流の最初の超長命令語をフェッチする場合には、あらかじめ固定の値をバンク数情報として用いるか、命令流の最初の命令フェッチ前のバンク数情報を供給するレジスタを設け、前記レジスタの情報をバンク数情報として用いる。また前記レジスタは、プロセッサ外部からの制御信号や、前記レジスタを設定・変更する命令によって、設定するという実装が考えられる。【００３８】
さらに、実装Ａ３の実装では、超長命令語に分岐命令が含まれる場合には、分岐成立時と不成立時の２パターンのそれぞれに対応するバンク数情報を用意する必要がある。そのための実装としては、分岐成立時・不成立時の２つのバンク数情報を超長命令語の一部とする実装が考えられる。命令流毎に、２つのバンク数情報を格納するレジスタを２つ設け、分岐命令がフェッチされた次のサイクルには、分岐不成立時のバンク数情報を用い、分岐命令の分岐が成立した場合には、分岐成立時のバンク数情報を用いる実装とする。また、分岐成立時・不成立時の２つのバンク数情報の一方は固定数とし、もう一方のみを超長命令語の一部とする実装も考えられる。その固定数は、プロセッサ外部からの制御信号や、設定・変更する命令によって、変更できる実装であってもよい。【００３９】
以下では、前記アドレス供給装置１０１に供給される命令流優先度の実装について、詳細に説明する。命令流優先度を設定するための実装としては、様々な実装が考えられる。以下では、その一例を挙げるが、本発明の実施の形態は、下記の例に何ら限定されることはなく、本発明の技術的思想の範囲に属する限り様々な方法が考えられる。【００４０】
命令流優先度を実装する１例としては、まず、各命令流の命令流優先度を固定とする実装が考えられる（以下この実装をＢ１と表記する）。【００４１】
実装Ｂ１では、命令流毎に、優先度が格納されたレジスタを設け、前記レジスタを命令流優先度として利用する。前記レジスタに設定される値は、プロセッサ外部からの制御信号や、前記レジスタを設定・変更する命令、または、前サイクルにフェッチされた超長命令語の一部のフィールドとして命令流優先度変更フラグを設け、前記フラグにより、制御される実装が考えられる。命令流優先度を固定とする一例としては、２つの命令流がある場合には、主命令流と副命令流に分類し、主命令流に、負荷の重い処理を割り当てる実装が考えられる。【００４２】
次に、高い優先度を与える命令流を順繰りに変更していくラウンドロビン方式が考えられる（以下この実装をＢ２と表記する）。【００４３】
実装Ｂ２は、最も高い優先度を持つ命令流を示すポインタと、より低い優先度を持つ命令流を決定するルールによって実現される。前記ルールとして単純なのは、各命令流を一列に並べ、高い優先度を持つ命令流の一方の命令流方向に向かって、優先度を順次、低くしていく方法が考えられる。また、前サイクルにフェッチされた超長命令語の一部のフィールドとして優先度ポインタを設け、最も高い優先度を持つ命令流を指定するのに、前記ポインタに代えて、前記優先度ポインタを用いる実装も考えられる。【００４４】
次に、命令流毎に、命令流の命令がフェッチされた、または、されなかった回数に基づき、命令流優先度を決定する実装が考えられる（以下この実装をＢ３と表記する）。【００４５】
実装Ｂ３としては、例えば、フェッチされなかった回数を数えるカウンタを、命令流毎に設け、カウント値の高い命令流から順に、高い優先度を与える実装が考えられる。また、実装Ｂ１、実装Ｂ２及び実装Ｂ３を組み合わせた実装も考えられる。例えば、２つの命令流の優先度を固定して、一方の命令流に高い優先度を与え、もう一方の命令流の命令がフェッチされない回数をカウントし、カウント値が一定値を超えた場合のみ、優先度の低い命令流に高い優先度を与える実装が考えられる。また、ラウンドロビン方式で一番高い優先度を与える命令流を、フェッチされなかった回数の最も多い命令流に与える実装も考えられる。上記以外にも様々な組合せが考えられる。【００４６】
［動作の説明］【００４７】
以下では、具体的な例を用いて、本発明における、複数命令流の命令フェッチの動作を詳細に説明する。今回説明に用いる具体例は、実行する命令流数Ｍが４、超長命令語に含まれる最大命令数Ｋが４、メモリバンク数Ｌが４、命令キャッシュ数Ｎが１、あるサイクルにおける、命令アドレスが命令流毎にＩＡ１、ＩＡ２、ＩＡ３、ＩＡ４、バンク数情報が命令流毎に３、２、１、１、命令流優先度が、命令流２の優先度が一番高く、命令流３、４、１と優先度が低くなる場合を考える。本例を用いて、本発明の動作フローを詳細に説明する。また、実際の運用においては、前述した各種パラメータは、任意の値を取ることに、留意されたい。【００４８】
図６に、前述した命令流毎のパラメータと、各メモリバンクに対する前記アドレス供給装置１０１の選択結果を示す。その際のアドレス供給装置１０１の動作フローを、図７のフローチャートに示す。また、本実施形態においては、係るフローチャートで示される動作が、ハードウェアによって実現されているが、ＣＰＵによるソフトウェアによって、実現されても良い。また、ソフトウェアとハードウェアの協働により実現されても良い。【００４９】
以下では、本発明における複数命令流の命令フェッチの動作について、詳細に説明する。【００５０】
まず、命令流毎に、各命令流の命令アドレス（ＩＡ:Instruction address）中のＴｂｉｔを用いて、前記命令アドレスに対応する命令が格納されるメモリバンク（ＭＢ：memory bank）を、全てのＭＢから特定する（ステップＳ１００）。ここで、Ｔｂｉｔは、命令アドレス中の任意位置のビットでよいが、一般的には、命令アドレスの下位Ｔｂｉｔが用いられる。例えば、図６のパラメータ設定である場合には、命令アドレスの下位２ｂｉｔを用いて、４つのメモリバンクの何れから命令フェッチを開始するかを指定する。【００５１】
次に、命令流毎に、ステップＳ１００で求めたメモリバンク位置と、各命令流に与えられたバンク数情報とに基づいて、各命令流が使用するメモリバンクを特定する。命令流毎に、ステップＳ１００で求めたメモリバンク位置から数えて、「バンク数情報」個までのメモリバンクを、各命令流が使用するメモリバンクとして特定する（ステップＳ１０１）。【００５２】
ここでのメモリバンクの数え方は任意であってよいが、一般的には、メモリバンクを連続して、一方向に数えていく。例えば、図６のパラメータ設定である場合には、時計回り（バンク１→バンク４）に、隣接するメモリバンクを連続して数えていく。命令流１の場合には、命令アドレスが指定するメモリバンクがバンク１であり、バンク数情報が３であることから、バンク１から時計方向に数えて３個目であるバンク１から３までが、命令流１が使用するメモリバンクとして特定される。【００５３】
続いて、Ｓ１０２からＳ１０６は、命令流優先度が高い方から順に行われる処理である。ここでは、一時変数Ｓを用いて逐次的に動作を記述しているが、説明を簡易にするためであり、必ずしも逐次的に行う必要は無く、実際のハードウェアにおいては、等価な回路で、複数命令流に対して並列に処理しても構わない。【００５４】
まず、命令流の優先順位を指定する一時変数Ｓに１を指定する（ステップＳ１０２）。なお、ここでは、優先度が一番高い命令流を１としているが、図７に示す動作と等価な動作が可能であれば、他の表現方法であってもよい。【００５５】
次に、命令流優先度の指定する優先度がＳ番目に高い命令流が使用するメモリバンクが、既に他の命令流に使用されていて、使用不可でないかを確認する。優先度がＳ番目の命令流が使用するメモリバンクが使用可能である場合には、ステップＳ１０４の処理を実行する。一方、メモリバンクが使用不可能である場合には、ステップＳ１０５の処理を実行する（ステップＳ１０３）。【００５６】
優先度がＳ番目の命令流の命令アドレス（ＩＡ）を、当該命令流が使用するメモリバンクに供給する（ステップＳ１０４）。ここで、メモリバンクに提供する命令アドレスは、命令アドレスの一部、または、命令アドレスの全部または一部から計算されたアドレスであっても良い。例えば、命令アドレスの下位Ｔｂｉｔより上位のＲｂｉｔを切り出し、下位Ｔｂｉｔが指定するメモリバンクには、前記Ｒｂｉｔを供給する。【００５７】
また、当該命令流が複数のメモリバンクを使用する場合には、アドレスが連続してフェッチする命令を示すための規定値を前記命令アドレスに加算し、その下位Ｔｂｉｔより上位のＲｂｉｔを切り出し、同時使用するメモリバンクに供給する。前記規定値は、実装によって様々である。図６において命令アドレス（ＩＡ１〜ＩＡ３）のビット幅を１２ｂｉｔとすると、命令流２に着目すると、命令アドレスの下位２ｂｉｔより上位の１０ｂｉｔを切り出し、下位２ｂｉｔが指定するバンク２に、当該１０ｂｉｔを供給する。また、同時に使用するバンク３には、当該メモリアドレスに１を加算した値の下位２ｂｉｔより上位の１０ｂｉｔを切り出し、バンク３に供給する（ステップＳ１０４）。【００５８】
優先度がＳ番目の命令流の処理が終わったので、次に、優先度がＳ＋１番目の命令流を処理するために、一時変数Ｓをインクリメントする（ステップＳ１０５）。【００５９】
次に、一時変数Ｓが実行する命令流数よりも大きくなったか否かを判定する。ここで、一時変数Ｓが実行する命令流数よりも大きくなった事は、全ての命令流に対する処理が終わった事を示すため、各命令流の命令アドレスをメモリバンクに割り当てる作業を完了し、命令をメモリバンクからフェッチする（ステップＳ１０６のＹｅｓ）。一方、一時変数Ｓが実行する命令流数よりも大きくなっていないということは、未だ処理がされていない命令流があるということなのでステップＳ１０３から処理を再開する（ステップＳ１０６のＮｏ）。【００６０】
図７のフローチャートの処理を行うことにより、例えば図６のパラメータ設定である場合であれば、優先度が一番高い命令流２が、当該命令流の命令アドレス（ＩＡ２）が指定するバンク２からバンク３の２つのメモリバンクを使用する。すなわち、バンク２からバンク３の２つのメモリバンクのそれぞれに、ＩＡ２から生成されたアドレスを供給する。この段階では、バンク１と４が空いているため、次に優先度の高い命令流３のアドレス（ＩＡ３）から生成されたアドレスがバンク４に提供され、最後に、命令流４のアドレス（ＩＡ４）から生成されたアドレスがバンク１に提供される。【００６１】
以上のように本実施形態によれば、複数バンクからなる命令キャッシュ１０２を用いて、複数命令流からの命令フェッチが可能となる。また、各サイクルで使用されていないメモリバンクを使って、別の命令流の命令をフェッチするため、命令キャッシュ１０２の命令フェッチバンド幅を最大限に活用できる。さらに、複数命令流が、命令流数より少ない命令キャッシュ１０２を共有することにより、実行する命令流数に合わせて、命令キャッシュ１０２の数を増加させる必要が無い。このため、少ないコストで、命令フェッチバンド幅を最大限に活用した、複数命令流の命令フェッチを行うことが出来る。
【実施例１】
【００６２】
図８に、本発明を実装したＶＬＩＷプロセッサのブロック図を示す。これは、本発明の実施の１実施例であり、本発明の実施の形態は、下記の実施例に何ら限定されることはなく、本発明の技術的思想の範囲に属する限り様々な形態をとりえる。【００６３】
図８は、Ｍ個の命令流の超長命令語を実行するＶＬＩＷプロセッサの構成図である。前記超長命令語は、図５に示すように、最大Ｋ個の命令と、次サイクルの命令フェッチで、いくつのメモリバンクを使用するかを示す情報（バンク数情報）から構成される。【００６４】
図８のＶＬＩＷプロセッサは、プログラムカウンタ（ＰＣ１〜ＰＣＭ）、命令キャッシュ１０２、命令バッファ（命令バッファ１〜Ｍ）、命令セレクタ１０３及びアドレス供給装置１０１を有する。【００６５】
ＰＣ１〜ＰＣＭは、各命令流を管理するプログラムカウンタである。命令キャッシュ１０２は最大Ｋ個の命令がフェッチ可能なＬ個のメモリバンクである。命令バッファ１〜Ｍは、命令キャッシュ１０２からフェッチされた前記超長命令語を命令流毎に保存する命令バッファである。命令セレクタ１０３は、命令バッファから実行する命令を選択し演算ユニットに供給する。【００６６】
アドレス供給装置１０１は、前記命令バッファの超長命令語に含まれるバンク数情報と命令流優先度に基づき、前記プログラムカウンタからの命令アドレスを選択し、前記メモリバンク毎に供給する。【００６７】
図４で示される本発明の実施形態を、実際にＶＬＩＷプロセッサに実装した一例が図８であり、多くのコンポーネントが図４と図８で共通であり、機能も同じである。このため、図４と図８の異なる部分についてのみ、詳細に説明する。【００６８】
まず、図４の命令アドレス１〜Ｍが、図８では、プログラムカウンタ（ＰＣ１〜Ｍ）として表現されている。一般的なプロセッサでは、命令流を制御するために、現時点でのプログラムの命令アドレスを示すプログラムカウンタが用いられる。そして、当該プログラムカウンタで示された位置からの命令フェッチが終了した時点で、次の命令が格納されるアドレスに更新される。【００６９】
次に、図８では、フェッチされた超長命令語を命令流毎に保存する命令バッファ（命令バッファ１〜Ｍ）と、命令バッファに格納された超長命令語から、実行する命令を選択する命令セレクタ１０３が追加された。プロセッサの実装によるが、演算ユニットの競合等により、同時にフェッチした複数命令流の超長命令語が同時実行できない場合がある。この場合に、フェッチした超長命令語を一旦、命令バッファに格納し、その後で、命令セクレタにより、実行する命令を命令バッファから選択し、演算ユニットに供給する構成が考えられる。【００７０】
本実施例では、フェッチした全ての超長命令語を一旦、命令バッファに格納し、前記命令バッファから命令を選択する構成としているが、必ずしも、この構成である必要は無い。例えば、フェッチした超長命令語を解析し、同時実行できる命令は、演算ユニットに供給し、実行できなかった命令のみを命令バッファに格納する等の方法が考えられる。さらに、フェッチされた命令が格納されるメモリバンクの位置と、演算ユニットの種類が一対一に対応する場合であれば、同時にフェッチされた命令は、同時に実行可能である。よって、前記の命令バッファと命令セレクタ１０３が不要となる。また、フェッチされる命令の個数と同数の演算ユニットが用意され、全ての演算ユニットが全ての命令を実行可能である場合も、同様に、前記の命令バッファと命令セレクタ１０３が不要となる。【００７１】
以下では、フェッチした全ての命令が、同時実行することが不可能である場合の、命令セレクタ１０３の動作例について説明する。命令セレクタ１０３の実装には、様々な方法が考えられる。以下では、その一例を挙げるが、本発明の実施の形態は、下記の例に何ら限定されることはなく、本発明の技術的思想の範囲に属する限り様々な方法が考えられる。【００７２】
まず、実行する命令流の優先度に基づき、時分割に実行する命令流を選択する実装が考えられる（以下この実装をＣ１と表記する）。【００７３】
この場合の優先度の決定の仕方としては、様々な実装が考えられる。例えば、命令バッファを順繰りに選択するラウンドロビンを用いる実装が考えられる（Ｃ１−１）。また、命令バッファ毎に、選択されなかったサイクルを数えるカウンタを設け、選択されていないサイクルが最も長い命令流を選択する実装が考えられる（Ｃ１−２）。【００７４】
また、一定の割合で、各命令流を選択する実装が考えられる（Ｃ１−３）。【００７５】
更に、上記の実装における優先度を、プロセッサ外部からの制御信号や、命令セレクタ優先度を設定・変更する命令、または、前サイクルにフェッチされた超長命令語の一部のフィールドとして命令セレクタ優先度フラグを設け、前記フラグにより、制御される実装が考えられる。【００７６】
次に、複数命令流からの命令を同時に選択する実装が考えられる（以下この実装をＣ２と表記する）。実装Ｃ２は、実装Ｃ１に比べ、演算ユニットを有効に活用することができるが、制御に要するハードウェアが増加する。【００７７】
例えば、優先度の高い命令流から順に、実行する演算ユニットを選択する方法が考えられる（Ｃ２−１）。この際の優先度は、プロセッサ外部からの制御信号や、命令セレクタ優先度を設定・変更する命令、または、前サイクルにフェッチされた超長命令語の一部のフィールドとして命令セレクタ優先度フラグを設け、前記フラグにより、制御される実装が考えられる。【００７８】
また、各命令流の超長命令語を命令単位まで分割し、同時に使用する演算ユニットの個数が最大となる組合せを実現する実装も考えられる（Ｃ２−２）。【００７９】
本実施例のように、命令バッファを用いる場合には、アドレス供給装置１０１の動作について、図７の動作フローに比べて、異なる点が発生する。以下では、その異なる点について説明する。【００８０】
命令バッファがある場合のアドレス供給装置１０１の動作フローを、図９のフローチャートに示す。【００８１】
また、本実施例においては、係るフローチャートにおける動作が、ハードウェアによって実現されているが、ソフトウェアによって、実現されても良い。また、ソフトウェアとハードウェアの協働により実現されても良い。【００８２】
以下では、図９を用いて、命令バッファがある場合のアドレス供給装置１０１の動作フローについて説明する。【００８３】
まず、図９の各ステップ（ステップＳ２００〜Ｓ２０６）は、図７の各ステップ（ステップＳ１００〜Ｓ１０６）に対応して、同じ動作をする。図７と図９の相違点は、Ｓ２０３とＳ２０４の間に、Ｓ２０７が追加された点である。【００８４】
次に、Ｓ２０７の動作を以下で説明する。命令バッファが無い場合には、アドレス供給装置１０１は、実行中の全ての命令流のプログラムカウンタから供給される命令アドレスから、各メモリバンクに供給する命令アドレスを生成すればよい。しかし、命令バッファが有る場合には、前サイクルにフェッチした超長命令語が、命令セレクタ１０３で選択されずに、命令バッファに格納されている場合がある。この場合には、当該命令流の超長命令語を新たにフェッチしても、命令バッファに格納することができず、命令フェッチバンド幅を無駄に使ってしまうことになる。【００８５】
このため、前サイクルにフェッチした超長命令語が命令バッファ内に滞在している場合には、前記アドレス供給装置１０１は、命令流優先度に関わらず、当該命令流の命令アドレスから生成するアドレスを、メモリバンクに供給しない（ステップＳ２０７）。
【実施例２】
【００８６】
図１０を用いて、本発明の別の実施形態について説明する。実施例２では、本発明をより効果的に実現するための、プログラミング手段、コンパイラについて、詳細に説明する。【００８７】
図１０は、プログラミング手段、コンパイラによる最適の実現をハードウェアでサポートした複数命令流を実行するプロセッサである。【００８８】
これは、本発明の実施の形態を実現するための実施例の一つである。よって、本発明の実施の形態は、下記の実施例に何ら限定されることはなく、本発明の技術的思想の範囲に属する限り様々な形態をとりえる。【００８９】
まず、プログラミング手段、コンパイラの必要性について説明をする。ここでは、例として、実行する命令流数Ｍが２、メモリバンク数Ｌが４である環境を想定する。また、ある４サイクルにおける、２つの命令流の超長命令語が、図１１のようなメモリバンクを使う命令アドレスに配置された場合を考える。そして、命令流優先度は、常に、命令流Ａが命令流Ｂにより、高い優先度を与える場合について、説明する。【００９０】
図１１で示されたメモリバンクの使用状況は、一般的なプロセッサで使われるプログラミング手段、コンパイラを使った場合に、想定される配置である。ＩＡ１〜ＩＡ４までの各超長命令語は、隣接した命令アドレスに配置されていくため、各サイクルにおいて、用いられるメモリバンクは、図１１のようになる。【００９１】
上記の設定で、２つの命令流を実行する。図１２に示すように、まず、最初のサイクルにおいては、命令流ＡとＢのそれぞれが、メモリバンク１と２を使うため、優先度の高い命令流ＡのＩＡ１のみが命令フェッチされる。【００９２】
次のサイクルでは、命令流ＡとＢのそれぞれが、メモリバンク１を使うため、優先度の高い命令流ＡのＩＡ２のみが命令フェッチされる。【００９３】
同様にして、命令流ＡとＢの全ての命令フェッチを実行すると、最初の４サイクルにおいて、命令流ＡとＢが使用するメモリバンクにおいて競合が発生するため、優先度の高い命令流Ａの命令フェッチが行われ、その後、命令流Ｂの命令フェッチが行われる。【００９４】
このため、図１２に示すように、命令流ＡとＢの全ての命令フェッチを終了するのに、８サイクルを要する。図１２において、ＩＡは命令流Ａの超長命令語を、ＩＢは命令流Ｂの超長命令語を表す。【００９５】
上記のように、一般的なプロセッサで使われるプログラミング手段、コンパイラを使った場合では、本発明が提案するプロセッサの性能を活かしきれないという事態が発生してしまう。このため、プログラミング手段、コンパイラ、それらの実行をサポートする図１０のプロセッサが必要となる。【００９６】
上記の事態を回避するためには、各命令流が使用するメモリバンクの競合が最小となるようにするべく、各命令流の超長命令語が、可能な限り異なるメモリバンクを使用するように、各命令流の超長命令語の命令アドレスを調整する必要がある。【００９７】
以下では、その実現手段および実装について説明する。なお様々な実装が考えられる。以下では、その一例を挙げるが、本発明の実施の形態は、下記の例に何ら限定されることはなく、本発明の技術的範囲に属する限り様々な方法が考えられる。【００９８】
まず、命令アドレスを調整するための実装例として、各命令流が使用するメモリバンク数を指定できるプログラミング手段を用意する実装が考えられる。前記のプログラミング手段を用意し、当該プログラムをコンパイルした際に、前記指定が反映されるように、各命令流で同時実行する命令の組合せや、各命令流の超長命令語の命令アドレスを設定する実装である。上記の例で言えば、命令流Ａ、Ｂ共に、使用するメモリバンク数を２とすることにより、２サイクルに１回は、命令流ＡとＢの双方の命令を、同時にフェッチすることが出来る。【００９９】
次に、命令アドレスを調整するための他の実装例として、各命令流が使用するメモリバンクを指定できるプログラミング手段を用意する実装が考えられる。前記のプログラミング手段を用意し、当該プログラムをコンパイルした際に、前記指定が反映されるように、各命令流の超長命令語の命令アドレスを設定する実装である。上記の例で言えば、命令流Ａが極力、バンク１、２を使うように設定し、命令流Ｂが極力、バンク３、４を使うような設定が考えられる。そうした場合の、命令流Ａと命令流Ｂのメモリバンクの使用状況を図１３に示す。【０１００】
図１３の命令配置で、２つの命令流を実行する。まず、最初のサイクルにおいては、命令流Ａと命令流Ｂが使用するメモリバンクに重複がないため、ＩＡ１とＩＢ１が同時に命令フェッチされる。次のサイクルでは、命令流ＡとＢのそれぞれが、メモリバンク１と３を使うため、優先度の高い命令流ＡのＩＡ２のみがフェッチされる。同様にして、命令流ＡとＢの全ての命令フェッチを実行すると、図１４に示すような結果となり、命令流ＡとＢの全ての命令フェッチを終了するのに、５サイクルを要することが判る。この結果から、図１３の命令配置を用いることにより、従来の図１２の命令配置に比べ、３サイクル高速に命令フェッチできることが判る。【０１０１】
以下では、図１３の命令配置をしたプログラムの効率的な実現を、ハードウェアでサポートし、複数命令流を実行するプロセッサについて説明する。【０１０２】
まず、図１３の命令配置をしたプログラムを、通常のプロセッサで実行した場合について述べる。図１３の命令配置をしたプログラムでは、フェッチする超長命令語の命令アドレスが連続ではないために、通常のプロセッサで実現する場合には、超長命令語毎に、ジャンプ命令を実行する必要がある。このため、メモリバンクの競合を減らせる一方で、各命令流の実行効率は大きく低下してしまう。そこで、図１３の命令配置をしたプログラムの効率的な実現を、サポートするハードウェアが必要となる。前記実装を追加した複数命令流を実行するＶＬＩＷプロセッサを図１０に示す。【０１０３】
実施例１で示されたＶＬＩＷプロセッサに、前述したハードウェア機構を追加したのが、図１０のＶＬＩＷプロセッサである。ここで、実施例１の図８と図１０において、同じ名前を持つコンポーネントは、プログラムカウンタ（ＰＣ１〜Ｎ）を除き、同様の機能を持つため、以下では、それ以外のコンポーネントについて、説明する。【０１０４】
図１０では、図８では省略されていたプログラムカウンタを更新するための機構が明示されている。まず、プログラムカウンタと、更新するための機構について説明する。なお、図１０では、プログラムカウンタ（ＰＣ１〜Ｎ）は、現サイクルにおいて、フェッチする超長命令語の命令アドレスを格納するレジスタのみを表現している。【０１０５】
一般的なプロセッサでは、当該プログラムカウンタの示す命令アドレスによる命令フェッチが行われた場合には、フェッチした命令数に基づくＰＣ更新値が、当該プログラムカウンタ値に加算され、当該加算値により、当該プログラムカウンタは更新される。図１０は、フェッチした命令数と使用するバンク数が一対一に対応する場合であり、フェッチした命令数の代わりに、バンク数情報が加算値として用いられている。【０１０６】
一方で、図１０では、バンク数情報に加え、命令流毎のオフセット値（命令流オフセット）が、プログラムカウンタに加算されている。命令流オフセット値をさらに加算することにより、図１３の命令配置をしたプログラムを、効率的に実行することができる。【０１０７】
以下では、図１３の命令流Ａを例に、命令流オフセットについて説明する。図１３の命令流Ａの命令配置を可能とするためには、プログラムカウンタ（命令アドレス）の更新を以下のように行う必要がある。図１３の命令流Ａにおいて、ＩＡ１をフェッチ後に、ＩＡ２を示す命令アドレスを得るには、バンク数情報（この場合は２）に加えて、オフセットとなる２をＩＡ１に加える必要がある。同様に、ＩＡ３とＩＡ４を得るためには、オフセットとして、それぞれ、１と３を加える。図１０の構成においては、前述した値が命令流オフセットより供給され、命令流Ａの次プログラムカウンタ値を生成するために、用いられる。【０１０８】
上記の動作は、図１０における命令流オフセットと、図１０において破線で囲まれた加算器群１０４でハードウェアサポートされる。前記命令流オフセットは、各命令流に対して、上記の例のオフセットをサイクル毎に供給する。また、点線で囲まれた加算器群１０４は、各命令流がフェッチした命令数に基づくＰＣ更新値と前記命令流オフセットが供給するオフセット値を加算して、プログラムカウンタに加算する加算値を提供する。【０１０９】
図１０の例では、各命令流がフェッチした命令数に基づくＰＣ更新値と、各命令流が使用するバンク数の数が等価であるため、前記ＰＣ更新値として、バンク数情報が用いられている。実際の実装においては、前ＰＣ更新値として、必ずしも、バンク数情報が使われるとは限らない。例えば、２つの命令を３つのメモリバンクに格納する実装などが考えられる。他にも、一般的なプロセッサにおいて、プログラムカウンタを更新するために算出される値が、前記ＰＣ更新値として用いられる。【０１１０】
以下では、命令流オフセットの実装について、詳細に説明する。命令流毎に、オフセットを供給する実装は、様々に考えられる。以下では、その一例を挙げるが、本発明の実施の形態は、下記の例に何ら限定されることはなく、本発明の技術的思想の範囲に属する限り様々な方法が考えられる。【０１１１】
まず、プログラミング手段、コンパイラによって、命令流オフセットに格納するオフセット値が生成される。図１３の命令流Ａを例とすると、前記のプログラミング手段によって、命令流Ａが極力、バンク１、２を使うように設定する。また、命令流Ｂが極力、バンク３、４を使うように設定する。そして、前記コンパイラによって、命令流Ａの各サイクルにおけるオフセットが生成される。この例では、ＩＡ１に対して２が生成され、ＩＡ２とＩＡ３に対して、それぞれに、１と３が生成される。【０１１２】
次に、生成されたオフセットを、図１０の命令流オフセットに供給する手段について説明する。手段としては、各命令流に供給する命令流オフセットを固定数とする実装が考えられる。命令流毎に、オフセットが格納されたレジスタを設け、前記レジスタを命令流オフセットとして利用する。前記レジスタに設定される値は、プロセッサ外部からの命令流オフセット制御信号や、前記レジスタを設定・変更する命令流オフセットの変更命令、あるいは、前サイクルにフェッチされた超長命令語の一部のフィールドとして命令流オフセット変更フラグを設け、前記フラグにより、制御される実装が考えられる。【０１１３】
また、プロセッサ外部からの命令流オフセット設定信号や、前記レジスタを設定・変更する命令流オフセットの設定命令、または、前サイクルにフェッチされた超長命令語の一部のフィールドとして、命令流オフセット設定フラグを設け、それらが命令流オフセットとして、供給される実装が考えられる。【０１１４】
さらには、命令流毎に、命令流オフセットを格納する専用のメモリを設ける実装も考えられる。前記メモリは、各命令流の命令アドレスで参照され、当該命令流に対する命令流オフセットを格納する。また、当該メモリの内容を、プログラム起動前に設定する実装や、キャッシュとして更新する実装が考えられる。キャッシュとして実装する場合には、図４の命令キャッシュ１０２のキャッシュ制御機構を用いることにより、必要となるハードウェアコストを抑える実装も考えられる。【０１１５】
本発明の実施形態によれば、各命令流の命令アドレスと、何個のメモリバンクを用いるかの情報から、各命令流が使用するメモリバンクを特定し、使用するメモリバンク数が最大となるように、複数命令流の命令フェッチを決定する。これにより、実行する命令流数に応じた複数の命令キャッシュを用いることなく、追加するハードウェアコストを抑えて、複数命令流の実行が可能となる。【０１１６】
また、例えば、４つのメモリバンクを使って、１サイクルに最大４命令がフェッチ可能な場合を考える。命令流Ａが実行する命令列の命令数が、３、２、１、２とし、命令流Ｂが実行する命令列の命令数が、１、２、３、２とする。この場合に、従来技術では、時分割に命令流ＡとＢを切り替えるため、両命令流の命令をフェッチするのに、８サイクルを要してしまう。一方で、本発明の実施形態によれば、各サイクルにおいて、使用するメモリバンク数が最大となるように、実行する命令流を選択して、複数命令流の命令をフェッチするため、各サイクルにおける、命令流Ａと命令流Ｂの命令が、異なるメモリバンクを用いる場合には、１サイクルで、命令流Ａと命令流Ｂの双方の命令がフェッチできることから、最短４サイクルで、両命令流の命令をフェッチすることが出来る。このように、命令フェッチのバンド幅を最大限に活用し、高い性能を実現することが可能となる。【０１１７】
なお、本発明の実施形態である低コストに複数命令流を実行するプロセッサは、ハードウェア、ソフトウェア又はこれらの組合せにより実現することができる。【０１１８】
本願は、日本の特願２００８−０４４２７４（２００８年２月２６日に出願）に基づいたものであり、又、特願２００８−０４４２７４に基づくパリ条約の優先権を主張するものである。特願２００８−０４４２７４の開示内容は、特願２００８−０４４２７４を参照することにより本明細書に援用される。【０１１９】
本発明の代表的な実施形態が詳細に述べられたが、様々な変更(changes)、置き換え(substitutions)及び選択(alternatives)が請求項で定義された発明の精神と範囲から逸脱することなくなされることが理解されるべきである。また、仮にクレームが出願手続きにおいて補正されたとしても、クレームされた発明の均等の範囲は維持されるものと発明者は意図する。
【図１】
2009107462.tif 000003
【図２】
2009107462.tif 000004
【図３】
2009107462.tif 000005
【図４】
2009107462.tif 000006
【図５】
2009107462.tif 000007
【図６】
2009107462.tif 000008
【図７】
2009107462.tif 000009
【図８】
2009107462.tif 000010
【図９】
2009107462.tif 000011
【図１０】
2009107462.tif 000012
【図１１】
2009107462.tif 000013
【図１２】
2009107462.tif 000014
【図１３】
2009107462.tif 000015
【図１４】
2009107462.tif 000016
【手続補正書】
【提出日】平成21年7月15日(2009.7.15)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
（削除）
【請求項２】
複数個の命令から構成される超長命令語を実行するプロセッサであって、Ｍ個の命令流の前記超長命令語を格納する複数のメモリバンクを備えるＮ（Ｎ＜Ｍ）個の命令キャッシュから、最大Ｍ個の命令流の前記超長命令語を同時にフェッチする際に、
各命令流に命令流優先度を設定し、各命令流が使用するメモリバンクの数を示すバンク数情報と、各命令流の命令アドレスとに基づき、各命令流が使用するメモリバンクを全メモリバンクの中から特定し、複数命令流が同一メモリバンクを使用する場合には、前記命令流優先度に基づき、優先度の高い命令流から順に、命令流が使用するメモリバンクを決定し、当該命令流の命令アドレスを当該メモリバンクに供給するアドレス供給装置を備えることを特徴とするプロセッサ。
【請求項３】
前記バンク数情報が、前サイクルにフェッチされた、前記超長命令語の一部のフィールドであることを特徴とする請求項２に記載のプロセッサ。
【請求項４】
前記バンク数情報が、命令流の最初の命令をフェッチする場合に、命令流毎に固定数であることを特徴とする請求項２又は３に記載のプロセッサ。
【請求項５】
前記超長命令語に分岐命令が含まれる場合に、各分岐結果に対応する複数のバンク数情報が、前サイクルにフェッチされた前記超長命令語の一部のフィールドであることを特徴とする請求項２乃至４の何れか１項に記載のプロセッサ。
【請求項６】
各分岐結果に対応する複数の前記バンク数情報は２つであり、それぞれ、分岐が成立した場合又は不成立した場合のバンク数情報として、用いられることを特徴とする請求項５に記載のプロセッサ。
【請求項７】
前記超長命令語に分岐命令が含まれる場合に、一つのバンク数情報と固定数が、それぞれ、分岐成立時または不成立時のバンク数情報として用いられ、前記一つのバンク数情報が、前サイクルにフェッチされた前記超長命令語の一部のフィールドであり、前記固定数は、外部の制御信号又はバンク数情報の変更命令により、設定される数値であることを特徴とする請求項５又は６に記載のプロセッサ。
【請求項８】
前記バンク数情報が、命令流毎に固定数であり、前記固定数は、外部からのバンク数制御信号又はバンク数情報の変更命令により、設定及び変更されることを特徴とする請求項２に記載のプロセッサ。
【請求項９】
前記バンク数情報が、命令流毎に用意されたメモリに格納され、前記メモリは、各命令流の命令アドレスに基づいて参照されることを特徴とする請求項２に記載のプロセッサ。
【請求項１０】
前記命令流優先度は、命令流毎に固定値であり、当該固定値は、外部からの命令流優先度制御信号、命令流優先度の変更命令、前サイクルにフェッチされた超長命令語の一部のフィールドである命令流優先度変更フラグ、の何れかにより設定及び変更されることを特徴とする請求項２乃至９の何れか１項に記載のプロセッサ。
【請求項１１】
前記命令流優先度は、ラウンドロビン方式により決定され、最も高い優先度を与える命令流や優先度が変化する順序が、外部からの制御信号、命令流優先度の変更命令、前サイクルにフェッチされた超長命令語の一部のフィールドである命令流優先度変更フラグ、の何れかにより設定及び変更されることを特徴とする請求項２乃至９の何れか１項に記載のプロセッサ。
【請求項１２】
前サイクルにフェッチされた超長命令語の一部のフィールドである優先度ポインタにより、前記ラウンドロビン方式で、最も高い前記命令流優先度を持つ命令流を設定することを特徴とする請求項１１に記載のプロセッサ。
【請求項１３】
各命令流の命令がフェッチされた又はされなかった回数に基づき、命令流優先度が変更されることを特徴とする請求項２乃至１２の何れか１項に記載のプロセッサ。
【請求項１４】
各命令流の命令がフェッチされた回数の少ない順に、より高い命令流優先度を与えることを特徴とする請求項２乃至１３の何れか１項に記載のプロセッサ。
【請求項１５】
前記命令流優先度は、各命令流の命令がフェッチされなかった回数が多い順に、より高い優先度を与えることを特徴とする請求項２乃至１３の何れか１項に記載のプロセッサ。
【請求項１６】
前記命令流優先度は、特定の命令流では固定値であり、それ以外の命令流については、ラウンドロビン方式、前サイクルにフェッチされた超長命令語の一部のフィールドである命令流優先度フラグ、命令流の命令がフェッチされた回数の少ない順により高い優先度、命令流の命令がフェッチされなかった回数が多い順により高い優先度、の何れか又はその組合せにより決定されることを特徴とする請求項２乃至１５の何れか１項に記載のプロセッサ。
【請求項１７】
各命令流が使用するメモリバンクの重複が最小となる命令アドレスに、各命令流の命令を配置するプログラミング手段又はコンパイラを備えることを特徴とする請求項２乃至１６の何れか１項に記載のプロセッサ。
【請求項１８】
命令流毎に、各命令流が使用するメモリバンク数を指定できるプログラミング手段又はコンパイラを備えることを特徴とする請求項２乃至１６の何れか１項に記載のプロセッサ。
【請求項１９】
命令流毎に、各命令流が使用するメモリバンクを指定できるプログラミング手段又はコンパイラを備えることを特徴とする請求項２乃至１６の何れか１項に記載のプロセッサ。
【請求項２０】
前記命令アドレスは、各命令流の超長命令語がフェッチされた場合に、前記命令アドレスに、フェッチした超長命令語の長さに応じた値と、命令流毎の命令流オフセットとを加算した値が、次サイクルにおける当該命令流の命令アドレスとなることを特徴とする請求項２乃至１９の何れか１項に記載のプロセッサ。
【請求項２１】
前記命令流オフセットは、前記プログラミング手段又は前記コンパイラによって、設定されることを特徴とする請求項２０に記載のプロセッサ。
【請求項２２】
前記命令流オフセットは、命令流毎に固定数であり、当該前記固定数は、外部からの命令流オフセット制御信号、命令流オフセットの変更命令、前サイクルにフェッチされた超長命令語の一部のフィールドである命令流オフセット変更フラグ、の何れかにより設定、変更されることを特徴とする請求項２１に記載のプロセッサ。
【請求項２３】
前記命令流オフセット制御信号、命令流オフセットの変更命令、命令流オフセット変更フラグは、前記プログラミング手段又は前記コンパイラによって、設定されることを特徴とする請求項請求項２０乃至２２の何れか１項に記載のプロセッサ。
【請求項２４】
（削除）
【請求項２５】
プロセッサを用いて複数個の命令から構成される超長命令語を実行する超長命令語実行方法であって、Ｍ個の命令流の前記超長命令語を格納する複数のメモリバンクを備えるＮ（Ｎ＜Ｍ）個の命令キャッシュから、最大Ｍ個の命令流の前記超長命令語を同時にフェッチする際に、
各命令流に命令流優先度を設定し、各命令流が使用するメモリバンクの数を示すバンク数情報と、各命令流の命令アドレスとに基づき、各命令流が使用するメモリバンクを全メモリバンクの中から特定し、複数命令流が同一メモリバンクを使用する場合には、前記命令流優先度に基づき、優先度の高い命令流から順に、命令流が使用するメモリバンクを決定し、当該命令流の命令アドレスを当該メモリバンクに供給することを特徴とする超長命令語実行方法。
【請求項２６】
（削除）
【請求項２７】
複数個の命令から構成される超長命令語を実行するプロセッサとしてコンピュータを機能させるための超長命令語実行プログラムであって、Ｍ個の命令流の前記超長命令語を格納する複数のメモリバンクを備えるＮ（Ｎ＜Ｍ）個の命令キャッシュから、最大Ｍ個の命令流の前記超長命令語を同時にフェッチすることを特徴とするプロセッサとしてコンピュータを機能させる際に、
前記プロセッサは、各命令流に命令流優先度を設定し、各命令流が使用するメモリバンクの数を示すバンク数情報と、各命令流の命令アドレスとに基づき、各命令流が使用するメモリバンクを全メモリバンクの中から特定し、複数命令流が同一メモリバンクを使用する場合には、前記命令流優先度に基づき、優先度の高い命令流から順に、命令流が使用するメモリバンクを決定し、当該命令流の命令アドレスを当該メモリバンクに供給するアドレス供給装置を備えることを特徴とする超長命令語実行プログラム。
【国際調査報告】
2009107462.tif 000017
2009107462.tif 000018