(57)【特許請求の範囲】
【請求項１】
アーキテクチャレジスタと物理レジスタの結び付けを管理する１以上のマッパーテーブルを有するプロセッサを含むコンピュータにおいてアーキテクチャレジスタを割り付ける方法であって
前記コンピュータが、割り付け対象の仮想レジスタに対し、使用可能なアーキテクチャレジスタを検出するステップと、
前記コンピュータが、使用可能な前記アーキテクチャレジスタを複数検出することを条件に、前記割り付け対象の仮想レジスタをデスティネーション・オペランドにもつ全命令について近隣の命令群を識別するステップと、
前記コンピュータが、識別された前記近隣の命令群に関して、デスティネーション・オペランドに現れるアーキテクチャレジスタの使用回数をアーキテクチャレジスタごとにカウントするステップと、
前記コンピュータが、前記アーキテクチャレジスタごとの前記使用回数を、アーキテクチャレジスタに対応づけるための割当規約が同一である前記１以上のマッパーテーブルのエントリのグループごとに足し合わせて該グループのエントリの利用回数の総数を算出するステップと、
前記コンピュータが、前記１以上のマッパーテーブルのエントリのグループごとの利用回数の総数が均一に近づくように、検出された複数の前記使用可能なアーキテクチャレジスタから、前記割り付け対象の仮想レジスタに割り付けるアーキテクチャレジスタを選択するステップと、
を含む方法。
【請求項２】
前記割り付け対象の仮想レジスタの生存区間と重ならない生存区間を有するアーキテクチャレジスタを、前記割り付け対象の仮想レジスタに対し使用可能なアーキテクチャレジスタとして検出する、請求項１に記載の方法。
【請求項３】
前記近隣の命令群として、そのデスティネーション・オペランドのアーキテクチャレジスタの使用時間が、前記割り付け対象の仮想レジスタに割り当てられるアーキテクチャレジスタの使用時間の一部又は全部と重なる命令の集合を識別する、請求項２に記載の方法。
【請求項４】
前記アーキテクチャレジスタの使用時間は、命令の種類ごとに予め決定されている、請求項３に記載の方法。
【請求項５】
前記近隣の命令群として、前記割り付け対象の仮想レジスタをデスティネーション・オペランドにもつ各命令の前後所定数の命令を識別する、請求項２に記載の方法。
【請求項６】
前記コンピュータが、検出された複数の前記アーキテクチャレジスタのうち、最も利用回数の総数が少ない前記エントリのグループに設定されているエントリの割当規約を満たすアーキテクチャレジスタを選択する、請求項１に記載の方法。
【請求項７】
１のマッパーテーブルに対し、アーキテクチャレジスタに対応づけるための割当規約が同一であるエントリのグループが複数存在する、請求項１に記載の方法。
【請求項８】
前記プロセッサは複数のマッパーテーブルを有し、マッパーテーブルごとにアーキテクチャレジスタに対応づけるための割当規約が同一であるエントリのグループが１つ存在する、請求項１に記載の方法。
【請求項９】
請求項２乃至８のいずれかに一項に記載の方法の各ステップを前記コンピュータに実行させる、アーキテクチャレジスタの割り付けプログラム。
【請求項１０】
請求項２乃至８のいずれかに一項に記載の方法の各ステップを実行するように適合された手段を備える、アーキテクチャレジスタ割り付けシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アーキテクチャレジスタと物理レジスタの結び付けを管理する１以上のマッパーテーブルを有するシステムおけるアーキテクチャレジスタの割り付け技術に関する。
【背景技術】
【０００２】
ＩＢＭ社のＰＯＷＥＲ７（登録商標）プロセッサやｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）のＥＣ１２プロセッサ、また、インテル社のＳａｎｄｙＢｒｉｄｇｅプロセッサ等、高性能プロセッサは、プログラマやコンパイラから見えるアーキテクチャレジスタとは別に、アーキテクチャレジスタ数（例えば、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）のＥＣ１２プロセッサでは１６個）よりも多い数の物理レジスタ（例えばｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）のＥＣ１２プロセッサでは８０個）を持つ。
【０００３】
このようなプロセッサは、プロセッサ内の演算をアーキテクチャレジスタより数の多い物理レジスタを用いて行うことで命令間の並列度を高め、性能を向上させる。具体的には、プロセッサはパイプライン上において、命令の発行時に物理レジスタを確保し、確保した物理レジスタを命令のデスティネーション・オペランドに現れるアーキテクチャレジスタに割り当てる。また、プロセッサは命令の完了時には、物理レジスタの値を対応するアーキテクチャレジスタに転送し、その後その物理レジスタを開放する。これによってプログラム内におけるアーキテクチャレジスタの再利用により生じる命令間の偽の依存関係が解消され、プロセッサは命令をアウト・オブ・オーダーに実行することが可能となる。
【０００４】
アーキテクチャレジスタと物理レジスタ間のマッピングは、レジスタ・リネーミングと呼ばれており、マッパーテーブルを用いてプロセッサ内のレジスタ・リネーミング・マッパーにより行われる。マッパーテーブルの１エントリは、１物理レジスタに対応し、マッパーテーブルのエントリが一杯になると物理レジスタは使用できなくなる。物理レジスタが使用できないと、パイプラインに投入された命令の実行が継続できなくなることから、パイプラインストールが発生し性能が低下する。
【０００５】
従来のプロセッサの設計では、マッパーテーブルのエントリを割り当てるアーキテクチャレジスタは自由であった。しかし近年プロセッサの設計の複雑化により、エントリを割り当てるアーキテクチャレジスタに条件を課すプロセッサも存在するようになった。アーキテクチャレジスタに同一の割当規約を課すエントリのグループを、本明細書では「物理レジスタ管理グループ」と称する。物理レジスタ管理グループは、マッパーテーブルのエントリの使用方法を決定するグループであるといえる。
【０００６】
あるプロセッサは、１のマッパーテーブルに対し２つの物理レジスタ管理グループＧ０、Ｇ１を有する。物理レジスタ管理グループＧ０は、マッパーテーブルの前半半分のエントリを管理し、これを最下位ビットが０のアーキテクチャレジスタ番号に割り当てる。物理レジスタ管理グループＧ１は、マッパーテーブルの後半半分のエントリを管理し、これを最下位ビットが１のアーキテクチャレジスタ番号に割り当てる。上記以外にも、例えば、複数のマッパーテーブルを有し、マッパーテーブルごとに１の物理レジスタ管理グループをもたせそれぞれ異なる割当規約で管理対象のエントリを管理させるプロセッサなど、今後は様々な設計のプロセッサの登場が考えられる。
【０００７】
ところで、物理レジスタ管理グループをマッパーテーブル全体で複数持つプロセッサを採用した場合、パイプラインストールの問題がより深刻化する。例えば、上述した１のマッパーテーブルに２つの物理レジスタ管理グループＧ０、Ｇ１を持たせる場合を考える。この場合、最下位ビットが１のアーキテクチャレジスタ番号が命令列で頻繁に使われると、物理レジスタ管理グループＧ１が管理するマッパーテーブルの後半半分のエントリが一杯になり、前半半分のエントリが空いているにも関わらず物理レジスタを使用できなくなる。結果プロセッサの性能が低下する。
【０００８】
以下、本発明の先行技術調査において見つかった文献について説明する。
【０００９】
特許文献１は、プログラム部分に出現する複数の仮想レジスタのそれぞれに対して、同一の仮想レジスタには同一の実レジスタを割り当て、相互に異なる仮想レジスタには異なる実レジスタを割り当てるようにしながら、プログラム部分を跨ぐ生存区間を有するソースプログラム中の変数に割り当てられる実レジスタとは異なるレジスタを割り当てる技術を開示する。
【００１０】
特許文献２は、実行単位毎に、中間コード上の仮想レジスタにオブジェクトコード上の実レジスタを割付ける時、実行単位毎に、実レジスタの利用効率を数値化した利用度を算出し、利用度に応じて、割付け対象とする実レジスタの数を設定する技術を開示する。
【００１１】
特許文献３は、アセンブリ処理に使用すべき実レジスタの使用状況を表す実レジスタテーブルと、実レジスタに対する仮想レジスタの使用状況を表す仮想レジスタテーブルとを設定しておき、アセンブラ命令でレジスタが指定された場合には、仮想レジスタテーブルを処理装置に検索させて、仮想レジスタテーブルに記述されている情報に基づいて実レジスタの使用状況を確認させ、使用する実レジスタの割り当てや、実レジスタに既設定のレジスタ値の退避や復旧といった処理を処理装置に実行させる技術を開示する。
【００１２】
特許文献４は、物理レジスタへの論理レジスタの割り付けを実行することで管理し、未使用の論理レジスタが所定の命令セットに属する命令で指定された際に、未使用の物理レジスタに対し関連付けを実施することの出来るレジスタ・リネーミング手段を備えた情報処理装置であって、所定の命令セットに属する専用命令として、論理レジスタの物理レジスタへの割り付けに対し、指定される論理レジスタの物理レジスタへの割り付けを全て解除させ、未使用の論理レジスタ及び物理レジスタとするものを備え、それによって、論理レジスタのうちソフトウェアで使用するレジスタの量及び、リネーミング時に論理レジスタのリネーム先として使用できる物理レジスタ量を変更、最適化する技術を開示する。
【００１３】
特許文献１〜４はいずれも物理レジスタの割り付けに関する技術を開示する。しかし、どの文献に記載される技術も、物理レジスタ管理グループをマッパーテーブル全体で複数持つプロセッサを対象としたものではなく、いずれの技術をもってしても物理レジスタの利用が不可となることに起因して起こる実行時のパイプラインストールによる性能低下を緩和することはできない。なお、非特許文献１は、複数のレジスタの生存区間の判定方法を開示する従来技術としてリストしたものである。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】特開２０１１−１８１１１４号公報
【特許文献２】特開平５−１５８７０７号公報
【特許文献３】特開平５−２００８９号公報
【特許文献４】特開２００７−１８１２０号公報
【非特許文献】
【００１５】
【非特許文献１】P.Briggs、K. D. Cooper、K. Kennedy、L. Torczon、“ＡColoringheuristics for register allocation”、 In Proceedingsof the ACM SIGPLAN 1989 Conference on Programming language design andimplementation (PLDI '89)
【発明の概要】
【発明が解決しようとする課題】
【００１６】
この発明は、上記の問題点を解決するためなされたものであって、物理レジスタ管理グループをマッパーテーブル全体で複数持つプロセッサにおいて、物理レジスタが利用不可となることに起因して起こる実行時のパイプラインストール回数を削減できるようなアーキテクチャレジスタの割り付け技術を提供することを目的とする。
【課題を解決するための手段】
【００１７】
上記目的を達成する本発明は、アーキテクチャレジスタと物理レジスタの結び付けを管理する１以上のマッパーテーブルを有するプロセッサを含むコンピュータにおいて、次のような、アーキテクチャレジスタの割り付け方法により実現される。そのような割り付け方法は、コンピュータが、割り付け対象の仮想レジスタに対し、使用可能なアーキテクチャレジスタを検出するステップと、コンピュータが、使用可能なアーキテクチャレジスタを複数検出することを条件に、割り付け対象の仮想レジスタをデスティネーション・オペランドにもつ全命令について近隣の命令群を識別するステップと、コンピュータが、識別された近隣の命令群に関して、デスティネーション・オペランドに現れるアーキテクチャレジスタの使用回数をアーキテクチャレジスタごとカウントするステップと、コンピュータが、アーキテクチャレジスタごとの使用回数を、アーキテクチャレジスタに対応づけるための割当規約が同一である１以上のマッパーテーブルのエントリのグループごとに足し合わせて該グループのエントリの利用回数の総数を算出するステップと、コンピュータが、１以上のマッパーテーブルのエントリのグループごとの利用回数の総数が均一に近づくように、検出された複数の使用可能なアーキテクチャレジスタから、割り付け対象の仮想レジスタに割り付けるアーキテクチャレジスタを選択するステップとを含む。
【００１８】
好ましくは、コンピュータは、割り付け対象の仮想レジスタに対し使用可能なアーキテクチャレジスタとして、生存区間の重ならないアーキテクチャレジスタを検出する。
【００１９】
また好ましくは、コンピュータは、近隣の命令群として、そのデスティネーション・オペランドのアーキテクチャレジスタの使用時間が、割り付け対象の仮想レジスタに割り当てられるアーキテクチャレジスタの使用時間の一部又は全部と重なる命令の集合を識別する。アーキテクチャレジスタの使用時間は、命令の種類ごとに予め決定されていてもよい。
【００２０】
或いは、コンピュータは、近隣の命令群として、割り付け対象の仮想レジスタをデスティネーション・オペランドにもつ各命令の前後所定数の命令を識別してもよい。
【００２１】
また好ましくは、コンピュータは、検出された複数のアーキテクチャレジスタのうち、最も利用回数の総数が少ないエントリのグループに設定されている割当規約を満たすアーキテクチャレジスタを選択する。
【００２２】
ここで、コンピュータは、１のマッパーテーブルに対し、アーキテクチャレジスタに対応づけるための割当規約が同一であるエントリのグループが複数存在してもよい。あるいは、プロセッサは複数のマッパーテーブルを有し、マッパーテーブルごとアーキテクチャレジスタに対応づけるための割当規約が同一であるエントリのグループが１つ存在してもよい。
【００２３】
なお、これまでアーキテクチャレジスタを割り付ける方法として本発明を説明した。しかし本発明は、これら方法をコンピュータに実行させるためのアーキテクチャレジスタの割り付けプログラム、及び、そのようなプログラムをコンピュータにインストールすることによって実現されるアーキテクチャレジスタの割り付け装置／システムとして把握することもできる。
【発明の効果】
【００２４】
本発明によれば、アーキテクチャレジスタを割り付ける際に、割り付け対象の仮想レジスタを使用する命令の近隣の命令におけるアーキテクチャレジスタごとの使用回数が求められ、この使用回数が、アーキテクチャレジスタに対応づけるための割当規約が同一であるマッパーテーブルのエントリのグループごとに合計されて、マッパーテーブルのエントリのグループごとのエントリ利用回数の総数が求められる。結果、使用可能なアーキテクチャレジスタの中から、マッパーテーブルのエントリのグループごとの利用回数の総数が均一に近づくようなアーキテクチャレジスタを、割付対象の仮想レジスタに対して選択することが可能となる。そのため、本発明によれば、物理レジスタが利用不可となることに起因して起こる実行時のパイプラインストール回数を削減するという効果を奏することができる。本願発明のその他の効果については、各実施の形態の記載から理解される。
【図面の簡単な説明】
【００２５】
【図１】本願発明の実施形態による割り付けシステム２００を実現するのに好適なコンピュータ１００のハードウェア構成の一例を示す。
【図２】本発明の実施形態による割り付けシステム２００の機能ブロック図である。
【図３】プログラムコード内におけるある命令に対する近隣の命令群を説明する図である。
【図４Ａ】マッパーテーブルと物理レジスタ管理グループの関係の一例を示す図である。
【図４Ｂ】マッパーテーブルと物理レジスタ管理グループの関係の他の例を示す図である。
【図５】本発明の実施形態による割り付け処理の流れの一例を示すフローチャートある。
【図６】本発明の実験に使用したソースコードである。
【図７】図６に示すソースコードをコンパイルした結果の機械語命令列である。
【図８Ａ】図６に示す命令列に対し、従来手法によりアーキテクチャレジスタを割り付けた結果を示す。
【図８Ｂ】図６に示す命令列に対し、従来手法によりアーキテクチャレジスタを割り付けた結果を示す。
【図９Ａ】図６に示す命令列に対し、本発明の最適化によりアーキテクチャレジスタを割り付けた結果を示す。
【図９Ｂ】図６に示す命令列に対し、本発明の最適化によりアーキテクチャレジスタを割り付けた結果を示す。
【発明を実施するための形態】
【００２６】
以下、本発明の実施形態を図面に基づいて詳細に説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。なお、実施の形態の説明の全体を通じて同じ要素には同じ番号を付している。
【００２７】
図１は、本発明を実施するのに好適なコンピュータ・システム１００のハードウェア構成の一例を示す。コンピュータ・システム１００は、バス１０６に接続されたメインＣＰＵ（中央処理装置）１０２とメイン・メモリ１０４を含んでいる。ＣＰＵ１０２は好ましくは、32ビット又は64ビットのアーキテクチャに基づくものであり、例えば、ＩＢＭ社のＰＯＷＥＲ７（登録商標）プロセッサやｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）のＥＣ１２プロセッサ、また、インテル社のＳａｎｄｙＢｒｉｄｇｅプロセッサ等、マッパーテーブルのエントリの使用方法を決定するグループをマッパーテーブル全体で複数持つプロセッサが対象となる。メイン・メモリ１０４は好ましくは、1GB以上の容量、より好ましくは、2GB以上の容量をもつものであってよい。
【００２８】
バス１０６には、ディスプレイ・コントローラ１０８を介して、ディスプレイ１１０、例えば液晶ディスプレイ（ＬＣＤ）が接続されうる。ディスプレイ１１０は、コンピュータの管理のために、通信回線を介してネットワークに接続されたコンピュータについての情報と、そのコンピュータ上で動作中のソフトウェアについての情報を、適当なグラフィック・インタフェースで表示するために使用される。
【００２９】
バス１０６にはまた、ＳＡＴＡ又はＩＤＥコントローラ１１２を介して、ディスク１１４、例えばシリコン・ディスク又はハードディスクが接続されうる。バス１０６にはまた、ＳＡＴＡ又はＩＤＥコントローラ１１２を介して、任意的に、ドライブ１１６、例えばＣＤ、ＤＶＤまたはＢＤドライブが接続されうる。バス１０６にはさらに、任意的に、キーボード・マウスコントローラ１１８又はＵＳＢバス（図示せず）を介して、キーボード１２０及びマウス１２２が接続されうるが、本発明を実施する上では必要ない。    
【００３０】
ディスク１１４には、例えば、ＬＩＮＵＸ（登録商標）、マイクロソフト・コーポレーションが提供するＷｉｎｄｏｗｓ（登録商標）オペレーティング・システム、アップル・コンピュータ・インコーポレイテッドが提供するＭａｃＯＳ（登録商標）若しくはｉＯＳ（登録商標）、Ｘ Ｗｉｎｄｏｗ Ｓｙｓｔｅｍが備えるＵＮＩＸ（登録商標）系システム（たとえば、インターナショナル・ビジネス・マシーンズ・コーポレーション（登録商標）が提供するＡＩＸ（登録商標））等のオペレーティング・システムが、メイン・メモリ１０４にロード可能なように記憶されている。
【００３１】
上記ディスク１１４にはまた、オペレーティング・システムと協働してＣＰＵ１０２に命令を与え、本発明を実施するためのコンピュータ・プログラムを記録することができる。即ち、上記ディスク１１４には、コンピュータ・システム１００にインストールされ、コンピュータ・システム１００を本発明の実施形態によるアーキテクチャレジスタ割り付け装置／システムとして機能させるアーキテクチャレジスタ割り付けプログラム、及びそれら関連データを記録することができる。
【００３２】
上記アーキテクチャレジスタ割り付けプログラムは、検出モジュールと、識別モジュールと、カウントモジュールと、総数算出モジュールと、選択モジュールとを含む。これらモジュールは、ＣＰＵ１０２に働きかけて、コンピュータ・システム１００を、各々後述する検出部２０２と、識別部２０４と、カウント部２０６、総数算出部２０８と、選択部２１０としてそれぞれ機能させる。なお本発明は、動的であるか、静的であるかを問わず、コンパイラの機能の一部として実装可能である。
【００３３】
上記コンピュータ・プログラムは圧縮し、また複数に分割して複数の媒体に記録することもできる。ドライブ１１６は、必要に応じて、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭまたはＢＤからプログラムをディスク１１４にインストールするために使用されうる。
【００３４】
通信インタフェース１２６は、例えばイーサネット（登録商標）・プロトコルに従う。通信インタフェース１２６は、通信コントローラ１２４を介してバス１０６に接続され、コンピュータ・システム１００を通信回線１２８に物理的に接続する役割を担い、コンピュータ・システム１００のオペレーティング・システムの通信機能のＴＣＰ／ＩＰ通信プロトコルに対して、ネットワーク・インタフェース層を提供する。なお、通信回線は、有線ＬＡＮ環境に基づくもの、又は、無線ＬＡＮ環境、例えば、ＩＥＥＥ８０２．１１ａ／ｂ／ｇ／ｎなどのＷｉ−Ｆｉ規格に基づくものであってもよい。
【００３５】
以上から、本発明の実施態様において使用されるコンピュータ・システム１００は、通常のパーソナルコンピュータ、ワークステーション、メインフレームなどの情報処理装置、又は、これらの組み合わせによって実現されることが容易に理解されるであろう。なお、上記説明した構成要素は例示であり、そのすべての構成要素が本発明の必須構成要素となるわけではない。
【００３６】
図２は、本発明の実施形態による割り付けシステム２００の機能ブロック図である。割り付けシステム２００は、検出部２０２と、識別部２０４と、カウント部２０６と、総数算出部２０８と、選択部２１０とを含む。
【００３７】
検出部２０２は、割り付け対象の仮想レジスタに対し、使用可能なアーキテクチャレジスタを検出する。より具体的には、検出部２０２は、割り付け対象の仮想レジスタに対し使用可能なアーキテクチャレジスタとして、生存区間の重ならないアーキテクチャレジスタを検出する。
【００３８】
生存区間が重なるか否かの判断は以下のようにして行う。
１．割り付け対象の仮想レジスタが、コンパイル対象のプログラム部分又は全体内において初めて定義されて最後に参照されるまでの区間を求める。
２．同様にそれぞれのアーキテクチャレジスタについて、コンパイル対象のプログラム部分又は全体内において初めて定義されて最後に参照されるまでの区間を求める。
３．１．で求めた区間と２．で求めた各区間とを比較し、重なる部分があれば生存区間が重なると判断し、重なる部分がなければ生存区間は重ならないと判断する。
【００３９】
なお、生存区間の重なりの判断方法は既知の技術（例えば非特許文献１を参照）であり、本発明の要旨ではないから、詳細な説明は省略する。
【００４０】
識別部２０４は、検出部２０２が使用可能なアーキテクチャレジスタを複数検出することを条件に、割り付け対象の仮想レジスタをデスティネーション・オペランドにもつ全命令について近隣の命令群を識別する。なお、ここで割り付け対象の仮想レジスタをソース・オペランドにもつ命令を対象としないのは、ソース・オペランドに書かれるアーキテクチャレジスタ番号は、そのアーキテクチャレジスタの内容を読み出すためにだけ使用され、マッパーテーブルのエントリを消費することがないからである。
【００４１】
ここで、近隣の命令群とは、その命令のデスティネーション・オペランドのアーキテクチャレジスタの使用時間が、割り付け対象の仮想レジスタに割り当てられるアーキテクチャレジスタの使用時間と少なくとも一部重なる、そのような命令の集合をいう。そして、アーキテクチャレジスタの使用時間とは、プロセッサ内のレジスタ・リネーミング・マッパーにより、アーキテクチャレジスタに対し物理レジスタが割り当てられたその時点から、物理レジスタが解放されるまでの時点をいう。なお、割り付け対象の仮想レジスタに割り当てられるアーキテクチャレジスタがなんであっても識別される近隣の命令群に違いはないことに留意されたい。
【００４２】
アーキテクチャレジスタの使用時間は、例えば、割り付け対象の仮想レジスタに仮にアーキテクチャレジスタを割り当てておき、プロセッサシミュレータを実行して、使用時間に重なりがあるか否かを調査することにより厳密に求めることができる。これに代えて、アーキテクチャレジスタの使用時間は、プロセッサの仕様に基づき命令の種類ごとに予め調べて決定しておき、それを利用してもよい。更には、割り付け対象の仮想レジスタをデスティネーション・オペランドにもつ各命令の前後所定数の命令（アーキテクチャレジスタの割り付けが未だなされていない命令及びデスティネーション・レジスタのない命令を除く）を近隣の命令群としてもよい。
【００４３】
ここで図３の擬似コードを参照して、割り付け対象の仮想レジスタをデスティネーション・オペランドにもつ命令の前後３つの命令を近隣の命令群とする場合について説明する。図３に示す擬似コードにおいて、割り付け対象の仮想レジスタ番号をFPR_0981とする。レジスタ割り付けには、アーキテクチャレジスタ番号FPR0〜13までが利用可能とする。仮想レジスタ番号FPR_0981は、アーキテクチャレジスタ番号FPR0、1、3、5、7、9とは生存区間が重なっているが、アーキテクチャレジスタ番号FPR2、4、6、8、10、11、12、13とは生存区間が重ならない。そのため、FPR2、4、6、8、10、11、12、13の中から最適なアーキテクチャレジスタ番号を選択する必要がある。なお、図３において、FPR_09XXは仮想浮動小数点レジスタ番号を示し、FPRXXはアーキテクチャレジスタ番号を示す。また、行頭の数字は行番号を示す。後述する、図７、図８Ａ、Ｂ、及び図９Ａ、Ｂにおいても同様の表記法を用いた。
【００４４】
図３に示す擬似コードにおいて、仮想レジスタ番号FPR_0981をデスティネーション・オペランドにもつ全命令は、行番号１のＬＤ命令と、行番号１２のＳＤＢＲ命令である。なお、行番号１３のＳＴＤ命令はデスティネーション・レジスタがない命令であることに留意されたい。行番号１のＬＤ命令は先頭の命令であるため、その近隣の命令群は後続の３命令となる。しかし行番号２のＬＤ命令にはアーキテクチャレジスタの割り付けが未だなされていないことから、近隣の命令群は下線の引かれた行番号３のＬＤ命令と、行番号４のＬＤＲ命令となる。
【００４５】
また、行番号１２のＳＤＢＲ命令についての近隣の命令群は、アーキテクチャレジスタの割り付けが未だなされていない命令を除いた前後３つの命令の集合となる。即ち、行番号１２のＳＤＢＲ命令の近隣の命令群は、下線の引かれた行番号１０のＳＤＢＲ命令と、行番号１１のＡＤＢＲ命令と、行番号１４のＬＤと、行番号１５のＳＤＢＲである。
【００４６】
カウント部２０６は、識別部２０４により識別された近隣の命令群に関して、デスティネーション・オペランドに現れるアーキテクチャレジスタの使用回数をアーキテクチャレジスタごとカウントする。    
【００４７】
先ほどの図３に示す擬似コードを例に説明する。上述したように、行番号１のＬＤ命令についての近隣の命令群は、行番号３のＬＤ命令と、行番号４のＬＤＲ命令であり、行番号１２のＳＤＢＲ命令についての近隣の命令群は、行番号１０のＳＤＢＲ命令と、行番号１１のＡＤＢＲ命令と、行番号１４のＬＤと、行番号１５のＳＤＢＲである。それぞれの命令のデスティネーション・オペランドに現れるアーキテクチャレジスタ番号の使用回数をアーキテクチャレジスタ番号ごとカウントすると、FPR0が２回、FPR9が２回、FPR4が２回である。
【００４８】
総数算出部２０８は、カウント部２０６によりカウントされたアーキテクチャレジスタごとの使用回数を、アーキテクチャレジスタに対応づけるための割当規約が同一である１以上のマッパーテーブルのエントリのグループ、即ち、物理レジスタ管理グループごとに足し合わせて、その管理対象のエントリの利用回数の総数を算出する。このとき、あるアーキテクチャレジスタについてその使用回数をどの物理レジスタ管理グループの利用回数に足し合わせるかは、プロセッサの仕様、より具体的には物理レジスタ管理グループの管理対象エントリの割当規約に従う。即ち、物理レジスタ管理グループは、マッパーテーブルのエントリの使用方法を決定するものであるから、その使用方法に合致する全アーキテクチャレジスタの使用回数を合計して、その管理対象のエントリの利用回数の総数とする。総数算出部２０８は、プロセッサの仕様をそれ自体で有していてもよく、あるいは起動時に所定のファイルから読み出してもよい。
【００４９】
ここで物理レジスタ管理グループとマッパーテーブルの関係を、図４Ａ、図４Ｂを参照して説明する。図４Ａに示す例では、１のマッパーテーブル４００に対し、マッパーテーブル４００の異なるエントリ部分をそれぞれ管理する複数の物理レジスタ管理グループ４０２、４０４が存在する。また、図４Ｂに示す例では、プロセッサが複数のマッパーテーブル４０６、４１０を有し、マッパーテーブルごとその全エントリを管理する物理レジスタ管理グループが１つ存在する（マッパーテーブル４０６に対し物理レジスタ管理グループ４０８、マッパーテーブル４１０に対し物理レジスタ管理グループ４１２）。  
【００５０】
物理レジスタ管理グループ４０２、４０８は、その管理対象のエントリを、最下位ビットが０のアーキテクチャレジスタ番号に割り当てる。物理レジスタ管理グループ４０４、４１２は、その管理対象のエントリを、最下位ビットが１のアーキテクチャレジスタ番号に割り当てる。なお、いずれの場合もマッパーテーブルの１エントリは、１物理レジスタに対応する。
【００５１】
今、物理レジスタ管理グループとマッパーテーブルの関係が図４Ａに示す関係を有すると仮定して、図３に示す擬似コードの例を用いて、アーキテクチャレジスタごとの使用回数を物理レジスタ管理グループごとに足し合わせてその管理対象エントリの利用回数の総数を算出してみる。上述したように、アーキテクチャレジスタ番号ごとの使用回数はFPR0が２回、FPR9が２回、FPR4が２回である。また、アーキテクチャレジスタ番号FPR0、FPR4は最下位ビットが０であるから、物理レジスタ管理グループ４０２の管理対象エントリの割当規約を満たす。アーキテクチャレジスタ番号FPR9は最下位ビットが１であるから、物理レジスタ管理グループ４０４の管理対象エントリの割当規約を満たす。従って、物理レジスタ管理グループ４０２の管理対象エントリの利用回数の総数は、FPR0の２回とFPR4の２回を足し合わせて４回となる。また、物理レジスタ管理グループ４０４の管理対象エントリの利用回数の総数は、FPR9の２回となる。
【００５２】
選択部２１０は、１以上のマッパーテーブルのエントリのグループごと、即ち物理レジスタ管理グループごとの管理対象エントリの利用回数の総数が均一に近づくように、検出された複数の使用可能なアーキテクチャレジスタの中から、割り付け対象の仮想レジスタに割り付けるアーキテクチャレジスタを選択する。一例として、選択部２１０は、検出された複数のアーキテクチャレジスタのうち、最も利用回数の総数が少ない物理レジスタ管理グループが有するその管理対象のエントリの割当規約を満たすアーキテクチャレジスタを選択する。
【００５３】
これまで説明してきた例を用いて具体的に選択部２１０による選択方法を説明する。上述したように、割り付け対象の仮想レジスタ番号FPR_0981に対して、FPR 2、4、6、8、10、11、12、13の８つの使用可能なアーキテクチャレジスタ番号が存在する。この中から最適なアーキテクチャレジスタ番号を選択する必要がある。物理レジスタ管理グループ４０２の利用回数の総数は４回であり、物理レジスタ管理グループ４０４の利用回数の総数は２回である。従って、最も利用回数の総数が少ない物理レジスタ管理グループ４０４の管理対象エントリの割当規約を満たすアーキテクチャレジスタ番号が最適なアーキテクチャレジスタ番号となる。物理レジスタ管理グループ４０４の管理対象エントリの割当規約は、最下位ビットが１のアーキテクチャレジスタ番号であることから、仮想レジスタ番号FPR_0981に対して割り付けるべき最適のアーキテクチャレジスタ番号はFPR11又はFPR13のいずれかとなる。
【００５４】
次に図５を参照して、割り付けシステム２００の動作を説明する。図５は、本発明の実施形態による割り付け処理の流れの一例を示すフローチャートである。処理はステップ５００で開始し、割り付けシステム２００は、コンパイル済みのプログラムをメモリに読み込み、プログラム内のレジスタ割り付け対象の命令列Iから仮想レジスタvrを１つ取り出す。取り出す仮想レジスタvrが無い場合（ステップ５０２：ＹＥＳ）、処理は終了する。一方、取り出す仮想レジスタvrがある場合（ステップ５０２：ＮＯ）、続いて割り付けシステム２００は、仮想レジスタvrと生存区間が重ならないアーキテクチャレジスタの集合Rを選択する（ステップ５０４）。
【００５５】
続いて割り付けシステム２００は、選択した集合R内のアーキテクチャレジスタが１つであるか否かを判定する（ステップ５０６）。集合R内にアーキテクチャレジスタが１つしかない場合（ステップ５０６：ＹＥＳ）、割り付けシステム２００は、レジスタ割り付け対象の命令列I内の仮想レジスタvrに集合R内の１のアーキテクチャレジスタを割り付ける（ステップ５０８）。そして処理はステップ５００へ戻る。
【００５６】
一方、集合R内にアーキテクチャレジスタが１つでない場合、即ちアーキテクチャレジスタが複数ある場合（ステップ５０６：ＮＯ）、割り付けシステム２００は、レジスタ割り付け対象の命令列Iの中から仮想レジスタvrをデスティネーション・オペランドに持つ命令を全て選びIvrとする（ステップ５１０）。続いて割り付けシステム２００は、選択した全命令Ivrの各命令について近隣の命令を識別し、識別した全命令を命令群Inとする（ステップ５１２）。続いて割り付けシステム２００は、命令群Inにおいて、デスティネーション・オペランドに現れるアーキテクチャレジスタrの使用回数Na(r) を求める（ステップ５１４）。ここで使用回数Na(r)は、アーキテクチャレジスタrが命令群Inのデスティネーション・オペランドに出現する回数といえる。
【００５７】
続いて割り付けシステム２００は、プロセッサの仕様、より具体的には物理レジスタ管理グループpgの管理対象エントリの割当規約に従って、アーキテクチャレジスタrの使用回数Na(r)を、物理レジスタ管理グループpgごとに足し合わせてその管理対象エントリの利用回数の総数N(pg)を算出する（ステップ５１６）。続いて割り付けシステム２００は、割り付け対象の仮想レジスタvrにステップ５０４で選択した集合R内の１のアーキテクチャレジスタを割り付けたと仮定して、対応する物理レジスタ管理グループpg の管理対象エントリの利用回数の総数N(pg)を更新した際に、全物理レジスタ管理グループpg の管理対象エントリの利用回数の総数N(pg)が均一に近づくような、そのようなアーキテクチャレジスタrを集合R内から選択する（ステップ５１８）。
【００５８】
続いて割り付けシステム２００は、ステップ５１８で選択した集合R内のアーキテクチャレジスタrを割り付け対象の仮想レジスタvrに割り付ける（ステップ５２０）。そして処理はステップ５００へ戻る。
【００５９】
次に図６〜図９Ｂを参照して、本発明の実験結果を説明する。図６に示すコードは、実験用プログラムのソースコードであり、図７に示すコードは、図６に示すソースコードの一部（７〜１６行目）をＪＩＴコンパイラによりコンパイルして得られた仮想浮動小数点レジスタ番号をもつ機械語命令列である。これを実験では従来技術と本発明とを適用してそれぞれアーキテクチャレジスタの割り付けを行い、２つのマッパーテーブルtable0、table1を有するパイプラインプロセッサ上シミュレータで実行した。なおシミュレータによる実行では、２つのマッパーテーブルはそれぞれ１の物理レジスタ管理グループを有し、アーキテクチャレジスタ番号の最下位ビットが０の場合マッパーテーブルtable0が利用され、アーキテクチャレジスタ番号の最下位ビットが１の場合マッパーテーブルtable1が利用されるものとした。
【００６０】
図８Ａに示すコードは、図６に示す機械語命令列に従来技術を適用して仮想レジスタにアーキテクチャレジスタを割り付けた結果である。図８Ｂは、図８Ａの割り付け結果のみを示したものである。図９Ａに示すコードは、図６に示す機械語命令列に本発明を適用して仮想レジスタにアーキテクチャレジスタを割り付けた結果である。図９Ｂは、図９Ａの割り付け結果のみを示したものである。
【００６１】
従来技術のアーキテクチャレジスタの割り付けにおいては、マッパーテーブルのエントリの使用方法は全く考慮されない。そのため、図８Ｂに示すように、デスティネーション・オペランドにおける最下位ビットが０のアーキテクチャレジスタばかりが仮想レジスタに対し割り付けられた。図８Ａに示す命令列をみると、最下位ビットが０のアーキテクチャレジスタ番号の登場回数が１６回、最下位ビットが１のアーキテクチャレジスタ番号の登場回数が０回となっている。
【００６２】
一方、本発明のアーキテクチャレジスタの割り付けにおいては、マッパーテーブルtable0とtable1がバランスよく使用されるようにマッパーテーブルのエントリの使用方法が考慮される。そのため図９Ｂに示すように、従来技術では最下位ビットが０のアーキテクチャレジスタ番号が割り付けられた仮想レジスタ番号FPR_0967, FPR_0981, FPR_0978に、最下位ビットが１のアーキテクチャレジスタが割り付けられた。図９Ａの命令列をみると、最下位ビットが０のアーキテクチャレジスタ番号の登場回数は１６回から８回へ減り、最下位ビットが０のアーキテクチャレジスタ番号の登場回数が０から８回に増えている。そして図９Ａに示す命令列の実行は、図８Ａに示す命令列の実行と比較すると、実行サイクルを１３％削減することができた。これは、図８Ａに示す命令列の実行では、マッパーテーブルtable0ばかりが使用されるため、そのエントリが一杯となってパイプラインストールが頻繁に起こるのに対し、図９Ａに示す命令列の実行では、マッパーテーブルtable0とtable1がバランスよく使用され、物理レジスタの使用不可に起因するパイプラインストールが削減されるためと考えられる。
【００６３】
以上、実施形態を用いて本願発明の説明をしたが、本願発明の技術範囲は上記実施形態に記載の範囲には限定されない。上記の実施形態に、種々の変更又は改良を加えることが可能であることが当業者に明らかである。以上のように、上記の実施形態に変更又は改良を加えた形態も当然に本発明の技術的範囲に含まれる。
【００６４】
なお、特許請求の範囲、明細書、及び図面中において示した装置、システム、プログラム、及び方法における動作、手順、ステップ、及び段階等の各処理の実行順序は、特段「より前に」、「先立って」等と明示しておらず、また、前の処理の出力を後の処理で用いるのでない限り任意の順序で実現しうることに留意すべきである。また、前の処理の出力を後の処理で用いる場合でも、前の処理と後の処理の間に他の処理が入ることは可能である場合があること、又は間に他の処理が入るように記載されていても前の処理を後の処理の直前に行うよう変更することも可能である場合があることも留意されたい。特許請求の範囲、明細書、及び図面中の動作フローに関して、便宜上「まず、」、「次に、」、「続いて、」等を用いて説明したとしても、この順で実施することが必須であることを必ずしも意味するとは限らない。
【図１】
0005986543.tif 000002
【図２】
0005986543.tif 000003
【図３】
0005986543.tif 000004
【図４Ａ】
0005986543.tif 000005
【図４Ｂ】
0005986543.tif 000006
【図５】
0005986543.tif 000007
【図６】
0005986543.tif 000008
【図７】
0005986543.tif 000009
【図８Ａ】
0005986543.tif 000010
【図８Ｂ】
0005986543.tif 000011
【図９Ａ】
0005986543.tif 000012
【図９Ｂ】
0005986543.tif 000013