JP2008524721A - Data部および関連するカウンタを備えるエントリを有するハードウェア・スタック - Google Patents

Data部および関連するカウンタを備えるエントリを有するハードウェア・スタック Download PDF

Info

Publication number
JP2008524721A
JP2008524721A JP2007546994A JP2007546994A JP2008524721A JP 2008524721 A JP2008524721 A JP 2008524721A JP 2007546994 A JP2007546994 A JP 2007546994A JP 2007546994 A JP2007546994 A JP 2007546994A JP 2008524721 A JP2008524721 A JP 2008524721A
Authority
JP
Japan
Prior art keywords
stack
value
counter
data
stack pointer
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.)
Granted
Application number
JP2007546994A
Other languages
English (en)
Other versions
JP4917045B2 (ja
Inventor
ドゥヤー,マイケル
ジャン,ホン
ピアッザ,トーマス
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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of JP2008524721A publication Critical patent/JP2008524721A/ja
Application granted granted Critical
Publication of JP4917045B2 publication Critical patent/JP4917045B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • G06F7/78Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor
    • G06F7/785Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using a RAM

Landscapes

  • Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Communication Control (AREA)

Abstract

いくつかの実施例によれば、n個のエントリを有するハードウェア・スタックにプッシュされる新しい値を決定することが判断される。スタック中の各エントリは、データ部および関連するカウンタを含む。新しい値がスタック・ポインタの現在のトップに関連するエントリのデータ部と等しい場合、そのエントリに関連するカウンタが増分される。新しい値がスタック・ポインタの現在のトップに関連するデータ部と等しくない場合、その新しい値は、次のエントリのデータ部に格納され、スタック・ポインタの現在のトップは前進する。

Description

本発明は、DATA部および関連するカウンタを備えるエントリを有するハードウェア・スタックに関する。
情報は、「スタック」と呼ばれる格納エリアまたはデータ・バッファに加えられ、あるいはそこから取り出すことができる。後入れ先出し(LIFO)スタックの場合、各値がそのスタックに加えられた(「プッシュされた」)順に基づいて取り出され(「ポップされ」)、最新のプッシュされた値は次にポップされる値となる。このタイプのスタックは、より新しい値がより古い値を押し下げる値のリストと考えることができ、その値はそのリストのトップから取り出される。
ランダム・アクセス・メモリ(RAM)ユニットおよび/またはハードウェア・レジスタに各値を格納することにより、このようなスタックを実行することができる。しかしながら、スタックに多くの値を格納する必要があるとき、必要とされるRAMの量および/またはハードウェア・レジスタの数は、非実用的となることがある。
図1はハードウェア・スタック100のブロック図である。特に、スタック100は、データ・エントリをサポートすることができるデータ格納領域110を含む(例えば、eまで、個別の値がスタック100に一度に格納することができる)。スタック100は、またそのスタックにプッシュする直近の値を格納しているエントリを示すスタック・ポインタのトップ(TOS)150を含む。
図1に示されたスタック100では、TOSポインタ150は、エントリ2に格納された値「1110」が直近に加えられたことを示す。データがスタック100から取り出される場合、値「1110」が出力され、TOSポインタは1へ減じられる(減分する)であろう。図1に示されるスタック100に、新しい値が加えられる場合、新しい値がエントリ3に格納され、TOSポインタ150は3へ増やされる(増分する)であろう。
データ格納領域110は、例えば、RAMユニットおよび/またはハードウェア・レジスタを使用して、実行される。しかしながら、スタック100に多くの値を格納する必要があるとき、RAMの量および/またはハードウェア・レジスタの数は、非実用的になるであろう。
図2は、いくつかの実施例によるハードウェア・スタック200のブロック図である。この場合、スタック200は、n個のエントリ(nは1より大きい整数)を備えるLIFOバッファである。スタック200中の各エントリは、データ部210および関連するカウンタ220を含む。カウンタ220は、データ部210の値がそのスタックに何回繰り返しプッシュされたかを示す。スタック200は、さらにTOSポインタ250を含む。データ部210、カウンタ220および/またはTOSポインタ250のいずれかは、例えばRAMユニット中で、またはハードウェア・レジスタで実行される。いくつかの実施例によるスタック200の動作は、図3〜図10に関して説明されるであろう。
図3は、データを、いくつかの実施例によるハードウェア・スタックにプッシュする方法のフローチャートである。図3の方法は、例えば図2に示されたスタック200に関して使用することができる。ここに説明されたフローチャートは、必ずしも固定された動作順を意味するものではなく、本実施例は、実行可能なあらゆる順で行なうことができる。ここに説明された方法のいずれもがハードウェア、ソフトウェア(マイクロコードを含む)、ファームウェア、またはこれらの試みの任意の組合せによって達成できることに注意すること。例えば、格納媒体はその上に命令を格納し、実行されると、マシンはここに説明された実施例の能力を発揮する結果となる。
302で、スタック200にプッシュされる新しい値が決定される。その新しい値は、TOSポインタ250によって参照されるエントリのデータ部210に現在格納されている値に等しい場合、そのエントリに関連するカウンタ220は、306で増分される。
スタック200にプッシュされる新しい値が、TOSポインタ250によって参照されるエントリのデータ部210に現在格納されている値と等しくない場合、新しい値は、308でスタックの次のエントリに格納される。さらに、TOSポインタ250は、310で増分される。
次のエントリに関連するカウンタ220は、312で増やされてもよい(これは、すべてのカウンタ220が初期化プロセス中に0に設定されたと仮定する)。別のアプローチとして、カウンタ220は、312で単に1に設定されてもよい。このアプローチは、もっぱら記述を明瞭にするためにここに説明されたいくつかの実施例に含められる。この時点でカウンタ220を増分させる(あるいは、それを1に設定する)ことによって、カウンタ220に格納された数は、データ部210中の関連する値が繰り返された回数に等しくなるであろう。312で行なわれた動作なしに(すべてのカウンタが初期化プロセス中に0に設定されたと仮定して)、カウンタ220に格納された数は、データ部210中の関連する値が繰り返された回数を1マイナスした値と等しくなるであろう。
カウンタ220が関連する値が繰り返された回数を示すとき、最初のカウンタがゼロに等しいスタック200は、そのスタック200が空であることを意味する。カウンタ200が関連する値が繰り返された回数を1マイナスした値に等しい場合、空のスタックは、例えば、「空スタック」レジスタ・ビットによって信号が送られてもよい。別の実施例に従えば、そのスタックが空であることを示すために最初のカウンタ220に「−1」を格納してもよい。
さて、図4を参照すると、最初の2つのエントリ中に値を有するスタック200を示す。特に、(エントリ0のカウンタ220によって示されるように)「1110」が続けて3回スタック200にプッシュされ、次に、「1010」がスタック200に一度プッシュされる。たとえ4回のプッシュがスタック200になされても、2つのエントリだけが使用されることに注意(すなわち、「1110」が3回および「1010」が1回)。さらに、新しい値(「1010」)がスタック200にプッシュされようとしている。この新しい値は、スタックのトップであるエントリ(エントリ1)に現在格納されている値に等しいので、図5に示されるように、そのエントリに関連するカウンタ220は、1から2に増やされる。この場合、新しい値はスタック200にプッシュされた最後の値の「繰り返し」である。
図5では、別の新しい値(「0010」)がスタック200にプッシュされるところである。この新しい値は、スタックのトップであるエントリ(エントリ1)に現在格納されている値と等しくないので、その値は次のエントリ(エントリ2)に格納され、次のエントリに関連するカウンタ220は、0から1へ増やされるとともに、図6に示されるように、TOSポインタ250は1から2に増加する。
図7は、いくつかの実施例によるハードウェア・スタック200からデータを取り出す(ポップする)方法のフローチャートである。702で、TOSポインタ250によって参照されるデータ部210に格納された値がポップされる。その後、そのエントリに関連するカウンタ220は、704で減少する。706でそのカウンタ210が0に等しくない場合、TOSポインタ250の現在値は708で維持される。そのカウンタ210が0に等しい場合、TOSポインタ250が減じられる。例えば、カウンタ220に格納された数がデータ部210中の関連する値が繰り返された回数に等しいとき、このアプローチは適切なことがある。カウンタ220に格納された数がその関連する値が繰り返された回数マイナス1に等しいとき、TOSポインタ250は、カウンタ220を減らすことによってアンダーフローを生じさせる場合に、減じられる。
例えば、図8を参照して、最初の3つのエントリに値を現在格納しているスタック200を示す。特に、(エントリ0のカウンタ220によって示されるように)「1111」がスタック200に続けて二回プッシュされ、「1010」がスタック200に続けて二回プッシュされ、次に、「0010」がスタック200に一度プッシュされる。さらに、スタック200から値がポップされようとしている。
ポップを実行するために、TOSポインタ250によって参照されるエントリのデータ部210に格納された値が出力される(「0010」)。さらに、そのエントリに関連するカウンタ220は、1から0に減じられる。カウンタ220が今0であるので、図9に示されるように、TOSポインタ250は2から1に減じられる。この場合、このポップに関連するエントリは「空」になる。
図9では、別のポップが実行されるところである。それを行なうために、TOSポインタ250によって参照されるエントリのデータ部210に格納された値が出力される(「1010」)。さらに、そのエントリに関連するカウンタ220は、2から1に減じられる。カウンタ220は0でないので、TOSポインタ250は、図10に示されるように、変更されない。この場合、このポップに関連するエントリはまだ空ではない。
このようなスタック200は、例えば、スタックに格納される値が頻繁に繰り返されると予測される場合、有用なことがある。例えば、1000個の値を格納し、その値の90%が最後に格納された値の繰り返しであるスタックを必要とする実行を考慮する(1000個の値または「オーバフロー」の後のあらゆる値は別の構造で格納されてもよい)。従来のアプローチは、1000個のハードウェアを必要とする一方で、ここに説明されたいくつかの実施例は200個だけを用いて実行することができる(100個のデータ部と100個のカウンタ)。
このようなスタック200は、例えば、スタック200に格納することができる一組の可能な値が制限される場合、さらに有用となる。例えば、いくつかの実施例によるハードウェア・スタック1100のブロック図である図11を検討する。この場合、スタック1100は、n個のエントリ(nは1より大きい整数)を有する。スタック1100中の各エントリは、n’−ビット幅のデータ部1110(n’はnと等しくてもよく、異なる値であってもよいことに注目)、および、データ部1110の値が連続して何回スタックにプッシュされたかを示す関連するm−ビット幅のカウンタ1120を含む。スタック1100は、さらにTOSポインタ1150を含む。
さらに、(i)スタック1100にプッシュされる一組の可能な値がn個に制限されていること、および(ii)スタック1100にプッシュされる新しい値は、最後の格納された値以外にスタック1100にプッシュされた先の値と等しくないこと、を仮定する。例えば、スタック1100にプッシュすることが可能であった一組の値が{0000,0001,0010,0100,1000}であった場合、その後次のシーケンス:
0100,1000,1000,1000,0010
の後において、
0000または0010だけがスタック1100にプッシュすることが許可されるであろう(つまり、0100と1000は既にスタックに格納されるので)。0010は、スタック1100にプッシュされた最後の値と等しいので、許されることに注意すること。このような状況で、TOSポインタ1150は、n−1より大きい値に達しないであろう。すなわち、スタック1100は、新しい値が格納することができるエントリを使い果たさないであろう。
各カウンタ1120は、mビットの値を格納することに制限されていることに注意すること。例えば、4ビット・カウンタは、関連するデータ部1110が8回(図3の要素312に関して説明された動作が実行されるなら7回)繰り返されたことを単に記録することができるだけである。
図12は、いくつかの実施例に従って、ハードウェア・スタック1100にデータをプッシュする方法のフローチャートである。1202で、スタック1100にプッシュされる新しい値が決定される。新しい値が、TOSポインタ1150によって参照されるエントリのデータ部1110に現在格納されている値と等しくない場合、その新しい値は、1206でスタックの次のエントリに格納される。さらに、1208でTOSポインタ1150は増分される。この場合、図3の要素312に対応する動作が実行されていないことに注意すること。結果として、カウンタ1120に格納された数は、関連する値が繰り返された回数より1小さいであろう。
新しい値がTOSポインタ1150によって参照されるエントリのデータ部1110に現在格納されている値と等しい場合、1212でそのエントリに関連するカウンタ1120が最大値であるかどうかが判断される(つまり、4ビット・カウンタの場合「1111」)。そうでない場合、カウンタ1120は、1214で単に増加される。カウンタ1120が最大値にある場合、要素1206,1208に関して説明された動作が実行される。
例えば、各エントリが10ビットのデータ部1310および4ビットのカウンタを含む10個のエントリを含むスタック1300である図13を検討する。スタック1300は、さらにTOSポインタ1350を含む。この場合、値「11100001111」が連続して4回、続いて「1010000111」が連続して8回スタック1300にプッシュされる。さらに、別の「1010000111」がスタック1300にプッシュされるところである。
TOSでのカウンタ1320の値が最大値にあるので、「1010000111」は次のエントリで繰り返され、図14に示されるように、TOSポインタ1350が増やされる。すなわち、新しい値は、あたかもスタック1300にプッシュされた最終の値とは異なっているかのように扱われる。このように、スタック1300は、カウンタ1320のサイズによってサポートされることを越えて繰り返されるシーケンスを扱うことができる。しかしながら、2個(またはより多くの)エントリが単一の値によって使用されているので、スタック1300は、たとえ(i)スタック1300にプッシュすることができる一組の可能な値がnに制限されていても、また(ii)新しい値が最後にプッシュされた値以外にスタック1300にプッシュされた先の値に等しくなくても、エントリを使い果たすことが可能であることに注意すること。
ここに説明されるようなハードウェア・スタックが有用であるいくつかの環境が実施例によって説明される。これらの実施例は、他のタイプの環境においても使用できることに注意すること。
ここに説明されたいくつかの実施例は、「処理システム」に関連する。ここに使用されるように、フレーズ「処理システム」は、データを処理するあらゆる装置に関する。処理システムは、例えば、図形データおよび/または他のタイプの媒体情報を処理するグラフィック・エンジンに関係していてもよい。処理システムの他の例は、中央処理装置(CPU)およびデジタル信号プロセサ(DSP)を含む。
処理システムの性能を改善するために、命令は、単一の命令期間中に多重データ・オペランドに対して同時に実行することができる。このような命令は単一命令多重データ(SIMD)命令)と呼ばれる。例えば、8チャネルのSIMD実行エンジンは、8個の32ビットのデータ・オペランドに対して命令を同時に実行することができ、各オペランドは、(例えば、変換および/または三次元の幾何学的図形の描画を加速するための)SIMD実行エンジンの単一の演算チャネルにマップされる。
図15は、SIMD実行エンジン1510を含む処理システム1500の1つのタイプを示す。この場合、実行エンジン1510は、4個の要素データのベクトル(例えば、SIMD実行エンジン1510を対応するチャネル0〜3上で処理するために各々がビットを有し、レイアウトされたベクトル・コンポーネントX,Y,Z,W)と共に命令(例えば、命令メモリ・ユニットから)を受け取る。その後、エンジン1510は、ベクトル中のすべてのコンポーネントに対して命令を同時に実行する。このようなアプローチは、「水平」、「チャネル・パラレル」または「アレイ構造」の実行と呼ばれる。ここに説明されたいくつかの実施例は、4チャネルのSIMD実行エンジン1510に関係しているが、SIMD実行エンジンは1より大きい任意の数のチャネルを有することができることに注意すること(例えば、実施例は32のチャネル実行エンジンに関係する)。
図16は、SIMD実行エンジン1610を含む別タイプの処理システム1600を図示する。この場合、実行エンジン1610は、4つのデータ・オペランドと共に命令を受け取るが、各オペランドは異なるベクトルと関連する(つまり、ベクトル0からベクトル3の4つのXコンポーネント)。その後、エンジン1610は、単一の命令期間中にすべてのオペランドに対して命令を同時に実行する。このようなアプローチは、「水平」、「チャネル・シリーズ」または「アレイ構造」の実行と呼ばれる。
いくつかの実施例によれば、SIMD命令は、1組の関連する命令が、例えば特定の回数あるいは特定の条件が満たされるまで、実行されるべきであることを示す「ループ」命令であってもよい。例えば、次の命令を検討する:
DO{
命令のシーケンス
}WHILE<条件>
ここで、命令のシーケンスは、「条件が真」である限り実行されるであろう。しかしながら、このような命令がSIMD風に実行される場合、異なるチャネルは、異なる結果の<条件>テストを導くかもしれない。例えば、Varlが0でない限り、命令のシーケンスを実行すべきであるように命令のシーケンスを定義してもよい(また、命令のシーケンスがVarlを適切に操作してもよい)。この場合、Varlは1つのチャネルに対しては0であり、他のチャネルに対しては非0となってもよい。
図17は、いくつかの実施例に従って4チャネルのSIMD実行エンジン1700を図示する。エンジン1700は、4ビットのループ・マスク・レジスタ1730を含み、その各ビットは関連する演算チャネルに対応する。ループ・マスク・レジスタ1730は、例えば、エンジン1700中のハードウェア・レジスタからなる。エンジン1700は、さらに4ビットの広ループ・スタック1710を含む。ここに説明されたあらゆる実施例に従って、ループ・スタック1710は4つのエントリ深度があり、各エントリは、関連するループ・カウンタ1720を有する。ループ・スタック1710は、さらにループ・スタック・カウンタ・レジスタ1740、および、ループ・スタック・ポインタのトップ1750を含む。
ループ・スタック1710は、例えば、一連のハードウェア・レジスタ、メモリ位置、および/または、ハードウェア・レジスタとメモリ位置の組合せを含む。図17に図示されたエンジン1700、ループ・マスク・レジスタ1730、および、ループ・スタック1710は、4つのチャネル幅であるが、その実施は別の数のチャネル幅であってもよく(例えば、xチャネル幅)、そして各演算チャネルはyビット・オペランドを処理することができることに注目すること。いくつかの実施例によれば、演算チャネル、マスク・チャネル、および、ループ・スタック・チャネルの間に1対1の関係がある。
エンジン1700は、(例えば、4つの演算チャネルに関連して)4つの異なるチャネルのデータのための命令を受けて同時に実行することができる。いくつかのケースでは、4未満のチャネルが必要なことがあることに注意すること(例えば、4未満の有効なオペランドがあるとき)。結果として、ループ・マスク・レジスタ1730は、どのチャネルが有効なオペランドを有しているのか、および どれをすべきでないのかを示す初期化ベクトルで初期化される(例えば、オペランドiからi17は対応するチャネルが現在イネーブルにされていることを示す「1」を有する)。その後、ループ・マスク・ベクトル1730が不必要な処理を回避するために使用されてもよい(例えば、命令は、「1」に設定されているループ・マスク・レジスタ1730中のオペランドに対してのみ実行されてもよい)。別の実施例によれば、ループ・マスク・レジスタ1730は、すべてに対して単に初期化されてもよい(例えば、チャネルがすべて常にイネーブルであると仮定される)。いくつかのケースでは、ループ・マスク・レジスタ1730中の情報は、他のレジスタ中の情報と結合されてもよく(例えば、ブールAND演算による)、そしてその結果は、実行マスク・レジスタ全体に格納されてもよい(それはその後の不必要または不適当な処理を回避するために使用されてもよい)。
図18〜図20は、いくつかの実施例に従ってネスト(入れ子に)されたDO命令を実行するエンジン1700を図示する。図18に示されるように、エンジン1700がループ命令(例えば、DO命令)を受け取る場合、ループ・マスク・レジスタ1730中のデータは、ループ・スタック1710のトップにコピーされ、そのエントリに関連するループ・スタック・カウンタ1720の値は増やされて、TOSポインタ1750が更新される。さらに、ループ情報は、ループ・マスク・レジスタ1730に格納される。そのループ情報は、例えば、最初にDO命令に遭遇したとき、4つのチャネルのどれがアクティブ中だったかをまず示す(例えば、オペランドdからdは「1」で関連するチャネルがアクティブ中であることを示す)。
その後、DOループに関連する一組の命令は、ループ・マスク・レジスタ1730に従って、各チャネルのために実行される。例えば、もしループ・マスク・レジスタ1730が「1110」である場合、ループ中の命令は、最下位オペランド以外(つまり、そのチャネルは現在イネーブルではないので)の3つの最上位オペランドに関連するデータに対して実行されるであろう。
DO命令に関連するWHILE文に遭遇する場合、条件がアクティブなチャネルに対して評価され、その結果はループ・マスク・レジスタ1730へ格納される(例えば、ブールAND演算による)。例えば、WHILE文に遭遇する前に、ループ・マスク・レジスタ1730が「1110」だった場合、その条件は、3つの最上位オペランドに関連するデータに対して評価される。その後、その結果は、ループ・マスク・レジスタ1730に格納される。ループ・マスク・レジスタ1730中のビットの少なくとも1つが、依然として「1」である場合、一組のループ命令は、「1」のループ・マスク・レジスタ値を有するすべてのチャネルのために再び実行される。例として、WHILE文と連携した条件が「110x」(ここでxは、そのチャネルがイネーブルではないので、評価されなかった)の結果になった場合、「1100」がループ・マスク・レジスタ1730に格納される。その後、そのループに連携した命令が再実行される場合、エンジン1700は、その2つの最上位オペランドに関連するデータに対してのみ行なうであろう。この場合、不必要かつ/または不適当な処理は、ループのために回避することができる。その更新がアクティブなチャネルだけに制限されている場合、ブールAND演算は必要でないことに注意すること。
SIMDエンジンは、ネストされたループ命令を扱うことができる(例えば、第2のループ・ブロックが、第1のループ・ブロックの内部に「ネスト」されている場合)。例えば、次の一組の命令を検討する。
DO{
第1の一組の命令
DO{
第2の一組の命令
}WHILE<第2の条件>
第3の一組の命令
}WHILE<第1の条件>
この場合、第1の条件が真である間、第1および第3の一組の命令は適切なチャネルのために実行される一方、第1および第2の条件の両方が真である間、第2の一組の命令のみが実行される。
図19は、いくつかの実施例に従って、ネストされた別のループ命令(例えば、第2のDO文)の実行を図示する。この場合、ループ・マスク・レジスタ1730(d10からd13)中の現在の情報は、スタック1710の「トップ」にプッシュされる。その結果、スタック1710のトップにもともとあった情報(つまり、初期化ベクトルiからi)は、1つのエントリだけ押し下げられる。エンジン1700は、さらに、第2のループ情報をループ・マスク・レジスタ1730(d20からd23)へ格納する。
スタック1710に情報がプッシュされるので、ここに説明されたあらゆる実施例に従って、ループ・スタック・カウンタ1720、および、TOSポインタ1750は更新されることに注意すること。図19に示された実施例において、d10からd13の値は、iからiと等しくない結果、第2のエントリが使用された(そして、TOSポインタ1750は、第2のエントリがスタックのトップであることを反映する)。さらに、ネストされたループに遭遇するので、スタック1710にプッシュされる後続の値中のビットは同じに留まってもよく、あるいは「1」から「0」に変化してもよいが、「0」から「1」に変化することはできないことに注目すること。したがって、(i)スタック1710にプッシュできる一組の可能な値は4個に制限され、また、(ii)新しい値は、スタック1710にプッシュされた先の値と等しくなく、最後のプッシュされた値以外となろう。結果として、TOSポインタ1750は、5番目のエントリを指す必要はないであろう。すなわち、スタック1710は、新しい値を格納するエントリを使い果たすことはないであろう(カウンタ1720の1つがオーバフローするかもしれないが)。
また、ループを遭遇する度に、重要な反復回数が生成されることに注意すること。結果として、本実施例は、非実用的な量のハードウェア・レジスタまたはRAMを使用せずに、多数の値を格納することをサポートする。
その後、第2のループ命令に関連するループ・ブロックは、ループ・マスク・レジスタ1730中の情報によって示されるように、実行される(例えば、第2のブロックが実行されるごとに、ループ・マスク・レジスタ1730は、第2のループのWHILE命令に関連する条件に基づいて更新される)。図20に示されるように、第2のループのWHILE命令がループ・マスク・レジスタ1730のすべてのビットを「0」にするとき、ループ・スタック1710のトップにあるデータ(つまり、d10からd13)は、ループ・マスク・レジスタ1730へ戻され、カウンタ1720およびTOSポインタ1750は、適切に、更新される。その後、ループ・マスク・レジスタ1730に従って、さらなる命令が実行される。第1のループ・ブロックが完了すると(図20には示されていない)、初期化ベクトルはループ・マスク・レジスタ1730へ返送され、さらなる命令がイネーブルにされたチャネルに関連するデータのために実行される。
いくつかの実施例によれば、SIMDとして、エンジンは「条件付き」命令を実行することができる。例えば、次の一組の命令を検討する。
IF<条件>
第1の一組の命令
ELSE
第2の一組の命令
END IF
ここで、「条件」が真であるとき、第1の一組の命令が実行され、「条件」が偽であるとき、第2の一組の命令が実行される。しかしながら、このような命令がデータの多重チャネルに対して同時に実行される場合、異なるチャネルは、異なる結果を導出するかもしれない。すなわち、第1の一組の命令は、いくつかのチャネルに対して実行する必要がある一方、第2の一組の命令は、他のチャネルに対して実行する必要がある。
図21は、いくつかの実施例に従って、4チャネルのSIMD実行エンジン2100を図示する。エンジン2100は、4ビットの条件付きマスク・レジスタ2130を含み、各ビットは対応する演算チャネルに関連する。条件付きマスク・レジスタ2130は、例えば、エンジン2100中のハードウェア・レジスタを含む。エンジン2100は、さらに4ビット幅、4つのエントリ深度の条件付きスタック2110、条件付きスタック・カウンタ・レジスタ2120、および、TOSポインタ2150を含む。条件付きスタック2110は、例えば、一連のハードウェア・レジスタ、メモリ位置、および/または、ハードウェア・レジスタとメモリ位置の組合せを含んでもよい(例えば、10のエントリ深度スタックの場合、スタック2110の最初の4つのエントリは、ハードウェアである一方、残りの6つのエントリは、メモリに格納されてもよい)。図21に示されたエンジン2100、条件付きマスク・レジスタ2130、および、条件付きスタック2110は、4つのチャネルに関連しているが、実装では他の数のチャネルに関連していてもよく(例えば、xチャネル実行エンジン)、各演算チャネルは、yビット・オペランドを処理することができることに注目すること。
従前のように、条件付きマスク・ベクトル2130は、どのチャネルが有効なオペランドを有しているのか、および どれをすべきでないのかを示す初期化ベクトルで初期化される(例えば、オペランドiからiは対応するチャネルが現在イネーブルにされていることを示す「1」を有する)。その後、条件付きマスク・ベクトル2130が不必要な処理を回避するために使用されてもよい(例えば、命令は、「1」に設定されている条件付きマスク・レジスタ2130のオペランドに対してのみ実行してもよい)。
図22に示されるように、エンジン2100が条件付き命令(例えば「IF」文)を受け取るとき、条件付きマスク・レジスタ2130中のデータは、条件付きスタック2110のトップにコピーされる。ここに説明されるように、条件付きスタック・カウンタ2120および条件付きスタック・ポインタ2150のトップも更新される(例えば、第1のエントリのカウンタ2120は、1に設定される)。さらに、命令は、条件付きマスク・レジスタ中の情報に従って、4つのオペランドのそれぞれに対して実行される。その後、その結果は、条件付きマスク・レジスタ2130に格納され、IF文に関連するステートメントに対して不必要、および/または、不適当な処理を回避するために使用することができる。実施例によれば、条件がIF文に関連する条件が「110x」の結果となる場合(ここで、xは、チャネルがイネーブルでないので、評価されなかった)、「1100」が条件付きマスク・レジスタ2130に格納される。その後、IF文に関連する他の命令が実行される場合、エンジン2100は、2つのMSB(2つのLSBに関連するデータではない)に関連するデータに対してのみ行なうであろう。
いくつかの実施例によれば、1つの条件付き命令が、他の条件付き命令に関連する一組の命令の内部でネストされることがある。例えば、次の一組の命令を検討する。
IF<第1の条件>
第1の一組の命令
IF<第2の条件>
第2の一組の命令
END IF
第3の一組の命令
END IF
この場合、「第1の条件」が真であるとき、第1および第3の一組の命令が実行され、「第1の条件」および「第2の条件」の両方が真であるとき、第3の一組の命令のみが実行される。
図23は、いくつかの実施例に従って、ネストされた別の条件付き命令(例えば、第2のIF文)の実行を図示する。この場合、条件付きマスク・レジスタ2130中の現在の情報は、スタック2110のトップにプッシュされる。その結果、スタック2110のトップにもともとあった情報(例えば、初期化ベクトル)は、1つのエントリだけ押し下げられる。しかしながら、図23に示された実施例において、r12からr13の値は、iからiと完全に等しく、その結果、第1のスタック・エントリが再利用され、関連するカウンタ2120は、1から2へ増やされる(そして、TOSポインタ1750は、第1のエントリが依然スタックのトップであることを反映する)。
その後、データの多重チャネルは、(i)条件付きマスク・レジスタ2130の現在の情報(つまり、r10からr13)、および、第2の条件付き命令(つまり、「条件2」)に関連する条件に従って、同時に評価される。その後、この評価の結果は、条件付きマスク・レジスタ(つまり、r20からr23)に格納され、条件付きマスク・レジスタ2130中の情報によって示される多重データ・オペランドに対する第2の条件付き命令に関連するさらなる命令を実行するためにエンジン2100によって使用される。
情報がスタック2110にプッシュされると、条件付きスタック・カウンタ2120およびTOSポインタ2150は、ここに説明されたあらゆる実施例に従って、更新される。さらに、ネストされたループに遭遇するので、スタック2110にプッシュされる後続の値中のビットは同じに留まってもよく、あるいは「1」から「0」に変化してもよいが、「0」から「1」に変化することはできないことに注目すること。したがって、(i)スタック2110にプッシュできる一組の可能な値は4に制限され、また、(ii)新しい値は、スタック1710にプッシュされた先の値と等しくなく、最後のプッシュされた値以外となろう。結果として、TOSポインタ2150は、5番目のエントリを指す必要はないであろう。すなわち、スタック2110は、新しい値を格納するエントリを使い果たすことはないであろう(カウンタ2120の1つがオーバフローするかもしれないが)。
エンジン2100が第2の条件付き命令に関連する命令の終了(例えばおよび「END IF」文)を受領したことの指示を受け取ると、図24に示されるように、条件付きスタック2110のトップにあるデータ(つまり、r10からr13)は、条件付きマスク・レジスタ2130に戻される。その後、さらなる命令が条件付きマスク・レジスタ2110に従って実行される。別のEND IF文に遭遇すると(図24に図示せず)、初期化ベクトルは条件付きマスク・レジスタ2130へ返送され、さらなる命令はイネーブルにされたチャネルに関連するデータに対して実行される。
図25は、いくつかの実施例によるシステム2500のブロック図である。システム2500は、例えば、デジタル・テレビ信号を記録および/または表示するために適合したメディア・プロセッサに関連する。システム2500は、ここに説明されたあらゆる実施例に従って、n個のオペランドのSIMD実行エンジン2520を有するグラフィック・エンジン2510を含む。例えば、SIMD実行エンジン2520は、ここに説明されたあらゆる実施例に従って、n個のデータ・レジスタ、n個のカウンタ・レジスタ(各カウンタ・レジスタは、データ・レジスタのうちの1つに関連する)、および、スタック・ポインタのトップを具備する。システム2500は、さらに、SIMD命令を格納するための命令メモリ・ユニット2530、および、グラフィック・データ(例えば、三次元画像に関連するベクトル)を格納するためのグラフィック・メモリ・ユニット2540を具備する。命令メモリ・ユニット2530およびグラフィック・メモリ・ユニット2540は、例えば、ランダム・アクセス・メモリ(RAM)ユニットからなる。
以下、様々な追加の実施例を示す。これらは、全ての実行可能な実施例の定義を構成するものではなく、また、当業者は、他の多くの実施例が可能であることを理解するであろう。さらに、以下の実施例は明瞭にするために簡潔に説明されるが、当業者はあらゆる変更方法を理解しており、必要ならば、これらの他の実施例およびアプリケーションを提供するために上記説明を参照する。
さらに、異なる実施例が説明されたが、実施例のあらゆる組合せも実現し得る(例えば、SIMDエンジンは、ループおよび条件付き命令をサポートすることができる)ことに注意すること。さらに、本例は、他の実施例に従って、イネーブルでないチャネルを示すために「0」を使用したが、これに代り、チャネルが現在イネーブルでないことを示すため「1」を用いてもよい。同様に、カウンタおよび/またはポインタは、特定の実行に依存して、増分してもよいし減少してもよいことを理解すべきであろう。
いくつかの実施例によれば、多重値がスタックにプッシュされる。例えば、次のアルゴリズムを検討する。
void push(int data, int count){
if(data==TOS->data_bit_field){
if(count+TOS->count<=MAX_COUNT){
TOS->count+=count;
}else{
count=MAX_COUNT-TOS->count;
TOS->count=MAX_COUNT;
TOS++;
TOS->data=data;
TOS->count=count;
}
}else{
TOS++;
TOS->data=data;
TOS->count=count;
}
}
この場合、プッシュされるデータ値は、TOSポインタによって示されるエントリのデータ部の中に保持されたものと比較される。TOSデータおよびプッシュされるデータがビットごとに同一の場合、TOSであると指定されたエントリのカウント値は、プッシュされるデータのコピー数だけ増やされる。2つのデータ値がビットごとに異なる場合、新しいTOSスタック・エントリがTOSポインタを増やすことによりまず選択される。その後、プッシュされるデータは、新しいTOSエントリに格納され、関連するカウンタはプッシュされるデータのコピー数に設定される。
同様に、1つの動作を使用して、多くの値がスタックから取り出される。
int pop(count){
int retValue=TOS->data_bit_field;
int residual=count;
while(residual>0){
if(resudual>=TOS->count){
residual-=TOS->count;
TOS->count=0;
TOS--;
}else{
TOS->count-=residual;
}
}
return retValue;
}
この場合、呼出し人は、1つの動作で行ないたいポップ数を指定する。TOSポインタによって示されるエントリのデータ値が呼出し人に戻される。TOSエントリの関連するカウント・フィールドは、呼出し人によって指定されたポップ数だけ減じられる。いくつかのケースでは、ポップ・カウントは、現在のTOSカウント・フィールドに保持されたカウントを超過することがある。この場合、そのカウントは、消費されるまで、連続するスタック・エントリに亘って適用される。
ここに説明された幾つかの実施例は、単に提示の目的である。当業者は、この説明から、請求項によって制限される修正及び変更のみで実施できることを認識するであろう。
ハードウェア・スタックのブロック図である。 いくつかの実施例に従うハードウェア・スタックのブロック図である。 いくつかの実施例に従うデータをハードウェア・スタックにプッシュする方法のフローチャートである。 いくつかの実施例に従ってハードウェア・スタックにプッシュされるデータを図示する。 いくつかの実施例に従ってハードウェア・スタックにプッシュされるデータを図示する。 いくつかの実施例に従ってハードウェア・スタックにプッシュされるデータを図示する。 いくつかの実施例に従ってハードウェア・スタックからのデータをポップする方法のフローチャートである。 いくつかの実施例に従ってハードウェア・スタックから取り出されるデータを図示する。 いくつかの実施例に従ってハードウェア・スタックから取り出されるデータを図示する。 いくつかの実施例に従ってハードウェア・スタックから取り出されるデータを図示する。 いくつかの実施例に従ってハードウェア・スタックのブロック図である。 いくつかの実施例に従ってデータをハードウェア・スタックにプッシュする方法のフローチャートである。 いくつかの実施例に従ってハードウェア・スタックにプッシュされるデータを図示する。 いくつかの実施例に従ってハードウェア・スタックにプッシュされるデータを図示する。 処理システムを図示する。 処理システムを図示する。 いくつかの実施例に従って入れ子のループ命令を実行するSIMD実行エンジンを図示する。 いくつかの実施例に従って入れ子のループ命令を実行するSIMD実行エンジンを図示する。 いくつかの実施例に従って入れ子のループ命令を実行するSIMD実行エンジンを図示する。 いくつかの実施例に従って入れ子の条件付き命令を実行するSIMD実行エンジンを図示する。 いくつかの実施例に従って入れ子の条件付き命令を実行するSIMD実行エンジンを図示する。 いくつかの実施例に従って入れ子の条件付き命令を実行するSIMD実行エンジンを図示する。 いくつかの実施例に従って入れ子の条件付き命令を実行するSIMD実行エンジンを図示する。 いくつかの実施例に従って入れ子の条件付き命令を実行するSIMD実行エンジンを図示する。 いくつかの実施例に従うシステムのブロック図である。

Claims (24)

  1. n個のエントリを有するハードウェア・スタックにプッシュされる新しい値を決定する段階であって、nは1より大きい整数であり、各エントリはデータ部および関連するカウンタを含む、段階と、
    前記新しい値がスタック・ポインタの現在のトップに関連する前記エントリの前記データ部と等しい場合、そのエントリに関連する前記カウンタを増分する段階と、
    前記新しい値がスタック・ポインタの前記現在のトップに関連する前記データ部に等しくない場合、前記新しい値を次のエントリのデータ部に格納し、スタック・ポインタの前記現在のトップを増分する段階と、
    を含むことを特徴とする方法。
  2. 前記新しい値がスタック・ポインタの前記現在のトップに関連する前記データ部と等しい場合、前記カウンタは、1だけ増分されることを特徴とする請求項1記載の方法。
  3. 前記新しい値がスタック・ポインタの前記現在のトップに関連する前記データ部に等しくない場合、スタック・ポインタの前記現在のトップは、1だけ増分されることを特徴とする請求項1記載の方法。
  4. 前記新しい値は、1組のn個の可能値から選択されることを特徴とする請求項1記載の方法。
  5. 前記データ部は、nビット幅であることを特徴とする請求項4記載の方法。
  6. 前記新しい値は、スタック・ポインタの前記現在のトップに関連する前記データ部に格納された前記値以外の前記ハードウェアにプッシュされた先の値と等しくすることができないことを特徴とする請求項5記載の方法。
  7. 前記ハードウェア・スタックにプッシュされた値中のビットは、(i)前記ハードウェア・スタックにプッシュされた直近の値と比較すると0から1へ変化できるが、1から0へ変化できない、あるいは、(ii)前記ハードウェア・スタックにプッシュされた直近の値と比較すると1から0へ変化できるが、0から1へ変化できないことを特徴とする請求項6記載の方法。
  8. 前記ハードウェア・スタックにプッシュされる第2の値を決定する段階と、
    第2の値は、スタック・ポインタの前記現在のトップに関連する前記エントリの前記データ部と等しいことを決定する段階と、
    スタック・ポインタの前記現在のトップに関連するその前記カウンタは、最大値に等しいことを決定する段階と、
    前記第2の値を次のエントリのデータ部に格納し、前記次のエントリに関連するカウンタを増分するかあるいは初期化し、スタック・ポインタの前記現在のトップを増分する段階と、
    をさらに含むことを特徴とする請求項1記載の方法。
  9. 前記ハードウェア・スタックから値を取り出すことを決定する段階と、
    スタック・ポインタの前記現在のトップに関連する前記データ部に格納された前記値を引き出す段階と、
    スタック・ポインタの前記現在のトップに関連する前記カウンタを減分する段階と、
    をさらに含むことを特徴とする請求項1記載の方法。
  10. スタック・ポインタの前記現在のトップに関連する前記カウンタが最小値と等しいことを決定する段階と、
    スタック・ポインタの前記現在のトップを減分する段階と、
    をさらに含むことを特徴とする請求項9記載の方法。
  11. 前記ハードウェア・スタックは、nチャネル単一命令の多重データ実行エンジンのループ・スタックと関連していることを特徴とする請求項1記載の方法。
  12. 前記新しい値は、多重データ・オペランドに基づくループ命令の評価に関連していることを特徴とする請求項11記載の方法。
  13. 前記ハードウェア・スタックは、nチャネル単一命令の多重データ実行エンジンの条件付きスタックに関連していることを特徴とする請求項1記載の方法。
  14. 前記新しい値は、多重データ・オペランドに基づく条件付き命令の評価に関連していることを特徴とする請求項13記載の方法。
  15. n個のデータ・レジスタを有する後入れ先出しハードウェア・スタックであって、nは1より大きい整数である、後入れ先出しハードウェア・スタックと、
    n個のカウンタ・レジスタであって、各カウンタ・レジスタは、前記データ・レジスタの1つに関連する、n個のカウンタ・レジスタと、
    スタック・ポインタ・レジスタのトップと、
    を含むことを特徴とする装置。
  16. 前記ハードウェア・スタックは、nチャネル単一命令の多重データ実行エンジンと関連していることを特徴とする請求項15記載の装置。
  17. nビットのループ・マスク・ベクトルをさらに含み、前記ループ・マスク・ベクトルは、前記実行エンジンの多重チャネルのためにループ命令に関連するループ情報を格納する、
    ことを特徴とする請求項16記載の装置。
  18. nビットの条件付きマスク・ベクトルをさらに含み、前記条件付きマスク・ベクトルは、(i)IF命令条件、および、(ii)前記実行エンジンの多重チャネルに関連するデータ、の評価の結果を格納する、
    ことを特徴とする請求項16記載の装置。
  19. 命令をその上に格納した格納媒体を含む物品であって、マシンによって前記命令は、
    n個のエントリを有するハードウェア・スタックにプッシュされる値を決定する段階であって、nは1より大きい整数であり、各エントリは、nビットのデータ部、および、関連するカウンタを含む、段階と、
    前記値がスタック・ポインタに関連する前記エントリの前記データ部と同じである場合、前記エントリに関連する前記カウンタを1だけ増分する段階と、
    前記値が前記スタック・ポインタに関連する前記データ部と同じでない場合、次のエントリのデータ部に前記値を格納し、前記スタック・ポインタを1だけ増分する段階と、
    を実行することを特徴とする物品。
  20. 前記命令は、
    前記ハードウェア・スタックから値を取り出すことを決定する段階と、
    前記スタック・ポインタに関連する前記データ部に格納された前記値を取り出す段階と、
    前記スタック・ポインタに関連する前記カウンタを1だけ減分する段階と、
    をさらに実行することを特徴とする請求項19記載の物品。
  21. 前記命令は、
    前記スタック・ポインタに関連する前記カウンタが0であることを決定する段階と、
    前記スタック・ポインタを1だけ減分する段階と、
    をさらに実行することを特徴とする請求項19記載の物品。
  22. nチャネル単一命令の多重データ実行エンジンであって、nは1より大きい整数である、多重データ実行エンジンと、
    後入れ先出しハードウェア・スタックであって、
    n個のデータ・レジスタ、
    n個のカウンタ・レジスタであって、各カウンタ・レジスタは、前記データ・レジスタの1つに関連する、n個のカウンタ・レジスタ、および、
    スタック・ポインタ・レジスタのトップ、からなる後入れ先出しハードウェア・スタックと、
    グラフィック・メモリ・ユニットと、
    を含むことを特徴とするシステム。
  23. nビットのループ・マスク・ベクトルをさらに含み、前記ループ・マスク・ベクトルは、前記実行エンジンの多重チャネルのためにループ命令に関連するループ情報を格納することである、
    ことを特徴とする請求項22記載のシステム。
  24. nビットの条件付きマスク・ベクトルをさらに含み、前記条件付きマスク・ベクトルは、(i)IF命令条件、および(、ii)前記実行エンジンの多重チャネルに関連するデータ、の評価の結果を格納する、
    ことを特徴とする請求項22記載のシステム。
JP2007546994A 2004-12-15 2005-12-13 Data部および関連するカウンタを備えるエントリを有するハードウェア・スタック Expired - Fee Related JP4917045B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/012,688 2004-12-15
US11/012,688 US7434028B2 (en) 2004-12-15 2004-12-15 Hardware stack having entries with a data portion and associated counter
PCT/US2005/045887 WO2006066188A2 (en) 2004-12-15 2005-12-13 Hardware stack having entries with a data portion and associated counter

Publications (2)

Publication Number Publication Date
JP2008524721A true JP2008524721A (ja) 2008-07-10
JP4917045B2 JP4917045B2 (ja) 2012-04-18

Family

ID=36390163

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007546994A Expired - Fee Related JP4917045B2 (ja) 2004-12-15 2005-12-13 Data部および関連するカウンタを備えるエントリを有するハードウェア・スタック

Country Status (7)

Country Link
US (1) US7434028B2 (ja)
EP (1) EP1839126B1 (ja)
JP (1) JP4917045B2 (ja)
CN (1) CN100498687C (ja)
AT (1) ATE477532T1 (ja)
DE (1) DE602005022938D1 (ja)
WO (1) WO2006066188A2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8271959B2 (en) * 2008-04-27 2012-09-18 International Business Machines Corporation Detecting irregular performing code within computer programs
EP2328074A1 (en) * 2009-11-27 2011-06-01 STMicroelectronics S.r.l. Queue management
US8555259B2 (en) * 2009-12-04 2013-10-08 International Business Machines Corporation Verifying function performance based on predefined count ranges
GB2525314B (en) * 2014-01-17 2016-02-24 Imagination Tech Ltd Stack pointer value prediction
US20160179520A1 (en) * 2014-12-23 2016-06-23 Intel Corporation Method and apparatus for variably expanding between mask and vector registers

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6254359A (ja) * 1985-06-24 1987-03-10 ピクサ− コンピユ−タ装置
JPH02112025A (ja) * 1988-10-21 1990-04-24 Hitachi Ltd 情報処理装置

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4677546A (en) * 1984-08-17 1987-06-30 Signetics Guarded regions for controlling memory access
GB2178573B (en) 1985-07-10 1989-01-05 Nat Res Dev A data stack for data processors
US4988998A (en) * 1989-09-05 1991-01-29 Storage Technology Corporation Data compression system for successively applying at least two data compression methods to an input data stream
JPH07295812A (ja) * 1994-04-27 1995-11-10 Mitsubishi Electric Corp 条件分岐制御方法および装置
US6028962A (en) * 1996-05-10 2000-02-22 Apple Computer, Inc. System and method for variable encoding based on image content
US5862376A (en) 1996-06-24 1999-01-19 Sun Microsystems, Inc. System and method for space and time efficient object locking
US5916305A (en) * 1996-11-05 1999-06-29 Shomiti Systems, Inc. Pattern recognition in data communications using predictive parsers
US6128654A (en) 1997-02-14 2000-10-03 Advanced Micro Devices, Inc. Method and apparatus for transmitting multiple copies by replicating data identifiers
US5903769A (en) * 1997-03-31 1999-05-11 Sun Microsystems, Inc. Conditional vector processing
US6079008A (en) 1998-04-03 2000-06-20 Patton Electronics Co. Multiple thread multiple data predictive coded parallel processing system and method
US6112288A (en) * 1998-05-19 2000-08-29 Paracel, Inc. Dynamic configurable system of parallel modules comprising chain of chips comprising parallel pipeline chain of processors with master controller feeding command and data

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6254359A (ja) * 1985-06-24 1987-03-10 ピクサ− コンピユ−タ装置
JPH02112025A (ja) * 1988-10-21 1990-04-24 Hitachi Ltd 情報処理装置

Also Published As

Publication number Publication date
WO2006066188A3 (en) 2006-10-05
EP1839126B1 (en) 2010-08-11
CN100498687C (zh) 2009-06-10
EP1839126A2 (en) 2007-10-03
WO2006066188A2 (en) 2006-06-22
ATE477532T1 (de) 2010-08-15
US7434028B2 (en) 2008-10-07
US20060155924A1 (en) 2006-07-13
CN1804789A (zh) 2006-07-19
DE602005022938D1 (de) 2010-09-23
JP4917045B2 (ja) 2012-04-18

Similar Documents

Publication Publication Date Title
US20230049454A1 (en) Processor with table lookup unit
KR100904318B1 (ko) 단일 명령, 다중 데이터 실행 엔진에 대한 조건형 명령
CN107408037B (zh) 配置成对可变长度向量进行操作的单片向量处理器
JP3781419B2 (ja) パイプライン方式のプロセッサにおける例外処理
WO2006044978A2 (en) Looping instructions for a single instruction, multiple data execution engine
US6334176B1 (en) Method and apparatus for generating an alignment control vector
US7085795B2 (en) Apparatus and method for efficient filtering and convolution of content data
US6948056B1 (en) Maintaining even and odd array pointers to extreme values by searching and comparing multiple elements concurrently where a pointer is adjusted after processing to account for a number of pipeline stages
KR100956970B1 (ko) 프로세서에서의 마스킹된 저장 동작들을 위한 시스템 및방법
JP4917045B2 (ja) Data部および関連するカウンタを備えるエントリを有するハードウェア・スタック
TW201716993A (zh) 向量資料轉換指令
JP2010521729A (ja) 自明な算術演算を利用するプロセッサ
US6748412B2 (en) Square-and-multiply exponent processor
US8706795B2 (en) SIMD integer addition including mathematical operation on masks
US7162607B2 (en) Apparatus and method for a data storage device with a plurality of randomly located data
US20030033342A1 (en) Apparatus and method for uniformly performing comparison operations on long word operands
US20050172210A1 (en) Add-compare-select accelerator using pre-compare-select-add operation
CN111522586A (zh) 信息处理装置、非暂态计算机可读介质和信息处理方法
EP1285335A2 (en) Instruction dependency scoreboard with a hierarchical structure
US20070294513A1 (en) Facilitating fast scanning for control transfer instructions in an instruction fetch unit
JP3115428B2 (ja) パイプライン制御方法
JP2000187583A (ja) プロセッサ
JPH01223564A (ja) 情報処理装置

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100531

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100614

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100906

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110620

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110920

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120110

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120125

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150203

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4917045

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees