(57)【要約】【課題】レジスタリネーミングを行うベクトルプロセッサにおいて、レジスタ資源の利用効率を向上させること。【解決手段】リネーミングテーブル管理部は、ベクトル命令で指定される論理ベクトルレジスタに仮想ベクトルレジスタを割り当て、当該論理ベクトルレジスタと割り当てられた仮想ベクトルレジスタとの対応関係を示すリネーミングテーブルを管理する。ポインタリスト管理部は、上記割り当てられた仮想ベクトルレジスタの各要素毎に物理レジスタ上の任意のデータ領域を割り当て、各要素と割り当てられたデータ領域との対応関係を示すポインタリストを管理する。リネーミング部は、ベクトル命令で指定される論理ベクトルレジスタを、リネーミングテーブルで示される仮想ベクトルレジスタに置換する。命令発行部は、リネーミング処理後のベクトル命令で指定される仮想ベクトルレジスタと上記ポインタリストとに基づいて、リネーミング処理後のベクトル命令をベクトル演算部に対して発行する命令発行処理を行う。【選択図】図２
2010205049.tif 000002
【特許請求の範囲】
【請求項１】
物理レジスタを有しベクトル演算を行うベクトル演算部と、
命令発行制御部と
を備え、
前記命令発行制御部は、
ベクトル命令で指定される論理ベクトルレジスタに仮想ベクトルレジスタを割り当て、前記論理ベクトルレジスタと前記割り当てられた仮想ベクトルレジスタとの対応関係を示すリネーミングテーブルを管理するリネーミングテーブル管理部と、
前記割り当てられた仮想ベクトルレジスタの各要素毎に前記物理レジスタ上の任意のデータ領域を割り当て、前記各要素と前記割り当てられたデータ領域との対応関係を示すポインタリストを管理するポインタリスト管理部と、
前記ベクトル命令で指定される前記論理ベクトルレジスタを、前記リネーミングテーブルで示される前記仮想ベクトルレジスタに置換するリネーミング処理を行うリネーミング部と、
前記リネーミング処理後の前記ベクトル命令で指定される前記仮想ベクトルレジスタと前記ポインタリストとに基づいて、前記リネーミング処理後の前記ベクトル命令を前記ベクトル演算部に対して発行する命令発行処理を行う命令発行部と
を備える
ベクトルプロセッサ。
【請求項２】
請求項１に記載のベクトルプロセッサであって、
前記リネーミング部は、第１論理ベクトルレジスタへの書き込みを指示する第１ベクトル命令を受け取り、
前記リネーミングテーブル管理部は、前記第１論理ベクトルレジスタに第１仮想ベクトルレジスタを割り当てて、前記リネーミングテーブルを更新し、
前記ポインタリスト管理部は、前記第１仮想ベクトルレジスタの各要素毎に前記物理レジスタ上の第１データ領域を割り当てて、前記ポインタリストを更新し、
前記リネーミング部は、前記第１ベクトル命令で指定される前記第１論理ベクトルレジスタを前記第１仮想ベクトルレジスタに置換する
ベクトルプロセッサ。
【請求項３】
請求項２に記載のベクトルプロセッサであって、
前記第１ベクトル命令の実行完了前に、前記リネーミング部が、前記第１ベクトル命令と同じ前記第１論理ベクトルレジスタへの書き込みを指示する第２ベクトル命令を受け取った場合、
前記リネーミングテーブル管理部は、前記第１論理ベクトルレジスタに第２仮想ベクトルレジスタを新たに割り当てて、前記リネーミングテーブルを更新し、
前記ポインタリスト管理部は、前記第２仮想ベクトルレジスタの各要素毎に前記物理レジスタ上の前記第１データ領域と異なる第２データ領域を割り当てて、前記ポインタリストを更新し、
前記リネーミング部は、前記第２ベクトル命令で指定される前記第１論理ベクトルレジスタを前記第２仮想ベクトルレジスタに置換する
ベクトルプロセッサ。
【請求項４】
請求項２に記載のベクトルプロセッサであって、
前記リネーミング部は、前記第１ベクトル命令と同じ前記第１論理ベクトルレジスタへの書き込みを指示する第２ベクトル命令を受け取り、
前記第２ベクトル命令はマスク付ベクトル演算命令であり、
ベクトルレジスタの複数の要素は、マスクされるマスク要素とマスクされない非マスク要素とを含み、
前記リネーミングテーブル管理部は、前記第１論理ベクトルレジスタに第２仮想ベクトルレジスタを新たに割り当てて、前記リネーミングテーブルを更新し、
前記ポインタリスト管理部は、前記マスク要素と前記非マスク要素とを示すマスクデータを受け取り、前記第２仮想ベクトルレジスタの前記マスク要素には前記第１仮想ベクトルレジスタの前記マスク要素に既に割り当てられている前記第１データ領域を割り当て、前記第２仮想ベクトルレジスタの前記非マスク要素には前記物理レジスタ上の前記第１データ領域と異なる第２データ領域を割り当てて、前記ポインタリストを更新し、
前記リネーミング部は、前記第２ベクトル命令で指定される前記第１論理ベクトルレジスタを前記第２仮想ベクトルレジスタに置換する
ベクトルプロセッサ。
【請求項５】
請求項１乃至４のいずれか一項に記載のベクトルプロセッサであって、
前記リネーミングテーブルは、前記論理ベクトルレジスタと前記割り当てられた仮想ベクトルレジスタとの前記対応関係を、投機的実行の階層毎に示し、
投機的実行の階層がある階層から次の階層に変わる場合、前記リネーミングテーブル管理部は、前記ある階層の前記対応関係を前記次の階層の前記対応関係に設定し、その後、前記次の階層における前記仮想ベクトルレジスタの割り当てを実施する
ベクトルプロセッサ。
【請求項６】
ベクトルプロセッサにおけるベクトル命令発行方法であって、
前記ベクトルプロセッサは、物理レジスタを有しベクトル演算を行うベクトル演算部を備え、
前記ベクトル命令発行方法は、
ベクトル命令で指定される論理ベクトルレジスタに仮想ベクトルレジスタを割り当て、前記論理ベクトルレジスタと前記割り当てられた仮想ベクトルレジスタとの対応関係を示すリネーミングテーブルを更新するステップと、
前記割り当てられた仮想ベクトルレジスタの各要素毎に前記物理レジスタ上の任意のデータ領域を割り当て、前記各要素と前記割り当てられたデータ領域との対応関係を示すポインタリストを更新するステップと、
前記ベクトル命令で指定される前記論理ベクトルレジスタを、前記リネーミングテーブルで示される前記仮想ベクトルレジスタに置換するリネーミング処理を行うステップと、
前記リネーミング処理後の前記ベクトル命令で指定される前記仮想ベクトルレジスタと前記ポインタリストとに基づいて、前記リネーミング処理後の前記ベクトル命令を前記ベクトル演算部に対して発行するステップと
を含む
ベクトル命令発行方法。
【請求項７】
請求項６に記載のベクトル命令発行方法であって、
第１論理ベクトルレジスタへの書き込みを指示する第１ベクトル命令が発行される場合、
前記リネーミングテーブルを更新するステップにおいて、前記第１論理ベクトルレジスタに第１仮想ベクトルレジスタが割り当てられ、
前記ポインタリストを更新するステップにおいて、前記第１仮想ベクトルレジスタの各要素毎に前記物理レジスタ上の第１データ領域が割り当てられ、
前記リネーミング処理において、前記第１ベクトル命令で指定される前記第１論理ベクトルレジスタが前記第１仮想ベクトルレジスタに置換される
ベクトル命令発行方法。
【請求項８】
請求項７に記載のベクトル命令発行方法であって、
前記第１ベクトル命令の実行完了前に、前記第１ベクトル命令と同じ前記第１論理ベクトルレジスタへの書き込みを指示する第２ベクトル命令が発行される場合、
前記リネーミングテーブルを更新するステップにおいて、前記第１論理ベクトルレジスタに第２仮想ベクトルレジスタが新たに割り当てられ、
前記ポインタリストを更新するステップにおいて、前記第２仮想ベクトルレジスタの各要素毎に前記物理レジスタ上の前記第１データ領域と異なる第２データ領域が割り当てられ、
前記リネーミング処理において、前記第２ベクトル命令で指定される前記第１論理ベクトルレジスタが前記第２仮想ベクトルレジスタに置換される
ベクトル命令発行方法。
【請求項９】
請求項７に記載のベクトル命令発行方法であって、
前記第１ベクトル命令と同じ前記第１論理ベクトルレジスタへの書き込みを指示する第２ベクトル命令が発行され、且つ、前記第２ベクトル命令がマスク付ベクトル演算命令である場合、
ベクトルレジスタの複数の要素は、マスクされるマスク要素とマスクされない非マスク要素とを含み、
前記リネーミングテーブルを更新するステップにおいて、前記第１論理ベクトルレジスタに第２仮想ベクトルレジスタが新たに割り当てられ、
前記ポインタリストを更新するステップにおいて、前記第２仮想ベクトルレジスタの前記マスク要素には前記第１仮想ベクトルレジスタの前記マスク要素に既に割り当てられている前記第１データ領域が割り当てられ、前記第２仮想ベクトルレジスタの前記非マスク要素には前記物理レジスタ上の前記第１データ領域と異なる第２データ領域が割り当てられ、
前記リネーミング処理において、前記第２ベクトル命令で指定される前記第１論理ベクトルレジスタが前記第２仮想ベクトルレジスタに置換される
ベクトル命令発行方法。
【請求項１０】
請求項６乃至９のいずれか一項に記載のベクトル命令発行方法であって、
前記リネーミングテーブルは、前記論理ベクトルレジスタと前記割り当てられた仮想ベクトルレジスタとの前記対応関係を、投機的実行の階層毎に示し、
投機的実行の階層がある階層から次の階層に変わる場合、
前記リネーミングテーブルを更新するステップにおいて、前記ある階層の前記対応関係が前記次の階層の前記対応関係に設定され、その後、前記次の階層における前記仮想ベクトルレジスタの割り当てが実施される
ベクトル命令発行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、レジスタリネーミングを行うベクトルプロセッサ、及びベクトルプロセッサにおけるベクトル命令発行方法に関する。
【背景技術】
【０００２】
計算機システムの性能を向上させるためには、プロセッサによって単位時間当たりに実行される命令数を増やすことが重要である。例えば、プロセッサに対する一連の命令が、第１のレジスタを用いる第１の命令と、同じ第１のレジスタを用いる第２の命令を含んでいる場合を考える。このとき、第１の命令と第２の命令との間に依存関係が無ければ、第１のレジスタと異なる第２のレジスタを用いるように第２の命令を変更することによって、第１の命令と第２の命令を同時並列に実行することが可能となる。このように、命令発行時に、当該命令で指定されるレジスタを別のレジスタに変更することは、「レジスタリネーミング（register renaming）」と呼ばれている。レジスタリネーミングは、命令発行レートを向上させるための技術として有用である（特許文献１、特許文献２、特許文献３、及び特許文献４参照）。
【０００３】
また、複数要素からなるベクトルデータに対してベクトル演算を行うベクトルプロセッサ（ベクトル型プロセッサ）が知られている。ベクトルプロセッサは、ベクトル命令に従って、ベクトルレジスタを用いることによってベクトル演算を行う。
【０００４】
一般的に、ベクトルプロセッサは「マスク演算機能」を有している（特許文献２、特許文献３、及び特許文献４参照）。マスク演算では、演算結果であるベクトルデータのうち指定された要素がマスクされ、マスクされた要素は書き込み先のベクトルレジスタには書き込まれない。つまり、ベクトルレジスタへの格納可否が、要素単位で指定される。マスク演算を指示する命令は「マスク付ベクトル演算命令」と呼ばれ、マスクされる要素を指定するデータは「マスクデータ」と呼ばれる。マスク付ベクトル演算命令の場合、ベクトルプロセッサは、マスクデータを用いてマスク演算を行う。
【０００５】
例えば、ループ中に条件分岐が含まれる処理をベクトル化するためには、このマスク演算が必要である。一方では、第１の条件に適合する要素をマスクせず、第２の条件に適合する要素をマスクするマスクデータが用いられ、第１の条件の場合の演算結果が指定されたベクトルレジスタに書き込まれる。他方では、第２の条件に適合する要素をマスクせず、第１の条件に適合する要素をマスクするマスクデータが用いられ、第２の条件の場合の演算結果が同じベクトルレジスタに書き込まれる。すなわち、条件分岐に応じたマスクデータを反転させることにより、それぞれの条件の場合の演算結果が同一のベクトルレジスタに書き込まれる。
【０００６】
このように、マスク付ベクトル演算命令の場合、マスクされた要素に関しては、指定されたベクトルレジスタに既に格納されている値をそのまま保持する必要がある。従って、指定されたベクトルレジスタを無闇に変更することはできない。すなわち、上述のレジスタリネーミングを単純にベクトルプロセッサに適用することはできない。
【０００７】
ベクトルプロセッサにおけるレジスタリネーミングに関連する技術として、次のものが知られている。
【０００８】
特許文献２に記載されたベクトル命令管理回路は、ベクトルレジスタリネーミング手段を備えている。ベクトルレジスタリネーミング手段は、ベクトル命令で指定される論理ベクトルレジスタを、予め規定されている割り当て表に従って、物理ベクトルレジスタに置換する。その割り当て表において、１つの論理ベクトルレジスタには物理ベクトルレジスタ群が割り当てられ、且つ、異なる論理ベクトルレジスタには異なる物理ベクトルレジスタ群が割り当てられる。同一の論理ベクトルレジスタに対する書き込みを行っている先行ベクトル命令が存在する場合、後続ベクトル命令の論理ベクトルレジスタは、次の方針に従って置換される。後続ベクトル命令のマスクフラグが有効を示しているか、あるいは、後続ベクトル命令のベクトル長が先行ベクトル命令のベクトル長以下の場合、後続ベクトル命令の論理ベクトルレジスタは、先行ベクトル命令に対するものと同じ物理ベクトルレジスタに置換される。一方、後続ベクトル命令のマスクフラグが有効を示しておらず、且つ、後続ベクトル命令のベクトル長が先行ベクトル命令のベクトル長より大きい場合、後続ベクトル命令の論理ベクトルレジスタは、先行ベクトル命令に対するものと異なる物理ベクトルレジスタに置換される。
【０００９】
特許文献３に記載された技術によれば、１つの論理ベクトルレジスタに対して、複数のリネーミングレジスタが設けられる。１つの論理ベクトルレジスタと複数のリネーミングレジスタとの間の対応関係は固定されている。１つの論理ベクトルレジスタに対応付けられた複数のリネーミングレジスタは、相互に結合され、１つのセットを構成する。マスク演算に必要な値のコピーは、当該セット内で実現される。
【００１０】
特許文献４に記載された情報処理装置は、複数の第１の記憶領域と、第２の記憶領域と、制御部と、を含む。複数の第１の記憶領域は、データを格納するための複数の第１の格納領域を備える。第２の記憶領域は、データを格納するための複数の第２の格納領域を備え、位置指定情報により第２の格納領域が指定される。制御部は、第１の格納領域の指定に用いる第１のデータと、第１のデータにより指定された第１の格納領域に対応する第２のデータとを合成して、上記位置指定情報を生成する。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００４−３０３０２６号公報
【特許文献２】特開２００６−２６８１６８号公報
【特許文献３】特開２００７−３３４８１９号公報
【特許文献４】特開２００８−８３９４７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
上述の通り、レジスタリネーミングは、命令発行レートを向上させるための技術として有用である。その一方で、通常のレジスタリネーミングを、マスク付ベクトル演算命令を処理するベクトルプロセッサに単純に適用することはできない。
【００１３】
上述の関連技術では、１つの論理ベクトルレジスタは、あらかじめ複数の物理ベクトルレジスタと対応付けられる。そして、論理ベクトルレジスタの置換先をそれら複数の物理ベクトルレジスタの中で適切に調整することにより、マスク付ベクトル演算命令が処理される。あるいは、それら複数の物理ベクトルレジスタ間で値をコピーすることにより、マスク付ベクトル演算命令が処理される。しかしながら、１つの論理ベクトルレジスタと複数の物理ベクトルレジスタとの間の対応関係は固定されている。従って、ある物理ベクトルレジスタが空いていたとしても、その物理ベクトルレジスタを他の論理ベクトルレジスタのために使用することはできない。すなわち、レジスタ資源の利用効率が悪い。
【００１４】
本発明の１つの目的は、レジスタリネーミングを行うベクトルプロセッサにおいて、レジスタ資源の利用効率を向上させることができる技術を提供することにある。
【課題を解決するための手段】
【００１５】
本発明の第１の観点において、ベクトルプロセッサが提供される。そのベクトルプロセッサは、物理レジスタを有しベクトル演算を行うベクトル演算部と、命令発行制御部と、を備える。命令発行制御部は、リネーミングテーブル管理部と、ポインタリスト管理部と、リネーミング部と、命令発行部と、を備える。リネーミングテーブル管理部は、ベクトル命令で指定される論理ベクトルレジスタに仮想ベクトルレジスタを割り当て、当該論理ベクトルレジスタと割り当てられた仮想ベクトルレジスタとの対応関係を示すリネーミングテーブルを管理する。ポインタリスト管理部は、上記割り当てられた仮想ベクトルレジスタの各要素毎に物理レジスタ上の任意のデータ領域を割り当て、各要素と割り当てられたデータ領域との対応関係を示すポインタリストを管理する。リネーミング部は、ベクトル命令で指定される論理ベクトルレジスタを、リネーミングテーブルで示される仮想ベクトルレジスタに置換する。命令発行部は、リネーミング処理後のベクトル命令で指定される仮想ベクトルレジスタと上記ポインタリストとに基づいて、リネーミング処理後のベクトル命令をベクトル演算部に対して発行する命令発行処理を行う。
【００１６】
本発明の第２の観点において、ベクトルプロセッサにおけるベクトル命令発行方法が提供される。ベクトルプロセッサは、物理レジスタを有しベクトル演算を行うベクトル演算部を備える。ベクトル命令発行方法は、（Ａ）ベクトル命令で指定される論理ベクトルレジスタに仮想ベクトルレジスタを割り当て、当該論理ベクトルレジスタと割り当てられた仮想ベクトルレジスタとの対応関係を示すリネーミングテーブルを更新するステップと、（Ｂ）割り当てられた仮想ベクトルレジスタの各要素毎に物理レジスタ上の任意のデータ領域を割り当て、各要素と割り当てられたデータ領域との対応関係を示すポインタリストを更新するステップと、（Ｃ）ベクトル命令で指定される論理ベクトルレジスタを、リネーミングテーブルで示される仮想ベクトルレジスタに置換するリネーミング処理を行うステップと、（Ｄ）リネーミング処理後のベクトル命令で指定される仮想ベクトルレジスタと上記ポインタリストとに基づいて、リネーミング処理後のベクトル命令をベクトル演算部に対して発行するステップと、を含む。
【発明の効果】
【００１７】
本発明によれば、レジスタリネーミングを行うベクトルプロセッサにおいて、レジスタ資源の利用効率を向上させることが可能となる。
【図面の簡単な説明】
【００１８】
【図１】図１は、本発明の実施の形態に係るベクトル計算機の構成を概略的に示すブロック図である。
【図２】図２は、本発明の実施の形態におけるリネーミングテーブル、ポインタリスト、及び物理レジスタ間の関係を示す概念図である。
【図３】図３は、本発明の実施の形態に係るベクトルプロセッサの命令発行制御部の構成を示すブロック図である。
【図４】図４は、本発明の実施の形態に係るベクトルプロセッサの命令発行制御部による処理を示すフローチャートである。
【図５Ａ】図５Ａは、第１の処理例を説明するための状態遷移図である。
【図５Ｂ】図５Ｂは、第１の処理例を説明するための状態遷移図である。
【図５Ｃ】図５Ｃは、第１の処理例を説明するための状態遷移図である。
【図５Ｄ】図５Ｄは、第１の処理例を説明するための状態遷移図である。
【図５Ｅ】図５Ｅは、第１の処理例を説明するための状態遷移図である。
【図５Ｆ】図５Ｆは、第１の処理例を説明するための状態遷移図である。
【図５Ｇ】図５Ｇは、第１の処理例を説明するための状態遷移図である。
【図５Ｈ】図５Ｈは、第１の処理例を説明するための状態遷移図である。
【図５Ｉ】図５Ｉは、第１の処理例を説明するための状態遷移図である。
【図６Ａ】図６Ａは、第２の処理例を説明するための状態遷移図である。
【図６Ｂ】図６Ｂは、第２の処理例を説明するための状態遷移図である。
【図６Ｃ】図６Ｃは、第２の処理例を説明するための状態遷移図である。
【図６Ｄ】図６Ｄは、第２の処理例を説明するための状態遷移図である。
【図６Ｅ】図６Ｅは、第２の処理例を説明するための状態遷移図である。
【図６Ｆ】図６Ｆは、第２の処理例を説明するための状態遷移図である。
【図７Ａ】図７Ａは、第３の処理例を説明するための状態遷移図である。
【図７Ｂ】図７Ｂは、第３の処理例を説明するための状態遷移図である。
【図８Ａ】図８Ａは、第４の処理例を説明するための状態遷移図である。
【図８Ｂ】図８Ｂは、第４の処理例を説明するための状態遷移図である。
【図８Ｃ】図８Ｃは、第４の処理例を説明するための状態遷移図である。
【図８Ｄ】図８Ｄは、第４の処理例を説明するための状態遷移図である。
【図８Ｅ】図８Ｅは、第４の処理例を説明するための状態遷移図である。
【発明を実施するための形態】
【００１９】
１．概要
図１は、本実施の形態に係るベクトル計算機１の構成を概略的に示している。ベクトル計算機１は、ベクトルプロセッサ１０とメインメモリ２０を備えている。ベクトルプロセッサ１０は、ベクトルロード、ベクトルストア、ベクトル演算といった「ベクトル命令」を処理するプロセッサである。ベクトルロード命令に応答して、ベクトルプロセッサ１０は、ベクトルデータをメインメモリ２０から読み出す。ベクトルストア命令に応答して、ベクトルプロセッサ１０は、ベクトルデータをメインメモリ２０に書き込む。ベクトル演算命令に応答して、ベクトルプロセッサ１０は、ベクトルデータを用いてベクトル演算を行う。
【００２０】
ベクトルプロセッサ１０は、命令発行制御部１００とベクトル演算部２００とを備えている。命令発行制御部１００は、ベクトル命令に関してレジスタリネーミングやスケジューリングを行い、ベクトル演算部２００に対するベクトル命令の発行を制御する。
【００２１】
ベクトル演算部２００は、命令発行制御部１００によって発行されるベクトル命令に従って、ベクトルロード、ベクトルストア、ベクトル演算を行う。より詳細には、ベクトル演算部２００は、一群の物理レジスタ２１０及び一群のベクトル演算器２２０を備えている。ベクトルロード命令に従って、ベクトル演算部２００は、メインメモリ２０から読み出されたベクトルデータを物理レジスタ２１０に格納する。ベクトルストア命令に従って、ベクトル演算部２００は、物理レジスタ２１０からベクトルデータを読み出し、そのベクトルデータをメインメモリ２０に書き込む。ベクトル演算命令に従って、ベクトル演算部２００は、物理レジスタ２１０からベクトルデータを読み出し、そのベクトルデータをベクトル演算器２２０に送出し、ベクトル演算器２２０は、そのベクトルデータを用いてベクトル演算を実行し、ベクトル演算部２００は、演算結果であるベクトルデータを物理レジスタ２１０に書き込む。
【００２２】
次に、本実施の形態に係る命令発行制御部１００の機能を概略的に説明する。ソフトウェアにより生成されるベクトル命令は、アクセス先の「論理ベクトルレジスタＬＲ」を指定している。論理ベクトルレジスタＬＲは、ソフトウェアによって指定されるベクトルレジスタである。命令発行制御部１００は、ベクトル命令を受け取ると、そのベクトル命令で指定されている論理ベクトルレジスタＬＲを、「仮想ベクトルレジスタＶＲ」に置換する。すなわち、命令発行制御部１００は、受け取ったベクトル命令に対してリネーミング処理を実施する。
【００２３】
より詳細には、命令発行制御部１００は、図２に示されるような「リネーミングテーブルＲＥＮ」を有している。リネーミングテーブルＲＥＮは、論理ベクトルレジスタＬＲと仮想ベクトルレジスタＶＲとの間の対応関係を示すテーブルである。命令発行制御部１００は、ベクトル命令において書き込み先として指定されている論理ベクトルレジスタＬＲに対し、任意の仮想ベクトルレジスタＶＲを割り当てる（関連付ける）。そして、命令発行制御部１００は、その割り当てに応じてリネーミングテーブルＲＥＮを更新する。図２の例では、論理ベクトルレジスタＬＲ０〜ＬＲ２は、それぞれ、仮想ベクトルレジスタＶＲ０〜ＶＲ２に割り当てられている。このようなリネーミングテーブルＲＥＮを参照することにより、命令発行制御部１００は、ベクトル命令で指定される論理ベクトルレジスタＬＲを、割り当てられた仮想ベクトルレジスタＶＲに置換することができる。
【００２４】
尚、図２の例では、リネーミングテーブルＲＥＮは、論理ベクトルレジスタＬＲと割り当てられた仮想ベクトルレジスタＶＲとの対応関係を、「投機レベル」毎に示している。投機レベルとは、投機的実行（speculative execution）の最中に新たな投機的実行が実施される場合の、投機的実行の階層を意味する。投機的実行に関する詳細は後述される。
【００２５】
論理ベクトルレジスタＬＲに仮想ベクトルレジスタＶＲが割り当てられると、命令発行制御部１００は、更に、当該仮想ベクトルレジスタＶＲを物理レジスタ２１０に関連付ける。仮想ベクトルレジスタＶＲと物理レジスタ２１０との間の関係を示すのが「ポインタリストＰＮＴ」である。図２に示されるように、ポインタリストＰＮＴは、仮想ベクトルレジスタＶＲの各要素毎に「物理アドレス（ポインタ）」を示している。物理アドレスは、物理レジスタ２１０上のデータ領域（データ格納領域）を指し示している。命令発行制御部１００は、論理ベクトルレジスタＬＲに新たに仮想ベクトルレジスタＶＲが割り当てられると、当該仮想ベクトルレジスタＶＲの各要素毎に任意の物理アドレスを割り当て、ポインタリストＰＮＴを更新する。
【００２６】
例えば図２において、仮想ベクトルレジスタＶＲ０の要素ＥＬ０〜ＥＬ３は、それぞれ、物理レジスタ２１０の物理アドレスＡｄ００、Ａｄ０１、Ａｄ０２、及びＡｄ０７に割り当てられている。ここで、仮想ベクトルレジスタＶＲのそれぞれの要素の割り当て先は、物理レジスタ２１０上で必ずしも連続していないことに留意されたい。すなわち、本実施の形態では、物理レジスタ２１０は、仮想ベクトルレジスタＶＲ単位の境界を持っておらず、全ての物理アドレスに対して同様にアクセスできるレジスタの集合となっている。仮想ベクトルレジスタＶＲは、要素単位で、物理レジスタ２１０上の任意のデータ領域に分散的に割り当て可能である。
【００２７】
命令発行制御部１００は、以上に説明されたリネーミングテーブルＲＥＮ及びポインタリストＰＮＴを有している。リネーミング処理において、命令発行制御部１００は、リネーミングテーブルＲＥＮを参照して、ベクトル命令で指定される論理ベクトルレジスタＬＲを対応する仮想ベクトルレジスタＶＲに置換する。その仮想ベクトルレジスタＶＲに割り当てられている物理レジスタ２１０上の物理アドレスには、ポインタリストＰＮＴに基づいてアクセス可能である。異なるベクトル命令が同一の論理ベクトルレジスタＬＲを指定している場合であっても、リネーム処理後のベクトル命令間で仮想ベクトルレジスタＶＲが異なっていれば、それらベクトル命令を同時並列的に実行することが可能である。
【００２８】
本実施の形態では、論理ベクトルレジスタＬＲと物理レジスタ２１０との間の対応関係は固定されていないことに留意されたい。ある論理ベクトルレジスタＬＲには仮想ベクトルレジスタＶＲを介して物理レジスタ２１０上のデータ領域が割り当てられ、その割り当て先は要素単位で自由に変更可能である。従って、物理レジスタ２１０を無駄なく効率的に使用することが可能となる。すなわち、レジスタ資源の利用効率が向上する。
【００２９】
２．命令発行制御部１００
以下、図３及び図４を参照して、本実施の形態に係るベクトルプロセッサ１０の命令発行制御部１００を更に詳しく説明する。図３は、本実施の形態に係る命令発行制御部１００の構成を示すブロック図である。命令発行制御部１００は、リネーム前命令バッファ１１０、リネーミング部１２０、リネーミングテーブル管理部１３０、ポインタリスト管理部１４０、発行待ち命令バッファ１５０、命令発行部１６０、及びマスクデータ生成部１７０を備えている。図４は、本実施の形態に係る命令発行制御部１００による処理を示すフローチャートである。
【００３０】
ステップＳ１０：
ソフトウェアにより生成されるベクトル命令は、アクセス先の論理ベクトルレジスタＬＲを指定している。リネーム前命令バッファ１１０は、そのベクトル命令ＣＯＭを一旦蓄えておくためのＦＩＦＯ（First-In First-Out）のバッファである。リネーミング部１２０は、リネーム前命令バッファ１１０よりベクトル命令ＣＯＭを順番に読み出す。
【００３１】
ステップＳ２０：
リネーミング部１２０は、リネーム前命令バッファ１１０から読み出したベクトル命令ＣＯＭを解析する。そして、リネーミング部１２０は、リネーミングテーブル管理部１３０に対して、仮想ベクトルレジスタＶＲの“割り当て”及び“通知”を要求する。より詳細には、リネーミング部１２０は、ベクトル命令ＣＯＭにおいて書き込み先として指定されている論理ベクトルレジスタＬＲに任意の仮想ベクトルレジスタＶＲを割り当てるよう、リネーミングテーブル管理部１３０に要求する。また、リネーミング部１２０は、ベクトル命令ＣＯＭ中のそれぞれの論理ベクトルレジスタＬＲに割り当てられた仮想ベクトルレジスタＶＲを通知するよう、リネーミングテーブル管理部１３０に要求する。
【００３２】
ステップＳ３０：
リネーミングテーブル管理部１３０は、リネーミングテーブルＲＥＮ（図２参照）を有し、リネーミングテーブルＲＥＮの管理を行う。具体的には、リネーミングテーブル管理部１３０は、リネーミング部１２０から、仮想ベクトルレジスタＶＲの割り当て要求及び通知要求を受け取る。その割り当て要求に応答して、リネーミングテーブル管理部１３０は、ベクトル命令ＣＯＭで指定されている論理ベクトルレジスタＬＲに仮想ベクトルレジスタＶＲを割り当て、リネーミングテーブルＲＥＮを更新する。
【００３３】
ステップＳ４０：
リネーミングテーブルＲＥＮにおいて新たな仮想ベクトルレジスタＶＲが割り当てられた場合、リネーミングテーブル管理部１３０は、当該仮想ベクトルレジスタＶＲを物理レジスタ２１０に関連付けるよう、ポインタリスト管理部１４０に要求する。つまり、リネーミングテーブル管理部１３０は、新たな仮想ベクトルレジスタＶＲに対して物理レジスタ２１０上でデータ領域を確保するよう、ポインタリスト管理部１４０に要求する。
【００３４】
ステップＳ５０：
ポインタリスト管理部１４０は、ポインタリストＰＮＴ（図２参照）を有し、ポインタリストＰＮＴの管理を行う。具体的には、ポインタリスト管理部１４０は、リネーミングテーブル管理部１３０から、仮想ベクトルレジスタＶＲに対する領域確保要求を受け取る。その領域確保要求に応答して、ポインタリスト管理部１４０は、仮想ベクトルレジスタＶＲの各要素毎に物理レジスタ２１０上の任意のデータ領域（物理アドレス）を割り当て、ポインタリストＰＮＴを更新する。
【００３５】
尚、ベクトル命令ＣＯＭがマスク付ベクトル演算命令の場合、マスクデータ生成部１７０は、マスクされる要素を指定するマスクデータＭＳＫを生成し、そのマスクデータＭＳＫをポインタリスト管理部１４０へ送る。ポインタリスト管理部１４０は、マスクデータＭＳＫを参照しながら、仮想ベクトルレジスタＶＲの各要素毎に物理レジスタ２１０上の任意のデータ領域（物理アドレス）を割り当て、ポインタリストＰＮＴを更新する。マスク付ベクトル演算命令の場合の詳細は後述される。
【００３６】
ステップＳ６０：
仮想ベクトルレジスタＶＲへのデータ領域の割り当てが完了すると、ポインタリスト管理部１４０は、領域確保通知をリネーミングテーブル管理部１３０へ送信する。
【００３７】
ステップＳ７０：
リネーミングテーブル管理部１３０は、ポインタリスト管理部１４０から領域確保通知を受け取る。そして、リネーミングテーブル管理部１３０は、リネーミング部１２０からの通知要求への応答として、仮想ベクトルレジスタＶＲをリネーミング部１２０へ返答する。より詳細には、リネーミングテーブル管理部１３０は、リネーミングテーブルＲＥＮを参照して、ベクトル命令ＣＯＭで指定された論理ベクトルレジスタＬＲのそれぞれに割り当てられている仮想ベクトルレジスタＶＲを、リネーミング部１２０に通知する。
【００３８】
ステップＳ８０：
リネーミング部１２０は、リネーミングテーブル管理部１３０より通知された仮想ベクトルレジスタＶＲを用いて、リネーミング処理を実施する。具体的には、リネーミング部１２０は、ベクトル命令ＣＯＭ中の論理ベクトルレジスタＬＲを、それぞれ、通知された仮想ベクトルレジスタＶＲに置換する。すなわち、リネーミング部１２０は、ベクトル命令ＣＯＭで指定されている論理ベクトルレジスタＬＲを、リネーミングテーブルＲＥＮで示されている対応する仮想ベクトルレジスタＶＲに置換する。リネーミング処理後のベクトル命令ＣＯＭ、すなわち、論理ベクトルレジスタＬＲが仮想ベクトルレジスタＶＲに置換されたベクトル命令ＣＯＭは、以下、「リネーム後ベクトル命令ＣＯＭ’」と参照される。リネーミング部１２０は、リネーム後ベクトル命令ＣＯＭ’を、発行待ち命令バッファ１５０へ送出する。
【００３９】
ステップＳ１００：
リネーム後ベクトル命令ＣＯＭ’は、発行待ち命令バッファ１５０に格納され、命令発行部１６０により発行されるのを待つ。命令発行部１６０は、スケジューリングを行い、発行待ち命令バッファ１５０からリネーム後ベクトル命令ＣＯＭ’を読み出す。ここで、命令発行部１６０は、Ｏｕｔ−ｏｆ−Ｏｒｄｅｒ型であり、発行待ち命令バッファ１５０上のリネーム後ベクトル命令ＣＯＭ’を発行できるものから読み出していく。
【００４０】
ステップＳ１１０：
命令発行部１６０は、発行待ち命令バッファ１５０から読み出したリネーム後ベクトル命令ＣＯＭ’の発行処理を行う。そのリネーミング後ベクトル命令ＣＯＭ’では、アクセス先の仮想ベクトルレジスタＶＲが指定されている。そして、その仮想ベクトルレジスタＶＲの各要素に割り当てられている物理アドレス（ポインタ）は、ポインタリストＰＮＴにより指定されている。従って、命令発行部１６０は、仮想ベクトルレジスタＶＲとポインタリストＰＮＴとに基づいて、リネーム後ベクトル命令ＣＯＭ’をベクトル演算部２００に対して発行することができる。具体的には、命令発行処理において、命令発行部１６０は、ポインタリスト管理部１４０に対して、仮想ベクトルレジスタＶＲに対応する物理アドレス（ポインタ）を送出するよう指示する「ポインタ送出指示」を出す。また、命令発行部１６０は、各種制御情報をベクトル演算部２００に送出する。
【００４１】
ステップＳ１２０：
ポインタリスト管理部１４０は、命令発行部１６０からポインタ送出指示を受け取る。そのポインタ送出指示に応答して、ポインタリスト管理部１４０は、ポインタリストＰＮＴを参照し、リネーム後ベクトル命令ＣＯＭ’中の仮想ベクトルレジスタＶＲに割り当てられている物理アドレス（ポインタ）を取得する。そして、ポインタリスト管理部１４０は、取得した物理アドレス（ポインタ）をベクトル演算部２００へ送出する。
【００４２】
ベクトル演算部２００は、命令発行制御部１００から受け取るポインタ及び制御情報に基づいて、物理レジスタ２１０上の指定されたデータ領域にアクセスすることができる。
【００４３】
３．具体例
以下、命令発行制御部１００による様々な処理例を具体的に説明する。
【００４４】
３−１．第１の処理例（基本処理）
図５Ａで示される初期状態を考える。初期状態において、論理ベクトルレジスタＬＲ０、ＬＲ１は、それぞれ仮想ベクトルレジスタＶＲ０、ＶＲ１に割り当てられている。仮想ベクトルレジスタＶＲ０の要素ＥＬ０〜ＥＬ３は、それぞれ物理アドレスＡｄ００〜Ａｄ０３に割り当てられている。仮想ベクトルレジスタＶＲ１の要素ＥＬ０〜ＥＬ３は、それぞれ物理アドレスＡｄ０４〜Ａｄ０７に割り当てられている。また、リネーム前命令バッファ１１０には、図に示される３つのベクトル命令ＣＯＭが格納されている。尚、本例では投機レベルは「０」のまま変わらないとする。
【００４５】
次に、図５Ｂに示されるように、リネーミング部１２０は、リネーム前命令バッファ１１０から最先のベクトル命令ＣＯＭ（ＬＲ２←ＬＲ０＋ＬＲ１）を読み出す（ステップＳ１０）。このベクトル命令ＣＯＭにおいては、ベクトルデータの読み出し元として論理ベクトルレジスタＬＲ０及びＬＲ１が指定されており、演算結果の書き込み先として論理ベクトルレジスタＬＲ２が指定されている。つまり、このベクトル命令ＣＯＭは、論理ベクトルレジスタＬＲ２への書き込みを指示している。
【００４６】
次に、図５Ｃに示されるように、リネーミング部１２０は、書き込み先である論理ベクトルレジスタＬＲ２に新たな仮想ベクトルレジスタを割り当てるよう要求する（ステップＳ２０）。リネーミングテーブル管理部１３０は、論理ベクトルレジスタＬＲ２に対して未使用の仮想ベクトルレジスタＶＲ２を新たに割り当て、リネーミングテーブルＲＥＮを更新する（ステップＳ３０）。
【００４７】
次に、図５Ｄに示されるように、リネーミングテーブル管理部１３０は、新たな仮想ベクトルレジスタＶＲ２に対して物理レジスタ２１０上のデータ領域を確保するよう、ポインタリスト管理部１４０に要求する（ステップＳ４０）。ポインタリスト管理部１４０は、仮想ベクトルレジスタＶＲ２の要素ＥＬ０〜ＥＬ３のそれぞれに物理アドレスＡｄ０８〜Ａｄ１１を新たに割り当てて、ポインタリストＰＮＴを更新する（ステップＳ５０）。
【００４８】
次に、図５Ｅに示されるように、ポインタリスト管理部１４０は、領域確保通知をリネーミングテーブル管理部１３０へ送信する（ステップＳ６０）。更に、リネーミングテーブル管理部１３０は、リネーミングテーブルＲＥＮを参照して、ベクトル命令ＣＯＭで指定されている論理ベクトルレジスタＬＲ０〜ＬＲ２のそれぞれに割り当てられている仮想ベクトルレジスタＶＲ０〜ＶＲ２を、リネーミング部１２０に通知する（ステップＳ７０）。
【００４９】
次に、図５Ｆに示されるように、リネーミング部１２０はリネーミング処理を実施する。すなわち、リネーミング部１２０は、ベクトル命令ＣＯＭ（ＬＲ２←ＬＲ０＋ＬＲ１）で指定される論理ベクトルレジスタＬＲ０〜ＬＲ２を、それぞれ仮想ベクトルレジスタＶＲ０〜ＶＲ２に置換する（ステップＳ８０）。その結果、リネーム後ベクトル命令ＣＯＭ’（ＶＲ２←ＶＲ０＋ＶＲ１）が得られる。
【００５０】
次に、図５Ｇに示されるように、リネーム後ベクトル命令ＣＯＭ’（ＶＲ２←ＶＲ０＋ＶＲ１）が発行待ち命令バッファ１５０に格納される。
【００５１】
次に、図５Ｈに示されるように、命令発行部１６０は、発行待ち命令バッファ１５０からリネーム後ベクトル命令ＣＯＭ’（ＶＲ２←ＶＲ０＋ＶＲ１）を読み出す（ステップＳ１００）。
【００５２】
次に、図５Ｉに示されるように、命令発行部１６０は、リネーム後ベクトル命令ＣＯＭ’の発行処理を行う（ステップＳ１１０）。具体的には、命令発行部１６０は、ポインタリスト管理部１４０に対して、リネーム後ベクトル命令ＣＯＭ’中の仮想ベクトルレジスタＶＲ０〜ＶＲ２の各々に対応する物理アドレス（ポインタ）を送出するよう指示する。また、命令発行部１６０は、各種制御情報をベクトル演算部２００に送出する。ポインタリスト管理部１４０は、ポインタリストＰＮＴを参照し、仮想ベクトルレジスタＶＲ０〜ＶＲ２の各々に対応する物理アドレス（ポインタ）を、ベクトル演算部２００へ送出する（ステップＳ１２０）。本例では、仮想ベクトルレジスタＶＲ０に対して物理アドレスＡｄ００〜Ａｄ０３が送出され、仮想ベクトルレジスタＶＲ１に対して物理アドレスＡｄ０４〜Ａｄ０７が送出され、仮想ベクトルレジスタＶＲ２に対して物理アドレスＡｄ０８〜Ａｄ１１が送出される。
【００５３】
３−２．第２の処理例（同時並列処理）
図６Ａで示される初期状態を考える。図６Ａで示される状態は、既出の図５Ｇで示された状態と同じである。発行待ち命令バッファ１５０には、リネーム後ベクトル命令ＣＯＭ’（ＶＲ２←ＶＲ０＋ＶＲ１）が格納されている。このリネーム後ベクトル命令ＣＯＭ’は、何らかの原因で発行することができないとする。
【００５４】
次に、図６Ｂに示されるように、リネーミング部１２０は、リネーム前命令バッファ１１０から次のベクトル命令ＣＯＭ（ＬＲ２←ＬＲ０×ＬＲ１）を読み出す（ステップＳ１０）。このベクトル命令ＣＯＭ（ＬＲ２←ＬＲ０×ＬＲ１）における書き込み先は、論理ベクトルレジスタＬＲ２であり、先程のベクトル命令ＣＯＭ（ＬＲ２←ＬＲ０＋ＬＲ１）の場合と同じであることに留意されたい。すなわち、先程のベクトル命令ＣＯＭ（ＬＲ２←ＬＲ０＋ＬＲ１）の実行完了前に、リネーミング部１２０は、同じ論理ベクトルレジスタＬＲ２への書き込みを指示するベクトル命令ＣＯＭ（ＬＲ２←ＬＲ０×ＬＲ１）を受け取る。
【００５５】
次に、図６Ｃに示されるように、リネーミング部１２０は、論理ベクトルレジスタＬＲ２に仮想ベクトルレジスタを割り当てるよう要求する（ステップＳ２０）。論理ベクトルレジスタＬＲ２には既に仮想ベクトルレジスタＶＲ２が割り当てられているが、その仮想ベクトルレジスタＶＲ２へアクセスするベクトル命令ＣＯＭ（ＬＲ２←ＬＲ０＋ＬＲ１）が発行待ちであり、仮想ベクトルレジスタＶＲ２は使用中となる。この場合、リネーミングテーブル管理部１３０は、論理ベクトルレジスタＬＲ２に対して未使用の仮想ベクトルレジスタＶＲ３を新たに割り当て、リネーミングテーブルＲＥＮを更新する（ステップＳ３０）。すなわち、リネーミングテーブル管理部１３０は、論理ベクトルレジスタＬＲ２に対する仮想ベクトルレジスタの割り当てを、“ＶＲ２”から“ＶＲ３”へ変更する。
【００５６】
次に、図６Ｄに示されるように、リネーミングテーブル管理部１３０は、新たな仮想ベクトルレジスタＶＲ３に対して物理レジスタ２１０上のデータ領域を確保するよう、ポインタリスト管理部１４０に要求する（ステップＳ４０）。ポインタリスト管理部１４０は、仮想ベクトルレジスタＶＲ３の要素ＥＬ０〜ＥＬ３のそれぞれに物理アドレスＡｄ１２〜Ａｄ１５を新たに割り当てて、ポインタリストＰＮＴを更新する（ステップＳ５０）。ここで、仮想ベクトルレジスタＶＲ３に割り当てられた物理アドレスＡｄ１２〜Ａｄ１５（第２データ領域）は、仮想ベクトルレジスタＶＲ２に割り当てられている物理アドレスＡｄ０８〜Ａｄ１１（第１データ領域）とは異なっていることに留意されたい。
【００５７】
次に、図６Ｅに示されるように、ポインタリスト管理部１４０は、領域確保通知をリネーミングテーブル管理部１３０へ送信する（ステップＳ６０）。更に、リネーミングテーブル管理部１３０は、リネーミングテーブルＲＥＮを参照して、ベクトル命令ＣＯＭで指定されている論理ベクトルレジスタＬＲ０〜ＬＲ２のそれぞれに割り当てられている仮想ベクトルレジスタＶＲ０、ＶＲ１、ＶＲ３を、リネーミング部１２０に通知する（ステップＳ７０）。リネーミング部１２０は、ベクトル命令ＣＯＭ（ＬＲ２←ＬＲ０×ＬＲ１）で指定される論理ベクトルレジスタＬＲ０〜ＬＲ２を、それぞれ仮想ベクトルレジスタＶＲ０、ＶＲ１、ＶＲ３に置換する（ステップＳ８０）。その結果、リネーム後ベクトル命令ＣＯＭ’（ＶＲ３←ＶＲ０×ＶＲ１）が得られる。
【００５８】
その後、図６Ｆに示されるように、リネーム後ベクトル命令ＣＯＭ’（ＶＲ３←ＶＲ０×ＶＲ１）の発行処理が同様に行われる。本例では、仮想ベクトルレジスタＶＲ０に対して物理アドレスＡｄ００〜Ａｄ０３が送出され、仮想ベクトルレジスタＶＲ１に対して物理アドレスＡｄ０４〜Ａｄ０７が送出され、仮想ベクトルレジスタＶＲ３に対して物理アドレスＡｄ１２〜Ａｄ１５が送出される。
【００５９】
このように、異なるベクトル命令ＣＯＭが同一の論理ベクトルレジスタＬＲを書き込み先として指定している場合であっても、リネーム後ベクトル命令ＣＯＭ’間で仮想ベクトルレジスタＶＲが異なっていれば、それらリネーム後ベクトル命令ＣＯＭ’を同時並列的に実行することが可能である。
【００６０】
３−３．第３の処理例（マスク付ベクトル演算命令）
次に、マスク付ベクトル演算命令の処理方法を説明する。例として、上述の第２の処理例と同じく、リネーミング部１２０がリネーム前命令バッファ１１０からベクトル命令ＣＯＭ（ＬＲ２←ＬＲ０×ＬＲ１）を受け取った場合を考える。このベクトル命令ＣＯＭ（ＬＲ２←ＬＲ０×ＬＲ１）は、先行するベクトル命令ＣＯＭ（ＬＲ２←ＬＲ０＋ＬＲ１）の場合と同じ論理ベクトルレジスタＬＲ２への書き込みを指示している。このベクトル命令ＣＯＭ（ＬＲ２←ＬＲ０×ＬＲ１）が、マスク付ベクトル演算命令であるとする。
【００６１】
図７Ａで示されるように、リネーミング部１２０は、論理ベクトルレジスタＬＲ２に仮想ベクトルレジスタを割り当てるよう要求する（ステップＳ２０）。リネーミングテーブル管理部１３０は、論理ベクトルレジスタＬＲ２に対して未使用の仮想ベクトルレジスタＶＲ３を新たに割り当て、リネーミングテーブルＲＥＮを更新する（ステップＳ３０）。すなわち、リネーミングテーブル管理部１３０は、論理ベクトルレジスタＬＲ２に対する仮想ベクトルレジスタの割り当てを、“ＶＲ２”から“ＶＲ３”へ変更する。更に、リネーミングテーブル管理部１３０は、新たな仮想ベクトルレジスタＶＲ３に対して物理レジスタ２１０上のデータ領域を確保するよう、ポインタリスト管理部１４０に要求する（ステップＳ４０）。このとき、リネーミングテーブル管理部１３０は、論理ベクトルレジスタＬＲ２への仮想ベクトルレジスタの割り当てが“ＶＲ２”から“ＶＲ３”に変更されたことも通知する。
【００６２】
その一方で、マスクデータ生成部１７０は、ベクトル命令ＣＯＭ（ＬＲ２←ＬＲ０×ＬＲ１）からマスク演算用のマスクデータＭＳＫを生成し、そのマスクデータＭＳＫをポインタリスト管理部１４０に供給する。マスクデータＭＳＫは、ベクトルレジスタの複数の要素ＥＬ０〜ＥＬ３のうちマスクされる「マスク要素」とマスクされない「非マスク要素」とを示す。例えば図７Ａにおいて、マスクデータＭＳＫは“１０１０”であり、ビット“０”がマスク要素を表し、ビット“１”が非マスク要素を表す。この場合、要素ＥＬ０〜ＥＬ３のうち、要素ＥＬ０及びＥＬ２は非マスク要素であり、要素ＥＬ１及びＥＬ３はマスク要素である。
【００６３】
ポインタリスト管理部１４０は、このようなマスクデータＭＳＫを受け取る。また、ポインタリスト管理部１４０は、論理ベクトルレジスタＬＲ２に割り当てられていた仮想ベクトルレジスタＶＲ２が新たに仮想ベクトルレジスタＶＲ３に変更されたことも知る。この場合、ポインタリスト管理部１４０は、図７Ｂに示されるようにポインタリストＰＮＴを更新する（ステップＳ５０）。
【００６４】
詳細には、ポインタリスト管理部１４０は、新たな仮想ベクトルレジスタＶＲ３のマスク要素ＥＬ１及びＥＬ３には、元の仮想ベクトルレジスタＶＲ２のマスク要素ＥＬ１及びＥＬ３に既に割り当てられている物理アドレスＡｄ０９及びＡｄ１１（第１データ領域）を割り当てる。すなわち、ポインタリスト管理部１４０は、マスク要素ＥＬ１及びＥＬ３に関しては、元の仮想ベクトルレジスタＶＲ２に対する割り当て関係をコピーする。その一方、ポインタリスト管理部１４０は、新たな仮想ベクトルレジスタＶＲ３の非マスク要素ＥＬ０及びＥＬ２には、物理アドレスＡｄ１２、Ａｄ１３を新たに割り当てる。仮想ベクトルレジスタＶＲ３の非マスク要素ＥＬ０及びＥＬ２に割り当てられた物理アドレスＡｄ１２、Ａｄ１３（第２データ領域）は、元の仮想ベクトルレジスタＶＲ２の非マスク要素ＥＬ０及びＥＬ２に割り当てられている物理アドレスＡｄ０８、Ａｄ１０（第１データ領域）とは異なっていることに留意されたい。
【００６５】
その後、第２の処理例と同様に、リネーミング部１２０によってリネーミング処理が行われ、結果として、リネーム後ベクトル命令ＣＯＭ’（ＶＲ３←ＶＲ０×ＶＲ１）が得られる。命令発行部１６０は、そのリネーム後ベクトル命令ＣＯＭ’（ＶＲ３←ＶＲ０×ＶＲ１）の発行処理を行う。ベクトル演算部２００は、発行されたベクトル命令ＣＯＭ’に従って演算を行い、演算結果を指定された物理アドレスに書き込む。但し、マスク要素ＥＬ１及びＥＬ３に関する演算結果は、マスクデータＭＳＫによってマスクされ、物理レジスタ２１０には書き込まれない。
【００６６】
このように、マスク付ベクトル演算命令の場合、論理ベクトルレジスタＬＲ２に割り当てられる仮想ベクトルレジスタが“ＶＲ２”から“ＶＲ３”に変更されるが、マスク要素ＥＬ１及びＥＬ３に割り当てられる物理アドレスは元のまま維持される。すなわち、マスク付ベクトル演算命令の書き込み先において、マスク要素ＥＬ１及びＥＬ３に既に格納されている値はそのまま保持される。従って、マスク演算が実現される。すなわち、ポインタリストＰＮＴ中の既存の割り当て関係を、要素単位で、新たな割り当て関係に適宜コピーすることにより、マスク演算が可能となる。尚、マスクデータ生成の命令は命令発行部１６０からマスクデータ生成部１７０に発行され、それによりマスクデータＭＳＫの更新が行われる。
【００６７】
３−４．第４の処理例（投機的実行）
投機的実行（speculative execution）とは、プロセッサの高速化手法の１つである。処理が途中で条件分岐しているとき、分岐判定結果が出る前に分岐先が予測され、予測された分岐先の処理が予め実行される。予測が当たっていれば、分岐先の処理の実行結果が直ちに得られるため、処理速度が向上する。予測が外れた場合は、通常通り、分岐先の処理が実行されるだけである。
【００６８】
ここで、条件分岐の中に更に別の条件分岐が存在する場合を考える。この場合、投機的実行の最中に、新たな投機的実行が行われる可能性がある。すなわち、投機的実行（投機演算）が階層的に実施される可能性がある。投機的実行（投機演算）の階層は、以下「投機レベル」と参照される。投機レベルは、「０（投機的実行無し）」から順番に、階層が深くなるにつれて１ずつ増加するとする。
【００６９】
図２で示されたように、本実施の形態に係るリネーミングテーブルＲＥＮは、論理ベクトルレジスタＬＲと仮想ベクトルレジスタＶＲとの対応関係を、投機レベル毎に示している。論理ベクトルレジスタＬＲと仮想ベクトルレジスタＶＲとの対応関係は、投機レベル毎に管理される。
【００７０】
既出の処理例では、投機レベルは「０」のまま変わらない場合が説明された。以下、投機的実行が行われ、投機レベルが変わる場合の処理を説明する。そのために、図８Ａで示される状態を考える。図８Ａで示される状態は、既出の図５Ｇあるいは図６Ａで示された状態とほぼ同じである。但し、リネーム前命令バッファ１１０に格納されているベクトル命令の投機レベルは、「０」ではなく「１」に変わっている。
【００７１】
図８Ｂに示されるように、リネーミング部１２０は、リネーム前命令バッファ１１０から次のベクトル命令ＣＯＭ（ＬＲ２←ＬＲ０×ＬＲ１；投機レベル＝１）を読み出す（ステップＳ１０）。このとき、リネーミング部１２０は、投機レベルが「０」から「１」に変わったことを認識する。
【００７２】
次に、図８Ｃに示されるように、リネーミング部１２０は、論理ベクトルレジスタＬＲ２に仮想ベクトルレジスタを割り当てるよう要求する（ステップＳ２０）。また、リネーミング部１２０は、投機レベルが「０」から「１」に変わったことを示す投機レベル変更通知を、リネーミングテーブル管理部１３０に送る。その投機レベル変更通知に応答して、リネーミングテーブル管理部１３０は、新たな投機レベル「１」のためのエントリをリネーミングテーブルＲＥＮ中に作成する。この時、リネーミングテーブル管理部１３０は、元の投機レベル「０」における論理ベクトルレジスタＬＲと仮想ベクトルレジスタＶＲとの対応関係を、新たな投機レベル「１」における対応関係に設定する（コピーする）。
【００７３】
その後、リネーミングテーブル管理部１３０は、新たな投機レベル「１」における仮想ベクトルレジスタＶＲの割り当てを実施する（ステップＳ３０）。仮想ベクトルレジスタＶＲの割り当て方法は、既出の処理例と同様である。例えば、図８Ｃに示されるように、第２の処理例と同様に、投機レベル「１」における論理ベクトルレジスタＬＲ２に対する仮想ベクトルレジスタの割り当てが、“ＶＲ２”から“ＶＲ３”へ変更される。このとき、投機レベル「１」のエントリだけが更新され、投機レベル「０」のエントリは元のままであることに留意されたい。
【００７４】
その後の処理も、既出の処理例と同様である。例えば、図８Ｄに示されるように、第２の処理例と同様にポインタリストＰＮＴが更新される（ステップＳ５０）。マスク付ベクトル演算命令の場合は、第３の処理例と同様にポインタリストＰＮＴが更新される。
【００７５】
更に、図８Ｅに示されるように、リネーミングテーブル管理部１３０は、リネーミングテーブルＲＥＮを参照して、論理ベクトルレジスタＬＲ０〜ＬＲ２のそれぞれに割り当てられている仮想ベクトルレジスタをリネーミング部１２０に通知する。この時、リネーミングテーブル管理部１３０は、投機レベル「１」における割り当て関係を参照して、仮想ベクトルレジスタＶＲ０、ＶＲ１、及びＶＲ３を、リネーミング部１２０に通知する。リネーミング部１２０は、ベクトル命令ＣＯＭ（ＬＲ２←ＬＲ０×ＬＲ１）で指定される論理ベクトルレジスタＬＲ０〜ＬＲ２を、それぞれ仮想ベクトルレジスタＶＲ０、ＶＲ１、ＶＲ３に置換する（ステップＳ８０）。その結果、リネーム後ベクトル命令ＣＯＭ’（ＶＲ３←ＶＲ０×ＶＲ１）が得られる。
【００７６】
あるレベルの投機的実行が成功した場合、リネーミングテーブル管理部１３０は、当該投機レベルより低いレベルのエントリをリネーミングテーブルＲＥＮから削除し、残りのエントリを全体的に上へシフトさせる。あるレベルの投機的実行が失敗に終わった場合、リネーミングテーブル管理部１３０は、当該投機レベル以上のレベルのエントリをリネーミングテーブルＲＥＮから削除する。そして、投機レベルは元に戻る。
【００７７】
４．効果
本実施の形態によれば、ベクトル命令ＣＯＭで指定される論理ベクトルレジスタＬＲには仮想ベクトルレジスタＶＲが動的に割り当てられ、その割り当て関係を示すリネーミングテーブルＲＥＮが設けられる。更に、仮想ベクトルレジスタＶＲの各要素毎に、物理レジスタ２１０上の任意のデータ領域が割り当てられ、その割り当て関係を示すポインタリストＰＮＴが設けられる。
【００７８】
リネーミング処理において、ベクトル命令ＣＯＭで指定される論理ベクトルレジスタＬＲは、リネーミングテーブルＲＥＮに従って仮想ベクトルレジスタＶＲに置換される。その仮想ベクトルレジスタＶＲに割り当てられている物理レジスタ２１０上の各データ領域には、ポインタリストＰＮＴに基づいてアクセス可能である。異なるベクトル命令ＣＯＭが同一の論理ベクトルレジスタＬＲを書き込み先として指定している場合であっても、リネーム処理後のベクトル命令ＣＯＭ’間で仮想ベクトルレジスタＶＲが異なっていれば、それらベクトル命令ＣＯＭ’を同時並列的に実行することが可能である。
【００７９】
また、ポインタリストＰＮＴ中の既存の割り当て関係を、要素単位で、新たな割り当て関係に適宜コピーすることにより、マスク演算が可能となる。すなわち、マスク付ベクトル演算命令を処理することが可能となる。本実施の形態では、マスク演算を実現するために、物理レジスタ２１０上で実際のデータをコピーする（書き戻す）必要はない。ポインタリストＰＮＴ中で割り当て関係を適宜コピーするだけで、マスク演算が可能となる。
【００８０】
更に、リネーミングテーブルＲＥＮにおいて、同一の論理ベクトルレジスタＬＲに対して、投機レベル毎に仮想ベクトルレジスタＶＲを割り当てることもできる。つまり、同一の論理ベクトルレジスタＬＲを、回数に制限無くリネームすることができる。その結果、投機的実行を階層的に実施することが可能となる。言い換えれば、継続的な投機的実行が可能となる。
【００８１】
以上に説明されたように、本実施の形態では、リネーミングテーブルＲＥＮとポインタリストＰＮＴを設けることにより、レジスタリネーミング及びマスク演算を実行可能な好適なベクトルプロセッサ１０が実現される。ここで、論理ベクトルレジスタＬＲと物理レジスタ２１０との間の対応関係は固定されていないことに留意されたい。ある論理ベクトルレジスタＬＲには仮想ベクトルレジスタＶＲを介して物理レジスタ２１０上のデータ領域が割り当てられ、その割り当て先は要素単位で自由に変更可能である。従って、物理レジスタ２１０を無駄なく効率的に使用することが可能となる。すなわち、レジスタ資源の利用効率が向上する。
【００８２】
また、論理ベクトルレジスタＬＲと物理レジスタ２１０との間の対応関係は固定されていないため、設計者は、物理レジスタ２１０の容量を自由に決定することができる。上述の通り、レジスタ資源の利用効率が向上するため、好適には物理レジスタ２１０の容量を節約することができる。より少ないレジスタ資源であっても、従来と同等のリネーミング数を実現することができる。
【００８３】
以上、本発明の実施の形態が添付の図面を参照することにより説明された。但し、本発明は、上述の実施の形態に限定されず、要旨を逸脱しない範囲で当業者により適宜変更され得る。
【符号の説明】
【００８４】
１    ベクトル計算機
１０    ベクトルプロセッサ
２０    メインメモリ
１００    命令発行制御部
１１０    リネーム前命令バッファ
１２０    リネーミング部
１３０    リネーミングテーブル管理部
１４０    ポインタリスト管理部
１５０    発行待ち命令バッファ
１６０    命令発行部
１７０    マスクデータ生成部
２００    ベクトル演算部
２１０    物理レジスタ群
２２０    ベクトル演算器群
ＣＯＭ    ベクトル命令
ＣＯＭ’  リネーム後ベクトル命令
ＬＲ    論理ベクトルレジスタ
ＶＲ    仮想ベクトルレジスタ
ＲＥＮ    リネーミングテーブル
ＰＮＴ    ポインタリスト
ＭＳＫ  マスクデータ
【図１】
2010205049.tif 000003
【図２】
2010205049.tif 000004
【図３】
2010205049.tif 000005
【図４】
2010205049.tif 000006
【図５Ａ】
2010205049.tif 000007
【図５Ｂ】
2010205049.tif 000008
【図５Ｃ】
2010205049.tif 000009
【図５Ｄ】
2010205049.tif 000010
【図５Ｅ】
2010205049.tif 000011
【図５Ｆ】
2010205049.tif 000012
【図５Ｇ】
2010205049.tif 000013
【図５Ｈ】
2010205049.tif 000014
【図５Ｉ】
2010205049.tif 000015
【図６Ａ】
2010205049.tif 000016
【図６Ｂ】
2010205049.tif 000017
【図６Ｃ】
2010205049.tif 000018
【図６Ｄ】
2010205049.tif 000019
【図６Ｅ】
2010205049.tif 000020
【図６Ｆ】
2010205049.tif 000021
【図７Ａ】
2010205049.tif 000022
【図７Ｂ】
2010205049.tif 000023
【図８Ａ】
2010205049.tif 000024
【図８Ｂ】
2010205049.tif 000025
【図８Ｃ】
2010205049.tif 000026
【図８Ｄ】
2010205049.tif 000027
【図８Ｅ】
2010205049.tif 000028