JP2008535074A - 複数の発行ポートを有するプロセッサにおける命令グループの作成 - Google Patents

複数の発行ポートを有するプロセッサにおける命令グループの作成 Download PDF

Info

Publication number
JP2008535074A
JP2008535074A JP2008503571A JP2008503571A JP2008535074A JP 2008535074 A JP2008535074 A JP 2008535074A JP 2008503571 A JP2008503571 A JP 2008503571A JP 2008503571 A JP2008503571 A JP 2008503571A JP 2008535074 A JP2008535074 A JP 2008535074A
Authority
JP
Japan
Prior art keywords
instruction
pool
instructions
pools
target
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2008503571A
Other languages
English (en)
Other versions
JP2008535074A5 (ja
JP5102758B2 (ja
Inventor
オーウェン ロベット、ウィリアム
ハイクニー、デイビッド
エバンス、マシュー
Original Assignee
トランジティブ リミテッド
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 トランジティブ リミテッド filed Critical トランジティブ リミテッド
Priority claimed from PCT/GB2006/001000 external-priority patent/WO2006103395A1/en
Publication of JP2008535074A publication Critical patent/JP2008535074A/ja
Publication of JP2008535074A5 publication Critical patent/JP2008535074A5/ja
Application granted granted Critical
Publication of JP5102758B2 publication Critical patent/JP5102758B2/ja
Active 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • 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
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

動的バイナリ変換のようなプログラムコード変換中に、自動コード生成によって、目標プロセッサ(13)により実行可能な目標コード(21)を生成する。複数の命令ポート(610)は、命令のグループをプロセッサ(13)の複数の機能ユニット(620)へ分散する。階層構造(711〜715)を有する複数のプール(700)を使用することで命令グループ(606)が作成される。各プールは、発行ポートの種々のオーバーラップ部分集合を表す。命令(600)を特定のプールに格納すると、階層において1以上の従属プールにおける空白が減少する。好ましくは、カウンタ値(702)が空白を追跡するためにプールに関連付けられる。格納された命令がプールから選択されることによって、有効な命令グループ(606)が形成される。命令グループは正確にかつ自動的に生成される。復号化エラーおよび機能停止は最小化されるか、完全に避けられる。

Description

本発明は、概してコンピュータとコンピュータソフトウェアの分野、特に、例えばプログラムコードを変換するコードトランスレータ、エミュレータ、およびアクセルレータにおいて有用なプログラムコード変換の方法と装置に関する。
埋込み型及び非埋込み型のCPUにおいては、命令集合アーキテクチャ(ISA)が支配的であり、そのために、性能を「加速」できるか、または一層良いコスト/性能の利点を提供する種々の有能なプロセッサへ「変換」できる(ただしそれらのプロセッサが関連するソフトウェアへ透過的にアクセスできるのを条件として)多数のソフトウェアが存在する。支配的なCPUアーキテクチャも見出され、それらのアーキテクチャは、適時に、それらのISAへロックされ、性能またはマーケットの範囲において展開できない。そのようなCPUは、ソフトウェア指向のプロセッサ・コ・アーキテクチャから有利である。
そのような加速、変換およびコーアーキテクチャの機能を容易にするプログラムコード変換の方法と装置は、たとえば、PCT出願公開WO00/22521および他の出願において開示される。
プログラムコード変換の実施は、対象プロセッサ上での対象プログラムの固有の実行と比べて、この変換プロセスにおいて必然的に経費をもたらす。
多くのプロセッサは、専用浮動少数点演算装置のような特定のタスクを実施するために、専用の機能ユニットを採用する。全てのプロセッサは、有限の資源を有し、および特定の機能ユニットで実行できる命令の種類に関して制約を有するという問題が生じる。さらにパイプラインプロセッサは、単一のクロックサイクルで同時に2個以上の命令で作動できる。そのようなプロセッサは、1サイクルで複数の命令を実行できる。パイプラインプロセッサにおいて1つのグループとして共に実行するために、複数の命令を作成する際に問題が生じる。
特定の例として、Intel (商標、RTM) Itanium (商標、RTM) プロセッサアーキテクチャは、発行ポートの集合を採用し、それらのポートを通して、命令が、プロセッサの機能実行ユニットへ発行される。本発明の背景として、たとえば、www.intel.com から入手できる2001年11月付けの文書245473−003、「ソフトウェア最適化のためのIntel Itanium プロセッサ参照マニュアル(Intel Itanium Processor Reference Manual for Software Optimization)」が優先されるが、そこにおける3.0章が、Itanium アーキテクチャについての機能ユニットと発行ルールを検討している。発行ルールは、各種機能ユニットにより実行される命令の種類、数、クラスを決定する。Itanium プロセッサは、十分にパイプライン化された、少なくとも、整数、メモリ、浮動小数点、および分岐の種類(I、M、FまたはB型)の機能ユニットを提供するので、それぞれの機能ユニットが、クロックサイクル毎に1つの新しい命令を受け入れ可能である(一定の除外付きで)。
命令グループが、その種類の命令用の実行ユニットがあるよりも多くの命令を含む場合、分割発行が生じ、それにより、プロセッサは、対応するユニットを利用することができるまで、1回以上のクロックサイクルの間、機能を停止する。機能停止は、一部のプロセッサ資源または機能ユニットが不必要に使用されないままであるので効率が悪い。逆に、機能ユニットの細区分不足も効率が悪く、プロセッサの潜在的資源を有効に利用できない命令のグループを生成する。
最近では、Intel (RTM) Itanium (RTM) 2 プロセッサを入手できるようになっていて、そのプロセッサは、多数の機能ユニットを有し、かつサイクル毎に一層多くの命令をパイプライン化できる。このために、有効な命令割当を達成することが益々難しくなっている。2004年5月付けの文書251110−003、「ソフトウェア開発と最適化のためのIntel Itanium 2 プロセッサ参照マニュアル(Intel Itanium 2 Processor Reference Manual for Software Development and Optimization)」が参照され、そこにおける3.0章が、Itanium 2 プロセッサの機能ユニットと発行規則を説明している。
プログラムコード変換、および特に動的バイナリ変換(dynamic binary translation)の分野において、実行可能なコードが作動時に自動的に発生する。発生コードを改良するために、特に命令グループを改良または調整するために、人間による介在または見直しの機会は全く無い。
本発明の目的は、プログラムコード変換の性能を改良することにある。好ましい目的は、動的バイナリ変換の性能を改良することにある。本発明の他の好ましい目的は、単一のプロセッササイクルにおいて分散のために複数の命令を含む命令グループを作成するときの効率を改良することにある。特に、複数の発行ポートを通じたパイプラインプロセッサの複数の機能ユニットに対する分散のための命令を作成する有効な方法を提供することが望ましい。さらに、好ましい目的は、プロセッサの複数の機能ユニットを有効に利用する命令グループを作成することにある。
本発明によれば、添付の特許請求の範囲に記載される装置と方法が提供される。本発明の好ましい特徴は、特許請求の範囲および以下の詳細な説明から明らかとなる。
1つの態様において、複数の発行ポートを通じたプロセッサの複数の機能ユニットへの分散のための命令グループを形成する方法が提供される。複数のプールの各々は、1以上の発行ポートに関連付けられ、かつ少なくとも1つの発行ポートを共有する少なくとも第1及び第2のプールを含む。命令は、命令の種類に従ってプールに格納され、命令が第1のプールへ格納されると、第2のプールの占有が減少する。次に、命令グループが、格納された命令から生成される。
他の態様において、複数の発行ポートを通じた目標プロセッサの複数の機能ユニットへの分散のための目標命令の命令グループを、対象プロセッサにより実行可能な対象命令に基づき作成する方法が提供される。この方法は、対象命令から目標命令のブロックを生成することを含む。目標命令の集合が、複数のプールに格納され、各プールは、従属する広域プールよりも少ない命令ポートに関連付けられた上位の狭域プールを有するオーバーラップ階層構造において、発行ポートの部分集合に関連付けられる。従属する広域プールにおける利用性は、階層構造において目標命令の集合の1つを上位の狭域プールに格納することに応答して減少する。命令グループは、格納された目標命令の集合から形成される。
本発明は、上記方法の全てを実施するように構成された計算プラットフォームまで包含する。更に本発明は、上記方法の全てを実施するように構成されたトランスレータ装置、特に動的バイナリ変換まで包含する。
一実施態様において、本発明はASIC(Application-Specific Integrated Circuit )のような専用ハードウェアにおいて提供される。また本発明は、命令を含むコンピュータ読取可能な記憶媒体まで包含し、それらの命令は、計算プラットフォームにより実行されることにより上記方法の全てを実施する。記憶媒体は、適切には、固体媒体(メモリチップ)、光ディスクまたは磁気ディスクのような可搬型記憶装置である。この媒体は、ネットワーク記憶装置、サーバ、または卓上コンピュータにおけるハードディスクのような非携帯型記憶装置でもよい。この媒体は、さらに、インターネットからダウンロードするように、伝送信号に符号化してもよい。
以下の説明は、当業者が本発明を形成及び使用するために提供され、本発明者らによって企図された、本発明を実行するための最良の形態を示す。しかし、種々の変形が可能であることを当業者は理解し得る。本発明の一般的な原理は、改良されたプログラム・コード変換の方法および装置を提供するように本明細書で定義される。
以下の用語において、対象プログラムは、対象プロセッサを含む対象計算プラットフォーム上で実行するように意図される。目標プロセッサを含む目標計算プラットフォームは、動的プログラムコード変換を実施するトランスレータを通して対象プロセッサを実行するのに使用される。トランスレータは、目標コードが目標計算プラットフォーム上で実行可能であるように、対象コードから目標コードへのコード変換を実施する。
図1は、複数の目標レジスタ15を有する目標プロセッサ13と、複数のソフトウェア構成要素17、19、20、21、27を格納するメモリ18とを備える代表的な目標計算プラットフォームを図示する。ソフトウェア構成要素は、オペレーティングシステム20、対象コード17、トランスレータコード19、および変換された目標コード21を含む。
一実施態様において、トランスレータコード19は、対象命令集合アーキテクチャ(ISA)の対象コードを、最適化には関係なく、他のISAの変換された目標コードに変換するエミュレータである。他の実施態様において、トランスレータ19は、プログラムコード最適化を実施することにより、対象コードを、同一のISAそれぞれの目標コードに変換するアクセルレータとして機能する。
トランスレータ19、即ちトランスレータを実現する原始コードのコンパイルバージョン、および変換コード21、即ちトランスレータ19により生成される対象コード17のトランスレーションは、一般的にはマイクロプロセッサまたは他の適切なコンピュータである目標プロセッサ13で稼動するオペレーティングシステム20と連係して実行する。
図1に図示される構造は単なる代表例であり、例えば本発明のソフトウェア、方法およびプロセスは、オペレーティングシステム内またはその下にあるコードで実現してもよいことを理解し得る。対象コード17、トランスレータコード19、オペレーティングシステム20、およびメモリ18の記憶機構は、当業者であれば、いずれの型式でもよいことを理解し得る。
図1に従う装置において、プログラムコード変換は、目標コード21が実行される稼動時に、好ましくは動的に実施される。トランスレータ19は、変換されたプログラム21に従って実行する。トランスレータ19は好ましくは、目標アーキテクチャ用にコンパイルされたアプリケーションとして採用される。対象プログラム17は、目標アーキテクチャ14で実行するために、稼動時にトランスレータ19により変換される。
トランスレータ19を通して対象プログラム17を実行することは、インタリーブされた態様で実行する2つの異なる種類のコード、すなわちトランスレータコード19および目標コード21に関与する。トランスレータコード19は、トランスレータ19の高レベル原始コード実現に基づいて稼動時の前にコンパイラなどにより発生される。対照的に、目標コード21は、変換が行われているプログラムの格納された対象コード17に基づいて、稼動時全体を通して、トランスレータコード19により発生される。
対象プログラム17は、対象プロセッサ(図示されない)で稼動するように意図される。一実施態様において、トランスレータ19は、エミュレータとして機能する。すなわち、トランスレータ19は、対象プロセッサをエミュレートする一方、対象プロセッサ13上で目標コード21として対象プログラム17を実際に実行する。好ましい実施態様において、少なくとも1つの広域レジスタストア27が設けられる(対象レジスタバンク27または抽象レジスタバンク27とも呼ばれる)。多プロセッサ環境において、任意選択的に、1以上の抽象レジスタバンク27が、対象プロセッサのアーキテクチャに従って設けられる。対象プロセッサ状態の表示は、トランスレータ19の構成要素と目標コード21により提供される。すなわち、トランスレータ19は、変数および/またはオブジェクトのような種々の明示的なプログラミング言語デバイスで、対象プロセッサ状態を格納する。トランスレータ19をコンパイルするのに使用されるコンパイラは、どのようにして、その状態と演算が目標コードで実現されるかを判断する。これに比べて、目標コード21は、対象プロセッサ状態を、目標コード21の目標命令により操作される目標レジスタ15と記憶場所18において黙示的に提供する。たとえば、低レベル広域レジスタストア27は、単に、割当てられたメモリの領域である。しかしながら、トランスレータ19の原始コードにおいて、広域レジスタストア27は、より高いレベルでアクセスおよび操作できるデータアレイまたはオブジェクトである。
図2は、本発明の好ましい実施態様に従ってプログラムコード変換において採用される実行制御を図示する概略フロー図である。
図2に示されるように、制御は、最初に、トランスレータ制御ループ190でなされる。ステップ201において、制御ループ190が、トランスレータ19のコード発生機能192を呼出し、そのトランスレータは、対象コード17のブロックを、変換されるコード21の対応するブロックに変換する。ついで、ステップ202において、変換されたコード21のブロックは、目標プロセッサ13で実行される。1つの好ましい実施態様において、変換されたコード21のそれぞれのブロックの最後は、制御を制御ループ201へ戻す命令を含む。言い換えれば、対象コードを変換および実行するそれらのステップは、対象プログラム17のそれらの部分が、順に変換され、ついで実行されるように、インターレースされる。
用語「基本ブロック」は、当業者に周知である。基本ブロックは、正確な1つの入口点と正確な1つの出口点を有するコードのセクションであり、そのセクションによりブロックコードが単一の制御パスへ限定される。この理由のために、基本ブロックは、制御流れの有用な基本的なユニットである。適切には、トランスレータ19が、対象コード17を複数の基本ブロックに分割し、そこにおいて、それぞれの基本ブロックは、唯一の入口点における第1の命令と唯一の出口点における最後の命令との間の命令の順次集合である(飛び越し、呼出し、または分岐の命令のような)。トランスレータは、これらの基本ブロックの1つのみ(ブロックモード)を選択してもよいし、または基本ブロックのグループ(グループブロックモード)を選択してもよい。グループブロックは適切には、単一ユニットとして共に処理される2個以上の基本ブロックから成る。さらに、トランスレータは、対象コードの同一の基本ブロックを表示するが、異なる入口条件の下での等ブロック(等ブロックモード)を形成する。
この好ましい実施態様において、中間表示(IR)のツリーは、元の対象プログラム17から目標コード21を発生するプロセスの一部分として、対象命令シーケンスに基づいて発生される。IRツリーは、対象プログラムにより、計算された表現および実施された演算の抽象表示である。その後、目標コード21は、IRツリーに基づいて発生される。IRノードの収集は、実際には指向される非周期的グラフ(DAG)であるが、口語的に「ツリー」と呼ばれる。
当業者には分かるように、一実施態様において、トランスレータ19は、C++のようなオブジェクト指向プログラミング言語を使用して実現される。たとえば、IRノードは、C++オブジェクトとして実現され、および他のノードへの参照は、これらの他のノードに対応するC++オブジェクトへのC++参照として実現される。したがって、IRツリーは、種々の互いの参照を含むIRノード・オブジェクトの収集として実現される。
さらに、本実施形態の説明では、IR生成は、対象プログラム17の実行が意図されている、対象アーキテクチャの特定のフィーチャに対応する抽象レジスタ定義セットを使用する。例えば、対象アーキテクチャ上の各物理レジスタ(「対象レジスタ」)に関する固有の抽象レジスタ定義が存在する。このため、トランスレータにおける抽象レジスタ定義は、IRノード・オブジェクトへのリファレンスを含むC++オブジェクト(すなわち、IRツリー)として実装可能である。抽象レジスタ定義セットによって参照されるすべてのIRツリーの集合は、作業IRフォレスト(複数の抽象レジスタ・ルートを含み、その各々がIRツリーを参照するため、「フォレスト」である)と呼ばれる。それらのIRツリー、およびその他の工程は、好ましくは、トランスレータ・コード生成ファンクション192の一部を形成する。
図3は、本発明の好ましい実施態様におけるプログラムコード変換に従う、対象プログラムにおける命令と目標プログラムにおける命令との間の関係を示す概略図である。
この例では、対象命令S1〜S3が、機能的に均等な目標命令T1〜T3をもたらす。対象命令S1は、デッド・コード削除最適化などによって除去されており、生成された目標コード内において対応物を有さない。対象命令S2は、1つの均等な目標命令T3をもたらす。これに対して、対象命令S3は、2つの目標命令T1,T2をもたらす。目標コード命令と対象コード命令との間に、1対0、1対1、1対多、または多対1の関係が、存在可能である。
図3に示すように、別の一般的に使用される最適化は、目標コード中の命令シーケンスが、対象コードの中の元のシーケンスと均等でないコード再スケジューリングを実行することである。ここでは、第2の対象命令S2は、第3の目標命令T3として再スケジューリングされている。
図4は、Itanium (RTM) 2 プロセッサのような、代表的なパイプライン化されたプロセッサのコアパイプラインを示す。コアパイプラインは、命令バッファ(IB)により分離される、フロントエンド(FE)とバックエンド(BE)に分離される。フロントエンドFEは、サイクル毎に6個の命令を取り出す。同様に、バックエンドBEは、サイクル毎に6個の命令を発行する。このために、Itanium 2 プロセッサは、サイクル毎に6個の命令を発行するものとみなされる。これらの6個の命令は共に、命令グループと名づけられる。
図5は、代表的なIntel (RTM) Itanium (RTM) 2 プロセッサ内の機能実行ユニットを示す概略図である。種々のタイプの多数の機能ユニット620がある。これにより、命令の多くの異なる組み合わせを、サイクル毎に発行できる。しかしながら、6個の命令のみしかサイクル毎に発行できないので、プロセッサの機能ユニット620の一部分のみが、サイクル毎に使用される。
Itanium (RTM) 2 プロセッサは、一般目的シフト命令と他の特別シフト命令のために、6個の一般目的の算術と論理のユニット(ALU 0、1、2、3、4、5)、2個の整数ユニット(I0、I1)、および1つのシフトユニット(Ishift)を提供する。
データキャッシュユニット(DCU 0〜4)は、4個のメモリポートを提供する。メモリポートのうち2個は、一般にロード演算に使用され、および他の2個は、格納演算に通常使用される。
6個のマルチメディア機能ユニット(PALU 0〜5)、2個の並列シフトユニット(PSMU 0、1)、1つの並列乗算ユニット(PMUL)、および1つの母集団カウントユニット(POPCNT)がある。これらは、マルチメディア、並列乗算および特定のPOPCNT命令の種類を取扱う。
浮動小数点乗加算を実行する2個のFMACユニット(FMAC 0,1)、および他の浮動小数点演算を実行する2個のFMISCユニット(FMISC 1,0)から成る4個の浮動小数点機能ユニットがある。
3個の分岐ユニット(B 0〜2)があるので、3個の分岐をサイクル毎に実行できる。
機能ユニット620のそれぞれは、パイプライン化され、かつクロックサイクル毎に1つの新しい命令を受け入れることができる。しかしながら、特定のサイクル内で実行できる、それぞれの種類の命令数に関して限界がある。
図6は、Intel (RTM) Itanium (RTM) 2 プロセッサのようなパイプライン化されたプロセッサ内における命令分散の概略全体図を示す。
図6に示されるように、それぞれの命令600は、3個の命令のバンドル603の一部分を形成する。6個の命令(すなわち、2個のバンドル)は共に、命令グループ606を形成する。命令600は、命令キャッシュ609に格納される。フロントエンドFEは、バンドル回転として知られるプロセスにより、サイクル毎に命令キャッシュ609からゼロか、1つかまたは2つのバンドル603を取り出す。
それぞれの命令600は、発行ポート610を通して機能ユニット620の1つに割当てられる。機能ユニット620よりも少ない発行ポート610がある。図6に示されるように、この例において、11個の発行ポートと27個の機能ユニットがある。ポートM0、M1、M2、M3、I0、I1、F0とF1は、それぞれ非分岐命令用である。ポートB0、B1、およびB2は、分岐命令用である。分散は、命令600を機能ユニット620へ割当てるプロセスであり、かつ命令発行ポート610の所定のマッピングに依存する。
それぞれの命令グループが、発行ポートへの割当のための発行規則を先ず満たなければならないし、その規則は、好都合にはテンプレートとして表示される。すなわち、それぞれの命令グループ内(およびそれぞれのバンドル内の)命令の数、種類および位置は、テンプレートの所定の集合の1つに合致しなければならない。テンプレートに合致しないグループは、拒否される。通常、例外または故障が報告されて、実行が終了させられる。
発行規則が合致し、かつ有効なテンプレートが示されると仮定すると、命令は、ついで、発行ポート610へ割当てられる。
命令は、命令の種類(たとえば、ALU、メモリ、整数など)に基づいて発生ポートの部分集合へマッピングされる。ついで、命令グループ内の命令の位置に応じて、その命令は、部分集合内の特定の発行ポートへマッピングされる。一例として、A型命令は、全てのMとIのポート上で発行できる一方、I型命令は、Iポートのみに発行できる。さらに、Iポートは非対称であり、そこにおいて、一部のI型命令は、ポートI0上でのみ発行できる。さらに、Mポートは、多くの非対称部分を有し、そこにおいて、M型命令は、メモリポートの1つまたは2つ上でのみ発行できる。
Itanium アーキテクチャは、3個の41ビット命令600と5ビットテンプレート領域とを含む各バンドル603毎に128ビット符号化を使用する。このテンプレートビットは、プロセッサが命令を復号化および経路指定するのに役立つ。また、テンプレートビットは、それぞれの命令グループ606の端部をマークする停止の位置を示す。
命令600は、分散規則の集合に従って発行ポート610から機能ユニット620へ分散される。異なる発行ポートの種類毎に異なる規則がある。命令を機能ユニットへ分散するとき、プロセッサは、1つまたは2つのバンドル(3つの命令のそれぞれ)を同時に見る。
バンドルにおける命令のそれぞれが発行されたとき、バンドル回転が生じて、新しい命令のバンドルを、現在検討している2バンドル窓に入れる。1つあるいは2つのバンドルが回転可能である。バンドルが所期通りに完了しない場合、プロセッサは、そのバンドル603における未発行命令を、次のサイクルまで機能停止する。このようにして、プロセッサ資源は、結局は、機能停止された命令を実行するために利用できるようになる。プロセッサハードウェアは、機能停止を避けるために、命令を再順序付けしない。
発行規則(テンプレート)および分散規則を満たす命令グループを、可能のときは何時でも、作成することが望ましい。特に、機能停止を最小にすることが望ましい。また命令が、プロセッサの利用できる資源を有効に利用できる場合、コードグループを生成することが望ましい。
さらに、プログラムコード変換、および特に動的バイナリ変換に関して、以下で詳細に説明するように、命令グループを自動的に生成する機構についての強いニーズがある。
図7は、命令グループを作成する好ましい機構を示す。図7に示されるように、複数の割当プール700が提供される。それぞれのプール700は、1以上の命令600を含むように配列される。好都合には、それぞれのプール700は、1以上の命令空間701を有する。
プール700のそれぞれは、1以上の発行ポート610に関連付けられる。図7の例において、プールM0は、発行ポートM0に関連付けられる一方、プールFは、発行ポートF0および発行ポートF1に関連付けられる。同様に、プールM0_3は、ポートM0〜M3のそれぞれに関連付けられる一方、プールAは、任意のMまたはIのポート(M0、M1、M2、M3、I0またはI1)を対象にする。
これらのプールは、全体または少なくとも部分的にオーバーラップする。すなわち、プール700の少なくとも2個は、特定の発行ポート610を共有する。一例として、第1のプールM0と第2のプールM0_3は、発行ポートM0を共有する。
プール700は、階層構造を形成する。この実施態様において、その構造は、第1から第4までのレベル711、712、713、714を有する。この階層構造において、幾つかの発行ポート610に関係する広域プール(たとえば、プールM0_3)は、より少ない発行ポートに関係する狭域プール(たとえば、プールM0)へ従属する。狭域プール(M0)と広域プール(M0_3)は、少なくとも1つの発行ポート(M0)を共有する。
他の例として、プールI0は、プールI0_1よりも狭く、かつその上位にあり、ついでプールI0_1がプールAの上位にある。これらのプールI0、I0_1、Aは、少なくともポートI0を共有する。
図8は、本発明の好ましい実施態様に従う命令グループ作成の概略全体図である。
図8に示されるように、対象プログラム17は、目標コード21に変換される(すなわち、図1のトランスレータ19により)。実行可能な目標コード命令600は待機リスト(ready list)820に作成される。待機リスト820は、実行される準備ができている目標コード命令を含む。理想的には、待機リスト820における命令600は、待機リストにおいて、それぞれの命令が、他の命令と関係なく実行できるという点で、それぞれ独立している。
この好ましい実施態様において、目標コード命令は、一旦依存性が除かれると、待機リスト内に入れられる。すなわち、目標コード命令21は、目標コード21において他の命令に依存しているかが調べられる。一例として、命令LOAD R1、0(定数0を有するロードレジスタR1)は依存性を有しない一方、この場合に、次のPUSH R1(レジスタR1の内容をスタックへプッシュする)は、LOAD命令に依存する。適切には、PUSH命令は、LOADが置かれた後でのみ待機リストへ加えられる。
図7に図示されるように、命令は、待機リスト820から取り出され、ついで階層プール構造700に格納される。並列実行可能な命令グループ(たとえば、2個のバンドルで6個の命令の集合)は、ついで、格納された命令から形成される。図6を参照して上述したように、複数の発行ポート610を通じた複数の機構ユニット620への分散のために、命令グループ606は、命令キャッシュ609へ加えられる準備ができる。通常、作成された命令グループ606は、メモリ18内などに先ず格納される。適切には、格納された命令グループは、完全な目標コードブロックにおいて後で実行される。
図9は、本発明の好ましい実施態様におけるプログラムコード変換、特に動的バイナリ変換中に採用される、命令グループを作成する好ましい方法の概略全体図である。
候補命令821の待機リスト820はステップ901において提供される。第1の候補命令821は、ステップ902において待機リスト820から選択される。一実施態様において、候補命令は、待機リスト内の経年数(たとえば、そのリストにおける最も古い命令)に基づいて選択される。他の実施態様において、その命令は、待ち時間に基づいて選択される。命令の実行回数(待ち時間)は、1〜24サイクルの範囲である。キャッシュを欠くメモリからのロード、およびチェック命令(推測に使用される)は、50サイクルを超えることがある。このために、好ましい例において、実行の最も長くかかる命令が、少ないクロックサイクルで実行する命令に優先して選択される。他の特に好ましい実施態様において、命令は、その命令、およびその命令に従属する命令の累積待ち時間に基づいて選択される(たとえば、LOAD命令は、累積待ち時間を有し、その待ち時間も、従属PUSH命令の待ち時間を含む)。
ステップ903において、選択された候補命令821を、割当プール階層における対応する利用可能なプール700に格納する試みがなされる。最初に、命令の種類、およびその命令用の対応する発行ポート(単数あるいは複数)に従って、1以上の対応するプールの集合が決められる。たとえば、「付加(add )」命令は、発行ポートM0〜3またはI0〜1のいずれかを通して発行でき、およびこれらの発行ポートのいずれかに関係する任意のプールに格納されるのが適切である。ついで、この所望のプールは、対応するプールのその集合から選択される。図7の代表的な構造において、「付加」命令用の所望のプールは、対応するプールM0、M2、I0、M0_1、M2_3、I0_1、M0_3、またはAの集合の中から選択される。対照的に、「F取得」命令は、ポートI0を通してのみ発行でき、およびそのポートに関連付けられたプールに格納されなければならない。この例において、I0プールは、唯一の可能な所望のプールである。
ステップ904において、所望のプール700が、命令を受容できるかどうか、たとえば、空き命令空間701を有するかどうかが判断される。また、このステップは、それぞれの従属プールが満ちていないことをチェックするのを含む。この階層構造は、プールのどれが、所望のプールの下位であるかを判断する。この代表的な「F取得」命令について、プールI0_1およびAが、所望のプールI0に加えて、チェックされる。
所望のプール、および従属プールのそれぞれが利用できる場合、ステップ905において、命令は、所期通り格納される。候補命令が格納されると、その命令が格納されたプールの占有が減少する。また、命令が格納されると、格納されたプールに従属する下位プールそれぞれの占有が減少する。
対応するプールが利用できない場合、候補命令は拒否される。新しい候補命令が、待機リスト820から選択され、上述のステップが繰返される。
ステップ906において、命令グループが、割当プール階層700に格納された命令の集合から準備できるかどうかが判断される。準備できない場合、次の命令がステップ902において選択される。準備できる場合、格納された命令はステップ907において命令グループに形成される。ついで待機リストは、格納された命令に対応するように更新され(ステップ902)、そして、このプロセスが繰返される。特に、実行準備ができた命令グループに作成された命令により依存性が除かれる場合、新しい目標命令が待機リストへ加えられる。
命令グループは、命令の所定の集合が一旦格納されると形成される、すなわち、6個の命令により2個のバンドルが形成される。あるいは命令グループは、一旦それ以上の命令を格納することができないと、形成される。これは、すなわち待機リストからの候補命令が空のプールに対して適切でないか、または、待機リストがここで空であるからである。適切には、NoOPs(「非動作」または非動作命令)が、部分的に完全な命令グループを満たすのに使用される。
このプロセスは、待機リストが一旦完全に空になると終了し、これ以上さらに作成する目標命令は無い。この好ましい実施態様において、目標コード命令21は、基本ブロック、グループブロックまたは等ブロック(iso-block )のような、目標コードの1つのブロックを表す。このために、この作成プロセスは、目標コードのこのブロックにおける命令のすべてが一旦命令グループに作成されると、終了する。
好ましい方法を、図10と図11に示される作動例を参照してさらに詳細に説明する。
図10を参照すると、命令600(ここでは文字「T」により示される)は、利用できる命令空間701を占有するために、所望のプール700へ割当てられる。図10の例において、第1の命令Tは、プールM0に格納されるメモリ型M命令である。このプールは、1つの命令のみを受け入れることができるので、命令TがプールM0を満たす。
図10に示されるように、それぞれの従属プール(M0_1、M0_3、A)の占有も減少され、すなわち、命令空間701は、上位プールM0に格納された命令Tに応答して満たされたとマークされる。すなわち、命令が利用できるプールに格納されるとき、ゼロまたはより低い層におけるそれぞれの従属プールの空白は、格納された命令の結果として減少される。
I型命令である第2の命令Tが入れられ、その命令は、望ましくは、第2のレベル712のプールI0_1における命令空間を満たす。レベル714の従属プールAにおける対応する命令空間も、占有されたとマークされる。
図11は、完全な命令グループを形成する準備ができるように格納された命令の例を示す。命令T〜Tのそれぞれは、対応するプールに格納される。
図7、10および11を参照すると、この好ましい実施態様において、追加の最下位グループ・プール715が、命令グループを表すために提供される。このグループ・プール715は適切には、6個の命令空間(この命令グループにおける最大)を有する。命令は、グループ・プール715に直接格納することができない。代わりに、このグループ・プールは、6個の命令が、上位レベルのプールに適正に、かつ有効に格納されたことを確認する好都合な機構を提供する。
柔軟性のために、命令が、最下位の適用プールに格納されることが望ましい。すなわち、「付加」命令は、発行ポートM0〜3またはI0〜1のいずれにも発行でき、理想的にはAプールに格納される。対照的に、「F取得」命令は発行ポートI0を通してのみ発行することができ、利用できる場合にはプールI0へ割当される。
図7、10および11を再び参照すると、それぞれのプール700は、好都合には、カウント値702に関連付けられる。カウント値702は、適切には、プール700内で利用できる命令空間701の個数に対応する整数値である。
別の実施態様において、1以上のプールには、そのプールの最大占有未満の制約されたカウント値が与えられる。すなわち、複数のプールの少なくとも1つの最大占有は、その1つのプールに関連付けられた発行ポートにより決定される絶対最大占有未満に制約される。代わりに、絶対最大占有は、命令の種類に関して決められる。図示される代表的なプールにおいて、M0_3プールは、発行ポートM0〜M3に対応する4M型命令の絶対最大占有を有する。しかしながら、M0_3プールは、好ましくは、2個のM型命令のみを、任意の1つの命令グループに格納することができるように、「2」のカウントなどに制約される。一定の種類の命令グループの数をシステム最大に制約することにより、一層有効な実行可能なコードを、一部の状況において発生させることができる。すなわち、実際に、多くの「M」命令を有する命令グループのシーケンスを発行することは、多くても2個の「M」命令をそれぞれ有する発行グループよりも有効性が低いことがある。この制約されたカウント値により、命令グループ構成を調整および制御することができる。
カウンタ702は、命令がプール700に格納される毎に調整される。またそのカウンタは、図10と11の例に示されるように、命令が高位のプールへ付加される毎に調整される。カウンタ702は、プールまたは準備プールが満たされているかどうかを判断する単純で好都合な機構である。好ましい実施態様において、そのカウンタは、所定の値に初期化され(すなわち、対応するプールの最大空白、または制約される値)、格納された命令毎に1だけデクリメントされる。これにより、有効な「ゼロに等しいか、それ未満」に関する比較により、特定のプールが満たされているかどうかが判断できる(すなわち、ゼロに等しいか、それ未満の空きの命令カウントを有する)。
グループ・プール715には、同様にカウンタ値702が設けられ、その値は、単一グループにされ、かつ格納された命令毎にデクリメントされる命令の最大数として6のように初期化される。
好ましい実施態様において、格納された命令の集合(すなわち、T〜Tまで)は、命令を取り出すことにより、命令グループに形成される。その好ましい順序は、最大上位レベル711にある最も制約されたプールで始まる。これらの命令は、命令が分散されるときに、これらの最も制約された命令が、対応する発行ポート(複数)へアクセスするために、グループが作成されるときに優先度を有する。命令を最下位(最も広い)の対応するプールに格納することにより、最も柔軟な命令が予約に保持されるので、コードのシーケンスにおいて後で生じる制約の少ない命令を、一層良い機会として、対応する発行ポートに格納することができる。たとえば、プールAにおける「付加」命令は、任意の高位の命令が、たとえば、それが必要とする発行ポートM0またはI0に格納されたかどうかが判断されたときにのみ、命令グループに取り入れられる。
階層プールの連結占有は、細区分上の資源を防止する。それぞれの命令グループは、単一パスにおいて正確に作成される(「ライト・ファーストタイム(right first time)」)。
図12は、図11に格納された命令T〜Tから取り出された代表的な命令グループ606を示す。このグループは、テンプレート「MFI〜MFI」に一致する。このテンプレートは、命令グループ内に担持される5ビットテンプレート領域に符号化される。図12において、「S」は、第2のバンドルが、そのグループの最後であることを示す。
図7、10および11に示される好ましい代表的な配列は、命令をM、IおよびFの命令スロットへ割当てる。この配列は、ブロック毎のコード変換に特に適切である。すなわち、基本ブロックは、定義により、分岐型出口を1つのみ含む。ブロックの主作動が、非分岐命令に関係し、それらの命令は、図7のプール構造を使用して命令グループに作成される。このために、作成されたコードは、そのブロックの主部分用に対する一連の完全で有効な命令グループに形成される。そのブロックの末尾部分は、限定された残りの候補命令のために、NOPsを有する不完全なグループ含むことがある。最終の命令グループまたは複数のグループは、分岐命令を含む。これらの分岐命令は、適切には、コードにおける引続くブロックを決めて、次に作成および実行する。図2を参照して上述した代表的な実施態様において、分岐命令は適切には、制約を、次の基本ブロックの表示を有するトランスレータ実行ループ190へ戻す。
図13は、他の好ましいプール構造を示す。この実施態様において、好ましいプール機構は、分岐発行ポート(すなわちB0_2)へ関係するプールも含むように拡大される。
図14は、命令グループを作成する別の好ましい方法を示す。この方法は適切には、図13に示されるプール構造を使用する。
図14に示されるように、この好ましい方法は、図9のステップ901〜907と同等なステップ1401〜1407を含む。また、この実施態様において、この方法は、選択された命令をテンプレート集合に対してチェックするステップ1408を含む。
代表的なItanium 2 プロセッサにおいて、M、FおよびI命令の組み合わせが、比較的少ない制約を有し、それらの制約は、適切には、図9のプール構造により取扱われる。しかしながら、I、FおよびB命令の組み合わせは、許容できる組み合わせに関して比較的に制約的である。ステップ1408は、選択された候補命令821および既に格納された命令との組み合わせを、テンプレートの所定の集合と比較することを含む。それぞれのテンプレートは、目標プロセッサにより実行できる有効な命令組み合わせを表す。テンプレートの集合は、メモリ18などに格納される検索用テーブルに好都合には保持される。提案された組み合わせが、テンプレートの所定の集合のいずれにも合致しない場合、選択された候補命令は、拒否されて待機リストに戻され、および新しい候補が選択される。ステップ1408のテンプレートチェックにより、分岐命令を、プールを使用して命令グループ作成内に含めることができる。
Itanium 2 プロセッサは、MLXフォーマットテンプレートを必要とする特別ケースの「X」型命令も提供する。X型命令は、F発行ポートとI発行ポートの両方を必要とする。ステップ1408のテンプレートチェックは、X型命令を容易に識別する。適切には、X型命令は、FとIの命令を割当プール700に格納することを試みることにより、特別ケースとして取扱われる。X型命令は、IとFの両方が所期通り格納される場合にのみ、所期通り格納される。すなわち、これは一例であり、それにより、1つの目標コード命令が、プール構造において1つを超える命令空間を必要とする。そのプール構造は、好都合には、これらの命令に特殊な、または変化する占有を提供する。
本発明の好ましい実施態様を、代表的なItanium (RTM)2プロセッサを参照して説明してきた。しかしながら、本発明は、多くの他のプロセッサとプロセッサの種類にも適用できる。特に、本発明は、サイクル毎に複数の命令を発行するプロセッサへ適用できる。例として、本発明は、とりわけ、x86アーキテクチャプロセッサおよびPowerPC(PPC)アーキテクチャにも適用できる。本発明は、ここで説明された原理と特徴に基づいて当業者により適用できる。
要約すると、上記した本発明の好ましい実施態様は、複数の発行ポートを通してプロセッサの複数の機構ユニットへの分散の準備ができた命令グループを作成する好都合な自動機構を提供する。この命令グループは、正確に、かつ自動的に発生される。復号化エラーと機能停止は、最小化されるか、または完全に避けられる。
種々の好ましい実施形態を図示して説明したが、添付の特許請求の範囲で定義される本発明の範囲を逸脱することなく、種々の変更および変形が可能であることが、当業者には理解し得る。
本明細書(添付の特許請求の範囲、要約書、および図面を含む)で開示する特徴のすべて、および/またはそのように開示する方法またはステップのすべては、そのような特徴および/またはステップの少なくともいくつかが互いに相容れない組合せを除き、任意の組合せで組み合わせ可能である。
本明細書(添付の特許請求の範囲、要約書、および図面を含む)で開示する各特徴は、特に明記しない限り、同一の目的、均等の目的、または同様の目的を果たす代替の特徴によって置き換えられてもよい。このため、特に明記しない限り、開示する各特徴は、一連の一般的な均等の特徴、または同様の特徴の一例に過ぎない。
本発明は、以上の実施形態の詳細に限定されない。本発明は、本明細書(添付の特許請求の範囲、要約書、および図面を含む)で開示する特徴の任意の新たな1つ、または任意の新たな組合せにまで、あるいはそのように開示する方法またはステップの任意の新たな1つ、または任意の新たな組合せにまで拡張される。
本発明の実施態様がアプリケーションを示す装置を図示するブロック線図である。 本発明の好ましい実施態様に採用される実行制御を図示する概略フロー図である。 本発明の好ましい実施態様におけるプログレスコード変換を示す概略図である。 代表的なパイプラインプロセッサのコアパイプラインの概略線図である。 代表的なプロセッサ内の機能ユニットの概略全体図である。 代表的なプロセッサ内の命令分散の概略全体図である。 本発明の実施態様において採用される命令を作成する好ましい機構の概略図である。 本発明の好ましい実施態様に従う命令グループ作成の概略全体図である。 命令グループを作成する好ましい方法の概略フロー図である。 部分的に完全な代表的な命令グループを有する好ましい機構を示す。 完全な代表的な命令グループを有する好ましい機構を示す。 代表的な命令グループを示す。 命令グループを作成する好ましい機構の他の実施態様を示す。 命令グループを作成する他の好ましい方法を示す概略フロー図である。

Claims (35)

  1. プロセッサ(13)の複数の機能ユニット(620)に対する分散を複数の発行ポート(610)を通じて行うための命令グループ(606)を形成する方法であって、
    複数のプール(700)を提供するステップであって、各プール(700)は、1以上の発行ポート(610)に関連付けられており、少なくとも1つの発行ポート(610、I0)を共有する少なくとも第1及び第2のプール(I0、I0_1)を含む、ステップと、
    命令の種類に従って複数のプール(700)に命令(600)を格納するステップであって、命令(600)を第1のプール(I0)に格納することにより、第2のプール(I0_1)の利用性を減少させる、ステップと、
    格納された命令(600)から命令グループ(606)を生成するステップと、
    を備える方法。
  2. 前記複数のプール(700)は、前記第1のプール(I0)が前記第2のプール(I0_1)の上位となる階層アーキテクチャ(711〜715)を形成する、請求項1記載の方法。
  3. 前記第1のプール(I0)は、前記第2のプール(I0_1)よりも少ない発行ポート(610)に関連付けられている、請求項1又は2記載の方法。
  4. 前記複数のプール(700)を提供するステップであって、各プール(700)は、該各プール(700)が所定の数の命令(600)を受け入れるためのゼロまたは1以上の空白を有するように、1以上の命令空間(701)を有する、ステップと、
    命令を第1のプール(I0)に格納するステップと、
    前記命令を第1のプール(I0)に格納するステップに応答して、第1のプール(I0)において利用可能な命令空間(701)の数を減少させるステップと、
    前記命令を第1のプール(I0)に格納するステップに応答して、第2のプール(I0_1)において利用可能な命令空間(701)の数を減少させるステップと、
    を更に備える、請求項1乃至3の何れか一項記載の方法。
  5. 前記複数のプール(700)の各々は所定の最大占有を有し、
    前記命令を格納するステップは、前記複数のプール(700)の少なくとも2個の占有を調整するステップを含む、請求項1乃至4の何れか一項記載の方法。
  6. 前記第1のプール(I0)及び前記第2のプール(I0_1)の両方が前記命令を受け入れるのに利用可能な容量を有している場合にのみ、前記命令を第1のプール(I0)に格納するステップを更に備える、請求項5記載の方法。
  7. 前記第1のプール(I0)及び前記第2のプール(I0_1)の両方がそれぞれにおける所定の最大占有まで占有されていない場合にのみ、前記命令を第1のプール(I0)に格納するステップを更に備える、請求項5又は6記載の方法。
  8. 前記複数のプール(700)の各々に関連付けられたカウンタ値(702)を提供するステップであって、前記カウンタ値(702)は格納された命令(600)の数を表す、ステップと、
    各カウンタ値(702)を所定の閾値と比較して、前記第1及び第2のプール(711、712)が命令を受け入れることができるかを確認するステップと、
    命令が前記第1のプール(I0)に格納される毎に、前記第1のプール(I0)のカウンタ値(702)及び前記第2のプール(I0_1)のカウンタ値(702)を調整するステップと、
    を更に備える、請求項1乃至7の何れか一項記載の方法。
  9. 命令グループ(606)内での前記プール(700)の所定の最大占有に前記カウンタ値(702)を初期化するステップと、
    命令の格納毎に前記カウンタ値(702)をデクリメントするステップと、
    前記カウンタ値(702)をゼロの閾値と比較するステップと、
    を更に備える、請求項8記載の方法。
  10. 前記複数のプール(700)の少なくとも1つの最大占有を、1つのプール(700)に関連付けられた発行ポート(610)および/または命令の種類により決定される前記1つのプール(700)に関する絶対最大未満に制約するステップを更に備える、請求項8記載の方法。
  11. 前記第1及び第2のプール(711、712)における利用性を減少させるとともに、前記第1及び第2のプール(711、712)の何れかに従属しない第3のプール(F)の利用性を減少させることにより、特定の種類の命令を格納するステップを更に備える、請求項1乃至10の何れか一項記載の方法。
  12. 命令グループ(606)の命令(600)の最大数を表すグループ・プール(GP)を提供するステップと、
    前記複数のプール(700)の他のいずれかに命令が格納される毎に、前記グループ・プール(GP)の占有を調整するステップと、
    を更に備える、請求項1乃至11の何れか一項記載の方法。
  13. 候補命令(821)の待機リスト(820)を形成するステップと、
    前記待機リスト(820)から候補命令(821)を選択するステップと、
    前記候補命令(821)を前記複数のプール(700)の1つに格納するステップと、
    を更に備える、請求項1乃至12の何れか一項記載の方法。
  14. 前記待機リスト(820)内の候補命令(821)は、各々独立して実行可能である、請求項13記載の方法。
  15. それまでに格納された候補命令(821)により全ての依存性が満たされた後に、候補命令(821)を前記待機リスト(820)へ付加するステップを更に備える、請求項14記載の方法。
  16. 対象コード(17)のセクションを、目標コード命令(21)のブロックに変換するステップと、
    前記目標コード命令(21)のブロックから1以上の命令を前記待機リスト(820)へ選択的に付加するステップと、
    を更に備える、請求項15記載の方法。
  17. 前記プール(700)から前記格納された命令(600)を順次取り出して前記命令グループ(606)を生成するステップを更に備える、請求項1乃至16の何れか一項記載の方法。
  18. 前記複数のプール(700)に命令(600)の所定の最大数が格納された場合か、または前記複数のプール(700)にさらなる命令(600)を格納することが適切でない場合に前記命令グループ(606)を生成するステップを更に備える、請求項1乃至17の何れか一項記載の方法。
  19. 前記格納された命令(600)の組み合わせをテンプレート集合に対してチェックするステップを更に備える、請求項1乃至18の何れか一項記載の方法。
  20. 前記複数のプール(700)に既に格納されたゼロまたは1以上の命令(600)と共に、前記複数のプール(700)に格納すべき命令(600)の候補組み合わせを形成するステップと、
    前記プロセッサ(13)の複数の機能ユニット(620)内において有効に実行可能な命令組み合わせを表すテンプレート集合に対して、前記候補組み合わせをチェックするステップと、
    を更に備える、請求項1乃至19の何れか一項記載の方法。
  21. 前記複数のプール(700)は、少なくとも、メモリ、浮動小数点、および整数の種類の命令(600)を供給する発行ポート(610)に関連付けられている、請求項1乃至20の何れか一項記載の方法。
  22. 前記複数のプール(700)は、少なくとも、メモリ、浮動小数点、整数、および分岐の種類の命令(600)を供給する発行ポート(610)に関連付けられている、請求項20記載の方法。
  23. 目標プロセッサ(13)の複数の機能ユニット(620)に対する分散を複数の発行ポート(610)を通じて行うための目標命令の命令グループ(606)を、対象プロセッサ(13)により実行可能な対象命令(17)に基づいて作成するために、
    前記対象命令(17)から目標命令(600)のブロックを生成するステップと、
    前記目標命令のブロックの集合を前記複数のプール(700)に格納するステップであって、各プール(700)は、1以上の従属する広域プール(I0_1、A)よりも少ない命令ポートに関連付けられた1以上の上位の狭域プール(I0)を有するオーバーラップ階層構造(711〜715)における発行ポート(610)の部分集合に関連付けられており、前記目標命令の1つを前記階層構造(711〜715)における前記上位の狭域プールの1つに格納することに応答して、前記1以上の従属する広域プール(I0_1、A)の少なくとも1つにおける利用性を減少させる、ステップと、
    前記格納された目標命令(600)の集合から命令グループ(606)を形成するステップと、
    を更に備える、請求項1乃至22の何れか一項記載の方法。
  24. 前記狭域プール(I0)及び前記広域プール(I0_1、A)の両方に格納可能な目標命令(600)を、狭域プール(I0)に優先して広域プール(I0_1、A)に格納するステップを更に備える、請求項23記載の方法。
  25. 前記プール(700)または任意の上位プールに格納された命令(600)の数を表すカウンタ値(702)を提供するステップと、
    前記カウンタ値(702)を調べ、前記プール(700)または任意の従属するプールが満杯か否かを命令(600)の格納前に判断するステップと、
    を更に備える、請求項23又は24記載の方法。
  26. 命令グループ(606)における命令(600)の最大数を表すカウンタ値(702)を有するグループ・プール(GP)を提供するステップと、
    前記複数のプール(700)の他のいずれかに命令が格納される毎に前記グループ・プール(GP)のカウンタ値(702)を変更するステップと、
    を更に備える、請求項25記載の方法。
  27. 前記目標命令(600)のブロックに基づき、各々独立して実行可能な候補命令(821)の待機リスト(820)を更新するステップと、
    候補命令(821)を前記待機リスト(820)から取り出すステップと、
    命令の種類に関して前記候補命令(821)に適切な所望のプールを決定するステップと、
    前記所望のプール(700)及び該所望のプールに従属する任意の従属プール(700)が前記候補命令(821)を受け入れ可能か否かを確認するステップであって、受け入れ可能である場合、前記候補命令(821)を前記所望のプールに格納することにより、前記所望のプール及び前記従属プールにおける利用性を減少させ、受け入れ可能でない場合、前記目標命令の集合が格納されて命令グループ(606)を形成する準備ができるまで、次の候補命令(821)について前記確認を繰り返すステップと、
    を更に備える、請求項23乃至26の何れか一項記載の方法。
  28. 前記複数のプール(700)に格納された目標命令の集合に基づき命令グループ(606)が形成される毎に、前記待機リスト(820)を更新するステップを更に備える請求項27記載の方法。
  29. 前記待機リスト(820)の経年数、前記候補命令(821)の待ち時間、および前記ブロック内における1以上の従属目標命令の待ち時間と組み合わせた前記候補命令(821)の累積待ち時間のうちの少なくとも1つに基づいて、前記候補命令(821)を取り出すステップを更に備える、請求項27又は28記載の方法。
  30. 前記候補命令(821)に関する命令の種類及び適切な1つ又は複数の発行ポート(610)に従って前記所望のプール(700)を決定するステップを更に備える、請求項27乃至29の何れか一項記載の方法。
  31. 所定数の命令(600)が格納された場合か、または前記待機リスト(820)からの命令(600)を更に格納することができない場合、前記複数のプール(700)に格納された命令(600)の集合から命令グループ(606)を準備可能であることを判断するステップを更に備える、請求項27乃至30の何れか一項記載の方法。
  32. 1以上の非動作命令(600)を有する命令グループ(606)を形成して、部分的に完全な命令グループ(606)を満たすステップを更に備える、請求項31記載の方法。
  33. 前記対象コード命令(17)を複数のブロックに分割して、対象コード(17)の現行ブロックを選択するステップと、
    前記対象コード(17)の現行ブロックを、動的バイナリ変換を通じて目標コード(21)の現行ブロックに変換し、該目標コードの現行ブロック内に含まれる目標命令を命令グループ(606)内に準備するステップと、
    前記命令グループ(606)を使用して前記目標コード(21)の現行ブロックを実行するとともに、次なる対象コード(17)の現行ブロックを決定するステップと、
    前記次なる対象コード(17)の現行ブロックに関して、前記変換と前記実行とを繰り返すステップと、
    を更に備える、請求項23乃至32の何れか一項記載の方法。
  34. 対象コード(17)を目標プロセッサ(13)により実行可能な目標コード(21)に変換するように構成されたトランスレータ装置であって、
    前記目標プロセッサ(13)の複数の機能ユニット(620)に対する分散を複数の発行ポート(610)を通じて行うための目標コード(21)の命令グループ(606)を形成するように構成されたトランスレータユニットを備え、前記トランスレータユニットは請求項1乃至33の何れか一項記載の方法を実行するように構成されている、トランスレータ装置。
  35. 請求項1乃至33の何れか一項記載の方法を実現する、コンピュータにより実行可能な命令が記録されたコンピュータ読取可能媒体。
JP2008503571A 2005-03-30 2006-03-17 複数の発行ポートを有するプロセッサにおける命令グループを形成する方法、並びに、その装置及びコンピュータ・プログラム Active JP5102758B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
GB0506469A GB2424727B (en) 2005-03-30 2005-03-30 Preparing instruction groups for a processor having a multiple issue ports
GB0506469.6 2005-03-30
US11/139,232 US7934203B2 (en) 2005-03-30 2005-05-27 Preparing instruction groups for a processor having multiple issue ports
US11/139,232 2005-05-27
PCT/GB2006/001000 WO2006103395A1 (en) 2005-03-30 2006-03-17 Preparing instruction groups in a processor having multiple issue ports

Publications (3)

Publication Number Publication Date
JP2008535074A true JP2008535074A (ja) 2008-08-28
JP2008535074A5 JP2008535074A5 (ja) 2012-06-07
JP5102758B2 JP5102758B2 (ja) 2012-12-19

Family

ID=34566706

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008503571A Active JP5102758B2 (ja) 2005-03-30 2006-03-17 複数の発行ポートを有するプロセッサにおける命令グループを形成する方法、並びに、その装置及びコンピュータ・プログラム

Country Status (5)

Country Link
US (1) US7934203B2 (ja)
JP (1) JP5102758B2 (ja)
CN (1) CN100585560C (ja)
GB (1) GB2424727B (ja)
TW (1) TWI406176B (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210098533A (ko) * 2019-01-08 2021-08-10 애플 인크. 코프로세서 동작 번들링

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007143278A2 (en) 2006-04-12 2007-12-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
EP2122461A4 (en) 2006-11-14 2010-03-24 Soft Machines Inc DEVICE AND METHOD FOR PROCESSING COMMUNICATIONS IN A MULTITHREAD ARCHITECTURE WITH CONTEXT CHANGES
US8116748B2 (en) 2006-12-14 2012-02-14 At&T Intellectual Property I, Lp Management of locations of group members via mobile communications devices
US8160548B2 (en) * 2006-12-15 2012-04-17 At&T Intellectual Property I, Lp Distributed access control and authentication
US8566602B2 (en) 2006-12-15 2013-10-22 At&T Intellectual Property I, L.P. Device, system and method for recording personal encounter history
US7646297B2 (en) 2006-12-15 2010-01-12 At&T Intellectual Property I, L.P. Context-detected auto-mode switching
US8787884B2 (en) * 2007-01-25 2014-07-22 At&T Intellectual Property I, L.P. Advertisements for mobile communications devices via pre-positioned advertisement components
US8649798B2 (en) * 2007-01-25 2014-02-11 At&T Intellectual Property I, L.P. Methods and devices for attracting groups based upon mobile communications device location
US8199003B2 (en) * 2007-01-30 2012-06-12 At&T Intellectual Property I, Lp Devices and methods for detecting environmental circumstances and responding with designated communication actions
US8335504B2 (en) 2007-08-23 2012-12-18 At&T Intellectual Property I, Lp Methods, devices and computer readable media for providing quality of service indicators
US20090070570A1 (en) * 2007-09-11 2009-03-12 Shubhodeep Roy Choudhury System and Method for Efficiently Handling Interrupts
US7992059B2 (en) 2007-09-11 2011-08-02 International Business Machines Corporation System and method for testing a large memory area during processor design verification and validation
US7752499B2 (en) * 2007-09-11 2010-07-06 International Business Machines Corporation System and method for using resource pools and instruction pools for processor design verification and validation
US8006221B2 (en) 2007-09-11 2011-08-23 International Business Machines Corporation System and method for testing multiple processor modes for processor design verification and validation
US8099559B2 (en) * 2007-09-11 2012-01-17 International Business Machines Corporation System and method for generating fast instruction and data interrupts for processor design verification and validation
US8019566B2 (en) * 2007-09-11 2011-09-13 International Business Machines Corporation System and method for efficiently testing cache congruence classes during processor design verification and validation
EP2616928B1 (en) 2010-09-17 2016-11-02 Soft Machines, Inc. Single cycle multi-branch prediction including shadow cache for early far branch prediction
US9274793B2 (en) 2011-03-25 2016-03-01 Soft Machines, Inc. Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
EP2689327B1 (en) 2011-03-25 2021-07-28 Intel Corporation Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
KR101639853B1 (ko) 2011-05-20 2016-07-14 소프트 머신즈, 인크. 복수의 엔진에 의해 명령어 시퀀스들의 실행을 지원하기 위한 자원들 및 상호접속 구조들의 비집중 할당
KR101842550B1 (ko) 2011-11-22 2018-03-28 소프트 머신즈, 인크. 다중 엔진 마이크로프로세서용 가속 코드 최적화기
EP2783281B1 (en) 2011-11-22 2020-05-13 Intel Corporation A microprocessor accelerated code optimizer
US8782620B2 (en) * 2012-06-12 2014-07-15 International Business Machines Corporation Processing reified generics in object-based programming environments
DE112012006946T5 (de) * 2012-09-27 2015-06-03 Intel Corporation Verfahren und Vorrichtung zur Planung von Speicherinstruktionen quer über atomare Bereiche bei der binären Übersetzung
US9304848B2 (en) 2013-01-15 2016-04-05 International Business Machines Corporation Dynamic accessing of execution elements through modification of issue rules
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
EP2972845B1 (en) 2013-03-15 2021-07-07 Intel Corporation A method for executing multithreaded instructions grouped onto blocks
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
CN105247484B (zh) * 2013-03-15 2021-02-23 英特尔公司 利用本地分布式标志体系架构来仿真访客集中式标志体系架构的方法
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US9348596B2 (en) 2013-06-28 2016-05-24 International Business Machines Corporation Forming instruction groups based on decode time instruction optimization
US9372695B2 (en) 2013-06-28 2016-06-21 Globalfoundries Inc. Optimization of instruction groups across group boundaries
US20160179542A1 (en) * 2014-12-23 2016-06-23 Patrick P. Lai Instruction and logic to perform a fused single cycle increment-compare-jump
US10331446B2 (en) * 2017-05-23 2019-06-25 International Business Machines Corporation Generating and verifying hardware instruction traces including memory data contents
US11962455B2 (en) 2021-11-29 2024-04-16 T-Mobile Usa, Inc. Prioritizing multiple issues associated with a wireless telecommunication network

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09292991A (ja) * 1996-04-30 1997-11-11 Nec Corp 命令処理方法及び命令処理装置
JP2002323982A (ja) * 2001-04-25 2002-11-08 Fujitsu Ltd 命令処理方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5148533A (en) * 1989-01-05 1992-09-15 Bull Hn Information Systems Inc. Apparatus and method for data group coherency in a tightly coupled data processing system with plural execution and data cache units
CA2016068C (en) * 1989-05-24 2000-04-04 Robert W. Horst Multiple instruction issue computer architecture
US5404557A (en) * 1991-11-22 1995-04-04 Matsushita Electric Industrial Co., Ltd. Data processor with plural instruction execution parts for synchronized parallel processing and exception handling
US6237077B1 (en) * 1997-10-13 2001-05-22 Idea Corporation Instruction template for efficient processing clustered branch instructions
WO2000022521A1 (en) 1998-10-10 2000-04-20 The Victoria University Of Manchester Program code conversion
US6871298B1 (en) * 1999-11-12 2005-03-22 Obsidian Software, Inc. Method and apparatus that simulates the execution of paralled instructions in processor functional verification testing
US6799262B1 (en) * 2000-09-28 2004-09-28 International Business Machines Corporation Apparatus and method for creating instruction groups for explicity parallel architectures
US7082602B2 (en) * 2002-04-12 2006-07-25 Intel Corporation Function unit based finite state automata data structure, transitions and methods for making the same
US7496494B2 (en) 2002-09-17 2009-02-24 International Business Machines Corporation Method and system for multiprocessor emulation on a multiprocessor host system
US8423976B2 (en) 2003-03-13 2013-04-16 Northrop Grumman Corporation Extreme pipeline and optimized reordering technology

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09292991A (ja) * 1996-04-30 1997-11-11 Nec Corp 命令処理方法及び命令処理装置
JP2002323982A (ja) * 2001-04-25 2002-11-08 Fujitsu Ltd 命令処理方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210098533A (ko) * 2019-01-08 2021-08-10 애플 인크. 코프로세서 동작 번들링
US11755328B2 (en) 2019-01-08 2023-09-12 Apple Inc. Coprocessor operation bundling
KR102588399B1 (ko) * 2019-01-08 2023-10-12 애플 인크. 코프로세서 동작 번들링

Also Published As

Publication number Publication date
GB0506469D0 (en) 2005-05-04
CN101151594A (zh) 2008-03-26
TW200710730A (en) 2007-03-16
CN100585560C (zh) 2010-01-27
GB2424727A (en) 2006-10-04
US7934203B2 (en) 2011-04-26
GB2424727B (en) 2007-08-01
US20060224863A1 (en) 2006-10-05
TWI406176B (zh) 2013-08-21
JP5102758B2 (ja) 2012-12-19

Similar Documents

Publication Publication Date Title
JP5102758B2 (ja) 複数の発行ポートを有するプロセッサにおける命令グループを形成する方法、並びに、その装置及びコンピュータ・プログラム
JP2008535074A5 (ja)
CN103858099B (zh) 用于执行应用的方法和系统、具有机器指令的电路
Eichenberger et al. Using advanced compiler technology to exploit the performance of the Cell Broadband Engine™ architecture
JP5934094B2 (ja) データ並列スレッドを有する処理論理の複数のプロセッサにわたるマッピング
Chakravarty et al. Data Parallel Haskell: a status report
US20080250227A1 (en) General Purpose Multiprocessor Programming Apparatus And Method
US9477465B2 (en) Arithmetic processing apparatus, control method of arithmetic processing apparatus, and a computer-readable storage medium storing a control program for controlling an arithmetic processing apparatus
WO2015150342A1 (en) Program execution on heterogeneous platform
US10372509B2 (en) Composable and cancelable dataflow continuation passing
US20080270771A1 (en) Method of optimizing multi-set context switch for embedded processors
US20120331278A1 (en) Branch removal by data shuffling
US8499293B1 (en) Symbolic renaming optimization of a trace
Osama et al. Parallel SAT simplification on GPU architectures
Diamos et al. Translating GPU binaries to tiered SIMD architectures with Ocelot
EP1866759B1 (en) Preparing instruction groups in a processor having multiple issue ports
Wozniak et al. Language features for scalable distributed-memory dataflow computing
Aditya et al. Elcor's machine description system: Version 3.0
US20050257200A1 (en) Generating code for a configurable microprocessor
US20230367604A1 (en) Method of interleaved processing on a general-purpose computing core
Fluet et al. Status report: The manticore project
JPH09512939A (ja) 超長命令語プログラムのオブジェクト・コードの互換性ある表記方法
Raskar Dataflow software pipelining for codelet model using hardware-software co-design
Aumage Instruments of Productivity for High Performance Computing
Abdolrashidi Improving Data-Dependent Parallelism in GPUs Through Programmer-Transparent Architectural Support

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090316

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20090731

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20090824

RD12 Notification of acceptance of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7432

Effective date: 20090824

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120105

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20120319

A524 Written submission of copy of amendment under article 19 pct

Free format text: JAPANESE INTERMEDIATE CODE: A524

Effective date: 20120319

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20120321

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

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20120904

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20120904

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120928

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

Free format text: PAYMENT UNTIL: 20151005

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 5102758

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150