(57)【要約】  メモリと複数のベクトルレジスタとの間で複数のデータ構造を転送するための装置および方法が提供され、各ベクトルレジスタは複数のデータ要素を含むベクトルオペランドを格納するように構成される。アクセス回路は、ベクトルオペランドのデータ要素をメモリ内のデータ構造と指定されたベクトルレジスタとの間で移動させるためのアクセス動作を実行するために使用され、各データ構造はメモリ内の連続したアドレスに格納された複数のデータ要素を含む。デコード回路は、複数のベクトルレジスタおよびメモリ内で互いに不連続に配置された複数のデータ構造を特定する単一のアクセス命令に応答して、各ベクトルレジスタ内のベクトルオペランドが複数のデータ構造のそれぞれから対応するデータ要素を保持するように、複数のデータ構造をメモリと複数のベクトルレジスタとの間で移動させる一連のアクセス動作を実行するためのアクセス回路を制御する制御信号を生成する。これにより、複雑なアクセス動作を実行するための非常に効率的なメカニズムが提供され、実行速度が向上し、消費電力が削減される。
2018523238.tif 000002
【特許請求の範囲】
【請求項１】
各々が複数のデータ要素を含むベクトルオペランドを格納するように構成されたベクトルレジスタのセットと、
メモリ内のデータ構造と前記ベクトルレジスタのセットとの間でベクトルオペランドのデータ要素を移動させるためのアクセス動作を実行するためのアクセス回路であって、各データ構造は前記メモリ内の連続したアドレスに格納された複数のデータ要素を含む、アクセス回路と、
前記セットからの複数のベクトルレジスタと、前記メモリ内で互いに不連続に配置された複数のデータ構造とを特定する単一のアクセス命令に応答して、前記複数の各ベクトルレジスタの各々内のベクトルオペランドが前記複数のデータ構造の各々からの対応するデータ要素を保持するように、前記メモリと前記複数のベクトルレジスタとの間で前記複数のデータ構造を移動させる一連の前記アクセス動作を実行するための前記アクセス回路を制御する制御信号を生成するための、デコード回路と、を含む装置。
【請求項２】
複数のデータ構造のうちの１つ以上の複数のデータ要素が、前記メモリと前記複数のベクトルレジスタとの間で移動されるときに再配置される、請求項１に記載の装置。
【請求項３】
前記単一のアクセス命令がロード命令であり、各特定されたデータ構造のデータ要素を前記メモリから取得し、前記複数のデータ構造のそれぞれから対応するデータ要素を含むベクトルオペランドを各特定されたベクトルレジスタに書き込むために、前記アクセス回路が前記一連のアクセス動作を実行するように前記制御信号に応答する、請求項１または請求項２に記載の装置。
【請求項４】
前記一連の前記アクセス動作は、一連のギャザー動作を含み、各ギャザー動作は、前記複数のデータ構造のそれぞれから対応するデータ要素を取得し、得られたデータ要素をそのギャザー動作に関連するベクトルレジスタに書き込む、請求項３に記載の装置。
【請求項５】
前記単一アクセス命令はストア命令であり、前記複数のデータ構造の各々からの対応するデータ要素を含むベクトルオペランドを各特定されたベクトルレジスタから読み出し、前記メモリに書き込まれたときに前記データ要素を再配置し、各個別のデータ構造のデータ要素が前記メモリ内の連続したアドレスに格納されることを確実にする一方で、各データ構造をその不連続な位置に対応する前記メモリ内のアドレスに格納するように、前記アクセス回路は、前記一連のアクセス動作を実行するために制御信号に応答する、請求項１または請求項２に記載の装置。
【請求項６】
前記一連のアクセス動作は一連のスキャッター動作を含み、各スキャッター動作は、前記複数のデータ構造の各々からの対応するデータ要素を含むベクトルオペランドをそのスキャッター動作に関連するベクトルレジスタから取得し、そのベクトルオペランドのデータ要素を前記複数のデータ構造のアドレスから決定された前記メモリ内のアドレスに書き込む、請求項５に記載の装置。
【請求項７】
前記単一アクセス命令は、前記複数のデータ構造のアドレスを決定するために使用される情報を提供するデータ構造識別子フィールドを含む、請求項１乃至６の何れかに記載の装置。
【請求項８】
スカラデータ値を格納するためのスカラレジスタのセットをさらに含み、
前記データ構造識別子フィールドは、前記格納されたスカラデータ値が前記メモリ内のベースアドレスを決定するために使用されるスカラレジスタを特定するスカラレジスタ識別子フィールドと、前記ベースアドレスから前記複数のデータ構造のアドレスを導出するために使用されるストライド情報を含むストライド識別子フィールドとを含む、請求項７に記載の装置。
【請求項９】
前記ストライド情報は、定数ストライド値を特定する、請求項８に記載の装置。
【請求項１０】
前記ストライド識別子フィールドは、前記定数ストライド値を特定するために、即値およびスカラレジスタ識別子のうちの１つを含む、請求項９に記載の装置。
【請求項１１】
前記ストライド情報は一連のストライド値を特定し、各ストライド値は前記複数のデータ構造のうちの少なくとも１つに関連する、請求項８に記載の装置。
【請求項１２】
前記ストライド識別子フィールドは、前記セット内のベクトルレジスタを特定し、前記ベクトルレジスタ内の各データ要素は、前記ベースアドレスから前記データ構造の関連するもののアドレスを決定するために使用される、請求項１１に記載の装置。
【請求項１３】
前記データ構造識別子フィールドは、前記セット内のベクトルレジスタを特定し、前記ベクトルレジスタ内の各データ要素は、前記データ構造のうちの関連するもののアドレスを決定するために使用されるポインタデータを提供する、請求項７に記載の装置。
【請求項１４】
前記単一アクセス命令は、アクセスされるべき前記複数のベクトルレジスタを決定するために使用される情報を提供するベクトルレジスタ識別子フィールドを含む、請求項１乃至１３の何れかに記載の装置。
【請求項１５】
前記ベクトルレジスタ識別子フィールドは、前記セット内の１つのベクトルレジスタを特定するために使用されるベクトルレジスタ識別子と、アクセスされる前記複数のベクトルレジスタ内のベクトルレジスタの数を特定するために使用される整数値とを含み、前記デコード回路は、識別された１つのベクトルレジスタおよび前記整数から前記複数のベクトルレジスタの各々を決定するために所定の規則を適用するように構成される、請求項１４に記載の装置。
【請求項１６】
前記デコード回路は、アクセスされる前記複数のベクトルレジスタとして、前記特定された１つのベクトルレジスタを含む連続する複数のベクトルレジスタを決定するように構成される、請求項１５に記載の装置。
【請求項１７】
前記アクセス回路は複数のレーン上で動作し、各レーンは前記複数のベクトルレジスタの各々からの対応するデータ要素の位置を組み込み、
前記単一アクセス命令は、前記複数のレーンのうちのどれが一連のアクセス動作のためのアクティブレーンであるかを決定するために使用される述語情報を提供する述語識別子フィールドを含み、
前記アクセス回路は、移動されるべき前記複数のデータ構造として、アクティブレーンに関連するこれらのデータ構造を決定するように構成される、請求項１乃至１６に記載の装置。
【請求項１８】
単一アクセス命令はロード命令であり、前記アクセス回路は、前記述語情報を使用して圧縮動作を実行するように構成され、当該述語情報はロードされる複数のデータ構造を特定するために使用され、そして複数のベクトルレジスタ内の一連の連続レーン内にそれらのデータ構造を格納するように構成される、請求項１７に記載の装置。
【請求項１９】
前記単一アクセス命令は、前記複数のデータ構造のアドレスを決定するときに、データ構造識別子フィールド内の情報と組み合わせて適用されるオフセットデータを提供するオフセット識別子フィールドを含む、請求項７に従属する、請求項１乃至１８に記載の装置。
【請求項２０】
前記アクセス回路は、ロード／ストア部と、前記一連のアクセス動作の実行中にデータ要素を一時的にバッファリングすることを可能にする関連するバッファ記憶装置とを備える、請求項１乃至１９に記載の装置。
【請求項２１】
前記アクセス回路は、前記一連のアクセス動作を実行するために組み合わせて動作するロード／ストア部およびベクタ置換部を含む、請求項１から１９のいずれかに記載の装置。
【請求項２２】
前記ロード／ストア部およびベクトル置換部は、データ要素の中間ベクトルを格納するために使用される前記セット内の１つまたは複数のベクトルレジスタを介してデータ要素を交換するように構成される、請求項２１に記載の装置。
【請求項２３】
メモリ内のデータ構造と装置のベクトルレジスタのセットとの間でベクトルオペランドのデータ要素を移動させるアクセス動作を実行するための装置を動作させる方法であって、各ベクトルレジスタは、複数のデータ要素を含むベクトルオペランドを格納するように構成され、各データ構造は、前記メモリ内の連続したアドレスに格納された複数のデータ要素を含み、前記方法は、
一連の前記アクセス動作を実行して前記メモリと前記複数のベクトルレジスタとの間で複数のデータ構造を移動させるために、一連の前記アクセス動作を実行するようにアクセス回路を制御するための制御信号を生成するために、前記セットからの複数のベクトルレジスタおよび前記メモリ内で互いに不連続に配置された前記複数のデータ構造を特定する単一のアクセス命令をデコード化することと、
前記一連のアクセス動作の実行中に、前記複数の各ベクトルレジスタ内の前記ベクトルオペランドが前記複数のデータ構造の各々からの対応するデータ要素を保持するように、各データ構造の複数のデータ要素を移動させることと、を含む。
【請求項２４】
各々のベクトルレジスタ手段が複数のデータ要素を含むベクトルオペランドを格納するための、当該ベクトルレジスタ手段のセットと、
メモリ内のデータ構造と前記ベクトルレジスタ手段のセットとの間でベクトルオペランドのデータ要素を移動させるアクセス動作を実行するためのアクセス手段であって、各データ構造は、前記メモリ内の連続したアドレスに格納された複数のデータ要素を含む、アクセス手段と、
前記セットからの複数のベクトルレジスタ手段と、前記メモリ内で互いに不連続に位置する複数のデータ構造とを特定する単一のアクセス命令に応答して、前記複数の各ベクトルレジスタ手段における前記ベクトルオペランドが前記複数のデータ構造の各々からの対応するデータ要素を保持するように、前記メモリと前記複数のベクトルレジスタ手段との間で前記複数のデータ構造を移動させる一連の前記アクセス動作を実行するためのアクセス手段を制御する制御信号を生成するためのデコード手段と、を含む装置。
【請求項２５】
データ処理装置によって実行されると、請求項１〜２２のいずれか１項に記載の装置に対応する命令実行環境を提供する仮想マシンを提供する非一時的なコンピュータ可読記憶媒体に格納されたコンピュータプログラム。
【発明の詳細な説明】
【背景技術】
【０００１】
本技術は、メモリと複数のベクトルレジスタとの間で複数のデータ構造を転送する装置および方法に関する。
【０００２】
データ処理装置の性能を改善するための１つの既知の技術は、ベクトル演算の実行をサポートする回路を提供することである。ベクトル演算は、少なくとも１つのベクトルオペランドで実行され、各ベクトルオペランドは複数のデータ要素を含む。次いで、ベクトル演算の実行は、ベクトルオペランド（複数可）内の様々なデータ要素にわたって反復的に演算を適用することを含む。
【０００３】
ベクトルオペランド内の様々なデータ要素に対して並列に動作を実行するために、複数のレーンの並列処理を提供するように、ベクトル処理回路（ＳＩＭＤ（単一命令複数データＳｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ））処理回路と呼ばれることが多い）を使用することができる。
【０００４】
このようなベクトル演算を使用すると、性能上の大きな利点が得られるが、発生する問題は、ベクトル演算に必要なデータ要素をベクトルオペランドを格納するために使用されるメモリとベクトルレジスタとの間でいかに効率的に移動させるかである。特に、必要な個々のデータ要素は、メモリ内の一連のデータ構造内に格納されてもよく、各データ構造は、例えばＸ、Ｙ、Ｚ座標値、赤、緑および青画素値、複素数の実数部と虚数部など複数の関連データ要素を含んでもよい。しかしながら、ベクトル演算の効率的な使用を可能にするために、ベクトルレジスタが、複数のそのようなデータ構造からの一連の対応するデータ要素からなるベクトルオペランドを格納する場合、有用である。したがって、上記のＸ、ＹおよびＺ座標値の例を使用して、複数のＸ座標値を格納する１つのベクトルレジスタ、複数のＹ座標値を格納する別のベクトルレジスタおよび複数のＺ座標値を格納するさらなるベクトルレジスタが所望され得る。
【０００５】
メモリと複数のベクトルレジスタとの間で複数のデータ構造を効率的に転送する技術を提供することが望ましい。
【発明の概要】
【０００６】
第１の構成例では、ベクトルレジスタのセットであって各ベクトルレジスタは、複数のデータ要素を含むベクトルオペランドを格納するように構成された、ベクトルレジスタのセットと、メモリ内のデータ構造と前記ベクトルレジスタのセットとの間でベクトルオペランドのデータ要素を移動させるアクセス動作を実行するアクセス回路であって、各データ構造は、前記メモリ内の連続したアドレスに格納された複数のデータ要素を含む、アクセス回路と、前記セットからの複数のベクトルレジスタと、前記メモリ内で互いに不連続に配置された複数のデータ構造とを特定する単一のアクセス命令に応答するデコード回路とを含み、前記メモリと前記複数のベクトルレジスタとの間で前記複数のデータ構造を移動させる一連の前記アクセス動作を実行するように前記アクセス回路を制御する制御信号を生成し、その結果、前記複数の各ベクトルレジスタ内のベクトルオペランドは、前記複数のデータ構造のそれぞれからの対応するデータ要素を保持する、装置が提供される。
【０００７】
別の構成例では、メモリ内のデータ構造と装置のベクトルレジスタのセットとの間でベクトルオペランドのデータ要素を移動させるアクセス動作を実行する装置を動作させる方法が提供され、各ベクトルレジスタは、複数のデータ要素を含むベクトルオペランドを格納するように構成され、各データ構造は、前記メモリ内の連続したアドレスに格納された複数のデータ要素を含み、方法は、前記セットから複数のベクトルレジスタと、前記メモリ内で互いに不連続に配置された複数のデータ構造とを特定する単一のアクセス命令をデコードすることとを含み、前記メモリと前記複数のベクトルレジスタとの間で前記複数のデータ構造を移動させるために一連の前記アクセス動作を実行するようにアクセス回路を制御する制御信号を生成し、前記一連のアクセス動作の実行中に、各データ構造の複数のデータ要素を移動させることを含み、その結果、前記複数の各ベクトルレジスタ内のベクトルオペランドは、前記複数のデータ構造のそれぞれからの対応するデータ要素を保持する。
【０００８】
さらに別の構成例において、ベクトルレジスタ手段のセットであって、各ベクトルレジスタ手段は、複数のデータ要素を備えるベクトルオペランドを格納するためのものである、ベクトルレジスタ手段と、そして、メモリ内のデータ構造と前記ベクトルレジスタ手段の前記セットとの間でベクトルオペランドのデータ要素を移動させるアクセス動作を実行するアクセス手段であって、各データ構造は、前記メモリ内の連続したアドレスに格納された複数のデータ要素を備える、アクセス手段と、さらに、前記セットからの複数のベクトルレジスタ手段と前記メモリ内で互いに不連続に配置された複数のデータ構造を特定する単一のアクセス命令に応答して、前記メモリと前記複数のベクトルレジスタ手段との間で前記複数のデータ構造を移動させるために一連の前記アクセス動作を実行するように前記アクセス手段を制御する制御信号を生成するためのデコード手段とを含み、その結果、前記複数の各ベクトルレジスタ手段におけるベクトルオペランドは、前記複数のデータ構造のそれぞれからの対応するデータ要素を保持する。
【０００９】
別の構成では、データ処理装置によって実行されると、上記第１の構成例の装置に対応する命令実行環境を供給する仮想計算機を提供する、非一時的なコンピュータ可読記憶媒体に格納されたコンピュータプログラムが提供される。
【図面の簡単な説明】
【００１０】
本発明の技術は、添付の図面に示された実施形態を参照して、単なる例として、さらに説明されるであろう。
【図１】一実施形態によるデータ処理装置のブロック図である。
【図２】一実施形態による、メモリと複数のベクトルレジスタとの間でこれらのデータ要素を転送する際に個々のデータ要素をどのように再配置することができるかを概略的に示す図である。
【図３】図２によって概略的に示される移動／再配置手順を実施するためにアクセス回路に一連のアクセス動作を実行させる一実施形態で使用できる単一アクセス命令のフォーマットを概略的に示す。
【図４】命令に提供された情報を使用して、アクセスされる必要な不連続データ構造に関連するメモリ内の一連のアドレスをどのように特定することができるかを示す図である。
【図５】一実施形態による、複数の非連続データ構造を指定する単一アクセス命令の実行時に実施されるステップを示すフロー図である。
【図６】一実施形態において単一アクセス命令によって特定される述語情報をどのように使用することができるかを概略的に示す。
【図７】一実施形態による、メモリから複数のベクトルレジスタにデータ構造をロードする際に、単一のアクセス命令によって指定された述語情報を使用して圧縮を実行する方法を示す図である。
【図８】図８及び図９は２つの代替実施形態によるデータ処理装置を示すブロック図である。
【図９】図８及び図９は２つの代替実施形態によるデータ処理装置を示すブロック図である。
【図１０】図２を参照して例示された移動／再配置手順を実施するように一連のアクセス動作を実行するために図８または図９の装置を一実施形態でどのように使用することができるかを示すフロー図である。
【図１１】一実施形態による追加のオフセット識別子フィールドが命令符号化にどのように追加され得るかを示す。
【図１２】一実施形態による、図１１の追加のオフセット識別子フィールドが２つの連続するロード命令のためにどのように使用されるかを示す。
【図１３】一実施形態で採用され得る仮想マシン実装を示す。
【発明を実施するための形態】
【００１１】
添付の図面を参照して実施形態を論じる前に、以下の実施形態の説明を提供する。
【００１２】
一実施形態によれば、装置は、各ベクトルレジスタが、複数のデータ要素を含むベクトルオペランドを格納するように構成されたベクトルレジスタのセットと、メモリ内のデータ構造とベクトルレジスタのセットとの間でベクトルオペランドのデータ要素を移動させるためにアクセス動作を実行するアクセス回路を有する。各データ構造は、メモリ内に連続したアドレスで格納された複数のデータ要素を含む。したがって、アクセス回路は、データ構造のデータ要素をメモリからベクトルレジスタに移動させるためにロード動作を実行してもよく、または複数のベクトルレジスタ内のベクトルオペランドを読み出し、次いで、それらのベクトルオペランドに含まれるデータ要素を一連のデータ構造としてメモリに格納するためにストア動作を実行してもよい。
【００１３】
一実施形態によれば、複数のベクトルレジスタおよびメモリ内で互いに不連続に（本明細書では非連続的と称される）配置された複数のデータ構造を特定する単一のアクセス命令に応答するデコード回路が提供され、アクセス動作の特定のシーケンスを実行するようにアクセス回路を制御する制御信号を生成する。特に、アクセス回路は、各ベクトルレジスタ内のベクトルオペランドは、複数のデータ構造のそれぞれから対応するデータ要素を保持するように、これらの制御信号に応答して、命令によって特定される複数のデータ構造をメモリと、命令によって特定される複数のベクトルレジスタとの間で移動させる。一実施形態では、ベクトルレジスタに保持された対応するデータ要素は、複数のデータ構造のそれぞれの中の同じ相対位置からのものである。
【００１４】
一実施形態では、アクセス回路は、メモリと複数のベクトルレジスタとの間を移動するときに、複数のデータ構造の１つ以上の複数のデータ要素を再配置（rearrange)する。
【００１５】
本明細書で使用されるように、データ構造を互いに不連続に配置されていると記述するとき、これは、１つのデータ構造の最後のデータ要素と次のデータ構造の最初のデータ要素の間のメモリアドレス空間に１つ以上のデータ要素位置が設けられていることを意味する。このようなデータ構造は、本明細書では不連続（discontiguous)（または非連続(non-contiguous)）データ構造とも称される。
【００１６】
上記のような単一(single)のアクセス命令を使用することにより、メモリ内の複数の不連続データ構造にアクセスするための、特にこれらの様々なデータ構造のデータ要素をデータ構造と複数のベクトルレジスタとの間でいずれかの方向に移動させるための非常に効率的なメカニズムを提供する。一実施形態では、アクセス回路は、単一のアクセス命令に応答して、ロード(Load)命令の場合にメモリから様々なデータ構造の必要な取得を行うか、ストア(Store)動作の場合に様々なデータ構造をメモリに格納するだけではなく、ベクトルレジスタ内で、各ベクトルレジスタが、複数のデータ構造のそれぞれからの一連の対応するデータ要素を含むベクトルオペランドを確実に格納するために、必要な再配置動作を実行する。
【００１７】
したがって、各データ構造がＸ、ＹおよびＺ座標値を含む先の例を考慮すると、単一アクセス命令によって指定されたベクトルレジスタの１つは、一連のＸ座標値を格納することができ、一方、別のベクトルレジスタは一連のＹ座標値を格納してもよく、さらなるベクトルレジスタは一連のＺ座標値を格納してもよい。
【００１８】
このような単一のアクセス命令の使用は、メモリ内の複数の不連続なデータ構造へのアクセスを行うために実行する必要がある命令の数を減らすことによって、実行速度を著しく高めることができる。そのような命令を使用することにより、パイプライン型処理部のフェッチ、デコードおよび他の予備ステージを通って流れる必要のある命令の数を減らすことが可能であり、これはしばしば全体的な電力消費を大幅に減少させることができる。
【００１９】
このような単一のアクセス命令の使用は、抽象化(abstraction)のレベルを上げ、複雑なアクセスのエラーを起こしにくくするため、より正確なプログラミングを容易にすることも分かった。
【００２０】
単一のアクセス命令は、ロード命令であってもよく、そのイベントにおいて、アクセス回路は、メモリから各特定されたデータ構造のデータ要素を取得し、各特定されたベクトルレジスタに複数のデータ構造のそれぞれからの対応するデータ要素を含むベクトルオペランドを書き込むために、制御信号に応答して一連のアクセス動作を実行する。
【００２１】
要求されるロード命令を実行するために一連のアクセス動作を実行することができる多くの方法があるが、一実施形態では、一連のアクセス動作は、一連のギャザー動作(gather operations)を含み、各ギャザー動作は、複数のデータ構造のそれぞれから対応するデータ要素を取得し、取得されたデータ要素をそのギャザー動作に関連するベクトルレジスタに書き込む。必要に応じて、順番に、各ギャザー動作を一連のマイクロ動作に分解することができる。
【００２２】
単一のアクセス命令は、一実施形態では、ストア命令の形式をとることができ、そのイベントでは、アクセス回路が、前記一連のアクセス動作を実行するために制御信号に応答して、前記複数のデータ構造の各々から対応するデータ要素を含むベクトルオペランドを各特定されたベクトルレジスタから読み出し、個々のデータ構造のデータ要素がメモリ内の連続したアドレスに格納されることを確実にしながら、その不連続な位置に対応するメモリ内のアドレスに各データ構造を格納するように、それらがそのメモリに書き込まれるようにデータ要素を再配置する。
【００２３】
ストア命令を実行するために一連のアクセス動作を構成することができる多くの方法があるが、一実施形態では、その一連には一連のスキャッター動作(scatter operations)を含み、各スキャッター動作は、そのスキャッター動作に関連するベクトルレジスタから、前記複数のデータ構造のそれぞれからの対応するデータ要素を含むベクトルオペランドを得て、そのベクトルオペランドのデータ要素を複数のデータ構造のアドレスから決定されたメモリ内のアドレスに書き込む。ギャザー動作と同様に、必要に応じてスキャッター動作を一連のマイクロ動作に分解できる。
【００２４】
単一のアクセス命令は、さまざまな方法で指定できる。一実施形態では、それは、複数のデータ構造のアドレスを決定するために使用される情報を提供するデータ構造識別子フィールドを含む。データ構造識別子フィールドは、様々な形式を取ることができる。一実施形態では、装置は、スカラデータ値を格納するスカラレジスタのセットをさらに備え、データ構造識別子フィールドは、格納されたスカラデータ値がメモリ内のベースアドレスを決定するために使用されるスカラレジスタを特定するスカラレジスタ識別子フィールドを含む。一実施形態では、ベースアドレスは、データ構造アドレスのすべてについて共通の基準点を形成する。さらに、データ構造識別子フィールドは、ベースアドレスから複数のデータ構造のアドレスを導出するために使用されるストライド情報を備えるストライド識別子フィールドを含む。これは、不連続なデータ構造の様々なアドレスを指定するための非常に柔軟なメカニズムを提供する。例えば、単一アクセス命令の複数のインスタンス間でベースアドレスを更新することによって、同じストライド情報を使用してメモリ内の多数のデータ構造にアクセスすることが可能になる。これは、ストライド情報が定数ストライド値を特定する状況で特に便利である。
【００２５】
ストライド情報は、単一のアクセス命令によって特定される複数の不連続なデータ構造の隣接するデータ構造内の対応するデータ要素を分離するメモリアドレス空間に関する距離を特定するために使用される。ストライド情報は、多くの方法で指定することができるが、一実施形態では、バイト数として指定される。あるいは、ストライド情報は、各データ要素のバイト数でスケーリングされた数を指定することができる。そのような実施形態の１つでは、データ要素サイズは、追加のフィールドの命令内に埋め込むことができるパラメータを形成することができる。
【００２６】
ストライド情報によって定数ストライド値が指定される実施形態では、ストライド識別子フィールドは、その定数ストライド値を指定する即値(immediate value)を含むか、またはその内容が定数ストライド値を指定するスカラレジスタを指定することができる。
【００２７】
しかしながら、定数ストライド値が使用される必要はなく、特に、アクセスされる不連続なデータ構造の各々がメモリ内で規則的に間隔を置くことによる分離がされることを必要としない。代わりに、一実施形態では、ストライド情報は一連のストライド値を特定し、各ストライド値は複数のデータ構造のうちの少なくとも１つに関連付けられる。これにより、単一アクセス命令の実行によりアクセスされる複数のデータ構造がメモリ内の任意のアドレスに存在することが可能になる。
【００２８】
ストライド情報が一連のストライド値を特定する実施形態では、ストライド識別子フィールドがその一連のストライド値を特定できる多数の方法がある。一実施形態では、ストライド識別子フィールドはベクトルレジスタを特定し、ベクトルレジスタ内の各データ要素は、データ構造の関連するもののアドレスをベースアドレスから決定するために使用されるストライド値を特定する。
【００２９】
代替の実施形態では、データ構造識別子フィールドはベースアドレスを指定せず、代わりにベクトルレジスタを特定し、そのベクトルレジスタ内の各データ要素は、データ構造のうちの関連するもののアドレスを決定するために使用されるポインタデータを提供する。この場合も、アクセスされる複数のデータ構造がメモリ内の任意の場所に配置することができ、必要なデータ構造間に定数ストライドを設ける必要はない。
【００３０】
一実施形態では、単一アクセス命令は、アクセスされるべき複数のベクトルレジスタを決定するために使用される情報を提供するベクトルレジスタ識別子フィールドをさらに含む。一実施形態では、命令は、ベクトルレジスタのそれぞれを独立して直接的に特定することができる。しかしながら、多くの場合、命令の利用可能な符号化空間は非常に限定されており、ベクトルレジスタの各々を独立して特定するのに十分な空間がない場合がある。代わりに、一実施形態では、ベクトルレジスタ識別子フィールドは、前記セット内の１つのベクトルレジスタを特定するために使用されるベクトルレジスタ識別子と、アクセスされる前記複数のベクトルレジスタのベクトルレジスタの数を特定するために使用される整数値とを含む。次いで、デコード回路は、特定された１つのベクトルレジスタおよび整数からの前記複数の各ベクトルレジスタを決定するために所定の規則を適用するように構成される。
【００３１】
したがって、このような実施形態では、単一のベクトルレジスタのみを特定する必要があり、他のベクトルレジスタは、命令でさらに指定された整数値を使用して所定の規則を適用することによって推論することができる。特定の一実施形態では、デコード回路は、アクセスされるべき複数のベクトルレジスタとして、特定された１つのベクトルレジスタを含む連続する複数のベクトルレジスタを決定するように構成される。したがって、その実施形態では、単一アクセス命令を実行するときに、ベクトルレジスタのセット内の一連の隣接するベクトルレジスタが使用される。
【００３２】
命令符号化空間が特に制約されるさらに別の実施形態では、複数のベクトルレジスタが予め定められ、従って、単一のアクセス命令符号化内で明示的な参照を必要としないように構成することができる。例えば、そのような単一のアクセス命令は、常に、例えばベクトルレジスタ０、１および２のような所定の一連の連続するベクトルレジスタを使用して動作することが予め決定されてもよい。
【００３３】
一実施形態では、アクセス回路は複数のレーン上で動作し、各レーンは複数のベクトルレジスタのそれぞれからの対応するデータ要素位置を組み込んでいる。一実施形態では、単一のアクセス命令の実行により、各レーンに関してアクセス動作が実行され得るが、代替の実施形態では、単一のアクセス命令は、複数のレーンのうちのどれが一連のアクセス動作のためにアクティブレーンであるかを決定するために使用される述語(predicate)情報を提供する述語識別子フィールドを含むことができる。次に、アクティブレーンに対してのみアクセス動作が実行され、非アクティブレーンに関してはそれ以上の処理は必要ない。特に、アクセス回路は、移動されるべき複数のデータ構造として、アクティブレーンに関連するそれらのデータ構造を決定するように構成される。これは、単一のアクセス命令がどのように使用されるか、およびアクセスされるデータ構造がどのように指定されるかについて、大幅に向上した柔軟性を提供する。純粋に例として、それは、通常のストライド値が指定され得ることを意味し得るが、その通常のストライドによって特定されるデータ構造のうちの１つ以上がアクセスされる必要はない。これらのデータ構造の場合、対応するレーンは述語情報によって非アクティブとしてマークされることができる。
【００３４】
述語情報は、他の目的のためにも使用することができる。例えば、単一アクセス命令がロード命令である場合、アクセス回路は、ロードされる複数のデータ構造を特定するために使用される述語情報を使用して圧縮動作を実行するように構成されてもよく、アクセス回路は、それらのデータ構造を複数のベクトルレジスタ内の一連の連続レーン内に格納するように構成されている。これは、不要なデータ要素を除去するために再配置動作を行うための後続の命令を実行する必要を回避することによって、効率を高めることができる。
【００３５】
一実施形態では、単一アクセス命令は、複数のデータ構造のアドレスを決定するときに、データ構造識別子フィールド内の情報と組み合わせて適用されるオフセットデータを提供するオフセット識別子フィールドも含むことができる。これは、ベクトル演算をより効率的に使用するためにコードのループアンローリング(loop unrolling)を実行する場合に特に便利である。具体的には、次いで、それは、ループの同じ反復内で、単一のアクセス命令の複数の呼び出しを使用することが可能であり、各呼び出しは単に異なるオフセット値を使用する。これにより、アンロールされたループ(unrolled loop)の同じ反復でアクセス可能なデータのベクトル値の数を増加することができる。
【００３６】
アクセス回路は様々な形態をとることができるが、一実施形態では、一連のアクセス動作の実行中にデータ要素を一時的にバッファできるように、ロード／ストア部(load/ store unit)および関連するバッファストレージを備える。
【００３７】
別の実施形態では、アクセス回路は、一連のアクセス動作を実行するために組み合わせて動作するロード／ストア部およびベクトル置換部(vector permute unit)を備えることができる。
【００３８】
一実施形態では、ロード／ストア部およびベクトル置換部は、データ要素の中間ベクトルを格納するために使用される前記セット内の１つまたは複数のベクトルレジスタを介してデータ要素を交換するように構成される。このようなアプローチは、ロード／ストア部がレジスタとメモリとの間で一連のデータ要素を移動させるために標準的なロードまたはストア動作を実行することを可能にし、各アクセスのデータ要素がメモリ内の連続したアドレスを占め、次いで、ベクトル置換部は、データ要素の必要な並べ替えを実行する。したがって、ロード命令の場合、ロード／ストア部が必要なデータ要素をロードした後に、ベクトル置換部がその並べ替えを実行し、一方、ストア動作の場合、ベクトル置換部は、ロード／ストア部に先立って必要な並べ替えを実行し、次に必要なストア動作を実行する。
【００３９】
ここで、特定の実施形態を図面を参照して説明する。
【００４０】
図１は、説明された実施形態の技術が採用され得るシステムのブロック図である。図１に示す例では、システムはパイプライン型プロセッサの形態をとる。命令は、命令キャッシュ１５からフェッチ回路１０によってフェッチされ、命令によって要求される動作を実行するためのパイプライン型プロセッサ内の下流の実行リソースを制御するための適切な制御信号を生成するために各命令をデコードするデコード回路２０を通過する。デコードされた命令を形成する制御信号は、パイプライン型プロセッサ内の１つ以上の実行パイプライン３０、３５、４０に発行する発行段回路２５に渡される。
【００４１】
発行段回路２５はレジスタ４５にアクセスし、そこでは様々な動作のためのソースオペランドを形成するデータ値を格納することができる。これらのソースオペランドは、経路４７を介して発行段回路に送られ、その結果、これらのソースオペランドは、各デコードされた命令を実施するために実行されるべき動作（複数可）を特定する制御信号と共に適切な実行部にディスパッチされることができる。算術演算は、例えば、それらのソースオペランドに対して算術論理演算を実行することを可能にするために、必要なソースオペランドと共に算術論理部（ＡＬＵ）３０に転送することができ、結果値は、通常、レジスタ４５の特定のレジスタに格納するための宛先オペランド(destination operand)として出力される。
【００４２】
ＡＬＵ３０に加えて、他の実行部３５、例えば、デコードされた浮動小数点命令に応答して浮動小数点演算を実行する浮動小数点ユニット（ＦＰＵ）を設けることができる。さらに、ロード／ストア部（ＬＳＵ）４０は、データ値をメモリ５５から１つまたは複数のレベルのデータキャッシュ５０を介してレジスタ４５の指定された一つ以上のものにロードし、指定されたレジスタからのデータ値をメモリ５５に戻すようにストア動作を実行するために使用される。
【００４３】
図１に示すシステムは、一連の命令がプログラム順序で実行されるインオーダ(in-order)処理システムであってもよく、またはアウトオブオーダ(out-of-order)システムであってもよく、様々な命令が実行される順番を並び変えることを可能にし、性能を向上させることを目的とする。当業者には理解されるように、アウトオブオーダシステムでは、追加の構造（図１には明示されていない）が提供され、例えば、レジスタリネーミング回路は、命令によって指定されたアーキテクチャレジスタをレジスタバンク４５内の物理レジスタのプールから物理レジスタにマッピングし（物理レジスタのプールは典型的にはアーキテクチャレジスタの数よりも多い）、それにより、特定の危険を除去することができ、アウトオブオーダ処理の使用を容易にする。さらに、通常は、アウトオブオーダの実行を追跡し、様々な命令の実行結果を順番にコミットできるように、再配列バッファが提供される。
【００４４】
記述された実施形態では、図１の処理回路は、レジスタ４５に格納されたベクトルオペランド上のベクトル演算を実行するように構成されており、ベクトルオペランドは複数のデータ要素を含む。このようなベクトルオペランドに対してベクトル演算が実行されると、ベクトルオペランド内の様々なデータ要素にわたって必要な演算が反復して適用される。一実施形態では、レジスタ４５は、ベクトルレジスタ７０のセットを含み、各ベクトルレジスタは、複数のデータ要素を含むベクトルオペランドを格納することができる。
【００４５】
レジスタバンクは、他のレジスタ、例えばスカラデータ値を格納するスカラレジスタ８０のセット、および述語情報を格納するための１つ以上の述語レジスタ７５を含むこともできる。述語情報は、ベクトルオペランド内の各データ要素位置に対する述語データを提供する。したがって、述語レジスタ内の述語データは、ブール(Boolean)（すなわち真／偽(true/false)）条件のベクトルを指定し、関連するベクトルオペランド内の各データ要素は、それらのブール条件の１つに関連付けられる。一実施形態では、述語データ内の述語条件の項目の数と、その述語データによって制御される関連ベクトルオペランド内のデータ要素の数との間に１対１の関係が存在することがあるが、これは必須ではなく、別の実施形態では、述語データの単一項目は、複数のデータ要素に適用される条件を提供することができる。さらに、一実施形態では、述語データ内の各述語項目は単一ビットの形をとるが、各述語項目を単一ビットだけで指定する必要はない。
【００４６】
一実施形態によれば、セット７０からの複数のベクトルレジスタおよびメモリ内の複数の不連続なデータ構造も特定する特定のタイプのアクセス命令が定義され、デコード回路２０は、そのような命令をデコードすることに応答して、発行段回路２５を介してロード／ストア部４０に渡される制御信号を生成し、ロード／ストア部に、メモリと指定された複数のベクトルレジスタとの間で特定された複数のデータ構造を移動させる。さらに、そのアクセス命令の実行を実施するためにロード／ストア部によって実行される一連の動作の一部として、ロード／ストア部は、各ベクトルレジスタ内のベクトルオペランドが複数のデータ構造のそれぞれからの対応するデータ要素を保持するように移動されるときに、各データ構造の複数のデータ要素を再配置するように構成される。このプロセスを支援するために、ロード／ストア部４０は、このプロセス中に特定のデータ要素をバッファすることができるローカルバッファストレージ６０にアクセスする。
【００４７】
ロード／ストア部４０によって実行される移動および再配置が図２に概略的に示されている。ここでは、メモリアドレス空間１００内の対応するアドレス１０７、１１２、１１７に不連続な一連のデータ構造１０５、１１０、１１５が配置されて、示されている。先に言及した新しいアクセス命令は、要求されるデータ構造１０５、１１０、１１５のそれぞれについての様々なアドレス１０７、１１２、１１７が決定されるのに十分な情報を提供し、一連のベクトルレジスタ１２０、１２５、１３０も特定する。特定されたベクトルレジスタの数は、各データ構造内のデータ要素の数に本質的にリンクされる。この例では、各データ構造内に３つのデータ要素があり、図２の特定の例では、これらのデータ要素は、赤、緑、青の画素値を表すと仮定されている。アクセス命令がロード命令である場合、ロード／ストア部４０によって実行される動作は、様々なデータ構造１０５、１１０、１１５がアクセスされ、データ要素を並べ替え、その結果、ベクトルレジスタ１２０、１２５、１３０の各々は、複数のデータ構造からの対応するデータ要素である一連のデータ要素からなるベクトルオペランドを受け取る。従って、例として、ベクトルレジスタ１２０は、一連の赤画素値を含むベクトルオペランドを受信し、ベクトルレジスタ１２５は、一連の緑画素値を含むベクトルオペランドを受信し、ベクトルレジスタ１３０は、一連の青画素値を含むベクトルオペランドを受け取ることができる。
【００４８】
あるいは、アクセス命令は、ストア命令であってもよく、指定されたベクトルレジスタの内容が読み取られ、次に、データ要素が複数のデータ構造１０５、１１０、１１５内のアドレス１０７、１１２、１１７のそれぞれの位置に書き出されるように並べ替えが実行される。
【００４９】
各ベクトルオペランド内に含まれるデータ要素の数は、ベクトルレジスタのサイズおよびデータ要素のサイズに依存する。一例として、一実施形態では、各ベクトルレジスタの長さは３２ビットであり、各データ要素は１バイトであってもよく、その結果、各ベクトルレジスタは４つのデータ要素を格納する。しかし、他の実施形態では、異なるサイズのベクトルレジスタを使用することができ、実際にはデータ要素は異なるサイズを有することができる。
【００５０】
図３は、上述した単一アクセス命令内に提供される様々なフィールドを示す図である。ロード／ストア識別子フィールド１５５は、アクセス命令がロード命令かストア命令かを特定するために使用される。次に、レジスタ識別子フィールド１６０は、ロード命令の宛先レジスタとして、またはストア命令のソースレジスタとして使用される複数のレジスタを特定するために使用される。これらの様々なレジスタをフィールド１６０内で指定することができる多くの方法がある。例えば、十分な符号化空間があると仮定すると、各レジスタはそのフィールド内で個別に特定することができる。しかし、多くの場合、命令の符号化空間は非常に限られており、個々のレジスタを一意に特定するための空間が不十分な場合がある。
【００５１】
したがって、一実施形態では、図３に示すように、単一のレジスタ識別子１８０が、レジスタの数を特定する整数値Ｎ１７５と共に提供されてもよい。先に述べたように、レジスタの数は、各データ構造のデータ要素の数に本質的にリンクされている。したがって、図２の先の例を考慮すると、Ｎが３に等しく設定され、単一のレジスタがフィールド１８０において特定され得る。次いで、デコード回路２０は、どのレジスタが使用されるべきかを決定するための所定の規則を適用するように構成されてもよい。例えば、フィールド１８０で特定されるレジスタから始まる一連の順次レジスタを使用することが決定されてもよい。したがって、例えばフィールド１８０がベクトルレジスタＺ０を特定し、Ｎが３に等しく設定されている場合には、デコード回路は、ベクトルレジスタＺ０、Ｚ１およびＺ２が使用されるべきであると決定することができる。
【００５２】
一実施形態では、フィールド１８０で指定されたレジスタ識別子は、アーキテクチャベクトルレジスタの数を法として増分されるように構成される。したがって、例えば、レジスタ指定子１８０が、ベクトルレジスタ０〜３１の利用可能なセットのベクトルレジスタ３０を特定し、Ｎが再び３に等しい場合、デコード回路は、使用されるベクトルレジスタがベクトルレジスタ３０、３１および０であると決定することができる。
【００５３】
後により詳細に説明するように、命令は、指定されたレジスタ内のアクティブレーンを特定し、したがって移動されるべき複数のデータ構造を特定するために、述語識別子フィールド１６５を任意に含むことができる。これについては、図６および図７を参照して後でより詳細に説明する。
【００５４】
命令符号化１５０はまた、アクセスされる必要がある複数のデータ構造のアドレスを決定するのに十分な情報を提供するデータ構造識別子フィールド１７０を含む。このフィールドの情報はさまざまな形式を取ることができ、４つの例を図３に示す。
【００５５】
図３の例Ａによれば、ベクトルレジスタ識別子１９０がフィールド１７０内に設けられ、フィールド１７０は、必要なデータ構造の各々に対する一連の任意のポインタを含むベクトルレジスタを特定する。ポインタは、それらのデータ構造の開始または終了のいずれかを指してもよい。したがって、一実施形態では、そのようなベクトルレジスタ内の各データ要素は、関連するデータ構造のアドレスを決定するために使用されるポインタを提供し、したがって、他のデータ構造に対する各データ構造の位置は、全く任意であり得ると理解される。
【００５６】
図３の例Ｂによれば、スカラレジスタ識別子２００は、格納されたデータ値がベースアドレスを特定するスカラレジスタ８０の１つを特定するために使用される。次いで、ベクトルレジスタ識別子２０５を使用して、格納されたデータ要素が、必要なデータ構造のそれぞれのベースアドレスに対するオフセットを提供するベクトルレジスタを特定する。従って、各データ構造のアドレスは、関連するオフセット値をベースアドレスに加えることによって見出すことができる。再度、ここでも、これにより、単一の命令を介して任意の場所からのデータ構造に効果的にアクセスすることが可能になることが分かる。
【００５７】
例Ｃは、スカラレジスタ識別子２００を再び使用するが、さらに、定数ストライド値を指定する命令内に符号化された即値２１５を提供する。したがって、その構成では、各データ構造がメモリ内で互いに不連続に配置されているが、様々なデータ構造は、メモリアドレス空間内の規則的な距離だけ互いに分離されている。したがって、一実施形態では、第１のデータ構造のアドレスはベースアドレスから導出され得て、一方、次のデータ構造はベースアドレスに即値を加算することによって計算されるアドレスを有する。その後の次のデータ構造には、ベースアドレスに即値の２倍を加算して計算されるアドレスを有し、等々。
【００５８】
例Ｄは、即値２１５の代わりに、その内容が定数ストライド値を指定するスカラレジスタ識別子２２５が特定される別の代替例を示す。したがって、例Ｄによる各データ構造のアドレスの計算は、例Ｃについて上述したものと同じである。
【００５９】
一実施形態では、ベクトル長（すなわち、各ベクトルにおけるデータ要素の数）およびデータ要素のサイズは暗黙的であってもよい。しかし、別の実施形態では、そのような情報を命令内で符号化することができる。例えば、命令符号化は、データ要素サイズ（例えば８、１６、３２または６４ビット）を特定する情報を含むことができ、次いで、ベクトル長は、命令で参照されるベクトルレジスタのサイズおよび指定されたデータ要素サイズから決定される。指定されたデータ要素サイズは、ストライド情報など、命令で指定された他の情報のスケーリングを実行するためにも使用できる。
【００６０】
図４は、一実施形態による関連する不連続データ構造の様々なアドレスの計算を示す図である。この例では、命令符号化は図３の例Ｄに示すものであり、特にデータ要素のベクトルを３つのベクトルレジスタＺ０、Ｚ１およびＺ２にロードするロード命令が指定されていると仮定する。この命令は、オプションの述語フィールドＰｇも含むが、この例では、述語が指定されていれば、すべてのレーンがアクティブであることを特定すると仮定する。さらに、スカラレジスタはベースアドレスを特定し、このスカラレジスタは図４のＸｂと呼ばれる。さらに、別のスカラレジスタＲｓが定数ストライド値を特定するために使用される。この特定の例では、ベースレジスタは、ここではＸレジスタと呼ばれる６４ビットスカラレジスタで指定されると仮定する。ストライド(Stride)を特定するレジスタに関連する用語「Ｒ」の使用は、より一般的であり、実施形態に応じて、３２ビットスカラレジスタまたは６４ビットスカラレジスタのいずれかにマッピングすることができる。
【００６１】
わかるように、特定のデータ構造「ｉ」のアドレスは、ストライドレジスタに指定されたストライドにｉを掛けて、それをベースレジスタにあるベースアドレスに加算することによって求められる。この実施形態では、ストライド値は、隣接する構造内の対応するデータ要素間のバイト数を直接指定すると仮定する。しかし、スカラレジスタＲｓのストライドデータは、いくつかの方法で指定することができ、例えば、必要に応じてバイトサイズの単位ではなく、データ構造体サイズの単位で指定、またはデータ要素ごとのバイト数でスケーリングした値で指定できる。代わりに、数値バイトの代わりにビット数として指定することもできる。
【００６２】
さらに別の方法として、必要なストライド情報は、スカラレジスタから得られた値と、各データ構造内のデータ要素のサイズおよびデータ要素の数に関する情報とを組み合わせることによって決定することもできる。
【００６３】
図５は、複数の非連続なデータ構造を指定する、上述のタイプのアクセス命令の発生時に図１の装置によって実行される動作を示すフロー図である。ステップ３００におけるそのような命令のデコード回路２０による検出がされると、次に、ステップ３０５において、デコード回路２０は、アクセス命令によって特定された各ベクトルレジスタに対して別々のギャザーまたはスキャッター動作を生成するように構成される。特に、ロード命令の場合、デコーダは一連のギャザー動作のための制御信号を生成するが、ストア命令の場合、デコーダは一連のスキャッター動作のための制御信号を生成する。したがって、例として、命令がロード命令であり、データ構造がＲＧＢデータ要素成分を有する場合、デコード回路は、特定されたデータ構造から１つの宛先レジスタに赤画素値をロードするための第１のギャザー動作と、特定されたデータ構造から別のベクトルレジスタに緑画素値をロードする別個のギャザー動作と、特定されたデータ構造から第３のベクトルレジスタに青画素値をロードする最終ギャザー動作の３つのギャザー動作を規定するための制御信号を生成する。
【００６４】
当然のことながら、これらのギャザー／スキャッター動作を特定する必要な制御信号は、ステップ３１０でそれらの動作を実行させるために、ロード／ストア部４０に転送される。一実施形態では、ロード／ストア部は、必要に応じてローカルバッファ６０を使用して一連のロードまたはストアマイクロ動作として各ギャザーまたはスキャッター動作を実行するように構成できる。したがって、例として、特定されたデータ構造からベクトルレジスタＺ０に赤画素値をロードするためのギャザー動作を実行する場合、メモリから赤画素データ要素Ｒ０を取得し、それをバッファ６０に格納するために、ロードマイクロ動作が実行されてもよく、一方、別のロードマイクロ動作が、メモリからの残りの赤画素データ要素をロードするために使用され、それらはバッファ６０にも格納される。必要な赤画素値のすべてが得られたら、赤画素値のそのベクトルオペランドをベクトルレジスタＺ０に格納するために、ベクトルレジスタ７０への単一書き込みを行うことができる。
【００６５】
あるいは、ロード／ストア部４０がローカルバッファ記憶装置へのアクセスを有していなかった場合、ロードマイクロ動作の実行中にベクトルレジスタＺ０への複数のアクセスを実行して、それぞれの個々のデータ要素がメモリから取得されるときにベクトルレジスタに格納されるようにする。
【００６６】
図６は、このような述語情報が命令符号化１５０の述語識別子フィールド１６５内で特定される、一実施形態による述語情報の使用方法を概略的に示す。特に、一実施形態では、述語識別子フィールド１６５は、汎用述語レジスタＰｇを特定するために使用することができ、図６に示すベクトルレジスタ３２０、３２５、３３０内のレーンごとに単一の述語ビットを述語情報として格納する。特に、各レーンは、アクセス命令によって指定された複数のベクトルレジスタのそれぞれからの対応するデータ要素位置を組み込むことが分かる。
【００６７】
述語ビットが第１の値に設定されている場合、これは対応するレーンがアクティブであることを示すために使用され、一方、第２の値に設定される場合には対応するレーンが非アクティブであることを示すために使用される。図６に示す例では、論理１の値がアクティブレーンを示し、論理ゼロの値が非アクティブレーンを示すと仮定するが、これらのビットの意味は必要に応じて逆にすることができると理解されよう。
【００６８】
例としてロード動作を考慮して、図４に示す４つのデータ構造が命令のデータ構造識別子フィールド１７０によって特定されると仮定する場合、レーン１に論理ゼロ値が存在すると、ロード／ストア部はデータ構造２７０がメモリから取得される必要がないと判断する。従って、たとえ命令が例えば図３の例ＣまたはＤを使用することによって定数ストライドが指定されており、それゆえ一連のアドレスを計算するときにポインタＳ［１］が当然に特定されているとしても、非アクティブレーン１が存在すると、そのアクセスが抑制される。代わりに、データ構造２６０、２８０および２９０のみがアクセスされ、それらの様々なデータ要素は、ベクトルレジスタ３２０、３２５、３３０のレーン０、２および３内に格納される。一実施形態では、ベクトルレジスタ３２０、３２５、３３０内で、レーン１に関連するデータ要素位置のデータ値は、ベクトルがそれらのレジスタのそれぞれに書き込まれるときに論理ゼロ値に設定される。しかし、別の実施形態では、レジスタが更新された後、レーン１の内容がそのレーン内の既存のデータ要素値で記述されるように、新しいデータ内容を既存の内容とマージすることができる。
【００６９】
述語情報は、ストア動作を実行するときに同様の方法で使用することができる。特に、ロード／ストア部が様々なレジスタ３２０、３２５、３３０の内容を読み取るとき、Ｒ１、Ｇ１、およびＢ１データ要素をそれらの関連するデータ構造２７０に格納する必要がないと判断し、したがってそのデータ構造に関してメモリへの関連するストア動作の実行を抑制する。
【００７０】
ロード動作を実行するとき、図７に概略的に示すように、必要に応じて述部情報を使用して圧縮を実行することもできる。この例では、述語情報３５０は、レーン０および２がアクティブであることを特定するが、レーン１および３は非アクティブであることを特定する。したがって、図４の例を参照すると、これは、データ構造２６０、２８０がアクセスされる必要があるが、データ構造２７０、２９０はアクセスしないことを特定する。したがって、データ構造２６０および２８０だけがアクセスされる。しかし、データ構造２８０の内容をレーン２に書き込むのではなく、そのかわりに、それらはレーン１に書き込まれる。したがって、圧縮のおかげで、アクティブレーンの各々について得られたデータ要素がベクトルレジスタ３５５、３６０、３６５に書き込まれ、これらのレジスタ内の連続するレーンを占めるようにする。残りのレーンの内容は、ゼロにされるか、または「そのまま」の状態にされるか、すなわち、それらは、様々なレジスタ３５５、３６０、３６５内のそれらのデータ要素位置に格納された以前の値を維持する。必要に応じて、次いで、さらなるロード命令を使用して、残りのレーンを不連続なデータ構造からの必要なデータで満たすことができる。
【００７１】
これは、メモリから不連続なデータ構造の内容がロードされた後に、レジスタの内容に対する後続の再配置動作を実行する必要を潜在的に回避することによって、さらなる最適化を提供することができる。
【００７２】
図８は、図１のデータ処理装置の別の形態を示しており、ロード／ストア部４０は、必要な並べ替え動作を実行するために特殊な目的の置換部（「特殊目的置換部」ともいう）と組み合わせて動作する。したがって、この実施形態では、先に説明したアクセス命令をデコードするときにデコード回路２０によって生成される様々な制御信号は、ロード／ストア部に対する制御情報と特殊目的置換部４００に対する制御情報の両方を提供する。一例としてロード命令を考慮すると、発行段回路はＬＳＵ４０に一連の制御信号を発行し、それが、メモリから得られたデータ要素でレジスタ４５内の多数のベクトルレジスタを満たすようにする。この場合、各ベクトルレジスタ内で、ＬＳＵによってそのベクトルレジスタに格納された内容は、メモリ内の連続したアドレスから得られるデータ要素となる。したがって、この時点で、各データ構造の個々のデータ要素は、異なるベクトルレジスタに分離されていない。しかしながら、ＬＳＵ４０が所要のロード動作を実行すると、「完了（Done)」信号を介して特殊目的置換部４００に通知し、その時点で、特殊目的置換部は発行段回路によって提供された制御情報を使用して、関連するレジスタから値を取得し、必要に応じてそれらを並べ替え、次いで、元のアクセス命令で指定された宛先レジスタに書き込む。
【００７３】
ストア命令については、同様のステップをとることができるが、この場合、特別目的置換部４００は、通常、必要な置換を最初に実行し、その後、ロード／ストア部に完了信号を発行し、ロード／ストア部は、次いで、個々のデータ構造内で必要な順序でデータ要素をメモリに書き出すことができる。
【００７４】
従って、例として図４に示された一連のデータ構造を考慮し、宛先レジスタがＺ０、Ｚ１およびＺ２であり、ロード命令が実行されていると再び仮定すると、ロード／ストア部は、データ構造２６０と、そのデータ構造に続く連続するアドレスからのいくつかの追加のデータ値を潜在的に第１のベクトルレジスタにロードするためと、同様に第２のデータ構造２７０を異なるベクトルレジスタに格納するためと、第３のデータ構造２８０を別の異なるベクトルレジスタに格納するためと、第４のデータ構造２９０をさらに別のベクトルレジスタに格納する（これらのベクトルレジスタのそれぞれには、さらに、関連するデータ構造に続く連続したアドレスからのいくつかの追加データ値があってもよい）ために、４つのロード動作を実行するように構成することができる。これらのベクトルレジスタは、中間ベクトルレジスタとして効果的に使用され、元のロード命令によって指定されたレジスタＺ０、Ｚ１およびＺ２のいずれかである必要はない。次いで、特殊目的置換部４００は、これらの種々の中間ベクトルレジスタの内容にアクセスし、必要な置換を実行し、次いで、必要とされるそのベクトルオペランドを宛先ベクトルレジスタＺ０、Ｚ１およびＺ２に格納する。したがって、特殊目的置換部４００は、図４の例示的なロードを実行するとき、赤画素値のすべてを単一のベクトル、緑画素値のすべてを別のベクトル、および青画素値のすべてをさらなるベクトル、に編成する。
【００７５】
図９は、特殊目的置換部４００が使用されず、代わりに、データ処理パイプライン内の実行部の１つを形成する既存のベクトル置換部４１０が使用される、さらなる例示的な構成を示す。効果的に、ベクトル置換部４１０は、専用置換部４００のものと同様の機能を実行するが、発行段回路２５およびレジスタ４５からの経路４７を介して、その置換演算のためのソースオペランドを得る。したがって、発行段回路２５は、適切な制御信号をベクトル置換部４１０に発行して、提供されるソースオペランド値に対して実行する必要がある必要な置換を特定し、そしてまた、置換されたデータを格納する必要がある宛先レジスタも特定する。
【００７６】
図１０は、図８または図９のいずれかの手法を採用する場合の一連の動作を示すフロー図である。図１０のフロー図では、ロード動作が実行されていると仮定する。したがって、ロード／ストア部は、１つ以上のアクセスからのデータ要素で中間レジスタを満たす。個々のアクセスは不連続なメモリアドレスになる可能性がるが、各アクセス時に取得されるデータ要素はすべて連続したアドレスから得られる。したがって、この時点で、中間ベクトルレジスタの内容は、必要に応じてデータ構造のコンポーネントデータ要素に分離されない。
【００７７】
しかしながら、ステップ４２５において、置換部は、次いで、ＬＳＵが取得したデータに対して必要な置換を実行する。存在する場合がある何らかのアライメント問題も解決する必要がある。図４で特定された４つのデータ構造のそれぞれがＬＳＵによって別のベクトルレジスタに格納され、取り出された最初のデータ要素がいずれの場合も赤の画素値であった以前の例では、アライメント問題はないが、他の実施形態では、一連の中間レジスタ内に含まれるデータがそのように予め整列されているわけではなく、各データ構造の対応するデータ要素を正しく特定するために何らかのアライメントが必要であることがある。図１０に示すように、このステップは、レジスタファイル４５と相互作用する図８の専用置換部４００を使用して実行することができるか、または図９の既存の置換部４１０を介して経路４７上でデータを再循環させ、発行段回路２５によって発行された個別のマイクロ動作を使用することによって実行できる。
【００７８】
ロード命令ではなくストア命令を実行する場合、ステップ４２０および４２５は効果的に逆転される。
【００７９】
上述の実施形態において様々なステップが実行される順序は、異なる実施形態において変更されてもよいことが理解されよう。例えば、図３の符号化を考慮すると、アクセス回路が逆の順序でデータ構造上で動作することができることが理解されよう。
【００８０】
別の構成例では、図３の例示的な符号化Ｂ、ＣまたはＤのいずれかを採用するとき、それを構成することもでき、アクセス命令は、必要なロード／ストア動作の完了時に自動的にベースレジスタを更新（本明細書ではポストインデックス更新と呼ぶ）するように構成することもできる。これにより、ロード／ストア命令の別のインスタンスが、同じベースレジスタ指定子を使用して指定されるが、ベースレジスタを更新するための別個の命令を必要とせずにデータ構造のさらなるシーケンス上で動作することが可能になる。
【００８１】
さらに別の代替案として、ロード命令の実行中に、各ベクトルの１つまたは複数のデータ要素が投機的にロードされる、メモリ投機をいくつかのバリエーションで使用することができる。特に、利用可能なベクトル演算を活用するためにコードをベクトル化するとき、ベクトルレジスタにロードされるデータ構造のいくつかは、実際には処理のために実際に必要とされてもされなくてもよい。そのような状況では、装置は、ロード動作の間に実行される１つまたは複数のアクセスが投機的アクセスであることに気付くことができる。通常のアクセス中に障害が発生した場合、通常は、例えば、例外を処理するなどしてその障害を処理する必要がある。しかし、一実施形態では、メモリからの１つまたは複数のデータ構造の投機的取得中に障害が検出された場合、そのような動作は行われない。代わりに、このような構成では、メモリ障害(a memory fault)は（非投機的(non-speculative)である）最初のアクティブレーンで発生する場合にのみ生成される。
【００８２】
図１１は、追加のオフセット識別子フィールド４５０が提供されるアクセス命令のための符号化の代替形態を示す。したがって、４つの符号化オプションＡ、Ｂ、ＣおよびＤのそれぞれは、オフセットを指定する即値４５５によって補足される。即値の代わりに、別個のスカラレジスタを特定することができ、その値は必要なオフセットを指定する。次に、オフセットが使用される方法が図１２に概略的に示されている。特に、同じデータ構造識別子情報（図１２の例では、これはベースレジスタとストライドレジスタの形式である）を使用する命令の複数のインスタンスを指定することを可能にするが、各インスタンスにおいてオフセット値が変更される。したがって、これにより、ベクトル処理リソースをより良く使用するために、命令のループをより効率的にアンロールすることが可能になる。具体的には、アンロールされたループ(unrolled loop)では、第１のロード命令はゼロのオフセットを指定し、したがって、図１２に示す計算を使用して生成されたアドレス４６０、４７０、４８０、４９０を使用して、４つのデータ構造４６５、４７５、４８５、４９５をベクトルレジスタＺ０、Ｚ１およびＺ２にロードおよびデインターリーブ(de-interleave)する。次のロード命令は、次いで、正確に同じベースおよびストライド情報を使用することができるが、オフセットを１と指定し、取得されたデータ要素をさらに３つのベクトルレジスタ、この場合はレジスタＺ３、Ｚ４およびＺ５にロードする。結果として、この命令は、図１２に示す計算を使用して再び特定されるアドレス５００、５１０、５２０、５３０によって特定される４つのデータ構造５０５、５１５、５２５、５３５をロードおよびデインターリーブする。値「ＶＬ」はベクトルの長さ、すなわちベクトルレジスタ内のデータ要素の数である。
【００８３】
このようなアプローチによって、アンロールされたループでアドレス計算を実行する命令の数を減らすことができ、また、命令の副作用としてベースポインタを調整する、前述のポストインデックス更新フォームが不要になる。
【００８４】
上述の実施形態から、本明細書に記載された新しい形式のアクセス命令は、複雑なアクセス動作を実行する際に大幅な効率向上を可能にすることが理解されよう。実行速度に関して重要な利点が得られる。実行される命令の数を大幅に減らすことができ、実行速度を向上させることに加えて、装置内の電力消費も低減することができる。上記の命令を使用すると、抽象化のレベルが高くなり、複雑なアクセスのエラーが起こりにくくなり、したがって、そのような複雑なアクセス動作が必要な書き込みプログラムを作成するプロセスが容易になる。
【００８５】
複数のデータ要素を含むデータ構造を利用する多くのアプリケーションが存在する。一例として、以下の例に類似のデータ構造を利用するアプリケーションは、上述の命令の使用によって利益を得ることができる。
【表１】
2018523238.tif 000003
【００８６】
図１３は、使用可能な仮想マシンの実装を示している。前述の実施形態は、関連技術をサポートする特定の処理ハードウェアを動作させるための装置および方法に関して本発明を実施するが、ハードウェア装置のいわゆる仮想マシン実装を提供することも可能である。これらの仮想マシン実装は、仮想マシンプログラム６１０をサポートするホストオペレーティングシステム６２０を実行するホストプロセッサ６３０上で実行される。典型的には、妥当な速度で実行する仮想マシン実装を提供するために大きな強力なプロセッサが必要とされるが、互換性や再利用の理由から別のプロセッサに固有のコードを実行したいという要求がある場合など、そのようなアプローチは、ある状況において正当性を示しうる。仮想マシンプログラム６１０は、仮想マシンプログラム６１０によってモデル化される装置である実際のハードウェアによって提供されるアプリケーションプログラムインターフェースと同じアプリケーションプログラム６００へのアプリケーションプログラムインターフェースを提供する。したがって、複数の非連続なデータ構造を指定する上述のアクセス命令を含むプログラム命令は、仮想マシンプログラム６１０を使用してアプリケーションプログラム６００内から実行され、仮想マシンハードウェアとの相互作用をモデル化することができる。
【００８７】
本出願において、「〜に構成された」という用語は、装置の要素が定義された動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」は、ハードウェアまたはソフトウェアの相互接続の配置または方法を意味する。例えば、装置は、定義された動作を提供する専用のハードウェアを有することができ、またはプロセッサや他の処理装置が機能を実行するようにプログラムされてもよい。「〜に構成された」は、定義された動作を提供するために装置要素を何らかの方法で変更する必要があることを意味しない。
【００８８】
本発明の例示的な実施形態を添付の図面を参照して詳細に説明したが、本発明はこれらの厳密な実施形態に限定されず、添付の特許請求の範囲によって規定される本発明の範囲および趣旨から逸脱することなく、様々な変更、追加および修正を当業者によって行うことができることを理解されよう。例えば、従属請求項の特徴の様々な組合せは、本発明の範囲から逸脱することなく、独立請求項の特徴によって行うことができる。
【図１】
2018523238.tif 000004
【図２】
2018523238.tif 000005
【図３】
2018523238.tif 000006
【図４】
2018523238.tif 000007
【図５】
2018523238.tif 000008
【図６】
2018523238.tif 000009
【図７】
2018523238.tif 000010
【図８】
2018523238.tif 000011
【図９】
2018523238.tif 000012
【図１０】
2018523238.tif 000013
【図１１】
2018523238.tif 000014
【図１２】
2018523238.tif 000015
【図１３】
2018523238.tif 000016
【国際調査報告】
2018523238.tif 000017
2018523238.tif 000018
2018523238.tif 000019