(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-01-17
(45)【発行日】2025-01-27
(54)【発明の名称】スケジューラキューの割り当て
(51)【国際特許分類】
G06F 9/38 20180101AFI20250120BHJP
【FI】
G06F9/38 310E
G06F9/38 370X
(21)【出願番号】P 2020566813
(86)(22)【出願日】2019-05-28
(86)【国際出願番号】 US2019034161
(87)【国際公開番号】W WO2019231904
(87)【国際公開日】2019-12-05
【審査請求日】2022-05-27
(32)【優先日】2018-05-29
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】マシュー ティー. ソベル
(72)【発明者】
【氏名】ドナルド エー. プライアー
(72)【発明者】
【氏名】アロック ガーグ
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許出願公開第2002/0019927(US,A1)
【文献】特開2002-055814(JP,A)
【文献】特開2007-094986(JP,A)
【文献】米国特許出願公開第2010/0325394(US,A1)
【文献】米国特許出願公開第2015/0106595(US,A1)
【文献】米国特許出願公開第2012/0144175(US,A1)
【文献】米国特許出願公開第2018/0088956(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
(57)【特許請求の範囲】
【請求項1】
実行スループットを向上させるためのシステムであって、
複数の実行ユニットと、
前記複数の実行ユニットに結合されている複数のスケジューラキューと、
デコードユニットと、
前記デコードユニット及び前記複数のスケジューラキューに結合されているスケジューリングロジックと、を備えるシステムであって、
前記スケジューリングロジックは、
所与のサイクルにおいて前記デコードユニットから複数の動作を受信し、
前記複数の動作の複数の割当順列を判定し、割当順列は、前記複数のスケジューラキューのうちの1つまたは複数への前記複数の動作のうちの1つまたは複数の割り当てを定義するものであり、
前記複数の割当順列のうち2つ以上の割当順列が妥当であると判定したことに応じて、前記複数のスケジューラキューの占有率状態に少なくとも部分的に基づいて、前記複数の割当順列のうち2つ以上の割当順列の中から何れかの割当順列を選択し、
前記所与のサイクルにおいて前記複数のスケジューラキューのうちの1つまたは複数に割り当てる動作の所与の数の表示を受信し、
スケジューラキューに結合された各実行ユニットに対して複数の動作が割り当てられないように、前記
何れかの割当順
列に一致する動作を、前記複数のスケジューラキューのうちの前記1つまたは複数に割り当てるように構成されている回路を備える、システム。
【請求項2】
前記回路が
、前記複数のスケジューラキューのうち第1のスケジューラキューが、前記複数のスケジューラキューの他のスケジューラキューよりも高い占有率を有することを示す占有率状態に応じて、前記第1のスケジューラキューに動作を割り当てることを回避するように構成されている、請求項1に記載のシステム。
【請求項3】
前記複数の割当順列が、前記所与のサイクルにおいて割り当てる少なくとも2つの異なる数の動作のための割当順列を備える、請求項1に記載のシステム。
【請求項4】
前記複数の動作が、第1のタイプの動作及び第2のタイプの動作を備え
、
前記スケジューリングロジックは、前記複数の割当順列のうち妥当であると判定された2つ以上の割当順列の各々に対して妥当性信号を生成するように構成されている、請求項1に記載のシステム。
【請求項5】
前記回路が、さらに、
前記第1のタイプの動作のための第1の複数の割当順列が妥当であるかどうかを判定し、前記第1の複数の割当順列から、妥当である第1の割当順列を選択し、
前記第2のタイプの動作のための第2の複数の割当順列が妥当であるかどうかを判定し、前記第2の複数の割当順列から、妥当である第2の割当順列を選択し、
前記第1のタイプの動作を、前記第1の割当順列に一致するように、前記所与のサイクルにおいて前記複数のスケジューラキューに割り当て、
前記第2のタイプの動作を、前記第2の割当順列に一致するように、前記所与のサイクルにおいて前記複数のスケジューラキューに割り当てるように構成されている、請求項4に記載のシステム。
【請求項6】
前記複数の割当順列が、所与の数の動作及び前記複数のスケジューラキューに対する全ての可能な割当順列を備える、請求項1に記載のシステム。
【請求項7】
所与の割当順列は、前記所与の割当順列の各動作が、各割り当てられた動作を実行可能な実行ユニットに割り当てられているときに妥当である、請求項1に記載のシステム。
【請求項8】
実行スループットを向上させるための方法であって、
所与の
クロックサイクルにおいてデコードユニットから複数の動作を受信することと、
前記複数の動作の複数の割当順列を判定することであって、割当順列は、前記複数の動作のうちの1つまたは複数の、複数のスケジューラキューのうちの1つまたは複数への割り当てを定義するものである、前記判定することと、
前記複数の割当順列のうち2つ以上の割当順列が妥当であると判定したことに応じて、前記複数のスケジューラキューの占有率状態に少なくとも部分的に基づいて、前記複数の割当順列のうち2つ以上の割当順列の中から何れかの割当順列を選択することと、
前記所与の
クロックサイクルにおいて前記複数のスケジューラキューのうちの1つまたは複数に割り当てる動作の所与の数の表示を受信することと、
スケジューラキューに結合された各実行ユニットに対して複数の動作が割り当てられないように、前記
何れかの割当順
列に一致する動作を、前記複数のスケジューラキューのうちの前記1つまたは複数に割り当てることと、を含む、方法。
【請求項9】
前記複数のスケジューラキューのうち第1のスケジューラキューが、前記複数のスケジューラキューの他のスケジューラキューよりも高い占有率を有することを示す占有率状態に応じて、前記所与の
クロックサイクルにおいて現在格納されている動作の数が最も多いスケジューラキューに動作を割り当てることを回避することをさらに含む、請求項8に記載の方法。
【請求項10】
前記複数の割当順列が、前記所与の
クロックサイクルにおいて割り当てる少なくとも2つの異なる数の動作のための割当順列を備える、請求項8に記載の方法。
【請求項11】
前記複数の動作が、第1のタイプの動作及び第2のタイプの動作を備える、請求項8に記載の方法。
【請求項12】
前記第1のタイプの動作のための第1の複数の割当順列が妥当であるかどうかを判定し、前記第1の複数の割当順列から、妥当である第1の割当順列を選択することと、
前記第2のタイプの動作のための第2の複数の割当順列が妥当であるかどうかを判定し、前記第2の複数の割当順列から、妥当である第2の割当順列を選択することと、
前記第1のタイプの動作を、前記第1の割当順列に一致するように、前記所与の
クロックサイクルにおいて前記複数のスケジューラキューに割り当てることと、
前記第2のタイプの動作を、前記第2の割当順列に一致するように、前記所与のクロックサイクルにおいて前記複数のスケジューラキューに割り当てることと、をさらに含む、請求項11に記載の方法。
【請求項13】
前記複数の割当順列が、所与の数の動作及び前記複数のスケジューラキューに対する全ての可能な割当順列を備える、請求項8に記載の方法。
【請求項14】
所与の割当順列は、前記所与の割当順列の各動作が、各割り当てられた動作を実行可能な実行ユニットに割り当てられているときに妥当である、請求項8に記載の方法。
【請求項15】
実行スループットを向上させるための装置であって、
メモリと、
請求項1~7の何れかのシステムと、を備える、装置。
【発明の詳細な説明】
【背景技術】
【0001】
プロセッサパイプラインは、実行中の命令により動作する多くの様々なユニットを含む。これらのユニットには、デコードユニット、スケジューラキュー、ピッカー及び実行ユニットが含まれる。デコードユニットは、フェッチされた命令を命令動作へとデコードする。命令動作は、本明細書中で「op」とも称される。一般的に言って、opは、実行ユニットに含まれるハードウェアが実行することが可能な動作である。様々な実装例において、各命令は、実行されると命令セットアーキテクチャにしたがってその命令に対して定義された動作のパフォーマンスをもたらす1つまたは複数のopに変換される。
【0002】
ピッカーは、スケジューラキューからopを選択し、それは実行ユニットによって実行される。様々なクロックサイクルにおいて、実行ユニットの全てで実行するのに利用可能なopが不十分である。他のサイクルにおいて、準備ができているopが多すぎ、それら全てが実行ユニットによって実行されることは可能でない。したがって、実行ユニットの稼働率及び/またはスループットを向上させる技術が望まれる。
【0003】
本明細書中に記載する方法及び機構の利点は、添付の図面と併せて以下の説明を参照することによってより良く理解され得る。
【図面の簡単な説明】
【0004】
【
図1】コンピューティングシステムの一実装例のブロック図である。
【
図2】プロセッサパイプラインの一実装例のブロック図である。
【
図3】プロセッサパイプラインの一部の一実装例のブロック図である。
【
図4】スケジューラキュー割り当てロジックの一実装例のブロック図である。
【
図5】最初の妥当なN-op割り当て検索ユニットの一実装例のブロック図である。
【
図6】割当順列を選択するためのプライオリティマトリクスの一実装例のブロック図である。
【
図7】スケジューラキュー割り当てロジックを実装する方法の一実装例を例示する一般化されたフロー図である。
【
図8】プライオリティマトリクスを実装する方法の一実装例を例示する一般化されたフロー図である。
【発明を実施するための形態】
【0005】
以下の説明において、本明細書中に提示される方法及び機構の完全な理解を提供するために多くの具体的な詳細が記載される。しかしながら、当業者は、これらの具体的な詳細なしに様々な実装例が実施され得ることを理解すべきである。場合によっては、周知の構造、コンポーネント、信号、コンピュータプログラム命令及び技術は、本明細書中に記載される手法を分かりづらくしないために詳細が示されていない。例示の簡潔さ及び明瞭さのために、図に示される要素は必ずしも縮尺通りでないことが理解されよう。例えば、要素の一部の寸法は、他の要素に比べて拡大されている場合がある。
【0006】
スケジューラキュー割り当てロジックを実装する様々なシステム、装置及び方法が本明細書中に開示される。システムは、1つまたは複数のメモリに結合されている1つまたは複数のプロセッサを含む。各プロセッサは、命令をフェッチ、処理、及び実行する複数のパイプラインステージを有するプロセッサパイプラインを含む。一実装例では、プロセッサは、命令のアウトオブオーダー実行を用いる。命令は、フェッチされ、そしてデコードユニットによって命令動作(すなわちop)へとデコードされる。デコードユニットは、デコードされたopをスケジューラキュー割り当てロジックに伝達する。スケジューラキュー割り当てロジックは、opを、opのタイプ(例えば、算術論理演算ユニット(ALU)op、アドレス生成op)に基づいて異なるストリームに分割する。例えば、異なる3つのタイプのopがある場合、割り当てロジックは、opを第1のストリーム、第2のストリーム、そして第3のストリームに分割する。各ストリームはその後、ストリームにおける特定のタイプのopに対する割り当て可能性を処理する別々の論理ユニットに入力される。
【0007】
一実装例では、別々の各論理ユニット(異なるopタイプに対応する)は、複数の様々な順列割当の妥当性をチェックする。例えば、所与のopタイプの実行ユニットに結合されているピッカーが取り付けられているスケジューラキューが5個及び現在のクロックサイクルに対して1つまたは複数のタイプの異なるopが5個ある場合、所与の論理ユニット(所与のopタイプに対する)は、5個の異なるopがこれら5個の異なるスケジューラキューに割り当てられるとき、120個の可能な割当順列のうちいずれが妥当であるかを判定する。一般的に言えば、割当順列は、1つまたは複数の動作の、1つまたは複数のスケジューラキューへの割り当てを定義する。所与の割当順列が妥当であるかを判定するのに、判定は、所与の割当順列により、各opがそのタイプのopを処理可能である実行ユニットに割り当てられる状態になるか(すなわち、割当順列が、処理のためopの妥当な割り当てをもたらすか)否かに関してなされる。また、所与の論理ユニットは、5個より少ないopが異なるスケジューラキューに割り当てられるとき、可能な割当順列のいずれが妥当であるかを判定する。例えば、所与の論理ユニットは、4個のopのみが5個の異なるスケジューラキューのうちの4個に割り当てられる場合に、いずれの割当順列が妥当であるかを判定する。また、所与の論理ユニットは、3個のopのみが5個の異なるスケジューラキューのうちの3個に割り当てられる場合に、いずれの割当順列が妥当であるかを判定する。同様に、所与の論理ユニットは、2個のopのみが5個の異なるスケジューラキューのうちの2個に割り当てられる場合に、かつ、単一のopのみが5個の異なるスケジューラキューのうちの1個に割り当てられる場合に、いずれの割当順列が妥当かを判定する。他の実装例は、5以外の他の数の異なるスケジューラキューを有することを理解すべきである。ただし、上記の技術は、これらの他の実装例で同様の方法で実行可能である。
【0008】
割当順列は、特定のタイプのopを処理可能である実行ユニットに入力を行うピッカーが取り付けられているスケジューラキューに各opが割り当てられる場合に、妥当である。様々な実装例では、一部の実行ユニットは、全ての様々なopタイプのサブセットしか実行できない。また、所与のopタイプは、特定の実行ユニットでのみ実行できる複数の異なるサブタイプを有し得る。例えば、ALU opには、加算op、乗算op、除算opなどが含まれるが、一実装例では、ALU実行ユニットの全てが除算opを実行できるわけではない。他のALU実行ユニットは、様々な可能なALU opタイプの全てのサブセットしか実行できない場合がある。同様に、他のタイプのopの場合、特定の実行ユニットは、これらのopタイプのサブセットしか実行できない場合があるが、他の実行ユニットは、これらopタイプの全てを実行可能である。
【0009】
一実装例では、所与の論理ユニットが、スケジューラキューのうちの1つまたは複数にopが割り当てられないときにいずれの割当順列が妥当であるかを判定する際、所与の論理ユニットは、様々なスケジューラキューの占有率状態に関する入力(すなわち、いくつの動作が現在キューに格納されているか―キューはどれくらい「満杯」か)を受信する。所与の論理ユニットは、複数の妥当な割当順列が存在する場合、いずれの妥当な割当順列を選択するかを判定するのに役立つようにこれらの入力を用いる。例えば、所与の論理ユニットは、様々なスケジューラキューの中で最も多い数のopを現在格納しているスケジューラキューへのopのスケジューリングを回避する。言い換えれば、占有率が最も高いスケジューラキューは、所与のサイクルにおいてopが割り当てられないスケジューラキューとなる。所与の論理ユニットが、1つより多いスケジューラキューにopがないままとする割当順列の妥当性をチェックしているとき、所与の論理ユニットは、opが最も多いキューを、opが割り当てられないキューとして選択する。
【0010】
所与のサイクルにおいて、スケジューラキュー割り当てロジックは、様々な割当順列に対してかつ所与のサイクルにおいて割り当てられている様々な数のopに対して妥当性信号を生成する。スケジューラキュー割り当てロジックはまた、プロセッサによってサポートされている様々なopタイプごとにこれらの妥当性信号も生成する。一実装例では、スケジューラキュー割り当てロジックは、所与のサイクルにおいて割り当てるopの数の表示を受信する。この表示は、スケジューラキュー割り当てロジックが妥当性信号を生成するのと並行して生成される。スケジューラキュー割り当てロジックは、所与のサイクルにおいていくつかのopをこの表示によって指定されたopの数と一致するように割り当てる。言い換えると、この表示により、所与のサイクルにおいてopを割り当てるためにいずれの妥当性信号が検討されるかが絞り込まれる。例えば、表示が所与のサイクルにおいて7個のopを割り当てることを指定している場合、スケジューラキュー割り当てロジックは、7-op割り当てに対する妥当な割当順列の1つを選択する。一実装例では、スケジューラキュー割り当てロジックは、7-op割り当てに対する最初の妥当な割当順列を選択する。代替として、表示が所与のサイクルにおいて3個のopを割り当てることを指定している場合、スケジューラキュー割り当てロジックは、3-op割り当てに対する妥当な割当順列の1つを選択する。割り当てるのに他の数のopを指定する他の表示の場合、スケジューラキュー割り当てロジックは、指定された数に対する妥当な割当順列の1つを選択する。本開示の残りの部分で説明するこれらのかつ他の技術を用いることによって、プロセッサは、実行ユニットのスループットを最大化する方法で、opを様々な実行ユニットに動的に割り当てることが可能になる。
【0011】
ここで
図1を参照すると、コンピューティングシステム100の一実装例のブロック図が示される。一実装例では、コンピューティングシステム100は、少なくともプロセッサ105A~N、入力/出力(I/O)インターフェース120、バス125、メモリコントローラ(複数可)130、ネットワークインターフェース135及びメモリデバイス(複数可)140を含む。他の実装例では、コンピューティングシステム100は、他のコンポーネントを含み、かつ/または、コンピューティングシステム100は、異なるように構成される。プロセッサ105A~Nは、システム100に含まれる任意の数のプロセッサを表す。
【0012】
一実装例では、プロセッサ105Aは、中央処理装置(CPU)などの汎用プロセッサである。一実装例では、プロセッサ105Nは、高並列アーキテクチャを有するデータ並列プロセッサである。データ並列プロセッサは、グラフィックスプロセッシングユニット(GPU)、デジタルシグナルプロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)などを含む。一部の実装例では、プロセッサ105A~Nは、複数のデータ並列プロセッサを含む。
【0013】
メモリコントローラ(複数可)130は、プロセッサ105A~N及びI/Oインターフェース120に結合されているI/Oデバイス(図示せず)によってアクセス可能な任意の数及びタイプのメモリコントローラを表す。メモリコントローラ(複数可)130は、任意の数及びタイプのメモリデバイス(複数可)140に結合されている。メモリデバイス(複数可)140は、任意の数及びタイプのメモリデバイスを表す。例えば、メモリデバイス(複数可)140に含まれるメモリのタイプは、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、NANDフラッシュメモリ、NORフラッシュメモリ、強誘電体ランダムアクセスメモリ(FeRAM)などを含む。
【0014】
I/Oインターフェース120は、任意の数及びタイプのI/Oインターフェース(例えば、ペリフェラルコンポーネントインターコネクト(PCI)バス、PCI-Extended(PCI-X)、PCIE(PCI Express)バス、ギガビットイーサネット(GBE)バス、ユニバーサルシリアルバス(USB))を表す。様々なタイプの周辺機器(図示せず)が、I/Oインターフェース120に結合されている。そうした周辺機器は、(以下に限定するものではないが)ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティック、または他のタイプのゲームコントローラ、メディア記録デバイス、外部ストレージデバイス、ネットワークインターフェースカードなどを含む。ネットワークインターフェース135は、ネットワークメッセージをネットワーク経由で送受信するのに用いられる。
【0015】
様々な実装例では、コンピューティングシステム100は、コンピュータ、ラップトップ、モバイルデバイス、ゲーム機、サーバ、ストリーミングデバイス、ウェアラブルデバイス、または様々な他のタイプのコンピューティングシステムもしくはデバイスのいずれかである。コンピューティングシステム100のコンポーネントの数は実装例ごとに異なることに留意されたい。例えば、他の実装例では、
図1に示す数よりも多いまたは少ない数の各コンポーネントが存在する。他の実装例では、コンピューティングシステム100は、
図1に示さない他のコンポーネントを含むことにも留意されたい。さらに、他の実装例では、コンピューティングシステム100は
図1に示す方法とは異なる方法で構成される。
【0016】
ここで
図2を参照すると、プロセッサパイプライン200の一実装例のブロック図が示される。様々な実装例では、プロセッサ105A~N(
図1の)が、プロセッサパイプライン200の1つまたは複数のインスタンスを含む。一実装例では、プロセッサパイプライン200は、少なくともフェッチユニット210、デコードユニット215、スケジューラキュー割り当てロジック220、キュー225A~N及び実行ユニット230A~Nを含む。キュー225A~Nは本明細書中でスケジューラキューとも称されることに留意されたい。プロセッサパイプライン200はまた、図を分かりづらくしないために図示されていない他のコンポーネント(例えば、分岐予測ユニット、命令キャッシュ)も含むことも理解すべきである。他の実装例では、プロセッサパイプライン200は、他の適切な方法で構成される。
【0017】
一実装例では、フェッチユニット210は、メモリ及び/または命令キャッシュからプログラムストリームの命令をフェッチし、フェッチユニット210は、フェッチされた命令をデコードユニット215に伝達する。デコードユニット215は、フェッチされた命令を命令動作(すなわち、略してop)へとデコードする。opはマイクロ-opまたはuopとも称されることに留意されたい。一般に、命令動作は、実行ユニット230A~Nに含まれるハードウェアが実行可能である動作である。様々な実装例では、各命令は、実行されると命令セットアーキテクチャにしたがってその命令に対して定義された動作のパフォーマンスをもたらす1つまたは複数のopに変換される。任意のタイプの命令セットアーキテクチャが、プロセッサパイプライン200によって用いられる。デコードユニット215は、命令のタイプ、ソースオペランドなどを特定し、各デコードされたopは、デコード情報の一部と併せて命令を含む。各命令が単一のopに変換される実装例では、各opは、対応する命令またはその一部(例えば、opコードフィールドまたは命令のフィールド)である。一部の実装例では、デコードユニット215は、命令に対するopを生成する回路及び/またはマイクロコードの任意の組み合わせを含む。例えば、一実装例では、比較的単純なop生成(例えば命令あたり1個または2個のop)はハードウェアで対処され、より広範なop生成(例えば命令に対して3個より多いop)はマイクロコードで対処される。
【0018】
デコードユニット215からのopは、スケジューラキュー割り当てロジック220に提供される。スケジューラキュー割り当てロジック220は、opをスケジューラキュー225A~Nにどのように割り当てるかを判定する。様々な実装例では、opをキュー225A~Nに割り当てるための複数の様々な割当順列が存在する。本明細書中で用いるように、割当順列は、1つまたは複数のopの、1つまたは複数のキューへの特定のop-キュー割り当てとして定義される。一実装例では、スケジューラキュー割り当てロジック220は、プロセッサパイプライン200に対して最大化されている実行スループットをもたらすであろう割当順列を選択しようとする。スケジューラキュー割り当てロジック220はまた、opが、特定のタイプのopを実際に実行可能である実行ユニット230A~Nに結合されているキュー225A~Nに割り当てられるように、割当順列を選択する。プロセッサパイプライン200に示すように、各キュー225A~Nは、対応する実行ユニット230A~Nに結合されている。しかしながら、他の実装例では、1つまたは複数のキュー225A~Nは、複数の実行ユニット230A~Nに結合されている。
【0019】
所与のクロックサイクルにおいて妥当な割当順列を選択した後、opは、選択された割当順列に一致するようにキュー225A~Nに割り当てられる。依存関係が解決されopの実行準備ができると、ピッカー(図示せず)は、実行ユニット230A~Nで実行するために、キュー225A~Nからopを選択する。一実装例では、個々の実行ユニット230A~Nは、典型的なプログラムシーケンスで遭遇する様々なタイプのopの全てのサブセットしか実行できない。したがって、スケジューラキュー割り当てロジック220は、これらのopがこれらの具体的なタイプのopを実行可能である実行ユニット230A~Nによって実行されるように、opを適切なキュー225A~Nに割り当てる。
【0020】
ここで
図3を参照すると、プロセッサパイプライン300の一部の一実装例のブロック図が示される。一実装例では、プロセッサパイプライン300の一部は、プロセッサパイプライン200内に含まれる。デコードユニット(図示せず)は、命令をopへとデコードし、そして、opは、マルチプレクサ(すなわちmux)310A及びmux310Bに提供される。各mux310A~Bは、取り付けられているスケジューリング論理ユニット320A~Bにそれぞれ対応するタイプである最初のN個のopを選択する。論理ユニット315A~Bは、mux310A~Bにそれぞれ結合される選択信号を提供する。
【0021】
第1のopタイプのスケジューリング論理ユニット320A及び第2のopタイプのスケジューリング論理ユニット320Bは、任意の数及びタイプのスケジューリング論理ユニットを表す。同様に、mux310A~Bは、任意の数のスケジューリング論理ユニットに結合されている任意の数のmuxを表す。実装例に応じて、プロセッサは、任意の数の様々なopタイプ(例えば、ALU op、アドレス生成op、浮動小数点op、固定小数点op、分岐op、乗算op、除算op)を処理する。一実装例では、第1のopタイプのスケジューリング論理ユニット320Aは、ALU opをキュー325A~Nに割り当て、第2のopタイプのスケジューリング論理ユニット320Bは、アドレス生成opをキュー350A~Nに割り当てる、等々。他の実装例では、第1のopタイプのスケジューリング論理ユニット320A及び第2のopタイプのスケジューリング論理ユニット320Bは、他のタイプのopを、対応するキューに割り当てる。
【0022】
一実装例では、各キュー325A~N及び350A~Nは、第1のタイプのop及び第2のタイプのopを格納する。別の実装例では、キュー325A~N及び350A~Nの1つまたは複数は、第1のタイプまたは第2のタイプのopのみを格納する。2つより多いタイプのopを有する実装例では、各キュー325A~N及び350A~Nは、3つ以上のタイプのop、2つ以上のタイプのop、または単一のタイプのopを格納する。異なる実装例では、任意の数の異なるタイプのopを格納している異なる数及びタイプのキューがあるだろうことを理解すべきである。
【0023】
各キュー325A~Nは、対応する実行ユニット335A~Nまたは345A~Nで実行するためにopを選択する任意の数のピッカー330A~N及び340A~Nを有する。同様に、各キュー350A~Nは、対応する実行ユニット365A~Nまたは375A~Nで実行するためにopを選択する任意の数のピッカー360A~N及び370A~Nを有する。一実装例では、キュー325Aに格納可能な異なるタイプのopごとに、キュー325Aに対するピッカー330A~Nが存在する。それぞれ異なるタイプのopは、異なるタイプの実行ユニットで実行され、実行ユニット335A~Nは、異なるタイプのopを実行する任意の数の異なる実行ユニットを表す。一実装例では、いくつかの実行ユニットは、1つより多いタイプのopを実行可能であることに留意されたい。
【0024】
他のキューにおいて、各ピッカーは、ピッカーに結合されている実行ユニットで実行されるだろうopをキューから選択する。例えば、ピッカー340A~Nは、それぞれ実行ユニット345A~Nで実行されるopをキュー325Nから選択し、ピッカー360A~Nは、それぞれ実行ユニット365A~Nで実行されるopをキュー350Aから選択し、ピッカー370A~Nは、それぞれ実行ユニット375A~Nで実行されるopをキュー350Nから選択する。一実装例では、プロセッサパイプラインによってサポートされている異なるタイプのopごとに、(ピッカーを介して)各キューに結合されている異なる実行ユニットが存在する。しかしながら、一部の実装例では、一部のキューは、プロセッサパイプラインによって実行されている様々なタイプのop全てのサブセットしか格納しない。例えば、プロセッサが2種類のop(ALU及びアドレス生成のop)を実行する実装例では、一部のキューはALU opのみを格納し、他のキューはアドレス生成opのみを格納する。
【0025】
様々なopタイプのためのスケジューラキュー及び実行ユニットの数は実装例ごとに異なることを理解すべきである。本開示を通して説明される例は、実装の非限定的な例を例示することを意図している。他の実装例では、他の数のスケジューラキュー、実行ユニット及び他の関連構造を用いるプロセッサが可能であり、企図される。
【0026】
ここで
図4を参照すると、所与のopタイプのためのスケジューラ論理ユニット400の一実装例のブロック図が示される。一実装例では、スケジューラキュー割り当てロジック(例えば、
図2のスケジューラキュー割り当てロジック220)は、異なるopタイプごとに別々のスケジューラ論理ユニット400を含む。別の実装例では、第1のopタイプのスケジューリング論理320A及び第2のopタイプのスケジューリング論理320Bは、スケジューラ論理ユニット400に示されるコンポーネントを含む。
【0027】
一実施形態では、デコードユニットからのopは、論理ユニット410、mux415及び論理ユニット430に結合される。論理ユニット410は、特定のスケジューラ論理ユニット400に対応する所与のタイプであるopのみをデコードユニットから選択する選択信号を生成する。例えば、10個のopが所与のサイクルにおいてデコードユニットによってデコードされ、3個のopのみが特定のスケジューラ論理ユニット400に対応する所与のタイプである場合、これら3個のopが、mux415からユニット420及びプライオリティマトリクス421~429に出力される。デコードユニットによってデコードされるopの数は、サイクルごとに、かつ実装例ごとに異なるものであり、所与のタイプのopの数も、サイクルごとに、かつ実装例ごとに異なるものになることに留意されたい。
【0028】
mux415から出力されるopは、ユニット420及びプライオリティマトリクス421~429に提供される。一実装例では、ユニット420は、最初の妥当なN-op割り当て検索ユニットであり、ここでNは整数であり、Nの値は、所与のopタイプの実行ユニットに入力を行うピッカーの数によって決定される。例えば、所与のopタイプの実行ユニットに結合されている6個のピッカーが存在する場合、Nは6に等しく、ユニット420は、6個のopを、所与のopタイプの実行ユニットに入力を行うピッカーを有する6個の異なるスケジューラキューに割り当てることの様々な可能な組み合わせの全てに対して、いずれの割当順列が妥当であるかを判定する。次に、ユニット420は、様々な可能な割当順列から、最初の妥当な割当順列を選択する。この割当順列は、mux435に結合される。一実装例では、ピッカーと実行ユニットに1対1の対応関係があり、各ピッカーは、スケジューラキューに取り付けられていることに留意されたい。ピッカーは、ピッカーに結合されている実行ユニットによって実行可能であるopを、その取り付けられているスケジューラキューから選択する。
【0029】
一実装例では、(N-1)-op割り当てプライオリティマトリクス421は、(N-1)個のopを(N-1)個の異なるスケジューラキューに割り当てることの様々な順列の組み合わせの全てに対して、いずれの割当順列が妥当であるかを判定する。上記の例では、N=6である場合、プライオリティマトリクス421は、5個のopが6個のスケジューラキューのうちの5個に割り当てられるときの様々な割当順列の妥当性をチェックする。プライオリティマトリクス421はまた、スケジューラキューのそれぞれに既にいくつの保留中のopが格納されているかを示すスケジューラキュー占有率データも受信する。一実装例では、プライオリティマトリクス421は、最も高い占有率を有するキューにopを割り当てない妥当な割当順列を選択する。
【0030】
実装例に応じて、(N-2)個のopがN個のスケジューラキューのうちの(N-2)個に割り当てられるときの様々な割当順列の妥当性をチェックし、(N-3)個のopがN個のスケジューラキューのうちの(N-3)個に割り当てられるときの様々な割当順列の妥当性をチェックする等を行う任意の数の他のプライオリティマトリクスが在る。一実装例では、これらのプライオリティマトリクスのそれぞれは、N個の異なるスケジューラキューの中で最も多くのopを既に格納しているスケジューラキューへのopの割り当てを回避する妥当な割当順列を選択する。これらの選択された割当順列は、次に、mux435に結合される。
【0031】
スケジューラ論理ユニット400に示される最後のプライオリティマトリクスは、単一-op割り当てプライオリティマトリクス429である。プライオリティマトリクス429は、N個の異なるスケジューラキューのそれぞれに単一のopを割り当てることの妥当性をチェックする。一実装例では、プライオリティマトリクス429は、様々なスケジューラキューの中で最も少ない数のopを格納しているスケジューラキューに単一のopを割り当てることを優先する。プライオリティマトリクス429は、N個の様々な可能な割り当てから妥当な割り当てを選択し、次に、この選択された割り当ての表示をmux435に送信する。
【0032】
一実装例では、論理ユニット430は、所与のクロックサイクルにおいてスケジューラキューに割り当てるopの数を判定する。一実装例では、論理ユニット430は、割り当てられているopの数は、所与のクロックサイクルにおいてピッカー-実行ユニットあたりで1つより多いopを必要としないことを保証する。一実装例では、論理ユニット430は、ユニット420及びプライオリティマトリクス421~429が妥当な割当順列を選択するのと並行して、割り当てるopの数を判定する。論理ユニット430は、所与のクロックサイクルにおいてスケジューラキューに割り当てるopの数の判定に基づいて、選択信号を生成し、論理ユニット430は、この選択信号をmux435に伝達する。次に、mux435は、論理ユニット430によって生成された選択信号に基づいて、特定のop割当順列をmux435の出力に結合する。例えば、一実装例では、mux435への入力は、N個のop、N-1個のop、N-2個のopなどの割り当て、そして1個のopの割り当てに至るまでの割り当てのための様々なop割当順列である。論理ユニット430からの選択信号は、これら割当順列のいずれがmux435の出力に結合されるかを判定する。スケジューラキュー割り当てロジック(例えば、
図2のスケジューラキュー割り当てロジック220)は、この選択されたop割当順列を用いて、所与のクロックサイクルにおいてスケジューラキューにopを割り当てる方法を判定する。
【0033】
ここで
図5を参照すると、最初の妥当なN-op検索ユニット500の一実装例のブロック図が示される。一実装例では、最初の妥当なN-op割り当て検索ユニット500の構成要素は、(
図4の)最初の妥当なN-op割り当て検索ユニット420内に含まれる。最初の妥当なN-op割り当て検索ユニット500は、所与のクロックサイクルにおいて特定のopタイプに対するピッカーが取り付けられた利用可能なスケジューラキューの全てにopを割り当てるための妥当な割当順列を検索しようとする。一実装例では、最初の妥当なN-op割り当て検索ユニット500は、ANDゲート505A~P、論理ユニット510及びmux520を含む。他の実装例では、最初の妥当なN-op割り当て検索ユニット500は、他のコンポーネントを用いてかつ/またはコンポーネントの他の配置を用いて実装される。
【0034】
ANDゲート505A~Pの数は、実装例によって異なり、所与のopタイプの実行ユニットに入力を行うピッカーの数に対する様々な可能な割当順列の数に基づくものである。一実装例では、所与のopタイプに対するピッカーが取り付けられているスケジューラキューへのopの様々な可能な割当順列ごとに、異なるANDゲート505A~Pが存在する。例えば、ユニット500に対応する所与のopタイプに対するスケジューラキューに3つのピッカー-実行ユニットの組み合わせが取り付けられている場合、3個のスケジューラキューに対する3個のopの6つの異なる可能な割当順列のそれぞれをテストするための6つのANDゲート505A~Pが存在する。所与のタイプのopに対する他の数のスケジューラキュー、ピッカー、そして実行ユニットの組み合わせの場合、ANDゲート505A~Pの数は、対応するスケジューラキューの全てにopを割り当てるための様々な可能な割当順列の全てをテストするように、異なるだろう。
【0035】
各ANDゲート505A~Pは、スケジューラキューに取り付けられているピッカー-実行ユニットの組み合わせに基づいて、様々なスケジューラキューへのopの割り当ての妥当性をテストする。第1の、第2の、かつ第Nのopは、現在のクロックサイクルにおいてデコードユニットによってデコードされたopを指す。第1のopは、プログラム順で最も古いopを指し、第2のopは、プログラム順で2番目に古いopを指す、等々。一実装例では、ピッカーと実行ユニットの間に1対1の対応関係がある。言い換えると、各ピッカーは、対応する実行ユニットに結合されている。前述のように、一実装例では、スケジューラキューには、実行ユニットに入力を行うピッカーが取り付けられており、これら実行ユニットは、opタイプのサブセットしか実行できない。各ANDゲート505A~Pは、スケジューラキューに結合されているピッカーによって入力される実行ユニットが、所与の割当順列に対してスケジューラキューに割り当てられているopを実行可能かどうか、を判定する。所与のANDゲートにおいて、各実行ユニットが、その対応するスケジューラキューに割り当てられているopを実行可能である場合、所与のANDゲートは、割当順列が妥当であると示す高出力(つまり、「1」ビット)を生成する。そうではなく、実行ユニットのいずれかが、その対応するスケジューラキューに割り当てられているopを実行できない場合、所与のANDゲートは、低出力(つまり、「0」ビット)を生成する。
【0036】
一実装例では、最初の論理検索ユニット510は、ANDゲート505A~Pからの最初の「1」出力を選択する。「最初の」「1」出力を構成する方向は、実装例によって異なる。一実装例では、最初の「1」出力は、ANDゲート505Aの方向からのものであり、別の実装例では、最初の「1」出力は、ANDゲート505Pの方向からのものである。他の実装例では、最初の論理検索ユニット510は、妥当な割当順列が複数ある場合、いずれの割当順列を選択するか判定するために他の技術を用いる。最初の論理検索ユニット510の出力は、mux520に結合され、最初の論理検索ユニット510のこの出力は、mux520への割当順列入力の1つを選択する。一実装例では、mux520への各割当順列入力は、この割当順列が全体的なスケジューラキュー割り当てロジック(例えば、
図2のスケジューラキュー割り当てロジック220)によって選択されるものと最終的になる場合、後続の論理ユニットによって使用可能な方法で、スケジューラキューへのopの割り当てを指定して、これらのopを対応するスケジューラキューに割り当てる。他の実装例では、最初の妥当なN-op検索ユニット500は、
図5に示されるものと同等の機能を行う論理ゲートの他の構成で実装されることに留意されたい。
【0037】
ここで
図6を参照すると、割当順列を選択するためのプライオリティマトリクス610の一実装例のブロック図が示される。一実装例では、プライオリティマトリクス421(
図4の)は、プライオリティマトリクス610のコンポーネントを含む。一実装例では、プライオリティマトリクス610は、計N個のスケジューラキューのうちの(N-1)個のスケジューラキューに(N-1)個のopが割り当てられるときに妥当な割当順列を選択するように実装される。これにより、スケジューラキューの1つを、所与のクロックサイクルにおいてopが割り当てられないままとする。
【0038】
図5の最初の論理検索ユニット500と同様に、プライオリティマトリクス610は、(N-1)個のopを(N-1)個のスケジューラキューに割り当てるための様々な可能な割当順列の妥当性をテストする複数のANDゲート605A~Pに結合されている。一実装例では、プライオリティマトリクス610はまた、N個のスケジューラキューに既に格納されているopの数を指定するスケジューラキュー占有率データも受信する。一実装例では、プライオリティマトリクス610は、所与のクロックサイクルにおいて最も多くのopを有する(すなわち、最も高い占有率)スケジューラキューにopを割り当てない、最初の妥当な割当順列を選択する。次に、この割当順列は、mux620に結合される入力から選択される。後続の論理ユニットが(N-1)個のopが所与のクロックサイクルにおいて割り当てられるべきと判断した場合、この割当順列が、所与のクロックサイクルにおいてスケジューラキューにopを割り当てるのに、スケジューラキュー割り当てロジックによって使用される。スケジューラキュー割り当てロジックはまた、プライオリティマトリクス610と同じ構造にしたがう他のプライオリティマトリクスも含む。これらの他のプライオリティマトリクスは、(N-2)個のopが所与のクロックサイクルにおいて割り当てられるとき、(N-3)個のopが所与のクロックサイクルにおいて割り当てられるときなど、所与のクロックサイクルにおける1個のopの割り当てに至るまで、割当順列を判定するために用いられる。
【0039】
ここで
図7を参照すると、スケジューラキュー割り当てロジックを実装する方法700の一実装例が示される。説明のために、本実装例でのステップ及び
図8でのステップを順次示す。しかしながら、記載される方法の様々な実装例では、記載される要素のうちの1つまたは複数が、同時に実行される、示されるのとは異なる順序で実行される、または、全体的に省略されることに留意されたい。他の追加の要素も必要に応じて実行される。本明細書中に記載される様々なシステムまたは装置のいずれも、方法700を実装するように構成されている。
【0040】
デコードユニットは、所与のサイクルにおいて複数のopをデコードする(ブロック705)。デコードユニットは、複数のopをスケジューラキュー割り当てロジックに伝達する(ブロック710)。スケジューラキュー割り当てロジックは、複数のopを、異なるopタイプに対応するopのストリームへと分割する(ブロック715)。次に、opタイプごとに、スケジューラキュー割り当てロジックは、複数のスケジューラキューにopを割り当てるための複数の様々な割当順列に対する妥当性信号を生成する(ブロック720)。一実装例では、スケジューラキュー割り当てロジックは、ブロック720において様々な可能な割当順列の全てに対して妥当性信号を生成する。様々な可能な割当順列には全て、1からスケジューラキューの数までの様々な数のopに対する順列が含まれる。
【0041】
また、ブロック715及び720と並行して、スケジューラキュー割り当てロジックは、所与のサイクルにおいて割り当てるopの数の表示を受信する(ブロック725)。次に、スケジューラキュー割り当てロジックは、表示によって指定されたopの数に対応する妥当な割当順列を選択する(ブロック730)。一実装例では、スケジューラキュー割り当てロジックは、ブロック730において最初の妥当な割当順列を選択する。他の実装例では、スケジューラキュー割り当てロジックは、複数の割当順列が妥当なときにいずれの割当順列を選択するかを判定するのに他の技術を用いる。次に、スケジューラキュー割り当てロジックは、選択された割当順列に一致するように、opをスケジューラキューに割り当てる(ブロック735)。ブロック735後、方法700は終了する。一実装例では、方法700は、後続のクロックサイクルごとに繰り返されることに留意されたい。
【0042】
ここで
図8を参照すると、プライオリティマトリクスを実装する方法800の一実装例が示される。プライオリティマトリクスは、デコードユニットから複数のopを受信する(ブロック805)。プライオリティマトリクスはまた、複数のスケジューラキューに対するキュー占有率状態も受信する(ブロック810)。プライオリティマトリクスは、複数のスケジューラキューの全てよりも少ないスケジューラキューにopを割り当てるための様々な割当順列の妥当性をテストする(ブロック815)。例えば、5個のスケジューラキューがある場合、一実装例では、プライオリティマトリクスは、4個のopを、5個のスケジューラキューのうちの4個に割り当てる様々な方法の妥当性をテストする。別の実装例では、プライオリティマトリクスは、3個のopを、5個のスケジューラキューのうちの3個に割り当てる様々な方法の妥当性をテストする。他の実装例では、5以外の他の数のスケジューラキューがあることを理解すべきである。
【0043】
次に、プライオリティマトリクスは、占有率が最も高いキューへのopの割り当てを回避する割当順列を選択する(ブロック820)。他の実装例では、プライオリティマトリクスは、占有率が最も高い2つのキューへのopの割り当てを回避する割当順列を選択し、占有率が最も高い3つのキューへのopの割り当てを回避する割当順列を選択する、等々。次に、プライオリティマトリクスは、選択された割当順列の表示を生成する(ブロック825)。一実装例では、プライオリティマトリクスは、選択された割当順列の表示を、スケジューラキュー割り当てロジックの次のレベルのmuxに伝達する。ブロック825後、方法800は終了する。一実装例では、方法800はクロックサイクルごとに実行されることに留意されたい。さらに、一実装例では、スケジューラキュー割り当てロジックは、複数のプライオリティマトリクスを含み、方法800は、異なるプライオリティマトリクスごとに実行される。
【0044】
様々な実装例において、ソフトウェアアプリケーションのプログラム命令が、本明細書中に記載された方法及び/または機構を実装するのに用いられる。例えば、汎用または特殊目的プロセッサによって実行可能なプログラム命令が企図されている。様々な実装例では、そうしたプログラム命令は、高水準プログラミング言語によって表される。他の実装例では、プログラム命令は、高水準プログラミング言語からバイナリ、中間、または他の形式にコンパイルされる。代替として、ハードウェアの動作または設計を記述するプログラム命令が書かれる。そうしたプログラム命令は、Cなどの高水準プログラミング言語によって表される。代替として、Verilogなどのハードウェア設計言語(HDL)が用いられる。様々な実装例では、プログラム命令は、各種の非一時的なコンピュータ可読格納媒体のいずれかに格納される。格納媒体は、プログラム命令をコンピューティングシステムにプログラム実行のために提供するために、使用中にコンピューティングシステムによってアクセス可能である。一般的に言って、そうしたコンピューティングシステムは、プログラム命令を実行するように構成された少なくとも1つまたは複数のメモリ及び1つまたは複数のプロセッサを含む。
【0045】
上記の実装例は実装の単なる非限定的な例であることを強調すべきである。上述の開示が完全に理解されると、多数の変形例及び変更例が、当業者に明らかとなろう。以下の特許請求の範囲は全てのそうした変形例及び変更例を包括すると解釈されることが意図される。