(58)【調査した分野】(Int.Cl.,DB名)
前記単一のアクセス命令がロード命令であり、各特定されたデータ構造のデータ要素を前記メモリから取得し、前記複数のデータ構造のそれぞれから対応するデータ要素を含むベクトルオペランドを各特定されたベクトルレジスタに書き込むために、前記アクセス回路が前記一連のアクセス動作を実行するように前記制御信号に応答する、請求項1または請求項2に記載の装置。
前記一連の前記アクセス動作は、一連のギャザー動作を含み、各ギャザー動作は、前記複数のデータ構造のそれぞれから対応するデータ要素を取得し、得られたデータ要素をそのギャザー動作に関連するベクトルレジスタに書き込む、請求項3に記載の装置。
前記単一アクセス命令はストア命令であり、前記複数のデータ構造の各々からの対応するデータ要素を含むベクトルオペランドを各特定されたベクトルレジスタから読み出し、前記メモリに書き込まれたときに前記データ要素を再配置し、各個別のデータ構造のデータ要素が前記メモリ内の連続したアドレスに格納されることを確実にする一方で、各データ構造をその不連続な位置に対応する前記メモリ内のアドレスに格納するように、前記アクセス回路は、前記一連のアクセス動作を実行するために制御信号に応答する、請求項1または請求項2に記載の装置。
前記一連のアクセス動作は一連のスキャッター動作を含み、各スキャッター動作は、前記複数のデータ構造の各々からの対応するデータ要素を含むベクトルオペランドをそのスキャッター動作に関連するベクトルレジスタから取得し、そのベクトルオペランドのデータ要素を前記複数のデータ構造のアドレスから決定された前記メモリ内のアドレスに書き込む、請求項5に記載の装置。
前記単一アクセス命令は、アクセスされるべき前記複数のベクトルレジスタを決定するために使用される情報を提供するベクトルレジスタ識別子フィールドを含む、請求項1乃至6のいずれかに記載の装置。
前記ベクトルレジスタ識別子フィールドは、前記セット内の1つのベクトルレジスタを特定するために使用されるベクトルレジスタ識別子と、アクセスされる前記複数のベクトルレジスタ内のベクトルレジスタの数を特定するために使用される整数値とを含み、前記デコード回路は、識別された1つのベクトルレジスタおよび前記整数から前記複数のベクトルレジスタの各々を決定するために所定の規則を適用するように構成される、請求項7に記載の装置。
前記デコード回路は、アクセスされる前記複数のベクトルレジスタとして、前記特定された1つのベクトルレジスタを含む連続する複数のベクトルレジスタを決定するように構成される、請求項8に記載の装置。
前記単一アクセス命令は、前記複数のデータ構造のアドレスを決定するときに、データ構造識別子フィールド内の情報と組み合わせて適用されるオフセットデータを提供するオフセット識別子フィールドを含む、請求項1乃至11のいずれかに記載の装置。
前記アクセス回路は、ロード/ストア部と、前記一連のアクセス動作の実行中にデータ要素を一時的にバッファリングすることを可能にする関連するバッファ記憶装置とを備える、請求項1乃至12のいずれかに記載の装置。
前記ロード/ストア部およびベクトル置換部は、データ要素の中間ベクトルを格納するために使用される前記セット内の1つまたは複数のベクトルレジスタを介してデータ要素を交換するように構成される、請求項14に記載の装置。
メモリ内のデータ構造と装置のベクトルレジスタのセットとの間でベクトルオペランドのデータ要素を移動させるアクセス動作を実行するための装置を動作させる方法であって、各ベクトルレジスタは、複数のデータ要素を含むベクトルオペランドを格納するように構成され、各データ構造は、前記メモリ内の連続したアドレスに格納された複数のデータ要素を含み、前記方法は、
一連の前記アクセス動作を実行して前記メモリと前記複数のベクトルレジスタとの間で複数のデータ構造を移動させるために、一連の前記アクセス動作を実行するようにアクセス回路を制御するための制御信号を生成するために、前記セットからの複数のベクトルレジスタおよび前記メモリ内で互いに不連続に配置された前記複数のデータ構造を特定する単一のアクセス命令をデコード化することと、
前記一連のアクセス動作の実行中に、前記複数の各ベクトルレジスタ内の前記ベクトルオペランドが前記複数のデータ構造の各々からの対応するデータ要素を保持するように、各データ構造の複数のデータ要素を移動させることと、を含み、
前記単一のアクセス命令は、前記複数のデータ構造のアドレスを決定するために使用される情報を提供するデータ構造識別子フィールドを含み、
前記データ構造識別子フィールドは、前記セット内のベクトルレジスタを特定し、前記ベクトルレジスタの各データ要素は、前記複数のデータ構造の関連する一つへのポインタを提供する、前記方法。
【発明を実施するための形態】
【0011】
添付の図面を参照して実施形態を論じる前に、以下の実施形態の説明を提供する。
【0012】
一実施形態によれば、装置は、各ベクトルレジスタが、複数のデータ要素を含むベクトルオペランドを格納するように構成されたベクトルレジスタのセットと、メモリ内のデータ構造とベクトルレジスタのセットとの間でベクトルオペランドのデータ要素を移動させるためにアクセス動作を実行するアクセス回路を有する。各データ構造は、メモリ内に連続したアドレスで格納された複数のデータ要素を含む。したがって、アクセス回路は、データ構造のデータ要素をメモリからベクトルレジスタに移動させるためにロード動作を実行してもよく、または複数のベクトルレジスタ内のベクトルオペランドを読み出し、次いで、それらのベクトルオペランドに含まれるデータ要素を一連のデータ構造としてメモリに格納するためにストア動作を実行してもよい。
【0013】
一実施形態によれば、複数のベクトルレジスタおよびメモリ内で互いに不連続に(本明細書では非連続的と称される)配置された複数のデータ構造を特定する単一のアクセス命令に応答するデコード回路が提供され、アクセス動作の特定のシーケンスを実行するようにアクセス回路を制御する制御信号を生成する。特に、アクセス回路は、各ベクトルレジスタ内のベクトルオペランドは、複数のデータ構造のそれぞれから対応するデータ要素を保持するように、これらの制御信号に応答して、命令によって特定される複数のデータ構造をメモリと、命令によって特定される複数のベクトルレジスタとの間で移動させる。一実施形態では、ベクトルレジスタに保持された対応するデータ要素は、複数のデータ構造のそれぞれの中の同じ相対位置からのものである。
【0014】
一実施形態では、アクセス回路は、メモリと複数のベクトルレジスタとの間を移動するときに、複数のデータ構造の1つ以上の複数のデータ要素を再配置(rearrange)する。
【0015】
本明細書で使用されるように、データ構造を互いに不連続に配置されていると記述するとき、これは、1つのデータ構造の最後のデータ要素と次のデータ構造の最初のデータ要素の間のメモリアドレス空間に1つ以上のデータ要素位置が設けられていることを意味する。このようなデータ構造は、本明細書では不連続(discontiguous)(または非連続(non-contiguous))データ構造とも称される。
【0016】
上記のような単一(single)のアクセス命令を使用することにより、メモリ内の複数の不連続データ構造にアクセスするための、特にこれらの様々なデータ構造のデータ要素をデータ構造と複数のベクトルレジスタとの間でいずれかの方向に移動させるための非常に効率的なメカニズムを提供する。一実施形態では、アクセス回路は、単一のアクセス命令に応答して、ロード(Load)命令の場合にメモリから様々なデータ構造の必要な取得を行うか、ストア(Store)動作の場合に様々なデータ構造をメモリに格納するだけではなく、ベクトルレジスタ内で、各ベクトルレジスタが、複数のデータ構造のそれぞれからの一連の対応するデータ要素を含むベクトルオペランドを確実に格納するために、必要な再配置動作を実行する。
【0017】
したがって、各データ構造がX、YおよびZ座標値を含む先の例を考慮すると、単一アクセス命令によって指定されたベクトルレジスタの1つは、一連のX座標値を格納することができ、一方、別のベクトルレジスタは一連のY座標値を格納してもよく、さらなるベクトルレジスタは一連のZ座標値を格納してもよい。
【0018】
このような単一のアクセス命令の使用は、メモリ内の複数の不連続なデータ構造へのアクセスを行うために実行する必要がある命令の数を減らすことによって、実行速度を著しく高めることができる。そのような命令を使用することにより、パイプライン型処理部のフェッチ、デコードおよび他の予備ステージを通って流れる必要のある命令の数を減らすことが可能であり、これはしばしば全体的な電力消費を大幅に減少させることができる。
【0019】
このような単一のアクセス命令の使用は、抽象化(abstraction)のレベルを上げ、複雑なアクセスのエラーを起こしにくくするため、より正確なプログラミングを容易にすることも分かった。
【0020】
単一のアクセス命令は、ロード命令であってもよく、そのイベントにおいて、アクセス回路は、メモリから各特定されたデータ構造のデータ要素を取得し、各特定されたベクトルレジスタに複数のデータ構造のそれぞれからの対応するデータ要素を含むベクトルオペランドを書き込むために、制御信号に応答して一連のアクセス動作を実行する。
【0021】
要求されるロード命令を実行するために一連のアクセス動作を実行することができる多くの方法があるが、一実施形態では、一連のアクセス動作は、一連のギャザー動作(gather operations)を含み、各ギャザー動作は、複数のデータ構造のそれぞれから対応するデータ要素を取得し、取得されたデータ要素をそのギャザー動作に関連するベクトルレジスタに書き込む。必要に応じて、順番に、各ギャザー動作を一連のマイクロ動作に分解することができる。
【0022】
単一のアクセス命令は、一実施形態では、ストア命令の形式をとることができ、そのイベントでは、アクセス回路が、前記一連のアクセス動作を実行するために制御信号に応答して、前記複数のデータ構造の各々から対応するデータ要素を含むベクトルオペランドを各特定されたベクトルレジスタから読み出し、個々のデータ構造のデータ要素がメモリ内の連続したアドレスに格納されることを確実にしながら、その不連続な位置に対応するメモリ内のアドレスに各データ構造を格納するように、それらがそのメモリに書き込まれるようにデータ要素を再配置する。
【0023】
ストア命令を実行するために一連のアクセス動作を構成することができる多くの方法があるが、一実施形態では、その一連には一連のスキャッター動作(scatter operations)を含み、各スキャッター動作は、そのスキャッター動作に関連するベクトルレジスタから、前記複数のデータ構造のそれぞれからの対応するデータ要素を含むベクトルオペランドを得て、そのベクトルオペランドのデータ要素を複数のデータ構造のアドレスから決定されたメモリ内のアドレスに書き込む。ギャザー動作と同様に、必要に応じてスキャッター動作を一連のマイクロ動作に分解できる。
【0024】
単一のアクセス命令は、さまざまな方法で指定できる。一実施形態では、それは、複数のデータ構造のアドレスを決定するために使用される情報を提供するデータ構造識別子フィールドを含む。データ構造識別子フィールドは、様々な形式を取ることができる。一実施形態では、装置は、スカラデータ値を格納するスカラレジスタのセットをさらに備え、データ構造識別子フィールドは、格納されたスカラデータ値がメモリ内のベースアドレスを決定するために使用されるスカラレジスタを特定するスカラレジスタ識別子フィールドを含む。一実施形態では、ベースアドレスは、データ構造アドレスのすべてについて共通の基準点を形成する。さらに、データ構造識別子フィールドは、ベースアドレスから複数のデータ構造のアドレスを導出するために使用されるストライド情報を備えるストライド識別子フィールドを含む。これは、不連続なデータ構造の様々なアドレスを指定するための非常に柔軟なメカニズムを提供する。例えば、単一アクセス命令の複数のインスタンス間でベースアドレスを更新することによって、同じストライド情報を使用してメモリ内の多数のデータ構造にアクセスすることが可能になる。これは、ストライド情報が定数ストライド値を特定する状況で特に便利である。
【0025】
ストライド情報は、単一のアクセス命令によって特定される複数の不連続なデータ構造の隣接するデータ構造内の対応するデータ要素を分離するメモリアドレス空間に関する距離を特定するために使用される。ストライド情報は、多くの方法で指定することができるが、一実施形態では、バイト数として指定される。あるいは、ストライド情報は、各データ要素のバイト数でスケーリングされた数を指定することができる。そのような実施形態の1つでは、データ要素サイズは、追加のフィールドの命令内に埋め込むことができるパラメータを形成することができる。
【0026】
ストライド情報によって定数ストライド値が指定される実施形態では、ストライド識別子フィールドは、その定数ストライド値を指定する即値(immediate value)を含むか、またはその内容が定数ストライド値を指定するスカラレジスタを指定することができる。
【0027】
しかしながら、定数ストライド値が使用される必要はなく、特に、アクセスされる不連続なデータ構造の各々がメモリ内で規則的に間隔を置くことによる分離がされることを必要としない。代わりに、一実施形態では、ストライド情報は一連のストライド値を特定し、各ストライド値は複数のデータ構造のうちの少なくとも1つに関連付けられる。これにより、単一アクセス命令の実行によりアクセスされる複数のデータ構造がメモリ内の任意のアドレスに存在することが可能になる。
【0028】
ストライド情報が一連のストライド値を特定する実施形態では、ストライド識別子フィールドがその一連のストライド値を特定できる多数の方法がある。一実施形態では、ストライド識別子フィールドはベクトルレジスタを特定し、ベクトルレジスタ内の各データ要素は、データ構造の関連するもののアドレスをベースアドレスから決定するために使用されるストライド値を特定する。
【0029】
代替の実施形態では、データ構造識別子フィールドはベースアドレスを指定せず、代わりにベクトルレジスタを特定し、そのベクトルレジスタ内の各データ要素は、データ構造のうちの関連するもののアドレスを決定するために使用されるポインタデータを提供する。この場合も、アクセスされる複数のデータ構造がメモリ内の任意の場所に配置することができ、必要なデータ構造間に定数ストライドを設ける必要はない。
【0030】
一実施形態では、単一アクセス命令は、アクセスされるべき複数のベクトルレジスタを決定するために使用される情報を提供するベクトルレジスタ識別子フィールドをさらに含む。一実施形態では、命令は、ベクトルレジスタのそれぞれを独立して直接的に特定することができる。しかしながら、多くの場合、命令の利用可能な符号化空間は非常に限定されており、ベクトルレジスタの各々を独立して特定するのに十分な空間がない場合がある。代わりに、一実施形態では、ベクトルレジスタ識別子フィールドは、前記セット内の1つのベクトルレジスタを特定するために使用されるベクトルレジスタ識別子と、アクセスされる前記複数のベクトルレジスタのベクトルレジスタの数を特定するために使用される整数値とを含む。次いで、デコード回路は、特定された1つのベクトルレジスタおよび整数からの前記複数の各ベクトルレジスタを決定するために所定の規則を適用するように構成される。
【0031】
したがって、このような実施形態では、単一のベクトルレジスタのみを特定する必要があり、他のベクトルレジスタは、命令でさらに指定された整数値を使用して所定の規則を適用することによって推論することができる。特定の一実施形態では、デコード回路は、アクセスされるべき複数のベクトルレジスタとして、特定された1つのベクトルレジスタを含む連続する複数のベクトルレジスタを決定するように構成される。したがって、その実施形態では、単一アクセス命令を実行するときに、ベクトルレジスタのセット内の一連の隣接するベクトルレジスタが使用される。
【0032】
命令符号化空間が特に制約されるさらに別の実施形態では、複数のベクトルレジスタが予め定められ、従って、単一のアクセス命令符号化内で明示的な参照を必要としないように構成することができる。例えば、そのような単一のアクセス命令は、常に、例えばベクトルレジスタ0、1および2のような所定の一連の連続するベクトルレジスタを使用して動作することが予め決定されてもよい。
【0033】
一実施形態では、アクセス回路は複数のレーン上で動作し、各レーンは複数のベクトルレジスタのそれぞれからの対応するデータ要素位置を組み込んでいる。一実施形態では、単一のアクセス命令の実行により、各レーンに関してアクセス動作が実行され得るが、代替の実施形態では、単一のアクセス命令は、複数のレーンのうちのどれが一連のアクセス動作のためにアクティブレーンであるかを決定するために使用される述語(predicate)情報を提供する述語識別子フィールドを含むことができる。次に、アクティブレーンに対してのみアクセス動作が実行され、非アクティブレーンに関してはそれ以上の処理は必要ない。特に、アクセス回路は、移動されるべき複数のデータ構造として、アクティブレーンに関連するそれらのデータ構造を決定するように構成される。これは、単一のアクセス命令がどのように使用されるか、およびアクセスされるデータ構造がどのように指定されるかについて、大幅に向上した柔軟性を提供する。純粋に例として、それは、通常のストライド値が指定され得ることを意味し得るが、その通常のストライドによって特定されるデータ構造のうちの1つ以上がアクセスされる必要はない。これらのデータ構造の場合、対応するレーンは述語情報によって非アクティブとしてマークされることができる。
【0034】
述語情報は、他の目的のためにも使用することができる。例えば、単一アクセス命令がロード命令である場合、アクセス回路は、ロードされる複数のデータ構造を特定するために使用される述語情報を使用して圧縮動作を実行するように構成されてもよく、アクセス回路は、それらのデータ構造を複数のベクトルレジスタ内の一連の連続レーン内に格納するように構成されている。これは、不要なデータ要素を除去するために再配置動作を行うための後続の命令を実行する必要を回避することによって、効率を高めることができる。
【0035】
一実施形態では、単一アクセス命令は、複数のデータ構造のアドレスを決定するときに、データ構造識別子フィールド内の情報と組み合わせて適用されるオフセットデータを提供するオフセット識別子フィールドも含むことができる。これは、ベクトル演算をより効率的に使用するためにコードのループアンローリング(loop unrolling)を実行する場合に特に便利である。具体的には、次いで、それは、ループの同じ反復内で、単一のアクセス命令の複数の呼び出しを使用することが可能であり、各呼び出しは単に異なるオフセット値を使用する。これにより、アンロールされたループ(unrolled loop)の同じ反復でアクセス可能なデータのベクトル値の数を増加することができる。
【0036】
アクセス回路は様々な形態をとることができるが、一実施形態では、一連のアクセス動作の実行中にデータ要素を一時的にバッファできるように、ロード/ストア部(load/ store unit)および関連するバッファストレージを備える。
【0037】
別の実施形態では、アクセス回路は、一連のアクセス動作を実行するために組み合わせて動作するロード/ストア部およびベクトル置換部(vector permute unit)を備えることができる。
【0038】
一実施形態では、ロード/ストア部およびベクトル置換部は、データ要素の中間ベクトルを格納するために使用される前記セット内の1つまたは複数のベクトルレジスタを介してデータ要素を交換するように構成される。このようなアプローチは、ロード/ストア部がレジスタとメモリとの間で一連のデータ要素を移動させるために標準的なロードまたはストア動作を実行することを可能にし、各アクセスのデータ要素がメモリ内の連続したアドレスを占め、次いで、ベクトル置換部は、データ要素の必要な並べ替えを実行する。したがって、ロード命令の場合、ロード/ストア部が必要なデータ要素をロードした後に、ベクトル置換部がその並べ替えを実行し、一方、ストア動作の場合、ベクトル置換部は、ロード/ストア部に先立って必要な並べ替えを実行し、次に必要なストア動作を実行する。
【0039】
ここで、特定の実施形態を図面を参照して説明する。
【0040】
図1は、説明された実施形態の技術が採用され得るシステムのブロック図である。
図1に示す例では、システムはパイプライン型プロセッサの形態をとる。命令は、命令キャッシュ15からフェッチ回路10によってフェッチされ、命令によって要求される動作を実行するためのパイプライン型プロセッサ内の下流の実行リソースを制御するための適切な制御信号を生成するために各命令をデコードするデコード回路20を通過する。デコードされた命令を形成する制御信号は、パイプライン型プロセッサ内の1つ以上の実行パイプライン30、35、40に発行する発行段回路25に渡される。
【0041】
発行段回路25はレジスタ45にアクセスし、そこでは様々な動作のためのソースオペランドを形成するデータ値を格納することができる。これらのソースオペランドは、経路47を介して発行段回路に送られ、その結果、これらのソースオペランドは、各デコードされた命令を実施するために実行されるべき動作(複数可)を特定する制御信号と共に適切な実行部にディスパッチされることができる。算術演算は、例えば、それらのソースオペランドに対して算術論理演算を実行することを可能にするために、必要なソースオペランドと共に算術論理部(ALU)30に転送することができ、結果値は、通常、レジスタ45の特定のレジスタに格納するための宛先オペランド(destination operand)として出力される。
【0042】
ALU30に加えて、他の実行部35、例えば、デコードされた浮動小数点命令に応答して浮動小数点演算を実行する浮動小数点ユニット(FPU)を設けることができる。さらに、ロード/ストア部(LSU)40は、データ値をメモリ55から1つまたは複数のレベルのデータキャッシュ50を介してレジスタ45の指定された一つ以上のものにロードし、指定されたレジスタからのデータ値をメモリ55に戻すようにストア動作を実行するために使用される。
【0043】
図1に示すシステムは、一連の命令がプログラム順序で実行されるインオーダ(in-order)処理システムであってもよく、またはアウトオブオーダ(out-of-order)システムであってもよく、様々な命令が実行される順番を並び変えることを可能にし、性能を向上させることを目的とする。当業者には理解されるように、アウトオブオーダシステムでは、追加の構造(
図1には明示されていない)が提供され、例えば、レジスタリネーミング回路は、命令によって指定されたアーキテクチャレジスタをレジスタバンク45内の物理レジスタのプールから物理レジスタにマッピングし(物理レジスタのプールは典型的にはアーキテクチャレジスタの数よりも多い)、それにより、特定の危険を除去することができ、アウトオブオーダ処理の使用を容易にする。さらに、通常は、アウトオブオーダの実行を追跡し、様々な命令の実行結果を順番にコミットできるように、再配列バッファが提供される。
【0044】
記述された実施形態では、
図1の処理回路は、レジスタ45に格納されたベクトルオペランド上のベクトル演算を実行するように構成されており、ベクトルオペランドは複数のデータ要素を含む。このようなベクトルオペランドに対してベクトル演算が実行されると、ベクトルオペランド内の様々なデータ要素にわたって必要な演算が反復して適用される。一実施形態では、レジスタ45は、ベクトルレジスタ70のセットを含み、各ベクトルレジスタは、複数のデータ要素を含むベクトルオペランドを格納することができる。
【0045】
レジスタバンクは、他のレジスタ、例えばスカラデータ値を格納するスカラレジスタ80のセット、および述語情報を格納するための1つ以上の述語レジスタ75を含むこともできる。述語情報は、ベクトルオペランド内の各データ要素位置に対する述語データを提供する。したがって、述語レジスタ内の述語データは、ブール(Boolean)(すなわち真/偽(true/false))条件のベクトルを指定し、関連するベクトルオペランド内の各データ要素は、それらのブール条件の1つに関連付けられる。一実施形態では、述語データ内の述語条件の項目の数と、その述語データによって制御される関連ベクトルオペランド内のデータ要素の数との間に1対1の関係が存在することがあるが、これは必須ではなく、別の実施形態では、述語データの単一項目は、複数のデータ要素に適用される条件を提供することができる。さらに、一実施形態では、述語データ内の各述語項目は単一ビットの形をとるが、各述語項目を単一ビットだけで指定する必要はない。
【0046】
一実施形態によれば、セット70からの複数のベクトルレジスタおよびメモリ内の複数の不連続なデータ構造も特定する特定のタイプのアクセス命令が定義され、デコード回路20は、そのような命令をデコードすることに応答して、発行段回路25を介してロード/ストア部40に渡される制御信号を生成し、ロード/ストア部に、メモリと指定された複数のベクトルレジスタとの間で特定された複数のデータ構造を移動させる。さらに、そのアクセス命令の実行を実施するためにロード/ストア部によって実行される一連の動作の一部として、ロード/ストア部は、各ベクトルレジスタ内のベクトルオペランドが複数のデータ構造のそれぞれからの対応するデータ要素を保持するように移動されるときに、各データ構造の複数のデータ要素を再配置するように構成される。このプロセスを支援するために、ロード/ストア部40は、このプロセス中に特定のデータ要素をバッファすることができるローカルバッファストレージ60にアクセスする。
【0047】
ロード/ストア部40によって実行される移動および再配置が
図2に概略的に示されている。ここでは、メモリアドレス空間100内の対応するアドレス107、112、117に不連続な一連のデータ構造105、110、115が配置されて、示されている。先に言及した新しいアクセス命令は、要求されるデータ構造105、110、115のそれぞれについての様々なアドレス107、112、117が決定されるのに十分な情報を提供し、一連のベクトルレジスタ120、125、130も特定する。特定されたベクトルレジスタの数は、各データ構造内のデータ要素の数に本質的にリンクされる。この例では、各データ構造内に3つのデータ要素があり、
図2の特定の例では、これらのデータ要素は、赤、緑、青の画素値を表すと仮定されている。アクセス命令がロード命令である場合、ロード/ストア部40によって実行される動作は、様々なデータ構造105、110、115がアクセスされ、データ要素を並べ替え、その結果、ベクトルレジスタ120、125、130の各々は、複数のデータ構造からの対応するデータ要素である一連のデータ要素からなるベクトルオペランドを受け取る。従って、例として、ベクトルレジスタ120は、一連の赤画素値を含むベクトルオペランドを受信し、ベクトルレジスタ125は、一連の緑画素値を含むベクトルオペランドを受信し、ベクトルレジスタ130は、一連の青画素値を含むベクトルオペランドを受け取ることができる。
【0048】
あるいは、アクセス命令は、ストア命令であってもよく、指定されたベクトルレジスタの内容が読み取られ、次に、データ要素が複数のデータ構造105、110、115内のアドレス107、112、117のそれぞれの位置に書き出されるように並べ替えが実行される。
【0049】
各ベクトルオペランド内に含まれるデータ要素の数は、ベクトルレジスタのサイズおよびデータ要素のサイズに依存する。一例として、一実施形態では、各ベクトルレジスタの長さは32ビットであり、各データ要素は1バイトであってもよく、その結果、各ベクトルレジスタは4つのデータ要素を格納する。しかし、他の実施形態では、異なるサイズのベクトルレジスタを使用することができ、実際にはデータ要素は異なるサイズを有することができる。
【0050】
図3は、上述した単一アクセス命令内に提供される様々なフィールドを示す図である。ロード/ストア識別子フィールド155は、アクセス命令がロード命令かストア命令かを特定するために使用される。次に、レジスタ識別子フィールド160は、ロード命令の宛先レジスタとして、またはストア命令のソースレジスタとして使用される複数のレジスタを特定するために使用される。これらの様々なレジスタをフィールド160内で指定することができる多くの方法がある。例えば、十分な符号化空間があると仮定すると、各レジスタはそのフィールド内で個別に特定することができる。しかし、多くの場合、命令の符号化空間は非常に限られており、個々のレジスタを一意に特定するための空間が不十分な場合がある。
【0051】
したがって、一実施形態では、
図3に示すように、単一のレジスタ識別子180が、レジスタの数を特定する整数値N175と共に提供されてもよい。先に述べたように、レジスタの数は、各データ構造のデータ要素の数に本質的にリンクされている。したがって、
図2の先の例を考慮すると、Nが3に等しく設定され、単一のレジスタがフィールド180において特定され得る。次いで、デコード回路20は、どのレジスタが使用されるべきかを決定するための所定の規則を適用するように構成されてもよい。例えば、フィールド180で特定されるレジスタから始まる一連の順次レジスタを使用することが決定されてもよい。したがって、例えばフィールド180がベクトルレジスタZ0を特定し、Nが3に等しく設定されている場合には、デコード回路は、ベクトルレジスタZ0、Z1およびZ2が使用されるべきであると決定することができる。
【0052】
一実施形態では、フィールド180で指定されたレジスタ識別子は、アーキテクチャベクトルレジスタの数を法として増分されるように構成される。したがって、例えば、レジスタ指定子180が、ベクトルレジスタ0〜31の利用可能なセットのベクトルレジスタ30を特定し、Nが再び3に等しい場合、デコード回路は、使用されるベクトルレジスタがベクトルレジスタ30、31および0であると決定することができる。
【0053】
後により詳細に説明するように、命令は、指定されたレジスタ内のアクティブレーンを特定し、したがって移動されるべき複数のデータ構造を特定するために、述語識別子フィールド165を任意に含むことができる。これについては、
図6および
図7を参照して後でより詳細に説明する。
【0054】
命令符号化150はまた、アクセスされる必要がある複数のデータ構造のアドレスを決定するのに十分な情報を提供するデータ構造識別子フィールド170を含む。このフィールドの情報はさまざまな形式を取ることができ、4つの例を
図3に示す。
【0055】
図3の例Aによれば、ベクトルレジスタ識別子190がフィールド170内に設けられ、フィールド170は、必要なデータ構造の各々に対する一連の任意のポインタを含むベクトルレジスタを特定する。ポインタは、それらのデータ構造の開始または終了のいずれかを指してもよい。したがって、一実施形態では、そのようなベクトルレジスタ内の各データ要素は、関連するデータ構造のアドレスを決定するために使用されるポインタを提供し、したがって、他のデータ構造に対する各データ構造の位置は、全く任意であり得ると理解される。
【0056】
図3の例Bによれば、スカラレジスタ識別子200は、格納されたデータ値がベースアドレスを特定するスカラレジスタ80の1つを特定するために使用される。次いで、ベクトルレジスタ識別子205を使用して、格納されたデータ要素が、必要なデータ構造のそれぞれのベースアドレスに対するオフセットを提供するベクトルレジスタを特定する。従って、各データ構造のアドレスは、関連するオフセット値をベースアドレスに加えることによって見出すことができる。再度、ここでも、これにより、単一の命令を介して任意の場所からのデータ構造に効果的にアクセスすることが可能になることが分かる。
【0057】
例Cは、スカラレジスタ識別子200を再び使用するが、さらに、定数ストライド値を指定する命令内に符号化された即値215を提供する。したがって、その構成では、各データ構造がメモリ内で互いに不連続に配置されているが、様々なデータ構造は、メモリアドレス空間内の規則的な距離だけ互いに分離されている。したがって、一実施形態では、第1のデータ構造のアドレスはベースアドレスから導出され得て、一方、次のデータ構造はベースアドレスに即値を加算することによって計算されるアドレスを有する。その後の次のデータ構造には、ベースアドレスに即値の2倍を加算して計算されるアドレスを有し、等々。
【0058】
例Dは、即値215の代わりに、その内容が定数ストライド値を指定するスカラレジスタ識別子225が特定される別の代替例を示す。したがって、例Dによる各データ構造のアドレスの計算は、例Cについて上述したものと同じである。
【0059】
一実施形態では、ベクトル長(すなわち、各ベクトルにおけるデータ要素の数)およびデータ要素のサイズは暗黙的であってもよい。しかし、別の実施形態では、そのような情報を命令内で符号化することができる。例えば、命令符号化は、データ要素サイズ(例えば8、16、32または64ビット)を特定する情報を含むことができ、次いで、ベクトル長は、命令で参照されるベクトルレジスタのサイズおよび指定されたデータ要素サイズから決定される。指定されたデータ要素サイズは、ストライド情報など、命令で指定された他の情報のスケーリングを実行するためにも使用できる。
【0060】
図4は、一実施形態による関連する不連続データ構造の様々なアドレスの計算を示す図である。この例では、命令符号化は
図3の例Dに示すものであり、特にデータ要素のベクトルを3つのベクトルレジスタZ0、Z1およびZ2にロードするロード命令が指定されていると仮定する。この命令は、オプションの述語フィールドPgも含むが、この例では、述語が指定されていれば、すべてのレーンがアクティブであることを特定すると仮定する。さらに、スカラレジスタはベースアドレスを特定し、このスカラレジスタは
図4のXbと呼ばれる。さらに、別のスカラレジスタRsが定数ストライド値を特定するために使用される。この特定の例では、ベースレジスタは、ここではXレジスタと呼ばれる64ビットスカラレジスタで指定されると仮定する。ストライド(Stride)を特定するレジスタに関連する用語「R」の使用は、より一般的であり、実施形態に応じて、32ビットスカラレジスタまたは64ビットスカラレジスタのいずれかにマッピングすることができる。
【0061】
わかるように、特定のデータ構造「i」のアドレスは、ストライドレジスタに指定されたストライドにiを掛けて、それをベースレジスタにあるベースアドレスに加算することによって求められる。この実施形態では、ストライド値は、隣接する構造内の対応するデータ要素間のバイト数を直接指定すると仮定する。しかし、スカラレジスタRsのストライドデータは、いくつかの方法で指定することができ、例えば、必要に応じてバイトサイズの単位ではなく、データ構造体サイズの単位で指定、またはデータ要素ごとのバイト数でスケーリングした値で指定できる。代わりに、数値バイトの代わりにビット数として指定することもできる。
【0062】
さらに別の方法として、必要なストライド情報は、スカラレジスタから得られた値と、各データ構造内のデータ要素のサイズおよびデータ要素の数に関する情報とを組み合わせることによって決定することもできる。
【0063】
図5は、複数の非連続なデータ構造を指定する、上述のタイプのアクセス命令の発生時に
図1の装置によって実行される動作を示すフロー図である。ステップ300におけるそのような命令のデコード回路20による検出がされると、次に、ステップ305において、デコード回路20は、アクセス命令によって特定された各ベクトルレジスタに対して別々のギャザーまたはスキャッター動作を生成するように構成される。特に、ロード命令の場合、デコーダは一連のギャザー動作のための制御信号を生成するが、ストア命令の場合、デコーダは一連のスキャッター動作のための制御信号を生成する。したがって、例として、命令がロード命令であり、データ構造がRGBデータ要素成分を有する場合、デコード回路は、特定されたデータ構造から1つの宛先レジスタに赤画素値をロードするための第1のギャザー動作と、特定されたデータ構造から別のベクトルレジスタに緑画素値をロードする別個のギャザー動作と、特定されたデータ構造から第3のベクトルレジスタに青画素値をロードする最終ギャザー動作の3つのギャザー動作を規定するための制御信号を生成する。
【0064】
当然のことながら、これらのギャザー/スキャッター動作を特定する必要な制御信号は、ステップ310でそれらの動作を実行させるために、ロード/ストア部40に転送される。一実施形態では、ロード/ストア部は、必要に応じてローカルバッファ60を使用して一連のロードまたはストアマイクロ動作として各ギャザーまたはスキャッター動作を実行するように構成できる。したがって、例として、特定されたデータ構造からベクトルレジスタZ0に赤画素値をロードするためのギャザー動作を実行する場合、メモリから赤画素データ要素R0を取得し、それをバッファ60に格納するために、ロードマイクロ動作が実行されてもよく、一方、別のロードマイクロ動作が、メモリからの残りの赤画素データ要素をロードするために使用され、それらはバッファ60にも格納される。必要な赤画素値のすべてが得られたら、赤画素値のそのベクトルオペランドをベクトルレジスタZ0に格納するために、ベクトルレジスタ70への単一書き込みを行うことができる。
【0065】
あるいは、ロード/ストア部40がローカルバッファ記憶装置へのアクセスを有していなかった場合、ロードマイクロ動作の実行中にベクトルレジスタZ0への複数のアクセスを実行して、それぞれの個々のデータ要素がメモリから取得されるときにベクトルレジスタに格納されるようにする。
【0066】
図6は、このような述語情報が命令符号化150の述語識別子フィールド165内で特定される、一実施形態による述語情報の使用方法を概略的に示す。特に、一実施形態では、述語識別子フィールド165は、汎用述語レジスタPgを特定するために使用することができ、
図6に示すベクトルレジスタ320、325、330内のレーンごとに単一の述語ビットを述語情報として格納する。特に、各レーンは、アクセス命令によって指定された複数のベクトルレジスタのそれぞれからの対応するデータ要素位置を組み込むことが分かる。
【0067】
述語ビットが第1の値に設定されている場合、これは対応するレーンがアクティブであることを示すために使用され、一方、第2の値に設定される場合には対応するレーンが非アクティブであることを示すために使用される。
図6に示す例では、論理1の値がアクティブレーンを示し、論理ゼロの値が非アクティブレーンを示すと仮定するが、これらのビットの意味は必要に応じて逆にすることができると理解されよう。
【0068】
例としてロード動作を考慮して、
図4に示す4つのデータ構造が命令のデータ構造識別子フィールド170によって特定されると仮定する場合、レーン1に論理ゼロ値が存在すると、ロード/ストア部はデータ構造270がメモリから取得される必要がないと判断する。従って、たとえ命令が例えば
図3の例CまたはDを使用することによって定数ストライドが指定されており、それゆえ一連のアドレスを計算するときにポインタS[1]が当然に特定されているとしても、非アクティブレーン1が存在すると、そのアクセスが抑制される。代わりに、データ構造260、280および290のみがアクセスされ、それらの様々なデータ要素は、ベクトルレジスタ320、325、330のレーン0、2および3内に格納される。一実施形態では、ベクトルレジスタ320、325、330内で、レーン1に関連するデータ要素位置のデータ値は、ベクトルがそれらのレジスタのそれぞれに書き込まれるときに論理ゼロ値に設定される。しかし、別の実施形態では、レジスタが更新された後、レーン1の内容がそのレーン内の既存のデータ要素値で記述されるように、新しいデータ内容を既存の内容とマージすることができる。
【0069】
述語情報は、ストア動作を実行するときに同様の方法で使用することができる。特に、ロード/ストア部が様々なレジスタ320、325、330の内容を読み取るとき、R1、G1、およびB1データ要素をそれらの関連するデータ構造270に格納する必要がないと判断し、したがってそのデータ構造に関してメモリへの関連するストア動作の実行を抑制する。
【0070】
ロード動作を実行するとき、
図7に概略的に示すように、必要に応じて述部情報を使用して圧縮を実行することもできる。この例では、述語情報350は、レーン0および2がアクティブであることを特定するが、レーン1および3は非アクティブであることを特定する。したがって、
図4の例を参照すると、これは、データ構造260、280がアクセスされる必要があるが、データ構造270、290はアクセスしないことを特定する。したがって、データ構造260および280だけがアクセスされる。しかし、データ構造280の内容をレーン2に書き込むのではなく、そのかわりに、それらはレーン1に書き込まれる。したがって、圧縮のおかげで、アクティブレーンの各々について得られたデータ要素がベクトルレジスタ355、360、365に書き込まれ、これらのレジスタ内の連続するレーンを占めるようにする。残りのレーンの内容は、ゼロにされるか、または「そのまま」の状態にされるか、すなわち、それらは、様々なレジスタ355、360、365内のそれらのデータ要素位置に格納された以前の値を維持する。必要に応じて、次いで、さらなるロード命令を使用して、残りのレーンを不連続なデータ構造からの必要なデータで満たすことができる。
【0071】
これは、メモリから不連続なデータ構造の内容がロードされた後に、レジスタの内容に対する後続の再配置動作を実行する必要を潜在的に回避することによって、さらなる最適化を提供することができる。
【0072】
図8は、
図1のデータ処理装置の別の形態を示しており、ロード/ストア部40は、必要な並べ替え動作を実行するために特殊な目的の置換部(「特殊目的置換部」ともいう)と組み合わせて動作する。したがって、この実施形態では、先に説明したアクセス命令をデコードするときにデコード回路20によって生成される様々な制御信号は、ロード/ストア部に対する制御情報と特殊目的置換部400に対する制御情報の両方を提供する。一例としてロード命令を考慮すると、発行段回路はLSU40に一連の制御信号を発行し、それが、メモリから得られたデータ要素でレジスタ45内の多数のベクトルレジスタを満たすようにする。この場合、各ベクトルレジスタ内で、LSUによってそのベクトルレジスタに格納された内容は、メモリ内の連続したアドレスから得られるデータ要素となる。したがって、この時点で、各データ構造の個々のデータ要素は、異なるベクトルレジスタに分離されていない。しかしながら、LSU40が所要のロード動作を実行すると、「完了(Done)」信号を介して特殊目的置換部400に通知し、その時点で、特殊目的置換部は発行段回路によって提供された制御情報を使用して、関連するレジスタから値を取得し、必要に応じてそれらを並べ替え、次いで、元のアクセス命令で指定された宛先レジスタに書き込む。
【0073】
ストア命令については、同様のステップをとることができるが、この場合、特別目的置換部400は、通常、必要な置換を最初に実行し、その後、ロード/ストア部に完了信号を発行し、ロード/ストア部は、次いで、個々のデータ構造内で必要な順序でデータ要素をメモリに書き出すことができる。
【0074】
従って、例として
図4に示された一連のデータ構造を考慮し、宛先レジスタがZ0、Z1およびZ2であり、ロード命令が実行されていると再び仮定すると、ロード/ストア部は、データ構造260と、そのデータ構造に続く連続するアドレスからのいくつかの追加のデータ値を潜在的に第1のベクトルレジスタにロードするためと、同様に第2のデータ構造270を異なるベクトルレジスタに格納するためと、第3のデータ構造280を別の異なるベクトルレジスタに格納するためと、第4のデータ構造290をさらに別のベクトルレジスタに格納する(これらのベクトルレジスタのそれぞれには、さらに、関連するデータ構造に続く連続したアドレスからのいくつかの追加データ値があってもよい)ために、4つのロード動作を実行するように構成することができる。これらのベクトルレジスタは、中間ベクトルレジスタとして効果的に使用され、元のロード命令によって指定されたレジスタZ0、Z1およびZ2のいずれかである必要はない。次いで、特殊目的置換部400は、これらの種々の中間ベクトルレジスタの内容にアクセスし、必要な置換を実行し、次いで、必要とされるそのベクトルオペランドを宛先ベクトルレジスタZ0、Z1およびZ2に格納する。したがって、特殊目的置換部400は、
図4の例示的なロードを実行するとき、赤画素値のすべてを単一のベクトル、緑画素値のすべてを別のベクトル、および青画素値のすべてをさらなるベクトル、に編成する。
【0075】
図9は、特殊目的置換部400が使用されず、代わりに、データ処理パイプライン内の実行部の1つを形成する既存のベクトル置換部410が使用される、さらなる例示的な構成を示す。効果的に、ベクトル置換部410は、専用置換部400のものと同様の機能を実行するが、発行段回路25およびレジスタ45からの経路47を介して、その置換演算のためのソースオペランドを得る。したがって、発行段回路25は、適切な制御信号をベクトル置換部410に発行して、提供されるソースオペランド値に対して実行する必要がある必要な置換を特定し、そしてまた、置換されたデータを格納する必要がある宛先レジスタも特定する。
【0076】
図10は、
図8または
図9のいずれかの手法を採用する場合の一連の動作を示すフロー図である。
図10のフロー図では、ロード動作が実行されていると仮定する。したがって、ロード/ストア部は、1つ以上のアクセスからのデータ要素で中間レジスタを満たす。個々のアクセスは不連続なメモリアドレスになる可能性がるが、各アクセス時に取得されるデータ要素はすべて連続したアドレスから得られる。したがって、この時点で、中間ベクトルレジスタの内容は、必要に応じてデータ構造のコンポーネントデータ要素に分離されない。
【0077】
しかしながら、ステップ425において、置換部は、次いで、LSUが取得したデータに対して必要な置換を実行する。存在する場合がある何らかのアライメント問題も解決する必要がある。
図4で特定された4つのデータ構造のそれぞれがLSUによって別のベクトルレジスタに格納され、取り出された最初のデータ要素がいずれの場合も赤の画素値であった以前の例では、アライメント問題はないが、他の実施形態では、一連の中間レジスタ内に含まれるデータがそのように予め整列されているわけではなく、各データ構造の対応するデータ要素を正しく特定するために何らかのアライメントが必要であることがある。
図10に示すように、このステップは、レジスタファイル45と相互作用する
図8の専用置換部400を使用して実行することができるか、または
図9の既存の置換部410を介して経路47上でデータを再循環させ、発行段回路25によって発行された個別のマイクロ動作を使用することによって実行できる。
【0078】
ロード命令ではなくストア命令を実行する場合、ステップ420および425は効果的に逆転される。
【0079】
上述の実施形態において様々なステップが実行される順序は、異なる実施形態において変更されてもよいことが理解されよう。例えば、
図3の符号化を考慮すると、アクセス回路が逆の順序でデータ構造上で動作することができることが理解されよう。
【0080】
別の構成例では、
図3の例示的な符号化B、CまたはDのいずれかを採用するとき、それを構成することもでき、アクセス命令は、必要なロード/ストア動作の完了時に自動的にベースレジスタを更新(本明細書ではポストインデックス更新と呼ぶ)するように構成することもできる。これにより、ロード/ストア命令の別のインスタンスが、同じベースレジスタ指定子を使用して指定されるが、ベースレジスタを更新するための別個の命令を必要とせずにデータ構造のさらなるシーケンス上で動作することが可能になる。
【0081】
さらに別の代替案として、ロード命令の実行中に、各ベクトルの1つまたは複数のデータ要素が投機的にロードされる、メモリ投機をいくつかのバリエーションで使用することができる。特に、利用可能なベクトル演算を活用するためにコードをベクトル化するとき、ベクトルレジスタにロードされるデータ構造のいくつかは、実際には処理のために実際に必要とされてもされなくてもよい。そのような状況では、装置は、ロード動作の間に実行される1つまたは複数のアクセスが投機的アクセスであることに気付くことができる。通常のアクセス中に障害が発生した場合、通常は、例えば、例外を処理するなどしてその障害を処理する必要がある。しかし、一実施形態では、メモリからの1つまたは複数のデータ構造の投機的取得中に障害が検出された場合、そのような動作は行われない。代わりに、このような構成では、メモリ障害(a memory fault)は(非投機的(non-speculative)である)最初のアクティブレーンで発生する場合にのみ生成される。
【0082】
図11は、追加のオフセット識別子フィールド450が提供されるアクセス命令のための符号化の代替形態を示す。したがって、4つの符号化オプションA、B、CおよびDのそれぞれは、オフセットを指定する即値455によって補足される。即値の代わりに、別個のスカラレジスタを特定することができ、その値は必要なオフセットを指定する。次に、オフセットが使用される方法が
図12に概略的に示されている。特に、同じデータ構造識別子情報(
図12の例では、これはベースレジスタとストライドレジスタの形式である)を使用する命令の複数のインスタンスを指定することを可能にするが、各インスタンスにおいてオフセット値が変更される。したがって、これにより、ベクトル処理リソースをより良く使用するために、命令のループをより効率的にアンロールすることが可能になる。具体的には、アンロールされたループ(unrolled loop)では、第1のロード命令はゼロのオフセットを指定し、したがって、
図12に示す計算を使用して生成されたアドレス460、470、480、490を使用して、4つのデータ構造465、475、485、495をベクトルレジスタZ0、Z1およびZ2にロードおよびデインターリーブ(de-interleave)する。次のロード命令は、次いで、正確に同じベースおよびストライド情報を使用することができるが、オフセットを1と指定し、取得されたデータ要素をさらに3つのベクトルレジスタ、この場合はレジスタZ3、Z4およびZ5にロードする。結果として、この命令は、
図12に示す計算を使用して再び特定されるアドレス500、510、520、530によって特定される4つのデータ構造505、515、525、535をロードおよびデインターリーブする。値「VL」はベクトルの長さ、すなわちベクトルレジスタ内のデータ要素の数である。
【0083】
このようなアプローチによって、アンロールされたループでアドレス計算を実行する命令の数を減らすことができ、また、命令の副作用としてベースポインタを調整する、前述のポストインデックス更新フォームが不要になる。
【0084】
上述の実施形態から、本明細書に記載された新しい形式のアクセス命令は、複雑なアクセス動作を実行する際に大幅な効率向上を可能にすることが理解されよう。実行速度に関して重要な利点が得られる。実行される命令の数を大幅に減らすことができ、実行速度を向上させることに加えて、装置内の電力消費も低減することができる。上記の命令を使用すると、抽象化のレベルが高くなり、複雑なアクセスのエラーが起こりにくくなり、したがって、そのような複雑なアクセス動作が必要な書き込みプログラムを作成するプロセスが容易になる。
【0085】
複数のデータ要素を含むデータ構造を利用する多くのアプリケーションが存在する。一例として、以下の例に類似のデータ構造を利用するアプリケーションは、上述の命令の使用によって利益を得ることができる。
【表1】
【0086】
図13は、使用可能な仮想マシンの実装を示している。前述の実施形態は、関連技術をサポートする特定の処理ハードウェアを動作させるための装置および方法に関して本発明を実施するが、ハードウェア装置のいわゆる仮想マシン実装を提供することも可能である。これらの仮想マシン実装は、仮想マシンプログラム610をサポートするホストオペレーティングシステム620を実行するホストプロセッサ630上で実行される。典型的には、妥当な速度で実行する仮想マシン実装を提供するために大きな強力なプロセッサが必要とされるが、互換性や再利用の理由から別のプロセッサに固有のコードを実行したいという要求がある場合など、そのようなアプローチは、ある状況において正当性を示しうる。仮想マシンプログラム610は、仮想マシンプログラム610によってモデル化される装置である実際のハードウェアによって提供されるアプリケーションプログラムインターフェースと同じアプリケーションプログラム600へのアプリケーションプログラムインターフェースを提供する。したがって、複数の非連続なデータ構造を指定する上述のアクセス命令を含むプログラム命令は、仮想マシンプログラム610を使用してアプリケーションプログラム600内から実行され、仮想マシンハードウェアとの相互作用をモデル化することができる。
【0087】
本出願において、「〜に構成された」という用語は、装置の要素が定義された動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」は、ハードウェアまたはソフトウェアの相互接続の配置または方法を意味する。例えば、装置は、定義された動作を提供する専用のハードウェアを有することができ、またはプロセッサや他の処理装置が機能を実行するようにプログラムされてもよい。「〜に構成された」は、定義された動作を提供するために装置要素を何らかの方法で変更する必要があることを意味しない。
【0088】
本発明の例示的な実施形態を添付の図面を参照して詳細に説明したが、本発明はこれらの厳密な実施形態に限定されず、添付の特許請求の範囲によって規定される本発明の範囲および趣旨から逸脱することなく、様々な変更、追加および修正を当業者によって行うことができることを理解されよう。例えば、従属請求項の特徴の様々な組合せは、本発明の範囲から逸脱することなく、独立請求項の特徴によって行うことができる。