JP2008102715A - 演算装置 - Google Patents

演算装置 Download PDF

Info

Publication number
JP2008102715A
JP2008102715A JP2006284231A JP2006284231A JP2008102715A JP 2008102715 A JP2008102715 A JP 2008102715A JP 2006284231 A JP2006284231 A JP 2006284231A JP 2006284231 A JP2006284231 A JP 2006284231A JP 2008102715 A JP2008102715 A JP 2008102715A
Authority
JP
Japan
Prior art keywords
register
data
overflow
general
bit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2006284231A
Other languages
English (en)
Inventor
Atsushi Tanabe
田辺  淳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP2006284231A priority Critical patent/JP2008102715A/ja
Priority to US11/870,173 priority patent/US7917566B2/en
Publication of JP2008102715A publication Critical patent/JP2008102715A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations

Abstract

【課題】演算途中の結果が汎用レジスタのビット幅を超えるような演算においても、チップに対する占有面積の増加を抑えて、高精度の演算が可能な演算装置を提供する。
【解決手段】複数の汎用レジスタ12は、第1のビット幅を有している。演算器13は、第1、第2の入力端を有し、少なくとも第1の入力端が第1のビット幅より広い第2のビット幅を有し、汎用レジスタ12から第1、第2の入力端に供給されるデータを演算する。第1のビット幅より狭いビット幅を有する第1、第2のレジスタov0、ov1は、演算器13による演算の結果、あふれた桁のデータをオーバーフローデータとして保持し、演算器13の少なくとも一方の入力端に、上位ビットとして保持したオーバーフローデータを供給する。
【選択図】 図1

Description

本発明は、例えばマイクロプロセッサに適用される演算装置に係わり、特に、高精度の演算結果を得ることが可能な演算装置に関する。
プロセッサは、通常、発行された命令に応じて、汎用レジスタに一時的に保持されたデータを取り出して演算する。例えば32ビットの汎用レジスタと演算器を持つプロセッサにより、例えば式(1)を演算する場合を考える。プログラム(2)は、式(1)を演算するアセンブラ命令の例を示している。
d=(a+b+c)>>2 …(1)
ここで、R0=a,R1=b,R2=c,R5=d
ADD R5, R0, R1
ADD R5, R5, R2
SRL R5, R5, 2 …(2)
ここで、ADDは、加算命令であり、2番目と3番目に記載された汎用レジスタの内容を加算し、1番目に記載された汎用レジスタに代入することを示している。例えばプログラム(2)の1行目に記載されたADD命令は、汎用レジスタR0とR1に保持されたデータを加算し、汎用レジスタR5に保持することを示している。2行目のADD命令は、汎用レジスタR5とR2のデータを加算して汎用レジスタR5に保持することを示している。3行目のSRL命令は、2番目に示された汎用レジスタの内容を、3番目に記載された定数値だけ右方向(LSB方向)へシフトして1番目に示された汎用レジスタに保持するシフト命令を示している。
上記プログラムをプロセッサで実行した場合の演算精度は、汎用レジスタのビット幅と演算器のビット幅に依存する。すなわち、32ビットのプロセッサにより、32ビットのデータ“a”と32ビットのデータ“b”を加算すると、場合によっては桁上がりが生じる。この場合、32ビットの汎用レジスタにより、演算結果を正しく保持することはできない。このように、桁あふれ(オーバーフロー)が発生するデータを演算する場合、32ビットよりビット幅が広い、例えば40ビットの汎用レジスタと演算器を使用する必要がある。しかし、最近のプロセッサは、多数の汎用レジスタを有している。このため、汎用レジスタ及び演算器のビット幅を40ビットに設定した場合、プロセッサにおける汎用レジスタの占有面積が大きくなるという問題がある。
ところで、32ビットの“a”,“b”,“c”,“d”という変数がある場合において、例えば式(3)に示すような演算を行うとする。
d=(a+b+c)/4 …(3)
この場合、最終的な演算結果“d”の値は、必ず32ビット以下の値となるが、“a”,“b”,“c”の値によっては、演算の途中で32ビットを越える場合がある。このように演算途中においてのみ、オーバーフローが発生する場合、必ずしも汎用レジスタのビット幅を増加させる必要は無い。この場合、演算器の中間結果を保持する例えば33ビットのパイプラインレジスタと、この33ビットのレジスタの内容と40ビットのレジスタのデータとを加算し、この40ビットのレジスタに保持させる40ビット×33ビットの加算器とからなるアキュムレータと、40ビットのレジスタと33ビットのレジスタのデータの一方を選択するセレクタを用いることが多い。
式(4)は、式(3)を例えばC言語で記述した例を示し、プログラム(5)は、式(4)を演算するためのアセンブラ命令の例を示している。
d=(a+b+c)>>2 …(4)
ここで、R0=a,R1=b,R2=c,R5=d
ACC R0、R1
ACC R2
ACCSRL 2
ACCMOV R5 …(5)
上記プログラム(5)において、ACCはアキュムレータによる累積命令、ACCSRLはアキュムレータの内容を定数値だけ右方向にシフトして再度アキュムレータに入れる命令、ACCMOVはアキュムレータの内容を指定された汎用レジスタにコピーする命令とする。例えばプログラム(5)の1行目は、汎用レジスタR0とR1のデータを累積することを示し、2行目は、前記累積結果にさらに汎用レジスタR2のデータを累積することを示している。3行目のACCSRLは、アキュムレータのデータを右方向に2ビットシフトすることを示し、ACCMOVは、アキュムレータのデータを汎用レジスタR5に格納することを示している。
上記アキュムレータを用いることにより、40ビット×33ビットの加算器を使って高速に演算することができる。しかし、この場合、アキュムレータは、演算途中のデータを保持することが可能なビット幅の大きなレジスタと加算器が必要であり、多数のアキュムレータを持つとチップに対するアキュムレータの占有面積が増加する。また、アキュムレータを増やした場合、パイプラインのステージが増加し、構造が複雑になる。さらに、アキュムレータから汎用レジスタ又はメモリへの取り出し命令が必要となるという問題がある。
尚、上記演算装置に関連する技術として、演算ユニットにおいてオーバーフローが発生した場合、第1入力データの上位ビットをインクリメント又はデクリメントする演算補正回路と、演算ユニット及び演算補正回路の出力を受けて、Mビットの演算結果を出力する出力データ設定回路を備えた演算装置が例えば特許文献1に示されている。
また、演算精度を可変するとともに、有効桁数を少なくすることにより、消費電力を低減した演算装置が例えば特許文献2に示されている。
特開2001−109613号公報 特開平07−146777号公報
本発明は、演算途中の結果が汎用レジスタのビット幅を超えるような演算においても、チップに対する占有面積の増加を抑えて、高精度の演算が可能な演算装置を提供しようとするものである。
本発明の第1の態様は、第1のビット幅を有する複数の汎用レジスタと、第1、第2の入力端を有し、少なくとも前記第1の入力端が前記第1のビット幅より広い第2のビット幅を有し、前記汎用レジスタから前記第1、第2の入力端に供給されるデータを演算する演算器と、前記演算器による演算の結果、あふれた桁のデータをオーバーフローデータとして保持し、前記演算器の少なくとも一方の入力端に保持した前記オーバーフローデータを上位ビットとして供給する少なくとも1つのレジスタとを具備する演算装置である。
本発明によれば、演算途中の結果が汎用レジスタのビット幅を超えるような演算においても、チップに対する占有面積の増加を抑えて、高精度の演算が可能な演算装置を提供できる。
以下、本発明の実施の形態について、図面を参照して説明する。
(第1の実施形態)
図1は、第1の実施形態を示している。図1に示す演算装置11において、汎用レジスタ部12は、ビット幅が例えば32ビットの汎用レジスタを、例えば32個有している。すなわち、汎用レジスタ部12は、汎用レジスタR0〜R31を有している。選択された汎用レジスタのデータは、パイプラインレジスタPR0、PR1に保持される。これらレジスタPR0、PR1は、演算器としての算術論理演算ユニット(ALU)13の第1、第2の入力端に接続されている。ALU13は、第1、第2の入力端のビット幅がそれぞれ例えば40ビットである。すなわち、このALU13は40ビット×40ビットのデータを演算可能とされている。このALU13の出力端は、第1、第2のオーバーフローレジスタov0、ov1に接続されるとともに、パイプラインレジスタPR2に接続されている。
第1、第2のオーバーフローレジスタov0、ov1は、ビット幅が例えば8ビットのレジスタであり、ALU13の出力データの上位8ビットを記憶する。第1のオーバーフローレジスタov0の出力端は、ALU13の第1の入力端の上位8ビットに接続され、第2のオーバーフローレジスタov1の出力端は、ALU13の第2の入力端の上位8ビットに接続されている。
また、パイプラインレジスタPR2の出力端は、汎用レジスタ部12に接続されている。
ALU13の第1、第2の入力端のビット幅は、40ビットに限定されるものではなく、第1、第2のオーバーフローレジスタのビット幅は、8ビットに限定されるものではない。ALU13と第1、第2のオーバーフローレジスタのビット幅は、適宜設定することが可能である。また、オーバーフローレジスタの数は、2個に限定されるものではなく、2個以上とすることも可能である。
第1の実施形態において、ALU13は、演算を行う際、第1、第2のオーバーフローレジスタov0、ov1からのデータを、汎用レジスタからのデータの上位に連結して演算する。図1に示す例の場合、32ビットの汎用レジスタのデータに、8ビットの第1、第2のオーバーフローレジスタov0、ov1のデータを連結し、40ビットのデータとして演算する。さらに、ALU13の演算結果のうち、32ビットより上位の8ビットは、第1、第2のオーバーフローレジスタov0、ov1のいずれかに格納される。
上記構成の演算装置により、例えば式(6)を演算する場合の動作について説明する。
d=(a+b+c)>>2 …(6)
プログラム(7)は、上記式(6)を演算するためのアセンブラ命令の例を示している。
ADD{ov0,nul,nul}R5,R0,R1
ADD{ov0,ov0,nul}R5,R5,R2
SRL{nul,ov0,nul}R5,R5,2 …(7)
ここで、R0=a,R1=b,R2=c,R5=d
式(7)において、“ov0”は、第1のオーバーフローレジスタov0を使用することを示し、“nul”は、第1、第2のオーバーフローレジスタov0、ov1のいずれも使用しないことを示している。
式(7)の1行目のADD命令において、汎用レジスタR0,R1は、ビット幅が32ビットであり、オーバーフローが発生しないため、第1、第2のオーバーフローレジスタは使用しない。すなわち、“nul”はオーバーフローレジスタを使用しないことを示している。また、加算結果が供給される汎用レジスタR5は、オーバーフローが発生する可能性があるため、オーバーフローしたデータを第1のオーバーフローレジスタov0に保持する。“ov0”は、第1のオーバーフローレジスタov0にデータを保持することを示している。
2行目のADD命令は、汎用レジスタR5(a+b)とR2(c)の加算を行う際、汎用レジスタR5のデータの上位に第1のオーバーフローレジスタov0の値を連結して加算し、演算結果を再度汎用レジスタR5に保持することを示し、その際、オーバーフローしたデータが再度第1のオーバーフローレジスタov0に保持されることを示している。
3行目のSRL命令は、汎用レジスタR5のデータ(a+b+c)の上位に、第1のオーバーフローレジスタov0のデータを連結して右方向にシフトし、この結果を再度汎用レジスタR5に保持することを示している。シフト後のデータは、32ビット以下になることが保障されるため、シフト後のデータは第1のオーバーフローレジスタov0に保持されないことを示している。
尚、式(6−1)は、式(6)を例えばC言語で記述した他の例を示している。
d=(a+b+c)>>2//overflow …(6−1)
ここで、“a”“b”“c”“d”は、ユーザが、変数として例えば整数で、32ビットのデータであることを予め定義しているものとする。また、“//”より右側に、例えばコメントとして記載された“overflow”は、式(6−1)が演算途中でオーバーフローすることを示している。コンパイラは、“overflow”の記述がある場合、上記プログラム(7)に示すように、演算途中においてオーバーフローが発生する可能性がある命令に第1又は第2のオーバーフローレジスタを割り付ける。
オーバーフローの有無を示す記載は、コメントとして記載する場合に限定されるものではなく、コンパイラにより判別可能な記載であればよい。
また、オーバーフローの有無は、ユーザにより定義する場合に限定されるものではなく、コンパイラが自動的に判別してオーバーフローレジスタを割り付けることも可能である。
上記第1の実施形態によれば、プロセッサの命令により、汎用レジスタと組み合わせるオーバーフローレジスタを指定し(又はオーバーフローレジスタを使用しないことを明示し)、演算途中においてオーバーフローしたデータをオーバーフローレジスタに保持し、このオーバーフローレジスタのデータを演算時に再度利用している。このため、演算途中において、汎用レジスタのビット幅、例えば32ビットを超える場合においても、演算精度を低下させることなく演算することが可能である。
しかも、第1の実施形態において、汎用レジスタのビット幅を増加せず、ALU13のビット幅を増加するとともに、オーバーフローレジスタを設けることにより、チップに対する演算装置の占有面積の増加を抑制している。
すなわち、一般に、オーバーフローレジスタは、途中の演算結果を保持するときだけ使用される。このため、オーバーフローレジスタの数は、汎用レジスタの数に比べて少ない数で十分な場合が多い。また、ALU13は最大の演算精度のビット幅を持つ必要があるが、汎用レジスタR0〜R31は、ALU13と同一のビット幅を有する必要はなく、ALU13のビット幅より少ないビット幅でよい。このため、従来のように、例えば40ビットの汎用レジスタを32個配置した場合と、第1の実施形態のように、32ビットの汎用レジスタを32個と8ビットのオーバーフローレジスタが2個を配置した場合とを比べた場合、次式のようになる。
40×32−(32×32+8×2)=240ビット
したがって、第1の実施形態によれば、従来に比べて240ビット分のフリップフロップを削減することが可能であり、演算装置のチップ占有面積を低減することができる。
尚、第1の実施形態は、加算命令とシフト命令を使った動作例のみを説明した。しかし、第1の実施形態は、一般的なプロセッサで実行される演算命令の全てに適用することが可能である。
(第2の実施形態)
図2は、第2の実施形態を示している。図2において、図1と同一部分には同一符号を付している。
第2の実施形態に係る演算装置は、主として汎用レジスタ部12、ALU22、セレクタ23、加算器24、第1、第2のオーバーフローレジスタov0、ov1、第3のオーバーフローレジスタGRを有している。
汎用レジスタ部12は、例えば32個の汎用レジスタR0〜R31により構成されている。各汎用レジスタR0〜R31は、31ビットにより構成されている。ALU22は、第1の入力端が40ビット、第2の入力端が32ビットにより構成されている。第1の入力端には、32ビットのパイプランレジスタPR0と8ビットの第1、第2のオーバーフローレジスタov0、ov1の出力データが供給される。第2の入力端には、32ビットのパイプランレジスタPR0の出力データが供給される。ALU22の出力端は、パイプランレジスタPR2の入力端に接続されるとともに、第3のオーバーフローレジスタGRの入力端、及びセレクタ23の一方入力端に接続される。
パイプラインレジスタPR2の出力端は、汎用レジスタ部12に接続されている。第3のオーバーフローレジスタGRは、1ビットのレジスタであり、ALU22の演算結果のうち、汎用レジスタのビット幅を超えた1ビットを保持する。
加算器24の第1、第2の入力端は、共に8ビットにより構成されている。加算器24の第1の入力端は、第1のオーバーフローレジスタov0の出力端に接続され、第2の入力端は、第2のオーバーフローレジスタov1の出力端に接続されている。さらに、加算器24の第3の入力端は、第3のオーバーフローレジスタGRの出力端に接続されている。この加算器24は、第1、第2の入力端に供給されたデータを加算するとともに、この加算結果に第3の入力端に供給されたデータを加算する。
この加算器24の出力端は、前記セレクタ23の他方入力端に接続されている。このセレクタ23の出力端は、第1、第2のオーバーフローレジスタの入力端に接続されている。
上記構成の演算装置により、前記式(6)を演算する場合の動作について説明する。
プログラム(8)は、上記式(6)を演算するアセンブラ命令の例を示している。
ADD{ov0,nul}R5,R0,R1
ADD{ov0,ov0}R5,R5,R2
SRL{nul,ov0}R5,R5,2 …(8)
ここで、R0=a,R1=b,R2=c,R5=d
第2の実施形態において、第1の実施形態と異なる点は、汎用レジスタの値を演算する演算器22の2つの入力のうち、第1の入力端だけに第1、第2のオーバーフローレジスタov0、ov1のデータが供給されるようになっている点である。このため、第1の実施形態は、最大の演算精度を有する2つのデータを入力するため、第1、第2の入力端共、40ビットにより構成されていたのに対して、第2の実施形態は、第1の入力端のみ40ビットにより構成され、第2の入力端は汎用レジスタR0〜R31と同様のビット幅、すなわち、32ビットにより構成されている。このため、ALU22の面積を削減することが可能である。
プログラム(8)に示す例の場合、ALU22の2つの入力端のうち、第1の入力端だけがオーバーフローレジスタを指定できるようになっている。すなわち、プログラム(8)に示すアセンブラの記述において、デスティネーションレジスタとALU22の第1の入力端にデータを供給する汎用レジスタのみがオーバーフローレジスタを指定可能とされている。
例えばプログラム(8)の1行目に記載されたADD命令において、デスティネーションレジスタとしての汎用レジスタR5と、ALU22の第1の入力端にデータを供給する汎用レジスタR0のみがオーバーフローレジスタを使用可能とされている。しかし、このADD命令において、汎用レジスタR0は32ビット幅であるため、オーバーフローレジスタは使用しない。すなわち、“nul”はオーバーフローレジスタを使用しないことを示している。一方、汎用レジスタR5はオーバーフローが発生する可能性があるため、オーバーフローしたデータをオーバーフローレジスタに保持する必要がある。すなわち、“ov0”は、オーバーフローしたデータを第1のオーバーフローレジスタov0に保持することを示している。
プログラム(8)の2行目の記述において、デスティネーションレジスタとしての汎用レジスタR5と、ALU22の第1の入力端にデータを供給する汎用レジスタR5に対応して“ov0”が記述されている。すなわち、両汎用レジスタR5、R5は、共に第1のオーバーフローレジスタov0を使用することを示している。
プログラム(8)の3行目の記述において、デスティネーションレジスタとしての汎用レジスタR5に対応して“nul”が記述され、ALU22の第1の入力端にデータを供給する汎用レジスタR5に対応して“ov0”が記述されている。すなわち、シフト結果が保持される汎用レジスタR5は、オーバーフローが発生しないため、オーバーフローレジスタを使用しないことを示している。
第3のオーバーフローレジスタGRは、ALU22により汎用レジスタ同士の演算を行った結果、汎用レジスタのビット幅を超えた1ビットのデータを保持する。また、加算器24は演算途中において、第1、第2のオーバーフローレジスタov0、ov1のデータ及び第3のオーバーフローレジスタGRのデータを加算する。
式(9)は、演算途中において、2つの汎用レジスタのビット幅を超えるデータ同士を演算する必要がある場合を示している。
e=((a*3+b)+(c*3+d))>>3 …(9)
プログラム(10)は、上記式(9)演算するアセンブラ命令の例を示している。
MUL{ov0,nul}R5,R0,3
ADD{ov0,ov0}R5,R5,R1
MUL{ov1,nul}R6,R2,3
ADD{ov1,ov1}R6,R6,R3
ADD{GR,nul}R5,R5,R6
ovadd{ov0,ov1,GR}
SRL{nul,ov0}R5,R5,3 …(10)
ここで、R0=a,R1=b,R2=c,R3=d,R6=e
プログラム(10)の1行目のMUL(乗算)命令は、汎用レジスタR0のデータ“a”に定数“3”を乗算し、この演算結果“a*3”を汎用レジスタR5に格納し、汎用レジスタR5からオーバーフローした上位ビットは、第1のオーバーフローレジスタov0に保持されることを示している。
2行目のADD命令は、汎用レジスタR5のデータ“a*3”と汎用レジスタR1のデータ“b”を加算し、この演算結果“a*3+b”を汎用レジスタR5に保持し、汎用レジスタR5の上位ビットは第1のオーバーフローレジスタov0に保持されることを示している。
3行目のMUL命令は、汎用レジスタR2のデータ“c”に定数“3”を乗算し、この演算結果“c*3”を汎用レジスタR6に保持し、汎用レジスタR6のオーバーフローした上位ビットが第2のオーバーフローレジスタov1に保持されていることを示している。
4行目のADD命令は、汎用レジスタR6のデータ“c*3”と、汎用レジスタR3のデータ“d”とを加算し、この演算結果“c*3+d”を汎用レジスタR6に保持し、汎用レジスタR6の上位ビットが第2のオーバーフローレジスタov1に保持されていることを示している。
4行目のADD命令を実行した時点において、“a*3+b”の演算結果が汎用レジスタR5に保持され、“c*3+d”の演算結果が汎用レジスタR6に格納されている。さらに、汎用レジスタR5の上位ビットは、第1のオーバーフローレジスタov0に保持され、汎用レジスタR6の上位ビットは、第2のオーバーフローレジスタov1に保持されている。
5行目のADD命令は、汎用レジスタR5とR6のデータを加算し、この加算結果を汎用レジスタR5に格納するとともに、1ビットのオーバーフローデータを第3のオーバーフローレジスタGRに格納することを示している。すなわち、(a*3+b)と(c*3+d)を加算するとき、32ビットを超える2つの値の加算が行われ、加算結果の1ビットが第3のオーバーフローレジスタGRに格納される。
6行目のovadd命令は、加算器24に対する命令であり、加算器24により、第1、第2のオーバーフローレジスタov0,ov1のデータと、第3のオーバーフローレジスタGRのデータを順次加算し、第1のオーバーフローレジスタov0に格納することを示している。これにより、R5+R6の上位ビットの演算結果が第1のオーバーフローレジスタov0に代入され、第1のオーバーフローレジスタov0と汎用レジスタR5の結果を連結させた値が、(a*3+b)+(c*3+d)の結果となる。
図3は、ADD{GR,nul}R5,R5,R6の演算結果が保持された汎用レジスタR5のデータと、ovadd{ov0,ov1,GR}の演算結果が保持された第1のオーバーフローレジスタov0のデータとを連結させる動作を模式的に示す図である。
7行目のSRL命令は、汎用レジスタR5と第1のオーバーフローレジスタov0のデータを右方向に3ビットシフトし、この結果を汎用レジスタR5に格納することを示している。
第2の実施形態によれば、ALU22の上位1ビットを保持する第3のオーバーフローレジスタGRと、第1、第2のオーバーフローレジスタov0,ov1のデータ同士、及び第3のオーバーフローレジスタGRのデータを加算する加算器24を設けている。このため、40ビット×32ビットのALU22と、8ビット×8ビットの加算器24を組み合わせて、40ビット同士の加算を行うことが可能となる。40ビット×32ビットのALU22と、8ビット×8ビットの加算器を合わせた面積は、一般に40ビット×40ビットのALUよりも小さい。したがって、チップに対する演算装置の占有面積を削減することが可能となる。
また、第2の実施形態は、ALU22の第1の入力端のみに第1、第2のオーバーフローレジスタov0,ov1のデータを供給している。このため、第1の実施形態に比べて、命令フォーマットのオーバーフローレジスタを指定するフィールドを削減することが可能である。
(第3の実施形態)
図4は、第3の実施形態を示している。第3の実施形態は、汎用レジスタとALUがSIMD(Single Instruction Multiple Data )演算を処理できるように構成されている点が、第1、第2の実施形態と相違する。
図4に示すSIMD演算装置30において、汎用ベクタレジスタ部31は、SIMDデータを保持することができるレジスタであり、32ビット×32ビットのビット幅を有している。この汎用ベクタレジスタ部31は、パイプレインレジスタ32、33にの入力端に接続されている。これらパイプレインレジスタ32、33は、共に32ビットのビット幅を有している。
パイプラインレジスタ32、33の出力端は、4並列ALU34、2並列ALU35に接続されている。4並列ALU34は、第1、第2の入力端が共に例えば10ビットにより構成された4つのALUを含み、各ALUの第1の入力端にパイプラインレジスタ32の出力データが供給され、第2の入力端にパイプラインレジスタ33の出力データが供給される。また、2並列ALU35は、第1、第2の入力端が共に例えば20ビットにより構成された2つのALUを含み、各ALUの第1の入力端にパイプラインレジスタ32の出力データが供給され、第2の入力端にパイプラインレジスタ33の出力データが供給される。4並列ALU34の出力端、及び2並列ALU35の出力端は、セレクタ36の入力端に接続されている。
このセレクタ36は、32ビットのビット幅を有している。4並列ALU34を構成する各ALUからそれぞれ出力される10ビットのデータのうち、下位8ビットはセレクタ36に供給される。また、2並列ALU35を構成する各ALUからそれぞれ出力される20ビットのデータのうち、下位16ビットはセレクタ36に供給される。セレクタ36は、4並列ALU34から供給される32ビットのデータと、2並列ALU35から供給される32ビットのデータのうちの一方を選択する。セレクタ36の出力端は、パイプラインレジスタ37の入力端に接続されている。このパイプラインレジスタ37は、32ビットのビット幅を有し、出力端は、前記汎用ベクタレジスタ部31に接続されている。
また、4並列ALU34を構成する各ALUからそれぞれ出力される10ビットのデータのうち上位2ビットと、2並列ALU35を構成する各ALUからそれぞれ出力される20ビットのデータのうち上位4ビットは、それぞれセレクタ38に供給される。このセレクタ38は、例えば8ビットのビット幅を有し、4並列ALU34から供給される8ビットのデータと、2並列ALU35から供給される8ビットのデータの一方を選択する。このセレクタ38の出力端は、第1、第2のオーバーフローレジスタov0,ov1の入力端に接続されている。
第1、第2のオーバーフローレジスタov0,ov1は、8ビットのビット幅を有し、セレクタ38から供給される8ビットのデータを保持する。第1、第2のオーバーフローレジスタov0,ov1から出力される8ビットのデータは、2ビットずつ4並列ALU34を構成する各ALUの第1、第2の入力端に2ビットずつ供給される。さらに、第1、第2のオーバーフローレジスタov0,ov1から出力される8ビットのデータは、4ビットずつ2並列ALU35を構成する各ALUの第1、第2の入力端に4ビットずつ供給される。
上記構成によれば、8ビットの第1、第2のオーバーフローレジスタov0,ov1により、8ビット×4並列SIMD演算を行う場合、4つの演算結果におけるオーバーフローをそれぞれ2ビットずつ保持することができる。また、第1、第2のオーバーフローレジスタov0,ov1により、16ビット×2並列SIMD演算を行う場合、2つの演算結果のオーバーフローを4ビットずつ保持できる。
以下に、8ビット×4並列SIMD演算を行う場合の動作について説明する。
この演算を行う際、汎用ベクタレジスタ部31は、32ビットが、8ビット×4に分割して使用され、8ビットのデータがそれぞれ4並列ALU34の各ALUに供給される。4並列ALU34による演算において、第1、第2のオーバーフローレジスタov0,ov1が使われない場合、すなわち、変数の定義通りの場合、8ビットのデータが10ビットに拡張されて使われる。また、第1、第2のオーバーフローレジスタov0,ov1を使う場合、第1、第2のオーバーフローレジスタov0,ov1に格納された8ビットのデータのうち、4つの演算器に対応した2ビットずつが、10ビットの入力データのうちの上位2ビットとして使用される。
4つのALUから出力された各10ビットのデータにおいて、演算結果を第1又は第2のオーバーフローレジスタov0,ov1に保持しない場合、各10ビットのデータのうち上位2ビットは破棄される。演算結果を第1又は第2のオーバーフローレジスタov0,ov1に保持する場合、各10ビットのデータのうち上位2ビットずつが結合され、8ビットのデータとして第1又は第2のオーバーフローレジスタov0,ov1に保持される。4つのALUから出力された各10ビットのデータのうち、下位8ビットは、32ビットのデータに結合されて、汎用ベクタレジスタ部31の指定した汎用ベクタレジスタに保持される。
式(11)は、SIMD演算に適用される式の例を示している。
d0=(a0+b0+c0)>>2
d1=(a1+b1+c1)>>2
d2=(a2+b2+c2)>>2
d3=(a3+b3+c3)>>2 …(11)
プログラム(12)は、式(11)を8ビット×4並列でSIMD演算する場合のアセンブラ命令の例を示している。
ADD.h{ov0,nul,nul}VR5,VR0,VR1
ADD.h{ov0,ov0,nul}VR5,VR5,VR2
SRL.h{nul,ov0,nul}VR5,VR5,2 …(12)
ここで、ADD.h、SRL.hは、8ビット×4並列のSIMD演算命令であり、ADD.hは、加算命令、SRL.hは、右方向への論理シフト命令である。VR0〜VR5は、汎用ベクタレジスタであり、具体的には次の通りである。
VR0=[a0,a1,a2,a3]
VR1=[b0,b1,b2,b3]
VR2=[c0,c1,c2,c3]
VR5=[d0,d1,d2,d3]
次に、8ビット×4並列SIMD演算の動作について説明する。
この演算が行われる場合、32ビットの汎用ベクタレジスタの内容が上記のように、8ビット×4に分割される。この8ビットのデータが、4並列ALU34を構成する各ALUに供給される。すなわち、プログラム(12)の1行目のADD.h命令の場合、汎用ベクタレジスタVR0、VR1のデータが4並列ALU34により加算される。ここで、演算結果を保持する汎用ベクタレジスタVR5はオーバーフローする可能性があるため、第1のオーバーフローレジスタov0が指定されている。
8ビット×4並列SIMD演算において、第1又は第2のオーバーフローレジスタov0,ov1を使う場合、8ビットの第1又は第2のオーバーフローレジスタov0,ov1の2ビットずつに分けられる。4並列ALU34を構成する各ALUの演算結果のうち上位2ビットは、第1のオーバーフローレジスタov0に2ビットずつ保持される。
一方、4つのALUから出力された各8ビットのデータは、セレクタ36、パイプレインレジスタ37を介して32ビットのデータに結合され、汎用ベクタレジスタ部31の指定された汎用ベクタレジスタVR5に保持される。
プログラム(12)の2行目のADD.h命令の場合、汎用ベクタレジスタVR5のデータとVR2のデータが加算される。このとき、汎用ベクタレジスタVR5から供給される4つのデータの上位に、第1のオーバーフローレジスタov0から供給される4つの2ビットのデータが連結され、10ビットのデータとして4つのALUの一方入力端に供給される。このADD命令の場合も、各ALUの演算結果のうち上位2ビットが第1のオーバーフローレジスタov0に2ビットずつ保持される。また、各ALUの演算結果のうち8ビットは結合されて32ビットのデータとされ、汎用ベクタレジスタ部31の指定した汎用ベクタレジスタVR5に保持される。
プログラム(12)の3行目のSRL.h命令の場合、汎用ベクタレジスタR5の4つのデータの上位に、第1のオーバーフローレジスタov0の2ビットずつのデータが結合され、10ビットのデータとして4つのALUの一方入力端に供給される。このSRL.h命令の演算結果はオーバーフローしないため、4つのALUからそれぞれ出力される8ビットのデータは結合されて、汎用ベクタレジスタVR5に格納される。
尚、上記説明は、8ビット×4並列SIMD演算であるが、16ビット×2並列SIMD演算の場合、第1、第2のオーバーフローレジスタov0,ov1は、4ビットずつに分けられ、20ビット×20ビットのALUの演算結果のうち、上位4ビットを保持する。また、第1、第2のオーバーフローレジスタov0,ov1に保持されたデータは、汎用ベクタレジスタから供給されるデータの上位に結合され、指定されたALUに供給される。
また、第1、第2のオーバーフローレジスタov0,ov1を使用しない場合、8ビットのデータが10ビットに拡張され,16ビットのデータが20ビットに拡張されて使われる。
また、演算結果を第1又は第2のオーバーフローレジスタov0,ov1に保持しない場合、4つのALUから出力された各10ビットのデータのうち上位2ビットは破棄され、2つのALUから出力された各20ビットのデータのうち上位4ビットは破棄される。
従来のSIMD演算器は、演算途中のデータの精度が低くなることにより、SIMD化が制限されることが多い。例えば、8ビット×4並列のSIMD演算において、符号付変数は−128〜127の値しかとることができない。このため、演算途中の結果が、前記値を超えた場合、一度、途中の演算結果を16ビットのデータに拡張してから再度演算することが一般的である。この場合、16ビット×2並列のSIMD演算しか行えず、性能が大きく低下してしまう。しかも、8ビットから16ビットへデータを拡張するための命令が必要となるという問題を有している。
これに対して、第3の実施形態によれば、第1、第2のオーバーフローレジスタov0,ov1を用いることにより、演算途中のデータのビット幅を変えずに、8ビット×4並列、又は16ビット×2並列のSIMD演算を行うことが可能となる。しかも、第1、第2のオーバーフローレジスタov0,ov1やセレクタ38は、僅かな面積である。このため、チップに対する少ない面積の増加によってSIMD演算の性能を向上させることができる。
尚、第3の実施形態は、SIMD演算回路に第1の実施形態と同様の第1、第2のオーバーフローレジスタov0,ov1を組み合わせた場合について説明した。しかし、これに限定されるものではなく、SIMD演算回路に、例えば第2の実施形態と同様に、各ALUの上位1ビットを保持する第3のオーバーフローレジスタと、第1、第2のオーバーフローレジスタのデータ、及び第3のオーバーフローレジスタのデータを加算する加算器とを組み合わせることも可能である。
また、SIMD演算回路は、2並列、4並列の回路を1つずつ合計2個設けた場合について説明したが、これに限定されるものではなく、例えば8並列の回路を1つ用いたり、2並列、4並列、8並列の回路の3つを用いたりすることも可能である。一般には、汎用ベクタレジスタのビット幅を2等分したデータを演算する2個(nは、1以上の自然数)の演算回路を、1組以上用いることが可能である。このように、並列数及び並列回路の数は、汎用ベクタレジスタのビット幅、及び演算精度に応じて変更可能なことは言うまでもない。
その他、本発明の要旨を変更しない範囲で種々変形実施可能なことは勿論である。
第1の実施形態に係る演算装置を示す回路構成図。 第2の実施形態に係る演算装置を示す回路構成図。 第2の実施形態の動作を模式的に示す図。 第3の実施形態に係る演算装置を示す回路構成図。
符号の説明
11…演算装置、12…汎用レジスタ部、R0〜R31…汎用レジスタ、13…ALU、ov0,ov1…第1、第2のオーバーフローレジスタ、23…セレクタ、24…加算器、GR…第3のオーバーフローレジスタ、30…SIMD演算装置、31…汎用ベクタレジスタ部、34…4並列ALU、35…2並列ALU。

Claims (5)

  1. 第1のビット幅を有する複数の汎用レジスタと、
    第1、第2の入力端を有し、少なくとも前記第1の入力端が前記第1のビット幅より広い第2のビット幅を有し、前記汎用レジスタから前記第1、第2の入力端に供給されるデータを演算する演算器と、
    前記演算器による演算の結果、あふれた桁のデータをオーバーフローデータとして保持し、前記演算器の少なくとも一方の入力端に保持した前記オーバーフローデータを上位ビットとして供給する少なくとも1つのレジスタと
    を具備する演算装置。
  2. 前記少なくとも1つのレジスタは、保持した前記オーバーフローデータを前記演算器の前記第1、第2の入力端にオーバーフローデータとして供給することを特徴とする請求項1記載の演算装置。
  3. 前記演算器による演算の結果、あふれた1ビットのデータを記憶するレジスタと、
    前記少なくとも2つのレジスタに保持されたオーバーフローデータと、前記レジスタに保持された1ビットのデータを加算する加算器と
    をさらに具備することを特徴とする請求項1記載の演算装置。
  4. 前記汎用レジスタは、汎用ベクタレジスタであり、
    前記演算器は、前記汎用ベクタレジスタのビット幅を2等分したデータを演算する2(nは、1以上の自然数)個の演算器と、
    前記2個の演算器の演算の結果、あふれたデータをオーバーフローデータとして前記少なくとも1つのレジスタに供給するセレクタと
    をさらに具備することを特徴とする請求項1記載の演算装置。
  5. 前記汎用ベクタレジスタと、前記2個の演算器はSIMD(Single Instruction Multi Data)演算回路を構成することを特徴とする請求項4記載の演算装置。
JP2006284231A 2006-10-18 2006-10-18 演算装置 Pending JP2008102715A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2006284231A JP2008102715A (ja) 2006-10-18 2006-10-18 演算装置
US11/870,173 US7917566B2 (en) 2006-10-18 2007-10-10 Arithmetic device capable of obtaining high-accuracy calculation results

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006284231A JP2008102715A (ja) 2006-10-18 2006-10-18 演算装置

Publications (1)

Publication Number Publication Date
JP2008102715A true JP2008102715A (ja) 2008-05-01

Family

ID=39437003

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006284231A Pending JP2008102715A (ja) 2006-10-18 2006-10-18 演算装置

Country Status (2)

Country Link
US (1) US7917566B2 (ja)
JP (1) JP2008102715A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8918446B2 (en) 2010-12-14 2014-12-23 Intel Corporation Reducing power consumption in multi-precision floating point multipliers

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010160622A (ja) * 2009-01-07 2010-07-22 Toshiba Corp シミュレータ
JP7159696B2 (ja) * 2018-08-28 2022-10-25 富士通株式会社 情報処理装置,並列計算機システムおよび制御方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05250142A (ja) * 1992-03-10 1993-09-28 Nec Corp 固定小数点プロセッサ
JPH07253965A (ja) * 1994-03-16 1995-10-03 Fujitsu Ltd 積和演算器
JP2002236581A (ja) * 2001-02-08 2002-08-23 Matsushita Electric Ind Co Ltd 演算回路、演算方法、及びプログラム記録媒体
JP2004013519A (ja) * 2002-06-06 2004-01-15 Oki Electric Ind Co Ltd 演算方法および演算回路

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06175821A (ja) * 1992-12-10 1994-06-24 Fujitsu Ltd 演算装置
JP3487903B2 (ja) * 1993-11-12 2004-01-19 松下電器産業株式会社 演算装置及び演算方法
JPH07146777A (ja) 1993-11-24 1995-06-06 Matsushita Electric Ind Co Ltd 演算装置
US6282558B1 (en) * 1997-12-19 2001-08-28 Matsushita Electric Industrial Co., Ltd. Data processing system and register file
US6151616A (en) * 1999-04-08 2000-11-21 Advanced Micro Devices, Inc. Method and circuit for detecting overflow in operand multiplication
JP2001109613A (ja) 1999-10-05 2001-04-20 Mitsubishi Electric Corp 演算装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05250142A (ja) * 1992-03-10 1993-09-28 Nec Corp 固定小数点プロセッサ
JPH07253965A (ja) * 1994-03-16 1995-10-03 Fujitsu Ltd 積和演算器
JP2002236581A (ja) * 2001-02-08 2002-08-23 Matsushita Electric Ind Co Ltd 演算回路、演算方法、及びプログラム記録媒体
JP2004013519A (ja) * 2002-06-06 2004-01-15 Oki Electric Ind Co Ltd 演算方法および演算回路

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8918446B2 (en) 2010-12-14 2014-12-23 Intel Corporation Reducing power consumption in multi-precision floating point multipliers

Also Published As

Publication number Publication date
US7917566B2 (en) 2011-03-29
US20080256331A1 (en) 2008-10-16

Similar Documents

Publication Publication Date Title
US8271571B2 (en) Microprocessor
JP4277042B2 (ja) 演算処理装置
JP4374363B2 (ja) ビットフィールド操作回路
JP2018124681A (ja) 演算処理装置、情報処理装置、方法、およびプログラム
US8386547B2 (en) Instruction and logic for performing range detection
JP2008071130A (ja) Simd型マイクロプロセッサ
JP5640081B2 (ja) 飽和を伴う整数乗算および乗算加算演算
US8484520B2 (en) Processor capable of determining ECC errors
JP2008102715A (ja) 演算装置
US9477442B2 (en) Processor and control method of processor
CN100378651C (zh) 单指令多数据数据处理系统内的结果分割
US20070198811A1 (en) Data-driven information processor performing operations between data sets included in data packet
US20200192633A1 (en) Arithmetic processing device and method of controlling arithmetic processing device
JP6378515B2 (ja) Vliwプロセッサ
CN113485751A (zh) 执行伽罗瓦域乘法的方法、运算单元和电子装置
JP6497250B2 (ja) 演算処理装置および演算処理装置の制御方法
JP2004220377A (ja) リコンフィギュラブル回路とそれを利用可能な集積回路装置およびデータ変換装置
JP2004013519A (ja) 演算方法および演算回路
JP5813484B2 (ja) Vliwプロセッサと命令構造と命令実行方法
KR100315303B1 (ko) 디지탈 신호 처리기
JP5115307B2 (ja) 半導体集積回路
JP2008003663A (ja) データ処理装置、データ処理方法
JP2008204356A (ja) リコンフィギャラブル回路
JP3894135B2 (ja) 情報処理装置
JP2006155102A (ja) 演算処理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090804

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110927

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20120207