(57)【特許請求の範囲】
【請求項１】
第１のオペランドデータと第２のオペランドデータを入力する入力回路と，要求エレメント信号に基づいていずれかのエレメントのオペランドデータを選択するエレメントデータセレクタとを，それぞれ有する第１〜第Ｎ（Ｎは３以上の複数）のエレメント回路と，
前記各エレメントの入力回路から各エレメントの前記エレメントデータセレクタに前記各エレメントが入力するオペランドデータを供給するデータバスとを有し，
前記第１〜第Ｎのエレメント回路内の各エレメントデータセレクタは，制御信号が第１の状態のとき，前記第２のオペランドデータに含まれる前記要求エレメント信号に基づいて，いずれかのエレメントの前記第１のオペランドデータをそれぞれ選択して出力し，
前記第１〜第Ｎのエレメント回路のそれぞれは，前記制御信号が第２の状態のとき，自己のエレメント番号とシフト量に基づいて前記第１または第２のオペランドデータを選択して前記データバスに出力するオペランドセレクタと，前記自己のエレメント番号と前記シフト量とに基づいて前記要求エレメント信号を生成するエレメント連結左シフト用加算器とをそれぞれ有する，演算回路。
【請求項２】
さらに，前記制御信号が第３の状態のとき，前記第１〜第Ｎのエレメント回路が入力する第２のオペランドデータに含まれる有効ビットを加算する有効ビット加算器を有し，
前記第１〜第Ｎのエレメント回路それぞれは，前記制御信号が第３の状態のとき，前記有効ビット加算器が出力する加算値を，前記エレメントデータセレクタの出力に代えて，出力する加算値セレクタを有する，請求項１に記載の演算回路。
【請求項３】
前記第１〜第Ｎのエレメント回路それぞれは，前記エレメントデータセレクタの出力または全てゼロのデータのいずれかを選択するマスクセレクタを有し，
さらに，前記制御信号が第４の状態のとき，前記第１〜第Ｎのエレメント回路が入力する第２のオペランドデータに含まれる有効ビットに基づいて，マスク信号とエレメントデータ選択信号を有するコンプレスデコード信号を前記第１〜第Ｎのエレメント回路別に生成するコンプレスデコーダを有し，
前記第１〜第Ｎのエレメント回路それぞれは，前記制御信号が第４の状態のとき，前記エレメントデータ選択信号を前記要求エレメント信号に代えて選択する第１のコンプレスセレクタと，前記マスク信号を前記マスクセレクタに出力して前記全てゼロのデータを選択させる第２のコンプレスセレクタとを有する，請求項１または２に記載の演算回路。
【請求項４】
第１のオペランドデータと第２のオペランドデータを入力する入力回路と，要求エレメント信号に基づいていずれかのエレメントのオペランドデータを選択するエレメントデータセレクタとを，それぞれ有する第１〜第Ｎ（Ｎは３以上の複数）のエレメント回路と，
前記各エレメントの入力回路から各エレメントの前記エレメントデータセレクタに前記各エレメントが入力するオペランドデータを供給するデータバスとを有し，
前記第１〜第Ｎのエレメント回路内の各エレメントデータセレクタは，制御信号が第１の状態のとき，前記第２のオペランドデータに含まれる前記要求エレメント信号に基づいて，いずれかのエレメントの前記第１のオペランドデータを選択して出力し，
さらに，前記制御信号が第３の状態のとき，前記第１〜第Ｎのエレメント回路が入力する第２のオペランドデータに含まれる有効ビットを加算する有効ビット加算器を有し，
前記第１〜第Ｎのエレメント回路のそれぞれは，前記制御信号が第３の状態のとき，前記有効ビット加算器が出力する加算値を，前記エレメントデータセレクタの出力に代えて，出力する加算値セレクタを有する，演算回路。
【請求項５】
第１のオペランドデータと第２のオペランドデータを入力する入力回路と，要求エレメント信号に基づいていずれかのエレメントのオペランドデータを選択するエレメントデータセレクタと，前記エレメントデータセレクタの出力または全てゼロのデータのいずれかを選択するマスクセレクタとを，それぞれ有する第１〜第Ｎ（Ｎは３以上の複数）のエレメント回路と，
前記各エレメントの入力回路から各エレメントの前記エレメントデータセレクタに前記各エレメントが入力するオペランドデータを供給するデータバスとを有し，
前記第１〜第Ｎのエレメント回路内の各エレメントデータセレクタは，制御信号が第１の状態のとき，前記第２のオペランドデータに含まれる前記要求エレメント信号に基づいて，いずれかのエレメントの前記第１のオペランドデータを選択して出力し，前記各マスクセレクタは，前記制御信号が第１の状態のとき，前記エレメントデータセレクタの出力を選択し，
さらに，前記制御信号が第４の状態のとき，前記第１〜第Ｎのエレメント回路が入力する第２のオペランドデータに含まれる有効ビットに基づいて，マスク信号とエレメントデータ選択信号を有するコンプレス信号を生成するコンプレスデコーダを有し，
前記第１〜第Ｎのエレメント回路のそれぞれは，前記制御信号が第４の状態のとき，前記エレメントデータ選択信号を前記要求エレメント信号に代えて選択する第１のコンプレスセレクタと，前記マスク信号を前記マスクセレクタに出力して前記全てゼロのデータを選択させる第２のコンプレスセレクタとを有する，演算回路
【請求項６】
第１のオペランドデータを入力する第１のオペランドレジスタと，第２のオペランドデータを入力する第２のオペランドレジスタと，前記第１，第２のオペランドデータを入力して演算する演算器と，前記演算器が出力する演算結果を格納する結果レジスタとをそれぞれ有する第１〜第Ｎ（Ｎは３以上の整数）のＳＩＭＤ演算エレメントと，
前記第１のオペランドデータと前記第２のオペランドデータを入力する入力回路と，要求エレメント信号に基づいていずれかのエレメントのオペランドデータを選択するエレメントデータセレクタと，前記エレメントデータセレクタの出力または全てゼロのデータのいずれかを選択するマスクセレクタとを，それぞれ有する第１〜第Ｎのエレメント回路と，
前記各エレメントの入力回路から各エレメントの前記エレメントデータセレクタに前記各エレメントが入力するオペランドデータを供給するデータバスとを有し，
前記第１〜第Ｎのエレメント回路内の各エレメントデータセレクタは，前記第２のオペランドデータに含まれる前記要求エレメント信号に基づいて，いずれかのエレメントの前記第１のオペランドデータを選択し，前記各マスクセレクタは，前記選択する前記エレメントデータセレクタの出力または全てゼロのデータのいずれかを前記結果レジスタに出力する，演算回路。
【請求項７】
第１のオペランドデータを入力する第１のオペランドレジスタと，第２のオペランドデータを入力する第２のオペランドレジスタと，前記第１，第２のオペランドデータを入力して演算する演算器と，前記演算器が出力する演算結果を格納する結果レジスタとをそれぞれ有する第１〜第Ｎ（Ｎは３以上の整数）のＳＩＭＤ演算エレメントと，
前記第１のオペランドデータと前記第２のオペランドデータを入力する入力回路と，要求エレメント信号に基づいていずれかのエレメントのオペランドデータを選択するエレメントデータセレクタと，前記エレメントデータセレクタの出力または全てゼロのデータのいずれかを選択するマスクセレクタとを，それぞれ有する第１〜第Ｎのエレメント回路と，
前記各エレメントの入力回路から各エレメントの前記エレメントデータセレクタに前記各エレメントが入力するオペランドデータを供給するデータバスとを有する演算回路の制御方法において，
前記第１〜第Ｎのエレメント回路内の各エレメントデータセレクタは，前記第２のオペランドデータに含まれる前記要求エレメント信号に基づいて，いずれかのエレメントの前記第１のオペランドデータを選択し，
前記各マスクセレクタは，前記選択する前記エレメントデータセレクタの出力または全てゼロのデータのいずれかを前記結果レジスタに出力する，演算回路の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，演算回路及び演算回路の制御方法に関する。
【背景技術】
【０００２】
高速な演算処理を可能にするプロセッサの開発が活発に行われている。高性能計算を行う情報処理装置に搭載されるプロセッサは，演算処理を高速化するための様々な技術を採用している。複数の処理を並列に行うことで演算処理を高速化する技術として，複数のデータに対して１命令で同時に同じ演算処理を並列に実行するＳＩＭＤ（Single Instruction Multiple Data)処理方式がある。
【０００３】
ＳＩＭＤプロセッサは，複数のＳＩＭＤ演算要素（ＳＩＭＤ演算エレメント）を有し，複数のデータに対して１つの命令を並列に実行する。特に，近年のプロセッサは，より高速化のためにＳＩＭＤ演算エレメントの数を増やす傾向にある。以下，エレメントと要素は同じ意味である。
【０００４】
ＳＩＭＤプロセッサは，１つの命令をデコードし，命令の処理対象のデータを複数のＳＩＭＤ演算エレメントに入力して並列に演算処理するという単純な処理の場合は，単一命令のデコードと複数データの並列演算処理を行うことで，高速演算処理を達成することができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００２−２２９９６２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら，各ＳＩＭＤ演算エレメントで生成した演算結果を他のＳＩＭＤ演算エレメントで再度演算処理するなど，上記の単純な処理ではない場合は，ＳＩＭＤ演算エレメント間でデータの交換や分配を行う必要があり，演算効率の低下を招く場合がある。したがって，複数のＳＩＭＤ演算エレメント間でのデータ交換などを行うエレメント間（要素間）演算回路が求められる。
【０００７】
しかしながら，ＳＩＭＤプロセッサのＳＩＭＤ幅を増やすことに伴い，演算処理装置の集積回路基板上に４個または８個，１６個など多数のＳＩＭＤ演算エレメントが搭載される。そのため，上記の要素間演算回路は，集積回路基板上の広い範囲にわたりデータ配線を設けることが必要になり，その回路規模が増大する。
【０００８】
そこで，実施の形態の第１の側面の目的は，回路規模を抑制して種々の要素間演算を行う演算回路及び演算回路の制御方法を提供することにある。
【課題を解決するための手段】
【０００９】
実施の形態の第１の側面は，第１のオペランドデータと第２のオペランドデータを入力する入力回路と，要求エレメント信号に基づいていずれかのエレメントのオペランドデータを選択するエレメントデータセレクタとを，それぞれ有する第１〜第Ｎ（Ｎは２以上の複数）のエレメント回路と，
前記各エレメントの入力回路から各エレメントの前記エレメントデータセレクタに前記各エレメントが入力するオペランドデータを供給するデータバスとを有し，
前記第１〜第Ｎのエレメント回路内の各エレメントデータセレクタは，制御信号が第１の状態のとき，前記第２のオペランドデータに含まれる前記要求エレメント信号に基づいて，いずれかのエレメントの前記第１のオペランドデータをそれぞれ選択して出力し，
前記第１〜第Ｎのエレメント回路のそれぞれは，前記制御信号が第２の状態のとき，自己のエレメント番号とシフト量に基づいて前記第１または第２のオペランドデータを選択して前記データバスに出力するオペランドセレクタと，前記自己のエレメント番号と前記シフト量とに基づいて前記要求エレメント信号を生成するエレメント連結左シフト用加算器とをそれぞれ有する，演算回路である。
【発明の効果】
【００１０】
第１の側面によれば，回路規模を抑制して種々の要素間演算を行うことができる。
【図面の簡単な説明】
【００１１】
【図１】本実施の形態における演算回路とＳＩＭＤ演算器との一例を示す図である。
【図２】本実施の形態におけるフルエレメントパーミュテーション（Full Element Permutation：完全要素置換）の演算回路の一例を示す図である。
【図３】本実施の形態におけるエレメントコンカテネートシフトレフト（Element Concatenate Sift Left：要素結合左シフト）の演算回路の一例を示す図である。
【図４】本実施の形態におけるエレメントサムマスク（Element Sum Mask：要素加算マスク）の演算回路の一例を示す図である。
【図５】本実施の形態におけるエレメントコンプレス（Element Compress：エレメント圧縮）の演算回路の一例を示す図である。
【図６】完全要素置換を行う演算回路ＡＬ１０−１の左半分を示す図である。
【図７】完全要素置換を行う演算回路ＡＬ１０−１の右半分を示す図である。
【図８】要素連結左シフトを行う演算回路ＡＬ１０−２の左半分を示す図である。
【図９】要素連結左シフトを行う演算回路ＡＬ１０−２の右半分を示す図である。
【図１０】加算器CSL-Adderの動作を説明する論理値表である。
【図１１】要素加算マスクを行う演算回路ＡＬ１０−３の左半分を示す図である。
【図１２】要素加算マスクを行う演算回路ＡＬ１０−３の右半分を示す図である。
【図１３】要素圧縮を行う演算回路ＡＬ１０−４の左半分を示す図である。
【図１４】要素圧縮を行う演算回路ＡＬ１０−４の右半分を示す図である。
【図１５】コンプレスデコーダCompressの論理値表を示す図である。
【図１６】本実施の形態における全機能を有する演算回路の左側を示す図である。
【図１７】本実施の形態における全機能を有する演算回路の右側を示す図である。
【発明を実施するための形態】
【００１２】
［本実施の形態の概略］
図１は，本実施の形態における演算回路とＳＩＭＤ演算器とを示す図である。図１には，プロセッサに設けられる４ＳＩＭＤ演算器が示されている。４ＳＩＭＤ演算器は，演算器ＡＬ１をそれぞれ有する４つのＳＩＭＤ演算エレメントＥ＿＃０，Ｅ＿＃１，Ｅ＿＃２，Ｅ＿＃３を有する。ＳＩＭＤ幅を４（４ＳＩＭＤ）にするのは一例であり，少なくとも２つのＳＩＭＤ演算エレメントを有する。そして，例えば８つのＳＩＭＤ演算エレメントを有する８ＳＩＭＤであってもよく，さらに１６ＳＩＭＤであってもよい。
【００１３】
各ＳＩＭＤ演算エレメントＥ＿＃０〜Ｅ＿＃３は，第１，第２のオペランドデータを保持する第１，第２のオペランドレジスタＯＰ１，ＯＰ２と，第１，第２のオペランドデータを入力して演算する演算器ＡＬ１と，演算器ＡＬ１の演算結果を保持する結果レジスタＲ３と，結果レジスタＲ３が保持するデータを保持するリネーミングレジスタＲ２と，リネーミングレジスタＲ２が保持するデータを保持するＳＩＭＤレジスタＲ１とを有する。
【００１４】
そして，各ＳＩＭＤ演算エレメントは，更に，第１，第２のオペランドレジスタＯＰ１，ＯＰ２の前段に結果レジスタＲ３とリネーミングレジスタＲ２とＳＩＭＤレジスタＲ１のいずれかを選択する２つのセレクタＳＡ，ＳＢと，複数の演算器ＡＬ１の出力を選択するセレクタＳＣとを有する。結果レジスタＲ３からのデータフォワーディングは他の箇所へも考えられるが、本件ではそれについて言及しない。
【００１５】
第１，第２のオペランドレジスタＯＰ１，ＯＰ２のオペランドデータは，例えば６４ビットである。同様に，ＳＩＭＤレジスタＲ１，リネーミングレジスタＲ２，結果レジスタＲ３もそれぞれ６４ビット幅を有する。しかし，本実施の形態は６４ビットの幅には限定されない。
【００１６】
図示しないリザベーションステーションにエントリされたＳＩＭＤ命令は，複数のＳＩＭＤ演算エレメントに投入され，複数のＳＩＭＤエレメント内の演算器ＡＬ１が，複数組の第１，第２のオペランドデータを演算し，演算結果をそれぞれの結果レジスタＲ３に格納する。リネーミングレジスタＲ２は，演算器が複数の命令をアウトオブオーダで演算し，インオーダで出力するために一時的にデータを保持するレジスタである。
【００１７】
プロセッサは，４つのＳＩＭＤ演算エレメントＥ＿＃０〜Ｅ＿＃３に対して横断的に設けられたエレメント間演算回路ＡＬ１０を有する。この演算回路ＡＬ１０は，各ＳＩＭＤ演算エレメントＥ＿＃０〜Ｅ＿＃３内の第１，第２のオペランドレジスタＯＰ１，ＯＰ２内の第１，第２のオペランドデータを入力し，例えば，次のような演算を実行する。すなわち，（１）エレメント間データ置換（エレメントパーミュテーション），（２）エレメントのデータを連結して左シフトするエレメント連結左シフト（エレメントコンカテネートシフトレフト），（３）エレメントのデータを加算するエレメント加算マスク（エレメントサムマスク），（４）エレメントのデータを圧縮して並べるエレメントデータ圧縮（エレメントコンプレス）などを行う。演算回路ＡＬ１０の演算結果は，ＳＩＭＤ演算エレメント内の結果レジスタＲ３に出力される。
【００１８】
エレメント間演算回路ＡＬ１０は，上記のとおり，４つのＳＩＭＤ演算エレメント間でデータの並べ替え，任意のエレメントのデータのマスク，任意のエレメントのデータを全エレメントに配布するブロードキャストなどの基本的な演算処理を行うことができる。それに加えて，エレメント間演算回路ＡＬ１０は，各エレメントのデータに対する加算演算や特殊な並べ替え処理なども行うことができる。よって，エレメント間演算回路ＡＬ１０は，２以上のＳＩＭＤ演算エレメントを有するＳＩＭＤ演算器による高速並列処理のメリットを最大限に生かすことができる。
【００１９】
図２は，本実施の形態におけるフルエレメントパーミュテーション（Full Element Permutation：完全要素置換）の演算回路の一例を示す図である。この演算回路ＡＬ１０−１は，４つのＳＩＭＤ演算エレメントＥ＿＃０〜Ｅ＿＃３の第１のオペランドレジスタＯＰ１に格納されたデータのいずれかを選択し，４つのＳＩＭＤ演算エレメントの結果レジスタＲ３のいずれかに出力するセレクタＳ１を有する。このセレクタＳ１は，例えば，４つのＳＩＭＤ演算エレメントそれぞれに対応して設けられ，選択したデータをそれぞれの結果レジスタＲ３に出力する。セレクタＳ１の選択信号は，例えば，第２のオペランドレジスタ内の第２のオペランドデータに含めることができる。また，４つのＳＩＭＤ演算エレメントの第１のオペランドレジスタＯＰ１とセレクタＳ１の入力との間にデータ転送のためのデータバスが必要になる。
【００２０】
この演算回路ＡＬ１０−１は，セレクタＳ１を設けることで，ＳＩＭＤ演算エレメント間のデータの並べ替えや，任意のＳＩＭＤ演算エレメントのデータを全ＳＩＭＤ演算エレメントに配布するブロードキャストを行う。
【００２１】
さらに，後述するとおり，セレクタＳ１の出力または全て０のデータのいずれかを選択するマスクセレクタを設けることで，任意のＳＩＭＤ演算エレメントのデータを全て０のデータにマスクすることもできる。
【００２２】
図３は，本実施の形態におけるエレメントコンカテネートシフトレフト（Element Concatenate Sift Left：要素結合左シフト）の演算回路の一例を示す図である。この演算回路ＡＬ１０−２は，各ＳＩＭＤ演算エレメントのそれぞれ２つのオペランドデータを結合したエレメント数×２の数のデータを，任意のエレメント数だけ左シフトし，上位側から要素番号順に各ＳＩＭＤ演算エレメントの結果レジスタＲ３に格納する。
【００２３】
演算回路ＡＬ１０−２は，ＳＩＭＤ演算エレメントの第１のオペランドレジスタＯＰ１のデータと第２のオペランドレジスタＯＰ２のデータとを結合した状態で，任意のシフト量左にシフトする左シフト回路ＳＬを有する。左シフト回路ＳＬの出力は，４つのＳＩＭＤ演算エレメントの結果レジスタＲ３に順番に格納される。また，図示しないシフト量のデータが，左シフト回路ＳＬに供給される。
【００２４】
例えばシフト量が２の場合，演算回路ＡＬ１０−２は，エレメント＃２の第１のオペランドデータ，エレメント＃３の第１のオペランドデータ，エレメント＃０の第２のオペランドデータ，エレメント＃１の第２のオペランドデータを，エレメント＃０−＃３の結果レジスタＲ３にそれぞれ転送する。
【００２５】
演算回路ＡＬ１０−２は，上記の左シフト回路ＳＬと，ＳＩＭＤ演算エレメントＥ＿＃０〜Ｅ＿＃３の第１，第２のオペランドレジスタから左シフト回路ＳＬにデータを供給するデータバスが必要になる。特に，データバスは，４つのＳＩＭＤ演算エレメントが集積回路基板上の広い領域に配置されているため，回路の実装コストが大きくなる。本実施の形態では，完全要素置換演算回路ＡＬ１０−１にわずかな回路を追加することで，要素結合左シフト演算回路ＡＬ１０−２を実現する。
【００２６】
図４は，本実施の形態におけるエレメントサムマスク（Element Sum Mask：要素加算マスク）の演算回路の一例を示す図である。この演算回路ＡＬ１０−３は，各エレメントがそれぞれ有効か否かを示す１ビットの有効データをカウントし，カウント値である有効なエレメントの数を全てのＳＩＭＤ演算エレメントの結果レジスタＲ３に格納する。または，有効なエレメントの数を有効なエレメントの結果レジスタＲ３に格納するようにしてもよい。
【００２７】
演算回路ＡＬ１０−３は，例えば，各エレメントの第２のオペランドレジスタＯＰ２の第２のオペランドデータ内の１ビット，例えば最上位ビットの[63]を有効ビットとして使用する。演算回路ＡＬ１０−３は，各エレメントの有効ビットを加算する有効ビット加算器ＡＤ−１を有し，有効ビット加算器ＡＤ−１の加算値，有効エレメント数，が全エレメントのそれぞれの結果レジスタＲ３に格納される。
【００２８】
また，演算回路ＡＬ１０−３が，無効なエレメントの結果レジスタＲ３には全て０のデータでマスクする機能を有する場合は，有効ビット加算器ＡＤ−１のカウント値は，有効エレメントの結果レジスタにだけ格納され，無効エレメントの結果レジスタには全て０のデータが格納される。この場合は，全要素データ置換演算回路ＡＬ１０−１のマスク回路を利用する。
【００２９】
図５は，本実施の形態におけるエレメントコンプレス（Element Compress：エレメント圧縮）の演算回路の一例を示す図である。この演算回路ＡＬ１０−４は，各ＳＩＭＤ演算エレメントのオペランドデータとそのオペランドデータを使用するいか否かの制御信号Ｃｔｒｌ＃０−＃３を入力し，制御信号が有効を示すエレメントのオペランドデータを結合し，左側のエレメント＃０からエレメント番号順に，つまり左詰めで，それぞれの結果レジスタに格納する。
【００３０】
図５の例では，制御信号Ｃｔｒｌ＃０，＃３が有効，Ｃｔｒｌ＃１，＃２が無効であり，エレメント＃０，＃３のオペランドデータが，エレメント＃０，＃１の結果レジスタＲ３に格納され，エレメント＃２，＃３の結果レジスタＲ３には全て０のデータが格納されている。
【００３１】
演算回路ＡＬ１０−４は，制御信号が有効であるエレメントのデータを結合して必要な左シフトを行う回路１０と，無効なエレメントの結果レジスタＲ３に全て０のデータを格納するマスク回路１２を有する。本実施の形態によれば，演算回路ＡＬ１０−４は，全要素データ置換演算回路ＡＬ１０−１のエレメントデータセレクタＳ１とマスクセレクタ（図示せず）を利用して構成される。
【００３２】
［本実施の形態の演算回路］
次に，本実施の形態における４つの演算回路の詳細な構成例について説明する。さらに，４つの演算回路を統合した構成例についても説明する。
【００３３】
［完全要素置換演算回路ＡＬ１０−１］
図６は，完全要素置換を行う演算回路ＡＬ１０−１の左半分を示す図である。図７は，完全要素置換を行う演算回路ＡＬ１０−１の右半分を示す図である。図１で説明したとおり，演算回路ＡＬ１０−１は，４つのＳＩＭＤ演算エレメントＥ＿＃０〜Ｅ＿＃３に対して横断的に重ねるように設けられる。そして，演算回路ＡＬ１０−１は，図２で概略説明した機能を有する。
【００３４】
演算回路ＡＬ１０−１は，４つのＳＩＭＤ演算エレメントに対応する４つのエレメント回路element#0〜element#3を有する。そして，各エレメント回路は，Ｘ１〜Ｘ６及びＵステージのパイプライン構造を有し，Ｘ２〜Ｘ６ステージにはそれぞれレジスタが設けられ，Ｕステージは結果レジスタＲ３に対応する。Ｘ２〜Ｘ６ステージのレジスタをそれぞれＸ２レジスタＸ２−Ｒ〜Ｘ６レジスタＸ６−Ｒと称する。図６の左側の回路と図７の右側の回路はエレメント番号を除いて左右対称である。
【００３５】
各エレメント回路element#0〜element#3は，対応するＳＩＭＤ演算エレメント内の第１，第２のオペランドレジスタ内のオペランドデータop1[63:0], op2[63,1:0]をＸ１サイクルで読み出す。そして，各エレメント回路は，第１のオペランドデータop1[63:0]と，第２のオペランドデータop2[63:0]の最上位ビットop2[63]と最下位２ビットop2[1:0]とを，Ｘ２，Ｘ３サイクルでＸ２レジスタＸ２−Ｒ，Ｘ３レジスタＸ３−Ｒを介して，データ交換を行うセレクタ部１００に転送する。第１のオペランドデータop1[63:0]に対するＸ３レジスタＸ３−Ｒの出力は，データdata[63:0]に，第２のオペランドデータop2[63:0]の最上位ビットop2[63]と最下位２ビットop2[1:0]に対する出力は，マスク信号mask，要求エレメント信号want_el[1:0]に，それぞれ対応する。
【００３６】
そして，各エレメント回路は，Ｘ４サイクルで，データdata[63:0]とマスク信号mask，要求エレメント信号want_el[1:0]を，Ｘ４レジスタＸ４−Ｒに格納し，エレメントデータセレクタＳ１と，マスクセレクタＳ２に供給される。各エレメント回路に共通に，全エレメントのデータdata[63:0]を全エレメント回路のエレメントデータセレクタＳ１の入力に供給するデータバスＤＢを有する。そして，Ｘ４サイクルで，エレメントデータセレクタＳ１は，要求エレメント信号want_el[1:0]が要求するエレメントのデータを選択する。また，マスクセレクタＳ２は，マスク信号maskが０の場合は選択したデータdata[63:0]を選択し，マスク信号maskが１の場合は全て０のデータを選択し，Ｘ５レジスタＸ５−Ｒに出力する。
【００３７】
したがって，Ｘ５レジスタＸ５−Ｒに出力されるのは，マスク信号maskが０の場合は，要求エレメント信号want_el[1:0]に基づいてエレメントデータセレクタＳ１が選択したエレメントのデータdata[63:0]であり，マスク信号maskが１の場合は，マスクセレクタＳ２が選択した全て０のマスクデータになる。
【００３８】
そして，上記の選択したエレメントデータdata[63:0]またはマスクデータが，Ｘ５サイクルでＸ５レジスタＸ５−Ｒに格納される。これにより，セレクタ部１００が，選択したエレメントデータdata[63:0]または全て０のマスクデータを，各エレメント回路内のＸ６レジスタＸ６−Ｒに送出する。そして，送出されたデータは，Ｘ６サイクルでＸ６レジスタＸ６−Ｒに格納され，Ｕサイクルで結果レジスタＲ３に格納される。
【００３９】
上記のように，本実施の形態では，一例として，ＳＩＭＤ演算エレメント間で交換するデータは，第１のオペランドレジスタの第１のオペランドデータとして入力され，各種制御信号mask，want_el[1:0]は，第２のオペランドレジスタの第２のオペランドデータ内に含められて入力される。マスク機能が必要ない場合は，セレクタ部１００はマスクセレクタＳ２は設けなくても良い。
【００４０】
［要素連結左シフト演算回路ＡＬ１０−２］
図８は，要素連結左シフトを行う演算回路ＡＬ１０−２の左半分を示す図である。図９は，要素連結左シフトを行う演算回路ＡＬ１０−２の右半分を示す図である。演算回路ＡＬ１０−２は，図３で概略説明したエレメントのデータを連結して左シフトする機能を有する。そして，図８，図９の演算回路ＡＬ１０−２では，図６，図７の完全要素置換演算回路ＡＬ１０−１の構成に追加して，各エレメント回路element#0-#3が，制御コードctrl_codeと，シフト量データshc[1:0]と，自要素番号element#[1:0]とを入力し，自要素番号element#[1:0]からシフト量データshc[1:0]を減算及び加算する要素連結左シフト用加算器CSL_Adderと，スイッチSW1,SW2と，要求エレメントセレクタＳ４と，第１，第２のオペランドデータop1[63:0]，op2[63:0]のいずれかを選択するオペランドセレクタＳ３とを有する。
【００４１】
この演算回路ＡＬ１０−２は，制御コードctrl_codeが１の場合に，上記の追加した構成が有効に動作して要素連結左シフトを行う演算回路になり，制御コードが０の場合に，図６，７の完全要素置換演算回路になる。
【００４２】
要素連結左シフトを行う演算回路ＡＬ１０−２の動作について説明する。制御コードctrl_codeが１であり，要素連結左シフト動作信号ecsld_opが１になり，要求エレメントセレクタＳ４が加算器CSL_Adderの加算値sum[1:0]を選択して要求エレメント信号want_el[1:0]として出力する。また，スイッチSW1は，オペランドスイッチ信号op_switchを，オペランドセレクタＳ３のセレクト信号として出力する。このオペランドスイッチ信号op_switchは，加算器CSL-Adderが自要素番号element#[1:0]からシフト量データshc[1:0]を減算した時に発生するborrow値である。そして，スイッチSW2は０を出力し，マスク信号maskを０にして，マスクセレクタＳ２の選択を常にエレメントデータセレクタＳ１の出力に固定する。
【００４３】
図１０は，加算器CSL-Adderの動作を説明する論理値表である。図１０には，（Ａ）各エレメント回路において，自要素番号element#[1:0]とシフト量データshc[1:0]に対応して，どのエレメントの第１，第２のオペランドデータのいずれを配置すべきかを示す表と，（Ｂ）加算器CSL-Adderが，自要素番号element#[1:0]からシフト量データshc[1:0]を減算した時に発生するborrow値op_switchの表と，（３）自要素番号element#[1:0]とシフト量データshc[1:0]を加算した加算値sum[1:0]の表とを示す。
【００４４】
図１０（Ａ）に示すとおり，自要素番号が０のエレメント回路element#0は，セレクタＳ１により，シフト量shc[1:0]が０の場合は，エレメント０の第１のオペランドデータを選択して格納し，同様に，シフト量が１，２，３の場合はエレメント１，２，３の第１のオペランドデータを選択して格納する。そして，エレメント回路element#1は，シフト量shc[1:0]が０，１，２の場合は，エレメント１，２，３の第１のオペランドデータを選択して格納し，同様に，シフト量が３の場合はエレメント０の第２のオペランドデータを選択して格納する。他のエレメントelement#2,#3もエレメント#1と同様である。
【００４５】
次に，図１０（Ｂ）に示すとおり，エレメント回路element#0は，セレクタＳ３により，減算後のborrow値に応じて第１または第２のオペランドデータを選択する。例えば，シフト量が０の場合はborrow=0であるので第１のオペランドデータop1を選択し，シフト量が１，２，３の場合はborrow＝１であるので第２のオペランドデータop2を選択する。他のエレメント回路も同様である。
【００４６】
一方，図１０（Ｃ）に示すとおり，エレメント回路element#0は，シフト量が０〜３の場合に，加算値sum[1:0]に応じてエレメント回路element#0〜#3のデータをそれぞれ選択する。この選択は，エレメントデータセレクタＳ１により行われる。他のエレメント回路も同様である。なお，図１０（Ｃ）の加算値は，図１０（Ａ）の選択する要素番号と同じになる。
【００４７】
そこで，図８，図９の要素結合左シフト演算回路ＡＬ１０−２は，図１０（Ａ）（Ｂ）（Ｃ）を併せてみると，以下のとおりである。まず，シフト量が０の場合，エレメント回路element#0〜#3では，オペランドセレクタＳ３がborrow値であるオペランドスイッチ信号op_switch＝００００に応じて第１のオペランドデータop1を選択し，エレメントデータセレクタＳ１が加算値sum＝０１２３に応じてエレメント回路element#0, #1, #2, #3をそれぞれ選択する。
【００４８】
シフト量が１の場合，borrow値であるオペランドスイッチ信号op_switch＝１０００に応じて，エレメント回路element#0のオペランドセレクタＳ３が第２のオペランドデータop2を選択し，エレメント回路element#1〜#3のオペランドセレクタＳ３が第１のオペランドデータop1を選択し，エレメント回路element#0〜#3のエレメントデータセレクタＳ１が加算値sum＝１２３０に応じてエレメント回路element#1, #2, #3, #0のデータをそれぞれ選択する。この場合，エレメント#0の第２のオペランドデータop2は，回路エレメント#3により選択される。
【００４９】
同様に，シフト量が２の場合，borrow値であるオペランドスイッチ信号op_switch＝１１００に応じて，エレメント回路element#0, #1のオペランドセレクタＳ３が第２のオペランドデータop2を選択し，エレメント回路element#2, #3のオペランドセレクタＳ３が第１のオペランドデータop1を選択し，エレメント回路element#0〜#3のエレメントデータセレクタＳ１が加算値sum＝２３０１に応じてエレメント回路element#2, #3, #0, #1のデータをそれぞれ選択する。この場合，エレメント#0, #1の第２のオペランドデータop2は，回路エレメント#2, #3に選択される。
【００５０】
シフト量が３の場合も上記と同様である。
【００５１】
そして，要素結合左シフト演算回路ＡＬ１０−２では，マスクセレクタＳ２の選択信号maskは制御コードctrl_code＝１により常時０に固定されるので，マスク機能は働かない。したがって，第２のオペランドデータop2の最上位ビットop2[63]と最下位２ビットop2[1:0]は，マスク機能や選択機能を有しない。要素結合左シフト演算回路ＡＬ１０−２では，主に，オペランドセレクタＳ３とエレメントデータセレクタＳ１により，要素結合左シフト機能が実現される。
【００５２】
図８，９の要素結合左シフト演算回路は，図６，７の完全要素置換演算回路ＡＬ１０−１のオペランドセレクタＳ３とデータバスＤＢと，追加したオペランドセレクタＳ３を利用することで，図３で説明した要素結合左シフト機能を果たす。要素結合左シフト機能では，どのシフト量においても，各エレメントの結果レジスタに格納されるデータが第１または第２のオペランドデータである。したがって，セレクタ部１００の前段のオペランドセレクタＳ３で第１または第２のオペランドデータを選択することで，セレクタ部１００内のエレメントデータセレクタＳ１に送るデータバスを半減している。また，データバスＤＢとエレメントデータセレクタＳ１によりシフト動作を行わせて，新たに必要なシフト回路を削減している。
【００５３】
［要素加算マスク演算回路ＡＬ１０−３］
図１１は，要素加算マスクを行う演算回路ＡＬ１０−３の左半分を示す図である。図１２は，要素加算マスクを行う演算回路ＡＬ１０−３の右半分を示す図である。演算回路ＡＬ１０−３は，図４で概略説明した各エレメントの有効ビットを加算して全エレメントに格納する機能を有する。そして，図１１，図１２の演算回路ＡＬ１０−３では，図６，図７の完全要素置換演算回路ＡＬ１０−１の構成に追加して，セレクタ部１００が，有効ビット加算器ＡＤ−１と，その加算値sum2[2:0]を制御コードctrl_code＝１，要素加算マスク動作信号esummd_op＝１により選択する加算値セレクタＳ５と，マスク信号maskと要素加算マスク動作信号esummd_opが入力されるＯＲゲートＯＲ１とを有する。マスクセレクタＳ２が，このＯＲゲートＯＲ１を介して供給される要素加算マスク動作信号esummd_op＝１により，全て０のデータを選択する。
【００５４】
この演算回路ＡＬ１０−３は，制御コードctrl_codeが１の場合に要素加算マスクを行う演算回路になり，制御コードが０の場合に図６，７の完全要素置換演算回路になる。
【００５５】
制御コードctrl_codeが１の場合，演算回路が要素加算マスク演算回路ＡＬ１０−２となる。その場合，第１のオペランドデータop1と，第２のオペランドデータの最下位２ビットop2[1:0]は使用されず，第２のオペランドデータの最上位ビットop2[63]のみがエレメントの有効性を表すビットとして使用される。それに伴い最下位２ビットop2[1:0]の要求エレメント信号want_el[1:0]は機能せず，ＯＲゲートＯＲ１を介して供給される要素加算マスク信号esummd_op＝１がマスクセレクタＳ２に供給され，マスクセレクタＳ２が，マスク信号maskに係わらず，全て０のデータを選択し，マスク機能が有効化される。そして，要素加算マスク動作信号esummd_op＝１により，加算セレクタＳ５が，有効ビット加算器ＡＤ−１の加算値sum2[2:0]を全て０のデータに上書きする。
【００５６】
なお，加算値を上書きする加算セレクタＳ５は，マスクセレクタＳ２の全て０のデータの入力端子の前段に設けても良い。その場合は，有効ビットの加算値sum2[2:0]をall０データに上書きした入力を，マスクセレクタＳ２がセレクトし，Ｘ５レジスタＸ５−Ｒに出力する。
【００５７】
以上のように，要素加算マスク演算回路として機能する場合，エレメントデータセレクタＳ１は機能しないが，マスクセレクタＳ２は常にゼロマスク機能を有し，追加して設けられた加算値セレクタＳ５が，有効ビット加算器ＡＤ−１の加算値sum2[2:0]を選択し，all０のデータの最下位３ビットに上書きする。そして，加算値sum2[2:0]を含む６３ビットのデータがＸ５レジスタＸ５−Ｒに出力される。したがって，図１１，図１２の演算回路は，図６，図７の完全要素置換演算回路のマスクセレクタＳ２と，追加した加算値セレクタＳ５を使用して要素加算マスク機能を実現する。
【００５８】
［要素圧縮演算回路ＡＬ１０−４］
図１３は，要素圧縮を行う演算回路ＡＬ１０−４の左半分を示す図である。図１４は，要素圧縮を行う演算回路ＡＬ１０−４の右半分を示す図である。演算回路ＡＬ１０−４は，図５で概略説明した有効なエレメントのデータを左側のエレメントに集めて格納する機能を有する。そして，図１３，図１４の演算回路ＡＬ１０−４では，図６，図７の完全要素置換演算回路ＡＬ１０−１の構成に追加して，セレクタ部１００に，コンプレスデコーダCompressと，第１，第２のコンプレスセレクタＳ６，Ｓ７とを有する。
【００５９】
この演算回路ＡＬ１０−４は，制御コードctrl_codeが１の場合に要素データの圧縮を行う演算回路になり，制御コードが０の場合に図６，７の完全要素置換演算回路になる。
【００６０】
制御コードctrl_codeが１の場合，要素圧縮動作信号ecpd_op＝１となり，第１，第２のコンプレスセレクタＳ６，Ｓ７が，コンプレスデコーダCompressのデコード信号cmpr#[2]と，cmpr#[1:0]をそれぞれセレクトする。したがって，第２のオペランドデータの最下位２ビットop2[1:0]は使用されず，最上位ビットop2[63]はエレメントの有効ビットとして機能する。
【００６１】
コンプレスデコーダCompressは，その有効ビットの組合せに応じて，４つのエレメントそれぞれに出力する４つのデコード信号cmpr[2:0]を生成する。デコード信号cmpr#[2]はデータをマスクするか否かを示す信号であり，デコードcmpr#[1:0]はどのエレメントデータを選択するかを示す信号である。
【００６２】
また，第２のコンプレスセレクタＳ７は，op2[63]であるマスク信号maskではなく，デコード信号cmpr#[2]をセレクトする。さらに，第１のコンプレスセレクタＳ６は，要求エレメント信号want_el[1:0]ではなく，デコード信号cmpr#[1:0]をセレクトする。それに伴い，エレメントデータセレクタＳ１は，デコード信号cmpr#[1:0]に基づくエレメントデータをセレクトし，マスクセレクタＳ２は，デコード信号cmpr#[2]に応じてデータを全て０のデータをセレクトする。
【００６３】
図１５は，コンプレスデコーダCompressの論理値表を示す図である。図１５には，エレメント＃０−＃３に対するデコーダの論理値表が示されている。論理値表内の”Ｘ”は１または０のいずれかを示す。
【００６４】
たとえば，エレメント＃０のデコーダでは，エレメント＃０の有効ビットが１の場合（el#0=1），デコード信号cmpr0[2]＝０，cmpr[1:0]＝００となり，エレメント＃０のデータを選択して結果レジスタに格納する。同様に，エレメント＃０の有効ビットが０で，エレメント＃１の有効ビットが１の場合（el#0=0,el#1=1），デコード信号cmpr0[2]＝０，cmpr[1:0]＝０１となり，エレメント＃１のデータを選択して結果レジスタに格納する。el#0=0,el#1=0,el#2=1の場合，el#0=0,el#1=0,el#2=0,el#=1の場合は，それぞれエレメント＃２のデータ，エレメント＃３のデータを選択する。それ以外（default）は，デコード信号cmpr0[2]＝１になり全て０のデータが出力される。
【００６５】
他のエレメント＃１，＃２，＃３のデコードも同様であり，図１５の論理値表から理解できるので，説明は省略する。
【００６６】
以上のように，図１３，図１４の演算回路は，図６，図７の完全要素置換演算回路のエレメントデータセレクタＳ１，マスクセレクタＳ２，データベースＤＢと，追加したコンプレスデコーダCompressと，第１，第２のコンプレスセレクタＳ６，Ｓ７を使用して要素圧縮機能を実現する。
【００６７】
［全機能を有する演算回路］
以上，本実施の形態における４種類の演算回路について説明した。上記では，完全要素置換演算回路ＡＬ１０−１と，要素連結左シフト演算回路ＡＬ１０−２，要素加算マスク演算回路ＡＬ１０−３，要素圧縮演算回路ＡＬ１０−４それぞれの組合せについて説明した。
【００６８】
次に，こららの４種類の演算回路の機能を制御信号により切替可能にした全機能を有する演算回路について説明する。
【００６９】
図１６は，本実施の形態における全機能を有する演算回路の左側を示す図である。図１７は，本実施の形態における全機能を有する演算回路の右側を示す図である。図１６，図１７の全機能を有する演算回路は，２ビットの制御コードctrl_code[1:0]により４種類の機能に切替可能に構成されている。制御コードの割付は以下のとおりである。
制御コードctrl_code[1:0]＝００：完全要素置換（フルエレメントパーミュテーション）
制御コードctrl_code[1:0]＝０１：要素連結左シフト（エレメントコンカテネートシフトレフト）
制御コードctrl_code[1:0]＝１０：要素加算マスク（エレメントサムマスク）
制御コードctrl_code[1:0]＝１１：要素圧縮（エレメントコンプレス）
全機能を有する演算回路は，セレクタ部１００内に，エレメントデータセレクタＳ１と，マスクセレクタＳ２と，加算値セレクタＳ５と，第１，第２のコンプレスセレクタＳ６，Ｓ７と，有効ビット加算器ＡＤ−１と，コンプレスデコーダCompressとを有する。さらに，全機能を有する演算回路は，各エレメント回路element#0-#3の入力部内に，エレメント結合左シフト用加算器CSL-Adderと，オペランドセレクタＳ３と，要求エレメントセレクタＳ４と，スイッチＳＷ１，ＳＷ２とを有する。そして，全機能を有する演算器は，制御コードctrl_code[1:0]をデコードして要素結合左シフト動作信号ecsld_op, 要素加算マスク動作信号esummd_opを生成するデコーダＤを有する。図中のデコーダＤの出力信号によりどちらのデコードを行っているかを理解できる。なお，要素圧縮動作信号ecpd_opは生成されず，要素加算マスク動作信号esummd_opと共に，制御コードctrl_code[1:0]の上位ビット[1]で代用される。
【００７０】
全機能を有する演算回路は，制御コードctrl_code[1:0]＝００の場合に，完全要素置換を行う演算回路として動作する。制御コードが”００”であるので，全ての追加セレクタＳ３−Ｓ７は選択信号”０”側がセレクトされる。その結果，図６，図７の完全要素置換の演算回路ＡＬ１０−１として動作する。
【００７１】
全機能を有する演算回路は，制御コードctrl_code[1:0]＝０１の場合に，要素連結左シフトを行う演算回路として動作する。制御コードが”０１”であるので，要素結合左シフト動作信号ecsld_opが１になり，要求エレメントセレクタＳ４は”１”側の加算器の加算値sum[1:0]を選択し，スイッチＳＷ１は加算器のborrow値op_switchをオペランドセレクタＳ３に出力し，スイッチＳＷ２はマスク信号maskを”０”にする。また，制御コードの上位ビットctrl_code[1]＝０により，加算値セレクタＳ５は”０”を選択し，第１，第２のコンプレスセレクタＳ６，Ｓ７は”０”側のマスク信号maskと要求エレメント信号want_el[1:0]をそれぞれ選択する。その結果，図８，図９の要素連結左シフトの演算回路ＡＬ１０−２として動作する。
【００７２】
全機能を有する演算回路は，制御コードctrl_code[1:0]＝１０の場合に，要素加算マスクを行う演算回路として動作する。制御コードが”１０”で，要素加算マスク動作信号esummd_opが”１”となり，制御コードの上位ビットctrl_code[1]＝１となり，セレクタＳ５，Ｓ６，Ｓ７は全て”１”側を選択する。また，要素結合左シフト動作信号ecsld_op＝０となり，スイッチＳＷ１の出力が０となりセレクタＳ３は”０”側を選択し，スイッチＳＷ２の出力は有効ビットop2[63]となり，セレクタＳ４は要求エレメントビットop2[1:0]を出力する。その結果，図１１，図１２の要素加算マスクの演算回路ＡＬ１０−３として動作する。
【００７３】
なお，図１１，１２と異なり，セレクタＳ６が”１”側を選択してコンプレスデコーダのデコード信号cmpr[1:0]を出力し，エレメントデータセレクタＳ１がデコード信号cmpr[1:0]に基づいてエレメントのデータを選択している。しかしながら，要素加算マスク動作信号esummd_op＝１によりＯＲゲートＯＲ１が”１”を出力し，制御コードの上位ビットctrl_code[1]＝１によりセレクタＳ７がＯＲゲートの出力”１”を選択するため，マスクセレクタＳ２が全て０のデータにマスクする。その後，要素加算マスク動作信号esummd_op＝１によりセレクタＳ５が有効ビット加算値sum2[2:0]を選択して，有効ビット加算値をデータに上書きする。
【００７４】
つまり，Element Sum Mask時にはセレクタＳ６によるエレメント要求信号want_el[1:0]は不問である。よって，制御コードの上位ビットctrl_code[1]＝1（Element Sum MaskもしくはElement Compressの場合）ならば，セレクタＳ６の”1”側を選択するようにすることで要素圧縮動作信号ecpd_opを生成するためのデコーダなどの回路を削減することができる。
【００７５】
最後に，全機能を有する演算回路は，制御コードctrl_code[1:0]＝１１の場合に，要素圧縮を行う演算回路として動作する。制御コードが”１１”で，要素加算マスク動作信号esummd_op＝０となり，制御コードの上位ビットctrl_code[1]＝１となり，セレクタＳ５は”０”側を選択し，セレクタＳ６，Ｓ７は”１”側を選択する。また，要素結合左シフト動作信号ecsld_op＝０となり，スイッチＳＷ１の出力が０となりセレクタＳ３は”０”側を選択し，スイッチＳＷ２の出力は有効ビットop2[63]となり，セレクタＳ４は要求エレメントビットop2[1:0]を出力する。その結果，図１３，図１４の要素圧縮の演算回路ＡＬ１０−４として動作する。
【００７６】
以上の通り，本実施の形態によれば，３以上の複数のＳＩＭＤ演算エレメントを有するプロセッサにおいて，複数のＳＩＭＤ演算エレメントを横断する要素間演算回路ＡＬ１０を有し，その要素間演算回路ＡＬ１０が，多数のＳＩＭＤ演算エレメント間のデータの置換，転送，圧縮や，データの加算値の集計などの演算機能を，制御コードにより切替可能に構成されているので，ＳＩＭＤ演算器の高速処理を最大限に生かすことができる。
【００７７】
以上の実施の形態をまとめると，次の付記のとおりである。
【００７８】
（付記１）
第１のオペランドデータと第２のオペランドデータを入力する入力回路と，要求エレメント信号に基づいていずれかのエレメントのオペランドデータを選択するエレメントデータセレクタとを，それぞれ有する第１〜第Ｎ（Ｎは３以上の複数）のエレメント回路と，
前記各エレメントの入力回路から各エレメントの前記エレメントデータセレクタに前記各エレメントが入力するオペランドデータを供給するデータバスとを有し，
前記第１〜第Ｎのエレメント回路内の各エレメントデータセレクタは，制御信号が第１の状態のとき，前記第２のオペランドデータに含まれる前記要求エレメント信号に基づいて，いずれかのエレメントの前記第１のオペランドデータをそれぞれ選択して出力し，
前記第１〜第Ｎのエレメント回路のそれぞれは，前記制御信号が第２の状態のとき，自己のエレメント番号とシフト量に基づいて前記第１または第２のオペランドデータを選択して前記データバスに出力するオペランドセレクタと，前記自己のエレメント番号と前記シフト量とに基づいて前記要求エレメント信号を生成するエレメント連結左シフト用加算器とをそれぞれ有する，演算回路。
【００７９】
（付記２）
さらに，前記制御信号が第３の状態のとき，前記第１〜第Ｎのエレメント回路が入力する第２のオペランドデータに含まれる有効ビットを加算する有効ビット加算器を有し，
前記第１〜第Ｎのエレメント回路それぞれは，前記制御信号が第３の状態のとき，前記有効ビット加算器が出力する加算値を，前記エレメントデータセレクタの出力に代えて，出力する加算値セレクタを有する，付記１に記載の演算回路。
【００８０】
（付記３）
前記第１〜第Ｎのエレメント回路それぞれは，前記エレメントデータセレクタの出力または全てゼロのデータのいずれかを選択するマスクセレクタを有し，
さらに，前記制御信号が第４の状態のとき，前記第１〜第Ｎのエレメント回路が入力する第２のオペランドデータに含まれる有効ビットに基づいて，マスク信号とエレメントデータ選択信号を有するコンプレスデコード信号を前記第１〜第Ｎのエレメント回路別に生成するコンプレスデコーダを有し，
前記第１〜第Ｎのエレメント回路それぞれは，前記制御信号が第４の状態のとき，前記エレメントデータ選択信号を前記要求エレメント信号に代えて選択する第１のコンプレスセレクタと，前記マスク信号を前記マスクセレクタに出力して前記全てゼロのデータを選択させる第２のコンプレスセレクタとを有する，付記１または２に記載の演算回路。
【００８１】
（付記４）
さらに，前記第１のオペランドデータを入力する第１のオペランドレジスタと，前記第２のオペランドデータを入力する第２のオペランドレジスタと，前記第１，第２のオペランドデータを入力して演算する演算器と，前記演算器が出力する演算結果を格納する結果レジスタとをそれぞれ有する第１〜第Ｎ（Ｎは３以上の整数）のＳＩＭＤ演算エレメントを有する，付記１に記載の演算回路。
【００８２】
（付記５）
第１のオペランドデータと第２のオペランドデータを入力する入力回路と，要求エレメント信号に基づいていずれかのエレメントのオペランドデータを選択するエレメントデータセレクタとを，それぞれ有する第１〜第Ｎ（Ｎは３以上の複数）のエレメント回路と，
前記各エレメントの入力回路から各エレメントの前記エレメントデータセレクタに前記各エレメントが入力するオペランドデータを供給するデータバスとを有し，
前記第１〜第Ｎのエレメント回路内の各エレメントデータセレクタは，制御信号が第１の状態のとき，前記第２のオペランドデータに含まれる前記要求エレメント信号に基づいて，いずれかのエレメントの前記第１のオペランドデータを選択して出力し，
さらに，前記制御信号が第３の状態のとき，前記第１〜第Ｎのエレメント回路が入力する第２のオペランドデータに含まれる有効ビットを加算する有効ビット加算器を有し，
前記第１〜第Ｎのエレメント回路のそれぞれは，前記制御信号が第３の状態のとき，前記有効ビット加算器が出力する加算値を，前記エレメントデータセレクタの出力に代えて，出力する加算値セレクタを有する，演算回路。
【００８３】
（付記６）
さらに，前記第１のオペランドデータを入力する第１のオペランドレジスタと，前記第２のオペランドデータを入力する第２のオペランドレジスタと，前記第１，第２のオペランドデータを入力して演算する演算器と，前記演算器が出力する演算結果を格納する結果レジスタとをそれぞれ有する第１〜第Ｎ（Ｎは３以上の整数）のＳＩＭＤ演算エレメントを有する，付記５に記載の演算回路。
【００８４】
（付記７）
第１のオペランドデータと第２のオペランドデータを入力する入力回路と，要求エレメント信号に基づいていずれかのエレメントのオペランドデータを選択するエレメントデータセレクタと，前記エレメントデータセレクタの出力または全てゼロのデータのいずれかを選択するマスクセレクタとを，それぞれ有する第１〜第Ｎ（Ｎは３以上の複数）のエレメント回路と，
前記各エレメントの入力回路から各エレメントの前記エレメントデータセレクタに前記各エレメントが入力するオペランドデータを供給するデータバスとを有し，
前記第１〜第Ｎのエレメント回路内の各エレメントデータセレクタは，制御信号が第１の状態のとき，前記第２のオペランドデータに含まれる前記要求エレメント信号に基づいて，いずれかのエレメントの前記第１のオペランドデータを選択して出力し，前記各マスクセレクタは，前記制御信号が第１の状態のとき，前記エレメントデータセレクタの出力を選択し，
さらに，前記制御信号が第４の状態のとき，前記第１〜第Ｎのエレメント回路が入力する第２のオペランドデータに含まれる有効ビットに基づいて，マスク信号とエレメントデータ選択信号を有するコンプレス信号を生成するコンプレスデコーダを有し，
前記第１〜第Ｎのエレメント回路のそれぞれは，前記制御信号が第４の状態のとき，前記エレメントデータ選択信号を前記要求エレメント信号に代えて選択する第１のコンプレスセレクタと，前記マスク信号を前記マスクセレクタに出力して前記全てゼロのデータを選択させる第２のコンプレスセレクタとを有する，演算回路。
【００８５】
（付記８）
さらに，前記第１のオペランドデータを入力する第１のオペランドレジスタと，前記第２のオペランドデータを入力する第２のオペランドレジスタと，前記第１，第２のオペランドデータを入力して演算する演算器と，前記演算器が出力する演算結果を格納する結果レジスタとをそれぞれ有する第１〜第Ｎ（Ｎは３以上の整数）のＳＩＭＤ演算エレメントを有する，付記７に記載の演算回路。
【００８６】
（付記９）
第１のオペランドデータを入力する第１のオペランドレジスタと，第２のオペランドデータを入力する第２のオペランドレジスタと，前記第１，第２のオペランドデータを入力して演算する演算器と，前記演算器が出力する演算結果を格納する結果レジスタとをそれぞれ有する第１〜第Ｎ（Ｎは３以上の整数）のＳＩＭＤ演算エレメントと，
前記第１のオペランドデータと前記第２のオペランドデータを入力する入力回路と，要求エレメント信号に基づいていずれかのエレメントのオペランドデータを選択するエレメントデータセレクタと，前記エレメントデータセレクタの出力または全てゼロのデータのいずれかを選択するマスクセレクタとを，それぞれ有する第１〜第Ｎのエレメント回路と，
前記各エレメントの入力回路から各エレメントの前記エレメントデータセレクタに前記各エレメントが入力するオペランドデータを供給するデータバスとを有し，
前記第１〜第Ｎのエレメント回路内の各エレメントデータセレクタは，前記第２のオペランドデータに含まれる前記要求エレメント信号に基づいて，いずれかのエレメントの前記第１のオペランドデータを選択し，前記各マスクセレクタは，前記選択する前記エレメントデータセレクタの出力または全てゼロのデータのいずれかを前記結果レジスタに出力する，演算回路。
【００８７】
（付記１０）
前記第１〜第Ｎのエレメント回路内のエレメントデータセレクタは，制御信号が第１の状態のとき，前記第２のオペランドデータに含まれる前記要求エレメント信号に基づいて，いずれかのエレメントの前記第１のオペランドデータを選択し，
前記第１〜第Ｎのエレメント回路それぞれは，前記制御信号が第２の状態のとき，自己のエレメント番号とシフト番号に基づいて前記第１または第２のオペランドデータを選択して前記データバスに出力するオペランドセレクタと，前記自己のエレメント番号とシフト番号とに基づいて前記要求エレメント信号を生成するエレメント連結左シフト用加算器（CSL-Adder）とを有する，付記９に記載の演算回路。
【００８８】
（付記１１）
前記第１〜第Ｎのエレメント回路内のエレメントデータセレクタは，制御信号が第１の状態のとき，前記第２のオペランドデータに含まれる前記要求エレメント信号に基づいて，いずれかのエレメントの前記第１のオペランドデータを選択し出力し，
さらに，前記制御信号が第３の状態のとき，前記第１〜第Ｎのエレメント回路が入力する第２のオペランドデータに含まれる有効ビットを加算する有効ビット加算器を有し，
前記第１〜第Ｎのエレメント回路それぞれは，前記制御信号が第３の状態のとき，前記有効ビット加算器が出力する加算値を，前記エレメントデータセレクタの出力に代えて，出力する加算値セレクタを有する，付記９に記載の演算回路。
【００８９】
（付記１２）
前記第１〜第Ｎのエレメント回路内のエレメントデータセレクタは，制御信号が第１の状態のとき，前記第２のオペランドデータに含まれる前記要求エレメント信号に基づいて，いずれかのエレメントの前記第１のオペランドデータを選択し，前記マスクセレクタは，前記制御信号が第１の状態のとき，前記エレメントデータセレクタの出力を選択し，
さらに，前記制御信号が第４の状態のとき，前記第１〜第Ｎのエレメント回路が入力する第２のオペランドデータに含まれる有効ビットに基づいて，マスク信号とエレメントデータ選択信号を有するコンプレス信号を生成するコンプレスデコーダを有し，
前記第１〜第Ｎのエレメント回路それぞれは，前記制御信号が第４の状態のとき，前記エレメントデータ選択信号を前記要求エレメント信号に代えて選択する第１のコンプレスセレクタと，前記マスク信号を前記マスクセレクタに出力して前記全てゼロのデータを選択させる第２のコンプレスセレクタとを有する，付記９に記載の演算回路。
【００９０】
（付記１３）
第１のオペランドデータを入力する第１のオペランドレジスタと，第２のオペランドデータを入力する第２のオペランドレジスタと，前記第１，第２のオペランドデータを入力して演算する演算器と，前記演算器が出力する演算結果を格納する結果レジスタとをそれぞれ有する第１〜第Ｎ（Ｎは３以上の整数）のＳＩＭＤ演算エレメントと，
前記第１のオペランドデータと前記第２のオペランドデータを入力する入力回路と，要求エレメント信号に基づいていずれかのエレメントのオペランドデータを選択するエレメントデータセレクタと，前記エレメントデータセレクタの出力または全てゼロのデータのいずれかを選択するマスクセレクタとを，それぞれ有する第１〜第Ｎのエレメント回路と，
前記各エレメントの入力回路から各エレメントの前記エレメントデータセレクタに前記各エレメントが入力するオペランドデータを供給するデータバスとを有する演算回路の制御方法において，
前記第１〜第Ｎのエレメント回路内の各エレメントデータセレクタは，前記第２のオペランドデータに含まれる前記要求エレメント信号に基づいて，いずれかのエレメントの前記第１のオペランドデータを選択し，
前記各マスクセレクタは，前記選択する前記エレメントデータセレクタの出力または全てゼロのデータのいずれかを前記結果レジスタに出力する，演算回路の制御方法。
【符号の説明】
【００９１】
ＡＬ１０−１：フルエレメントパーミュテーション（完全要素間置換）演算回路
ＡＬ１０−２：エレメントコンカテネートシフトレフト（要素間連結左シフト）演算回路
ＡＬ１０−３：エレメントサムマスク（要素間加算マスク）演算回路
ＡＬ１０−４：エレメントコンプレス（要素間圧縮）演算回路
ＯＰ１，ＯＰ２：オペランドレジスタ
ＡＬ１０：演算回路
element#0-#3：エレメント回路
１００：セレクタ部
Ｒ１：ＳＩＭＤレジスタ
Ｒ２：リネーミングレジスタ
Ｒ３：結果レジスタ
Ｓ１：第１のセレクタ（エレメントデータ交換セレクタ）
Ｓ２：第２のセレクタ（マスクセレクタ）
Ｓ３：第３のセレクタ（オペランドセレクタ）
Ｓ４：第４のセレクタ（要求エレメントセレクタ）
Ｓ５：第５のセレクタ（加算値セレクタ）
Ｓ６：第６のセレクタ（第１のコンプレスセレクタ）
Ｓ７：第７のセレクタ（第２のコンプレスセレクタ）
ＳＷ１，ＳＷ２：第１のスイッチ，第２のスイッチ
ＤＢ：エレメント間データバス群
ＯＰ１，ＯＰ２：Ｘ１レジスタ（オペランドレジスタ）
Ｒ−Ｘ２：Ｘ２レジスタ（入力レジスタ）
Ｒ−Ｘ３：Ｘ３レジスタ
Ｒ−Ｘ４：Ｘ４レジスタ
Ｒ−Ｘ５：Ｘ５レジスタ
Ｒ−Ｘ５：Ｘ６レジスタ
Ｒ３：Ｕレジスタ（結果レジスタ）
want_el[1:0]：要求エレメント信号
mask：マスク信号
CSL-Adder：エレメント結合左シフト用加算器
op-switch：加算器のborrow値
ＡＤ−１：有効ビット加算器
sum[2:0]：有効ビット加算値
Compress：コンプレスデコーダ
cmpr#[2]：コンプレスデコード値，マスク信号
cmpr#[1:0]：コンプレスデコード値，エレメントデータ選択信号
E_#0〜E_#3：ＳＩＭＤ演算エレメント
【図１】
0006308095.tif 000002
【図２】
0006308095.tif 000003
【図３】
0006308095.tif 000004
【図４】
0006308095.tif 000005
【図５】
0006308095.tif 000006
【図６】
0006308095.tif 000007
【図７】
0006308095.tif 000008
【図８】
0006308095.tif 000009
【図９】
0006308095.tif 000010
【図１０】
0006308095.tif 000011
【図１１】
0006308095.tif 000012
【図１２】
0006308095.tif 000013
【図１３】
0006308095.tif 000014
【図１４】
0006308095.tif 000015
【図１５】
0006308095.tif 000016
【図１６】
0006308095.tif 000017
【図１７】
0006308095.tif 000018