JP4701174B2 - マルチスレッディングのためのコンパイラが生成したヘルパースレッドの方法および装置 - Google Patents

マルチスレッディングのためのコンパイラが生成したヘルパースレッドの方法および装置 Download PDF

Info

Publication number
JP4701174B2
JP4701174B2 JP2006528333A JP2006528333A JP4701174B2 JP 4701174 B2 JP4701174 B2 JP 4701174B2 JP 2006528333 A JP2006528333 A JP 2006528333A JP 2006528333 A JP2006528333 A JP 2006528333A JP 4701174 B2 JP4701174 B2 JP 4701174B2
Authority
JP
Japan
Prior art keywords
thread
main thread
helper
helper threads
threads
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.)
Active
Application number
JP2006528333A
Other languages
English (en)
Other versions
JP2007507048A5 (ja
JP2007507048A (ja
Inventor
ワン、ホン
ワン、ペリー
ギルカール、ミランダ
ラベリー、ダニエル、エム.
ホフレーナー、ゲロルフ、エフ.
ティエン、ジンミン
シェン、ジョン、ピー.
リャオ、シー−ウェイ
キム、ドンクン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2007507048A publication Critical patent/JP2007507048A/ja
Publication of JP2007507048A5 publication Critical patent/JP2007507048A5/ja
Application granted granted Critical
Publication of JP4701174B2 publication Critical patent/JP4701174B2/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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching
    • 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/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明の実施形態は情報処理システムに関し、特に、マルチスレッディングのためのコンパイラが生成したヘルパースレッドの方法および装置に関する。
メモリ待ち時間は、現在のプロセッサの高い性能を達成するに際して重大なボトルネックとなっている。アプリケーションのメモリアクセスパターンの予測が困難であり、ワーキングセットがかなり大きくなっているために、今日の多くの大きいアプリケーションはメモリ集約的である。キャッシュデザインの向上およびプリフェッチ技術における新しい開発にもかかわらず、メモリのボトルネック問題は依然として続いている。この問題は、従来のストライドベースのプリフェッチ技術に逆らう傾向にある、ポインタ集中のアプリケーションの実行の際により悪化する。
米国特許出願公開第2002/009566号明細書 米国特許出願公開第2002/0097725号明細書 米国特許出願公開第2002/0120663号明細書 米国特許出願公開第2003/0074653号明細書 米国特許出願公開第2003/0101444号明細書 米国特許出願公開第2004/0054990号明細書 米国特許出願公開第2004/0128489号明細書 米国特許出願公開第2004/0154011号明細書 米国特許第6959435号明細書 米国特許第7243267号明細書 Ammons, Ball, Larus: "Exploiting Hardware Performance Counters with Flow and Context Sensitive Profiling", 1997, ACM SIGPLAN, pp. 85-96 Luk: "Tolerating Memory Latency through Software-Controlled Pre-Execution in Simultaneous Multithreading Processors" Annavaram et al: "Data Prefetching by Dependence Graph Precomputation" LIAO S ET ALTERI: "Speculative Precomputations on Intel Architectures" TUTORIAL ON ARCHITECTURE AND COMPILER SUPPORT FOR SPECULATIVE PRECOMPUTATION - 12TH ANNUAL INTERNATIONAL CONFERENCE ON PARALLEL ARCHITECTURES AND COMPILATION TECHNIQUES - NEW ORLEANS, LOUISIANA, SEPT. 27 - OCT. 1, 2003
解決策の一つは、一つのプログラムで別のプログラムからの有用な命令の実行と同時にメモリ区画を重ね合わせることであり、その結果、効果的に総合的な処理能力に関して、システムの性能が向上する。単一のプロセッサ上におけるマルチタスクの作業付加のスループットを向上することは、同時マルチスレッディング(SMT)技術の出現の後にある主要な動機である。SMTプロセッサは、複数のハードウエアコンテキスト、または論理プロセッサ(または、ハードウエアスレッドと称される)から、同じサイクルのスーパースカラプロセッサの機能的ユニットに指示を出すことができる。SMTは、各サイクルの間の独立したスレッド間で、本来の並列処理の利用を通してアーキテクチャに利用可能な全体的な並列処理の指示レベルを増加させることにより、より高い総合的な処理能力を達成する。
SMTはまた、マルチスレッドのアプリケーションの能力を向上させることができる。しかしながら、SMTは、待ち時間を減少させる観点から見ると、シングルスレッドアプリケーションの能力を直接的に向上させるものではない。これまでのPC環境においてデスクトップアプリケーションの大多数はシングルスレッドであるので、仮にそしてどのように、待ち時間を減少させることによりシングルスレッドのコードのパフォーマンスを強化することにより、SMT資源を利用しうるのかを調査することは重要である。
本発明は、以下に述べる記述および本発明の実施形態を図示した添付図面を参照することにより最もよく理解されるであろう。
一実施形態に係るマルチスレッド機能を有するコンピュータシステムを図示する。
他の実施形態に係るマルチスレッド機能を有するコンピュータシステムを図示する。
一実施形態に係るヘルパースレッドを生成することのできるコンパイラを有するコンピュータシステムを図示する。
典型的な対照的マルチスレッドプロセスを図示する。
一実施形態に係る非対称マルチスレッドプロセスを図示する。
一実施形態に係る一つ以上のヘルパースレッドを実行する典型的なプロセスを示すフロー図である。
一実施形態に係るマルチスレッドシステムの典型的なソフトウエアアーキテクチャを図示するブロック図である。
一実施形態に係るヘルパースレッドを生成するための典型的なプロセスを示すフロー図である。
一実施形態に係る並列化分析の典型的なプロセスを示すフロー図である。
一実施形態に係るアプリケーション用、主要スレッド用、およびヘルパースレッド用の擬似的コードを示す。
一実施形態に係る典型的なスレッド設定を図示するブロック図である。
一実施形態に係るスレッドにリソースを割り当てるための擬似的なコードを示すブロック図である。
一実施形態に係るスレッドのためのリソース情報を含む、典型的なリソースデータ構造を示すブロック図である。
一実施形態に係るスレッドにリソースを割り当てる典型的なプロセスを示すフロー図である。
複数の方法の実施形態を使用したベンチマークテストの結果を示す。
マルチスレッドシステムのコンパイラ生成ヘルパースレッドの方法および装置について述べる。一実施形態によれば、例えば、インテル社から入手できるインテルペンティアム(登録商標)4ハイパースレッドシステムのようなマルチスレッドシステム上で、スレッドベースのプリフェッチヘルパースレッドを実行するオートヘルパーとしても呼ばれるコンパイラがスレッドを実行する。一実施形態によれば、コンパイラは、ハイパースレッドプロセッサのためにヘルパースレッドの生成を自動化する。最小限のコミュニケーションオーバーヘッドが流入する一方で、技術は、適時で効果的なデータプリフェッチングを達成するために実行され得る、最小限サイズのヘルパースレッドの特定および生成に注目する。ランタイムシステムは、また、ヘルパースレッドおよびスレッド間の同期化を効果的に管理するために実行される。その結果、ヘルパースレッドは適時に、順次ポインタ集中アプリケーションのためのプリフェッチを発行できる。
更に、レジスタコンテキストなどのハードウエア資源が、コンパイラ中においてヘルパースレッドによって管理されてもよい。具体的には、レジスタセットは、静的または動的に主要スレッドとヘルパースレッド間、および多重ヘルパースレッド間に分割されてよい。結果として、スレッドのためのメモリを介したリブ−イン/リブ−アウトレジスタコピーは回避されうるし、コンパイラがリソースを使い果たしたとき、または所定の主要スレッドイベントのまれなケースが生じるランタイムにおいて、スレッドはコンパイル時間で破棄されうる。
以下の記述では、多数の特定の記述が説明されている。しかしながら、本発明の実施形態がこれらの特定の記述なしに実施されうることが理解される。他の場合においては、本記述の理解をあいまいにしないために、既知の回路、構造、および技術の詳細については示していない。
以下の詳細な記述のいくつかの部分は、アルゴリズムおよびコンピュータメモリ中のデータビット上における操作の記号による表現の観点で示されている。これらのアルゴリズム的な記述および表現は、他の当業者にそれらの働きの要旨を最も効果的に伝えるために、データ処理技術の当業者によって使用される。本明細書におけるアルゴリズムとは、一般的に、所望の結果に導く演算の、自己矛盾のない手順として考えられる。演算は、物理量の物理的な取り扱いを必要とするものである。通常、必ずしも必要ではないが、これらの物理量は、格納することができ、転送することができ、結合することができ、比較することができ、およびその他の操作をすることができる、電気的、または磁気的な信号の形式をとる。時には、主に一般的に使用されているという理由で、これらの信号を、ビット、数値データ、要素、符号、文字、語、数字などとして参照することが有用であることが証明されている。
しかしながら、これらおよび類似の用語の全てが適切な物理量と関連付けられており、これらの物理量にラベルとして適用しているのは単に便利だからであるという点は念頭においておくべきである。別の方法で以下の記述によって明らかであるとして明確に述べられない場合には、記述全体を通して、「処理する」、または「コンピュータで計算する」、または「計算する」または「決定する」または「表示する」などのような用語を利用している議論が、コンピュータシステム、あるいは類似のデータ処理装置の動作、およびプロセスを言及していることがわかる。データ処理装置は、コンピュータシステムのレジスタ、並びにメモリ内の物理(例えば、電子的な)量として表されるデータを扱い、そして、コンピュータシステムのレジスタ、およびコンピュータシステムのメモリあるいはレジスタ、若しくは他の情報記憶装置、送信装置、あるいは表示装置内の物理量として同様に表される他のデータ内へ転送する。
本発明の実施形態は、また、ここで述べる操作を実行する装置に関する。装置は、必要な目的に応じて特に構成されていてよく、あるいは、選択的に起動する、または、コンピュータに格納されているコンピュータプログラムによって再構成される一般的な目的のコンピュータで構成してもよい。そのようなコンピュータプログラムは、コンピュータで読み込み可能な記憶媒体、例えばフロッピーディスク(登録商標)、光ディスク、CD−ROM、そして、磁気光学ディスク、リードオンリーメモリ(ROM)、ダイナミックRAM(DRAM)のようなランダムアクセスメモリ(RAM)、消去可能なプログラマブルROM(EPROM)、電気的に消去可能なプログラマブルROM(EEPROM)、磁気あるいは光カード、あるいは他の型の電子情報を格納するのに適した媒体のような、これらに限定はされないが、どのような種々のディスクに格納されていてもよく、上記記憶媒体の各々はコンピュータバスに接続されている。
本明細書で示すアルゴリズムおよび表示部は、本来的にはどのような特定のコンピュータまたは他の装置とは関係しない。様々な一般的な目的のシステムが、本明細書の教示に関連付けられたプログラムを用いて使用されてよく、あるいは、方法を実行するためのより特定化された装置を構成するために有用であると証明してよい。多様なこれらのシステムのための構造は、以下に記載した記述から明らかになるだろう。更に、本発明の実施形態は、どのような特定のプログラム言語を参照しては記述されていない。様々な種類のプログラム言語が本明細書で記述する発明の実施形態の教示を実行するために用いられてもよいことが理解されるであろう。
機械可読な記録媒体は、機械(例えば、コンピュータ)で読み込み可能なフォームの情報を格納あるいは転送する、いかなる仕組みを含む。例えば、機械読み込み可能な記録媒体は、リードオンリーメモリ(ROM)、ランダムアクセスメモリ(RAM)、磁気ディスク記録媒体、光記録媒体、フラッシュメモリディスク、電気的、光学的、音響的、あるいは伝播する信号の他の形態(例えば、搬送波、赤外信号、デジタル信号等)を含む。
図1は、一実施形態で用いられてよい典型的なコンピュータのブロック図である。例えば、図1に示す典型的なシステム100は、図5から8に示したプロセスを実行してよい。典型的なシステム100は、インテルペンティアム(登録商標)4ハイパースレッディングシステムのような、多重スレッドシステムであってよい。典型的なシステム100は、同時実行マルチスレッディング(SMT)、あるいはチップマルチ処理(CMP)が有効なシステムであってよい。
ここで留意すべきは、図1はコンピュータシステムの様々な構成要素を図示する一方で、どのような特定のアーキテクチャ、または、構成要素の相互接続の方法を表すことは意図していないことである。そのような詳細は本発明と密接に結びついていないからである。また、より少ない構成要素または恐らくより多くの構成要素を有するネットワークコンピュータ、携帯型コンピュータ、携帯電話、そして他のデータ処理システムが、本発明と共に用いられてもよいことが理解されるであろう。
図1に示すように、データ処理システムの形態であるコンピュータシステム100は、マイクロプロセッサ103と、ROM107、揮発性RAM105、および不揮発性メモリ106とを接続するバス102を含む。インテル社からのペンティアム(登録商標)プロセッサ、またはモトローラ社からのパワーPCプロセッサであってよいマイクロプロセッサ103は、図1の例に示すようにキャッシュメモリ104に結合されている。バス102は、これらの様々な構成要素を互いに相互接続し、また、これらの構成要素103、107、105、および106を、マウス、キーボード、モデム、ネットワークインターフェース、プリンタ、および当該技術分野で周知の他のデバイスなどの入出力(I/O)デバイス110と同様にディスプレイコントローラおよびディスプレイデバイス108にも相互接続する。一般的に、入出力デバイス110は、入出力コントローラ109を介してシステムに接続される。揮発性RAM105は、典型的には、リフレッシュまたはメモリ内のデータを保持するために継続的に電源供給を必要とする、動的RAM(DRAM)として実行される。不揮発性メモリ106は、典型的には、磁気ディスク装置、磁気光学ディスク装置、光ディスク装置、あるいはDVD RAMまたはシステムから電源供給がなくなった後でもデータを保持する他の型のメモリシステムである。一般的に、不揮発性メモリはまた、必ずしも必要ではないが、ランダムアクセスメモリであってよい。図1では、不揮発性メモリが、データ処理システムの残りの構成要素に直接的に接続しているローカルデバイスである一方で、システムから離れている不揮発性メモリを、モデムやイーサネット(登録商標)インターフェースのようなネットワークインターフェースを介してデータ処理システムに接続されているネットワーク上の記憶装置として、本発明が利用してもよいことを理解されるであろう。バス102は、当該技術分野の当業者にとって周知の様々なブリッジ、コントローラ、および/またはアダプタを介してお互いに接続されている、一つ以上のバスを含んでいてよい。一実施形態においては、入出力コントローラ109は、USB周辺機器の制御のためのUSB(ユニバーサルシリアルバス)アダプタ、あるいは入出力デバイス110の中に含まれるPCIデバイスの制御のためのPCIコントローラを含んでいる。他の実施形態においては、入出力コントローラ109は、ファイアウォール装置としても知られる、IEEE1394装置の制御のためのIEEE1394コントローラを含む。
一実施形態によれば、プロセッサ103は、非投機的スレッドとしても呼ばれる主要スレッド、および投機的スレッドとしても呼ばれるアプリケーションの一つ以上のヘルパースレッドを含む、多重スレッドを同時に扱うための論理プロセッサとも呼ばれる一つ以上の論理ハードウエアコンテキストを含んでいてよい。プロセッサ103は、インテル社からのマルチスレッディングプロセスが可能なペンティアム(登録商標)4やジオン(登録商標)プロセッサなどの、ハイパースレッディングプロセッサであってよい。アプリケーションの実行の間、主要スレッドと一つ以上のヘルパースレッドとは並行して実行される。ヘルパースレッドは、主要スレッドによって発生するメモリ遅延時間を減らすために、アドレスあるいはデータの投機的なプリフェッチングのようなある演算を実行する主要スレッドに関連して、いくらか独立してはいるが、投機的に実行される。
一実施形態によれば、ヘルパースレッドのコード(例えば、ソースコードおよびバイナリ実行コード)は、プロセッサ103のようなプロセッサによって実行されるオペレーティングシステム(OS)によって揮発性RAM105のようなメモリ中にロードされて実行される、インテル社から入手可能なオートヘルパーコンパイラのようなコンパイラによって生成される。典型的なシステム100の中で稼動しているオペレーティングシステムは、マイクロソフト社からのウインドウズ(登録商標)、または、アップルコンピュータ社からのマックOS(登録商標)であってよい。他の例では、オペレーティングシステムは、リナックス(登録商標)、または、ユニックス(登録商標)であってもよい。組み込みの実時間オペレーティングシステムのような、他のオペレーティングシステムを利用してもよい。
一般に知られているハイパースレッディングプロセッサは、典型的には、二つのハードウエアコンテキスト、または、論理プロセッサを備える。シングルスレッドアプリケーションの性能を向上させるために、ハイパースレッディング技術は、主要スレッドのためにプリフェッチングを実行するために、その二番目のコンテキストを利用できる。分離したコンテキストを有することで、ソフトウエアによるプリフェッチングとは異なり、主要スレッドの制御フローから分離されるヘルパースレッドの実行を可能とする。長いレンジのプリフェッチの実行のために主要スレッドをはるか先まで実行することにより、ヘルパースレッドは早期にプリフェッチの契機を与え、主要スレッドによって経験されたキャッシュミスペナルティを、排除あるいは減少させる。
オートヘルパーによって、コンパイラは自動的にハイパースレッディング装置用のプリフェッチングヘルパースレッドを生成できる。ヘルパースレッドは、マルチスレッディングの遅延時間隠しの利益を、順次仕事量にもたらすことを目的とする。従来の並行コンパイラによって生成されたスレッドとは異なり、ヘルパースレッドは、ヘルパースレッドからの計算結果を再使用しない主要スレッドだけをプリフェッチする。一実施形態によれば、ヘルパースレッドはプログラムの正確性に影響を与えず、もっぱら性能の向上にだけ使用される一方で、プログラムの正確性は、未だ主要スレッドの実行によって保たれている。この特性は、ヘルパースレッドを生成させることにおける、より積極的な形式の最適化の使用を可能とする。例えば、主要スレッドがヘルプを必要としないときは、従来のスループットスレッディングパラダイムでは不可能であった所定の最適化が実行されてよい。
一実施形態によれば、仮に所定の時間の間にヘルパーが必要でないことが予測できる場合には、ヘルパーは終了してよく、主要スレッドに対するヘルパーに関連した全てのリソースを解放してもよい。他の実施例によれば、仮にヘルパーがすぐに必要とされ得ることが予測できる場合には、ヘルパーはハイパースレッディングハードウエア上のいくらかのリソースをまだ消費する、ポーズモードとなってよい。急激なバックオフ(停止を介して)が、仮にヘルパーが非常に長い間(例えば、プログラマブルタイムアウトを超える期間)ポーズモード状態でいるときに呼び出されてもよい。他の実施形態においては、仮にコンパイラがヘルパースレッドが必要とされるときを予測できない場合に、ヘルパーはスヌーズモードになってよく、主要スレッドのためにプロセッサ資源の支配を断念してもよい。
更に、一実施形態によれば、ヘルパースレッドが主要プログラムの動作に寄与しないので、パフォーマンスの監視およびオンザフライでの調整が、ヘルパースレッディングパラダイム下で可能とされる。主要スレッドがヘルパーを必要とする場合には、主要スレッドを起動させてもよい。例えば、ランナウェイヘルパーまたはランビハインドスレッドに関して、上述した一つのプロセスは、ランナウェイヘルパースレッドを調整するために呼び出されてよい。
図2は、開示された技術によって実行可能なコンピューティングシステム200の一実施例を示すブロック図である。一実施形態においては、コンピューティングシステム200は、プロセッサ204およびメモリ202を含む。メモリ202はプロセッサ204の可動を制御するための命令210およびデータ212を格納してよい。プロセッサ204は、実行コア230に命令情報を供給するフロントエンド221を含んでいてよい。フロントエンド221は、プログラム命令でプロセッサコア204へ命令情報を供給してもよい。
少なくとも一つの実施形態によれば、フロントエンド221は、複数のスレッドコンテキストのそれぞれのための、論理的に独立しているシーケンサ220を含むフェッチ/デコードユニット222を含んでいてよい。論理的に独立しているシーケンサ220は、投機的スレッドが「投機的」であるために命令情報をマークする、マーキングロジック280を含んでいてよい。当業者であれば、多重スレッド環境の多重プロセッサで実行される実施形態にとって、フェッチ/デコードユニット222内に、唯一つのシーケンサ222が含まれていてもよいことを理解するであろう。
本明細書で使用するように、「命令情報」という用語は実行コア230によって理解され実行されることができる、命令を示すものを意味する。命令情報はキャッシュ225に格納されてよい。キャッシュ225は、実行命令キャッシュあるいは実行トレースキャッシュとして実行されてよい。実効命令キャッシュを利用する実施例においては、「命令情報」は命令キャッシュからフェッチされた命令およびデコードされた命令を含んでいる。トレースキャッシュを利用する実施例においては、用語「命令情報」はデコードされたマイクロオペレーションを含む。実効命令キャッシュおよびトレースキャッシュの両方とも利用しない実施例においては、「命令情報」は、Iキャッシュ244のような命令キャッシュに格納されていてよい命令のraw型バイトをも含む。
図3は、一実施形態における、一つ以上のヘルパースレッドを生成するコンパイラを含む典型的なシステムを示すブロック図である。図3を参照すると、典型的な処理システム300は、メモリシステム302およびプロセッサ304を含む。メモリシステム302は、プロセッサ304の稼動を制御するための命令310およびデータ312を格納してよい。例えば、命令310は、実行時に、プロセッサ304にメモリシステム302に常駐しているプログラムのコンパイルをさせるコンパイラプログラム308を含んでいてよい。メモリ302はコンパイルされるプログラム、プログラムの中間形態、およびコンパイルされたプログラムの結果を保持する。少なくとも一つの実施形態においては、コンパイラプログラム308は、主要なスレッドに対しての一つ以上のヘルパースレッドのためのコードを生成する命令を含む。
メモリシステム302は、メモリの一般的な表現を意味しており、ハードディスク装置、CD−ROM、ランダムアクセスメモリ(RAM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、および関連する回路のような、様々な形態のメモリを含んでよい。メモリシステム302は、命令310および/またはプロセッサ304によって実行されてよいデータ信号によって表されるデータを格納してよい。命令310および/またはデータは、本明細書で述べる技術のいずれかまたはすべてを実行するためのコードを含んでよい。
具体的には、コンパイラ308は、プロセッサ304によって実行されたときに、主要スレッドの一つ以上の不良ロード領域を特定する、不良ロード識別子を含んでよい。コンパイラ308は、プロセッサ304によって実行されたときに、ヘルパースレッドのために一つ以上の並列化分析を実行する、並列アナライザ324も含んでよい。また、コンパイラ308は、投機的な事前演算を実行するためにヘルパースレッドによって実行される一つ以上のスライスを特定するスライサ322を含んでよい。コンパイラ308は、更に、プロセッサ304によって実行されたときに、ヘルパースレッドのためにコード(例えば、ソースおよび実行コード)を発生する、コードジェネレータ328を含んでよい。
一実施形態において、図4Bに示したように、SMT装置においてヘルパースレッドを実行することは、非対称のマルチスレッディングの形態となる。図4Aに示したように、従来のプログラミングモデルは対称的なマルチスレッディングを提供する。その一方、図4Bに示したヘルパースレッド451から454のようなヘルパースレッドは、ユーザレベルのスレッド(ファイバー)として、軽いスレッドの起動とスイッチングで実行する。更に、対称的なマルチスレッディングは、図4Aに示したスレッド401から404のように、対称的なスレッドの全体にわたって、よく同調されたデータ分解を必要とする。一実施形態において、ヘルパースレッドモデルでは、主要スレッドは、データ分解オーバーヘッドを流入させることなしに、全データセット上で動作する順次コードを走らせる。データを分解せずに、コンパイラは代わりに適宜主要スレッドのデータのためにプリフェッチする多重ヘルパーを供給することに集中する。
図5は、一実施形態に係るヘルパースレッドを実行する典型的なプロセスのフロー図である。典型的なプロセス500は、ハードウエア(回路、専用ロジック等)、ソフトウエア(一般的な目的のコンピュータシステム上や専用装置上で走らされるようなソフトウエア)、または両者の組み合わせを構成するプロセシングロジックによって実行されてよい。一実施形態においては、典型的なプロセス500は、多重スレッドシステムのアプリケーションの主要スレッドを実行すること、および主要スレッドの編集中に生成される一つ以上のヘルパースレッドのコード、一つ以上の不良ロードを有する主要スレッドが領域に入った場合に、主要スレッドのための一つ以上の演算を実行する主要スレッドから一つ以上のヘルパースレッドを発生することを含む。
図5を参照すると、ブロック501において、プロセシングロジックは、一つ以上のヘルパースレッドによって使用されてもよい論理スレッドコンテキストのリストを保持する、内部スレッドプールを生成する。ブロック502において、主要スレッドがコンパイラによって特定されてよい不良ロード領域(例えば、事前演算領域)に入る前に、新しいスレッドチームが生成されてよい。一実施例において、新しいスレッドチームは、初期状態においては呼出スレッドだけを含む。一実施例によれば、コンパイラは、一つ以上のヘルパースレッドを可動させる領域に主要スレッドが入る前に、開始ヘルパーステートメントのようなステートメントを挿入してよい。ブロック503では、主要スレッドが領域に入った場合に、主要スレッドは、(ヘルパー呼び出しのような関数呼び出しを介して)、主要スレッドのためのアドレスおよびデータをプリフェッチするような一つ以上の事前演算を実行するためのスレッドプールからのリソースを使用して生成される、一つ以上のヘルパースレッドを発生する。一実施形態によれば、仮に発生したヘルパースレッドを実行するための論理プロセッサが利用可能でない場合には、ヘルパースレッドは、生成されて、続いて起こる実行のスレッドチームのための実行キューに置かれてよい。一実施形態では、実行キューはタイムアウトと関連付けられてよい。ヘルパーの呼出要求は、プリフェッチがもはや時宜にかなっていないと仮定して、タイムアウト期間が終了した後に単に脱落する(例えば、終了する)。これは従来の、各々のタスクが実行されることが要求される並列プログラミング用のタスクキューモデルとは異なるものである。
ブロック504では、主要スレッドの領域内のコードの少なくとも一部が一つ以上のヘルパースレッドによって供給されたデータ(例えば、プリフェッチあるいは事前演算された)の一部を使用して実行される。一実施形態によれば、ヘルパースレッドによって計算された結果は、主要スレッド内に統合されない。ヘルパースレッドの利点は、その演算結果を再使用できる点にあるのではなく、プリフェッチングの副次的効果にある。これはコンパイラが、ヘルパースレッドのためのコード生成を積極的に最適化することを可能とする。主要スレッドは正確性の問題を扱い、一方ヘルパースレッドはプログラムの性能に照準を合わせる。これはまた、ヘルパースレッドが、適切と判断したときにはいつでも要求を落とすことのできる、ヘルパー呼び出しのようなステートメント呼び出しを可能とする。最終的には、プリフェッチ命令のような不良のない命令が、ヘルパースレッド内で例外が信号として検出された場合に、主要スレッドとの断絶を避けるために使用されてよい。
ブロック505では、主要スレッドがまさに不良ロード領域、および論理スレッドコンテキストのような、解放されてスレッドプールに戻される終了したヘルパースレッドに関連付けられるリソースから出ようとしているときに、主要スレッドと関連付けられた一つ以上のヘルパースレッドが終了する(ヘルパー終了命令のような、関数呼び出しを介して)。これは、将来の要求に対して、スレッドプールからの論理スレッドコンテキストを即座にリサイクルすることを可能とする。当業者に明らかな他の動作も含んでよい。
ハイパースレッディング技術は、一つ以上のヘルパースレッドの実行をサポートすることによく適している。一実施形態によれば、各プロセッササイクルにおいて、いずれの論理プロセッサからの命令も、分担されている実行資源上で同時に実行され、スケジュールされ得る。これは、ヘルパースレッドにタイムリーなプリフェッチの発行を可能とする。更に、内蔵キャッシュの階層の全体が、キャッシュ階層の全てのレベルでの主要スレッドのために効果的にプリフェッチすることはヘルパースレッドに役立つ、論理プロセッサ間で分担される。その上、物理実行資源は論理プロセッサ間で分担されているものの、アーキテクチャ状態は、ハイパースレッディングプロセッサ内で再現される。ヘルパースレッドの実行は、主要スレッドを実行している論理プロセッサのアーキテクチャ状態を変えるものではない。
しかしながら、ハイパースレッディング技術が装置上で実行可能であるものの、ヘルパースレッドは、メモリに書き込むことによって主要スレッドの実行にまだ影響を与え得る。ヘルパースレッドはメモリを主要スレッドと共有しているため、主要スレッドのデータ構造に書き込まないことをヘルパースレッドの実行は保証されるべきである。一実施形態においては、コンパイラ(例えば、オートヘルパー)は、主要スレッドとヘルパースレッドとの間のメモリ保護を与える。コンパイラは、蓄積を、ヘルパースレッドの非局所的変数に移転する。
図6は、一実施形態に係るコンパイラの典型的なアーキテクチャを示すブロック図である。一実施形態では、典型的なアーキテクチャ600は、とりわけ、フロントエンドモジュール601、プロファイラ602、内部手続分析および最適化モジュール603、コンパイラ604、グローバルスカラ最適化モジュール605、およびバックエンドモジュール606を含む。一実施形態では、フロントエンドモジュール601は、C/C++やフォートランのような、様々なプログラム言語によって記述されたソースコードのために、インテル社によるIL0表現のような共通の内部表現を供給する。結果として、オートヘルパー604のようなコンパイラは、ソース言語および目標プラットフォームと関わりなく適用される。プロファイラ602は、表現の特徴を調査するためにプロファイリングランを実行する。内部手続き分析モジュール603は、プロシージャコール境界にわたって最適化の機会をさらしてよい。その後、コンパイラ604(例えば、オートヘルパー)は、一つ以上のヘルパースレッドのためのコードを生成するために実行される。グローバルスカラ最適化モジュール605は、部分的な冗長除去を使用して、評価される多数の表現を最小化することに適用する。最終的には、バックエンドモジュール606は、インテル社からのIA−32、あるいはアイテニアムプラットフォームのような、様々なプラットフォームのヘルパースレッドのための、バイナリコードを生成する。当業者にとって自明な他の構成要素を含んでいてもよい。
従来のアプローチとは異なり、オートヘルパー(例えば、コンパイラ)は、ツールをより簡単に使えるように、プロファイル計測パスを除去する。一実施形態によれば、ハイパースレッディング技術が可能であるインテル社のVTune(登録商標)Performance Analyzerなどによって生成された、プロファイリング結果からの出力をコンパイラは直接分析できる。ポストパスツールの代わりに、ミドルエンドパスであるので、コンパイラは、配列ディペンデンス分析およびグローバルスカラ最適化などのような、いくつかの製品品質分析を利用できる。これらの分析は、コンパイラ後に呼び出され、ヘルパースレッドのコード上で積極的な最適化を実行する。
一実施形態によれば、コンパイラは、ロードによってアクセスされた高い頻度でキャッシュに失敗した不良ロードとも呼ばれるアドレスを、事前演算しプリフェッチする、一つ以上のヘルパースレッドを生成する。コンパイラは、また、一つ以上のヘルパースレッドを発生する、主要スレッド中に一つ以上のトリガを生成する。コンパイラはトリガを、ヘルパー機能コール呼出などの機能呼出として使用する。一度トリガが到達すると、ロードが主要スレッドの命令ストリーム中に後で出現することが予測されるので、投機的に実行されるヘルパースレッドは、主要スレッド中のキャッシュ損失の数を減少させることができる。
図7は、一実施形態に係るオートヘルパーのような、コンパイラによって実行される典型的なプロセスを示したフロー図である。典型的なプロセス700は、ハードウエア(回路、専用ロジック等)、ソフトウエア(一般的な目的のコンピュータシステム上や専用装置上で走らされるようなソフトウエア)、または両者の組み合わせを構成するプロセシングロジックによって実行されてよい。一実施形態において、典型的なプロセス700は、詳細は以下で述べるように、不良ロードの使用を特定するために、例えばインテル社のVTuneツールで、ブロック701で開始し、ヘルパースレッドのための並行分析を実行し(ブロック720)、ヘルパースレッドのためのコードを生成し(ブロック703)、そして、各ヘルパースレッドおよび主要スレッドにハードウエアレジスタやメモリのようなリソースを割り当てる(ブロック704)。
一実施形態によれば、コンパイラは、一つ以上のランタイムプロファイルを使用するアプリケーションソースコード中のほとんどの不良ロードを特定する。従来のコンパイラは、二つの段階でプロファイルを集める。すなわち、プロファイル計測およびプロファイル生成である。しかしながら、キャッシュ損失は、コンパイラにさらされているアーキテクチャの特徴ではないために、プロファイル計測パスは、不良ロードを特定するコンパイラのためのキャッシュ損失の計測を許可しない。各キャッシュ階層のためのプロファイルは、インテル社のVTune(登録商標) Analyzerのような、ユーティリティを介して収集される。一実施形態では、アプリケーションは、コンパイラに優先して離れたプロファイリング実行中のデバッグ情報と共に実行されてよい。プロファイリング実行中にキャッシュ損失はサンプリングされ、ハードウエアカウンタがアプリケーション中の各静的ロードのために蓄積される。
コンパイラはスレッドベースのプリフェッチングの候補を特定する。特定の実施形態では、VTune(登録商標)が各ロード要素ごとのキャッシュの振る舞いを集約する。プロファイリング実行のためのバイナリがデバッグ情報(例えば、デバッグ記号)と共にコンパイルされるので、ソースライン番号とステートメントにプロファイルを相互に関連付けて戻させることが可能である。予め定められた閾値以上の原因となる所定のロードは、不良ロードとして特定されてよい。ある実施形態においては、キャッシュ損失の90%の原因となるトップロードを不良ロードとして表される。
不良ロード命令を特定することに加えて、コンパイラは、正確に不良ロードのアドレスを計算するヘルパースレッドを生成する。一実施形態において、ヘルパースレッドの分離したコードが生成される。主要スレッドとヘルパースレッドのコードとの分離は、ヘルパースレッドのコードの変換が、主要スレッドに影響することを妨げる。一実施形態においては、コンパイラは、従来のアウトライニングの代わりに、インテル製品のコンパイラの中の多重エントリスレッディングを使用して、ヘルパースレッド用に分離したコードを生成する。
更に、一実施形態においては、コンパイラは、事前演算領域として表されるコンパイラ選択コード領域の精度において、多重エントリスレッディングを実行する。この領域は、不良ロードのセットを包含し、そして、理論的な事前演算の適用範囲を定義する。一実施形態では、ループは通常はプログラム実行の中でホットスポットであるため、実行は通常はループ領域を目標とし、そして、不良ロードは、通常はループ中で複数回実行されたロードである。
図8は、一実施形態に係る並列化分析の典型的なプロセスを示すフロー図である。典型的なプロセス800は、ハードウエア(回路、専用ロジック等)、ソフトウエア(一般的な目的のコンピュータシステム上や専用装置上で走らされるようなソフトウエア)、または両者の組み合わせを構成するプロセシングロジックによって実行されてよい。図8を参照すると、ブロック801で、プロセシングロジックは、データおよび主要スレッドの制御の従属関係の双方を取り入れるディペンデンスグラフを構築する。一実施形態によれば、無関係のコードをフィルターにかけて除去し、ヘルパースレッドのコードサイズを減少させるために、コンパイラは、最初にデータおよびコントロール従属の双方を取り入れるグラフを構築する。フィルタリングの有効性および正当性は、コンパイラのメモリ参照を正確に明確にできる能力によっている。結果として、コンパイラ中のメモリ明確化モジュールは、動的にオブジェクトに割り当てられたポインタを明確にするために呼び出される。ポインタはグローバル変数またはファンクションパラメータであってよいので、仮にコンパイラが全プログラムモードでコンパイルする場合に、コンパイラによって実行される分析点は内部手続的である。一実施形態では、もし全ての配列のアクセスが限界評価の場合に、配列中の各要素がディペンデンスグラフの構築中に明確となるように、ディペンデンスグラフをより正確に構築するために配列ディペンデンステストのシリーズが実行されてよい。別の方法では、近似を用いる。更に、構造中の各フィールドは明確にされてよい。
図8を再び参照すると、ブロック802では、プロセシングロジックが、ディペンデンスグラフを使用して主要スレッド上でスライシングオペレーションを実行する。一実施形態において、スライシングの間において、コンパイラは、不良ロードのロードアドレスを、中間スライシング結果を特定するスライス基準として、最初に特定する。ディペンデンスグラフを構築した後では、コンパイラは、特定されたスライス基準のプログラムスライスを計算する。スライス基準のプログラムスライスは、一つ以上のヘルパースレッドによって実行されるメモリプリフェッチのためのアドレスの計算に寄与する命令セットとして特定される。スライシングは、アドレスの計算に関連する命令だけにコードを減らすことができるので、主要スレッドに先立って、よりすばやくヘルパースレッドを走らせることが可能となる。コンパイラは、ヘルパースレッドのコードにスライスの命令をコピーする必要があるだけである。
一実施形態によれば、コンパイラ中のスライシングは、過渡的に後方にディペンデンスエッジを横断することによって不良ロードのアドレスを生成する命令の最小のシーケンスを抽出する。スライス結果のディペンデンスグラフ上のリーフノードは、これ以上それらのリーフノードによって命令が決定されないために、プリフェッチ命令に変換され得る。インテル社から入手可能なペンティアム(登録商標)4のようなプロセッサによって実行されるそれらのプリフェッチ命令は、非ブロッキングおよび非フォールティングの双方である。メモリ階層中の異なるキャッシュレベルの中にデータを持ち込んで、異なるプリフェッチ命令は存続する。
一実施形態によれば、スライシング動作は、与えられたコード領域に関して実行されてよい。与えられた領域のディペンデンスグラフ上の横断は、その領域の外にコードが到達した場合には終了しなければならない。それゆえに、スライシングは、グラフ横断が領域の外まで補い、それから領域の内側に戻るので、横断後の代わりに横断中に終了されなければならない。単純に横断後の領域に応じてスライスを集めると、正確性を失いかねない。
他の実施例によれば、コンパイラは各不良ロード命令を一つずつスライスする。ヘルパースレッド中のコードの重複を最小化し、スレッドの起動および同期化のオーバーヘッドを減少させるために、コンパイラは、スライスが同一の事前演算領域にある場合に、スライスを一つのヘルパースレッドにマージする。
再び図8を参照すると、ブロック803において、プロセシングロジックは、多数のプリフェッチをオーバーラップさせるスレッドにわたってスケジューリングを実行する。一実施形態においては、ハイパースレッディングプロセッサは、大きなスケジューリングウィンドウで不調な実行をサポートするので、プロセッサは、ペンディングキャッシュ損失上で待っている場合に、現在実行されている命令を越えて独立の命令を探索できる。この不調な実行の側面は、インオーダプロセッサにわたって相当のパフォーマンスゲインをもたらし、投機的な事前演算のチェーンの必要性を減少させることができる。更に、コンパイラは、ハイパースレッディングプロセッサのための基本的な投機的事前演算を選択する。すなわち、ただ一つのヘルパースレッドが、一度にスレッドの発生およびコミュニケーションのオーバーヘッドを記録するために、スケジュールされる。基本的な投機的事前演算を使用することの他の利点は、連鎖する投機的事前演算と同じぐらい速く、ハイパースレッディングプロセッサ上のメモリシステムを満たさないことである。不調なプロセッサが実行するための独立命令を探す場合には、それらの命令は非常に多くのロード要求を生成してメモリシステムを満たすことができる。ヘルパースレッドがプリフェッチング要求を発行した場合には、多くの目立った損失は、急速に損失バッファを満たし、結果としてプロセッサを止めてしまう。それゆえに、コンパイラは、ヘルパースレッドを発生させることに賢明さが要求される。最終的には、タイムリーなプリフェッチングを確実にするために、コンパイラは、論理プロセッサごとのシングルヘルパースレッドおよび主要スレッドを特定する。
図8を再び参照すると、ブロック804では、プロセシングロジックはスレッドのためにコミュニケーションスキームを選択する。一実施形態では、コンパイラは、与えられたどのようなスライス、あるいはどのようなプログラムのサブセットのために、ライブネス情報を演算するモジュールを供給する。ライブネス情報はコミュニケーションコスト上の見積もりを提供する。情報は、コミュニケーションと演算との間のよいトレードオフ関係を提供するために、事前演算領域を選択するために用いられる。ライブネス情報は、トリガ、あるいは後方のスライシング末端のポイントの発見の補助をしてもよい。
典型的なハイパースレッディングプロセッサはプロセッササイクルごとに3つのマイクロオプスを発行し、いくらかのハード分割されたリソースを使用するので、特に、仮に主要スレッドが、既に、サイクルごとの実行に3つのマイクロオプスを発行している場合に、コンパイラは、ヘルパースレッドに主要スレッドの実行を遅延させないほど賢明でなければならない。ループは不良ロードを取り込んでネストするために、コンパイラは、再計算と投機的な事前演算を実行するためのループレベルを選ぶコミュニケーションとの間のトレードオフを作成する。一実施形態によれば、最深部から始まる各ループレベルのために、コンパイラは、コミュニケーションベースのスキームと演算ベースのスキームの一つを選択する。
一実施形態によれば、コミュニケーションベースのスキームでは、各繰り返しでライブインバリューを主要スレッドからヘルパースレッドに通信するので、ヘルパースレッドはライブインバリューを再計算する必要がない。ほとんどの不良ロードを包含する内部ループが存在し、内部ループのためのスライシングがヘルパースレッドのサイズを著しく減少させた場合には、コンパイラは当該スキームを選択してよい。しかしながら、当該スキームは、内部ループレベルのコミュニケーションコストが非常に大きい場合には、無効とされてよい。コンパイラは、ライブインバリューが早期に計算されて、ライブインの数が小さい場合には、コミュニケーションコストのより小さな見積もりを与えてよい。
コミュニケーションベースのスキームは、ランタイムにおいて主要スレッドとそのヘルパースレッドとの間に、複数のコミュニケーションポイントを生成してよい。ヘルパースレッド内のスライスを再計算することによって、ただ一つのコミュニケーションポイントに依存すると、非常に多くのスレッド間のリソースコンテンションが作成され得るので、コミュニケーションベースのスキームは、ハイパースレッディングプロセッサにとって重要である。当該スキームは、繰り返しのためのライブインバリューを演算し終えた後に、主要スレッドが次の反復を開始するので、ドゥーアクロースループの構築と類似している。スキームは、より少ない演算のためのコミュニケーションを交換する。
一実施形態によれば、演算ベースのスキームは、初期状態でライブインバリューを通過する二つのスレッドの間の唯一つのコミュニケーションポイントを仮定する。それ以降、ヘルパースレッドは、正確なプリフェッチアドレスを生成するために必要とする全ての計算をすることを必要とする。コンパイラは、内部ループがない場合、あるいは、当該ループレベルのためのスライシングがヘルパースレッドのサイズを著しく増加させない場合に、当該スキームを選択してよい。演算ベースのスキームは、一度シングルコミュニケーションポイントが到達した場合に、ヘルパースレッドに、実行においてより独立しているヘルパースレッドを与える。
一実施形態によれば、投機的な事前演算のためのループレベルを選択するために、コンパイラは、コミュニケーションベースのスキームから利得を得る、最外部のループを選択する。それゆえに、上記で述べたスキーム選択アルゴリズムは、一度コミュニケーションベースのスキームとのループを発見したときは、終了できる。コンパイラがコミュニケーションベースのスキームとのループを何ら発見しなかった場合には、最外部のループが投機的な事前演算のための領域として対象とされてよい。コンパイラが事前演算領域およびそれらのコミュニケーションスキームを選択した後は、主要スレッドとヘルパースレッドとの間のコミュニケーションを最小にする一方で、主要スレッド中のよいトリガポイントを設置することは、タイムリーなプリフェッチを確実なものとする。ライブネス情報は後方のスライシング末端におけるポイントである、トリガを設置することに役立つ。事前演算領域を超えたスライシングは、ライブインの数が増加した場合に終了する。
再び図8を参照すると、ブロック805では、プロセシングロジックは、実行中に互いに同期化するスレッドのための同期化期間を決定する。一実施形態によれば、同期化期間は、ヘルパースレッドと主要スレッド間の距離を表現するために使用される。典型的には、ヘルパースレッドは、同期化期間のユニット内のその事前演算の全てで実行する。これは、コミュニケーションを最小にして、ランナウェイヘルパーを生成する可能性を制限する。コンパイラは同期化期間のバリューを計算し、それに応じて同期化コードを生成するので、アウトスタンディングスライスカウンタのようなハードウエアのサポートはもはや不要である。
同期化期間が非常に大きい場合には、ヘルパースレッドによって引き起こされたプリフェッチは、主要スレッドによって用いられるために一時的に重要なデータに置き換わるだけではなく、潜在的に主要スレッドによって未だ用いられていない、以前のプリフェッチデータへの置き換わりを引き起こす。他方では、同期化期間が非常に小さい場合には、プリフェッチはとても遅すぎて用いることができない。一実施形態において、同期化期間のバリューを決定するために、コンパイラは最初に、スライスの長さと主要スレッド内のプログラムの長さとの差異を計算する。差異が小さい場合には、一の繰り返しでヘルパースレッドによって引き起こされた実行距離(run−ahead distance)は必然的に小さい。複数の反復が、十分な実行距離を維持するためにヘルパースレッドによって必要とされてもよい。それゆえに、コンパイラは、差異が小さい場合には同期化期間を増加し、また逆の場合も同様である。
その後に、コンパイラは、コード生成ステージの間に、主要スレッドのためにコードおよびヘルパースレッドを生成する。コード生成ステージの間に、コンパイラは、分析フェーズとコード生成フェーズとの間のインターフェースとしてスレッドグラフを構築する。各グラフのノードは、命令のシーケンス、またはコード領域を示す。ノード間の起動エッジは、ヘルパースレッドの連結の明確化に重要である、スレッド発生関係を示す。一実施形態によれば、スレッドグラフを有していると、ユーザがヘルパースレッドとライブインにコードを指定するために、コンパイラはプラグマをソースプログラムに挿入するので、コード再利用が可能となる。プラグマベースのアプローチおよび自動的アプローチは療法共に、同一のグラフ抽象化概念を共有する。結果として、ヘルパースレッドコード生成モジュールが共有されてよい。
ヘルパースレッドコード生成は、ヘルパースレッドを生成するコンパイラ中で、マルチエントリスレッディング技術を利用する。従来とは対照的に、概要は周知であるが、コンパイラは、ヘルパースレッドのために分離した編集ユニット(あるいは、ルーチン)を生成しない。代わりに、コンパイラは、ヘルパースレッドコートにスレッドされたエントリーおよびスレッドされたリターンを生成する。コンパイラは、全ての新たに生成されたヘルパースレッドコードを、原形を保ち、あるいは独立のサブルーチンに分離することなしに、同一のユーザ定義のルーチンの中のインラインに保つ。この手法は、新たに生成されたヘルパースレッド上での最適化を実行する、より多くの機会を、後のコンパイラの最適化に提供する。ヘルパースレッドでのより少ない指示は、ハイパースレッドプロセッサにおけるより少ないリソースコンテンションを意味する。これは、待ち時間を隠すためにヘルパースレッドを用いることが、ハイパースレッドプロセッサがプロセッササイクル当たり3つのマイクロオプスを発行し、いくつかにハード分割したリソースを有するために特に重要である、従来の対称的なマルチスレッディングモデルよりも、より少ない命令とより少ないリソースコンテンションをもたらすことを示す。
一実施形態によれば、ヘルパースレッドのために生成されたコードは、部分死滅ストア除去(PDSE)、部分冗長性除去(PRE)、およびその他のスカラー最適化のようなコンパイラ中の後のフェーズ上で、再整列および最適化されてよい。その意味で、ヘルパースレッドコードは、ヘルパースレッドによるリソースコンテンションを最小化するために最適化される必要がある。しかしながら、その様な更なる最適化は、コードをプリフェッチングすることも同様に除いてしまい得る。それゆえに、リーフ不良ロードは、コンパイラにおける揮発性代入文に変換されてもよい。スライスのディペンデンスグラフにおけるリーフノードは、ロードされた値に依存する、ヘルパースレッドのそれ以上の命令はないことを暗示する。そのため、揮発性代入文のあて先は、結果として生じるコードを早くするための表現で、レジスタテンプに変更される。揮発性代入を用いることにより、コンパイラグローバル最適化の後のすべてが、不良ロードのために生成されたプリフェッチを取り除くことを妨げ得る。
一実施形態によれば、コンパイラは、ヘルパースレッドが、自動計算機構を用いて主要スレッドから先過ぎず、後過ぎないように実行することを確実にすることを目的とする。一実施形態によれば、X値が距離制御の実行に先立って予めセットされる。Xは、ユーザによって、あるいは、スライス(あるいはヘルパーコード)の長さおよび主要コードの長さのプログラム分析に基づいて、コンパイラスイッチを介して修正されることができる。一実施形態では、コンパイラは、主要スレッドのために初期値Xとしてmc(Mカウンタ)を、およびヘルパースレッドのために初期値0としてhc(Hカウンタ)を生成し、コンパイラは、主要およびヘルパーコードのシンクアップ期間をカウントするカウンタMおよびHを生成する。4つのカウンタ(mc、M、hc、H)全てが自動カウントを実行するという考えである。ヘルパースレッドは主要スレッドに対する推論は有しない。ヘルパースレッドが主要スレッドのかなり先に実行している場合には、それは待ちを発行してよく、ヘルパースレッドが主要スレッドの後に実行している場合には、それはキャッチアップを実行してよい。
特定の実施形態において、各Xループ反復のために、主要スレッドは、ヘルパーが待たず、非フォールティングロード実行のために先に進むことのできることを確実にするためのポストを発行する。この点では、ヘルパースレッドが多くのシンクアップ期間で多数の非フォールティングロードを発行した後に主要スレッドを待っている場合には、ヘルパースレッドは、非フォールティングロードを実行するために起動してよい。他の特定の実施形態においては、各Xループ反復のために、ヘルパースレッドは、そのhcカウンタが主要スレッドのmcカウンタより大きいか、およびhcカウンタがヘルパースレッドのシンクアップ期間H*Xより大きいかを調べて、そうであるならば、ヘルパーは待ちを発行してスリープ状態になってよい。これは、ヘルパースレッドが主要スレッドのはるか前に実行されることを妨げる。他の実施形態においては、他の多くのシンクアップ期間上の反復の前に、ヘルパースレッドは、そのhcカウンタが主要スレッドのmcカウンタよりも小さいか否かを調査する。そうであるならば、ヘルパースレッドは遅延して、カウンタhcと、Hと、全ての取得したプライベートと、主要スレッドからのライブイン変数をアップデートすることにより、「キャッチアップおよび先へのジャンプ」をしなければならない。図9Aから図9Cは、一実施形態における、アプリケーション、主要スレッド、およびヘルパースレッドの典型的な擬似コードを示す図である。図9Aから図9Cを参照すると、コンパイラはアプリケーションのソースコード901をコンパイラして、前述した技術の少なくとも一つを使用する主要スレッド902およびヘルパースレッド903のためにコードを生成する。コード901から903はC/C++に限定されないことが理解されるであろう。例えばフォートランやアセンブリ言語のような、他のプログラム言語を用いてもよい。
ヘルパースレッド用のコードが生成された後は、主要スレッドとヘルパースレッドの間、およびヘルパースレッド間のリソースコンフリクトがないことを確実にするために、コンパイラは、各ヘルパースレッドおよび主要スレッドにリソースを、静的または動的に更に割り当ててよい。レジスタコンテキストのようなハードウエアリソースは、コンパイラ中のヘルパースレッドのために管理されてよい。具体的には、レジスタセットが静的または動的に、主要スレッドとヘルパースレッドとの間、および複数のヘルパースレッドの間で分割されてよい。結果として、スレッドのメモリを介してのライブイン/ライブアウトレジスタのコピーが避けられ、コンパイラがリソースを使い果たした場合に、コンパイル時間で、または、ある主要レッドのイベントが起こるまれな場合に、ランタイムでスレッドが破棄される。
一実施形態によれば、図12に示したリソースの表のように、コンパイラはボトムアップオーダでヘルパースレッドを「ウォークスルー」してもよく、データ構造でリソースの利用を伝える。主要スレッドであってもよい親ヘルパースレッドは、この情報を利用して、そのリソースが、スレッドリソースとオーバーラップしないことを確実にする。スレッドリソースが主要実行スレッドに不利益を与える場合には、例えば、主要スレッドをレジスタで溢れさせる/満たすことを促進することにより、コンパイラは既に生成されたスレッドを無効にできる。
図10は、一実施形態に係るスレッドの典型的な構造を示すブロック図である。当該実施形態においては、典型的な構造1000は、主要スレッド1001(例えば、親スレッド)と、スレッド1003がスレッド1002(例えば、ヘルパースレッド1002は、ヘルパースレッド1003の親スレッドである)から生成されてよい一方で、主要スレッド1001から生成されてよい、3つのヘルパースレッド(例えば、子スレッド)1002から1004とを含む。ヘルパースレッドは3つのヘルパースレッドに限られるものではなく、多少のヘルパースレッドが含まれていてもよいことは理解されるであろう。ヘルパースレッドは、生成命令によって生成されてよく、スレッドの実行は、生成命令の後に再開されてもよい。
複数のスレッドは、図5から図8に示した動作のような、スレッド生成フェーズの間にコンパイラによって生成される。一実施形態によれば、コンパイラは、3つの生成フェーズ中でスレッドを生成して、続くスレッドリソース割り当てフェーズでスレッドにリソースを割り当てる。動的にそして典型的に、ヘルパースレッドは、その親スレッドが停止した場合に生成される。典型的な構造1000は、ページフォルトあるいはレベル3(L3)のキャッシュミスの間に起こり得る。
スレッドがインカミングレジスタ(あるいは、リソース一般)だけを親スレッドと共有できることは重要である。例えば、図10を参照すると、主要スレッド1001がレジスタを必要とした場合には、主要スレッド1001は、ヘルパースレッド1002を生成する前にレジスタR10に値を書き込み、そして、ヘルパースレッド1002が終了した後にレジスタR10を使用する。ヘルパースレッド1002もその子供(例えば、ヘルパースレッド1003はヘルパースレッド1002の子供たちだけであり、ヘルパースレッド1002および1004は主要スレッド1001の子供である)のどちらもレジスタR10に書き込むことはできない。さもなければ、それらは主要スレッド1001の値を破棄し得る。これは、不正確なプログラム実行となり得る。このリソースコンフリクトを回避するために、一実施形態においては、コンパイラはリソースを静的または動的に割り当ててよい。
一実施形態によれば、コンパイラは、ヘルパースレッドおよびボトムアップオーダの主要スレッドにリソースを割り当てる。図11は、一実施形態に係るスレッドのリソース割り当てのための典型的な擬似コードを示すブロック図である。典型的なアルゴリズム1100によれば、ボトムアップオーダ(ブロック1101)のヘルパースレッドのために、全てのリソースを割り当てるのはコンパイラであり、その後、リソースコンフリクトを避けるためにヘルパースレッドによって用いられたりソースに基づいて、主要スレッド(ブロック1102)にリソースを割り当てる。
図示した目的は、スレッドに使用されるリソースは、ハードウエアレジスタであると仮定される。しかしながら、同様のコンセプトが、メモリや割り込みのような、当業者に自明な他のリソースに適用されてよい。図10を参照すると、コンパイラは、スレッドチェーンのリードスレッドからボトムアップのウォーキングによって、レジスタを動的に分割する。この例においては、ヘルパースレッド1003は、ヘルパースレッド1002を含む最初のスレッドチェーンのリーフスレッドである。ヘルパースレッド1004は、2番目のスレッドチェーンのリーフスレッドである。コンパイラは、図12の典型的なリソーステーブル1200と同様のリソーステーブルのような、データ構造中の各ヘルパースレッドのレジスタの割り当てを記録する。そして、親スレッドは、その子スレッドのリソース割り当てを読み込み、そして割り当て、そのリソーステーブルに記録する。
図12は、一実施形態に係る典型的なリソースデータ構造を示すブロック図である。典型的なデータ構造1200は、メモリ中に格納され、およびコンパイラによってアクセス可能なテーブルとして実行されてよい。他の例では、典型的なデータ構造1200がデータベース中で実行されてよい。一実施形態においては、典型的なデータ構造1200は、限定されるわけではないが、記述リソース1202、およびスレッドID1201を介して特定される各個別のスレッドによって使用されるライブインリソースを含む。他の構造が存在していてもよい。
図10から図12を参照すると、一実施形態によれば、最初に、ヘルパースレッド1003(例えば、ボトムアップスキームにおいて最も下部の順にあるスレッド)のレジスタが割り当てられる。ライブインバリューはV5とV6であり、それらはそれぞれレジスタR2およびR3に割り当てられると仮定される。また、V7はレジスタR4を割り当てさせ、そして、V9はレジスタR5を割り当てさせる。ヘルパースレッド1003のためのリソーステーブルは、図12に示すように、ライブイン=((V5、R2)、(V6、R3))および記述されたレジスタ=(R4、R5)を含む。ヘルパースレッド1002中でコンパイラは、割り当ての間にV5をR2と、V6をR3と置き換え、そして、レジスタR4およびR5(ヘルパースレッド1003に記述されている)を、生成命令においてライブとしてマークする。これは、ヘルパースレッド1003の発生ポイントにわたってR4またはR5のレジスタ使用を妨げるので、ヘルパースレッド1002とヘルパースレッド1003との間のリソースコンフリクトを妨げる。ヘルパースレッド1002については、ライブインバリューはV3およびV4であり、それぞれレジスタR6およびR7が割り当てられる。V8およびV20がレジスタR8およびR9にそれぞれ割り当てられた場合に、ヘルパースレッド1002のリソーステーブルは、図12に示すように、ライブイン=((V3、R6)、(V4、R7))および記述されたレジスタ=(R2、R3、R4、R5、R8、R9)を含む。記述されたレジスタは、ヘルパースレッド1003(例えば、R2およびR3)のためのライブインレジスタ、ヘルパースレッド1003(例えば、R4およびR5)内の記述されたレジスタ、およびヘルパースレッド1002(例えば、R8およびR9)内の記述されたレジスタである。そして、コンパイラはヘルパースレッド1004のためにレジスタを割り当てる。全てのヘルパースレッドにレジスタが割り当てられた場合には、主要スレッド1001のためにレジスタを割り当てる。
更に、一実施形態によれば、コンパイラがレジスタを使い果たした場合には、チェーン内の一つ以上のヘルパースレッドを消去できる。これは例えば、ヘルパースレッドのチェーンが深すぎるため、あるいはシングルヘルパースレッドが非常に多くのレジスタを必要とするため、主要スレッドがレジスタを溢れさせる/満たすために、主要スレッドがレジスタを使い果たした場合に起こり得る。コンパイラは、所定の数の流出を許容するか、またはヘルパースレッドチェーンの全体か、またはスレッドチェーンのいくつかのスレッドを削除するために、経験則を当てはめることができる。ヘルパースレッドを消去する他の方法は、コンテキストスイッチ上で、ヘルパースレッドの実行によって記述されることができる親のライブレジスタが、ハードウエアによって自動的にセーブされることができるように、コンテキストのセーブ/回復の重みを明確に設定することである。このコンテキストスイッチは比較的高価ではあるものの、その様な場合は、潜在的にはめったに起こらないケースである。更には、その様な細かいコンテキストスイッチは、ほとんどのOS実行可能なスレッドスイッチ、または従来のハードウエアベースのフルコンテキストスレッドスイッチに用いられるフルコンテキストスイッチと比較すると、まだ多くの低いオーバーヘッドのものである。
更に、ライブインレジスタにコンフリクトがある場合、例えば、ヘルパースレッド1003がライブインレジスタ(例えば、mov v5=・・・)に上書きして、当該レジスタがまた、ヘルパースレッド1003の発生の後で、ヘルパースレッド1002内で使用される場合には、v5(この例ではレジスタR2)に割り当てられたレジスタにリソースコンフリクトがあるであろう。この情報を扱うために、コンパイラは、利用可能な分析の使用をしてよく、ヘルパースレッド1003の生成前にmov v5'=v5命令の挿入や、発生後にv5をv5'に置き換えるような補償コードを挿入してよい。
図13は、一実施形態に係るスレッドにリソースを割り当てる典型的なプロセスを示したフロー図である。典型的なプロセス1300は、ハードウエア(回路、専用ロジック等)、ソフトウエア(一般的な目的のコンピュータシステム上や専用装置上で走らされるようなソフトウエア)、または両者の組み合わせで構成されてよいプロセシングロジックによって実行されてよい。一実施形態では、典型的なプロセス1300は、データ処理システム中の一つ以上のスレッド実行ファイルを有するコードの編集の間に、最も下部のオーダを有するカレントスレッドを選択すること、カレントスレッドから生成された一つ以上のスレッドに割り当てられたリソースを決定すること、および、カレントスレッドとその一つ以上の子スレッドとの間のリソースコンフリクトを避けるために、カレントスレッドに、カレントスレッドの一つ以上の子スレッドに割り当てられたリソースを考慮してリソースを割り当てることを含む。
図13を参照すると、ブロック1301において、プロセシングロジックは、主要スレッドおよびそのヘルパースレッドを含む一つ以上のスレッドを特定して、カレントスレッドとして最も下部のオーダを有するスレッドを選択する。編集のスレッド生成フェーズ中に生成されたスレッドディペンデンシーグラフを用いて、スレッドは特定されてよい。ブロック1302において、プロセシングロジックは、どのような子スレッドのリソース情報をも取り込む、カレントスレッドから生成されてよい。リソース情報は、図12のリソーステーブル1200のような子スレッドに対応するデータ構造から得られてよい。ブロック1303において、もはや利用可能なリソースがない場合には、プロセシングロジックは、一つ以上のスレッドをチェーンから消去してよく、反復して再スタートしてもよい(ブロック1309)。利用可能なリソースがまだある場合には、ブロック1304において、プロセシングロジックは、リソースコンフリクトを起こさずにその子スレッドによって使用されているリソースを考慮して、カレントスレッドにリソースを割り当てる。それゆえに、ブロック1305において、プロセシングロジックは、リソーステーブル1200のような、リソーステーブルに関連付けられるカレントスレッドに割り当てられたリソースをアップデートする。上記のプロセスは、ヘルパースレッド(例えば、主要スレッドの子スレッド)が全く残らなくなるまで(ブロック1306および1308)継続する。最終的には、ブロック1307において、プロセシングロジックは、リソースコンフリクトを起こす原因とならない全てのヘルパースレッドのリソース情報に基づいて、リソースを主要スレッド(例えば、全てのヘルパースレッドの親スレッド)に割り当てる。他の動作を含んでいてもよい。
上述した技術は、次の設定と同様のシステムに基づいた様々なベンチマークツールに対して評価された。
Figure 0004701174
様々なベンチマークツールは、以下の少なくとも一つを含む。
Figure 0004701174
図14Aは、nbody_walkerベンチマークユーティリティ上における、ヘルパースレッドによる性能の向上を示す表である。図14Bは、同期化期間の与えられた値での、nbody_walkerの速度向上結果を示す表である。図14Cは、様々なベンチマークに関して、自動プロセスに対する手動プロセスを示す表である。図14Dは、与えられた同期化期間におけるnbody_walkerを用いた手動プロセス上の自動化プロセスの向上を示す表である。
以上、マルチスレッディングのためのスレッド管理の方法および装置について説明した。以上の明細書においては、本発明はその典型的な実施形態を参照して記述した。添付した特許請求の範囲で説明する本発明の広い精神および範囲を逸脱せずに、様々な変更改造を加えうることは明らかである。したがって、本明細書および図面は、限定的な意味というよりも例示的な意味として考えられるべきである。

Claims (17)

  1. コンピュータが、マルチスレッディングシステム中でアプリケーションのメインスレッドを実行する段階と、
    前記コンピュータが、キャッシュミスを引き起こすロード命令である1以上の不良ロードを有する領域に前記メインスレッドが入った場合に、メインスレッドのために1以上の演算を実行する1以上のヘルパースレッドのコードを、前記メインスレッドのコンパイル中に生成することにより、前記メインスレッドから前記1以上のヘルパースレッドを生成する段階と、
    前記コンピュータが、前記1以上のヘルパースレッドをそれぞれ時間枠と関連付ける段階と、
    前記コンピュータが、前記1以上のヘルパースレッドを、後の実行のための実行キューに置く段階と、
    前記コンピュータが、前記関連付けられた時間枠までに実行されていない前記実行キュー内の前記1以上のヘルパースレッドを、実行することなく終了させる段階と
    を備え、
    前記1以上のヘルパースレッドを生成する段階は、前記1以上の不良ロードを有する繰り返しループの領域であり、前記1以上のヘルパースレッド外で計算され前記1以上のヘルパースレッド内で使用されるべく前記メインスレッドから前記1以上のヘルパースレッドに通信すべきライブインバリューの数が予め定められた数より少ない領域に前記メインスレッドが入った場合に、前記メインスレッドからライブインバリューを受け取って当該ライブインバリューを再計算することなく前記繰り返しループの領域内において前記メインスレッド用のデータをプリフェッチする前記1以上のヘルパースレッドを、前記メインスレッドから生成する
    方法。
  2. 前記コンピュータが、スレッドコンテキストのリストを保持するためのスレッドプールを作成する段階と、
    前記コンピュータが、前記1以上のヘルパースレッドを生成するために前記スレッドプールから1以上のスレッドコンテキストを割り当てる段階と
    を更に備える請求項1に記載の方法。
  3. 前記コンピュータが、前記メインスレッドが前記領域から出た場合に、前記1以上のヘルパースレッドを終了する段階と、
    前記コンピュータが、前記1以上のヘルパースレッドと関連付けられた前記スレッドコンテキストを解放して、前記スレッドプールに戻す段階と
    を更に備える請求項2に記載の方法。
  4. 前記コンピュータが、前記ヘルパースレッドのそれぞれに関連する前記時間枠を決定する段階
    を更に備える請求項1から3のいずれかに記載の方法。
  5. 前記終了させる段階において、前記時間枠が終了した1以上のヘルパースレッドが前記メインスレッドによってアクセスされていない場合であっても、前記時間枠が終了した1以上のヘルパースレッドをそれぞれ終了させる
    請求項1から4のいずれかに記載の方法。
  6. 前記コンピュータが、前記メインスレッドが前記領域から出た場合に、前記1以上のヘルパースレッドによって生成された結果を放棄する段階
    を更に備え、
    前記結果は、前記メインスレッドの他の領域によって再使用されない
    請求項1から5のいずれかに記載の方法。
  7. 前記コンピュータが、前記メインスレッドの実行中にキャッシュミスを生じさせる前記1以上の不良ロードを特定する段階
    をさらに備える請求項1から6のいずれかに記載の方法。
  8. コンピュータに、
    マルチスレッディングシステム中でアプリケーションのメインスレッドを実行する段階と、
    キャッシュミスを引き起こすロード命令である1以上の不良ロードを有する領域に前記メインスレッドが入った場合に、メインスレッドのために1以上の演算を実行する1以上のヘルパースレッドのコードを前記メインスレッドのコンパイル中に生成することにより、前記メインスレッドから前記1以上のヘルパースレッドを生成する段階と、
    前記1以上のヘルパースレッドをそれぞれ時間枠と関連付ける段階と、
    前記1以上のヘルパースレッドを、後の実行のための実行キューに置く段階と、
    前記関連付けられた時間枠までに実行されていない前記実行キュー内の前記1以上のヘルパースレッドを、実行することなく終了させる段階と
    を備え、
    前記1以上のヘルパースレッドを生成する段階は、前記1以上の不良ロードを有する繰り返しループの領域であり、前記1以上のヘルパースレッド外で計算され前記1以上のヘルパースレッド内で使用されるべく前記メインスレッドから前記1以上のヘルパースレッドに通信すべきライブインバリューの数が予め定められた数より少ない領域に前記メインスレッドが入った場合に、前記メインスレッドからライブインバリューを受け取って当該ライブインバリューを再計算することなく前記繰り返しループの領域内において前記メインスレッド用のデータをプリフェッチする前記1以上のヘルパースレッドを、前記メインスレッドから生成する段階
    を有する方法
    を実行させるプログラム。
  9. 前記方法が、
    スレッドコンテキストのリストを保持するためのスレッドプールを作成する段階と、
    前記1以上のヘルパースレッドを生成するために前記スレッドプールから1以上のスレッドコンテキストを割り当てる段階と
    を更に備える請求項8に記載のプログラム。
  10. 前記方法が、
    前記メインスレッドが前記領域から出た場合に、前記1以上のヘルパースレッドを終了する段階と、
    前記1以上のヘルパースレッドと関連付けられた前記スレッドコンテキストを解放して、前記スレッドプールに戻す段階と
    を更に備える請求項9に記載のプログラム。
  11. 前記方法が、
    前記ヘルパースレッドのそれぞれに時間枠を決定する段階
    を更に備える
    請求項8から10のいずれかに記載のプログラム。
  12. 前記終了させる段階において、前記時間枠が終了した1以上のヘルパースレッドが前記メインスレッドによってアクセスされていない場合であっても、前記時間枠が終了した1以上のヘルパースレッドをそれぞれ終了させる
    請求項8から11のいずれかに記載のプログラム。
  13. 前記方法が、
    前記メインスレッドが前記領域から出た場合に、前記1以上のヘルパースレッドによって生成された結果を放棄する段階
    を更に備え、
    前記結果は、前記メインスレッドの他の領域によって再使用されない
    請求項8から12のいずれかに記載のプログラム。
  14. 前記方法が、
    前記メインスレッドの実行中にキャッシュミスを生じさせる前記1以上の不良ロードを特定する段階
    をさらに備える請求項8から13のいずれかに記載のプログラム。
  15. マルチスレッディング動作を実行することができるプロセッサと、
    前記プロセッサに結合するメモリと、
    前記メモリから前記プロセッサに実行されるプロセスと
    を備え、
    前記プロセスにより、前記プロセッサは、
    マルチスレッディングシステム中でアプリケーションのメインスレッドを実行し、
    キャッシュミスを引き起こすロード命令である1以上の不良ロードを有する領域に前記メインスレッドが入った場合に、メインスレッドのために1以上の演算を実行する1以上のヘルパースレッドのコードを前記メインスレッドのコンパイル中に生成させることにより、前記メインスレッドから前記1以上のヘルパースレッドを生成し、
    前記1以上のヘルパースレッドをそれぞれ時間枠と関連付け、
    前記1以上のヘルパースレッドを、後の実行のための実行キューに置き、
    前記関連付けられた時間枠までに実行されていない前記実行キュー内の前記1以上のヘルパースレッドを、実行することなく終了させ、
    前記プロセッサは、前記1以上のヘルパースレッドを生成する場合に、前記1以上の不良ロードを有する繰り返しループの領域であり、前記1以上のヘルパースレッド外で計算され前記1以上のヘルパースレッド内で使用されるべく前記メインスレッドから前記1以上のヘルパースレッドに通信すべきライブインバリューの数が予め定められた数より少ない領域に前記メインスレッドが入った場合に、前記メインスレッドからライブインバリューを受け取って当該ライブインバリューを再計算することなく前記繰り返しループの領域内において前記メインスレッド用のデータをプリフェッチする前記1以上のヘルパースレッドを、前記メインスレッドから生成する
    データ処理システム。
  16. 前記アプリケーションのコンパイル中にコンパイラによって、前記1以上のヘルパースレッドのコードが生成される
    請求項15に記載のデータ処理システム。
  17. 前記プロセスにより、前記プロセッサは更に、
    前記メインスレッドの実行中にキャッシュミスを生じさせる前記1以上の不良ロードを特定する
    請求項15または16に記載のデータ処理システム。
JP2006528333A 2003-09-30 2004-09-30 マルチスレッディングのためのコンパイラが生成したヘルパースレッドの方法および装置 Active JP4701174B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/676,889 2003-09-30
US10/676,889 US20050071438A1 (en) 2003-09-30 2003-09-30 Methods and apparatuses for compiler-creating helper threads for multi-threading
PCT/US2004/032461 WO2005033931A2 (en) 2003-09-30 2004-09-30 Methods and apparatuses for compiler-creating helper threads for multi-threading

Publications (3)

Publication Number Publication Date
JP2007507048A JP2007507048A (ja) 2007-03-22
JP2007507048A5 JP2007507048A5 (ja) 2011-03-10
JP4701174B2 true JP4701174B2 (ja) 2011-06-15

Family

ID=34377482

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006528333A Active JP4701174B2 (ja) 2003-09-30 2004-09-30 マルチスレッディングのためのコンパイラが生成したヘルパースレッドの方法および装置

Country Status (5)

Country Link
US (2) US20050071438A1 (ja)
EP (1) EP1668502A2 (ja)
JP (1) JP4701174B2 (ja)
CN (1) CN1853165A (ja)
WO (1) WO2005033931A2 (ja)

Families Citing this family (88)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040243767A1 (en) * 2003-06-02 2004-12-02 Cierniak Michal J. Method and apparatus for prefetching based upon type identifier tags
US7206795B2 (en) * 2003-12-22 2007-04-17 Jean-Pierre Bono Prefetching and multithreading for improved file read performance
US7665070B2 (en) * 2004-04-23 2010-02-16 International Business Machines Corporation Method and apparatus for a computing system using meta program representation
US8230422B2 (en) * 2005-01-13 2012-07-24 International Business Machines Corporation Assist thread for injecting cache memory in a microprocessor
US7849453B2 (en) * 2005-03-16 2010-12-07 Oracle America, Inc. Method and apparatus for software scouting regions of a program
US7950012B2 (en) * 2005-03-16 2011-05-24 Oracle America, Inc. Facilitating communication and synchronization between main and scout threads
US7818746B2 (en) * 2005-03-30 2010-10-19 Hewlett-Packard Development Company, L.P. System and method for benchmarking using a multi-threaded load generator
US9003421B2 (en) * 2005-11-28 2015-04-07 Intel Corporation Acceleration threads on idle OS-visible thread execution units
KR100679050B1 (ko) * 2005-12-12 2007-02-06 삼성전자주식회사 태스크간 빠른 문맥 교환을 위해 레지스터 문맥을 저장,복구하는 방법 및 장치
US8301870B2 (en) * 2006-07-27 2012-10-30 International Business Machines Corporation Method and apparatus for fast synchronization and out-of-order execution of instructions in a meta-program based computing system
WO2008031050A2 (en) * 2006-09-07 2008-03-13 Black Lab Security Systems, Inc. Method of controlling a 32/64-bit parallel thread execution within a microsoft pc or server operating system utility program
WO2008031054A2 (en) 2006-09-07 2008-03-13 Black Lab Security Systems, Inc. Creating and using a specific user unique id for security login authentication
JP5116275B2 (ja) * 2006-09-29 2013-01-09 富士通株式会社 演算処理装置、情報処理装置及び演算処理装置の制御方法
US7852336B2 (en) * 2006-11-28 2010-12-14 International Business Machines Corporation Dynamic determination of optimal spatial index mapping to processor thread resources
JP4821907B2 (ja) * 2007-03-06 2011-11-24 日本電気株式会社 メモリアクセス制御システム、メモリアクセス制御方法およびそのプログラム
US9361078B2 (en) * 2007-03-19 2016-06-07 International Business Machines Corporation Compiler method of exploiting data value locality for computation reuse
US9223580B2 (en) * 2007-08-30 2015-12-29 International Business Machines Corporation Systems, methods and computer products for cross-thread scheduling
JP5105359B2 (ja) * 2007-12-14 2012-12-26 富士通株式会社 中央処理装置、選択回路および選択方法
US8413151B1 (en) 2007-12-19 2013-04-02 Nvidia Corporation Selective thread spawning within a multi-threaded processing system
US8321840B2 (en) * 2007-12-27 2012-11-27 Intel Corporation Software flow tracking using multiple threads
CN101482831B (zh) 2008-01-08 2013-05-15 国际商业机器公司 对工作线程与辅助线程进行相伴调度的方法和设备
US8359589B2 (en) * 2008-02-01 2013-01-22 International Business Machines Corporation Helper thread for pre-fetching data
US8225326B2 (en) * 2008-03-17 2012-07-17 Intel Corporation Future scheduling by direct representation of possible dependencies
JP2009237762A (ja) * 2008-03-26 2009-10-15 Toshiba Corp プログラム解析装置、プログラム解析方法および解析プログラム
US20090313600A1 (en) * 2008-06-13 2009-12-17 Microsoft Corporation Concurrent code generation
JP2010039536A (ja) * 2008-07-31 2010-02-18 Panasonic Corp プログラム変換装置、プログラム変換方法およびプログラム変換プログラム
US8615770B1 (en) 2008-08-29 2013-12-24 Nvidia Corporation System and method for dynamically spawning thread blocks within multi-threaded processing systems
US8959497B1 (en) * 2008-08-29 2015-02-17 Nvidia Corporation System and method for dynamically spawning thread blocks within multi-threaded processing systems
US9753698B2 (en) * 2009-06-10 2017-09-05 Microsoft Technology Licensing, Llc Language-based model for isolating shared state
CA2680597C (en) * 2009-10-16 2011-06-07 Ibm Canada Limited - Ibm Canada Limitee Managing speculative assist threads
WO2011079942A1 (en) 2009-12-28 2011-07-07 Hyperion Core, Inc. Optimisation of loops and data flow sections
JP5541491B2 (ja) * 2010-01-07 2014-07-09 日本電気株式会社 マルチプロセッサ、これを用いたコンピュータシステム、およびマルチプロセッサの処理方法
US8826249B2 (en) * 2010-02-18 2014-09-02 Oracle International Corporation Method and system for optimizing code for a multi-threaded application
US8423750B2 (en) * 2010-05-12 2013-04-16 International Business Machines Corporation Hardware assist thread for increasing code parallelism
CN102255794B (zh) * 2010-05-17 2014-07-30 塔塔咨询服务有限公司 远程消息收发吞吐量优化和等待时间缩短用系统和方法
US8667253B2 (en) 2010-08-04 2014-03-04 International Business Machines Corporation Initiating assist thread upon asynchronous event for processing simultaneously with controlling thread and updating its running status in status register
CN101916203B (zh) * 2010-08-18 2012-12-26 优视科技有限公司 服务于移动通讯的终端软件平台的编译方法及系统
US8713290B2 (en) 2010-09-20 2014-04-29 International Business Machines Corporation Scaleable status tracking of multiple assist hardware threads
US8793474B2 (en) 2010-09-20 2014-07-29 International Business Machines Corporation Obtaining and releasing hardware threads without hypervisor involvement
US9529574B2 (en) 2010-09-23 2016-12-27 Apple Inc. Auto multi-threading in macroscalar compilers
US8949808B2 (en) 2010-09-23 2015-02-03 Apple Inc. Systems and methods for compiler-based full-function vectorization
US8621448B2 (en) * 2010-09-23 2013-12-31 Apple Inc. Systems and methods for compiler-based vectorization of non-leaf code
US20120079245A1 (en) * 2010-09-25 2012-03-29 Cheng Wang Dynamic optimization for conditional commit
US8549504B2 (en) 2010-09-25 2013-10-01 Intel Corporation Apparatus, method, and system for providing a decision mechanism for conditional commits in an atomic region
US8499305B2 (en) * 2010-10-15 2013-07-30 Via Technologies, Inc. Systems and methods for performing multi-program general purpose shader kickoff
US8898646B2 (en) * 2010-12-22 2014-11-25 Intel Corporation Method and apparatus for flexible, accurate, and/or efficient code profiling
US8726251B2 (en) * 2011-03-29 2014-05-13 Oracle International Corporation Pipelined loop parallelization with pre-computations
US9218186B2 (en) 2011-09-01 2015-12-22 International Business Machines Corporation Software compiler generated threaded environment
US8966463B2 (en) * 2011-11-29 2015-02-24 Microsoft Technology Licensing, Llc Eliminating redundant function calls
CN106909444B (zh) 2011-12-22 2021-01-12 英特尔公司 用于指定应用线程性能状态的指令的指令处理装置及相关方法
US8893094B2 (en) 2011-12-30 2014-11-18 Intel Corporation Hardware compilation and/or translation with fault detection and roll back functionality
WO2013147887A1 (en) 2012-03-30 2013-10-03 Intel Corporation Context switching mechanism for a processing core having a general purpose cpu core and a tightly coupled accelerator
US8813042B2 (en) * 2012-04-06 2014-08-19 Hwlett-Packard Development Company, L. P. Identifying globally consistent states in a multithreaded program
US8997042B2 (en) * 2012-10-15 2015-03-31 Pivotal Software, Inc. Flexible and run-time-modifiable inclusion of functionality in computer code
US9052888B2 (en) * 2013-02-21 2015-06-09 International Business Machines Corporation Vectorization in an optimizing compiler
US9471372B2 (en) 2013-03-21 2016-10-18 Telefonaktiebolaget Lm Ericsson (Publ) Method and device for scheduling communication schedulable unit
US9760346B2 (en) * 2013-05-31 2017-09-12 Microsoft Technology Licensing, Llc Deeply parallel source code compilation
CN105637474B (zh) * 2013-10-18 2019-03-22 马维尔国际贸易有限公司 用于寄存器分配的系统和方法
EP2876593B1 (en) * 2013-11-21 2018-09-26 Nxp B.V. Method of generating a structure and corresponding structure
US9830206B2 (en) * 2013-12-18 2017-11-28 Cray Inc. Cross-thread exception handling
US9348595B1 (en) 2014-12-22 2016-05-24 Centipede Semi Ltd. Run-time code parallelization with continuous monitoring of repetitive instruction sequences
US9886317B2 (en) 2015-02-02 2018-02-06 Oracle International Corporation Fine-grained scheduling of work in runtime systems
US9208066B1 (en) * 2015-03-04 2015-12-08 Centipede Semi Ltd. Run-time code parallelization with approximate monitoring of instruction sequences
US10296350B2 (en) 2015-03-31 2019-05-21 Centipede Semi Ltd. Parallelized execution of instruction sequences
US10296346B2 (en) 2015-03-31 2019-05-21 Centipede Semi Ltd. Parallelized execution of instruction sequences based on pre-monitoring
US9715390B2 (en) 2015-04-19 2017-07-25 Centipede Semi Ltd. Run-time parallelization of code execution based on an approximate register-access specification
GB2540543B (en) 2015-07-20 2020-03-11 Advanced Risc Mach Ltd Graphics processing
US10423330B2 (en) * 2015-07-29 2019-09-24 International Business Machines Corporation Data collection in a multi-threaded processor
US20170031724A1 (en) * 2015-07-31 2017-02-02 Futurewei Technologies, Inc. Apparatus, method, and computer program for utilizing secondary threads to assist primary threads in performing application tasks
US9778951B2 (en) * 2015-10-16 2017-10-03 Qualcomm Incorporated Task signaling off a critical path of execution
US20170372448A1 (en) * 2016-06-28 2017-12-28 Ingo Wald Reducing Memory Access Latencies During Ray Traversal
US10152341B2 (en) 2016-08-30 2018-12-11 Red Hat Israel, Ltd. Hyper-threading based host-guest communication
US10552211B2 (en) * 2016-09-02 2020-02-04 Intel Corporation Mechanism to increase thread parallelism in a graphics processor
CN106569869B (zh) * 2016-11-14 2019-04-19 平安科技(深圳)有限公司 插件化打包方法及装置
US10565676B2 (en) 2017-04-17 2020-02-18 Intel Corporation Thread prefetch mechanism
US10325341B2 (en) 2017-04-21 2019-06-18 Intel Corporation Handling pipeline submissions across many compute units
CN107391266B (zh) * 2017-06-01 2021-03-30 华南理工大学 一种图形化编程多线程同步方法
CN109960571B (zh) * 2017-12-14 2022-03-25 北京图森智途科技有限公司 一种多模块调度方法、装置及系统
US11513840B2 (en) * 2018-05-07 2022-11-29 Micron Technology, Inc. Thread creation on local or remote compute elements by a multi-threaded, self-scheduling processor
US10713052B2 (en) 2018-06-28 2020-07-14 Intel Corporation Prefetcher for delinquent irregular loads
CN109445854B (zh) * 2018-10-31 2019-11-05 中科驭数(北京)科技有限公司 数据传输方法及装置
US10802882B2 (en) * 2018-12-13 2020-10-13 International Business Machines Corporation Accelerating memory access in a network using thread progress based arbitration
CN110569067B (zh) * 2019-08-12 2021-07-13 创新先进技术有限公司 用于多线程处理的方法、装置及系统
US11216278B2 (en) 2019-08-12 2022-01-04 Advanced New Technologies Co., Ltd. Multi-thread processing
US11314718B2 (en) * 2019-11-21 2022-04-26 International Business Machines Corporation Shared disk buffer pool update and modification
US10891708B1 (en) 2019-11-25 2021-01-12 Arm Limited Shader program execution in graphics processing
WO2023177320A1 (en) * 2022-03-17 2023-09-21 Huawei Technologies Co., Ltd Smt core controller, compiler, and methods for executeting compiled run-time code on smt core controller
CN116860436A (zh) * 2023-06-15 2023-10-10 重庆智铸达讯通信有限公司 线程数据处理方法、装置、设备及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000267894A (ja) * 1999-03-17 2000-09-29 Nec Corp タイムアウト処理システム、処理方法及び記録媒体
JP2001188681A (ja) * 2000-01-04 2001-07-10 Toshiba Corp 言語処理システム、オブジェクトコード生成方法及びインライン展開方法

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5249295A (en) * 1990-06-20 1993-09-28 Rice University Digital computer register allocation and code spilling using interference graph coloring
JPH08314979A (ja) * 1995-03-13 1996-11-29 Matsushita Electric Ind Co Ltd プログラム情報を表示装置に示す方法および装置
JPH08263325A (ja) * 1995-03-20 1996-10-11 Fujitsu Ltd サーバ処理装置、サーバ内障害検出装置及びサーバ内障害検出方法
US6003041A (en) * 1998-01-05 1999-12-14 Gateway 2000, Inc. Method and managing multiple channel maps from multiple input devices in a multimedia system
US20020097725A1 (en) * 1998-07-27 2002-07-25 Nec Corporation Resource and protocol management for virtual private networks within multiprocessor ATM switches
US6721944B2 (en) * 2000-05-31 2004-04-13 Sun Microsystems, Inc. Marking memory elements based upon usage of accessed information during speculative execution
US7140022B2 (en) * 2000-06-02 2006-11-21 Honeywell International Inc. Method and apparatus for slack stealing with dynamic threads
US6959435B2 (en) * 2001-09-28 2005-10-25 Intel Corporation Compiler-directed speculative approach to resolve performance-degrading long latency events in an application
US6964043B2 (en) * 2001-10-30 2005-11-08 Intel Corporation Method, apparatus, and system to optimize frequently executed code and to use compiler transformation and hardware support to handle infrequently executed code
US20030084433A1 (en) * 2001-10-31 2003-05-01 Chi-Keung Luk Profile-guided stride prefetching
US20030126591A1 (en) * 2001-12-21 2003-07-03 Youfeng Wu Stride-profile guided prefetching for irregular code
US7243267B2 (en) * 2002-03-01 2007-07-10 Avaya Technology Llc Automatic failure detection and recovery of applications
US8095920B2 (en) * 2002-09-17 2012-01-10 Intel Corporation Post-pass binary adaptation for software-based speculative precomputation
US20040128489A1 (en) * 2002-12-31 2004-07-01 Hong Wang Transformation of single-threaded code to speculative precomputation enabled code
US20040154010A1 (en) * 2003-01-31 2004-08-05 Pedro Marcuello Control-quasi-independent-points guided speculative multithreading
JP2006267894A (ja) 2005-03-25 2006-10-05 Kyocera Mita Corp 定着装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000267894A (ja) * 1999-03-17 2000-09-29 Nec Corp タイムアウト処理システム、処理方法及び記録媒体
JP2001188681A (ja) * 2000-01-04 2001-07-10 Toshiba Corp 言語処理システム、オブジェクトコード生成方法及びインライン展開方法

Also Published As

Publication number Publication date
WO2005033931A2 (en) 2005-04-14
US20050071438A1 (en) 2005-03-31
US20100281471A1 (en) 2010-11-04
EP1668502A2 (en) 2006-06-14
CN1853165A (zh) 2006-10-25
JP2007507048A (ja) 2007-03-22
US8612949B2 (en) 2013-12-17
WO2005033931A3 (en) 2005-12-22

Similar Documents

Publication Publication Date Title
JP4701174B2 (ja) マルチスレッディングのためのコンパイラが生成したヘルパースレッドの方法および装置
JP4528300B2 (ja) マルチスレッディングのスレッド管理の方法および装置
JP4003830B2 (ja) マルチプロセッシング環境における透過動的最適化のための方法およびシステム
US8037465B2 (en) Thread-data affinity optimization using compiler
Franklin et al. ARB: A hardware mechanism for dynamic reordering of memory references
US6539541B1 (en) Method of constructing and unrolling speculatively counted loops
US9189233B2 (en) Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US20180060049A1 (en) Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
Balakrishnan et al. Program demultiplexing: Data-flow based speculative parallelization of methods in sequential programs
Dorai et al. Transparent threads: Resource sharing in SMT processors for high single-thread performance
Chen et al. TEST: a tracer for extracting speculative threads
WO2007055889A1 (en) Facilitating communication and synchronization between main and scout threads
Ying et al. T4: Compiling sequential code for effective speculative parallelization in hardware
KR100738777B1 (ko) 정보 처리 시스템에서 병렬 처리되는 작업들간의 데이터 종속성의 대략적인 결정을 위한 컴퓨터 시스템 동작 방법 및 장치
Tsai et al. Performance study of a concurrent multithreaded processor
Taura et al. Fine-grain multithreading with minimal compiler support—a cost effective approach to implementing efficient multithreading languages
Whaley et al. Heuristics for profile-driven method-level speculative parallelization
JPH05242051A (ja) タスクスケジューリング方式
Lankamp Developing a reference implementation for a microgrid of microthreaded microprocessors
Wang et al. Smarq: Software-managed alias register queue for dynamic optimizations
Ji et al. Compiler-Directed Incremental Checkpointing for Low Latency GPU Preemption
Tsait et al. Program optimization for concurrent multithreaded architectures
Ying Scaling sequential code with hardware-software co-design for fine-grain speculative parallelization
Pickett et al. libspmt: A library for speculative multithreading
WO2014003974A1 (en) Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090120

A524 Written submission of copy of amendment under article 19 pct

Free format text: JAPANESE INTERMEDIATE CODE: A524

Effective date: 20090420

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091020

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100119

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100126

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100219

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100226

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100318

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100326

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100420

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100525

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100927

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20100928

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20101021

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101207

A524 Written submission of copy of amendment under article 19 pct

Free format text: JAPANESE INTERMEDIATE CODE: A524

Effective date: 20110124

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110307

R150 Certificate of patent or registration of utility model

Ref document number: 4701174

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250