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
Application number
JP2001025784A
Other languages
English (en)
Other versions
JP2001243063A5 (ja
Inventor
Patrick Knebel
パトリック・クネベル
Kevin David Safford
ケビン・デイビッド・サフォード
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.)
HP Inc
Original Assignee
Hewlett Packard Co
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 Hewlett Packard Co filed Critical Hewlett Packard Co
Publication of JP2001243063A publication Critical patent/JP2001243063A/ja
Publication of JP2001243063A5 publication Critical patent/JP2001243063A5/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30116Shadow registers, e.g. coupled registers, not forming part of the register space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3865Recovery, 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

(57)【要約】 【課題】 既存のハードウェアを効率よく使用し、かつ
比較的少ないクロックサイクルしか必要としない、SSE
命令セットをエミュレートする方法を提供する。 【解決手段】 本発明の方法は、(a)マクロ命令を複
数のマイクロ命令に分解するステップ(310)と、
(b)複数のマイクロ命令の少なくとも2個を並列に発
行するステップ(320)と、(c)複数のマイクロ命
令の少なくとも2個のいずれかにおいて例外が発生する
か否かを判定するステップ(340)と、(d)複数の
マイクロ命令の少なくとも2個のいずれかにおいて例外
が発生した場合、複数のマイクロ命令の少なくとも2個
をキャンセルするステップ(350)と、からなること
を特徴とする。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、一般に、ディジタ
ルコンピュータシステムに関する。より詳細には、本発
明は、ディジタルコンピュータシステムにおいて命令を
処理する方法及び装置に関するが、これに限定されな
い。
【0002】
【従来の技術】縮小命令セット計算(RISC)命令セット
アーキテクチャ(ISA)及び独立コンプレックス命令セ
ット計算(CISC)命令セットアーキテクチャ(ISA)
を、RISC命令セットに固有の命令でCISC命令をエミュレ
ートすることによって、実施するマイクロプロセッサが
存在する。CISC ISAからの命令は「マクロ命令」と呼ば
れる。RISC ISAからの命令は「マイクロ命令」と呼ばれ
る。
【0003】最近のあるコンピュータアーキテクチャ、
例えば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数に対して
並列に演算する。
【0004】またSSEは、MXCSRレジスタと呼ばれ
る状態及び制御レジスタをさらに含む。MXCSRのフ
ォーマットを図2Aの例に示す。MXCSRレジスタを
用いて、例外を選択的にマスク(mask)したり又はマスク
しなかったり(unmask)することができる。すなわち、ビ
ット7〜12のMXCSRレジスタをプログラマが使用
して、特定の例外を選択的にマスクしたり又はマスクし
なかったりすることができる。マスクされた例外は、デ
フォルト応答をもたらし得る、プログラマがプロセッサ
により自動的に処理することを望む例外である。一方、
マスクされていない例外は、プログラマが割り込み又は
オペレーティングシステムハンドラの呼び出しにより処
理することを望む例外である。このハンドラの呼び出し
により、オペレーティングシステム(マイクロソフト社
製のWindowsのような)の制御が転送され、問題が修正
されるか、又はプログラムを終了できる。
【0005】また、MXCSRレジスタを利用して、例
外フラグの状態を追跡してもよい。ビット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命令により、フラグがクリアで
きないということを意味する。状態フラグは、通常、オ
ペレーティングシステムから発行される特殊な命令によ
ってのみクリアすることができる。
【0006】図2Aの例外フラグは、特定の128ビッ
トレジスタ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つ)で施さ
れた演算が多数のフラグを上げることが可能である。
【0007】例外について、SSEには以下の規則があ
る。 1.マスクされていない例外が発生すると、命令を実行
するプロセッサは、XMMレジスタの内容を変更しな
い。換言すれば、マスクされていない例外が4個の32
ビットSP FP数のいずれかについて発生していないこと
がわかるまで、結果は完遂又は格納されない。 2.マスクされた例外がある場合、すべての例外フラグ
は更新される。 3.マスクされていない事前計算例外の場合、マスクさ
れている又はマスクされていないに関わらず、事前計算
例外に関するすべてのフラグが更新される。しかしなが
ら、事後実行(post-execution)例外が発生しない可能性
がある、又は発生しないことを意味する後続の計算は認
められない。これが、事後実行例外フラグが変更又は更
新されないことを意味することは勿論である。 4.マスクされていない事後計算例外の場合、マスクさ
れている又はマスクされていないに関わらず、すべての
事後実行条件が更新され、これはすべての事前計算例外
についても同様である。事前計算例外がマスクされてい
なければ、上記の第3の規則にしたがって、さらなる計
算は認められないという理由においてのみ、いずれの事
前計算例外もマスクされた例外となる。
【0008】ストリーミングSIMD拡張についてのさらな
る情報は、「インテルアーキテクチャソフトウェア開発
者のマニュアル(Intel Architecture Software Develop
er'sManual)」(1999)第1〜3巻、Intel Order N
umbers 243190、243191、243192に見ることができる
が、参照により、これを本明細書中に組み込む。
【0009】多数のアーキテクチャにおいて、SSE命令
に対する準備(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数のそれぞれで演算を並列に実行することが困難にな
る。
【0010】したがって、この非固有環境(non-native
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におけるデータを破損するた
め、発生させることができない。
【0011】従来のマシンでは、第1のマイクロ命令が
完了したときに、マシンに、アーキテクチャ状態を投機
的に(speculatively)変更させた後、第2のマイクロ命
令が例外を有していれば、この変更を「アンドゥ(und
o)」させる「バックオフ(back-off)」機構を実施するこ
とによって、この問題を解決していた。このバックオフ
機構は、ある一定のマシン、特に再命令する(renaming)
レジスタを実施しないマシンでは、実施が困難となるこ
とがある。多くのシステムでは、バックオフ又はアンド
ゥ操作の使用が、様々な理由から困難であったり、又は
制限される。
【0012】SSEのエミュレートを首尾よく行い、かつ
この規則違反を防ぐ1つの方法は、「シャドー(shado
w)」レジスタ機構を使用することである。シャドーレ
ジスタ機構では、下半分で以前の成功した演算の結果が
シャドーレジスタ内に物理的に格納される。この場合、
上述の例では、例外が上半分において検出されると、下
半分での以前の演算についてシャドーレジスタにすでに
格納されている結果が再記録(re-store)できる、すなわ
ち下半分について「アンドゥ」演算が実行される。しか
しながらシャドーレジスタ機構は比較的複雑である。ほ
とんどのシステムにおいて、下半分での以前の演算の結
果を格納するために、少なくとも16個のレジスタが利
用可能でなければならず、それぞれが2個の32ビット
FP SP数が可能である必要がある。さらに「アンドゥ」
演算が必要とされる場合、どのシャドーレジスタに所望
の結果があるかを決定しなければならない。この機構
は、他の場合により効率よく使用される高価なレジスタ
スペースを消費する。さらに以前のマップを格納するた
めに比較的複雑なポインタ及び仮想マップのシステムが
必要とされる。
【0013】特定のSSE命令をエミュレートする別の方
法は、バックオフレジスタ機構を設けるものである。こ
の手法は、複数個のレジスタ、結合マルチプレクサ/デ
マルチプレクサ結合、その他各種のハードウェア、命令
の新たなセットを必要とする場合があるということを、
当業者は理解するであろう。これらは、すべてコスト高
を招くとともに効率の低下をもたらす。
【0014】特定のSSE命令をエミュレートするさらに
別の方法は、SSE XMMレジスタにおける4個の32ビ
ットSP FP数のそれぞれについて命令を一度に1つ実行
し、各実行の結果をテンポラリレジスタに格納するもの
である。4番目の32ビットSP FP数に関する命令が実
行され、マスクされていない例外が発生していなけれ
ば、適切なアーキテクチャ場所に結果が完遂され、例外
フラグが更新される。このエミュレーションの方法で
は、結果が完遂され得る前に、1つの命令を4回実行す
る際に費やすクロックサイクル数に加え、比較的複雑な
マイクロコードシーケンスをさらに追加し、別の場合に
より効率よく使用されるハードウェアを使用する必要が
ある。
【0015】
【発明が解決しようとする課題】既存のハードウェアを
効率よく使用し、かつ比較的少ないクロックサイクルを
消費する、すなわち比較的少ないクロックサイクルしか
必要としない、SSE命令セット(及び他の命令セット)
をエミュレートする方法及び装置が必要とされているこ
とが明らかである。さらに一連の命令を実行する際に、
これらの命令の結果を完遂することなく、ある一定の問
題が発生するおそれがあるか否かを判定する方法及び装
置が必要とされている。
【0016】
【課題を解決するための手段】本発明は、1つのマクロ
命令を少なくとも2個のマイクロ命令に分解するステッ
プ、このマイクロ命令を2つの別の機能ユニットで並列
に実行するステップ、これらの機能ユニットが単一の機
能ユニットとして実行されたかのように、見なせるよう
にこれらのマイクロ命令をリンクするステップ、からな
る命令を処理する方法である。本発明は、例外について
のSSE規則にしたがって、機能ユニットのいずれか一方
において所定の例外が発生するか否かを判定することに
よって動作する。リンクされたマイクロ命令のいずれか
において、例外が発生すれば、これらのマイクロ命令の
それぞれの実行はキャンセルされる。これにより、バッ
クオフ又はアンドゥ機構の必要性が回避される。
【0017】また本発明は、浮動小数点ユニットを備え
たプロセッサと、ROMと、浮動小数点レジスタとを有
する、ソフトウェア命令を処理するコンピュータシステ
ムである。本プロセッサは、1つのマクロ命令を少なく
とも2つのマイクロ命令に分解し、これらのマイクロ命
令を並列に実行し、これらの機能ユニットが単一の機能
ユニットとして実行されたかのように、見なせるように
これらの命令をリンクするように構成されている。また
本プロセッサは、バックオフ又はアンドゥ機構を使用す
ることなく、例外を識別して処理することが可能であ
る。
【0018】
【発明の実施の形態】A.コンピュータシステム 図3は、本発明を実施可能なコンピュータシステム10
を示す。このコンピュータシステム10は、少なくとも
1個のプロセッサ20と、主メモリ30と、各種相互接
続データバス、アドレスバス及びコントロールバス(総
称的に40で表す)と、を備える。主メモリ30には、
SSEを含むことが可能な命令セット50とオペレーティ
ングシステム60とが格納される。
【0019】図4に示すように、プロセッサ20は、浮
動小数点ユニット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)と、からなる。
【0020】プロセッサ20には、主メモリ30から命
令が供給される。プロセッサ20に供給される命令は、
マイクロコードROM100に格納される1つ以上のマ
イクロコード命令140にマップするマクロコード命令
である。マイクロコード命令は、プロセッサ20が直接
実行することもできる。またマイクロコードROM10
0には、1セットのマイクロコードハンドラ150も格
納されており、これを呼び出して、ある一定のマスクさ
れていないプロセッサの例外を処理することができる。
プロセッサ20は、パイプラインアーキテクチャを有
し、ある一定の命令を並列処理することができる。
【0021】B.利用 IA-32 ISAは、単一命令が、8エントリ深さ(entry dee
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
つすべての演算がハードウェアにおいて同時に発生して
いるかのように、見なせるということだけを必要とす
る。
【0022】好ましい実施形態において、82ビット幅
のFPレジスタを含むRISC ISAが実施される。したがっ
て、SSE命令をこの実施例でエミュレートするために
は、1つのSSEレジスタに含まれる不可欠な4個の32
ビットSP FP値をエミュレートするための2個のFPレジ
スタが必要とされる。またRISC ISAは、1つの命令によ
り2個のSP値を演算する、その固有のSIMD演算を規定す
る。このためこの実施例では、単一SSEマクロ命令をエ
ミュレートするために2個のRISCマイクロ命令が必要と
なる。
【0023】オペランドの値によって、SSE命令は、実
行時に例外を生じさせることがある。IA-32アーキテク
チャは、6個の可能な例外と、3個の事前計算と、3個
の事後計算を定義する。事前計算例外は、ソースレジス
タの値に基づいて計算されるものであり、それに対して
事後計算例外は、計算の結果の値に基づいて計算され
る。またこのアーキテクチャは、制御及び状態レジスタ
であるMXCSRを定義する。MXCSRは、各例外を
独立的にマスク可能な制御ビットと、発生するいずれの
例外の状態も捕獲するフラグビットとからなる。
【0024】本発明の好適な実施形態は、2個のRISCマ
イクロ命令を並列に発行する方法と、両FPユニットの結
果に基づいてフラグを更新する方法と、いずれか一方の
FPユニットにおいて例外を引き起こして両FPユニットに
おける結果レジスタを設定しないようにする方法を含
む。
【0025】固有モード(RISC ISA)における実行時、
実施には、精密な例外を有することが必要とされる。す
なわち、命令により例外が引き起こされる場合、その命
令ストリームにおける後続のすべての命令は、当該プロ
セスからフラッシュ(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のみをフラッシュすればよ
い。
【0026】図5は、SSE命令をエミュレートするため
に、本発明を実施するのに必要とされる各ステップを示
すフローチャートである。まず分解機能310におい
て、マクロ命令が2個以上のマイクロ命令に分解され
る。エミュレーション機能320において示すように、
SSE演算の上半分及び下半分をエミュレートするために
使用される2個のマイクロ命令を並列に発行させて、こ
のマイクロ命令が、1サイクルにつき2個のSP値を計算
することがそれぞれ可能な2個のFPユニットに同時にデ
ィスパッチする(dispatch)、すなわちタスク指名す
る。これは、本願と同日付けで出願された、Knebelらに
よる「Method and Apparatus for Implementing Two Ar
chitectures on a Chip」と題する同時係属中の特許出
願に請求されている機構により達成される。参照によ
り、この出願を本明細書中に組み込む。両マイクロ演算
は、単一演算として扱われる必要がある。これらは互い
に密接に関連して作動する。
【0027】信号生成機能330に示すように、エミュ
レーションハードウェアにより信号が生成され、FP機能
ユニットに送られ、SSE命令がエミュレートされている
ときを特定する。そして信号の発信時、例外検出機能3
40は、いずれか一方のFP機能ユニットにおいて例外が
取られたか否かを判定する。いずれか一方のFP機能ユニ
ットにおいて例外が取られた場合、キャンセル機能35
0に示すように、両FP機能ユニットからの結果はクリア
されなければならず、例外がキャンセルされ、ハンドラ
が呼び出される。本発明は、2個の機能ユニットにおけ
るマイクロ命令の相対年齢(relative age)にかかわら
ず、他方のFP機能ユニットにおける結果をフラッシュす
ることを可能とすべきである。上述のように信号が発信
されると、更新機能360に示すように、MXCSRフ
ラグは、両機能ユニットの結果に基づいて更新されなけ
ればならない。マイクロ命令の実行が首尾よく完了した
後、続行機能370に示すように、本プロセスは続行す
る。
【0028】本発明を、その特定の実施形態を参照して
詳説してきたが、各種の変更が可能である。したがって
本発明は、その本質的な精神又は属性から逸脱しなけれ
ば、他の特定の形式においても実現し得る。あらゆる点
において、本明細書に記載の実施形態は限定ではなく例
示と見なされ、また本発明の範囲を決定する特許請求の
範囲を参照することが望ましい。
【0029】以下においては、本発明の種々の構成要件
の組み合わせからなる例示的な実施態様を示す。 1. ソフトウェア命令を処理する方法であって、
(a)マクロ命令を複数のマイクロ命令に分解するステ
ップ(310)と、(b)前記複数のマイクロ命令の少
なくとも2個を並列に発行するステップ(320)と、
(c)複数のマイクロ命令の前記少なくとも2個のいず
れかにおいて例外が発生するか否かを判定するステップ
(340)と、(d)複数のマイクロ命令の前記少なく
とも2個のいずれかにおいて例外が発生した場合、複数
のマイクロ命令の前記少なくとも2個をキャンセルする
ステップ(350)と、により特徴付けられる方法。
【0030】2. 前記複数のマイクロ命令の前記少な
くとも2個を実行するステップ(320)をさらに特徴
とする、1項記載の方法。
【0031】3. 複数のマイクロ命令の前記少なくと
も2個が、別個の実行ユニット(170、172)上で
実行されるが、単一の実行ユニット上で実行されている
かのように見なされる、1項又は2項記載の方法。
【0032】4. 複数のマイクロ命令の前記少なくと
も2個が、同一クロックサイクルで実行される、1〜3
項の何れか1項記載の方法。
【0033】5. 複数のマイクロ命令の前記少なくと
も2個が、多数のクロックサイクルに亘って実行され
る、1〜4項の何れか1項記載の方法。
【0034】6. 前記方法が、SSE命令をエミュレー
トするシステムにおいて実施される、1〜5項の何れか
1項記載の方法。
【0035】7. 前記システムが、単一命令に、多数
の単精度(「SP」)浮動小数点(「FP」)値(70)を
演算させる、1〜6項の何れか1項記載の方法。
【0036】8. さらに、複数のマイクロ命令の前記
少なくとも2個の実行の結果に基づいて、フラグを更新
するステップ(360)からなることを特徴とする、1
〜7項の何れか1項記載の方法。
【0037】9. さらに(a)マスクされていない例
外が発生する場合、前記マイクロ命令の実行をキャンセ
ル(350)して、マイクロコードハンドラ(150)
を呼び出す(350)ステップと、(b)マスクされて
いない例外が発生しない場合、複数の機能ユニットに対
して例外の論理和を独立的に生成することによって、少
なくとも1個の例外フラグを更新する(360)ステッ
プと、からなることを特徴とする、1〜8項の何れか1
項記載の方法。
【0038】10.さらに(a)上半分及び下半分のSS
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項記載の方法。
【0039】
【発明の効果】本発明は、マクロ命令を少なくとも2つ
のマイクロ命令に分解するステップ(310)と、この
複数のマイクロ命令を並列に実行するステップ(32
0)と、これらが単一の機能ユニット(170)として
実行されたかのように、見なせるようにこれらのマイク
ロ命令をリンクするステップ(340)とによって、命
令を処理する方法である。本発明は、例外についてのSS
E規則にしたがって、機能ユニット(170、172)
のいずれか一方において所定の例外が発生するか否かを
判定するステップ(340)によって動作する。リンク
されたマイクロ命令のいずれかにおいて、例外が発生す
れば、これらのマイクロ命令のそれぞれの実行はキャン
セルされる(350)。これにより、バックオフ又はア
ンドゥ機構の必要性が回避される。
【図面の簡単な説明】
【図1】図1A及び1Bは、図2A及び2Bとともに、
SSEのコンポーネントのブロック図を示す。
【図2】図2A及び2Bは、図1A及び1Bとともに、
SSEのコンポーネントのブロック図を示す。
【図3】本発明を含むコンピュータシステムのブロック
図である。
【図4】図3のプロセッサのブロック図である。
【図5】本発明の方法のフローチャートである。
【符号の説明】
70 浮動小数点ユニット 150 マイクロコードハンドラ 170 機能ユニット 172 機能ユニット
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ケビン・デイビッド・サフォード アメリカ合衆国コロラド州80525,フォー トコリンズ,サンクレスト・ドライブ・ 4100

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】 ソフトウェア命令を処理する方法であっ
    て、(a)マクロ命令を複数のマイクロ命令に分解する
    ステップ(310)と、(b)前記複数のマイクロ命令
    の少なくとも2個を並列に発行するステップ(320)
    と、(c)複数のマイクロ命令の前記少なくとも2個の
    いずれかにおいて例外が発生するか否かを判定するステ
    ップ(340)と、(d)複数のマイクロ命令の前記少
    なくとも2個のいずれかにおいて例外が発生した場合、
    複数のマイクロ命令の前記少なくとも2個をキャンセル
    するステップ(350)と、からなることを特徴とする
    方法。
JP2001025784A 2000-02-02 2001-02-01 Simd命令をエミュレートする方法及び装置 Pending JP2001243063A (ja)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Cited By (5)

* Cited by examiner, † Cited by third party
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