(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-12-13
(45)【発行日】2022-12-21
(54)【発明の名称】スレッド粒度を提供するマルチスレッドプロセッサ
(51)【国際特許分類】
G06F 9/46 20060101AFI20221214BHJP
G06F 9/34 20060101ALI20221214BHJP
【FI】
G06F9/46 410
G06F9/34 330
(21)【出願番号】P 2022516175
(86)(22)【出願日】2020-09-11
(86)【国際出願番号】 US2020050587
(87)【国際公開番号】W WO2021051022
(87)【国際公開日】2021-03-18
【審査請求日】2022-05-10
(32)【優先日】2019-09-11
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2020-08-03
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】522096695
【氏名又は名称】レッドパイン シグナルズ インコーポレイティド
(74)【代理人】
【識別番号】100099759
【氏名又は名称】青木 篤
(74)【代理人】
【識別番号】100123582
【氏名又は名称】三橋 真二
(74)【代理人】
【識別番号】100092624
【氏名又は名称】鶴田 準一
(74)【代理人】
【識別番号】100114018
【氏名又は名称】南山 知広
(74)【代理人】
【識別番号】100153729
【氏名又は名称】森本 有一
(72)【発明者】
【氏名】スッバ レディ カラム
(72)【発明者】
【氏名】パーサ サラシー ムラリ
(72)【発明者】
【氏名】ベンカット マテラ
(72)【発明者】
【氏名】ベンカタ シバ プラサド プラガム
【審査官】坂庭 剛史
(56)【参考文献】
【文献】特表2003-523561(JP,A)
【文献】特開2006-040141(JP,A)
【文献】特開2007-058331(JP,A)
【文献】特開2008-015562(JP,A)
【文献】特開2010-086131(JP,A)
【文献】米国特許出願公開第2006/0066623(US,A1)
【文献】米国特許出願公開第2010/0293347(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/46
G06F 9/34
(57)【特許請求の範囲】
【請求項1】
複数のスレッド上で動作するマルチスレッドプロセッサであって、各スレッドはスレッド_IDによって識別され、前記マルチスレッドプロセッサは、
プログラム可能なエントリのシーケンスを有するスレッドマップレジスタであって、各エントリはスレッド_IDを示し、前記スレッドマップレジスタへの各要求に応答して後続のエントリのスレッド_IDを提供する前記スレッドマップレジスタと、
各処理ステージが演算入力を受け取り、演算結果及びコンテキストを生成して、前記演算結果及びコンテキストを後続ステージに転送する複数の順次処理ステージと、を備え、
前記順次処理ステージの少なくとも1つは、命令メモリから命令を受け取るプリフェッチステージであり、前記プリフェッチステージは前記スレッドマップレジスタへ要求し現在のスレッド_IDを受け取り、前記プリフェッチステージは前記現在のスレッド_IDに関連付けられたプログラムカウンタを選択し、前記プリフェッチステージは前記選択されたプログラムカウンタに関連付けられた命令を取得し、
前記順次処理ステージの少なくとも1つはレジスタファイルを修正するように動作するデコード/実行ステージであり、前記デコード/実行ステージは複数の前記レジスタファイルに結合され、各レジスタファイルは特定のスレッド_IDに関連付けられ、
少なくとも2つのスレッド_ID値が、各スレッド_ID値に対して固有の割り込み入力と関連付けられ、前記固有の割り込み入力の各々は、前記関連付けられたスレッド_ID値のみの実行を変化させ、その他のスレッド_ID値の実行は変化させない、マルチスレッドプロセッサ。
【請求項2】
前記複数の順次処理ステージは、前記プリフェッチステージ、フェッチステージ、デコードステージ、前記
デコード/実行ステージ、命令実行ステージ、ロードストアステージ、及び、前記
デコード/実行ステージに結合されたライトバックステージの順に備える、請求項1に記載のマルチスレッドプロセッサ。
【請求項3】
前記ロードストアステージ及び前記命令実行ステージは、前記
デコード/実行ステージに結果を送る、請求項2に記載のマルチスレッドプロセッサ。
【請求項4】
前記スレッドマップレジスタの複数のエントリは一意なスレッド_ID値の数よりも多い、請求項1に記載のマルチスレッドプロセッサ。
【請求項5】
前記順次処理ステージのうちの少なくとも1つは、外部メモリに結合されたロードストアである、請求項1に記載のマルチスレッドプロセッサ。
【請求項6】
前記外部メモリはストール状態になることがあり、前記外部メモリへの操作に関連するスレッド_ID値は前記スレッドマップレジスタ中で非連続的位置に配置される、請求項5に記載のマルチスレッドプロセッサ。
【請求項7】
スレッド_ID値のシーケンスとしてアサートされる値の正規線形配列を有するスレッドマップレジスタと、
前記スレッドマップレジスタに結合され、前記アサートされたスレッド_ID値に基づいて特定のプログラムカウンタを選択するように動作するプログラムカウンタアレイと、を備えるマルチスレッドプロセッサであって、
前記選択されたプログラムカウンタに対応する命令は、スレッド_IDに関連付けられたプログラムカウンタに従って命令メモリから命令を取得するように動作するプリフェッチステージ、命令フェッチステージ、命令デコードステージ、命令
デコード/実行ステージ、命令実行ステージ、ロードストアステージ、及び、ライトバックステージを連続的に有するパイプラインステージに送られ、
前記ライトバックステージ、前記ロードストアステージ、及び前記
命令実行ステージはそれぞれ結果を
デコード/実行ステージに送り返し、
前記
デコード/実行ステージは複数のレジスタファイルに結合され、各レジスタファイルは前記命令デコードステージによって提供される入力値に関連付けられた特定のスレッド_IDに関連付けられ、
外部インタフェースが前記ロードストアステージに結合され、前記外部インタフェースは、ストール間隔を有する少なくとも1つのスレッドに関連付けられ、前記スレッドに関連付けられた前記スレッドマップレジスタ内のスレッド_ID値のシーケンスは、前記少なくとも1つのスレッドの前記ストール間隔よりも大きいサイクル
の数だけ互いに分離したストール間隔を有する、マルチスレッドプロセッサ。
【請求項8】
前記スレッドマップレジスタ中の前記スレッド_ID値のシーケンスの少なくとも1つの前記スレッド_ID値が、前記スレッド_ID値のシーケンスにおいて互いに隣接して配置されていない、請求項7に記載のマルチスレッドプロセッサ。
【請求項9】
スレッドマップレジスタの値の前記
正規線形配列の前記
サイクルの間に、より多くの又はより少ない数の特定のスレッド_ID値を割り当てるように前記スレッドマップレジスタが動的に変更される、請求項7に記載のマルチスレッドプロセッサ。
【請求項10】
各スレッド_IDは特定の割り込み入力に関連付けられ、前記特定の割り込み入力がアサートされると、前記特定の割り込み入力はスレッド割り込みルーチンに関連する命令を前記割り込みルーチンが完了するまで実行させる、請求項7に記載のマルチスレッドプロセッサ。
【請求項11】
アサートされた前記特定の割り込み入力に関連する前記スレッドがスレッド割り込みルーチンを実行する間、割り込み入力がアサートされていないスレッドに関連する命令は実行を継続する、請求項10に記載のマルチスレッドプロセッサ。
【請求項12】
前記ロードストアステージは外部インタフェースに結合される、請求項7に記載のマルチスレッドプロセッサ。
【請求項13】
前記外部インタフェースは、Serial Peripheral Interface(SPI)インタフェース、Peripheral Component Interconnect(PCI)インタフェース、若しくは、読み込む又は書き込むアドレス及び日付の配信を含むインタフェースのうちの少なくとも1つである、請求項12に記載のマルチスレッドプロセッサ。
【請求項14】
スレッド割り当てに粒度を提供するマルチスレッドプロセッサであって、前記マルチスレッドプロセッサは複数の独立したスレッドの命令を実行するように動作し、前記マルチスレッドプロセッサは、
プログラム可能なスレッド_ID値のシーケンスを有するスレッドマップレジスタであって、複数の独立したスレッドの各々が特定のスレッド_IDに関連付けられ、前記スレッドマップレジスタはプログラム可能な順序でスレッド_ID値を出力するようにプログラム可能であり、各特定のスレッド_IDは前記スレッド_ID値のシーケンス内の一つ以上の位置に関連付けられる前記スレッドマップレジスタと、
各プログラムカウンタが前記独立したスレッドのうちの特定の1つ及び関連するスレッド_IDに関連付けられる、複数のプログラムカウンタと、
前記スレッドマップレジスタの前記スレッド_ID値のシーケンスから現在のスレッド_ID値を受け取るように動作するプリフェッチステージであって、前記現在のスレッド_ID値に関連付けられたプログラムカウンタを使用して命令メモリからの命令を要求する前記プリフェッチステージと、
前記プリフェッチステージによって要求された前記命令に対して演算を行う一連のパイプラインステージと、
外部インタフェースに結合された少なくとも1つのパイプラインステージであって、前記外部インタフェースは、スレッドストール間隔を有する少なくとも1つのスレッドに関連付けられ、スレッドに関連付けられた前記スレッドマップレジスタ内のスレッド_ID値の前記シーケンスは、前記スレッドストール間隔よりも大きいサイクル数だけ他のスレッド_ID値から分離したスレッドストール間隔を有する、少なくとも1つのパイプラインステージと、を備えるマルチスレッドプロセッサ。
【請求項15】
前記一連のパイプラインステージは、前記命令を受け取るフェッチステージを備え、前記フェッチステージは、デコードステージ、
デコード/実行ステージ、ロードストアステージ、及び、前記
デコード/実行ステージに結合されたライトバックステージに順に結合し、前記パイプラインステージの各々が結果及びスレッド_IDを後続ステージに送る、請求項14に記載のマルチスレッドプロセッサ。
【請求項16】
デコード/実行ステージは複数のレジスタファイルを含み、各レジスタファイルは前記
デコード/実行ステージが受け取ったスレッド_IDに従って選択される、請求項14に記載のマルチスレッドプロセッサ。
【請求項17】
複数のスレッド上で動作するマルチスレッドプロセッサであって、各スレッドはスレッド_IDによって識別され、前記マルチスレッドプロセッサは、
プログラム可能なエントリのシーケンスを有するスレッドマップレジスタであって、各エントリはスレッド_IDを示し、前記スレッドマップレジスタへの各要求に応答して後続のエントリのスレッド_IDを提供する前記スレッドマップレジスタと、
各処理ステージが演算入力を受け取り、演算結果及びコンテキストを生成して、前記演算結果及びコンテキストを後続ステージに転送する複数の順次処理ステージと、を備え、
前記順次処理ステージの少なくとも1つは、命令メモリから命令を受け取るプリフェッチステージであり、前記プリフェッチステージは前記スレッドマップレジスタへ要求し現在のスレッド_IDを受け取り、前記プリフェッチステージは前記現在のスレッド_IDに関連付けられたプログラムカウンタを選択し、前記プリフェッチステージは前記選択されたプログラムカウンタに関連付けられた命令を取得し、
前記順次処理ステージの少なくとも1つはレジスタファイルを修正するように動作するデコード/実行ステージであり、前記デコード/実行ステージは複数の前記レジスタファイルに結合され、各レジスタファイルは特定のスレッド_IDに関連付けられ、
前記順次処理ステージのうちの少なくとも1つは、外部メモリに結合されたロードストアであり、前記外部メモリはストール状態になることがあり、前記外部メモリへの操作に関連するスレッド_ID値は前記スレッドマップレジスタ中で非連続的位置に配置される、マルチスレッドプロセッサ。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、マルチスレッドプロセッサに関する。より詳細には、本発明は、中央処理装置(CPU)の処理能力の可変割合が各スレッドに動的に割り当てられるように、粒度が高く動的なスレッド割り当て特性を有するマルチスレッドプロセッサに関する。
【背景技術】
【0002】
マルチスレッドプロセッサは、各々が独自の個別のスレッドで動作する複数のプロセスをシステムが実行する場合に利用される。従来技術のマルチスレッドプロセッサの例及び使用例は、米国特許第7761688号明細書、第7657683号明細書、及び、第8396063号明細書に記載される。例示的に専用の2スレッドプロセッサを使用して無線通信を行うよう動作する典型的なアプリケーションプログラムでは、プロセッサは、第1のスレッド上の優先度の高いプログラムの命令の実行と第2のスレッド上の優先度の低いプログラムの命令の実行との間で実行サイクルを交互に行い、交互に実行することで各スレッドにCPU処理能力の50%が割り当てられる。加えて、第1のスレッドが外部周辺機器にアクセスし、データが戻るのを待たなければならないときなどのスレッドストール中に、第2のスレッドは第1のスレッドのストールの影響を受けずに実行を継続し得るという点で、各スレッドへのCPU帯域幅の割り当てが保護される。
【0003】
問題が生じるのは、マルチスレッドプロセッサが帯域幅を不均等に割り当てる必要がある場合、又は、割り当てを動的に変更する必要がある場合である。プロセッサ実行サイクル群を構成する各インターバル中に、インターバル中の各々のスレッドがCPUサイクルの固定割合を受け取るように、各タスクにスレッド使用率の動的割り当てを提供することが望ましい。後続インターバルで、追加のスレッドが追加若しくは削除されてもよく、又は、各スレッドへのCPUサイクルの割り当て割合が変更されてもよい。また、幾つかのスレッドにCPU能力を不均等に割り当て、この割り当てが動的に実行されることが望ましい。
【0004】
また、マルチスレッドプロセッサでは、割り込みの適時処理も問題となる。割り込み処理において、直前の特定の割り込み処理が完了できるように新しい割り込みは無効化される。次に受信された割り込みは、直前の割り込み処理が完了し、割り込みのマスクが解除されるまで認識されない。直前の割り込み処理のタスクが未完了の間に到着した新たな割り込みを適時に認識する割り込み処理の提供が望まれる。
【0005】
本発明の第1の目的は、一連のカスケード接続されたステージを有するマルチスレッドスーパースカラプロセッサである。各カスケード接続されたステージは演算結果を後続ステージに提供し、カスケード接続されたステージの第1のステージは、スレッド識別子及び関連するプログラムカウンタで参照されるプログラムメモリアドレスから命令を受け取り、スレッド識別子はスレッド識別子のシーケンスを含むスレッドマップレジスタによって提供される。各スレッド識別子は、プログラムカウンタ及びレジスタファイルの何れが特定のプロセッサステージで使用されるかを示し、スレッド識別子及びスレッド毎のプログラムカウンタを使用して選択された特定の命令は、命令フェッチステージ、命令デコードステージ、デコード/実行ステージ、実行ステージ、ロード/ストアステージ、及びライトバックステージを備えるパイプラインステージのシーケンスに提供され、デコード/実行ステージはスレッド識別子により選択されたレジスタファイルに結合される(coupled)。
【0006】
本発明の第2の目的は、各割り込みプロセスが特定のスレッドに関連付けられた複数の割り込みプロセスを処理するよう動作可能なマルチスレッドスーパースカラプロセッサである。
【0007】
本発明の第3の目的は、実行するスレッドのシーケンスを動的に識別するように再プログラム可能なスレッドマップレジスタを有するマルチスレッドスーパースカラプロセッサである。各スレッドはプログラムカウンタレジスタ及びレジスタファイルと関連付けられ、プログラムカウンタレジスタ及びレジスタファイルは、プリフェッチステージ、命令フェッチステージ、命令デコードステージ、デコード/実行ステージ、実行ステージ、ロードストアステージ、及び任意でライトバックステージからなる連続したステージのうち少なくとも1つに結合される。
【0008】
本発明の第4の目的は、第1のプロトコルプロセスから第2のプロトコルプロセスへのスレッド帯域幅の動的割り当てであり、各プロトコルプロセスは別々のインタフェースを介して到着するパケットを処理し、各スレッドに粒度の高いサイクル割り当て制御を行うマルチスレッドプロセッサの異なるスレッドによって処理される。
【0009】
本発明の第5の目的は、Bluetooth(登録商標)及びWLANなどの互いに無関係な通信プロトコルの同時処理を行う通信インタフェースであって、Bluetoothインタフェースは、Bluetoothプロトコルの非アクティブ間隙によって隔てられた規則的間隔の間アクティブであり、Bluetoothプロトコルの非アクティブ間隙はWLAN通信に用いられる。通信プロトコルはマルチスレッドプロセッサ上で動作し、Bluetoothのアクティブ間隔中はより多数のスレッドサイクルをBluetoothプロトコルに動的に割り当て、WLANのアクティブ間隔中はより多数のスレッドサイクルをWLANプロトコルに動的に割り当てる。
【発明の概要】
【0010】
本発明の一例では、スーパースカラプロセッサは、プリフェッチステージ、フェッチステージ、デコードステージ、デコード/実行ステージ、実行ステージ、ロード/ストアステージ、及び、任意でライトバックステージを順に有する。プリフェッチステージは、スレッドマップレジスタの指示の下、スレッド毎のプログラムカウンタが提供する命令を受け取る。スレッドマップレジスタは、識別されたスレッドを選択するため、スレッド毎のプログラムカウンタにインデックスする正規(canonical)連続(succession)のスレッド識別子を提供する。選択されたプログラムカウンタは命令メモリから命令を受け取るようプリフェッチステージに指示する。デコード/実行ステージはレジスタファイルに結合され、スレッド固有のレジスタセットがアドレス指定されるように、その時点でデコード/実行ステージが実行中のスレッドに関連付けられたレジスタファイルが選択される。
【0011】
スレッドマップレジスタは実行中の特定のスレッドを識別する。スレッドマップレジスタは、スレッド毎のプログラムカウンタの制限数及びスレッド毎のレジスタファイルの制限数に応じて、任意の数の異なるスレッドを参照し得る。例えば、スレッドマップレジスタは、10のエントリを含み、スレッド毎のプログラムカウンタ及びスレッド毎のレジスタファイルの数は4であってもよい。この場合、スレッド_0が1サイクルを受け取り、スレッド_1が4サイクルを受け取り、スレッド_2が3サイクルを受け取り、スレッド_3が2サイクルを受け取り得るように、4つのスレッドの各々の粒度は10%に指定されてもよい。スレッドレジスタは、正規に実行される[0,1,1,1,1,2,2,2,3,3]の何れかを指定し得るがこれに限られない。スレッドレジスタは、スレッド番号又はスレッドの割り当てを変更するために更新されてもよく、例えば、スレッドレジスタに新しい値[0,0,0,0,1,2,2,2,3,3]を書き込むことによって、スレッド_0を拡張し、スレッド_1を縮小することが可能である。
【0012】
本発明の別の例では、スーパースカラマルチスレッドプロセッサにおいて、各スレッドがそれぞれ独自の割り込みレジスタを有するように、スレッド毎に割り込みマスクが提供される。本発明のこの例では、スレッド_0への割り込みがスレッド_0によってマスクされ、スレッド_1、スレッド_2...スレッド_nなどの他のスレッドはそれぞれのスレッドに指示された割り込みを別々に処理する能力を有するように、各スレッドはそれぞれ独自の割り込み処理を有する。この例のアーキテクチャでは、各スレッドは異なるプロトコルタイプを処理することができ、例えば、無線プロトコルであるWLAN、Bluetooth、及び、Zigbee(登録商標)のそれぞれのパケット処理は、共通のパケットバッファインタフェースを有するマルチプロトコルベースバンドプロセッサのプロセッサインタフェースに結合されたパケットバッファで処理することができる。この例では、マルチスレッドプロセッサは、割り込み処理を使用してそれぞれ適時に完了されなければならない確認応答要求及び再送要求を処理し、個別の割り込みの各プロトコルタイプは個別のスレッドに専用であり、スレッドレジスタは必要に応じて書き換えられてより多数のスレッドサイクルを適宜割り当てることができる。
【図面の簡単な説明】
【0013】
【
図1】
図1は、スレッド毎のプログラムカウンタ及びスレッド毎のレジスタファイルを有するマルチスレッドスーパースカラプロセッサのブロック図を示す。
【
図1A】
図1Aは、スレッド毎のプログラムカウンタの編成のブロック図を示す。
【
図1B】
図1Bは、スレッドマップレジスタの一例のブロック図を示す。
【
図2A】
図2Aは、スレッドが連続マッピングされた所与のスレッド割り当てのスレッドマップレジスタの一例であるスレッドマップレジスタを示す。
【
図2B】
図2Bは、
図2Aのスレッドが非連続マッピングされたスレッドマップレジスタを示す。
【
図3】
図3は、
図1のマルチスレッドプロセッサのスレッド毎の割り込みコントローラ及び処理を示す。
【
図4】
図4は、別々のCPUを使用するBluetoothプロセッサ及びWLANプロセッサのブロック図を示す。
【
図5】
図5は、マルチスレッドプロセッサを使用するBluetoothプロセッサ及びWLANプロセッサのブロック図を示す。
【
図5A】
図5Aは、マルチスレッドプロセッサに対するプログラムコード及び関連するタスクの割り当て例を示す。
【
図5B】
図5Bは、パケットバッファに対するRAMの割り当て例を示す。
【発明を実施するための形態】
【0014】
図1は、プレフェッチステージ102、フェッチステージ104、デコードステージ106、デコード/実行ステージ108、実行ステージ110、ロード/ストアステージ112、及び、任意のライトバックステージ114からなる順次ステージを有するスーパースカラプロセッサ100に関する本発明の一例を示す。プリフェッチステージ102に送られる命令は、個別のクロックサイクルで、次のステージに必要な任意のコンテキスト及び中間結果を受け継ぎながら後続の各ステージによって順次実行される。本発明の一例では、スレッドマップレジスタ103は、スレッド毎のプログラムカウンタ105に送るためのスレッド識別子(スレッド_ID)の正規シーケンスを提供し、スレッド毎のプログラムカウンタ105は、関連する現在のプログラムカウンタ105のアドレスをプリフェッチステージ102に提供する。プリフェッチステージ102は命令メモリ116から関連する命令を取得し、それを次のクロックサイクルでフェッチステージ104に送る。デコード/実行ステージ108は、デコード/実行ステージ108からの読み出し要求に応答するスレッド毎のレジスタファイル118、又は、ステージ114からのライトバック動作に結合され、各々はスレッド固有であり、したがって、読み出される又はレジスタファイル118に書き込まれるデータは、それを要求する又は提供するスレッド_IDに対応する。
【0015】
図1Aは、スレッド_0用のPC_T0、スレッド_1用のPC_T1、スレッド_n用のPC_Tnといったスレッド毎のプログラムカウンタ105を示す。各スレッドに1つのプログラムカウンタが使用される。
【0016】
図1Bはスレッドマップレジスタ103を示し、正規で実行されるスレッド識別子T0130~Tn132のシーケンスを含む。スレッドの数(各スレッドは、特定のステージのCPUサイクルで実行される個別のプロセスである)は、レジスタファイル118の数及びプログラムカウンタ105の数によって制限されるmであり、一方、スレッドマップレジスタ103は、CPU帯域幅をスレッドに均等に割り当てるためにm個のスレッドをサポートしてもよく、又は、スレッド制御を高粒度にするためにn>mであるn個のタイムスロットを提供してもよい。例えば、16個のエントリを有するスレッドマップは4つのスレッドをサポートしてもよく、各スレッドは利用可能なCPU処理能力の1/16の粒度を有し、残りのスレッドへのCPU処理能力の割り当てに応じて、利用可能なCPU処理能力の0/16~16/16の任意の粒度をサポートする。
【0017】
図2Aは、正規サイクル長204に亘って16個のエントリを有する例示的なスレッドマップレジスタ103を示し、スレッドマップレジスタは16エントリの終端で正規に繰り返し得る。
図2Aの本例は4つのスレッド及び順次マッピングについて示し、例えば、スレッドが外部リソースからの結果の受信に遅延があり順次サイクルを実行することができない場合などのスレッドストールのない用途に適し得る。n=16のスレッドマップレジスタ位置について、スレッドマップレジスタは、各タスクにプロセッサアプリケーションの1/16の解像度を提供し、プロセッサはスレッドマップレジスタの位置毎に1つのスレッドで使用され得るが、この場合、各スレッドに固定された時間割り当てを提供する。好ましい使用法では、スレッド識別子の数mは、スレッドマップレジスタの位置の数nよりも少なく、これによって、タスクに対する特定のスレッドの割り当ては、粒度p/nを有し得る。ここで、nは典型的には固定であり、pは特定のスレッドに割り当てられるサイクル数としてプログラム可能で、各スレッドに演算資源をより多く又はより少なく割り当てるために0からnまで変化することが可能である。本発明の別の例では、スレッドマップレジスタの長さnは、タスクサイクル管理においてより大きな粒度を提供するように、又は、より多数のスレッドをサポートするようにプログラム可能であってもよい。
【0018】
図2Aは、16位置のスレッドマップレジスタ202においてスレッド0、1、2、及び、3(それぞれT0、T1、T2、T3)の4スレッドを有するスレッドマップレジスタの例を示し、それぞれのスレッドに対してプロセッサ能力の12.5%、25%、50%、及び、12.5%が割り当てられる。特定のスレッドが外部リソースの応答を待たなければならないスレッドストールと言う問題が発生する。
図2Aの例では、デコード/実行ステージ108は、図示されていない外部共有メモリ又はメディアアクセスコントローラ(MAC)を読み取ることを必要とし、外部リソースの読み取りの遅延に4クロックサイクルを必要とし得る。
図2Aに示されるスレッド割り当てで、外部リソースにアクセスするスレッドがT0及びT3である場合、或いは、デバイスへの読み書きの遅延の影響を受ける場合、T0は動作208でスレッドストール状態になり、T3はサイクル210でスレッドストール214状態になる。
図2Aに示されるスレッド識別子の編成では、スレッドストールの度に、本来利用可能なCPUサイクルが失われることになる。
【0019】
図2Bは、
図2Aと同じ時間配分を用いるが、
図2Aに示されたのと同じスレッドストールの場合についてスレッドシーケンス220を並べ替えた代替マッピングを示す。T0を位置0及び7に、T3を位置1及び8に配置換えしたことが、
図2Bの編成に反映されている。スレッドストール212が4クロックサイクルであるのに対し、T0スレッドは、6クロックサイクル224より長いスレッドストールに対してのみストールするので、
図2Aの配置では1つのみであるが、
図2Bの編成では両方のT0の発生が実行されることになる。同様に、
図2Aで2つ目のT3サイクルを保留させるT3ストールは、スレッドストールが継続時間226を持たない限り、
図2Bでは発生しない。
【0020】
図3は、本発明の別の態様であり、無線信号処理の一例である。プロセススレッド308は
図1のマルチスレッドプロセッサ上で異なるスレッドとして実行可能であり、マルチスレッドプロセッサはマルチスレッドCPU100の一部であるインタフェース310を有し、各インタフェースは特定のMACに関連付けられる。無線信号は、アンテナ301で受信及び送信される。302によって受信時にベースバンドに変換され、又は、送信時にRFに変調され、マルチプロトコルベースバンドプロセッサ304に提供される。マルチプロトコルMACの特定のインタフェースにパケットが到着すると、特定のスレッドに対する割り込みが割り込みコントローラ306に送信され得る。各割り込みはマルチプロトコルプロセッサで動作する関連プロセス308によってマスク可能である。各プロセスは、関連する割り込みマスク(IM0、IM1、IM2、IM3と示される)を制御することができ、割り込みマスクは割り込みコントローラ306に提供されて、関連プロセスに対する直前の割り込みが完了するまで関連プロセスに新しい割り込みが処理されないように割り込みをマスクする。
【0021】
本発明の割り込みのマルチタスク処理には、従来技術にはない特有の利点がある。従来技術では、スレッド0上の割り込みサービスルーチンが、複数のパケットインタフェースのパケット確認応答を処理し得る。このタスクでは、パケットの受信後、受信バッファを調べてシーケンス内のパケット欠損を検出し、プロセスは受信したパケットに確認応答するか、欠損したパケットについて送信者に再送要求を行う。パケットの確認応答と再送信には重要なタイミングのウィンドウがあるため、パケット受信後に確認応答又は再送信の要求を適時に行うことが重要である。パケット受信後30us以内に再送要求を行う必要があり、第1の再送信タスク0が完了に5usを要し、第2の再送信タスク1が処理と完了に10usを要し、第3の再送信タスク3が処理と完了に5usを要し、1つのプロセスが1つのスレッド上で3つのタスクを処理する場合を考えてみる。この例では、3つのタスクが共通のスレッドで処理され、従来技術と同様に共通の割り込みマスクが使用される。パケットを受信するとスレッド0上のタスク0を処理するプロセスは、他のパケット確認応答によって現在の確認応答の処理が遅くならないよう割り込みをマスクし、これには5usを必要とする。タスク0の処理中にスレッド0のタスク1に関連する2つ目の割り込みが到着した場合、スレッド0はまだタスク0でビジー状態のため、到着後少なくとも5usまでタスク1は処理されない。また、異なるインタフェースにパケットが集中し、タスク1(10usを要する)がタスク0(5usを要する)の完了を待っている間に、5usを要する3つ目のタスク3が到着する可能性もある。タスク0が完了すると割り込みマスクが除去され、タスク1が割り込みを発生させて検出され、割り込みマスクが再びアサートされ、タスク1の処理が完了する。その後、割り込みマスクが解除されタスク2の割り込みがアサートされ、検出される。その後、割り込みマスクが再びアサートされ、タスク2は要求の到着後早くとも15usも後に開始し、必要な再送要求ウィンドウが経過した20us後に要求完了となる。タスク2の完了後に割り込みマスクが解除されるが、タスク2からの再送要求をリモート局が適時に受信できず、再送信プロトコルに失敗した。従来技術では、先のタスク1及び2の処理後にタスク2の待ち時間が遅れるという問題に対する解決策として、より高速なプロセッサを使用している。さらに、マルチコアプロセッサがMACインタフェースを読み出している間、スレッドロックが発生し得るが、これは先に
図2Bで示したようにスレッド識別子を並べ替えることで回避できる可能性がある。この場合、確認応答と再送信のタスクにスレッドサイクルの細かい割り当てが必要になり得るが、3つのタスクをそれぞれ細かい時間割り当ての別々のスレッドに分散させることでインタフェースの読み取り/書き込みの待ち時間を克服し、各スレッドを別々の割り込み及び割り込みマスクに関連付けることによって、割り込みマスクの待ち時間の遅延も克服することができる。
【0022】
各タスクが単一スレッド上で実行され、各タスクが50MIPSを必要とする従来技術では、割り込みを順次処理する際の待ち時間と遅延のため、3つのタスクを正常に処理するには300MIPSの処理能力が必要となるが、
図3の新規の方法では約150MIPSのみを必要とし、これにより、MIPS要求を2倍節約でき、結果として消費電力要件も低減する。
【0023】
図1のマルチプロトコルプロセッサの別の例では、各々の無線プロトコルは別々のスレッドによって処理されてもよい。例えば、WLAN、Bluetooth、及び、Zigbeeを扱うプロセスをそれぞれ独自のスレッド上の別のプロセスで動作させ、それぞれの再送信プロセスをプロトコル毎に別のプロセスで、それぞれ独自のスレッド上で動作させて処理してもよい。
【0024】
本発明の別の例では、スレッドマップレジスタは、分離されたスレッド管理プロセスによって検出されたプロセス要求に従って対話形式で変更されてもよい。各ステージからのコンテキストは
図1の後続ステージに転送されるので、プリフェッチステージ102が確定的なスレッド_ID及び関連するスレッド毎のプログラムカウンタ105を受け取るためのクロック同期要件に従う限り、スレッドマップレジスタへの変更はいつでも行うことができる。
【0025】
図4は、通信システムとデータを交換するためのインタフェース480を備えた、無線ローカルエリアネットワーク(WLAN)とBluetooth(BT)を組み合わせた送受信器の例を示す。各プロトコルで必要なWLANとBTの処理動作は特化され、各プロトコルで応答の適時性が求められるため、インタフェースの種類ごとにCPUが必要になる。各インタフェースに対してCPUが短い待ち時間の処理を要求するため、WLAN及びBTの処理は、
図4に示されるようなシステムアーキテクチャで行われる。
【0026】
図4は、アナログフロントエンドとMAC401を備えるWLANプロセッサがWLAN CPU424に結合され、アナログフロントエンドとMAC450を備えるBTプロセスがBT CPU482に結合されている様子を示す。各WLAN CPU424及びBT CPU482は、それぞれのWLANプロセッサ401及びBTプロセッサ450に関連するソフトウェアプログラムによる即時処理を必要とする割り込み及びイベントのバーストに適時に対応することができる。
【0027】
WLANプロセッサ401において、アンテナ402は、受信信号を低雑音増幅器406につなげ、送信信号を電力増幅器414からつなげるために、送受信スイッチ404に結合される。入力信号は、クロックソース418を使用してベースバンドに混合され408、ローパスフィルタされ410、アナログベースバンド信号はデジタル化され、受信シンボルをデータストリームに復調するADC及びベースバンド複合プロセッサ412で処理されて、シリアルデータインターフェース(SDI)やCPU424などのインタフェースを介してメディアアクセスコントローラ(MAC)422によってレイヤ2パケットに形成される。CPU424は、受信したパケットや送信するパケット、CPU424が実行するプログラムコード、及び、システムがパワーダウンしているときにその他の非永続的な情報を記憶するための関連するRAM(Random Access Memory)428を有する。読み取り専用メモリ(ROM)又はフラッシュメモリ426は、通常、電源投入シーケンス中にフラッシュメモリ/ROMからRAMにダウンロードされるプログラム命令を記憶するために使用される。MAC422は、シリアルデータインターフェース(SDI)などのインタフェース423を介して送信するためのデータを受信し、受信したデータパケットをシーケンス番号とともにCPU424に提供し、これによって、CPU424が欠損データを検出し、再送信を管理し、任意のWLAN認証プロトコルを設定し、カプセル化及びカプセル解除、チャネル管理、パケット集約、並びに、接続管理及び認証などの任意の必要なパケット毎の処理を実行できるようにする。
【0028】
図4Bは、アナログフロント及びBT MACを備える例示的なBluetoothプロセッサ450を示し、アンテナ452、送受信スイッチ454、低雑音増幅器456、ミキサ458、バンドパスフィルタ460、及び、アナログ/デジタル変換器及びベースバンドプロセッサ462と共に同様な動作をする。アナログ/デジタル変換器及びベースバンドプロセッサ462は、ADC/ベースバンドプロセッサ412がWLANの802.11パケットに対して行うようにベースバンドのBluetooth周波数ホッピングパターンをデータストリームに変換する動作を行う。Bluetooth送信チェーンは、ベースバンドプロセッサ及びDAC470、変調クロック源468を用いてベースバンド周波数ホッピングストリームをRFキャリア周波数に変調するミキサ466、及び、変調されたBluetooth周波数ホッピングストリームを送受信スイッチ454につなげる電力増幅器464を含む。BT CPUは、ペアリングを含む各種接続管理を処理する。
【0029】
WLAN MAC422は、SPI(Serial Peripheral Interface)などのデジタルインタフェース423を介してWLAN CPU424に結合され、BT MAC480はデジタルインタフェース481を介してBT CPU482に結合される。これにより、
図4のアーキテクチャでは、WLAN及びBlutoothの各プロセスがそれぞれ動作するCPU処理能力を個別に確保し、各インタフェースからの結合又はパケット要求の処理に短い待ち時間を実現する。
【0030】
図5は、
図4の代替アーキテクチャを示し、WLANのRFフロントエンド/MAC504(
図4の処理401に相当)及びBTのRFフロントエンド/MAC508(
図4の処理450に相当)は、それぞれデジタルインタフェース518及び520を介してマルチスレッドCPU510に結合され、マルチスレッドCPU510はROM/フラッシュメモリ512及びRAM514に結合されている。任意で、スレッドマップレジスタ516が存在し、Bluetoothプロセス又はWLANプロセスのいずれかにCPUサイクルの割り当てを提供する。本発明の一例では、スレッドマップレジスタのプロセス_IDエントリの数は固定であり、各スレッド_IDに関連する特定のプロセスにより多い又は少ない数のプロセスサイクルを提供するため、より多い又は少ない数のスレッド_ID値がスレッドマップレジスタにあってもよい。上述したような一度に1命令ずつ受け取るパイプライン型のマルチスレッドプロセッサでは、マルチスレッドプロセッサは次のスレッド_IDを発行するスレッドマップレジスタで決定されたスレッドに対して各命令を受信し、スレッドプロセスの割り当て制御の粒度は命令毎に異なる。スレッドマップレジスタはスレッド_IDを繰り返し正規に発行するので、スレッドへのプロセスの割り当ては、スレッドマップレジスタがサポートし得る値の数の逆数に相当する非常に細かい粒度となる。本発明の一例では、スレッド管理プロセスが一意のスレッド_IDを有するプロセスの一つとして動作してもよく、スレッド管理プロセスは、他のスレッドの活動を調べ、活動レベルに応じて対応するスレッド_IDのエントリ数を増減し、スレッドマップレジスタにスレッド_ID値を割り当てたり、スレッドマップレジスタからスレッド_ID値を解除したりする。通信プロセッサに関連する通信プロセスの活動レベルは、例えば、関連する通信プロセッサが送信又は受信し、スレッドが処理するパケットの数によって決定されてもよく、スレッドマップレジスタにその特定のスレッドのスレッド_ID値がより多く又は少なく存在することを示すために閾値を設定してもよい。スレッド管理プロセスによってスレッドマップレジスタに動的に配置された、より多くの又はより少ないエントリを有する一意のスレッド_IDを持つプロセススレッドの例は、リンク層プロセス、ネットワーク層プロセス、又は、アプリケーション層プロセスを含み、各リンク層、ネットワーク層、又は、アプリケーション層のプロセスは、固有の閾値メトリックを有する複数のプロセスを含み得る。これらのプロセスはそれぞれ、401、450、504、又は508といった特定の通信プロセッサと関連付けられる。閾値メトリック(パケットデータレート、未処理の残りのパケット数、スレッドロードメトリック、又は、スレッドプロセスタスク完了の割合など)が閾値を超える間、スレッドマップレジスタにおけるスレッド_IDの割り当てを増加させてもよい。
【0031】
図5Aは、メモリ(ROM/フラッシュメモリ512又はRAM514のいずれか)の存在する様々なスレッドへの割り当てを示す。1つのスレッドは、
図4のWLAN CPU424によって実行されるタスクに対応するWLANコードであってもよく、もう一つのスレッドは、
図4のBT CPU482によって実行されるタスクに対応するBTコードであってもよい。スレッドマップレジスタを管理するために追加のスレッドを割り当て、追加のスレッドによって上述したスレッドマップレジスタ103への様々なタスクの帯域の割り当てを制御してもよく、追加のタスクによってパケットバッファのメモリ管理及び他の優先度が低く実行頻度の低い機能を実行してもよい。スレッドマップ管理タスクは、BT及びWLANインタフェースの使用率を定期的に調査し、需要に応じて各タスクへのCPUサイクルの割り当てを変更してもよい。本発明の一態様では、BluetoothとWLANの動作を排他的に行い、CPUスレッドのインタフェースに対する割り当て(
図5AのBTタスク及びWLANタスク)は1つのインタフェース又はもう一つのインタフェースに特化される。
【0032】
本発明の別の例では、様々なスレッドが、特定の通信プロトコルの異なる部分を処理し得る。例えば、1つのスレッドがレイヤ2及びその他の動作を処理し、もう1つのスレッドがレイヤ3及び特定のプロトコルの応用側面を処理してもよい。WLANプロトコルのいずれかに関する本発明の一態様では、1つのスレッドが、下位MAC機能と総称されることがある基本的な通信態様を処理することができる。WLANとBluetoothの下位MAC機能には、パケット送信、パケット受信、クリアチャネル評価(CCA)、フレーム間間隔、レート制御、送信要求と送信クリア(RTS/CTS)の交換、WLAN及びBluetoothの無線パケット確認応答DATA/ACK、又は、Bluetoothに特有のチャネルホッピングが含まれる。上位MAC機能は、下位MAC機能で実行されない他のISO(国際標準化機構)レイヤ2機能をデータリンク層で実行する。本明細書における上位MAC機能とは、WLANサプリカント(無線ネットワークアクセスポイントへの参加又はログインに関連するプロトコル)、WLANパケットの再送信及び確認応答、標準WPA又はWPA2(Wireless Protected Access)に規定されるようなセキュリティ機能、のいずれかを総称したものである。ISOレイヤ3(ネットワーク層)の機能は、分離されたスレッドで実行されてもよい。レイヤ3機能には、IPパケット形成、TCP再送信と確認応答、SSL暗号化と接続管理、及び、特定のアプリケーション層プロセス用のパケットカプセル化などのアプリケーション層の動作が含まれる。Bluetoothに関する本発明の別の例では、スレッドの1つをBluetoothコントローラ、スタック、再試行、及び、確認応答の処理に割り当て、他のスレッドをアプリケーション層のタスクの処理に割り当ててもよい。このように、特定のプロトコルの2つのタスクは分離されて別々のスレッドに提供され、1つのスレッドからもう1つのスレッドへのデータ通信にはSRAMなどの共通インタフェースを使用してもよい。
【0033】
アプリケーションによっては、WLAN通信とBluetooth通信が併存し、同時に動作してもよい。この構成例では、WLANパケット処理中はWLAN通信処理に、Bluetoothパケット処理中はBTスレッドサイクルに、CPUスレッドサイクルを動的に割り当てることが可能である。特定の通信プロセッサ401、450、504、又は508に関連付けられた複数のプロセスは、一意のスレッド_ID値で作成され、各スレッド_IDは各関連プロセスの処理帯域幅を提供するためにスレッドマップレジスタ516に置かれ、関連する通信プロセッサが有効でないとき、これらのプロセスは終了されスレッド_IDがスレッドマップレジスタ516から削除されてもよい。同時通信は、一定のスロット間隔でパケットを送信するBluetooth通信の定期通信間隔を利用して行うことができ、BT通信にチャネルが使用されていない大きな時間間隔によって時間的に区切ることも可能である。これらの間隔の間、BTの通信ウィンドウに干渉しないように、WLANパケットの送信及び確認応答が行われてもよい。スレッドマップレジスタ103は、Bluetoothパケット間隔の間はBTに、そしてWLANパケット間隔の間はWLANに、CPU能力のより大きな割合を提供するように動的に変更することができ、それによって
図4のアーキテクチャよりも電力消費を低減する。
【0034】
図4及び
図5に示した例は、WLANとBluetoothという特定の異種通信プロトコルのものであるが、これらは説明の目的のためであることが理解されたい。異種通信プロトコルは、全く異なるパケット処理を必要とする一式の通信プロトコルである。例としては、Bluetooth、WLAN、Zigbee、Near Field通信の何れかであり、その他は通信プロトコル分野の当業者には既知である。