(57)【要約】【課題】マスク付きベクトル演算処理における演算実行ＴＡＴを短縮して性能を向上させることが可能なマスク付きベクトル演算処理装置を提供する。【解決手段】マスク付きベクトル演算処理装置は、ベクトルレジスタ１００、ベクトル演算器１１０、ベクトルマスクレジスタ１４０、位置算出部４、アドレス変換部３を具備する。ベクトルレジスタ１００はベクトルデータを格納する。ベクトルマスクレジスタ１４０はベクトルデータの要素毎の演算実行を制御するマスクビットを有するベクトルマスクデータを格納する。位置算出部４はベクトル演算実行時にベクトルマスクデータの有効マスクビットの出現する位置を順次算出する。アドレス変換部３は位置算出部４によって得られた有効マスクビット位置をベクトルレジスタ１００のアドレスに変換する。ベクトル演算器１１０はベクトルマスクデータの有効マスクビットに対するベクトルデータの要素についてのみベクトル演算を実行する。【選択図】図４
2007334563.tif 000002
【特許請求の範囲】
【請求項１】
ベクトルデータを格納するベクトルレジスタと、
ベクトル演算器と、
前記ベクトルデータの要素毎の演算実行を制御するマスクビットを有するベクトルマスクデータを格納するベクトルマスクレジスタと、
ベクトル演算実行時に、前記ベクトルマスクデータの有効マスクビットの出現する位置を順次算出する位置算出部と、
前記位置算出部によって得られた有効マスクビット位置を前記ベクトルレジスタのアドレスに変換するアドレス変換部と
を具備し、
前記ベクトル演算器は、前記ベクトルマスクデータの有効マスクビットに対する前記ベクトルデータの要素についてのみベクトル演算を実行する
マスク付きベクトル演算処理装置。
【請求項２】
請求項１に記載のマスク付きベクトル演算処理装置において、
前記位置算出部は、
前記ベクトルマスクデータの先頭ビットから連続するゼロ値をカウントするゼロカウント部と、
前記ゼロカウント部の結果に基づいて、前記ベクトルマスクデータのビット列を左側に所定ビット数シフトする左シフト部と、
前記ベクトルマスクデータの値を前記左シフト部の結果に置き換えて前記ゼロカウント部へ出力するベクトルマスクレジスタ出力部と
を備える
マスク付きベクトル演算処理装置。
【請求項３】
請求項２に記載のマスク付きベクトル演算処理装置において、
前記位置算出部は、前記ゼロカウント部、前記左シフト部及び前記ベクトルマスクレジスタ出力部の行う処理を所定回数繰り返して実行する
マスク付きベクトル演算処理装置。
【請求項４】
請求項３に記載のマスク付きベクトル演算処理装置において、
前記ゼロカウント部の結果が、前記ベクトルデータの要素数と一致したことを検出する一致検出部を更に具備し、
前記一致検出部が一致を検出したとき、前記繰り返しを終了して前記ベクトル演算の実行完了とする
マスク付きベクトル演算処理装置。
【請求項５】
請求項２に記載のマスク付きベクトル演算処理装置において、
前記アドレス変換部は、現在のアドレス値と、前記ゼロカウント部の結果とを加算する加算器を備える
マスク付きベクトル演算処理装置。
【請求項６】
請求項１乃至５のいずれか一項に記載のマスク付きベクトル演算処理装置において、
前記ベクトルマスクデータの有効マスクビット数のカウント結果に基づいて、予め前記ベクトル演算の実行完了タイミングを出力する完了タイミング出力部と
を更に具備する
マスク付きベクトル演算処理装置。
【請求項７】
請求項６に記載のマスク付きベクトル演算処理装置において、
前記完了タイミング出力部は、
前記ベクトルマスクデータの有効マスクビット数をカウントするカウント部と、
前記カウント部の前記カウント結果を保持するカウント値保持部と、
前記ベクトル演算実行時に前記有効マスクビット数のカウント結果を読み出して予め前記ベクトル演算の実行完了タイミングを出力する完了判定部と
を備える
マスク付きベクトル演算処理装置。
【請求項８】
マスク付きベクトル演算処理装置の動作方法であって、
ここで、前記マスク付ベクトル演算処理装置は、
ベクトルデータを格納するベクトルレジスタと、
ベクトル演算器と、
前記ベクトルデータの要素毎に対応するマスクビットを有するベクトルマスクデータを格納するベクトルマスクレジスタと、
位置算出部と、
アドレス変換部と
を具備し、
前記マスク付きベクトル演算処理装置の動作方法は、ベクトル演算実行時に、
（ａ）前記ベクトルマスクレジスタが、前記ベクトルデータの要素毎の演算実行を制御するマスクビットを有するベクトルマスクデータを格納するステップと、
（ｂ）前記位置算出部が、前記ベクトルマスクデータの有効マスクビットの出現する位置を順次算出するステップと、
（ｃ）前記アドレス変換部が、前記位置算出部によって得られた有効マスクビット位置を前記ベクトルレジスタのアドレスに変換するステップと、
（ｄ）前記ベクトル演算器が、前記ベクトルマスクデータの有効マスクビットに対する前記ベクトルデータの要素についてのみベクトル演算を実行するステップと
を具備する
マスク付きベクトル演算処理装置の動作方法。
【請求項９】
請求項８に記載のマスク付きベクトル演算処理装置の動作方法において、
前記位置算出部は、
ゼロカウント部と、
左シフト部と、
ベクトルマスクレジスタ出力部と
を備え、
前記（ｂ）ステップは、
（ｂ１）前記ゼロカウント部が、前記ベクトルマスクデータの先頭ビットから連続するゼロ値をカウントするステップと、
（ｂ２）前記左シフト部が、前記ゼロカウント部の結果に基づいて、前記ベクトルマスクデータのビット列を左側に所定ビット数シフトするステップと、
（ｂ３）前記ベクトルマスクレジスタ出力部が、前記ベクトルマスクデータの値を前記左シフト部の結果に置き換えて前記ゼロカウント部へ出力するステップと
を備える
マスク付きベクトル演算処理装置の動作方法。
【請求項１０】
請求項９に記載のマスク付きベクトル演算処理装置の動作方法において、
前記マスク付ベクトル演算処理装置は、一致検出部を更に具備し、
（ｅ）一致検出部が、前記ゼロカウント部の結果と前記ベクトルデータの要素数との一致を検出するステップと、
（ｆ）前記一致検出部が一致を検出したとき、前記繰り返しを終了して前記ベクトル演算の実行完了とするステップと
を更に具備する
マスク付きベクトル演算処理装置の動作方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ベクトル演算処理装置に関し、特にマスク付きベクトル演算処理装置に関する。
【背景技術】
【０００２】
ベクトルプロセッサでは、アプリケーションプログラムの実効性能を向上させるために、コンパイル時に出来る限りベクトル命令を使用できるようにする必要がある。通常のループ処理では、このようなベクトル化が比較的容易である。しかし、ＩＦ文付きのループ処理ではＩＦ文処理の結果によって実行する処理内容が変わるため、通常のベクトル命令に変換することができない。そこで、このようなＩＦ文付きループ処理をベクトル化するために、マスク付きベクトル演算命令が存在する。
【０００３】
ＩＦ文付きループ処理に一例を以下に示す。このようなループ文の処理では、“Ａ（Ｉ）．ＬＴ．０”の実行結果をベクトルマスクとして設定して、“Ｕ（Ｉ）＝Ｘ（Ｉ）−Ｙ（Ｉ）”のマスク付きベクトル演算を実行した後に、ベクトルマスクを反転して、“Ｕ（Ｉ）＝Ｘ（Ｉ）＋Ｙ（Ｉ）”のマスク付きベクトル演算を実行することで、ベクトル化することが可能になる。
ＤＯ  Ｉ＝１，Ｎ
ＩＦ  （Ａ（Ｉ）．ＬＴ．０）  ＴＨＥＮ
Ｕ（Ｉ）＝Ｘ（Ｉ）−Ｙ（Ｉ）
ＥＬＳＥ
Ｕ（Ｉ）＝Ｘ（Ｉ）＋Ｙ（Ｉ）
ＣＯＮＴＩＮＵＥ
【０００４】
図１は、マスク付きベクトル演算命令を実行する構成を示すブロック図である。マスク付きベクトル演算命令は、一般的に、このような構成で実行処理される。ベクトル演算器７１０は、２つのソースオペランドが格納されているベクトルレジスタＶＲ＃０＿７００、ＶＲ＃１＿７０１からソースオペランドを読み出す。そして、演算結果をディスティネーションオペランドを格納するベクトルレジスタＶＲ＃２＿７０２に書き戻す。このとき、ベクトルレジスタＶＲ＃０＿７００、ＶＲ＃１＿７０１の読み出しアドレスは、アドレスレジスタ７２０の値によって指定される。アドレスレジスタ７２０の値はインクリメンタ７３０によってクロックサイクル毎にカウントアップされる。また、演算結果が格納されるベクトルレジスタＶＲ＃２＿７０２の書き込みアドレスは、アドレスレジスタ７２２の値によって指定される。アドレスレジスタ７２２の値はインクリメンタ７３２によってクロックサイクル毎にカウントアップされる。以上により、ベクトルレジスタ（ＶＲ＃０＿７００、ＶＲ＃１＿７０１）に格納された複数要素のベクトルデータを順次読み出して要素毎に演算処理を行い、その演算結果を別のベクトルレジスタ（ＶＲ＃２＿７０２）に要素毎に書き戻すことができる。
【０００５】
ベクトルマスクレジスタ７４０は、ベクトル演算処理実行時の要素毎の有効／無効を識別するビット列であるベクトルマスクを格納している。ベクトルマスクのビット長はベクトル演算処理におけるベクトルデータの要素数と等しい。ベクトルマスクレジスタ７４０に格納されたベクトルマスクは、ベクトル演算器７１０の演算結果がベクトルレジスタＶＲ＃２＿７０２に格納されるのに同期して、パラレル−シリアル変換器７６０によって先頭ビットから順に１ビットづつ取り出され、そのビットがベクトルレジスタＶＲ＃２＿７０２の書き込み制御入力（ＷＥ：Ｗｒｉｔｅ  Ｅｎａｂｌｅ）に与えられる。ベクトルマスクが無効を表すビット値であった場合、そのエントリに対応するベクトル要素の演算結果を書き戻すアドレスをアドレスレジスタ７２２が指定した際、ベクトルレジスタＶＲ＃２＿７０２の書き込み制御入力は書き込み無効を指定する。その結果、このベクトル要素の演算結果はベクトルレジスタＶＲ＃２＿７０２に書き込みが行われない。このようにして、ベクトルマスクが有効を表すビット値のベクトル要素のみがベクトルレジスタＶＲ＃２＿７０２に書き込まれ、その他のベクトル要素はベクトルレジスタＶＲ＃２＿７０２の元の値が保存されることで、マスク付きベクトル演算命令が実行される。
【０００６】
図２、図３は、通常及びマスク付きベクトル演算処理の演算ＴＡＴ（Ｔｕｒｎ  Ａｒｏｕｎｄ  Ｔｉｍｅ）を示す。図２は通常のベクトル演算（ベクトルマスクが全ビット有効であることに相当する）の場合、図３はマスク付きベクトル演算の場合、をそれぞれ示している。図３では、ベクトルマスクの値が“０”の場合を無効要素として、その要素に対する演算を図中では網掛けで表している。図２のベクトル演算のＴＡＴは、演算器単体のＴＡＴと要素数の和になる。一方、図３のマスク付きベクトル演算のＴＡＴは、図２の場合と同じく、演算器単体のＴＡＴと要素数の和となる。ベクトルマスクが無効要素を表すビット値の場合でも演算自体は実行しており、演算結果がベクトルレジスタに書き込まれないだけだからである。従って、ベクトル要素数が等しければ、ベクトルマスクの有無、ベクトルマスクの値の相違に関わらず、ベクトル演算のＴＡＴは等しくなる。
【０００７】
ところで、最近ではソースプログラムにおいて、以下に示すようなループ記述が増えてきている。このようなループ処理をマスク付きベクトル演算で実行する場合、“Ａ（Ｉ）．ＬＴ．０”の実行結果から条件が成立する要素までの要素数をカウントして、先頭ビットからカウントされた要素数だけを有効とするベクトルマスクを生成する。そして、“Ｕ（Ｉ）＝Ｘ（Ｉ）＋Ｙ（Ｉ）”のマスク付きベクトル演算を実行することになる。このとき、ベクトルマスクにおいて先頭ビットからの有効要素数が非常に少ない場合（最も極端な場合は、最初の要素で条件が成立してループ外にジャンプするケースもあり得る）でも、マスク付きベクトル演算のＴＡＴは、全要素が有効な場合のベクトル演算のＴＡＴと等しいことになる。
ＤＯ  Ｉ＝１，Ｎ
ＩＦ  （Ａ（Ｉ）．ＬＴ．０）  ＴＨＥＮ
ＧＯＴＯ  ＜ループ外＞
ＥＬＳＥ
Ｕ（Ｉ）＝Ｘ（Ｉ）＋Ｙ（Ｉ）
ＣＯＮＴＩＮＵＥ
【０００８】
従って、このようなループ処理に対するマスク付きベクトル演算処理に対しては、以下に示すような問題がある。第１の課題は、これまでのマスク付きベクトル演算処理装置では、マスクビット上で有効な要素データが少ない場合でも全要素に対する演算処理を実行するため、演算ＴＡＴが短縮できず、性能向上が困難なことである。第２の課題は、マスクビット上で無効な要素データに対しても演算処理を実行するため、本来は必要のない演算処理に対する電力消費が発生することである。マスク付きベクトル演算処理における演算実行ＴＡＴを短縮して性能を向上させることが可能な技術が望まれる。無効な要素データに対する演算処理を実行しないことで不必要な電力消費を回避して低消費電力化を実現する技術が望まれる。
【０００９】
関連する技術として特開昭６２−２７６６６８号公報にベクトルマスク演算制御ユニットが開示されている。このベクトルマスク演算制御ユニットは、先行制御装置により解読されたマスク付ベクトル命令処理を実行するデータ処理システムにおいて、カウント手段と、発生手段と、アドレス生成手段とを含む。カウント手段は、ベクトルオペランドを１対１でそれぞれマスクする複数ビット中の連続する演算抑止ビットの個数をカウントする。発生手段は、このカウント手段でカウントされた値を用いて２のべき乗倍されたアドレスインクリメント値を１値又は２値発生する。アドレス生成手段は、この発生手段から発生された２のべき乗されたアドレスインクリメント値とベクトルアドレスとを加算しオペランドアドレスを求める。
【００１０】
特開昭５８−２２４４６号公報にベクトル・マスク演算制御方式が開示されている。このベクトル・マスク演算制御方法は、アレイ・オペランド及びマスク・ベクトルを順次読み出し、該マスク・ベクトルのビット値に従い、対応するオペランドの演算を制御する。該マスク・ベクトル中に、一定個数の演算抑止ビットが連続していることを検出する手段と、該個数分のオペランド及びマスク・ビットを飛び越すような記憶アドレスの更新手段とを設ける。該抑止ビットを検出したとき、対応するオペランドの読み出しと無効な演算を飛ばすように制御する。
【００１１】
特開平７−２１９９２８号公報に、ベクトルデータ処理装置が開示されている。このベクトルデータ処理装置は、ベクトルレジスタと、前記ベクトルレジスタに格納されるベクトルデータの要素毎に対応するマスクビットを有するマスクレジスタを持つ。インターバルカウンタと、インターバルバッファと、書込みアドレスレジスタと、マスク読みだしレジスタと、インターバルバッファ読みだしカウンタと、累積加算器とを有する。インターバルカウンタは、マスク付き演算を行う場合、マスク付き演算実行前に、マスクレジスタより１ビットずつマスクビットを読みだし、有効マスクビット間のビット間隔をカウントする。インターバルバッファは、有効マスクビット出現時に前記インターバルカウンタの値を格納する。書込みアドレスレジスタは、有効マスクビット出現数をカウントし前記インターバルバッファの書込みアドレスを生成する。マスク読みだしレジスタは、前記マスクレジスタを読みだしてインターバルバッファ書込み有効信号及びインターバルカウンタ制御信号およびインターバルバッファ書込みアドレス制御信号を生成する。インターバルバッファ読みだしカウンタは、マスク付き演算における前記ベクトルレジスタ読みだし時に前記インターバルバッファの読みだしアドレスを生成する。累積加算器は、前記インターバルバッファより読み出されたマスク有効ビット間隔を順次累積加算し前記ベクトルレジスタに格納されるベクトルデータの内マスクビット有効なベクトルデータのみの読みだしアドレスを生成する。
【００１２】
【特許文献１】特開昭６２−２７６６６８号公報
【特許文献２】特開昭５８−２２４４６号公報
【特許文献３】特開平７−２１９９２８号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
本発明の目的は、マスク付きベクトル演算処理における演算実行ＴＡＴを短縮して性能を向上させることが可能なマスク付きベクトル演算処理装置を提供することにある。
【００１４】
本発明の他の目的は、マスク付きベクトル演算処理における無効な要素データに対する演算処理を実行しないことで不必要な電力消費を回避して低消費電力化を実現することが可能なマスク付きベクトル演算処理装置を提供することにある。
【課題を解決するための手段】
【００１５】
以下に、発明を実施するための最良の形態で使用される番号・符号を用いて、課題を解決するための手段を説明する。これらの番号・符号は、特許請求の範囲の記載と発明を実施するための最良の形態との対応関係を明らかにするために括弧付きで付加されたものである。ただし、それらの番号・符号を、特許請求の範囲に記載されている発明の技術的範囲の解釈に用いてはならない。
【００１６】
上記課題を解決するために、本発明のマスク付きベクトル演算処理装置は、ベクトルレジスタ（１００、１０１、１０２）と、ベクトル演算器（１１０）と、ベクトルマスクレジスタ（１４０）と、位置算出部（４）と、アドレス変換部（３）とを具備する。ベクトルレジスタ（１００、１０１、１０２）は、ベクトルデータを格納する。ベクトルマスクレジスタ（１４０）は、ベクトルデータの要素毎の演算実行を制御するマスクビットを有するベクトルマスクデータを格納する。位置算出部（４）は、ベクトル演算実行時に、ベクトルマスクデータの有効マスクビットの出現する位置を順次算出する。アドレス変換部（３）は、位置算出部（４）によって得られた有効マスクビット位置をベクトルレジスタ（１００）のアドレスに変換する。ベクトル演算器（１１０）は、ベクトルマスクデータの有効マスクビットに対するベクトルデータの要素についてのみベクトル演算を実行する。
【００１７】
上記のマスク付きベクトル演算処理装置において、
位置算出部（４）は、ゼロカウント部（１６０）と、左シフト部（１７０）と、ベクトルマスクレジスタ出力部（１５０）とを備える。ゼロカウント部（１６０）は、ベクトルマスクデータの先頭ビットから連続するゼロ値をカウントする。左シフト部（１７０）は、ゼロカウント部（１６０）の結果に基づいて、ベクトルマスクデータのビット列を左側に所定ビット数シフトする。ベクトルマスクレジスタ出力部（１５０）は、ベクトルマスクデータの値を左シフト部（１７０）の結果に置き換えてゼロカウント部（１６０）へ出力する。
【００１８】
上記のマスク付きベクトル演算処理装置において、位置算出部（４）は、ゼロカウント部（１６０）、左シフト部（１７０）及びベクトルマスクレジスタ出力部（１５０）の行う処理を所定回数繰り返して実行する。
【００１９】
上記のマスク付きベクトル演算処理装置において、ゼロカウント部（１６０）の結果が、ベクトルデータの要素数と一致したことを検出する一致検出部（１９０）を更に具備する。一致検出部（１９０）が一致を検出したとき、繰り返しを終了してベクトル演算の実行完了とする。
【００２０】
上記のマスク付きベクトル演算処理装置において、アドレス変換部（３）は、現在のアドレス値と、ゼロカウント部（１６０）の結果とを加算する加算器（１３０、１３２）を備える。
【００２１】
上記のマスク付きベクトル演算処理装置において、ベクトルマスクデータの有効マスクビット数のカウント結果に基づいて、予めベクトル演算の実行完了タイミングを出力する完了タイミング出力部（２）とを更に具備する。
【００２２】
上記のマスク付きベクトル演算処理装置において、
完了タイミング出力部（２）は、カウントするカウント部（５７０）と、カウント値保持部（５８０）と、完了判定部（５９０）とを備える。カウント部（５７０）は、ベクトルマスクデータの有効マスクビット数をカウントする。カウント値保持部（５８０）は、カウント部（５７０）のカウント結果を保持する。完了判定部（５９０）は、ベクトル演算実行時に有効マスクビット数のカウント結果を読み出して予めベクトル演算の実行完了タイミングを出力する。
【００２３】
上記課題を解決するために、本発明は以下のマスク付きベクトル演算処理装置の動作方法である。ここで、マスク付ベクトル演算処理装置は、ベクトルデータを格納するベクトルレジスタ（１００、１０１、１０２）と、ベクトル演算器（１１０）と、ベクトルデータの要素毎の演算実行を制御するマスクビットを有するベクトルマスクデータを格納するベクトルマスクレジスタ（１４０）と、位置算出部（４）と、アドレス変換部（３）とを具備する。マスク付きベクトル演算処理装置の動作方法は、ベクトル演算実行時に、（ａ）ベクトルマスクレジスタ（１４０）が、ベクトルデータの要素毎に対応するマスクビットを有するベクトルマスクデータを格納するステップと、（ｂ）位置算出部（４）が、ベクトルマスクデータの有効マスクビットの出現する位置を順次算出するステップと、（ｃ）アドレス変換部（３）が、位置算出部（４）によって得られた有効マスクビット位置をベクトルレジスタ（１００）のアドレスに変換するステップと、（ｄ）ベクトル演算器（１１０）が、ベクトルマスクデータの有効マスクビットに対するベクトルデータの要素についてのみベクトル演算を実行するステップとを具備する。
【００２４】
上記のマスク付きベクトル演算処理装置の動作方法において、位置算出部（４）は、ゼロカウント部（１６０）と、左シフト部（１７０）と、ベクトルマスクレジスタ出力部（１５０）とを備える。（ｂ）ステップは、（ｂ１）ゼロカウント部（１６０）が、ベクトルマスクデータの先頭ビットから連続するゼロ値をカウントするステップと、（ｂ２）左シフト部（１７０）が、ゼロカウント部（１６０）の結果に基づいて、ベクトルマスクデータのビット列を左側に所定ビット数シフトするステップと、（ｂ３）ベクトルマスクレジスタ出力部（１５０）が、ベクトルマスクデータの値を左シフト部（１７０）の結果に置き換えてゼロカウント部（１６０）へ出力するステップとを備える。
【００２５】
上記のマスク付きベクトル演算処理装置の動作方法において、マスク付ベクトル演算処理装置は、一致検出部（１９０）を更に具備する。（ｅ）一致検出部（１９０）が、ゼロカウント部（１６０）の結果とベクトルデータの要素数との一致を検出するステップと、（ｆ）一致検出部（１９０）が一致を検出したとき、繰り返しを終了してベクトル演算の実行完了とするステップとを更に具備する。
【発明の効果】
【００２６】
本発明により、マスク付きベクトル演算処理における演算実行ＴＡＴを短縮して性能を向上させることが可能となる。加えて、無効な要素データに対する演算処理を実行しないことで不必要な電力消費を回避して低消費電力化を実現することが可能となる。
【発明を実施するための最良の形態】
【００２７】
（第１の実施の形態）
以下、本発明のマスク付きベクトル演算処理装置の第１の実施の形態に関して、添付図面を参照して説明する。図４は、本発明のマスク付きベクトル演算処理装置の第１の実施の形態の構成の一例を示すブロック図である。マスク付きベクトル演算処理装置１は、ベクトル演算器１１０、ベクトルレジスタＶＲ＃０＿１００、ＶＲ＃１＿１０１、ベクトルレジスタＶＲ＃２＿１０２、アドレスレジスタ１２０、アドレス加算器１３０、アドレスレジスタ１２２、書き込みアドレス加算器１３２、ベクトルマスクレジスタ１４０、選択回路１５０、Ｌｅａｄｉｎｇ  Ｚｅｒｏ回路１６０（以下、「ＬＤＺ回路１６０」と略称する）、左シフト回路１７０、一時退避レジスタ１８０、及び比較器１９０を具備する。
【００２８】
ベクトルレジスタＶＲ＃０＿１００、ＶＲ＃１＿１０１は、それぞれソースオペランドが格納されている。ベクトルレジスタＶＲ＃２＿１０２は、ディスティネーションオペランドを格納する。ベクトル演算器１１０は、ベクトルレジスタＶＲ＃０＿１００、ＶＲ＃１＿１０１から２つのソースオペランドを読み出す。そして、演算結果をベクトルレジスタＶＲ＃２＿１０２に書き戻す。アドレスレジスタ１２０は、ベクトル演算器１１０が２つのソースオペランドを読み出すとき、ベクトルレジスタＶＲ＃０＿１００、ＶＲ＃１＿１０１の読み出しアドレスを指定する値を格納する。読み出しアドレス加算器１３０は、アドレスレジスタ１２０の値をクロックサイクル毎に更新する。アドレスレジスタ１２２は、演算結果が格納されるベクトルレジスタＶＲ＃２＿１０２の書き込みアドレスを指定する値を格納する。書き込みアドレス加算器１３２は、アドレスレジスタ１２２の値をクロックサイクル毎に更新する。
【００２９】
ベクトルマスクレジスタ１４０は、ベクトル演算処理実行時の要素毎の有効／無効を識別するビット列であるベクトルマスクを格納している。ベクトルマスクのビット長はベクトル演算処理におけるベクトルデータの要素数と等しい。ベクトルマスクレジスタ１４０は、ベクトルマスクレジスタ１４０の値（ベクトルマスク）を選択回路１５０へ出力する。選択回路１５０は、演算開始直後はベクトルマスクレジスタ１４０の出力を選択し、それ以降は一時退避レジスタ１８０の出力を選択して、ＬＤＺ回路１６０及び左シフト回路１７０へ出力する。ＬＤＺ回路１６０は、入力ビット列の先頭から論理値ゼロが連続するビット数（以下、「ゼロ値連続数値」と略称する）を算出する。ＬＤＺ回路１６０は、そのゼロ値連続数値を前述した読み出しアドレス加算器１３０、及び書き込みアドレス加算器１３２に出力する。
【００３０】
読み出しアドレス加算器１３０は、一方の入力としてのＬＤＺ回路１６０のゼロ値連続数値と、他方の入力としての現在の読み出しアドレスレジスタ１２０の値とを供給される。読み出しアドレス加算器１３０は、桁上げ入力を必ず「＋１」として加算を行う。これにより、ＬＤＺ回路１６０の出力がゼロ値であった場合、読み出しアドレス加算器１３０はインクリメンタとして動作する。すなわち、読み出しアドレス加算器１３０は、クロックサイクル毎に読み出しアドレスレジスタ１２０をカウントアップする。ＬＤＺ回路１６０の出力がゼロ値以外の場合、読み出しアドレス加算器１３０は、ＬＤＺ回路１６０の入力ビット列における先頭からのゼロ値連続数＋１の値を、現在の読み出しアドレスレジスタ１２０に加算する。
【００３１】
同じく、書き込みアドレス加算器１３２は、一方の入力としてのＬＤＺ回路１６０のゼロ値連続数値と、他方の入力としての現在の書き込みアドレスレジスタ１２２の値とを供給される。書き込みアドレス加算器１３２は、桁上げ入力を必ず「＋１」として加算を行う。これにより、ＬＤＺ回路１６０の出力がゼロ値であった場合、書き込みアドレス加算器１３２はインクリメンタとして動作する。すなわち、クロックサイクル毎に書き込みアドレスレジスタ１２２をカウントアップする。ＬＤＺ回路１６０の出力がゼロ値以外の場合、書き込みアドレス加算器１３２は、ＬＤＺ回路１６０の入力ビット列における先頭からのゼロ値連続数＋１の値を、現在の書き込みアドレスレジスタ１２２に加算する。
【００３２】
一方、ＬＤＺ回路１６０は、更に、ゼロ値連続数値を左シフト回路１７０に出力する。左シフト回路１７０は、選択回路１５０から出力された入力データを、ＬＤＺ回路１６０の出力値（ゼロ値連続数値）＋１だけ左シフトする。このとき、左シフト回路１７０は、これにより、ＬＤＺ回路１６０の出力がゼロ値であった場合にも必ず１ビット左シフトすることになる。左シフト回路１７０は、左シフトした値を一時退避レジスタ１８０へ出力する。一時退避レジスタ１８０は、その値を選択回路１５０にフィードバックする。
【００３３】
ＬＤＺ回路１６０は、更に、ゼロ値連続数値を比較器１９０に出力する。比較器１９０は、ゼロ値連続数値と、ベクトルマスクレジスタ１４０のビット長（ＶＬ）、すなわち、ベクトル演算の演算要素数とを比較する。ここで、ＬＤＺ回路１６０の出力であるゼロ値連続数値をがベクトル演算要素数と一致した場合とは、ＬＤＺ回路１６０への入力となるビット列が全てゼロ値となったことを表す。これは、有効な要素データがなくなったことを意味する。したがって、比較器１９０が一致出力となった時点で、マスク付きベクトル演算の実行終了となる。その場合、ベクトル演算命令制御部（図示されず）に演算実行終了を通知する。
【００３４】
このようなマスク付きベクトル演算処理装置１により、ベクトルマスクのビット列において、ビット値“１”を有効な要素を表すビット値であるとした場合、そのエントリに対応するベクトル要素のソースオペランドが格納されたベクトルレジスタＶＲ＃０＿１００、ＶＲ＃１＿１０１の読み出しアドレスのみをクロックサイクル毎に連続して指定することができる。また、そのエントリに対応するベクトル要素のディスティネーションオペランドを格納するベクトルレジスタＶＲ＃２＿１０２の書き込みアドレスのみをクロックサイクル毎に連続して指定することができる。これにより、ベクトルマスクの有効な要素のみについてベクトル演算を実行するという所望の論理機能を実現することができる。
【００３５】
なお、本発明は、読み出しアドレス加算器１３０、書き込みアドレス加算器１３２、ＬＤＺ回路１６０、左シフト回路１７０、比較器１９０は、図４に示す構成に限定されるものではない。すなわち、それらの構成の組み合わせと同等の機能を実現する構成であればよい。
【００３６】
例えば、図４において、読み出しアドレスレジスタ１２０、書き込みアドレスレジスタ１２２、読み出しアドレス加算器１３０及び書き込みアドレス加算器１３２はそれぞれ独立して設けている。ここで、書き込みアドレスレジスタ１２２の値は、読み出しアドレスレジスタ１２０の値が求まってから、ベクトル演算器１１０において演算に必要なクロックサイクル数が経過した後に、読み出しアドレスレジスタ１２０の値と同じ値になる。したがって、書き込みアドレス加算器１３２は設けずに、読み出しアドレスレジスタ１２０を複数クロック遅らせた後に書き込みアドレスレジスタ１２２に入力するような構成でも良い。
【００３７】
次に、図４のマスク付きベクトル演算処理装置の第１の実施の形態の動作について説明する。図５は、マスク付きベクトル演算処理装置の第１の実施の形態の動作を示すタイミングチャートである。左端の縦の列は、サイクル（時刻）を示す。中央の縦の列は、読み出しアドレスレジスタ１２０及び書き込みアドレスレジスタ１２２のアドレス値を示す。右端の縦の列は、選択回路１５０の出力を示す。
【００３８】
ここでは、「実行開始時」として記述した“１１００１１１０００００１１０１”をベクトルマスク値の例とし、このようなベクトルマスク値が設定された場合の動作について説明する。ここで、ベクトルマスク値は１６ビット幅である。このビット数が１回のベクトル演算における要素数（ベクトル要素数）に相当する。すなわち、この例におけるベクトル演算の要素数は「１６」ということになる。ベクトルマスク値においてビット値“１”を有効なベクトル要素とすると、図５に示すベクトルマスク値の例では、有効なベクトル要素数は８となる。なお、読み出しアドレスレジスタ１２０及び書き込みアドレスレジスタ１２２の初期値は、いずれも「−１」としておく。
【００３９】
「実行開始時」のベクトルマスク値から、ＬＤＺ回路１６０は、ベクトルマスク値の先頭ビットがビット値“１”であり、“０”の数がゼロであるから、ゼロ値「０」を出力する。加算器１３０、１３２は、アドレス初期値「−１」に、このゼロ値「０」と「＋１」とを加算した値（＝「−１」＋「０」＋「＋１」＝「０」）を、次のサイクルのアドレス値として出力する。従って、次のサイクル「１Ｔ」におけるベクトルレジスタ（ＶＲ＃０＿１００、ＶＲ＃１＿１０１、ＶＲ＃２＿１０２）のアドレス値は「０」となる。また、ＬＤＺ回路１６０の出力値＋１ビット分（＝「０」＋１＝１ビット分）だけ、ベクトルマスク値は左シフト回路１７０により左シフトされて、次のサイクルにおけるＬＤＺ回路１６０への入力となる。従って、選択回路１５０は、サイクル「１Ｔ」におけるＬＤＺ回路１６０へ、ビット列“１００１１１０００００１１０１０”を出力する。
【００４０】
サイクル「１Ｔ」のベクトルマスク値から、ＬＤＺ回路１６０は、先頭ビットがビット値“１”であるからゼロ値「０」を出力する。加算器１３０、１３２は、前のサイクルにおけるアドレス値「０」に、このゼロ値「０」と「＋１」とを加算した値（＝「０」＋「０」＋「＋１」＝「１」）を、次のサイクルのアドレス値として出力する。従って、次のサイクル「２Ｔ」におけるベクトルレジスタのアドレス値は「１」となる。また、ＬＤＺ回路１６０の出力値＋１ビット分（＝「０」＋１＝１ビット分）だけ、ベクトルマスク値は左シフト回路１７０により左シフトされて、次のサイクルにおけるＬＤＺ回路１６０への入力となる。従って、選択回路１５０は、サイクル「２Ｔ」におけるＬＤＺ回路１６０へ、ビット列“００１１１０００００１１０１００”を出力する。
【００４１】
サイクル「２Ｔ」のベクトルマスク値から、ＬＤＺ回路１６０は、先頭ビットからビット値“０”が２ビット連続することから「２」を出力する。加算器１３０、１３２は、前のサイクルにおけるアドレス値「１」に、この値「２」と「＋１」とを加算した値（＝「１」＋「２」＋「＋１」＝「４」）を、次のサイクルのアドレス値として出力する。従って、次のサイクル「３Ｔ」におけるベクトルレジスタのアドレス値は「４」となる。また、ＬＤＺ回路１６０の出力値＋１ビット分（＝「２」＋１＝３ビット分）、ベクトルマスク値は左シフトされて、次のサイクルにおけるＬＤＺ回路１６０への入力となる。従って、選択回路１５０は、サイクル「３Ｔ」におけるＬＤＺ回路１６０へ、ビット列“１１０００００１１０１０００００”となる。
【００４２】
サイクル「３Ｔ」のベクトルマスク値から、ＬＤＺ回路１６０は、先頭ビットがビット値“１”であるからゼロ値「０」を出力する。加算器１３０、１３２は、前のサイクルにおけるアドレス値「４」に、この値「０」と「＋１」とを加算した値（＝「４」＋「０」＋「＋１」＝「５」）を、次のサイクルのアドレス値として出力する。従って、次のサイクル「４Ｔ」におけるベクトルレジスタのアドレス値は「５」となる。また、ＬＤＺ回路１６０の出力値＋１ビット分（＝「０」＋１＝１ビット分）、ベクトルマスク値は左シフト回路１７０により左シフトされて、次のサイクルにおけるＬＤＺ回路１６０への入力となる。従って、選択回路１５０は、サイクル「４Ｔ」におけるＬＤＺ回路１６０へ、ビット列“１０００００１１０１００００００”を出力する。
【００４３】
サイクル「４Ｔ」のベクトルマスク値から、ＬＤＺ回路１６０は、先頭ビットがビット値“１”であることからゼロ値「０」を出力する。加算器１３０、１３２は、前のサイクルにおけるアドレス値「５」に、この値「０」と「＋１」とを加算した値（＝「５」＋「０」＋「＋１」＝「６」）を、次のサイクルのアドレス値として出力する。従って、次のサイクル「５Ｔ」におけるベクトルレジスタのアドレス値は「６」となる。また、ＬＤＺ回路１６０の出力値＋１ビット分（＝「０」＋１＝１ビット分）、ベクトルマスク値は左シフト回路１７０により左シフトされて、次のサイクルにおけるＬＤＺ回路１６０への入力となる。従って、選択回路１５０は、サイクル「５Ｔ」におけるＬＤＺ回路１６０へ、ビット列“０００００１１０１０００００００”を出力する。
【００４４】
サイクル「５Ｔ」のベクトルマスク値から、ＬＤＺ回路１６０は、先頭ビットからビット値“０”が５ビット連続することから「５」を出力する。加算器１３０、１３２は、前のサイクルにおけるアドレス値「６」に、この値「５」と「＋１」とを加算した値（＝「６」＋「５」＋「＋１」＝「１２」）を、次のサイクルのアドレス値として出力する。従って、次のサイクル「６Ｔ」におけるベクトルレジスタのアドレス値は「１２」となる。また、ＬＤＺ回路１６０の出力値＋１ビット分（＝「５」＋１＝６ビット分）、ベクトルマスク値は左シフト回路１７０により左シフトされて、次のサイクルにおけるＬＤＺ回路１６０への入力となる。従って、選択回路１５０は、サイクル「６Ｔ」におけるＬＤＺ回路１６０へ、ビット列“１０１０００００００００００００”を出力する。
【００４５】
サイクル「６Ｔ」のベクトルマスク値から、ＬＤＺ回路１６０は、先頭ビットがビット値“１”であることからゼロ値「０」を出力する。加算器１３０、１３２は、前のサイクルにおけるアドレス値「１２」に、この値「０」と「＋１」とを加算した値（＝「１２」＋「０」＋「＋１」＝「１３」）を、次のサイクルのアドレス値として出力する。従って、次のサイクル「７Ｔ」におけるベクトルレジスタのアドレス値は「１３」となる。また、ＬＤＺ回路１６０の出力値＋１ビット分（＝「０」＋１＝１ビット分）、ベクトルマスク値は左シフト回路１７０により左シフトされて、次のサイクルにおけるＬＤＺ回路１６０への入力となる。従って、選択回路１５０は、サイクル「７Ｔ」におけるＬＤＺ回路１６０へ、ビット列“０１００００００００００００００”を出力する。
【００４６】
サイクル「７Ｔ」のベクトルマスク値から、ＬＤＺ回路１６０は、先頭ビットからビット値“０”が１ビット連続することから「１」を出力する。加算器１３０、１３２は、前のサイクルにおけるアドレス値「１３」に、この値「１」と「＋１」を加算した値（＝「１３」＋「１」＋「＋１」＝「１５」）を、次のサイクルのアドレス値として出力する。従って、次のサイクル「８Ｔ」におけるベクトルレジスタのアドレス値は「１５」となる。また、ＬＤＺ回路１６０の出力値＋１ビット分（＝「１」＋１＝２ビット分）、ベクトルマスク値は左シフト回路１７０により左シフトされて、次のサイクルにおけるＬＤＺ回路１６０への入力となる。従って、選択回路１５０は、サイクル「８Ｔ」におけるＬＤＺ回路１６０へ、ビット列“００００００００００００００００”を出力する。  
【００４７】
サイクル「８Ｔ」のベクトルマスク値から、ＬＤＺ回路１６０は、先頭ビットからビット値“０”が１６ビット連続することから「１６」を出力する。この時、ＬＤＺ回路１６０の出力「１６」と、ベクトル演算の要素数「１６」とが一致するため、比較器１９０は、両者が一致したことを示す信号をベクトル演算命令制御部（図示されず）へ出力する。これにより、ベクトル演算命令制御部は、マスク付きベクトル演算の演算実行を終了する。
【００４８】
以上のタイミングチャートに関する説明から、本発明のマスク付きベクトル演算装置は、ベクトルマスクのビット列において有効なベクトル要素のみに対して、連続して演算を実行出来ることが判る。例として示した図５のベクトルマスク値では、ベクトル演算の要素数は「１６」、有効なベクトル要素の数は「８」であった。このとき、本発明のマスク付きベクトル演算装置では実行開始時を含めて７クロックサイクル後まででマスク付きベクトル演算処理を実行して、８クロックサイクル後にはマスク付きベクトル演算の実行終了を判定することができる。
【００４９】
図６、図７は、本発明のマスク付きベクトル演算装置を用いた通常及びマスク付きベクトル演算処理の演算ＴＡＴを示す。図６は通常のベクトル演算処理のＴＡＴであり、図７はマスク付きベクトル演算処理のＴＡＴである。図６の通常のベクトル演算処理では、ベクトルマスク値が全要素に対して有効であることを示す全ビットがビット値“１”であることと同義である。従って、演算処理ＴＡＴは、演算器単体のＴＡＴと要素数の和になる。一方、図７のマスク付きベクトル演算処理では、ベクトルマスクが有効なベクトル要素のみに対して演算が実行される。そのため、短縮された演算処理ＴＡＴは、演算器単体のＴＡＴとベクトルマスクの有効要素数の和になる。ベクトルマスクにおいて有効なベクトル要素の数が少ないほど、本発明におけるマスク付きベクトル演算処理の演算処理ＴＡＴは短縮されることになる。
【００５０】
以上説明したように、本発明は、マスク付きベクトル演算の実行において、マスクレジスタ１４０に対するＬｅａｄｉｎｇ  ＺＥＲＯ回路１６０（ビット列の先頭から連続する０の数を出力する回路）と、ソース／ディスティネーションの各レジスタに対する読み出し／書き込みアドレスを計算する加算器１３０、１３２を持ち、Ｌｅａｄｉｎｇ  ＺＥＲＯ回路１６０の出力値を加算器１３０、１３２で累算して、ソース／ディスティネーションの各ベクトルレジスタ（ＶＲ＃０＿１００、ＶＲ＃１＿１０１、ＶＲ＃２＿１０２）に対する読み出し／書き込みアドレスを毎サイクル更新していく。それと共に、マスクレジスタ値（ベクトルマスク）は、Ｌｅａｄｉｎｇ  ＺＥＲＯ回路１６０の出力結果に応じて左シフト回路１７０により自らを左シフトすることで、毎サイクル更新されるようにしている。これによりマスクレジスタ値の有効ビットに該当する要素データが存在するソース／ディスティネーションの各レジスタに対する読み出し／書き込みアドレスを連続してアクセスできるようになっている。この結果、マスクレジスタ値のＬｅａｄｉｎｇ  ＺＥＲＯ回路１６０の出力結果がベクトル長と一致（マスクレジスタ値がＡｌｌ“０”データとなる）した時点でベクトル演算命令の実行終了となる。
【００５１】
すなわち、本発明では、以下に記載するような効果を奏する。第１の効果は、マスク付きベクトル演算処理において、マスクビット上で有効な要素データに対する演算のみを連続して実行することで、マスク付きベクトル演算処理のＴＡＴを短縮して性能向上を実現できることである。
【００５２】
第２の効果は、マスク付きベクトル演算処理において、マスクビット上で無効な要素データに対する演算を実行しないことで、不必要な電力消費を回避してマスク付きベクトル演算処理装置の低消費電力化を実現できることである。
【００５３】
（第２の実施の形態）
以下、本発明のマスク付きベクトル演算処理装置の第２の実施の形態に関して、添付図面を参照して説明する。
【００５４】
第２の実施の形態におけるマスク付きベクトル演算処理装置１は、図４で示したマスク付きベクトル演算処理装置１に、更に、後述する新たな構成要素（演算器Ｂｕｓｙ時間通知部２）を付加している点で第１の実施の形態と異なる。
【００５５】
図８、図９は、従来のマスク付きベクトル演算処理装置と、本発明のマスク付きベクトル演算処理装置１のそれぞれの演算ＴＡＴを示す。図８は、従来のマスク付きベクトル演算処理装置において、１度マスク付きベクトル演算命令を実行した後に、続けて同じベクトル演算器を使用したベクトル演算命令を実行する場合のＴＡＴを示している。図９は、本発明におけるマスク付きベクトル演算処理装置１において、１度マスク付きベクトル演算命令を実行した後に、続けて同じベクトル演算器を使用したベクトル演算命令を実行する場合のＴＡＴを示している。図８において、従来のマスク付きベクトル演算処理装置では、ベクトルマスクの値によらず演算器単体のＴＡＴと要素数の和が実行に必要な演算ＴＡＴであることが判っている。この期間は、該当するベクトル演算器が演算命令実行を処理している期間である。そのため、同一のベクトル演算器を使用する他の演算命令を処理することはできない。従って、この演算ＴＡＴをベクトル演算器のＢｕｓｙ時間と呼ぶ。このベクトル演算器のＢｕｓｙ時間が予め判っていれば、続けて同じベクトル演算器を使用したベクトル演算命令を実行する際に、いつ実行を開始すればよいかを容易に判定することが可能である。従来のマスク付きベクトル演算処理装置における、ベクトル演算命令の発行制御部では、先行するマスク付きベクトル演算命令を実行開始した時点でベクトル演算器のＢｕｓｙ時間が判明する。そのため、後続のベクトル演算命令を、間を置かずに連続して実行する制御が容易に実現可能である。一方、図９の本発明のマスク付きベクトル演算処理装置では、ベクトル演算器のＢｕｓｙ時間は先行するマスク付きベクトル演算命令を実行して、ベクトルマスクの最後の有効なベクトル要素の演算処理が完了しないと判明しない。そのため、後続のベクトル演算命令を、間を置かずに連続して実行する制御は非常に困難である。
【００５６】
そこで、本実施の形態では、第１の実施の形態で説明したマスク付きベクトル演算処理装置１（図４）に新たな構成要素を付加する。それにより、新たな構成要素は、本発明におけるマスク付きベクトル演算処理装置のベクトル演算Ｂｕｓｙ時間を予め判定可能な機能を有する。そのような新たな構成要素を追加することで、ベクトル演算命令制御部（図示されず）におけるベクトル演算命令の発行制御部（図示されず）において、後続のベクトル演算命令を、間を置かずに連続して実行する制御を容易に実現可能にする。
【００５７】
図４は、本発明のマスク付きベクトル演算処理装置の第２の実施の形態の構成を示すブロック図であるが、第１の実施の形態と同様であるのでその説明を省略する。
【００５８】
図１０は、マスク付きベクトル演算処理装置におけるベクトルマスクレジスタに関わる構成の一例を示すブロック図である。ここで、ベクトルマスクレジスタに関わる構成は、演算器Ｂｕｓｙ時間通知部２である。すなわち、マスク付きベクトル演算処理装置１は、図４の構成に加えて、図１０に示す演算器Ｂｕｓｙ時間通知部２を具備する。
【００５９】
演算器Ｂｕｓｙ時間通知部２は、第１選択回路５２０、第２選択回路５３０、一時退避用レジスタファイル５００、ベクトルマスク演算器５１１、ベクトルマスク生成演算器５１０、第３選択回路５５０、バッファ５８０、第４選択回路５６０、ポピュレーションカウンタ５７０（以下、ＰＯＰカウンタと称す）、及び第５選択回路５９０を具備する。ただし、本図において、ベクトルマスクレジスタ５４０は、図４におけるベクトルマスクレジスタ１４０と同一である。
【００６０】
第３選択回路５５０は、ベクトルマスクレジスタ５４０の出力、第１選択回路５２０の出力である新たに生成されたベクトルマスク、及び図１０の外部に存在するスカラレジスタから転送されたビット列、のいずれかを選択して、複数のエントリからなるベクトルマスクとして一時退避用レジスタファイル５００へ出力する。一時退避用レジスタファイル５００は、複数のエントリからなるベクトルマスクを一時退避する。そして、ベクトルマスク演算器５１１及び第２選択回路５３０へ出力する。ベクトルマスク生成演算器５１０は、ベクトルレジスタ（ＶＲ＃０＿１００、ＶＲ＃１＿１０１、ＶＲ＃２＿１０２）の値に応じて条件判定処理によりベクトルマスクを生成する。そして、第１選択回路５２０へ出力する。ベクトルマスク演算器５１１は、一時退避用レジスタファイル（ベクトルマスク）の任意の２つのエントリに対する論理演算を行い、新たなベクトルマスクを生成する。そして、第１選択回路５２０へ出力する。第１選択回路５２０は、ベクトルマスク演算器５１１の出力及びベクトルマスク生成演算器５１０の出力のいずれか一方を新たに生成されたベクトルマスクとして選択する。そして、第２選択回路５３０へ出力する。第２選択回路５３０は、第１選択回路５２０の出力及びベクトルマスクレジスタ５４０の出力のいずれか一方を選択する。そして、ベクトルマスクレジスタ５４０へ出力する。
【００６１】
すなわち、ベクトルマスクレジスタ５４０は、一時退避用レジスタファイル５００に格納されたベクトルマスク、ベクトルマスク演算器５１１が新たに生成したベクトルマスク、及びベクトルマスク生成演算器５１０が新たに生成したベクトルマスクのうちの一つが選択されて設定される。
【００６２】
一時退避用レジスタファイル５００は、好適には１６以上のエントリ数（ワード数）を有することが望ましい。また、一時退避用レジスタファイル５００の出力は、図１０の外部に存在するスカラレジスタに対して転送されることもある。
【００６３】
以上が、ベクトルマスクレジスタ５４０周辺の一般的な構成例である。しかし、本発明では、この他に新たな構成要素として、バッファ５８０、第４選択回路５６０、ＰＯＰカウンタ５７０、及び第５選択回路５９０を更に具備している。
【００６４】
第４選択回路５６０は、第２選択回路５３０と並列し、第１選択回路５２０の出力及びベクトルマスクレジスタ５４０の出力のいずれか一方を選択する。そして、ＰＯＰカウンタ５７０へ出力する。ＰＯＰカウンタ５７０は、第４選択回路５６０の出力を受けて、そのビット列に含まれるビット値“１”のビット数をカウントする。そして、バッファ５８０及び第５選択回路５９０へ出力する。バッファ５８０は、一時退避用レジスタファイル５００の各エントリ毎に対応して情報を格納する。ＰＯＰカウンタ５７０の出力結果を格納する。第５選択回路５９０は、バッファ５８０の出力及びＰＯＰカウンタ５７０の出力のいずれか一方を選択する。そして、ベクトル演算命令制御部へ出力する。
【００６５】
本実施の形態では、新たに追加された構成要素（バッファ５８０、第４選択回路５６０、ＰＯＰカウンタ５７０、及び第５選択回路５９０）により、ベクトルマスク演算器５１１やベクトルマスク生成演算器５１０によって、新たなベクトルマスクが生成されて一時退避用レジスタファイル５００の特定のエントリに格納される場合、ＰＯＰカウンタ５７０で生成されたベクトルマスクのビット値“１”の数、すなわち有効要素数をカウントして、バッファ５８０の同一エントリに格納される。そして、前述した新たに生成されたベクトルマスクがそのままベクトルマスクレジスタ５４０に設定される場合、ＰＯＰカウンタ５７０の出力結果を、そのまま、第５選択回路５９０介して、図１０の外部に存在するベクトル演算命令のベクトル演算命令制御部に通知する。又は、一時退避用レジスタファイル５００から読み出された値がベクトルマスクレジスタ５４０に設定される場合、バッファ５８０の該当エントリにＰＯＰカウント値が存在する場合、その値を、第５選択回路５９０介して、図１０の外部に存在するベクトル演算命令のベクトル演算命令制御部に通知する。あるいは、一時退避用レジスタファイル５００から読み出された値がベクトルマスクレジスタ５４０に設定される場合、バッファ５８０の該当エントリにＰＯＰカウント値が存在しない場合、第４の選択回路５６０により、一時退避用レジスタファイル５００からベクトルマスクレジスタ５４０に転送されるベクトルマスクをＰＯＰカウンタ５７０に入力し、その出力結果を、第５選択回路５９０介して、図１０の外部に存在するベクトル演算命令のベクトル演算命令制御部に通知する。これにより、ベクトル演算命令制御部は、ベクトルマスクレジスタ５４０を使用したマスク付きベクトル演算に対するベクトル演算器のＢｕｓｙ時間を、「実行開始時」に判別することが可能になる。それいにより、同一ベクトル演算器を使用する後続のベクトル演算命令が存在する場合に、間を置かずに連続して実行する制御が実現可能になる。
【００６６】
なお、図４におけるマスク付きベクトル演算処理装置１の本体側の動作については、第１の実施の形態と同様であるのでその説明を省略する。
【００６７】
本実施の形態においても、第１の実施の形態と同様の効果を得ることができる。加えて、後続のベクトル演算命令を、間を置かずに連続して実行する制御が可能となる。
【００６８】
上記第１、２の実施の形態では、単一のベクトル演算処理パイプライン構成の場合について説明している。しかし、本発明は、ベクトル要素を複数のベクトル演算処理パイプラインでインタリーブして並列実行処理を行うマルチベクトルパイプラインの場合についても同様に実行可能である。以下、それについて説明する。
【００６９】
図１１は、本発明のマスク付きベクトル演算処理をマルチベクトルパイプライン構成としたときの動作を示す。ここではベクトルパイプラインを４並列とした場合を例示している。マルチベクトルパイプライン構成では、ベクトル要素がインタリーブされて各ベクトルパイプラインに割り当てられるため、ベクトルマスクの有効要素のビット並びにより、各ベクトルパイプライン毎にベクトル演算器のＢｕｓｙ時間がばらつくことになる。従って、各ベクトルパイプライン毎に、図１０に示した演算器Ｂｕｓｙ時間通知部２を設けただけの場合、後続のベクトル演算命令が、ベクトルパイプライン毎にバラバラに実行開始されることになる。マルチベクトルパイプライン構成では、１つのベクトル演算命令の実行開始タイミングを、ベクトルパイプライン毎に独立して制御することは非常に困難である。したがって、このような場合、各ベクトルパイプライン毎の演算器Ｂｕｓｙ時間を集めてその最大値を求め、その値を該当するマスク付きベクトル演算命令に対する演算器Ｂｕｓｙ時間とする機能を有する第２演算器Ｂｕｓｙ時間通知部を追加で備えればよい。ベクトル演算命令制御部は、第２演算器Ｂｕｓｙ時間通知部の出力に基づいて、後続のベクトル演算命令の実行開始タイミングを制御するようにすることで、本発明をマルチベクトルパイプライン構成にも適用することができる。
【００７０】
本発明では、マスク付きベクトル演算の実行に関して、演算実行ＴＡＴの短縮による性能向上と、無効要素データに対する演算実行処理を回避することで低消費電力化を実現することができる。
【図面の簡単な説明】
【００７１】
【図１】図１は、マスク付きベクトル演算命令を実行する構成を示すブロック図である。
【図２】図２は、通常ベクトル演算処理の演算ＴＡＴを示す。
【図３】図３は、マスク付きベクトル演算処理の演算ＴＡＴを示す。
【図４】図４は、本発明のマスク付きベクトル演算処理装置の第１の実施の形態の構成の一例を示すブロック図である。
【図５】図５は、本発明のマスク付きベクトル演算処理装置の第１の実施の形態の動作を示すタイミングチャートである。
【図６】図６は、本発明のマスク付きベクトル演算装置を用いた通常ベクトル演算処理の演算ＴＡＴを示す。
【図７】図７は、本発明のマスク付きベクトル演算装置を用いたマスク付きベクトル演算処理の演算ＴＡＴを示す。
【図８】図８は、従来のマスク付きベクトル演算処理装置の演算ＴＡＴを示す。
【図９】図９は、本発明のマスク付きベクトル演算処理装置の演算ＴＡＴを示す。
【図１０】図１０は、マスク付きベクトル演算処理装置におけるベクトルマスクレジスタに関わる構成の一例を示すブロック図である。
【図１１】図１１は、本発明のマスク付きベクトル演算処理をマルチベクトルパイプライン構成としたときの動作を示す。
【符号の説明】
【００７２】
１    マスク付きベクトル演算処理装置
２    演算器Ｂｕｓｙ時間通知部
１１０    ベクトル演算器
１００    ベクトルレジスタＶＲ＃０
１０１    ベクトルレジスタＶＲ＃１
１０２    ベクトルレジスタＶＲ＃２
１２０    アドレスレジスタ
１３０    アドレス加算器
１２２    アドレスレジスタ
１３２    書き込みアドレス加算器
１４０    ベクトルマスクレジスタ
１５０    選択回路
１６０    Ｌｅａｄｉｎｇ  Ｚｅｒｏ回路（ＬＤＺ回路）
１７０    左シフト回路
１８０    一時退避レジスタ
１９０    比較器
５２０    第１選択回路
５００    一時退避用レジスタファイル
５１０    ベクトルマスク生成演算器
５１１    ベクトルマスク演算器
５３０    第２選択回路
５４０    ベクトルマスクレジスタ
５５０    第３選択回路
５６０    第４選択回路
５７０    ポピュレーションカウンタ（ＰＯＰカウンタ）
５８０    バッファ
５９０    第５選択回路
７１０    ベクトル演算器
７００    ベクトルレジスタＶＲ＃０
７０１    ベクトルレジスタＶＲ＃１
７０２    ベクトルレジスタＶＲ＃２
７１０    ベクトル演算器
７２０    アドレスレジスタ
７２２    アドレスレジスタ
７３０    インクリメンタ
７３２    インクリメンタ
７４０    ベクトルマスクレジスタ
７６０    パラレル−シリアル変換器
【図１】
2007334563.tif 000003
【図２】
2007334563.tif 000004
【図３】
2007334563.tif 000005
【図４】
2007334563.tif 000006
【図５】
2007334563.tif 000007
【図６】
2007334563.tif 000008
【図７】
2007334563.tif 000009
【図８】
2007334563.tif 000010
【図９】
2007334563.tif 000011
【図１０】
2007334563.tif 000012
【図１１】
2007334563.tif 000013