JP2007533007A - スレッドごとの多重同時パイプラインを有するマルチスレッドプロセッサ - Google Patents
スレッドごとの多重同時パイプラインを有するマルチスレッドプロセッサ Download PDFInfo
- Publication number
- JP2007533007A JP2007533007A JP2007507460A JP2007507460A JP2007533007A JP 2007533007 A JP2007533007 A JP 2007533007A JP 2007507460 A JP2007507460 A JP 2007507460A JP 2007507460 A JP2007507460 A JP 2007507460A JP 2007533007 A JP2007533007 A JP 2007533007A
- Authority
- JP
- Japan
- Prior art keywords
- thread
- instruction
- processor
- instructions
- stage
- 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
- 230000015654 memory Effects 0.000 claims description 24
- 238000000034 method Methods 0.000 claims description 18
- 235000000434 Melocanna baccifera Nutrition 0.000 description 8
- 241001497770 Melocanna baccifera Species 0.000 description 8
- 238000012545 processing Methods 0.000 description 8
- 238000007796 conventional method Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 3
- 101150060298 add2 gene Proteins 0.000 description 2
- 238000013459 approach Methods 0.000 description 2
- 230000001010 compromised effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 101150005267 Add1 gene Proteins 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 150000001875 compounds Chemical class 0.000 description 1
- 125000004122 cyclic group Chemical group 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/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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
-
- 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/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30123—Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
-
- 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/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)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Computer Hardware Design (AREA)
- Advance Control (AREA)
- Image Processing (AREA)
- Debugging And Monitoring (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
マルチスレッドプロセッサは、複数のハードウェアスレッドユニットと、スレッドユニットから受け取った命令をデコードするためにスレッドユニットに結合された命令デコーダと、デコードされた命令を実行するための複数の実行ユニットを含む。マルチスレッドプロセッサは、ハードウェアスレッドユニットのそれぞれに関連付けられたスレッド用の命令発行シーケンスを制御するように構成される。所与のプロセッサクロックサイクルで、指定された1つのスレッドのみが1つまたは複数の命令を発行することが可能になるが、命令を発行することが可能になる指定されたスレッドは、命令発行シーケンスに従って、複数のクロックサイクルにわたって変化する。命令は、スレッドのうちの少なくとも所与の1つが、多重同時命令パイプラインをサポートすることを可能にするようにパイプライン化される。
Description
本出願は、2004年4月7日に出願された、「Processor Pipeline With Multithreaded Support」と題する米国特許仮出願第60/560,199号の優先権を主張するものであり、それを参照により本明細書に組み込む。
本出願はまた、2004年5月7日に出願された、「Processor Reduction Unit for Accumulation of Multiple Operands With or Without Saturation」と題する米国特許出願第10/841,261号に関連し、それを参照により本明細書に組み込む。
本発明は一般に、ディジタルデータプロセッサの分野に関し、より詳細にはディジタル信号プロセッサ(DSP)またはその他のタイプのディジタルデータプロセッサで用いられるマルチスレッディング、およびパイプライン化の技法に関する。
パイプライン化は、実行時に複数の命令がオーバラップされる、良く知られたプロセッサの実装技法である。従来のパイプライン技法は、たとえば、John L.Hennessy及びDavid A.Pattersonの「Computer Architecture:A Quantitative Approach」(Third Edition、Morgan Kaufmann Publishers,Inc.、San Francisco、California、2003年)に記載されている。
図1Aは、オーバラップのない2つの命令の実行を含む例を示している。この例では2つの命令は、整数加算命令addi r0、r2、8、および整数乗算命令muli r8、r3、4である。第1の命令addiは、レジスタr2の内容と即値(immediate value)8を加算し、結果をレジスタr0に格納する。説明を簡単明瞭にするために、それぞれの命令は、命令取出し(IF)、読出し(RD)、実行(EX)、およびライトバック(WB)として示される同じ4つのパイプラインステージを含むものとする。
第1ステージ(IF)では、メモリから命令が取り出され、デコードされる。第2ステージ(RD)では、レジスタファイルからオペランドが読み出される。第3ステージ(EX)では、加算が実行される。最後に第4ステージ(WB)では、結果がロケーションr0にてレジスタファイルに書き戻される。addi命令が完了したとき、次の命令muliが開始される。muli命令は、レジスタr3の内容と即値4の加算を行い、結果をレジスタr8に格納する。
図1Bは、同じ2つの命令を示すが、従来のパイプライン技法を用いてそれらをいかにオーバラップすることができるかを示している。それぞれのパイプラインステージ(IF、RD、EX、およびWB)は一般に、クロック境界上で実行される。第2の命令muliは追加のハードウェアを必要とせずに、第2のクロックサイクルで開始することができる。IF、RD、EX、およびWBステージに関連するハードウェアは、2つの命令間で共有されるが、1つの命令の各ステージは、時間的に他方の各ステージに対してシフトされる。
図2は、パイプラインの実装において生じる複雑さを示している。この例では、muli命令は、オペランドとしてレジスタr0の内容が必要であり、したがってaddi命令が計算を行って、加算の演算結果をr0に書き戻すまではr0を読み出せない。muli命令の処理は、addi命令の開始に続く次のクロックサイクルで始まるが、この処理は停止し、addi命令の実行およびライトバックステージが完了するのを待たなければならない。オペランドが使用可能になるまでmuli命令が待たなければならない空のサイクルは通常、パイプライン中の「バブル」と呼ばれる。
単一スレッドのプロセッサでは、パイプラインバブルを低減する通常の方法はバイパスとして知られており、その場合、WBステージにおいて計算された値をレジスタファイルに書き戻す代わりに、結果は、結果を必要とするプロセッサ実行ユニットに直接送られる。これにより、高度にパイプライン化された機械では、バブルは低減されるが解消されない。これはまた一般に、依存関係チェックおよびバイパスハードウェアを必要とし、プロセッサのコストと複雑さが必要以上に増大する。
パイプライン停止はまた、マルチスレッディング(multithreading)を用いることによって低減することが可能である。マルチスレッドプロセッサは、複数の異なる命令シーケンス、すなわち「スレッド(thread)」の同時実行をサポートするプロセッサである。従来のスレッド技法は、たとえば、M.J.Flynnの「Computer Architecture:Pipelined and Parallel Processor Design」(Jones and Bartlett Publishers、Boston、MA、1995年)、および G.A.Blaauw及びFrederick P.Brooksの「Computer Architecture:Concepts and Evolution」(Addison−Wesley、Reading、Massachusetts、1997年)に記載されており、その両方を参照により本明細書に組み込む。
米国特許仮出願第60/560,199号
米国特許出願第10/841,261号
米国特許出願第10/269,372号
米国特許出願第10/269,245号
米国特許第6,842,848号
米国特許出願第10/269,373号
John L.Hennessy及びDavid A.Patterson、「Computer Architecture:A Quantitative Approach」(Third Edition、Morgan Kaufmann Publishers,Inc.、San Francisco、California、2003年)
M.J.Flynn、「Computer Architecture:Pipelined and Parallel Processor Design」(Jones and Bartlett Publishers、Boston、MA、1995年)
G.A.Blaauw及びFrederick P.Brooks、「Computer Architecture:Concepts and Evolution」(Addison−Wesley、Reading、Massachusetts、1997年)
しかし、上記その他の従来手法は、スレッドごとの多重同時パイプラインは可能でなく、パイプラインシフトもサポートしていない。
したがって、マルチスレッドディジタルデータプロセッサにおいては、改良されたパイプラインを提供できる技法が必要である。
有利には、本発明は例示的な実施形態において、スレッドごとの多重同時パイプラインが可能になり、かつパイプラインシフトをサポートするマルチスレッドプロセッサを提供する。
本発明の一態様によれば、マルチスレッドプロセッサは、複数のハードウェアスレッドユニットと、スレッドユニットから受け取った命令をデコードするためにスレッドユニットに結合された命令デコーダと、デコードされた命令を実行するための複数の実行ユニットを含む。マルチスレッドプロセッサは、ハードウェアスレッドユニットのそれぞれに関連付けられたスレッド用の命令発行シーケンスを制御するように構成される。所与のプロセッサクロックサイクルで、指定された1つのスレッドだけが1つまたは複数の命令を発行することができるが、命令を発行できるように指定されるスレッドは、複数のクロックサイクルにわたって、命令発行シーケンスに従って変化する。命令は、少なくとも所与の1つのスレッドが多重同時命令パイプラインをサポートできるようにパイプライン化される。
例示的な実施形態では、命令発行シーケンスは、トークントリガスレッディング手法によって決定される。より具体的には、プロセッサがN個のスレッドをサポートする構成では、N個の連続するプロセッサクロックサイクルにわたって、N個のスレッドのそれぞれは、N個の連続するプロセッサクロックサイクルの対応する1つのみにおいて命令を発行することができる。
例示的な実施形態では、それぞれのスレッドは、その対応するプロセッサクロックサイクルの1つにおいて、3つまでの命令を発行することが可能になる。命令はパイプライン化され、少なくとも5個の別々の命令パイプラインが、異なるスレッドを同時に実行することができるようになる。
例示的な実施形態におけるパイプライン化された命令は、ロード/格納命令、演算論理ユニット命令、整数乗算命令、ベクトル乗算命令、およびベクトル乗算およびリダクション命令を含む。
本発明の他の態様によれば、ベクトル乗算およびリダクション命令は、プロセッサのスレッド総数より多い複数のステージを用いてパイプライン化される。たとえば、ベクトル乗算およびリダクション命令は、命令デコードステージ、ベクトルレジスタファイル読出しステージ、少なくとも2つの乗算ステージ、少なくとも2つの加算ステージ、アキュムレータ読出しステージ、複数のリダクションステージ、およびアキュムレータライトバックステージを含めた少なくとも11個のステージを有するパイプラインを含むことができる。アキュムレータ読出しステージは、他のステージ、たとえば加算ステージと組み合わせてもよい。それぞれのベクトル乗算およびリダクション命令用の各パイプラインは、複数のパイプラインステージだけ互いにシフトすることができる。
本発明は、例示的な実施形態において、従来技法に対していくつかの重要な利点をもたらす。たとえば、従来技法を用いて得られるものより高度の同時処理が得られる。また、計算結果が、同じスレッドからの次の命令によって必要となる前に、適切なレジスタファイルに書き戻されることが保証されるので、依存関係チェックおよびバイパスハードウェアが不要になる。さらに、この技法はプロセッサの消費電力を制限するのに役立つ。
マルチスレッドプロセッサの例に関連して、本発明を説明する。しかし、本発明は示された具体的な構成が必要ではなく、他のタイプのディジタルデータプロセッサおよび付随する処理回路を用いて実施できることが理解されるべきである。
ここで説明する所与のプロセッサは、1つまたは複数の集積回路の形で実施することができる。
本発明は、例示的な実施形態において、マルチスレッドプロセッサでの使用に適したパイプライン技法を提供する。この技法を用いて、複数のスレッドからの複数の命令を、効率の良い形で、同時に実行することができる。以下に詳細に述べられるように例示的な実施形態では、低電力動作を保ったままで同時実行を得るために、可変長パイプライン、スタガ実行、および循環型開始実行が用いられる。例示的な実施形態は、従来の手法を用いて得られるものより高度の同時処理が得られる。
図3は、パイプライン化された実行によって生じる「バブル」を除去する、マルチスレッドパイプラインの例を示す。ここでの前の例のように、説明を簡単明瞭にするために、この例では発行される命令はそれぞれ、同じ4つのパイプラインステージ、すなわち、IF、RD、EX、およびWBを含むものとする。さらに、スレッドが3つあり、したがって命令を順次発行するハードウェアスレッドユニットすなわち「コンテキスト」が3つあるものとする。通常のマルチスレッドプロセッサの実装形態では一般に、所与のスレッドは、ハードウェアとしてだけでなくソフトウェアとしても見ることができる。したがって所与のスレッドに関連する具体的なプロセッサハードウェアは、ここではより詳細にはハードウェアスレッドユニット、または単に「コンテキスト」と呼ぶ。
この例では、まず整数加算命令addi r0,r2,8が、最初のクロックサイクルで、第1のコンテキストによって発行される。他の2つのコンテキストは、それぞれの後続のクロックサイクルで、命令を発行する。それぞれのコンテキストが命令を発行するには、合計3つのクロックサイクルを要する。第4のクロックサイクルで、第1のコンテキストが、もう1つの命令、すなわち整数乗算命令muli r8,r0,4を発行する。
より具体的には、サイクル1で、addi命令のためにスレッド1のIFステージが実行される。サイクル2では、スレッド1のRDステージが実行されるのと同時に、スレッド2のIFステージが実行される。サイクル3では、スレッド3のIFステージが実行され、スレッド2のRDステージが実行され、かつスレッド1のEXステージが実行される。サイクル4では、muli命令のスレッド1のIFステージが、addi命令のWBステージと同時に実行される。同時に、スレッド2のEXステージが実行され、かつスレッド3のRDステージが実行される。
この例から、同じスレッドおよび異なるスレッドからの複数の命令がオーバラップされ、同時に実行されることがわかる。またaddi命令の結果がmuli命令によって必要であるにもかかわらず、パイプライン中にはバブルがないことがわかる。したがって図3の例は、適切に構成されたパイプラインおよび十分な数のスレッドによって、サイクルごと、コンテキストごとに1つの命令が発行されるだけであるにもかかわらず、すべてのハードウェアコンテキストが同時に実行され得ることを示している。具体的なスレッドおよびパイプラインステージの数は、説明のためだけのものであり、好ましい実装形態を反映するものではない。当業者には、ここで得られる教示により、特定の応用例に対するスレッドおよびパイプラインステージの適切な数を容易に決定することができるであろう。
前に示したように本発明は、マルチスレッドプロセッサ内に有利に実施することができる。本発明を実施することができるよりマルチスレッドプロセッサのより具体的な例は、本願の譲受人に譲渡された、2002年10月11日出願の「Multithreaded Processor With Efficient Processing For Convergence Device Applications」という名称の米国特許出願第10/269,372号に記載されており、それを参照により本明細書に組み込む。このマルチスレッドプロセッサは、RISC(登録商標)ベース制御コード、DSPコード、Java(登録商標)コード、およびネットワーク処理コードを実行するように構成することができる。これには、単一命令多重データ(SIMD)ベクトル処理ユニット、リダクションユニット、および長命令語(LIW)複合命令実行が含まれる。この例示のマルチスレッドプロセッサに用いるのに適したスレッディングおよびパイプライン化技法は、本願の譲受人に譲渡された、2002年10月11日出願の「Method and Apparatus for Token Triggered Multithreading」という名称の米国特許出願第10/269,245号で、米国特許第6,842,848号として発行されたものに記載されており、同特許を参照により本明細書に組み込む。
本発明は、他のマルチスレッドプロセッサ、またはより一般に他のタイプのディジタルデータプロセッサ内に実施することができる。次に、このような他のプロセッサについて図4を参照して説明する。
図4は、リダクションユニット402、およびアキュムレータレジスタファイル406を組み込んだマルチスレッドプロセッサ400の例を示す。プロセッサ400は、米国特許出願第10/269,372号に記載されているものと概ね同様であるが、上に引用した米国特許出願第10/841,261号に記載のように構成されたリダクションユニット402と、アキュムレータレジスタファイル406が組み込まれている。
マルチスレッドプロセッサ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は、MMU420を介してプロセッサ400の外部のメインメモリ(図示せず)とのインタフェースを有する。MMU420は、キャッシュ410と同様に、プロセッサによってサポートされるN個のスレッドのそれぞれのために別々のインスタンスを含む。MMU420は、メインメモリからの適切な命令が、マルチスレッドキャッシュ410にロードされるのを確実にする。
図では接続が明示されていないが、データメモリ412はまた、上記の外部メインメモリに直接接続される。データメモリ412にはまた、データバッファ430が付随する。
一般に、マルチスレッドキャッシュ410は、マルチスレッドプロセッサ400によって実行されるべき命令を格納するのに用いられ、データメモリ412は、命令が作用する対象となるデータを格納する。命令は、命令デコーダ416によってマルチスレッドキャッシュ410から取り出され、デコードされる。以下に説明するように、命令デコーダ416は、命令タイプに応じて、プロセッサ内の様々な他のユニットへ所与の命令または関連する情報を送ることができる。
プロセッサ400は、ブランチ命令待ち行列(IQ)440、およびプログラムカウンタ(PC)レジスタ442を含む。プログラムカウンタレジスタ442は、各スレッド用に1つのインスタンスを含む。ブランチ命令待ち行列440は、命令デコーダ416から命令を受け取り、プログラムカウンタレジスタ442と連動して、図ではキャリー伝播加算器(Carry−Propagate Adder: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内で実行可能な命令タイプは、ブランチ、ロード、格納、整数、およびベクトル/SIMD命令タイプを含む。所与の命令がブランチ、ロード、格納、または整数演算を指定しない場合は、それはベクトル/SIMD命令である。その他の命令タイプを用いる、あるいは代替として用いることもできる。整数、およびベクトル/SIMD命令タイプは、ここではより一般的にそれぞれ、整数、およびベクトル命令タイプと呼ぶものの例である。
ベクトルIQ456は、命令デコーダ416から送られるベクトル/SIMD命令を受け取る。対応するオフセットユニット458は、それぞれのスレッド用に別個のインスタンスを有するように図示されており、独立のスレッドデータが損なわれないことを確実にするために適切なビットを挿入する。
プロセッサ400のベクトルユニット460は、N個の異なる並列部分に分離され、同様に分割されたベクトルファイル462を含む。ベクトルファイル462は、VR00からVR31として示される32個のレジスタを含む。ベクトルファイル462は、それがベクトル/SIMD命令タイプに対して作用する点を除いて、レジスタファイル418とほぼ同じ目的で働く。
典型的には、ベクトルユニット460は、ベクトル命令待ち行列456、オフセットユニット458、ベクトルファイル462、ならびにそれらに関連する演算および記憶要素を含む。
ベクトルユニット460の動作は、以下の通りである。小数または整数いずれかのデータタイプとして符号化されたベクトル/SIMDデータブロックは、ベクトルファイル462から読み出され、構造上可視のレジスタVRA、VRB、VRCに格納される。フローは、そこから、ベクトル/SIMDデータの並列同時乗算を実行する乗算器(MPY)を通って進む。キャリースキップ加算器(CSA)、およびCPAを含む加算器ユニットは、追加の算術演算を行うことができる。たとえば、当業者には理解されるように、ベクトルレジスタファイルからのアキュムレータ値への加算に1つまたは複数のCSAを用いることができ、乗算動作を完了するための最後の加算を行うために1つまたは複数のCPAを用いることができる。計算結果は、結果レジスタ464に格納され、リダクションユニット402に入力オペランドとして供給される。リダクションユニット402は、生成される合計結果が、各動作が直列に実行された場合に得られるものと同じになるように、各入力オペランドを合計する。リダクションされた合計は、さらに処理するために、アキュムレータレジスタファイル406に格納される。
ベクトル内積を行うとき、MPYブロックは4つの乗算を並列に行い、CSAおよびCPAユニットは、追加の加算演算を行うか、あるいは単に乗算結果を記憶するために結果レジスタ464に転送し、リダクションユニット402は、乗算結果をアキュムレータレジスタファイル406に格納されたアキュムレータ値と共に合計する。次いで、リダクションユニットによって発生された結果は前述のように、次の繰り返しに用いるためにアキュムレータレジスタファイルに格納される。
この例ではアキュムレータレジスタファイル406は、ACC00〜ACC15として示される合計16個のアキュムレータレジスタを含む。
マルチスレッドプロセッサ400は、本願の譲受人に譲渡された、2002年10月11日出願の「Method and Apparatus for Register File Port Reduction in a Multithreaded Processor」という名称の米国特許出願第10/269,373号に記載されているような、レジスタファイルへのスレッドベースのアクセス技法を利用することができ、それを参照により本明細書に組み込む。
マルチスレッドプロセッサ400は、前に引用した米国特許出願第10/841,261号に記載されているような、ベクトル内積、およびその他のタイプの並列ベクトル乗算およびリダクション演算を行う場合の使用に適切である。
本発明の例示的な実施形態では、トークントリガスレッディング(token torriger threading)として知られる手法が利用される。トークントリガスレッディングは、前に引用した米国特許第6,842,848号として発行された米国特許出願第10/269,245号に記載されている。通常、トークントリガスレッディングは、マルチスレッドプロセッサの複数のスレッドのそれぞれに異なるトークンを割り当てる。たとえば、トークントリガスレッディングは、現在のプロセッサクロックサイクルと関連して、後続のクロックサイクルにおいて命令を発行することが可能になる、プロセッサのスレッドの特定の1つを識別するためにトークンを利用することができる。
図5は、スレッド数Nが8であるマルチスレッドプロセッサの実装形態用のトークントリガスレッディングの例を示す。一般に、すべてのスレッドは同時に動作し、それぞれがスレッドキャッシュ110およびデータメモリ112の対応するインスタンスにアクセスする。図5に示されるように、8個のスレッドは、スレッド0、スレッド1、スレッド2、スレッド7として示され、リング状に直列に相互接続されて示されている。
図5のトークントリガスレッディングによれば、すべてのハードウェアスレッドユニットすなわちコンテキストは同時に命令を実行することが可能であるが、プロセッサの特定のクロックサイクル内では、1つのコンテキストだけが命令を発行することができる。言い換えれば、すべてのコンテキストは同時に実行するが、特定のクロックサイクルでは1つのコンテキストだけがアクティブとなる。したがって、合計C個のコンテキストがあれば、すべてのコンテキストから命令を発行するには、C個のクロックサイクルが必要になる。各クロックサイクルでは、コンテキストの1つが命令を発行し、次に命令を発行するスレッドはトークンによって示される。
図5の例では、トークンは順次式またはラウンドロビン状(round−robin manner)に配列され、各コンテキストは順次的に命令を発行する。しかし、次に命令を発行するコンテキストを示すトークンは、偶数/奇数の交互パターンなど他のパターンを用いて構成することもできる。また上記のように、本発明と共に他のタイプのスレッディングを用いることもできる。
例示的な実施形態ではトークントリガスレッディングが用いられているが、本発明はこの特定のタイプのマルチスレッディングが必要ではなく、他のタイプのマルチスレッディング技法を用いることができる。
図6は、本発明によるマルチスレッドプロセッサ400内で、例としての命令機能がパイプライン化される様子を示す。本発明の例示的な実施形態では、好ましくは、このタイプのパイプライン化が前述のトークントリガスレッディングと併せて用いられるが、本発明を実施するのに、他の数多くのパイプライン化とスレッディングの組合せを用いてもよいことが理解されよう。
図は、ロード/格納(Ld/St)、演算論理ユニット(ALU)、整数乗算(I_Mul)、ベクトル乗算(V_Mul)、ならびにベクトル乗算およびリダクション(V_Mul Reduce)命令)に対するパイプラインの例を示す。この実装形態では、3個までのパイプラインを同時に開始することができ、5個すべてが同時に様々な実行フェーズをもつことができる。
Ld/Stパイプラインは、ステージ0〜ステージ8として示される9個のステージを有する。第1のステージ、ステージ0(Inst Dec)では、命令が取り出され、デコードされる。このステージは5個すべてのパイプラインに共通であり、命令がどの待ち行列に送られるかを決定する。ステージ1(RF Read)では、レジスタファイルのオペランドが読み出される。これは、ロードまたは格納動作に対する基準アドレスとなる。格納命令の場合は、格納されるべきデータも読み出される。ステージ2(Agen)では、即値がアドレスに加算され、完全なアドレスが発生される。ステージ3(Xfer)では、計算されたアドレスがメモリサブシステムに転送される。ステージ4(Int/Ext)では、メモリアクセスが、内部メモリに対するものか外部メモリに対するものかが決定される。ステージ5〜7(Mem0、Mem1、Mem2)では、メモリから値が読み出されるか、メモリに値が書き込まれる。ステージ8(WB)では、ロード命令でメモリから読み出された値がレジスタファイルに書き込まれる。
ALUパイプラインは、ステージ0〜ステージ6として示される7個のステージを有する。Ld/Stパイプラインの場合のように、第1のステージ、ステージ0(Inst Dec)では、すべての命令が取り出され、デコードされる。ステージ1(Wait)では、ウェイトサイクルが挿入される。これにより、Ld/StおよびALUハードウェアが、同じレジスタファイルの読出しポートを共有できるようになる。後続のステージ、ステージ2(RF Read)では、演算機能用のオペランドがレジスタファイルから読み出される。ステージ3および4(Exec1、Exec2)では、演算(たとえば、加算、比較、シフトなど)の結果が計算される。ステージ5(Xfer)では、結果がレジスタファイルに転送される。ステージ6(WB)では、結果がレジスタファイルに書き戻される。
I_Mulパイプラインは、ALUパイプラインと同様であり、これらは共通の構成上のリソースを共有する。図は、I_Mulパイプラインでの追加のステージ(Exec3)を除いて、各パイプラインステージは同一であることを示している。これにより、乗算結果を計算するための追加のサイクルが利用可能になる。
V_Mulパイプラインは、先に述べたALUおよびI_Mulパイプラインとは異なる構成上のリソースを使用する。したがってV_Mulパイプラインは、リソース競合なしにそれらの命令と同時に実行することができる。ステージ0(Inst Dec)は、すべての命令と同様であり、デコードされた命令を正しいパイプラインへ送ることができるようにする。ステージ1(VRF Read)では、ベクトルレジスタファイルのオペランドが読み出される。ステージ2〜5(MPY1、MPY2、Add1、Add2)は、複数要素ベクトル演算を行う。乗算結果をキャリーセーブ形式から2の補数形式に戻すために、2つの加算ステージがある。さらに、各ベクトルが簡単な演算のみを要するならば、これは各加算ステージで行うことができる。ステージ6(Xfer)では、結果がベクトルレジスタファイルに戻され、ステージ7(WB)では結果が書き戻される。
V_Mul Reduceパイプラインは、追加のリダクション演算が行われることを除いて、V_Mulパイプラインと同様である。リダクションはアキュムレータオペランドと共に、4個のベクトル要素の積をとり、単一のスカラー要素へのリダクションを行う。通常これは、すべての積をアキュムレータに加算する、あるいはすべての積をアキュムレータから減算するものであるが、他の組合せも可能である。V_MulパイプラインとV_Mul Reduceパイプラインは、ステージ5までは同じである。ステージ5(Add2、ACC Read)では、追加の構成上のアキュムレータレジスタファイルが読み出される。この値は、ベクトル要素と演算的に組み合わされ、単一のスカラーにリダクションされる。4個のステージ(Reduce1、Reduce2、Reduce3、Reduce4)がこのリダクションに充てられ、次いでステージ10(ACC WB)では、このスカラー値がアキュムレータレジスタファイル(すなわち、ベクトルレジスタファイルとは異なる構成上の空間)に書き戻される。
図2のように、単一のスレッドが各サイクルで命令を発行したならば、パイプライン中にバブルが誘起される。しかし、1つのタイプのパイプラインだけがある図3の簡略化されたケースのように、例示的な実施形態では5個すべてのプロセッサパイプラインが、バブルを避けるためにインタリーブされマルチスレッド化される。図5に示されるトークントリガスレッディングによれば、各ハードウェアスレッドユニットは、3個までの命令を発行する。これにより、どのスレッドも停止せず、すべてのスレッドがデッドロックなしに完了することになる。
前述のように、この実装形態では、5個すべてのパイプラインが、複数のハードウェアスレッドユニットからの命令に対して同時にアクティブとなり得る。これにより、パイプライン中の潜在的なバブルが、他のスレッドユニットからの作業によって埋められる。
V_Mul Reduceパイプラインの相次ぐリダクション動作はバブルを生じないので、所与のV_Mul Reduceパイプラインは、V_Mulパイプラインから局所的にシフトできることに留意すべきである。V_Mul Reduceパイプラインの所要時間が、ハードウェアスレッドユニットの数(この実装形態では8)より長いので、このようなシフトによってパイプラインバブルが生じ得るように見える。言い換えれば、パイプラインの計算サイクル(V_Mul Reduceにでは11クロックサイクル)は、発行サイクル(各スレッドは、8クロックサイクルごとに発行するようになる。)より長い。実際には、アキュムレータレジスタファイルの読出しフェーズが、V_Mulパイプラインの計算からシフトされるので、これは生じない。
図7は、発行サイクルよりも長い計算サイクルを可能にするために、複数のV_Mul Reduceパイプラインを、互いに対してシフトすることができる様子を示している。図は、第1のV_Mul Reduce命令のサイクル5から始まっていることに注意されたい。この実装形態では8個のスレッドユニットがあるので、次のV_Mul Reduce命令はサイクル8で発行される。図からわかるように、アキュムレータレジスタファイルはサイクル10で書き戻される。しかし、各オペランドはサイクル13まで、第2の命令によって読み出されない。第2のV_Mul Reduceパイプラインは、第1のV_Mul Reduceパイプラインから局所的にシフトされたと考えることができる。これにより、パイプライン中にバブルを発生せずに、実行フェーズを長くすることが可能になる。
上述の例示的な実施形態は、有利に、スレッドごとの多重同時パイプラインを可能にし、高度にマルチスレッド化されたパイプラインでのパイプラインシフトを提供する。これはまた、同じスレッドからの次の命令によって必要となる前に、結果がレジスタファイルに書き戻されることが保証されるので、依存関係チェック、およびバイパスハードウェアが不要になる。
図に示された特定のプロセッサ、マルチスレッディング、パイプライン化、およびシフトの構成は、例示のためのみに示されたものであり、当業者には明らかなように、明示されていない追加要素または代替要素を含めることができることに留意されたい。
また、本発明は、図4に示される特定のマルチスレッドプロセッサ構成は必要でないことが強調されるべきである。本発明は、その他の多種多様なマルチスレッドプロセッサ構成中で実施することができる。
したがって、上述の本発明の実施形態は、例示のみのためであり、当業者には添付の特許請求の範囲の範囲内で、数多くの代替実施形態が明らかとなるであろう。たとえば、図4に示される特定のハードウェアスレッドユニット、命令デコーダ、および実行ユニットは、他の実施形態において変更することができ、本発明がこのような要素のいかなる特定のタイプまたは構成が必要であると解釈されるべきではない。また、上記のように、パイプライン構成、スレッドのタイプ、および命令形式は、所与の応用例に対する具体的な必要性に適合させるために変更することができる。
Claims (20)
- 複数のハードウェアスレッドユニットと、
前記ハードウェアスレッドユニットから受け取った命令をデコードする、前記スレッドユニットに結合された命令デコーダと、
デコードされた前記命令を実行する複数の実行ユニットと、を含むマルチスレッドプロセッサであって、
前記マルチスレッドプロセッサは、前記ハードウェアスレッドユニットのそれぞれに関連付けられた複数のスレッド用の命令発行シーケンスを制御するように構成され、
所与のプロセッサクロックサイクルでは、指定された1つのスレッドのみが1つまたは複数の命令を発行することが可能になり、前記指定されたスレッドは、前記命令発行シーケンスに従って複数のクロックサイクルにわたって変化する命令を発行することが可能であり、
前記命令は、所与の少なくとも1つのスレッドが、多重同時命令パイプラインをサポートすることが可能であるようにパイプライン化されていることを特徴とするプロセッサ。 - 前記命令発行シーケンスが、トークントリガスレッディングを用いて決定されることを特徴とする請求項1に記載のマルチスレッドプロセッサ。
- 前記プロセッサがN個のスレッドをサポートし、そして、前記N個のスレッドのそれぞれが、N個の連続する前記プロセッサクロックサイクルのシーケンスにわたって、前記N個の連続するプロセッサクロックサイクルのうちの対応する1つのみにおいて、命令を発行することが可能であることを特徴とする請求項2に記載のマルチスレッドプロセッサ。
- 前記スレッドのそれぞれが、前記プロセッサクロックサイクルのうちの対応する1つに対し、2つまたはそれ以上の命令を発行することが可能であることを特徴とする請求項1に記載のマルチスレッドプロセッサ。
- 前記スレッドのそれぞれが、前記プロセッサクロックサイクルのうちの対応する1つに対し3つまでの命令を発行することが可能であることを特徴とする請求項1に記載のマルチスレッドプロセッサ。
- 前記命令がパイプライン化され、そして前記所与のクロックサイクルにおいて3つまでの命令の発行が可能であることを特徴とする請求項1に記載のマルチスレッドプロセッサ。
- 前記命令がパイプライン化され、そして少なくとも5個の別々の命令パイプラインが、前記スレッドのうちの異なるスレッドのために同時に実行することが可能であることを特徴とする請求項1に記載のマルチスレッドプロセッサ。
- 前記パイプライン化された命令が、ロード/格納命令、演算論理ユニット命令、整数乗算命令、ベクトル乗算命令、ベクトル乗算およびリダクション命令のうちの少なくとも1つを含むことを特徴とする請求項1に記載のマルチスレッドプロセッサ。
- 前記演算論理ユニット命令が、その命令デコードステージとレジスタファイル読出しステージの間に少なくとも1つのウェイトステージを含むパイプラインを有し、前記ウェイトステージにより、前記ロード/格納命令と前記演算論理命令が1組のレジスタファイル読出しポートを共有することが可能であることを特徴とする請求項8に記載のマルチスレッドプロセッサ。
- 前記整数乗算命令が、その命令デコードステージとレジスタファイル読出しステージの間に少なくとも1つのウェイトステージを含むパイプラインを有し、前記ウェイトステージにより、前記整数乗算命令と前記演算論理命令が1組のレジスタファイル読出しポートを共有することが可能であることを特徴とする請求項8に記載のマルチスレッドプロセッサ。
- 前記ベクトル乗算命令が、演算論理ユニットおよび整数乗算命令とは異なる1組の実行ユニットリソースを使用し、したがって前記命令のどちらとも同時に実行することができることを特徴とする請求項8に記載のマルチスレッドプロセッサ。
- 前記ベクトル乗算およびリダクション命令が、プロセッサのスレッド総数より多い複数のステージを用いてパイプライン化されていることを特徴とする請求項8に記載のマルチスレッドプロセッサ。
- 前記ベクトル乗算およびリダクション命令が、少なくとも11個のステージを有するパイプラインを含むことを特徴とする請求項8に記載のマルチスレッドプロセッサ。
- 前記ベクトル乗算およびリダクション命令が、命令デコードステージと、ベクトルレジスタファイル読出しステージと、少なくとも2つの乗算ステージと、少なくとも2つの加算ステージと、アキュムレータ読出しステージと、複数のリダクションステージと、アキュムレータライトバックステージとを含むことを特徴とする請求項13に記載のマルチスレッドプロセッサ。
- 前記アキュムレータ読出しステージが、前記加算ステージの1つと組み合わされていることを特徴とする請求項14に記載のマルチスレッドプロセッサ。
- それぞれのベクトル乗算およびリダクション命令用のパイプラインが、複数のパイプラインステージだけ互いに対してシフトされていることを特徴とする請求項8に記載のマルチスレッドプロセッサ。
- 前記パイプライン化された命令が、計算サイクルが前記マルチスレッドプロセッサの発行サイクルより長いパイプラインを有するベクトル乗算およびリダクション命令を含むことを特徴とする請求項1に記載のマルチスレッドプロセッサ。
- 前記プロセッサが集積回路を含むことを特徴とする請求項1に記載のマルチスレッドプロセッサ。
- メモリと、
前記メモリに結合されたマルチスレッドプロセッサとを含む集積回路であって、
前記マルチスレッドプロセッサは、
複数のハードウェアスレッドユニットと、
前記ハードウェアスレッドユニットから受け取った命令をデコードする、前記スレッドユニットに結合された命令デコーダと、
デコードされた命令を実行する複数の実行ユニットとを含み、
前記マルチスレッドプロセッサは、前記ハードウェアスレッドユニットのそれぞれに関連付けられた複数のスレッド用の命令発行シーケンスを制御するように構成され、
所与のプロセッサクロックサイクルでは、指定された1つのスレッドのみが1つまたは複数の命令を発行することが可能であり、前記指定されたスレッドは、前記命令発行シーケンスに従って複数のクロックサイクルにわたって変化する命令を発行することが可能であり、そして、
前記命令は、所与の少なくとも1つのスレッドが、多重同時命令パイプラインをサポートすることを可能にするようにパイプライン化されていることを特徴とする集積回路。 - それぞれのスレッドに関連付けられた複数のハードウェアスレッドユニットと、前記スレッドユニットから受け取った命令をデコードする、前記スレッドユニットに結合された命令デコーダと、デコードされた命令を実行する複数の実行ユニットとを含むマルチスレッドプロセッサで用いられる方法であって、
所与のプロセッサクロックサイクルで、指定された1つのスレッドのみが1つまたは複数の命令を発行することが可能になる工程と、
命令発行シーケンスに従って複数のクロックサイクルにわたって変化する命令を発行することが可能である前記指定されたスレッドを変化させる工程と、
前記スレッドのうちの少なくとも所与の1つが、多重同時命令パイプラインをサポートすることを可能にするようにパイプライン化する工程とを含むことを特徴とする方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US56019904P | 2004-04-07 | 2004-04-07 | |
US11/096,917 US8074051B2 (en) | 2004-04-07 | 2005-04-01 | Multithreaded processor with multiple concurrent pipelines per thread |
PCT/US2005/011614 WO2005101221A1 (en) | 2004-04-07 | 2005-04-07 | Multithreaded processor with multiple concurrent pipelines per thread |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2007533007A true JP2007533007A (ja) | 2007-11-15 |
Family
ID=35150180
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007507460A Pending JP2007533007A (ja) | 2004-04-07 | 2005-04-07 | スレッドごとの多重同時パイプラインを有するマルチスレッドプロセッサ |
Country Status (6)
Country | Link |
---|---|
US (5) | US8074051B2 (ja) |
EP (4) | EP2339456A3 (ja) |
JP (1) | JP2007533007A (ja) |
KR (4) | KR101253549B1 (ja) |
TW (1) | TW200604940A (ja) |
WO (1) | WO2005101221A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012026124A1 (ja) * | 2010-08-25 | 2012-03-01 | パナソニック株式会社 | スレッド調停システム、プロセッサ、映像記録再生装置、およびスレッド調停方法 |
Families Citing this family (45)
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 |
TW200625097A (en) * | 2004-11-17 | 2006-07-16 | Sandbridge Technologies Inc | Data file storing multiple date types with controlled data access |
US8195922B2 (en) | 2005-03-18 | 2012-06-05 | Marvell World Trade, Ltd. | System for dynamically allocating processing time to multiple threads |
US7933405B2 (en) * | 2005-04-08 | 2011-04-26 | Icera Inc. | Data access and permute unit |
US8099448B2 (en) | 2005-11-02 | 2012-01-17 | Qualcomm Incorporated | Arithmetic logic and shifting device for use in a processor |
US7398329B2 (en) * | 2005-11-04 | 2008-07-08 | Sun Microsystems, Inc. | Pipelined I/O execution |
US20080071851A1 (en) * | 2006-09-20 | 2008-03-20 | Ronen Zohar | Instruction and logic for performing a dot-product operation |
US8819099B2 (en) * | 2006-09-26 | 2014-08-26 | Qualcomm Incorporated | Software implementation of matrix inversion in a wireless communication system |
US9110726B2 (en) * | 2006-11-10 | 2015-08-18 | Qualcomm Incorporated | Method and system for parallelization of pipelined computations |
KR100888675B1 (ko) * | 2007-02-15 | 2009-03-13 | 고려대학교 산학협력단 | 임베디드 코어에서 멀티 쓰레드 실행을 위해 확장된프로세서 및 임베디드 코어에서 멀티 쓰레드 실행 방법 |
EP2602710A1 (en) * | 2007-11-05 | 2013-06-12 | Aspen Acquisition Corporation | Method of encoding register instruction fields |
CN101290589B (zh) * | 2007-12-27 | 2010-06-16 | 华为技术有限公司 | 一种并发指令操作方法和装置 |
WO2009097444A1 (en) * | 2008-01-30 | 2009-08-06 | Sandbridge Technologies, Inc. | Method for enabling multi-processor synchronization |
CN102007469A (zh) * | 2008-02-18 | 2011-04-06 | 阿斯奔收购公司 | 用以加速空终止字符串操作的方法 |
KR20100133964A (ko) * | 2008-03-13 | 2010-12-22 | 아스펜 액퀴지션 코포레이션 | 유효 어레이를 비활성화함으로써 전력을 절약하기 위한 방법 |
JP2011530744A (ja) | 2008-08-06 | 2011-12-22 | アスペン・アクイジション・コーポレーション | 停止可能および再始動可能dmaエンジン |
KR101041777B1 (ko) * | 2009-06-08 | 2011-06-17 | 엠텍비젼 주식회사 | 멀티 스레드 처리 방법 및 이를 사용하는 프로세서 디바이스 |
US20110107061A1 (en) * | 2009-10-30 | 2011-05-05 | Warren David A | Performance of first and second macros while data is moving through hardware pipeline |
US9325352B2 (en) * | 2009-12-30 | 2016-04-26 | Intel Deutschland Gmbh | Control architectures for RF transceivers |
JP5533330B2 (ja) * | 2010-06-23 | 2014-06-25 | 富士ゼロックス株式会社 | データ処理装置 |
CN102495726B (zh) * | 2011-11-15 | 2015-05-20 | 无锡德思普科技有限公司 | 机会多线程方法及处理器 |
WO2013080289A1 (ja) * | 2011-11-28 | 2013-06-06 | 富士通株式会社 | 信号処理装置及び信号処理方法 |
KR101869325B1 (ko) * | 2011-12-13 | 2018-06-21 | 한국전자통신연구원 | 이종 멀티코어 환경에서의 코어 배정 장치 |
JP5819184B2 (ja) * | 2011-12-28 | 2015-11-18 | 富士通株式会社 | 情報処理装置及び情報処理装置の制御方法 |
JP5751181B2 (ja) * | 2012-01-24 | 2015-07-22 | 富士通セミコンダクター株式会社 | 命令制御回路、プロセッサ、及び命令制御方法 |
US9588766B2 (en) * | 2012-09-28 | 2017-03-07 | Intel Corporation | Accelerated interlane vector reduction instructions |
US9430384B2 (en) * | 2013-03-31 | 2016-08-30 | Intel Corporation | Instructions and logic to provide advanced paging capabilities for secure enclave page caches |
US11210098B2 (en) * | 2013-07-15 | 2021-12-28 | Texas Instruments Incorporated | Variable latency instructions |
CN104460934A (zh) * | 2013-09-13 | 2015-03-25 | 华为终端有限公司 | 多cpu调度方法及装置 |
US9766894B2 (en) | 2014-02-06 | 2017-09-19 | Optimum Semiconductor Technologies, Inc. | Method and apparatus for enabling a processor to generate pipeline control signals |
US9558000B2 (en) * | 2014-02-06 | 2017-01-31 | Optimum Semiconductor Technologies, Inc. | Multithreading using an ordered list of hardware contexts |
US9766895B2 (en) * | 2014-02-06 | 2017-09-19 | Optimum Semiconductor Technologies, Inc. | Opportunity multithreading in a multithreaded processor with instruction chaining capability |
US9558002B2 (en) * | 2014-09-30 | 2017-01-31 | Imagination Techologies Limited | Variable length execution pipeline |
KR102332523B1 (ko) | 2014-12-24 | 2021-11-29 | 삼성전자주식회사 | 연산 처리 장치 및 방법 |
KR20160108754A (ko) | 2015-03-06 | 2016-09-20 | 주식회사 에이디칩스 | 파이프라인 구조의 프로세서에서의 무조건 분기 명령어 처리 방법 |
US9870340B2 (en) * | 2015-03-30 | 2018-01-16 | International Business Machines Corporation | Multithreading in vector processors |
CN107977192A (zh) * | 2016-10-21 | 2018-05-01 | 超威半导体公司 | 用于执行低功率和低延时多精度计算的方法和系统 |
KR101856487B1 (ko) | 2017-03-03 | 2018-06-19 | 주식회사 티맥스데이터 | 파싱을 처리하기 위한 컴퓨팅 장치 |
CN108628639B (zh) | 2017-03-21 | 2021-02-12 | 华为技术有限公司 | 处理器和指令调度方法 |
US20200310799A1 (en) * | 2019-03-27 | 2020-10-01 | Mediatek Inc. | Compiler-Allocated Special Registers That Resolve Data Hazards With Reduced Hardware Complexity |
US11294672B2 (en) | 2019-08-22 | 2022-04-05 | Apple Inc. | Routing circuitry for permutation of single-instruction multiple-data operands |
US11132198B2 (en) * | 2019-08-29 | 2021-09-28 | International Business Machines Corporation | Instruction handling for accumulation of register results in a microprocessor |
US11256518B2 (en) | 2019-10-09 | 2022-02-22 | Apple Inc. | Datapath circuitry for math operations using SIMD pipelines |
US11126439B2 (en) | 2019-11-15 | 2021-09-21 | Apple Inc. | SIMD operand permutation with selection from among multiple registers |
US11855831B1 (en) | 2022-06-10 | 2023-12-26 | T-Mobile Usa, Inc. | Enabling an operator to resolve an issue associated with a 5G wireless telecommunication network using AR glasses |
Family Cites Families (61)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4001692A (en) * | 1975-07-07 | 1977-01-04 | Barry Research Corporation | Time diversity data transmission apparatus |
JPH0640301B2 (ja) * | 1983-09-22 | 1994-05-25 | ソニー株式会社 | 並列乗算回路 |
US4769779A (en) * | 1985-12-16 | 1988-09-06 | Texas Instruments Incorporated | Systolic complex multiplier |
US5241635A (en) | 1988-11-18 | 1993-08-31 | Massachusetts Institute Of Technology | Tagged token data processing system with operand matching in activation frames |
KR920003494B1 (ko) * | 1989-06-20 | 1992-05-01 | 삼성전자 주식회사 | 디지탈 신호처리 시스템에서의 실시간 2's 콤플리멘트코드 숫자의 승산방법 및 회로 |
US5404469A (en) * | 1992-02-25 | 1995-04-04 | Industrial Technology Research Institute | Multi-threaded microprocessor architecture utilizing static interleaving |
US5706459A (en) * | 1994-01-06 | 1998-01-06 | Fujitsu Limited | Processor having a variable number of stages in a pipeline |
US5613114A (en) * | 1994-04-15 | 1997-03-18 | Apple Computer, Inc | System and method for custom context switching |
US5812811A (en) * | 1995-02-03 | 1998-09-22 | International Business Machines Corporation | Executing speculative parallel instructions threads with forking and inter-thread communication |
JP2798121B2 (ja) * | 1995-08-04 | 1998-09-17 | 日本電気株式会社 | データ処理装置 |
US6385634B1 (en) * | 1995-08-31 | 2002-05-07 | Intel Corporation | Method for performing multiply-add operations on packed data |
JP3510729B2 (ja) | 1996-02-29 | 2004-03-29 | 三洋電機株式会社 | 命令実行方法および命令実行装置 |
US5933627A (en) * | 1996-07-01 | 1999-08-03 | Sun Microsystems | Thread switch on blocked load or store using instruction thread field |
KR100291383B1 (ko) * | 1996-11-18 | 2001-09-17 | 윤종용 | 디지털신호처리를위한명령을지원하는모듈계산장치및방법 |
US6088788A (en) | 1996-12-27 | 2000-07-11 | International Business Machines Corporation | Background completion of instruction and associated fetch request in a multithread processor |
US6073159A (en) | 1996-12-31 | 2000-06-06 | Compaq Computer Corporation | Thread properties attribute vector based thread selection in multithreading processor |
US5907702A (en) * | 1997-03-28 | 1999-05-25 | International Business Machines Corporation | Method and apparatus for decreasing thread switch latency in a multithread processor |
US5958041A (en) * | 1997-06-26 | 1999-09-28 | Sun Microsystems, Inc. | Latency prediction in a pipelined microarchitecture |
US5889689A (en) * | 1997-09-08 | 1999-03-30 | Lucent Technologies Inc. | Hierarchical carry-select, three-input saturation |
US6530014B2 (en) * | 1997-09-08 | 2003-03-04 | Agere Systems Inc. | Near-orthogonal dual-MAC instruction set architecture with minimal encoding bits |
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 |
US6697935B1 (en) * | 1997-10-23 | 2004-02-24 | International Business Machines Corporation | Method and apparatus for selecting thread switch events in a multithreaded processor |
US6212544B1 (en) * | 1997-10-23 | 2001-04-03 | International Business Machines Corporation | Altering thread priorities in a multithreaded processor |
US6161166A (en) * | 1997-11-10 | 2000-12-12 | International Business Machines Corporation | Instruction cache for multithreaded processor |
US5991785A (en) | 1997-11-13 | 1999-11-23 | Lucent Technologies Inc. | Determining an extremum value and its index in an array using a dual-accumulation processor |
US6092175A (en) * | 1998-04-02 | 2000-07-18 | University Of Washington | Shared register storage mechanisms for multithreaded computer systems with out-of-order execution |
US6182105B1 (en) | 1998-08-27 | 2001-01-30 | Lucent Technologies Inc. | Multiple-operand addition with intermediate saturation |
JP2000322235A (ja) * | 1999-05-07 | 2000-11-24 | Sony Corp | 情報処理装置 |
US6606704B1 (en) * | 1999-08-31 | 2003-08-12 | Intel Corporation | Parallel multithreaded processor with plural microengines executing multiple threads each microengine having loadable microcode |
US6526430B1 (en) | 1999-10-04 | 2003-02-25 | Texas Instruments Incorporated | Reconfigurable SIMD coprocessor architecture for sum of absolute differences and symmetric filtering (scalable MAC engine for image processing) |
US7120783B2 (en) | 1999-12-22 | 2006-10-10 | Ubicom, Inc. | System and method for reading and writing a thread state in a multithreaded central processing unit |
US6359579B1 (en) | 2000-02-17 | 2002-03-19 | Advanced Micro Devices, Inc. | Digital logic correction circuit for a pipeline analog to digital (A/D) converter |
US6557022B1 (en) * | 2000-02-26 | 2003-04-29 | Qualcomm, Incorporated | Digital signal processor with coupled multiply-accumulate units |
US6694425B1 (en) | 2000-05-04 | 2004-02-17 | International Business Machines Corporation | Selective flush of shared and other pipeline stages in a multithread processor |
US6898694B2 (en) * | 2001-06-28 | 2005-05-24 | Intel Corporation | High instruction fetch bandwidth in multithread processor using temporary instruction cache to deliver portion of cache line in subsequent clock cycle |
US7487505B2 (en) * | 2001-08-27 | 2009-02-03 | Intel Corporation | Multithreaded microprocessor with register allocation based on number of active threads |
US6968445B2 (en) * | 2001-12-20 | 2005-11-22 | Sandbridge Technologies, Inc. | Multithreaded processor with efficient processing for convergence device applications |
US6973471B2 (en) * | 2002-02-22 | 2005-12-06 | Freescale Semiconductor, Inc. | Method and apparatus for implementing signed multiplication of operands having differing bit widths without sign extension of the multiplicand |
US6912623B2 (en) | 2002-06-04 | 2005-06-28 | Sandbridge Technologies, Inc. | Method and apparatus for multithreaded cache with simplified implementation of cache replacement policy |
US6990557B2 (en) | 2002-06-04 | 2006-01-24 | Sandbridge Technologies, Inc. | Method and apparatus for multithreaded cache with cache eviction based on thread identifier |
GB2389433B (en) | 2002-06-08 | 2005-08-31 | Motorola Inc | Bit exactness support in dual-mac architecture |
US6925643B2 (en) * | 2002-10-11 | 2005-08-02 | Sandbridge Technologies, Inc. | Method and apparatus for thread-based memory access in a multithreaded processor |
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 |
US6971103B2 (en) | 2002-10-15 | 2005-11-29 | Sandbridge Technologies, Inc. | Inter-thread communications using shared interrupt register |
WO2004103056A2 (en) * | 2003-05-09 | 2004-12-02 | Sandbridge Technologies, Inc. | Processor reduction unit for accumulation of multiple operands with or without saturation |
US7428567B2 (en) | 2003-07-23 | 2008-09-23 | Sandbridge Technologies, Inc. | Arithmetic unit for addition or subtraction with preliminary saturation detection |
US7251737B2 (en) | 2003-10-31 | 2007-07-31 | Sandbridge Technologies, Inc. | Convergence device with dynamic program throttling that replaces noncritical programs with alternate capacity programs based on power indicator |
US7360064B1 (en) * | 2003-12-10 | 2008-04-15 | Cisco Technology, Inc. | Thread interleaving in a multithreaded embedded processor |
US7873815B2 (en) * | 2004-03-04 | 2011-01-18 | Qualcomm Incorporated | Digital signal processors with configurable dual-MAC and dual-ALU |
US7797363B2 (en) | 2004-04-07 | 2010-09-14 | Sandbridge Technologies, Inc. | Processor having parallel vector multiply and reduce operations with sequential semantics |
US8074051B2 (en) | 2004-04-07 | 2011-12-06 | Aspen Acquisition Corporation | Multithreaded processor with multiple concurrent pipelines per thread |
US7475222B2 (en) | 2004-04-07 | 2009-01-06 | Sandbridge Technologies, Inc. | Multi-threaded processor having compound instruction and operation formats |
TW200625097A (en) | 2004-11-17 | 2006-07-16 | Sandbridge Technologies Inc | Data file storing multiple date types with controlled data access |
US9110726B2 (en) | 2006-11-10 | 2015-08-18 | Qualcomm Incorporated | Method and system for parallelization of pipelined computations |
KR20100052491A (ko) | 2007-08-31 | 2010-05-19 | 샌드브리지 테크놀로지스, 인코포레이티드 | 가입자 및 엔터티 사이의 자동화된 상호작용을 위한 방법, 장치 및 구조 |
EP2602710A1 (en) | 2007-11-05 | 2013-06-12 | Aspen Acquisition Corporation | Method of encoding register instruction fields |
WO2009097444A1 (en) | 2008-01-30 | 2009-08-06 | Sandbridge Technologies, Inc. | Method for enabling multi-processor synchronization |
CN102007469A (zh) | 2008-02-18 | 2011-04-06 | 阿斯奔收购公司 | 用以加速空终止字符串操作的方法 |
KR20100133964A (ko) | 2008-03-13 | 2010-12-22 | 아스펜 액퀴지션 코포레이션 | 유효 어레이를 비활성화함으로써 전력을 절약하기 위한 방법 |
-
2005
- 2005-04-01 US US11/096,917 patent/US8074051B2/en active Active
- 2005-04-07 KR KR1020067022996A patent/KR101253549B1/ko active IP Right Grant
- 2005-04-07 EP EP11001889A patent/EP2339456A3/en not_active Ceased
- 2005-04-07 EP EP11001890A patent/EP2339457A3/en not_active Ceased
- 2005-04-07 EP EP11001888A patent/EP2339455A3/en not_active Ceased
- 2005-04-07 JP JP2007507460A patent/JP2007533007A/ja active Pending
- 2005-04-07 EP EP05732166A patent/EP1741033A4/en not_active Ceased
- 2005-04-07 KR KR1020127022421A patent/KR101303119B1/ko active IP Right Grant
- 2005-04-07 TW TW094111009A patent/TW200604940A/zh unknown
- 2005-04-07 KR KR1020127022422A patent/KR101295569B1/ko active IP Right Grant
- 2005-04-07 WO PCT/US2005/011614 patent/WO2005101221A1/en active Application Filing
- 2005-04-07 KR KR1020127022423A patent/KR101236396B1/ko active IP Right Grant
-
2009
- 2009-10-15 US US12/579,893 patent/US8892849B2/en active Active
- 2009-10-15 US US12/579,912 patent/US8918627B2/en active Active
- 2009-10-15 US US12/579,867 patent/US8959315B2/en active Active
-
2011
- 2011-10-27 US US13/282,800 patent/US8762688B2/en active Active
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012026124A1 (ja) * | 2010-08-25 | 2012-03-01 | パナソニック株式会社 | スレッド調停システム、プロセッサ、映像記録再生装置、およびスレッド調停方法 |
Also Published As
Publication number | Publication date |
---|---|
US8762688B2 (en) | 2014-06-24 |
US8918627B2 (en) | 2014-12-23 |
KR101295569B1 (ko) | 2013-08-12 |
US20100199075A1 (en) | 2010-08-05 |
KR101303119B1 (ko) | 2013-09-06 |
US20060095729A1 (en) | 2006-05-04 |
EP2339456A2 (en) | 2011-06-29 |
US20100122068A1 (en) | 2010-05-13 |
EP2339455A2 (en) | 2011-06-29 |
EP2339457A2 (en) | 2011-06-29 |
US20100199073A1 (en) | 2010-08-05 |
WO2005101221A1 (en) | 2005-10-27 |
EP1741033A1 (en) | 2007-01-10 |
KR20070011434A (ko) | 2007-01-24 |
KR20120114379A (ko) | 2012-10-16 |
US8959315B2 (en) | 2015-02-17 |
TW200604940A (en) | 2006-02-01 |
EP2339456A3 (en) | 2011-08-24 |
US20120096243A1 (en) | 2012-04-19 |
KR101236396B1 (ko) | 2013-02-22 |
KR20120114380A (ko) | 2012-10-16 |
US8892849B2 (en) | 2014-11-18 |
EP1741033A4 (en) | 2008-07-09 |
KR101253549B1 (ko) | 2013-04-11 |
US8074051B2 (en) | 2011-12-06 |
EP2339455A3 (en) | 2011-08-24 |
EP2339457A3 (en) | 2011-08-31 |
KR20120115553A (ko) | 2012-10-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8074051B2 (en) | Multithreaded processor with multiple concurrent pipelines per thread | |
KR101005718B1 (ko) | 포화와 함께 또는 포화 없이 다중 오퍼랜드들의 누산을 위한 프로세서 감소 유닛 | |
US7475222B2 (en) | Multi-threaded processor having compound instruction and operation formats | |
US11188330B2 (en) | Vector multiply-add instruction | |
JP4187720B2 (ja) | マルチスレッド・プロセッサにおけるレジスタ・ファイルのポートを削減するための方法および装置 | |
KR100227276B1 (ko) | 단일 사이클 마이크로 명령을 이용한 명령 스케줄링 방법 및 프로세서 | |
CN108885550B (zh) | 复数乘法指令 | |
CN101322111A (zh) | 每个线程具有多个并发流水线的多线程处理器 | |
US7523295B2 (en) | Processor and method of grouping and executing dependent instructions in a packet | |
JP5326314B2 (ja) | プロセサおよび情報処理装置 | |
KR101171403B1 (ko) | 합성 명령 및 연산 포맷들을 갖는 프로세서 | |
TW201823972A (zh) | 向量產生指令 |