(57)【特許請求の範囲】
【請求項１】
データ処理装置であって、
データ要素を保存するように配置された複数のレジスタを有するレジスタデータ保存部と、
一連のベクトル命令を実行するベクトル処理ユニットであって、前記ベクトル処理ユニットは、複数の並列処理レーンを有し、かつ、前記一連のベクトル命令の実行時において前記レジスタデータ保存部にアクセスして、前記レジスタデータ保存部からのデータ要素の読み出しおよび前記レジスタデータ保存部へのデータ要素の書き込みを行う、ベクトル処理ユニットと、
前記並列処理レーンそれぞれについてスキップインジケータを維持するためのスキップインジケーション保存部と、
を含み、
前記ベクトル処理ユニットは、前記一連のベクトル命令内のベクトルスキップ命令に応答して、前記スキップインジケーション保存部内において、前記複数の並列処理レーンのうち決定された１つ以上のレーンに対して前記スキップインジケータを設定する更新作業を行い、
前記ベクトル処理ユニットは、前記一連のベクトル命令内のベクトル作業命令に応答して、前記複数の並列処理レーンに対してデータ要素入力を並列に行う作業を実行するが、前記作業において、関連付けられたスキップインジケータが設定されている任意のレーンは前記作業の遂行から除外し、
各前記スキップインジケータはスキップカウント値を含み、前記スキップカウント値が非ゼロ値を有する場合、前記スキップカウント値は設定されているとみなされ、前記スキップカウント値がゼロ値を有する場合、前記スキップカウント値は設定されていないとみなされ、
前記ベクトル処理ユニットは、前記ベクトルスキップ命令に応答して、前記決定された１つ以上のレーンに対する前記スキップカウント値を所定の非ゼロ値に設定し、
前記一連内の各ベクトル命令について、前記ベクトル命令の実行時において前記スキップカウント値が設定された場合、前記ベクトル処理ユニットは、前記ベクトル命令によって指定された作業を行う代わりに前記スキップカウント値をデクリメントするように、構成される、
データ処理装置。
【請求項２】
前記ベクトル処理ユニットは、前記ベクトルスキップ命令の実行時に、前記ベクトルスキップ命令の実行時において既に設定されている任意のスキップインジケータを前記更新作業から除外する、請求項１に記載のデータ処理装置。
【請求項３】
前記所定の非ゼロ値は、前記ベクトルスキップ命令のオペランドとして指定される、請求項１または２に記載のデータ処理装置。
【請求項４】
前記ベクトルスキップ命令の実行時において、前記ベクトル処理ユニットは、全ての設定されたスキップカウント値をデクリメントするように、構成される、請求項１〜３のいずれか１項に記載のデータ処理装置。
【請求項５】
前記スキップインジケーション保存部は、前記並列処理レーンそれぞれに対する長スキップインジケータをさらに保持し、
さらなるベクトルスキップ命令が提供され、前記さらなるベクトルスキップ命令が前記ベクトル処理ユニットによって実行されると、前記決定された１つ以上のレーンそれぞれの前記スキップカウント値の代わりに、前記決定された１つ以上のレーンそれぞれの長スキップインジケータが設定され、
各ベクトル命令の実行時において、前記長スキップインジケータは設定されたままである、
請求項１〜４のいずれか１項に記載のデータ処理装置。
【請求項６】
前記ベクトル処理ユニットは、ベクトルスキップ終了命令に応答して、各設定された長スキップインジケータを消去する、
請求項５に記載のデータ処理装置。
【請求項７】
各長スキップインジケータは長スキップカウント値を含み、前記長スキップカウント値が非ゼロ値を有する場合、前記長スキップカウント値は設定されているとみなされ、前記長スキップカウント値がゼロ値を有する場合、前記長スキップカウント値は設定されていないとみなされ、
前記さらなるベクトルスキップ命令に応答して、前記ベクトル処理ユニットは、前記決定された１つ以上のレーンそれぞれの長スキップカウント値をインクリメントさせ、
前記ベクトル処理ユニットは、ベクトルスキップ終了命令に応答して、各設定された長スキップカウント値をデクリメントする、
請求項５に記載のデータ処理装置。
【請求項８】
前記スキップインジケーション保存部は、前記並列処理レーンそれぞれに対する前記スキップインジケータを保存する第１のレジスタと、前記並列処理レーンそれぞれに対する長スキップインジケータを保存する第２のレジスタとを含む、
請求項５〜７のうちいずれかに記載のデータ処理装置。
【請求項９】
前記スキップインジケーション保存部は、前記並列処理レーンそれぞれに対するスキップインジケータを保存するレジスタを含み、各スキップインジケータは、前記ベクトル処理ユニットにより、設定されたスキップカウント値を特定する第１の複数の非ゼロ値のうち任意の値に設定可能であり、設定された長スキップインジケータを特定するように、前記第１の複数の非ゼロ値に含まれない少なくとも１つの所定の非ゼロ値に設定可能である
請求項５〜７のうちいずれかに記載のデータ処理装置。
【請求項１０】
前記ベクトルスキップ命令は、スキップインジケータオペランドとして、前記決定された１つ以上のレーンについて前記スキップインジケータが設定されるべき前記所定の非ゼロ値を指定し、前記さらなるベクトルスキップ命令は、前記スキップインジケータオペランドとしてヌル値を指定することで、前記さらなるベクトルスキップ命令と、前記ベクトルスキップ命令とを区別することが可能になる、請求項５〜９のうちいずれかに記載のデータ処理装置。
【請求項１１】
前記ベクトルスキップ命令は、スキップインジケータを設定すべき前記決定された１つ以上のレーンを直接指定する、請求項１〜１０のうちいずれかに記載のデータ処理装置。
【請求項１２】
前記ベクトルスキップ命令に応答して、前記ベクトル処理ユニットは、１つ以上の所定の条件が満たされたかを各レーンについて評価し、前記評価に基づいて、スキップインジケータを設定すべき前記決定された１つ以上のレーンを指定する、請求項１〜１０のうちいずれかに記載のデータ処理装置。
【請求項１３】
前記決定された１つ以上のレーンは、前記１つ以上の所定の条件が満たされたレーンである、請求項１２に記載のデータ処理装置。
【請求項１４】
前記並列処理レーンそれぞれに対する少なくとも１つの条件コードを保存する条件コード保存部、
をさらに含み、
前記ベクトル処理ユニットは、前記少なくとも１つの条件コードが設定されているかを確認することにより、前記１つ以上の所定の条件が満たされたかを各レーンについて評価するように、構成される、
請求項１２または１３に記載のデータ処理装置。
【請求項１５】
前記作業の遂行から除外された任意のレーンについて、前記レーン内において前記作業が行われるが、前記レーンにおける前記作業の遂行によって得られた結果値は捨象される、請求項１〜１４のうちいずれかに記載のデータ処理装置。
【請求項１６】
前記レジスタデータ保存部は、複数のベクトルレジスタを含むベクトルレジスタバンクを含み、各ベクトルレジスタは、前記ベクトル処理ユニット内の異なる並列処理レーンに提供されるべき複数のデータ要素を保存する、
請求項１〜１５のうちいずれかに記載のデータ処理装置。
【請求項１７】
スカラー処理ユニットと、
前記スカラー処理ユニットと関連付けられたスカラーレジスタバンクと、
前記スカラー処理ユニットと前記ベクトル処理ユニットとの間で共有される命令フェッチおよび命令復号化ユニットと、
をさらに含む、請求項１〜１６のうちいずれかに記載のデータ処理装置。
【請求項１８】
前記ベクトル処理ユニットはパイプライン型処理ユニットであり、複数のベクトル命令を任意のタイミングで同時に処理することができる、請求項１〜１７のうちいずれかに記載のデータ処理装置。
【請求項１９】
データ処理装置内のベクトル命令を取り扱う方法であって、前記データ処理装置は、データ要素を保存するように配置された複数のレジスタを有するレジスタデータ保存部と、一連のベクトル命令を実行するベクトル処理ユニットであって、前記ベクトル処理ユニットは、複数の並列処理レーンを有し、かつ、前記一連のベクトル命令の実行時において前記レジスタデータ保存部にアクセスして、前記レジスタデータ保存部からのデータ要素の読み出しおよび前記レジスタデータ保存部へのデータ要素の書き込みを行う、ベクトル処理ユニットとを含み、前記方法は、
前記並列処理レーンそれぞれに対するスキップインジケータをスキップインジケーション保存部内に保持するステップと、
前記一連のベクトル命令内のベクトルスキップ命令に応答して、前記複数の並列処理レーンのうち決定された１つ以上のレーンに対する前記スキップインジケータを前記スキップインジケーション保存部内に設定する更新作業を行うステップと、
前記一連のベクトル命令内のベクトル作業命令に応答して、前記複数の並列処理レーンに対してデータ要素入力を並列に行う作業を実行するが、前記作業において、関連付けられたスキップインジケータが設定されている任意のレーンは前記作業の遂行から除外するステップと、
を含み、
各前記スキップインジケータはスキップカウント値を含み、前記スキップカウント値が非ゼロ値を有する場合、前記スキップカウント値は設定されているとみなされ、前記スキップカウント値がゼロ値を有する場合、前記スキップカウント値は設定されていないとみなされ、
前記方法は、
前記ベクトルスキップ命令に応答して、前記決定された１つ以上のレーンに対する前記スキップカウント値を所定の非ゼロ値に設定するステップと、
前記一連内の各ベクトル命令について、前記ベクトル命令の実行時において前記スキップカウント値が設定された場合、前記ベクトル命令によって指定された作業を行う代わりに前記スキップカウント値をデクリメントするステップと、
を含む、
方法。
【請求項２０】
コンピュータで読み出し可能な命令を含むコンピュータプログラムであって、前記コンピュータで読み出し可能な命令がコンピュータ上において実行されると、前記コンピュータは、請求項１９に記載のベクトル命令を取り扱う方法を行う、コンピュータプログラム。
【請求項２１】
データ処理装置であって、
データ要素を保存する複数のレジスタ手段を有するレジスタデータ保存手段と、
一連のベクトル命令を実行するベクトル処理手段であって、前記ベクトル処理手段は、複数の並列処理レーンを提供し、かつ、前記一連のベクトル命令の実行時において前記レジスタデータ保存手段にアクセスして、前記レジスタデータ保存手段からのデータ要素の読み出しおよび前記レジスタデータ保存手段へのデータ要素の書き込みを行う、ベクトル処理手段と、
前記並列処理レーンそれぞれに対するスキップインジケータを保持するスキップインジケーション保存手段と、
を含み、
前記ベクトル処理手段は、前記一連のベクトル命令内のベクトルスキップ命令に応答して、前記複数の並列処理レーンのうち決定された１つ以上のレーンに対する前記スキップインジケータを前記スキップインジケーション保存手段内において設定する更新作業を行い、
前記ベクトル処理手段は、前記一連のベクトル命令内のベクトル作業命令に応答して、前記複数の並列処理レーンに対してデータ要素入力を並列に行う作業を実行するが、前記作業において、関連付けられたスキップインジケータが設定されている任意のレーンは前記作業の遂行から除外し、
各前記スキップインジケータはスキップカウント値を含み、前記スキップカウント値が非ゼロ値を有する場合、前記スキップカウント値は設定されているとみなされ、前記スキップカウント値がゼロ値を有する場合、前記スキップカウント値は設定されていないとみなされ、
前記ベクトル処理手段は、前記ベクトルスキップ命令に応答して、前記決定された１つ以上のレーンに対する前記スキップカウント値を所定の非ゼロ値に設定し、
前記一連内の各ベクトル命令について、前記ベクトル命令の実行時において前記スキップカウント値が設定された場合、前記ベクトル処理手段は、前記ベクトル命令によって指定された作業を行う代わりに前記スキップカウント値をデクリメントする、
データ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ベクトル命令を取り扱うためのデータ処理装置および方法に関する。
【背景技術】
【０００２】
ベクトル処理は、データ処理システムにおいてますます普及度を増している処理技術である。このようなベクトル処理作業を行うためにベクトル処理ユニットが開発されており、複数のデータ要素に対する同時作業が可能となっている。ベクトル処理ユニットの利用により、複数のレーンの並列処理が可能となり、これにより、これらの並列処理対象レーンにデータ要素が入力されると、これらの並列処理対象レーン内においてデータ処理作業を並列実行することができる。そのため、（典型的には、各反復時において異なる入力データ要素を用いた）データ処理作業の実行を逐次的に複数回行うことが必要となるスカラー処理技術と比較して、遂行面における有意な恩恵が実現される。
【０００３】
ＵＳ２００７／０２５０６８１において、このようなベクトル処理ユニットについての記載がある。同文献中に記載のシステムにおいて、ベクトル処理ユニットは、ホストプロセッサによって要求されるベクトル処理作業を行うコプロセッサの形態をとる。ベクトル処理ユニットをコプロセッサとして提供する別のアプローチとして、標準プロセッサの基本アーキテクチャを拡大適用することが可能である。このような拡大適用は、標準プロセッサのコア処理要素部分を複製し、これらのユニットにおける複数のデータ要素の同時処理を可能とする特殊命令を付加することにより、行われる。
【０００４】
ベクトル処理の利用による恩恵を受けることが可能な、多くの種類のデータ処理作業がある。例えば、コンピュータグラフィックスハードウェアおよびビデオゲームコンソールの場合、高遂行グラフィックス処理機能を提供するために、アーキテクチャ面においてベクトルプロセッサに大きく依存している。
【０００５】
ベクトル処理ユニットによる処理対象となるデータ要素は典型的には、データ要素のベクトルとして配列され、各ベクトルは複数のデータ要素を含む。ベクトル中の各データ要素は、異なるレーンの並列処理のための入力データ要素を形成する。
【０００６】
上述したベクトル処理アプローチの場合、入力ベクトル中の全データ要素に対して特定のデータ処理作業を行う必要がある場合には、遂行面における極めて有意な恩恵が享受可能であるが、並列処理の多様なレーン内との条件下において特定の作業の遂行を得ることが望ましい状況があり得る。このようなアプローチによれば、入力データ要素のベクトルはそのままベクトル処理ユニットに提供されるものの、特定のベクトル命令によって指定された作業は必ずしも全ての並列処理レーン内において行う必要が無い場合がある。
【０００７】
しかし、入力データ要素に対して実行されるべきベクトル作業を定義するベクトル命令内においてこのような条件付けを符号化するのは複雑な作業であるため、当該命令のサイズの有意な増加につながる。そのため、このような条件付けが必要な場合、ベクトル処理ユニットを利用する代わりに一連のスカラー作業をスカラー処理ユニット内において行うことで、作業遂行が必要とされるデータ要素のサブセットに対して前記必要な作業が行われる場合が往々にしてある。
【０００８】
しかし、このような場合、遂行に有意な影響が出るため、各並列処理レーン内において条件付き実行が必要な場合においても、ベクトル処理ユニットの利用によって得られる遂行恩恵を実現することが望ましい。
【発明の概要】
【課題を解決するための手段】
【０００９】
第１の局面から見て、本発明は、データ処理装置を提供する。前記データ処理装置は、データ要素を保存するように配置された複数のレジスタを有するレジスタデータ保存部と、一連のベクトル命令を実行するベクトル処理ユニットであって、前記ベクトル処理ユニットは、複数の並列処理レーンを有し、かつ、前記一連のベクトル命令の実行時において前記レジスタデータ保存部にアクセスして、前記レジスタデータ保存部からのデータ要素の読み出しおよび前記レジスタデータ保存部へのデータ要素の書き込みを行う、ベクトル処理ユニットと、前記並列処理レーンそれぞれについてスキップインジケータを維持するためのスキップインジケーション保存部とを含む。前記ベクトル処理ユニットは、前記一連のベクトル命令内のベクトルスキップ命令に応答して、前記スキップインジケーション保存部内において、前記複数のレーンのうち決定された１つ以上のレーンに対して前記スキップインジケータを設定する更新作業を行う。前記ベクトル処理ユニットは、前記一連のベクトル命令内のベクトル作業命令に応答して、前記複数の並列処理レーンに対してデータ要素入力を並列に行う作業を実行するが、前記作業において、関連付けられたスキップインジケータが設定されている任意のレーンは前記作業の遂行から除外する。
【００１０】
本発明によれば、前記並列処理レーンそれぞれに対して、スキップインジケータが維持される。その後、ベクトルスキップ命令が用いられる。前記ベクトルスキップ命令が前記ベクトル処理ユニットによって実行されると、更新作業が行われ、その結果、決定された１つ以上の並列処理レーンに対するスキップインジケータが設定される。
【００１１】
ベクトル作業命令の実行時、前記ベクトル処理ユニットは、前記並列処理レーンそれぞれに対する前記スキップインジケータを参照し、関連付けられたスキップインジケータが設定されている任意のレーンを前記ベクトル作業命令によって指定された前記作業の遂行から除外するように、構成される。
【００１２】
そのため、前記並列処理レーンそれぞれに対するこのようなスキップインジケータの利用と、前記ベクトルスキップ命令を用いたスキップインジケータの設定とにより、ベクトル作業命令そのものを変更する必要無く、各並列処理レーン内においてベクトル作業命令の条件付き実行を行うことが可能になる。その結果、前記ベクトル処理ユニットの利用増加を達成することが可能となる。なぜならば、上記構成が無い場合には逐次的に行わなければならなかった作業を、１つ以上の並列処理レーンを当該作業の遂行から選択的に除外する能力を有する前記ベクトル処理ユニットを用いて並列処理することが可能となるからである。
【００１３】
一実施形態において、前記ベクトルスキップ命令が実行されると、当該レーンに対するスキップインジケータが既に設定されているか否かに関係無く、全レーンに対して前記更新作業が行われ得る。一実施形態において、前記ベクトルスキップ命令の実行時において、前記ベクトル処理ユニットは、当該ベクトルスキップ命令の実行時において既に設定されている任意のスキップインジケータを前記更新作業から除外する。よって、本実施形態において、当該ベクトルスキップ命令の実行時において既に設定されている任意のスキップインジケータが前記更新作業から除外され、これにより、前記ベクトルスキップ命令そのものの適用を、条件付きにすることができる。
【００１４】
前記スキップインジケータは、多様な形態をとり得る。しかし、一実施形態において、各スキップインジケータは、スキップカウント値を含む。前記スキップカウント値が非ゼロ値を有する場合、前記スキップカウント値は設定されているとみなされる。前記スキップカウント値がゼロ値を有する場合、前記スキップカウント値は設定されていないとみなされる。このような実施形態において、前記ベクトル処理ユニットは、前記ベクトルスキップ命令に応答して、前記決定された１つ以上のレーンに対する前記スキップカウント値を所定の非ゼロ値に設定し、前記一連内の各ベクトル命令について、前記ベクトル命令の実行時において前記スキップカウント値が設定された場合、前記ベクトル処理ユニットは、前記ベクトル命令によって指定された作業を行う代わりに前記スキップカウント値をデクリメントするように、構成される。その結果、前記スキップカウント値が初期に設定されている所定の非ゼロ値に応じて、後続するスキップすべきベクトル命令の数を変更することができる。さらに、未だ設定されていないスキップインジケータについてベクトルスキップ命令そのもののみを実行する実施形態において、個々のスキップカウント値は時間と共に多様な値をとり得るため、個々のスキップカウント値が上記したデクリメントプロセスによって消去される時点は異なることが理解される。その結果、前記ベクトルスキップ命令のネスティングが可能になり、これにより、ベクトル作業命令そのものに対していかなる変更を行うことなく、複雑な一連の条件付き作業を前記ベクトル処理ユニット内において実行することが可能になる。その代わりに、任意の特定のベクトル作業の対象とすべき並列処理レーンを、関連付けられたベクトル作業命令の実行時における多様なスキップカウント値の状態によって決定する。
【００１５】
一実施形態において、前記スキップカウント値はシングルビット値であり得、これにより、単一の後続するベクトル命令のみをスキップすることが可能になるが、別の実施形態において、マルチビットスキップカウント値も用いられ得る。マルチビットスキップカウント値を用いることにより、スキップ機能の複雑なネスティングが達成可能となる。
【００１６】
ベクトルスキップ命令によってスキップカウント値が設定される所定の非ゼロ値は、固定され得る。しかし、一実施形態において、前記所定の非ゼロ値は、ベクトルスキップ命令のオペランドとして指定される。
【００１７】
先述したように、各実行されるベクトル命令について、当該命令の実行時にスキップカウント値が設定された場合、当該ベクトル命令によって指定された作業を実行する代わりに、前記スキップカウント値をデクリメントする。一実施形態において、上記をベクトル作業命令のみだけではなく前記ベクトルスキップ命令そのものに対しても適用する。
【００１８】
一実施形態において、前記ベクトルスキップ命令の実行時において、更新作業は、前記スキップ命令の実行時において、設定されていないスキップインジケータ（すなわち、ゼロ値であるもの）のみについて実行される。１つのこのような実施形態において、前記ベクトルスキップ命令が実行されると、関連スキップインジケータが設定されるだけであり、「設定されたばかりの」スキップインジケータについて、前記ベクトルスキップ命令の実行によって行われるアクションは他に何も無い。しかし、別の実施形態において、前記ベクトルスキップ命令は、設定されたスキップカウント値が前記実行されているベクトルスキップ命令よりも前に設定されたものであるかまたは前記ベクトルスキップ命令の実行に起因して設定されたばかりであるかに関係無く、前記設定されたスキップカウント値全てをデクリメントするように構成され得る。このような実施形態において、前記ベクトルスキップ命令に続く少なくとも１つの命令が確実にスキップされるように、前記所定の非ゼロ値は典型的には少なくとも２であることが理解される。
【００１９】
前記ベクトルスキップ命令を介して設定されるスキップカウント値として前記スキップインジケータを構成し、各後続するベクトル命令の実行時において前記スキップカウント値がゼロに戻るまで前記スキップカウント値をデクリメントする方法の別の方法として、一実施形態において、前記設定されたスキップインジケータを消去せよとのベクトルスキップ終了命令を前記ベクトル処理ユニットが実行するまで、各スキップインジケータは設定状態で保持される。特定のサイズのスキップインジケーション保存部が有れば、前記スキップインジケーション保存部内のスキップカウント値を介して指定する代わりに、このようなアプローチを用いて、特定されたレーン内のより長い一連の命令をスキップすることが可能になる。
【００２０】
前記設定されたスキップインジケータを消去せよとのスキップ終了命令を前記ベクトル処理ユニットが実行するまで前記スキップインジケータが設定状態で保持される実施形態において、前記設定されたスキップインジケータは、シングルビット値として具現化可能である。前記スキップインジケータの設定後、実行時において各後続するベクトル命令に遭遇した場合、前記スキップインジケータが設定されているレーン内においてはアクションはとられず、よって、これらの後続するベクトル命令によって指定された作業は前記レーン内では実行されない。スキップ終了命令に遭遇した場合、前記スキップインジケータは消去され、これにより、後続する命令が前記レーン内において実行されることとなる。さらなる実施形態において、前記スキップインジケータにマルチビット値を付与することができ、スキップ終了命令が出た場合にのみ、前記マルチビット値がデクリメントされる。その結果、スキップ終了命令の特定のインスタンスに起因して特定のレーンに対するスキップインジケータを消去することができる（前記スキップ値がゼロにデクリメントされるため）ようなネスティングが可能となり、他のものについては、前記デクリメントステップにおいて前記スキップインジケータが設定された状態のままとする（前記デクリメントにおいて、前記カウント値が非ゼロのままであるため）。
【００２１】
一実施形態において、各後続して実行されるベクトル命令の発生時にデクリメントされるスキップカウント値の形態のスキップインジケータと、スキップ終了命令実行時まで設定状態のままであるスキップインジケータとの双方を組み合わせて用いることができる。本明細書中、以下、区別が必要な場合、後者の種類のスキップ終了命令実行時まで設定状態のままであるスキップインジケータを「長スキップ」インジケータと呼び、前者の種類のスキップインジケータを「短スキップ」インジケータと呼ぶ。詳細には、一実施形態において、短スキップカウント値に加えて、前記スキップインジケーション保存部は、前記並列処理レーンそれぞれに対する長スキップインジケータをさらに維持する。その後、さらなるベクトルスキップ命令が提供され、前記さらなるベクトルスキップ命令が前記ベクトル処理ユニットによって実行されると、前記決定された１つ以上のレーンそれぞれに対する長スキップインジケータが前記レーンに対するスキップカウント値の代わりに設定され、前記長スキップインジケータは、各ベクトル命令の実行時において設定状態のまま保持される。
【００２２】
上述したように、前記長スキップインジケータはシングルビット値であり得、この場合、前記ベクトル処理ユニットは、スキップ終了命令に応答して、各設定された長スキップインジケータを消去する。あるいは、各長スキップインジケータは、長スキップカウント値を含む。前記長スキップカウント値が非ゼロ値を有する場合、前記長スキップカウント値は設定されているとみなされる。前記長スキップカウント値がゼロ値を有する場合、前記長スキップカウント値は設定されていないとみなされる。前記さらなるベクトルスキップ命令に応答して、前記ベクトル処理ユニットは、前記決定された１つ以上のレーンそれぞれに対する長スキップカウント値をインクリメントさせ、前記ベクトル処理ユニットは、ベクトルスキップ終了命令に応答して、各設定された長スキップカウント値をデクリメントする。
【００２３】
よって、このような実施形態において、前記短スキップカウント値が設定された後、各ベクトル命令の発生時においてデクリメントされるのに対し、前記長スキップカウント値はスキップ終了命令のみによってデクリメントされ、他の種類のベクトル命令が発生しても、長スキップカウント値のデクリメントは行われない。
【００２４】
前記スキップインジケーション保存部は、多様な様態によって構成可能である。一実施形態において、前記スキップインジケーション保存部は、前記並列処理レーンそれぞれに対する短スキップインジケータを保存する第１のレジスタと、前記並列処理レーンそれぞれに対する長スキップインジケータを保存する第２のレジスタとを含み得る。
【００２５】
しかし、別の実施形態において、前記スキップインジケーション保存部は、前記並列処理レーンそれぞれに対するスキップインジケータを保存する単一のレジスタを含み得、その場合、前記スキップインジケータは、各レーンについて当該スキップインジケータが短スキップインジケータであるのかまたは長スキップインジケータであるかについて特定するように、符号化される。詳細には、一実施形態において、各スキップインジケータは、前記ベクトル処理ユニットにより、設定された短スキップカウント値を特定する第１の複数の非ゼロ値のうち任意の値に設定可能であり、設定された長スキップインジケータを特定するように、前記第１の複数の非ゼロ値に含まれない少なくとも１つの所定の非ゼロ値に設定可能である。特定の例として、前記スキップインジケーション保存部が各スキップインジケータに対して４つのビット値を提供する状況を考える。この状況において、少なくとも値「１１１１」は、設定された長スキップインジケータを特定するために保存しておくことができる。１つの特定の実施形態において、値１１１１および値１１１０双方を設定された長スキップインジケータを指定するために保存しておき、これにより、１〜１３の短スキップカウント値を指定することができる。よって、このような実施形態において、１３個の後続するベクトル命令よりも長いスキップが必要な場合、短スキップインジケータではなく、長スキップインジケータを使用することが必要になる。
【００２６】
一実施形態において、前記ベクトルスキップ命令は、スキップインジケータオペランドとして、決定された１つ以上のレーンについて短スキップインジケータが設定されるべき所定の非ゼロ値を指定する。長スキップインジケータの設定に用いられるさらなるベクトルスキップ命令は、前記ベクトルスキップ命令とは全く別の命令であり得るが、一実施形態においては、前記ベクトルスキップ命令およびさらなるベクトルスキップ命令双方が同一形態をとる。しかし、前記さらなるベクトルスキップ命令がスキップインジケータオペランドとしてヌル値を指定することで、前記さらなるベクトルスキップ命令と、前記ベクトルスキップ命令とを区別することが可能になる。
【００２７】
ベクトルスキップ命令実行時においてスキップインジケータを設定すべきレーンを前記ベクトル処理ユニットが決定することができる方法は、多数存在する。一実施形態において、前記ベクトルスキップ命令は、スキップインジケータを設定すべき前記決定された１つ以上のレーンを直接指定する。よって、一例として、特定の形態のベクトルスキップ命令により、全ての奇数レーンのスキップインジケータを設定すべきと指定することができ、別の形態のベクトルスキップ命令により、全ての偶数レーンのスキップインジケータを設定すべきと指定することができ、あるいは、より一般的には、ベクトルスキップ命令により、スキップインジケータを設定すべきレーンを特定する特定形態のビットマスクを特定することができる。
【００２８】
しかし、別の実施形態において、前記ベクトルスキップ命令は、スキップインジケータを設定すべきレーンを直接特定する代わりに、前記ベクトルスキップ命令に応答して、前記ベクトル処理ユニットが、１つ以上の所定の条件が満たされているかを各レーンについて評価し、前記評価に基づいて、スキップインジケータを設定すべきと決定された１つ以上のレーンを特定する。
【００２９】
一実施形態において、スキップインジケータを設定すべきレーンは、前記１つ以上の所定の条件が満たされたレーンである。しかし、別の実施形態において、スキップインジケータを設定すべきレーンを、１つ以上の所定の条件が満たされないレーンとして選択することも可能であることが理解される。
【００３０】
前記ベクトルスキップ命令実行時において、前記１つ以上の所定の条件が満たされているかについて前記ベクトル処理ユニットに評価させる方法は多数存在する。一実施形態において、前記ベクトル処理ユニットは、前記ベクトルスキップ命令の実行時において、前記所定の条件が満たされているかを確認するための必要な試験を行い得る。しかし、別の実施形態において、前記データ処理装置は、条件コード保存部をさらに含む。前記条件コード保存部は、前記並列処理レーンそれぞれについて、少なくとも１つの条件コードを保存する。前記ベクトル処理ユニットは、前記少なくとも１つの条件コードが設定されているかを確認することにより、前記１つ以上の所定の条件が満たされているかを各レーンについて評価するように、構成される。条件コードは、データ処理システム内において一般的に用いられており、多様な命令（例えば、比較命令）を用いて、プログラム実行時における特定の条件が評価されており、その結果に応じて条件コードが設定される。条件コードのいくつかの例として、ｅｑｕａｌ（ＥＱ）、ｎｏｔ  ｅｑｕａｌ（ＮＥ）、ｇｒｅａｔｅｒ  ｔｈａｎ（ＧＴ）、ｌｅｓｓ  ｔｈａｎ（ＬＴ）コードなどがある。複数の並列処理レーンを用いたベクトル処理ユニットの場合、これらの条件コードを前記並列処理レーンそれぞれについて指定することができる。このような実施形態において、前記ベクトルスキップ命令は、関連レーンについてのスキップインジケータの設定をトリガするために設定することが必要な１つ以上の条件コードを指定し得る。一例として、前記ベクトルスキップ命令は、「ｇｒｅａｔｅｒ  ｔｈａｎ」条件コードが設定されているレーンに対してスキップインジケータを設定すべきと指定し得る。
【００３１】
スキップインジケータが設定されているレーンについて、ベクトル命令によって指定されている作業の遂行から当該レーンを除外することを可能にする方法が多数存在する。一実施形態において、前記作業を実行するために前記レーン内において行われる実際の計算は、発端時に回避することができる。しかし、別の実施形態においては、これらの計算は前記レーン内において実際に行われるが、その結果得られた値はその後捨象され、これにより、当該システムの残り部分が関与する限り、当該作業の遂行から当該レーンが実質的に除外される。制御的観点から見ると、当該レーン内における計算の発生を実際に回避するよりも、スキップインジケータ値に基づいて結果を選択的に捨象するアプローチを実行する方がより簡単である。
【００３２】
ベクトル処理ユニットがアクセスできるようデータ要素を保存するレジスタデータ保存部は、多様な様態をとり得る。しかし、一実施形態において、前記レジスタデータ保存部は、複数のベクトルレジスタを含むベクトルレジスタバンクを含む。各ベクトルレジスタは、前記ベクトル処理ユニット内の異なる並列処理レーンへ提供されるべき複数のデータ要素を保存する。一実施形態において、単一のベクトルレジスタが、前記ベクトル処理ユニット内の各並列処理レーンに提供されるべき１つのデータ要素に対する十分なデータ要素を保存し得る。
【００３３】
一実施形態において、前記ベクトル処理ユニットおよび関連付けられたレジスタデータ保存部は、別個の専用ベクトルプロセッサとして形成され得る。このようなプロセッサを例えばより大型のシステム内のコプロセッサとして用いることで、ホストプロセッサの代わりにベクトル処理作業を行うことが可能になる。別の実施形態において、前記ベクトル処理ユニットは、プロセッサ内のベクトル処理分岐部を形成し得、１つ以上の異なる分岐部内のスカラー作業も支援する。よって、このような実施形態において、前記データ処理装置は、スカラー処理ユニットと、前記スカラー処理ユニットと関連付けられたスカラーレジスタバンクとをさらに含み得る。一実施形態において、前記スカラー処理ユニットおよびベクトル処理ユニットは、別個の命令フェッチおよび命令復号化ユニットを有し得るが、別の実施形態において、前記命令フェッチおよび命令復号化ユニットは、前記スカラー処理ユニットおよび前記ベクトル処理ユニット間において共有される。
【００３４】
一実施形態において、前記ベクトル処理ユニットはパイプライン型処理ユニットであり、複数のベクトル命令を任意のタイミングで同時に処理することができる。
【００３５】
並列処理レーンそれぞれに対するスキップインジケータを維持するスキップインジケーション保存部は、多様な様態で実行可能である。例えば、スキップインジケーション保存部は、レジスタデータ保存部内のレジスタのうちの１つにより、提供され得る。しかし、別の実施形態において、スキップインジケーション保存部は、ベクトル処理ユニット内における内部保存部によって形成され、１つの特定の実施形態において、前記スキップインジケーション保存部は、パイプライン型ベクトル処理ユニットの実行段と関連付けられた内部状態レジスタにより、提供される。
【００３６】
第２の局面から見れば、本発明は、データ処理装置内のベクトル命令を取り扱う方法を提供する。前記データ処理装置は、データ要素を保存するように配置された複数のレジスタを有するレジスタデータ保存部と、一連のベクトル命令を実行するベクトル処理ユニットであって、前記ベクトル処理ユニットは、複数の並列処理レーンを有し、かつ、前記一連のベクトル命令の実行時において前記レジスタデータ保存部にアクセスして、前記レジスタデータ保存部からのデータ要素の読み出しおよび前記レジスタデータ保存部へのデータ要素の書き込みを行う、ベクトル処理ユニットとを含む。前記方法は、前記並列処理レーンそれぞれに対するスキップインジケータをスキップインジケーション保存部内に保持するステップと前記一連のベクトル命令内のベクトルスキップ命令に応答して、前記複数のレーンのうち決定された１つ以上のレーンに対する前記スキップインジケータを前記スキップインジケーション保存部内に設定する更新作業を行うステップと、前記一連のベクトル命令内のベクトル作業命令に応答して、前記複数の並列処理レーンに対してデータ要素入力を並列に行う作業を実行するが、前記作業において、関連付けられたスキップインジケータが設定されている任意のレーンは前記作業の遂行から除外するステップとを含む。
【００３７】
第３の局面から見て、本発明は、コンピュータプログラム製品を提供する。前記コンピュータプログラム製品は、コンピュータによって読み出し可能な命令を含む。前記コンピュータによって読み出し可能な命令がコンピュータ上において実行されると、前記コンピュータは、本発明の第２の局面による、ベクトル命令を取り扱う方法を行う。
【００３８】
第４の局面から見て、本発明は、データ処理装置を提供する。前記データ処理装置は、データ要素を保存する複数のレジスタ手段を有するレジスタデータ保存手段と、一連のベクトル命令を実行するベクトル処理手段であって、前記ベクトル処理手段は、複数の並列処理レーンを提供し、かつ、前記一連のベクトル命令の実行時において前記レジスタデータ保存手段にアクセスして、前記レジスタデータ保存手段からのデータ要素の読み出しおよび前記レジスタデータ保存手段へのデータ要素の書き込みを行う、ベクトル処理手段と、前記並列処理レーンそれぞれに対するスキップインジケータを保持するスキップインジケーション保存手段とを含む。前記ベクトル処理手段は、前記一連のベクトル命令内のベクトルスキップ命令に応答して、前記複数のレーンのうち決定された１つ以上のレーンに対する前記スキップインジケータを前記スキップインジケーション保存手段内において設定する更新作業を行う。前記ベクトル処理手段は、前記一連のベクトル命令内のベクトル作業命令に応答して、前記複数の並列処理レーンに対してデータ要素入力を並列に行う作業を実行するが、前記作業において、関連付けられたスキップインジケータが設定されている任意のレーンは前記作業の遂行から除外する。
【００３９】
本発明について、添付図面中に示すような実施形態を参照しつつ、ひとえに例示目的のためにさらに説明する。
【図面の簡単な説明】
【００４０】
【図１】実施形態によるプロセッサの少なくとも一部を示す模式図である。
【図２】実施形態によるプロセッサの模式図である。
【図３】実施形態によるベクトルレジスタバンクの模式図である。
【図４】実施形態による方法を示すフローチャートである。
【図５】一実施形態による図２のベクトル実行経路の実行段内に設けられた要素をより詳細に示す。
【図６】一実施形態によるベクトル命令の実行を模式的に示すフロー図である。
【図７】一実施形態による、ベクトル命令実行時において各レーン内において行われる処理をより詳細に示すフロー図である。
【図８Ａ】異なる実施形態に従って用いられる、異なるフォーマットのスキップカウンターレジスタの模式図である。
【図８Ｂ】異なる実施形態に従って用いられる、異なるフォーマットのスキップカウンターレジスタの模式図である。
【図８Ｃ】異なる実施形態に従って用いられる、異なるフォーマットのスキップカウンターレジスタの模式図である。
【図９】一実施形態による、図８Ｃのスキップカウンターレジスタを用いた場合に利用することが可能な複合符号化を示す表である。
【図１０】一実施形態による、スキップカウンターの使用の模式図である。
【発明を実施するための形態】
【００４１】
図１は、実施形態によるプロセッサ１００の少なくとも一部の模式図である。プロセッサ１００は、専用ベクトル処理ユニット（ベクトル実行ユニットとも呼ばれる）１０２を含む。専用ベクトル処理ユニット１０２に対し、復号化されたベクトル命令からの制御信号が供給される。プロセッサ１００は好適にはパイプライン型プロセッサであり、専用ベクトル実行ユニット１０２は、演算論理作業１０４、データメモリアクセス１０６、およびレジスタライトバック１０８のための段を含み得る。専用ベクトル実行ユニット１０２と関連付けられた状態で、ベクトルレジスタバンク１１０が設けられる。ベクトルレジスタバンク１１０は、第１の数であるｋ個のベクトルレジスタを含む。前記第１の数ｋ個のベクトルレジスタはそれぞれ、第２の数であるｌ個のデータ要素を含む。各データ要素は、例えば図３に示すように、第３の数であるｍビットを有する。前記ベクトル処理ユニットは、複数の並列処理レーンを含む。一実施形態において、１つ以上の入力ベクトルレジスタを指定するベクトル命令が実行されると、各レーンは、各指定された入力ベクトルレジスタからデータ要素のうちの１つを受信する。よって、本実施形態において、図３中に模式的に示すように、前記ベクトルレジスタそれぞれを、ｌ個の並列処理レーンに対する前記データ要素を保存するものとしてみなすことができる。
【００４２】
復号化されたベクトル命令からの制御信号を受信すると、専用ベクトル実行ユニット１０２は、レジスタバンク１１０から必要な値を読み出し、前記復号化されたベクトル命令が前記パイプラインを通じて実行されると、前記ライトバック段は、任意の新規レジスタ値を書き込み対象として前記レジスタバンクに供給する。いくつかの実施形態において、転送経路も設けることにより、１つの作業からの結果値を（レジスタバンク１１０から再度読み出す必要無く）入力として後続作業に直接フィードバックすることが可能になる。
【００４３】
後でより詳細に説明するように、スキップ命令の受信および実行時において、専用ベクトル実行ユニット１０２は、並列処理レーンそれぞれと関連付けられたスキップインジケータ（例えば、スキップカウンター）を制御する。前記スキップインジケータの値は、前記スキップ命令に続く１つ以上の後続するベクトル命令によって指定された作業を対応する並列処理レーン内において行うべきか否かを示す。
【００４４】
上記したように、前記スキップインジケータは、一実施形態において、スキップカウンターを含む。前記スキップカウンターには、前記スキップ命令実行時において、値が割り当てられる。詳細には、スキップカウンターは、前記関連付けられたレーン内において１つ以上の後続ベクトル命令をスキップすべきと指定する場合には非ゼロ値に設定され、ゼロ値である場合には設定されていないとみなされ、これにより、前記関連付けられたレーン内においてスキップを行うべきではないことを示す。よって、このような実施形態において、前記スキップカウンターがゼロである場合にのみ、当該レーン上において後続ベクトル命令の作業が行われる。一実施形態において、非ゼロ値のスキップカウンターを用いて、関連付けられた作業を当該レーン上において行うべきではない後続命令の数を示し、前記スキップ命令後に各ベクトル命令が実行されると、設定されたスキップカウンターを有する各レーンについて、前記ベクトル実行ユニットは、当該レーン内において前記作業を行うのではなく、関連スキップカウンターをデクリメントする。前記指示された命令数を超えた場合、前記スキップカウンターはゼロ値に戻り、さらなる後続命令を前記レーン上に行うことが可能となる。
【００４５】
特定の非ゼロ値に設定されたスキップカウンターを用い、各後続するベクトル命令の実行後にデクリメントする様態と別の様態として、前記スキップインジケータをスキップ命令によって設定し、スキップ終了命令が実行されるまで設定状態のまま保持する様態もある。一実施形態において、前記スキップ終了命令の実行により、任意の設定されたスキップインジケータが消去され、これにより、関連付けられたレーン内において任意の後続命令の作業が行われる。あるいは、スキップカウンターをインクリメントするようにスキップ命令を構成し、スキップカウンターをデクリメントするようにスキップ終了命令を構成することも可能であり、これにより、スキップ命令および関連付けられたスキップ終了命令の複合ネスティングが可能となる。
【００４６】
スキップカウンターは、多様な様態において実行可能である。例えば、消去（非スキップ）値としてゼロを用いる以外にも、他の表現が可能である。一実施形態において、前記スキップカウンターは、各レーンについて４ビットフィールドであるが、他のビット数も各スキップカウンターに割り当て可能である。
【００４７】
後でより詳細に説明するように、一実施形態において、双方のスキップインジケータが、各後続するベクトル命令の実行によってデクリメントされるスキップカウンター（本明細書中、短スキップインジケータと呼ぶ）と、スキップ終了命令実行時まで設定された状態のまま保持されるスキップインジケータ（本明細書中、長スキップインジケータと呼ぶ）との形態をとり得る。
【００４８】
ベクトル処理ユニット１０２の実行段１０４は、多様な演算論理作業（例えば、ＡＮＤ、ＯＲ、ＸＯＲ、およびＮＯＴ）、シフト作業（例えば、ＬＳＲ、ＬＳＬ、ＡＳＲ、およびＲＯＴ、加算、減算、および乗算作業）、ならびに最小作業および最大作業（すなわち、各レーン内における最小値および最大値の発見）を行うように、構成可能である。各レーン上において独立して行われるこれらの作業に加えて、レーン間作業（すなわち、レーン間のデータをスワップまたはコピーする作業）が可能である。このようにして、前記レーンのうち任意のものの上でのこれらの作業のうち任意のものを除外することが、スキップ命令の利用により選択的に可能となる。
【００４９】
図２は、一実施形態によるプロセッサ２００の模式図である。プロセッサ２００は、全般的実行ユニット２０２（本明細書中全般的実行経路とも呼ぶ）と、全般的実行ユニット２０２と関連付けられた全般的レジスタバンク２０４とを有する。プロセッサ２００は、図１を参照して示した配置構成と同様に、ベクトル実行ユニット２０６（本明細書中、ベクトル実行経路とも呼ぶ）と、関連付けられたベクトルレジスタバンク２０８とをさらに有する。前記プロセッサは、命令フェッチおよび命令復号化ユニットも含む。前記命令フェッチおよび命令復号化ユニットは、全般的実行ユニット２０２および前記ベクトル実行ユニット２０６に共通する。一実施形態において、前記命令フェッチおよび命令復号化ユニットは、命令フェッチ段２１０を含む。命令フェッチ段２１０は、（例えば、プログラムカウンター値をプログラムメモリ（例えば、命令キャッシュ）に送って次の命令を読み出すことにより）命令をフェッチするように、構成される。前記命令フェッチおよび命令復号化ユニットは、一実施形態において、命令復号段２１２をさらに含む。命令復号段２１２は、命令ビットから制御信号を実行のために生成するように、構成される。命令復号段２１２はまた、ベクトル命令と全般的命令とを区別するようにも構成され、全般的命令の場合には制御信号は全般的実行ユニット２０２に提供され、ベクトル命令の場合には制御信号はベクトル実行ユニット２０６に提供される。これらの制御信号は、「復号化された命令」としてみなすことができる。ベクトルスキップ命令の場合、適切な制御信号がベクトル実行ユニット２０６に提供され、ここで、図１を参照して概要を上述したようにスキップ命令が実行される。
【００５０】
図３は、実施形態によるベクトルレジスタバンク３００の模式図である。ベクトルレジスタバンク３００は、第１の数であるｋ個のベクトルレジスタを含む。各ベクトルレジスタは、第２の数であるｌ個のデータ要素（各データ要素は、ｌ個の並列処理レーンそれぞれに対応する）を含む。ここで、各データ要素は、第３の数であるｍ個のビットを含む（すなわち、各レジスタは、ｌ×ｍビットを含む）。一実施形態によれば、１２８ビットの１６個のベクトルレジスタが、それぞれ１６ビットの８個のデータ要素に分割される（すなわち、ｋ＝１６、ｌ＝８、ｍ＝１６）。ｋ、ｌおよびｍを他の値にすることももちろん可能である。
【００５１】
図４は、実施形態による方法を示すフローチャートである。ベクトルスキップ命令（すなわち、命令フェッチ）が受信されると、前記命令はベクトル命令として特定され、ベクトルスキップ命令復号化ステップ４００において復号化され、上述したように、実行のための制御信号が、スキップ命令実行ステップ４０２における実行対象としてその後ベクトル実行ユニット２０６に提供される。
【００５２】
ベクトルスキップ命令実行時にスキップインジケータが設定されるべきレーンをベクトル実行ユニット２０６が決定する方法は多数存在する。一実施形態において、前記ベクトルスキップ命令は、スキップインジケータを設定すべき１つ以上のレーンを直接指定する。よって、一例として、特定の形態のベクトルスキップ命令により、全奇数レーンのスキップインジケータを設定すべきと指定することができ、別の形態のベクトルスキップ命令により、全偶数レーンのスキップインジケータを設定すべきと指定することができる。あるいは、より一般的には、前記ベクトルスキップ命令により、スキップインジケータを設定すべきレーンを指定する特定形態のビットマスクを指定することもできる。
【００５３】
しかし、別の実施形態において、スキップインジケータを指定すべきレーンをベクトルスキップ命令により直接指定する代わりに、ベクトルスキップ命令に応答して、ベクトル実行ユニット２０６が、１つ以上の所定の条件が満たされたかを各レーンについて評価し、前記評価に応じて、スキップインジケータを設定すべき１つ以上のレーンを指定する。
【００５４】
その後、上記アプローチのうちいずれかを用いるかと関係無く、スキップインジケータを設定すべきと決定された各レーンについて、当該レーンに対するスキップインジケータをスキップインジケータ設定ステップ４０４において設定し、これにより、当該レーンについては、作業ディセーブルステップ４０６において当該レーンのスキップインジケータに基づいて１つ以上の後続ベクトル命令の作業がディセーブルされる。
【００５５】
図５は、一実施形態による、ベクトル実行経路２０６の実行段２２０内に設けられた特定の要素の模式図である。内部状態レジスタ５００は、実行段２２０が必要な作業を実行する際に必要とするデータ要素を保存するために、用いられる。よって、１つ以上のベクトルレジスタをソースオペランドとして指定するベクトル作業命令に対して、これらのベクトルレジスタからの前記必要なデータ要素が内部状態レジスタ５００内に保存され、これにより、ＡＬＵ回路５０２が当該命令によって指定された演算論理作業を行う際にアクセスできるようにする。
【００５６】
さらに、内部状態レジスタ５００は、スキップカウンターレジスタ５０６として用いられる１つ以上のレジスタを含む。これら１つ以上のレジスタは、並列処理レーンそれぞれに対するスキップカウント値を保持するために用いられる。ベクトルスキップ命令が実行されると、対応する制御信号が命令復号段２１２から実行段２２０へと送られ、ここで、スキップカウンター更新回路５０４は、スキップカウンターレジスタ（単数または複数）５０６内において前記スキップカウンターのうち１つ以上を設定する更新作業を上記した技術を用いて行う。典型的には、関連付けられたスキップカウンターが既に非ゼロである任意のレーンに対しては、前記更新作業を省略する。よって、前記更新作業による影響を受けるのは、スキップカウンター値が現在ゼロとなっているレーンに対してのスキップカウンター値だけである。これにより、ベクトルスキップ命令のネスティングが可能となり、ベクトル作業命令そのものを一切変更する必要無く、複雑な一連の条件付き作業を前記ベクトル処理ユニット内において行うことが可能となる。その代わりに、任意の特定のベクトル作業の対象となる並列処理レーンを、関連付けられたベクトル作業命令の実行時における多様なスキップカウント値の状態によって決定する。
【００５７】
各レーンに対してスキップインジケータが設けられた実施形態におけるベクトル作業命令の実行は、以下の疑似コードによって示すことができる。この疑似コードは、８個の並列処理レーン（レーン０〜７）があると仮定している。
ＶＯＰ：
ＦＯＲ  Ｉ＝０：７  ＤＯ  ＩＮ  ＰＡＲＡＬＬＥＬ
ＩＦ  ＳＫＩＰ＿ＣＯＵＮＴＥＲ［Ｉ］＝＝０  ＴＨＥＮ
ＥＸＥＣＵＴＥ  ＯＰ  ＯＮ  ＬＡＮＥ  Ｉ
ＥＬＳＥ
ＳＫＩＰ＿ＣＯＵＮＴＥＲ［Ｉ］＝ＳＫＩＰ＿ＣＯＵＮＴＥＲ［Ｉ］  −  １
ＥＮＤ  ＩＦ
ＥＮＤ  ＦＯＲ
【００５８】
ここで、ｓｋｉｐ＿ｃｏｕｎｔｅｒ［Ｉ］は、レーンＩに対するスキップカウンターを指す。上記疑似コードから分かるように、前記作業は、スキップカウンターがゼロである任意のレーンに適用されるが、非ゼロスキップカウンターを有するレーンに対しては前記作業は行われず、その代わりに、スキップカウント値が１だけデクリメントされる。
【００５９】
ベクトルスキップ命令（すなわち、スキップカウンターを設定し得る命令）に遭遇した場合は必ず、通常の命令の場合と同様に、スキップカウンター消去（すなわち、ゼロ）を有するレーンのみが影響を受ける。このようなレーンそれぞれに対して、スキップ命令と関連付けられた条件が当該レーン上において試験され、この条件が満たされた場合、当該レーンに対するスキップカウンターを、スキップすべき命令の数に設定する。これは典型的には、スキップ命令のオペランドとして指定され、よって、引数「ｎｅｗ＿ｓｋｉｐ＿ｖａｌｕｅ」として送られる。各後続する実行されるベクトル命令に対して、スキップカウンターが非ゼロであるレーンのスキップカウンター値が１だけ低減される。上記実施形態のベクトルスキップ命令は、以下の疑似コードによって表すことができる。
ＶＳＣＣ：
ＦＯＲ  Ｉ＝０：７  ＤＯ  ＩＮ  ＰＡＲＡＬＬＥＬ
ＩＦ  ＳＫＩＰ＿ＣＯＵＮＴＥＲ［Ｉ］＝＝０  ＴＨＥＮ
ＩＦ  ＣＣ  ＯＮ  ＬＡＮＥ  Ｉ  ＴＨＥＮ
ＳＫＩＰ＿ＣＯＵＮＴＥＲ［Ｉ］＝ＮＥＷ＿ＳＫＩＰ＿ＶＡＬＵＥ
ＥＮＤ  ＩＦ
ＥＬＳＥ
ＳＫＩＰ＿ＣＯＵＮＴＥＲ［Ｉ］＝ＳＫＩＰ＿ＣＯＵＮＴＥＲ［Ｉ］−１
ＥＮＤ  ＩＦ
ＥＮＤ  ＦＯＲ
【００６０】
ここで、条件コードＣＣは、例えばｅｑ＝ｅｑｕａｌ、ｎｅ＝ｎｏｔ  ｅｑｕａｌ、ｇｔ＝ｇｒｅａｔｅｒ  ｔｈａｎ、ｇｅ＝ｇｒｅａｔｅｒ  ｏｒ  ｅｑｕａｌ  ｔｈａｎ、ｌｔ＝ｌｅｓｓ  ｔｈａｎ、ｌｅ＝ｌｅｓｓ  ｏｒ  ｅｑｕａｌ  ｔｈａｎのうちのいずれかであり得る。
【００６１】
多数の命令をスキップするが、スキップカウンターフィールドによって規定された特定の値（例えば、４ビットカウンターに対して１５）までしかスキップカウンターがカウントすることができない構造を用いると好適である場合がある。しかし、一実施形態において、スキップ機能を終了させよとのベクトルスキップ終了命令に遭遇した場合にのみ終了する長スキップを符号化する可能性がある。これは、長スキップインジケータの保存のために全く別個のスキップカウンターレジスタを設けるか、または、レーン毎に特殊長スキップコードとして１つ以上の特定の値（例えば、１４および１５）の単一のスキップカウンターを保存した後、上述した疑似コード作業を変更することにより、達成することが可能である。詳細には、ＶＯＰ（全般的ベクトル命令）、ＶＳＣＣ（ベクトルスキップ命令）およびＶＥＮＤ（ベクトルスキップ終了命令）に対する適切な疑似コード作業は、以下である。
ＶＯＰ：
ＦＯＲ  Ｉ＝０：７  ＤＯ  ＩＮ  ＰＡＲＡＬＬＥＬ
ＩＦ  ＳＫＩＰ＿ＣＯＵＮＴＥＲ［Ｉ］＝＝０  ＴＨＥＮ
ＥＸＥＣＵＴＥ  ＯＰ  ＯＮ  ＬＡＮＥ  Ｉ
ＥＬＳＥ  ＩＦ  （ＳＫＩＰ＿ＣＯＵＮＴＥＲ［Ｉ］＜１４）
ＳＫＩＰ＿ＣＯＵＮＴＥＲ［Ｉ］＝ＳＫＩＰ＿ＣＯＵＮＴＥＲ［Ｉ］−１
ＥＮＤ  ＩＦ
ＥＮＤ  ＦＯＲ
ＶＳＣＣ：
ＦＯＲ  Ｉ＝０：７  ＤＯ  ＩＮ  ＰＡＲＡＬＬＥＬ
ＩＦ  ＳＫＩＰ＿ＣＯＵＮＴＥＲ［Ｉ］＝＝０  ＴＨＥＮ
ＩＦ  ＣＣ  ＯＮ  ＬＡＮＥ  Ｉ  ＴＨＥＮ
ＩＦ  ＬＯＮＧ＿ＳＫＩＰ  ＴＨＥＮ
ＳＫＩＰ＿ＣＯＵＮＴＥＲ［Ｉ］＝  １５
ＥＬＳＥ
ＳＫＩＰ＿ＣＯＵＮＴＥＲ［Ｉ］＝ＮＥＷ＿ＳＫＩＰ＿ＶＡＬＵＥ
ＥＮＤ  ＩＦ
ＥＮＤ  ＩＦ
ＥＬＳＥ
ＩＦ  ＬＯＮＧ＿ＳＫＩＰ  ＯＲ  ＳＫＩＰ＿ＣＯＵＮＴＥＲ［Ｉ］＜１４  ＴＨＥＮ  
ＳＫＩＰ＿ＣＯＵＮＴＥＲ［Ｉ］＝ＳＫＩＰ＿ＣＯＵＮＴＥＲ［Ｉ］−１
ＥＮＤ  ＩＦ
ＥＮＤ  ＩＦ
ＥＮＤ  ＦＯＲ
ＶＥＮＤ：
ＦＯＲ  Ｉ＝０：７  ＤＯ  ＩＮ  ＰＡＲＡＬＬＥＬ
ＩＦ  ＳＫＩＰ＿ＣＯＵＮＴＥＲ［Ｉ］＞＝１４  ＴＨＥＮ
ＳＫＩＰ＿ＣＯＵＮＴＥＲ［Ｉ］＝（ＳＫＩＰＣＯＵＮＴＥＲ［Ｉ］＋１）  ＭＯＤ  １６
ＥＬＳＥ  ＩＦ  ＳＫＩＰ＿ＣＯＵＮＴＥＲ［Ｉ］＞０  ＴＨＥＮ
ＳＫＩＰ＿ＣＯＵＮＴＥＲ［Ｉ］＝ＳＫＩＰ＿ＣＯＵＮＴＥＲ［Ｉ］−１
ＥＮＤ  ＩＦ
ＥＮＤ  ＦＯＲ
【００６２】
よって、上記例において、全般的ベクトル命令ＶＯＰに対する疑似コードは全般的に上述したようなものであるが、スキップカウント値が１４未満である場合、スキップカウンターは、非ゼロスキップカウンターを有するレーンのみに対してデクリメントされることが分かる。よって、スキップカウント値が１４または１５である場合、関連付けられたレーン内において作業は実行されず、スキップカウンターのデクリメントも行われない。
【００６３】
ベクトルスキップ命令ＶＳＣＣを検討した後、ゼロスキップカウント値を有する各レーンについて、当該レーンの条件コードが満たされた場合、スキップカウント値を更新する方法は２通りある。すなわち、ベクトルスキップ命令が（典型的には当該命令のスキップインジケータオペランドをヌル値に設定することにより）長スキップを符号化する場合、スキップカウンターを１５に設定し、本実施形態における１５という値は、１つの長スキップを符号化する。そうではない場合、スキップカウンターをスキップ値に設定する（このスキップ値は典型的には、ベクトルスキップ命令のスキップインジケータオペランドにより、指定される）。
【００６４】
ＶＳＣＣ命令のスキップカウンターデクリメント機能を考慮して、ベクトルスキップ命令実行時において（すなわち、スキップカウンターが短スキップを符号化したときに）任意の特定のレーンに対するスキップカウンターが１４未満である場合、スキップカウンターをデクリメントする。さらに、任意の特定のレーンに対するスキップカウンターが１４未満ではない場合であっても、ベクトルスキップ命令が長スキップを符号化した場合、前記スキップカウンターはやはりデクリメントされる。この後者のデクリメント作業により、２つの長スキップのネスティングが可能となり、第１の長スキップ命令によってスキップカウンターを１５（１つの長スキップを意味する）に設定し、第２のネストされた長スキップ命令により、第１の長スキップ命令によって既に影響を受けているレーンに対してスキップカウンターを１４（２つの長スキップを意味する）に低減する。よって、このデクリメント作業により、上記符号化に起因する長スキップ数の有効インクリメント数が実際に特定される。
【００６５】
ベクトルスキップ終了命令ＶＥＮＤについて、各レーンについて、スキップカウンターが１４以上であるか（すなわち、当該レーンのスキップカウンターが長スキップを符号化するか）についてと、前記スキップカウンターが記載のように変更されているかとについて、試験を行う。その結果、長スキップカウントの有効デクリメントが得られ、本実施形態の符号化によれば、１４という値が２つの長スキップを示し、１５という値が１つの長スキップを示す。詳細には、現在のスキップカウント値が１４である場合、前記値を１５に増加し、現在のスキップカウント値が１５である場合、前記インクリメントのｍｏｄ１６特性により、前記値をゼロにリセットする。スキップカウンターが１４以上ではなくかつゼロよりも大きい場合、ＶＥＮＤ命令が発生しても、他の任意のベクトル命令の場合と同様に、スキップカウンターが１だけデクリメントされるだけである。
【００６６】
図６は、本発明の実施形態に従ってベクトル命令を処理する様態を示すフロー図である。ステップ６００において、ベクトル命令の受信を待機し、ベクトル命令の受信後（すなわち、ベクトル命令が命令フェッチ段２１０によってフェッチされた後）、このフェッチは、ステップ６０５において命令復号段２１２によって制御信号に復号化され、その後、これらの制御信号はベクトル実行経路２０６に送られる。ブロック６１０に示すように、その結果、特定の一連のステップが前記並列処理レーンそれぞれにおいて並列に行われる。この処理をステップ６１５、６２０および６２５によって示す。これら一連のステップが前記各レーンにおいて並列に行われた後、ボックス６３０に示すように、並列処理ステップが終了し、プロセスはステップ６００に戻って、次のベクトル命令の実行を待機する。
【００６７】
一実施形態による、各レーンにおいてステップ６１５、６２０および６２５を実行するために行われる処理を図７中に模式的に示す。プロセスはステップ７００から開始し、ステップ７０５において、当該レーンの短スキップカウント値（すなわち、短スキップインジケータ）がゼロであるかを決定する。前記スキップカウント値が非ゼロである場合、プロセスはステップ７１０へと分岐し、ステップ７１０において、当該レーンのスキップカウント値をデクリメントする。その後、プロセスはステップ７６０へと進み、ステップ７６０においてプロセスが終了し、これ以上のさらなる処理は不要となる。
【００６８】
ステップ７０５において、短スキップカウント値のみが非ゼロであるかについて評価される点は、留意に値する。いくつかの実施形態において、短スキップカウント値のみが利用されるが、いくつかの実施形態において、長スキップカウント値も利用される。その場合、さらなるステップ７１５、７２０および７２５が必要となる。詳細には、ステップ７０５における短スキップカウント値の分析の後、ステップ７１５において、当該レーンの長スキップカウント値がゼロであるかを決定する。先述したように、短スキップカウント値および長スキップカウント値は、別個のスキップレジスタ内に保存してもよいし、あるいは、一実施形態において、１つ以上のスキップカウント値を長スキップカウント値として保存することにより、単一のレジスタ内に符号化することも可能である。長スキップカウント値がゼロではない場合、ステップ７２０において、実行されている命令がベクトルスキップ終了命令であるかについて決定する。実行されている命令がベクトルスキップ終了命令である場合、当該レーンの長スキップカウント値をステップ７２５においてデクリメントし、その後、プロセスはステップ７６０において終了する。上記記載から、１４というスキップカウント値が２個の長スキップを示す実施形態において、１５というスキップカウント値は１個の長スキップを示し、０というスキップカウント値がゼロ個の長スキップを示し、ステップ７２５におけるデクリメントにより、スキップカウント値が（１４から１５へまたは１５から０へ）実際にインクリメントされることが理解される。
【００６９】
前記命令がベクトルスキップ終了命令ではない場合、ステップ７２７において、前記命令が長ベクトルスキップ命令であるか（すなわち、長スキップを符号化するベクトルスキップ命令であるか）について決定する。前記命令が長ベクトルスキップ命令である場合、当該レーンの長スキップカウントをステップ７２８においてインクリメントする。上記記載から、１４というスキップカウント値が２個の長スキップを示し、１５というスキップカウント値が１個の長スキップを示す実施形態において、ステップ７２８におけるインクリメントにより、スキップカウント値が１５から１４に実際にデクリメントされることが理解される。よって、ステップ７２７および７２８を介して、任意の長ベクトルスキップ命令により、非ゼロ長スキップカウントを有する任意のレーンの長スキップカウントが１だけ無条件にインクリメントされる。なぜならば、これらの長スキップカウントは、前記長ベクトルスキップ命令の対応するベクトルスキップ終了命令により１だけデクリメントされるからである。
【００７０】
ステップ７２７において前記命令が長ベクトルスキップ命令ではないと決定された場合、アクションは不要となり、プロセスがステップ７６０において終了となるだけである。
【００７１】
当該レーンに対する短スキップカウント値および任意の長スキップカウント値がどちらともゼロである場合、プロセスはステップ７３０へと進む。ステップ７３０において、現在の命令がベクトルスキップ命令であるかについて決定する。現在の命令がベクトルスキップ命令ではない場合、前記命令によって指定された必要な作業をステップ７３５において行い、その後、プロセスはステップ７６０において終了する。その結果、当該レーンのスキップカウント値（短および長双方が用いられている場合、短および長の両方）が設定されていない場合（すなわち、ゼロである場合）、任意のベクトル作業命令によって指定された作業のみが当該レーンにおいて行われることが分かる。
【００７２】
ステップ７３０において現在の命令がベクトルスキップ命令であると決定された場合、ステップ７４０において、当該レーンについての条件コードが満たされているかについて決定する。一例として、前記ベクトルスキップ命令は、当該レーンについてベクトル処理ユニットが保持している特定の条件コードが設定されている場合にのみ、スキップインジケータを設定すべきであると指定し得る。前記条件コードが満たされていない場合、さらなるアクションは不要となり、プロセスはステップ７６０において終了する。しかし、前記条件コードが満たされている場合、プロセスはステップ７４５へと進む。
【００７３】
ステップ７４５において、範囲オペランドが前記ベクトルスキップ命令によって指定されているかについて決定する（本明細書中、この範囲オペランドもスキップインジケータオペランドと呼ぶ）。このような範囲オペランドが指定されている場合、これは、前記ベクトルスキップ命令が短スキップカウンターを設定することを意図していることを示しているため、その場合、プロセスはステップ７５０へと進む。ステップ７５０において、当該レーンに対する短スキップカウントを前記指定された範囲オペランドに設定する。その後、プロセスはステップ７６０において終了する。しかし、ステップ７４５においてヌル範囲オペランドが指定されていると決定された場合、これは、前記ベクトルスキップ命令が当該レーンについて長スキップカウンターを設定することを意図していることを意味するため、プロセスはステップ７５５へと分岐する。ステップ７５５において、当該レーンの長スキップカウント値をインクリメントする。その後、プロセスはステップ７６０において終了する。上記記載から、１５というスキップカウント値が１個の長スキップを示し、０というスキップカウント値がゼロの長スキップを示す実施形態において、ステップ７５５におけるインクリメントにより、前記１５というスキップカウント値が設定され、これにより、１個の長スキップが指定されることが理解される。
【００７４】
スキップカウンターレジスタ５０６の構成方法は多数存在する。一実施形態において、短スキップカウンターのみが用いられ、図８Ａに示すように、各レーンについて短スキップカウント値を保存する、単一のスキップカウンターレジスタ８００を設けることができる。一実施形態において、各スキップカウント値は４ビットであるため、８個の並列処理レーンが存在する例において、スキップカウンターレジスタは３２ビットレジスタである。
【００７５】
別の実施形態において、長スキップカウント値を各並列処理レーンに対して設けてもよく、長スキップカウント値を別個のレジスタ内において符号化することができる。そのため、図８Ｂに示すように、第１のレジスタ８０５を用いて、各レーンについてのスキップカウント値（すなわち、短スキップインジケータ）を保存することができ、第２のレジスタ８１０を用いて、各レーンについての長カウント値（すなわち、長スキップインジケータ）を保存することができる。
【００７６】
特定の実施形態において、長スキップインジケータのみを用い、短スキップカウント値は用いない構成も可能であることも理解される。この例において、単一のレジスタ（例えば、図８Ａのレジスタ８００）を設けることができる。この場合、各レーンについての長スキップカウント値をレジスタにより提供する。この例示的実施形態において、ベクトルスキップ命令は長スキップカウント値を設定し、ベクトルスキップ終了命令が発生した場合にのみ、これらの値がデクリメントされる。その後、長スキップカウント値がゼロである任意のレーンに対して標準ベクトル命令が実行され、長スキップカウント値が設定されている（すなわち、非ゼロである）任意のレーンについては、標準ベクトル命令は無視される。
【００７７】
図８Ｃに示すように、短スキップカウント値および長スキップカウント値の両方を用いる実施形態においては、単一のスキップカウンターレジスタ８１５を用いて、各レーンについてスキップカウント値を符号化することが可能である。このような実施形態において、特定のスキップカウント値を用いることにより、任意の長スキップカウント値を符号化することが可能である。１つの特定の例において、図９の表中に模式的に示すように、１４および１５という値を長スキップカウントに対して保存する。
【００７８】
図９に示すように、各並列処理レーンについて、スキップカウント値、０〜１５という複合符号化値のうちいずれかに設定することができる。０という値は、短スキップカウンターまたは長スキップカウンターのいずれも設定されていないことを示す。よって、図７を参照して、スキップカウンターがゼロの複合符号化である任意のレーンについては、ステップ７０５および７１５の結果が「はい」になる。１〜１３の値は、設定された短スキップカウントを指定するための複合符号化として設定され得る。各後続するベクトル命令が実行されると、前記値が最終的に０になるまで、（前記ベクトル命令によって指定された作業が行われる代わりに）当該レーンについての設定された短スキップ値がデクリメントされる。前記値が最終的に０になった時点において、後続するベクトル命令が当該レーンにおいて実行される。よって、図７の例を鑑みて、ステップ７０５の評価時において前記複合符号化の値が１〜１３である場合、プロセスはステップ７１０へと分岐する。ステップ７１０において、前記短スキップカウント値がデクリメントされる。
【００７９】
図９に示すように、１４および１５という複合符号化値が長スキップカウントに対して保存されているため、特定のレーンについての複合符号化が１４または１５である場合、ステップ７０５の結果は「はい」となり、ステップ７１５の後の処理は無くなる。ステップ７２０においてＶＥＮＤ命令が実行されている場合、長スキップカウントがデクリメントされる。図９に示すように、これは、現在の複合符号化が１４である場合（これは、２という長スキップカウントを指定する）、前記複合符号化は１５に設定され（これは、１という長スキップカウントを指定する）、現在の複合符号化が１５である場合、前記複合符号化は０にクリアされることを意味する。
【００８０】
図１０は、４つの並列処理レーンが設けられている例における、短スキップカウンターの利用の模式図である。この例において、ＶＭＵＬ命令（乗算命令）の実行時において、レーン１および３のスキップカウント値はゼロであり、レーン０および２のスキップカウント値はそれぞれ２および４であると仮定する。すなわち、前記乗算命令は、レーン１および３のみにおいて行われる。レーン０および２内の関連コンポーネントは一実施形態において前記乗算作業の実行に晒され得るが、宛先レジスタｖａの更新はレーン０または２のいずれにおいても行われない。すなわち、データ要素ｖａ０およびｖａ２は不変のままであり、データ要素ｖａ１およびｖａ３は、前記乗算作業の結果を反映するように更新される。
【００８１】
その後、レーン０および２について、前記スキップカウンターをデクリメントすることで、前記乗算命令の実行後、レーン１および３のスキップカウンターをゼロのままとし、レーン０および２のスキップカウンターをここでそれぞれ１および３とする。図１０は極めて単純な例を反復しているだけであり、これは典型的には、さらに多くのレーンが存在する場合を示す。さらに、前記ベクトルスキップ命令を必要に応じてネストすることで、複雑な一連の命令を多様なレーン内において条件付きで実行することが可能になる。
【００８２】
以下は、ネストされた一連のベクトルスキップ命令を用いて実行可能な一連の命令の一例である。詳細には、この例において、入力ベクトルｖ０、ｖ１およびｖ２を用いて、３つの値の中央値を各レーン内において計算する。その結果をベクトルｖ３として出力する。よって、これらの命令の実行を通じて、各レーンについて、前記入力レジスタ内の同一レーンについての３つの値の中央値が出力される。
【００８３】
ｖｍｏｖ  ｖ３、ｖ２／／各レーンについて、ｖ２をｖ３にコピーする。ここで、中央値はｖ２内の値であると「推定」する（そうではない場合、中央値は以下によって上書きされる）
【００８４】
ｖｓｇｔ  ｖ０、ｖ１、４／／各レーンについて、ｖ０およびｖ１を比較し、ｖ０＞ｖ１である場合、スキップ値を４に設定する
【００８５】
ｖｓｇｔ  ｖ１、ｖ２、１／／ここで、ｖ０＜＝ｖ１であると分かる（各レーンについて、ｖ１およびｖ２を比較し、ｖ１＞ｖ２である場合、スキップ値を１に設定する）
【００８６】
ｖｍｏｖ  ｖ３、ｖ１／／ここで、ｖ１＜＝ｖ２であると分かり、中央値はｖ１である
【００８７】
ｖｓｇｔ  ｖ２、ｖ０、１／／ここで、ｖ０＜＝ｖ１であると分かり（各レーンについて、ｖ２およびｖ０を比較し、ｖ２＞ｖ０である場合、スキップ値を１に設定する）
【００８８】
ｖｍｏｖ  ｖ３、ｖ０／／ここで、ｖ２＜＝ｖ０であると分かり、中央値はｖ０である
【００８９】
ｖｓｌｅ  ｖ０、ｖ１、４／／各レーンについてｖ０およびｖ１を比較し、ｖ０＜＝ｖ１である場合、スキップ値を４に設定する
【００９０】
ｖｓｌｅ  ｖ１、ｖ２、１／／ここで、ｖ０＞ｖ１であると分かり（各レーンについて、ｖ１およびｖ２を比較し、ｖ１＜＝ｖ２である場合、スキップ値を１に設定する）
【００９１】
ｖｍｏｖ  ｖ３、ｖ１／／ここで、ｖ１＞ｖ２であると分かり、中央値はｖ１である
【００９２】
ｖｓｌｅ  ｖ２、ｖ０、１／／ここで、ｖ０＞ｖ１であると分かり、（各レーンについて、ｖ２およびｖ０を比較し、ｖ２＜＝ｖ０である場合、スキップ値を１に設定する）
【００９３】
ｖｍｏｖ  ｖ３、ｖ０／／ここで、ｖ２＞ｖ０であると分かり、中央値はｖ０である
【００９４】
前記一連のベクトルスキップ命令（ｖｓｇｔおよびｖｓｌｅ）を通じて、複雑な試験ツリーを各レーンにおいて独立的に行うことで、各レーン内における中央値データ要素値を発見することができる。第１の移動命令の後は、後続する移動命令は全て、前記移動命令に遭遇したときの当該レーンのスキップカウンター値に応じて、各レーン内において条件付きで行われることが理解される。
【００９５】
上記の実施形態の記載から、このような実施形態により、ベクトル処理ユニット内におけるベクトル作業を取り扱うための特に柔軟かつ効率的な方法が得られることが理解される。詳細には、ベクトル処理ユニットによって提供された各並列処理レーン内においてベクトル作業を（当該ベクトル作業を指定するベクトル命令を変更する必要無く）条件付きで実行することが可能である。その代わりに、ベクトルスキップ命令を用いて、並列処理レーンそれぞれについてスキップインジケータを設定し、スキップインジケータが設定されていないレーン内のみにおいて、後続するベクトル命令を実行する。スキップインジケータがスキップカウンターの形態をとる実施形態において、スキップ命令をネストすることで、複雑な一連の条件付き作業を、各並列処理レーンにおいて独立して行うことが可能になる。その結果、ベクトル処理ユニットの利用増加を達成することが可能になる。なぜならば、上記構成が無い場合は逐次的に行う必要があった作業を、ベクトル処理ユニットを用いて並列処理することが可能になり、また、１つ以上の並列処理レーンを当該作業の遂行から選択的に除外することが可能となるからである。
【００９６】
上記の技術は、上記した命令を含む一連のネーティブ命令を実行するハードウェアによって実行可能であるが、別の実施形態において、このような命令は仮想マシン環境においても実行可能であり、その場合、これらの命令は仮想マシンにとってネーティブであるが、前記仮想マシンは、異なる一連のネーティブ命令を有するハードウェア上において実行するソフトウェアにより、実行されることが理解される。このような仮想マシン環境により、一連の命令全体をエミュレートする完全仮想マシン環境が得られるが、あるいは、一部の命令（例えば、いくつかの命令（例えば、本技術の命令））のみをハードウェアによって捕捉し、部分仮想マシンによってエミュレートしてもよい。
【００９７】
より詳細には、上記したベクトルスキップ、ベクトル作業およびベクトルスキップ終了命令は、全体的仮想マシンまたは部分的仮想マシンに対するネーティブ命令として実行可能であり、仮想マシンは、前記マシンの基盤であるハードウェアプラットフォームと共に機能することで、上記したベクトル処理を提供することができる。
【００９８】
本明細書中、特定の実施形態について記載してきたが、本発明はこれに限定されず、これらの実施形態に対する多くの改変および追加が本発明の範囲内において可能であることが理解される。例えば、本発明の範囲から逸脱することなく、以下の従属請求項の機能の多様な組み合わせを独立請求項の機能と組み合わせることが可能である。
【符号の説明】
【００９９】
２００  プロセッサ
２０２  全般的実行ユニット
２０４  全般的レジスタバンク
２０６  ベクトル実行ユニット
２０８  ベクトルレジスタバンク
２１０  命令フェッチ段
２１２  命令復号段
【図１】
0005512803.tif 000002
【図２】
0005512803.tif 000003
【図３】
0005512803.tif 000004
【図４】
0005512803.tif 000005
【図５】
0005512803.tif 000006
【図６】
0005512803.tif 000007
【図７】
0005512803.tif 000008
【図８Ａ】
0005512803.tif 000009
【図８Ｂ】
0005512803.tif 000010
【図８Ｃ】
0005512803.tif 000011
【図９】
0005512803.tif 000012
【図１０】
0005512803.tif 000013