JP6095670B2 - コンピュータ・システム内のオペランド活性情報の維持 - Google Patents

コンピュータ・システム内のオペランド活性情報の維持 Download PDF

Info

Publication number
JP6095670B2
JP6095670B2 JP2014532528A JP2014532528A JP6095670B2 JP 6095670 B2 JP6095670 B2 JP 6095670B2 JP 2014532528 A JP2014532528 A JP 2014532528A JP 2014532528 A JP2014532528 A JP 2014532528A JP 6095670 B2 JP6095670 B2 JP 6095670B2
Authority
JP
Japan
Prior art keywords
register
instruction
operand
program
value
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.)
Expired - Fee Related
Application number
JP2014532528A
Other languages
English (en)
Other versions
JP2015501019A (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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2015501019A publication Critical patent/JP2015501019A/ja
Application granted granted Critical
Publication of JP6095670B2 publication Critical patent/JP6095670B2/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
    • 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, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • 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
    • 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/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • G06F9/30127Register windows
    • 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/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • 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, look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • G06F9/3832Value prediction for operands; operand history buffers
    • 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, 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • G06F9/462Saving or restoring of program or task context with multiple register sets

Description

本発明はプロセッサの分野に関し、より具体的にはコンピュータ・システム内のオペランド活性(operand liveness)に基づく操作の実行に関する。
ワールド・ワイド・ウェブ上で2011年8月1日に公開されたウィキペディア(Wikipedia)によると、「マルチスレッド・コンピュータ」は、効率的に複数のスレッドを実行するためのハードウェア・サポートを有する。これらは、シングル・コアのリソース、即ち、コンピューティング・ユニット、CPUキャッシュ及び変換索引バッファ(TLB)をスレッドが共有する必要がある点で、マルチプロセッシング・システム(例えば、マルチコア・システム)と区別される。マルチプロセッシング・システムが複数の完全な処理ユニットを含むのに対して、マルチスレッドは、スレッド・レベル並びに命令レベルの並列を用いることによりシングル・コアの稼働率を高めることを目ざすものである。これら2つの技術は相補的であるので、それらは、ときには、複数のマルチスレッドCPUを有するシステム内で、及び複数のマルチスレッド・コアを有するCPU内で組み合せられる。
マルチスレッドのパラダイムは、1990年代後半以降、命令レベルの並列をそれ以上活用する取組みが行き詰まったために、ますます普及してきた。これにより、スループット・コンピューティングの概念が、より特化した分野であるトランザクション処理から再び浮上して注目されるようになった。
単一スレッド又は単一プログラムをさらにスピードアップすることは非常に難しいが、大部分のコンピュータ・システムは、実際には複数のスレッド又はプログラムの間でマルチタスクを行っている。
全タスクのシステム全体のスループットのスピードアップを可能にすることになる技術は、有意義な性能向上をもたらすであろう。
スループット・コンピューティングの2つの主要な技術は、マルチプロセッシングとマルチスレッディングである。
幾つかの利点としては、以下が挙げられる。
あるスレッドが多数のキャッシュ・ミスを起こす場合、使用されていないコンピューティング・リソースを利用して他のスレッドを継続することができ、これらのリソースは単一のスレッドのみが実行された場合には遊休状態になることになるので、より高速の全体的実行をもたらすことができる。
あるスレッドがCPUのコンピューティング・リソースの全てを使用することができない(命令が互いの結果に依存するため)場合、別のスレッドを実行することでこれらを遊休状態のままにしないことが可能になる。
幾つかのスレッドが同じデータセットを処理する場合、それらスレッドはそのキャッシュを実際に共有することができ、より良好なキャッシュ使用率又はその値に対する同期化をもたらす。
マルチスレッディングに対する幾つかの批判としては、以下が挙げられる。
複数のスレッドは、キャッシュ又は変換索引バッファ(TLB)などのハードウェア・リソースを共有したときに互いに干渉する可能性がある。
単一スレッドの実行時間は、1つのスレッドだけが実行されるときでさえ、改善されるどころか低下することがある。これは、スレッド切替えハードウェアに対応するために必要な、より遅い周波数及び/又は付加的なパイプライン・ステージのためである。
マルチスレッディングのためのハードウェア・サポートはソフトウェアに対してより可視となるので、アプリケーション・プログラム及びオペレーティング・システムの両方に対してマルチプロセッシングよりも多くの変更を必要とする。
下記のマルチスレッディングを含む多くの異なる型式のマルチスレッディングが存在する。
ブロック型マルチスレッディング
最も簡単な型式のマルチスレッディングは、1つのスレッドが、通常長い待ち時間ストールを発生させることになるイベントによってブロックされるまで走り続けるときに生じる。そのようなストールは、チップの外にあるメモリにアクセスする必要があるキャッシュ・ミスの可能性があり、これはデータを返すのに数百CPUサイクルを要することがある。ストールが解決するのを待つ代りに、スレッド化されたプロセッサは、実行準備ができている別のスレッドに実行を切り替える。以前のスレッドのデータが到着した場合にのみ、以前のスレッドが、実行準備ができた(ready−to−run)スレッドのリスト上に戻されることになる。
例えば、
1.サイクルi:スレッドAからの命令jが発行される
2.サイクルi+1:スレッドAからの命令j+1が発行される
3.サイクルi+2:スレッドAからの命令j+2が発行され、全てのキャッシュでミスとなるロード命令である
4.サイクルi+3:スレッド・スケジューラが起動され、スレッドBに切替える
5.サイクルi+4:スレッドBからの命令kが発行される
6.サイクルi+5:スレッドBからの命令k+1が発行される
これは、概念的には、タスクがある種のタイプのイベントを待つ必要がある場合に自発的に実行時間を明け渡す、実時間オペレーティング・システムで使用される協調型マルチタスキングに類似している。
この型式のマルチスレッディングは、ブロック型又は協調型又は粗粒度マルチスレッディングとして知られている。
ハードウェアのコスト:
マルチスレッディングのハードウェア・サポートの目標は、ブロックされたスレッドと実行準備ができている別のスレッドとの間の迅速な切替えを可能にすることである。この目標を達成するためのハードウェアのコストは、プログラム可視レジスタ並びに幾つかのプロセッサ制御レジスタ(プログラム・カウンタなど)を複製することである。1つのスレッドから別のスレッドへの切替えは、ハードウェアが1つのレジスタ・セットの使用から別のレジスタ・セットの使用へと切替えることを意味する。
そのような追加ハードウェアは以下の利益を有する:
スレッド切替えを1CPUサイクル内で行うことができる。
それは、各スレッドにとっては、単独で実行されており、他のいずれのスレッドとも何らハードウェア・リソースを共有していないように見える。このことは、アプリケーション及びオペレーティング・システム内でマルチスレッディングをサポートするために必要なソフトウェアの変更量を最小にする。
アクティブ・スレッド間で効率的に切替えるためには、各々のアクティブ・スレッドがそれぞれの独自のレジスタ・セットを有する必要がある。例えば、2つのスレッド間で迅速に切替えるためには、レジスタ・ハードウェアは2回インスタンス化される必要がある。
例:
マイクロコントローラ及び組み込みプロセッサの多くのファミリは、割り込み用に高速コンテキスト切替えを可能にする複数のレジスタ・バンクを有する。そのようなスキームは、ユーザ・プログラム・スレッドと割り込みスレッドとの間のブロック型マルチスレッディングの一種と考えることができる。
インターリーブ型マルチスレッディング
1.サイクルi+1:スレッドBからの命令が発行される
2.サイクルi+2:スレッドCからの命令が発行される
この型式のマルチスレッディングの目的は、全てのデータ依存ストールを実行パイプラインから除去することである。1つのスレッドが他のスレッドから比較的独立しているので、1つのパイプラインのステージ内の1つの命令がパイプライン内の古い命令からの出力を必要とする可能性が小さい。
これは、概念的には、オペレーティング・システムで使用されるプリエンプティブ・マルチタスキングに類似している。各アクティブ・スレッドに与えられるタイム・スライスを、1CPUサイクルに例えることができる。
この型式のマルチスレッディングは、初めバレル処理と呼ばれたが、この場合、樽(バレル)の樽板(stave)がパイプラインのステージ及びその実行スレッドを表す。インターリーブ型又はプリエンプティブ又は細粒度又はタイム・スライス型マルチスレッディングが、より現代的な用語である。
ハードウェアのコスト:
ブロック型マルチスレッディングにおいて論じたハードウェア・コストに加えて、インターリーブ型マルチスレッディングは、各パイプライン・ステージが処理中の命令のスレッドIDを追跡する追加コストを有する。また、パイプライン内でより多くのスレッドが同時に実行されるので、異なるスレッド間のスラッシングを回避するためにキャッシュ及びTLBなどの共有リソースをより大きくする必要がある。
同時マルチスレッディング
最先端型のマルチスレッディングは、スーパースカラ・プロセッサに適用される。通常のスーパースカラ・プロセッサは、CPUサイクル毎に、単一のスレッドから複数の命令を発行する。同時マルチスレッディング(SMT)では、スーパースカラ・プロセッサは、CPUサイクル毎に複数のスレッドからの命令を発行することができる。いずれの単一スレッドも限られた量の命令レベル並列性しか有していないことを認識することで、この型式のマルチスレッディングは、使用されていない発行スロットに関連した無駄を減らすために、複数のスレッドにわたって使用可能な並列性の活用を試みる。
例えば:
1.サイクルi:スレッドAからの命令j及びj+1、スレッドBからの命令kが、全て同時に発行される。
2.サイクルi+1:スレッドAからの命令j+2、スレッドBからの命令k+1、スレッドCからの命令mが、全て同時に発行される。
3.サイクルi+2:スレッドAからの命令j+3、スレッドCからの命令m+1及びm+2が、全て同時に発行される。
他の型式のマルチスレッディングをSMTから区別するために、一度に1つのスレッドのみからの命令しか発行することができない場合を示すために一時的マルチスレッディングという用語が用いられる。
ハードウェアのコスト:
インターリーブ型マルチスレッディングに関して論じたハードウェア・コストに加えて、SMTは、各パイプライン・ステージが、処理中の各命令のスレッドIDを追跡する追加コストを有する。やはり、キャッシュ及びTLBなどの共有リソースを、多数のアクティブ・スレッド用のサイズにする必要がある。
IBMに譲渡され、引用により本明細書に組み入れられる、2010年11月2日に発行された「Apparatus for adjusting instruction thread priority in a multi−thread processor」と題する特許文献1によれば、データ・プロセッサがソフトウェア・プログラムを実行する速度を向上させるために多くの技術が用いられている。これらの技術には、プロセッサのクロック速度を高めること、キャッシュ・メモリを用いること、及び予測分岐を用いることが含まれる。プロセッサのクロック速度を高めることは、プロセッサが任意の所与の時間内で相対的により多くの操作を実行することを可能にする。キャッシュ・メモリは、プロセッサに近接して配置され、且つ主メモリより高速で動作するので、プロセッサがデータ及び命令にアクセスするのに要する時間を削減する。予測分岐は、プロセッサが以前の命令の結果に関する予測に基づいて特定の命令を実行することを可能にすることにより、実際の結果を待機する必要をなくし、それにより処理速度を高める。
ある種のプロセッサはさらに、システム性能を強化するためにパイプライン型命令実行を採用している。パイプライン型命令実行においては、処理タスクは多数のパイプライン・ステップ又はステージに分解される。パイプライン化は、以前に発行された命令が特定のプロセスを終了する前に次の命令の処理を開始することを可能にすることによって、処理速度を高めることができる。プロセッサは、シーケンス内の次の命令の処理を開始する前にある1つの命令が完全に処理されるのを待つ必要が無い。
パイプライン型処理を用いるプロセッサは、プロセッサ内の種々異なる作業に振り向けられた多数の異なるパイプライン・ステージを含むことができる。例えば、プロセッサは、逐次的な命令をフェッチ・ステージ、デコード/デスパッチ・ステージ、発行ステージ、実行ステージ、終了(finish)ステージ、及び完了(completion)ステージで処理することができる。これら個々のステージの各々は、パイプライン・ステージのそれぞれ独自のセットを使用して所望の処理タスクを遂行することができる。
マルチスレッド命令処理は、処理速度を高めるためパイプライン化と共に用いることができる付加的な技術である。マルチスレッド命令処理は、一組みのプログラム命令を2つ又はそれ以上の別個の命令グループ又は命令スレッドに分割することを伴う。このマルチスレッディング技術は、1つのスレッドからの命令を、別のスレッドが何らかの理由で処理不能である間に、パイプラインを通して処理することを可能にする。これは、特定の命令を実行することができない間、例えば、特定の命令を実行するために必要なデータが直ぐには利用できないキャッシュ・ミス状態の間、全ての命令が停滞してしまうという、単一スレッド形式の命令処理で遭遇する状況を回避する。複数の命令スレッドを処理することが可能なデータ・プロセッサは、同時マルチスレッディング(SMT)プロセッサと呼ばれることが多い。
この点で、ソフトウェア業界が用語「マルチスレッディング」を使用する仕方と、コンピュータ・アーキテクチャ業界が用語「マルチスレッディング」を使用する仕方の間に違いがあることに留意されたい。ソフトウェア業界は、複数の関連するスレッドに細分化された単一タスクを指すのに用語「マルチスレッディング」を使用する。コンピュータ・アーキテクチャにおいては、用語「マルチスレッディング」は、互いに独立であり得る複数スレッドを指すのに使用される。本明細書においては、用語「マルチスレッディング」は、コンピュータ・アーキテクチャ業界によって使用されるのと同じ意味で用いる。
マルチスレッディングを促進するために、異なるスレッドからの命令が、全体としてのプロセッサのパイプライン内のどこかの点において何らかの方式でインターリーブされる。一般に、SMTプロセッサ内での処理のために命令をインターリーブするための2つの異なる技術がある。1つの技術は、1つのスレッドを処理するのに遅延を生じるキャッシュ・ミスのような待ち時間が長い何らかのイベントに基づいて、スレッドをインターリーブすることを伴う。この技術では、全てのプロセッサ・リソースは、待ち時間が長い何らかのイベントによってスレッドの処理が遅延するまでは、単一のスレッドに割り当てられている。待ち時間が長いイベントが発生すると、プロセッサは直ちに別のスレッドに切替え、そのスレッドに待ち時間が長い何らかのイベントが発生するまで、又は他方のスレッドをストールさせた事情が解決されるまで、そのスレッドを進行させる。
SMTプロセッサ内で複数の命令スレッドからの命令をインターリーブするためのその他の一般的な技術は、何らかのインターリービング規則(本明細書ではインターリーブ規則と呼ぶこともある)に従ってサイクル毎(cycle−by−cycle basis)に命令をインターリーブすることを伴う。簡単なサイクル毎インターリービング技術では、異なるスレッドからの命令を単に1対1の関係でインターリーブすることができる。例えば、2スレッド型SMTプロセッサは、第1のスレッドからの命令を第1のクロックサイクルにおいて取り込み、第2のスレッドからの命令を第2のクロックサイクルにおいて取り込み、第1のスレッドからの別の命令を第3のクロックサイクルにおいて取り込み、以下同様にして、2つの命令スレッド間を行き来することができる。より複雑なサイクル毎インターリービング技術では、各命令スレッドに優先度を割当てるソフトウェア命令を使用すること、そして次に異なるスレッドからの命令を、相対的なスレッド優先度に基づく何らかの規則に従うようにインターリーブすることを伴うものとすることができる。例えば、2スレッド型SMTプロセッサにおいて、1つのスレッドに対して他方のスレッドより高い優先度が割り当てられた場合、簡単なインターリービング規則は、高い優先度のスレッドからの命令を低い優先度のスレッドからの命令に比べて2倍多くインターリーブ・ストリームに含めるよう要求することができる。
現在使用されている、より複雑なサイクル毎のインターリービング規則は、各スレッドに「1」から「7」までの優先度を割当てて、優先度が低いスレッドからの命令を関数1/(2|X−Y|+1)に基づいてインターリーブ・ストリーム内に配置し、式中、X=ソフトウェアによって割り当てられた第1のスレッドの優先度、Y=ソフトウェアによって割り当てられた第2のスレッドの優先度とする。2つのスレッドが等しい優先度、例えば、X=3及びY=3、を有する場合、関数は1/2の比を与え、2つのスレッドの各々からの命令は、2クロックサイクル毎に1回、インターリーブ命令ストリームに含められることになる。スレッドの優先度が2だけ異なる、例えば、X=2及びY=4の場合、関数は1/8の比を与え、優先度の低いスレッドからの命令は、8クロックサイクル毎に1回、インターリーブ命令ストリームに含められることになる。
優先度規則を用いて、特定のスレッドからの命令を含める頻度を選択することは、一般に、ソフトウェアによって割り当てられた各スレッドの優先度に基づいてプロセッサ・リソースが割り当てられることを保証することを意図したものである。しかし、単にソフトウェアによって割り当てられた優先度に依拠することではプロセッサ・リソースの最適な割当てをもたらし得ない状況が存在する。具体的には、ソフトウェアによって割り当てられたスレッドの優先度は、命令の特定のスレッドがプロセッサ・パイプラインを通して進行する機能に影響を与えることがある例えばキャッシュ・ミスのようなプロセッサ・イベントを考慮に入れることができない。従って、プロセッサ内でのある種のイベントの発生は、マルチスレッド・プロセッサにおいてプロセッサ・リソースを異なる命令スレッド間に効率的に割り当てるという目標を完全に又は少なくとも部分的に挫折させることがある。
例えば、2スレッド型システムにおいて、第1の命令スレッドにソフトウェアによって優先度5を割り当てることができ、他方、第2の命令スレッドにソフトウェアによって優先度2を割り当てることができる。上記の優先度規則1/(2|X−Y|+1)を用いると、ソフトウェアによって割り当てられたこれらの優先度は、優先度が低いスレッドからの命令は16クロックサイクル毎に1回だけインターリーブ命令ストリームにインターリーブされ、他方、優先度が高い命令スレッドからの命令は16クロックサイクル毎に15回インターリーブされることを命ずることになる。優先度が高い命令スレッドからの命令がキャッシュ・ミスに遭遇した場合、キャッシュ・ミスの発生により、その命令のためのデータが利用可能になるまでそれぞれの命令スレッドの実行が事実上ストールする可能性がある場合でも、優先度規則は依然として、16個の命令のうち15個の命令が、優先度が高い命令スレッドからの命令を含むことを要求することになる。
一実施形態において、SMTプロセッサ内の各命令スレッドには、ソフトウェアによって割り当てられた基本入力処理優先度が関連付けられる。処理中の命令又は処理される命令に関して何らかの所定のイベント又は事情が発生しない限り、それぞれのスレッドの基本入力処理優先度を用いて、何らかの命令インターリーブ規則に従って、スレッド間のインターリーブ頻度が決められる。しかし、プロセッサ内で特定の命令に関連した何らかの所定のイベント又は事情が発生すると、1つ又は複数の命令スレッドの基本入力処理優先度が調整されて1つ又は複数の調整された優先度値が生成される。次いで、命令インターリーブ規則は、調整されていない基本入力処理優先度値と共に、調整された1つ又は複数の優先度値に従って実施される。
引用により本明細書に組み入れられるインテル(Intel)(登録商標)社の非特許文献1には、インテル(登録商標)ハイパー・スレッディングが説明されている。この非特許文献1によれば、単一プロセッサ・システム上のシステム性能を向上させるための努力は、伝統的にプロセッサをより高機能にすることに集中されてきた。プロセッサ設計に対するこれらのアプローチは、より高いクロック速度、命令レベル並列度(ILP)及びキャッシュを通じて、プロセッサがより多くの命令をより速く処理することができるようにすることに集中されてきた。より高いクロック速度を達成するための技術は、マイクロ・アーキテクチャをより微細な粒度にパイプライン化することを含み、これはスーパー・パイプライン化とも呼ばれている。クロック周波数が高いほど、秒毎に実行できる命令の数が増加することにより、性能を大きく向上させることができる。しかし、スーパー・パイプライン化マイクロ・アーキテクチャでは、実行される命令が遙かに多いので、パイプラインを中断するキャッシュ・ミス、割り込み、及び分岐誤予測などのイベントを処理することは、より一層重要になり、且つ、障害は、よりコストが高くつくことになる。ILPは、クロックサイクル毎に実行される命令の数を増やす技術を指す。例えば、多くのスーパースカラ・プロセッサの実装は、命令を同時に処理することができる複数の実行ユニットを有する。これらのスーパースカラ実装においては、幾つかの命令を各クロックサイクルで実行することができる。しかし、簡単なイン・オーダ実行の場合、単に複数の実行ユニットを有するだけでは十分ではない。課題は、実行するのに十分な命令を見出すことである。1つの技術は、プログム順序ではなく命令依存関係に基づいて大きなウィンドウの命令が同時に評価されて実行ユニットに送られる、アウト・オブ・オーダ実行である。システム・メモリへのアクセスは遅く、ハード・ディスクへのアクセスよりも速いとはいえ、プロセッサの実行速度と比較すると何桁も遅い。システム・メモリへのアクセスによって導入される遅延(待ち時間と呼ばれる)を減らすための1つの方法は、プロセッサの近くに高速キャッシュを追加することである。キャッシュは、頻繁にアクセスされるデータ又は命令への高速メモリ・アクセスを提供する。しかし、キャッシュ速度が高まるにつれて、熱放散及びコストの問題も大きくなる。この理由により、プロセッサはキャッシュ階層を伴って設計されることが多く、このキャッシュ階層においては、高速の小さいキャッシュがプロセッサ・コアの近傍に配置され、プロセッサ・コアのアクセス待ち時間に近いアクセス待ち時間で動作する。アクセス頻度がより少ないデータ又は命令を取り扱う、順次に大きくなるキャッシュが、より長いアクセス待ち時間で実装される。とはいえ、必要なデータがどのプロセッサ・キャッシュ内にも存在しない事態が生じることがある。そのようなキャッシュ・ミスを処理するには、システム・メモリ又はハード・ディスクにアクセスすることを必要とし、それらの時間中、プロセッサは、メモリ・トランザクションが終了するのを待つ間ストールする可能性が高い。プロセッサ性能を1つの世代から次世代へ向上させるための大部分の技法は、複雑であり、相当なダイ・サイズ及び電力コストを付加することが多い。これらの技法のいずれも、命令フローにおける並列度が限られているので100パーセントの効率では機能しない。その結果、プロセッサ内の実行ユニットの数を2倍にしても、プロセッサの性能は2倍にはならない。同様に、クロック速度を単に2倍にしても、より遅いメモリ・サブシステムによって失われるプロセッサ・サイクルの数のため、性能は2倍にはならない。
マルチスレッディング
プロセッサの能力が向上するにつれて性能に対する要求も増し、そのことが、最大効率に関してプロセッサ・リソースに対する圧力を高めてきた。プロセッサが単一タスクの実行中に特定のイベントが完了するのを待つ間の無駄な時間に注目して、ソフトウェア開発者は、プロセッサが同じ時間に何か他の仕事を行うことができないかを考え始めた。
解決策を導き出すために、ソフトウェア設計者は、スレッドと呼ばれるプログラムの実行ピースをサポートする、オペレーティング・システムを書き始めた。スレッドは独立に走ることができる小さいタスクである。各スレッドはそれぞれのタイム・スライスを確保し、それゆえに各スレッドはプロセッサ利用の1つの基本単位を表す。スレッドが編成されてプロセスとなり、プロセスは、1つ又は複数のスレッドから構成される。あるプロセス内の全てのスレッドが、プロセス・リソースへのアクセスを共有する。
これらのマルチスレッディング・オペレーティング・システムは、別のスレッドが何かが起るのを待っている間に、1つのスレッドが走ることを可能にする。インテル・プロセッサをベースとするパーソナル・コンピュータ及びサーバ上で、マイクロソフト(Microsoft)ウィンドウズ(Windows)2000及びウィンドウズXPといった今日のオペレーティング・システムは、全てマルチスレッディングをサポートする。実際、オペレーティング・システム自体がマルチスレッド化されている。それらの一部分は、他の部分がストールしている間に走ることができる。
マルチスレッディングから利益を得るためには、プログラムは並列に走ることができる実行可能セクションを有することが必要である。即ち、プログラムは、長い単一の命令シーケンスとして展開されるのではなく、論理演算セクションに分解される。このようにして、アプリケーションが互いに独立に走る操作を実行する場合、それらの操作はスレッドに分解され、それらスレッドの実行はオペレーティング・システムによってスケジューリングされ、制御される。これらのセクションは、異なることを実行するように、例えば、マイクロソフト・ワード(Microsoft Word)が、ユーザがタイプ入力している間に文書の改ページ位置修正(repagenate)を可能にするように、作成することができる。改ページ位置修正は1つのスレッド上で行われ、キーストロークの処理は別のスレッド上で行われる。単一プロセッサ・システム上では、これらのスレッドは逐次的に実行され、同時には実行されない。プロセッサは、キーストローク・スレッドと改ページ位置修正スレッドとの間で、両方のプロセスが同時に行われているように見えるほど十分に速く交互に切り替える。これは機能的分解マルチスレッディング(functionally decomposed multithreading)と呼ばれる。
マルチスレッド・プログラムは、並列スレッド上で同じタスクを実行するように書くこともできる。これはデータ分解マルチスレッド化と呼ばれ、この場合、スレッドは処理されるデータだけが異なる。例えば、グラフィック・アプリケーションにおけるシーンを、各スレッドがシーンの半分に対して作業するように描くことができる。典型的には、データ分解アプリケーションは、スループット性能のためにスレッド化され、他方、機能的分解アプリケーションは、ユーザ応答性又は機能性の問題のためにスレッド化される。
マルチスレッド・プログラムが単一プロセッサ機械上で実行されるとき、スレッド間でコンテキストを切替えるときに多少のオーバーヘッドが発生する。スレッドの間の切替えは時間がかかるので、このように2つのスレッドを実行するのは、2つのスレッドを逐次的に実行するよりも効率が悪いように見える。しかし、どちらかのスレッドがシステム・デバイス上でユーザを待つ必要がある場合、他のスレッドに操作を続けさせる機能は、切替えのオーバーヘッドの全てを直ちに補償する。グラフィック・アプリケーションの例における1つのスレッドは、ユーザ入力を扱うので、待機しているだけの頻繁な期間が確実に生じる。スレッド間で切替えることにより、マルチスレッド・プログラムをサポートするオペレーティング・システムは、それらが単一プロセッサ・システム上で走っている場合でも、性能及びユーザ応答性を向上させることができる。
実世界では、マルチスレッディングを用いる大きいプログラムは、2つよりも遥かに多数のスレッドを走らせることが多い。データベース・エンジンのようなソフトウェアは、受け取った記録に対する要求毎に新しい処理スレッドを作成する。こうすることで、どの単一のI/O操作も新たな要求が実行されることを妨げず、且つ、ボトルネックを防ぐことができる。ある種のサーバ上では、この手法は、数千のスレッドが同じ機械上で同時に走っていること意味するものであり得る。
マルチプロセッシング
マルチプロセッシング・システムは、同時に走る複数のプロセッサを有する。伝統的なインテル(登録商標)アーキテクチャ・マルチプロセッシング・システムは、2個から約512個までのいずれかの個数のプロセッサを有する。マルチプロセッシング・システムは異なるスレッドを異なるプロセッサ上で走らせる。この機能は、プログラム性能を著しく加速する。それで、2つのスレッドは互いにおおよそ独立に、プロセッサのリソースを得るためのスレッド切替えを必要とせずに、走ることができる。マルチプロセッサ・オペレーティング・システムはそれ自体マルチスレッド化されており、スレッドは最も有利に別々のプロセッサを使用することができる。
当初は、非対称型及び対称型の2種類のマルチプロセッシングがあった。非対称型システム上では、1つ又は複数のプロセッサが、もっぱら特定のタスク、例えばオペレーティング・システムの実行専用にされる。残りのプロセッサは、他の全てのタスク(一般に、ユーザ・アプリケーション)用に使用可能である。この構成は最適ではないことが直ぐに明らかになった。あるマシン上では、オペレーティング・システム・プロセッサは100パーセントの容量で走っているのに対し、その一方で、ユーザ割当てプロセッサは何も実行していなかった。短期間のうちに、システム設計者等は、より上手く処理負荷のバランスを取るアーキテクチャ、即ち対称型マルチプロセッシング(SMP)を好むようになった。「対称」は、いずれのスレッドも、それがオペレーティング・システムからのスレッドであってもユーザ・アプリケーションからのスレッドであっても、いずれのプロセッサ上でも走ることができることを意味する。このようにすることで、全コンピューティング負荷が全てのコンピューティング・リソースにわたって一様に分散する。今日、対称型マルチプロセッシング・システムが標準となり、非対称型設計は殆ど姿を消した。
SMPシステムは、2倍の数のプロセッサを使用するが、性能は2倍にはならない。性能が単純に2倍になるのを妨げる2つの因子は、作業負荷をいかに上手く並列化することができるかということ、及び、システム・オーバーヘッドである。2つの因子はスレッド間の相互作用の効率、即ち、同じリソースに対していかに競合するか、及び他のスレッドといかに交信するかを支配する。
マルチプロセッサ・システム
今日のサーバ・アプリケーションは、並列に実行されることができる複数のスレッド又はプロセスで構成される。オンライン・トランザクション処理及びウェブ・サービスは、高速処理性能のために同時に実行することができる多数のソフトウェア・スレッドを有する。デスクトップ・アプリケーションでさえもますます並列になってきている。インテルの設計者等は、スレッド・レベルの並列化(TLP)を実装して、トランジスタ数及び電力消費に対する性能を向上させた。
高級及び中級サーバの両方の市場において、システムからより高い性能を得るためにマルチプロセッサが普通に使用されている。より多くのプロセッサを付加することにより、アプリケーションは、複数のプロセッサ上で複数のスレッドを同時に実行することにより潜在的に相当な性能向上を得ることになる。これらのスレッドは、同じアプリケーションからのもの、同時に走っている異なるアプリケーションからのもの、オペレーティング・システム・サービスからのもの、又はバックグランド・メンテナンスを行っているオペレーティング・システム・スレッドからのものであり得る。マルチプロセッサ・システムは長年にわたって用いられており、プログラマは、高性能レベルでマルチプロセッサを利用する技術に精通している。
引用により本明細書に組み入れられる、Barrick他による2011年4月14日に公開された「Intermediate Register Mapper」と題する特許文献2は、レジスタ・リネーム機構において中間レジスタ・マッパを使用する方法、プロセッサ、及びコンピュータ・プログラム製品を開示する。論理レジスタ・ルックアップは、ディスパッチされた命令に関連する論理レジスタへのヒットが生じたかどうかを判断する。この点について、論理レジスタ・ルックアップは、アーキテクチャ化レジスタ・マッパ、統合メイン・マッパ、及び中間レジスタ・マッパを含むレジスタ・マッパ群からの少なくとも1つのレジスタ・マッパ内を検索する。論理レジスタに対する単一のヒットがレジスタ・マッパ群の中から選択される。統合メイン・マッパ内のマッパ・エントリを有する命令が終了したが完了していない場合、統合メイン・マッパ内のレジスタ・マッパ・エントリのマッピング・コンテンツは中間レジスタ・マッパに移動され、統合レジスタ・マッパ・エントリは解放され、それにより再使用のために利用可能な統合メイン・マッパ・エントリの数を増やす。
引用により本明細書に組み入れられる、Levy他による1998年4月2日出願の「Mechanism for freeing registers on processors that perform dynamic out−of−order execution of instructions using renaming registers」と題する特許文献3は、別の命令がアーキテクチャ・レジスタを再定義する前に、アーキテクチャ・レジスタに割り当てられたリネーム・レジスタを解放することを開示している。リネーム・レジスタは、命令をアウト・オブ・オーダで実行するシングル又はマルチスレッド・プロセッサのいずれかにおいて、アウト・オブ・オーダで命令を動的に実行するためにプロセッサによって用いられる。リネーム・レジスタを解放するための機構が説明されており、この機構は、特定のアーキテクチャ・レジスタに割り当てられる物理(リネーム)レジスタを解放することができるときをプロセッサに示すための、コンパイラによって使用される一組の命令から構成される。この機構は、リネーム・レジスタが、アーキテクチャ・レジスタへの割当てのため必要でなくなるとすぐに、リネーム・レジスタを再配置又は再割当てして別の値をストアすることを可能にする。割当てから解放されるリネーム・レジスタを識別する命令を有するプロセッサを有効化する少なくとも3つの方式があり、即ち、(1)ユーザが、特定のリネーム・レジスタを参照する命令をプロセッサに明示的に与えることができる方式、(2)オペレーティング・システムが、スレッドが遊休状態のときにそのスレッドに関連したレジスタの組を参照する命令を与えることができる方式、及び(3)コンパイラが、プロセッサに定時された複数の命令を有する命令を含むことができる方式である。アーキテクチャ・レジスタに割り当てられたリネーム・レジスタを解放するためにプロセッサに与えられる命令の少なくとも5つの実施形態は、(1)フリー・レジスタ・ビット、(2)フリー・レジスタ、(3)フリー・マスク、(4)フリー・オプコード、及び(5)フリー・オプコード/マスクである。フリー・レジスタ・ビット命令は、アウト・オブ・オーダ・プロセッサに対して最大のスピードアップをもたらし、フリー・レジスタ命令は最小のスピードアップをもたらす。
引用により本明細書に組み入れられる非特許文献2(「Power ISATM Version 2.06 Revision B」)は、例示的なRISC(縮小命令セット・コンピュータ)命令セット・アーキテクチャを開示している。本明細書では、例示的な実施形態を実証するためにPower ISAが用いられるが、本発明はPower ISAにもRISCアーキテクチャにも限定されない。当業者であれば、様々なアーキテクチャにおける本発明の使用を容易に理解するであろう。
引用により本明細書に組み入れられる非特許文献3は、例示的なCISC(複雑命令セット・コンピュータ)命令セット・アーキテクチャを開示している。
米国特許第7,827,388号明細書 米国特許出願公開第2011/0087865号 米国特許第6,314,511号明細書 米国特許第6,189,088号明細書
「Intel(登録商標) Hyper−Threading Technology, Technical User’s Guide」Intel(登録商標)corporation、2003年 「Power ISATM Version 2.06 Revision B」IBM(登録商標)、2010年7月23日。 「z/Architecture Principles of Operation」SA22−7832−08、第9版、IBM(登録商標)、2010年8月
本発明の課題は、実行中のプログラムに関するオペランド活性情報を維持する方法を提供することである。
オペランド活性は、プログラム実行、オペランド活性の変更を指示する機械語命令の実行、及びオペレーティング・システム制御によって制御することができる。一実施形態において、ある特定の機械語命令は、アーキテクチャ化レジスタのレジスタ・オペランドの最終使用(last−use)を示す。最終使用レジスタは、その後は、機械後命令によってアクセス可能ではなくなり、いずれかの物理レジスタによってバックアップされる必要がないものとなり得る。有効化命令により、後でそのアーキテクチャ化レジスタを再確立して、物理レジスタがそのアーキテクチャ化レジスタに割り当てられるようにすることができる。1つ又は複数のアーキテクチャ化レジスタをいつでも無効化することができる。1つの実施形態において、オペレーティング・システムは、所与のアプリケーション・プログラムに対してアーキテクチャ化レジスタのサブセットのみを有効化する。アプリケーション・プログラムは、サブセットのアーキテクチャ化レジスタを有効化及び無効化することができるが、サブセット中にはないアーキテクチャ化レジスタは有効化することはできない。
本発明の一態様において、実行中のプログラムに関して活性情報が維持され、方法は、プロセッサによって現行オペランド状態情報を維持することを含み、現行オペランド状態情報は、対応する現行オペランドが第1のプログラム・モジュールによる使用のために有効化されているか又は無効化されているかのいずれであるかを示すものであり、第1のプログラム・モジュールは、命令セット・アーキテクチャ(ISA)の機械語命令を含み、第1のプログラム・モジュールは、プロセッサによって現在実行中である。現行オペランドは、第1のプログラム・モジュールの機械語命令によってアクセスされ、このアクセスすることは、現行オペランド状態情報を用いて、以前にストアされた現行オペランド値が第1のプログラム・モジュールによってアクセス可能であるかどうかを判断することを含む。
一実施形態において、現行オペランドが無効化されていることに応答して、上記のアクセスすることは、a)アーキテクチャ指定値を返すことであって、アーキテクチャ指定値が、未定義値、ゼロ値、全て「1」から成る値、又はプログラム指定デフォルト値のいずれかである、アーキテクチャ指定値を返すことと、b)通知を行うことであって、通知ステップが、例外を発生すること、例外を抑制すること、機械状態の制御下で例外を発生及び抑制すること、デバッグ情報を与えること、及び無効化オペランドへのアクセスの発生を示すように少なくとも1つのレジスタを設定することのうちのいずれかである、通知を行うことと、を含むa)及びb)のうちの少なくとも1つを含む。
一実施形態において、プログラム実行は、第1のプログラム・モジュールから第2のプログラム・モジュールに移行され、a)第1のプログラム・モジュールの現行オペランド状態情報をコンテキスト切替え退避領域内にセーブすることと、b)コンテキスト切替え退避領域から、新しいオペランド状態情報を、実行される第2のプログラムの現行オペランド状態情報としてロードすることと、ロードされた現行オペランド状態情報を用いて第2のプログラムの実行を開始することとを含む、a)からb)が実施される。
一実施形態において、実行を移行することは、コンテキスト切替え操作であり、ここで現行オペランドは、命令によって識別される一般レジスタのアーキテクチャ化された(architected)一般レジスタ値、又は、命令によって識別される浮動小数点レジスタのアーキテクチャ化された浮動小数点レジスタ値のいずれかで構成され、ここで実行を移行することは、第1のプログラム・モジュールのプログラム・カウンタ値及び有効化現行オペランドの現行オペランド値をコンテキスト切替え退避領域にセーブすることと、コンテキスト切替え退避領域から、新しい有効化オペランドの新しいオペランド値を、実行される第2のプログラムの現行オペランドの現行オペランド値としてロードすることとをさらに含み、ここで開始される第2のプログラムの実行は、ロードされた現行オペランドを使用する。
一実施形態において、現行オペランド状態情報は、現行オペランド状態情報を現行プログラムによって有効化状態と無効化状態との間で変えることができるかどうかを制御するための、オペランド有効化制御をさらに含む。
一実施形態において、第1のオペランド無効化命令が実行されるとき、この実行は、第1のオペランドの現行オペランド状態情報により第1のオペランドを無効化させ、ここで無効化オペランドの読み出しは、アーキテクチャ依存デフォルト値を返し、第2のオペランド有効化命令が実行されるとき、この実行は、第2のオペランドの現行オペランド状態情報により第2のオペランドを有効化させ、ここで有効化オペランドの読み出しは、有効化オペランドに以前にストアされた値を返す。
一実施形態において、デフォルト値は、アーキテクチャ未定義値、アーキテクチャ定義デフォルト値レジスタ内に以前にストアされた値、全て1、全て0、インクリメント値又はディクリメント値のいずれかで構成され、ここでインクリメント値は読み出しアクセス毎にインクリメントされ、ディクリメント値は読み出しアクセス毎にディクリメントされる。
一実施形態において、第1のオペランド無効化命令はプリフィックス命令であり、プリフィックス命令の実行は、プログラム順序においてプリフィックス命令に続く次順命令による使用の後で第1のオペランドが無効化されることをプロセッサに示す。
一実施形態において、無効化オペランドに対する書込み操作は、無効化オペランドを有効化させ、ここで第2のオペランド有効化命令は、第2のオペランドに書込むための書込み命令である。
上で要約した方法に対応するシステム及びコンピュータ・プログラム製品もまた本明細書で説明され、特許請求される。
更なる特徴及び利点が、本発明の技術を通じて実現される。本発明の他の実施形態及び態様は、本明細書で詳細に説明され、特許請求される本発明の一部分とみなされる。
次に本発明の実施形態を、添付の図面を参照しながら、例示のみを目的として説明する。
例示的なプロセッサ・システム構成を示す。 第1の例示的なプロセッサ・パイプラインを示す。 第2の例示的なプロセッサ・パイプラインを示す。 例示的なアーキテクチャ化レジスタ機構の実装を示す。 例示的なアーキテクチャ化レジスタ機構の実装を示す。 例示的なアーキテクチャ化レジスタ機構の実装を示す。 例示的なアーキテクチャ化レジスタ有効化/無効化の実装を示す 第1のプログラム・フロー図からの例示的な移行を示す。 第2のプログラム・フロー図への例示的な移行を示す。 アーキテクチャ化レジスタを有効化及び無効化する命令の例示的なフロー図を示す。
アウト・オブ・オーダ(OoO)プロセッサは、典型的には複数の実行パイプラインを含み、この複数の実行パイプラインは、データ依存性を減らして、種々の命令型に対して割り当てられる実行パイプラインの稼働率を最大にすることによってサイクル毎の平均命令速度を最大にするために、プログラム・シーケンス(又は「プログラム順序」)が指定するのとは異なる順序で日和見的に命令を実行することができる。命令実行の結果は、典型的には、限定的な深さの1つ又は複数のレジスタ・ファイルの物理レジスタ内に一時的に保持される。OoOプロセッサは、典型的には、プログラム順序内の次の命令による所与のアーキテクチャ化レジスタの再使用に起因する命令の不必要なシリアル化を避けるために、レジスタ・リネームを用いる。
前述の特許文献2に記載されているように、レジスタ・リネーム操作の下で、命令によってターゲットにされる各々のアーキテキチャ化(即ち、論理)レジスタが、レジスタ・ファイル内の一意の物理レジスタにマップされる。現在の高性能OoOプロセッサにおいては、複数のレジスタ・ファイル内の物理レジスタを管理するために統合メイン・マッパが利用されている。論理−物理レジスタ変換をストアする(即ち、マッパ・エントリ内に)ことに加えて、統合メイン・マッパはまた、依存性データ(即ち、キュー位置データ)をストアする役割も担い、これは完了による命令順序付けのために重要である。
統合メイン・マッパに基づくリネーム・スキームでは、OoOプロセッサによる再使用のためにできる限り早くマッパ・エントリを解放することが望ましい。しかし、従来技術では、マッパ・エントリによってマップされたレジスタに書込む命令が完了するまで、統合メイン・マッパ・エントリを解放することができない。この制約は強制的であり、その理由は、完了まで、「終了した」(即ち、特定の実行ユニット(EU)が成功裏に命令を実行した)命令が、その命令が「完了する」ことができる前且つアーキテクチャ化されたレジスタのコヒーレント状態が更新される前に、依然としてバッファ消去(flush)される可能性があるためである。
現在の実装において、統合メイン・マッパにおけるリソース制約は、一般に統合メイン・マッパのエントリの数を増すことによって対処されてきた。しかし、統合メイン・マッパのサイズを大きくすることは、付随して、ダイ面積、複雑さ、電力消費、及びアクセス時間に関する不利益がある。
特許文献2には、データ処理システム内の1つ又は複数の物理レジスタの組を管理する方法が提示されている。このデータ処理システムは、命令をアウト・オブ・オーダで処理するプロセッサを有し、ここで命令は論理レジスタを参照し、各々の論理レジスタは1つ又は複数の物理レジスタの組にマップされる。1つ又は複数の命令のディスパッチに応答して、レジスタ管理ユニットは論理レジスタ・ルックアップを実行し、これにより、1つ又は複数のレジスタ・マッパ内で、ディスパッチされた命令に関連した論理レジスタに対するヒットが生じたかどうかが判断される。この点について、論理レジスタ・ルックアップは、アーキテクチャ化レジスタ・マッパ、統合メイン・マッパ、及び中間レジスタ・マッパを含むレジスタ・マッパ群からの少なくとも1つのレジスタ・マッパ内を検索する。レジスタ管理ユニットは、レジスタ・マッパ群の中の論理レジスタに対する単一のヒットを選択する。統合メイン・マッパ内のマッパ・エントリを有する命令が終了したがまだ完了していない場合、レジスタ管理ユニットは、統合メイン・マッパ内の統合メイン・マッピング・エントリの論理−物理レジスタ・リネーム・データを中間レジスタ・マッパに移動させ、統合メイン・マッパは、統合メイン・マッピング・エントリを命令の完了の前に解放する。統合メイン・マッピング・エントリの解放は、再使用のために利用可能な統合メイン・マッピング・エントリの数を増やす。
次に図を参照し、特に図1を参照すると、図2を参照しながら以下で説明する中間レジスタ・マッパを使用するOoOプロセッサを含むことができるデータ処理システム100の例が示されている。図1に示すように、データ処理システム100は、中央処理ユニット(CPU)110を含み、これは図2のプロセッサ200によって実装することができる。CPU110は、種々の他の構成要素に相互接続112によって結合される。読み出し専用メモリ(ROM)116は、相互接続112に結合され、データ処理システム100の特定の基本機能を制御する基本入力/出力システム(BIOS)を含む。ランダム・アクセス・メモリ(RAM)114、I/Oアダプタ118、及び通信アダプタ134もまた、システム・バス112に結合される。I/Oアダプタ118は、記憶デバイス120と通信する小型コンピュータ・システム・インタフェース(SCSI)アダプタとすることができる。通信アダプタ134は、相互接続112をネットワーク142にインターフェース接続し、データ処理システム100が遠隔コンピュータ140のような他のシステムと通信することを可能にする。入力/出力デバイスもまた、ユーザ・インタフェース・アダプタ122及びディスプレイ・アダプタ136を介して相互接続112に接続される。キーボード124、トラックボール132、マウス126及びスピーカ128は全て、ユーザ・インタフェース・アダプタ122を介してバス112に相互接続される。ディスプレイ138は、ディスプレイ・アダプタ136によってシステム・バス112に接続される。このようにして、データ処理システム100は、例えば、キーボード124、トラックボール132、及び/又はマウス126を通して入力を受取り、そして、例えばネットワーク142を介して、記憶デバイス120、スピーカ128、及び/又はディスプレイ138に出力を供給する。データ処理システム100内に示したハードウェア要素は網羅的であることを意図したものではなく、1つの実施形態におけるデータ処理システムの主要な構成要素を表すものである。
データ処理システム100の操作は、ファームウェア及び/又はソフトウェアなどのプログラム・コードによって制御することができ、これには、典型的には、例えば、AIX(登録商標)(「AIX」はIBM社の商標である)のようなオペレーティング・システム並びに1つ又は複数のアプリケーション又はミドルウェア・プログラムが含まれる。
次に図2を参照すると、スーパースカラ・プロセッサ200が描かれている。命令は、メモリ(例えば、図1のRAM114)から取出され、レベル1命令キャッシュ(L1 Iキャッシュ)206と、フェッチ−デコード・ユニット208と、命令キュー210と、ディスパッチ・ユニット212とを含む命令順序付け論理(ISL)204にロードされる。具体的には、命令は、ISL204のL1 1キャッシュ206にロードされる。この命令は、要求されるまでL1 1キャッシュ206内に保持され、又は必要とされない場合には置き換えられる。命令はL1 1キャッシュ206から取出され、フェッチ−デコード・ユニット208によってデコードされる。現行の命令がデコードされた後、現行の命令は命令キュー210にロードされる。ディスパッチ・ユニット212は、命令を命令キュー210からレジスタ管理ユニット214並びに完了ユニット221にディスパッチする。完了ユニット221は、一般実行ユニット224及びレジスタ管理ユニット214に結合され、発行された命令がいつ完了したかをモニタする。
ディスパッチ・ユニット212が現行の命令をディスパッチすると、レジスタ管理ユニット214の統合メイン・マッパ218が、宛先論理レジスタ番号を、論理レジスタに現在割り当てられていない物理レジスタ・ファイル232a−232n内の物理レジスタに割当ててマップする。宛先は、物理レジスタ・ファイル232a−232nの中の指定された物理レジスタにリネームされたと言われる。統合メイン・マッパ218は、割り当てられた物理レジスタを、統合メイン・マッパ218内にストアされたフリー物理レジスタのリスト219から除去する。その宛先論理レジスタへのその後の全ての参照は、フェッチ−デコード・ユニット208が同じ論理レジスタに書込む別の命令をデコードするまでは、同じ物理レジスタに向かうことになる。次に、統合メイン・マッパ218は、論理レジスタをフリー・リスト219から選択された異なる物理的位置にリネームし、マッパが更新されて新しい論理−物理レジスタ・マッパ・データが入力される。論理−物理レジスタ・マッパ・データがもはや必要でなくなると、古いマッピングの物理レジスタがフリー・リスト219に戻される。フリー物理レジスタ・リスト219が十分な物理レジスタを有していない場合、ディスパッチ・ユニット212は、必要な物理レジスタが使用可能になるまで命令ディスパッチを一時停止する。
レジスタ管理ユニット214が現行の命令をマップした後、発行キュー222が、現行の命令を、実行ユニット(EU)230a−230nを含む一般実行エンジン224に発行する。実行ユニット230a−230nは、例えば、浮動小数点(FP)、固定小数点(FX)、及びロード/ストア(LS)などの種々の型式のものである。一般実行エンジン224は、データ・キャッシュ234を介してデータ・メモリ(例えば、図1のRAM114、ROM116)とデータを交換する。さらに発行キュー222は、FP型、FX型の命令、及びLS命令を含むことができる。しかし、任意の数及び型式の命令を用いることができることを認識されたい。実行中、EU230a−230nはレジスタ・ファイル232a−232n内の物理的位置からソース・オペランド値を取得し、結果データがあれば、それをレジスタ・ファイル232a−232n及び/又はデータ・キャッシュ234内にストアする。
さらに図2を参照すると、レジスタ管理ユニット214は、(i)アーキテクチャ化レジスタ・マッパ216、統合メイン・マッパ218、中間レジスタ・マッパ220を含むマッパ・クラスタ215と、(ii)発行キュー222とを含む。マッパ・クラスタ215は、種々の命令の論理レジスタに割り当てられた物理レジスタを追跡する。例示的な一実施形態において、アーキテクチャ化レジスタ・マッパ216は、論理−物理レジスタ・マッパ・データの最新の有効な(即ち、チェックポイントされた)状態をストアする各々の型式の16個の論理(即ち、物理的にマップされていない)レジスタを有する。しかし、種々異なるプロセッサ・アーキテクチャは、例示的な実施形態において説明するように、より多数の又はより少数の論理レジスタを有することができることを認識されたい。アーキテクチャ化レジスタ・マッパ216は、チェックポイントされた状態を記述する物理レジスタを識別するポインタ・リストを含む。物理レジスタ・ファイル232a−232nは、典型的には、アーキテクチャ化レジスタ・マッパ216内のエントリの数より多くのレジスタを含むことになる。リネーム・マッピング・スキームに用いられる物理及び論理レジスタの具体的な数は様々であり得ることに留意されたい。
対照的に、統合メイン・マッパ218は、通常、アーキテクチャ化レジスタ・マッパ216よりも大きい(典型的には20エントリまで含む)。統合メイン・マッパ218は、論理−物理レジスタ・マッピングの過渡状態の追跡を容易にする。用語「過渡」は、統合メイン・マッパ218が、命令がアウト・オブ・オーダで実行される際に仮の論理−物理レジスタ・マッピング・データの追跡を続けることを意味する。OoO実行は、典型的には、パイプライン内に新しい命令よりも実行するのに長くかかる(即ち、より多くのクロックサイクルを使用する)古い命令が存在するときに行われる。しかし、OoO命令の実行結果が特定の理由(例えば、分岐予測間違え)でバッファ消去される必要があれば、プロセッサは、アーキテクチャ化レジスタ・マッパ216によって維持されているチェックポイント状態に戻り、最新の有効状態から実行を再開することができる。
統合メイン・マッパ218は、物理レジスタ・ファイル232a−232n内の物理レジスタとアーキテクチャ化レジスタ・マッパ216との間の関係を付ける。「統合」という修飾語は、統合メイン・マッパ218が、各々のレジスタ・ファイル232(例えば、汎用レジスタ(GPR)、浮動小数点レジスタ(FPR)、固定小数点レジスタ(FXP)、例外レジスタ(XER)、条件レジスタ(CR)、など)専用のマッパをカスタム設計することの複雑さを不要にすることを意味する。
OoO命令の過渡的論理−物理レジスタ・マッパ・エントリを作成することに加えて、統合メイン・マッパ218は、命令を順序付けるのに重要な依存性データ(即ち、パイプライン中の古い命令の終了に依存する命令)の追跡も続ける。慣例的に、ひとたび統合メイン・マッパ218が命令の論理−物理レジスタ変換に入ると、その命令は発行キュー222に移動する。発行キュー222は、命令が実行のために実行ユニット230に対して発行される前のゲートキーパとして機能する。一般規則として、命令は、その命令が、古い命令が終了することに依存する場合には、発行キューを出ることができない。このため、統合メイン・マッパ218は、マップされた各々の命令のための発行キュー位置データをストアすることによって依存性データを追跡する。ひとたび命令が一般実行エンジン224によって実行されると、命令は「終了した」と言われ、発行キュー222からリタイアする。
レジスタ管理ユニット214は、満たされた単一発行パイプラインを維持するように、ディスパッチ・ユニット212から単一サイクル内で複数の命令を受取ることができる。命令のディスパッチは、統合メイン・マッパ218内の使用可能エントリの数によって制限される。中間レジスタ・マッパ220がない従来のマッパ・システムにおいては、統合メイン・マッパ218が全部で20のマッパ・エントリを有する場合、同時にイン・フライトとなり得る(即ち、チェックポイントされていない)のは最大で20の命令である。従って、従来のマッパ・システムのディスパッチ・ユニット212は、統合メイン・マッパ218から実際にリタイアすることができるより多くの命令を「ディスパッチ」する可能性があることが考えられる。統合メイン・マッパ218におけるこのボットルネックの理由は、慣例的に、命令マッパ・エントリが、その命令が「完了する」(即ち、全ての古い命令が実行を「終了する」)まで統合メイン・マッパ218からリタイアすることができないためである。
一実施形態により、中間レジスタ・マッパ220は、統合メイン・マッパ218からの「終了した」が「未完了」である命令が、その命令の最終的な完了の前にリタイアする(即ち、統合メイン・マッパ218から除去する)ことができる非タイミング・クリティカル・レジスタとして機能する。ひとたび命令が「完了する」と、完了ユニット221が中間レジスタ・マッパ220に完了を通知する。次に中間レジスタ・マッパ220内のマッパ・エントリが、アーキテクチャ化レジスタ・マッパ216内に現在までストアされていた対応するエントリを置き換えることによってアーキテクチャ化レジスタ・マッパ216のアーキテクチャ化されたコヒーレント状態を更新することができる。
ディスパッチ・ユニット212が命令をディスパッチすると、レジスタ管理ユニット214は、命令に関連付けられた論理レジスタ番号を、アーキテクチャ化レジスタ・マッパ216、統合メイン・マッパ218、及び中間レジスタ・マッパ220内のマッピングに対して評価して、アーキテクチャ化レジスタ・マッパ216、統合メイン・マッパ218、及び/又は中間レジスタ・マッパ220内に一致(一般に「ヒット」と呼ばれる)が存在するかどうか判断する。この評価は、論理レジスタ・ルックアップと呼ばれる。ルックアップが1つより多くのレジスタ・マッパ(即ち、アーキテクチャ化レジスタ・マッパ216、統合メイン・マッパ218、及び/又は中間レジスタ・マッパ220)において同時に行われるとき、ルックアップは並列論理レジスタ・ルックアップと呼ばれる。
特定のターゲット論理レジスタの値を更新する各命令が、新しい物理レジスタに割り当てられる。論理レジスタのこの新しいインスタンスが何らかの他の命令によってソースとして用いられるときは、いつも同じ物理レジスタが使用されなければならない。1つの論理レジスタの複数のインスタンスが存在し得るので、その論理レジスタに対応する複数の物理レジスタもまた存在し得る。レジスタ管理ユニット214は、(i)特定の命令によって使用される論理レジスタにどの物理レジスタが対応するかを分析すること、(ii)その論理レジスタに対する参照を適切な物理レジスタに対する参照で置換えること(即ち、レジスタ・リネーム)、及び(iii)いずれかの論理レジスタの新しいインスタンスが作成されるときはいつでも新しい物理レジスタを割り当てること(即ち、物理レジスタ割当て)というタスクを実行する。
最初、何らかの命令がディスパッチされる前には、統合メイン・マッパ218は、現在イン・フライトの命令が存在しないので、ヒット/マッチを受取らないことになる。そのようなイベントにおいて、統合メイン・マッパ218は、マッピング・エントリを作成する。その後の命令がディスパッチされると、同じ論理レジスタ番号の論理レジスタ・マッチがアーキテクチャ化レジスタ・マッパ216と統合メイン・マッパ218の両方において見出された場合、現在OoOで実行中の命令が存在する(即ち、マッピングが過渡状態にある)可能性があるので、統合メイン・マッパ218の論理−物理レジスタ・マッピングを選択することが優先される。
統合メイン・マッパ218がそのマッパ内にヒット/マッチを見出した後、命令は発行キュー222に進み、実行ユニット230の1つによる実行のための発行を待つ。一般実行エンジン224が命令を実行して「終了」した後、しかし命令が「完了」する前に、レジスタ管理ユニット214が、統合メイン・マッパ218内に現在見出されるマッピング・エントリを統合メイン・マッパ218からリタイアさせ、そのマッピング・エントリを中間レジスタ・マッパ220に移動させる。その結果、統合メイン・マッパ218内のスロットは、次にディスパッチされる命令をマッピングするために使用可能になる。統合メイン・マッパ218とは異なり、中間レジスタ・マッパ220は依存性データをストアしない。従って、中間レジスタ・マッパ220に移行されたマッピングは、そのソース・マッピングに関連する命令のキュー位置に依存しない(及び追跡しない)。この理由は、発行キュー222が、成功した実行の後で「終了したが、完了していない」命令をリタイアさせるからである。対照的に、中間レジスタ・マッパを持たない従来のリネーム・マッピング・スキームのもとでは、統合メイン・マッパは、命令が完了するまでソース・リネーム・エントリをストアし続ける。本発明の実施形態のもとでは、中間レジスタ・マッパ220は、統合メイン・マッパ218とは異なり、その動作がタイミング・クリティカルではないため、他のクリティカル・パス要素から離して配置することができる。
ひとたび、統合メイン・マッパ218がマッピング・エントリを統合メイン・マッパ218からリタイアさせ、中間レジスタ・マッパ220に移動させると、マッパ・クラスタ215は、その後にディスパッチされる命令について並列論理レジスタ・ルックアップを実行して、その後の命令が、アーキテクチャ化レジスタ・マッパ216、統合メイン・マッパ218、及び中間レジスタ・マッパ220のいずれかの中にヒット/マッチを含むかどうかを判断する。同じ宛先論理レジスタ番号に対するヒット/マッチが、アーキテクチャ化レジスタ・マッパ216、統合メイン・マッパ218、及び中間レジスタ・マッパ220のうちの少なくとも2つの中に見出された場合、発行キュー222内のマルチプレクサ223は、統合メイン・マッパ218の論理−物理レジスタ・マッピングを選択することによって中間レジスタ・マッパ220の論理−物理レジスタ・マッピングに対する優先権を与え、その中間レジスタ・マッパ220自体は、アーキテクチャ化レジスタ・マッパ216に対する選択優先権を有する。
特許文献2に提案されている選択優先権を決定する機構は以下のように説明される。一実施形態による、命令を実行するのにどのマッピング・データ値を用いるかを決定する例示的な方法の高レベルの論理フローチャート。一実施形態において、ディスパッチ・ユニット212は、1つ又は複数の命令をレジスタ管理ユニット214にディスパッチする。命令のディスパッチに応答して、レジスタ管理ユニット214は、並列論理レジスタ・ルックアップによって、各々のディスパッチされた命令に関連付けられた論理レジスタに対する「ヒット」(アーキテクチャ化レジスタ・マッパ216に対する「ヒット」に加えて)が生じたかどうか判断する。この点に関して、アーキテクチャ化レジスタ・マッパ216は、論理−物理レジスタ・マッパ・データのチェックポイント状態をストアしているので、常にヒット/マッチを有することが想定されていることを理解されたい。レジスタ管理ユニット214が、統合メイン・マッパ218及び/又は中間レジスタ・マッパ220内にヒット/マッチを検出しない場合、マルチプレクサ223は、アーキテクチャ化レジスタ・マッパ216から論理−物理レジスタ・リネーム・データを選択する。レジスタ管理ユニット214が、統合メイン・マッパ218及び/又は中間レジスタ・マッパ220内にヒット/マッチを検出した場合、レジスタ管理ユニット214は、ヒット/マッチが統合メイン・マッパ218と中間レジスタ・マッパ220の両方において生じたものであるかどうかを判定ブロックにおいて判断する。ヒット/マッチがマッパ218及び220の両方にあると判断された場合、レジスタ管理ユニット214は、統合メイン・マッパ218内のマッピング・エントリが中間レジスタ・マッパ220内のマッピング・エントリ「より若い」(即ち、マッピング・エントリの作成がより最近である)かどうか判断する。統合メイン・マッパ218内のエントリが中間レジスタ・マッパ220内のエントリより若い場合、マルチプレクサ223は、統合メイン・マッパ218から論理−物理レジスタ・リネーム・データを選択する。統合メイン・マッパ218内のエントリが中間レジスタ・マッパ220内のエントリより若くない場合、マルチプレクサ223は、中間レジスタ・マッパ220から論理−物理レジスタ・リネーム・データを選択する。
マッチ/ヒットが統合メイン・マッパ218と中間レジスタ・マッパ220の両方において生じたものでない場合、統合メイン・マッパ218に対する排他ヒット/マッチが生じたかどうかが判断される。統合メイン・マッパ218に対する排他ヒットが生じた場合、マルチプレクサ223は、統合メイン・マッパ218から論理−物理レジスタ・リネーム・データを選択する。しかし、統合メイン・マッパ218においてヒット/マッチが生じない(従って、ヒット/マッチがもっぱら中間レジスタ・マッパ220で生じる)場合、マルチプレクサ223は、中間レジスタ・マッパ220から論理−物理レジスタ・リネーム・データを選択する(ブロック320)。一般実行エンジン224は、実行のために論理レジスタ・ルックアップの出力データを用いる。
例示的な一実施形態において、ディスパッチ・ユニット212は、1つ又は複数の命令をレジスタ管理ユニット214に対してディスパッチする。統合メイン・マッパは、新しい論理−物理レジスタ・マッピング・エントリを作成する。発行キュー222は、ディスパッチされた命令の発行キュー位置データを維持し、この命令は、論理レジスタ・ルックアップにより選択されたマッピング・エントリを使用する(図3に示す)。一般実行エンジン224は、実行中の命令のいずれかが終了した(即ち、U130の1つが命令の実行を終了した)かどうかを検出する。発行された命令が終了していない場合、方法は、命令が終了するのを待つ。一般実行エンジン224が、命令が終了したことを検出したことに応答して、統合メイン・マッパ218は、論理−物理レジスタ・リネーム・データを統合メイン・マッパ218から中間レジスタ・マッパ220に移動させる。統合メイン・マッパ218は、終了した命令に関係する統合メイン・マッピング・エントリをリタイアさせる。完了ユニット221は、終了した命令が完了したかどうか判断する。終了した命令が完了していない場合、完了ユニット221は、一般実行ユニット224が全ての古い命令を終了したのを検出するまで待ち続ける。しかし、完了ユニット221が、終了した命令が完了したことを検出した場合、中間レジスタ・マッパ220は、アーキテクチャ化レジスタ・マッパ216のアーキテクチャ化されたたコヒーレント状態を更新し、中間レジスタ・マッパ220は、そのマッピング・エントリをリタイアさせる。
引用により本明細書に組み入れられる、Gshwindによる2001年2月13日出願の「Forwarding stored data fetched for out−of−order load/read operation to over−taken operation read−accessing same memory location」と題する特許文献4は、例示的なアウト・オブ・オーダ(OoO)プロセッサを説明している。
Gshwind(特許文献4)によれば、図3は、メモリ操作の動的並べ替え、並びに干渉テスト及びデータ・バイパス・シーケンスのハードウェア・ベースの実装をサポートする従来のコンピュータ処理システム(例えば、スーパースカラ・プロセッサを含む)の機能ブロック図である。即ち、図3のシステムは、上で列挙した機構を用いた命令の並べ替えをサポートするのに必要なハードウェア・リソースを含むが、イン・オーダ・ロード操作の前のアウト・オブ・オーダ・ロード操作の実行をサポートするのに必要なハードウェア・リソースは含まない。このシステムは、メモリ・サブシステム301、データ・キャッシュ302、命令キャッシュ304、及びプロセッサ・ユニット300から構成される。プロセッサ・ユニット300は、命令キュー303、ロード及びストア操作を行うための幾つかのメモリ・ユニット(MU)305、整数、論理及び浮動小数点演算を行うための幾つかの関数ユニット(FU)307、分岐ユニット(BU)309、レジスタ・ファイル311、レジスタ・マップ・テーブル320、フリー・レジスタ・キュー322、ディスパッチ・テーブル324、リタイアメント・キュー326、及びイン・オーダ・マップ・テーブル328を含む。
図3に示すプロセスにおいて、命令は、分岐ユニット309の制御のもとで命令キャッシュ304から(又は命令が命令キャッシュ304内に存在しないときにはメモリ・サブシステム301から)フェッチされ、命令キュー303内に配置され、その後、命令キュー303からディスパッチされる。オペランドを指定するために命令によって使用されるレジスタ名は、アーキテクチャ化レジスタ名から物理レジスタへの現行のマッピングを指定するレジスタ・マップ・テーブル320のコンテンツに従ってリネームされる。結果の宛先を指定するために命令によって使用されるアーキテクチャ化レジスタ名は、プロセッサによって現在使用されていない物理レジスタの名前を含むフリー・レジスタ・キュー322から抽出された物理レジスタに割り当てられる。レジスタ・マップ・テーブル320は、命令によって指定されたアーキテクチャ化された宛先レジスタ名に対する物理レジスタの割当てによって更新される。その全てのレジスタがリネームされた命令は、ディスパッチ・テーブル324内に配置される。命令はまた、それらのアドレス、並びにそれらの物理レジスタ名及びアーキテクチャ化レジスタ名を含めて、プログラム順にリタイアメント・キュー326内に配置される。命令は、その命令によって使用されることになる全てのリソースが使用可能(物理レジスタに所定のオペランドが割り当てられており、機能ユニットがフリー)であるときにディスパッチ・テーブル324からディスパッチされる。命令によって使用されるオペランドは、典型的には汎用レジスタ(GPR)、浮動小数点レジスタ(FPR)及び条件レジスタ(CR)を含むレジスタ・ファイル311から読み出される。命令は、場合によってはアウト・オブ・オーダで、対応するメモリ・ユニット305、関数ユニット307、又は分岐ユニット309内で実行される。実行が完了すると、命令からの結果はレジスタ・ファイル311内に配置される。実行を完了した命令によって設定された物理レジスタを待機しているディスパッチ・テーブル324内の命令が通知される。リタイアメント・キュー326は、命令が実行を完了したことを、それら命令が何らかの例外を発生したかどうかを含めて通知される。完了した命令はリタイアメント・キューから、プログラム順に(キューの先頭から)除去される。リタイアメントの時点で、命令によって例外が何ら発生していなかった場合、イン・オーダ・マップ・テーブル328は、アーキテクチャ化レジスタ名が、リタイアする命令からの結果を含むレジスタ・ファイル311内の物理レジスタを指示するように更新され、以前のレジスタ名がイン・オーダ・マップ・テーブル328からフリー・レジスタ・キュー322に戻される。
他方、命令が例外を発生させた場合、プログラム制御は、リタイアメント・キュー326からリタイアしている命令のアドレスに設定される。さらにリタイアメント・キュー326がクリアされ(バッファ消去され)、従って全てのリタイアしていない命令がキャンセルされる。さらに、レジスタ・マップ・テーブル320がイン・オーダ・マップ・テーブル328のコンテンツに対して設定され、且つ、イン・オーダ・マップ・テーブル328中に存在しないあらゆるレジスタがフリー・レジスタ・キューに追加される。
先行のロード命令に対するロード命令の並べ替えをサポートする従来のスーパースカラ・プロセッサ(図3に示すような)は、以下を用いて強化することができる。
1.先行のロード命令に対してアウト・オブ・オーダに発行されるロード命令をマーク付けするための機構。
2.命令がフェッチされるときに番号付けし、ある命令が命令ストリーム中でより早く又はより遅く生じたかどうかを判断する機構。ある命令が別の命令より早く又はより遅く生じたかどうか判断する代替的機構で置き換えることができる。
3.アウト・オブ・オーダで実行されたロード操作に関する、プログラム順序中のそれらのアドレス、それらのアクセスのアドレス、ロード・データを含む最大保証微小ユニット(atomic unit)に関して読み出されたデータ値を含む情報をストアする機構。
4.ロード命令が、1つ又は複数のアウト・オブ・オーダ命令に対してイン・オーダで実行されるときに干渉テストを実行するため、及び複数の命令がロード命令と干渉するとき優先度エンコーディングを実行するための機構。
5.干渉するロード命令に関連するデータを迂回するための機構。
6.アウト・オブ・オーダ状態がリタイアメント・キュー326からプログラム順序でレジスタ・ファイル311にリタイアしたポイントにおいて(3)で生成された記録を削除するための機構。
Gschwind(特許文献4)によって開示された機構は、図3に示す従来のアウト・オブ・オーダ・プロセッサにおいて使用可能な機構と併せて以下のように用いられる。各命令は、命令キュー303に入る際に命令番号で番号付けされる。ロード命令を、先行のロード命令より早く、ディスパッチ・テーブル324からディスパッチすることができる。そのようなロード命令は、以下で「アウト・オブ・オーダ」ロード操作と呼ばれる。そのような場合、そのロード命令に対応するリタイアメント・キュー326内のエントリは、アウト・オブ・オーダ・ロードとマーク付けされる。
ディスパッチ・テーブル324から実行用のメモリ・ユニット305へのアウト・オブ・オーダ・ロード操作のディスパッチの検出は、2つのカウンタ、即ち「ロード・フェッチ・カウンタ」及び「ロード・ディスパッチ・カウンタ」を用いて行われることが好ましい。ロード・フェッチ・カウンタは、ロード操作がディスパッチ・テーブル324に加えられるときにインクリメントされる。ロード・ディスパッチ・カウンタは、ロード操作が実行用のメモリ・ユニット305に送られるときにインクリメントされる。ロード・フェッチ・カウンタの現行コンテンツは、ロード命令がディスパッチ・テーブル324に加えられるときにロード命令に添付される。ロード命令がディスパッチ・テーブル324から実行用のメモリ・ユニット305にディスパッチされるとき、ディスパッチ・テーブル324内でロード命令に添付された値が、その時点でのロード・ディスパッチ・カウンタのコンテンツと異なる場合、そのロード命令はアウト・オブ・オーダ・ロード操作として識別される。2つのカウンタ値の間の差異は、ロード命令がそれに対してアウト・オブ・オーダで発行されたロード操作の正確な数に対応することに留意されたい。アウト・オブ・オーダ・ロード命令は、ロード・オーダ・テーブル内にエントリを追加するスペースが使用可能である場合にのみ、メモリ・ユニット305にディスパッチされる。
ロード・オーダ・テーブルは、全てのメモリ・ユニット305によって同時にアクセスされる単一のテーブルである(即ち、単一の論理コピーのみが維持されるが、処理を加速するために複数の物理コピーが維持されてもよい)。複数の物理コピーが用いられる場合、複数コピーの論理コンテンツは、常に全てのメモリ・ユニット305に対して同じ状態を反映する必要がある。
実行中の命令の命令番号、及び命令が推測的に実行されるかどうかという事実が、各ロード操作が発行される毎にメモリ・ユット305に伝達される。
プロセッサによって実装される命令セット・アークテクチャ(ISA)は、通常、ISAの命令のレジスタ・フィールドに基づいて、アクセス可能な固定数のアーキテクチャ化された汎用レジスタを定義する。アウト・オブ・オーダ実行プロセッサにおいて、リネーム・レジスタは、推測的に実行された命令のレジスタ結果を保持するように割り当てられる。リネーム・レジスタの値は、対応する推測的命令実行が「コミットされる」又は「完了される」とき、アーキテクチャ化レジスタ値としてコミットされる。従って、どの時点においても、そしてプロセッサ上で実行中のプログラムによって観測されるように、レジスタ・リネームの実施形態において、アーキテクチャ化レジスタより遥かに多くのリネーム・レジスタが存在する。
リネーム・レジスタの一実施形態において、別々のレジスタがアーキテクチャ化レジスタ及びリネーム・レジスタに割り当てられる。別の実施形態において、リネーム・レジスタ及びアーキテクチャ化レジスタは、マージ・レジスタとなる。マージ・レジスタは、そのマージ・レジスタの状態を示すためのタグを含み、1つの状態においてマージ・レジスタはリネーム・レジスタであり、別の状態においてマージ・レジスタはアーキテクチャ化レジスタである。
マージ・レジスタの一実施形態において、初期化の一部として(例えば、コンテキスト切替えの間、又はパーティションを初期化するとき)、初めのn個の物理レジスタがアーキテクチャ・レジスタとして割り当てられ、ここでnは命令セット・アークテクチャ(ISA)によって宣言されるレジスタの数である。これらのレジスタは、アーキテクチャ化レジスタ(AR)状態になるように設定され、残りの物理レジスタは、使用可能状態を引き受ける。発行される命令が宛先レジスタを含む場合は、新しいリネーム・バッファが必要となる。このために、1つの物理レジスタが、使用可能レジスタのプールから選択され、宛先レジスタに割り当てられる。従って、選択されたレジスタ状態は、リネーム・バッファ無効状態(NV)に設定され、その有効ビットがリセットされる。関連する命令が実行を終了した後、生成された結果は選択されたレジスタに書込まれ、その有効ビットが設定され、そしてその状態はリネーム・バッファ(RB)有効状態に変化する。その後、関連する命令が完了すると、割り当てられたリネーム・バッファは、丁度完了した命令内で指定された宛先レジスタを実装するアーキテクチャ・レジスタであると宣言されることになる。その状態は次にアーキテクチャ・レジスタ状態(AR)に変化して、このことを反映する。
レジスタは性能に対する殆ど普遍的な解決策であるが、欠点を有する。コンピュータ・プログラムの種々異なる部分は、それら独自の一時的な値を使用するので、レジスタの使用に関して競合する。実行時におけるプログラム・フローの性質を十分に理解することは非常に難しいので、予め、開発者が、何個のレジスタを使用すべきか、及び、プログラムの他の部分のために何個を取り置きしておくべきかを知る簡単な方法はない。一般にこれらの類いの考慮事項は無視され、開発者は、そして恐らく彼らが使用するコンパイラは、それらに対して可視のレジスタ全てを用いようと試みる。初めにごく少数のレジスタで開始するプロセッサの場合、これは唯一の合理的な手順でもある。
レジスタ・ウィンドウは、この問題を解決しようとするものである。プログラムのあらゆる部分がそれら自体での使用のためのレジスタを所望するので、幾組ものレジスタがプログラムの異なる部分に対して与えられる。これらのレジスタが可視であったとすると、より多くの競合するレジスタが存在することになり、即ち、それらを不可視にする必要がある。
レジスタを不可視にすることは効率的に実施することができ、CPUは、手続き呼び出し中に、プログラムの一部分から別の部分への移動を認識する。これは、少数の命令(プロローグ)のうちの1つによって遂行され、同じく少数の命令(エピローグ)のうちの1つによって終了する。Berkeley設計において、これらの呼び出しは、そのポイントでレジスタの新しい組が「スワップ・イン」されること、又は呼び出しが終了したときに「デッド」(又は「再使用可能」)とマーク付けされることを生じさせる。
PowerPCのようなプロセッサは、事前定義され予約された機械レジスタに対する状態をセーブする。プロセッサが既に現行ウィンドウのコンテンツを使用して別の例外を処理している間に例外が発生すると、プロセッサはこの状況でダブル・フォールトを発生することになる。
例示的なRISCの実施形態において、全部で64個のうちの8個のレジスタだけがプログラムに対して可視となる。レジスタの完全セットはレジスタ・ファイルとして知られ、任意の特定の8個のセットがウィンドウとして知られる。このファイルは、8個までの手続き呼び出しがそれら自体のレジスタ・セットを有することを可能にする。プログラムが8個分の呼び出し深さより長いチェインを呼び出さない限り、レジスタは決してスピルすることはなく、即ち、レジスタ・アクセスに比べると遅いプロセスである主メモリ又はキャッシュにセーブされることはない。多くのプログラムにとって、6つのチェインは、プログラムが進むことになるのと同じ深さである。
比較すると、別のアークテクチャは、各々8個のレジスタの4つの組の各々に同時の可視性を与える。各々8個のレジスタの3つの組が、「ウィンドウ化される(windowed)」。8個のレジスタ(i0からi7まで)が、現在のプロシージャ・レベルの入力レジスタを形成する。8個のレジスタ(L0からL7まで)が現在のプロシージャ・レベルに対してローカルであり、8個のレジスタ(o0から07まで)が現在のプロシージャ・レベルから次に呼び出されるレベルへの出力である。プロシージャが呼び出されると、レジスタ・ウィンドウはレジスタ16個分シフトし、古い入力レジスタ及び古いローカル・レジスタを隠し、古い出力レジスタを新しい入力レジスタにする。共通レジスタ(古い出力レジスタ及び新しい入力レジスタ)は、パラメータを渡すために使用される。最後に、8個のレジスタ(g0からg7まで)は、全てのプロシージャ・レベルに対してグローバルに可視となる。
改善された設計は、可変サイズのウィンドウを割当て、このことは、呼び出しに必要とされるレジスタが8個より少ない一般的な事例での利用に役立つ。これはまた、レジスタを64のグローバル・セットとウィンドウ用の追加の128とに分離した。
レジスタ・ウィンドウはまた、容易なアップグレード・パスを与える。追加のレジスタはプログラムに対して不可視であるので、追加のウィンドウは、任意の時点で追加することができる。例えば、オブジェクト指向プログラミングの使用は、しばしば多数の「小さい」呼び出しをもたらす結果となり、これはウィンドウを8から例えば16に大きくすることによって受け入れることができる。最終結果として、レジスタ・ウィンドウが頻繁にはオーバーフローしないので、レジスタ・ウィンドウのスピル(spill)及びフィル(fill)操作はより少なくなる。
命令セット・アーキテクチャ(ISA)プロセッサのアウト・オブ・オーダ命令実装は、アーキテクチャ化された命令を、直接に、又はハードウェア命令デコード・ユニットによって起動されるファームウェアを使用して、実行することができる。しかし、多くのプロセッサは、アーキテクチャ化された命令をプロセッサ内のハードウェア・ユニットに向けられるマイクロ操作(micro−ops)に「分割する(crack)」。さらに、複雑命令セット・コンピュータ(CISC)アーキテクチャ・プロセッサは、CISC命令を縮小命令セット・コンピュータ(RISC)アーキテクチャ命令に翻訳することができる。本発明の態様を説明するために、ISA機械語命令が説明され、内部操作(iops)は、ISA機械語命令として、又はより小さいユニット(micro−ops)として、又はマイクロコードとして、又は当該技術分野で周知の任意の手段によって、内部に配備することができ、それでもなお本明細書では機械語命令を呼ばれる。ISAの機械語命令は、ISAによって定義される形式及び機能を有し、ひとたびISA機械語命令がフェッチされデコードされると、プロセッサ内で使用するためのiopsに変換することができる。
一実施形態において、命令セット・アーキテクチャ(ISA)は、オペランド「活性」を示す機能を有する。オペランド「活性」は、例えば、そのオペランド値が再度使用されることがないことの指標、あと何回読出しアクセス、書込みアクセス又はその両方が行われるかの指標、オペランドが所定の期間(命令の数、経過時間など)にわたってアクセスされることがないことの指標、オペランドに対するパフォーマンス・アクセスに対してどれほど重要であるか(低、中間、高)の指標を含むことができる。記憶キャッシュ階層において、オペランド活性は、あるストア操作がそのラインに対する最終ストアであってキャッシュ・ラインへのストアが主記憶装置(スクラッチ・パッド)内に維持される必要がないことを示すものであり得る。あるオペランド値が最後に用いられることを示すことは、ソフト・エラー回復、マルチレベル・レジスタ・ファイル、主記憶キャッシュ及びレジスタ・リネーム論理を管理するための改善された性能を約束する。
実施形態において、コンパイラには、オペランド活性(例えば、どの値が再度使用されないか)を識別する情報をプロセッサに提供するために、トラック情報が提供される。一実施形態において、コンパイラは、コンパイルされた命令を実行するプロセッサに活性情報を示すために活性命令を挿入する。
一実施形態において、コンテキスト切替えを実行する機能は、特定のソフトウェア・モジュールに対してどの値が使用されないかを含む活性に関する情報をセーブし復元する機能を含む。ソフトウェア・モジュールは、例えば、サブルーチン、スレッド、プロセス、又はシステム内のパーティション(イメージ)とすることができる。
プログラムAが、プログラムBを実行するために割込みをかけられるとき、コンテキスト切替えが実行される。アーキテクチャ化ファシリティ(例えば、レジスタ値、条件コード値、次の命令アドレス(NI)を指示するプログラム・カウンタ値を含む)のコンテキスト(現行状態)がプログラムAのためにセーブされ、プログラムBのためのコンテキストがロードされる。プログラムAに戻るとき、セーブされたプログラムAのコンテキストがロードされ、プログラムAは、セーブされたNIにおいて実行を開始する。
一実施形態において、アクティブ・プログラムは、アーキテクチャ化ファシリティ値を「最後に使用される」値として指定することができる。例えば、プログラムは、レジスタ3の中の値が再度使用されることがないことを知り、ISAのアーキテクチャ化された64個の一般レジスタのうちのレジスタ3を無効化する命令を実行する。すると、プロセッサは、もはやレジスタ3の現行の状態を保持する必要がなく、デフォルト値が使用されるように指定することができる。プロセッサがコンテキスト切替えを行うとき、レジスタ3をセーブ又は復元する必要はない。一実施形態において、コンテキストが復元されプログラムが再開されるとき、レジスタ3が非活性であることを示す情報がセーブされる。
一実施形態において、命令実行中に一時的障害が生じたとき、「レジスタ活性」情報を用いてエラー回復及び/又はエラー通知を抑制することができる。エラー回復は性能を低下させることになり、エラー通知は、プロセス、パーティション又はシステムが回復不能エラーによって停止する場合に、機械停止をもたらしかねない。
一実施形態において、あるプログラムによって「デッド値」(無効化レジスタ)へのアクセスが提供され、そのプログラムはあるオペランドに関する「最終使用」情報を提供する(そのオペランド値がもはやプログラムによって必要とされない場合)。最終使用情報は、不使用値を保持する必要をなくすことにより、又は最終使用されたオペランドに対するエラー通知を抑制することによって、システムが操作を最適化することを可能にすることができる。しかし、「最終使用」指標は、最終使用として示された値が再び読出しアクセスされないことを保証するものではない。具体的には、コード・モジュール境界において、値は、新しいモジュールに入るときにセーブされ、モジュールから出て以前のモジュールに戻るときに復元されることが多い。
・ 関数の間の遷移の際に、呼ばれる側でセーブされる(callee−saved)(「不揮発性」)関数が、呼び出された関数によって関数の入口でセーブされ、関数の出口で復元される。
・ アプリケーション(プロセス又はスレッド)からオペレーティング・システム・カーネル(又はハイパバイザ)への遷移が行われるとき、全てのレジスタはセーブされ、制御がアプリケーションに戻るときに復元される。
・ システム・パーティション(例えば、そのパーティション内のオペレーティング・システム)から仮想機械モニタ(VMM)又はハイパバイザへの遷移が行われるとき、全てのレジスタはセーブされ、制御がアプリケーションに戻るときに復元される。
・ オペレーティング・システムが1つのスレッドから別のスレッドへ実行を切替えるとき、スレッドに関連する全てのレジスタがストアされ、別のスレッドに関連するストアされたレジスタがロードされる。
・ ハイパバイザ又は仮想機械モニタ(VMM)システムが1つのパーティションから別のパーティションへ実行を切替えるとき、パーティションに関連する全てのレジスタがストアされ、別のパーティションに関連するストアされたレジスタがロードされる。
・ システムzのもとでのCALL PROGRAMの実行中、状態がセーブされる。
・ 1つの第1のモジュールから別のモジュールへの切替えの間、別のモジュールは、第1のモジュールがどのレジスタを使用している可能性があるかを知らないので、このモジュールは全てのレジスタをセーブし復元することになる。
・ これらのアクセスの間、一時的障害が、モジュールの状態の将来の復元のためにモジュール状態をセーブするように登録されているとき、非使用状態がアクセスされる。
・ エラー回復及びエラー通知を避けるために、エラー回復及び通知のうちの少なくとも1つを抑制することが好ましい。
・ これらの偽エラーの処理中の性能低下を減らすために、そのような状況の間、エラー通知を抑制することが重要である。
一実施形態において、各レジスタに対して、そのレジスタがもはや活性でない(即ち、最終使用が既に示された)ことを示されたかどうかを追跡する手段が設けられる。
一実施形態において、活性情報レジスタ(LIR)専用レジスタ(SPR)が設けられる。活性レジスタは、ハードウェア・ラッチ内に維持されることが好ましく、レジスタが活性であるかどうかを示す1ビットを各レジスタに対して含む。LIR値は、一実施形態においてプログラムのコンテキストであり、コンテキスト切替えの間セーブされ復元される。別の実施形態において、LIR値は、LIRに関連するコンテキスト又はスレッドを識別する識別子を含む。
図4を参照すると、プロセッサは、推測的実行のためのリネーム・レジスタ404、及びISAアーキテクチャ化レジスタ403として動的に割り当てられる物理レジスタのプール402を有することができる。動的割当ては、アーキテクチャ化レジスタ・マッパ405によって実行され、その場合、リネーム・レジスタは、対応するアウト・オブ・オーダ(OoO)命令実行の完了によって、アーキテクチャ化レジスタとなる。
ISAのアーキテクチャ化機械語命令400は、例えば、命令を実行することによって実施されるべき機能を示すオペコード(OP1)と、即値フィールド(I1)と、レジスタ・フィールドによって指定されるアーキテクチャ化レジスタ位置にソース・オペランドを配置するためのソース・レジスタ・フィールド(RA1)と、命令の実行に用いられるソース・オペランドと、命令の実行の結果のオペランドをストアするためのアーキテクチャ化レジスタを配置するターゲット・レジスタ・フィールド(RT1)と、を含む。
実行ユニット401は、プロセッサによって生成された命令400(又は内部操作「マイクロops」(iops))を受取り、アーキテクチャ化レジスタ位置(RA1又はRA2)にあるオペランドにアクセスすることが必要であると判断する。実行ユニット401は、レジスタ・フィールド値をアーキテクチャ化レジスタ・マッパ405に送り、このマッパが、アクセスされるアーキテクチャ化レジスタにどの物理レジスタが関連付けられるかを決定し、アクセスをそのアーキテクチャ化レジスタに向ける。
図5を参照すると、アーキテクチャ化レジスタ有効化/無効化レジスタ(AREDR)410が導入される。AREDR410は、アーキテクチャ化レジスタのアクセス(実行ユニット401による)が許可されるか否かを判断する。一実施形態において、アーキテクチャ化レジスタのアクセスが無効化される場合、AREDR410は、以前にストアされたアーキテクチャ化レジスタ・オペランド値を返すか又はアーキテクチャ化レジスタ・オペランドをストアする以外の応答を行う。応答は、例えば、デフォルト値411を返すこと、全て1又は全て0を返すこと、インクリメントされた値を返すこと、ディクリメントされた値を返すこと、エラーを抑制すること、又はプログラム例外イベント信号を返すことを含むことができる。
図6を参照すると、コンテキスト切替えの間(又は実行中の呼び出し命令に応答して)、AREDR410内に保持されたアーキテクチャ化レジスタの有効化状態が、例えば主記憶装置421の、退避領域420にセーブされ復元される。一実施形態において、アーキテクチャ化レジスタの現行の値もまた、現行のプログラム・カウンタ値及び現行の条件コード(フラグ)値を含むプログラム状態語(PSW)の状態といった他の状態情報と共にセーブされ復元される。
図7を参照すると、AREDAR410は一実施形態において、それぞれのアーキテクチャ化レジスタに対応するビットを有する有効化レジスタ501を含み、ここで「0」であるビットはレジスタが無効化されていることを示し、「1」であるビットはレジスタが有効化されていることを示す。有効化レジスタ501は、有効化セット/リセット論理500によってセット又はリセットされる。一実施形態において、最終使用命令は、アーキテクチャ化レジスタの最終使用を指定するものであり、実行されたとき、対応する有効化レジスタ501のビットを「0」にセットする。一実施形態において、アーキテクチャ化レジスタへの書込みを指定する命令は、対応する有効化レジスタ501のビットを「1」にセットする。一実施形態において、有効化レジスタ501は、オペレーティング・システム(OS)によって使用される命令によって読出すことができ又は書込むことができる。
命令があるアーキテクチャ化レジスタへのアクセスを要求するとき、アーキテクチャ化レジスタ・アドレス507がコンパレータ504によって有効化レジスタ501と比較されて、そのアーキテクチャ化レジスタが有効化状態505であるか又は無効化状態506であるかが判断される。
一実施形態において、マスク・レジスタ503が設けられる。マスク・レジスタ503は、実行中のオペレーティング・システム命令に応答するマスク・セット/リセット論理502によりセット又はリセットされる。マスク・レジスタ503の各ビットは、アーキテクチャ化レジスタに対応し、プログラムが対応するレジスタを有効化できるかどうかを制御する。マスク・レジスタ503は、コンパレータによって有効化レジスタ501と比較され、あるアーキテクチャ化レジスタ・アドレス507が有効化状態505であるか又は無効化状態506であるかが判断される。
アーキテクチャ化レジスタ有効化論理505は、アーキテクチャ化レジスタの使用を許可する。アーキテクチャ化レジスタ無効化動作論理506は、上記で説明したようにアーキテクチャ化レジスタを使用すること以外の動作を引き起す。
一実施形態において、コンテキスト切替え中に、マスク・レジスタ503の状態が有効化レジスタ501の状態とともにセーブされ復元される。
一実施形態において、レジスタ活性は、暗黙的に、例えばレジスタ・リネーム論理の状態の一部分として維持され、スレッド又はプログラムに関連付けられる。例えば、レジスタ・リネーム・テーブル内に維持される。
一実施形態において、コンテキスト切替えを実行するために、活性情報値が、レジスタ・リネーム・テーブルといった状態管理構造から抽出される。マッピング情報にアクセスすることにより、各アーキテクチャ化レジスタに対して、そのレジスタが物理レジスタに結合されており活性であるかどうかの判断がなされ、活性である場合、「1」が、コンテキスト状態保持用の記憶装置内の(例えば、活性情報レジスタ(LIR)内の)そのレジスタの活性情報値位置に挿入されることになる。別の態様において、アーキテクチャ化レジスタが活性であると示されず、物理レジスタに結合されていないとき、「0」が対応する位置に挿入される。一実施形態によれば、LIRレジスタが明示的に維持されない場合であっても、アーキテクチャはLIRレジスタを含むように指定され、そのLIRレジスタに対する読出しは、活性指示値を生成させ、それをこのレジスタからの読出しの結果として返させる。本明細書で説明したのとは別のコード化を本明細書に含まれる教示と併せて使用することができることが、当業者には認識されるであろう。
活性情報は、一実施形態において、信頼性動作と関連して用いられる。データ・アクセスは、Rユニット機能に関連して行うことができる。Rユニットは、レジスタ活性インジケータ・レジスタを含むことが好ましい。一時的障害を示すエラー条件に遭遇したとき、そのエラー条件が活性又は非活性レジスタ(又は他のデータ・ストア)におけるエラーに対応するかどうかの判断がなされる。データ・エラーが活性値に対して示されたとき、信頼性動作が実行され、ここで信頼性動作はエラー通知及びエラー修正のうちの1つであることが好ましい。データ・エラーが非活性レジスタに対して示されたとき、信頼性動作を抑制することができる。エラー修正を抑制することは、不必要な値を修正するためのエネルギーを節約し、性能損失を改善する。非活性値に関するエラー通知を抑制することは、回復不能エラーに対するシステム信頼性を高めることになり、その理由はアーキテクチャかされた状態の一時的破損は、通常、プロセス、パーティション及びシステムのうちの1つにおける実行を強制終了するためである。一実施形態において、あるエラーが信頼性動作を必要としないことを示した場合でも、劣化したシステムを検出してサービス動作を開始し、又は頻繁に故障する構成要素を事前に非稼働にするために、「ロギング」通知は依然として記録される。
エラーを抑制する非活性レジスタ・アクセスに関する一実施形態において、あるエラーが信頼性動作を必要としないことを示した場合でも「ロギング」通知は依然として記録される。ログは、低下したシステムを検出してサービス動作を開始するため、又は頻繁に故障する構成要素を事前に非稼働にするために用いることができる。
一実施形態により、少なくとも1つのシナリオにおいて、非活性なレジスタにアクセスする条件は、プログラミング・エラーに対応する場合がある。そのため、マイクロプロセッサの実装を、可能性のあるプログラミング・エラーを示すために通知イベント(例えば、デバッガ、オペレーティング・システム、ハイパバイザ、又は他の監視プログラムのうちの1つに対する例外)を発生させるように適合させることができる。
フリー(無効化)レジスタに対する参照の全てがプログラミング・エラーの結果ではない。プログラムは、レジスタが使用中であるかどうか知らないときにそれらのレジスタをセーブすることを必要とすることがあり、これらのレジスタをメモリにセーブし(「スピル」)、後で再ロード(「フィル」)するように進行することができる(コンテキスト切替え又は関数呼び出し/戻りの間)。1つの実施形態において、フリー・アーキテクチャ化レジスタにアクセスしたときに、可能性のある例外を取消し、デフォルト値を返すことを強制するために、構成レジスタ及びモード・スイッチのうちの1つが設けられる。本発明の別の態様において、制御ビット(例えば、アーキテクチャ化プログラム状態語(PSW)、アーキテクチャ化制御レジスタ(CR)、又はアーキテクチャ化機械状態レジスタ(MSR)状態レジスタにおいて、又は実装制御HIDビットにおいて)が設定されて、アプリケーションによって挙動が選択される。別の態様において、シーケンシャル命令に対するプリフィックスが、未使用参照が起こり得ることを示す能力をもたらす。さらに別の態様において、明確なオペコードを有する命令は、フリーにされ割り当てを解除されたレジスタにアクセスする能力を有する。
別の実施形態において、非活性の無効化オペランドに対応する通知を発生又は抑制する通知発生命令及び非通知発生命令が設けられる。コンパイラは、コンテキスト切替え(又は呼ばれる側でセーブするスピル/フィル・レジスタ・シーケンス)が行われるときに、プログラミング・エラー指示イベント(例えば、前記の例外)を発生させないでデフォルト値を返す命令を生成する。一態様により、コンパイラは、コンテキスト作成/コンテキスト取得操作中、又はセット・ジャンプ/ロング・ジャンプ操作中に、既述の手段(制御を設定する、プリフィックスを使用する、又は特別なオペコードを用いる)の1つを用いて、未使用レジスタを参照する可能性があるキー操作、例えば、関数のプロローグ及びエピローグにおいて呼ばれる側でセーブされる(不揮発性)レジスタに関するレジスタ・セーブ及び復元、を実行することができる。別の実施形態において、コンパイラ・ライブラリ又は関数はまた、レジスタ活性情報のダイジェストをセーブし(「STORE LIVENESS」)、レジスタが再ロードされるときその情報を復元する(「LOAD LIVENESS」)ためのコードを発し及び/又は使用し及び/又は実行するように随意に適合されることになる。
他の態様において、オペレーティング・システム及びハイパバイザは、類似の命令シーケンスを用いてコンテキスト切替えにおいてコンテキストをセーブし復元する。そのような使用法の一態様において、オペレーティング・システム及びハイパバイザは、プログラミング・エラーがないこと、及び、プログラミング・エラー通知を決して発生させず、むしろ常にデフォルト値を置換えることが期待される。これは、zOS及びAIXのような信頼性の高い既知のオペレーティング・システムにとって望ましいことであろう。別の態様において、オペレーティング・システムの製造元(make)が、オペレーティング・システム内に多くのプログラミング・エラーが存在すると予想する場合、製造元はアプリケーション・プログラムと類似の、OS及びハイパバイザがプログラミング・エラーを示す(例えば、通知方法を用いて)ように適合された、且つ、未使用/フリー/割当て解除レジスタを参照していることが既知のコンテキスト切替えのような操作に対してプログラミング・エラー通知を発生しないように適合された命令を使用する、方法を用いる。これらの方法は、「マイクロソフト・ウィンドウズ(Microsoft Windows)」の名称で一般に知られているオペレーティング・システムの製造元にとって望ましいであろう。また、zOS及びAIXのような非常に安定なオペレーティング・システムの製造者は、デバッグを補助して、zOS及びAIXオペレーティング・システムにおける既知の業界をリードする安定性を維持するために、その長い品質保証サイクルの間の通知を可能にするよう選択することができる。別の態様において、モードは、例えばリナックス・オペレーティング・システムにおいて切替えることができ、ここで、より安定な基本リナックス・オペレーティング・システムは、そのOS環境において実行される外部モジュール及びドライバを呼び出すことができ、オペレーティング・システムは、前記のドライバ又はモジュールの実行中にプログラミング・エラー通知が有効化されるモードに切替わることができる。
一実施形態において、活性情報のセーブ及び復元は、活性指示レジスタの読出し及び書込みによって提供される。1つの実施形態により、SPR(専用レジスタ)命令又は制御(CONTROL)命令からの移動又はそれへの移動を提供することができる。一実施形態により、システムは、活性命令からの移動を用いて、活性情報をメモリ内に(又はレジスタ内に)セーブすることができる。別の実施形態により、活性情報は、スーパバイザ・モードへのコンテキスト切替えが行われるときに、活性指示レジスタから状態セーブ/復元レジスタ(SRR)にコピーすることができる。活性情報は、スーパバイザ・モードからのコンテキスト切替えが行われるときに、状態セーブ/復元レジスタ(SRR)から活性指示レジスタにコピーすることができる(rfi/hrfi)。
活性情報をサーブするための一実施形態において、明示的な活性指示レジスタは何ら維持されない。その代り、暗黙状態から情報を取得し、活性インジケータ命令からの移動が行われるときに活性指示レジスタを構築するための論理が含まれる。
好ましくは、中断されているプログラム(X)に関してどのアーキテクチャ化レジスタが有効化されているか又は無効化されているかの指標が退避領域にセーブされ、コンテキスト切替え中にフェッチされる新しいプログラム(Y)に関して、どのアーキテクチャ化レジスタが有効化されているか又は無効化されているかの指標が退避領域から取得され、ここで退避領域は、オペレーティング・システム(OS)にとって使用可能なアーキテクチャ化レジスタの場所又は主記憶装置の場所として実装することができる。指標は、各ビットがアーキテクチャ化レジスタ・エントリ又は範囲に対応するビット有効フィールド(
bit significant field)、又それ以外に有効化された/アクティブなアーキテクチャ化レジスタを指示するものとすることができる。一実施形態において、OSによって決定されたサブセットのみを有効化することができる。一実施形態において、マルチスレッド・プロセッサの各スレッドが、それぞれの有効化、無効化インジケータのセットを有する。別の実施形態において、アクティブなプログラム又はスレッドのアクティブ・インジケータの値は、アクティブ・プログラム又はスレッドが使用可能な機械語命令によって明示的に設定することができる。
一実施形態において、コンテキスト切替えは、完全にハードウェアによって実行することができる。ISAは、セーブし復元する必要があるアーキテクチャ化状態情報を指定する。退避領域はハードウェアに対して指定される。コンテキスト切替えが行われるときにはいつでも、現行状態が退避領域にセーブされ、新しい状態が退避領域から取得される。一例において、アーキテクチャ的に指定された退避領域、又は退避領域のレベルが存在し、指定されたレベルにおいてプログラムが実行される。例えばタイマー・イベントによって起動される割り込みは、プログラムに関する状態情報をセーブさせ、且つ、別のレベルにおけるオペレーティング・システム(OS)を、セーブされたその別のレベルに関する状態情報を取得して次にOSの実行を開始することによって起動させる。
一実施形態において、コンテキスト切替えは、少なくとも部分的にソフトウェアによって実行される。コンテキスト切替えが実行されると、現在のレベルの状態情報がソフトウェアによってセーブされ、新しいレベルに関する状態情報がソフトウェアによって取得される。
状態をセーブし復元するソフトウェアを支援するために、ときには特別な命令がISAによって与えられることがある。一実施形態において、ISAの一般レジスタの活性の指標を保持するための特別なレジスタをPowerPC ISAのために設けることができる。この特別なレジスタは新しいMFSPR命令によってメモリにセーブすることができ、この特別なレジスタは新しいMTSPR命令によってメモリからロードすることができる。
mfspr
専用レジスタ(x’7C00 02A6’)からの移動
Figure 0006095670

注: *これは分割フィールドである。
n ← spr[5−9] || spr[0−4]
rD ← SPR(n)
PowerPC UISAにおいて、SPRフィールドは、表8−9に示されるようにコード化された専用レジスタであることを示す。指定された専用レジスタのコンテンツはrD内に配置される。新しいLIR SPRフィールド(LR)は、活性専用レジスタを識別する。
Figure 0006095670

**注:SPR数の2つの5ビットの半部分の順序は、実際の命令コード化と比べて逆である。
SPRフィールドが表8−9に示す値以外の任意の値を含む(且つプロセッサがユーザ・モードにある)場合、以下のうちの1つが起る。
・システムの不正命令エラー・ハンドラが起動される。
・システムのスーパバイザ・レベルの命令エラー・ハンドラが起動される。
・結果が境界未定義になる。
他の変更されたレジスタ:
・なし
簡略化ニーモニックス:
mfxer rDは、mfspr rD,1に等価である
mflr rDは、mfspr rD,8に等価である
mfctr rDは、mfspr rD,9に等価である。
ダブルワードをストアする DS形式
Figure 0006095670

If RA = 0 then b ← 0
else b ← (RA)
EA ← b + EXTS(DS || 0b00)
MEM(EA, 8) ← (RS)
有効アドレス(EA)を和(RA|0)+(DS||0b00)とする。(RS)はEAでアドレス指定された記憶装置内のダブルワードにストアされる。
変更された特別なレジスタ:
なし
専用レジスタからの移動
XFX形式
Figure 0006095670

n ← spr5:9 || spr0:4
if length(SPR(n)) = 64 then
RT ← SPR(n)
else
RT ← 320 || SPR(n)
SPRフィールドは、以下の表に示すようにコード化された専用レジスタを表す。指定された専用レジスタのコンテンツはレジスタRT内に配置される。32ビット長の専用レジスタに関して、RTの下位32ビットが専用レジスタのコンテンツを受取り、RTの上位32ビットがゼロに設定される。新しいLIR SPRフィールド(LR)を追加して、現行のアーキテクチャ化レジスタ活性指標を保持するSPRを指定することができ、ここで、例えば、1である各ビットは、そのアーキテクチャ化レジスタが有効化されていないことを示す。
Figure 0006095670
専用レジスタへの移動 XFX形式
Figure 0006095670

n ← spr5:9||spr0:4
if n = 13 then see Book III−S(Power ISMTM Version 2.06 Revision B)
else
if length(SPR(n)) = 64 then
SPR(n) ← (RS)
else
SPR(n) ← (RS)32:63
SPRフィールドは、以下の表に示すようにコード化された専用レジスタを表す。SPRフィールドが13(AMR<S>を表す)を含まない限り、レジスタRSのコンテンツは指定された専用レジスタ内に配置される。32ビット長の専用レジスタに関して、RSの下位32ビットがSPR内に配置される。AMR(オーソリティ・マスク・レジスタ)がサーバ環境における「記憶保護」のために用いられる。新しいLIR SPRフィールド(LR)を追加して、新しいアーキテクチャ化レジスタ活性指標を保持するSPRを指定することができ、ここで、例えば、1である各ビットは、そのアーキテクチャ化レジスタが有効化されていないことを示す。
Figure 0006095670
1つの実施形態により、LIR(SRR0_LIVENESS)レジスタが書込まれるとき、書込まれたLIR値において活性でないと指示される全てのレジスタはもはや活性ではないとの指示が行われ、活性ではないと指示されたアーキテクチャ化レジスタに対応するいずれの物理レジスタも随意に割当てを解除することができる。
1)書込みの実行の前には活性でなく、且つ2)LIRレジスタに書込まれた値で活性であると指示されるレジスタを指示する書込み操作は、1つの実施形態においては対応するLIRエントリを変更せず、又は、別の実施形態においてはプログラミング・エラーを示す通知イベントを生じさせる。
制御操作のコンテキスト切替え又は移行は、ソフトウェア、ファームウェア、又はハードウェア回路で実装することができる。ハードウェア実装は、無効化されたアーキテクチャ化レジスタの物理レジスタを、アーキテクチャ化レジスタ及びリネーム・レジスタの両方のための、他のスレッドによる使用のための使用可能物理レジスタのプールに戻すために最終使用情報を有利に利用することができるばかりでなく、コンテキスト切替え中に、有効化されたハードウェア・レジスタを、コンテキスト切り替え中に、セーブし復元することのみを行う。PowerPC ISAに基づくプログラムAからプログラムBへの移行(コンテキスト切替え)に関する実施例A1では、初めにプログラムAの状態情報が以下のようにセーブされる。
Set up context save base address for module 1 in r11
Then
stw r13,GPR13(r11);
stw r14,GPR14(r11);
stw r15,GPR15(r11);
stw r12,GPR12(r11);
stw r9,GPR9(r11);
mfspr r10,SPRN_SPRG_SCRATCH0;
stw r10,GPR10(r11);
mfspr r12,SPRN_SPRG_SCRATCH1;
stw r12,GPR11(r11);
次に、プログラムBの状態情報が以下のようにロードされる。
Set up context save base address for module 2 in r11
Then
lw r13,GPR13(r11);
lw r14,GPR14(r11);
lw r15,GPR15(r11);
lw r12,GPR12(r11);
lw r9,GPR9(r11);
mfspr r10,SPRN_SPRG_SCRATCH0;
mfspr r12,SPRN_SPRG_SCRATCH1;
rfi
実施例A2において、プログラムBからプログラムAに戻る遷移は以下のように遂行される。
初めにプログラムBに関する状態情報が以下のようにセーブされる。
Set up context save base address for module 2 in r11
Then
stw r13,GPR13(r11);
stw r14,GPR14(r11);
stw r15,GPR15(r11);
stw r12,GPR12(r11);
stw r9,GPR9(r11);
mfspr r10,SPRN_SPRG_SCRATCH0;
stw r10,GPR10(r11);
mfspr r12,SPRN_SPRG_SCRATCH1;
stw r12,GPR11(r11);
次に、プログラムAに関する状態情報が以下のようにロードされる。
Set up context save base address for module 2 in r11
Then
lw r13,GPR13(r11);
lw r14,GPR14(r11);
lw r15,GPR15(r11);
lw r12,GPR12(r11);
lw r9,GPR9(r11);
mfspr r10,SPRN_SPRG_SCRATCH0;
mfspr r12,SPRN_SPRG_SCRATCH1;
rfi
プログラムAからプログラムBへの移行(コンテキスト切替え)に関する実施例A1、A2において、アーキテクチャ化レジスタの各々に関して、そのアーキテクチャ化レジスタが有効化されているか又は無効化されているかの状態情報がセーブされた。しかし、LIRに基づくと、以下のように実施例A2に示すようにLIRが活性を発見するために問い合わせたので、コンテキスト切替えは無効化レジスタをセーブする必要がない
プログラムAからプログラムBへの移行(コンテキスト切替え)に関する実施例B1では、初めにプログラムAの状態情報が以下のようにセーブされる。
Set up context save base address
for module 1 in r11
stw r13,GPR13(r11);
stw r14,GPR14(r11);
stw r15,GPR15(r11);
stw r12,GPR12(r11);
stw r9,GPR9(r11);
mfspr r10,SPRN_SPRG_SCRATCH0;
stw r10,GPR10(r11);
mfspr r12,SPRN_SPRG_SCRATCH1;
stw r12,GPR11(r11);
mfspr r12, SRR_LIVENESS
stw r12, SRR_LIVENESS(r11)
この実施例において、活性情報は、mfspr12命令によって取得され、stw r12命令によってストアされるので、プログラムAへの最終的な戻りに対して使用可能となる。次にプログラムBの状態情報が以下のようにロードされる。
Set up context save base address for module 2 in r11
Then
lw r12,GPR13(r11);
Mtspr SRR_LIVENESS
lw r13,GPR13(r11);
lw r14,GPR14(r11);
lw r15,GPR15(r11);
lw r12,GPR12(r11);
lw r9,GPR9(r11);
mfspr r10,SPRN_SPRG_SCRATCH0;
mfspr r12,SPRN_SPRG_SCRATCH1;
rfi
状態情報のロードにおいて、lw r12が、プログラムBに関するセーブされたLIR状態情報のアドレスを与え、Mtspr命令が、退避領域からLIRをロードする。
ハードウェア実装において、移行は、論理回路によって行うことができる。1つの実施形態において、初めにターゲット・プログラムに関するLIRがロードされ、活性レジスタのみがロードされる。一実施形態において、移行されるプログラムに対しては活性レジスタのみがセーブされる。
一実施形態において、実行中のプログラムに関して活性情報501が維持され(410)、この方法は、プロセッサによって現行オペランド状態情報501、503を維持すること(410)を含み、この現行オペランド状態情報は、対応する現行オペランド507が第1のプログラム・モジュール600による使用のために有効化505されているか又は無効化506されているかのいずれであるかを示すものであり、第1のプログラム・モジュール600は、命令セット・アーキテクチャ(ISA)の機械語命令を含み、第1のプログラム・モジュール600は、プロセッサによって現在実行中である(602)。現行オペランドは、第1のプログラム・モジュールの機械語命令によってアクセスされ(605)、このアクセスすることは、現行オペランド状態情報501、503を用いて(504)、以前にストアされた現行オペランド値が第1のプログラム・モジュールによってアクセス可能であるかどうか(505、506)を判断することを含む。
一実施形態において、現行オペランド507が無効化506されていることに応答して、上記のアクセスすることは、アーキテクチャ指定値411を返すこと、及び通知動作508を行うことのうちの少なくとも1つを含み、ここで、アーキテクチャ指定値411は、未定義値、ゼロ値、全て「1」から成る値、又はプログラム指定デフォルト値のうちのいずれかであり、通知動作508は、例外を発生すること、例外を抑制すること、機械状態の制御下で例外を発生及び抑制すること、デバッグ情報を与えること、及び無効化オペランドへのアクセスの発生を示すように少なくとも1つのレジスタを設定することのうちのいずれか1つである。
一実施形態において、プログラム実行602は、第1のプログラム・モジュール600から第2のプログラム・モジュール601へ移行され(603)、第1のプログラム・モジュール600の現行オペランド状態情報501、503をコンテキスト切替え退避領域420内にセーブすること(604)と、コンテキスト切替え退避領域420から、新しいオペランド状態情報を、実行される第2のプログラムの現行オペランド状態情報としてロードすること(701、702)と、ロードされた現行オペランド状態情報501、503を用いて第2のプログラム601の実行を開始すること(703)と、を含む。
一実施形態において、実行を移行すること(603、703)は、コンテキスト切替え操作であり、ここで現行オペランドは、命令400によって識別される一般レジスタ403のアーキテクチャ化された一般レジスタ値、又は命令600によって識別される浮動小数点レジスタのアーキテクチャ化された浮動小数点レジスタ値のうちのいずれかで構成され、ここで実行を移行することは、第1のプログラム・モジュール600のプログラム・カウンタ値及び有効化現行オペランド403の現行オペランド値をコンテキスト切替え退避領域420内にセーブすることと、コンテキスト切替え退避領域420から、新しい有効オペランドの新しいオペランド値を、実行される第2のプログラム601の現行オペランド403の現行オペランド値としてロードすること(701、702)とをさらに含み、ここで、開始される第2のプログラム601の実行(602)は、ロードされた現行オペランド403を使用する。
一実施形態において、現行オペランド状態情報501、503は、現行オペランド状態情報501を現行プログラム600、601によって有効化状態と無効化状態との間で変えることができるかどうかを制御するためのオペランド有効化制御503をさらに含む。
一実施形態において、第1のオペランド無効化命令801が実行されるとき、この実行は、第1のオペランド403の現行オペランド状態情報501により第1のオペランドを無効化させ、ここで無効化オペランド403の読み出しは、アークテクチャ依存デフォルト値411を返し、第2のオペランド有効化命令806が実行されるとき、この実行は、第2のオペランドの現行オペランド状態情報501により第2のオペランド403を有効化(505)させ(807)、ここで有効化オペランドの読み出しは、以前にストアされた値を有効化オペランド403に返す。
一実施形態において、デフォルト値411は、アーキテクチャ未定義値、アーキテクチャ定義デフォルト値レジスタに以前にストアされた値、全て「1」、全て「0」、インクリメント値又はディクリメント値のうちのいずれかで構成され、ここでインクリメント値は読み出しアクセス毎にインクリメントされ、ディクリメント値は読み出しアクセス毎にディクリメントされる。
一実施形態において、第1のオペランド無効化命令はプリフィックス命令800であり、プリフィックス命令800の実行は、第1のオペランドがプログラム順序においてプリフィックス命令に続く次の順次命令801による使用の後で無効化されることをプロセッサに示す。
一実施形態において、無効化オペランドに対する書込み操作は、無効化オペランドを有効化させ、ここで第2のオペランド有効化命令806は、第2のオペランド503に書込むための書込み命令である。
一実施形態において、無効化アーキテクチャ化レジスタに対するアクセスにより、プログラム例外が示されるようにされる。
一実施形態において、無効化アーキテクチャ化レジスタは、無効化アーキテクチャ化レジスタに書込みを行わないレジスタ有効化命令によって有効化される。
オペレーティング・システムのプログラマがアセンブラ言語で書くような、関数及び命令の商業的実装において、記憶媒体114(主記憶装置又は主メモリとしても知られる)内にストアされるこれらの命令形式は、z/アーキテクチャIBMサーバ、PowerPC IBMサーバにおいて、又は代替的に他のアーキテクチャを実行する機械においてネイティブに実行することができる。これらは、既存の及び将来のIBMサーバにおいて、及びIBMの他の機械(例えば、pSeries(登録商標)サーバ及びxSeries(登録商標)サーバ)上で、エミュレートすることができる。これらは、一般に実行がエミュレーション・モードで行われる機械において実行することができる。
エミュレーション・モードでは、エミュレートされる特定の命令がデコードされ、サブルーチン又はドライバの場合のように個々の命令を実装するサブルーチンがC構築され、又は、本発明の実施形態の説明を理解した後の当業者の技能の範囲内で、特定のハードウェアのためのドライバを準備するためにその他の何らかの技術が用いられる。
さらに、上述の種々の実施形態は単なる例である。これらの実施形態に対して、本発明の趣旨から逸脱しない多くのバリエーションが存在し得る。例えば、本明細書では論理的に分割された環境を説明することができるが、これは1つの例に過ぎない。本発明の態様は、複数のゾーンを有する他の環境、及び分割型環境を含む多くの型式の環境に対して有益である。さらに、中央プロセッサ複合体が存在せずに、互いに結合された複数のプロセッサが存在してもよい。さらに、本発明の1つ又は複数の態様は、単一プロセッサ環境にも適用可能である。
本明細書では特定の環境を説明したが、やはり、これらの環境に対する多くのバリエーションを、本発明の趣旨から逸脱せずに実装することができる。例えば、環境が論理的に分割される場合、より多数の又はより少数のパーティションを環境に含めることができる。さらに、互いに結合された複数の中央処理複合体が存在してもよい。これらは、本発明の趣旨から逸脱せずに実装することができるバリエーションの幾つかに過ぎない。さらに他のバリエーションも可能である。例えば、本明細書で説明したコントローラは、命令をシリアル化して一度に1つのIDTE命令を実行するが、別の実施形態においては、一度に複数の命令を実行することができる。さらに、この環境は複数のコントローラを含むことができる。さらにまた、システム内で複数の静止要求(1つ又は複数のコントローラから)が同時に未処理であってもよい。さらなるバリエーションもまた可能である。
本明細書で用いる場合、「処理ユニット」という用語は、ページング可能エンティティ、例えば、ゲスト、プロセッサ、エミュレータ、及び/又は他の同様の構成要素を含む。さらに、「処理ユニットによって」という用語は、処理ユニットの代わりに、を含む。「バッファ」という用語は、記憶装置の領域、並びに、アレイを含むがそれに限定されない異なる型式のデータ構造体を含み、「テーブル」という用語は、テーブル型以外のデータ構造体を含むことができる。さらに、命令は、レジスタ以外の、情報を指定するためのものを含むことができる。さらに、ページ、セグメント及び/又は領域は、本明細書で説明したのとは異なるサイズにすることができる。
本発明の1つ又は複数の機能は、ソフトウェア、ファームウェア、又はそれらのいくつかの組合せで実装することができる。さらに、1つ又は複数の機能をエミュレートすることができる。
本発明の1つ又は複数の態様は、例えば、コンピュータ使用可能媒体を有する製品(例えば、1つ又は複数のコンピュータ・プログラム製品)に含めることができる。その媒体は、内部に具体化された、例えば、本発明の機能を提供し促進するコンピュータ可読プログラム・コード手段又は論理(例えば、命令、コード、コマンドなど)を有する。製品はコンピュータ・システムの一部分として含めることができ、又は単独で販売することができる。媒体(有形記憶媒体としても知られる)は、固定又は携帯媒体として記憶装置120上に実装することができ、読み出し専用メモリ(ROM)116内、ランダム・アクセス・メモリ(RAM)114内に実装することができ、又は、例えば、CPU(110)、I/Oアダプタ118上のコンピュータ・チップにストアすることができる。
さらに、本発明の機能を実施するための、機械によって実行可能な命令の少なくとも1つのプログラムを具体化した、機械によって可読な記憶媒体を含む少なくとも1つのプログラム記憶装置120を提供することができる。
本明細書で示したフロー図は単なる例である。それらの中で説明したこれらの図又はステップ(又は操作)に対して、本発明の趣旨から逸脱しない多くのバリエーションが存在し得る。例えば、ステップは異なる順序で実行することができ、又はステップを追加し、削除し又は修正することができる。これらのバリエーションの全ては、特許請求される本発明の一部分と見なされる。
本明細書において、好ましい実施形態を示し詳しく説明したが、本発明の趣旨から逸脱せずに種々の修正、付加、置換などを行うことができ、従って、これらは添付の特許請求の範囲において定められる本発明の範囲に入るものと見なされることが、当業者には明らかとなろう。
100:データ処理システム
112:相互接続(システム・バス)
120:記憶装置
134:通信アダプタ
200:スーパースカラ・プロセッサ
204:命令順序付け論理(ISL)
214:レジスタ管理ユニット
215:マッパ・クラスタ
223:マルチプレクサ
224:一般実行ユニット(一般実行エンジン)
300:プロセッサ・ユニット
305:メモリ・ユニット
307:関数ユニット
309:分岐ユニット
400:設計機械語命令
504:コンパレータ

Claims (10)

  1. 実行中のプログラムに関して活性情報を維持するための、コンピュータ実施の方法であって、
    プロセッサによって、対応する現行オペランドが再使用されるか否かを示す現行オペランド状態情報を維持することであって、再使用される現行オペランドは、第1のプログラム・モジュールによる使用のために有効化されており、再使用されない現行オペランドは、前記第1のプログラム・モジュールによる使用のために無効化されており、前記第1のプログラム・モジュールは、命令セット・アーキテクチャ(ISA)の機械語命令を含み、前記第1のプログラム・モジュールは、前記プロセッサによって現在実行中である、維持することと、
    前記第1のプログラム・モジュールの機械語命令によって現行オペランドにアクセスすることであって、前記アクセスすることは、前記現行オペランド状態情報を用いて、以前にストアされた現行オペランド値が前記第1のプログラム・モジュールによってアクセス可能であるかどうか判断することを含む、アクセスすることと、
    オペランド無効化命令を実行することであって、前記実行は、再使用されないオペランドの現行オペランド状態情報により前記再使用されないオペランドを無効化させ、ここで無効化オペランドの読み出しは、アーキテクチャ依存デフォルト値を返す、前記オペランド無効化命令を実行することと、
    オペランド有効化命令を実行することであって、前記実行は、再使用されるオペランドの現行オペランド状態情報により前記再使用されるオペランドを有効化させ、ここで有効化オペランドの読み出しは、前記有効化オペランドに以前にストアされた値を返す、前記オペランド有効化命令を実行することと、
    を含む方法。
  2. 前記現行オペランドが無効化されていることに応答して、前記アクセスすることが、
    a)アーキテクチャ指定値を返すことであって、前記アーキテクチャ指定値が、未定義値、ゼロ値、全て「1」から成る値、又はプログラム指定デフォルト値のうちのいずれかである、アーキテクチャ指定値を返すことと、
    b)通知を行うことであって、前記通知が、例外を発生すること、例外を抑制すること、機械状態の制御下で例外を発生し抑制すること、デバッグ情報を提供すること、及び無効化オペランドへのアクセスの発生を示すように少なくとも1つのレジスタを設定すること、のうちのいずれかである、通知を行うことと、
    を含む、a)及びb)のうちの少なくとも1つを含むこと、をさらに含む、請求項1に記載の方法。
  3. プログラム実行を前記第1のプログラム・モジュールから第2のプログラム・モジュールに移行することをさらに含み、前記移行することは、
    a)前記第1のプログラム・モジュールの前記現行オペランド状態情報をコンテキスト切替え退避領域にセーブすることと、
    b)前記コンテキスト切替え退避領域から、新しいオペランド状態情報を、実行される第2のプログラムの現行オペランド状態情報としてロードすることと、
    前記ロードされたオペランド状態情報を用いて前記第2のプログラムの実行を開始することと、
    を含むa)からb)を実施することを含む、
    請求項1に記載の方法。
  4. 前記実行を移行することは、コンテキスト切替え操作であり、前記現行オペランドは、
    命令によって識別される一般レジスタのアーキテクチャ化された一般レジスタ値、又は命令によって識別される浮動小数点レジスタのアーキテクチャ化された浮動小数点レジスタ値のうちのいずれかで構成され、ここで前記実行を移行することは、
    c)前記第1のプログラム・モジュールのプログラム・カウンタ値及び有効化現行オペランドの現行オペランド値を、前記コンテキスト切替え退避領域にセーブすることと、
    d)前記コンテキスト切替え退避領域から、新しい有効化オペランドの新しいオペランド値を、実行される前記第2のプログラムの現行オペランドの現行オペランド値としてロードすることと、
    をさらに含み、開始される前記第2のプログラムの実行は、前記ロードされた現行オペランドを使用する、
    請求項3に記載の方法。
  5. 前記現行オペランド状態情報は、前記現行オペランド状態情報が現行プログラムによって有効化状態と無効化状態の間で変えることができるかどうかを制御するためのオペランド有効化制御をさらに含む、請求項4に記載の方法。
  6. 前記デフォルト値は、アーキテクチャ未定義値、アーキテクチャ定義デフォルト値レジスタ内に以前にストアされた値、全て「1」、全て「0」、インクリメント値又はディクリメント値のうちのいずれかで構成され、ここで前記インクリメント値は、読み出しアクセス毎にインクリメントされ、前記ディクリメント値は、読み出しアクセス毎にディクリメントされる、請求項に記載の方法。
  7. 記オペランド無効化命令は、プリフィックス命令であり、前記プリフィックス命令の実行は、プログラム順序において前記プリフィックス命令に続く次順命令による使用の後で前記再使用されないオペランドが無効化されることを前記プロセッサに示す、請求項に記載の方法。
  8. 無効化オペランドに対する書込み操作は、前記無効化オペランドを有効化させ、ここで前記オペランド有効化命令は、前記再使用されるオペランドに書込むための書込み命令である、請求項に記載の方法。
  9. 実行中のプログラムに関して活性情報を維持するためのコンピュータ・システムであって、
    主記憶装置と通信するように構成されたプロセッサを含み、前記プロセッサは、命令フェッチャ、命令オプティマイザ、及びオプティマイズされた命令を実行するための1つ又は複数の実行ユニットを含み、前記プロセッサは、請求項1から請求項までのいずれかに記載の方法を実施するように構成される、
    コンピュータ・システム。
  10. 実行中のプログラムに関して活性情報を維持するためのコンピュータ・プログラムであって、請求項1から請求項までのいずれかに記載の方法を処理回路に実行させるためのコンピュータ・プログラム。
JP2014532528A 2011-10-03 2012-09-24 コンピュータ・システム内のオペランド活性情報の維持 Expired - Fee Related JP6095670B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/251,441 2011-10-03
US13/251,441 US10078515B2 (en) 2011-10-03 2011-10-03 Tracking operand liveness information in a computer system and performing function based on the liveness information
PCT/IB2012/055070 WO2013050901A1 (en) 2011-10-03 2012-09-24 Maintaining operand liveness information in a computer system

Publications (2)

Publication Number Publication Date
JP2015501019A JP2015501019A (ja) 2015-01-08
JP6095670B2 true JP6095670B2 (ja) 2017-03-15

Family

ID=47993791

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014532528A Expired - Fee Related JP6095670B2 (ja) 2011-10-03 2012-09-24 コンピュータ・システム内のオペランド活性情報の維持

Country Status (5)

Country Link
US (2) US10078515B2 (ja)
EP (1) EP2764433A4 (ja)
JP (1) JP6095670B2 (ja)
CN (1) CN103842959B (ja)
WO (1) WO2013050901A1 (ja)

Families Citing this family (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8782434B1 (en) 2010-07-15 2014-07-15 The Research Foundation For The State University Of New York System and method for validating program execution at run-time
US9122873B2 (en) 2012-09-14 2015-09-01 The Research Foundation For The State University Of New York Continuous run-time validation of program execution: a practical approach
US9069782B2 (en) 2012-10-01 2015-06-30 The Research Foundation For The State University Of New York System and method for security and privacy aware virtual machine checkpointing
US9372695B2 (en) 2013-06-28 2016-06-21 Globalfoundries Inc. Optimization of instruction groups across group boundaries
US9619230B2 (en) 2013-06-28 2017-04-11 International Business Machines Corporation Predictive fetching and decoding for selected instructions
US9348596B2 (en) 2013-06-28 2016-05-24 International Business Machines Corporation Forming instruction groups based on decode time instruction optimization
KR20150019349A (ko) * 2013-08-13 2015-02-25 삼성전자주식회사 다중 쓰레드 실행 프로세서 및 이의 동작 방법
US9958932B2 (en) 2014-11-20 2018-05-01 Apple Inc. Processor including multiple dissimilar processor cores that implement different portions of instruction set architecture
US9928094B2 (en) 2014-11-25 2018-03-27 Microsoft Technology Licensing, Llc Hardware accelerated virtual context switching
US9696992B2 (en) * 2014-12-23 2017-07-04 Intel Corporation Apparatus and method for performing a check to optimize instruction flow
US10318356B2 (en) * 2016-03-31 2019-06-11 International Business Machines Corporation Operation of a multi-slice processor implementing a hardware level transfer of an execution thread
US11934945B2 (en) 2017-02-23 2024-03-19 Cerebras Systems Inc. Accelerated deep learning
US11488004B2 (en) 2017-04-17 2022-11-01 Cerebras Systems Inc. Neuron smearing for accelerated deep learning
JP6854473B2 (ja) 2017-04-17 2021-04-07 セレブラス システムズ インク. 加速化ディープラーニングのデータフロー・トリガー・タスク
EP3607506B1 (en) 2017-04-17 2021-07-14 Cerebras Systems Inc. Fabric vectors for deep learning acceleration
US10564977B2 (en) 2017-04-18 2020-02-18 International Business Machines Corporation Selective register allocation
US10572265B2 (en) 2017-04-18 2020-02-25 International Business Machines Corporation Selecting register restoration or register reloading
US10545766B2 (en) 2017-04-18 2020-01-28 International Business Machines Corporation Register restoration using transactional memory register snapshots
US10782979B2 (en) 2017-04-18 2020-09-22 International Business Machines Corporation Restoring saved architected registers and suppressing verification of registers to be restored
US10963261B2 (en) 2017-04-18 2021-03-30 International Business Machines Corporation Sharing snapshots across save requests
US11010192B2 (en) 2017-04-18 2021-05-18 International Business Machines Corporation Register restoration using recovery buffers
US10838733B2 (en) 2017-04-18 2020-11-17 International Business Machines Corporation Register context restoration based on rename register recovery
US10649785B2 (en) 2017-04-18 2020-05-12 International Business Machines Corporation Tracking changes to memory via check and recovery
US10540184B2 (en) 2017-04-18 2020-01-21 International Business Machines Corporation Coalescing store instructions for restoration
US10489382B2 (en) 2017-04-18 2019-11-26 International Business Machines Corporation Register restoration invalidation based on a context switch
US10552164B2 (en) 2017-04-18 2020-02-04 International Business Machines Corporation Sharing snapshots between restoration and recovery
US10740108B2 (en) 2017-04-18 2020-08-11 International Business Machines Corporation Management of store queue based on restoration operation
US10372456B2 (en) * 2017-05-24 2019-08-06 Microsoft Technology Licensing, Llc Tensor processor instruction set architecture
US20190205061A1 (en) * 2017-12-29 2019-07-04 Intel Corporation Processor, method, and system for reducing latency in accessing remote registers
WO2020044152A1 (en) 2018-08-28 2020-03-05 Cerebras Systems Inc. Scaled compute fabric for accelerated deep learning
WO2020044208A1 (en) 2018-08-29 2020-03-05 Cerebras Systems Inc. Isa enhancements for accelerated deep learning
US11328208B2 (en) 2018-08-29 2022-05-10 Cerebras Systems Inc. Processor element redundancy for accelerated deep learning
GB2580327B (en) * 2018-12-31 2021-04-28 Graphcore Ltd Register files in a multi-threaded processor
US11556374B2 (en) 2019-02-15 2023-01-17 International Business Machines Corporation Compiler-optimized context switching with compiler-inserted data table for in-use register identification at a preferred preemption point
US11269634B2 (en) * 2019-08-05 2022-03-08 Arm Limited Data structure relinquishing
CN110647361B (zh) * 2019-09-09 2021-08-27 中国人民解放军国防科技大学 一种空闲物理寄存器的获取方法和装置
US11204767B2 (en) 2020-01-06 2021-12-21 International Business Machines Corporation Context switching locations for compiler-assisted context switching
US11086630B1 (en) 2020-02-27 2021-08-10 International Business Machines Corporation Finish exception handling of an instruction completion table
GB2596872B (en) * 2020-07-10 2022-12-14 Graphcore Ltd Handling injected instructions in a processor
US20220206855A1 (en) * 2020-12-29 2022-06-30 Advanced Micro Devices, Inc. Offloading computations from a processor to remote execution logic

Family Cites Families (59)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61235985A (ja) 1985-04-11 1986-10-21 Nec Corp ベクトルプロセツサ
JPH0353328A (ja) 1989-07-20 1991-03-07 Hitachi Ltd レジスタ退避回復方法ならびに処理装置
US5303358A (en) * 1990-01-26 1994-04-12 Apple Computer, Inc. Prefix instruction for modification of a subsequent instruction
US5095526A (en) 1990-01-26 1992-03-10 Apple Computer, Inc. Microprocessor with improved interrupt response with interrupt data saving dependent upon processor status
JPH05173788A (ja) 1991-06-21 1993-07-13 Toshiba Corp 計算機装置
US5539911A (en) 1991-07-08 1996-07-23 Seiko Epson Corporation High-performance, superscalar-based computer system with out-of-order instruction execution
JPH064305A (ja) 1992-06-22 1994-01-14 Nec Corp プロセッサのレジスタ入替え判別回路
JPH06348509A (ja) 1993-06-14 1994-12-22 Hitachi Ltd スタックサイズの変更方法
DE4434895C2 (de) 1993-12-23 1998-12-24 Hewlett Packard Co Verfahren und Vorrichtung zur Behandlung von Ausnahmebedingungen
US5590352A (en) 1994-04-26 1996-12-31 Advanced Micro Devices, Inc. Dependency checking and forwarding of variable width operands
US5481719A (en) 1994-09-09 1996-01-02 International Business Machines Corporation Exception handling method and apparatus for a microkernel data processing system
US5812811A (en) 1995-02-03 1998-09-22 International Business Machines Corporation Executing speculative parallel instructions threads with forking and inter-thread communication
JP3711422B2 (ja) 1995-12-20 2005-11-02 セイコーエプソン株式会社 情報処理回路
US6314511B2 (en) * 1997-04-03 2001-11-06 University Of Washington Mechanism for freeing registers on processors that perform dynamic out-of-order execution of instructions using renaming registers
JPH10283188A (ja) 1997-04-03 1998-10-23 Matsushita Electric Ind Co Ltd プロセッサにおけるレジスタ保護方法
US6094719A (en) 1997-06-25 2000-07-25 Sun Microsystems, Inc. Reducing data dependent conflicts by converting single precision instructions into microinstructions using renamed phantom registers in a processor having double precision registers
US5944810A (en) 1997-06-27 1999-08-31 Sun Microsystems, Inc. Superscalar processor for retiring multiple instructions in working register file by changing the status bits associated with each execution result to identify valid data
US6199156B1 (en) * 1998-12-16 2001-03-06 Bull Hn Information Systems Inc. System for explicitly referencing a register for its current content when performing processor context switch
US6189088B1 (en) 1999-02-03 2001-02-13 International Business Machines Corporation Forwarding stored dara fetched for out-of-order load/read operation to over-taken operation read-accessing same memory location
US6449710B1 (en) 1999-10-29 2002-09-10 Stmicroelectronics, Inc. Stitching parcels
US6393579B1 (en) 1999-12-21 2002-05-21 Intel Corporation Method and apparatus for saving power and improving performance in a collapsable pipeline using gated clocks
US6687806B1 (en) 2000-06-15 2004-02-03 Advanced Micro Devices, Inc. Apparatus and method for generating 64 bit displacement and immediate values
US6748519B1 (en) 2000-06-15 2004-06-08 International Business Machines Corporation Method and apparatus for utilizing renamed registers based upon a functional or defective operational status of the register
EP1199629A1 (en) 2000-10-17 2002-04-24 STMicroelectronics S.r.l. Processor architecture with variable-stage pipeline
US7228403B2 (en) 2000-12-23 2007-06-05 International Business Machines Corporation Method for handling 32 bit results for an out-of-order processor with a 64 bit architecture
DE10102202A1 (de) 2001-01-18 2002-08-08 Infineon Technologies Ag Mikroprozessorschaltung für tragbare Datenträger
US7162621B2 (en) 2001-02-21 2007-01-09 Mips Technologies, Inc. Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration
US6950926B1 (en) 2001-03-02 2005-09-27 Advanced Micro Devices, Inc. Use of a neutral instruction as a dependency indicator for a set of instructions
US20030154419A1 (en) 2002-01-10 2003-08-14 Binyu Zang Register renaming in binary translation using rollback and recovery
US7117346B2 (en) 2002-05-31 2006-10-03 Freescale Semiconductor, Inc. Data processing system having multiple register contexts and method therefor
JP3856737B2 (ja) 2002-07-19 2006-12-13 株式会社ルネサステクノロジ データ処理装置
US7131017B2 (en) 2002-08-16 2006-10-31 Carnegie Mellon University Programmable pipeline fabric having mechanism to terminate signal propagation
US6934830B2 (en) 2002-09-26 2005-08-23 Sun Microsystems, Inc. Method and apparatus for reducing register file access times in pipelined processors
KR20050085281A (ko) 2002-12-04 2005-08-29 코닌클리즈케 필립스 일렉트로닉스 엔.브이. 마이크로프로세서 전력 소비를 제어하는 회로 장치,집적회로 및 프로그램 제품, 프로그램 코드 실행과 발생방법
JP2004220070A (ja) * 2003-01-09 2004-08-05 Japan Science & Technology Agency コンテキスト切り替え方法及び装置、中央演算装置、コンテキスト切り替えプログラム及びそれを記憶したコンピュータ読み取り可能な記憶媒体
US7769885B1 (en) 2003-05-23 2010-08-03 Juniper Networks, Inc. Determining liveness of protocols and interfaces
KR100531314B1 (ko) 2004-03-16 2005-11-29 엘지전자 주식회사 영상표시장치
US20050251662A1 (en) 2004-04-22 2005-11-10 Samra Nicholas G Secondary register file mechanism for virtual multithreading
US7395419B1 (en) 2004-04-23 2008-07-01 Apple Inc. Macroscalar processor architecture
US7284092B2 (en) 2004-06-24 2007-10-16 International Business Machines Corporation Digital data processing apparatus having multi-level register file
US20060174089A1 (en) 2005-02-01 2006-08-03 International Business Machines Corporation Method and apparatus for embedding wide instruction words in a fixed-length instruction set architecture
US20060190710A1 (en) 2005-02-24 2006-08-24 Bohuslav Rychlik Suppressing update of a branch history register by loop-ending branches
US7698536B2 (en) 2005-08-10 2010-04-13 Qualcomm Incorporated Method and system for providing an energy efficient register file
US8296550B2 (en) 2005-08-29 2012-10-23 The Invention Science Fund I, Llc Hierarchical register file with operand capture ports
US7380104B2 (en) 2006-04-25 2008-05-27 International Business Machines Corporation Method and apparatus for back to back issue of dependent instructions in an out of order issue queue
JP2007304663A (ja) 2006-05-08 2007-11-22 Univ Nagoya プロセッサ及びそのデータ処理方法
US7506139B2 (en) 2006-07-12 2009-03-17 International Business Machines Corporation Method and apparatus for register renaming using multiple physical register files and avoiding associative search
US20080148022A1 (en) 2006-12-13 2008-06-19 Arm Limited Marking registers as available for register renaming
US7676653B2 (en) 2007-05-09 2010-03-09 Xmos Limited Compact instruction set encoding
US7818543B2 (en) 2007-07-10 2010-10-19 Globalfoundries Inc. Method and apparatus for length decoding and identifying boundaries of variable length instructions
US7818542B2 (en) 2007-07-10 2010-10-19 Globalfoundries Inc. Method and apparatus for length decoding variable length instructions
US8762692B2 (en) * 2007-09-27 2014-06-24 Intel Corporation Single instruction for specifying and saving a subset of registers, specifying a pointer to a work-monitoring function to be executed after waking, and entering a low-power mode
US8108614B2 (en) 2007-12-31 2012-01-31 Eric Sprangle Mechanism for effectively caching streaming and non-streaming data patterns
US20100312991A1 (en) 2008-05-08 2010-12-09 Mips Technologies, Inc. Microprocessor with Compact Instruction Set Architecture
US20100095286A1 (en) 2008-10-10 2010-04-15 Kaplan David A Register reduction and liveness analysis techniques for program code
JP5471082B2 (ja) 2009-06-30 2014-04-16 富士通株式会社 演算処理装置および演算処理装置の制御方法
US8683180B2 (en) 2009-10-13 2014-03-25 International Business Machines Corporation Intermediate register mapper
US20110161616A1 (en) 2009-12-29 2011-06-30 Nvidia Corporation On demand register allocation and deallocation for a multithreaded processor
US8560816B2 (en) * 2010-06-30 2013-10-15 Oracle International Corporation System and method for performing incremental register checkpointing in transactional memory

Also Published As

Publication number Publication date
EP2764433A4 (en) 2015-06-24
WO2013050901A1 (en) 2013-04-11
US20140095848A1 (en) 2014-04-03
CN103842959B (zh) 2017-05-03
US20130086367A1 (en) 2013-04-04
CN103842959A (zh) 2014-06-04
US10061588B2 (en) 2018-08-28
EP2764433A1 (en) 2014-08-13
US10078515B2 (en) 2018-09-18
JP2015501019A (ja) 2015-01-08

Similar Documents

Publication Publication Date Title
JP6095670B2 (ja) コンピュータ・システム内のオペランド活性情報の維持
US9483267B2 (en) Exploiting an architected last-use operand indication in a system operand resource pool
US9311095B2 (en) Using register last use information to perform decode time computer instruction optimization
US20140047219A1 (en) Managing A Register Cache Based on an Architected Computer Instruction Set having Operand Last-User Information
JP5592015B2 (ja) ハードウェア制限に基づく調整可能なトランザクション・サイズを利用してコードを動的に最適化する装置、方法およびシステム
US9817644B2 (en) Apparatus, method, and system for providing a decision mechanism for conditional commits in an atomic region
US9690589B2 (en) Computer instructions for activating and deactivating operands
US9329869B2 (en) Prefix computer instruction for compatibily extending instruction functionality
US9311084B2 (en) RDA checkpoint optimization
Sharafeddine et al. Disjoint out-of-order execution processor

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20141224

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160308

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160406

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20161004

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161222

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: 20170124

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170214

R150 Certificate of patent or registration of utility model

Ref document number: 6095670

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees