JP2014038408A - 同時マルチスレッディング機能をもったプロセッサのパイプラインにおけるストール削減方法、削減装置及び削減プログラム - Google Patents
同時マルチスレッディング機能をもったプロセッサのパイプラインにおけるストール削減方法、削減装置及び削減プログラム Download PDFInfo
- Publication number
- JP2014038408A JP2014038408A JP2012179345A JP2012179345A JP2014038408A JP 2014038408 A JP2014038408 A JP 2014038408A JP 2012179345 A JP2012179345 A JP 2012179345A JP 2012179345 A JP2012179345 A JP 2012179345A JP 2014038408 A JP2014038408 A JP 2014038408A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- stall
- thread
- execution
- fetched
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 230000009467 reduction Effects 0.000 title claims abstract description 38
- 238000000034 method Methods 0.000 title claims description 49
- 238000012545 processing Methods 0.000 claims description 26
- 230000004044 response Effects 0.000 claims description 11
- 238000001514 detection method Methods 0.000 claims description 4
- 238000006243 chemical reaction Methods 0.000 claims description 3
- 238000003780 insertion Methods 0.000 claims description 2
- 230000037431 insertion Effects 0.000 claims description 2
- 238000005457 optimization Methods 0.000 abstract description 12
- 238000005516 engineering process Methods 0.000 abstract description 3
- 230000001419 dependent effect Effects 0.000 description 24
- 230000006870 function Effects 0.000 description 23
- 230000008569 process Effects 0.000 description 15
- 238000004891 communication Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 6
- 238000012544 monitoring process Methods 0.000 description 3
- 238000011946 reduction process Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 230000001771 impaired effect Effects 0.000 description 2
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000001151 other effect Effects 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30079—Pipeline control instructions, e.g. multicycle NOP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
- G06F8/4451—Avoiding pipeline stalls
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/3009—Thread control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction 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)
- Advance Control (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
【課題】アウト・オブ・オーダーのプロセッサにおけるレジスタ依存以外のデータ依存を原因とするストールの発生を抑制する技術を提供する。
【解決手段】ストール削減プログラム300は、PMU314を利用して実行コード308の実行中に生じたストールを検出し、ストールを起こした第1命令がデータ依存する第2命令をその依存関係から特定するハンドラ312と、第2命令をプロファイル情報316として記録するプロファイラ310と、プロファイル情報316に基づき実行コード308又はオリジナルのコード・ファイル306内の適切な位置にthread yield命令を挿入し、最適化済み実行コード320を出力する最適化モジュール318とを含む。
【選択図】図3
【解決手段】ストール削減プログラム300は、PMU314を利用して実行コード308の実行中に生じたストールを検出し、ストールを起こした第1命令がデータ依存する第2命令をその依存関係から特定するハンドラ312と、第2命令をプロファイル情報316として記録するプロファイラ310と、プロファイル情報316に基づき実行コード308又はオリジナルのコード・ファイル306内の適切な位置にthread yield命令を挿入し、最適化済み実行コード320を出力する最適化モジュール318とを含む。
【選択図】図3
Description
本発明は、アウト・オブ・オーダー実行を行うプロセッサにおいて観測されるパイプラインにおけるストールの発生を削減する技術に関する。特に本発明は、同時マルチスレッディング(simultaneous multithreading:SMT)技術における複数スレッドの同時実行を利用して、そのようなストールの発生を削減する技術に関する。
従来多くの高性能のプロセッサにおいて、命令実行効率を上げるためにアウト・オブ・オーダー実行が採用されている。アウト・オブ・オーダー実行では、命令はデータ順、即ち、データないしオペランドがプロセッサのレジスタに用意される順序で処理される。アウト・オブ・オーダーのプロセッサは、順序通り命令を実行したのと同じ結果が得られるように、後に実行結果の順序を修正する。
しかしながら、アウト・オブ・オーダーのプロセッサにおいても、データ依存性を損なう順で命令が実行されストールが発生することがある。原因は、命令ウィンドウの上限といったデータの依存関係をチェックするためのハードウェアの制約であり、高速処理できる依存の複雑さには上限がある。上記問題をソフトウェアによるコードの最適化によって軽減することもできるが、ソフトウェア要素が多数組み合わさって動作する場合の要素間にまたがるデータ依存性や、関数間にまたがるデータの依存性は依然として解析困難である。
パイプラインにおけるストールの問題を解決するためのいくつかの従来技術が存在する。特許文献1は、同時マルチスレッディング・マイクロプロセッサにおいて、プロセッサ内の複数のパイプラインにおける複数の判定ポイント間で、いずれのスレッドの命令を選択するかを決めるスレッド選択優先度を同期させ、それによってシステム全体のパフォーマンスと消費電力を改善する技術を開示する。
また、特許文献2は、第1スレッドの解析によってパイプライン・ストールを起こしうる命令としてレイテンシの長い命令を識別し、識別した命令の実行後にスレッド切り替え命令を挿入することで、長いレイテンシを隠す技術を開示する。
また特許文献3は、同時マルチスレッディングのプロセッサにおいて、各スレッドからの命令に対してレジスタ依存を計算して命令ごとに実行優先度を求め、求めた実行優先度に基づいてディスパッチする命令を選択することで、ストールなく命令を実行できる技術を開示する。
また、特許文献4は、マルチコンテキストをサポートするプロセッサにおいて、パイプラインにあるコンテキストの命令を流して実行すると共に、パイプラインの空きを判断した場合に実行途中にある別のコンテキストに切り替えて同時に複数のコンテキストを実行させる技術を開示する。より具体的には、特許文献4は、コンテキスト切り替えの契機となるロード命令と分岐命令の実行に必要な情報として、それぞれの命令のレイテンシ分のインターバルをもつ先行する命令コードの属性情報フィールドに、各命令の実行途中にある別のコンテキストの命令フェッチを指示する属性情報を設ける技術を開示する。
しかしながら、特許文献1が開示する技術は、ストールしがちなスレッドの実行を抑制するものであるため、他のスレッドの命令の実行によってCPU実行効率を向上させることはできるが、データ依存性を損なう順で命令が実行されることにより生ずるストールを抑制することはできない。また、特許文献2及び4が開示する技術は、実行した命令のレイテンシを隠すためにスレッドの発生をトリガーとして他のスレッドの命令を投入する技術であるため、ストールそれ自体を抑制することはできない。
一方、特許文献2が開示する技術によれば、命令のレジスタ依存を計算して入力値が計算される前に命令を投入しないようにすることでストールの発生を防ぐことができる。しかしながら、特許文献2では、パイプラインに投入しても実行できない命令をその命令のレジスタ依存性によって決定するため、レジスタ依存以外のデータ依存関係により生ずるストールを抑制することができない。
この発明は、上記の問題点を解決するためになされたものであって、アウト・オブ・オーダーのプロセッサにおいて生ずるレジスタ依存以外のデータ依存を原因とするストールの発生を抑制するための技術を提供することを目的とする。
上記課題を解決するために、本願発明者は、最初のストール発生時において、ストールした命令がデータ依存する命令をそのデータ依存関係から特定して記録しておき、次回以降はデータ依存する命令がフェッチされてからストールした命令がフェッチされるまでの間にデータが準備されるように、記録したデータ依存する命令の次回以降の実行に対し実行中のスレッドと異なる他のスレッドのフェッチを指示する命令を挿入するというアイデアに想到した。
即ち、上記目的を達成する本発明は、次のような、コンピュータ処理により、同時マルチスレッディング機能をもったプロセッサのパイプラインにおけるストールを削減する方法によって実現される。そのようなストール削減方法は、コンピュータが、ストールの発生を検出するステップと、コンピュータが、前記ストールを発生させた命令(以下、「第1命令」という)がデータ依存する他の命令(以下、「第2命令」という)をそのデータ依存性から特定するステップと、コンピュータが、特定された前記第2命令を記録するステップと、コンピュータが、第2命令がフェッチされてから第1命令がフェッチされるまでに実行中のスレッドの切り替えが行われるように、記録された前記第2の命令の次回以降の実行に対し前記実行中のスレッドと異なる他のスレッドのフェッチを指示する命令を挿入するステップとを含む。
好ましくは、前記ストールの発生の検出は、パフォーマンス監視ユニットのハードウェア・イベントである前記パイプラインへの命令投入待機イベント又はパイプライン処理のキャンセルのイベントのいずれかのイベントの検出により行われる。
より好ましくは、前記第2命令の特定は、前記イベントの検出に応答して、実行プログラムにおいて前記第1命令を始点として1つ前の命令を順次解析対象とし、前記第1命令から所定数内の命令を解析することに行われる。
更に好ましくは、現在の前記解析対象がコール命令の場合、呼び出された関数のリターン命令が前記現在の解析対象に設定され、前記現在の解析対象が分岐ターゲットである場合、対応する分岐元命令が前記現在の解析対象に設定され、及び前記解析対象が関数の先頭である場合、コール・スタックを調べて前記関数を呼び出したコール命令が前記現在の解析対象に設定される。
また好ましくは、前記第2命令は第1命令とペアにして記録され、かつその記録回数がカウントされ、前記他のスレッドのフェッチを指示する命令の挿入は、カウントされた記録回数が閾値を超えたペアに対して実行される。
また好ましくは、前記他のスレッドのフェッチを指示する命令は、実行中のスレッドの優先度引き下げを指示する命令により実現されてよく、また、バイナリ変換又は再コンパイルにより、動的に又は静的に前記第1命令より前に挿入される。
なお、これまで同時マルチスレッディング機能をもったプロセッサのパイプラインにおけるストールを削減する方法として本発明を説明した。しかし本発明は、上記ストール削減方法をコンピュータに実行させるためのストール削減プログラムとして把握することもできる。また本発明は、上記ストール削減方法を実施するシステムとして把握することもできる。
また、上記目的を達成する本発明は、次のような、同時マルチスレッディング機能をもったプロセッサのパイプラインにおけるストールを削減するストール削減装置によって実現される。そのようなストール削減装置は、スレッドごとに用意されたバッファからスレッドの優先度に従って命令をフェッチするフェッチ・ユニットと、フェッチされた命令をデコードするデコード・ユニットと、デコードされた命令をアウト・オブ・オーダーに実行し、各々実行中の命令のストールを検出可能な複数の実行ユニットとを含む。そして、前記各実行ユニットは、ストールの検出に応答して実行中の命令(以下、「第1命令」という)がデータ依存する他の命令(以下、「第2命令」という)をそのデータ依存性から特定し、記録する。また、前記フェッチ・ユニットは、フェッチした命令が記録された第2命令であるか否かを判定し、第2命令であるとの判定に応答して、次に前記第1命令をフェッチするまでに実行中のスレッドの切り替えを行う。
好ましくは、上記ストール削減装置は、命令と該命令が使用する前記プロセッサのリソース情報とのペアが各命令の実行時にインオーダー順に登録されるテーブルを更に含む。そして前記各実行ユニットは、前記第1命令が使用する前記コンピュータのリソース情報をキーとして前記第1命令よりも先に前記テーブルに登録されたエントリに対して検索を行うことにより前記第2命令を特定する。
また好ましくは、前記第2命令の記録は、所定のテーブルにそのアドレスを保存すること、若しくは命令キャッシュラインの1ビットを利用すること、又はそれらの組み合わせによりなされる。
また好ましくは、上記ストール削減装置は、実行結果をキャッシュやメモリなどの所定の記憶領域に書き込むリタイア・ユニットを更に含む。そして前記第2命令の記録は、前記第2命令に対する前記リタイア・ユニットによる処理が正常終了することを条件としてなされる。
また好ましくは、前記フェッチ・ユニットは、前記実行中のスレッドのバッファからフェッチした命令が、記録された前記第2命令に一致することに応答して、フェッチするバッファを、実行準備が整っている他のスレッドのバッファに切り替えてもよい。これに代えてフェッチ・ユニットは、前記実行中のスレッドのバッファからフェッチした命令が、記録された前記第2命令に一致することに応答して、前記実行中のスレッドと異なる他のスレッドのフェッチを指示する命令や、前記実行中のスレッドの優先度引き下げを支持する命令を挿入してもよい。
本願発明は、最初のストール発生時において、ストールした命令がデータ依存する命令をそのデータ依存関係から特定して記録しておき、記録されたデータ依存する命令の次回以降の実行に対し実行中のスレッドと異なる他のスレッドのフェッチを指示する命令を挿入する。このため、本願発明の構成によれば、データ依存する命令がフェッチされてからストールした命令がフェッチされるまでに実行中のスレッドの切り替えが行われることになり、アウト・オブ・オーダーのプロセッサにおいて生ずるレジスタ依存以外のデータ依存を原因とするストールの発生を抑制することができる。本願発明のその他の効果については、各実施の形態の記載から理解される。
以下、本発明の実施形態を図面に基づいて詳細に説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。なお、実施の形態の説明の全体を通じて同じ要素には同じ番号を付している。
図1Aにパイプラインがストールするとフラッシュするペナルティの一例を模式的に示す。図1Aにおいて横軸はプロセッサのサイクルを示し、縦軸はプロセッサのパイプラインの各ステージを示す(各ステージの処理結果は下のステージに渡される)。また、矩形の横縞はそのステージがスレッド1の命令で埋まっていることを示し、矩形の縦縞はそのステージがスレッド2の命令で埋まっていることを示している。なお、図1Aではパイプラインはその一部を示しており、最終ステージは示されていないことに留意されたい。
図1Aでは、2サイクル目において上から3番目のステージ20で命令Aを処理中にストールが発生している。原因は矢印22が示すように、1サイクル目において上から5番目のステージ24で処理されていた命令Bの実行結果が、2サイクル目においてステージ20で処理されている命令Aに対してまだ利用可能とはなっていなかったためである。このような状況は、アウト・オブ・オーダー実行のプロセッサにおいてデータ依存性を損なう順で命令が実行されると起こり得る。
結果、図1Aに示す例では、ペナルティとしてストールが発生した2サイクル目から次の4サイクルの間(矢印26参照)新たな命令が投入されず、かつ、ストールしたステージ20を含むそれ以前のステージの処理結果が全て無効化される。このようにストールによってパイプラインが命令を効率的に実行できない状態になるとプロセッサの性能が落ちる。そのためストールが頻発すると重大な性能の低下に繋がる。
そこで本発明では、最初のストール発生時において、ストールした命令がデータ依存する命令をそのデータ依存関係から特定して記録しておき、記録されたデータ依存する命令の次回以降の実行に対し実行中のスレッドと異なる他のスレッドのフェッチを指示する命令を挿入することとした。該構成によれば、データ依存する命令がフェッチされてからストールした命令がフェッチされるまでに実行中のスレッドの切り替えが行われるようになるため、データ依存する命令の実行が開始されてからストールした命令の実行が開始されるまで十分な時間間隔が得られるようになる。結果、ストールした命令が実行される際にはデータ依存する命令の実行結果が利用可能な状態になっており、ストールの回避が可能となる。
上記本発明は、ハードウェアにより実装することも、ハードウェアの機能を一部利用してソフトウェアにより実装することもどちらも可能である。以下では前者を第1実施形態、後者を第2実施形態として順に説明する。
(第1実施形態)
図2Aは、本発明の実施形態に係るプロセッサ200のパイプライン構造とその周辺環境を示す図である。プロセッサ200は、同時マルチスレッディング機能をもち、アウト・オブ・オーダー実行を採用する。プロセッサ200のパイプラインは、フェッチ・ユニット204、デコード・ユニット206、ディスパッチ・ユニット208、複数の実行ユニット212〜222、及びリタイア・ユニット224を含む。なお、図2Aに示す例ではパイプラインが途中2つに分かれており、それぞれの実行パイプラインは3つの実行ユニットより構成されているが、本発明を実施するのにパイプラインの分岐数や実行ユニット数に制限はないことに留意されたい。また、プロセッサ200は、図2Aに図示しない他の構成要素を含んでよいことは言うまでもない。
図2Aは、本発明の実施形態に係るプロセッサ200のパイプライン構造とその周辺環境を示す図である。プロセッサ200は、同時マルチスレッディング機能をもち、アウト・オブ・オーダー実行を採用する。プロセッサ200のパイプラインは、フェッチ・ユニット204、デコード・ユニット206、ディスパッチ・ユニット208、複数の実行ユニット212〜222、及びリタイア・ユニット224を含む。なお、図2Aに示す例ではパイプラインが途中2つに分かれており、それぞれの実行パイプラインは3つの実行ユニットより構成されているが、本発明を実施するのにパイプラインの分岐数や実行ユニット数に制限はないことに留意されたい。また、プロセッサ200は、図2Aに図示しない他の構成要素を含んでよいことは言うまでもない。
フェッチ・ユニット204は、スレッドごとに用意された命令バッファ202からスレッドの優先度に従って命令をフェッチする。スレッドの優先度はその命令を処理すべき優先度に応じて設定され、状況に応じて変更されうる。デコード・ユニット206は、フェッチされた命令をデコードする。
ディスパッチ・ユニット208は、その処理に必要な全てのデータないしオペランドが図示しないプロセッサ200のレジスタに用意される順序で、デコードされた命令を適切な実行ユニットにディスパッチする。このときディスパッチされる命令は、元のプログラムと同じ順番でリタイアするためにリオーダ・バッファ210に登録される。
複数の実行ユニット212〜222は各々ディスパッチされた命令を実行する。実行ユニット212〜222は具体的には、図示しないメモリからの値のロード及びストアを行うロード・ストア実行ユニットや、図示しないレジスタが保持する値に加減算やシフトを行う整数演算ユニットであってよい。
リタイア・ユニット224は、各命令の最終的な実行結果を図示しないキャッシュやメモリなどの所定の記憶領域に書き込む。リタイア・ユニット224による処理が終了すると各命令は実行完了の状態になり、上述したリオーダ・バッファ210から削除される。但し、リオーダ・バッファ210からの削除には追加の条件が課される場合もある。
また、本発明の実施形態に係るプロセッサ200はメモリ226を含み、メモリ226内にリソース・テーブル228を保持する。リソース・テーブル228には、命令と該命令が使用するプロセッサ200のリソース情報とのペアが、命令の実行時にリソースごとにインオーダー順(即ち、プログラム順)に登録される。ここで、本発明の実施形態に係るプロセッサ200の各実行ユニット212〜222は、命令を処理する際にストールの発生を検出すると、ストールを起こしたその命令(以下、「第1命令」という)がデータ依存する他の命令(以下、「第2命令」という)をそのデータ依存性から特定して記録する。
より具体的には、各実行ユニット212〜222は、自身の実行ユニットでストールの発生を検出すると、第1命令が使用するリソース情報(典型的にはメモリのアドレス)をキーとして、第1命令よりも先にリソース・テーブル228に登録されたすべてのエントリに対して検索を行うことにより第2命令を特定する。なお、特定される命令が複数存在する場合は、リソース・テーブル228内における登録位置が第1命令のエントリに最も近いものを選択する。このように第1命令がデータ依存する第2命令は、第1命令がアクセスするメモリと同一のメモリアドレスにアクセスし、プログラム順において第1命令に先行しかつ第1命令に最も近い命令を見つけることによって特定できる
実行ユニット212〜222は、特定した第2命令を記録する。第2命令の記録は、メモリ226内のデータ依存命令テーブル230に第2命令のアドレスを登録すること、若しくは命令キャッシュラインの1ビットを利用すること、又はそれら2つの組み合わせにより行ってよい。上記2つの組み合わせでは、最初はデータ依存命令テーブル230に第2命令の情報を保存しておき、命令のデコード時にデコードした命令がデータ依存命令テーブル230に登録されている命令と一致することが判明すると、その時点で第2命令を命令キャッシュラインの1ビットを利用して記録する。
なお、上記構成に代えて、第2命令の記録は、第2命令に対するリタイア・ユニット224による処理が正常終了することを条件としてリタイア・ユニット224の指示により行ってもよい。この場合実行ユニット212〜222は、データ依存する命令を特定するとその時点では命令をマークするに留める。特定した命令のマークは、パイプライン上に流れる情報を追加したり、専用レジスタに特定した命令を保存したり、或いはリオーダ・バッファ210内の特定した命令のエントリをマークすることにより行ってよい。これは、投機的に実行され最終的にはキャンセルされる命令を本発明の適用対象から除くためである。但し、投機的に実行される命令であってもパイプライン上の他の命令に影響を与える命令である限り、本発明を適用することによって効果は得られる。
また本発明の実施形態に係るプロセッサ200のフェッチ・ユニット204は、その処理の際にフェッチした命令が記録された第2命令であるか否かを判定し、第2命令であるとの判定に応答して、現在処理中のスレッドと異なる他のスレッドのフェッチを指示する命令(以下、スレッド切り替え命令という)を挿入する。これは第2命令をフェッチしてから次に第1命令をフェッチするまでに実行中のスレッドの切り替えが行われるようにするためである。なお、スレッド切り替え命令は、現在処理中のスレッドの優先度の引き下げを指示する命令(以下、thread yield命令という)によって実現してもよい。以下では、スレッド切り替え命令としてthread yield命令を用いる場合について説明する。
フェッチ・ユニット204により挿入されたthread yield命令は、デコード・ユニット206により識別され、デコード・ユニット206はフェッチ・ユニット204に対して現在処理中のスレッドの優先度の引き下げを指示する。これに代えて、thread yield命令は、リタイア・ユニット224により識別し、リタイア・ユニット224はフェッチ・ユニット204に対して、現在処理中のスレッドの優先度の引き下げを指示してもよい。
なお、フェッチ・ユニット204によるthread yield命令の挿入位置は、第2命令がフェッチされた後次に第1命令をフェッチするまでにフェッチ対象スレッドを切り替えることのできる位置である。具体的には、thread yield命令フェッチから優先度切り替えが起きるまでに要するサイクル数だけ第1命令より前方である。そこで上記方法に代えて、フェッチ・ユニット204は、その処理の際にフェッチした命令が記録された第2命令であるか否かを判定し、第2命令であるとの判定に応答すると、thread yield命令を挿入することなく直接フェッチするバッファを実行準備が整っている他のスレッドのバッファに切り替えてもよい。
次に図2Bを参照して、上述したプロセッサ200のパイプラインにおいてストールが生じた際の各構成要素の動作を説明する。図2Bに示す例では、実行ユニット214において命令Aの処理中にストールが生じたとする。実行ユニット214は、ストールの検出に応答してリソース・テーブル228を参照し(番号1参照)、実行中の命令Aがデータ依存する他の命令Bを特定し(番号2参照)、特定した命令Bの情報をデータ依存命令テーブル230に記録する(番号3参照)。
フェッチ・ユニット204は命令バッファ202から次の命令をフェッチする度に、データ依存命令テーブル230を参照してフェッチした命令が登録されたいずれかの命令に一致するか否かを判定する(番号4参照)。フェッチした命令がデータ依存命令テーブル230に登録された命令Bであった場合、フェッチ・ユニット204は次に命令Aをフェッチするまでに実行中のスレッドの切り替えが行われるように、実行中のスレッドの優先度の引き下げを指示するthread yield命令Cを挿入する(番号5参照)。
デコード・ユニット206はデコードした命令がthread yield命令Cであることを識別すると、フェッチ・ユニット204に対して実行中のスレッドの優先度の引き下げを指示する(番号6参照)。フェッチ・ユニット204は、デコード・ユニット206の指示に応答して実行中のスレッドの優先度を引き下げる。以降、フェッチ・ユニット204は更新されたスレッドの優先度に従って、スレッドごとに用意された命令バッファ202から命令をフェッチする。なお、上述したように、thread yield命令Cの識別及び実行中のスレッドの優先度の引き下げ指示は、リタイア・ユニット224により行ってもよい(番号6’参照)。また、フェッチ・ユニット204は、フェッチした命令がデータ依存命令テーブル230に登録された命令に一致すると判定した場合、直ちに実行準備が整っている他のスレッドの命令バッファから命令をフェッチしてもよい。
本発明による効果を、図1Bを参照して説明する。図1Bは本発明の適用によりストールが回避される様子を模式的に示した図である。図1Aと同様に、図1Bにおいて横軸はプロセッサのサイクルを示し、縦軸はプロセッサのパイプラインの各ステージを示す(各ステージの処理結果は下のステージに渡される)。また、矩形の横縞はそのステージがスレッド1の命令で埋まっていることを示し、矩形の縦縞はそのステージがスレッド2の命令で埋まっていることを示す。ここで命令Cは、フェッチ・ユニット204により挿入されたthread yield命令を示す。また命令Bは、以前にストールを起こした命令Aがデータ依存する命令を示す。なお、図1Bでは、パイプライン全体が示されていることに留意されたい。
図1Bに示す例では、挿入されたthread yield命令が最終ステージ、即ちリタイア・ユニット224により3サイクル目に処理される。その際リタイア・ユニット224からフェッチ・ユニット204に対し処理中のスレッド2の優先度の引き下げが指示され、結果、次の4サイクル目においてスレッド1の命令のフェッチが開始されている。
4サイクル目以降、スレッド2の命令は優先度の引き下げによりフェッチ対象とならず、矢印36で示されるように続く7サイクルの間はスレッド1の命令のみがパイプラインへ新たに投入される。そして11サイクル目においてようやくスレッド2の優先度が回復し、以前ストールを起こした命令Aがフェッチされている。結果、データ依存する命令Bの実行(或いはフェッチ)から命令Aのフェッチまでに十分な時間間隔が存在することになり、ストールが回避される。
(第2実施形態)
図3は、本発明の実施形態に係るストール削減プログラム300のソフトウェア構成を説明する図である。本発明の実施形態に係るストール削減プログラム300は、ハードウェアの機能を利用して実行コード308の実行中に生じたストールを検出し、ストールを起こした第1命令がデータ依存する第2命令を特定するハンドラ312と、ハンドラ312が特定した第2命令をプロファイル情報316として記録するプロファイラ310と、プロファイル情報316に基づいて実行コード308又はオリジナルのコード・ファイル306内の適切な位置にスレッド切り替え命令を挿入し、最適化済み実行コード320を出力する最適化モジュール318とを含む。第1実施形態に関して説明したように、スレッド切り替え命令は、thread yield命令により実現してもよい。以下では、スレッド切り替え命令としてthreadyield命令を用いる場合について説明する。
図3は、本発明の実施形態に係るストール削減プログラム300のソフトウェア構成を説明する図である。本発明の実施形態に係るストール削減プログラム300は、ハードウェアの機能を利用して実行コード308の実行中に生じたストールを検出し、ストールを起こした第1命令がデータ依存する第2命令を特定するハンドラ312と、ハンドラ312が特定した第2命令をプロファイル情報316として記録するプロファイラ310と、プロファイル情報316に基づいて実行コード308又はオリジナルのコード・ファイル306内の適切な位置にスレッド切り替え命令を挿入し、最適化済み実行コード320を出力する最適化モジュール318とを含む。第1実施形態に関して説明したように、スレッド切り替え命令は、thread yield命令により実現してもよい。以下では、スレッド切り替え命令としてthreadyield命令を用いる場合について説明する。
ここでハンドラ312により利用されるハードウェアの機能とは、CPU302により提供されるパフォーマンス監視部(performancemonitoring unit:PMU)314の機能である。PMU314は、CPU302内部の挙動について指定されたイベントの発生を監視し、内部カウンタによりイベントの発生をカウントしたり、カウント値が閾値に達したときに指定された処理を行ったりする。監視対象の代表的なものとしては、CPU302の実行サイクル数、実行命令数、分岐予測ミス数、データキャッシュミス数などがある。なお、CPU302は、同時マルチスレッディング機能をもち、アウト・オブ・オーダー実行を採用するプロセッサである。
本発明では前処理として後述するプロファイラ310により、PMU314に対し監視したいハードウェア・イベントとしてパイプラインへの命令投入待機イベント及びパイプライン処理のキャンセルのイベント少なくとも一方を指定する。ここでパイプライン処理のキャンセルのイベントは、実行完了前のキャンセルのイベントと、実行完了後のキャンセル、即ち実行結果の無効化処理のイベントの両方を含む。また、プロファイラ310はPMU314に対し、指定したイベントの回数が閾値に達したときに後述するハンドラ312を起動するように指定する。PMU314は、ハンドラ312を起動する際に、指定されたイベントを起こした命令、即ちストールを起こした第1命令のポインタを報告する。
ハンドラ312は、PMU314により起動されると、報告されたポインタが指す第1命令をロードし、デコードし、必要に応じてその命令の種類、オペランドの種類、及び使用するレジスタ番号を取得する。ハンドラ312は、これらの情報を用いて後述する、第1命令がアクセスするHW資源の識別情報を取得する。そしてハンドラ312は、現在実行中の実行コード308において第1命令を始点として1つ前の命令を順次解析対象とし、第1命令から所定数内の命令を解析することにより第1命令がデータ依存する第2命令を特定する。ストールを起こすことから第1命令がデータ依存する第2命令は、実行コード308中第1命令に先行しかつ第1命令に近い位置にあると考えられる。そのため上記所定数としては、10〜20命令数で十分である。
なお、現在の解析対象がコール命令の場合、ハンドラ312は呼び出された関数のリターン命令を現在の解析対象に設定する。また現在の解析対象が分岐ターゲットである場合、ハンドラ312は対応する分岐元命令を現在の解析対象に設定する。また現在の解析対象が関数の先頭である場合、ハンドラ312はコール・スタックを調べて関数を呼び出したコール命令を現在の解析対象に設定する。
またハンドラ312は、現在の解析対象がデータ依存する第2命令であるか否かを次のようにして解析する。まずハンドラ312は、第1命令がアクセスするHW資源の識別情報と、データ依存の種類をPMU314から取得する。ここでデータ依存の種類は同じHW資源に対してなされた2つのアクセスの方法と順番を示し、(Write, Read)、(Read, Write)、(Write,Write)、(Read,Read)のいずれかを示す。但し(1番目のアクセスの方法、2番目のアクセス方法)であり、1番目のアクセスは第2命令によるものであり、2番目のアクセスは第1命令によるものである。そしてハンドラ312は、現在の解析対象の命令をデコードし、その命令が、第1命令がアクセスするHW資源と同じHW資源をアクセスし、しかもアクセスの方法がデータ依存の1番目のアクセス方法と一致するか否かを調べる。これらの条件を満たす場合現在の解析対象は第2命令であり、そうでない場合現在の解析対象は第2命令でない。HW資源はレジスタ、キャッシュ、メモリ、実行ユニット、制御ユニットのいずれかである。
第2命令が特定できた場合、ハンドラ312は第2命令の情報をプロファイラ310に報告する。
プロファイラ310は、ハンドラ312から第2命令の情報を受け取ると、これをプロファイル情報316として記録する。第2命令は第1命令とのペアとして通知されてもよく、プロファイラ310は、ペアごとにその通知の頻度など統計情報を求めて記録してもよい。また第2命令の情報は、命令のアドレス情報など、実行コード308又はそのオリジナルのコード・ファイル306内における第2命令の位置情報が分かるものであればよい。
最適化モジュール318は、プロファイル情報316を参照して、実行コード308又はそのオリジナルのコード・ファイル306内の適切な位置に実行中のスレッドの優先度を引き下げるthread yield命令を挿入する。thread yield命令の挿入は、第1命令と第2命令のペアについての統計情報が閾値を超えることを条件に行ってもよい。なお、thread yield命令を挿入する適切な位置とは、第2命令がフェッチされた後次に第1命令をフェッチするまでにフェッチ対象スレッドを切り替えることのできる位置である。
また、thread yield命令の挿入を静的に行うか又は動的に行うかは、実行コード308が静的に存在するか又は動的に変更されるものとして存在するか、即ち、実行コード308が再配置可能であるか否かによる。前者の場合については図4Aを参照して、また後者の場合については図4B及び図4Cを参照して、最適化処理を説明する。
図4Aは、実行コード308がオフラインで存在する場合における、本発明の実施形態に係るストール削減プログラムのソフトウェア構成を説明する図である。CPU402、PMU412、OS404、ハンドラ414、プロファイラ410については、図3を参照して説明したのと変わらないのでここでは説明を省略する。実行コード308はバイナリコード408として存在し、最適化装置418(最適化モジュール318に対応)はオフラインでバイナリコード・ファイル406を変換し、プロファイル情報416を参照して適切な位置にthread yield命令を挿入する。そして最適化装置418は、threadyield命令を挿入されたバイナリコード・ファイルを最適化済みバイナリコード・ファイル420として出力する。
なお、バイナリコード408のソースコード・ファイル422が存在する場合、最適化装置418はソースコード・ファイル422からバイナリコードに変換する際にプロファイル情報416を参照して、thread yield命令を挿入すべき位置が含まれると判断するとthreadyield命令を挿入し、最適化済みバイナリコード・ファイル420を出力する。
図4Bは、実行対象プログラムが動的に変更する場合における、本発明の実施形態に係るストール削減プログラムのソフトウェア構成の一例を説明する図である。CPU402、PMU412、OS404、ハンドラ414、プロファイラ410については、図3を参照して説明したのと変わらないのでここでは説明を省略する。実行コード308はバイトコード・ファイル430として存在し、インタプリタ432により逐次解釈され、実行頻度の高いバイトコードはJITコンパイラ434によりバイナリコードに変換されCPUで直接実行される。JITコンパイラ434(最適化モジュール318に対応)はプロファイル情報416を参照し、コンパイルしたバイナリコードにthread yield命令を挿入すべき適切な位置が含まれると判断すると、動的に再コンパイルしてthread yield命令を挿入して、最適化済みコード436を出力する。
図4Cは、実行対象プログラムが動的に変更する場合における、本発明の実施形態に係るストール削減プログラムのソフトウェア構成の他の一例を説明する図である。CPU402、PMU412、OS404、ハンドラ414、プロファイラ410については、図3を参照して説明したのと変わらないのでここでは説明を省略する。実行コード308はバイナリコード442として存在し、動的バイナリ変換(Dynamic Binary Translation:DBT)444は、バイナリコード442を実行時に現在の環境において実行可能なバイナリに変換する。DBT444(最適化モジュール318に対応)はプロファイル情報416を参照し、次に実行するバイナリコード部分にthread yield命令を挿入すべき適切な位置が含まれると判断すると、threadyield命令を挿入してバイナリ変換し、最適化済みコード446を出力する。
次に図5を参照して、本発明の実施形態に係るストール削減プログラム300によるストール削減処理を説明する。図5は、本発明の実施形態に係るストール削減処理全体の動作フローの一例を示す。
図5に示すストール削減処理はステップ500から開始し、プロファイラ310は調査したいPMU314のハードウェア・イベントとして、パイプラインへの命令投入待機イベント及びパイプライン処理のキャンセルのイベントの少なくとも一方を指定する。PMU314は、指定されたハードウェア・イベントをカウントし、閾値を超えた時点で同様にプロファイラ310により指定されたハンドラ312を起動する(ステップ502)。起動されたハンドラ312は、PMU314を調べて指定したハードウェア・イベントを起こした第1命令を取得する(ステップ504)。
続いてハンドラ312は、取得した第1命令をコード解析現在値に設定する(ステップ506)。続いてハンドラ312は、実行コード308内においてコード解析現在値を始点として1つ前の命令を新たにコード解析現在値に設定する(ステップ508)。続いてハンドラ312は、コード解析現在値がコール命令であるか否かを判定する(ステップ510)。コード解析現在値がコール命令である場合(ステップ510:YES)、ハンドラ312は、コール命令の分岐先関数のリターン命令を新たにコード調査現在値に設定し(ステップ512)、再びステップ508の処理へ戻る。コール命令分岐先が静的に解析できない場合、一般的に用いられるコール分岐木のプロファイルを収集し、最も可能性のある分岐先を決定する。
一方、コード解析現在値がコール命令でない場合(ステップ510:NO)、続いてハンドラ312はコード解析現在値が分岐ターゲットであるか否かを判定する(ステップ514)。コード解析現在値が分岐ターゲットである場合(ステップ514:YES)、ハンドラ312は、分岐元命令を新たにコード解析現在値に設定し(ステップ516)、再びステップ508の処理へ戻る。分岐元が静的に解析できない場合、一般的に用いられる分岐のプロファイルを収集し、最も可能性のある分岐元を決定する。
一方、コード解析現在値が分岐ターゲットでない場合(ステップ514:NO)、続いてハンドラ312はコード解析現在値が関数の先頭であるか否かを判定する(ステップ518)。コード解析現在値が関数の先頭である場合(ステップ518:YES)、ハンドラ312は、コール・スタックを調べて関数を呼び出したコール命令を現在の解析対象に設定し(ステップ520)、再びステップ508の処理へ戻る。
コード解析現在値が関数の先頭でもなかった場合(ステップ518:NO)、続いてハンドラ312は、コード解析現在値が、第1命令がデータ依存する第2命令であるか否かを判定する(ステップ522)。コード解析現在値が第2命令であると判定した場合(ステップ522:YES)、ハンドラ312は、コード解析現在値を第2命令として特定し、プロファイラ310に対して第2命令と第1命令のペアを通知してその頻度情報の更新を指示する(ステップ524)。
続いて処理はステップ524からステップ526へ進み、プロファイラ310によるプロファイル情報の更新に応答して、最適化モジュール318は第2命令と第1命令のペアについての頻度が閾値を超えているか否かを判定する。閾値を超えている場合(ステップ526:YES)、最適化モジュール318はプロファイル情報を参照して、実行コード308又はそのオリジナルのコード・ファイル306内の適切な位置に実行中のスレッドの優先度を引き下げるthread yield命令を挿入する(ステップ528)。一方、閾値を超えていない場合(ステップ526:NO)、処理は終了する。
また、ステップ522においてコード解析現在値が第2命令でないと判定された場合(S522:NO)、続いてハンドラ312は解析した命令の数が所定数(例えば10〜20の間の数)に達したか否かを判定する(ステップ530)。解析した命令数が所定数に達していない場合(ステップ530:NO)、処理はステップ508へ戻る。一方、解析した命令の数が所定数に達している場合(ステップ526:YES)、処理は終了する。
図6は、本発明を実施するのに好適なコンピュータシステム600のハードウェア構成の一例を示す。コンピュータ600は、CPU602とメイン・メモリ604とを備えており、これらはバス606に接続されている。CPU602は同時マルチスレッディング機能をもち、アウト・オブ・オーダー実行を採用するものであり、例えばIBM社のPOWER(商標)シリーズ、インテル社のCore(商標)シリーズなどが使用されうる。バス606には、ディスプレイ・コントローラ608を介して、ディスプレイ610、例えば液晶ディスプレイ(LCD)が接続されうる。ディスプレイ610は、コンピュータの管理のために、通信回線を介してネットワークに接続されたコンピュータについての情報と、そのコンピュータ上で動作中のソフトウェアについての情報を、適当なグラフィック・インタフェースで表示するために使用される。
バス606にはまた、SATA又はIDEコントローラ612を介して、ディスク614、例えばシリコン・ディスク又はハードディスクが接続されうる。また、バス606にはまた、SATA又はIDEコントローラ612を介して、任意的に、ドライブ616、例えばCD、DVD又はBDドライブが接続されうる。バス606にはさらに、任意的に、キーボード・マウスコントローラ618又はUSBバス(図示せず)を介して、キーボード620及びマウス622が接続されうるが、本発明を実施する上では必要ない。
ディスク614には、オペレーティング・システム、本発明の実施形態に係るストール削減プログラム300、その他のプログラム、及びデータが、メイン・メモリ604にロード可能なように記憶されている。オペレーティング・システムは、例えば、LINUX(登録商標)、マイクロソフト・コーポレーションが提供するWindows(登録商標)オペレーティング・システム、アップル・コンピュータ・インコーポレイテッドが提供するMacOS(登録商標)若しくはiOS(登録商標)、X Window Systemを備えるUNIX(登録商標)系システム(たとえば、インターナショナル・ビジネス・マシーンズ・コーポレーション(登録商標)が提供するAIX(登録商標)でありうる。ドライブ616は、必要に応じて、CD−ROM、DVD−ROM又はBDからプログラムをディスク614にインストールするために使用されうる。
通信インタフェース626は、例えばイーサネット(登録商標)・プロトコルに従う。通信インタフェース626は、通信コントローラ624を介してバス606に接続され、コンピュータ600を通信回線628に物理的に接続する役割を担い、コンピュータ600のオペレーティング・システムの通信機能のTCP/IP通信プロトコルに対して、ネットワーク・インタフェース層を提供する。なお、通信回線は、有線LAN環境に基づくもの、又は、無線LAN環境、例えば、IEEE802.11a/b/g/nなどのWi−Fi規格に基づくものであってもよい。
以上から、本発明の実施態様において使用されるコンピュータ600は、特定のオペレーティング・システム環境に限定されるものではないことを理解することができるであろう。なお、上記説明した構成要素は例示であり、そのすべての構成要素が本発明の必須構成要素となるわけではない。
以上、実施形態を用いて本願発明の説明をしたが、本願発明の技術範囲は上記実施形態に記載の範囲には限定されない。上記の実施形態に、種々の変更又は改良を加えることが可能であることが当業者に明らかである。以上のように、上記の実施形態に変更又は改良を加えた形態も当然に本発明の技術的範囲に含まれる。
なお、特許請求の範囲、明細書、及び図面中において示した装置、システム、プログラム、及び方法における動作、手順、ステップ、及び段階等の各処理の実行順序は、特段「より前に」、「先立って」等と明示しておらず、また、前の処理の出力を後の処理で用いるのでない限り任意の順序で実現しうることに留意すべきである。また、前の処理の出力を後の処理で用いる場合でも、前の処理と後の処理の間に他の処理が入ることは可能である場合があること、又は間に他の処理が入るように記載されていても前の処理を後の処理の直前に行うよう変更することも可能である場合があることも留意されたい。特許請求の範囲、明細書、及び図面中の動作フローに関して、便宜上「まず、」、「次に、」、「続いて、」等を用いて説明したとしても、この順で実施することが必須であることを必ずしも意味するとは限らない。
Claims (14)
- コンピュータ処理により、同時マルチスレッディング機能をもったプロセッサのパイプラインにおけるストールを削減する方法であって、
コンピュータが、ストールの発生を検出するステップと、
前記コンピュータが、前記ストールを発生させた命令(以下、「第1命令」という)がデータ依存する他の命令(以下、「第2命令」という)をそのデータ依存性から特定するステップと、
前記コンピュータが、特定された前記第2命令を記録するステップと、
前記コンピュータが、第2命令がフェッチされてから第1命令がフェッチされるまでに実行中のスレッドの切り替えが行われるように、記録された前記第2の命令の次回以降の実行に対し前記実行中のスレッドと異なる他のスレッドのフェッチを指示する命令を挿入するステップと、
を含むストール削減方法。 - 前記ストールの発生の検出は、前記パイプラインへの命令投入待機イベント又はパイプライン処理のキャンセルのイベントのいずれかの検出により行われる、請求項1に記載のストール削減方法。
- 前記第2命令の特定は、実行プログラムにおいて前記第1命令を始点として1つ前の命令を順次解析対象とし、前記第1命令から所定数内の命令を解析することにより行われる、請求項2に記載のストール削減方法。
- 現在の前記解析対象がコール命令の場合、呼び出された関数のリターン命令を前記現在の解析対象に設定し、前記現在の解析対象が分岐ターゲットである場合、対応する分岐元命令を前記現在の解析対象に設定し、及び前記現在の解析対象が関数の先頭である場合、コール・スタックを調べて前記関数を呼び出したコール命令を前記現在の解析対象に設定する、請求項3に記載のストール削減方法。
- 前記第2命令は第1命令とペアにして記録され、かつその記録回数がカウントされ、
前記他のスレッドのフェッチを指示する命令の挿入は、カウントされた記録回数が閾値を超えたペアに対して実行される、請求項4に記載のストール削減方法。 - 前記他のスレッドのフェッチを指示する命令は、バイナリ変換又は再コンパイルにより、動的に又は静的に前記第2命令と前記第1命令の間に挿入される、請求項5に記載のストール削減方法。
- 請求項1乃至6に記載のいずれかの方法の全ステップを実行するように適合された手段と、同時マルチスレッディング機能を有しアウト・オブ・オーダー実行するプロセッサとを含むシステム。
- 請求項1乃至6に記載のいずれかの方法の全ステップを前記コンピュータに実行させる、同時マルチスレッディング機能をもったプロセッサのパイプラインにおけるストールの発生を削減するためのプログラム。
- 同時マルチスレッディング機能をもったプロセッサのパイプラインにおけるストールを削減するストール削減装置であって、
スレッドごとに用意されたバッファからスレッドの優先度に従って命令をフェッチするフェッチ・ユニットと、
フェッチされた命令をデコードするデコード・ユニットと、
デコードされた命令をディスパッチするディスパッチ・ユニットと、
ディスパッチされた命令を実行し、ストールを検出可能な複数の実行ユニットとを含み、
前記各実行ユニットは、ストールの検出に応答して実行中の命令(以下、「第1命令」という)がデータ依存する他の命令(以下、「第2命令」という)をそのデータ依存性から特定して記録し、
前記フェッチ・ユニットは、フェッチした命令が記録された第2命令であるか否かを判定し、第2命令であるとの判定に応答して、次に前記第1命令をフェッチするまでに実行中のスレッドの切り替え行う、
ストール削減装置。 - 命令と該命令が使用する前記プロセッサのリソース情報とのペアが各命令の実行時にインオーダー順に登録されるテーブルを更に含み、
前記各実行ユニットは、前記第1命令が使用する前記コンピュータのリソース情報をキーとして前記第1命令よりも先に前記テーブルに登録されたエントリに対して検索を行うことにより前記第2命令を特定する、請求項9に記載のストール削減装置。 - 前記第2命令の記録は、所定のテーブルにそのアドレスを保存すること、若しくは命令キャッシュラインの1ビットを利用すること、又はそれらの組み合わせによりなされる、請求項10に記載のストール削減装置。
- 実行結果を所定の記憶領域に書き込むリタイア・ユニットを更に含み、
前記第2命令の記録は、前記第2命令に対する前記リタイア・ユニットによる処理が正常終了することを条件としてなされる、請求項11に記載のストール削減装置。 - 前記フェッチ・ユニットは、前記実行中のスレッドのバッファからフェッチした命令が、記録された前記第2命令に一致することに応答して、フェッチすべきバッファを、実行準備が整っている他のスレッドのバッファに切り替える、請求項12に記載のストール削減装置。
- 前記フェッチ・ユニットは、前記実行中のスレッドのバッファからフェッチした命令が、記録された前記第2命令に一致することに応答して、前記実行中のスレッドの優先度引き下げを指示する命令を挿入する、請求項12に記載のストール削減装置。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012179345A JP2014038408A (ja) | 2012-08-13 | 2012-08-13 | 同時マルチスレッディング機能をもったプロセッサのパイプラインにおけるストール削減方法、削減装置及び削減プログラム |
US13/965,562 US10114645B2 (en) | 2012-08-13 | 2013-08-13 | Reducing stalling in a simultaneous multithreading processor by inserting thread switches for instructions likely to stall |
US16/049,929 US10585669B2 (en) | 2012-08-13 | 2018-07-31 | Reducing stalling in a simultaneous multithreading processor by inserting thread switches for instructions likely to stall |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012179345A JP2014038408A (ja) | 2012-08-13 | 2012-08-13 | 同時マルチスレッディング機能をもったプロセッサのパイプラインにおけるストール削減方法、削減装置及び削減プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2014038408A true JP2014038408A (ja) | 2014-02-27 |
Family
ID=50067107
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012179345A Pending JP2014038408A (ja) | 2012-08-13 | 2012-08-13 | 同時マルチスレッディング機能をもったプロセッサのパイプラインにおけるストール削減方法、削減装置及び削減プログラム |
Country Status (2)
Country | Link |
---|---|
US (2) | US10114645B2 (ja) |
JP (1) | JP2014038408A (ja) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10558463B2 (en) | 2016-06-03 | 2020-02-11 | Synopsys, Inc. | Communication between threads of multi-thread processor |
US10628320B2 (en) | 2016-06-03 | 2020-04-21 | Synopsys, Inc. | Modulization of cache structure utilizing independent tag array and data array in microprocessor |
US10613859B2 (en) * | 2016-08-18 | 2020-04-07 | Synopsys, Inc. | Triple-pass execution using a retire queue having a functional unit to independently execute long latency instructions and dependent instructions |
US10552158B2 (en) | 2016-08-18 | 2020-02-04 | Synopsys, Inc. | Reorder buffer scoreboard having multiple valid bits to indicate a location of data |
GB2589900B (en) * | 2019-12-12 | 2022-06-01 | Sony Interactive Entertainment Inc | Apparatus and method for source code optimisation |
US11687361B1 (en) | 2021-02-23 | 2023-06-27 | Rapid7, Inc. | Generating thread sensors for extracting side channel information from multithreading processors |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3569014B2 (ja) | 1994-11-25 | 2004-09-22 | 富士通株式会社 | マルチコンテキストをサポートするプロセッサおよび処理方法 |
US6026479A (en) * | 1998-04-22 | 2000-02-15 | Hewlett-Packard Company | Apparatus and method for efficient switching of CPU mode between regions of high instruction level parallism and low instruction level parallism in computer programs |
WO2002006959A1 (en) * | 2000-07-14 | 2002-01-24 | Clearwater Networks, Inc. | Instruction fetch and dispatch in multithreaded system |
US6907520B2 (en) * | 2001-01-11 | 2005-06-14 | Sun Microsystems, Inc. | Threshold-based load address prediction and new thread identification in a multithreaded microprocessor |
US20030208665A1 (en) * | 2002-05-01 | 2003-11-06 | Jih-Kwon Peir | Reducing data speculation penalty with early cache hit/miss prediction |
US7447877B2 (en) * | 2002-06-13 | 2008-11-04 | Intel Corporation | Method and apparatus for converting memory instructions to prefetch operations during a thread switch window |
US7664936B2 (en) | 2005-02-04 | 2010-02-16 | Mips Technologies, Inc. | Prioritizing thread selection partly based on stall likelihood providing status information of instruction operand register usage at pipeline stages |
US8301868B2 (en) * | 2005-09-23 | 2012-10-30 | Intel Corporation | System to profile and optimize user software in a managed run-time environment |
US7577826B2 (en) * | 2006-01-30 | 2009-08-18 | Sony Computer Entertainment Inc. | Stall prediction thread management |
FR2902213B1 (fr) | 2006-06-08 | 2008-10-17 | Thomson Licensing Sas | Carte electronique dotee de fonctions securitaires |
GB2443507A (en) * | 2006-10-24 | 2008-05-07 | Advanced Risc Mach Ltd | Debugging parallel programs |
US20080263325A1 (en) | 2007-04-19 | 2008-10-23 | International Business Machines Corporation | System and structure for synchronized thread priority selection in a deeply pipelined multithreaded microprocessor |
US7805595B2 (en) * | 2007-04-20 | 2010-09-28 | Arm Limited | Data processing apparatus and method for updating prediction data based on an operation's priority level |
US7539979B1 (en) * | 2008-03-31 | 2009-05-26 | International Business Machines Corporation | Method and system for forcing context-switch during mid-access to non-atomic variables |
US10007523B2 (en) * | 2011-05-02 | 2018-06-26 | International Business Machines Corporation | Predicting cache misses using data access behavior and instruction address |
US9262327B2 (en) * | 2012-06-29 | 2016-02-16 | Intel Corporation | Signature based hit-predicting cache |
US9459876B2 (en) * | 2013-07-18 | 2016-10-04 | Nvidia Corporation | System, method, and computer program product for managing divergences and synchronization points during thread block execution by using a double sided queue for token storage |
-
2012
- 2012-08-13 JP JP2012179345A patent/JP2014038408A/ja active Pending
-
2013
- 2013-08-13 US US13/965,562 patent/US10114645B2/en active Active
-
2018
- 2018-07-31 US US16/049,929 patent/US10585669B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US10585669B2 (en) | 2020-03-10 |
US20180336030A1 (en) | 2018-11-22 |
US20140047215A1 (en) | 2014-02-13 |
US10114645B2 (en) | 2018-10-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10585669B2 (en) | Reducing stalling in a simultaneous multithreading processor by inserting thread switches for instructions likely to stall | |
US9804854B2 (en) | Branching to alternate code based on runahead determination | |
JP3871458B2 (ja) | コンピュータ・システム | |
TWI550511B (zh) | 用於指令轉譯錯誤偵測之方法 | |
JP6195566B2 (ja) | ランタイム・インストルメンテーション報告 | |
US8453129B2 (en) | Using hardware interrupts to drive dynamic binary code recompilation | |
JP2013533549A (ja) | 事前通知技術を用いる、プログラムのシーケンシャルフローを変更するための方法および装置 | |
US10353710B2 (en) | Techniques for predicting a target address of an indirect branch instruction | |
US10628160B2 (en) | Selective poisoning of data during runahead | |
TW201439904A (zh) | 在提前執行中管理潛在無效結果 | |
US20210182039A1 (en) | Apparatus and method for source code optimisation | |
KR20150072734A (ko) | 멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법 | |
CN108920190B (zh) | 用于确定从其恢复指令执行的恢复点的装置和方法 | |
EP3887942B1 (en) | Loop exit predictor | |
US20150154021A1 (en) | Control of switching between execution mechanisms | |
TWI485621B (zh) | 用於選擇性執行確定指令的方法、裝置及系統 | |
US10613866B2 (en) | Method of detecting repetition of an out-of-order execution schedule, apparatus and computer-readable medium | |
US8726244B2 (en) | Software breakpoint handling by eliminating instruction replacement and execution under certain conditions | |
JP5696210B2 (ja) | プロセッサ及びその命令処理方法 | |
US20220075624A1 (en) | Alternate path for branch prediction redirect | |
US20090217014A1 (en) | Processor, memory device, processing device, and method for processing instruction | |
Li et al. | An evaluation of misaligned data access handling mechanisms in dynamic binary translation systems | |
Zhang et al. | Dynamic code value specialization using the trace cache fill unit | |
JP2023525025A (ja) | 装置の状態情報を収集する技術 | |
KR20100024813A (ko) | 우선순위 기반 실행을 이용한 캐시미스 대기시간 활용 방법및 장치 |