(57)【要約】【課題】命令コード体系に命令の追加をすることなく、モード切り換え等もする必要なく、低消費電力でスカラー演算も容易に実行可能なSIMD演算を実行可能なマイクロプロセッサを提供する。【解決手段】プロセッサ１は、SIMD演算のための複数のスロットを含む１以上の演算対象データの各スロットに対応して設けられた複数のスロット演算器ST1からST33と、１以上の演算対象データのそれぞれにおいて、所定のスロットの値と所定のスロット以外のスロットの値とを比較し、所定のスロットの値と等しい値が入力される１以上のスロット演算器をディスエーブルにするイネーブル生成部４１とを有し、ディスエーブルされた１以上のスロット演算器の値として、所定のスロットの値を出力する。【選択図】図２
2011039982.tif 000002
【特許請求の範囲】
【請求項１】
SIMD演算のための複数のスロットを含む１以上の演算対象データの各スロットに対応して設けられた複数のスロット演算器と、
前記１以上の演算対象データのそれぞれにおいて、所定のスロットの値と前記所定のスロット以外のスロットの値とを比較し、前記所定のスロットの値と等しい値が入力される１以上のスロット演算器をディスエーブルにするスロット演算器制御部と、
を有し、ディスエーブルされた前記１以上のスロット演算器の値として、前記所定のスロットの値が出力されることを特徴とするプロセッサ。
【請求項２】
前記比較の結果である比較データは、前記１以上の演算対象データと演算結果データを記憶するレジスタファイルの一部のレジスタに記憶されることを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記所定のスロットの値は、前記複数のスロット演算器による前記演算結果データが前記レジスタファイルへ出力される時に、ディスエーブルされた前記１以上のスロット演算器の出力データとして、出力されることを特徴とする請求項２に記載のプロセッサ。
【請求項４】
前記所定のスロットは、プリファードスロットであることを特徴とする請求項１から請求項３のいずれか１つに記載のプロセッサ。
【請求項５】
前記１以上のスロット演算器のディスエーブルは、ディスエーブルするスロット演算器へのクロックの供給を停止することによって行われることを特徴とする請求項１から請求項４のいずれか１つに記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサに関し、特に、SIMD演算を実行可能な複数のスロット演算器を有するプロセッサに関する。
【背景技術】
【０００２】
従来より、スカラー演算型のマイクロプロセッサがある。通常のスカラー演算型のマイクロプロセッサの場合、SIMD演算実行可能にするためには、SIMD演算命令が追加され、SIMD演算を実行可能としている。  
一方、SIMD演算命令のみが実行可能なマイクロプロセッサもある。そのようなプロセッサの場合、スカラー演算の実行は、SIMD演算命令により行われるが、SIMD演算命令によりスカラー演算を実行させるときに、不要な回路要素も動作するため、不必要な電力を消費してしまうという問題があった。
【０００３】
そこで、SIMD演算命令のみが実行可能なマイクロプロセッサに、スカラー演算命令を追加する技術が提案されている（例えば、特許文献１参照）。
【０００４】
あるいは、演算モードを切り換えるモード切替機能をマイクロプロセッサに設ける技術が提案されている（例えば、特許文献２，３，４参照）。
【０００５】
しかし、マイクロプロセッサにスカラー演算命令を追加する場合、限られた命令コード体系の中でスカラー演算命令を定義して使用するために、命令コードを消費してしまうという問題と、既に作成されたソフトウエアプログラムには容易に対応できないという問題がある。
【０００６】
また、スカラー演算とSIMD演算の２つのモードを切り換えるために、モード切替命令あるいはモード設定レジスタを用意あるいは設けなければならず、さらにコンテキスト切り換え時にモード情報の保存も必要となるため、オペレーティングシステム（OS）の変更も必要となるという問題があった。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】米国特許第６８３９８２８号明細書
【特許文献２】米国特許出願公開第２００６／０１５５９６４号明細書
【特許文献３】米国特許出願公開第２００６／０２８２６４６号明細書
【特許文献４】米国特許出願公開第２００６／０２８２８２６号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００８】
そこで、本発明は、命令コード体系に命令の追加をすることなく、モード切り換え等もする必要なく、低消費電力でスカラー演算も容易に実行可能なSIMD演算を実行可能なマイクロプロセッサを提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の一態様によれば、SIMD演算のための複数のスロットを含む１以上の演算対象データの各スロットに対応して設けられた複数のスロット演算器と、前記１以上の演算対象データのそれぞれにおいて、所定のスロットの値と前記所定のスロット以外のスロットの値とを比較し、前記所定のスロットの値と等しい値が入力される１以上のスロット演算器をディスエーブルにするスロット演算器制御部とを有し、ディスエーブルされた前記１以上のスロット演算器の値として、前記所定のスロットの値が出力されるプロセッサを提供することができる。
【発明の効果】
【００１０】
本発明によれば、命令コード体系に命令の追加をすることなく、モード切り換え等もする必要なく、低消費電力でスカラー演算も容易に実行可能なSIMD演算を実行可能なマイクロプロセッサを実現することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施の形態に係わるプロセッサの構成を説明するためのブロック図である。
【図２】本発明の実施の形態に係わる演算器２１の構成例を説明するためのブロック図である。
【図３】本発明の実施の形態に係わるレジスタファイル２２の構成を説明するための図である。
【図４】本発明の実施の形態の変形例に係る回路を説明するための図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照して本発明の実施の形態を説明する。  
（構成）
まず図１に基づき、本実施の形態に係わるプロセッサの構成を説明する。図１は、本実施の形態に係わるプロセッサの構成を説明するためのブロック図である。
【００１３】
図１に示すように、本実施の形態に係るプロセッサ１は、バス２に接続され、演算部１１と、記憶部としてのローカルメモリ１２とを含み、後述するようにSIMD演算用の複数のスロット演算器を有するプロセッサである。演算部１１は、演算器２１と、汎用レジスタ群であるレジスタファイル２２とを含む。プロセッサ１は、図示しないROM,RAM等とはバス２を介して接続され、バス２を介して、命令及びデータを読み出し、ローカルメモリ４２を用いて、命令により指定されたデータを用いて所定の演算を実行する。
【００１４】
なお、本実施の形態では、プロセッサ１は、半導体チップ上に１つだけが設けられ、ローカルメモリ４２を有する例を説明するが、半導体チップ上に、プロセッサ１が複数設けられ、互いにバス２を介して接続されていてもよいし、また、プロセッサ１がローカルメモリ１２を有していなくてもよい。
【００１５】
図２は、演算器２１の構成例を説明するためのブロック図である。演算器２１は、演算対象データの各スロットに対応して設けられた複数のスロット演算器ST10からST33を含む。  
図２に示すように、演算器２１は、実行命令により指定されたレジスタファイル２２の１又は２以上のレジスタ（すなわちソースレジスタ）３１のデータを入力して、所定の数のステージ（ここでは３つのステージ）を経て、実行命令に基づく所定の演算を実行し、その演算結果を、実行命令により指定されたレジスタファイル２２の１又は２以上のレジスタ（すなわちデスティネーションレジスタ）３２に書き込む。演算対象データと演算結果データが、レジスタファイル２２に記憶される。
【００１６】
実行命令に基づいて、後述するように、各ステージの各スロット演算器を有効にするか否かが指定され、ソースレジスタ３１の各スロットに対する演算が実行される。
【００１７】
本実施の形態では、SIMD演算の演算対象データは、１２８ビットであり、演算対象データは、それぞれが３２ビットデータの４つのスロットを含む例で説明するが、演算器２１は、例えば１２８ビット幅のレジスタファイルの場合、３２ビット×４だけでなく、６４ビット×２等のSIMD演算器であってもよく、さらに、３２ビット×８等の、ビット幅の異なる演算器でもよい。
【００１８】
演算器２１には、実行命令において指定されたレジスタファイル２２中のレジスタ番号のレジスタ（すなわちソースレジスタ）のデータが入力される。各ステージの４つのスロット演算器は、各スロットに対応して設けられ、各スロット演算器には、対応するスロットからのデータが入力される。また、各スロット演算器は、ディスエーブル可能な演算器、すなわち演算実行の停止可能な演算器である。
【００１９】
１２８ビット中の４つのスロットのデータが、ステージ１のそれぞれ４つのスロット演算器ST10〜ST13に入力される。１２８ビット中の第１スロット（以下、プリファードスロットともいう）のデータは、スロット演算器ST10に入力され、第２スロット、第３スロット及び第４スロットのデータは、それぞれスロット演算器ST11、スロット演算器ST12及びスロット演算器ST13に入力される。
【００２０】
ステージ１の４つのスロット演算器ST10〜ST13の演算結果は、それぞれ次のステージ２の４つのスロット演算器ST20〜ST23に入力される。同様に、ステージ２の４つのスロット演算器ST20〜ST23の演算結果は、それぞれ次のステージ３の４つのスロット演算器ST30〜ST33に入力される
ステージ３のスロット演算器ST30の演算結果は、実行命令により指定されたデスティネーションレジスタ３２に第１スロットのデータとして書き込まれる。ステージ３のスロット演算器ST31からST33の演算結果は、それぞれ、セレクタSL1からSL3を介して、レジスタファイル２２のデスティネーションレジスタ３２の第２から第４スロットに書き込まれる。
【００２１】
また、後述する比較データレジスタ３３のデータも演算器２１に入力される。比較データレジスタ３３は、ここでは、３つの比較データとして、３ビットデータを保持するレジスタであり、レジスタファイル２２の一部である。
【００２２】
なお、本実施の形態では、比較データレジスタ３３は、レジスタファイル２２の一部として、各レジスタに対応して設けられているが、比較データレジスタ３３は、レジスタファイル２２とは別に設けられていてもよい。
【００２３】
ソースレジスタ３１に対応する比較データレジスタ３３の各データは、イネーブル生成部（enable gen.）４１に供給される。  
イネーブル生成部４１は、ディスエーブルするスロット演算器のディスエーブル端子に、ディスエーブル信号として比較データを供給する。
【００２４】
イネーブル生成部４１からの第１の比較データEB1は、ステージ１のスロット演算器ST11のディスエーブル端子に供給され、第２の比較データEB2は、ステージ１のスロット演算器ST12のディスエーブル端子に供給され、第３の比較データEB3は、イネーブル生成部４１に供給される。  
また、イネーブル生成部４１からの比較データは、各ステージの第２，第３及び第４スロット演算器にも供給される。
【００２５】
さらに、命令が有効であることを示す命令有効ビットIVが、各ステージのスロット演算器ST10,ST20,ST30のディスエーブル端子に供給される。命令有効ビットIV （inst_valid）は、そのサイクルで有効な命令が供給されたことを示すビットである。従って、命令有効ビットIVが有効を示すときに、各ステージの演算が実行される。
【００２６】
ステージ３の第２から第４のスロット演算器ST31,ST32,ST33の出力は、それぞれセレクタSL1からSL3の一方の入力端子に供給される。また、プリファードスロットSL0の出力は、デスティネーションアドレス３２の第１スロットと共に、セレクタSL1からSL3の他方の入力端子に供給される。
【００２７】
さらに、イネーブル生成部４１の出力する第１の比較データEB1は、セレクト信号として、セレクタSL1に供給され、セレクタSL1は、第１の比較データEB1の値に応じて、２つの入力データのいずれか一方を選択して出力する。イネーブル生成部４１の出力する第２と第３の比較データEB2,EB3も、それぞれ、セレクト信号として、セレクタSL2,SL3に供給され、セレクタSL2,SL3は、それぞれ第２と第３の比較データEB2,EB3の値に応じて、２つの入力データのいずれか一方を選択して出力する。
【００２８】
各セレクタは、入力された比較データの値が、「１」の場合は、プリファードスロットの出力を選択して、デスティネーションアドレス３２の対応するスロットへ出力する。また、各セレクタは、入力された比較データの値が、「０」の場合は、入力されたスロット演算器の出力を選択して、デスティネーションアドレス３２の対応するスロットへ出力する。
【００２９】
比較データ記憶部としてのイコール生成部（equal gen.）４２には、比較データレジスタ３３のデータと、ステージ３の第１から第４のスロット演算器ST30,ST31,ST32,ST33のデータとが入力される。
【００３０】
イコール生成部４２は、ステージ３の第１スロット（すなわちプリファードスロット）のデータと、第２から第４のスロットのデータを比較する。イコール生成部４２は、第１スロットと他のスロットのデータが同じであれば、デスティネーションアドレス３２の比較データレジスタ３３の対応する比較データを、ここでは「１」にする。イコール生成部４２の生成する第１から第３の比較データEB1からEB3は、それぞれ、第２から第４のスロット演算器の出力がプリファードスロットの値と等しいか否かを示す比較データである。イコール生成部４２は、演算器２１の演算結果データに対応付けて、比較データをレジスタファイル２２に記憶する。
【００３１】
例えば、プリファードスロットと第２スロットが同じデータであるとき、第１の比較データEB1を「１」にし、プリファードスロットと第２スロットが同じデータでないとき、第１の比較データEB1を「０」にする。同様に、第３と第４スロットのそれぞれについても、プロファードスロットと同じであるときには、比較データを「１」にし、同じでないときは、「０」にする。よって、プリファードスロットと第３スロットが同じデータであるとき、第２の比較データEB2を「１」にし、プリファードスロットと第３スロットが同じデータでないとき、第２の比較データEB2を「０」にする。そして、プリファードスロットと第４スロットが同じデータであるとき、第３の比較データEB3を「１」にし、プリファードスロットと第４スロットが同じデータでないとき、第３の比較データEB3を「０」にする。これらの比較データが、レジスタファイル２２の一部のレジスタに記憶される。
【００３２】
図３は、レジスタファイル２２の構成を説明するための図である。図３に示すように、レジスタファイル２２は、それぞれが１２８ビットデータを格納可能な１２８個のレジスタ（レジスタ番号０から１２７）を含む。さらに、レジスタファイル２２は、各レジスタに対応する比較データを格納可能な比較データレジスタ群３３Aを有している。
【００３３】
レジスタファイル２２は、例えば、所定のSIMD演算が、レジスタファイル２２のレジスタ番号１と５のレジスタのデータを入力として、実行され、SIMD演算の演算結果データが、レジスタ番号１０のレジスタに格納される、というように用いられる。あるいは、レジスタファイル２２は、所定のSIMD演算が、レジスタ番号１のデータを入力として、実行され、SIMD演算の演算結果が、レジスタ番号１０に格納される、というように用いられる。このように、レジスタファイル２２の各レジスタは、SIMD演算の演算対象データを格納し、かつ演算結果データを格納するレジスタである。どの１つあるいは２以上のレジスタを入力データレジスタとし、どの１つあるいは２以上のレジスタを出力データレジスタとするかは、実行命令によって指定される。  
そして、上述したように、レジスタファイル２２は、演算対象データ及び演算結果データを記憶する複数のレジスタに対応する比較データを記憶する比較データレジスタ３３を複数有するレジスタ群である。
【００３４】
（レジスタファイル２２からのデータの読み出し時のイネーブル生成部の動作）
イネーブル生成部（enable gen.）４１は、演算器２１において演算を行うときに、例えばソースレジスタとして２つのレジスタ番号が指定され、それらのレジスタからデータを読み出す場合に、第２から第４のスロット演算器を有効（enable）あるいは無効（disable）にする。イネーブル生成部４１は、スロット演算器制御部を構成し、ディスエーブルするスロット演算器へディスエーブル信号を供給可能となっている。
【００３５】
ここでは、イネーブル生成部４１が、例えば、レジスタファイル２２の２つのソースレジスタrs0,rs1のデータを読み出して、演算器２１で所定の演算をする場合を例に挙げて説明する。
【００３６】
この例の場合、イネーブル生成部４１は、次の式の内容を実行する論理回路により構成される。  
レジスタ番号０と１の２つのソースレジスタrs0,rs1のデータを読み出して、演算を実行する場合、第１から第４の各スロット演算器は、イネーブルあるいはディスエーブルされる。そのイネーブルにするかディスエーブルするかは、次の式で表される。下記の式において、inst_validはそのサイクルで有効な命令が供給されたことを示す。s0_valid, s1_validは、それぞれその有効な命令をデコードした結果、ソースレジスタとしてレジスタrs0, rs1をそれぞれ使用する命令であることを示す。
【００３７】
slot0: enable[0] := inst_valid;          ・・・式（１）
slot1: enable[1] := inst_valid AND((s0_valid AND !sl0eqsl1[rs0]) OR (s1_valid AND !sl0eqsl1[rs1]) );           ・・・式（２）
slot2: enable[2] := inst_valid AND((s0_valid AND !sl0eqsl2[rs0]) OR (s1_valid AND !sl0eqsl2[rs1]) );           ・・・式（３）
slot3: enable[3] := inst_valid AND((s0_valid AND !sl0eqsl3[rs0]) OR (s1_valid AND !sl0eqsl3[rs1]) );           ・・・式（４）
すなわち、式（１）は、第１のスロット演算器（すなわちプリファードスロットの演算器）ST10,ST20,ST30は、命令が有効な命令であれば、イネーブルとなり、命令が無効なときは、ディスエーブルとなることを示している。
【００３８】
式（２）は、命令が有効であって（inst_valid）、さらにソースレジスタrs0が使用され、かつ第１スロットと第２スロットのデータが一致していない場合（s0_valid AND !sl0eqsl1[rs0]）、あるいはソースレジスタrs1が使用され、かつ第１スロットと第２スロットのデータが一致していない場合（s1_valid AND !sl0eqsl1[rs1]）には、第２のスロット演算器ST11はイネーブルとなり、それ以外の場合は、ディスエーブルとなることを示している。
【００３９】
式（３）は、第３のスロット演算器ST12がイネーブルとディスエーブルとなる場合を示し、式（４）は、第４のスロット演算器ST13がイネーブルとディスエーブルとなる場合を示している。
【００４０】
因みに、式（３）は、命令が有効であって（inst_valid）、さらにソースレジスタrs0が使用され、かつ第１スロットと第３スロットのデータが一致していない場合（s0_valid AND !sl0eqsl2[rs0]）、あるいはソースレジスタrs1が使用され、かつ第１スロットと第３スロットのデータが一致していない場合（s1_valid AND !sl0eqsl2[rs1]）には、第３のスロット演算器ST12はイネーブルとなり、それ以外の場合は、ディスエーブルとなることを示している。
【００４１】
式（４）は、命令が有効であって（inst_valid）、さらにソースレジスタrs0が使用され、かつ第１スロットと第４スロットのデータが一致していない場合（s0_valid AND !sl0eqsl3[rs0]）、あるいはソースレジスタrs1が使用され、かつ第１スロットと第４スロットのデータが一致していない場合（s1_valid AND !sl0eqsl3[rs1]）には、第３のスロット演算器ST13はイネーブルとなり、それ以外の場合は、ディスエーブルとなることを示している。
【００４２】
以上は、命令が、対象データが２つである命令（2 operand命令）を例としているが、命令は、対象データが１つである命令でもよく、さらに、対象データが３つである命令（3 operand命令）の場合は、式（２）から式（４）において、 ”OR (s2_valid AND !sl0eqslx[rs2])”（ここで、xは、1,2,3のいずれか） という条件の項が追加される。  
また、演算に使用されるソースレジスタは、実行命令において指定されるので、上記の式において、レジスタ番号の部分は、命令に応じて変化する。
【００４３】
ステージ１における４つのスロット演算器ST10,ST11,S12,ST13への、イネーブル信号(enable[0:3])は、命令の演算と共にパイプライン処理部の各ステージを通って供給されてゆく。各スロット演算器をディスエーブルにする方法としては、クロックゲーティング技術等の公知の技術手法を用いて行われ、結果として、消費電力が削減される。
【００４４】
例えば、スロット演算器をディスエーブルにする方法としては、ディスエーブルするスロット演算器へのクロックの供給を停止、あるいは、各スロット演算器への入力されるデータを固定する、等の方法がある。
【００４５】
（データの比較結果の記録時のイコール生成部の動作）
比較データ記憶部としてのイコール生成部４２は、SIMD演算の演算結果データを、レジスタファイル２２のデスティネーションレジスタ３２に書き込む時、対応する比較データレジスタ３３に比較データも書き込んで記憶させる。すなわち、比較データレジスタ３３には、各スロットのデータの比較結果が記録される。
【００４６】
上述したように、比較データレジスタ３３の比較データEB1,EB2,EB3は、レジスタファイル２２の対応するレジスタの第２から第４スロットSL1からSL3のデータが、プリファードスロットSL0のデータと一致するか否かを示すデータである。
【００４７】
イコール生成部４２は、次の式の内容を実行する論理回路により構成される。  
下記の式（５）に示すように、デスティネーションレジスタ３２のレジスタ番号をrdとし、第１から第４スロットのデータをslot0からslot3とし、デスティネーションレジスタrdの比較データEB1からEB3を、それぞれsl0eqsl1[rd]、sl0eqsl2[rd]、sl0eqsl3[rd]とする。デスティネーションレジスタrdの比較データEB1からEB3は、それぞれ次の式（６）から式（８）で示すものとして、記録される。enable[1], enable[2], enable[3]は、それぞれ、イネーブル生成部４１の出力が、命令の演算と共にパイプライン処理部の各ステージを通って供給される信号であり、そのスロット演算器がイネーブル（有効）であることを示し、!enable[1], !enable[2], !enable[3]は、それぞれ、そのスロット演算器がディスエーブル（動作停止）であることを示す。
【００４８】
register_file[rd] := { slot0, slot1, slot2, slot3 };        ・・・式（５）
sl0eqsl1[rd] := ( (slot0 == slot1) AND enable[1] ) OR !enable[1];         ・・・式（６）
sl0eqsl2[rd] := ( (slot0 == slot2) AND enable[2] ) OR !enable[2];         ・・・式（７）
sl0eqsl3[rd] := ( (slot0 == slot3) AND enable[3] ) OR !enable[3];         ・・・式（８）
ここで、式（６）は、第２スロット演算器が有効なときに第１スロット（プリファードスロット）のデータと第２スロットのデータが等しい場合( (slot0 == slot1) AND enable[1] )、あるいは第２スロット演算器がディスエーブル（無効）の場合（!enable[1]）は、sl0eqsl1[rd]（すなわちデスティネーションレジスタrdの比較データEB1）は、「１」とすることを意味する。それ以外の場合は、比較データEB1は、「０」となる。式（７）と式（８）も同様の意味である。
【００４９】
すなわち、イコール生成部４２は、SIMD演算の演算器２１の演算結果データをレジスタファイル２２に格納するときに、各スロットのデータと共に、各スロットの値がプリファードスロットSL0の値と一致したときには「１」で、一致しないときに「０」の比較データを記録する。
【００５０】
なお、各スロットのデータ比較は、レジスタファイル２２からのデータの読み出し時に行うことも可能であるが、回路遅延による性能劣化が発生するため、ここでは、各スロットのデータ比較は、回路遅延に比較的余裕がある、レジスタファイル２２への演算結果データの書き込み時に行っている。
【００５１】
以上のように、イコール生成部４２は、プリファードスロットに対応するスロット演算器の出力と、プリファードスロット以外のスロットに対応するスロット演算器の出力とを比較し、プリファードスロット以外のスロットの値がプリファードスロットの値と同じ（あるいは異なる）ことを示す比較データを、演算結果データに対応付けて記憶する。
【００５２】
さらに、イコール生成部４２は、ディスエーブルされたスロット演算器に対応するスロットの値はプリファードスロットの値と同じであるとして、比較データを、演算結果データに対応付けて記憶する。すなわち、スロット演算器がディスエーブル（動作停止）の場合（!enable[1],[2],[3]）も、そのスロット演算器に対応する比較データは、「１」とされる。
【００５３】
演算結果データをレジスタファイル２２に書き戻すときすなわち出力するときに、ディスエーブルされたスロット演算器のデータは、第１スロット（プリファードスロット）のデータと等しいので、ディスエーブルされたスロット演算器の出力データとして、第１スロットのデータが書き込まれる。すなわち、デスティネーションアドレス３２のデータは、次の式の通りとなる。
【００５４】
register_file[rd].slot0 := slot0;          ・・・式（９）
register_file[rd].slot1 := enable[1] ? slot1 : slot0;           ・・・式（１０）
register_file[rd].slot2 := enable[2] ? slot2 : slot0;           ・・・式（１１）
register_file[rd].slot3 := enable[3] ? slot3 : slot0;           ・・・式（１２）
この処理は、比較データレジスタ３３の各値を、対応するセレクタの選択信号として利用することによって、実行される。図２に示すように、例えば、比較データEB1が「１」である（すなわち第２のスロット演算器がディスエーブルである）とき、プリファードスロットSL0の値を選択して出力する。また、比較データEB1が「０」である（すなわち第２のスロット演算器がイネーブルである）ときは、第２のスロット演算器の出力を選択して、書き戻す。  
すなわち、ディスエーブルされた１又は２以上のスロット演算器の出力として、プリファードスロットの値が利用される。
【００５５】
以上のように、上述したプロセッサ１によれば、複数の要素データの演算を並列に行うSIMD演算を実行するとき、ある要素の入力データが、他の要素の入力データと同じ場合に、その要素についてスロット演算器をディスエーブルにし（すなわちスロット演算器による演算を行わず）、代わりに入力データが同じ要素の結果を使用することにより、プロセッサ１の低消費電力化が実現される。
【００５６】
また、上述したプロセッサ１は、スカラー演算時には、プリファードスロットのみが使用されて演算が行われるが、スカラー演算命令のときには、第２から第４のスロットに、プリファードスロットSL0のデータと同じデータを書き込むようにすれば、上述したプロセッサ１においてスカラー演算を実行するときも、低消費電力で実行可能となる。従来から、命令の中には、同じデータを他のレジスタに書き込む命令が存在するので、そのような命令を利用することにより、上述したプロセッサ１においてスカラー演算も容易に実行可能である。
【００５７】
（変形例）
上述した例では、演算結果をレジスタファイル２２に書き戻すときに、第１スロットと同じデータのスロットには、第１スロットのデータを選択して出力して、レジスタファイル２２に書き戻していた。
【００５８】
この変形例では、その同じデータの場合に、レジスタファイルに書き戻すときに第１スロットのデータを選択して書く代わりに、レジスタファイル２２からデータを読み出すときに、比較データに基づいて、第１スロットのデータはスロット演算器に書き込まれる。
【００５９】
図４は、その変形例に係る回路を説明するための図である。演算器２１のデータ入力部に、３つのセレクタSL11,SL12,SL13が設けられている。ソースレジスタ３１の４つのスロットデータ中、第１スロットのデータは、スロット演算器ST10にそのまま供給される。第２、第３及び第４スロットのデータは、それぞれ、セレクタSL11,SL12,SL13の一方の入力端子に供給される。セレクタSL11,SL12,SL13のそれぞれの他方の入力端子には、第１スロットのデータが供給されている。比較データレジスタ３３の比較データEB1,EB2,EB3は、それぞれセレクタSL11,SL12,SL13に供給される。
【００６０】
なお、このセレクタSL11,SL12,SL13からなるセレクタ群は、命令によって指定され得るソースレジスタの数だけ設けられる。  
変形例に係るプロセッサは、読み出したソースレジスタ３１の比較データの各ビットに応じて、第２から第４スロット演算器ST11,ST12,ST13がプリファードスロットのデータあるいは対応するスロットデータを選択するように動作する。
【００６１】
比較データEB1が「１」のときは、プリファードスロットと第２スロットのデータが一致しているので、セレクタSL11は、プリファードスロットのデータを選択してスロット演算器ST11へ供給する。比較データEB1が「０」のときには、プリファードスロットと第２スロットのデータが一致していないので、セレクタSL11は、第２スロットのデータを選択してスロット演算器ST11へ供給する。
【００６２】
以上のように、本変形例では、データをレジスタファイル２２に書き戻すときに、プリファードスロットと同じデータの書き込みは行わず、レジスタファイル２２からデータを読み出すときに、プリファードスロットのデータを選択してスロット演算器に供給する。
【００６３】
以上のように、上述した実施の形態及び変形例に係るプロセッサによれば、命令コード体系に命令の追加をすることなく、モード切り換え等もする必要なく、低消費電力でスカラー演算も実行可能なSIMD演算を実行することができる。
【００６４】
なお、上述した例では、プリファードスロットと他のスロットとの比較を例にして説明したが、比較対象スロットとしての所定のスロットは、プロファードスロット以外のスロットでもよい。  
さらに、比較対象スロットは、１つのスロットだけでなくでもよく、例えば、全てのスロット同士の比較を行うようにしてもよい。  
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【符号の説明】
【００６５】
１  プロセッサ、２  バス、１１  演算部、１２  ローカルメモリ、２１  演算器、２２  レジスタファイル、３１  ソースレジスタ、３２  デスティネーションレジスタ、３３  比較データレジスタ、３３Ａ  比較データレジスタ群、４１  イネーブル生成部、４２  イコール生成部
【図１】
2011039982.tif 000003
【図２】
2011039982.tif 000004
【図３】
2011039982.tif 000005
【図４】
2011039982.tif 000006