JP2001243063A - Simd命令をエミュレートする方法及び装置 - Google Patents
Simd命令をエミュレートする方法及び装置Info
- Publication number
- JP2001243063A JP2001243063A JP2001025784A JP2001025784A JP2001243063A JP 2001243063 A JP2001243063 A JP 2001243063A JP 2001025784 A JP2001025784 A JP 2001025784A JP 2001025784 A JP2001025784 A JP 2001025784A JP 2001243063 A JP2001243063 A JP 2001243063A
- Authority
- JP
- Japan
- Prior art keywords
- exception
- sse
- instruction
- register
- instructions
- 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
- 238000000034 method Methods 0.000 title claims abstract description 27
- 238000012545 processing Methods 0.000 claims description 2
- 230000007246 mechanism Effects 0.000 description 10
- 230000006870 function Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 4
- 238000013459 approach Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000000354 decomposition reaction Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000011010 flushing procedure Methods 0.000 description 1
- 230000007274 generation of a signal involved in cell-cell signaling Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000008054 signal transmission Effects 0.000 description 1
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/3017—Runtime instruction translation, e.g. macros
- G06F9/30174—Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
-
- 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/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30109—Register structure having multiple operands in a single register
-
- 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/30105—Register structure
- G06F9/30112—Register structure comprising data of variable length
-
- 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/30105—Register structure
- G06F9/30116—Shadow registers, e.g. coupled registers, not forming part of the register space
-
- 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
-
- 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/3838—Dependency mechanisms, e.g. register scoreboarding
- G06F9/384—Register renaming
-
- 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/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
-
- 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/3861—Recovery, e.g. branch miss-prediction, exception handling
- G06F9/3865—Recovery, e.g. branch miss-prediction, exception handling using deferred exception handling, e.g. exception flags
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
比較的少ないクロックサイクルしか必要としない、SSE
命令セットをエミュレートする方法を提供する。 【解決手段】 本発明の方法は、(a)マクロ命令を複
数のマイクロ命令に分解するステップ(310)と、
(b)複数のマイクロ命令の少なくとも2個を並列に発
行するステップ(320)と、(c)複数のマイクロ命
令の少なくとも2個のいずれかにおいて例外が発生する
か否かを判定するステップ(340)と、(d)複数の
マイクロ命令の少なくとも2個のいずれかにおいて例外
が発生した場合、複数のマイクロ命令の少なくとも2個
をキャンセルするステップ(350)と、からなること
を特徴とする。
Description
ルコンピュータシステムに関する。より詳細には、本発
明は、ディジタルコンピュータシステムにおいて命令を
処理する方法及び装置に関するが、これに限定されな
い。
アーキテクチャ(ISA)及び独立コンプレックス命令セ
ット計算(CISC)命令セットアーキテクチャ(ISA)
を、RISC命令セットに固有の命令でCISC命令をエミュレ
ートすることによって、実施するマイクロプロセッサが
存在する。CISC ISAからの命令は「マクロ命令」と呼ば
れる。RISC ISAからの命令は「マイクロ命令」と呼ばれ
る。
例えばIA-32アーキテクチャの命令セットを改善するた
めに、ストリーミング単一命令多重データ拡張(SSE)
が開発されてきた。SSEは、新たなレジスタセットと、
新たな浮動小数点データタイプと、新たな命令とを含
む。特に、SSEは、8個の128ビット単一命令多重デ
ータ(SIMD)小数点レジスタ(XMM0〜XMM7)を
有し、これを利用して浮動小数点データに計算及び演算
を施すことができる。これらのXMMレジスタを図1A
に示す。各128ビット浮動小数点レジスタは、4個の
パックされた32ビット単精度(SP)浮動小数点(FP)
数からなる。パックされた32ビットSP FP数の構造を
図1Bに示すが、ここで4個の32ビットSP FP数(0
〜3の数)は、XMM2 SSEレジスタに格納されている
かのように示される。その固有のアーキテクチャのよう
な、SSEをサポートするように設計されるアーキテクチ
ャにおいて、SSE命令セットの単一命令は、特定のXM
Mレジスタにおける4個の32ビットSP FP数に対して
並列に演算する。
る状態及び制御レジスタをさらに含む。MXCSRのフ
ォーマットを図2Aの例に示す。MXCSRレジスタを
用いて、例外を選択的にマスク(mask)したり又はマスク
しなかったり(unmask)することができる。すなわち、ビ
ット7〜12のMXCSRレジスタをプログラマが使用
して、特定の例外を選択的にマスクしたり又はマスクし
なかったりすることができる。マスクされた例外は、デ
フォルト応答をもたらし得る、プログラマがプロセッサ
により自動的に処理することを望む例外である。一方、
マスクされていない例外は、プログラマが割り込み又は
オペレーティングシステムハンドラの呼び出しにより処
理することを望む例外である。このハンドラの呼び出し
により、オペレーティングシステム(マイクロソフト社
製のWindowsのような)の制御が転送され、問題が修正
されるか、又はプログラムを終了できる。
外フラグの状態を追跡してもよい。ビット0〜5のMX
CSRレジスタは、6個の例外のいずれかがSSE命令の
実行中に発生したか否かを示す。これらの例外には、無
効演算(invalid operation)(I)、ゼロによる除算(di
vide-by-zero)(Z)、非正規演算(denormal operatio
n)(D)、数値オーバーフロー(numeric overflow)
(O)、数値アンダーフロー(numeric underflow)
(U)、不正確な結果(inexact result)(P)が含まれ
る。フラグの状態は「スティッキー(sticky)」である
が、これは、フラグが一旦設定されると、例外なしに実
行されても、後続のSSE命令により、フラグがクリアで
きないということを意味する。状態フラグは、通常、オ
ペレーティングシステムから発行される特殊な命令によ
ってのみクリアすることができる。
トレジスタXMMレジスタで実行される32ビットSP F
P演算の4つすべてにビット論理和演算を施した結果で
ある。(4個の32ビットSP FP数のそれぞれについて
1つの演算。)したがって、4個の32ビットSP FP数
のいずれか1つについて例外が発生すると、その特定タ
イプの例外に対する例外フラグが上がり、本システムに
おいて何らかのタイプの問題が発生したことを示す。無
効演算(I)、ゼロによる除算(Z)、非正規演算
(D)の例外は、事前計算(precomputation)例外である
が、これは、いずれかの演算又は論理演算が発生する前
に、これらが検出されることを意味する。すなわち、計
算を全く行わずに、これらを検出することが可能であ
る。他の3つの例外、すなわち数値オーバーフロー
(O)、数値アンダーフロー(U)、不正確な結果
(P)は、事後計算(post-computation)例外であるが、
これは、演算を実行した後に、これらが検出されること
を意味する。サブオペランド(すなわち128ビットX
MMレジスタにおける4個のオペランドの1つ)で施さ
れた演算が多数のフラグを上げることが可能である。
る。 1.マスクされていない例外が発生すると、命令を実行
するプロセッサは、XMMレジスタの内容を変更しな
い。換言すれば、マスクされていない例外が4個の32
ビットSP FP数のいずれかについて発生していないこと
がわかるまで、結果は完遂又は格納されない。 2.マスクされた例外がある場合、すべての例外フラグ
は更新される。 3.マスクされていない事前計算例外の場合、マスクさ
れている又はマスクされていないに関わらず、事前計算
例外に関するすべてのフラグが更新される。しかしなが
ら、事後実行(post-execution)例外が発生しない可能性
がある、又は発生しないことを意味する後続の計算は認
められない。これが、事後実行例外フラグが変更又は更
新されないことを意味することは勿論である。 4.マスクされていない事後計算例外の場合、マスクさ
れている又はマスクされていないに関わらず、すべての
事後実行条件が更新され、これはすべての事前計算例外
についても同様である。事前計算例外がマスクされてい
なければ、上記の第3の規則にしたがって、さらなる計
算は認められないという理由においてのみ、いずれの事
前計算例外もマスクされた例外となる。
る情報は、「インテルアーキテクチャソフトウェア開発
者のマニュアル(Intel Architecture Software Develop
er'sManual)」(1999)第1〜3巻、Intel Order N
umbers 243190、243191、243192に見ることができる
が、参照により、これを本明細書中に組み込む。
に対する準備(provision)はなされていない。これら
の非固有アーキテクチャにおいて、4個の32ビットSP
FP数を含むことが可能な8個の128ビット浮動小数
点XMMレジスタは、利用できない。非固有アーキテク
チャの中には、この8個の128ビットXMMレジスタ
を、128ビット幅より少なく64ビット幅より多いも
のとすることができる16個の浮動小数点レジスタ(例
えばIA-64レジスタ)にマッピングし得るものもある。
すなわちアーキテクチャの中には、2個の32ビットSP
FP数を保持するために、82ビットレジスタを使用す
るものがある(64を越えるビットは、SIMDタイプの3
2ビットSP FP数を保持するレジスタを示すために使用
される特殊符号化に使用される場合がある)。一例を図
2Bに示す。なお、SSE固有環境のXMM2レジスタに
格納された4個の32ビットSP FP数0〜3(図1B)
は、ここで「XMM2レジスタの下半分」と「XMM2
レジスタの上半分」をそれぞれ含むXMM2 LowとXM
M2 Highの2つの82ビットレジスタに格納されるこ
とに留意されたい。これにより、4個の32ビットSP F
P数のそれぞれで演算を並列に実行することが困難にな
る。
environment)において、SSE命令は、エミュレーショ
ンにより実行される必要がある。すなわち、4個の32
ビットSP FP数の2つで、まず(並列で)演算を行い、
次に残りの2個の32ビットSP FP数で、(同様に並列
で)演算を行うことができる。代替的には、1個のみ又
は少なくとも3個の32ビットSP FP数で演算を行うこ
とができる。例えば、下半分XMM2 Low、次いで上半
分XMM2 Highのオペランドで演算を実行することが
できる。しかしながら、SSE規則が例外を処理し、例外
フラグを更新するとしたとき、このように一部並列、一
部逐次的にSSE命令をエミュレートする際に問題が発生
する。例えば、図2Bの下半分及び上半分で実行される
命令のセット XMM2:=OP(XMM3,XMM4)が XMM2 Low:=OP(XMM3 Low,XMM4 Low) XMM2 High:=OP(XMM3 High,XMM4 Hig
h) によりエミュレートされると想定する。下半分、XMM
3 Low及びXMM4 Lowにおけるオペランドについてマ
スクされていない例外が存在することなく、第1の命令
が実行されるとする。この演算の結果は、XMM2 Low
に正確にコミット、完遂される。次に、第2の命令を上
半分で実行した結果、事前計算のマスクされていない例
外が得られるとする。SSE規則によれば、この事前計算
のマスクされていない例外により、4個の32ビットSP
FP数のいずれでも後続の演算は実行されない。しかし
ながら、ここでは、下半分で演算を行った結果が、SSE
規則に反して、レジスタXMM2 Lowに完遂されてい
る。これは、XMM2 Lowにおけるデータを破損するた
め、発生させることができない。
完了したときに、マシンに、アーキテクチャ状態を投機
的に(speculatively)変更させた後、第2のマイクロ命
令が例外を有していれば、この変更を「アンドゥ(und
o)」させる「バックオフ(back-off)」機構を実施するこ
とによって、この問題を解決していた。このバックオフ
機構は、ある一定のマシン、特に再命令する(renaming)
レジスタを実施しないマシンでは、実施が困難となるこ
とがある。多くのシステムでは、バックオフ又はアンド
ゥ操作の使用が、様々な理由から困難であったり、又は
制限される。
この規則違反を防ぐ1つの方法は、「シャドー(shado
w)」レジスタ機構を使用することである。シャドーレ
ジスタ機構では、下半分で以前の成功した演算の結果が
シャドーレジスタ内に物理的に格納される。この場合、
上述の例では、例外が上半分において検出されると、下
半分での以前の演算についてシャドーレジスタにすでに
格納されている結果が再記録(re-store)できる、すなわ
ち下半分について「アンドゥ」演算が実行される。しか
しながらシャドーレジスタ機構は比較的複雑である。ほ
とんどのシステムにおいて、下半分での以前の演算の結
果を格納するために、少なくとも16個のレジスタが利
用可能でなければならず、それぞれが2個の32ビット
FP SP数が可能である必要がある。さらに「アンドゥ」
演算が必要とされる場合、どのシャドーレジスタに所望
の結果があるかを決定しなければならない。この機構
は、他の場合により効率よく使用される高価なレジスタ
スペースを消費する。さらに以前のマップを格納するた
めに比較的複雑なポインタ及び仮想マップのシステムが
必要とされる。
法は、バックオフレジスタ機構を設けるものである。こ
の手法は、複数個のレジスタ、結合マルチプレクサ/デ
マルチプレクサ結合、その他各種のハードウェア、命令
の新たなセットを必要とする場合があるということを、
当業者は理解するであろう。これらは、すべてコスト高
を招くとともに効率の低下をもたらす。
別の方法は、SSE XMMレジスタにおける4個の32ビ
ットSP FP数のそれぞれについて命令を一度に1つ実行
し、各実行の結果をテンポラリレジスタに格納するもの
である。4番目の32ビットSP FP数に関する命令が実
行され、マスクされていない例外が発生していなけれ
ば、適切なアーキテクチャ場所に結果が完遂され、例外
フラグが更新される。このエミュレーションの方法で
は、結果が完遂され得る前に、1つの命令を4回実行す
る際に費やすクロックサイクル数に加え、比較的複雑な
マイクロコードシーケンスをさらに追加し、別の場合に
より効率よく使用されるハードウェアを使用する必要が
ある。
効率よく使用し、かつ比較的少ないクロックサイクルを
消費する、すなわち比較的少ないクロックサイクルしか
必要としない、SSE命令セット(及び他の命令セット)
をエミュレートする方法及び装置が必要とされているこ
とが明らかである。さらに一連の命令を実行する際に、
これらの命令の結果を完遂することなく、ある一定の問
題が発生するおそれがあるか否かを判定する方法及び装
置が必要とされている。
命令を少なくとも2個のマイクロ命令に分解するステッ
プ、このマイクロ命令を2つの別の機能ユニットで並列
に実行するステップ、これらの機能ユニットが単一の機
能ユニットとして実行されたかのように、見なせるよう
にこれらのマイクロ命令をリンクするステップ、からな
る命令を処理する方法である。本発明は、例外について
のSSE規則にしたがって、機能ユニットのいずれか一方
において所定の例外が発生するか否かを判定することに
よって動作する。リンクされたマイクロ命令のいずれか
において、例外が発生すれば、これらのマイクロ命令の
それぞれの実行はキャンセルされる。これにより、バッ
クオフ又はアンドゥ機構の必要性が回避される。
たプロセッサと、ROMと、浮動小数点レジスタとを有
する、ソフトウェア命令を処理するコンピュータシステ
ムである。本プロセッサは、1つのマクロ命令を少なく
とも2つのマイクロ命令に分解し、これらのマイクロ命
令を並列に実行し、これらの機能ユニットが単一の機能
ユニットとして実行されたかのように、見なせるように
これらの命令をリンクするように構成されている。また
本プロセッサは、バックオフ又はアンドゥ機構を使用す
ることなく、例外を識別して処理することが可能であ
る。
を示す。このコンピュータシステム10は、少なくとも
1個のプロセッサ20と、主メモリ30と、各種相互接
続データバス、アドレスバス及びコントロールバス(総
称的に40で表す)と、を備える。主メモリ30には、
SSEを含むことが可能な命令セット50とオペレーティ
ングシステム60とが格納される。
動小数点ユニット70と、マイクロコードROM100
と、各種バス及び相互結線(総称的に110で表す)
と、SSE XMMレジスタをエミュレートするために必要
なXMM0 Low〜XMM7 Highの16個の浮動小数点
レジスタを備えるレジスタファイル120と、を備え
る。一実施形態において、16個の浮動小数点レジスタ
は82ビットレジスタであるが、しかし他の幅(例えば
128ビット又は64ビット)を使用することができ、
82ビットレジスタに関する以下の記載は単なる例示で
あり、限定することを意図するものではない。SSEの4
個の32ビットSP浮動小数点数は、本発明の82ビット
SP FPレジスタの2個(例えば図2Bに示す、XMM2
Low及びXMM2 High)に格納される。浮動小数点ユニ
ット70は、SSEのMXCSRレジスタに対応する第1
の32ビットレジスタ130と、2個のFP演算を実行す
るために使用される少なくとも2つの機能ユニット(例
えば170、172)と、からなる。
令が供給される。プロセッサ20に供給される命令は、
マイクロコードROM100に格納される1つ以上のマ
イクロコード命令140にマップするマクロコード命令
である。マイクロコード命令は、プロセッサ20が直接
実行することもできる。またマイクロコードROM10
0には、1セットのマイクロコードハンドラ150も格
納されており、これを呼び出して、ある一定のマスクさ
れていないプロセッサの例外を処理することができる。
プロセッサ20は、パイプラインアーキテクチャを有
し、ある一定の命令を並列処理することができる。
p)で、128ビット幅(bit wide)である、レジスタ
ファイルに保持される多数の単精度(SP)浮動小数点
(FP)値で同時に演算する、ストリーミングSIMD拡張、
すなわちSSE命令を画定する。単精度浮動小数点数を3
2ビットで表すことができるため、各SSEレジスタは、
4個のパックされたSP値を保持可能であるとともに、各
SSE命令は4個のSP結果を計算することができる。IA-32
ISAが128ビットレジスタ及び128ビットデータで
演算可能な命令を特定するとしても、一実施例では、1
つあるいは2つのFP SP演算を一度に計算することだけ
が可能である下位レジスタ又はFP機能ユニットを実施す
ることを選択しても良い。SSE命令を多数の機能ユニッ
ト上でエミュレートすることにより、又は、4個のFP S
P演算を複数サイクルに亘ってシリアルに実行すること
により、又は、これらの手法の両方の組み合わせによ
り、SSE命令を実施することが可能である。ISAは、演算
のアーキテクチャ的な目に見える副作用の何れかが、4
つすべての演算がハードウェアにおいて同時に発生して
いるかのように、見なせるということだけを必要とす
る。
のFPレジスタを含むRISC ISAが実施される。したがっ
て、SSE命令をこの実施例でエミュレートするために
は、1つのSSEレジスタに含まれる不可欠な4個の32
ビットSP FP値をエミュレートするための2個のFPレジ
スタが必要とされる。またRISC ISAは、1つの命令によ
り2個のSP値を演算する、その固有のSIMD演算を規定す
る。このためこの実施例では、単一SSEマクロ命令をエ
ミュレートするために2個のRISCマイクロ命令が必要と
なる。
行時に例外を生じさせることがある。IA-32アーキテク
チャは、6個の可能な例外と、3個の事前計算と、3個
の事後計算を定義する。事前計算例外は、ソースレジス
タの値に基づいて計算されるものであり、それに対して
事後計算例外は、計算の結果の値に基づいて計算され
る。またこのアーキテクチャは、制御及び状態レジスタ
であるMXCSRを定義する。MXCSRは、各例外を
独立的にマスク可能な制御ビットと、発生するいずれの
例外の状態も捕獲するフラグビットとからなる。
イクロ命令を並列に発行する方法と、両FPユニットの結
果に基づいてフラグを更新する方法と、いずれか一方の
FPユニットにおいて例外を引き起こして両FPユニットに
おける結果レジスタを設定しないようにする方法を含
む。
実施には、精密な例外を有することが必要とされる。す
なわち、命令により例外が引き起こされる場合、その命
令ストリームにおける後続のすべての命令は、当該プロ
セスからフラッシュ(flush)されなければならない。
ある実施が複数の命令を並列に実行するとしても、逐次
意味 (sequential semantics)を添付する必要がある。
例えば、以下の命令ストリーム op1―最も古い命令 op2 op3 op4 … opN―最も新しい命令 において、op1は最も古い命令であり、これが障害
(fault)を取る場合、プロセッサはこれより新しい演
算(op2〜opN)をすべてフラッシュしなければな
らない。プロセッサが2個の演算を並列で実行し、かつ
新たな演算をサイクルごとにパイプライン処理する場
合、これらの演算は、すべて同時に「インフライト(in
flight)」状態、飛行中の状態になり得る。例えばo
p3及びop4を1サイクル遅らせて「インフライト」
状態にし、op5及びop6を2サイクル遅らせて「イ
ンフライト」状態にし、…その間に、op1及びop2
を並列発行して、完了に近づけることができる。op1
が例外を取る場合、演算(op1〜op8)をすべてフ
ラッシュしなければならない。しかしop2が例外を取
る場合、演算op2〜op8のみをフラッシュすればよ
い。
に、本発明を実施するのに必要とされる各ステップを示
すフローチャートである。まず分解機能310におい
て、マクロ命令が2個以上のマイクロ命令に分解され
る。エミュレーション機能320において示すように、
SSE演算の上半分及び下半分をエミュレートするために
使用される2個のマイクロ命令を並列に発行させて、こ
のマイクロ命令が、1サイクルにつき2個のSP値を計算
することがそれぞれ可能な2個のFPユニットに同時にデ
ィスパッチする(dispatch)、すなわちタスク指名す
る。これは、本願と同日付けで出願された、Knebelらに
よる「Method and Apparatus for Implementing Two Ar
chitectures on a Chip」と題する同時係属中の特許出
願に請求されている機構により達成される。参照によ
り、この出願を本明細書中に組み込む。両マイクロ演算
は、単一演算として扱われる必要がある。これらは互い
に密接に関連して作動する。
レーションハードウェアにより信号が生成され、FP機能
ユニットに送られ、SSE命令がエミュレートされている
ときを特定する。そして信号の発信時、例外検出機能3
40は、いずれか一方のFP機能ユニットにおいて例外が
取られたか否かを判定する。いずれか一方のFP機能ユニ
ットにおいて例外が取られた場合、キャンセル機能35
0に示すように、両FP機能ユニットからの結果はクリア
されなければならず、例外がキャンセルされ、ハンドラ
が呼び出される。本発明は、2個の機能ユニットにおけ
るマイクロ命令の相対年齢(relative age)にかかわら
ず、他方のFP機能ユニットにおける結果をフラッシュす
ることを可能とすべきである。上述のように信号が発信
されると、更新機能360に示すように、MXCSRフ
ラグは、両機能ユニットの結果に基づいて更新されなけ
ればならない。マイクロ命令の実行が首尾よく完了した
後、続行機能370に示すように、本プロセスは続行す
る。
詳説してきたが、各種の変更が可能である。したがって
本発明は、その本質的な精神又は属性から逸脱しなけれ
ば、他の特定の形式においても実現し得る。あらゆる点
において、本明細書に記載の実施形態は限定ではなく例
示と見なされ、また本発明の範囲を決定する特許請求の
範囲を参照することが望ましい。
の組み合わせからなる例示的な実施態様を示す。 1. ソフトウェア命令を処理する方法であって、
(a)マクロ命令を複数のマイクロ命令に分解するステ
ップ(310)と、(b)前記複数のマイクロ命令の少
なくとも2個を並列に発行するステップ(320)と、
(c)複数のマイクロ命令の前記少なくとも2個のいず
れかにおいて例外が発生するか否かを判定するステップ
(340)と、(d)複数のマイクロ命令の前記少なく
とも2個のいずれかにおいて例外が発生した場合、複数
のマイクロ命令の前記少なくとも2個をキャンセルする
ステップ(350)と、により特徴付けられる方法。
くとも2個を実行するステップ(320)をさらに特徴
とする、1項記載の方法。
も2個が、別個の実行ユニット(170、172)上で
実行されるが、単一の実行ユニット上で実行されている
かのように見なされる、1項又は2項記載の方法。
も2個が、同一クロックサイクルで実行される、1〜3
項の何れか1項記載の方法。
も2個が、多数のクロックサイクルに亘って実行され
る、1〜4項の何れか1項記載の方法。
トするシステムにおいて実施される、1〜5項の何れか
1項記載の方法。
の単精度(「SP」)浮動小数点(「FP」)値(70)を
演算させる、1〜6項の何れか1項記載の方法。
少なくとも2個の実行の結果に基づいて、フラグを更新
するステップ(360)からなることを特徴とする、1
〜7項の何れか1項記載の方法。
外が発生する場合、前記マイクロ命令の実行をキャンセ
ル(350)して、マイクロコードハンドラ(150)
を呼び出す(350)ステップと、(b)マスクされて
いない例外が発生しない場合、複数の機能ユニットに対
して例外の論理和を独立的に生成することによって、少
なくとも1個の例外フラグを更新する(360)ステッ
プと、からなることを特徴とする、1〜8項の何れか1
項記載の方法。
E演算をエミュレートするために2個のマイクロ命令を
設けるステップ(310)と、(b)前記上半分及び下
半分の演算を並列に発行させるステップ(320)と、
(c)前記上半分及び下半分の演算を、第1のFPユニッ
ト(170)及び第2のFPユニット(172)にそれぞ
れタスク指名するステップ(320)と、(d)信号を
エミュレータのハードウェアから生成するステップ(3
30)と、(e)前記第1及び第2のFPユニット(17
0、172)に前記信号を送信するステップと、(f)
前記第1又は第2のFPユニット(170、172)のい
ずれか一方において、例外が取られたか否かを判定する
ステップ(340)と、(g)前記第1又は第2のFPユ
ニットのいずれか一方において、例外が取られた場合、
他のFPユニット(例えば170、172)における結果
をフラッシュするステップ(350)と、(h)前記第
1及び第2のFPユニット(170、172)の結果に基
づいて、MXCSRフラグを更新するステップ(36
0)と、からなることを特徴とする、1〜9項の何れか
1項記載の方法。
のマイクロ命令に分解するステップ(310)と、この
複数のマイクロ命令を並列に実行するステップ(32
0)と、これらが単一の機能ユニット(170)として
実行されたかのように、見なせるようにこれらのマイク
ロ命令をリンクするステップ(340)とによって、命
令を処理する方法である。本発明は、例外についてのSS
E規則にしたがって、機能ユニット(170、172)
のいずれか一方において所定の例外が発生するか否かを
判定するステップ(340)によって動作する。リンク
されたマイクロ命令のいずれかにおいて、例外が発生す
れば、これらのマイクロ命令のそれぞれの実行はキャン
セルされる(350)。これにより、バックオフ又はア
ンドゥ機構の必要性が回避される。
SSEのコンポーネントのブロック図を示す。
SSEのコンポーネントのブロック図を示す。
図である。
Claims (1)
- 【請求項1】 ソフトウェア命令を処理する方法であっ
て、(a)マクロ命令を複数のマイクロ命令に分解する
ステップ(310)と、(b)前記複数のマイクロ命令
の少なくとも2個を並列に発行するステップ(320)
と、(c)複数のマイクロ命令の前記少なくとも2個の
いずれかにおいて例外が発生するか否かを判定するステ
ップ(340)と、(d)複数のマイクロ命令の前記少
なくとも2個のいずれかにおいて例外が発生した場合、
複数のマイクロ命令の前記少なくとも2個をキャンセル
するステップ(350)と、からなることを特徴とする
方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/496,844 US6820190B1 (en) | 2000-02-02 | 2000-02-02 | Method and computer system for decomposing macroinstructions into microinstructions and forcing the parallel issue of at least two microinstructions |
US09/496844 | 2000-02-02 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2001243063A true JP2001243063A (ja) | 2001-09-07 |
JP2001243063A5 JP2001243063A5 (ja) | 2006-11-30 |
Family
ID=23974401
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001025784A Pending JP2001243063A (ja) | 2000-02-02 | 2001-02-01 | Simd命令をエミュレートする方法及び装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US6820190B1 (ja) |
JP (1) | JP2001243063A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010152919A (ja) * | 2001-12-20 | 2010-07-08 | Intel Corp | プロセッサに関するロード/移動及び複製命令 |
JP2011248820A (ja) * | 2010-05-31 | 2011-12-08 | Nec Computertechno Ltd | 情報処理装置及びマイクロ命令処理方法 |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8065504B2 (en) | 1999-01-28 | 2011-11-22 | Ati International Srl | Using on-chip and off-chip look-up tables indexed by instruction address to control instruction execution in a processor |
US8127121B2 (en) | 1999-01-28 | 2012-02-28 | Ati Technologies Ulc | Apparatus for executing programs for a first computer architechture on a computer of a second architechture |
US7941647B2 (en) * | 1999-01-28 | 2011-05-10 | Ati Technologies Ulc | Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination |
US8074055B1 (en) | 1999-01-28 | 2011-12-06 | Ati Technologies Ulc | Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code |
US7206921B2 (en) * | 2003-04-07 | 2007-04-17 | Intel Corporation | Micro-operation un-lamination |
US7213136B2 (en) * | 2003-07-30 | 2007-05-01 | Intel Corporation | Apparatus and method for redundant zero micro-operation removal |
US7451294B2 (en) * | 2003-07-30 | 2008-11-11 | Intel Corporation | Apparatus and method for two micro-operation flow using source override |
US9703562B2 (en) | 2013-03-16 | 2017-07-11 | Intel Corporation | Instruction emulation processors, methods, and systems |
US11403110B2 (en) * | 2019-10-23 | 2022-08-02 | Texas Instruments Incorporated | Storing a result of a first instruction of an execute packet in a holding register prior to completion of a second instruction of the execute packet |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2911278B2 (ja) * | 1990-11-30 | 1999-06-23 | 松下電器産業株式会社 | プロセッサ |
US5546599A (en) * | 1994-03-31 | 1996-08-13 | International Business Machines Corporation | Processing system and method of operation for processing dispatched instructions with detected exceptions |
US5598546A (en) * | 1994-08-31 | 1997-01-28 | Exponential Technology, Inc. | Dual-architecture super-scalar pipeline |
US5860017A (en) | 1996-06-28 | 1999-01-12 | Intel Corporation | Processor and method for speculatively executing instructions from multiple instruction streams indicated by a branch instruction |
US5859999A (en) | 1996-10-03 | 1999-01-12 | Idea Corporation | System for restoring predicate registers via a mask having at least a single bit corresponding to a plurality of registers |
US5764971A (en) * | 1996-12-11 | 1998-06-09 | Industrial Technology Research Institute | Method and apparatus for implementing precise interrupts in a pipelined data processing system |
US6233671B1 (en) * | 1998-03-31 | 2001-05-15 | Intel Corporation | Staggering execution of an instruction by dividing a full-width macro instruction into at least two partial-width micro instructions |
US6085312A (en) * | 1998-03-31 | 2000-07-04 | Intel Corporation | Method and apparatus for handling imprecise exceptions |
US6038652A (en) * | 1998-09-30 | 2000-03-14 | Intel Corporation | Exception reporting on function generation in an SIMD processor |
US6321327B1 (en) * | 1998-12-30 | 2001-11-20 | Intel Corporation | Method for setting a bit associated with each component of packed floating-pint operand that is normalized in SIMD operations |
US6330657B1 (en) * | 1999-05-18 | 2001-12-11 | Ip-First, L.L.C. | Pairing of micro instructions in the instruction queue |
US6357016B1 (en) * | 1999-12-09 | 2002-03-12 | Intel Corporation | Method and apparatus for disabling a clock signal within a multithreaded processor |
-
2000
- 2000-02-02 US US09/496,844 patent/US6820190B1/en not_active Expired - Lifetime
-
2001
- 2001-02-01 JP JP2001025784A patent/JP2001243063A/ja active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010152919A (ja) * | 2001-12-20 | 2010-07-08 | Intel Corp | プロセッサに関するロード/移動及び複製命令 |
US8539202B2 (en) | 2001-12-20 | 2013-09-17 | Intel Corporation | Load/move duplicate instructions for a processor |
US8650382B2 (en) | 2001-12-20 | 2014-02-11 | Intel Corporation | Load/move and duplicate instructions for a processor |
US9043583B2 (en) | 2001-12-20 | 2015-05-26 | Intel Corporation | Load/move and duplicate instructions for a processor |
JP2011248820A (ja) * | 2010-05-31 | 2011-12-08 | Nec Computertechno Ltd | 情報処理装置及びマイクロ命令処理方法 |
Also Published As
Publication number | Publication date |
---|---|
US6820190B1 (en) | 2004-11-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6151669A (en) | Methods and apparatus for efficient control of floating-point status register | |
JP3977016B2 (ja) | 仮想レジスタ番号を用いて論理レジスタ番号を物理レジスタ番号にマッピングするように構成されるプロセッサ | |
US5826070A (en) | Apparatus and method for maintaining status flags and condition codes using a renaming technique in an out of order floating point execution unit | |
US5345567A (en) | System and method for modifying program status word system mask, system access key, and address space code with overlap enabled | |
US5815695A (en) | Method and apparatus for using condition codes to nullify instructions based on results of previously-executed instructions on a computer processor | |
US10776124B2 (en) | Handling exceptional conditions for vector arithmetic instruction | |
US6195745B1 (en) | Pipeline throughput via parallel out-of-order execution of adds and moves in a supplemental integer execution unit | |
JP3014381B2 (ja) | Ieee準拠浮動小数点ユニット | |
CN104899181B (zh) | 用于处理向量操作数的数据处理装置和方法 | |
EP3362888A1 (en) | Vector data transfer instruction | |
WO2012136975A1 (en) | A data processing apparatus and method for performing vector operations | |
US6216222B1 (en) | Handling exceptions in a pipelined data processing apparatus | |
JP2001243063A (ja) | Simd命令をエミュレートする方法及び装置 | |
EP1204918A1 (en) | Conditional instruction execution in a computer | |
EP3362908A1 (en) | Vector load instruction | |
KR0133237B1 (ko) | 다중 실행장치 처리시스템 상태의 선택적 저장방법 및 시스템 | |
US6021488A (en) | Data processing system having an apparatus for tracking a status of an out-of-order operation and method thereof | |
JP4219507B2 (ja) | コンピュータ動作方法 | |
JP2000122850A (ja) | 浮動小数点計算実施方法 | |
US6237085B1 (en) | Processor and method for generating less than (LT), Greater than (GT), and equal to (EQ) condition code bits concurrent with a logical or complex operation | |
JP3578682B2 (ja) | 浮動小数点数処理記憶方法 | |
KR100307980B1 (ko) | 산술 또는 논리 연산의 수행과 동시에 조건 코드 비트를 발생하는 방법 및 시스템 | |
US6681322B1 (en) | Method and apparatus for emulating an instruction set extension in a digital computer system | |
JPH096610A (ja) | データ処理システムにおいて複合命令の実行中にオペランドを交換するための方法およびシステム | |
US4956767A (en) | Data processing system with model for status accumulating operation by simulating sequence of arithmetic steps performed by arithmetic processor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20061012 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20061012 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20080917 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20081007 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20090107 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20090113 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20090609 |