JP2006529043A - 飽和あり、または飽和なしで、オペランドの積和を実行するプロセッサ簡約ユニット - Google Patents
飽和あり、または飽和なしで、オペランドの積和を実行するプロセッサ簡約ユニット Download PDFInfo
- Publication number
- JP2006529043A JP2006529043A JP2006532846A JP2006532846A JP2006529043A JP 2006529043 A JP2006529043 A JP 2006529043A JP 2006532846 A JP2006532846 A JP 2006532846A JP 2006532846 A JP2006532846 A JP 2006532846A JP 2006529043 A JP2006529043 A JP 2006529043A
- Authority
- JP
- Japan
- Prior art keywords
- processor
- unit
- reduction unit
- accumulator
- reduction
- 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
Links
- 230000009467 reduction Effects 0.000 title claims abstract description 123
- 239000013598 vector Substances 0.000 claims abstract description 52
- 230000001960 triggered effect Effects 0.000 claims description 7
- 238000004364 calculation method Methods 0.000 claims description 6
- 238000007792 addition Methods 0.000 description 22
- 230000015654 memory Effects 0.000 description 13
- 229920006395 saturated elastomer Polymers 0.000 description 13
- 238000012545 processing Methods 0.000 description 12
- 238000000034 method Methods 0.000 description 10
- 238000013459 approach Methods 0.000 description 7
- 108091000130 1-aminocyclopropane-1-carboxylate deaminase Proteins 0.000 description 5
- 102100021283 1-aminocyclopropane-1-carboxylate synthase-like protein 1 Human genes 0.000 description 5
- 101000675558 Homo sapiens 1-aminocyclopropane-1-carboxylate synthase-like protein 1 Proteins 0.000 description 5
- 230000000295 complement effect Effects 0.000 description 5
- 238000013461 design Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 101100512568 Arabidopsis thaliana MED33B gene Proteins 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 150000001875 compounds Chemical class 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
- G06F7/485—Adding; Subtracting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3893—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Multimedia (AREA)
- Nonlinear Science (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
Abstract
毎回加算後に飽和するか、または毎回加算の結果をラップ・アラウンドするかを選択して、m個の入力オペランドにアキュムレータ値を加えた総和をとる簡約ユニットを備えるプロセッサを提供すること。簡約ユニットは、さらに、入力オペランドのビットを単純に反転し、複数の簡約加算器のそれぞれへのキャリーを1に設定することにより複数のm個の入力オペランドをアキュムレータ値から引くことができる。簡約ユニットをm個の並列乗算器と併用し、ドット積および他のベクトル演算を飽和算術演算またラップアラウンド算術演算とともに高速実行することができる。
Description
(関連出願)
本出願は、参照により本明細書に組み込まれている、M.J.Schulte他による「Method and Apparatus to Accumulate Multiple Operands with or without Saturation in a Multithreaded Processor」という表題の2003年5月9日に出願した米国仮出願第60/469,253号の優先権を主張するものである。
本出願は、参照により本明細書に組み込まれている、M.J.Schulte他による「Method and Apparatus to Accumulate Multiple Operands with or without Saturation in a Multithreaded Processor」という表題の2003年5月9日に出願した米国仮出願第60/469,253号の優先権を主張するものである。
本発明は、一般に、デジタル・データ・プロセッサの分野に関するものであり、より具体的には、デジタル・シグナル・プロセッサ(DSP)またはその他の種類のデジタル・データ・プロセッサで使用するための算術演算処理および関連する処理回路に関するものである。
大半のDSPおよびマルチメディア・プロセッサを含む、多くのデジタル・データ・プロセッサは、2進数固定小数点数演算を使用し、演算は、符号なし、または2の補数2進数形式の整数、分数、または帯分数に対し実行される。DSPおよびマルチメディア・アプリケーションは、多くの場合、2進数に対し飽和算術演算およびラップアラウンド算術演算を実行するように構成する必要がある。
飽和算術演算では、大きすぎて指定された数値形式では表せない計算結果は、正の無限大に最も近い数または負の無限大に最も近い数に飽和される。結果が大きすぎて表現できない場合は、オーバーフローが発生する。例えば、3桁の符号なし数を使用する10進数体系では、加算733+444を実行すると、真の結果である1177は3桁ちょうどの10進数で表現できないため、999と飽和した結果が得られる。飽和した結果である999は、3桁の10進数で表現することができる正の無限大に最も近い数に対応する。飽和は、結果を正しく表現できない場合に発生するエラーを減らし、符号情報を保存するので、役立つ。
ラップアラウンド演算では、オーバーフローした結果は、ラップ・アラウンドされ、指定された数値表現に収めることができない桁は単に捨てられるだけである。例えば、3桁の符号なし数の10進数体系では、加算733+444により、ラップ・アラウンド結果177が出力される。真の結果である1177は大きすぎて表現できないため、先行1は捨てられ、結果177が出力される。ラップアラウンド算術演算は、複数のラップアラウンド演算の真の最終結果を指定形式で表現できる場合、中間演算がオーバーフローしたとしても最終結果は正しいものであるため、有用である。
上で示されたように、飽和算術演算およびラップアラウンド算術演算は、2進数体系で使用されることが多い。例えば、4ビット数を使用する2の補数分数体系では、2の補数加算0.101+0.100(0.625+0.500)を行うと、飽和結果0.111(0.875)が出力されるが、これは、4ビットで表現できる正の無限大に最も近い2の補数に対応する。ラップアラウンド算術演算が使用される場合、2の補数加算0.101+0.100(0.625+0.500)を行うと、結果1.001(−0.875)が出力される。
デジタル・データ・プロセッサ算術演算のこれらの態様および他の従来の態様に関する詳細は、例えば、B.Parhami「Computer Arithmetic:Algorithms and Hardware Designs」、Oxford University Press、New York、2000(ISBN 0−19−512583−5)で説明されており、これは参照により本明細書に組み込まれている。
多くのデジタル信号処理およびマルチメディア・アプリケーションは、飽和算術演算およびラップアラウンド算術演算の両方の機能を必要とする。しかし、多くの従来の手法では、飽和またはラップアラウンド算術演算の制御可能な選択のための効率的なメカニズムを実現することができない。
また、ドット積を計算するように、与えられたDSP、マルチメディア・プロセッサ、または他の種類のデジタル・データ・プロセッサを構成することは、多くのアプリケーションでは望ましい場合がある。2つのk要素ベクトル
X=[X[1],X[2],...,X[k−1],X[k]]およびY=[Y[1],Y[2],...,Y[k−1],Y[k]]
のドット積は、
Z=X[1]*Y[1]+X[2]*Y[2]+...+X[k−1]*Y[k−1]+X[k]*Y[k]
で与えられる。
X=[X[1],X[2],...,X[k−1],X[k]]およびY=[Y[1],Y[2],...,Y[k−1],Y[k]]
のドット積は、
Z=X[1]*Y[1]+X[2]*Y[2]+...+X[k−1]*Y[k−1]+X[k]*Y[k]
で与えられる。
そこで、k要素ドット積は、k回の乗算と(k−1)回の加算を必要とする。このようなドット積は、デジタル信号処理およびマルチメディア・アプリケーションでは頻繁に出現する。
例えば、GSM(Global System for Mobile Communications)またはEDGE(Enhanced Data rates for Global Evolution)規格をサポートする第二世代および第三世代携帯電話では、通常は毎回の加算および毎回の乗算の後に飽和とともにドット積を広範に使用する。これらの規格では、一般に、与えられたドット積計算の最終結果は、演算がシリアルに実行され、毎回演算した後飽和する場合に得られる結果と同一(bit−exact)である必要がある。飽和加算は結合的でないため、ドット積に必要な加算は、通常、直列に実行され、これは、プロセッサ性能に悪影響を及ぼす。
ドット積計算およびその他のベクトル演算の従来の手法には、ほかに、このような手法はパイプライン型プロセッサで使用できるように適合させることが容易でないという問題もある。例えば、いくつかの従来の手法は、パイプライン・ステージ数が2よりも多いパイプラインに拡張することが難しい場合があるが、それは、拡張すると、一般に、必要な回路面積が実質的に増大するからである。
さらに、従来の手法だと、一般に、オペランドをアキュムレータ値に加算する演算とオペランドをアキュムレータ値から減算する演算の両方をサポートする十分に効率的なメカニズムを実現できない。
米国仮出願第60/469,253号
B.Parhami「Computer Arithmetic:Algorithms and Hardware Designs」、Oxford University Press、New York、2000(ISBN 0−19−512583−5)
米国特許出願第10/269,245号
米国特許出願第10/269,372号
米国特許出願第10/269,373号
したがって、デジタル・データ・プロセッサにおいて飽和算術演算またはラップアラウンド算術演算のいずれかとともにドット積およびその他の種類のベクトル演算の計算能力を改善できる手法が必要である。
本発明の実施例では、毎回加算後に飽和するか、または毎回加算の結果をラップ・アラウンドするかを選択して、m個の入力オペランド+アキュムレータ値の総和をとる簡約ユニットを備えるプロセッサを実現する。簡約ユニットは、さらに、入力オペランドのビットを単純に反転し、複数の簡約加算器のそれぞれへのキャリーを1に設定することにより複数のm個の入力オペランドをアキュムレータ値から引くことができる。簡約ユニットをm個の並列乗算器と併用し、ドット積および他のベクトル演算を飽和算術演算またラック・アラウンド算術演算とともに高速実行することができる。
マルチスレッド型プロセッサ実装では、最悪の場合の遅延が小さくなるように簡約ユニットをパイプライン化することができるが、それでも、ドット積のm個の要素をクロック・サイクル毎に累計できる。
飽和ドット積の場合、簡約ユニットにより生成される結果は、毎回演算の後に飽和する演算が逐次実行される場合に出力される結果と同じである。この機能は、飽和ドット積を頻繁に実行する、デジタル信号処理およびマルチメディア・アプリケーションで特に有用である。
実施例の簡約ユニットの使用例は、飽和がある場合、またはない場合のドット積の計算でのものであるが、オペランドのベクトルの総和計算の実行、複素積和(MAC)演算の実行、およびオペランドをアキュムレータ値から引く演算の実行を含む他の多数の潜在的用途がある。
ドット積を実行するために使用される場合、実施例の簡約ユニットは、それぞれの乗算器が積X[i]*Y[i],i=1,2,...mを計算するm個の並列乗算器とともに動作が可能である。乗算器からのm個の積は、その後、簡約ユニットへのm個の入力オペランドになり、初回反復では0に設定されるアキュムレータ値とともに総和される。次の反復で、前の反復からの簡約ユニット出力がアキュムレータ値になり、m個の新しい積が計算される。このようにして、k要素ドット積は、[k/m]回の反復を使用して計算することができ、それぞれの反復は、m回の並列乗算および(m+1)入力加算を含む。飽和モードで使用される場合、簡約ユニットは、加算実行毎に飽和を実行し、それぞれの乗算器は、オーバーフローが発生した場合にその結果を飽和する。
本発明の実施例は、従来の手法に関して著しい利点を多数持つ。例えば、簡約ユニットは、性能に対しペナルティを課されることなく、また必要な回路面積も適度の増大のみで容易にパイプライン化することができる。さらに、簡約ユニットは、直接、飽和算術演算をおよびラップアラウンド算術演算の両方をサポートし、オペランドをアキュムレータ値に加える演算だけでなく、オペランドをアキュムレータ値から引く演算をも実行できる。
本発明は、簡約ユニット、アキュムレータ・ユニット、および算術演算ユニット、およびそのようなユニットを組み込んだマルチスレッド型プロセッサの実施例の文脈において説明される。しかし、本発明では、図に示されている特定の配列を必要とせず、他の種類のデジタル・データ・プロセッサおよび関連する処理回路を使用して実装することができることは理解されるであろう。
本明細書で説明されているような与えられたプロセッサは、1つまたは複数の集積回路の形で実装することができる。
図1は、本発明の実施例により構成されるプロセッサ100の一部分を示す。プロセッサ100は、104−1,104−2,...104−mと表されるm個の並列乗算器とアキュムレータ・レジスタ.ファイル106との間で結合された(m+1)入力簡約ユニット102を備える。
乗算器104−iはそれぞれ、飽和がある場合、または飽和がない場合について、P[i]=X[i]*Y[i]、1≦i≦mを計算する。その後、m個の乗算器出力が、アキュムレータ・レジスタ・ファイル106から、P[0]で表される、アキュムレータ値とともに、(m+1)入力簡約ユニット102に入力オペランドとして供給される。簡約ユニット102は、
Acc=P[0]+P[1]+P[2]+...+P[m]
を計算するが、ただし、P[0]は初回反復について0に設定される。次の反復で、XおよびYのm個の新しい要素が乗算され、前の反復から、P[0]はアキュムレータ値Accに設定されるこのプロセスは、ドット積全体が計算されるまで継続される。したがって、k要素ドット積は、[k/m]回の反復を使用して計算することができ、それぞれの反復は、m回の並列乗算および(m+1)入力加算を含む。飽和モードで使用される場合、簡約ユニットは、加算実行毎に飽和を実行し、それぞれの乗算器は、オーバーフローが発生した場合にその結果を飽和する。
Acc=P[0]+P[1]+P[2]+...+P[m]
を計算するが、ただし、P[0]は初回反復について0に設定される。次の反復で、XおよびYのm個の新しい要素が乗算され、前の反復から、P[0]はアキュムレータ値Accに設定されるこのプロセスは、ドット積全体が計算されるまで継続される。したがって、k要素ドット積は、[k/m]回の反復を使用して計算することができ、それぞれの反復は、m回の並列乗算および(m+1)入力加算を含む。飽和モードで使用される場合、簡約ユニットは、加算実行毎に飽和を実行し、それぞれの乗算器は、オーバーフローが発生した場合にその結果を飽和する。
アキュムレータ・レジスタ・ファイル106は、本明細書で一般に「アキュムレータ・ユニット」と呼ばれるものの一実施例としてみなすことができる。当業者であれば理解するように、他の実施形態では他の種類のアキュムレータ・ユニットを使用することもできる。さらに、本明細書で使用されているような「ユニット」という用語は、一般的に、与えられたユニットの要素が互いと同じ場所に配置されていてもよいが、そうする必要はないか、または他の何らかの形で互いに特定の物理的関係を持つように解釈されることを意図されている。例えば、与えられたユニットの要素は、集積回路内の同一部位に配置するのではなく、集積回路全体に分散させることが可能である。
アキュムレータ・レジスタ・ファイル106は、中間アキュムレータ値を格納するために使用することができ、これは、個々のスレッドからの複数のドット積を同時に計算できるマルチスレッド型プロセッサ実装で特に有用である。
図1の実施例の中の簡約ユニット102は、さらに、2つの1ビット制御信号入力InvertおよびSatfを受け取る。InvertがHIGHの場合、簡約ユニットへの入力オペランドは反転され、ユニットは、
Acc=P[0]−P[1]−P[2]−...−P[m]
を計算する。
InvertがLOWの場合、簡約ユニットへの入力オペランドは反転されず、ユニットは、
Acc=P[0]+P[1]+P[2]+...+P[m]
を計算する。
Acc=P[0]−P[1]−P[2]−...−P[m]
を計算する。
InvertがLOWの場合、簡約ユニットへの入力オペランドは反転されず、ユニットは、
Acc=P[0]+P[1]+P[2]+...+P[m]
を計算する。
SatfがHIGHの場合、簡約ユニットは飽和モードにある。これは、簡約ユニットで中間加算が行われる毎に、結果がオーバーフローしていないか判定するチェックが行われることを意味する。オーバーフローしていた場合、結果は指定された形式で正の無限大に最も近い数または負の無限大に最も近い数に飽和される。SatfがLOWの場合、簡約ユニットはラップアラウンド・モードであり、オーバーフローした結果は飽和されないことを意味する。
実施例における乗算器104の使用は、参考例にすぎない。他の実施形態では、例えば、積和(MAC)ユニットを使用することができる。本明細書で使用されているような用語「乗算器」は、乗算だけでなく1つまたは複数の他の機能をも実行する、MACユニットなどの算術演算ユニットを含むことを意図されている。
図2は、プロセッサ100で使用するのに好適であり、m=4の場合により具体的に構成されている簡約ユニット実施例102’を示している。この簡約ユニットは、4つの入力オペランドP[1]からP[4]とアキュムレータ値P[0]とを総和する動作をする。図は、m=4の特定の場合についての(m+1)入力簡約ユニットを示しているが、当業者であれば、設計をmの他の値に容易に拡張できることを理解するであろう。
簡約ユニット102’は、図に示されているように直列に接続されている4つの2入力簡約加算器200−1、200−2、200−3、および200−4を使用する。それぞれの簡約加算器は、飽和あり、または飽和なしで、入力オペランドを加算することができる。本明細書で使用されているような用語「簡約加算器」は、例えば、飽和加算器を含むことが意図されている。
Reduction Adder 1とも識別されている第1の簡約加算器200−1は、オペランドP[0]およびP[1]を取り、入力制御信号InvertがLOWの場合に、それらを加算してZ[1]=P[0]+P[1]を出力する。Reduction Adder i+1とも識別されているそれぞれの残っている簡約加算器200−(i+1)は、2つの入力オペランドZ[i]およびP[i+1]を取り、入力制御信号InvertがLOWの場合に、それらを加算してZ[i+1]=Z[i]+P[i+1]を出力する。すると、InvertがLOWの場合に、簡約ユニットの出力は、
Acc=Z[4]=P[0]+P[1]+P[2]+P[3]+P[4]
となる。
Acc=Z[4]=P[0]+P[1]+P[2]+P[3]+P[4]
となる。
入力制御信号InvertがHIGHの場合、それぞれの簡約加算器への第2の入力は、ビット毎に反転され、それぞれの簡約加算器へのキャリー入力は1に設定される。これにより、Reduction Adder1はZ[1]=P[0]−P[1’]を計算し、残りの簡約加算器はZ[i+1]=Z[i]−P[i+1]を計算する。この場合、簡約ユニットの出力は、
Acc=Z[4]=P[0]−P[1]−P[2]−P[3]−P[4]
となる。
Acc=Z[4]=P[0]−P[1]−P[2]−P[3]−P[4]
となる。
入力制御信号SatfがHIGHの場合、それぞれの加算(または減算)の結果は、オーバーフローが発生すると飽和される。SatfがLOWの場合、それぞれの加算(または減算)の結果は、ラップ・アラウンドされる。
簡約ユニット102’は、最悪の場合の遅延を短くするためパイプライン化される。より具体的には、簡約ユニット102’は、4ステージ・パイプラインを使用して、4つの加算(または4つの減算)を実行するが、それぞれの中間加算(または減算)の結果Z[i]は、パイプライン・レジスタ202−iに格納される。P[i]オペランドが対応するZ[i−1]オペランドに同時に到達するようにするために、Reduction Adder iに入るP[i]オペランドは、(i−1)個のパイプライン・レジスタ204を通る。そのため、オペランドP[1]は、どのパイプライン・レジスタ204をも通らず、オペランドP[2]は、1つのパイプライン・レジスタ204−21を通り、オペランドP[3]は、2つのパイプライン・レジスタ204−31および204−32を通り、オペランドP[4]は、3つのパイプライン・レジスタ204−41、204−42、および204−43を通って、それぞれの簡約加算器に到達する。
図3は、簡約ユニット102’の簡約加算器200−iのうちの与えられた1つの可能な一実装を示している。簡約加算器200−iは、2入力加算器300を使用して、2つの入力オペランドAおよびBとキャリーイン・ビットcinを加算し、T=A+B+cinを計算する。SatfとAおよびBの符号saおよびsbとがHIGHであり、一時的結果の符号stがLOWの場合、出力Zは指定された数値形式で負の無限大に最も近い数に飽和され、Z=MIN_NEGとなる。SatfおよびstがHIGHで、saおよびsbがLOWの場合、Zは、指定された数値形式で正の無限大に最も近い数に飽和され、Z=MAX_POSとなる。他のすべての場合において、加算器300からの結果は、結果として使用され、Z=Tとなる。
図3に示されている特定の簡約加算器設計は、説明例としてのみ提示されていることは理解されるであろう。多数の代替え簡約加算器設計を使用することができ、与えられた実装で使用するために選択された特定の加算器は、入力オペランドの形式などのアプリケーション特有のファクタに基づいてさまざまなものがある。
パイプライン化された簡約ユニットでは、後述のようにマルチスレッドを使用することにより、ドット積のm個の要素をクロック・サイクル毎に累計することが可能である。
非マルチスレッド型プロセッサ実装では、簡約ユニットをパイプライン化すると、それぞれのドット積を計算するために必要なサイクル数が大幅に増大する可能性があることに留意されたい。例えば、マルチスレッドを使用せずに従来のmステージ・パイプラインを使用すると、それぞれのドット積を計算するためのサイクルの数は、おおよそm倍増える。
本発明の例示されている実施形態では、トークン・トリガ・スレッディングと呼ばれるアプローチを使用することによりこの課題を取り扱う。トークン・トリガ・スレッディングは、参照により本明細書に組み込まれている、同一出願人による2002年10月11日出願された「Method and Apparatus for Token Triggered Multithreading」という表題の米国特許出願第10/269,245号で説明されている。トークン・トリガ・スレッディングは、通常、異なるトークンをマルチスレッド型プロセッサの複数のスレッドのそれぞれに割り当てる。例えば、トークン・トリガ・スレッディングは、1つのトークンを使用し、現在のプロセッサ・クロック・サイクルに関連して、後続のクロック・サイクルについて命令を発行することを許可されるプロセッサのスレッドのうちの特定の1つを識別することができる。トークン・トリガ・スレッディングは、説明されている実施形態で使用されているが、本発明は、この特定の種類のマルチスレッディングを必要とせず、他の種類のマルチスレッディング手法を使用することができる。
説明されている実施形態では、1つのドット積に対する乗算および簡約は他のスレッドからの演算と同時に実行されるため、パイプライン化に起因しうるサイクル・カウントの上記の増大は、他のスレッドの処理により実際には隠されうる。スレッドの同時実行によるサイクル・カウントの増大を完全に隠すために、与えられたスレッドからの複数の命令の実行間のサイクルの数は、簡約ユニット内のパイプライン・ステージの個数にアキュムレータ・レジスタ・ファイル106との間で読み書きするために必要な追加サイクル数を加えた値以上でなければならない。
すでに示されているように、本発明は、マルチスレッド型プロセッサで有利に実装することができる。本発明が実装されうるマルチスレッド型プロセッサのより具体的な実施例は、参照により本明細書に組み込まれている、同一出願人による2002年10月11日出願された「Multithreaded Processor With Efficient Processing For Convergence Device Applications」という表題の米国特許出願第10/269,372号で説明されている。マルチスレッド型プロセッサは、RISCベースの制御コード、DSPコード、Java(登録商標)コード、およびネットワーク処理コードを実行するように構成することができる。これは、単一命令複数データ(SIMD)ベクトル処理ユニット、簡約ユニット、および長命令ワード(LIW)複合命令実行を含む。このマルチスレッド型プロセッサ例で使用するのに好適なスレッディングおよびパイプライン化手法の実施例については、米国特許出願第10/269,245号で説明されている。
本明細書で説明されているような簡約ユニット102または102’は、図4に関して例示されているように、そのようなマルチスレッド型プロセッサ内の簡約ユニットとして使用することができる。もちろん、本発明は、他のマルチスレッド型プロセッサ、またはより一般的に他の種類のデジタル・データ・プロセッサで実装することができる。
図4は、図2の簡約ユニット102’を組み込んだマルチスレッド型プロセッサ400の一実施例を示す。プロセッサ400は、一般に、米国特許出願第10/269,372号で説明されているものと類似しているが、本明細書で説明されているように構成された簡約ユニット102’およびアキュムレータ・レジスタ・ファイル106’を組み込む。
マルチスレッド型プロセッサ400は、他の要素の中でもとりわけ、マルチスレッド型キャッシュ・メモリ410、マルチスレッド型データ・メモリ412、命令用バッファ414、命令デコーダ416、レジスタ・ファイル418、およびメモリ・マネジメント・ユニット(MMU)420を備える。マルチスレッド型キャッシュ410は、複数のスレッド・キャッシュ410−1、410−2、...、410−Nを備えるが、ただし、Nは、一般的に、マルチスレッド型プロセッサ400によりサポートされているスレッドの個数を表し、この特定の実施例では、N=4である。もちろん、当業者であれば容易に理解できるように、Nの他の値を使用することもできる。
したがって、それぞれのスレッドは、マルチスレッド型キャッシュ410内で関連付けられた対応するスレッド・キャッシュを持つ。同様に、データ・メモリ412は、図のようにデータ・メモリ412−1、412−2、...、412−Nと表されるN個の異なるデータ・メモリ・インスタンスを含む。
マルチスレッド型キャッシュ410は、MMU 420を介してプロセッサ400の外部にあるメイン・メモリ(図に示されていない)とインターフェイスする。MMU 420は、キャッシュ410のように、プロセッサによりサポートされるN個のスレッドのそれぞれに対する独立のインスタンスを含む。MMU 420は、メイン・メモリからの適切な命令がマルチスレッド型キャッシュ410にロードされることを保証する。
データ・メモリ412は、さらに、上記の外部メイン・メモリに直接接続されるが、この接続は、図に明示的にも示されていない。また、データ・メモリ412には、データ・バッファ430も関連付けられている。
一般に、マルチスレッド型キャッシュ410は、マルチスレッド型プロセッサ400により実行される命令を格納するために使用されるが、データ・メモリ412は、命令によって演算が実行されるデータを格納する。命令は、命令デコーダ416によりマルチスレッド型キャッシュ410からフェッチされ、デコードされる。後述のように、命令の型に応じて、命令デコーダ416は、与えられた命令または関連付けられた情報をプロセッサ内のさまざまな他のユニットに転送することができる。
プロセッサ400は、分岐命令キュー(IQ)440およびプログラム・カウンタ(PC)レジスタ442を備える。プログラム・カウンタ・レジスタ442は、スレッドのそれぞれについて1つのインスタンスを含む。分岐命令キュー440は、命令デコーダ416から命令を受け取り、プログラム・カウンタ・レジスタ442とともに、入力を、キャリー伝搬加算器(CPA)を備えることを例示されている加算器ブロック444に供給する。要素440、442、および444は、まとめて、プロセッサ400の分岐ユニットを含む。図に示されていないが、補助レジスタもプロセッサ400に含めることができる。
レジスタ・ファイル418は、整数結果の一時的格納場所となる。命令デコーダ416から整数命令キュー(IQ)450に転送される命令は、デコードされ、適切なハードウェア・スレッド・ユニットが、スレッドのそれぞれに対する別々のインスタンスを含むように示されているオフセット・ユニット452を使用することにより選択される。オフセット・ユニット452は、独立のスレッド・データが破損しないように、明示的ビットをレジスタ・ファイル・アドレスに挿入する。与えられスレッドについて、これらの明示的なビットは、例えば、対応するスレッド識別子を含むことができる。
図に示されているように、レジスタ・ファイル418は、入力レジスタRAおよびRBに結合され、その出力は、加算器を含むことができる、ALUブロック454に結合される。入力レジスタRAおよびRBは、命令パイプライン化を実装する際に使用される。ALUブロック454の出力は、データ・メモリ412に結合される。
レジスタ・ファイル418、整数命令キュー450、オフセット・ユニット452、要素RAおよびRB、およびALUブロック454は、まとめて、整数ユニットの実施例を含む。
プロセッサ400内で実行可能な命令の型は、Branch、Load、Store、Integer、およびVector/SIMD命令型を含む。与えられた命令でBranch、Load、Store、またはInteger演算を指定しない場合、それは、Vector/SIMD命令である。他の命令型も使用できる、または代わりに使用することができる。IntegerおよびVector/SIMD命令型は、本明細書ではより一般にそれぞれ整数およびベクトル命令型と呼ぶ命令の実施例である。
ベクトルIQ 456は、命令デコーダ416から転送されたVector/SIMD命令を受け取る。スレッドのそれぞれに対する別々のインスタンスを含むものとして示されている、対応するオフセット・ユニット458は、独立しているスレッド・データが破損しないように、適切なビットを挿入するために使用される。
プロセッサ400のベクトル・ユニット460は、N個の異なる並列部分に分離され、同様に分割されているベクトル・ファイル462を含む。ベクトル・ファイル462は、VR00からVR31で表される32本のレジスタを含む。ベクトル・ファイル462は、前者がVector/SIMD命令型に作用することを除きレジスタ・ファイル418と実質的に同じ目的に使用される。
ベクトル・ユニット460は、ベクトル命令キュー456、オフセット・ユニット458、ベクトル・ファイル462、およびそれらに関連付けられている算術演算および格納要素を備えることが例示されている。
ベクトル・ユニット460の演算は以下のとおりである。分数または整数データ型として符号化されたVector/SIMDブロックは、ベクトル・ファイル462から読み込まれ、アーキテクチャ上見えるレジスタVRA、VRB、VRCに格納される。そこから、流れは、Vector/SIMDデータの並列同時乗算を実行する乗算器(MPY)を通る。キャリー・スキップ加算器(CSA)およびCPAを含む加算器ユニットは、追加算術演算を実行することができる。例えば、当業者であれば理解するように、CSAの1つまたは複数を使用して、ベクトル・レジスタ・ファイルからアキュムレータ値を足し込むことができ、またCPAの1つまたは複数を使用して、乗算演算の完了のため最終加算を実行することができる。計算結果は、Resultレジスタ464に格納され、簡約ユニット102’に入力オペランドとして供給される。簡約ユニット102’は、出力される総和結果が、それぞれの演算が逐次実行された場合に得られる結果と同じになるように入力オペランドを総和する。簡約された総和は、さらに処理するために、アキュムレータ・レジスタ・ファイル106’内に格納される。
ベクトル・ドット積を実行する場合、MPYブロックは、4つの乗算を並列実行し、CSAおよびCPAユニットは、追加演算を実行するか、または単に乗算結果を転送しResultレジスタ464に格納し、簡約ユニット102’は、アキュムレータ・レジスタ・ファイル106’に格納されているアキュムレータ値とともに、乗算結果を総和する。その後、簡約ユニットにより生成された結果は、アキュムレータ・レジスタ・ファイルに格納され、すでに説明されている方法により、次の反復で使用される。
ベクトル・ユニット460の4つの並列乗算器MPYは、一般的に図1のプロセッサ100の乗算器104に対応するものとみなすことができる。
この実施例のアキュムレータ・レジスタ・ファイル106’は、ACC00からACC15で表される全部で16本のアキュムレータ・レジスタを含む。
マルチスレッド型プロセッサ400は、参照により本明細書に組み込まれている、同一出願人による2002年10月11日に出願された「Method and Apparatus for Register File Port Reduction in a Multithreaded Processor」という表題の米国特許出願第10/269,373号で説明されているように、スレッドベースのアクセス方式でレジスタ・ファイルにアクセスすることができる。
図5は、図4のマルチスレッド型プロセッサ400で実行するのに適しているベクトル簡約命令の書式例を示す。この命令は、並列乗算器および簡約ユニットにより実行されるベクトル簡約演算を指定するために使用される。図中、OPCODEは実行すべき演算を指定し、ACCDはアキュムレータ・デスティネーション・レジスタのアキュムレータ・レジスタ・ファイル・ロケーションを指定し、ACCSはアキュムレータ・ソース・レジスタのアキュムレータ・レジスタ・ファイル・ロケーションを指定し、VRSAは一組のベクトル・ソース・オペランドのベクトル・レジスタ・ファイル・ロケーションを指定し、VRSBは他の一組のベクトル・ソース・オペランドのベクトル・レジスタ・ファイル・ロケーションを指定する。
図5に示されている命令書式を使用すると、m個の並列乗算器および(m+1)入力簡約ユニットを備えるSIMDベクトル処理ユニットはベクトル乗算簡約加算(vmulredadd)命令を実行することができ、この命令は
ACCD=ACCS+VRSA[1]*VRSB[1]+VSRA[2]*VSRB[2]+...+VSRA[m]*VSRB[m]
を計算する。
ACCD=ACCS+VRSA[1]*VRSB[1]+VSRA[2]*VSRB[2]+...+VSRA[m]*VSRB[m]
を計算する。
より具体的には、マルチスレッド型プロセッサ400の実施例を参照すると、この命令は、VSRA[i]およびVSRB[i]に対応する値をベクトル・レジスタ・ファイル462から読み込み、4つの並列乗算器MPYを使用してVSRA[i]*VSRB[i]を計算し、ACCSをアキュムレータ・レジスタ・ファイル106’から読み込み、簡約ユニット102’を使用してその積をACCSに加算し、簡約ユニットから結果をアキュムレータ・レジスタ・ファイルに書き戻し、ACCDによって指定されたアドレスを使用することによりm=4について実行できる。
同様に、ベクトル乗算簡約減算(vmulredsub)命令は、計算
ACCD=ACCS−VRSA[1]*VRSB[1]−VSRA[2]*VSRB[2]−...−VSRA[m]*VSRB[m]
を実行できる。
これらのベクトル簡約命令はそれぞれ、毎回の演算後の飽和付きで実行することもできる。当業者には明らかなように、
ACCD=ACCS+VRSA[1]+VRSB[1]+VSRA[2]+VSRB[2]+...+VSRA[m]+VSRB[m]
を実行するベクトル加算簡約加算などの他のベクトル簡約命令も定義できる。
ACCD=ACCS−VRSA[1]*VRSB[1]−VSRA[2]*VSRB[2]−...−VSRA[m]*VSRB[m]
を実行できる。
これらのベクトル簡約命令はそれぞれ、毎回の演算後の飽和付きで実行することもできる。当業者には明らかなように、
ACCD=ACCS+VRSA[1]+VRSB[1]+VSRA[2]+VSRB[2]+...+VSRA[m]+VSRB[m]
を実行するベクトル加算簡約加算などの他のベクトル簡約命令も定義できる。
図6は、図5に示されている種類の命令書式を使用する同じスレッドからの2つのベクトル簡約命令のパイプライン化された実行を示す。この実施例では、制限することなく、全部で8つのスレッドがあり、ラウンドロビン・スケジューリングでトークン・トリガ・スレッディングが使用されると仮定される。他のスレッドにより発行される命令は、この図に示されていない。この実施例のパイプラインは、命令フェッチ(IFE)、命令デコード(DEC)、リード・ベクトル・レジスタ・ファイル(RVF)、2つの乗算ステージ(ML1およびML2)、2つの加算器ステージ(AD1およびAD2)、4つの簡約ステージ(RE1からREF4まで)、結果転送(XFR)、およびライト・アキュムレータ・ファイル(WAF)の13のステージを含む。第2の加算器ステージ(AD2)を含む同じサイクルで、プロセッサは、さらに、アキュムレータ・レジスタ・ファイル(RAF)を読み込む。そのため、ベクトル簡約命令のうちの与えられた1つは、実行に13サイクルかかる。
この実施例に関して、2ベクトル簡約命令が同じスレッドから次々に発行する場合に、第1のベクトル簡約命令は、次のベクトル簡約命令がレジスタ・ファイルからアキュムレータ・ソース・レジスタを読み込む必要が生じる前に、すでにそのデスティネーション・アキュムレータ結果をアキュムレータ・レジスタ・ファイル(ステージWAF内)に書き戻していることに注意することが重要である。したがって、図5に示されている命令書式を使用する
vmulredadd acc0,acc0,vr1,vr2
vmulredadd acc0,acc0,vr3,vr4
などの2つの命令は、データ依存関係によりプロセッサのストールを引き起こすことなく、連続命令として発行することができる。この種類の機能は、さまざまなマルチスレッド型プロセッサおよび簡約ユニット構成とともにさまざまな命令書式を使用して他の実施形態で実現できる。
vmulredadd acc0,acc0,vr1,vr2
vmulredadd acc0,acc0,vr3,vr4
などの2つの命令は、データ依存関係によりプロセッサのストールを引き起こすことなく、連続命令として発行することができる。この種類の機能は、さまざまなマルチスレッド型プロセッサおよび簡約ユニット構成とともにさまざまな命令書式を使用して他の実施形態で実現できる。
上述の本発明の実施例は、従来の手法に関して著しい利点を多数持つ。例えば、簡約ユニットは、性能に対しペナルティを課されることなく、また従来の手法に関して、必要な回路面積も適度の増大のみで容易にパイプライン化することができる。さらに、簡約ユニットは、直接、飽和算術演算をおよびラップアラウンド算術演算の両方をサポートし、オペランドをアキュムレータ値に加える演算だけでなく、オペランドをアキュムレータ値から引く演算をも実行できる。
デジタル信号処理およびマルチメディア・アプリケーションは、飽和算術演算およびラップアラウンド算術演算の機能を必要とする場合があるため、制御ビット入力に基づき飽和算術演算またはラップアラウンド算術演算のいずれかを実行する本明細書で説明されている種類の簡約ユニットを使用することにより実現される。
図1から4に示されている特定の回路配列は、説明実施例としてのみ提示されており、当業者には明らかなように、明示的に示されていない追加または他の要素も含まれていることがあることに留意されたい。
本発明は、図4に示されている特定のマルチスレッド型プロセッサ構成を必要としないことも強調すべきである。本発明は、さまざまな他のマルチスレッド型または非マルチスレッド型プロセッサ構成で実装することができる。
そのため、本発明の上述の実施形態は、例示のみを目的としており、付属の請求項の範囲内の多数の他の実施形態は、当業者には明白であろう。例えば、図に示されている特定の算術演算ユニット、簡約ユニット、およびアキュムレータ・ユニット構成は、他の実施形態では変更できる。さらに、上で指摘したように、パイプライン構成、スレッディングの種類、および命令書式を変更して、与えられたアプリケーションの特定の要求条件に対応させることができる。
Claims (20)
- プロセッサであって、
複数の算術演算ユニットと、
アキュムレータ・ユニットと、
前記複数の算術演算ユニットと前記アキュムレータ・ユニットとの間に結合された簡約ユニットであって、前記算術演算ユニットから入力オペランドを受け取り、前記アキュムレータ・ユニットから第1のアキュムレータ値を受け取るように構成されている簡約ユニットとを備え、
前記簡約ユニットは、前記複数の入力オペランドと前記第1のアキュムレータ値とを合計し、第2のアキュムレータ値を生成し、前記アキュムレータ・ユニットに配送する動作をし、
前記簡約ユニットは、飽和あり、または飽和なしで動作するように制御可能であるプロセッサ。 - 前記複数の算術演算ユニットは、互いに並列に配置された複数の乗算器を備える請求項1に記載のプロセッサ。
- 前記複数の乗算器は、互いに並列に配置された複数の積和ユニットを備える請求項2に記載のプロセッサ。
- 前記アキュムレータ・ユニットは、アキュムレータ・レジスタ・ファイルを備える請求項1に記載のプロセッサ。
- 前記簡約ユニットは、印加された制御信号に応じて、複数の加算演算のそれぞれの後に飽和が行われる少なくとも第1の種類の計算と前記加算演算の結果のラップ・アラウンドが行われる第2の種類の計算との間の制御可能な選択を行えるように構成されている請求項1に記載のプロセッサ。
- 前記簡約ユニットは、さらに、前記第1のアキュムレータ値から前記入力オペランドを減算できる動作をする請求項1に記載のプロセッサ。
- 前記入力オペランドは、前記入力オペランドの複数のビットを反転し、前記簡約ユニットの複数の簡約加算器のそれぞれの中へのキャリーを指定論理値に設定することにより前記第1のアキュムレータ値から減算される請求項6に記載のプロセッサ。
- 前記簡約ユニットは、m個の算術演算ユニットおよび前記アキュムレータ・ユニットとともに使用し、ドット積のm個の要素を計算することができる請求項1に記載のプロセッサ。
- 前記簡約ユニットは、直列に接続されたm個の簡約加算器を備え、前記簡約加算器はそれぞれ、飽和あり、または飽和なしで、それぞれの入力オペランドを加算する動作をすることができる請求項1に記載のプロセッサ。
- 前記m個の算術演算ユニットは、m個の乗算器を備え、前記乗算器のそれぞれはP[i]=X[i]*Y[i],1≦i≦mを計算する動作をし、前記m個の乗算器のP[i]出力は前記アキュムレータ・ユニットからのアキュムレータ値P[0]とともに入力オペランドとして前記簡約ユニットに供給され、前記簡約ユニットは
Acc=P[0]+P[1]+P[2]+...+P[m]
を計算するように構成され、P[0]は、初回反復に関して0に設定され、次の反復で、XおよびYのm個の新しい要素が乗算され、P[0]は、前の反復からアキュムレータ値Accに設定され、前記反復は、m要素ドット積が計算されるまで継続する請求項8に記載のプロセッサ。 - 前記簡約ユニットは、前記簡約ユニットが加算演算毎に飽和を実行する飽和モードで動作可能であり、前記m個の乗算器はそれぞれ、オーバーフローが発生した場合にその結果を飽和させる請求項10に記載のプロセッサ。
- 前記簡約ユニットは、前記簡約ユニットが
Acc=P[0]−P[1]−P[2]−...−P[m]
を計算するように構成される反転モードで動作可能である請求項10に記載のプロセッサ。 - 前記簡約ユニットは、複数のプロセッサ・クロック・サイクルのそれぞれで、前記ドット積のm個の要素を累計できるように構成される請求項8に記載のプロセッサ。
- 前記簡約ユニットは、パイプライン化される請求項1に記載のプロセッサ。
- 前記プロセッサは、マルチスレッド型プロセッサを含む請求項1に記載のプロセッサ。
- 前記マルチスレッド型プロセッサは、トークン・トリガ・スレッディングを使用する請求項15に記載のプロセッサ。
- 与えられたスレッドについて計算されるドット積に対する演算は、他のスレッドからの演算と同時に実行され、前記与えられたスレッドからの命令の実行間のサイクルの前記数は、前記簡約ユニット内のパイプライン・ステージの個数に前記アキュムレータ・ユニットとの間で読み書きするのに必要な追加サイクル数を足した値以上である請求項15に記載のプロセッサ。
- 前記簡約ユニットは、ベクトル乗算簡約加算命令、ベクトル乗算簡約減算命令、およびベクトル加算簡約加算命令のうちの少なくとも1つを含む、1つまたは複数のベクトル簡約命令の実行で使用可能である請求項1に記載のプロセッサ。
- 少なくとも1つのプロセッサを備える集積回路であって、前記プロセッサは、
複数の算術演算ユニットと、
アキュムレータ・ユニットと、
前記複数の算術演算ユニットと前記アキュムレータ・ユニットとの間に結合された簡約ユニットであって、前記算術演算ユニットから入力オペランドを受け取り、前記アキュムレータ・ユニットから第1のアキュムレータ値を受け取るように構成されている簡約ユニットとを備え、
前記簡約ユニットは、前記複数の入力オペランドと前記第1のアキュムレータ値とを合計し、第2のアキュムレータ値を生成し、前記アキュムレータ・ユニットに配送する動作をし、
前記簡約ユニットは、飽和あり、または飽和なしで動作するように制御可能である集積回路。 - 複数の算術演算ユニットおよびアキュムレータ・ユニットを備えるプロセッサで使用する装置であって、
前記複数の算術演算ユニットと前記アキュムレータ・ユニットとの間に結合された簡約ユニットであって、前記算術演算ユニットから入力オペランドを受け取り、前記アキュムレータ・ユニットから第1のアキュムレータ値を受け取るように構成されている簡約ユニットを備え、
前記簡約ユニットは、前記複数の入力オペランドと前記第1のアキュムレータ値とを合計し、第2のアキュムレータ値を生成し、前記アキュムレータ・ユニットに配送する動作をし、
前記簡約ユニットは、飽和あり、または飽和なしで動作するように制御可能である装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US46925303P | 2003-05-09 | 2003-05-09 | |
PCT/US2004/014257 WO2004103056A2 (en) | 2003-05-09 | 2004-05-07 | Processor reduction unit for accumulation of multiple operands with or without saturation |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2006529043A true JP2006529043A (ja) | 2006-12-28 |
Family
ID=33476668
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006532846A Pending JP2006529043A (ja) | 2003-05-09 | 2004-05-07 | 飽和あり、または飽和なしで、オペランドの積和を実行するプロセッサ簡約ユニット |
Country Status (6)
Country | Link |
---|---|
US (1) | US7593978B2 (ja) |
EP (2) | EP1623307B1 (ja) |
JP (1) | JP2006529043A (ja) |
KR (1) | KR101005718B1 (ja) |
CN (1) | CN1820246A (ja) |
WO (1) | WO2004103056A2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2016530631A (ja) * | 2013-08-14 | 2016-09-29 | クアルコム,インコーポレイテッド | ベクトルの算術的削減 |
Families Citing this family (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8074051B2 (en) * | 2004-04-07 | 2011-12-06 | Aspen Acquisition Corporation | Multithreaded processor with multiple concurrent pipelines per thread |
US7797363B2 (en) | 2004-04-07 | 2010-09-14 | Sandbridge Technologies, Inc. | Processor having parallel vector multiply and reduce operations with sequential semantics |
TW200625097A (en) * | 2004-11-17 | 2006-07-16 | Sandbridge Technologies Inc | Data file storing multiple date types with controlled data access |
US20060149804A1 (en) * | 2004-11-30 | 2006-07-06 | International Business Machines Corporation | Multiply-sum dot product instruction with mask and splat |
KR100837400B1 (ko) | 2006-07-20 | 2008-06-12 | 삼성전자주식회사 | 멀티스레딩/비순차 병합 기법에 따라 처리하는 방법 및장치 |
US20080071851A1 (en) * | 2006-09-20 | 2008-03-20 | Ronen Zohar | Instruction and logic for performing a dot-product operation |
EP2069947A4 (en) * | 2006-09-26 | 2013-10-09 | Qualcomm Inc | APPLICATION OF MATRIX INVERSION SOFTWARE IN A WIRELESS COMMUNICATION SYSTEM |
US8332452B2 (en) * | 2006-10-31 | 2012-12-11 | International Business Machines Corporation | Single precision vector dot product with “word” vector write mask |
US9495724B2 (en) * | 2006-10-31 | 2016-11-15 | International Business Machines Corporation | Single precision vector permute immediate with “word” vector write mask |
US9110726B2 (en) * | 2006-11-10 | 2015-08-18 | Qualcomm Incorporated | Method and system for parallelization of pipelined computations |
US8521800B1 (en) * | 2007-08-15 | 2013-08-27 | Nvidia Corporation | Interconnected arithmetic logic units |
US20100241834A1 (en) * | 2007-11-05 | 2010-09-23 | Sandbridge Technologies, Inc. | Method of encoding using instruction field overloading |
KR20100120133A (ko) * | 2008-01-30 | 2010-11-12 | 샌드브리지 테크놀로지스, 인코포레이티드 | 멀티-프로세서 동기화를 활성화하는 방법 |
CN102027456A (zh) * | 2008-03-13 | 2011-04-20 | 阿斯奔收购公司 | 用于通过停用有效阵列实现功率节省的方法 |
KR20110050665A (ko) | 2008-08-06 | 2011-05-16 | 아스펜 액퀴지션 코포레이션 | 정지가능하고 재시작가능한 dma 엔진 |
US10095516B2 (en) | 2012-06-29 | 2018-10-09 | Intel Corporation | Vector multiplication with accumulation in large register space |
US9355068B2 (en) | 2012-06-29 | 2016-05-31 | Intel Corporation | Vector multiplication with operand base system conversion and re-conversion |
US9256480B2 (en) | 2012-07-25 | 2016-02-09 | Mobileye Vision Technologies Ltd. | Computer architecture with a hardware accumulator reset |
US10318308B2 (en) * | 2012-10-31 | 2019-06-11 | Mobileye Vision Technologies Ltd. | Arithmetic logic unit |
CN104252331B (zh) * | 2013-06-29 | 2018-03-06 | 华为技术有限公司 | 乘累加器 |
CN103645881B (zh) * | 2013-12-13 | 2016-08-24 | 广西科技大学 | 浮点数加/减运算执行控制器 |
US20160026607A1 (en) * | 2014-07-25 | 2016-01-28 | Qualcomm Incorporated | Parallelization of scalar operations by vector processors using data-indexed accumulators in vector register files, and related circuits, methods, and computer-readable media |
US9916130B2 (en) * | 2014-11-03 | 2018-03-13 | Arm Limited | Apparatus and method for vector processing |
US10169039B2 (en) * | 2015-04-24 | 2019-01-01 | Optimum Semiconductor Technologies, Inc. | Computer processor that implements pre-translation of virtual addresses |
US20170046153A1 (en) * | 2015-08-14 | 2017-02-16 | Qualcomm Incorporated | Simd multiply and horizontal reduce operations |
US10108581B1 (en) * | 2017-04-03 | 2018-10-23 | Google Llc | Vector reduction processor |
US11294679B2 (en) | 2017-06-30 | 2022-04-05 | Intel Corporation | Apparatus and method for multiplication and accumulation of complex values |
WO2019005115A1 (en) * | 2017-06-30 | 2019-01-03 | Intel Corporation | APPARATUS AND METHOD FOR MULTIPLICATION AND CUMULATION OF COMPLEX VALUES |
US11074073B2 (en) * | 2017-09-29 | 2021-07-27 | Intel Corporation | Apparatus and method for multiply, add/subtract, and accumulate of packed data elements |
US10552154B2 (en) | 2017-09-29 | 2020-02-04 | Intel Corporation | Apparatus and method for multiplication and accumulation of complex and real packed data elements |
US10802826B2 (en) * | 2017-09-29 | 2020-10-13 | Intel Corporation | Apparatus and method for performing dual signed and unsigned multiplication of packed data elements |
US11256504B2 (en) | 2017-09-29 | 2022-02-22 | Intel Corporation | Apparatus and method for complex by complex conjugate multiplication |
US10795676B2 (en) | 2017-09-29 | 2020-10-06 | Intel Corporation | Apparatus and method for multiplication and accumulation of complex and real packed data elements |
US11243765B2 (en) | 2017-09-29 | 2022-02-08 | Intel Corporation | Apparatus and method for scaling pre-scaled results of complex multiply-accumulate operations on packed real and imaginary data elements |
US10514924B2 (en) | 2017-09-29 | 2019-12-24 | Intel Corporation | Apparatus and method for performing dual signed and unsigned multiplication of packed data elements |
US10795677B2 (en) | 2017-09-29 | 2020-10-06 | Intel Corporation | Systems, apparatuses, and methods for multiplication, negation, and accumulation of vector packed signed values |
US10664277B2 (en) | 2017-09-29 | 2020-05-26 | Intel Corporation | Systems, apparatuses and methods for dual complex by complex conjugate multiply of signed words |
US10534838B2 (en) | 2017-09-29 | 2020-01-14 | Intel Corporation | Bit matrix multiplication |
US10678507B2 (en) | 2017-12-22 | 2020-06-09 | Alibaba Group Holding Limited | Programmable multiply-add array hardware |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4636942A (en) * | 1983-04-25 | 1987-01-13 | Cray Research, Inc. | Computer vector multiprocessing control |
JPH0640301B2 (ja) * | 1983-09-22 | 1994-05-25 | ソニー株式会社 | 並列乗算回路 |
US5032865A (en) * | 1987-12-14 | 1991-07-16 | General Dynamics Corporation Air Defense Systems Div. | Calculating the dot product of large dimensional vectors in two's complement representation |
KR920003494B1 (ko) * | 1989-06-20 | 1992-05-01 | 삼성전자 주식회사 | 디지탈 신호처리 시스템에서의 실시간 2's 콤플리멘트코드 숫자의 승산방법 및 회로 |
US5613114A (en) * | 1994-04-15 | 1997-03-18 | Apple Computer, Inc | System and method for custom context switching |
FR2725054B1 (fr) * | 1994-09-26 | 1997-01-17 | Suisse Electronique Microtech | Dispositif multitache de traitement de sequences d'instructions, a basse consommation d'energie |
US5933627A (en) * | 1996-07-01 | 1999-08-03 | Sun Microsystems | Thread switch on blocked load or store using instruction thread field |
US6058465A (en) * | 1996-08-19 | 2000-05-02 | Nguyen; Le Trong | Single-instruction-multiple-data processing in a multimedia signal processor |
JP3790307B2 (ja) * | 1996-10-16 | 2006-06-28 | 株式会社ルネサステクノロジ | データプロセッサ及びデータ処理システム |
KR100291383B1 (ko) | 1996-11-18 | 2001-09-17 | 윤종용 | 디지털신호처리를위한명령을지원하는모듈계산장치및방법 |
US6209017B1 (en) * | 1997-08-30 | 2001-03-27 | Lg Electronics Inc. | High speed digital signal processor |
US5889689A (en) | 1997-09-08 | 1999-03-30 | Lucent Technologies Inc. | Hierarchical carry-select, three-input saturation |
US6377619B1 (en) * | 1997-09-26 | 2002-04-23 | Agere Systems Guardian Corp. | Filter structure and method |
US5864703A (en) * | 1997-10-09 | 1999-01-26 | Mips Technologies, Inc. | Method for providing extended precision in SIMD vector arithmetic operations |
US6182105B1 (en) | 1998-08-27 | 2001-01-30 | Lucent Technologies Inc. | Multiple-operand addition with intermediate saturation |
US6968445B2 (en) | 2001-12-20 | 2005-11-22 | Sandbridge Technologies, Inc. | Multithreaded processor with efficient processing for convergence device applications |
US6842848B2 (en) | 2002-10-11 | 2005-01-11 | Sandbridge Technologies, Inc. | Method and apparatus for token triggered multithreading |
US6904511B2 (en) | 2002-10-11 | 2005-06-07 | Sandbridge Technologies, Inc. | Method and apparatus for register file port reduction in a multithreaded processor |
-
2004
- 2004-05-07 EP EP04775953.5A patent/EP1623307B1/en not_active Expired - Lifetime
- 2004-05-07 KR KR1020057021308A patent/KR101005718B1/ko active IP Right Grant
- 2004-05-07 US US10/841,261 patent/US7593978B2/en active Active
- 2004-05-07 JP JP2006532846A patent/JP2006529043A/ja active Pending
- 2004-05-07 EP EP10011563A patent/EP2290525A3/en not_active Ceased
- 2004-05-07 CN CNA2004800170825A patent/CN1820246A/zh active Pending
- 2004-05-07 WO PCT/US2004/014257 patent/WO2004103056A2/en active Application Filing
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2016530631A (ja) * | 2013-08-14 | 2016-09-29 | クアルコム,インコーポレイテッド | ベクトルの算術的削減 |
Also Published As
Publication number | Publication date |
---|---|
US7593978B2 (en) | 2009-09-22 |
KR101005718B1 (ko) | 2011-01-10 |
KR20060011994A (ko) | 2006-02-06 |
WO2004103056A2 (en) | 2004-12-02 |
EP1623307B1 (en) | 2015-07-01 |
EP2290525A3 (en) | 2011-04-20 |
EP2290525A2 (en) | 2011-03-02 |
EP1623307A2 (en) | 2006-02-08 |
WO2004103056A3 (en) | 2005-12-29 |
EP1623307A4 (en) | 2006-07-26 |
US20050071413A1 (en) | 2005-03-31 |
CN1820246A (zh) | 2006-08-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101005718B1 (ko) | 포화와 함께 또는 포화 없이 다중 오퍼랜드들의 누산을 위한 프로세서 감소 유닛 | |
US7797363B2 (en) | Processor having parallel vector multiply and reduce operations with sequential semantics | |
US7475222B2 (en) | Multi-threaded processor having compound instruction and operation formats | |
US8074051B2 (en) | Multithreaded processor with multiple concurrent pipelines per thread | |
US11188330B2 (en) | Vector multiply-add instruction | |
US8122078B2 (en) | Processor with enhanced combined-arithmetic capability | |
US6078941A (en) | Computational structure having multiple stages wherein each stage includes a pair of adders and a multiplexing circuit capable of operating in parallel | |
US8224883B2 (en) | Packed add-subtract operation in a microprocessor | |
US5764939A (en) | RISC processor having coprocessor for executing circular mask instruction | |
KR20070018066A (ko) | 합성 명령 및 연산 포맷들을 갖는 프로세서 |