(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-06-08
(45)【発行日】2023-06-16
(54)【発明の名称】スケジューラキュー割り当てバーストモード
(51)【国際特許分類】
G06F 9/38 20180101AFI20230609BHJP
G06F 9/318 20180101ALI20230609BHJP
【FI】
G06F9/38 310E
G06F9/318 A
G06F9/38 370A
(21)【出願番号】P 2022534256
(86)(22)【出願日】2020-12-08
(86)【国際出願番号】 US2020063765
(87)【国際公開番号】W WO2021118989
(87)【国際公開日】2021-06-17
【審査請求日】2022-11-30
(32)【優先日】2019-12-10
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】アロック ガーグ
(72)【発明者】
【氏名】スコット アンドリュー マクレランド
(72)【発明者】
【氏名】マリウス エバーズ
(72)【発明者】
【氏名】マシュー ティー. ソベル
【審査官】三坂 敏夫
(56)【参考文献】
【文献】特表2004-532444(JP,A)
【文献】国際公開第2019/231904(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30-9/42
(57)【特許請求の範囲】
【請求項1】
システムであって、
回路を含む制御ロジックを備え、
前記回路は、
デコードユニットから複数の動作を含むディスパッチパケットを受信することと、
対応する閾値を超える第1の数の単一クラスの動作を前記ディスパッチパケットが含むバーストモードが示されているかどうかを判定することと、
前記第1の数の動作が前記対応する閾値を超えていることと、前記単一クラスの動作に対して、期間を示すバーストモードウィンドウを超えていないことと、を判定したことに応じて、前記対応する閾値よりも大きい第2の数の前記単一クラスの動作を複数のスケジューラキューにディスパッチすることと、
を行うように構成されている、
システム。
【請求項2】
前記対応する閾値は、前記単一クラスの動作を実行可能な実行ユニットの数に等しい、
請求項1のシステム。
【請求項3】
前記回路は、前記対応する閾値を超える前記第1の数の前記単一クラスの動作を検出したことに応じて、有効ビットをバーストモードシフトカウンタにシフトするように構成されている、
請求項1のシステム。
【請求項4】
所定のクラスの動作に対してバーストモードウィンドウを超えていないと判定することは、前記バーストモードシフトカウンタの有効なビット数がバーストモードウィンドウの閾値未満であると判定することを含む、
請求項3のシステム。
【請求項5】
前記回路は、前記ディスパッチパケットが、前記対応する閾値を超えて単一クラスの動作を含んでいないと判定したことに応じて、非有効ビットを前記バーストモードシフトカウンタにシフトするように構成されている、
請求項3のシステム。
【請求項6】
前記回路は、スケジューラキュー占有率が占有率の閾値未満であると判定したことに応じて、及び、前記単一クラスの動作について前記バーストモードウィンドウを超えていないと判定したことに応じて、前記単一クラスの動作について前記対応する閾値よりも大きい前記第2の数の動作を、前記複数のスケジューラキューにディスパッチするように構成されている、
請求項1のシステム。
【請求項7】
第1のクラスの動作は第1の閾値を有し、
第2のクラスの動作は第2の閾値を有し、
前記第2の閾値は前記第1の閾値と異なる、
請求項1のシステム。
【請求項8】
方法であって、
スケジューラキュー割り当てユニットが、所定のサイクルでデコードユニットから複数の動作を含むディスパッチパケットを受信することと、
対応する閾値を超える第1の数の単一クラスの動作を前記ディスパッチパケットが含むバーストモードが示されているかどうかを判定することと、
前記第1の数の動作が前記対応する閾値を超えていることと、前記単一クラスの動作に対して、期間を示すバーストモードウィンドウを超えていないことと、を判定したことに応じて、前記対応する閾値よりも大きい第2の数の前記単一クラスの動作
を複数のスケジューラキューにディスパッチすることと、を含む、
方法。
【請求項9】
前記対応する閾値は、前記単一クラスの動作を実行可能な実行ユニットの数に等しい、
請求項8の方法。
【請求項10】
前記対応する閾値を超える前記第1の数の前記単一クラスの動作を検出したことに応じて、有効ビットをバーストモードシフトカウンタにシフトすることをさらに含む、
請求項8の方法。
【請求項11】
所定のクラスの動作に対してバーストモードウィンドウを超えていないと判定することは、バーストモードシフトカウンタの有効なビット数がバーストモードウィンドウの閾値未満であると判定することを含む、
請求項10の方法。
【請求項12】
前記ディスパッチパケットが、前記対応する閾値を超えて単一クラスの動作を含んでいないと判定したことに応じて、非有効ビットを前記バーストモードシフトカウンタにシフトすることをさらに含む、
請求項10の方法。
【請求項13】
スケジューラキュー占有率が占有率の閾値未満であると判定したことに応じて、及び、前記単一クラスの動作について前記バーストモードウィンドウを超えていないと判定したことに応じて、前記単一クラスの動作について前記対応する閾値よりも大きい前記第2の数の動作をディスパッチすることをさらに含む、
請求項8の方法。
【請求項14】
第1のクラスの動作は第1の閾値を有し、
第2のクラスの動作は第2の閾値を有し、
前記第2の閾値は前記第1の閾値と異なる、
請求項8の方法。
【請求項15】
装置であって、
メモリと、
前記メモリに結合されたプロセッサと、を備え、
前記プロセッサは、
デコードユニットが、所定のサイクルで複数の動作を含むディスパッチパケットを生成することと、
対応する閾値を超える第1の数の単一クラスの動作を前記ディスパッチパケットが含むバーストモードが示されているかどうかを判定することと、
前記第1の数の動作が前記対応する閾値を超えていることと、前記単一クラスの動作に対して、期間を示すバーストモードウィンドウを超えていないことと、を判定したことに応じて、前記対応する閾値よりも大きい第2の数の前記単一クラスの動作を複数のスケジューラキューにディスパッチすることと、
を行うように構成されている、
装置。
【請求項16】
前記対応する閾値は、前記単一クラスの動作を実行可能な実行ユニットの数に等しい、
請求項15の装置。
【請求項17】
前記プロセッサは、前記対応する閾値を超える前記第1の数の前記単一クラスの動作を検出したことに応じて、有効ビットをバーストモードシフトカウンタにシフトするように構成されている、
請求項15の装置。
【請求項18】
前記単一クラスの動作に対してバーストモードウィンドウを超えていないと判定することは、前記バーストモードシフトカウンタの有効ビット数がバーストモードウィンドウの閾値未満であると判定することを含む、
請求項17の装置。
【請求項19】
前記プロセッサは、前記ディスパッチパケットが、前記対応する閾値を超えて単一クラスの動作を含んでいないと判定したことに応じて、非有効ビットを前記バーストモードシフトカウンタにシフトするように構成されている、
請求項17の装置。
【請求項20】
前記プロセッサは、スケジューラキュー占有率が占有率の閾値未満であると判定したことに応じて、及び、前記単一クラスの動作について前記バーストモードウィンドウを超えていないと判定したことに応じて、前記単一クラスの動作について前記対応する閾値よりも大きい前記第2の数の動作を、前記複数のスケジューラキューにディスパッチするように構成されている、
請求項15の装置。
【発明の詳細な説明】
【背景技術】
【0001】
プロセッサパイプラインは、実行中の命令により動作する多くの様々なユニットを含む。これらのユニットには、デコードユニット、スケジューラ、スケジューラキュー、ピッカー及び実行ユニットが含まれる。デコードユニットは、フェッチされた命令を命令動作へとデコードする。命令動作は、本明細書中で「op」とも呼ばれる。一般的に、opは、実行ユニットに含まれるハードウェアが実行することが可能な動作である。様々な実施形態において、各命令は、実行されると命令セットアーキテクチャにしたがってその命令に対して定義された動作のパフォーマンスをもたらす1つ以上のopに変換される。スケジューラがデコードされたopをスケジューラキューにディスパッチした後、ピッカーは実行ユニットによって実行されるスケジューラキューからopを選択する。
【0002】
一般的なスケジューラは、全体的なパフォーマンスの向上を優先して、各クラスのopで使用可能なディスパッチ帯域幅の分量をプロビジョニングする。一般的なスケジューラの場合、opの各クラスに割り当てられたディスパッチ帯域幅は、このクラスのopの実行ユニットの数と一致する。このアプローチは、プログラムが全てのサイクルでopの安定した正しい組み合わせを順守する場合にうまく機能する。ただし、1つのクラスのopが短いバーストで表示される場合、これにより、通常のスケジューラのプロセッサのパフォーマンスが低下する可能性がある。
【0003】
添付図面と共に以下の説明を参照することによって、本明細書で説明する方法及びメカニズムの利点をより良好に理解することができる。
【図面の簡単な説明】
【0004】
【
図1】コンピューティングシステムの一実施形態のブロック図である。
【
図2】プロセッサパイプラインの一実施形態のブロック図である。
【
図3】プロセッサパイプラインの一部の一実施形態のブロック図である。
【
図4】スケジューラキュー割り当てバーストモードにいつ入るかを判定する方法の一実施形態を例示する、一般化されたフロー図である。
【
図5】バーストモードに入るスケジューラキュー割り当てユニットのための方法の一実施形態を例示する、一般化されたフロー図である。
【
図6】スケジューラキュー割り当てバーストモードに入るかどうかを判定するための方法の一実施形態を例示する、一般化されたフロー図である。
【
図7】バーストモードウィンドウを追跡するための方法の一実施形態を例示する、一般化されたフロー図である。
【発明を実施するための形態】
【0005】
以下の説明では、本明細書で提示される方法及びメカニズムの十分な理解をもたらすために、多数の特定の詳細が示されている。しかしながら、当業者は、これらの特定の詳細を用いないで、様々な実施形態を実施し得ることを認識するはずである。いくつかの例では、本明細書で説明する手法を不明瞭にすることを回避するために、周知の構造、構成要素、信号、コンピュータプログラム命令、及び、技術が詳細に示されていない。説明を簡潔及び明瞭にするために、図面に示す要素は必ずしも縮尺通りに描かれていないことを理解されたい。例えば、いくつかの要素の寸法は、他の要素に対して誇張される場合がある。
【0006】
スケジューラキュー割り当てバーストモードを実装する様々なシステム、装置及び方法が本明細書に開示される。システムは、1つ以上のメモリに結合された1つ以上のプロセッサを含む。各プロセッサは、命令をフェッチ、処理及び実行する複数のパイプラインステージを有するプロセッサパイプラインを含む。一実施形態では、プロセッサは、命令のアウトオブオーダー実行を用いる。命令は、フェッチされ、次いで、デコードユニットによって命令動作(すなわち「op」)へとデコードされる。デコードユニットは、デコードされたopのディスパッチパケットを各クロックサイクルでスケジューラキュー割り当てユニットに転送する。
【0007】
一実施形態では、スケジューラキュー割り当てユニットがディスパッチパケットを受信すると、スケジューラキュー割り当てユニットは、任意のクラスのopのディスパッチパケットのopの数が、単一サイクルでのその特定のクラスに対するスケジューラキューに発行するための最大許容op数よりも大きいかどうかを判定する。一実施形態では、動作の各クラスは、異なるタイプの実行ユニットによって実行可能な異なるタイプのopを指す。例えば、様々なタイプのopには、算術論理演算装置(ALU)op、アドレス生成ユニット(AGU)op、浮動小数点op、整数op、ロード/ストアop等の1つ以上が含まれる。所定のクラスのop数が許容できる数よりも多く、バーストモードカウンタが閾値よりも小さい場合、スケジューラキュー割り当てユニットは、所定のクラスの追加のop数を単一サイクルでディスパッチし、バーストモードカウンタをインクリメントする。少数のサイクルで所定のopクラスに対してバーストモードで動作することにより、他のタイプのopクラスのプロセッサを枯渇させることなく、プロセッサスループットを向上させることができる。
【0008】
図1を参照すると、コンピューティングシステム100の一実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム100は、少なくともプロセッサ105A~105Nと、入出力(I/O)インターフェース120と、バス125と、メモリコントローラ(複数可)130と、ネットワークインターフェース135と、メモリデバイス(複数可)140と、を含む。他の実施形態では、コンピューティングシステム100は他のコンポーネントを含み、及び/又は、コンピューティングシステム100は異なる構成とされる。プロセッサ105A~105Nは、システム100に含まれる任意の数のプロセッサを表す。
【0009】
一実施形態では、プロセッサ105Aは、中央処理装置(CPU)等の汎用プロセッサである。一実施形態では、プロセッサ105Nは、高並列アーキテクチャを有するデータ並列プロセッサである。データ並列プロセッサには、グラフィックスプロセッシングユニット(GPU)、デジタルシグナルプロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)等が含まれる。いくつかの実施形態では、プロセッサ105A~105Nは、複数のデータ並列プロセッサを含む。
【0010】
メモリコントローラ(複数可)130は、I/Oインターフェース120に結合されたプロセッサ105A~N及びI/Oデバイス(図示省略)によってアクセス可能な任意の数及びタイプのメモリコントローラを表す。メモリコントローラ(複数可)130は、任意の数及びタイプのメモリデバイス(複数可)140に結合されている。メモリデバイス(複数可)140は、任意の数及びタイプのメモリデバイスを表す。例えば、メモリデバイス(複数可)140内のメモリのタイプとしては、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、NANDフラッシュメモリ、NORフラッシュメモリ、強誘電体ランダムアクセスメモリ(FeRAM)、又は、他のメモリが挙げられる。
【0011】
I/Oインターフェース120は、任意の数及びタイプのI/Oインターフェース(例えば、ペリフェラルコンポーネントインターコネクト(PCI)バス、PCIエクステンデッド(PCI-X)、PCIE(PCI Express)バス、ギガビットイーサネット(登録商標)(GBE)バス、ユニバーサルシリアルバス(USB))を表す。各種の周辺装置(図示省略)がI/Oインターフェース120に結合されている。そのような周辺装置は、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティック又は他のタイプのゲームコントローラ、メディア記録デバイス、外部ストレージデバイス、ネットワークインターフェースカード等を含む(が、これらに限定されない)。ネットワークインターフェース135は、ネットワーク上でネットワークメッセージを送受信するために使用される。
【0012】
様々な実施形態において、コンピューティングシステム100は、コンピュータ、ラップトップ、モバイルデバイス、ゲームコンソール、サーバ、ストリーミングデバイス、ウェアラブルデバイス、又は、他の様々なタイプの任意のコンピューティングシステム若しくはデバイスである。コンピューティングシステム100のコンポーネントの数は、実装ごとに異なることに留意されたい。例えば、他の実施形態では、
図1に示す数よりも多い又は少ない各コンポーネントが存在する。他の実施形態では、コンピューティングシステム100は、
図1に示されていない他のコンポーネントを含むことにも留意されたい。加えて、他の実施形態では、コンピューティングシステム100は、
図1に示す以外の方法で構成される。
【0013】
図2を参照すると、プロセッサパイプライン200の一実施形態のブロック図が示されている。様々な実施形態では、(
図1の)プロセッサ105A~105Nが、プロセッサパイプライン200の1つ以上のインスタンスを含む。一実施形態では、プロセッサパイプライン200は、少なくともフェッチユニット210と、デコードユニット215と、スケジューラキュー割り当てユニット220と、キュー235A~235Nと、実行ユニット240A~240Nと、を含む。キュー235A~235Nは、本明細書でスケジューラキューとも呼ばれることに留意されたい。また、プロセッサパイプライン200は、図を分かりづらくしないために図示されていない他のコンポーネント(例えば、分岐予測ユニット、命令キャッシュ)も含むことも理解されたい。他の実施形態では、プロセッサパイプライン200は、他の適切な方法で構成される。
【0014】
一実施形態では、フェッチユニット210は、メモリ及び/又は命令キャッシュからプログラムストリームの命令をフェッチし、フェッチユニット210は、フェッチされた命令をデコードユニット215に伝達する。デコードユニット215は、フェッチされた命令を命令動作(すなわち、略してop)へとデコードする。opは動作(operation)、マイクロ-op又はuopとも呼ばれることに留意されたい。一般に、命令動作は、実行ユニット240A~240Nに含まれるハードウェアが実行可能な動作である。様々な実施形態では、各命令は、実行されると命令セットアーキテクチャにしたがってその命令に対して定義された動作の実行をもたらす1つ以上のopに変換される。あらゆるタイプの命令セットアーキテクチャ(ISA)がプロセッサパイプライン200によって採用されており、ISAのタイプは実装ごとに異なる。
【0015】
デコードユニット215は、命令のタイプ、ソースオペランド等を特定し、各デコードされたopは、デコード情報の一部と併せて命令を含む。各命令が単一のopに変換される実施形態では、各opは、対応する命令又はその一部(例えば、opコードフィールド又は命令のフィールド)である。一部の実施形態では、デコードユニット215は、命令に対するopを生成する回路及び/又はマイクロコードの任意の組み合わせを含む。例えば、一実施形態では、比較的単純なop生成(例えば命令あたり1個又は2個のop)はハードウェアで対処され、一方でより広範なop生成(例えば命令に対して3個より多いop)はマイクロコードで対処される。
【0016】
デコードユニット215からのopは、ディスパッチパケットにおいてスケジューラキュー割り当てユニット220に提供される。スケジューラキュー割り当てユニット220は、opをスケジューラキュー235A~235Nにどのように割り当てるかを判定する。本明細書で使用される場合、「ディスパッチパケット」は、デコードユニット215によって単一のクロックサイクルでデコードされるopのグループとして定義される。opがスケジューラキュー割り当てユニット220からスケジューラキュー235A~235Nに転送されると、opはパイプライン200の正常部分からパイプライン200の異常部分に移行した。パイプライン200の異常部分に安定したopの流れを提供することは、許容可能なパフォーマンスのレベルがプロセッサによって維持されることを確実にするのに役立つ。
【0017】
通常の非バーストモードでは、スケジューラキュー割り当てユニット220は、単一のクロックサイクルでスケジューラキュー235A~235Nにディスパッチできるクラスごとのopの数に制限を課す。しかしながら、特定の条件が満たされる場合、スケジューラキュー割り当てユニット220は、所定のクラスのopに対して許容数を超えるopが受信された場合、サイクルの小さなウィンドウでこの制限を超えることを可能にする。これは、パイプライン200の正常部分を別のクラスのopにすばやく移動しながら、依然として実行ユニット240A~240Nがバックグラウンドでバーストを処理できるようにすることで、プロセッサのパフォーマンスを向上させるのに役立ち得る。
【0018】
一実施形態では、スケジューラキュー割り当てユニット220は、カウンタ230~232に結合された制御ロジック225を含む。クラスごとのカウンタ230は、デコードユニット215からスケジューラキュー割り当てユニット220に転送されるディスパッチパケットに含まれる異なる数のopをカウントするための任意の数のカウンタを表す。バーストモードカウンタ232は、スケジューラキュー割り当てユニット220がバーストモードにあったサイクル数を追跡する。一実施形態では、異なるクラスのopごとに個別のバーストモードカウンタがある。一実施形態では、任意のサイクル中に1つのクラスのopのみをバーストモードにすることができる。あるいは、別の実施形態では、2つの別々のクラスのopを単一のサイクルでバーストモードにすることができる。バーストモードカウンタ232が閾値に達すると、バーストの最中にスケジューラキューにopを均等に分散することが困難になるため、スケジューラキュー割り当てユニット220はバーストモードに入ることが妨げられる。これにより、スケジューラキューの相対的な占有率は、単一クラスのopに対して合理的にバランスが保たれ続けることが確実になる。
【0019】
一実施形態では、スケジューラキュー割り当てユニット220は、プロセッサパイプライン200に対して実行スループットを最大化するように、ディスパッチパケットopに対して割当順列を選択しようとする。また、スケジューラキュー割り当てユニット220は、opが、特定のタイプのopを実際に実行可能な実行ユニット240A~240Nに結合されたキュー235A~235Nに割り当てられるように、割当順列を選択する。プロセッサパイプライン200に示すように、各キュー235A~235Nは、対応する実行ユニット240A~240Nに結合されている。しかしながら、他の実施形態では、1つ以上のキュー235A~235Nは、複数の実行ユニット240A~240Nに結合されている。
【0020】
ディスパッチパケットを受信した後、スケジューラキュー割り当てユニット220は、所定のクロックサイクルでキュー235A~235Nに割り当てるためのopを選択する。依存関係が解決されopの実行準備ができると、ピッカー(図示省略)は、実行ユニット240A~240Nで実行するために、キュー235A~235Nからopを選択する。一実施形態では、個々の実行ユニット240A~240Nは、典型的なプログラムシーケンスで遭遇する様々なタイプのopの全てのサブセットしか実行できない。したがって、スケジューラキュー割り当てユニット220は、これらのopがこれらの具体的なタイプのopを実行可能な実行ユニット240A~240Nによって実行されるように、opを適切なキュー235A~235Nに割り当てる。
【0021】
図3を参照すると、プロセッサパイプライン300の一部の一実施形態のブロック図が示されている。一実施形態では、プロセッサパイプライン300の一部は、(
図1の)プロセッサ105A~105Nの1つ以上に含まれる。スケジューラキュー割り当てユニット302は、デコードユニット(図示省略)からディスパッチパケットを受信し、スケジューラキュー割り当てユニット302は、ディスパッチパケットからキュー305A~305N及び310A~310Nにopをディスパッチする方法を決定する。キュー305A~305N及び310A~310Nは、任意の数の異なるスケジューラキューのセットを表す。実施形態に応じて、プロセッサは、任意の数の様々なopタイプ(例えば、ALU op、アドレス生成op、浮動小数点op、固定小数点op、分岐op、乗算op、除算op)を処理する。スケジューラキュー305A~305N及び310A~310Nの各セットは、opの実行のために供給する実行ユニット335A~335N、340A~340N、345A~345N、及び、350A~350Nの機能に基づいて、これらの異なるopタイプのいくつかのサブセットを処理する。
【0022】
一実施形態では、各キュー305A~305Nは第1のタイプのopを格納するが、各キュー310A~310Nは第2のタイプのopを格納する。例えば、一実施形態では、スケジューラキュー割り当てユニット302は、ALU opをキュー305A~305Nに割り当て、スケジューラキュー割り当てユニット302は、アドレス生成opをキュー310A~310Nに割り当てる等である。他の実施形態では、スケジューラキュー割り当てユニット302は、他のタイプのopを対応するキューに割り当てる。各キュー305A~305Nは、対応する実行ユニット335A~335N又は340A~340Nで実行するためにopを選択する任意の数のピッカー315A~315N及び320A~320Nを有する。同様に、各キュー310A~310Nは、対応する実行ユニット345A~345N又は350A~350Nで実行するためにopを選択する任意の数のピッカー325A~325N及び330A~330Nを有する。一実施形態では、キュー305Aに格納可能な異なるタイプのopごとに、キュー305Aに対する個々のピッカー315A~315Nが存在する。それぞれ異なるタイプのopは、異なるタイプの実行ユニットで実行され、実行ユニット335A~335Nは、異なるタイプのopを実行する任意の数の異なる実行ユニットを表す。一実施形態では、いくつかの実行ユニットは、1つより多いタイプのopを実行可能であることに留意されたい。
【0023】
他のキューにおいて、各ピッカーは、ピッカーに結合されている実行ユニットで実行されるopをキューから選択する。例えば、ピッカー320A~320Nは、それぞれ実行ユニット340A~340Nで実行されるopをキュー305Nから選択し、ピッカー325A~325Nは、それぞれ実行ユニット345A~345Nで実行されるopをキュー310Aから選択し、ピッカー330A~330Nは、それぞれ実行ユニット350A~350Nで実行されるopをキュー310Nから選択する。一実施形態では、プロセッサパイプラインによってサポートされている異なるタイプのopごとに、(ピッカーを介して)各キューに結合されている異なる実行ユニットが存在する。しかしながら、一部の実施形態では、一部のキューは、プロセッサパイプラインによって実行されている様々なタイプのop全てのサブセットしか格納しない。例えば、プロセッサが2種類のop(ALU及びアドレス生成のop)を実行する実施形態では、一部のキューはALU opのみを格納し、他のキューはアドレス生成opのみを格納する。
【0024】
様々なopタイプのためのスケジューラキュー及び実行ユニットの数は実装ごとに異なることを理解されたい。本開示を通して説明する例は、実装の非限定的な例を例示することを意図している。他の実施形態では、他の数のスケジューラキュー、実行ユニット及び他の関連構造を用いるプロセッサが可能であり、企図される。
【0025】
図4に移ると、スケジューラキュー割り当てバーストモードにいつ入るかを決定するための方法400の一実施形態が示されている。説明のために、本実施形態のステップ及び
図5~
図7のステップは、順番に示されている。しかしながら、説明する方法の様々な実施形態では、説明する要素の1つ以上が同時に実行されてもよいし、図示した順序と異なる順序で実行されてもよいし、完全に省略されてもよいことに留意されたい。他の追加の要素も必要に応じて実行される。本明細書に説明する多様なシステム又は装置の何れも、方法400を実施するように構成されている。
【0026】
スケジューラキュー割り当てユニット(例えば、
図2のスケジューラキュー割り当てユニット220)は、デコードユニットによって生成された各ディスパッチパケットにおけるクラスごとのopの数を追跡する(ブロック405)。一実施形態では、スケジューラキュー割り当てユニットは、クラスごとのカウンタを使用して、各ディスパッチパケット内のクラスごとのopの数を追跡する。次に、スケジューラキュー割り当てユニットは、ディスパッチパケット内の任意のクラスのopの数が特定のクラスの最大許容数よりも大きいかどうかを判定する(条件付きブロック410)。一実施形態では、特定のクラスの最大許容数は、特定のクラスのopを実行できる実行ユニットの数に等しい。opのクラスが異なれば、最大許容数も異なる可能性があることに留意されたい。例えば、あるシナリオでは、ALU opの最大許容数はディスパッチパケットあたり4op、AGU opの最大許容数はディスパッチパケットあたり3op、浮動小数点opの最大許容数はディスパッチパケットあたり2op等である。
【0027】
ディスパッチパケット内の各クラスのop数が特定のクラスの最大許容数以下の場合(条件付きブロック410:「はい」)、スケジューラキュー割り当てユニットは、ディスパッチパケット内のopを通常の方法で処理して、バーストモードカウンタ(例えば、
図2のバーストモードカウンタ232)をデクリメントする(ブロック415)。バーストモードカウンタがゼロに等しい場合、バーストモードカウンタはブロック415でゼロのままである。ブロック415の後、方法400は、次のディスパッチパケットのためにブロック405に戻る。
【0028】
ディスパッチパケットの任意のクラスのop数が特定のクラスの最大許容数よりも大きい場合(条件付きブロック410:「いいえ」)、スケジューラキュー割り当てユニットは、バーストモードに入るための1つ以上の条件が適合しているかどうかを判定する(条件付きブロック420)。一実施形態では、バーストモードに入るための第1の条件は、対応するスケジューラキューの現在の占有率が占有率閾値以下であることである。一実施形態では、スケジューラキュー割り当てユニットは、現在のディスパッチパケットに最大許容op数を超えるクラスのopを格納するスケジューラキューの占有率をチェックする。別の実施形態では、スケジューラキュー割り当てユニットは、プロセッサパイプライン内の全てのスケジューラキューの占有率をチェックする。一実施形態では、バーストモードに入る第2の条件は、様々なスケジューラキュー及びピッカーの制約に基づいて、特定のクラスの最大許容数を超えるopをディスパッチするための有効な割当順列が存在するかどうかを確認することである。他の実施形態では、他の条件をチェックして、バーストモードに入るかどうかを判断できる。
【0029】
バーストモードに入るための1つ以上の条件が満たされない場合(条件付きブロック420:「いいえ」)、スケジューラキュー割り当てユニットは、通常の方法でディスパッチパケット内のopを処理し、バーストモードカウンタをデクリメントする(ブロック415)。そうでなければ、バーストモードに入るための1つ以上の条件が満たされる場合(条件付きブロック420:「はい」)、スケジューラキュー割り当てユニットは、対応するクラスのopについてバーストモードウィンドウを超えたかどうかを判定する(条件付きブロック425)。一実施形態では、スケジューラキュー割り当てユニットは、バーストモードカウンタをチェックし、バーストモードカウンタをバーストモードウィンドウ閾値と比較することによって、バーストモードウィンドウを超えたかどうかを判定する。
【0030】
バーストモードウィンドウを対応するクラスのopで超えた場合(条件付きブロック425:「はい」)、スケジューラキュー割り当てユニットは、通常の方法でディスパッチパケット内のopを処理し、バーストモードカウンタをデクリメントする(ブロック415)。それ以外の場合、所定のクラスのopでバーストモードウィンドウを超えていない場合(条件付きブロック425:「いいえ」)、スケジューラキュー割り当てユニットは、対応するクラスのopの閾値数を超えるopをスケジューラキューにディスパッチする(ブロック430)。また、スケジューラキュー割り当てユニットは、バーストモードカウンタをインクリメントする(ブロック435)。ブロック435の後に、方法400はブロック405に戻る。
【0031】
図5を参照すると、スケジューラキュー割り当てユニットがバーストモードに入る方法500の一実施形態が示されている。スケジューラキュー割り当てユニット(例えば、
図2のスケジューラキュー割り当てユニット220)は、ディスパッチパケットを受信し、ディスパッチパケット内の所定のクラスのopの閾値数を超えるopを検出する(ブロック505)。次に、スケジューラキュー割り当てユニットは、バーストモードに入るための条件が満たされているかどうかを判定する(条件付きブロック510)。一実施形態では、バーストモードに入るための条件は、スケジューラキュー占有率が第1の閾値未満であり、バーストモードカウンタが第2の閾値未満であることを含む。他の実施形態では、バーストモードに入るための他の条件を使用することができる。
【0032】
バーストモードに入る条件が満たされた場合(条件付きブロック510:「はい」)、所定のクラスのopの閾値を超える数が単一サイクルでスケジューラキューにディスパッチされる(ブロック515)。さもなければ、バーストモードに入る条件が満たされない場合(条件付きブロック510:「いいえ」)、閾値の数の所定のクラスのopのみが第1のサイクルでスケジューラキューにディスパッチされる(ブロック520)。場合によっては、スケジューラキュー割り当てユニットは、第1のサイクルで、所定のクラスのopの閾値数より少ない数をスケジューラキューにディスパッチすることを決定できる。次に、所定のクラスの残りのopは、第2のサイクルでスケジューラキューにディスパッチされる(ブロック525)。後続のディスパッチパケットからの所定のクラスのopの1つ以上のopを、第2のサイクルの前のディスパッチパケットからの残りのopとともにディスパッチできることに留意されたい。ブロック515及び525の後、方法500は終了する。
【0033】
図6に移ると、スケジューラキュー割り当てバーストモードに入るか否かを決定するための方法600の一実施形態が示されている。制御ロジックは、所定のクラスのopに対してスケジューラキュー割り当てバーストモードに入る要求を検出する(ブロック605)。要求の検出に応じて、制御ロジックは、所定のクラスのopについてバーストモードカウンタをチェックする(ブロック610)。バーストモードカウンタが閾値以下である場合(条件付きブロック615:「いいえ」)、制御ロジックは、スケジューラキュー割り当てユニット(例えば、
図2のスケジューラキュー割り当てユニット220)がバーストモードに入るのを可能にする(ブロック620)。そうではなく、バーストモードカウンタが閾値よりも大きい場合(条件付きブロック615:「はい」)、制御ロジックは、スケジューラキュー割り当てユニットがバーストモードに入るのを防ぐ(ブロック625)。ブロック620及び625の後、方法600は終了する。また、方法600は、スケジューラキュー割り当てバーストモードに入るために他の条件(例えば、スケジューラキュー占有)が満たされるかどうかをチェックする他の方法と並行して実行され得ることに留意されたい。
【0034】
図7を参照すると、バーストモードウィンドウを追跡する方法700の1つの実施形態が示されている。スケジューラキュー割り当てユニット(例えば、
図2のスケジューラキュー割り当てユニット220)は、ディスパッチパケットを受信する(ブロック705)。スケジューラキュー割り当てユニットが、ディスパッチパケット内の任意の所定のクラスのopの閾値を超える数のopを検出した場合(条件付きブロック710:「はい」)、スケジューラキュー割り当てユニットは、バーストモードシフトカウンタにおいて入力ビットを「1」に設定し、カウンタのビットを1ビット前方にシフトする(ブロック715)。スケジューラキュー割り当てユニットが、ディスパッチパケット内の任意の所定のクラスのopの閾値を超える数のopを検出しなかった場合(条件付きブロック710:「いいえ」)、スケジューラキュー割り当てユニットは、バーストモードシフトカウンタにおいて入力ビットを「0」に設定し、カウンタのビットを1ビット前方にシフトする(ブロック720)。また、スケジューラキュー割り当てユニットは、通常モードを使用して、ディスパッチパケットのopをディスパッチする(ブロック725)。ブロック725の後、方法700は終了する。
【0035】
ブロック715の後、バーストモードシフトカウンタの1の数がバーストモードウィンドウの閾値以下である場合(条件付きブロック730:「いいえ」)、スケジューラキュー割り当てユニットは、バーストモードに入るための1つ以上の他の条件をチェックする。(条件付きブロック735)。それ以外の場合、バーストモードシフトカウンタの1の数がバーストモードウィンドウの閾値より大きい場合(条件付きブロック730:「はい」)、スケジューラキュー割り当てユニットは、通常モードを使用してディスパッチパケットのopをディスパッチする(ブロック725)。バーストモードに入るための1つ以上の条件が満たされる場合(条件付きブロック735:「はい」)、スケジューラキュー割り当てユニットは、ディスパッチパケットのopをディスパッチするためバーストモード使用する(ブロック740)。そうではなく、バーストモードに入るための1つ以上の条件が満たされない場合(条件付きブロック735:「いいえ」)、スケジューラキュー割り当てユニットは、ディスパッチパケットのopをディスパッチするため通常モード使用する(ブロック725)。ブロック740の後、方法700は終了する。
【0036】
一実施形態では、バーストモードは、最後の「N」サイクルの移動ウィンドウで追跡され、この場合、Nは正の整数である。この実施形態では、バーストモードシフトカウンタは「N」ビットシフトカウンタである。一実施形態では、カウンタはサイクルごとに1ビット左にシフトし、右端の新しいビットはブロック715で「1」に設定される。別の実施形態では、カウンタはサイクルごとに1ビット右にシフトし、左端の新しいビットがブロック715で「1」に設定される。別の実施形態では、新しいビットは、ブロック715で「1」ではなく「0」に設定でき、新しいビットは、ブロック720で「0」ではなく「1」に設定できることを理解されたい。この実施形態では、スケジューラキュー割り当てユニットは、カウンタの0の数をカウントして、バーストモードウィンドウの閾値を超えたかどうかを判断する。概して、スケジューラキュー割り当てユニットは、カウンタの有効ビット数をカウントして、バーストモードウィンドウの閾値を超えたかどうかを判断する。バーストモードシフトカウンタを実装するための他の技術が可能であり、企図されている。
【0037】
様々な実施形態では、ソフトウェアアプリケーションのプログラム命令は、本明細書で説明する方法及び/又はメカニズムを実施するために使用される。例えば、汎用又は専用プロセッサによって実行可能なプログラム命令が企図される。様々な実施形態において、そのようなプログラム命令は、高水準のプログラミング言語によって表現される。他の実施形態では、プログラム命令は、高レベルプログラミング言語からバイナリ形式、中間形式又は他の形式にコンパイルされる。或いは、プログラム命令は、ハードウェアの動作又は設計を記述するように書かれる。このようなプログラム命令は、C等の高水準のプログラミング言語によって表現される。或いは、Verilog等のハードウェア設計言語(HDL)が使用される。様々な実施形態では、プログラム命令は、様々な非一時的なコンピュータ可読記憶媒体のうち何れかに記憶される。記憶媒体は、プログラム実行のためにプログラム命令をコンピューティングシステムに提供するために、使用中にコンピューティングシステムによってアクセス可能である。一般的に、そのようなコンピューティングシステムは、少なくとも1つ以上のメモリと、プログラム命令を実行するように構成された1つ以上のプロセッサと、を含む。
【0038】
上述した実施形態が、実施形態の非限定的な例に過ぎないことを強調しておきたい。上記の開示が十分に理解されれば、多くの変形及び修正が当業者に明らかになるであろう。以下の特許請求の範囲は、全てのそのような変形及び修正を包含するように解釈されることが意図される。