(57)【要約】  本開示の実施形態は、マルチコアプロセッサにおける並行関数の効率的なハードウェアディスパッチ、ならびに関連するプロセッサシステム、方法、およびコンピュータ可読媒体を提供する。一実施形態では、プログラム制御の並行転送を要求する動作を示す第1の命令が、マルチコアプロセッサの第1のハードウェアスレッドにおいて検出される。プログラム制御の並行転送に対する要求は、ハードウェア先入れ先出し(FIFO)キューにエンキューされる。ハードウェアFIFOキューにおけるプログラム制御の並行転送に対する要求をディスパッチする動作を示す第2の命令は、マルチコアプロセッサの第2のハードウェアスレッドにおいて検出される。プログラム制御の並行転送に対する要求は、ハードウェアFIFOキューからデキューされ、プログラム制御の並行転送は、第2のハードウェアスレッドにおいて実行される。このようにして、関数は、競合管理オーバーヘッドを最小限に抑えながら、複数のハードウェアスレッドのコンテキストにおいて効率的におよび同時にディスパッチされ得る。
2016535887.tif 000002
【特許請求の範囲】
【請求項１】
並行関数の効率的なハードウェアディスパッチを提供するマルチコアプロセッサであって、
複数のハードウェアスレッドを備える複数の処理コアと、
前記複数の処理コアに通信可能に結合されたハードウェア先入れ先出し(FIFO)キューと、
前記複数のハードウェアスレッドのうちの第1のハードウェアスレッドにおいて、プログラム制御の並行転送を要求する動作を示す第1の命令を検出し、
前記プログラム制御の並行転送に対する要求を前記ハードウェアFIFOキューにエンキューし、
前記複数のハードウェアスレッドのうちの第2のハードウェアスレッドにおいて、前記ハードウェアFIFOキューにおける前記プログラム制御の並行転送に対する前記要求をディスパッチする動作を示す第2の命令を検出し、
前記プログラム制御の並行転送に対する前記要求を前記ハードウェアFIFOキューからデキューし、
前記第2のハードウェアスレッドにおいて、前記プログラム制御の並行転送を実行する
ように構成された命令処理回路と
を備えるマルチコアプロセッサ。
【請求項２】
前記命令処理回路が、前記第1のハードウェアスレッドの1つまたは複数のレジスタに対応する1つまたは複数のレジスタ識別情報、および前記1つまたは複数のレジスタのそれぞれのレジスタのレジスタコンテンツを前記要求に含めることによって、前記プログラム制御の並行転送に対する前記要求をエンキューするように構成される、請求項1に記載のマルチコアプロセッサ。
【請求項３】
前記命令処理回路が、
前記要求に含まれる前記1つまたは複数のレジスタの前記それぞれのレジスタの前記レジスタコンテンツを取り出し、
前記プログラム制御の並行転送を実行する前に、前記1つまたは複数のレジスタの前記それぞれのレジスタの前記レジスタコンテンツを前記第2のハードウェアスレッドの対応する1つまたは複数のレジスタに復元する
ことによって、前記プログラム制御の並行転送に対する前記要求をデキューするように構成される、請求項2に記載のマルチコアプロセッサ。
【請求項４】
前記命令処理回路が、ターゲットハードウェアスレッドの識別子を前記要求に含めることによって、前記プログラム制御の並行転送に対する前記要求をエンキューするように構成される、請求項1に記載のマルチコアプロセッサ。
【請求項５】
前記命令処理回路が、前記要求に含まれる前記ターゲットハードウェアスレッドの前記識別子は前記第2のハードウェアスレッドを前記ターゲットハードウェアスレッドとして識別すると判断することによって、前記プログラム制御の並行転送に対する前記要求をデキューするように構成される、請求項4に記載のマルチコアプロセッサ。
【請求項６】
前記命令処理回路が、
前記プログラム制御の並行転送に対する前記要求が正常にエンキューされたかどうかを判断し、
前記プログラム制御の並行転送に対する前記要求が正常にエンキューされなかったと判断したことに応答して、中断を生じる
ようにさらに構成される、請求項1に記載のマルチコアプロセッサ。
【請求項７】
集積回路に組み込まれる、請求項1に記載のマルチコアプロセッサ。
【請求項８】
セットトップボックス、エンターテインメントユニット、ナビゲーションデバイス、通信デバイス、固定ロケーションデータユニット、モバイルロケーションデータユニット、モバイルフォン、セルラーフォン、コンピュータ、ポータブルコンピュータ、デスクトップコンピュータ、携帯情報端末(PDA)、モニタ、コンピュータモニタ、テレビジョン、チューナー、ラジオ、衛星ラジオ、音楽プレーヤ、デジタル音楽プレーヤ、ポータブル音楽プレーヤ、デジタルビデオプレーヤ、ビデオプレーヤ、デジタルビデオディスク(DVD)プレーヤ、およびポータブルデジタルビデオプレーヤからなる群から選択されるデバイスに組み込まれる、請求項1に記載のマルチコアプロセッサ。
【請求項９】
並行関数の効率的なハードウェアディスパッチを提供するマルチコアプロセッサであって、
ハードウェア先入れ先出し(FIFO)キュー手段と、
複数のハードウェアスレッドを備え、前記ハードウェアFIFOキュー手段に通信可能に結合された複数の処理コアと、
前記複数のハードウェアスレッドのうちの第1のハードウェアスレッドにおいて、プログラム制御の並行転送を要求する動作を示す第1の命令を検出するための手段と、
前記プログラム制御の並行転送に対する要求を前記ハードウェアFIFOキュー手段にエンキューするための手段と、
前記複数のハードウェアスレッドのうちの第2のハードウェアスレッドにおいて、前記ハードウェアFIFOキュー手段における前記プログラム制御の並行転送に対する前記要求をディスパッチする動作を示す第2の命令を検出するための手段と、
前記プログラム制御の並行転送に対する前記要求を前記ハードウェアFIFOキュー手段からデキューするための手段と、
前記第2のハードウェアスレッドにおいて、前記プログラム制御の並行転送を実行するための手段と
を備える命令処理回路手段と
を備えるマルチコアプロセッサ。
【請求項１０】
並行関数の効率的なハードウェアディスパッチのための方法であって、
マルチコアプロセッサの第1のハードウェアスレッドにおいて、プログラム制御の並行転送を要求する動作を示す第1の命令を検出するステップと、
前記プログラム制御の並行転送に対する要求をハードウェア先入れ先出し(FIFO)キューにエンキューするステップと、
前記マルチコアプロセッサの第2のハードウェアスレッドにおいて、前記ハードウェアFIFOキューにおける前記プログラム制御の並行転送に対する前記要求をディスパッチする動作を示す第2の命令を検出するステップと、
前記プログラム制御の並行転送に対する前記要求を前記ハードウェアFIFOキューからデキューするステップと、
前記第2のハードウェアスレッドにおいて、前記プログラム制御の並行転送を実行するステップと
を備える方法。
【請求項１１】
前記プログラム制御の並行転送に対する前記要求をエンキューするステップが、前記第1のハードウェアスレッドの1つまたは複数のレジスタに対応する1つまたは複数のレジスタ識別情報、および前記1つまたは複数のレジスタのそれぞれのレジスタのレジスタコンテンツを前記要求に含めるステップを備える、請求項10に記載の方法。
【請求項１２】
前記プログラム制御の並行転送に対する前記要求をデキューするステップが、
前記要求に含まれる前記1つまたは複数のレジスタの前記それぞれのレジスタの前記レジスタコンテンツを取り出すステップと、
前記プログラム制御の並行転送を実行する前に、前記1つまたは複数のレジスタの前記それぞれのレジスタの前記レジスタコンテンツを前記第2のハードウェアスレッドの対応する1つまたは複数のレジスタに復元するステップと
を備える、請求項11に記載の方法。
【請求項１３】
前記プログラム制御の並行転送に対する前記要求をエンキューするステップが、ターゲットハードウェアスレッドの識別子を前記要求に含めるステップを備える、請求項10に記載の方法。
【請求項１４】
前記プログラム制御の並行転送に対する前記要求をデキューするステップが、前記要求に含まれる前記ターゲットハードウェアスレッドの前記識別子は前記第2のハードウェアスレッドを前記ターゲットハードウェアスレッドとして識別すると判断するステップを備える、請求項13に記載の方法。
【請求項１５】
前記プログラム制御の並行転送に対する前記要求が正常にエンキューされたかどうかを判断するステップと、
前記プログラム制御の並行転送に対する前記要求が正常にエンキューされなかったと判断したことに応答して、中断を生じるステップと
をさらに備える、請求項10に記載の方法。
【請求項１６】
プロセッサに並行関数の効率的なハードウェアディスパッチのための方法を実施させるコンピュータ実行可能命令を記憶した非一時的コンピュータ可読媒体であって、前記方法が、
マルチコアプロセッサの第1のハードウェアスレッドにおいて、プログラム制御の並行転送を要求する動作を示す第1の命令を検出するステップと、
前記プログラム制御の並行転送に対する要求をハードウェア先入れ先出し(FIFO)キューにエンキューするステップと、
前記マルチコアプロセッサの第2のハードウェアスレッドにおいて、前記ハードウェアFIFOキューにおける前記プログラム制御の並行転送に対する前記要求をディスパッチする動作を示す第2の命令を検出するステップと、
前記プログラム制御の並行転送に対する前記要求を前記ハードウェアFIFOキューからデキューするステップと、
前記第2のハードウェアスレッドにおいて、前記プログラム制御の並行転送を実行するステップと
を備える、非一時的コンピュータ可読媒体。
【請求項１７】
前記プログラム制御の並行転送に対する前記要求をエンキューするステップが、前記第1のハードウェアスレッドの1つまたは複数のレジスタに対応する1つまたは複数のレジスタ識別情報、および前記1つまたは複数のレジスタのそれぞれのレジスタのレジスタコンテンツを前記要求に含めるステップを備える、前記プロセッサに前記方法を実施させる前記コンピュータ実行可能命令を記憶した、請求項16に記載の非一時的コンピュータ可読媒体。
【請求項１８】
前記プログラム制御の並行転送に対する前記要求をデキューするステップが、
前記要求に含まれる前記1つまたは複数のレジスタの前記それぞれのレジスタの前記レジスタコンテンツを取り出すステップと、
前記プログラム制御の並行転送を実行する前に、前記1つまたは複数のレジスタの前記それぞれのレジスタの前記レジスタコンテンツを前記第2のハードウェアスレッドの対応する1つまたは複数のレジスタに復元するステップと
を備える、前記プロセッサに前記方法を実施させる前記コンピュータ実行可能命令を記憶した、請求項17に記載の非一時的コンピュータ可読媒体。
【請求項１９】
前記プログラム制御の並行転送に対する前記要求をエンキューするステップが、ターゲットハードウェアスレッドの識別子を前記要求に含めるステップを備える、前記プロセッサに前記方法を実施させる前記コンピュータ実行可能命令を記憶した、請求項16に記載の非一時的コンピュータ可読媒体。
【請求項２０】
前記プログラム制御の並行転送に対する前記要求をデキューするステップが、前記要求に含まれる前記ターゲットハードウェアスレッドの前記識別子は前記第2のハードウェアスレッドを前記ターゲットハードウェアスレッドとして識別すると判断するステップを備える、前記プロセッサに前記方法を実施させる前記コンピュータ実行可能命令を記憶した、請求項19に記載の非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
優先権主張
本出願は、その全体が参照により本明細書に組み込まれる、2013年11月1日に出願された「EFFICIENT HARDWARE DISPATCHING OF CONCURRENT FUNCTIONS IN INSTRUCTION PROCESSING CIRCUITS, AND RELATED PROCESSOR SYSTEMS, METHODS, AND COMPUTER-READABLE MEDIA」と題する米国仮特許出願第61/898,745号の優先権を主張する。
【０００２】
本出願はまた、その全体が参照により本明細書に組み込まれる、2014年3月25日に出願された「EFFICIENT HARDWARE DISPATCHING OF CONCURRENT FUNCTIONS IN MULTICORE PROCESSORS, AND RELATED PROCESSOR SYSTEMS, METHODS, AND COMPUTER-READABLE MEDIA」と題する米国特許出願第14/224,619号の優先権を主張する。
【０００３】
本開示の技術は、複数のプロセッサコアおよび/または複数のハードウェアスレッドを提供するマルチコアプロセッサベースのシステムにおける並行関数の処理に関する。
【背景技術】
【０００４】
現代のデジタルコンピュータで見られる中央処理ユニット(CPU)などのマルチコアプロセッサは、プログラム命令を読み取り、実行するための複数のプロセッサコアまたは独立した処理ユニットを含み得る。各プロセッサコアは、1つまたは複数のハードウェアスレッドを含み得、非限定的な例として、キャッシュ、浮動小数点ユニット(FPU)、および/または共有メモリなどの、ハードウェアスレッドによってアクセス可能な追加のリソースも含み得る。ハードウェアスレッドの各々は、ソフトウェアスレッドおよびそのコンテキストをホストすることが可能な専用の物理レジスタのセット(たとえば、汎用レジスタ(GPR: general purpose register)、プログラムカウンタなど)を含む。1つまたは複数のハードウェアスレッドは、マルチコアプロセッサによって論理プロセッサコアと見なすことができ、したがって、マルチコアプロセッサが複数のプログラム命令を同時に実行することを可能にし得る。このようにして、全体的な命令スループットおよびプログラム実行速度が改善され得る。
【０００５】
主流のソフトウェア業界は、複数のハードウェアスレッドを提供する最新のマルチコアプロセッサの機能を十分に引き出すことが可能な並行ソフトウェアを開発するという課題に長い間直面してきた。当該の1つの開発領域は、関数型プログラミング言語によってもたらされる固有の並列性を利用することに重点を置いている。関数型プログラミング言語は、「純粋関数」の概念に基づいている。純粋関数は、参照透過であり(すなわち、純粋関数はプログラムの作用を変えることなしにプログラム内でその値に置き換えられ得る)、副作用がない(すなわち、純粋関数は外部の状態を変更しない、またはその外部にあるいかなる関数とのやりとりもしない)計算単位である。データ依存性を共有しない2つ以上の純粋関数は、CPUによって任意の順序でまたは並行して実行され得、同じ結果をもたらすことになる。したがって、そのような関数は、並行実行のために別個のハードウェアスレッドに安全にディスパッチされ得る。
【０００６】
並行実行のために関数をディスパッチすることは、いくつかの問題を提起する。利用可能なハードウェアスレッドの利用を最大化するために、関数は評価のためにキューに非同期的にディスパッチされ得る。しかしながら、これは、複数のハードウェアスレッドによってアクセス可能な共有データ領域またはデータ構造を必要とすることがある。その結果、競合問題に対処することが必要になり、ハードウェアスレッドの数が増加するにつれて、競合問題の数は指数関数的に増加し得る。関数は比較的小さい計算単位であり得るので、競合管理が招いたオーバーヘッドは、関数の並行実行によって実現される利益を急速に上回ることがある。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
したがって、競合管理オーバーヘッドを最小限に抑えながら、複数のハードウェアスレッドのコンテキストにおいて関数の効率的な並行ディスパッチのためのサポートを提供することが望ましい。
【課題を解決するための手段】
【０００８】
本開示の実施形態は、マルチコアプロセッサにおける並行関数の効率的なハードウェアディスパッチ、ならびに関連するプロセッサシステム、方法、およびコンピュータ可読媒体を提供する。一実施形態では、並行関数の効率的なハードウェアディスパッチを提供するマルチコアプロセッサが提供される。マルチコアプロセッサは、複数のハードウェアスレッドを備える複数の処理コアを含む。マルチコアプロセッサは、複数の処理コアに通信可能に結合されたハードウェア先入れ先出し(FIFO: first-in-first-out)キューをさらに備える。マルチコアプロセッサはまた、命令処理回路を備える。命令処理回路は、複数のハードウェアスレッドのうちの第1のハードウェアスレッドにおいて、プログラム制御の並行転送を要求する動作を示す第1の命令を検出するように構成される。命令処理回路は、プログラム制御の並行転送に対する要求をハードウェアFIFOキューにエンキューするようにさらに構成される。命令処理回路はまた、複数のハードウェアスレッドのうちの第2のハードウェアスレッドにおいて、ハードウェアFIFOキューにおけるプログラム制御の並行転送に対する要求をディスパッチする動作を示す第2の命令を検出するように構成される。命令処理回路は加えて、プログラム制御の並行転送に対する要求をハードウェアFIFOキューからデキューするように構成される。命令処理回路はまた、第2のハードウェアスレッドにおいて、プログラム制御の並行転送を実行するように構成される。
【０００９】
別の実施形態では、並行関数の効率的なハードウェアディスパッチを提供するマルチコアプロセッサが提供される。マルチコアプロセッサは、ハードウェアFIFOキュー手段と、複数のハードウェアスレッドを備え、ハードウェアFIFOキュー手段に通信可能に結合された複数の処理コアとを含む。マルチコアプロセッサは、複数のハードウェアスレッドのうちの第1のハードウェアスレッドにおいて、プログラム制御の並行転送を要求する動作を示す第1の命令を検出するための手段を備える命令処理回路手段をさらに含む。命令処理回路手段はまた、プログラム制御の並行転送に対する要求をハードウェアFIFOキュー手段にエンキューするための手段を備える。命令処理回路手段は、複数のハードウェアスレッドのうちの第2のハードウェアスレッドにおいて、ハードウェアFIFOキュー手段におけるプログラム制御の並行転送に対する要求をディスパッチする動作を示す第2の命令を検出するための手段をさらに備える。命令処理回路手段は加えて、プログラム制御の並行転送に対する要求をハードウェアFIFOキュー手段からデキューするための手段を備える。命令処理回路手段はまた、第2のハードウェアスレッドにおいて、プログラム制御の並行転送を実行するための手段を備える。
【００１０】
別の実施形態では、並行関数の効率的なハードウェアディスパッチのための方法が提供される。方法は、マルチコアプロセッサの第1のハードウェアスレッドにおいて、プログラム制御の並行転送を要求する動作を示す第1の命令を検出するステップを備える。方法は、プログラム制御の並行転送に対する要求をハードウェアFIFOキューにエンキューするステップをさらに備える。方法はまた、マルチコアプロセッサの第2のハードウェアスレッドにおいて、ハードウェアFIFOキューにおけるプログラム制御の並行転送に対する要求をディスパッチする動作を示す第2の命令を検出するステップを備える。方法は加えて、プログラム制御の並行転送に対する要求をハードウェアFIFOキューからデキューするステップを備える。方法は、第2のハードウェアスレッドにおいて、プログラム制御の並行転送を実行するステップをさらに備える。
【００１１】
別の実施形態では、プロセッサに並行関数の効率的なハードウェアディスパッチのための方法を実施させるコンピュータ実行可能命令を記憶した非一時的コンピュータ可読媒体が提供される。コンピュータ実行可能命令によって実施される方法は、マルチコアプロセッサの第1のハードウェアスレッドにおいて、プログラム制御の並行転送を要求する動作を示す第1の命令を検出するステップを備える。コンピュータ実行可能命令によって実施される方法は、プログラム制御の並行転送に対する要求をハードウェアFIFOキューにエンキューするステップをさらに備える。コンピュータ実行可能命令によって実施される方法はまた、マルチコアプロセッサの第2のハードウェアスレッドにおいて、ハードウェアFIFOキューにおけるプログラム制御の並行転送に対する要求をディスパッチする動作を示す第2の命令を検出するステップを備える。コンピュータ実行可能命令によって実施される方法は加えて、プログラム制御の並行転送に対する要求をハードウェアFIFOキューからデキューするステップを備える。コンピュータ実行可能命令によって実施される方法は、第2のハードウェアスレッドにおいて、プログラム制御の並行転送を実行するステップをさらに備える。
【図面の簡単な説明】
【００１２】
【図１】命令処理回路を含む、並行関数の効率的なハードウェアディスパッチを提供するためのマルチコアプロセッサを示すブロック図である。
【図２】ハードウェア先入れ先出し(FIFO)キューを使用した図1の命令処理回路による例示的な命令ストリームのための処理フローを示す図である。
【図３】並行関数を効率的にディスパッチするための図1の命令処理回路の例示的な動作を示すフローチャートである。
【図４】プログラム制御の並行転送を要求するためのCONTINUE命令の要素、ならびに結果として生じるプログラム制御の並行転送に対する要求の要素を示す図である。
【図５】プログラム制御の並行転送に対する要求をエンキューするための図1の命令処理回路の例示的な動作をより詳細に示すフローチャートである。
【図６】プログラム制御の並行転送に対する要求をデキューするための図1の命令処理回路の例示的な動作をより詳細に示すフローチャートである。
【図７】プログラム制御を発信元のハードウェアスレッドに返すための機構を含む、並行関数の効率的なハードウェアディスパッチを提供するための図1の命令処理回路による例示的な命令ストリームのための処理フローをより詳細に示す図である。
【図８】図1のマルチコアプロセッサおよび命令処理回路を含むことができる例示的なプロセッサベースのシステムのブロック図である。
【発明を実施するための形態】
【００１３】
次に図面を参照しながら、本開示のいくつかの例示的な実施形態について説明する。「例示的な」という言葉は、本明細書では「例、事例、または例示として機能する」ことを意味するように使用される。「例示的な」として本明細書で説明するいかなる実施形態も、必ずしも他の実施形態よりも好ましいまたは有利であると解釈されるべきではない。
【００１４】
本開示の実施形態は、マルチコアプロセッサにおける並行関数の効率的なハードウェアディスパッチ、ならびに関連するプロセッサシステム、方法、およびコンピュータ可読媒体を提供する。一実施形態では、並行関数の効率的なハードウェアディスパッチを提供するマルチコアプロセッサが提供される。マルチコアプロセッサは、複数のハードウェアスレッドを備える複数の処理コアを含む。マルチコアプロセッサは、複数の処理コアに通信可能に結合されたハードウェア先入れ先出し(FIFO: first-in-first-out)キューをさらに備える。マルチコアプロセッサはまた、命令処理回路を備える。命令処理回路は、複数のハードウェアスレッドのうちの第1のハードウェアスレッドにおいて、プログラム制御の並行転送を要求する動作を示す第1の命令を検出するように構成される。命令処理回路は、プログラム制御の並行転送に対する要求をハードウェアFIFOキューにエンキューするようにさらに構成される。命令処理回路はまた、複数のハードウェアスレッドのうちの第2のハードウェアスレッドにおいて、ハードウェアFIFOキューにおけるプログラム制御の並行転送に対する要求をディスパッチする動作を示す第2の命令を検出するように構成される。命令処理回路は加えて、プログラム制御の並行転送に対する要求をハードウェアFIFOキューからデキューするように構成される。命令処理回路はまた、第2のハードウェアスレッドにおいて、プログラム制御の並行転送を実行するように構成される。
【００１５】
この点について、図1は並行関数の効率的なハードウェアディスパッチのための例示的なマルチコアプロセッサ10のブロック図である。特に、マルチコアプロセッサ10は、プログラム制御の並行転送に対する要求をエンキューおよびディスパッチするための命令処理回路12を提供する。マルチコアプロセッサ10は、数ある要素の中でも、知られているデジタル論理素子、半導体回路、処理コアおよび/またはメモリ構造のいずれかの1つまたは複数、あるいはそれらの組合せを包含する。本明細書で説明する実施形態は要素の任意の特定の構成に限定されず、開示される技法は半導体ダイまたはパッケージ上の様々な構造およびレイアウトに容易に拡張され得る。マルチコアプロセッサ10は、システムバス16を介して1つまたは複数のプロセッサ以外の構成要素14(たとえば、非限定的な例として、メモリ、入力デバイス、出力デバイス、ネットワークインターフェースデバイスおよび/またはディスプレイコントローラ)に通信可能に結合され得る。
【００１６】
図1のマルチコアプロセッサ10は、複数のプロセッサコア18(0)〜18(Z)を含む。プロセッサコア18の各々は、他のプロセッサコア18とは無関係に、他のプロセッサコア18と同時に、コンピュータプログラム命令(図示せず)を読み取り、処理することができる処理ユニットである。図1に見られるように、マルチコアプロセッサ10は2つのプロセッサコア18(0)および18(Z)を含む。しかしながら、いくつかの実施形態は図1に示す2つのプロセッサコア18(0)および18(Z)よりも多くのプロセッサコア18を含み得ることを理解されたい。
【００１７】
マルチコアプロセッサ10のプロセッサコア18(0)および18(Z)はそれぞれ、ハードウェアスレッド20(0)〜20(X)およびハードウェアスレッド22(0)〜22(Y)を含む。ハードウェアスレッド20、22の各々は独立して実行され、マルチコアプロセッサ10によっておよび/またはマルチコアプロセッサ10によって実行されているオペレーティングシステムもしくは他のソフトウェア(図示せず)によって論理コアとして見なすことができる。このようにして、プロセッサコア18およびハードウェアスレッド20、22は、プログラム命令の並行マルチスレッド型実行を可能にするスーパースカラーアーキテクチャを提供し得る。いくつかの実施形態では、プロセッサコア18は、図1に示すよりも少ないまたは多いハードウェアスレッド20、22を含み得る。ハードウェアスレッド20、22の各々は、汎用レジスタ(GPR)および/または制御レジスタなどの、プログラム実行の現在の状態を記憶するための専用リソースを含み得る。図1の例では、ハードウェアスレッド20(0)および20(X)はそれぞれ、レジスタ24および26を含むが、ハードウェアスレッド22(0)および22(Y)はそれぞれ、レジスタ28および30を含む。いくつかの実施形態では、ハードウェアスレッド20、22はまた、他のストレージまたは実行リソースを、同じプロセッサコア18上で実行されている他のハードウェアスレッド20、22と共有し得る。
【００１８】
ハードウェアスレッド20、22の独立した実行機能は、マルチコアプロセッサ10がデータ依存性を共有しない関数(すなわち、純粋関数)を並行実行のためにハードウェアスレッド20、22にディスパッチするのを可能にする。ハードウェアスレッド20、22の利用を最大化するための1つの手法は、評価のために関数をキューに非同期的にディスパッチすることである。しかしながら、この手法は、図1の共有メモリ32などの共有データ領域またはデータ構造を必要とすることがある。複数のハードウェアスレッド20、22による共有メモリ32の使用は競合問題を引き起こすことがあり、ハードウェアスレッド20、22の数が増加するにつれて、競合問題の数は指数関数的に増加し得る。その結果、これらの競合問題に対処することが招くオーバーヘッドは、ハードウェアスレッド20、22による関数の並行実行によって実現される利益を上回ることがある。
【００１９】
この点について、図1の命令処理回路12は、並行関数の効率的なハードウェアディスパッチのためのマルチコアプロセッサ10によって提供される。命令処理回路12は、プロセッサコア18を含み得、ハードウェアFIFOキュー34をさらに含む。本明細書で使用する場合、「ハードウェアFIFOキュー」は任意のFIFOデバイスを含み、その競合管理はハードウェアおよび/またはマイクロコードにおいて対処される。いくつかの実施形態では、ハードウェアFIFOキュー34はダイ上で完全に実装され得るおよび/または専用レジスタ(図示せず)によって管理されるメモリを使用して実装され得る。
【００２０】
命令処理回路12は、プログラム制御の並行転送に対する要求をハードウェアスレッド20、22のうちの一方からハードウェアFIFOキュー34にエンキューするための機械命令(図示せず)を定義する。命令処理回路12は、要求をハードウェアFIFOキュー34からデキューし、ハードウェアスレッド20、22のうちの現在実行されているハードウェアスレッドにおいて、要求されたプログラム制御の転送を実行するための機械命令(図示せず)をさらに定義する。プログラム制御の並行転送に対する要求をハードウェアFIFOキュー34にエンキューし、ハードウェアFIFOキュー34からデキューするための機械命令を提供することによって、命令処理回路12は、マルチコア処理環境における複数のハードウェアスレッド20、22のより効率的な利用を可能にし得る。
【００２１】
本明細書で説明するいくつかの実施形態によれば、単一のハードウェアFIFOキュー34は、ハードウェアスレッド20、22のうちのいずれか一方において実行するためのプログラム制御の並行転送に対する要求をエンキューするために提供され得る。いくつかの実施形態は複数のハードウェアFIFOキュー34を提供し得、1つのハードウェアFIFOキュー34はハードウェアスレッド20、22の各ハードウェアスレッド専用である。そのような実施形態では、ハードウェアスレッド20、22のうちの指定されたハードウェアスレッドにおける関数の並行実行に対する要求は、ハードウェアスレッド20、22のうちのその指定されたハードウェアスレッドに対応するハードウェアFIFOキュー34においてエンキューされ得る。いくつかの実施形態では、ハードウェアスレッド20、22のうちの特定のハードウェアスレッドに向けられていないおよび/またはハードウェアスレッド20、22のうちのいずれか一方において実行され得る、プログラム制御の並行転送に対する要求をエンキューするための追加のハードウェアFIFOキューも提供され得る。
【００２２】
ハードウェアFIFOキュー34を使用した図1の命令処理回路12による例示的な命令ストリームのための処理フローを示すために、図2が提供される。図2は、図1のハードウェアスレッド20(0)によって実行されている一連の命令38、40、42、および44を備える命令ストリーム36を示す。同様に、命令ストリーム46は、ハードウェアスレッド22(0)によって実行されている一連の命令48、50、52、および54を含む。命令ストリーム36および46のための処理フローについて以下で逐次的に説明するが、命令ストリーム36および46はそれぞれのハードウェアスレッド20(0)および22(0)によって同時に実行されていることを理解されたい。命令ストリーム36および46の各々はハードウェアスレッド20、22のうちのいずれか一方において実行され得ることをさらに理解されたい。
【００２３】
図2に見られるように、命令ストリーム36における命令の実行は命令38から命令40に進み、次いで命令42に進む。この例では、命令38および40はそれぞれ、Instr0およびInstr1と指定されており、マルチコアプロセッサ10によって実行可能な任意の命令を表し得る。次いで、実行は、パラメータ<addr>を含むEnqueue命令である命令42に続く。Enqueue命令42は、パラメータ<addr>によって指定されたアドレスへのプログラム制御の並行転送を要求する動作を示す。別の言い方をすれば、Enqueue命令42は、ハードウェアスレッド20(0)における処理が継続している間に、その第1の命令をパラメータ<addr>によって指定されたアドレスに記憶した関数が同時に実行されることを要求する。
【００２４】
Enqueue命令42を検出したことに応答して、命令処理回路12は、要求56をハードウェアFIFOキュー34にエンキューする。要求56は、Enqueue命令42のパラメータ<addr>によって指定されたアドレスを含む。要求56をエンキューした後、ハードウェアスレッド20(0)における命令ストリーム36の処理は、Enqueue命令42に続く(Instr2と指定された)次の命令44を続ける。
【００２５】
上記で説明したハードウェアスレッド20(0)における命令ストリーム36のプログラムフローと同時に、ハードウェアスレッド22(0)の命令ストリーム46における命令実行は命令48から命令50に進み、次いで命令52に進む。命令48および50はそれぞれ、Instr3およびInstr4と指定されており、マルチコアプロセッサ10によって実行可能な任意の命令を表し得る。命令52は、ハードウェアFIFOキュー34における最も古い要求(この事例では、要求56)をハードウェアFIFOキュー34からディスパッチさせるDequeue命令である。Dequeue命令52はまた、ハードウェアスレッド22(0)におけるプログラム制御を要求56によって指定されたアドレス<addr>に転送させる。図2に見られるように、このようにして、Dequeue命令52はハードウェアスレッド22(0)におけるプログラム制御をアドレス<addr>における(Instr5と指定された)命令54に転送する。ハードウェアスレッド22(0)における命令ストリーム46の処理は、命令54に続く次の命令(図示せず)を続ける。このようにして、命令54で始まる関数は、ハードウェアスレッド20(0)における命令ストリーム36の実行と同時に、ハードウェアスレッド22(0)において実行され得る。
【００２６】
図3は、並行関数を効率的にディスパッチするための図1の命令処理回路12の例示的な動作を示すフローチャートである。明快にするために、図3について説明する際に図1および図2の要素が参照される。図3における処理は、命令処理回路12が、マルチコアプロセッサ10の第1のハードウェアスレッド20において、プログラム制御の並行転送を要求する動作を示す第1の命令42を検出することから始まる(ブロック58)。いくつかの実施形態では、第1の命令42は、マルチコアプロセッサ10によって提供されるCONTINUE命令であり得る。第1の命令42は、プログラム制御が同時に転送されるべきターゲットアドレスを指定し得る。以下でより詳細に説明するように、第1の命令42は、(レジスタ24、26、28、30などの)1つまたは複数のレジスタのコンテンツが転送され得ることを示すレジスタマスクを任意選択で含み得る。いくつかの実施形態は、プログラム制御の並行転送が行われることになるハードウェアスレッド20、22を示すために、ターゲットハードウェアスレッドの識別子が任意選択で含まれ得ることを実現し得る。
【００２７】
次いで、命令処理回路12は、プログラム制御の並行転送に対する要求56をハードウェアFIFOキュー34にエンキューする(ブロック60)。要求56は、プログラム制御が同時に転送されるべきアドレスを示すアドレスパラメータを含み得る。以下でさらに説明するように、要求56は、いくつかの実施形態では、第1の命令42の任意選択のレジスタマスクによって指定された1つまたは複数のレジスタに対応する、1つまたは複数のレジスタ識別情報および1つまたは複数のレジスタコンテンツを含み得る。
【００２８】
次に、命令処理回路12は、マルチコアプロセッサ10の第2のハードウェアスレッド22において、ハードウェアFIFOキュー34におけるプログラム制御の並行転送に対する要求56をディスパッチする動作を示す第2の命令52を検出する(ブロック62)。いくつかの実施形態では、第2の命令52は、マルチコアプロセッサ10によって提供されるDISPATCH命令であり得る。命令処理回路12は、プログラム制御の並行転送に対する要求56をハードウェアFIFOキュー34からデキューする(ブロック64)。次いで、プログラム制御の並行転送は、第2のハードウェアスレッド22において実行される(ブロック66)。
【００２９】
上記で述べたように、図2の第1の命令42などの、プログラム制御の並行転送に対する要求を示す命令は、転送されるべきレジスタコンテンツを指定するためのならびにターゲットハードウェアスレッドを指定するための任意選択のパラメータを含み得る。したがって、図4は、プログラム制御の並行転送を要求するための例示的なEnqueue命令42の構成要素(constituent elements)、ならびにプログラム制御の並行転送に対する例示的な要求56の要素を示すために提供される。図4の例では、Enqueue命令42はCONTINUE命令である。いくつかの実施形態では、Enqueue命令42は異なる命令名によって指定され得ることを理解されたい。Enqueue命令42は、ターゲットアドレス68(「<addr>」)、ならびに任意選択のレジスタマスク70(「<regmask>」)およびターゲットハードウェアスレッド(「<thread>」)の任意選択の識別子72を含む。ターゲットアドレス68は、プログラム制御転送が要求された先のアドレスを指定し、ターゲットアドレス74(「<addr>」)として要求56に含まれる。
【００３０】
いくつかの実施形態では、Enqueue命令42は、(レジスタ24、26、28、または30のうちの1つまたは複数などの)1つまたは複数のレジスタを示すレジスタマスク70も含み得る。レジスタマスク70が存在する場合、命令処理回路12は、レジスタマスク70によって指定されたレジスタごとに、要求56内に1つまたは複数のレジスタ識別情報76(「<reg_identity>」)および1つまたは複数のレジスタコンテンツ78(「<reg_content>」)を含む。1つまたは複数のレジスタ識別情報76および1つまたは複数のレジスタコンテンツ78を使用して、Enqueue命令42が実行される第1のハードウェアスレッドの現在のコンテキストは、後で第2のハードウェアスレッドにおける要求56のディスパッチ時に復元され得る。
【００３１】
いくつかの実施形態は、Enqueue命令42が、プログラム制御の並行転送が所望される先のターゲットハードウェアスレッドの任意選択の識別子72を含むことを実現し得る。したがって、Enqueue命令42が実行されるとき、識別子72は、要求56をエンキューすべき複数のハードウェアFIFOキュー34のうちの1つを選択するために、命令処理回路12によって使用され得る。たとえば、いくつかの実施形態では、命令処理回路12は、要求56を、識別子72によって指定されたハードウェアスレッド20、22に対応するハードウェアFIFOキュー34にエンキューし得る。いくつかの実施形態はまた、いかなる識別子72もEnqueue命令42によって提供されない要求をエンキューするための専用のハードウェアFIFOキュー34を提供し得る。
【００３２】
図5は、図3のブロック60において上記で参照したように、プログラム制御の並行転送に対する要求56をエンキューするための図1の命令処理回路12の例示的な動作をより詳細に示すフローチャートである。明快にするために、図5について説明する際に図1、図2、および図4の要素が参照される。図5の例では、プログラム制御の並行転送に対する要求56をエンキューするための動作について、図2で見られるようなハードウェアスレッド20(0)の命令ストリーム36に関して説明する。しかしながら、図5の動作はハードウェアスレッド20、22のうちのいずれか一方における命令ストリームにおいて実行され得ることを理解されたい。
【００３３】
図5では、動作は、プログラム制御の並行転送を要求する動作を示す第1の命令42がハードウェアスレッド20(0)の命令ストリーム36で検出されたかどうかを命令処理回路12が判断することから始まる(ブロック80)。いくつかの実施形態では、第1の命令42はCONTINUE命令であり得る。第1の命令42が検出されなかった場合、処理はブロック82において再開する。ブロック80においてプログラム制御の並行転送を要求する動作を示す第1の命令42が検出された場合、命令処理回路12は、プログラム制御の並行転送のためのターゲットアドレス74を含む要求56を作成する(ブロック84)。
【００３４】
次に、命令処理回路12は、第1の命令42がレジスタマスク70を指定しているかどうかを調べる(ブロック86)。いくつかの実施形態では、レジスタマスク70は、ハードウェアスレッド20(0)の1つまたは複数のレジスタ24を指定してもよく、そのコンテンツは、ハードウェアスレッド20(0)の現在のコンテキストを保存するために要求56に含まれ得る。レジスタマスク70が指定されていない場合、処理はブロック88において継続する。しかしながら、レジスタマスク70が第1の命令42によって指定されているとブロック86において判断された場合、命令処理回路12は、要求56内のレジスタマスク70によって指定された各レジスタ24に対応する、1つまたは複数のレジスタ識別情報76および1つまたは複数のレジスタコンテンツ78を含む(ブロック90)。
【００３５】
次いで、命令処理回路12は、第1の命令42がターゲットハードウェアスレッドの識別子72を指定しているかどうかを判断する(ブロック88)。いかなる識別子72も指定されていない(すなわち、第1の命令42が特定のハードウェアスレッドへのプログラム制御の並行転送を要求していない)場合、要求56はすべてのハードウェアスレッド20、22が利用可能なハードウェアFIFOキュー34にキューイングされる(ブロック92)。次いで、処理はブロック94において継続する。ブロック88において、ターゲットハードウェアスレッドの識別子72が第1の命令42によって指定されていると命令処理回路12が判断した場合、要求56は識別子72に対応するハードウェアスレッド20、22のうちの一方に固有のハードウェアFIFOキュー34にキューイングされる(ブロック96)。
【００３６】
次に、命令処理回路12は、要求56をハードウェアFIFOキュー34にエンキューするためのキュー動作が成功したかどうかを判断する(ブロック94)。成功した場合、処理はブロック82において継続する。(たとえば、ハードウェアFIFOキュー34が一杯だったので)要求56をハードウェアFIFOキュー34にキューイングすることができなかった場合、中断が生じる(ブロック98)。次いで、処理は命令ストリーム36における次の命令の実行を続ける(ブロック82)。
【００３７】
図6は、図3のブロック64において上記で参照したように、プログラム制御の並行転送に対する要求56をデキューするための図1の命令処理回路12の例示的な動作をより詳細に示す。明快にするために、図6について説明する際に図1、図2、および図4の要素が参照される。図6の例では、プログラム制御の並行転送に対する要求56をデキューするための動作について、図2で見られるようなハードウェアスレッド22(0)の命令ストリーム46に関して説明する。しかしながら、図6の動作はハードウェアスレッド20、22のうちのいずれか一方における命令ストリームにおいて実行され得ることを理解されたい。
【００３８】
図6で見られるように、動作は、プログラム制御の並行転送に対する要求56をディスパッチする動作を示す第2の命令52が命令ストリーム46で検出されたかどうかを命令処理回路12が判断することから始まる(ブロック100)。いくつかの実施形態では、第2の命令52はDISPATCH命令を備え得る。第2の命令52が検出されなかった場合、処理はブロック102において継続する。第2の命令52が命令ストリーム46で検出された場合、要求56は命令処理回路12によってハードウェアFIFOキュー34からデキューされる(ブロック104)。
【００３９】
次いで、命令処理回路12は、1つまたは複数のレジスタ識別情報76および1つまたは複数のレジスタコンテンツ78が要求56に含まれているかどうかを判断するために要求56を調べる(ブロック106)。含まれていない場合、処理はブロック108において継続する。1つまたは複数のレジスタ識別情報76および1つまたは複数のレジスタコンテンツ78が要求56に含まれている場合、命令処理回路12は、要求56内の1つまたは複数のレジスタコンテンツ78を、1つまたは複数のレジスタ識別情報76に対応するハードウェアスレッド22(0)の1つまたは複数のレジスタ28に復元する(ブロック110)。このようにして、要求56がエンキューされたときのハードウェアスレッド20(0)のコンテキストが、ハードウェアスレッド22(0)において復元され得る。次いで、命令処理回路12は、ハードウェアスレッド22(0)におけるプログラム制御を要求56内のターゲットアドレス74に転送する(ブロック108)。処理は命令ストリーム46における次の命令の実行を続ける(ブロック102)。
【００４０】
図7は、並行関数の効率的なハードウェアディスパッチを提供するための図1の命令処理回路12による例示的な命令ストリームのための処理フローをより詳細に示す図である。特に、図7は、並行転送の後にプログラム制御が発信元のハードウェアスレッドに返され得る機構を示す。図7では、一連の命令114、116、118、120、122、および124を備える命令ストリーム112は図1のハードウェアスレッド20(0)によって実行されるが、一連の命令128、130、132、および134を含む命令ストリーム126はハードウェアスレッド22(0)によって実行される。命令ストリーム112および126のための処理フローについて以下で逐次的に説明するが、命令ストリーム112および126はそれぞれのハードウェアスレッド20(0)および22(0)によって同時に実行されることを理解されたい。命令ストリーム112および126の各々はハードウェアスレッド20、22のうちのいずれか一方において実行され得ることをさらに理解されたい。
【００４１】
図7に示すように、命令ストリーム112はLOAD命令114、116、および118で始まり、そのLOAD命令の各々はハードウェアスレッド20(0)のレジスタ24のうちの1つに値を記憶する。第1のLOAD命令114は、値<parameter>がR0と呼ばれるレジスタに記憶されるべきであることを示す。値<parameter>は、命令ストリーム112と同時に実行される関数によって消費されることが意図された入力値であり得る。命令ストリーム112において実行される次の命令は、値<return_addr>が(R1と指定された)レジスタ24のうちの1つに記憶されるべきであることを示すLOAD命令116である。R1に記憶された値<return_addr>は、同時に実行された関数がその処理を完了するとプログラム制御が返る先のハードウェアスレッド20(0)におけるアドレスを表す。LOAD命令116に続くのは、値<curr_thread>が(ここではR2と呼ばれる)レジスタ24のうちの1つに記憶されるべきであることを示すLOAD命令118である。値<curr_thread>は、ハードウェアスレッド20(0)の識別子72を表し、同時に実行された関数がその処理を終えるとプログラム制御が返るべき先のハードウェアスレッド20を示す。
【００４２】
次いで、CONTINUE命令120が、命令処理回路12によって命令ストリーム112において実行される。CONTINUE命令120は、パラメータ<target_addr>およびレジスタマスク<R0〜R2>を指定する。CONTINUE命令120のパラメータ<target_addr>は、同時に実行されるべき関数のアドレスを示す。パラメータ<R0〜R2>は、ハードウェアスレッド20(0)のレジスタR0、R1、およびR2に対応するレジスタ識別情報76およびレジスタコンテンツ78が、CONTINUE命令120の実行によって生成された、プログラム制御の並行転送に対する要求56に含まれるべきであることを示すレジスタマスク70である。
【００４３】
CONTINUE命令120の検出および実行時に、命令処理回路12は要求136をハードウェアFIFOキュー34にエンキューする。この例では、要求136は、CONTINUE命令120のパラメータ<target_addr>によって指定されたアドレスを含み、レジスタR0〜R2の(<ID R0〜R2>と指定された)レジスタ識別情報76およびレジスタR0〜R2の(<Content R0〜R2>と呼ばれる)対応するレジスタコンテンツ78をさらに含む。要求136をエンキューした後、命令ストリーム112の処理はCONTINUE命令120に続く次の命令を続ける。
【００４４】
上記で説明したハードウェアスレッド20(0)における命令ストリーム112のプログラムフローと同時に、命令ストリーム126がハードウェアスレッド22(0)において実行され、最終的にDISPATCH命令128に達する。DISPATCH命令128は、ハードウェアFIFOキュー34における最も古い要求(この事例では、要求136)をディスパッチする動作を示す。要求136をディスパッチすると、命令処理回路12は、要求136のレジスタ識別情報76<ID R0〜R2>およびレジスタコンテンツ78<Content R0〜R2>を使用して、ハードウェアスレッド20(0)のレジスタR0〜R2に対応するハードウェアスレッド22(0)におけるレジスタ28のレジスタR0〜R2の値を復元する。次いで、ハードウェアスレッド22(0)におけるプログラム制御は、要求136のパラメータ<target_addr>によって示されたアドレスにある命令130に転送される。
【００４５】
命令ストリーム126の実行は命令130を続ける。この例では、命令130はInstr0と指定されており、所望の機能を実行するか、または所望の結果を計算するための1つまたは複数の命令を表し得る。命令Instr0は、当初はハードウェアスレッド20(0)のレジスタR0に記憶されていた値であり、現在はハードウェアスレッド22(0)のレジスタR0に記憶されている値を、結果値(「<result>」)を計算するための入力として使用し得る。次に、命令ストリーム126は、計算された結果値<result>がハードウェアスレッド22(0)のレジスタR0にロードされるべきであることを示すLOAD命令132に進む。
【００４６】
次いで、CONTINUE命令134が、命令処理回路12によって命令ストリーム126において実行される。CONTINUE命令134は、ハードウェアスレッド22(0)のレジスタR1のコンテンツ、レジスタマスク<R0>、およびハードウェアスレッド22(0)のレジスタR2のコンテンツを含むパラメータを指定する。上記で述べたように、ハードウェアスレッド22(0)のレジスタR1のコンテンツは、ハードウェアスレッド20(0)のレジスタR1に記憶された値<return_addr>であり、ハードウェアスレッド20(0)において処理が再開すべき先のリターンアドレスを示す。レジスタマスク<R0>は、ハードウェアスレッド22(0)のレジスタR0に対応するレジスタ識別情報76およびレジスタコンテンツ78がCONTINUE命令134に応答して生成されたプログラム制御の並行転送に対する要求に含まれるべきであることを示す。上記で述べたように、ハードウェアスレッド22(0)のレジスタR0は、同時に実行された関数の結果を記憶する。ハードウェアスレッド22(0)のレジスタR2のコンテンツは、ハードウェアスレッド20(0)のレジスタR2に記憶された値<curr_thread>であり、CONTINUE命令134によって生成された要求がデキューされるべきハードウェアスレッド20、22を示す。
【００４７】
CONTINUE命令134を検出したことに応答して、命令処理回路12は、要求138をハードウェアFIFOキュー34にエンキューする。この例では、要求138は、CONTINUE命令134のパラメータR0によって指定された値<return_addr>を含み、ハードウェアスレッド22(0)のレジスタR0の(<ID R0>として指定された)レジスタ識別情報76およびハードウェアスレッド22(0)のレジスタR0の(<Content R0>と呼ばれる)レジスタコンテンツ78をさらに含む。要求138をエンキューした後、命令ストリーム126の処理はCONTINUE命令134に続く次の命令を続ける。
【００４８】
次にハードウェアスレッド20(0)における命令ストリーム112に戻ると、命令ストリーム112においてDISPATCH命令122に遭遇する。DISPATCH命令122は、ハードウェアFIFOキュー34における最も古い要求(この事例では、要求138)をハードウェアFIFOキュー34からディスパッチする動作を示す。要求138をディスパッチすると、命令処理回路12は、要求138のレジスタ識別情報<ID R0>およびレジスタコンテンツ<Content R0>を使用して、ハードウェアスレッド22(0)のレジスタR0に対応するハードウェアスレッド20(0)におけるレジスタ24のうちの1つの値を復元する。次いで、ハードウェアスレッド20(0)におけるプログラム制御は、要求138のパラメータ<return_addr>によって示されたアドレスにある(この例では、Instr0と呼ばれる)命令124に転送される。
【００４９】
本明細書で開示する実施形態による、マルチコアプロセッサにおける並行関数の効率的なハードウェアディスパッチ、ならびに関連するプロセッサシステム、方法、およびコンピュータ可読媒体は、任意のプロセッサベースのデバイスにおいて提供されるか、または任意のプロセッサベースのデバイスに組み込まれ得る。例として、限定はしないが、セットトップボックス、エンターテインメントユニット、ナビゲーションデバイス、通信デバイス、固定ロケーションデータユニット、モバイルロケーションデータユニット、モバイルフォン、セルラーフォン、コンピュータ、ポータブルコンピュータ、デスクトップコンピュータ、携帯情報端末(PDA)、モニタ、コンピュータモニタ、テレビジョン、チューナー、ラジオ、衛星ラジオ、音楽プレーヤ、デジタル音楽プレーヤ、ポータブル音楽プレーヤ、デジタルビデオプレーヤ、ビデオプレーヤ、デジタルビデオディスク(DVD)プレーヤ、およびポータブルデジタルビデオプレーヤが含まれる。
【００５０】
この点について、図8は、図1のマルチコアプロセッサ10および命令処理回路12を提供することができるプロセッサベースのシステム140の一例を示す。この例では、マルチコアプロセッサ10は命令処理回路12を含み得、一時的に記憶されたデータへの高速アクセスのためのキャッシュメモリ142を有し得る。マルチコアプロセッサ10は、システムバス144に結合され、プロセッサベースのシステム140に含まれるマスタデバイスとスレーブデバイスとを相互結合することができる。よく知られているように、マルチコアプロセッサ10は、システムバス144を介してアドレス情報、制御情報、およびデータ情報を交換することによって、これらの他のデバイスと通信する。たとえば、マルチコアプロセッサ10は、スレーブデバイスの一例として、メモリコントローラ146にバストランザクション要求を通信することができる。図8に示されていないが、複数のシステムバス144が設けられ得る。
【００５１】
他のマスタデバイスおよびスレーブデバイスが、システムバス144に接続され得る。図8に示すように、これらのデバイスは、例として、メモリシステム148、1つまたは複数の入力デバイス150、1つまたは複数の出力デバイス152、1つまたは複数のネットワークインターフェースデバイス154、および1つまたは複数のディスプレイコントローラ156を含むことができる。入力デバイス150は、限定はしないが、入力キー、スイッチ、音声プロセッサなどを含む、任意のタイプの入力デバイスを含むことができる。出力デバイス152は、限定はしないが、オーディオ、ビデオ、他の視覚インジケータなどを含む、任意のタイプの出力デバイスを含むことができる。ネットワークインターフェースデバイス154は、ネットワーク158とのデータの交換を可能にするように構成された任意のデバイスとすることができる。ネットワーク158は、限定はしないが、ワイヤードネットワークまたはワイヤレスネットワーク、プライベートネットワークまたは公衆ネットワーク、ローカルエリアネットワーク(LAN)、ワイドローカルエリアネットワーク(WLAN)、およびインターネットを含む、任意のタイプのネットワークとすることができる。ネットワークインターフェースデバイス154は、所望の任意のタイプの通信プロトコルをサポートするように構成され得る。メモリシステム148は、1つまたは複数のメモリユニット160(0〜N)を含むことができる。
【００５２】
マルチコアプロセッサ10はまた、システムバス144を介してディスプレイコントローラ156にアクセスして、1つまたは複数のディスプレイ162に送られる情報を制御するように構成され得る。ディスプレイコントローラ156は、1つまたは複数のビデオプロセッサ164を介して表示されるべき情報をディスプレイ162に送り、ビデオプロセッサ164は、表示されるべき情報を、ディスプレイ162に適したフォーマットとなるように処理する。ディスプレイ162は、限定はしないが、陰極線管(CRT)、液晶ディスプレイ(LCD)、プラズマディスプレイなどを含む、任意のタイプのディスプレイを含むことができる。
【００５３】
本明細書で開示する実施形態に関して説明する様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムは、電子ハードウェアとして、メモリもしくは別のコンピュータ可読媒体に記憶され、プロセッサもしくは他の処理デバイスによって実行される命令として、または両方の組合せとして実施され得ることを、当業者はさらに諒解するであろう。本明細書で説明するアービタ、マスタデバイス、およびスレーブデバイスは、例として、任意の回路、ハードウェア構成要素、集積回路(IC)、またはICチップで用いられ得る。本明細書で開示するメモリは、任意のタイプおよびサイズのメモリとすることができ、所望の任意のタイプの情報を記憶するように構成され得る。この互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップについて、概してそれらの機能に関して上記で説明した。そのような機能がどのように実装されるかは、特定の適用例、設計選択、および/または全体的なシステムに課された設計制約によって決まる。当業者は、説明した機能を特定の適用例ごとに様々な方法で実装し得るが、そのような実装の決定は、本開示の範囲からの逸脱を生じるものと解釈されるべきではない。
【００５４】
本明細書で開示する実施形態に関して説明する様々な例示的な論理ブロック、モジュール、および回路は、プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理デバイス、個別ゲートもしくはトランジスタ論理、個別ハードウェア構成要素、または本明細書で説明する機能を実行するように設計されたそれらの任意の組合せを用いて実装または実行され得る。プロセッサはマイクロプロセッサであり得るが、代替として、プロセッサは任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であり得る。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、DSPとマイクロプロセッサの組合せ、複数のマイクロプロセッサ、DSPコアと連携する1つもしくは複数のマイクロプロセッサ、または任意の他のそのような構成として実装され得る。
【００５５】
本明細書で開示する実施形態は、ハードウェアで具現化されてもよく、ハードウェアに記憶された命令で具現化されてもよく、たとえば、ランダムアクセスメモリ(RAM)、フラッシュメモリ、読取り専用メモリ(ROM)、電気的プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、または当技術分野で知られている任意の他の形態のコンピュータ可読媒体内に存在し得る。例示的な記憶媒体は、プロセッサが記憶媒体から情報を読み取り、記憶媒体に情報を書き込むことができるように、プロセッサに結合される。代替として、記憶媒体は、プロセッサと一体化され得る。プロセッサおよび記憶媒体は、ASIC内に存在し得る。ASICは、リモート局内に存在し得る。代替として、プロセッサおよび記憶媒体は、リモート局、基地局、またはサーバ内に個別構成要素として存在し得る。
【００５６】
本明細書の例示的な実施形態のいずれかで説明した動作ステップは、例および考察を提供するために説明したものであることにも留意されたい。説明した動作は、例示された順序以外の多くの異なる順序で実行されてもよい。さらに、単一の動作ステップにおいて説明した動作は、実際にはいくつかの異なるステップにおいて実行されてもよい。加えて、例示的な実施形態で説明した1つまたは複数の動作ステップは、組み合わされてもよい。フローチャート図に示す動作ステップは、当業者に容易に明らかとなるような多くの異なる修正を受けてもよいことを理解されたい。情報および信号は、様々な異なる技術および技法のいずれかを使用して表され得ることも、当業者には理解されよう。たとえば、上記の説明全体にわたって言及され得るデータ、命令、コマンド、情報、信号、ビット、シンボル、およびチップは、電圧、電流、電磁波、磁場もしくは磁性粒子、光場もしくは光学粒子、またはそれらの任意の組合せによって表され得る。
【００５７】
本開示の先の説明は、いかなる当業者も本開示を作製または使用できるようにするために提供される。本開示に対する様々な修正が当業者には容易に明らかになり、本明細書で定義する一般原理は、本開示の趣旨または範囲から逸脱することなく、他の変形形態に適用され得る。したがって、本開示は、本明細書で説明する例および設計に限定されるものではなく、本明細書で開示する原理および新規の特徴に合致する最も広い範囲を与えられるべきである。
【符号の説明】
【００５８】
10  マルチコアプロセッサ
12  命令処理回路
14  プロセッサ以外の構成要素
16  システムバス
18(0)、18(Z)  プロセッサコア
20(0)、20(X)  ハードウェアスレッド
22(0)、22(Y)  ハードウェアスレッド
24  レジスタ
26  レジスタ
28  レジスタ
30  レジスタ
32  共有メモリ
34  ハードウェアFIFOキュー
36  命令ストリーム
38  命令
40  命令
42  命令、Enqueue命令、第1の命令
44  命令
46  命令ストリーム
48  命令
50  命令
52  命令、Dequeue命令、第2の命令
54  命令
56  要求
68  ターゲットアドレス
70  レジスタマスク
72  識別子
74  ターゲットアドレス
76  レジスタ識別情報
78  レジスタコンテンツ
112  命令ストリーム
114  命令、LOAD命令、第1のLOAD命令
116  命令、LOAD命令
118  命令、LOAD命令
120  命令、CONTINUE命令
122  命令、DISPATCH命令
124  命令
126  命令ストリーム
128  命令、DISPATCH命令
130  命令
132  命令、LOAD命令
134  命令、CONTINUE命令
136  要求
138  要求
140  プロセッサベースのシステム
142  キャッシュメモリ
144  システムバス
146  メモリコントローラ
148  メモリシステム
150  入力デバイス
152  出力デバイス
154  ネットワークインターフェースデバイス
156  ディスプレイコントローラ
158  ネットワーク
160(0〜N)  メモリユニット
162  ディスプレイ
164  ビデオプロセッサ
【図１】
2016535887.tif 000003
【図２】
2016535887.tif 000004
【図３】
2016535887.tif 000005
【図４】
2016535887.tif 000006
【図５】
2016535887.tif 000007
【図６】
2016535887.tif 000008
【図７】
2016535887.tif 000009
【図８】
2016535887.tif 000010
【手続補正書】
【提出日】平成28年5月6日(2016.5.6)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
並行関数の効率的なハードウェアディスパッチを提供するマルチコアプロセッサであって、
複数のハードウェアスレッドを備える複数の処理コアと、
前記複数の処理コアに通信可能に結合されたハードウェア先入れ先出し(FIFO)キューと、
前記複数のハードウェアスレッドのうちの第1のハードウェアスレッドにおいて、プログラム制御の並行転送を要求する動作を示す第1の命令を検出し、
前記プログラム制御の並行転送に対する要求を前記ハードウェアFIFOキューにエンキューし、
前記複数のハードウェアスレッドのうちの第2のハードウェアスレッドにおいて、前記ハードウェアFIFOキューにおける前記プログラム制御の並行転送に対する前記要求をディスパッチする動作を示す第2の命令を検出し、
前記複数のハードウェアスレッドのうちの前記第2のハードウェアスレッドにおける前記第2の命令を検出したことに応答して、前記プログラム制御の並行転送に対する前記要求を前記ハードウェアFIFOキューからデキューし、
前記第2のハードウェアスレッドにおいて、前記プログラム制御の並行転送を実行する
ように構成された命令処理回路と
を備えるマルチコアプロセッサ。
【請求項２】
前記命令処理回路が、前記第1のハードウェアスレッドの1つまたは複数のレジスタに対応する1つまたは複数のレジスタ識別情報、および前記1つまたは複数のレジスタのそれぞれのレジスタのレジスタコンテンツを前記要求に含めることによって、前記プログラム制御の並行転送に対する前記要求をエンキューするように構成される、請求項1に記載のマルチコアプロセッサ。
【請求項３】
前記命令処理回路が、
前記要求に含まれる前記1つまたは複数のレジスタの前記それぞれのレジスタの前記レジスタコンテンツを取り出し、
前記プログラム制御の並行転送を実行する前に、前記1つまたは複数のレジスタの前記それぞれのレジスタの前記レジスタコンテンツを前記第2のハードウェアスレッドの対応する1つまたは複数のレジスタに復元する
ことによって、前記プログラム制御の並行転送に対する前記要求をデキューするように構成される、請求項2に記載のマルチコアプロセッサ。
【請求項４】
前記命令処理回路が、ターゲットハードウェアスレッドの識別子を前記要求に含めることによって、前記プログラム制御の並行転送に対する前記要求をエンキューするように構成される、請求項1に記載のマルチコアプロセッサ。
【請求項５】
前記命令処理回路が、前記要求に含まれる前記ターゲットハードウェアスレッドの前記識別子は前記第2のハードウェアスレッドを前記ターゲットハードウェアスレッドとして識別すると判断することによって、前記プログラム制御の並行転送に対する前記要求をデキューするように構成される、請求項4に記載のマルチコアプロセッサ。
【請求項６】
前記命令処理回路が、
前記プログラム制御の並行転送に対する前記要求が正常にエンキューされたかどうかを判断し、
前記プログラム制御の並行転送に対する前記要求が正常にエンキューされなかったと判断したことに応答して、中断を生じる
ようにさらに構成される、請求項1に記載のマルチコアプロセッサ。
【請求項７】
集積回路に組み込まれる、請求項1に記載のマルチコアプロセッサ。
【請求項８】
セットトップボックス、エンターテインメントユニット、ナビゲーションデバイス、通信デバイス、固定ロケーションデータユニット、モバイルロケーションデータユニット、モバイルフォン、セルラーフォン、コンピュータ、ポータブルコンピュータ、デスクトップコンピュータ、携帯情報端末(PDA)、モニタ、コンピュータモニタ、テレビジョン、チューナー、ラジオ、衛星ラジオ、音楽プレーヤ、デジタル音楽プレーヤ、ポータブル音楽プレーヤ、デジタルビデオプレーヤ、ビデオプレーヤ、デジタルビデオディスク(DVD)プレーヤ、およびポータブルデジタルビデオプレーヤからなる群から選択されるデバイスに組み込まれる、請求項1に記載のマルチコアプロセッサ。
【請求項９】
並行関数の効率的なハードウェアディスパッチのための方法であって、
マルチコアプロセッサの第1のハードウェアスレッドにおいて、プログラム制御の並行転送を要求する動作を示す第1の命令を検出するステップと、
前記プログラム制御の並行転送に対する要求をハードウェア先入れ先出し(FIFO)キューにエンキューするステップと、
前記マルチコアプロセッサの第2のハードウェアスレッドにおいて、前記ハードウェアFIFOキューにおける前記プログラム制御の並行転送に対する前記要求をディスパッチする動作を示す第2の命令を検出するステップと、
前記第2のハードウェアスレッドにおける前記第2の命令を検出したことに応答して、前記プログラム制御の並行転送に対する前記要求を前記ハードウェアFIFOキューからデキューするステップと、
前記第2のハードウェアスレッドにおいて、前記プログラム制御の並行転送を実行するステップと
を備える方法。
【請求項１０】
前記プログラム制御の並行転送に対する前記要求をエンキューするステップが、前記第1のハードウェアスレッドの1つまたは複数のレジスタに対応する1つまたは複数のレジスタ識別情報、および前記1つまたは複数のレジスタのそれぞれのレジスタのレジスタコンテンツを前記要求に含めるステップを備える、請求項9に記載の方法。
【請求項１１】
前記プログラム制御の並行転送に対する前記要求をデキューするステップが、
前記要求に含まれる前記1つまたは複数のレジスタの前記それぞれのレジスタの前記レジスタコンテンツを取り出すステップと、
前記プログラム制御の並行転送を実行する前に、前記1つまたは複数のレジスタの前記それぞれのレジスタの前記レジスタコンテンツを前記第2のハードウェアスレッドの対応する1つまたは複数のレジスタに復元するステップと
を備える、請求項10に記載の方法。
【請求項１２】
前記プログラム制御の並行転送に対する前記要求をエンキューするステップが、ターゲットハードウェアスレッドの識別子を前記要求に含めるステップを備える、請求項9に記載の方法。
【請求項１３】
前記プログラム制御の並行転送に対する前記要求をデキューするステップが、前記要求に含まれる前記ターゲットハードウェアスレッドの前記識別子は前記第2のハードウェアスレッドを前記ターゲットハードウェアスレッドとして識別すると判断するステップを備える、請求項12に記載の方法。
【請求項１４】
前記プログラム制御の並行転送に対する前記要求が正常にエンキューされたかどうかを判断するステップと、
前記プログラム制御の並行転送に対する前記要求が正常にエンキューされなかったと判断したことに応答して、中断を生じるステップと
をさらに備える、請求項9に記載の方法。
【請求項１５】
実行されると、プロセッサに
マルチコアプロセッサの第1のハードウェアスレッドにおいて、プログラム制御の並行転送を要求する動作を示す第1の命令を検出させ、
前記プログラム制御の並行転送に対する要求をハードウェア先入れ先出し(FIFO)キューにエンキューさせ、
前記マルチコアプロセッサの第2のハードウェアスレッドにおいて、前記ハードウェアFIFOキューにおける前記プログラム制御の並行転送に対する前記要求をディスパッチする動作を示す第2の命令を検出させ、
前記第2のハードウェアスレッドにおける前記第2の命令を検出したことに応答して、前記プログラム制御の並行転送に対する前記要求を前記ハードウェアFIFOキューからデキューさせ、
前記第2のハードウェアスレッドにおいて、前記プログラム制御の並行転送を実行させる
コンピュータ実行可能命令を記憶した非一時的コンピュータ可読媒体。
【請求項１６】
前記第1のハードウェアスレッドの1つまたは複数のレジスタに対応する1つまたは複数のレジスタ識別情報、および前記1つまたは複数のレジスタのそれぞれのレジスタのレジスタコンテンツを前記要求に含めることによって、さらに前記プロセッサに前記プログラム制御の並行転送に対する前記要求をエンキューさせる前記コンピュータ実行可能命令を記憶した、請求項15に記載の非一時的コンピュータ可読媒体。
【請求項１７】
前記要求に含まれる前記1つまたは複数のレジスタの前記それぞれのレジスタの前記レジスタコンテンツを取り出し、
前記プログラム制御の並行転送を実行する前に、前記1つまたは複数のレジスタの前記それぞれのレジスタの前記レジスタコンテンツを前記第2のハードウェアスレッドの対応する1つまたは複数のレジスタに復元する
ことによって、さらに前記プロセッサに前記プログラム制御の並行転送に対する前記要求をデキューさせる前記コンピュータ実行可能命令を記憶した、請求項16に記載の非一時的コンピュータ可読媒体。
【請求項１８】
ターゲットハードウェアスレッドの識別子を前記要求に含めることによって、さらに前記プロセッサに前記プログラム制御の並行転送に対する前記要求をエンキューさせる前記コンピュータ実行可能命令を記憶した、請求項17に記載の非一時的コンピュータ可読媒体。
【請求項１９】
前記要求に含まれる前記ターゲットハードウェアスレッドの前記識別子は前記第2のハードウェアスレッドを前記ターゲットハードウェアスレッドとして識別すると判断することによって、さらに前記プロセッサに前記プログラム制御の並行転送に対する前記要求をデキューさせる前記コンピュータ実行可能命令を記憶した、請求項18に記載の非一時的コンピュータ可読媒体。
【国際調査報告】
2016535887.tif 000011
2016535887.tif 000012