(57)【特許請求の範囲】
【請求項１】
各スレッドによる実行に必要とされるリソースの利用可能性に基づいて複数のスレッドを実行するためのマルチスレッドプロセッサであって、前記スレッドの各々が複数の命令からなり、前記マルチスレッドプロセッサが、
どのスレッドが実行すべきかを判断する手段と、
前記判断の結果に基づいて複数のスレッドの実行を切り換える手段と、
を具備し、
各スレッドが、該スレッドの状態を記憶しかつ該スレッドにおける命令の実行に用いられる対応するレジスタ手段に結合されており、
さらに、
前記複数のスレッドのすべてにより共有される内部レジスタから成り、実行中のスレッドにより利用される、内部レジスタ手段と、
前記内部レジスタ手段が使用されている間、別のスレッドへの実行の切り換えを防止する手段と、
命令内のスケジュール変更不可ビットを検出する手段と、
を具備し、
別のスレッドへの実行の切り換えを防止する前記手段が、スケジュール変更不可ビットの検出に応答して動作し、
連続した命令から成り且つ該命令の幾つかにスケジュール変更不可ビットが設定される複合命令が、その実行において前記共有される内部レジスタ手段を利用し、別のスレッドへの実行の切り換えを防止する前記手段が、前記スケジュール変更不可ビットに応答して、該スケジュール変更不可ビットが設定された命令とこの命令の次の命令との間で、動作する、ことを特徴とするマルチスレッドプロセッサ。
【請求項２】
前記内部レジスタ手段の使用は、前記複数の命令のシーケンスが実行を完了する前に終わる、請求項１に記載のマルチスレッドプロセッサ。
【請求項３】
スケジュール変更不可ビットが、前記シーケンスにおける各命令に対して設定され、別のスレッドへの実行の切り換えを防止する前記手段が、命令内のスケジュール変更不可ビットの検出に応答して動作する、請求項２に記載のマルチスレッドプロセッサ。
【請求項４】
各スレッドの状態を記憶するレジスタ手段とすべてのスレッドによって共有される内部レジスタ手段とを有するマルチスレッドプロセッサ上で実行するための命令のスレッドをコンパイル／アセンブルする方法であって、
前記マルチスレッドプロセッサが、スレッド内のどの命令が前記内部レジスタ手段を利用することができるかを判断する段階と、
前記マルチスレッドプロセッサが、前記内部レジスタ手段を利用する命令が実行されるときに、実行中のスレッドにスケジュール変更不可ビットを設定する段階と、
を含み、
連続した命令から成り且つ該命令の幾つかにスケジュール変更不可ビットが設定される複合命令が、その実行において前記共有される内部レジスタ手段を利用している間に、前記マルチスレッドプロセッサが、前記スケジュール変更不可ビットに応答して、該スケジュール変更不可ビットが設定された命令とこの命令の次の命令との間で、別のスレッドへの実行の切り換えが防止されることを特徴とする方法。
【請求項５】
スレッド内のどの命令が前記内部レジスタ手段を利用することができるかを判断する前記段階は、入力プログラムをコンパイルする段階と、必要とされる命令の数を低減するために該内部レジスタ手段を使用することができる状況を検索する段階と、該内部レジスタ手段が使用されるときにスケジュール変更不可ビットを含む命令を含める段階と、を含む、請求項４に記載の方法。
【請求項６】
スレッド内のどの命令が前記内部レジスタ手段を利用することができるかを判断する前記段階は、該内部レジスタ手段を使用した実行に適した命令のための入力プログラムを解析する段階と、そのような構成が見つかったときに、該内部レジスタ手段を利用しかつスケジュール変更不可ビットを含む命令をコンパイルする段階と、を含む、請求項４に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチスレッドプロセッサに使用するための複合命令、及びそのような命令を使用するプロセッサに関する。
【背景技術】
【０００２】
マルチスレッドプロセッサの例は、本出願人の米国特許第５、９６８、１６７号に説明している。これは、各スレッドがその実行に必要とするリソースの利用可能性に基づいて複数のスレッドの各々を実行するプロセッサを開示している。実行に対するスレッド間の選択は、どのスレッドを実行すべきかを判断し、適切にスレッド間で切り換える媒体制御コア又はアービターによって実施される。
そのようなマルチスレッドプロセッサは、いくつかのプログラム又は実行中のスレッドの各々に対するプログラム状態を格納する別の組のレジスタを有することになる。スレッドの１つによって要求されたリソースが利用可能でない、例えば、それがメモリアクセス待ちである時は、スレッドの続行が回避され、プロセッサは、スレッドが要求する全てのリソースが利用可能であり、従って実行を続けることができる別のスレッドに切り換える。スレッド間のアービトレーションは、プロセッサが何もしないのではなく可能な時はいつでも有用な命令を実行することができ、それによってプロセッサの使用が最適化されるように編成される。スレッドが実行していない時は、レジスタの組がその現在の状態を格納する。
【０００３】
プロセッサの最適な使用を達成する決定的な１つの要素は、スレッド間で実行を交換するのに必要な時間オーバーヘッドである。これがメモリアクセス待ちのような特定スレッドに対する待ち時間と類似している場合、実行中のスレッド間で切り換えるプロセッサ効率に正味の利得はない。したがって、プロセッサ効率を最適化するためにスレッド実行間の迅速な交換を必要とすることが認められてきた。迅速なスレッド交換は、各スレッドに対して格納されたプログラム状態のための別々の組のレジスタを有することによって助けられる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上述のように、実行中のスレッドの状態は、１組のレジスタに格納される。これらのレジスタから最大性能を取得するために、それらが各クロックサイクル内で少なくとも２回読まれ、少なくとも１回書かれることが普通である。これは、機械語コード命令の構造に起因する。一例が「ＡＤＤ」命令である。これは、２つのソースレジスタのコンテンツを取り、それらに加算を行い、次に、結果を再度レジスタストアに格納する。これが１クロックサイクル内で実行されるように、レジスタストレージは、２つの読取ポートと１つの書込ポートを必要とし、２つの読取ポートは、加算が行われる２つのデータ部分を提供し、書込ポートは、結果をレジスタに再度書き込むことを可能にする。これに伴う問題は、レジスタストア上のポート数が増加すると、ストアを生成するのに必要なシリコンの面積が有意に増加し、その結果、演算速度が低下することである。デバイスのコストも増加する。
【０００５】
マルチポートレジスタストレージは、迅速な切換機能を必要とするスレッドの数だけ深さを増加させなければならない。例えば、プロセッサが１６個のレジスタを有しており、４つのスレッドを効率的に切り換えるべきであることが要求された場合、４掛ける１６個のレジスタストレージが要求され、スレッド当たり１６個のレジスタストアになる。したがって、レジスタストレージに必要なシリコン面積は、ポートの数及びスレッドの数の関数である。
【課題を解決するための手段】
【０００６】
一実施形態では、各スレッドがその実行に必要とするリソースの利用可能性に基づいて複数のスレッドを実行するためのマルチスレッドプロセッサを開示する。プロセッサは、どのスレッドを実行すべきかを判断するための手段と、判断結果に基づいて、各スレッドがスレッドの状態を格納するためにかつスレッド上で命令を実行するのに使用するためにそれぞれのレジスタ手段に結合されたスレッドの実行間で切り換えるための手段と、全てのスレッドによって共有された更に別のレジスタ手段とを含み、実行中のスレッドは、実行性能を改善する更に別のレジスタ手段を使用し、プロセッサは、内部レジスタ手段が使用されている間は別のスレッドへの実行の切り換えを防止するための手段を更に含む。
【０００７】
本発明の好ましい実施形態は、マルチスレッドプロセッサに対する主レジスタストアとは別の小さなレジスタストアを提供する。
これは、内部レジスタストアと呼ばれる。この内部レジスタストアと主レジスタストアの違いは、内部レジスタがスレッドの数に対して複写されず、すなわち、全てのスレッドによって共有されるただ１つの内部レジスタストアが提供されることである。内部レジスタストアは、どの実行中のスレッドによっても使用することができる。
【０００８】
内部レジスタストアにおける内部レジスタは、全てのスレッド間で共有され、プロセッサは、内部レジスタが使用されている間は別のスレッドの実行に切り換えることが防止される。内部レジスタは、命令の実行中に使用することができる追加レジスタを提供し、それによってデータへの同時アクセスが増加し、かつそれによってより機能的に豊富な命令の実行を可能にする。仮にこの数の余分なレジスタ及び読取／書込ポートが主レジスタストアに追加される場合、それらは、各スレッドに対して複写されるべきであり、それによってシリコンコストに相当に上乗せされるであろう。
【０００９】
好ましくは、実行中のスレッドは、少数の命令を複合命令にグループ分けすることになる。この複合命令が、そのスレッドの実行を停止させると考えられるいずれの命令も含まない場合、実行中のスレッドにおける切り換えを防止することによってＣＰＵ効率に損失はない。
したがって、好ましい実施形態は、より多くのポートを主レジスタストアに追加するコストなしに、より多くの読取／書込アクセスを有するプロセッサを提供する。複合命令を使用は、プロセッサ利用度の最適化を保証することに役立つものである。
【図面の簡単な説明】
【００１０】
【図１】従来技術の中央演算処理装置の簡略化したブロック図である。
【図２】本発明を具現化するプロセッサのブロック図である。
【図３】本発明の実施形態における命令のコンパイルの例を示す図である。
【図４】本発明の実施形態に使用するための命令フォーマットのレイアウトを示す図である。
【図５】図４のフォーマットに対する更なる詳細を与える図である。
【発明を実施するための形態】
【００１１】
図１には、中央演算処理装置（ＣＰＵ）２が示されている。これは、メモリバス６によって外部メモリ４に結合される。このバス６は、外部メモリとの間でデータ及び命令を転送するのに使用される。
ＣＰＵ２によって実施される処理は、算術論理演算ユニット（ＡＬＵ）８内で行われる。Ｒは、外部メモリバス６を通じて外部メモリ４にメモリ及び命令要求を送り、かつ外部メモリバス６を通じて応答を受け取る。
ＡＬＵは、レジスタストア１２に結合された１組の読取／書込ポート１０を有する。この例では、４つのレジスタストア１２がある。これは、ＣＰＵ２が命令の４つのスレッドを処理するように使用され、それらの間を必要に応じて適切に切り換え、適切なレジスタストア１２から各スレッドのステータスを取り出すのを可能にする。
【００１２】
図２は、更に別の組の読取／書込ポート１６によってＡＬＵ８に結合された内部レジスタストア１４の追加によって修正された図１の構成を示している。この読取／書込ポートの組は、ＡＬＵ８をレジスタストア１２に結合する読取／書込ポートとは別である。しかし、ＡＬＵ８上で実行しているいずれのスレッドも使用することができる内部レジスタストア１４の１つのコピーが存在する。この例の目的に対して、レジスタストア１２のために２つの読取ポートと１つの書込ポートがあるものと仮定する。レジスタストア１２には、他の数の読取ポート及び書込ポートを提供することができる。更に、内部レジスタストア１４内への２つの読取ポートと１つの書込ポートが存在する。ＣＰＵの異なる演算性能を必要とする場合、異なる数の読取ポート及び書込ポートを提供することができる。
【００１３】
ここで、内部レジスタストア１４を有するＣＰＵの演算をＣＰＵが実施すべきである一般的な数学演算、すなわち、ベクトルドット積に関連して説明する。この演算の３次元バージョンは、下の式に示されている。
ドット積＝Ａｘ*Ｂｘ＋Ａｙ*Ｂｙ＋Ａｚ*Ｂｚ
この式を実施するために、３つの乗算と２つの加算が必要である。ＡＬＵ８には、単一サイクルの乗算及び加算論理が設けられている。したがって、上の式に示したドット積を３サイクルで実行することが可能であるはずである。これは、以下の理論的機械語命令に関連して示される。
ＭＵＬ  Ｒ６、Ｒ０、Ｒ１
ＭＬＡ  Ｒ６、Ｒ２、Ｒ３、Ｒ６
ＭＬＡ  Ｒ６、Ｒ４、Ｒ５、Ｒ６
【００１４】
「ＭＵＬ  Ｒ６、Ｒ０、Ｒ１」は、レジスタＲ０のコンテンツのレジスタＲ１のコンテンツとの乗算と、結果をレジスタＲ６に格納することを意味する。レジスタＲ０は、「Ａｘ」を収容し、レジスタＲ１は、「Ｂｘ」を収容するであろう。
「ＭＵＬ  Ｒ６、Ｒ２、Ｒ３、Ｒ６」は、レジスタＲ２のコンテンツのレジスタＲ３のコンテンツとの乗算と、結果をレジスタＲ６に加算することを意味する。加算の結果は、レジスタＲ６に再度格納される。レジスタＲ２は、「Ａｙ」を収容し、レジスタＲ３は、「Ｂｙ」を収容するであろう。
「ＭＬＡ  Ｒ６、Ｒ４、Ｒ５、Ｒ６」は、レジスタＲ４のコンテンツのレジスタＲ５のコンテンツとの乗算と、結果をレジスタＲ６に加算することを意味する。加算の結果は、レジスタＲ６に再度格納される。レジスタＲ４は、「Ａｚ」を収容し、レジスタＲ５は、「Ｂｚ」を収容するであろう。
【００１５】
これから、「ＭＬＡ」命令に対して、３つのレジスタから読み取り、１つのレジスタに書き込む必要があることが分る。したがって、これは、レジスタ１２に関して先に指摘したよりも１つ多い読取ポートを必要とする。したがって、仮にレジスタストア１２だけが利用可能だとすれば、演算を３サイクル以内で実施することを可能にするには、読取ポイントポートが不十分であろう。この問題は、そのために使用することができる余分な読取／書込ポートを有する内部レジスタストア１４を使用することによって克服することができる。したがって、内部レジスタストアを使用してこれを実行するための機械語命令は、以下の通りである。
ＭＵＬ  Ｉ０、Ｒ０、Ｒ１
ＭＬＡ  Ｉ０、Ｒ２、Ｒ３、Ｉ０
ＭＬＡ  Ｒ６、Ｒ４、Ｒ５、Ｉ０
【００１６】
これは、ドット積の中間結果がレジスタストアＲ６に格納されず、代わりに内部レジスタストア１０に格納されるという点で最初の例と異なる。最終合計後の結果だけがＲ６に再度格納される。この構成を使用すると、２つの読取ポートと１つの書込ポートだけがレジスタストア１２に必要とされることが保証され、これは、ＣＰＵ２のこの特定の例に対する限界である。
図に示すように、外部レジスタの代わりに内部レジスタＩ０が使用され、それによってメモリアクセスの数が減少し、ＣＰＵによって実行すべきであるコード行の全数が生成される。
【００１７】
内部レジスタストア１４が上述の機械語命令の実行に使用されている間、ＣＰＵは、異なるスレッドを実行するような交換が防止されることが必須である。これは、別のスレッドが内部レジスタストアを必要とする可能性があり、既に書き込まれた結果に上書きしてそれを破損させると考えられるためである。したがって、本発明の好ましい実施形態は、スケジュール変更不可ビットと呼ばれる単一ビットの命令を使用して交換を防止するように構成される。このビットが命令に対して設定されるときに、ＣＰＵは、その命令の終わりと次の命令との間でスレッドの交換が防止される。したがって、この例では、スケジュール変更不可ビットは、ドット積ＭＵＬの第１の２つの命令、及びＭＬＡの第１の発生に対して設定される。それは、ＭＬＡの第２の発生に対して設定されないが、ＣＰＵは、ＭＬＡの第２の発生の実行後まで、異なるスレッドへの交換が防止される。
【００１８】
複合命令は、いくつかの連続した命令に対してスケジュール変更不可ビットを設定することによって作成される。この組の連続命令又は複合命令がサイクルごとのベースで実行されると、レジスタストア１２だけがアクセスされた場合にその他の方法で使用できたであろうよりも内部レジスタストアの書込／読取ポートを通じてより多くのデータ経路へのアクセスが可能である。これは、標準のプロセッサアーキテクチャと比べて有意な利点を提供する。標準のアーキテクチャを使用して同じ性能を達成するためには、レジスタストア１２の４つのコピー各々に対して第３の読取ポイントの追加を必要とするであろう。これは、内部レジスタストアに必要とされるシリコン面積よりも相当に高価になると考えられる。
【００１９】
複合命令は、メモリから読み込まれてＣＰＵによって実行される命令を供給するのに使用されるコンパイラ／アセンブラの関連において存在する１つの概念である。ＣＰＵは、通常命令と複合命令を区別しない。同様に、コンパイラ／アセンブラは、複合命令を収容するどの入力プログラムも受け取らないことになる。
コンパイラ／アセンブラによって実施される付加的な機能性は、入力プログラムの解析と、複合命令が使用されてＣＰＵ上で実行されるときにプログラムの性能を改善することができる位置の検索とである。そのような位置が見つかった状態で、コンパイラ／アセンブラは、内部レジスタストアを利用する一連のＣＰＵ命令を作成し、内部レジスタストアがそれ以上使用されなくなるまで停止中のそのスレッドの実行を防止するスケジュール変更不可フラグを設定することができる。
複合命令は、２つの連続ＣＰＵ命令と同程度に簡単になるか、又は数十のＣＰＵ命令と同じくらい複雑になる可能性がある。複合命令がＣＰＵに遭遇すると、スケジュール変更不可フラグが設定されている限り、複合命令の実行が持続する。
【００２０】
コンパイラ／アセンブラは、使用することができる複合命令の有無を判断するために２つの主要な方法で作動することができる。これらの第１のものは、入力プログラムのコンパイル、次に、実行する命令の数を低減するために内部レジスタストアを使用することができる状況の検索、及び続いて内部レジスタを使用するためにコンパイルした命令の変更を伴う。これらの第２のものは、内部レジスタシステムを使用するのに適する構成を識別するためにコンパイラ／アセンブラが入力プログラムを解析することを伴う。第１のものの例は、図３に示している。ここでは、入力プログラムが３０で受け取られ、第１の通過の後は、３２でコンパイル／アセンブルされる。３３において、コンパイラ／アセンブラは、コンパイル／アセンブルプログラム内で最適化を検索する。ここでは、それは、２つの乗算及び加算と更に別の乗算及び加算を検出し、結果がレジスタＲ６に格納される。３６において、コンパイル／アセンブルのＣＰＵに対する出力は、スケジュール変更不可ビット設定を含む命令を含んでいる。図に見られるように、最初の２つの乗算及び加算は、図３では３４であり、３６の複合命令の最初の２行で実施される。３４のその後の乗算及び加算は、次に、複合命令の３行目で実施される。
【００２１】
ＣＰＵそれ自体は、内部レジスタを使用するか又はスレッドスケジューリングを無効にするかを判断しない。代わりに、コンパイラ／アセンブラプログラムは、それがＣＰＵによって提供された内部レジスタリソースを使用することができる状況を検出する。ＣＰＵの命令の組は、アセンブラが、内部レジスタを使用すること及びスレッドのスケジュール変更を無効にすることも既に選択したことを表示するための機構を提供する。
【００２２】
図４には、内部レジスタの使用をサポートするために、同じくスケジュール変更不可フラグを提供するために、適切なコンパイラ／アセンブラによってコンパイルすることができる命令設定フォーマットが示されている。命令フォーマットの各部分に提供されたデータが図５に示されている。図に見られるように、スケジュール変更不可ビットがビット２０にある。
複合命令を設定するために、コンパイラ／アセンブラは、いつこれらの命令を使用することができるかを識別するように設計される。これは、コンパイラ／アセンブラを生成するときに実施することができる。例えば、典型的な命令の組をサポートするプロセッサを考えると、提供されるデータ経路命令は、加算、乗算、及び乗算−合計のような関数を含むことになる。その組から提供することができる命令は、プロセッサのハードウエア実施がサポートすることができるソース及び宛先引数の数によって完全に制限される。プロセッサが単に２つのソース引数をサポートする場合、プロセッサは、実施されるこれらのソース引数を必要とすることになるので、乗算−合計命令を持たないことになる。これらの制限は、これが命令の組を判断するものなので、プロセッサのハードウエアを設計するときに行われる決定によって実施される。例えば、レジスタへの２つの読取ポートだけを含むプロセッサを設計する者は、算術論理演算ユニットに乗算−合計サポートを入れないと考えられる。
【００２３】
本発明の実施形態は、典型的なプロセッサのソース及び宛先引数の数を増すものである（通常短い持続時間にわたって一部の制限付きで）。それは、改善した入力／出力データ境界の利点を利用する付加的な命令／演算の実施を可能にする。プロセッサ自体は、付加的な引数を使用する一部の命令をサポートするように設計されるが、それらを使用することができると考えられるあらゆる可能な命令を予期することができないのは明らかである。
【００２４】
１組内のある一定の命令は、暗黙にその命令の組に含められた余分な引数を使用するハードウエアプロセッササポート命令とすることができ、これらは、プロセッサ上に実施されるプログラムを設計する者に既知であることになる。コンパイラ／アセンブラは、ユーザの入力を取得してそれを命令の組にマップする。したがって、コンパイラ／アセンブラは、全ての命令の背景にある演算を理解するように設計される。このマッピングは、例えば、この命令が使用されるようにユーザがコンパイラ／アセンブラに入力することによって直接形成することができる。別の例のコンパイラ／アセンブラは、命令を検査し、適切な場合には、ユーザによって提供された命令を複合命令上にマップする。
【００２５】
以上の第１の例を考えると、これは、フィルタ命令をサポートするハードウエア実施とすることができる。フィルタ命令は、並行して５つのソース引数からフィルタデータと係数を読み取り、データを１つのスカラー出力までフィルタリングすることができる。これは、次に、映像復号アルゴリズムに使用することができる。映像復号器は、アセンブリ言語で書かれ、直接フィルタ命令を使用することになる。アセンブリは、これをハードウエアによって理解される機械語コードに変換することになる。すなわち、内部レジスタが存在すると、これの利点が利用され、複合命令が使用されることになる。
【００２６】
以上の第２の例では、コンパイラに伝えられるユーザの意図が、最初に２つの値を乗算して結果を第３の位置に格納する場合、２つの異なる値の乗算と別の新しい位置への格納がそれに続く。コンパイラは、これらの連続演算を識別してそれらを単一の二重乗算演算に変換するように構成され、この二重乗算演算は、ここでもまた、性能を改善するために付加的な内部レジスタストアを使用して、４つの値を並行して読み取り、乗算を実施し、結果を戻す。
【００２７】
したがって、内部レジスタストアの使用は、マルチスレッドプロセッサの性能を有意に改善し、実行中にスレッド交換が起こる可能性がない複合命令を作り出すことからより良い性能を得ることを可能にすることが認められるであろう。それによって性能が更に改善され、スレッド交換の結果としてデータの破損がないことが保証される。
【図１】
0005425074.tif 000002
【図２】
0005425074.tif 000003
【図３】
0005425074.tif 000004
【図４】
0005425074.tif 000005
【図５】
0005425074.tif 000006