(57)【要約】  データ要素がメモリレジスタとベクトルレジスタとの間で移動されるときにベクトル並べ替え動作を実行するための装置および方法が提供される。装置は、プログラム命令のシーケンスによって指定された動作を実行する処理回路と、ベクトルレジスタのセットとを有し、各ベクトルレジスタが複数のデータ要素を含むベクトルを格納するように構成される装置が提供される。処理回路は、メモリとセットの複数のベクトルレジスタとの間でデータ要素を移動し、データ要素がメモリ内の第１の編成に配置され且つベクトルレジスタ内の第２の異なる編成に配置されるようにデータ要素が移動されるときに並べ替え動作を実行するアクセス回路を含む。復号回路は、プログラム命令のシーケンス内の一群の並べ替え命令に応答して、処理回路による各並べ替え命令の実行を制御するための制御信号を生成するように構成される。群内の各並べ替え命令は、群内の他の各並べ替え命令によって定義されたデータ要素アクセスパターンとは異なり且つアクセス回路に並べ替え動作において関与する複数のベクトルレジスタのうちの１つのベクトルレジスタよりも多くアクセスさせるデータ要素アクセスパターンを定義する。そのようなアプローチにより、アクセス回路は、処理回路が群内の全ての並べ替え命令を実行した結果として並べ替え動作を実行する。そのような一群の並べ替え命令の使用は、単一の命令の実行に応答して実行された並べ替え動作を実行するために必要なステップの全てが実行された場合に起こり得る装置内の停止を減らすことによって並べ替え動作の効率的な実行を可能にする。
2019519865.tif 000002
【特許請求の範囲】
【請求項１】
プログラム命令のシーケンスによって指定された動作を実行するための処理回路と、
各ベクトルレジスタが複数のデータ要素を含むベクトルを格納するように構成されたベクトルレジスタのセットとを備え、
前記処理回路が、メモリと前記セットの複数のベクトルレジスタとの間でデータ要素を移動させ、前記データ要素が前記メモリ内の第１の編成に配置され且つ前記第１の編成とは異なる前記ベクトルレジスタ内の第２の編成に配置されるように前記データ要素が移動されるときに並べ替え動作を実行するアクセス回路を備え、
プログラム命令の前記シーケンス内の並べ替え命令の群に応答して一群の並べ替え命令を復号して前記処理回路による各並べ替え命令の実行を制御する制御信号を生成するように構成される復号回路を備え、前記群内の各並べ替え命令が、前記群内の他の各並べ替え命令によって定義された前記データ要素アクセスパターンとは異なり且つ前記アクセス回路に前記複数のベクトルレジスタの１つのベクトルレジスタよりも多くアクセスさせるデータ要素アクセスパターンを定義し、前記アクセス回路が、前記群内の並べ替え命令の全てを実行する前記処理回路の結果として並べ替え動作を実行するように構成される、装置。
【請求項２】
前記アクセス回路が、前記群内の各並べ替え命令の実行に応答して、前記群内の他の各並べ替え命令の実行によって移動されるよりも異なるデータ要素を前記メモリと前記複数のベクトルレジスタとの間で移動させる、請求項１に記載の装置。
【請求項３】
前記群内の各並べ替え命令が、前記複数のベクトルレジスタを識別し、前記アクセス回路に前記複数のベクトルレジスタのそれぞれの少なくとも１つのデータ要素にアクセスさせるデータ要素アクセスパターンを定義する、請求項１または請求項２に記載の装置。
【請求項４】
前記アクセス回路が、前記群内の各並べ替え命令の実行中に、前記メモリ内の連続ワードへの少なくとも１つのアクセスを実行するように構成される、
請求項１〜３のうちいずれか一項に記載の装置。
【請求項５】
前記アクセス回路が、前記群内の各並べ替え命令の実行中に、前記メモリ内の連続ワードへの別々のアクセスを実行するように構成される、
請求項４に記載の装置。
【請求項６】
前記ベクトルレジスタのセットが論理的に複数の列に分割可能であり、各列が各ベクトルの同じ部分を格納するように配置され、前記ベクトルレジスタのセットが少なくとも２つのセクションを含み、各セクションが少なくとも１つの列を含み、各列が１つのセクションにのみ存在し、
各並べ替え命令に関連する前記ベクトルレジスタアクセスパターンが、前記メモリ内の連続ワードへの別々のアクセスのそれぞれに関連して、前記アクセス回路がセクションの異なる１つの中の前記データ要素にアクセスするように構成される、
請求項５に記載の装置。
【請求項７】
前記処理回路が、算術処理命令によって指定された算術演算を実行する算術処理回路を備え、
前記復号回路が、前記算術処理命令および前記並べ替え命令を含む前記プログラム命令のシーケンスに応答して、少なくとも１つの並べ替え命令の実行を少なくとも１つの算術処理命令の実行と少なくとも部分的に重複させる制御信号を生成し、重複実行中、前記算術処理命令が、前記アクセス回路によってアクセスされるセクションに対して前記レジスタのセットの異なるセクションにアクセスするように構成されている、
請求項６に記載の装置。
【請求項８】
前記メモリが複数のメモリバンクから形成されており、
各並べ替え命令に対して、前記データ要素アクセスパターンが、前記並べ替え命令が前記処理回路によって実行されたときに複数のメモリバンクにアクセスさせるように定義される、請求項１〜７のうちいずれか一項に記載の装置。
【請求項９】
前記アクセス回路が、群内の各並べ替え命令の実行中に、前記メモリ内の連続ワードへの別々のアクセスを実行するように構成されており、
別々のアクセスのそれぞれに対して、前記データ要素アクセスパターンが、前記複数のメモリバンクが前記アクセス回路によってアクセスされるように定義される、請求項８記載の装置。
【請求項１０】
前記アクセス回路が、群内の各並べ替え命令の実行中に、前記メモリ内の連続ワードへの別々のアクセスを実行するように構成されており、
前記データ要素アクセスパターンが、少なくとも１つの別のアクセス中にアクセスされた前記メモリバンクの第２のサブセットとは異なる別のアクセスのうちの少なくとも１つにおいて、前記アクセス回路に前記メモリバンクの第１のサブセットにアクセスさせるように定義される、
請求項８または請求項９に記載の装置。
【請求項１１】
前記データ要素がデータ構造にグループ化され、
前記第１の編成にしたがって、各データ構造の前記データ要素が前記メモリ内で連続して配置され、
前記第２の編成にしたがって、複数のデータ構造からの対応するデータ要素が各ベクトルレジスタ内に連続して配置されている、
請求項１〜１０のうちいずれか一項に記載の装置。
【請求項１２】
前記一群の並べ替え命令の実行が、前記アクセス回路に、複数のデータ構造の前記データ要素を前記メモリからロードさせ、前記並べ替え動作として、前記データ要素を前記複数のベクトルレジスタに書き込む前にデインターリーブ動作を実行させる、請求項１１に記載の装置。
【請求項１３】
前記一群の並べ替え命令の実行が、前記アクセス回路に、前記複数のベクトルレジスタから前記データ要素を読み取らせ、前記データ要素を複数のデータ構造として前記メモリに格納する前に前記並べ替え動作としてインターリーブ動作を実行させる、請求項１１に記載の装置。
【請求項１４】
前記データ要素がデータ構造にグループ化され、
前記第１の編成にしたがって、複数のデータ構造からの対応するデータ要素が前記メモリ内で連続して配置され、
第２の編成にしたがって、各データ構造の前記データ要素が各ベクトルレジスタ内に連続して配置されている、
請求項１〜１３のうちいずれか一項に記載の装置。
【請求項１５】
前記群内の各並べ替え命令が、定義された前記データ要素アクセスパターンと組み合わせて使用されるベースアドレスレジスタを指定して、アクセスされる前記メモリ内のアドレスを識別する、請求項１〜１４のうちいずれか一項に記載の装置。
【請求項１６】
前記処理回路が、前記並べ替え命令のうちの少なくとも１つの実行に応答して、
前記複数のベクトルレジスタの合計サイズに等しい値による前記ベースアドレスの調整、
前記少なくとも１つの並べ替え命令において書き戻しフラグが指定されている場合、前記複数のベクトルレジスタの合計サイズに等しい値による前記ベースアドレスの調整、
前記ベクトルレジスタのサイズに等しい値による前記ベースアドレスの調整、
前記少なくとも１つの並べ替え命令において書き戻しフラグが指定されている場合、前記ベクトルレジスタのサイズに等しい値による前記ベースアドレスの調整、
前記少なくとも１つの並べ替え命令によって指定された即値から導出された量による前記ベースアドレスの調整、および
前記少なくとも１つの並べ替え命令によって指定された前記レジスタ内の値による前記ベースアドレスのインクリメント、
のうちの１つにしたがって前記ベースアドレスレジスタ内のベースアドレスを調整する、請求項１５に記載の装置。
【請求項１７】
請求項５に従属したとき、前記処理回路が、前記並べ替え命令のうちの少なくとも１つの実行に応答して、
各アクセスにおける連続ワードの合計サイズに等しい値による前記ベースアドレスの調整、および
書き戻しフラグが前記並べ替え命令の少なくとも１つに指定されている場合、各アクセスにおける連続ワードの合計サイズに等しい値による前記ベースアドレスを調整、
のうちの１つにしたがって前記ベースアドレスレジスタ内のベースアドレスを調整する、請求項１５に記載の装置。
【請求項１８】
前記並べ替え命令の群の実行が、前記アクセス回路に、前記データ要素が前記メモリと前記複数のベクトルレジスタとの間で移動されるときに前記データ要素のサイズを変更するようにデータ拡大動作およびデータ縮小動作の一方をさらに実行させる、請求項１〜１７のうちいずれか一項に記載の装置。
【請求項１９】
請求項１１または請求項１４に従属したとき、メモリ内でアクセスされたアドレス範囲内のデータ構造の１つ以上を前記アクセス回路による処理から除外するために、前記アクセス回路が、前記並べ替え命令の群を実行するときに述語値を参照するように構成されている、請求項１〜１８のうちいずれか一項に記載の装置。
【請求項２０】
前記並べ替え命令が、
前記複数のベクトルレジスタのうちの前記２つ以上のベクトルレジスタのうちの１つを形成するベクトルレジスタを指定するパラメータであって、前記複数のベクトルレジスタのうちの前記２つ以上のベクトルレジスタの残りのレジスタが、前記指定されたベクトルレジスタに対して暗黙的に指定されるもの、
前記複数のベクトルレジスタのうちの前記２つ以上のベクトルレジスタを指定するパラメータ、
前記データ要素のサイズを指定するパラメータ、
前記複数のデータ要素内の前記データ要素の数を指定するパラメータ、および
前記複数のベクトルレジスタを含むベクトルレジスタの数を指定するパラメータ
のうちの１つ以上を識別する、請求項１〜１９のうちいずれか一項に記載の装置。
【請求項２１】
プログラム命令のシーケンスによって指定された動作を実行するための処理回路と、各ベクトルレジスタが複数のデータ要素を含むベクトルを格納するように構成されたベクトルレジスタのセットとを有する装置内で並べ替え動作を実行する方法であって、
前記処理回路のアクセス回路を使用して、メモリと前記セットの複数のベクトルレジスタとの間で前記データ要素を移動させ、前記データ要素が前記メモリ内の第１の編成内に配置され且つ前記第１の編成とは異なる前記ベクトルレジスタ内の第２の編成内に配置されるように前記データ要素が移動されるときに並べ替え動作を実行することと、
プログラム命令の前記シーケンス内の一群の並べ替え命令を復号して前記処理回路による各並べ替え命令の実行を制御する制御信号を生成することを備え、前記群内の各並べ替え命令が、前記群内の他の各並べ替え命令によって定義されたデータ要素アクセスパターンとは異なり且つ前記アクセス回路に前記複数のベクトルレジスタの１つのベクトルレジスタよりも多くアクセスさせるデータ要素アクセスパターンを定義し、
前記並べ替え動作が、前記群内の全ての並べ替え命令の前記処理回路による実行の結果として前記アクセス回路によって実行される、方法。
【請求項２２】
プログラム命令のシーケンスによって指定された動作を実行するための処理手段と、
各ベクトルレジスタ手段が複数のデータ要素を含むベクトルを格納するベクトルレジスタ手段のセットとを備え、
前記処理手段が、メモリと前記セットの複数のベクトルレジスタ手段との間で前記データ要素を移動させ、前記データ要素が前記メモリ内の第１の編成に配置され且つ前記第１の編成とは異なる前記ベクトルレジスタ手段内の第２の編成に配置されるように前記データ要素が移動されるときに並べ替え動作を実行するアクセス手段を備え、
プログラム命令の前記シーケンス内の並べ替え命令の群に応答して一群の並べ替え命令を復号して前記処理手段による各並べ替え命令の実行を制御する制御信号を生成するための復号手段を備え、前記群内の各並べ替え命令が、前記群内の他の各並べ替え命令によって定義されたデータ要素アクセスパターンとは異なり且つ前記アクセス手段に前記複数のベクトルレジスタ手段の１つのベクトルレジスタ手段よりも多くアクセスさせるデータ要素アクセスパターンを定義し、前記アクセス手段が、前記群内の並べ替え命令の全てを実行する前記処理回路の結果として前記並べ替え動作を実行するように構成される、装置。
【請求項２３】
ホストデータ処理装置を制御して請求項１から２０のいずれかに記載の装置に対応する命令実行環境を提供するためのプログラム命令を備える仮想マシンコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、データ処理の分野に関し、より詳細には、データ要素がメモリとベクトルレジスタのセットとの間で移動されるときに並べ替え動作を実行するためのベクトル命令の処理に関する。
【背景技術】
【０００２】
いくつかのデータ処理システムは、命令のソースオペランドまたは結果値が複数のデータ要素を含むベクトルであるベクトル命令の処理をサポートする。単一の命令に応答して多数の異なるデータ要素の処理をサポートすることによって、コード密度を向上させることができ、命令のフェッチおよび復号のオーバーヘッドを減少させることができる。処理されるデータ値のアレイは、データ値をベクトルオペランドのそれぞれの要素にロードし、単一のベクトル命令を使用して一度にいくつかの要素のデータ値を処理することによって、より効率的に処理することができる。
【０００３】
データ要素がメモリからベクトルレジスタにロードされるとき、またはベクトルレジスタからメモリに格納されるときにデータ要素の並べ替えを実行することもできるベクトルロードおよびストア命令を提供することが知られている。効率的なベクトル処理を可能にするためにデータがベクトルレジスタ内に編成される必要がある方法とは異なる形式でメモリ内に編成される様々な状況があるので、そのような並べ替え動作は有用である。例えば、メモリ内のデータがインターリーブされ、プロセッサ内でデインターリーブ形式で処理される必要がある多くの場合がある。そのようなデータのいくつかの例は、マルチチャンネルオーディオデータ、ＲＧＢＡ画像データ、および複素数を含む。
【０００４】
しかしながら、そのような各ベクトルロードまたはストア命令は大量の計算を表す。例えば、既知の種類のベクトルロード命令は、メモリから５１２ビットのデータをロードし、それぞれ１２８ビットからなる４つのフルベクトルレジスタを満たすことができる。小さなインオーダーコアでは、これは、命令が数サイクルの間停止する可能性があることを意味する。したがって、これは性能の問題を引き起こす可能性がある。さらに、これらの性能効果は、特定の種類のプロセッサ構成では悪化する可能性がある。例えば、メモリの実行と算術演算をオーバーラップさせることを可能にするプロセッサでは、メモリに関連した停止は、算術演算を実行する機会を逃すことを表し、したがって性能の問題を悪化させる。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
したがって、データがメモリとベクトルレジスタとの間でいずれかの方向に移動されるときにそのような並べ替え動作を実行するための改善されたメカニズムを提供することが望ましいであろう。
【課題を解決するための手段】
【０００６】
１つの例示的な構成では、プログラム命令のシーケンスによって指定された動作を実行するための処理回路と、各ベクトルレジスタが複数のデータ要素を含むベクトルを格納するように構成されたベクトルレジスタのセットとを備え、処理回路が、メモリと前記セットの複数のベクトルレジスタとの間でデータ要素を移動させ、データ要素がメモリ内の第１の編成に配置され且つ第１の編成とは異なるベクトルレジスタ内の第２の編成に配置されるようにデータ要素が移動されるときに並べ替え動作を実行するアクセス回路を備え、プログラム命令の前記シーケンス内の並べ替え命令の群に応答して一群の並べ替え命令を復号して処理回路による各並べ替え命令の実行を制御する制御信号を生成するように構成され、群内の各並べ替え命令が、群内の他の各並べ替え命令によって定義されたデータ要素アクセスパターンとは異なり且つアクセス回路に前記複数のベクトルレジスタの１つのベクトルレジスタよりも多くアクセスさせるデータ要素アクセスパターンを定義する復号回路を備え、アクセス回路が、群内の並べ替え命令の全てを実行する処理回路の結果として並べ替え動作を実行するように構成される、装置が提供される。
【０００７】
別の例示的な構成によれば、プログラム命令のシーケンスによって指定された動作を実行するための処理回路と、各ベクトルレジスタが複数のデータ要素を含むベクトルを格納するように構成されたベクトルレジスタのセットとを有する装置内で並べ替え動作を実行する方法であって、処理回路のアクセス回路を使用して、メモリと前記セットの複数のベクトルレジスタとの間でデータ要素を移動させ、データ要素がメモリ内の第１の編成内に配置され且つ第１の編成とは異なるベクトルレジスタ内の第２の編成内に配置されるようにデータ要素が移動されるときに並べ替え動作を実行することと、プログラム命令の前記シーケンス内の一群の並べ替え命令を復号して処理回路による各並べ替え命令の実行を制御する制御信号を生成し、群内の他の各並べ替え命令によって定義されたデータ要素アクセスパターンとは異なり且つアクセス回路に前記複数のベクトルレジスタの１つのベクトルレジスタよりも多くアクセスさせるデータ要素アクセスパターンを定義することとを備え、並べ替え動作が、群内の全ての並べ替え命令の処理回路による実行の結果としてアクセス回路によって実行される、方法が提供される。
【０００８】
さらに別の例示的な構成によれば、プログラム命令のシーケンスによって指定された動作を実行するための処理手段と、各ベクトルレジスタ手段が複数のデータ要素を含むベクトルを格納するベクトルレジスタ手段のセットとを備え、処理手段が、メモリと前記セットの複数のベクトルレジスタ手段との間でデータ要素を移動させ、データ要素がメモリ内の第１の編成に配置され且つ第１の編成とは異なるベクトルレジスタ手段内の第２の編成に配置されるようにデータ要素が移動されるときに並べ替え動作を実行するアクセス手段を備え、プログラム命令の前記シーケンス内の並べ替え命令の群に応答して一群の並べ替え命令を復号して処理手段による各並べ替え命令の実行を制御する制御信号を生成し、群内の各並べ替え命令が、群内の他の各並べ替え命令によって定義されたデータ要素アクセスパターンとは異なり且つアクセス手段に前記複数のベクトルレジスタ手段の１つのベクトルレジスタ手段よりも多くアクセスさせるデータ要素アクセスパターンを定義する復号手段を備え、アクセス手段が、群内の並べ替え命令の全てを実行する処理回路の結果として並べ替え動作を実行するように構成される、装置が提供される。
【０００９】
さらなる例示的な構成によれば、ホストデータ処理装置を制御して上述の装置に対応する命令実行環境を提供するためのプログラム命令を備える仮想マシンコンピュータプログラムが提供される。
【００１０】
仮想マシンコンピュータプログラムを格納するコンピュータ可読記憶媒体も提供することができる。この記憶媒体は、非一時的記憶媒体とすることができる。
【００１１】
本技術は、添付図面に示されている実施形態を参照して、単なる例として、さらに説明される。
【図面の簡単な説明】
【００１２】
【図１】図１は、ベクトル命令の処理をサポートするデータ処理装置の例を概略的に示している。
【図２】図２は、ベクトル命令の重複実行の例を示している。
【図３】図３は、異なるプロセッサ実装間で、または命令の実行の異なるインスタンス間での実行時に、連続するベクトル命令間の重複量をスケーリングする３つの例を示している。
【図４】図４は、スカラー命令の実行が２つのベクトル命令間の重複を解消する例を示している。
【図５】図５は、ベクトルレジスタのセットが論理的に複数のセクションに配置されることができる方法を概略的に示す図である。
【図６】図６は、一実施形態において、メモリからベクトルレジスタにロードされたデータに対してデインターリーブ動作をまとめて実行するためにロード命令の群が配置されることができる方法を概略的に示す図である。
【図７Ａ】図７Ａは、異なるサイズのデータ要素に対する並べ替え命令の群内の個々の命令に関連付けることができる異なるデータ要素アクセスパターンを示している。
【図７Ｂ】図７Ｂは、異なるサイズのデータ要素に対する並べ替え命令の群内の個々の命令に関連付けることができる異なるデータ要素アクセスパターンを示している。
【図７Ｃ】図７Ｃは、異なるサイズのデータ要素に対する並べ替え命令の群内の個々の命令に関連付けることができる異なるデータ要素アクセスパターンを示している。
【図７Ｄ】図７Ｄは、異なるサイズのデータ要素に対する並べ替え命令の群内の個々の命令に関連付けることができる異なるデータ要素アクセスパターンを示している。
【図７Ｅ】図７Ｅは、異なるサイズのデータ要素に対する並べ替え命令の群内の個々の命令に関連付けることができる異なるデータ要素アクセスパターンを示している。
【図７Ｆ】図７Ｆは、異なるサイズのデータ要素に対する並べ替え命令の群内の個々の命令に関連付けることができる異なるデータ要素アクセスパターンを示している。
【図７Ｇ】図７Ｇは、異なるサイズのデータ要素に対する並べ替え命令の群内の個々の命令に関連付けることができる異なるデータ要素アクセスパターンを示している。
【図８】図８は、一実施形態にかかる、ストライドが４のベクトルロード命令（ＶＬＤ４ｎ命令）の１つを実行するときにメモリ内でアクセスされるアドレスを識別するためにパターンＩＤおよびビートＩＤ情報が使用されてアドレスワードオフセットを生成する方法を示す図である。
【図９】図９は、一実施形態にかかる、ＶＬＤ４ｎ命令の実行中にアクセスするためにベクトルレジスタの適切な部分を判定するために使用することができる回路を示している。
【図１０】図１０は、一実施形態にかかる、ベクトルロード命令および積和演算命令が重複されることができる方法を示すタイミング図である。
【図１１Ａ】図１１Ａは、一実施形態にしたがって提供されることができるロードおよびストア命令の様々な例示的な符号化を示している。
【図１１Ｂ】図１１Ｂは、一実施形態にしたがって提供されることができるロードおよびストア命令の様々な例示的な符号化を示している。
【図１１Ｃ】図１１Ｃは、一実施形態にしたがって提供されることができるロードおよびストア命令の様々な例示的な符号化を示している。
【図１１Ｄ】図１１Ｄは、一実施形態にしたがって提供されることができるロードおよびストア命令の様々な例示的な符号化を示している。
【図１２】図１２は、一実施形態にかかる、並べ替え命令の群を処理するときの図１の命令復号器の動作を示すフロー図である。
【図１３】図１３は、一実施形態にしたがって実行することができるデータ拡大動作を示している。
【図１４Ａ】図１４Ａは、一実施形態にかかる、述語情報が並べ替え命令の群の実行中に実行される動作に影響を及ぼすために使用されることができる方法を示している。
【図１４Ｂ】図１４Ｂは、一実施形態にかかる、述語情報が並べ替え命令の群の実行中に実行される動作に影響を及ぼすために使用されることができる方法を示している。
【図１５】図１５は、一実施形態にかかる書き込みアクセス回路を有するベクトルレジスタファイルの一部を概略的に示している。
【図１６】図１６は、一実施形態にかかる読み取りアクセス回路を有するベクトルレジスタファイルの一部を概略的に示している。
【図１７】図１７は、一実施形態にかかる書き込みアクセス回路を有するベクトルレジスタファイルを概略的に示している。
【図１８】図１８は、一実施形態にかかる読み取りアクセス回路を有するベクトルレジスタファイルを概略的に示している。
【図１９Ａ】図１９Ａは、ベクトルレジスタファイルがワードを示すテキスト形式で示されている、ベクトルレジスタファイル内の単一ねじれの例を示している。
【図１９Ｂ】図１９Ｂは、ベクトルレジスタファイルがバイトを示すテキスト形式で示されている、ベクトルレジスタファイル内の単一ねじれの例を示している。
【図２０】図２０は、ベクトルレジスタファイルがバイト形式で示されている、ベクトルレジスタファイル内の二重ねじれの例を示している。
【図２１】図２１は、一実施形態にかかる、回路が二重ねじれを実行するベクトルレジスタファイルの１つのセクションを概略的に示している。
【図２２】図２２は、一実施形態にかかる、ねじれを実行するプロセスが一般化されて入れ子にされたねじれを任意の回数実行することができる方法を示す図である。
【図２３】図２３は、一実施形態にかかるレジスタアクセス回路の例としての読み取りアクセス回路を概略的に示している。
【図２４】図２４は、一実施形態にかかるレジスタアクセス回路の例としての書き込みアクセス回路を概略的に示している。
【図２５】図２５は、一実施形態にかかる製造方法を示すフローチャートである。
【図２６】図２６は、使用可能な仮想マシンの実装を示している。
【発明を実施するための形態】
【００１３】
添付の図面を参照して実施形態を説明する前に、以下の実施形態の説明を提供する。
【００１４】
１つの例示的な構成では、プログラム命令のシーケンスによって指定された動作を実行する処理回路と、ベクトルレジスタのセットとを有し、各ベクトルレジスタが複数のデータ要素を含むベクトルを格納するように構成される装置が提供される。処理回路は、メモリとベクトルレジスタのセットの複数のベクトルレジスタとの間でデータ要素を移動させるアクセス回路を含み、アクセス回路はまた、データ要素がメモリ内の第１の編成に配置され且つ第１の編成とは異なるベクトルレジスタ内の第２の編成に配置されるようにデータ要素が移動されるときに並べ替え動作を実行することもできる。したがって、例として、これは、データ要素がメモリ内でインターリーブ方式で配置され、ベクトルレジスタ内でデインターリーブ方式で配置されることを可能にし、またはその逆も可能である。
【００１５】
説明した実施形態によれば、並べ替え動作は、単一のベクトル命令に応答して実行されるのではなく、まとめて並べ替え動作を実行させる一群の並べ替え命令が定義される。特に、復号回路は、処理回路による各並べ替え命令の実行を制御するための適切な制御信号を生成するために、プログラム命令のシーケンス内のそのような並べ替え命令の群に応答してその並べ替え命令の群を復号するように構成される。群内の各並べ替え命令は、群内の他の各並べ替え命令によって定義されたデータ要素アクセスパターンとは異なるデータ要素アクセスパターンを定義する。さらに、各データ要素アクセスパターンは、並べ替え動作を実行するためにアクセスされる必要がある複数のベクトルレジスタの中でアクセス回路に２つ以上のベクトルレジスタにアクセスさせる。各並べ替え命令に対して定義された異なるデータ要素アクセスパターンの結果として、アクセス回路は、群内の全ての並べ替え命令を実行する処理回路の結果として並べ替え動作を実行することができる。
【００１６】
必要な並べ替え動作を実行するために復号回路および処理回路をそのような並べ替え命令群に応答できるように構成することによって、これは、そうでなければ複数の命令に分割されることになる単一のベクトルロードまたはストア命令の実行に関連する大きな計算負荷を可能にし、前述の性能の問題を軽減する。そのような群の並べ替え命令の使用は、メモリへのアクセスが効率的な方法で配置されることを可能にすることによって、多種多様な異なるプロセッサアーキテクチャにおける性能を改善することができる。さらに、メモリおよび算術演算の重複実行をサポートするプロセッサでは、メモリ関連の停止の減少が、そのようなメモリ関連の停止が重複算術演算の性能に潜在的に与える影響を減らすので、性能上の利点をさらに高めることができる。
【００１７】
上述の技術を使用することによって、アクセス回路は、群内の各並べ替え命令の実行に応答して、群内の他の各並べ替え命令の実行によって移動されるよりも異なるデータ要素をメモリと複数のベクトルレジスタとの間で移動させるように構成されることができる。したがって、並べ替え動作を受ける必要がある関連データ要素のそれぞれは、並べ替え命令のうちの１つの実行中に一度移動されるだけでよく、各データ要素を各並べ替え命令の実行中に移動させる選択が各並べ替え命令に関連するデータ要素アクセスパターンによって定義される。各並べ替え命令に使用されるデータ要素アクセスパターンを適切に選択することによって、メモリサブシステムを非常に効率的に使用することができ、そのような並べ替え命令の群の使用から得られる性能上の利点をさらに向上させることを見出した。
【００１８】
前述のように、各データ要素アクセスパターンは、アクセス回路に、並べ替え動作に関与する複数のベクトルレジスタのうちの２つ以上のベクトルレジスタにアクセスさせる。特定の一実施形態では、群内の各並べ替え命令は複数のベクトルレジスタを識別し、アクセス回路にそれら複数のベクトルレジスタのそれぞれの少なくとも１つのデータ要素にアクセスさせるデータ要素アクセスパターンを定義する。群内の各並べ替え命令の実行中に複数のベクトルレジスタのそれぞれがアクセスされるように構成することによって、これは、データ要素アクセスパターンが実装するためにより簡単な方法で編成されることを可能にすることを見出した。
【００１９】
一実施形態では、アクセス回路は、群内の各並べ替え命令の実行中に、メモリ内の連続ワードへの少なくとも１つのアクセスを実行するように構成される。典型的には、メモリアクセスに関連する「ワード」のサイズは固定されており、したがってワードはメモリシステム内でアクセスされるデータの所定の部分を表す。したがって、ワードは、装置によって使用されるメモリアクセス粒度を効果的に表す。ワードサイズは、任意の特定の並べ替え命令の実行中に処理されるデータ要素のサイズとは無関係であることに留意すべきである。したがって、ワードは、１つ以上のデータ要素を表してもよく、または実際にはデータ要素の一部だけを表してもよい。１つの特定の例として、ワードサイズは３２ビットとすることができ、これは、ある特定の時点で処理されているデータ要素サイズが３２ビットであるか、１６ビットまたは８ビットなどのより小さいサイズであるか、または実際には６４ビットなどのより大きなサイズであるかどうかにかかわらずあてはまる。
【００２０】
いくつかの実施形態では、最も効率的なアプローチは、群内の各並べ替え命令の実行中にメモリ内の一連の連続ワードへの単一アクセスを実行することであるが、いくつかの実施形態では、群内の各並べ替え命令の実行中に、アクセス回路がメモリ内の連続ワードに対して別々のアクセスを実行するように、データ要素アクセスパターンを異なるように配置することに利点が存在することができる。特に、各並べ替え命令の実行中にアクセスされるデータ要素がメモリ内の連続ワードへの単一アクセスを使用してアクセスされないようにデータ要素アクセスパターンを構成することによって、これは、メモリおよび算術演算の重複実行をより最適にサポートすることができる。特に、別々のアクセスのそれぞれに関連してアクセスされるべきベクトルレジスタの対応する部分が全てベクトルレジスタの同じセクション内にあるわけではなく、したがって、アクセス回路が例えばベクトルレジスタセットの１つのセクションにアクセスすることを可能にするとともに、算術論理装置がベクトルレジスタセットの異なるセクションにアクセスすることを保証することができる。
【００２１】
より具体的には、一実施形態では、ベクトルレジスタのセットは、複数の列に論理的に分割可能であり、各列は、各ベクトルの同じ部分を格納するように配置され、ベクトルレジスタのセットは、少なくとも２つのセクションを含み、各セクションは、少なくとも１つの列を含み、各列は、１つのセクションにのみ存在する。各並べ替え命令に関連するベクトルレジスタアクセスパターンは、メモリ内の連続ワードへの別々のアクセスのそれぞれに関連して、アクセス回路がセクションの異なるものにおけるデータ要素にアクセスするように構成されるようなものである。
【００２２】
そのような一実施形態では、処理回路は、算術処理命令によって指定された算術演算を実行する算術処理回路を備えることができ、復号回路は、算術処理命令および並べ替え命令を含むプログラム命令のシーケンスに応答して、アクセス回路によってアクセスされるセクションに対してレジスタのセットの異なるセクションにアクセスするように構成される算術処理回路の重複実行中に、少なくとも１つの並べ替え命令の実行を少なくとも１つの算術処理命令の実行と少なくとも部分的に重複させる制御信号を生成することができる。
【００２３】
したがって、群内の各並べ替え命令に関連するデータ要素アクセスパターンを適切に選択することによって、メモリサブシステムの効率的な使用を達成できるだけでなく、さらに命令の重複実行が、算術論理装置が別のセクションにアクセスしている間にアクセス回路がベクトルレジスタバンクの１つのセクションにアクセスすることを可能にすることによって効率的にサポートされることができることがわかる。
【００２４】
多くの場合、メモリは、複数のメモリバンクから構成されている。そのようなシナリオでは、群内の各並べ替え命令の実行に関連するメモリアクセスの効率を向上させるようにデータ要素アクセスパターンが定義されることができる。特に、各並べ替え命令について、並べ替え命令が処理回路によって実行されるときに、複数のメモリバンクにアクセスさせるようにデータ要素アクセスパターンが定義されることができる。
【００２５】
利用可能な複数のメモリバンクを最適に利用するようにデータ要素アクセスパターンが構成されることができるいくつかの方法がある。例えば、群内の各並べ替え命令の実行がメモリ内の連続ワードへの別々のアクセスを含む実施形態では、それら別々のアクセスのそれぞれについて、データ要素アクセスパターンが定義されて、複数のメモリバンクにアクセス回路によってアクセスさせることができる。したがって、単に例として、並べ替え命令の実行が２つのアクセスを行わせ、各アクセスが２つの連続ワードにアクセスする状況を考える場合、それら２つの連続ワードが異なるメモリバンク内に存在するようにデータ要素アクセスパターンが選択されることができる。
【００２６】
さらに、または代替として、データ要素アクセスパターンは、少なくとも１つの他の別々のアクセス中にアクセスされるメモリバンクの第２のサブセットとは異なる別々のアクセスのうちの少なくとも１つの間に、アクセス回路にメモリバンクの第１のサブセットにアクセスさせるように定義されることができる。これを行う機能は、メモリによって提供されるメモリバンクの数に依存する。しかしながら、２つの連続ワードへの２つのアクセスを実行することによって並べ替え命令の実行中に４ワードがメモリ内でアクセスされる先の例を考慮すると、４つのメモリバンクが設けられる場合、データ要素アクセスパターンは、異なるメモリバンク内の各アクセスにおける２つの連続ワードのみならず、２つの別々のアクセスのそれぞれによってアクセスされる連続ワードも異なるバンク内にあることを保証するために使用されることができる。これは、プロセッサが並べ替え命令の実行を実行するように構成される方法に応じて有益であり得る。特に、それが必要なアクセスの全てが同時に実行されることを可能にする場合、そのようなアプローチは、各ワードがメモリバンク内で同時にアクセスされることを可能にすることが理解されるであろう。
【００２７】
データ要素は、データ構造にグループ化されているとみなすことができる。一実施形態では、前述の第１の編成にしたがって、各データ構造のデータ要素は、メモリ内で連続して配置され、第２の編成にしたがって、複数のデータ構造からの対応するデータ要素は、各ベクトルレジスタ内で連続して配置される。１つのそのような実施形態では、並べ替え命令の群は、アクセス回路に複数のデータ構造のデータ要素をメモリからロードさせ且つデータ要素を複数のベクトルレジスタに書き込む前に並べ替え動作としてデインターリーブ動作を実行させるロード命令の群を形成することができる。あるいは、並べ替え命令の群は、並べ替え命令の群の実行がアクセス回路に複数のベクトルレジスタからデータ要素を読み取らせ且つデータ要素を複数のデータ構造としてメモリに格納する前に並べ替え動作としてインターリーブ動作を実行させるように、格納命令の群を含むことができる。
【００２８】
一実施形態では、データは、上述のようにメモリ内でインターリーブ方式で且つベクトルレジスタ内でデインターリーブ方式で配置されることができるが、代替実施形態では、第１の編成にしたがって、複数のデータ命令からの対応するデータ要素がメモリ内に連続して配置されるとともに、第２の編成にしたがって、各データ構造のデータ要素が各ベクトルレジスタ内に連続して配置されるように、データ要素の配置は、逆にされることができる。
【００２９】
各並べ替え命令に対して定義されたデータ要素アクセスパターンを使用して、アクセスされるメモリ内のアドレスを識別することができるいくつかの方法がある。一実施形態では、群内の各並べ替え命令は、定義されたデータ要素アクセスパターンと組み合わせて使用されるベースアドレスレジスタを指定して、アクセスされるメモリ内のアドレスを識別する。
【００３０】
並べ替え命令の群が実行されるときにベースアドレスレジスタ内のベースアドレスが調整される方法に関してとられることができるいくつかの異なるアプローチがある。例えば、一実施形態では、並べ替え命令のうちの少なくとも１つの実行は、並べ替え動作の実行中にアクセスされる複数のベクトルレジスタの合計サイズに等しい値によってベースアドレスを調整させることができる。一実施形態では、そのような調整は、書き戻しフラグが少なくとも１つの並べ替え命令で指定されている場合に行われる。特定の一実施形態では、群内の最後の並べ替え命令は、その最後の命令が実行されたときにベースアドレスを上記の方法で更新させるように設定された書き戻しフラグを有することができる。
【００３１】
あるいは、ベースアドレスは、ベクトルレジスタのサイズに等しい値によって更新されてもよく、これもまた、対応する並べ替え命令において書き戻しフラグが指定されている場合にのみ発生するように限定され得る。１つの特定の例示的な構成では、並べ替え命令のそれぞれは、実行時にベースアドレスを上記の方法で調整させることができる。
【００３２】
代替実施形態では、ベースアドレスは、少なくとも１つの並べ替え命令によって指定される即値から導き出される量だけ調整されることができ、あるいは、ベースアドレスは、少なくとも１つの並べ替えによって指定されるレジスタ内の値だけインクリメントされることができる。
【００３３】
群内の各並べ替え命令の実行中に、メモリ内の連続ワードへの別々のアクセスを実行するようにアクセス回路が構成されている実施形態では、各アクセス内の連続ワードの合計サイズに等しい値だけベースアドレスが調整されるように構成することができる。したがって、そのような実施形態では、ベースアドレスは、複数のアクセスのうちの各アクセスが実行された後に更新されることができる。また、調整は、少なくとも１つの並べ替え命令で書き戻しフラグが指定されている場合にのみ調整が行われるように限定されることができる。
【００３４】
必要に応じて、並べ替え命令の群の実行中に、データがメモリからベクトルレジスタにロードされるとき、またはベクトルレジスタからメモリに戻されるときに追加の計算を実行することもできる。例えば、一群の並べ替え命令を実行することにより、データ要素をメモリと複数のベクトルレジスタとの間で移動させるときにデータ要素のサイズを変更するためのデータ拡大動作およびデータ縮小動作の一方をアクセス回路にさらに実行させることができる。そのような拡大および縮小動作は、様々な状況で有用である。例えば、データ要素は、それらがベクトルレジスタの内容を参照して処理回路によって処理されるときよりもコンパクトな形式でメモリに記憶されることができる。
【００３５】
さらに、並べ替え命令の群によって定義された様々なデータ構造に対して実行される並べ替え動作は、例えば述語レジスタ(predicate register)において別々に指定されることができる適切な述語値(predicate value)の使用を通して予測されることができる。したがって、一実施形態では、アクセス回路は、メモリ内でアクセスされるアドレス範囲内の１つ以上のデータ構造をアクセス回路による処理から除外するために並べ替え命令の群を実行するときに述語値を参照するように構成されることができる。これは、特定のデータ構造を除外できるようにすることにより、そのような並べ替え動作を実行するときのさらなる柔軟性を提供することができる。
【００３６】
並べ替え命令は、様々な方法で構成されることができ、特に、実装に応じて様々なパラメータを指定するように構成されることができる。例えば、並べ替え命令は、以下のうちの１つ以上を識別することができる：前記複数のベクトルレジスタのうちの前記２つ以上のベクトルレジスタのうちの１つを形成するベクトルレジスタを指定するパラメータ、前記複数のベクトルレジスタのうちの前記２つ以上のベクトルレジスタの残りのレジスタは、前記指定されたベクトルレジスタに対して暗黙的に指定される；前記複数のベクトルレジスタのうちの前記２つ以上のベクトルレジスタを指定するパラメータ；データ要素のサイズを指定するパラメータ；前記複数のデータ要素内のデータ要素の数を指定するパラメータ；および前記複数のベクトルレジスタを含むベクトルレジスタの数を指定するパラメータ。
【００３７】
ここで、特定の実施形態が図面を参照して説明される。
【００３８】
図１は、ベクトル命令の処理をサポートするデータ処理装置２の例を概略的に示している。これは、説明を容易にするための簡略図であり、実際には装置は簡潔にするために図１に示されていない多くの要素を有することができることが理解されよう。装置２は、命令復号器６によって復号された命令に応答してデータ処理を実行するための処理回路４を備える。プログラム命令は、メモリシステム８からフェッチされ、アーキテクチャによって定義された方法で命令を処理するように処理回路４を制御する制御信号を生成するために命令復号器によって復号される。例えば、復号器６は、復号された命令のオペコードおよび命令の任意の追加の制御フィールドを解釈して、適切なハードウェアユニットを作動させて算術演算、ロード／ストア演算または論理演算などの演算を実行させる制御信号を処理回路４に生成することができる。
【００３９】
装置は、処理回路４によって処理されるべきデータ値と処理回路の動作を構成するための制御情報とを格納するためのレジスタのセット１０を有する。算術または論理命令に応答して、処理回路４は、レジスタ１０からオペランドを読み取り、命令の結果をレジスタ１０に書き戻す。ロード／ストア命令に応答して、データ値は、処理回路を介してレジスタ１０とメモリシステム８との間で転送される。メモリシステム８は、１つ以上のレベルのキャッシュならびにメインメモリを含むことができる。
【００４０】
レジスタ１０は、単一のデータ要素を含むスカラー値を格納するための多数のスカラーレジスタを含むスカラーレジスタファイル１２を含む。命令復号器６および処理回路４によってサポートされるいくつかの命令は、スカラーレジスタ１２から読み出されたスカラーオペランドを処理してスカラーレジスタに書き戻されるスカラー結果を生成するスカラー命令である。
【００４１】
レジスタ１０はまた、それぞれが複数のデータ要素を含むベクトル（本明細書ではベクトル値とも呼ばれる）を格納するためのいくつかのベクトルレジスタを含むベクトルレジスタファイル１４を含む。ベクトル命令に応答して、命令復号器６は、処理回路４を制御してベクトルレジスタ１４の１つから読み出されたベクトルオペランドの各要素に対して多数レーンのベクトル処理を実行し、スカラーレジスタ１２に書き込まれるべきスカラー結果またはベクトルレジスタ１４に書き込まれるべきさらなるベクトル結果のいずれかを生成する。いくつかのベクトル命令は、１つ以上のスカラーオペランドからベクトル結果を生成するか、またはスカラーレジスタファイル内のスカラーオペランド、ならびにベクトルレジスタファイル１４から読み出されたベクトルオペランドに対するベクトル処理のレーンに対して追加のスカラー演算を実行することができる。したがって、いくつかの命令は、命令の１つ以上のソースレジスタおよび宛先レジスタのうちの少なくとも１つがベクトルレジスタ１４であり、１つ以上のソースレジスタおよび宛先レジスタのうちの別のものがスカラーレジスタ１２である混合スカラーベクトル命令とすることができる。
【００４２】
ベクトル命令はまた、データ値をベクトルレジスタ１４とメモリシステム８内の位置との間で転送させるベクトルロード／ストア命令も含むことができる。ロード／ストア命令は、メモリ内の位置が連続するアドレス範囲に対応する連続ベクトルロード／ストア命令、またはいくつかの離散アドレスを指定して処理回路４を制御してそれらのアドレスのそれぞれからのデータをベクトルレジスタの各要素にロードするかもしくはベクトルレジスタの各要素から個別のアドレスにデータを格納する散乱／集合型ベクトルロード／ストア命令を含むことができる。
【００４３】
処理回路４は、ある範囲の異なるデータ要素サイズを有するベクトルの処理をサポートすることができる。例えば、１２８ビットベクトルレジスタ１４は、例えば１６個の８ビットデータ要素、８個の１６ビットデータ要素、４個の３２ビットデータ要素または２個の６４ビットデータ要素に分割されることができる。レジスタバンク１０内の制御レジスタは、使用されている現在のデータ要素サイズを指定してもよく、あるいはこれは、実行されるべき所与のベクトル命令のパラメータであってもよい。
【００４４】
レジスタ１０はまた、処理回路４の処理を制御するためのいくつかの制御レジスタも含む。例えば、これらは、処理中の現在の実行点に対応する命令のアドレスを示すプログラムカウンタアドレスを格納するためのプログラムカウンタレジスタ１６、処理が関数呼び出しの後続処理に関するリターンアドレスを格納するためのリンクレジスタ１８、およびスタックデータ構造のメモリシステム８内の位置を示すスタックポインタレジスタ２０を含むことができる。当然のことながら、これらは、格納できる制御情報の種類のほんの一部にすぎず、実際にはアーキテクチャの所与の命令セットは、アーキテクチャによって定義されている他の多くの制御パラメータを格納することができる。例えば、制御レジスタは、ベクトルレジスタの全幅、またはベクトル処理の所与のインスタンスに使用されている現在のデータ要素サイズを指定することができる。
【００４５】
処理回路４は、異なるクラスの命令を処理するためのいくつかの異なるハードウェアブロックを含むことができる。例えば、図１に示すように、メモリシステム８と相互作用するロード／ストア命令は、専用ロード／ストアユニット（ＬＳＵ）２５によって処理されることができるとともに、算術または論理命令は、１つ以上の他のユニット３０によって処理されることができる。これらの他のユニットは、算術論理ユニット（ＡＬＵ）を含むことができ、ＡＬＵ自体は、さらに、乗算を含む演算を実行するための積和演算ユニット（ＭＡＣ）と、他の種類のＡＬＵ演算を処理するためのさらなるユニットとに分割されることができる。浮動小数点命令を処理するために浮動小数点ユニットを設けることもできる。ベクトル処理を含まない純粋なスカラー命令もまた、ベクトル命令と比較して別のハードウェアブロックで処理することもでき、または同じハードウェアブロックを再利用することもできる。
【００４６】
デジタル信号処理（ＤＳＰ）のようないくつかの用途では、おおよそ同数のＡＬＵおよびロード／ストア命令が存在することができ、したがって、ＭＡＣのようないくつかの大きなブロックは、かなりの時間、アイドルのままにされることができる。実行リソースがより高い性能を得るためにベクトルレーンの数に比例して増やされるので、この非効率性は、ベクトルアーキテクチャ上で悪化する可能性がある。より小型のプロセッサ（例えば、単一発行、インオーダーコア）では、完全にスケールアウトされたベクトルパイプラインの面積オーバーヘッドが非常に大きい可能性がある。図２に示すように、使用可能な実行リソースをより効率的に使用しながら領域への影響を最小限に抑えるための１つのアプローチは、命令の実行を重複させることである。この例では、３つのベクトル命令は、ロード命令ＶＬＤＲ、乗算命令ＶＭＵＬおよびシフト命令ＶＳＨＲを含み、それらの間にデータ依存性があっても、これら全ての命令は、同時に実行することができる。これは、ＶＭＵＬの要素１は、Ｑ１の要素１にのみ依存し、Ｑ１レジスタ全体には依存しないため、ＶＬＤＲの実行が終了する前にＶＭＵＬの実行を開始できるためである。命令を重複させることを可能にすることにより、乗算器のような高価なブロックは、より頻繁にアクティブに保たれることができる。
【００４７】
したがって、マイクロアーキテクチャ実装がベクトル命令の実行を重複することを可能にすることが望ましい可能性がある。しかしながら、アーキテクチャが固定量の命令重複があると仮定すると、マイクロアーキテクチャの実装が、アーキテクチャが想定する命令重複の量と実際に一致する場合、これは、高い効率を提供するが、異なる重複を使用するアーキテクチャまたは全く重複しないアーキテクチャを使用する異なるマイクロアーキテクチャにスケーリングされる場合に問題が生じる可能性がある。
【００４８】
代わりに、図３の例に示すように、アーキテクチャは、様々な重複をサポートすることができる。ベクトル命令の実行は、「ビート（beats）」と呼ばれる部分に分割され、各ビートは、所定サイズのベクトルの一部の処理に対応する。ビートは、完全に実行されるかまたは全く実行されないかのいずれかであり、部分的に実行することはできないベクトル命令のアトミック部分である。１ビートで処理されるベクトルの部分のサイズは、アーキテクチャによって定義され、ベクトルの任意の部分とすることができる。図３の例では、ビートは、ベクトル幅の４分の１に対応する処理として定義され、そのため、ベクトル命令あたり４ビートがある。明らかに、これは一例にすぎず、他のアーキテクチャは、例えば２または８などの異なる数のビートを使用してもよい。１ビートに対応するベクトルの部分は、処理されるベクトルのデータ要素サイズと同じサイズ、よりも大きいサイズまたはより小さいサイズとすることができる。したがって、要素サイズが実装ごとに、または実行時に異なる命令間で異なる場合であっても、ビートは、ベクトル処理の一定の幅である。１ビートで処理されるベクトルの部分が複数のデータ要素を含む場合、各要素が独立して処理されることを確実にするために、各要素間の境界でキャリー信号が無効にされることができる。１ビートで処理されるベクトルの部分が要素の一部のみに対応し、ハードウェアが数ビートを並行して計算するのに不十分である場合、１ビートの処理中に生成されるキャリー出力は、２つのビートの結果がともにデータ要素を形成するように、後続ビートへのキャリー入力として入力されることができる。
【００４９】
図３に示すように、処理回路４の異なるマイクロアーキテクチャ実装は、抽象的なアーキテクチャクロックの１つの「ティック(tick)」で異なる数のビートを実行することができる。ここで、「ティック」は、アーキテクチャ状態の前進の単位に対応する（例えば、単純なアーキテクチャでは、各ティックは、次の命令を指すようにプログラムカウンタを更新することを含む、命令の実行に関連する全てのアーキテクチャ状態を更新するインスタンスに対応することができる）。当業者にとって理解されるように、パイプライン化などの既知のマイクロアーキテクチャ技術は、単一のティックがハードウェアレベルで実行するために複数のクロックサイクルを必要とし、実際にハードウェアレベルの単一クロックサイクルは、複数の命令の複数の部分を処理できることを意味することができる。しかしながら、そのようなマイクロアーキテクチャ技術は、アーキテクチャレベルではティックがアトミックであるためにソフトウェアには見えない。簡潔にするために、そのようなマイクロアーキテクチャは、本開示のさらなる説明の間は無視される。
【００５０】
図３の下の例に示すように、いくつかの実装形態は、１ティック内で全てのビートを並行して処理するのに十分なハードウェアリソースを提供することによって、同じティック内のベクトル命令の４ビート全てをスケジュールすることができる。これは、高性能の実装に適することができる。この場合、命令全体が１ティックで完了できるため、アーキテクチャレベルでの命令間のいかなる重複も必要ない。
【００５１】
一方、より面積効率の高い実装では、ティックあたり２ビートしか処理できない、より狭い処理ユニットを提供することができ、図３の中央の例に示すように、命令実行は、第１の命令の第３または第４のビートと並列に実行される第２のベクトル命令の第１および第２のビートと重複されることができ、それらの命令は、処理回路内の異なる実行ユニット上で実行される（例えば、図３では、第１の命令は、ロード／ストアユニット２５を使用して実行されるロード命令であり、第２の命令は、他のユニット３０のうちの１つを形成するＭＡＣユニットを使用して実行される積和命令である）。
【００５２】
さらにエネルギ／面積効率の高い実装では、より狭く、一度に単一ビートしか処理できないハードウェアユニットを提供することができ、この場合、ティックあたり１ビートが処理されることができ、図３の上の例に示されるように、命令実行は１ビートずつ重複されてずらされる（これは、上記図２に示されている例と同じである）。
【００５３】
図３に示されている重複はほんのいくつかの例であり、他の実装も可能であることが理解されるであろう。例えば、処理回路４のいくつかの実装は、同じティック内で並列に複数の命令の二重発行をサポートすることができ、その結果、命令のスループットが向上する。この場合、１つのサイクルでともに始まる２つ以上のベクトル命令は、次のサイクルで始まる２つ以上のベクトル命令と重複されるいくつかのビートを有することができる。
【００５４】
実装ごとに重複量を変えて異なる性能点にスケーリングするのと同様に、ベクトル命令間の重複量もまた、プログラム内のベクトル命令の実行の異なるインスタンス間で実行時に変化させることができる。したがって、処理回路４は、図１に示すように、前の命令に対して所与の命令が実行されるタイミングを制御するためのビート制御回路３０を備えることができる。これは、実装がより困難であるか、または命令に利用可能なリソースに依存する特定のコーナーケースにおいて、マイクロアーキテクチャに命令を重複させないことを選択する自由を与える。例えば、同じリソースを必要とし、使用可能な全てのＭＡＣまたはＡＬＵリソースが既に別の命令によって使用されている特定の種類（例えば、積和命令）のバックツーバック命令がある場合、次の命令の実行を開始するのに十分な空きリソースがない可能性があり、そのため、重複ではなく、最初の命令が完了するまで第２の命令の発行を待機することができる。
【００５５】
図４に示すように、介在するスカラー命令がある場合、２つのベクトル命令間の重複もまた防止されることができる。これは、スカラー命令がベクトル命令の最後のビートの結果に依存し、第２のベクトル命令がその全てのビートのスカラー結果に依存する可能性があるため、ベクトル命令とスカラー命令の重複を避ける方が安全な場合があるためである。
【００５６】
上述したように重複が許可されると、複数の命令が同時に実行される可能性がある。プログラムカウンタ１６は、なおも完了しているべき少なくとも１つのビートを有する最も古い未完了命令のアドレスを追跡することができる。プログラムカウンタは、ベクトル命令がその最後のビートを完了したときにインクリメントされることができる。
【００５７】
標準的なベクトルロード／ストア動作および散乱／集合型ベクトルロード／ストア動作を実行することに加えて、指定されたベクトルのデータ要素がメモリシステム８とベクトルレジスタ１４のセットとの間で移動されるので、ＬＳＵ２５は、並べ替え動作も実行するように構成され、ベクトルのデータ要素がそれらに対するさらなるベクトル演算の効率的な実行を容易にするような方法でベクトルレジスタ内に配置されることを確実にするのを支援することができる。データ要素は、データ構造を形成するとみなすことができる。例えば、音声データを考慮すると、データ構造は、異なるオーディオチャンネルに関連するいくつかのデータ要素を含むことがある。例えば、単純なステレオオーディオを考慮すると、各データ構造は、左チャンネル用のデータ要素と右チャンネル用のデータ要素とを含むことができる。同様に、画像データを考慮すると、データ構造は、赤、緑、青およびアルファ（ＲＧＢＡ）データ要素成分などの複数の成分を含むことができる。データ要素は、メモリシステム内で特定の方法で編成されることが多いが、それらのデータ要素をベクトルレジスタ内で異なって編成することが望ましい。例えば、各データ構造のデータ要素は、メモリ内で連続して配置されることができるが、ベクトルレジスタ内では、複数のデータ構造からの対応するデータ要素が各ベクトルレジスタ内で連続して配置されるように個々のデータ要素を並べ替えることが望ましい。したがって、前述の画像データの例を考慮すると、１つのベクトルレジスタ内に連続して配置されるべき多数のデータ構造のＲ成分に関する一連のデータ要素、別のベクトルレジスタ内で連続して配置されるべきＧ成分に関する一連のデータ要素を配置することなどが望ましい場合がある。そのような例では、ベクトルロード動作中にアクセスされるいくつかのデータ構造内のデータ要素は、それらがメモリからベクトルレジスタに移動されるときにデインターリーブされることができ、その後にベクトルストア動作中にベクトルレジスタからメモリに戻されるときにインターリーブされることができる。
【００５８】
ＬＳＵ２５内でそのような並べ替え動作をサポートすることによって、これは、後続の処理に必要な方法でそれらのデータ要素を配置するためにそれらがベクトルレジスタ内に格納された後にデータ要素に対していくつかの追加操作を実行するために追加命令を実行する必要性を回避するため、性能を大幅に改善することができる。しかしながら、そのようなベクトルロードまたはストア命令によって必要とされる計算量は非常に大きく、特定の実装においては、命令が数サイクルの間停止することを意味することがある。これは、性能の問題を引き起こす可能性があり、メモリと算術演算の重複実行を可能にするシステムではさらに悪化する可能性がある。
【００５９】
後述する実施形態によれば、１つのモノリシックロードまたはストア命令を使用する代わりに、並べ替え命令の群を形成する複数の並べ替え命令の実行の結果として並べ替え動作が実行されるように、並べ替え動作が複数の命令にわたって効果的に分割される。群内の各並べ替え命令は、群内の他の各並べ替え命令によって定義されたデータ要素アクセスパターンとは異なるデータ要素アクセスパターンを定義する。並べ替えアクセスパターンは、メモリ内でアクセスされるべきデータ要素のアドレスと評価されるべきベクトルレジスタの特定の部分との両方を識別するために使用される。
【００６０】
図５は、一実施形態にかかるベクトルレジスタ１４のセットを示している。この実施形態では、８つのベクトルレジスタＱ０からＱ７が設けられており、図５に示す実施形態では、各ベクトルレジスタは、複数のスカラーレジスタから形成されている。したがって、ベクトルレジスタＱ０  ５０は、４つのスカラーレジスタ５５、６０、６５、７０から形成される。スカラーレジスタは、独立してアクセスされることができ、実際にスカラーレジスタ内の個々の部分は、必要に応じてアクセスされることができる。図５の実施形態では、各ベクトルレジスタは、複数のスカラーレジスタから構成されているが、これは必須ではないが、ベクトルレジスタは構成され、ベクトルレジスタセットは、ベクトルレジスタ内の個々の部分が他の部分とは独立して更新できるように構成される。
【００６１】
各ベクトルレジスタ内に格納されるデータ要素の数は、データ要素のサイズに依存し、一実施形態では複数の異なるサイズのデータ要素がサポートされる。例えば、一実施形態では、ベクトルレジスタは１２８ビット長であり、システムによって処理されるデータ要素は、６４ビットデータ要素、３２ビットデータ要素、１６ビットデータ要素、または８ビットデータ要素とすることができる。これは単に例示的な例であり、他の実施形態では、ベクトルレジスタのサイズおよびサポートされるデータ要素のサイズは異なってもよいことが理解されよう。図５の特定の例を考慮すると、スカラーレジスタ５５、６０、６５、７０のそれぞれは、３２ビットレジスタであり、したがって、データ要素サイズが３２ビット以下の場合、各スカラーレジスタは、１つ以上のデータ要素を格納する。
【００６２】
後でより詳細に説明するように、ベクトルレジスタ１４のセットは、論理的には複数のセクション、例えば図５に示す第１のセクション７５と第２のセクション８０とから構成されるとみなすことができる。ベクトルレジスタは、図５では２つのセクションに論理的に分割されているように示されているが、必要に応じて、３つ以上のセクションに分割されることができる。後でより詳細に説明するように、群内の個々の並べ替え命令に対するアクセスパターンを適切に選択することによって、群内の各並べ替え命令の実行中に、メモリ内の連続ワードに対して別々のアクセスが行われるように構成されることができ、それらの別々のアクセスは、ベクトルレジスタ内の異なるセクション７５、８０に対して行われるように構成されることができる。これは、そのようなメモリアクセス命令と算術命令との重複を容易にする。例えば、１つのそのような並べ替え命令が第２のセクション８０にアクセスしている間に、第１のセクション７５にアクセスする算術命令を実行することができる。
【００６３】
図６は、一実施形態にかかる、一群の並べ替え命令がデインターリーブ動作を実行するように構成されることができる方法を示す図である。特に、２つのベクトルロード（ＶＬＤ）命令は、実行されると、まとめてデインターリーブ動作を実行する命令の群を形成する。これらのＶＬＤ命令は、ＶＬＤ２ｎ命令であり、「２」は２のストライド、すなわち、各データ構造内に２つのデータ要素があることを示す。「ＶＬＤ２０」命令内の「０」は、そのベクトルロード命令が群内の第１の命令であることを識別し、したがって、特定のアクセスパターン識別子を効果的に識別する。同様に、「ＶＬＤ２１」命令は、群内の第２の命令であり、「１」は、異なるアクセスパターン識別子を効果的に提供する。
【００６４】
図６からもわかるように、両方の命令は、それらが３２ビットデータ要素上で動作していることを識別し、同じ２つのベクトルレジスタ（この例ではＱ０およびＱ１）を識別する。ベースアドレスもまた、スカラーレジスタＲｎの内容によって指定される。第２の命令の末尾の「！」は、その命令の実行もまたレジスタＲｎのベースアドレスを更新させることを識別する。
【００６５】
図６に示す実施形態によれば、両方のベクトルロード命令に関連するアクセスパターンに２つの６４ビット連続メモリアクセスを実行させると仮定する。したがって、メモリワードサイズが３２ビットであると仮定すると、第１のアクセスは、２つの連続する３２ビットメモリワードにアクセスし、次に、第２のアクセスは、さらに２つの連続する３２ビットメモリワードにアクセスする。データ要素のサイズもまた３２ビットであるため、これは、各アクセスが２つの連続した３２ビットのデータ要素にアクセスすることを意味する。
【００６６】
図６に示される特定のアクセスパターンによれば、第１のＶＬＤ２ｎ命令の実行は、ＬＳＵ２５のアクセス／並べ替え動作１３０によるその第１の命令の第１のアクセスの処理中にデータ構造１０５にアクセスさせ、そして、その第１の命令の第２のアクセス中にデータ構造１２０にアクセスさせる。アクセスパターンはまた、図６のレジスタ内容１４０によって示されるように、第１のデータ構造１０５の２つのデータ要素（この例では、データ構造は、左右の音声成分からなる音声データを表すと仮定される）を２つのベクトルレジスタＱ０およびＱ１内の第１のレーンにロードさせる（ここで、「ｘ」は、これらの要素に対して更新が実行されず、以前の値が保持されることを示す）。以下の説明では、ベクトルレジスタ内の算術演算を実行するとき、各レーン内のデータ要素内で並列に演算を実行することができるため、ベクトルレジスタ内の各データ要素位置は、レーンと称される。
【００６７】
レジスタ内容１４５によって示されるように、第１の命令の第２のアクセスが実行されると、データ構造１２０のデータ要素は、ベクトルレジスタの最終レーン内に配置される。先に参照した図５から明らかなように、第１のベクトルロード命令の第１のアクセスは、ベクトルレジスタ１４の第１のセクション７５にアクセスする一方で、第２のアクセスは、第２のセクション８０にアクセスする。
【００６８】
同様に、図６に示されるように、第２のベクトルロード命令を実行した結果としてロード／ストアユニット１３０のアクセス／並べ替え動作が実行されると、第１のアクセスがデータ構造１１０にアクセスし、レジスタ内容１５０によって示されるように第２のレーン内に２つのデータ要素を格納し、そして、第２のアクセスがデータ構造１１５にアクセスし、ベクトルレジスタ内容１５５によって示されるように第３のレーンにデータ要素を格納する。ここでも同様に、第１のアクセスは、ベクトルレジスタの第１のセクション７５にアクセスし、第２のアクセスは、第２のセクション８０にアクセスすることがわかる。
【００６９】
図３を参照して前述した４ビート／ティックアプローチを採用し、少なくともクワッドバンクメモリシステムであるメモリシステムを仮定すると、そのようなアクセスパターンは、各ビートに関連付けられたアドレスが異なるメモリバンクにアクセスするため、各命令の第１および第２のアクセスが同時に起こることを可能にする。代わりに図３を参照して前述したように２ビート／ティック構成が使用される場合、各命令に対する第１および第２のアクセスは、次々に起こることができる。メモリが少なくとも２つのメモリバンクを備える場合、図６に示されるパターンの使用は、各アクセス中に２つのメモリバンクがアクセスされることを可能にし、したがって性能を改善する。
【００７０】
並べ替え命令の群をまとめて形成する並べ替え命令のそれぞれに関連するアクセスパターンは様々な形態をとることができる。前述のように、群内の各並べ替え命令は、群内の他の各並べ替え命令によって定義されたデータ要素アクセスパターンとは異なるデータ要素アクセスパターンを定義し、一実施形態では、これは、群内の各並べ替え命令の実行中に異なるデータ要素がメモリと複数のベクトルレジスタとの間で移動されることを保証する。さらに、アクセスパターンは、各並べ替え命令の実行中に２つ以上のベクトルレジスタがアクセスされるように定義される。一実施形態では、アクセスパターンは、各並べ替え命令の実行が並べ替え動作に関与する複数のベクトルレジスタのそれぞれにおいて少なくとも１つのデータ要素にアクセスさせるようなものである。そのようなアプローチは、アクセスパターンを実行することをより簡単にすることができることを見出した。
【００７１】
図７Ａから図７Ｇは、様々な異なるデータ要素サイズについて、群内の異なる並べ替え命令のそれぞれに関連付けることができるアクセスパターンの様々な異なる例を示している。これらは単なる例示であり、多くの異なるアクセスパターンもまた使用可能であることが理解されるであろう。これらの図は、パターンが、群内の各並べ替え命令の実行中にどのようにベクトルレジスタのどの部分がアクセスされるのかを決定し、どのメモリアドレスがアクセスされるのかを示している。図７Ａは、３２ビットデータ要素およびアクセスベクトルレジスタＱ０およびＱ１を操作する群内で２つのベクトルロード命令を実行するときに採用されるベクトルレジスタアクセスパターンを示しており、これらのパターンは、図６に概略的に示されるものに対応する。特に、アクセスパターン２００は、４つの部分２０５、２１０、２１５、２２０からなる。第１のベクトルロード命令が実行されると、ブロック２０５に示すように、第１のアクセスは、ベースアドレスに対してメモリオフセット０および４のアドレスにアクセスし、その内容をスカラーレジスタＳ０およびＳ４に格納する。そして、ブロック２１０に示すように、第１の命令の第２のアクセスは、オフセット２４および２８でメモリにアクセスし、その内容をスカラーレジスタＳ３およびＳ７に格納する。図７Ａでは、Ｓ０からＳ７（ベクトルレジスタＱ０およびＱ１を構成する）がアクセスされるが、アクセスされるスカラーレジスタは、並べ替え命令によって指定されたベクトルレジスタに依存することが理解されよう。別の例では、並べ替え命令は、例えば、宛先ベクトルレジスタとしてＱ１およびＱ２を指定することができ、その場合、スカラーレジスタＳ４からＳ１１がアクセスされることになる。
【００７２】
先に説明した図６から明らかなように、第１の命令の実行は、ベースレジスタの内容を更新させず、したがって、第２の命令が実行されると、オフセットは、同じベースアドレスに関して計算される。したがって、ブロック２１５に示すように、第２の命令の第１のアクセスは、ベースアドレスに関してメモリオフセット８および１２のアドレスにアクセスし、取り出されたデータ要素は、スカラーレジスタＳ１およびＳ５に格納される。同様に、第２のアクセスは、ブロック２２０に示すように、内容がスカラーレジスタＳ２およびＳ６に格納されている状態で、オフセット１６および２０でメモリにアクセスさせる。図５の先の説明から明らかなように、説明を容易にするためにスカラーレジスタ番号を参照しているが、それらのスカラーレジスタは、２つのベクトルレジスタＱ０およびＱ１を効果的に形成し、したがって、スカラーレジスタ番号は、単にベクトルレジスタの様々な部分を識別することが理解される。
【００７３】
図７Ｂは、ベクトルレジスタＱ０からＱ３にアクセスする４つのベクトルロード命令の群が４のストライドでベクトルロードを実施するために使用されるとき（すなわち、各データ構造が４つのデータ要素を含む場合、例えば、前述のＲＧＢＡの例の場合である）に使用可能な別の一連のベクトルレジスタアクセスパターン２２５を示している。ここでも同様に、データ要素は、３２ビットサイズであると仮定する。第１の命令が実行されると、ボックス２３０、２３５によって示される２つのアクセスを実行し、ベースアドレスに関して０および４のオフセットを有する２つのデータ要素を取得し、それらをスカラーレジスタ位置Ｓ０およびＳ４に格納し、そして、第２のアクセスは、ベースアドレスに関してメモリオフセット４０および４４で２つのデータ要素にアクセスし、それらをスカラーレジスタＳ１０およびＳ１４に格納する。第２の命令が実行されると、２つのブロック２４０および２４５によって示されるアクセスを実行する。同様に、第３の命令が実行されると、ブロック２５０および２５５によって示される２つのアクセスを実行する。最後に、第４の命令が実行されると、ブロック２６０および２６５によって示される２つのアクセスを実行する。
【００７４】
群内のどの命令にどのアクセスパターンが関連付けられているかは、全てのアクセスパターンをまとめて使用する場合には重要ではないことが理解されよう。このコメントは、図７Ａから図７Ｇの全ての例に等しくあてはまる。
【００７５】
ＶＬＤ２ｎ命令について図６を参照して前述したのと同じ表現を使用すると、図７Ｂに概略的に示されているアクセスパターンを実行するために使用される４つのベクトルロード命令は、以下の形式をとることができる：
ＶＬＤ４０．３２｛Ｑ０−Ｑ３｝、［Ｒｎ］
ＶＬＤ４１．３２｛Ｑ０−Ｑ３｝、［Ｒｎ］
ＶＬＤ４２．３２｛Ｑ０−Ｑ３｝、［Ｒｎ］
ＶＬＤ４３．３２｛Ｑ０−Ｑ３｝、［Ｒｎ］！
【００７６】
図７Ｂから明らかなように、各ＶＬＤ４ｎ命令が実行されると、それは図７Ｂに示されるパターンにしたがって４つのベクトルレジスタの４分の１に書き込む。図７Ａおよび図７Ｂの検討から明らかなように、ＶＬＤ２ｎおよびＶＬＤ４ｎ命令群の両方に対して、各命令は、２つの６４ビット連続メモリアクセスを実行する。さらに、アドレスビット［３：２］は、単一の命令によって実行されるワードアクセスごとに異なり、そのため、そのメモリサブシステムが複数のメモリバンクを採用するとき、メモリサブシステムへのより効率的なアクセスが可能になる。さらに、メモリとレジスタのアクセスパターンは、両方とも、ビット単位のロジックで簡単に計算できるように設計されている。これは、ＶＬＤ４ｎ命令の群を参照して例として図８および図９において後で説明される。
【００７７】
また、各命令が実行されると、ベクトルレジスタファイルの各半分に６４ビットを格納することがわかる。これは、デュアルビートアーキテクチャでは、レジスタファイルの中心線を横切るアクセスがないことを意味し、したがって、命令は、余分な依存性チェックまたは停止を必要とせずに前述のメモリの重複実行および算術演算と互換性がある。これらの要因は、命令を実行することを容易にし、メモリサブシステムの効率的な使用を可能にする。
【００７８】
図７Ｃおよび７Ｄは、データ要素サイズが３２ビットではなく１６ビットであるときに、ＶＬＤ２ｎおよびＶＬＤ４ｎ群の命令に使用できる等価アクセスパターン３００、３１０を示している。図７Ｃを考慮すると、アクセスパターン３００は、第１のＶＬＤ命令の２つのアクセスによってアクセスされるブロック３０２、３０４と、第２のＶＬＤ命令の２つのアクセスによってアクセスされるブロック３０６、３０８とからなる。
【００７９】
同様に、図７Ｄを考慮すると、アクセスパターン３１０は、第１の命令の２つのアクセスに関連するブロック３１２、３１４、次の命令の２つのアクセスに関連するブロック３１６、３１８、第３の命令の２つのアクセスに関連する命令のブロック３２０、３２２、および第４の命令の２つのアクセスに関連するブロック３２４、３２６からなる。
【００８０】
図７Ｃおよび図７Ｄと図７Ａおよび図７Ｂとの比較から明らかなように、ベースアドレスオフセットは、データ要素サイズが、図７Ａおよび図７Ｂの例の場合の３２ビットではなく、図７Ｃおよび図７Ｄの例の場合の１６ビットであることに起因して、図７Ａおよび図７Ｂの各ブロック内で４ずつ増加するのとは対照的に、図７Ｃおよび図７Ｄの各ブロックで２ずつ増加する。
【００８１】
前述の例では、各命令は２つのアクセスを実行するが、必要に応じて各命令に対して３つ以上のアクセスを実行することができる。例えば、図７Ｅは、４つのアクセス（それぞれ３２ビット連続アクセス）が各命令に関連付けられている一連の代替アクセスパターン３３０を示している。ここでも同様に、アクセスは、複数のメモリバンク間で分割されることができる。
【００８２】
図７Ｆおよび７Ｇは、データ要素サイズが８ビットであるときにＶＬＤ２ｎおよびＶＬＤ４ｎ命令に採用することができる例示的なアクセスパターン４００、４１０を示している。したがって、図７Ｆを考慮すると、第１のＶＬＤ２ｎ命令は、第１のアクセス中にブロック４０２にアクセスさせ、第２のアクセス中にブロック４０４にアクセスさせる一方で、第２のＶＬＤ２ｎ命令は、第１のアクセス中にブロック４０６にアクセスさせ、第２のアクセス中にブロック４０８にアクセスさせる。
【００８３】
図７Ｇは、４つのＶＬＤ４ｎ命令の群に対する一連のアクセスパターン４１０を示している。第１のＶＬＤ４ｎ命令は、第１のアクセス中にブロック４１２にアクセスさせ、第２のアクセス中にブロック４１４にアクセスさせる一方で、第２のＶＬＤ４ｎ命令は、第１のアクセス中にブロック４１６にアクセスさせ、第２のアクセス中にブロック４１８にアクセスさせる。同様に、第３のＶＬＤ４ｎ命令は、第１のアクセス中にブロック４２０にアクセスさせ、第２のアクセス中にブロック４２２にアクセスさせる一方で、最後のＶＬＤ４ｎ命令は、第１のアクセス中にブロック４２４にアクセスさせ、第２のアクセス中にブロック４２６にアクセスさせる。前述のように、群内のどの命令にどのアクセスパターンが関連付けられているかは、必要に応じて変更することができる。
【００８４】
図７Ａから図７Ｇは、ベクトルロード命令の群に関連して使用されるアクセスパターンを示しているが、対応するベクトルストア命令の群にも同じアクセスパターンを使用することができ、唯一の違いは、データが、メモリからベクトルレジスタに移動するのではなく、ベクトルレジスタからメモリに戻されることである。
【００８５】
図８は、特定の命令によって指定されたパターン識別子と、命令のどのビートが現在処理されているかを識別するビート識別子ビットとを用いてメモリへのアドレスワードオフセットをどのように生成できるか、したがって、どの程度のパターンまでプロセスが到達したかを示す図である。図示の論理は、図７Ｂに示すメモリアクセスパターンを生成するために使用されるＶＬＤ４ｎ命令の群に使用される。２ビットパターンＩＤ値５０５は、ビートＩＤのビット１とともに、加算器５１０の入力に供給される。ビートＩＤのビット０は、経路５２０を介して出力され、ビートＩＤのビート１は、経路５００を介して出力される。加算器は、経路５１５を介した出力を生成する。まとめて、出力５００、５１５、５２０は、図８に示すアドレスワードオフセットを形成し、したがって４ビットアドレスワードオフセットを生成する。そして、その値に４を乗算してバイトアドレスを取得し、次にこれをアクセスする実際のメモリアドレスを識別するためにレジスタＲｎのベースアドレスに追加する。
【００８６】
例として、図７Ｂのブロック２３０および２３５によって示される特定のパターンの第１および第２のアクセスを考えると、最初の３２ビットビートに対して生成されるアドレスワードオフセットは００００であることが理解されるであろう（このバターンの場合、バターンＩＤは００であると仮定される）。次のビートでは、ビートＩＤビット０が０から１に変わるため、オフセットは、０００１になる。次のビートでは、ビートＩＤビット０は０に戻るが、ビートＩＤビット１は、値１に変わる。これは、アドレスワードオフセットを１０１０にさせ、４倍されると図７Ｂのブロック２３５の第１のワードアクセスについて示されるように４０のバイトアドレスオフセットを与える。次に、最後のビートに対して、ビートＩＤビット０は、１に変化して１０１１のアドレスワードオフセットを与え、ブロック２３５において最後のワードアクセスに関連する４４のバイトアドレスオフセットを識別する。
【００８７】
図８のアドレス生成論理の上記説明は、３２ビットデータ要素が処理される図７Ｂの例を参照しているが、例えば、図７Ｄまたは図７Ｇのアクセスパターンを使用するときの１６ビットまたは８ビットのデータ要素など、異なるサイズのデータ要素で処理されるＶＬＤ４ｎ命令について同じアドレス生成論理を使用することができる。しかしながら、図７Ｅの代替アクセスパターンが使用された場合、アドレス生成論理は、それに応じて変更される必要があるであろう。
【００８８】
図９は、ＶＬＤ４ｎ命令の群を実行するときにアクセスされるべきベクトルレジスタ内の特定の部分を識別するために使用することができる論理を示すブロック図である。前述のビート識別ビットおよびパターン識別ビットに加えて、要素識別ビットも提供されるが、これらのビットは、データ要素サイズが３２ビット未満の場合にのみ使用される。様々なビートＩＤおよびパターンＩＤビットは、図９に示されるゲート５３５、５４０、５４５を使用して論理的に組み合わされる。ｘレジスタ識別子は、図５の右側から始めて、ベクトルレジスタ内の４つのスカラーレジスタのどれにアクセスするかを識別する。したがって、００のｘレジスタ識別子は、ベクトルレジスタの右端のスカラーレジスタを識別し、０１のｘレジスタ識別子は、左側の次のスカラーレジスタを識別するなどである。ｙレジスタオフセットビットは、命令によって識別された第１のＱレジスタに対するオフセットを識別する。いくつかの命令は、第１のレジスタとしてＱ０を指定することができるが、これは必須ではなく、したがって単に例示として、第１のベクトルレジスタは、Ｑ４であり、次にｙレジスタオフセットは、Ｑ４に対して図５に示される垂直方向に指定される。ｘ要素オフセットビットは、データ要素サイズが１６または８ビットである状況で、識別されたスカラーレジスタのどの部分がアクセスされるかを識別するために使用される。図９からわかるように、サイズ情報は、各マルチプレクサ５５０、５６０、５７０、５８０への制御入力として提供され、データ要素サイズが３２ビットのとき、両マルチプレクサ５７０、５８０からの出力は、論理０の値であるため、ｘ要素オフセットは、影響を受けない。１６ビットデータ要素の場合、ｘ要素オフセットビット０は、マルチプレクサ５８０の出力によって制御され、ｘ要素オフセットビット１は、マルチプレクサ５７０からの出力によって０に固定される。しかしながら、８ビットデータ要素の場合、マルチプレクサ５７０、５８０の両方は、それらの最も低い入力に依存して出力を生成するので、ｘ要素オフセット値の両方のビットが使用される。
【００８９】
先の議論から明らかになるように、パターンＩＤ値は、特定の命令のオペコードによって効果的に特定される。ビートＩＤおよび要素ＩＤ情報は、様々な方法で維持されることができ、例えば、各並べ替え命令を実行するときにＬＳＵ２５によって参照されるローカルカウンタに維持されることができる。
【００９０】
図９の論理は、異なるサイズのデータ要素、例えば図７Ｂ、図７Ｄまたは図７Ｇのアクセスパターンを使用するときにはそれぞれ３２ビット、１６ビットまたは８ビットのデータ要素で動作するＶＬＤ４ｎ命令に使用することができる。しかしながら、図７Ｅの代替アクセスパターンを使用した場合は、それに応じて図９の論理を変更する必要がある。
【００９１】
図１０は、メモリからのデータをデインターリーブし（例えば、左右オーディオチャンネル）、そのデータに対して積和演算を実行するいくつかの例示的なコードを示している。図からわかるように、ＶＬＤ２ｎ命令は、２つの命令からなる群として配置され、その群は、図１０に示すコードのセクションで２回実行される。図の右側部分に示されているように、これらの新しい並べ替え命令の群は、メモリインターフェースと積和演算ハードウェアの両方を、機能停止なしに１００％の時間ビジー状態に保つことを可能にする。図示の例では、１ティックあたり２ビートの配置が使用され、したがって、各ＶＬＤ命令は、適切な積和命令と重複されることができ、それら２つの命令は、ベクトルレジスタの異なるセクションにアクセスする。
【００９２】
図１１Ａから図１１Ｄは、２つのストライド（２つのベクトル命令が群を形成するように配置されている場合）および４つのストライド（４つのベクトル命令が群を形成するように配置されている場合）について、一実施形態で提供されることができるベクトルロード命令およびベクトルストア命令の特定の符号化を示している。まず、図１１ＡのＶＬＤ２ｎ命令を考えると、各ＶＬＤ２ｎ命令が実行されると、２つの６４ビット連続データブロックがメモリからロードされ、２つの宛先レジスタの一部に書き込まれる。書き込まれる宛先レジスタの部分、およびベースアドレスレジスタからのオフセットは、「ｐａｔ」パラメータによって決定される。命令が同じベースアドレスと宛先レジスタで２回実行されたが、異なる「ｐａｔ」値を有する場合、その効果は、メモリからデータをロードし、２のストライドで指定されたレジスタにデインターリーブすることである。ベースアドレスレジスタは、３２バイトのデータが処理されたことを示し且つＶＬＤ２ｎ命令の次の群に備えてベースレジスタ内のポインタを更新するために、群内の第２の命令の実行時に必要に応じて３２だけインクリメントされることができる。
【００９３】
図１１ＢのＶＬＤ４ｎ命令を考えると、そのような命令が実行されるたびに、それはまたメモリから２つの６４ビット連続データブロックをロードするが、この場合、４つの宛先レジスタの一部にデータを書き込む。書き込まれる宛先レジスタの部分、およびベースアドレスレジスタからのオフセットは、「ｐａｔ」パラメータによって決定される。命令が同じベースアドレスと宛先レジスタで４回実行されたが、異なる「ｐａｔ」値を有する場合、その効果は、メモリからデータをロードし、４のストライドで指定されたレジスタにデインターリーブすることである。ベースアドレスレジスタは、群内の最後の命令の実行時に必要に応じて６４だけインクリメントされることによって、６４バイトのデータが処理されたことを示すことができる。
【００９４】
図１１Ｃのベクトルストア命令（ＶＳＴ２）を考えると、この命令が実行されるたびに、それは２つのソースレジスタの複数の部分からなるメモリに２つの６４ビット連続データブロックを保存する。ソースレジスタから読み出される部分、およびベースアドレスレジスタからのオフセットは、「ｐａｔ」パラメータによって決定される。命令が同じベースアドレスとソースレジスタで２回実行されたが、異なる「ｐａｔ」値を有する場合、その効果は、指定されたレジスタからのデータを２のストライドでインターリーブし、結果のデータをメモリに保存することである。ベースアドレスレジスタは、必要に応じて３２だけインクリメントされることができる。
【００９５】
図１１ＤのＶＳＴ４命令を考えると、これも同様に、実行されるたびに２つの６４ビット連続データブロックをメモリに保存し、この場合、連続ブロックは、４つのソースレジスタの複数部分からのデータから構成される。ソースレジスタから読み出される部分、およびベースアドレスレジスタからのオフセットは、「ｐａｔ」パラメータによって決定される。命令が同じベースアドレスレジスタとソースレジスタで４回実行されたが、異なる「ｐａｔ」値を有する場合、その効果は、指定されたレジスタのデータ要素を４のストライドでインターリーブし、結果のデータをメモリに保存することである。ベースアドレスレジスタは、必要に応じて６４だけインクリメントされることができる。
【００９６】
図１２は、群の前述の並べ替え命令を含む一連のプログラム命令を復号するときの復号器６の動作を示すフロー図である。ステップ６５０において、現在の命令が分析され、その後、ステップ６５５において、その命令が群の並べ替え命令であるかどうかが判定される。そうでなければ、ステップ６６０において、関連する実行ユニットに対する制御信号を生成するために命令に関して標準的な復号動作が実行され、その後、ステップ６６５において、復号器は、次の命令に移動した後、ステップ６５０に戻る。
【００９７】
ステップ６５５において、分析中の現在の命令が群の並べ替え命令であると判定された場合、ステップ６７０において、その群のどのメンバの命令であるかが識別され、これは、前述の「ｐａｔ」値を参照することによって達成される。その後、ステップ６７５において、命令が群のどのメンバであるかに応じてデータ要素アクセスパターン指示が生成され、ステップ６８０において、データ要素アクセスパターンインジケータを含むロードストアユニットの制御信号を生成するために残りの復号動作が実行される。
【００９８】
一実施形態では、図８および図９の先の説明から理解されるように、ステップ６７５において生成されたデータ要素アクセスパターンインジケータは、ＬＳＵにより命令オペコードから抽出された「ｐａｔ」ビットによって効果的に単に形成されることができ、そして、適切なメモリアクセスおよびレジスタアクセスパターンを生成するために、ビート識別子（および必要に応じて要素識別子情報）と組み合わせてこの情報を使用する。
【００９９】
ステップ６８０に続いて、プロセスは、ステップ６６５を介してステップ６５０に戻る。
【０１００】
前述のように、群内の１つ以上の命令は、指定されたベースアドレスレジスタ内のベースアドレスを更新するように構成されることができる。特定の一実施形態では、群内の最後の命令がベースアドレスレジスタの更新を実行するために使用され、ベースアドレス値が更新される量は、群内の並べ替え命令によって実行される全てのアクセスを考慮する。
【０１０１】
必要に応じて、そのようなロードまたはストア命令を実行するときに実行される動作はまた、データ拡大またはデータ縮小機能を含むように拡張されることもできる。これは、データがベクトルレジスタ内に格納されている形式とは異なる形式でメモリに格納されている場合に有用であり得る。例えば、それは、ベクトルレジスタ内にあるよりも切り捨てられた形式でメモリに格納されてもよい。図１３は、データがメモリからベクトルレジスタにロードされるときにデータ拡大を実行しようとするときに実行されることができる一連のステップを示している。特に、群内の各並べ替え命令を実行するときに実行されるメモリへの各アクセス中に、図１３のプロセスを実行することができる。ステップ７００において、関連データ要素がメモリ位置から取得され、各データ要素が第１のサイズを有する。次に、ステップ７０５において、第２のサイズのデータ要素を生成するために、それらのデータ要素に対して（例えば、メモリから取得された値をゼロ拡張または符号拡張することによって）データ拡大動作が実行される。
【０１０２】
次に、ステップ７１０において、書き込まれるべきベクトルレジスタ部分がデータ要素アクセスパターン情報（および図９を参照して前述したようにビート情報など）から決定され、次にステップ７１５において、拡大されたデータ要素がベクトルレジスタの識別された部分に書き込まれる。
【０１０３】
必要に応じて同等のデータ絞り込み機能を実行することができ、取得されたデータをゼロまたは符号拡張する代わりに、取得されたデータ要素の切り捨てが実行されることを理解されたい。一実施形態では、データは、メモリからベクトルレジスタに取り出されるときに拡大され、ベクトルレジスタからメモリに戻されるときに縮小されるが、代替実施形態では、データは、メモリから取り出されるときに縮小され、メモリに戻されるときに拡大されてもよい。
【０１０４】
必要に応じて、アクセスされたアドレス範囲内の１つ以上のデータ構造を処理から除外させるように、一群の並べ替え命令が述語情報によって限定されることができる。図７Ａから図７Ｇに先に示したアクセスパターンから明らかなように、１つ以上のデータ構造を処理から除外しようとするときに、これが群内の任意の個々の命令に対して実行される処理に何らかの影響を与えるかどうかに関する決定は、アクセスパターンに依存する。例えば、アクセスパターンが図７Ｂに示される形式を取り得るＶＬＤ４ｎ命令群を考え、第２のレーンに配置されるべきデータ構造を処理から除外することが決定される場合、これは、ブロック２５０に関連するアクセスを実行するＶＬＤ４ｎ命令の第１のアクセスおよびブロック２６０に関連するＶＬＤ４ｎ命令の第１のアクセスに影響を与えることがわかる。しかしながら、他のＶＬＤ４ｎ命令は、正常に実行されることができる。
【０１０５】
一実施形態では、図１４Ａに示すような述語レジスタ７５０を使用して述語値を指定することができる。一実施形態では、これは、１６ビットレジスタとすることができ、述語レジスタのどのビットが使用されるかは、データ要素のサイズに依存する。例えば、ベクトルレジスタが１２８ビット幅であり、データ要素が３２ビットサイズである場合、ベクトルレジスタあたり４つのデータ要素があり、ＬＳＵは、述語情報の評価時に述語レジスタ７５０の４ビットごとにのみ参照するように構成されることができる。同様に、１６ビットデータ要素については、それは１ビットおきに見るように構成されることができる一方で、８ビットデータ要素については、それは述語レジスタの全てのビットを見るように構成されることができる。これは、ＬＳＵによって参照されることを要求される述語情報を実装する方法の単なる例であり、述語情報を表現する他の方法が使用されてもよいことが理解されるであろう。
【０１０６】
図１４Ｂは、群内の各並べ替え命令の実行中に述語情報がどのように使用されるかを概略的に示すフロー図である。ステップ７６０において、現在の命令が述語付きであるかどうかが判定される。一実施形態では、述語レジスタ７５０を設定するために別個の命令が使用され、一実施形態では、その命令はまた、後続の「Ｍ」個の命令が記載されるべきであることを識別する。したがって、一例として、そのような命令は、ＶＬＤ４ｎ命令の群の前に実行されてもよく、４つのＶＬＤ４ｎ命令のそれらの群が記載されるべきであることを識別する。
【０１０７】
現在の命令が記載されないことが決定されると、プロセスは、ステップ７７５に進み、そこで、ＬＳＵは、必要なロードまたはストア動作および関連する並べ替えを実行するために必要なデータ要素にアクセスするためにメモリへの１つ以上のアクセスを実行する。
【０１０８】
しかしながら、ステップ７６０において現在の命令が記載されると判定された場合、ステップ７６５において、命令によって処理されているデータ要素サイズに応じて、述語レジスタのどのビットを使用するかが決定される。その後、ステップ７７０において、関連する述語ビットが現在の命令に関連したアクセスパターン情報とともに分析され、命令を実行するために必要とされるアクセスに対する述語ビットの効果があればそれを決定する。図７Ｂを参照して説明した上述の例をとると、これは、ブロック２５０へのアクセスを実行するＶＬＤ４ｎ命令が実行されると、その第１のアクセスが必要ではないと判定し、同様に、ブロック２６０へのアクセスを実行するＶＬＤ４ｎ命令が実行されると、その第１のアクセスが必要ではないと判定し、述語情報が第２のレーンに関連するデータ構造の処理から除外しようとしていると仮定することを意味する。
【０１０９】
ステップ７７０における分析に続いて、ステップ７７５において、必要なデータ要素にアクセスするためにメモリへの１つ以上のアクセスが実行される。言うまでもなく、述語情報は、原則として、１つ以上の並べ替え命令についてアクセスを実行する必要がないことを意味することができ、したがって、これらの例では、ステップ７７５においてアクセスは実行されないことになる。
【０１１０】
上述の実施形態から、ベクトルロード命令およびストア命令を使用して並べ替え動作（インターリーブ演算およびデインターリーブ演算など）を実行しようとするとき、必要な並べ替え動作を実行するために群に配置された複数の別々の命令を使用することによって処理を改善できることが理解されよう。特に、そのようなアプローチは、ロード命令またはストア命令を実行するときに停止サイクルが導入される可能性を大幅に低減することができる。さらに、各命令に関連するアクセスパターンを適切に配置することによって、命令をメモリと算術命令との重複実行を可能にするアーキテクチャと互換性を持たせることができ、したがって性能がさらに向上する。前述のアプローチを採用することによって、命令を容易に実行することができ、メモリサブシステムを効率的に使用することが可能になる。
【０１１１】
以下の実施形態は、ベクトルレジスタのセットにアクセスするための新規な構成を説明する。そのようなアプローチは、様々な状況で有用であり得る。一例として、それは、前述の様々なデータ要素アクセスパターンの使用を容易にすることができる。
【０１１２】
図１５は、一実施形態にかかる書き込みアクセス回路を有するベクトルレジスタファイル８００の一部を概略的に示している。ベクトルレジスタファイル８００は、多数のベクトルレジスタから構成され、各ベクトルレジスタは、多数のスカラーレジスタから構成されている。図１５に示される実施形態では、ベクトルレジスタファイル８００の一部は、図１５内の行として表される４つのベクトルレジスタ８０５、８１０、８１５、８２０の一部を示している。各ベクトルレジスタ８０５、８１０、８１５、８２０は、いくつかのスカラーレジスタを使用することによってベクトルを格納する。例えば、第１のベクトルレジスタ８０５は、２つのスカラーレジスタ−ｓ０およびｓ１から部分的に構成される一方で、第２のベクトルレジスタ８１０は、２つの他のスカラーレジスタ−ｓ４およびｓ５から部分的に構成されている。ベクトルレジスタファイル８００に加えて、（レジスタアクセス回路の一例である）書き込みアクセス回路８３０が提供される。書き込みアクセス回路は、第１のアクセスブロック８３５と第２のアクセスブロック８４０とを含み、図２４を参照してより詳細に説明される。各アクセスブロックは、一度にベクトルの一部にアクセスすることができる。したがって、同時にアクセスされる（例えば書き込まれる）ことができるデータ量は制限される。特に、第１のアクセスブロック８３５と第２のアクセスブロック８４０で同時に提供されるベクトルレジスタファイル８００に同時にデータを書き込むことのみが可能である。この例では、便宜上、１つの部分がスカラーレジスタと同じサイズであると仮定される。図１５の実施形態では、レジスタファイル８００の一部は、２つの列８４５、８５０を含む。各列は、各ベクトルの同じ部分を格納する。この例では、部分サイズは、スカラーレジスタサイズと同じであるため、列は、スカラーレジスタｓ０、ｓ１、ｓ４、ｓ５、ｓ８、ｓ９、ｓ１２、ｓ１３と整列する。
【０１１３】
図１５に示すように、スカラーレジスタは、２つのポート８３５、８４０のうちの一方に配線されている。図１５の例では、スカラーレジスタｓ０、ｓ５、ｓ８、およびｓ１３は、第１のアクセスブロック８３５に配線されているのに対し、スカラーレジスタｓ１、ｓ４、ｓ９、およびｓ１２は、第２のアクセスブロック８４０に配線されている。概略的な観点から、図１５を参照して示される配線は、多数のねじれを含むことが理解されるであろう。換言すれば、互いの上または下にある全てのスカラーレジスタを同じポートに単に配線するだけではなく、配線の論理的なねじれが発生する。このようにして、書き込みアクセス回路が、スカラーレジスタｓ０およびｓ１など、行内にあるスカラーレジスタ（すなわち、同じベクトルレジスタの一部）に同時に書き込むことが可能である。同じ書き込みアクセス回路はまた、スカラーレジスタｓ０およびｓ４などの同じ列にあるスカラーレジスタに同時に書き込むこともできる。これは、一対のスカラーレジスタｓ０およびｓ４、ならびに一対のスカラーレジスタｓ０およびｓ１が異なるポート８３５、８４０に配線されているためである。なお、ここでは配線のツイストについて言及しているが、実際には配線が物理的にねじれている必要はない。スカラーレジスタ自体は、配線がまっすぐになるように（同じ論理識別子／アドレスをリネームしながら）物理的に並べ替えることができ、同じ効果を生み出すことができることを理解されたい。
【０１１４】
同様の概念が、図１６に示すようなレジスタアクセス回路の他の例である読み取りアクセス回路８５５にもあてはまる。この例では、読み取りアクセス回路８５５はまた、第１のアクセスブロック８６０および第２のアクセスブロック８６５を有する。スカラーレジスタのうちのいくつか−ｓ０、ｓ５、ｓ８、およびｓ１３は、第１のアクセスブロック８６０に接続される一方で、他のもの−ｓ１、ｓ４、ｓ９、およびｓ１２は、第２のアクセスブロック８６５に接続される。したがって、スカラーレジスタのうちの２つに同時にアクセスする（例えば、そこから読み取る）ことができ、ねじれ配線によって、レジスタｓ４およびｓ５などのベクトルレジスタ８０５、８１０、８１５、８２０のうちの１つからの２つのレジスタ、またはレジスタｓ４およびｓ８などの同じ列にある２つのレジスタのいずれかを読み取ることが可能である。これは、同じ列にあるレジスタが、それらが接続されているアクセスブロックを交互に配置し、また各列のレジスタが、それらが接続されているアクセスブロックを交互に配置しているためである。図１５および図１６に示す実施形態では、配線は同様の方法で示されているが、図１５の書き込みアクセス回路８３０および図１６の読み取りアクセス回路８５５に関して異なる物理的ワイヤが使用されていることに留意されたい。しかしながら、これは必須ではなく、他の実施形態は、書き込みアクセス回路８３０および読み取りアクセス回路８５５の両方に全く同じ配線を使用することができる。
【０１１５】
図１７は、一実施形態にかかる書き込みアクセス回路を有するベクトルレジスタファイル８００を概略的に示している。ベクトルレジスタファイル８００は、第１の書き込みアクセス回路８８０を有する第１のセクション８７０と、第２の書き込みアクセス回路８８５を有する第２のセクション８７５とからなる。書き込み回路８８０、８８５のそれぞれは、その関連するセクションの一部である列内の部分にのみアクセスする。例えば、第１の書き込みアクセス回路８８０は、第１のセクション８７０の列内の部分にのみアクセスする一方で、第２の書き込みアクセス回路８８５は、第２のセクション８７５の列内の部分にのみアクセスする。したがって、ねじれがセクションの境界を横切って延在しないことが理解されるであろう。
【０１１６】
図１８は、第１の読み取りアクセス回路８９０および第２の読み取りアクセス回路８９５を有するベクトルレジスタファイル８００を概略的に示している。図１７に示す実施形態の場合のように、第１の読み取りアクセス回路８９０は、第１のセクション８７０内の列内の部分にアクセスし、第２の読み取りアクセス回路８９５は、第２のセクション８７５内の列内の部分にアクセスする。
【０１１７】
図１９Ａは、ベクトルレジスタファイル内の単一のねじれの例を示しており、ベクトルレジスタファイルは、ワードを示すテキスト形式で示されている。図１９Ａの例では、各ベクトルは、４列にわたって広がる４つの部分を含む。前と同様に、各列は、各ベクトルの同じ部分を格納する。しかしながら、ラベルＡ、Ｂ、Ｃ、およびＤは、同じポートを介してアクセスされる部分を示すために提供されている。したがって、Ｑ０からＱ７までベクトルレジスタを通って上方に進むときにＡとラベリングされた円で囲まれた部分が第３列と第４列との間でどのように交互に交替するかがわかる。各部分のパターンは、２１、すなわち２列にわたって分布しているため、ベクトルレジスタファイルは、単一ねじれを有すると言われる。
【０１１８】
図１９Ｂは、ベクトルレジスタファイル内の単一ねじれの例を示しており、ベクトルレジスタファイルは、バイトを示すテキスト形式で示されている。図１９Ｂは、図１９Ｂがベクトルレジスタファイルをバイト形式で示している以外は図１９Ａに対応する。特に、各ワードは、４バイトから構成されている（すなわち、各ワードは３２ビットである）ことが示されている。各ワードを構成する４バイトは、各ラベルの末尾に番号付きの添え字を追加することによって示されている。例えば、Ａとラベリングされたワードは、Ａ０、Ａ１、Ａ２、およびＡ３とラベリングされたバイトから構成されている。ここでも同様に、単一ねじれパターンは、Ａというワードを構成する全てのバイトを取り巻くことによって示されている。また、パターンは、２列にわたって分散していることがわかる。
【０１１９】
場合によっては、ベクタレジスタファイルに対してより広い範囲のアクセスパターンを指定する必要がある。例えば、ベクトルがそれぞれ１６ビットの８つのデータ要素を含む場合、各ベクトルは１２８ビットになる。したがって、２つのセクションの場合、各セクションは６４ビットになる。したがって、各ベクトルの各アクセス部分は、１６ビットである必要があるため、各セクションに６４／１６＝４列が設けられる必要がある。同じ列からの部分に同時にアクセスし、同じ回路が同じ商レジスタからの部分に同時にアクセスできるようにするために、２回以上のねじれを与える必要がある。特に、第２の３２ビットねじれパターン内に入れ子にされた第１の１６ビットねじれパターンを提供することが必要であろう。
【０１２０】
図２０は、そのようなパターンの１つを示しており、図１９Ｂに示される合計４列（セクションあたり２）とは対照的に合計８列（セクションあたり４）を使用するが、便宜上、図１９Ｂと同じラベリングを使用する。図２０の例は、楕円を含む第１の３２ビットのねじれパターンを示しており、Ａ個の要素全てを包含し、１＋２列と３＋４列を交互に繰り返す。１６ビットねじれパターン（長方形で表示）は、より複雑であり、読み取りまたは書き込みアクセス回路のポートの１つに行われる接続を表している。特に、各楕円内の２対の列に対して、アクセス回路は、２つのベクトルレジスタごとに左対と右対を接続することを交互に繰り返す。例えば、ベクトルレジスタＱ０では、右楕円の右対が接続されている。これは、さらに２つのベクトルレジスタの後に（すなわち、ベクトルレジスタＱ２において）右楕円の左対と交番する。さらに２つのレジスタの後に（すなわち、ベクトルレジスタＱ４において）、右楕円の右対が再びアクセスされる。同様のパターンが左楕円に関しても発生する。特に、ベクトルレジスタＱ１では、左楕円の右対が接続され、左楕円の左対が接続されるように、これはさらに２つのレジスタの後に（すなわち、ベクトルレジスタＱ３において）交番する。この場合もやはり、これは、さらに２つのベクトルレジスタの後に（すなわち、ベクトルレジスタＱ５において）左楕円の右対に戻る。別の見方をすると、列１、３、２、および４（列を右から左に数える）は、アクセス回路のポートの１つによってベクトルレジスタＱ０からＱ３にわたってアクセスされる。換言すれば、アクセスブロックは、各ベクトルレジスタＱ０からＱ３にわたって各セクション内の異なる列にアクセスする。ベクトルレジスタＱ３の後、パターンは繰り返される。
【０１２１】
セクション内の各列について、配線パターンが繰り返される前に「通過」しなければならないベクトルレジスタの数は、列数に等しいことが理解されよう。
【０１２２】
図２０において、「ねじれサイズ」、すなわち、ねじれの影響を受ける部分のサイズがデータ要素サイズと異なり得ることも明らかであることに留意されたい。これは、特定の配線の配置でベクトルレジスタファイルを作成すると、発生する可能性のあるねじれの程度（および列数）が固定されるためである。その時点で、ベクトルレジスタファイルは、データ要素のサイズに依存しなくなる。特に、図２０の場合のように、部分サイズが１６ビットである場合、図２０の場合と同様に、同じレジスタファイルを使用して１６ビットデータ要素または３２ビットデータ要素を格納することができる。
【０１２３】
図２１は、一実施形態にしたがって回路が二重ねじれを実行するベクトルレジスタファイル９００の１つのセクションを概略的に示している。例えば、図２１の概略図は、図２０に示す二重ねじれパターンに対応することができる。図２１に示す実施形態では、ベクトルレジスタは、それぞれ３２ビットの複数のスカラーレジスタｓ０、ｓ１、ｓ４、ｓ５、ｓ８、ｓ９、ｓ１２、ｓ１３からなる。しかしながら、各部分のサイズは、１６ビットである。その結果、各スカラーレジスタは、２つの部分を格納し、図２１に示されるセクションは、４列を含む。図２１に示される実施形態は、４つの異なる様式の線９０５、９１０、９１５、９２０を示している。線９０５、９１０、９１５、９２０のそれぞれは、配線、またはアクセス回路の同じアクセスブロックに接続されている部分を表す。ライン９０５のうちの１つが図２０に関して示された接続パターンに対応することに留意されたい。その特定のラインは、それぞれ、ベクトルレジスタＱ０、Ｑ１、Ｑ２、およびＱ３（下から上へ）の列１、３、２、および４（右から左へ）に接続する。図２１の最上のベクトルレジスタ（Ｑ３）の上方に示すように、４つのベクトルレジスタの後、各ラインのアクセスパターンは、それ自体を繰り返す。
【０１２４】
同時にアクセスする必要のないベクトルレジスタのこれらの部分をレジスタアクセス回路の同じアクセスブロックに配線することにより、行または列の部分に同時にアクセスすることを可能にするために、単一ねじれパターンおよび二重ねじれパターンをどのように実現できるかが示されている。しかしながら、入れ子にされたねじれパターンの概念は、無限に拡張することができる。例えば、第３のレベルの入れ子にされたねじれを追加することによって−部分／列の数を２倍にすることによって、列または行内の単一セクション内の２３＝８個の８ビット部分に同時にアクセスすることが可能である。
【０１２５】
図２２は、一実施形態にかかる、ねじれを実行するプロセスを任意の回数だけ入れ子状にねじることを実行するために一般化することができる方法を示す図である。図２２は、レジスタファイル９２５の一部を示している。スカラーレジスタｓ０、ｓ１、ｓ２、およびｓ３を含む単一のベクトルレジスタ９３０が示されている。レジスタファイルは、それぞれ８列を含む２つのセクション９３５、９４０を含む。しかしながら、同じ原則を単一のセクションに適用することができる。列は入れ子構造で論理的にグループ化されていると考えることができる。入れ子状構造は、ｌｏｇ２（Ｎ）レベルを有し、Ｎはセクション内の列数である。したがって、この場合、入れ子状構造は、ｌｏｇ２（８）＝３レベルの９４５、９５０、９５５を有する。レベル数はまた、入れ子の深さにも対応する。したがって、この特定の例では、入れ子は、３レベルの深さになる。第１のレベル９４５では、Ｎ＝８の列が少なくとも１つの列の第１のセット９８０と少なくとも１つの列の第２のセット９８５との間で等しく分割される。ともに、これらは、第１のレベル９４５で組み合わされた群９８０、９８５を形成する。各親レベル（例えば、第２のレベル９５０）の各セットは、対応する子レベル（例えば、第３のレベル９５５）について、少なくとも１つの列の第１のセットと少なくとも１つの列の第２のセットに等しく分割される。例えば、図２２では、親レベル９５０において、少なくとも１つの列の組９７０のうちの１つが、子レベル９５５内の少なくとも１つの列の第１のセット９６０および少なくとも１つの列の第２のセット９６５に分割される。所与のレベルＬにおける組み合わせ群の数は、２Ｌに等しい。したがって、親レベルの他のセットにも同じ分割プロセスがあてはまる。
【０１２６】
当然のことながら、レベル９４５、９５０、および９５５は、完全に概念的であり、列を次第に大きくなる（または次第に小さくなる）セットにグループ化する目的で単に使用されるにすぎない。
【０１２７】
この構造が適切に配置されていると、アクセス回路（次の図で説明）のアクセスブロックとベクタレジスタの様々な部分との間の配線を記述することができる。各アクセスブロックは、各ベクトルレジスタに対して１つの列にアクセスするように構成されている。そのアクセスブロック／ベクトルレジスタの組み合わせについて訪問される１つの列は、各レベルにおいて、同数のベクトルレジスタに対して、少なくとも１つの列の第２のセットを訪問する前に少なくとも１つの列の第１のセットが所定数のベクトルレジスタの半分について訪問されるという要件または制約によって一意的に識別可能である。所定数は２Ｘに等しく、Ｘは、各レベルで異なり、１からｌｏｇ２（Ｎ）の範囲内である。したがって、所定数は、２−８の範囲内である。したがって、各アクセスブロックは、例えば、第２のセット９８５内の同数の列を訪問する前に、第１のセット９８０内の１−４列を訪問する。同じことが、第２のレベル９５０における２つの第１のセットおよび２つの第２のセット、ならびに第３のレベル９５５における４つの第１のセットおよび４つの第２のセットにもあてはまる。
【０１２８】
図２２に示されている組み合わせ群９７０、９７５は、第１のセットの列９７０および第２のセットの列９７５から構成され、入れ子状構造の第２のレベルで発生する。したがって、一例では、４つのベクトルレジスタにわたって、１つのアクセスブロックが列９６０にアクセスし、続いて列９６５にアクセスし、続いて組み合わせ群９７５内の２つの列にアクセスすることができる。第２の例では、１つのアクセスブロックが列９６０にアクセスし、続いて組み合わせ群９７５内の列のうちの１つ、続いて列９６５、続いて組み合わせ群９７５内の他の列にアクセスすることができる。各列は、単一のベクトルレジスタに対する単一のアクセスブロックによってのみ訪問されるので、第１の例では、別のアクセスブロックが組み合わせ群９７５内の２つの異なる列にアクセスし、その後に列９６０が続き、次に列９６５が続く。
【０１２９】
配線の一例では、セクション内の各アクセスブロックは、第１のセットからの列を訪問し、別の２Ｍ−１個のベクトルレジスタ内で対応する第２のセットからの列を訪問し、Ｍは所与のレベルである。例えば、第１のアクセスブロックが、２１−１＝１個のベクトルレジスタ内の第１のレベル９４５の第１のセット９８０からの列を訪問するとき、第１のレベル９４５の対応する第２のセット９８５内の列が訪問される。換言すれば、各ベクトルレジスタにわたって、アクセスブロックは、第１のセット９８０および第２のセット９８５の列の間で交番する。同様に、第２のレベル９５０において、２２−１＝２ベクトルレジスタ内の第１のセット９７０内の列を訪問した後、対応する第２のセット９７５内の列が訪問されることになる。
【０１３０】
したがって、任意の深さの入れ子に対して配線パターンをどのように生成できるかがわかる。
【０１３１】
図２３は、一実施形態にかかるレジスタアクセス回路の例としての読み取りアクセス回路または読み取りポートを概略的に示している。図２３に示す実施形態では、読み取りアクセス回路は、第１のセクションに４つのアクセスブロック９９０、９９５、１０００、１００５を備え、第２のセクションに代替アクセスブロック９９０’、９９５’、１０００’、１００５’を備える。各アクセスブロックは、マルチプレクサとして実装されている。セクションごとに４つのアクセスブロックが存在することは、そのような回路がセクション内に４つの列がある場合に使用されることを示している。換言すれば、そのような回路は、図２１に示されるレジスタファイル９００のように、二重入れ子が発生するところで使用されるであろう。セクション内の各アクセスブロックは、前述のようにそのセクション内のベクトルレジスタを横切って複数の部分に接続されている。ねじれが生じる場合、部分が出力される順序は、逆にされることができることが理解されるであろう。例えば、図１８を参照すると、ベクトルレジスタＱ０にアクセスするとき、部分は、ｓ３、ｓ２、ｓ１、ｓ０の順序（すなわち降順）で出てくる。しかしながら、ベクトルレジスタＱ１にアクセスするとき、部分は、ｓ６、ｓ７、ｓ４、ｓ５の順序（非降順）で出てくる。これを修正するために、（並べ替え回路の例である）クロスバーマルチプレクサ１０１０が各セクションに設けられ、そのセクションのアクセスブロック９９０、９９５、１０００、１００５の出力を並べ替えることができる。そして、クロスバーマルチプレクサ１０１０からの出力は、さらなるマルチプレクサ１０１５の両方に供給され、スカラー値を提供することを可能にする。出力はまた、ともに併合されて群読み取りポートに供給され、４つの選択された値の全て（すなわち、列または行から）を読み取ることを可能にする。
【０１３２】
図２４は、一実施形態にかかるレジスタアクセス回路の例としての書き込みアクセス回路を概略的に示している。図２３に示される読み取り回路と同様に、図２４に示される書き込み回路は、部分の並べ替えに関して同様の問題を有する。特に、部分は、１つの順序でベクトルレジスタファイル９００に供給されてもよいが、前述の配線の結果として並べ替えられなければならない場合がある。これを補償するために、ベクトルレジスタファイル９００に書き込まれる前に入力を並べ替えるために、クロスバーマルチプレクサ１０２０（並べ替え回路の例）が設けられる。
【０１３３】
図２５は、一実施形態にかかる製造方法を示すフローチャート１０２５である。第１のステップ１０３０において、ベクトルレジスタのセットが提供される。各ベクトルレジスタは、複数の部分を含むベクトルを格納するように構成される。第２のステップ１０３５において、ベクトルレジスタの各セクションに対するレジスタアクセス回路が提供される。第３のステップ１０４０において、各アクセスブロックは、ベクトルレジスタのうちの１つにアクセスするときに他のベクトルレジスタのうちの少なくとも１つにアクセスするときとは異なる列内のベクトルレジスタの部分にアクセスするように構成される。その結果、レジスタアクセス回路は、ベクトルレジスタまたは列内のベクトルレジスタの一部に同時にアクセスするように構成される。
【０１３４】
図２６は、使用されることができる仮想マシン実装を示している。前述の実施形態は、関連する技術をサポートする特定の処理ハードウェアを動作させるための装置および方法に関して本発明を実施するが、ハードウェア装置のいわゆる仮想マシン実装を提供することも可能である。これらの仮想マシン実装は、仮想マシンプログラム１３００をサポートするホストオペレーティングシステム１４００を実行しているホストプロセッサ１５００上で実行される。通常、大規模で強力なプロセッサは、妥当な速度で実行する仮想マシンの実装を提供する必要がありますが、互換性や再利用の理由のために別のプロセッサにネイティブなコードを実行したい場合など、特定の状況では、そのようなアプローチは妥当である。仮想マシンプログラム１３００は、仮想マシンプログラム１３００によってモデル化されている装置である実際のハードウェアによって提供されるであろうハードウェアインターフェースと同じである仮想ハードウェアインターフェースをゲストプログラム１２００に提供する。したがって、上述の並べ替え命令を含むプログラム命令は、仮想マシンハードウェアとのそれらの相互作用をモデル化するために仮想マシンプログラム１３００を使用してゲストプログラム１２００内から実行されてもよい。ゲストプログラム１２００は、ベアメタルプログラムでもよく、あるいはホストＯＳ１４００が仮想マシンアプリケーション１３００を実行するのと同様の方法でアプリケーションを実行するゲストオペレーティングシステムであってもよい。異なる種類の仮想マシンが存在し、いくつかの種類では、仮想マシンは、ホストＯＳ１４００を必要とせずにホストハードウェア１５００上で直接動作することも理解されよう。
【０１３５】
本出願において、「・・・ように構成された」という用語は、装置の要素が定義された動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」は、ハードウェアまたはソフトウェアの相互接続の構成または方法を意味する。例えば、装置は、定義された動作を提供する専用のハードウェアを有することができ、またはプロセッサまたは他の処理装置が機能を実行するようにプログラムされることができる。「ように構成された」は、定義された動作を提供するために装置要素が何らかの方法で変更される必要があることを意味しない。
【０１３６】
本発明の例示的な実施形態が添付図面を参照して詳細に説明されたが、本発明は、これらの厳密な実施形態に限定されるものではなく、当業者であれば、添付の特許請求の範囲によって定義される本発明の範囲および趣旨から逸脱することなく、様々な変形、追加および変更を行うことができることが理解されるべきである。例えば、従属請求項の特徴の様々な組み合わせは、本発明の範囲から逸脱することなく、独立請求項の特徴によって行うことができる。
【図１】
2019519865.tif 000003
【図２】
2019519865.tif 000004
【図３】
2019519865.tif 000005
【図４】
2019519865.tif 000006
【図５】
2019519865.tif 000007
【図６】
2019519865.tif 000008
【図７Ａ】
2019519865.tif 000009
【図７Ｂ】
2019519865.tif 000010
【図７Ｃ】
2019519865.tif 000011
【図７Ｄ】
2019519865.tif 000012
【図７Ｅ】
2019519865.tif 000013
【図７Ｆ】
2019519865.tif 000014
【図７Ｇ】
2019519865.tif 000015
【図８】
2019519865.tif 000016
【図９】
2019519865.tif 000017
【図１０】
2019519865.tif 000018
【図１１Ａ】
2019519865.tif 000019
【図１１Ｂ】
2019519865.tif 000020
【図１１Ｃ】
2019519865.tif 000021
【図１１Ｄ】
2019519865.tif 000022
【図１２】
2019519865.tif 000023
【図１３】
2019519865.tif 000024
【図１４Ａ】
2019519865.tif 000025
【図１４Ｂ】
2019519865.tif 000026
【図１５】
2019519865.tif 000027
【図１６】
2019519865.tif 000028
【図１７】
2019519865.tif 000029
【図１８】
2019519865.tif 000030
【図１９Ａ】
2019519865.tif 000031
【図１９Ｂ】
2019519865.tif 000032
【図２０】
2019519865.tif 000033
【図２１】
2019519865.tif 000034
【図２２】
2019519865.tif 000035
【図２３】
2019519865.tif 000036
【図２４】
2019519865.tif 000037
【図２５】
2019519865.tif 000038
【図２６】
2019519865.tif 000039
【国際調査報告】
2019519865.tif 000040
2019519865.tif 000041