(57)【要約】【課題】  開示の実施形態は、ビット展開サポートを有する回転レジスタファイルにアクセス又は使用する方法、並びに関連する記憶媒体及びプロセッサを提供する。【解決手段】  ビット展開サポートを有する回転レジスタファイルを実装する方法及びシステムは、それぞれ個々のインクリメント値を有する複数のレジスタポインタを、プロセッサのレジスタファイルに実装することを可能にする。レジスタポインタは、レジスタファイルの異なる領域に対応しても良い。レジスタファイルの各領域は、異なる大きさを有しても良い。【選択図】  図２
2015204113.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサ内のビット展開サポートを有する回転レジスタファイルにアクセスする方法であって、
レジスタファイルを複数の領域に分割するステップと、
前記領域の各々に個別に複数のレジスタポインタを割り当てるステップと、
前記レジスタポインタの各々に個別に複数のインクリメント値を割り当てるステップと、
プロセッサ命令の実行中に、前記インクリメント値に従って個別に前記レジスタポインタをインクリメントするステップと、
を有する方法。
【請求項２】
レジスタポインタに対応する物理レジスタ番号を出力するステップと、
前記物理レジスタ番号に従って前記レジスタファイルにアクセスするステップと、
を更に有する請求項１に記載の方法。
【請求項３】
前記プロセッサは、ＶＬＩＷ（very  long  instruction  word）アーキテクチャを有し、前記レジスタポインタをインクリメントするステップは、
前記インクリメント値に従って個別に前記領域の各々を通じて前記レジスタエントリを回転するステップ、
を有する、請求項１に記載の方法。
【請求項４】
前記複数のインクリメント値は、少なくとも２つの異なる値を有し、前記複数の領域は、異なる大きさを有する少なくとも２つの領域を有する、請求項１に記載の方法。
【請求項５】
前記複数のインクリメント値は、少なくとも１つのゼロ値を有する、請求項１に記載の方法。
【請求項６】
プロセッサ内のビット展開サポートを有する回転レジスタファイルを使用する方法であって、
複数のレジスタポインタの各々に個別に複数のインクリメント値を設定するステップであって、前記複数のインクリメント値は、少なくとも２つの異なる値を有する、ステップと、
前記レジスタポインタの各々に個別にレジスタファイルの複数の領域を設定するステップと、
次の命令の命令ポインタをインクリメントするのに応答して、
前記レジスタポインタのどれが前記次の命令の仮想レジスタ番号に対応するかを決定するステップと、
前記レジスタファイルの中の物理レジスタ番号を計算するステップと、
前記インクリメント値に従って個別に前記領域の各々を通じて前記レジスタポインタを回転するステップと、
を有する方法。
【請求項７】
前記物理レジスタ番号を計算するステップは、
オフセット、仮想レジスタ番号、割り当てられたポインタの数、割り当てられたレジスタの数、及び割り当てられたレジスタポインタ値を用いて前記物理レジスタ番号を計算するステップ、
を有する、請求項６に記載の方法。
【請求項８】
レジスタポインタに対応する物理レジスタ番号を出力するステップと、
前記物理レジスタ番号に従って前記レジスタファイルにアクセスするステップと、
を更に有する請求項６に記載の方法。
【請求項９】
前記複数の領域は、異なる大きさを有する少なくとも２つの領域を有する、請求項６に記載の方法。
【請求項１０】
前記複数のインクリメント値は、少なくとも１つのゼロ値を有する、請求項６に記載の方法。
【請求項１１】
プロセッサ内のビット展開サポートを有する回転レジスタファイルにアクセスする非一時的コンピュータ可読媒体であって、前記コンピュータ可読媒体は、前記プロセッサにより実行可能な命令を格納し、前記命令は、前記プロセッサに、
レジスタファイルを複数の領域に分割し、
前記領域の各々に個別に複数のレジスタポインタを割り当て、
前記レジスタポインタの各々に個別に複数のインクリメント値を割り当て、
前記インクリメント値に従って個別に前記レジスタポインタをインクリメントする、
ようにさせる、コンピュータ可読媒体。
【請求項１２】
レジスタポインタに対応する物理レジスタ番号を出力し、
前記物理レジスタ番号に従って前記レジスタファイルにアクセスする、
命令を更に有する請求項１１に記載のコンピュータ可読媒体。
【請求項１３】
前記プロセッサは、ＶＬＩＷ（very  long  instruction  word）アーキテクチャを有し、前記レジスタポインタをインクリメントする命令は、
前記インクリメント値に従って個別に前記領域の各々を通じて前記レジスタエントリを回転する、
命令を有する、請求項１１に記載のコンピュータ可読媒体。
【請求項１４】
前記複数のインクリメント値は、少なくとも２つの異なる値を有し、前記複数の領域は、異なる大きさを有する少なくとも２つの領域を有する、請求項１１に記載のコンピュータ可読媒体。
【請求項１５】
前記複数のインクリメント値は、少なくとも１つのゼロ値を有する、請求項１１に記載のコンピュータ可読媒体。
【請求項１６】
プロセッサ内のビット展開サポートを有する回転レジスタファイルを使用する非一時的コンピュータ可読媒体であって、前記コンピュータ可読媒体は前記プロセッサにより実行可能な命令を格納し、前記命令は、前記プロセッサに、
複数のレジスタポインタの各々に個別に複数のインクリメント値を設定し、前記複数のインクリメント値は、少なくとも２つの異なる値を有し、
前記レジスタポインタの各々に個別にレジスタファイルの複数の領域を設定し、
次の命令の命令ポインタをインクリメントするのに応答して、
前記レジスタポインタのどれが前記次の命令の仮想レジスタ番号に対応するかを決定し、
前記レジスタファイルの中の物理レジスタ番号を計算し、
前記インクリメント値に従って個別に前記領域の各々を通じて前記レジスタポインタを回転する、
ようにさせる、コンピュータ可読媒体。
【請求項１７】
前記物理レジスタ番号を計算する命令は、
オフセット、仮想レジスタ番号、割り当てられたポインタの数、割り当てられたレジスタの数、及び割り当てられたレジスタポインタ値を用いて前記物理レジスタ番号を計算する、
命令を有する、請求項１６に記載のコンピュータ可読媒体。
【請求項１８】
レジスタポインタに対応する物理レジスタ番号を出力し、
前記物理レジスタ番号に従って前記レジスタファイルにアクセスする、
命令を更に有する請求項１６に記載のコンピュータ可読媒体。
【請求項１９】
前記複数の領域は、異なる大きさを有する少なくとも２つの領域を有する、請求項１６に記載のコンピュータ可読媒体。
【請求項２０】
前記複数のインクリメント値は、少なくとも１つのゼロ値を有する、請求項１６に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、回転レジスタファイルに関し、具体的には、ビット展開サポートを有する回転レジスタファイルに関する。
【背景技術】
【０００２】
並列処理を用いるよう設計されるプロセッサアーキテクチャでは、比較的単純なハードウェア複雑性を有し、命令がどのように並列に実行されるかを決定する決定をプログラムが有するソフトウェアパイプラインのようなコンピュータソフトウェアを通じて種々の機能を可能にするＶＬＩＷ（very  long  instruction  word）アーキテクチャが知られている。ソフトウェアパイプラインでは、コンパイルのときにＶＬＩＷアーキテクチャにおいてスケジューリング決定が行われる。
【０００３】
幾つかのＶＬＩＷプロセッサ設計では、回転レジスタファイルは、物理インデックス変換のためにレジスタポインタを用いてハードウェアサポートを提供することにより、ループアンローリング（loop  unrolling）コードの書き込みを実現するために用いられる。レジスタポインタがインクリメントされると、物理レジスタマッピングは、ループインクリメントに対して固定量だけインクリメントされる。しかしながら、このような従来の回転レジスタファイルは、レジスタポインタの異なる更新インクリメント値に関連し得る、２個の１６ビットデータ値の乗算により３２ビットデータ値を生じるようなループ内でデータ展開が生じるとき、適さない。１つの知られている解決策は、別個のレジスタポインタに対して２個の別個のレジスタファイルを、例えば、一方を１６ビットデータのために、他方を３２ビットデータのために、使用することである。しかしながら、このような異なるレジスタファイルを用いる方式は、ハードウェアリソース効率の観点で経済的ではない。したがって、従来技術において、固定レジスタポインタインクリメントに限定されない柔軟な回転レジスタファイルが必要である。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
開示の実施形態は、ビット展開サポートを有する回転レジスタファイルにアクセス又は使用する方法、並びに関連する記憶媒体及びプロセッサを提供する。
【課題を解決するための手段】
【０００５】
一態様では、プロセッサ内のビット展開サポートを有する回転レジスタファイルにアクセスする開示の方法は、レジスタファイルを複数の領域に分割するステップと、前記領域の各々に個別に複数のレジスタポインタを割り当てるステップと、前記レジスタポインタの各々に個別に複数のインクリメント値を割り当てるステップと、を有する。プロセッサ命令の実行中に、前記方法は、前記インクリメント値に従って個別に前記レジスタポインタをインクリメントするステップを有しても良い。
【０００６】
別の態様では、プロセッサ内のビット展開サポートを有する回転レジスタファイルを使用する開示の方法は、複数のレジスタポインタの各々に個別に複数のインクリメント値を設定するステップを有する。複数のインクリメント値は、少なくとも２つの異なる値を有しても良い。方法は、前記レジスタポインタの各々に個別にレジスタファイルの複数の領域を設定するステップを有しても良い。次の命令の命令ポインタをインクリメントするのに応答して、前記方法は、レジスタポインタのどれが次の命令の仮想レジスタ番号に対応するかを決定するステップと、前記レジスタファイル内の物理レジスタ番号を計算するステップと、前記インクリメント値に従って個別に前記領域の各々を通じて前記レジスタポインタを回転するステップと、を有しても良い。
【０００７】
ビット展開サポートを有する回転レジスタファイルを実装する追加の開示の態様は、プロセッサで実行可能な命令を格納する非一時的コンピュータ可読媒体、プロセッサにアクセス可能な、実行可能命令を格納するメモリ、並びにビット展開サポートを有する回転レジスタファイルを実装するプロセッサを有する。
【図面の簡単な説明】
【０００８】
【図１】ビット展開サポートを有する回転レジスタファイルの一実施形態の選択された要素のブロック図である。
【図２】ビット展開サポートを有する回転レジスタファイルにアクセスする方法の一実施形態の選択された要素を示すフローチャートである。
【図３】ビット展開サポートを有する回転レジスタファイルを用いる方法の一実施形態の選択された要素を示すフローチャートである。
【図４】ビット展開サポートを有する回転レジスタファイルを実装するプロセッサの選択された要素のブロック図である。
【発明を実施するための形態】
【０００９】
以下の説明では、開示の主題の議論を容易にするために例として詳細事項が説明される。しかしながら、当業者には、開示の実施形態が例示であること及び全ての可能な実施形態を網羅するものではないことが明らかである。
【００１０】
本開示を通じて、ハイフンで結んだ形式の参照符号は、１つの要素の特定のインスタンスを表し、ハイフンを有しない形式の参照符号は、要素を一般的又は集合的に表す。したがって、例えば、ウィジェット１２−１は、ウィジェットクラスのインスタンスを表し、ウィジェット１２として集合的に言及されても良く、それらのうちの任意のものがウィジェット１２として一般的に言及されても良い。
【００１１】
従来の回転レジスタファイルでは、プロセッサ内のレジスタファイルへの物理インデックスは、仮想レジスタインデックス及びレジスタポインタを用いて計算されても良い。レジスタポインタは、各プロセス実行において１だけインクリメントされて、物理インデックスをレジスタファイルを通じて回転させても良い。このような機能は、ループアンローリング及び／又はソフトウェアパイプラインのようなソフトウェア最適化のために有用である。
【００１２】
したがって、従来の回転レジスタファイルは、固定レジスタポインタインクリメントに限られてしまう。これは、ループ内でデータ展開が生じるときのような特定種類のループ動作では不利である。本願明細書に記載されるように、本開示の発明者等は、ビット展開サポートを有する回転レジスタファイルを見出した。本開示に記載のビット展開サポートを有する回転レジスタファイルは、回転レジスタファイルを任意の領域に分割することを可能にし、各分割された領域に異なるレジスタポインタを割り当てることができる。各レジスタポインタは、所望のデータビット幅及び対応するプログラム属性に依存して、０、１、又は２のような異なる更新インクリメントを有しても良い。このように、レジスタは、個々のプログラム要件に従って所望の領域を用いて柔軟に割り当てることができる。本開示に記載のビット展開サポートを有する回転レジスタファイルを用いて、、単一の回転レジスタファイルは、２、４、８個等のレジスタセットを扱うことができ、又は全てのレジスタを用いて単一セットに分割されないままにしても良い。
【００１３】
図１を参照すると、図１は、本願明細書に記載のような、ビット展開サポートを有する回転レジスタファイルであるレジスタファイル１００の一実施形態の選択された要素を示すブロック図である。一実施形態では、レジスタファイル１００は、ＶＬＩＷプロセッサアーキテクチャで実装される。
【００１４】
図１に示すように、レジスタファイル１００は、仮想インデックスｗ０乃至ｗ３１により表される３２個のレジスタエントリを有する。理解されるべきことに、レジスタファイル１００は、説明目的で所与の構成で示され、異なる実施形態では、レジスタファイル１００は異なる数のエントリにより大きさを定められても良い。レジスタファイル１００は、それぞれ個々のレジスタポインタに対応する２個の領域に分割されるとして更に示される。具体的には、図１では、レジスタポインタｒｐ０は仮想インデックス２０乃至ｗ１５の第１の領域のポインタを表し、１６ビットデータ値に適応するために１だけインクリメントされる。図１に示したレジスタポインタ１００の例示的な実施形態では、レジスタファイルは２個の領域に分割されるが、留意すべきことに、異なる実施形態では、それぞれ異なる大きさを有する異なる数の領域、及び対応するレジスタポインタが実装されても良い。レジスタポインタｒｐ１は、仮想インデックスｗ１６乃至ｗ３２の第２の領域のためのポインタを表し、３２ビットデータ値に適応するために２だけインクリメントされる。したがって、レジスタファイル１００は、単一のレジスタファイル内で１６ビットデータ値と３２ビットデータ値の両方を扱うためにビット展開サポートを有して実装される。
【００１５】
図１に示したレジスタファイル１００の例示的な実施形態では、１６ビット乗算演算、３２ビット加算演算、及び１６ビットビットシフト演算を含むループアンローリングを有するコード例が実装される。コード例は、高速フーリエ変換（Fast  Fourier  Transform：ＦＦＴ）演算で通常実行される演算に対応し得る。以下のプログラム１は、レジスタファイル１００に実装されるコード例に対応し得るＣ言語シンタックスのコードを示す。一方、以下のプログラム２は、同じコード例に対応するアセンブラコードを示す。
【表１】
2015204113.tif 000003
プログラム１：ループアンローリングを有するＣコード
【表２】
2015204113.tif 000004
プログラム２：ループアンローリングを有するアセンブラコード
【００１６】
プログラム２では、load.iuは即値アドレス更新コマンドであり、mult_hpは乗算高精度コマンドであり、add_hp_cは加算高精度及びカットコマンドであり、store.iuは即値アドレス更新コマンドを有する格納データである。特定のインスタンスでは、プログラム２は、レジスタファイル１００を用いて８ウェイ（way）ＶＬＩＷアーキテクチャで実装されても良い。８ウェイＶＬＩＷアーキテクチャの一例は表１に示される。これは、４個のロード／ストアワード、２個の乗算ワード、１個の算術論理ワード、及び１個のレジスタポインタ更新ワードを有し得る。
【表３】
2015204113.tif 000005
［表１］８ウェイＶＬＩＷパイプライン
【００１７】
プログラム２は、７個の演算を有するプログラム２のループボディの一実装がどのように８ウェイＶＬＩＷに割り当てられるかを示す。ここで、８ウェイのうちの１つはレジスタポインタ更新のために予約されている。
【表４】
2015204113.tif 000006
プログラム３：レジスタファイル１００の８ウェイＶＬＩＷアセンブラコード
【００１８】
プログラム３で明らかなように、レジスタファイル１００は１６ビット及び３２ビットデータ値の両方をサポートするために分割されているので、レジスタファイル１００を用いて、プログラム２のループボディは並列に実行され得る。図１で、レジスタファイル１００は、各反復でループがアンロールするとき、どのようにレジスタ値が回転されるかを示す。特に、レジスタファイル１００内で、ｒｐ０は１だけインクリメントされ、対応するレジスタファイルエントリは１つの１６ビット値だけ回転し、一方、ｒｐ１は２だけインクリメントされ、対応するレジスタファイルエントリは２つの１６ビット値又は１つの３２ビット値だけ回転する。
【００１９】
図１に示すように、レジスタファイル１００内の物理レジスタエントリの計算は、式１に従って実行されても良い。ここで、「％」はモジュロ演算子を表す。
【００２０】
Register  Entry  =  Offset  +  {VirtualRegisterNumber  −  Offset  +  AssignedRegisterNumber}  %NumberofAssignedRegisters
［式１］レジスタエントリ計算
例えば、ｒｐ０＝９のレジスタインデックスｗ７に対して式１を用いると、以下の値は、レジスタエントリ＝０を生じ得る。
【００２１】
Offset（オフセット）＝０；
VirtualRegisterNumber（仮想レジスタ番号）＝７；
AssignedRegisterPointer（割り当てられたレジスタポインタ）＝９；
NumberofAssignedRegisters（割り当てられたレジスタ数）＝１６。
【００２２】
別の例では、ｒｐ１＝１８のレジスタインデックスｗ１８に対して式１を用いると、以下の値は、レジスタエントリ＝２０を生じ得る。
【００２３】
Offset（オフセット）＝１６；
VirtualRegisterNumber（仮想レジスタ番号）＝１８；
AssignedRegisterPointer（割り当てられたレジスタポインタ）＝１８；
NumberofAssignedRegisters（割り当てられたレジスタ数）＝１６。
【００２４】
図２を参照すると、ビット展開サポートを有する回転レジスタファイルにアクセスする方法２００の一実施形態の選択された要素のブロック図である。方法２００は、プロセッサ（図４を参照）、例えばＶＬＩＷアーキテクチャを有するプロセッサにより実行されても良い。特定の実施形態では、方法２００を実行する命令は、ファームウェアとしてプロセッサに格納され、プロセッサを構成する実行のために実行ユニットによりアクセスされる。留意すべきことに、方法２００に示した特定の動作は、必要に応じて再配置され又は省略されても良い。
【００２５】
方法２００は、プロセッサ内のレジスタファイルを複数の領域に分割することにより開始しても良い（動作２０２）。複数のレジスタポインタは、領域の各々に個々に割り当てられる（動作２０４）。複数のインクリメント値は、レジスタポインタの各々に個々に割り当てられる（動作２０６）。インクリメント値は、少なくとも２つの異なるインクリメント値を有しても良い。インクリメント値は、ゼロインクリメント値を有しても良い。各レジスタポインタは、個々のインクリメント値に従ってインクリメントされても良い（動作２０８）。一方、レジスタエントリは、インクリメント値に従って独立に各領域を通じて回転される。レジスタポインタに対応する物理レジスタ番号が出力され（動作２１０）、レジスタファイルは物理レジスタ番号に従ってアクセスされても良い（動作２１０）。
【００２６】
図３を参照すると、ビット展開サポートを有する回転レジスタファイルにアクセスする方法３００の一実施形態の選択された要素のブロック図である。方法３００は、プロセッサ（図４を参照）、例えばＶＬＩＷアーキテクチャを有するプロセッサにより実行されても良い。特定の実施形態では、方法３００を実行する命令は、ファームウェアとしてプロセッサに格納され、プロセッサを構成する実行のために実行ユニットによりアクセスされる。留意すべきことに、方法３００に示した特定の動作は、必要に応じて再配置され又は省略されても良い。
【００２７】
方法３００は、複数のレジスタポインタの各々に個別に複数のインクリメント値を設定することにより開始しても良い（動作３０２）。次に、レジスタファイルの複数の領域は、レジスタポインタの各々に個々に設定されても良い（動作３０４）。命令ポインタは、次の命令のためにインクリメントされても良い（動作３０６）。次に、方法３００は、レジスタポインタのうちのどれが次の命令の仮想レジスタ番号に対応するかを決定しても良い（動作３０８）。物理レジスタ番号は、オフセット、仮想レジスタ番号、割り当てられたレジスタの数、割り当てられたレジスタポインタ値から計算されても良い（動作３１０）。レジスタポインタに対応する物理レジスタ番号が出力され（動作３１２）、レジスタファイルは物理レジスタ番号に従ってアクセスされても良い（動作３１２）。
【００２８】
図４を参照すると、ビット展開サポートを有する回転レジスタファイルを実装するプロセッサ４００の一実施形態の選択された要素を示すブロック図が示される。種々の実施形態において、プロセッサ４００は、ＶＬＩＷアーキテクチャを有しても良く、ソフトウェアパイプラインを実装しても良い。図４に示すように、プロセッサ４００は、プロセッサバス４０２を用いて通信し得る実行部４０１及び記憶媒体４１０を有する。
【００２９】
図４に示すように、記憶媒体４１０は、揮発性、不揮発性、固定及び／又は取り外し可能媒体を表しても良く、磁気及び／又は半導体メモリを用いて実装されても良い。記憶媒体４１０は、命令及び／又はデータを格納することができる。図示のように、記憶媒体４１０は、例えばビット展開サポートを有する回転レジスタファイルを使用する及び／又はそれにアクセスするためにプロセッサ４００を構成する本願明細書に記載の方法を実装し得るファームウェア４１４を含む命令（つまり、実行ユニット４０１により実行可能なコード）を格納する。レジスタファイル４１２は、プロセッサレジスタ及びレジスタファイルを実装するために用いられるメモリ要素を表し得る。
【００３０】
本願明細書に開示のように、ビット展開サポートを有する回転レジスタファイルを実装する方法及びシステムは、それぞれ個々のインクリメント値を有する複数のレジスタポインタを、プロセッサのレジスタファイルに実装することを可能にする。レジスタポインタは、レジスタファイルの異なる領域に対応しても良い。レジスタファイルの各領域は、異なる大きさを有しても良い。
【００３１】
以上に開示した主題は、説明のためであり、限定ではないと考えられるべきである。また、添付の特許請求の範囲は、本開示の真の精神及び範囲に包含される全ての変更、拡張及び他の実施形態を包含することを意図している。したがって、法により認められる最大範囲まで、本開示の範囲は、特許請求の範囲及びその等価物の最も広い許容可能な解釈により決定されるべきであり、前述の詳細な説明により限定又は制限されるべきではない。
【符号の説明】
【００３２】
４００  プロセッサ
４０１  実行ユニット
４１０  記憶媒体
４１２  レジスタファイル
４１４  ファームウェア
【図１】
2015204113.tif 000007
【図２】
2015204113.tif 000008
【図３】
2015204113.tif 000009
【図４】
2015204113.tif 000010