JP5088371B2 - 情報処理装置と負荷調停制御方法 - Google Patents

情報処理装置と負荷調停制御方法 Download PDF

Info

Publication number
JP5088371B2
JP5088371B2 JP2009520148A JP2009520148A JP5088371B2 JP 5088371 B2 JP5088371 B2 JP 5088371B2 JP 2009520148 A JP2009520148 A JP 2009520148A JP 2009520148 A JP2009520148 A JP 2009520148A JP 5088371 B2 JP5088371 B2 JP 5088371B2
Authority
JP
Japan
Prior art keywords
instruction
thread
input
instruction input
circuit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2009520148A
Other languages
English (en)
Other versions
JPWO2008155807A1 (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JPWO2008155807A1 publication Critical patent/JPWO2008155807A1/ja
Application granted granted Critical
Publication of JP5088371B2 publication Critical patent/JP5088371B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/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

Description

本発明は、情報処理装置、特に同時マルチスレッド方式の情報処理装置に関する。また、本発明は、複数のスレッドの間の性能負荷バランスの調停を行う負荷調停制御方法に関する。
近年、情報処理装置では演算実行の処理をできるだけ並列化して各実行部の使用効率をあげるスーパースカラ方式や、依存関係にない複数の命令をプログラム中での出現順序に関係なく次々と実行することにより実行部の使用効率を向上するアウトオブオーダ命令実行方式などが全体のパフォーマンスを向上させる手段として一般に知られている。
ところが、前述した方式を採用した情報処理装置においても内部の実行部(演算部など)がすべて動作しているわけではなく、並列性が最大限に活かされていない。
そこで、単一スレッドでは完全には使用されない内部資源を複数のスレッドに分配し、各々のスレッドで相互に関連性のない命令列を処理することで、情報処理装置が本来持つ並列性を最大限に引き出そうという方式、同時マルチスレッディング(SMT:Simultaneous Multi-Threading)が提案されている。
しかしながら、SMTでは複数のスレッドの命令列である資源を共有してその使用効率を向上することを目的とするが、ひとつのスレッドである共有資源を使用しているときには別のスレッドでその資源を使用できないため、ひとつのスレッドで共有資源を長時間占有してしまうと、別のスレッドの処理が進まないというアンバランスな状況が発生してしまうという問題がある。
本発明は上記のような実情に鑑みてなされたものであり、スレッド間の負荷バランスを定性的に判断し、スレッド間の性能負荷バランスを調停する同時マルチスレッド方式の情報処理装置とスレッド間性能負荷調停制御方法を提供することを目的とする。
本発明の態様のひとつである同時マルチスレッディング方式の情報処理装置であって、メモリから命令を取得し、前記命令に基づいた演算を実行する演算部に、前記命令を投入する制御を、スレッド間で共有する命令投入制御部と、前記命令をデコードした情報を保持する前記スレッドごとに設けられるコミットスタックエントリと、前記命令投入制御部から投入された前記命令の順番に従い前記演算部により演算された演算結果に応じて、前記メモリと汎用レジスタの更新をする命令完了順序制御部と、前記コミットスタックエントリに登録された前記情報を検知し、前記検知の結果に基づいて前記命令投入制御部を制御する性能負荷バランス解析部と、を具備する構成である。
好ましくは、命令完了順序制御部は、前記コミットスタックエントリに前記情報が登録されていない時間を、前記スレッドが命令処理を実行していない時間であるとし、前記情報が登録されていない前記コミットスタックエントリのみが空であることを示すエンプティフラグを生成する。
好ましくは、性能負荷バランス解析部は、前記コミットスタックエントリごとに予め命令投入優先要求閾値を設定し、前記コミットスタックエントリごとに生成された前記エンプティフラグが発生している時間を計測し、前記コミットスタックエントリに対応する前記計測の結果である優先スレッド値と前記命令投入優先要求閾値を比較して、前記優先スレッド値が前記命令投入優先要求閾値を越えた場合、前記エンプティフラグが発生している前記コミットスタックエントリに対応する前記スレッドに切り替えるため命令投入優先要求フラグを生成する。
好ましくは、性能負荷バランス解析部は、前記コミットスタックエントリごとに予め前記命令投入優先要求フラグを解除するための解除閾値を設定し、他の前記命令投入優先要求フラグが発生している前記コミットスタックエントリごとに生成された前記エンプティフラグが発生している前記スレッドの時間を計測した第2の優先スレッド値と前記優先スレッド値との差分である差分値を算出し、前記差分値と解除閾値を比較して、前記差分値が前記解除閾値を越えた場合、前記エンプティフラグが発生している前記コミットスタックエントリに対応する前記スレッドに切り替えるため命令投入優先要求フラグを解除する。
好ましくは、前記命令完了順序制御部は、抑制された側の前記スレッドの前記命令の処理が一定時間停滞した場合に、前記命令を投入している側の前記スレッドの命令投入優先を解除するために、強制的に前記スレッドを固定することによるハングを回避するハング警告を前記命令投入制御部に出力する命令継続時間監視部を具備する。
好ましくは、命令投入制御部は、全ての前記スレッド前記命令が投入可能なタイミングであるときにはサイクルごとに前記スレッドを切り替え、ひとつの前記スレッドのみ前記命令が投入可能なタイミングであるときは前記命令が投入可能な前記スレッドを選択する。
本発明は、同時マルチスレッディング方式のスレッド間性能負荷調停制御方法であって、メモリから命令を取得し、スレッドごとに前記命令に基づいた演算を実行するために、前記命令の投入タイミングを制御する命令投入制御ステップと、前記命令をデコードした情報を保持する前記スレッドごとに設けられる前記コミットスタックエントリに登録された前記情報を検知し、前記検知の結果に基づいて前記命令の投入を制御する性能負荷バランス解析ステップと、を有する。
好ましくは、性能負荷バランス解析ステップは、前記コミットスタックエントリに前記情報が登録されていない時間を、前記スレッドが命令処理を実行していない時間であるとし、前記情報が登録されていない前記コミットスタックエントリのみが空であることを示すエンプティフラグを取得する。
好ましくは、性能負荷バランス解析ステップは、前記コミットスタックエントリごとに予め命令投入優先要求閾値を設定し、前記コミットスタックエントリごとに生成された前記エンプティフラグが発生している時間を計測し、前記コミットスタックエントリに対応する前記計測の結果である優先スレッド値と前記命令投入優先要求閾値を比較して、前記優先スレッド値が前記命令投入優先要求閾値を越えた場合、前記エンプティフラグが発生している前記コミットスタックエントリに対応する前記スレッドに切り替えるため命令投入優先要求フラグを生成する。
好ましくは、性能負荷バランス解析ステップは、前記コミットスタックエントリごとに予め前記命令投入優先要求フラグを解除するための解除閾値を設定し、他の前記命令投入優先要求フラグが発生している前記コミットスタックエントリごとに生成された前記エンプティフラグが発生している前記スレッドの時間を計測した第2の優先スレッド値と前記優先スレッド値との差分である差分値を算出し、前記差分値と解除閾値を比較して、前記差分値が前記解除閾値を越えた場合、前記エンプティフラグが発生している前記コミットスタックエントリに対応する前記スレッドに切り替えるため命令投入優先要求フラグを解除する。
好ましくは、抑制された側の前記スレッドの前記命令の処理が一定時間停滞した場合に、前記命令を投入している側の前記スレッドの命令投入優先を解除する。
好ましくは、命令投入制御ステップは、全ての前記スレッド前記命令が投入可能なタイミングであるときにはサイクルごとに前記スレッドを切り替え、ひとつの前記スレッドのみ前記命令が投入可能なタイミングであるときは前記命令が投入可能な前記スレッドを選択する。
本発明によれば、スレッド間の負荷バランスを定性的に判断し、スレッド間の性能負荷バランスを調停することができる。
本発明である情報処理装置の構成を示すブロック図である。 命令パイプラインを示すブロック図である。 性能負荷バランス解析部の構成を示すブロック図である。 命令投入制御部の構成を示すブロック図である。 命令継続時間監視部の構成を示すブロック図である。 本発明である情報処理装置の動作を示す動作タイミングを示すタイムチャートである。 本発明である情報処理装置の動作を示す動作フロー図である。
(原理説明)
以下に説明する一実施形態による情報処理装置は、スーパースカラ方式およびアウトオブオーダ命令実行方式で動作し、かつ同時マルチスレッディングを実現する情報処理装置である。そして、メモリから演算部への命令投入を制御する命令投入制御部をスレッド間で共有し、また命令完了順序を管理する命令完了順序管理部をスレッドごとに多重化する構成をもつ情報処理装置である。また、情報処理装置は、各スレッドの命令実行サイクル数のバランスに偏りが生じていることを命令完了順序部の使用状況によって検知する性能負荷バランス解析部を備えている。
上記のように構成した情報処理装置により、性能負荷バランスの偏りが検知された場合、命令投入を実行するスレッドを固定する。また、各スレッドの性能負荷バランスを調停する。また、優先度を低くしたスレッドの処理を阻害しすぎないように命令投入のスレッド固定を抑止する。
以下図面に基づいて、本発明の実施形態について詳細を説明する。
(実施例1)
(構成)
図1は同時マルチスレッド方式の情報処理装置1の構成図である。本実施例では、情報処理装置1は、メモリ2、命令取得制御部3、命令投入制御部4、命令解析部5、命令発行制御部6、命令完了順序制御部7、演算部8、性能負荷バランス解析部9により構成される。
メモリ2は、情報処理装置1内のキャッシュなどとして機能する。命令取得制御部3は、命令バッファ10を備え、メモリ2から演算を行うために命令を取得するための制御を行い、取得した命令を命令バッファ10に保持する。
命令投入制御部4は、命令バッファ10に保持されている命令を読み出し、命令解析部5に転送する。また、命令投入制御部4は、命令バッファ10に保持された命令に関して同一サイクルでの処理を1スレッドに限定し、必要に応じて各サイクルでスレッドを切り替えながら一方のスレッドの命令を命令解析部5へ投入する。
命令解析部5は、命令投入制御部4から転送された命令をデコードする。命令発行制御部6は、命令解析部5でデコードされたそれぞれのコードに対応する処理を行うための命令の発行を制御する。演算部8は、命令発行制御部6から供給されたオペランドに基づいて演算等を行う。
命令完了順序制御部7は、命令解析部5によってデコードされた命令の情報を保持するコミットスタックエントリ12A(CSE0)、コミットスタックエントリ12B(CSE1)をスレッドごとに用意し、コミットスタックエントリ12A、コミットスタックエントリ12Bに登録された情報に基づいて、命令が完了可能かどうかの判断を行い、命令完了と同時にその命令に関する情報をリセットする構成とする。すなわち、コミットスタックエントリ12A、コミットスタックエントリ12Bに情報が登録されるのは、DispatchステージからCommitステージの間であり、その間は何らかの命令処理を実行中であることを示す。
また、命令完了順序制御部7は、命令継続時間監視部11を備えている。命令継続時間監視部11はハングの監視を行う回路である。
ここで、コミットスタックエントリ(CSE:Commit Stack Entry)はバッファであり、コミットスタックエントリは、命令ごとに1エントリが割り当てられ、実行中の命令の進捗状況の監視に用いる。また、コミットスタックエントリのエントリは、プログラムの命令の順番に従い、インオーダにより実施される命令コミット時に、無効化される。
なお、図1では2SMTであるため2個のコミットスタックエントリだけ設けられているが、コミットスタックエントリを2個以上用意してもかまわない。また、命令完了順序制御部7は、命令解析部5と接続され、コミットスタックエントリ12A、コミットスタックエントリ12Bに登録された情報に基づいて、命令が完了可能かどうかの判断を行う。そして、命令完了と同時にその命令に関する情報をリセットする。
性能負荷バランス解析部9は命令完了順序制御部7と接続され、コミットスタックエントリ12A、コミットスタックエントリ12Bの内容を検知して、その検知の結果に基づいて、命令投入制御部4を制御する。
なお、本情報処理装置はSMT動作をするものとし、各スレッドはスーパースカラ、アウトオブオーダ方式で動作する。
(スレッドの命令パイプライン)
図2に示すように情報処理装置1は、命令パイプラインにおいて、Fetchステージ、Presentステージ、Decodeステージ、Dispatchステージ、Executeステージ、Update−Bufferステージ、Commitステージに分かれるものとする。
Fetchステージは、命令取得制御部3の制御に基づいてメモリ2から命令の実行をする演算部8に命令を実行させるために、命令バッファ10へ命令を読み出すステージである。
Presentステージは、命令投入制御部4の制御に基づき命令バッファ10から命令解析部5に対して命令を投入するステージである。
Decodeステージは、命令解析部5にて命令をデコードするステージである。
Dispatchステージは、命令発行制御部6に基づき演算部8などの命令実行資源に命令を発行するステージである。
Executeステージは、演算部8などの命令実行資源にて命令を実行するステージである。
Update−Bufferステージは、実行結果を待ち合わせるステージである。
Commitステージは、命令完了順序制御部7の制御に基づいて命令順序どおりに実行結果に応じたメモリ2や汎用レジスタ(図示しないが演算部8、データ転送バスと制御バスにより接続されている)の更新を行うステージである。
これらのステージのうち、Fetchステージ、Presentステージ、Decodeステージ、Commitステージは命令順序通りのインオーダで動作する。また、Dispatchステージ、Executeステージ、Update−Bufferステージは命令順序によらず、実行準備ができたものから処理するアウトオブオーダで動作する。
(性能負荷バランス解析部)
図3は性能負荷バランス解析部9の回路を示す図である。性能負荷バランス解析部9は、命令投入制御部4と命令完了順序制御部7に接続されている。
性能負荷バランス解析部9は、コミットスタックエントリごとに予め命令投入優先要求閾値を設定する。そして、性能負荷バランス解析部9は、コミットスタックエントリごとに生成されたエンプティフラグが発生している時間を計測し、コミットスタックエントリに対応する計測の結果である優先スレッド値と命令投入優先要求閾値を比較する。その後、優先スレッド値が命令投入優先要求閾値を越えた場合、命令処理バランスがエンプティフラグが発生しているスレッドと逆のスレッドに偏っている判断し、命令処理バランスの調停をするため、エンプティフラグが発生しているスレッドの命令投入優先要求フラグを生成する。
また、性能負荷バランス解析部9は、コミットスタックエントリごとに予め命令投入優先要求フラグを解除するための解除閾値を設定する。性能負荷バランス解析部9は、他の命令投入優先要求フラグが発生しているコミットスタックエントリごとに生成されたエンプティフラグが発生しているスレッドの時間を計測した第2の優先スレッド値と、優先スレッド値との差分である差分値を算出する。その後、差分値と解除閾値を比較して、差分値が解除閾値を越えた場合、命令処理バランスの偏りが解消されたと判断し、エンプティフラグが発生しているスレッドの命令投入優先要求フラグを解除する。
本実施例では、簡単のため、スレッド数を2とするSMTについて説明する。
あるスレッドのコミットスタックエントリに情報がひとつも登録されていないサイクルを、そのスレッドが命令処理を実行していない時間であるとみなし、片側のコミットスタックエントリのみが空であるという命令投入優先要求フラグ(BARANCE_PRIORTY_REQ_TH_0)を発生させる(負荷バランス解析要素と定義)。
性能負荷バランス解析部9は、カウンタ回路31、コンパレータ32(スレッド0用)、コンパレータ33(スレッド1用)、コンパレータ34(スレッド0用)、コンパレータ35(スレッド1用)、ラッチ回路36(スレッド0用)、ラッチ回路37(スレッド1用)から構成される。
カウンタ回路31は、スレッド0のコミットスタックエントリ12Aのみが空であるということを示すエンプティフラグを取得するため、命令完了順序制御部7と接続されている。また、カウンタ回路31はコンパレータ32、コンパレータ33、コンパレータ34、コンパレータ35の入力端子と接続されている。
また、カウンタ回路31は、命令完了順序制御部7のコミットスタックエントリ12Aから、スレッド0のみが空であるということを示すエンプティフラグ(CSE_EMPTY_TH_0_ONLY)、コミットスタックエントリ12Bからスレッド1のみが空であるということを示すエンプティフラグ(CSE_EMPTY_TH_1_ONLY)を取得し、これらのエンプティフラグが「high」のときにカウントするカウンタである。
ラッチ回路36のセット端子(SET)は、コンパレータ32の出力端子と接続される。ラッチ回路36のリセット端子(RESET)は、コンパレータ33の出力端子と接続される。ラッチ回路36の出力信号は命令投入制御部4に出力される。
ラッチ回路37のセット端子(SET)は、コンパレータ34の出力端子と接続される。ラッチ回路37のリセット端子(RESET)は、コンパレータ35の出力端子と接続される。ラッチ回路37の出力信号は命令投入制御部4に出力される。
本実施例では2SMTを想定しているため、2SMTに特化したカウンタの構成とすることで、面積軽減を考える。
カウンタ回路31は、片側のスレッドのコミットスタックエントリのみが空であるサイクルの差が判別できればよいため、CSE_EMPTY_TH_0_ONLYのレベルが「high」のときに−1を、CSE_EMPTY_TH_1_ONLYのレベルが「high」のときに+1を、加算するカウンタとして構成する。つまり、1つのカウンタによってどちらか一方のみの命令処理が実行されていることがわかる。
例えば、スレッド1側のコミットスタックエントリ12Bのみが空である状態が続いてスレッド0側の命令処理に偏っている場合は、CSE_EMPTY_TH_1_ONLYによってカウンタの値を加算して「+」の値で偏りの度合いを表し、CSE_EMPTY_TH_0_ONLYによって値を減算することで偏りの解消を表現している。逆にスレッド1側に偏っている場合は「−」の値で偏りを表す。
スレッド1側ではコンパレータ34には「+」の命令投入優先要求閾値(+A)、スレッド0側ではコンパレータ32には「−」の命令投入優先要求閾値(−A)を設定する。
カウンタ回路31のカウンタの値(差分値)が「−A」より小さくなった場合はスレッド1への偏りが大きいと判断し、スレッド0の命令投入優先要求(BALANCE_PRIORITY_REQ_TH_0)を行う。
ラッチ回路36のセット端子を「high」にセットして命令投入制御部4へ出力する。
逆にカウンタ回路31のカウンタの値が「+A」を超えた場合はスレッド0への偏りが大きいと判断し、スレッド1の命令投入優先要求(BALANCE_PRIORITY_REQ_TH_1)を「high」にセットして命令投入制御部4へ出力する。
また、偏りの解消に関しては別途閾値「+B」/「−B」である解除閾値を設定し、カウンタ回路31の値(差分値)が「+B」より小さくなったらスレッド1側の偏りが解消されたと判断し、BALANCE_PRIORITY_REQ_TH_1を「low」にし、偏りが大きい間のみBALANCE_PRIORITY_REQ_TH_1が「high」となるように制御する。
また、カウンタ回路31の値(差分値)が「−B」より大きくなったらスレッド0側の偏りが解消されたと判断し、BALANCE_PRIORITY_REQ_TH_0を「low」にし、偏りが大きい間のみBALANCE_PRIORITY_REQ_TH_0が「high」となるように制御する。
ここで、BALANCE_PRIORITY_REQ_TH_0とBALANCE_PRIORITY_REQ_TH_1とは共通するカウンタの値がそれぞれ「−A」以下、「+A」以上のときにセットされるため、同時に「high」になることはない。
また、本実施例では上記のようなカウンタ回路31を用いた場合について説明したが、スレッドごとにカウンタを用意してその値を比較する方式であってもよい。
(命令投入制御部)
図4は命令投入制御部4の回路を示す図である。命令投入制御部4は、あるタイミングごとにスレッドを切り替えながら命令解析部5へ命令を出力する。全てのスレッドが命令投入可能なタイミングなら毎サイクルスレッドを切り替え、ひとつのスレッドのみが命令投入可能なタイミングなら命令投入可能なスレッドを選択して命令解析部5へ命令を出力することで、ロスの少ない命令投入動作ができる。
命令投入制御部4のスレッド0用の回路は、AND回路41(3入力論理積回路)、AND回路42(2入力論理積回路)、AND回路43(2入力論理積回路)、AND回路44(3入力論理積回路)、AND回路45(2入力論理積回路)、OR回路46(3入力論理和回路)、OR回路47(3入力論理和回路)、ラッチ回路48から構成される。
命令投入制御部4のスレッド1用の回路は、AND回路44(3入力論理積回路)、AND回路410(2入力論理積回路)、AND回路411(2入力論理積回路)、AND回路41(3入力論理積回路)、AND回路413(2入力論理積回路)、OR回路414(3入力論理和回路)、OR回路415(3入力論理和回路)、ラッチ回路416から構成される。
スレッド0用の回路について説明する。
AND回路41のa入力端子は、スレッド命令投入優先要求が発生した場合にBALANCE_PIRORITY_REQ_TH_0を取得するために、性能負荷バランス解析部9と接続されている。AND回路41のb入力端子は、命令バッファ10から命令解析部5に対してスレッド0側に命令の投入が可能であることを示す命令投入可能要求(ENABLE_PRESENT_OPERATION_TH_0)を取得する。また、AND回路41のb入力端子は、AND回路42のa入力端子、AND回路43のa入力端子、OR回路47のa入力端子(反転入力)と接続されている。
AND回路41のc入力端子は、命令継続時間監視部11と接続され、後述するハング警告(WARNING_TO_HUNG_OPERATION)を取得する。また、AND回路41のc入力端子(反転入力)は、AND回路44のc入力端子(反転入力)に接続されている。AND回路41の出力端子(FORCE_THREAD_TO_0)は、OR回路46のa入力端子に接続される。
AND回路42のb入力端子には、後述する命令投入制御部4のスレッド1用のPRESENT_OPERATION_TH_1)が入力される。AND回路42の出力端子は、OR回路46のb入力端子に接続される。
AND回路43のb入力端子(反転入力)には、命令バッファ10から命令解析部5に対してスレッド0側に命令の投入が可能であることを示す命令投入可能要求(ENABLE_PRESENT_OPERATION_TH_1)が入力する。また、AND回路43のb入力端子は、AND回路44のb入力端子、AND回路45のa入力端子と接続されている。AND回路43の出力端子はOR回路46のc入力端子に接続される。
AND回路44のa入力端子は、BALANCE_PIRORITY_REQ_TH_1を取得するために性能負荷バランス解析部9と接続されている。AND回路44の出力端子(FORCE_THREAD_TO_1)は、OR回路47のb入力端子に接続される。AND回路45の出力端子は、OR回路47のc入力端子に接続されている。
OR回路46の出力端子は、ラッチ回路48のセット端子(SET)と接続され、OR回路47の出力は、ラッチ回路48のリセット端子(RST)と接続される。
ラッチ回路48の出力端子(PRESENT_OPERATION_TH_0)は、AND回路45のb入力端子と接続されている。
スレッド1用の回路について説明する。
OR回路414のa入力端子は、スレッド0用の回路で前述したAND回路44の出力FORCE_THREAD_TO_1が接続される。
また、OR回路415のb入力端子には、スレッド0用の回路で前述したAND回路41の出力FORCE_THREAD_TO_0が接続される。
AND回路410のb入力端子には、後述する命令投入制御部4のスレッド0用のPRESENT_OPERATION_TH_0)が入力する。AND回路410の出力端子は、OR回路414のb入力端子に接続される。
AND回路411のb入力端子(反転入力)には、命令バッファ10から命令解析部5に対してスレッド0側に命令の投入が可能であることを示す命令投入可能要求(ENABLE_PRESENT_OPERATION_TH_0)が入力する。また、AND回路411のb入力端子は、AND回路413のa入力端子と接続されている。AND回路411の出力端子は、OR回路414のc入力端子に接続される。
AND回路413の出力端子は、OR回路415のc入力端子に接続されている。
OR回路414の出力端子は、ラッチ回路416のセット端子(SET)と接続され、OR回路415の出力は、ラッチ回路416のリセット端子(RST)と接続される。
ラッチ回路416の出力端子(PRESENT_OPERATION_TH_1)は、AND回路413のb入力端子と接続されている。
上記構成の命令投入制御部4は、性能負荷バランスに偏りが生じた場合には、BALANCE_PIRORITY_REQ_TH_0が「high」のときにスレッド0側を優先し、BALANCE_PRIORITY_REQ_TH_1が「high」のときにスレッド1側を優先し、命令解析部5に出力する命令のスレッドを選択することにより、性能負荷バランスの調停を実現する。
しかし、命令投入を優先させたスレッドがなんらかの原因で停滞している場合は、命令を投入しても、それ以降の処理が実行できないため、最悪両側のスレッドの処理が止まってしまう危険性も有している。そこで、優先したいスレッドが命令投入可能なタイミング(ENABLE_PRESENT_OPERATION_TH_1)のときのみに優先したい側にスレッドの選択を固定することで、逆スレッドの命令投入の抑制によるハング(WARNING_TO_HUNG_OPERATION)の危険性を減少させることが可能である。
つまり、AND回路41において、スレッド0側のスレッド命令投入優先要求が発生した場合、BALANCE_PIRORITY_REQ_TH_0が「high」になり、ENABLE_PRESENT_OPERATION_TH_0が「high」で命令投入可能なタイミングで、WARNING_TO_HUNG_OPERATIONが「low」でハングが発生していなければ、出力をFORCE_THREAD_TO_0を「high」にする。このとき、OR回路46の他の入力端子のレベルにかかわらずラッチ回路48には「high」がセットされる。
AND回路42は、スレッド0とスレッド1が命令投入可能であれば2サイクルに1回の間隔でラッチ回路48に「high」をセットする。つまり、前サイクルでスレッド1側で命令を投入していればPRESENT_OPERATION_TH_1が「high」になり、ENABLE_PRESENT_OPERATION_TH_0が「high」であるので、AND回路42の出力は「high」になる。
AND回路43は、スレッド0だけが命令投入可能であれば、ラッチ回路48に「high」をセットする。ENABLE_PRESENT_OPERATION_TH_0が「high」で、ENABLE_PRESENT_OPERATION_TH_1が「low」であるので、AND回路43の出力は「high」になる。
上記、AND回路41、AND回路42とAND回路43によって決まる条件により、ラッチ回路48に「high」がセットされる。
AND回路44の出力は、スレッド1側が強制されているときに「high」になる。つまり、スレッド0側のスレッド命令投入優先要求が発生した場合、BALANCE_PIRORITY_REQ_TH_1が「high」になる。また、ENABLE_PRESENT_OPERATION_TH_1が「high」で命令投入可能なタイミングで、WARNING_TO_HUNG_OPERATIONが「low」でハングが発生していなければ、AND回路44はその出力FORCE_THREAD_TO_1を「high」にする。このとき、OR回路47の他の入力端子のレベルにかかわらず、ラッチ回路48は「low」にリセットされる。
AND回路45は、スレッド0とスレッド1が命令投入可能であれば、2サイクルに1回の間隔でラッチ回路48を「low」にリセットする。つまり、前サイクルでスレッド0側で命令を投入していればPRESENT_OPERATION_TH_0が「high」になり、ENABLE_PRESENT_OPERATION_TH_1が「high」であるので、AND回路45の出力は「high」になる。
上記、AND回路44、AND回路45、およびENABLE_PRESENT_OPERATION_TH_0によって決まる条件により、ラッチ回路48は「low」にリセットされる。
スレッド1用の回路についても、スレッド0側同様に制御をする。
つまり、AND回路44において、スレッド1側のスレッド命令投入優先要求が発生して、FORCE_THREAD_TO_1が「high」になったとき、OR回路414の他の入力端子のレベルにかかわらずラッチ回路416には「high」がセットされる。
AND回路410は、スレッド0とスレッド1が命令投入可能であれば、2サイクルに一回の間隔でラッチ回路416に「high」をセットする。つまり、前サイクルでスレッド0側で命令を投入していればPRESENT_OPERATION_TH_0が「high」になり、ENABLE_PRESENT_OPERATION_TH_1が「high」であるので、AND回路410の出力は「high」になる。
AND回路411は、スレッド0だけが命令投入可能であれば、ラッチ回路416に「high」をセットする。ENABLE_PRESENT_OPERATION_TH_1が「high」で、ENABLE_PRESENT_OPERATION_TH_0が「low」であるので、AND回路411の出力は「high」になる。
上記、AND回路44、AND回路410とAND回路411によって決まる条件により、ラッチ回路416に「high」がセットされる。
AND回路41において、スレッド0側のスレッド命令投入優先要求が発生して、FORCE_THREAD_TO_0が「high」になったとき、OR回路415の他の入力短資のレベルにかかわらずラッチ回路416は「low」にリセットされる。
AND回路413は、スレッド0とスレッド1が命令投入可能であれば、2サイクルに1回の間隔でラッチ回路416を「low」にリセットする。前サイクルでスレッド1側で命令を投入していればPRESENT_OPERATION_TH_1が「high」になり、ENABLE_PRESENT_OPERATION_TH_0が「high」であるので、AND回路413の出力は「high」になる。
上記、AND回路41、AND回路413、およびENABLE_PRESENT_OPERATION_TH_0によって決まる条件により、ラッチ回路416は「low」にリセットされる。
(命令継続時間監視部)
さらに、抑制された側のスレッドの命令処理が一定時間停滞した場合には命令投入のスレッドの固定を解除することにより、強制的にスレッドを固定することによるハングの危険の回避することができる。
命令継続時間監視部11は、ハングの監視を行う回路である。命令継続時間監視部11は、毎サイクルカウントアップして命令の処理が完了したら値をリセットするカウンタをスレッドごとに用意する。カウンタは命令が完了しない間カウントし続けるので、Commitまでのいずれかのステージに、そのスレッドの命令が停滞している時間を示す。本例では、命令継続時間監視部11はカウンタの閾値「C」を設定し、いずれかのスレッドでカウンタの値が閾値「C」を超えたら、ハング警告(WARNING_TO_HUNG_OPERATION)を命令投入制御部4へ出力して性能負荷バランス調停の停止を要求する。
本実施例では2SMTの場合について記述したが、スレッドが増加した場合についても、各スレッドのコミットスタックエントリが空となっているサイクルをカウントし、あるスレッドのカウンタの値を他のスレッドと比較した差が大きくなったときに、そのスレッドの命令投入を優先する構成を実現できる。また、このように構成することにより性能負荷バランスの調停が可能である。
図5は命令継続時間監視部11の回路を示す図である。
命令継続時間監視部11は、カウンタ回路51、カウンタ回路52、コンパレータ53、コンパレータ54、OR回路55(2入力論理和回路)から構成されている。
カウンタ回路51は、入力端子(+)からクロック(CLK)を入力してカウントをする。また、命令完了順序制御部7から出力されるスレッド0側の命令完了通知であるCOMMIT_OPERATION_TH_0をリセット端子(RST)で受信する。
カウンタ回路52は、入力端子(+)からクロック(CLK)を入力してカウントをする。また、命令完了順序制御部7から出力されるスレッド1側の命令完了通知であるCOMMIT_OPERATION_TH_1をリセット端子(RST)で受信する。
コンパレータ53は、カウンタの閾値として予め「C」を設定し、カウンタ回路51のカウント値が「C」を超えたら出力端子から「high」を出力する。
コンパレータ54は、カウンタの閾値として予め「C」を設定し、カウンタ回路51のカウント値が「C」を超えたら出力端子から「high」を出力する。
OR回路55(2入力論理和回路)は、コンパレータ53とコンパレータ54の出力を、それぞれa入力端子とb入力端子に入力し、ハング警告(WARNING_TO_HUNG_OPERATION)を出力する。
(情報処理装置の動作)
図6は本実施例による情報処理装置の動作を示すタイムチャートである。上記説明した回路の動作をタイムチャートにより説明する。
縦軸に(1)CSE_EMPTY_TH_0_ONLY、(2)CSE_EMPTY_TH_1_ONLY、(3)BALANCE_COUNTER、(4)BALANCE_PRIORITY_REQ_TH_0、(5)BALANCE_PRIORITY_REQ_TH_1、(6)HUNG_COUNTER、(7)WARNING_TO_HUNG_OPERATION、(8)FORCE_THREAD_TO_0、(9)FORCE_THREAD_TO_1を示し、横軸に時間軸(クロック)を示す。
期間1から期間2では、コミットスタックエントリ12Aのみが空であることを示すエンプティフラグである(1)CSE_EMPTY_TH_0_ONLYが「low」から「high」に変化する。
性能負荷バランス解析部9のカウンタ回路31に入力された(1)CSE_EMPTY_TH_0_ONLYが「high」の間、カウンタ回路31ではカウントがされ、カウント値(3)BALANCE_COUNTERがカウンタ回路31の出力端子から出力される。
期間3からは、カウンタ回路31により「−1」の加算がクロックごとに行われる。カウント値が加算され、予め設定した値「−A」になる期間5まで加算がされる。
期間6では、コンパレータ32の出力が「high」に変化し、ラッチ回路36に「high」がセットされる。その結果、ラッチ回路36の出力(4)BALANCE_PRIORITY_REQ_TH_0が「high」に変化する。このとき、命令投入制御部4にBALANCE_PRIORITY_REQ_TH_0が入力され、AND回路41のa端子に入力され、命令投入可能要求であるENABLE_PRESENT_OPERATION_TH_0が「high」であるならば、(7)WARNING_TO_HUNG_OPERATIONが「low」であるので、AND回路41の出力(8)FORCE_THREAD_TO_0は「high」になる。ラッチ回路48に「high」がセットされる。
期間7では、さらにスレッド0側の加算が進み「−X」になり、期間8ではコミットスタックエントリ12Aが空でなくなるためエンプティフラグ(1)CSE_EMPTY_TH_0_ONLYが「high」から「low」に変化する。CSE_EMPTY_TH_0_ONLYおよびCSE_EMPTY_TH_1_ONLYが共に「low」であるため期間9まではカウンタ回路31の出力としてカウント値は変化しない。
期間10では、今度はコミットスタックエントリ12Bのみが空であることを示すエンプティフラグである(2)CSE_EMPTY_TH_1_ONLYが「low」から「high」に変化する。
期間11では、「−X」に「1」が加算され、その後クロックごとにカウント値が加算され、予め設定した値「−B」になる期間16まで加算がされる。
ここで、期間14で、(6)HUNG_COUNTERの値が予め設定した閾値「C」を超えて(7)WARNING_TO_HUNG_OPERATIONが「high」となると、AND回路41のc入力端子に「high」が入力されAND回路41の出力FORCE_THREAD_TO_0が「low」になる。このとき、スレッド0の命令投入の強制が解除される。
期間16では、カウンタ回路31のカウント値が「−B」より大きくなり、これによりスレッド間の命令処理バランスの偏りが解消されたと判断され、コンパレータ33の出力が「high」を出力し、ラッチ回路36がリセットされてBALANCE_PRIORITY_REQ_TH_0が「low」になる。
期間17から期間18では、そのままCSE_EMPTY_TH_1_ONLYが「high」のままクロックが進み、予め設定した値「+A」になるまで加算がされると、今度は逆に(5)BALANCE_PRIORITY_REQ_TH_1が「high」になる。このときは、(7)WARNING_TO_HUNG_OPERATIONが「high」のままであるので命令投入するスレッドを強制選択はキャンセルされる。
(本実施例の動作フロー)
図7に本実施例のスレッド0側の動作についてフロー図を用いて説明する。
ステップS71〜ステップS79(性能負荷バランス解析ステップ)について説明する。
ステップS71では、スレッド0側のコミットスタックエントリが空であるかを判定する。スレッド0側のコミットスタックエントリが空であればステップS72に移行し、空でなければステップS76に移行する。
ステップS72では、スレッド1側のコミットスタックエントリが空であるかを判定する。スレッド1側のコミットスタックエントリが空であればステップS710に移行し、空でなければステップS73に移行する。スレッド0側のコミットスタックエントリ12Aから出力されるCSE_EMPTY_TH_0_ONLYが「high」である場合ステップS73に移行する。
ステップS73ではバランス監視をするカウンタに、CSE_EMPTY_TH_0_ONLYが「high」である間、クロックごとに「−1」を加算する。つまり、図3に示すカウンタ回路31の入力端子(−1)に「high」が入力されている間、クロック毎に「−1」を加算する。
ステップS74では、バランス監視をするカウンタのカウント値が予め設定した命令投入優先要求閾値「−A」より大きいかを判定する。「−A」より大きければステップS710に移行する。「−A」以下であればステップS75に移行する。
カウンタ回路31の出力BALANCE_COUNTERの値を、コンパレータ32に設定した命令投入優先要求閾値と比較して出力する。
ステップS75では、BALANCE_PRIORITY_REQ_TH_0を「high」にセットする。このとき、ラッチ回路36のRST入力端子は「low」である。
ステップS76では、スレッド1側のコミットスタックエントリが空であるかを判定する。スレッド1側のコミットスタックエントリが空であればステップS710に移行し、空でなければステップS77に移行する。スレッド1側のコミットスタックエントリ12Aから出力されるCSE_EMPTY_TH_1_ONLYが「high」である場合ステップS77に移行する。
ステップS77では、バランス監視をするカウンタに「+1」を加算する。CSE_EMPTY_TH_0_ONLYが「low」になり、CSE_EMPTY_TH_1_ONLYが「high」である間、クロックごとに「+1」を加算する。つまり、図3に示すカウンタ回路31の入力端子(+1)に「high」が入力されている間クロックごとに「+1」を加算する。
ステップS78では、バランス監視カウンタのカウント値が予め設定した解除閾値「−B」より小さいかを判定する。「−B」より小さければステップS710に移行する。「−B」以上であればステップS79に移行する。
カウンタ回路31の出力BALANCE_COUNTERの値を、コンパレータ33に設定した解除閾値と比較し、解除閾値をカウンタ値(差分値)が越えていたら「high」を出力する。
ステップS710、ステップS711、ステップS713〜ステップS718(命令取得制御ステップ)とステップS712(命令継続時間監視ステップ)について説明する。
ステップS710では、スレッド0側の命令が投入可能であるか判定する。投入可能であればステップS711に移行する。投入できない状態であればステップS717に移行する。命令取得制御部3からスレッド0側の命令投入可能であることを示すENABL_PRESENT_OPERATION_TH_0が「high」であるかを判定する。
ステップS711では、BALANCE_PRIORITY_REQ_TH_0が「high」であるかを判定する。「high」であればステップS712に移行する。「low」であればステップS713に移行する。
ステップS712では、両スレッドの命令継続時間が予め設定したハング閾値「C」より小さければステップS716に移行する。ハング閾値「C」より大きければステップS713に移行する。つまり、WARNING_TO_HUNG_OPERATIONが「low」であればスレッド0側の命令を投入可能である。
ステップS713では、前のサイクルでスレッド1の命令を投入しているかを判断する。投入していればステップS716に移行する。投入されていなければステップS714に移行する。PRESENT_OPERATION_TH_1が「high」であるかを判定する。
ステップS714とステップS717では、スレッド1の命令が投入可能かを判定する。投入可能であればステップS715に移行する。ENABLE_PRESENT_OPERATION_TH_1が「high」であるかを判定する。
ステップS715ではスレッド1の命令を投入する。ステップS716ではスレッド0の命令を投入する。ステップS718では命令を投入しない。
スレッド1側の動作についてもスレッド0側と同様に動作する。ステップS71´〜718´はステップS71〜718に対応している。
ステップS71´では、スレッド1側のコミットスタックエントリが空であるかを判定する。スレッド1側のコミットスタックエントリが空であればステップS72´に移行し、空でなければステップS76´に移行する。
ステップS72´では、スレッド0側のコミットスタックエントリが空であるかを判定する。スレッド0側のコミットスタックエントリが空であればステップS710´に移行し、空でなければステップS73´に移行する。スレッド1側のコミットスタックエントリ12Bから出力されるCSE_EMPTY_TH_1_ONLYが「high」である場合ステップS73´に移行する。
ステップS73´では、バランス監視をするカウンタにCSE_EMPTY_TH_1_ONLYが「high」である間、クロックごとに「+1」を加算する。つまり、図3に示すカウンタ回路31の入力端子(+1)に「high」が入力されている間クロック毎に「+1」を加算する。
ステップS74´では、バランス監視をするカウンタのカウント値が予め設定した命令投入優先要求閾値「+A」より小さいかを判定する。「+A」より小さければステップS710´に移行する。「+A」以下であればステップS75´に移行する。
カウンタ回路31の出力BALANCE_COUNTERの値を、コンパレータ34に設定した命令投入優先要求閾値と比較して出力する。
ステップS75´では、BALANCE_PRIORITY_REQ_TH_1を「high」にセットする。このとき、ラッチ回路37のRST入力端子は「low」である。
ステップS76´では、スレッド0側のコミットスタックエントリが空であるかを判定する。スレッド0側のコミットスタックエントリが空であればステップS710´に移行し、空でなければステップS77´に移行する。スレッド0側のコミットスタックエントリ12Bから出力されるCSE_EMPTY_TH_0_ONLYが「high」である場合ステップS77´に移行する。
ステップS77´ではバランス監視をするカウンタに「−1」を加算する。CSE_EMPTY_TH_1_ONLYが「low」になり、CSE_EMPTY_TH_0_ONLYが「high」である間、クロックごとに「−1」を加算する。つまり、図3に示すカウンタ回路31の入力端子(−1)に「high」が入力されている間クロックごとに「−1」を加算する。
ステップS78´では、バランス監視カウンタのカウント値が予め設定した解除閾解除値「+B」より大きいかを判定する。「+B」より大きければステップS710´に移行する。「+B」以下であればステップS79´に移行する。
カウンタ回路31の出力BALANCE_COUNTERの値を、コンパレータ35に設定した閾値と比較し、解除閾値をカウンタ値(差分値)が越えていたら「high」を出力する。
ステップS710´では、スレッド1側の命令が投入可能であるか判定する。投入可能であればステップS711´に移行する。投入できない状態であればステップS717´に移行する。命令取得制御部3からスレッド1側の命令投入可能であることを示すENABL_PRESENT_OPERATION_TH_1が「high」であるかを判定する。
ステップS711´では、BALANCE_PRIORITY_REQ_TH_1が「high」であるかを判定する。「high」であればステップS712´に移行する。「low」であればステップS713´に移行する。
ステップS712´では、両スレッドの命令継続時間が予め設定したハング閾値「C」より小さければステップS716´に移行する。ハング閾値「C」より大きければステップS713´に移行する。つまり、WARNING_TO_HUNG_OPERATIONが「low」であればスレッド1側の命令を投入可能である。
ステップS713´では、前のサイクルでスレッド0の命令を投入しているかを判断する。投入していればステップS716´に移行する。投入されていなければステップS714´に移行する。PRESENT_OPERATION_TH_0が「high」であるかを判定する。
ステップS714´とステップS717´では、スレッド0の命令が投入可能かを判定する。投入可能であればステップS715´に移行する。ENABL_PRESENT_OPERATION_TH_1が「high」であるかを判定する。
ステップS715´ではスレッド0の命令を投入する。ステップS716´ではスレッド1の命令を投入する。ステップS718´では命令を投入しない。
なお、本発明は上記実施の形態に限定されるものでなく、本発明の要旨を逸脱しない範囲内で種々の改良、変更が可能である。

Claims (10)

  1. 同時マルチスレッディングを実行可能な情報処理装置であって、
    メモリから命令を取得し、前記命令に基づいた演算を実行する演算部に前記命令を投入する制御を、第1のスレッドと第2のスレッド間で共有する命令投入制御部と、
    前記第1のスレッドの命令処理を実行中であるか否かを示す情報を保持する第1のコミットスタックエントリと、
    前記第2のスレッドの命令処理を実行中であるか否かを示す情報を保持する第2のコミットスタックエントリと、
    前記命令投入制御部から投入された前記命令の順番に従い、前記演算部により演算された演算結果に応じて、前記メモリと汎用レジスタの更新を行う命令完了順序制御部と、
    前記第1及び第2のコミットスタックエントリに登録された前記情報を検知し、前記第2のスレッドの命令処理を実行中でない間に前記第1のスレッドの命令処理を実行中であることを前記情報が示している時間に基づく値が命令投入優先要求閾値を越えた場合、前記第1のスレッドの命令投入から前記第2のスレッドの命令投入に切り替えるように前記命令投入制御部を制御する性能負荷バランス解析部と、
    を具備することを特徴とする情報処理装置。
  2. 前記命令完了順序制御部は、
    前記第1のコミットスタックエントリのみが空であることを示す第1のエンプティフラグと、前記第2のコミットスタックエントリのみが空であることを示す第2のエンプティフラグとを生成し、
    前記性能負荷バランス解析部は、
    前記第1のエンプティフラグが発生している第1の時間と、前記第2のエンプティフラグが発生している第2の時間との差分に基づく差分値を生成し、
    前記差分値と前記命令投入優先要求閾値を比較して、前記差分値が前記命令投入優先要求閾値を越えた場合、前記第2のスレッドの命令投入を優先させる命令投入優先要求フラグを生成し、
    前記命令投入制御部は、
    前記命令投入優先要求フラグに基づいて、前記第1のスレッドの命令投入から前記第2のスレッドの命令投入に切り替えることを特徴とする請求項1に記載の情報処理装置。
  3. 前記性能負荷バランス解析部は、
    記差分値と解除閾値を比較して、前記差分値が前記解除閾値より小さくなった場合、前記命令投入優先要求フラグを解除することを特徴とする請求項に記載の情報処理装置。
  4. 前記命令完了順序制御部は、
    前記第1のスレッドの命令投入から前記第2のスレッドの命令投入に切り替えられた後、前記第1のスレッドの命令処理が一定時間停滞した場合、前記第2のスレッドの命令投入を優先する制御の停止を前記命令投入制御部に要求する命令継続時間監視部を具備することを特徴とする請求項1乃至3のいずれか1項に記載の情報処理装置。
  5. 前記命令投入制御部は、
    前記第1及び第2のスレッド前記命令が投入可能なタイミングであるときはサイクルごとに前記第1及び第2のスレッドの命令投入を切り替え、前記第1及び第2のスレッドのうち一方のみ前記命令が投入可能なタイミングであるときは前記命令が投入可能なスレッドの命令投入を選択することを特徴とする請求項1乃至4のいずれか1項に記載の情報処理装置。
  6. 第1のスレッドと第2のスレッド間の負荷調停制御方法であって、
    メモリから命令を取得し、
    前記第1及び第2のスレッド前記命令に基づいた演算を実行するために、前記命令の投入タイミングを制御し、
    前記第1のスレッドの命令処理を実行中であるか否かを示す情報を保持する第1のコミットスタックエントリと、前記第2のスレッドの命令処理を実行中であるか否かを示す情報を保持する第2のコミットスタックエントリとに登録された前記情報を検知し、
    前記第2のスレッドの命令処理を実行中でない間に前記第1のスレッドの命令処理を実行中であることを前記情報が示している時間に基づく値が命令投入優先要求閾値を越えた場合、前記第1のスレッドの命令投入から前記第2のスレッドの命令投入に切り替えるように前記命令の投入を制御することを特徴とする負荷調停制御方法。
  7. 前記第1のコミットスタックエントリのみが空であることを示す第1のエンプティフラグと、前記第2のコミットスタックエントリのみが空であることを示す第2のエンプティフラグとを生成し、
    前記第1のエンプティフラグが発生している第1の時間と、前記第2のエンプティフラグが発生している第2の時間との差分に基づく差分値を生成し、
    前記差分値と前記命令投入優先要求閾値を比較し、
    前記差分値が前記命令投入優先要求閾値を越えた場合、前記第2のスレッドの命令投入を優先させる命令投入優先要求フラグを生成し、
    前記命令投入優先要求フラグに基づいて、前記第1のスレッドの命令投入から前記第2のスレッドの命令投入に切り替えることを特徴とする請求項に記載の負荷調停制御方法。
  8. 記差分値と解除閾値を比較し、
    前記差分値が前記解除閾値より小さくなった場合、前記命令投入優先要求フラグを解除することを特徴とする請求項に記載の負荷調停制御方法。
  9. 前記第1のスレッドの命令投入から前記第2のスレッドの命令投入に切り替えられた後、前記第1のスレッドの命令処理が一定時間停滞した場合、前記第2のスレッドの命令投入を優先する制御を停止することを特徴とする請求項6乃至8のいずれか1項に記載の負荷調停制御方法。
  10. 前記第1及び第2のスレッド前記命令が投入可能なタイミングであるときはサイクルごとに前記第1及び第2のスレッドの命令投入を切り替え、
    前記第1及び第2のスレッドのうち一方のみ前記命令が投入可能なタイミングであるときは前記命令が投入可能なスレッドの命令投入を選択することを特徴とする請求項6乃至9のいずれか1項に記載の負荷調停制御方法。
JP2009520148A 2007-06-20 2007-06-20 情報処理装置と負荷調停制御方法 Expired - Fee Related JP5088371B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2007/000665 WO2008155807A1 (ja) 2007-06-20 2007-06-20 情報処理装置と負荷調停制御方法

Publications (2)

Publication Number Publication Date
JPWO2008155807A1 JPWO2008155807A1 (ja) 2010-08-26
JP5088371B2 true JP5088371B2 (ja) 2012-12-05

Family

ID=40155972

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009520148A Expired - Fee Related JP5088371B2 (ja) 2007-06-20 2007-06-20 情報処理装置と負荷調停制御方法

Country Status (4)

Country Link
US (1) US8561079B2 (ja)
EP (1) EP2159692A4 (ja)
JP (1) JP5088371B2 (ja)
WO (1) WO2008155807A1 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8042115B2 (en) * 2007-08-16 2011-10-18 International Business Machines Corporation Method and system for balancing component load in an input/output stack of an operating system
US20120017214A1 (en) * 2010-07-16 2012-01-19 Qualcomm Incorporated System and method to allocate portions of a shared stack
US10318356B2 (en) * 2016-03-31 2019-06-11 International Business Machines Corporation Operation of a multi-slice processor implementing a hardware level transfer of an execution thread
CN107357222A (zh) * 2017-09-01 2017-11-17 娄底市简思工控有限公司 嵌入式控制装置及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000020306A (ja) * 1998-07-07 2000-01-21 Fujitsu Ltd 情報処理装置
JP3714598B2 (ja) * 1997-10-23 2005-11-09 インターナショナル・ビジネス・マシーンズ・コーポレーション マルチスレッド式プロセッサでのスレッド優先順位の変更
JP2006343872A (ja) * 2005-06-07 2006-12-21 Keio Gijuku マルチスレッド中央演算装置および同時マルチスレッディング制御方法

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2882475B2 (ja) * 1996-07-12 1999-04-12 日本電気株式会社 スレッド実行方法
US6185672B1 (en) * 1999-02-19 2001-02-06 Advanced Micro Devices, Inc. Method and apparatus for instruction queue compression
US6535905B1 (en) * 1999-04-29 2003-03-18 Intel Corporation Method and apparatus for thread switching within a multithreaded processor
US6357016B1 (en) * 1999-12-09 2002-03-12 Intel Corporation Method and apparatus for disabling a clock signal within a multithreaded processor
US7000233B2 (en) * 2003-04-21 2006-02-14 International Business Machines Corporation Simultaneous multithread processor with result data delay path to adjust pipeline length for input to respective thread
US20040216103A1 (en) * 2003-04-24 2004-10-28 International Business Machines Corporation Mechanism for detecting and handling a starvation of a thread in a multithreading processor environment
US7469407B2 (en) * 2003-04-24 2008-12-23 International Business Machines Corporation Method for resource balancing using dispatch flush in a simultaneous multithread processor
US7363625B2 (en) * 2003-04-24 2008-04-22 International Business Machines Corporation Method for changing a thread priority in a simultaneous multithread processor
JP2005284749A (ja) * 2004-03-30 2005-10-13 Kyushu Univ 並列処理コンピュータ
JP4327008B2 (ja) * 2004-04-21 2009-09-09 富士通株式会社 演算処理装置及び演算処理装置の制御方法
JP4956891B2 (ja) * 2004-07-26 2012-06-20 富士通株式会社 演算処理装置,情報処理装置および演算処理装置の制御方法
US20060212853A1 (en) * 2005-03-18 2006-09-21 Marvell World Trade Ltd. Real-time control apparatus having a multi-thread processor
US8230423B2 (en) * 2005-04-07 2012-07-24 International Business Machines Corporation Multithreaded processor architecture with operational latency hiding
US8261046B2 (en) * 2006-10-27 2012-09-04 Intel Corporation Access of register files of other threads using synchronization
US8521993B2 (en) * 2007-04-09 2013-08-27 Intel Corporation Providing thread fairness by biasing selection away from a stalling thread using a stall-cycle counter in a hyper-threaded microprocessor
US7707390B2 (en) * 2007-04-25 2010-04-27 Arm Limited Instruction issue control within a multi-threaded in-order superscalar processor
US8219996B1 (en) * 2007-05-09 2012-07-10 Hewlett-Packard Development Company, L.P. Computer processor with fairness monitor

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3714598B2 (ja) * 1997-10-23 2005-11-09 インターナショナル・ビジネス・マシーンズ・コーポレーション マルチスレッド式プロセッサでのスレッド優先順位の変更
JP2000020306A (ja) * 1998-07-07 2000-01-21 Fujitsu Ltd 情報処理装置
JP2006343872A (ja) * 2005-06-07 2006-12-21 Keio Gijuku マルチスレッド中央演算装置および同時マルチスレッディング制御方法

Also Published As

Publication number Publication date
JPWO2008155807A1 (ja) 2010-08-26
EP2159692A1 (en) 2010-03-03
US20100095304A1 (en) 2010-04-15
EP2159692A4 (en) 2010-09-15
US8561079B2 (en) 2013-10-15
WO2008155807A1 (ja) 2008-12-24

Similar Documents

Publication Publication Date Title
US6651158B2 (en) Determination of approaching instruction starvation of threads based on a plurality of conditions
JP4610593B2 (ja) デュアルスレッドプロセッサ
US6671795B1 (en) Method and apparatus for pausing execution in a processor or the like
US9361111B2 (en) Tracking speculative execution of instructions for a register renaming data store
US8365179B2 (en) Multi-thread processor and its hardware thread scheduling method
US9135015B1 (en) Run-time code parallelization with monitoring of repetitive instruction sequences during branch mis-prediction
US10078518B2 (en) Intelligent context management
EP2887209A2 (en) Functional unit for supporting multithreading, processor comprising the same, and operating method thereof
JP5088371B2 (ja) 情報処理装置と負荷調停制御方法
JP2010527071A (ja) マルチスレッド型プロセッサのためのスレッドデエンファシス命令
JP2012234519A (ja) マルチスレッド処理のためのスレッド選択
US20100095305A1 (en) Simultaneous multithread instruction completion controller
US20140244985A1 (en) Intelligent context management
US8001362B2 (en) Processing unit
JP2008204011A (ja) マルチスレッドシステム、スレッド動作異常検知方法
JP6477248B2 (ja) 演算処理装置及び演算処理装置の処理方法
US11379237B2 (en) Variable-length-instruction processing modes
US8468405B2 (en) Integrated circuit testing
US7913067B2 (en) Method and system for overlapping execution of instructions through non-uniform execution pipelines in an in-order processor
JP2010165209A (ja) マルチスレッドプロセッサ装置
JP2002073581A (ja) マルチプロセッサシステムにおけるコプロセッサのスケジュール方法
JP2014211890A (ja) マルチスレッドプロセッサ及びその割り込み処理方法

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120424

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120625

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

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120827

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

Free format text: PAYMENT UNTIL: 20150921

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees