(57)【特許請求の範囲】
【請求項１】
多コア・プロセッサであって：
複数の処理コアと；
相互接続ファブリックと；
少なくとも一つのメモリ・モジュールと；
当該多コア・プロセッサ中の各処理コアの特性を動的にプロファイリングするプロファイリング・モジュールであって、処理コアの特性は該処理コアによる電力消費および該処理コアの電圧レベルに対応する最大動作スピードを含む、プロファイリング・モジュールとを有しており、
前記複数の処理コアおよび前記少なくとも一つのメモリ・モジュールが前記相互接続ファブリックに結合されており、
前記プロファイリング・モジュールが：
前記多コア・プロセッサ中の各処理コアによる電力消費を、種々の電圧および種々のスピードのもとで定期的に測定する電力消費測定モジュールと；
前記多コア・プロセッサ中の各処理コアの最大動作スピードを、種々の電圧のもとで定期的に測定する動作スピード測定モジュールと；
前記多コア・プロセッサ中の各処理コアの信頼性情報を、少なくとも部分的に前記多コア・プロセッサ中の各処理コアの前記の測定された電力消費データおよび最大スピードに基づいて取得する信頼性追跡モジュールとを有しており、
前記信頼性情報が各処理コアの前記の測定された電力消費データおよび最大スピードに関係する傾向情報を含む、
多コア・プロセッサ。
【請求項２】
多コア・プロセッサ中の各処理コアの特性を動的にプロファイリングする方法であって：
前記多コア・プロセッサ中の各処理コアについて定期的に試験を開始し；
各試験の間に、種々の電圧および種々の動作スピードのもとで、前記多コア・プロセッサ中の各処理コアの電力消費データを測定し；
各試験の間に、種々の電圧のもとで、前記多コア・プロセッサ中の各処理コアの最大動作スピードを測定し；
前記多コア・プロセッサ中の各処理コアの信頼性情報を、少なくとも部分的に、各試験の間に取得された前記電力消費データおよび前記最大動作スピードに基づいて決定することを含み、
前記信頼性情報が各処理コアの前記の測定された電力消費データおよび最大スピードに関係する傾向情報を含む、
方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概括的にはマイクロプロセッサに、より特定的には多くのコアをもつプロセッサに関する。
【背景技術】
【０００２】
多コアプロセッサ（many-core  processor）は複数の処理コアを同じダイ上にもつ。プロセス技術が非常に小さな大きさにスケールすると、プロセッサ周波数を上げることによって高パフォーマンスを達成する現在主流の設計手法は、劇的に増大した電力消費によって厳しく制限される。高パフォーマンスを達成する一つの代替的な設計手法は、典型的な「より大きな」コアより遅いスピードで並行して走る多くの「小さな」コアにアプリケーションを分散させることである。それぞれの「小さな」コアは、「大きな」コアよりも、より単純で、より小さく、食う電力がずっと少なく、それでいて著しいパフォーマンスを上げるので、この多コアに基づく設計手法は、大きなコアに基づく設計手法よりも効率的に電力消費を管理することを助けることができる。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
多コア・プロセッサは単一コアまたは少数の大きなコアをもつプロセッサに対して利点を有するものの、プロセス技術が小さな大きさにスケールダウンするとともに多くの課題にも直面する。たとえば、静的であれ動的であれプロセス変動はトランジスタを信頼できなくする；記憶ノードでの静電容量が小さく、電圧が低いので、過渡エラー率が高くなりうる；時間の経過とともにトランジスタ劣化がひどくなりうるので、時間とともに信頼性は劣化しうる。そのような課題は、工場試験の間は良好に動作する多コア・プロセッサ中のコアが、時間とともに、前と同じくらい良好に動作しなかったり、完全に動作を停止したりする状況につながりうる。このため、伝統的なプロセッサに適用されているような、一度に行う工場試験およびバーンインは、多コア・プロセッサでの信頼できるコンピューティングを時間がたっても保証するにはそれほど効率的ではなくなる。したがって、多コア・プロセッサの寿命の間に、多コア・プロセッサ中のコアのパフォーマンスを定期的に試験し、こうして得られた試験データを、アプリケーションのためにそのパフォーマンスを改善するために使うことができることが望ましい。
【０００４】
開示される主題の特徴および利点は、該主題の以下の詳細な記述から明らかになるであろう。
【発明を実施するための最良の形態】
【０００５】
本出願における開示される主題の実施形態によれば、多コア・プロセッサ中のコアは、その動的プロファイルを取得および／またはリフレッシュするために定期的に試験されうる。コアの動的プロファイルとは、その最大動作周波数、電力消費、電力リーク、機能的な正しさ（functional  correctness）およびその他のパラメータについての情報を含みうる。動的プロファイルは、これらのパラメータの傾向情報（trending  information）をも含みうる。それは、時間がたったときのコアの信頼性を示すものである。これらのパラメータは、多コア・プロセッサに組み込まれたモジュール、たとえば動作スピード測定モジュール、電力消費測定モジュール、温度センサーおよび機能的な正しさ検査モジュールなどによって取得されうる。各コアの機能的な正しさに関係する情報は、粗い粒度の機能的冗長性検査（FRC:  functional  redundancy  checking）方式および／または細かい粒度のFRC方式を使うことによって取得されうる。各コアについての動的プロファイルは、コア自身のメモリ内に、あるいはコアの一部または全部によって共有されるメモリ内に記憶されうる。動的プロファイルが最初に取得されるとき、動的プロファイルは傾向情報は含まない。しかし、二回目の定期試験からは、傾向情報が取得され、のちの試験後に更新されうる。
【０００６】
ひとたび各コアについて動的プロファイルが生成されたら、多コア・プロセッサ中のコアはその特性に従って種々のビンにグルーピングされてもよい。たとえば、最大動作周波数が高いコアは高速コアとラベル付けされうる；電力消費が低いコアは低電力消費コアとラベル付けされうる；良好な傾向情報をもつコアは信頼できるコアとラベル付けされうる；などである。動的プロファイルおよび前記グルーピング情報に基づき、オペレーティング・システム（OS）または中間ソフトウェア層は、タスクを、そのタスクのために最も好適なコアに割り当てうる。たとえば、タスクが集約的な計算を要求する場合、そのタスクは高速コアに割り当てられうる。ひとたびある種の諸コアがそのタスクのために選択されると、選択された諸コアにわたって少なくとも受け容れ可能な帯域幅および遅延が達成されうるよう、選択された諸コアの間での高いレベルの接続性を保証するよう、多コア・プロセッサ中の相互接続ファブリック（interconnect  fabric）が再構成されうる。さらに、OSは、環境の変化に応答してタスクにコアを割り当て直してもよく、相互接続ファブリックがしかるべく再構成されてもよい。
【０００７】
本明細書において、開示される主題の「一つの実施形態」または「ある実施形態」への言及は、その実施形態に関連して記載される特定の特徴、構造または特性が、開示される主題の少なくとも一つの実施形態に含まれることを意味している。よって、本明細書を通じて随所に現れる「ある実施形態では」の句の出現は、必ずしもみなが同じ実施形態を指すのではない。
【０００８】
図１は、例示的な多コア・プロセッサ１００の構造を示している。プロセッサ１００は、二次元（2D）相互接続ファブリック１３０上に座するコア（たとえばコア１１０）の8×8のアレイを有する。各コアは、そのローカルなメモリ（図示せず）を有しうる。相互接続ファブリック１３０に取り付けられた共有メモリ（たとえば１２０）もある。単一コアまたは少数コアしかもたないプロセッサに比べ、多コア・プロセッサ中のコアの数は多い。結果として、多コア・プロセッサ中の各コアの大きさは、単一コアまたは少数コア・プロセッサ中のコアに比べて小さい。図１が示す例示的なプロセッサ１００は、64個のコアしかもたないが、多コア・プロセッサにおけるコアの数は変わることができ、64よりずっと多くてもよい（たとえば256、512、1024）。プロセッサ１００はまた、各コアを周辺機器（たとえばグラフィック・デバイス）と接続するための入出力（I/O）相互接続（図示せず）をも有する。ある実施形態では、I/O相互接続は、プロセッサ・ダイにおけるコアすべてを取り囲んでいてもよい。別の実施形態では、I/O相互接続はコアの間に組み込まれてもよい。
【０００９】
典型的には、プロセッサは、パッケージングされたあと、適正にはたらくことを保証するよう試験される。しかしながら、将来の多コア・プロセッサについては、そのような一度きりの工場試験は、プロセス技術がスケールダウンする（たとえば35ナノメートル（nm）またはさらに細かいプロセス技術）ので、品質を保証するために十分ではないことがありうる。たとえば、コアの最大動作周波数は、エージングのため低下しうる。よって、多コア・プロセッサ内部のコアを定期的に試験し、そのプロセッサ上で走るアプリケーションをその試験データに適応させることが望ましい。定期的な試験からのデータを使用して、各コアについてプロファイルが生成されうる。該プロファイルは、各試験後に更新／リフレッシュされうるので、動的である。各コアの動的プロファイルは、そのコアの最大周波数、電力消費、電力リーク、機能的な正しさおよびその他のパラメータについての情報を含みうる。動的プロファイルはまた、これらのパラメータの傾向情報をも含みうる。
【００１０】
図２は、多コア・プロセッサ中の各コアについて動的プロファイリングを定期的に実行する動的プロファイリング装置２００の例示的なブロック図を示している。装置２００は、電力消費測定モジュール２１０、温度センサー２２０、動作スピード測定モジュール２３０、機能的な正しさ検査モジュール２４０、信頼性追跡モジュール２５０およびコントローラ２６０を有する。動的プロファイリング装置は、図２に示されたものに加えてコアの他のパラメータを測定するために使われる他のコンポーネントを含んでいてもよいことを注意しておく。動的プロファイリング装置のコンポーネントは、ファームウェアおよび／またはハードウェアにおいて実装されてもよく、多コア・プロセッサ内に記憶されていてもよい。
【００１１】
電力消費測定モジュール２１０は、コアの電力消費を、電力ウイルス（power  virus）または他の電力ハングリーな（power  hungry）アプリケーションを走らせることによって測定しうる。電力消費測定モジュールはまた、コアの電力消費を、コアによる電流ドレイン、電圧降下またさらにはコアの温度を測定することによって測定してもよい。ある実施形態では、多コア・プロセッサは、各試験の間にコア一つ一つの電力消費を逐次的または並列的に測定するために、一つの電力消費測定モジュールを有していてもよい。別の実施形態では、各コアが電力消費測定モジュールを有していてもよいし、あるいはいくつかのコアが一つの電力消費測定モジュールを共有する。温度センサー２２０は、電力消費測定モジュールと協働して、各コアによる電力消費から帰結する温度上昇を測定し、および／または多コア・プロセッサ中の各コアの電力リークを測定しうる。コアの電力リークは、コアの漏れ電流を通じて測定されうる。漏れ電流は、前記温度およびコアの電圧降下と組み合わせて、そのコアの電力リークおよび傾向情報を取得するために使用されうる。温度センサー２２０は、多コア・プロセッサのダイにわたる温度変動を判別し、ダイにおけるホット・スポットを同定するためにも使用されうる。そうして取得された情報は、どのコアが他のコアより多くの熱を生成しているかを示しうる。よって、OSは、より多くの熱を生成する傾向のあるコアに集中するのを避けるよう、しかるべくタスクにコアを割り当てうる。
【００１２】
動作スピード測定モジュール２３０は、コアの電圧供給および位相ロック・ループ（PLL）クロック周波数を動的に変えることによって、コアの最大動作周波数を測定しうる。典型的には、電圧増はコアの動作周波数を上げるのを助ける。コアの最大動作周波数は、コアに供給されうる電圧の上限のもとで、PLLクロック周波数がそれ以上上げられなくなるまでPLLクロック周波数を逓増させることによって得られうる。一つのコアの動的プロファイルは、一組の動作周波数を維持しうる。個々の動作周波数は、ある電圧値のもとでの最大動作周波数である。動作周波数測定モジュールは、電力消費測定モジュールおよび温度センサーと協働して、協調してコアの電力消費および電力リークならびに最大動作周波数を測定しうる。
【００１３】
機能的な正しさ検査モジュール２４０は、コア・レベルの機能検査方式を使うことによって、何らかのエラー（errors）または欠陥（faults）を動的に検出しうる。そのような方式が使われるとき、第二のコア、「チェッカー」が、「マスター」コアとロックステップで実行される。チェッカーはマスターの出力をサンプリングし、それらの値を内部的に計算した値と比較し、不一致が起こったらエラー信号をアサートする。チェッカーは他の動作もしていてもよい。こうして、それは単にFRC方式におけるような冗長コアではなく、同時に他の有用な仕事をしている。チェッカーからの結果がマスターからの結果に一致しないときに計算を再実行するために第三のコアが使用されてもよい。第三のコアからの結果がチェッカーまたはマスターのいずれかからの結果に一致する場合、チェッカーとマスターとのうちで、第三のコアからの結果に不一致な結果を与えたコアが、エラーを起こしているコアであると同定されうる。第三のコアからの結果がチェッカーからの結果にもマスターからの結果にも一致しない場合は、第三のコア自身が欠陥があることがありえ、計算を再実行するために第四のコアが必要とされることがありうる。このプロセスは、計算を再実行する追加的なコアからの結果がチェッカーまたはマスターのいずれかからの結果に一致するまで続けられうる。欠陥があるまたは遅いプロセッサは、適切なタスク割り当てのため、特定の欠陥ビンに置かれるよう、フラグが立てられる。
【００１４】
機能的な正しさ検査モジュールは、細かい粒度レベル（たとえば1サイクルまたは数サイクル毎）で、あるいは粗い粒度レベル（たとえば100サイクル毎）で結果を検査しうる。機能的な正しさ検査モジュールは、失敗した試験の割合、エラーの数などといった粗い粒度の情報ならびにどの機能ブロックまたは命令がエラーを与えるかといった細かい粒度の情報を取得しうる。FRCベースの機能的な正しさ検査は、図３Ａおよび図３Ｂに示されるように二つの隣り合うコアの間で実行されうる。機能的な正しさ検査のためのペアの割り当ては定期的に変えられてもよい（たとえば図３Ａに示す割り当てから図３Ｂに示す割り当てに）。ある欠陥コアが常に、ある正しく機能しているコアを検査する可能性を減らすためである。もう一つの実施形態では、FRCベースの機能的な正しさ検査をプロセッサ内の他のすべてのコアについて実行するために、若干のコアが選択されてもよい。それらの選択されたコアは、それらの間でも機能的な正しさ検査を実行する（たとえば、自分たちの間でのペアごとの検査）。機能的な正しさ検査モジュールは、どのように検査を実行するか、ペアごとの検査が使われるかどうかおよびいつペアが変えられるか、あるいは検査を実施するためにいくつかのコアが選択されるかどうかを決定しうる。
【００１５】
機能的な正しさ検査モジュールは、通常動作の間に検査を実行しうる。その際、計算結果が規則的なチェックポイントで検証される。これらの検査は、機能的な精度よりも電力消費のほうが重要な因子でありうるような、非クリティカル・アプリケーションについては待機モードで実行されることもできる。例は、携帯機器で走るグラフィック・アプリケーションである。機能上の検査は、コアの各機能モードを系統的に検査するユーザー・アプリケーション・プログラムまたは事前に特徴付けられた試験ルーチンを使うことができる。機能的な正しさ検査の間に見出されたエラーは、過渡的または静的のいずれでもありうる。同じ検査を再実施することによって過渡的エラーは静的エラーから区別されうる。再検査後にエラーが消えていれば、これらのエラーは過渡的であり、そうでなければこれらのエラーは静的である。過渡的エラーは静的エラーほど有害ではないかもしれないが、過渡的エラーを受けやすいコアは、より緊密なモニタリングのためにフラグを付けてもよい。
【００１６】
図２に示されるような信頼性追跡モジュール２５０は、組み込まれたルーチンを使用して、最大動作周波数、電力消費および電力リーク、機能上のエラーのレートなどといったパラメータの傾向情報を取得しうる。傾向情報は最初の試験後には手にはいらないことがありうる。二番目の試験後、二番目の試験の結果が最初の試験の結果と比較されて、両試験の間の変化が取得されうる。典型的には、傾向情報は時間がたつにつれて、より多くのデータが利用できるので、より信頼できるものになる。
【００１７】
コントローラ２６０は、動的プロファイリング装置２００中の種々のコンポーネントの間の調整をし、それらのコンポーネントの動作を制御しうる。たとえば、コントローラは、動的プロファイリングのための試験をトリガーしうる。ひとたび試験がトリガーされると、種々のコンポーネント（たとえば、電力消費測定モジュールおよび動作スピード測定モジュール）がそれらの対応するパラメータの測定を開始しうる。ある実施形態では、コントローラは、動的プロファイリングするための試験を、定期的に自分でトリガーしうる。もう一つの実施形態では、OSがコントローラに試験をトリガーすることを要求してもよい。
【００１８】
さらに、コントローラは、各試験の間、各コンポーネントによる測定のタイミングを制御しうる。たとえば、コントローラは、温度センサーに、試験アプリケーション（たとえば電力ハングリーなアプリケーション）が一定期間走るまで待ってから温度測定をするよう依頼しうる。また、コントローラは、試験の間、何も実行しないようコンポーネントに命じてもよい。たとえば、いちばん最初の試験の間、コントローラは信頼性追跡モジュールに、何も実行しないよう依頼してもよい；そしてコントローラはまた、信頼性追跡モジュールに、単一試験毎ではなく数回の試験毎に傾向情報を取得するよう要求してもよい。さらに、コントローラは、コンポーネントに、所望される情報を得るようある方法を使うよう指令してもよい。たとえば、コントローラは、機能的な正しさ検査モジュールに、検査を実施するために前記ペアごとの方法を使い、一定回数の試験後にペアを変更するよう指令してもよい。さらに、コントローラは、種々のコンポーネントの間で、あるパラメータを取得するよう調整してもよい。たとえば、コントローラは、コアの電力消費、電圧、電力リークおよび動作スピードの間の関係を取得するよう、電力消費測定モジュール、温度センサーおよび動作スピード測定モジュールの間で調整してもよい。
【００１９】
図２には示していないが、動的プロファイリングの間に取得された情報は、多コア・プロセッサ中の共有メモリ内に記憶されてもよい。共有メモリのあらかじめ定義されたセクタが、すべてのコアについての動的プロファイルを記憶するために指定されてもよい。動的プロファイルは、OSおよび／または他のアプリケーションによってアクセスされうる。
【００２０】
ある実施形態では、あるコアについての動的プロファイルは、図３Ａ〜図３Ｂに示されるように隣のコアによって構築されうる。たとえば、各コアは、その隣のコアの電力消費および電力リークを測定するために使うことのできる電力消費測定モジュールを有していてもよい。動的プロファイルを構築するためのペアの割り当ては、規則的に変えられてもよい（たとえば図３Ａに示す割り当てから図３Ｂに示す割り当てに）。ある欠陥コアが常に、ある正しく機能しているコアについて誤ったプロファイルを構築する可能性を減らすためである。もう一つの実施形態では、いくつかのコアがプロファイル・ビルダーとして指定されてもよい。これらのプロファイル・ビルダーは、自分たちの間で互いについて他のコアについての動的プロファイルを構築する。
【００２１】
図４は、多コア・プロセッサ中の各コアについて動的プロファイリングを実行するための一つの例示的なプロセス４００のフローチャートを示す。ブロック４１０では、試験が開始されうる。試験は定期的に（たとえば1時間毎に）開始されてもよいし、あるいはOSによって任意の時刻に開始されてもよい。ブロック４２０では、各コアによる電力消費が測定されうる。ブロック４３０では、各コアの最大動作スピードが測定されうる。各レベルの電圧での最大動作スピードが測定されうる。ブロック４４０では、各コアのダイ領域にわたる温度が測定され、ホット・スポットおよび温度変動が同定されうる。ブロック４５０では、機能的な正しさ検査が実行されうる。ブロック４２０ないし４５０は図４では解説のため別個に示されているが、これらのブロックにまつわる機能は逐次的に実行されても、並列に実行されても、あるいはインターリーブされた仕方で実行されてもよい。さらに、各コアの動的プロファイルのためのさらなるパラメータまたは該パラメータ間の関係を取得するために実行される他の動作があってもよい。
【００２２】
ブロック４６０では、ブロック４２０ないし４５０で実行される機能から得られるデータから、コアを特徴付けるさらなるパラメータが導出されうる。ブロック４６０のところに形成される機能は、これまでのブロック（たとえばブロック４２０またはいくつかのブロックの組み合わせ）において実行される機能とマージされてもよい。ブロック４７０では、現在の試験の間に得られたパラメータと以前の試験から得られたパラメータとを比較することによって、傾向情報が取得されうる。これは、第二の試験から始まって実行される。コアの信頼性は、コアを特徴付けるパラメータの傾向情報によって示されうる。ブロック４８０では、各コアについて、すべてのパラメータおよびその傾向情報を含む動的プロファイルが取得され、保存されうる。このブロックは、解説上の目的のため、他のブロックとは別個に示されていることを注意しておく。実際上は、パラメータは、ひとたび取得されたら記憶されるのでもよい。
【００２３】
図５は、多コア・プロセッサが使用されうるある例示的なコンピューティング・システム５００を示している。コンピューティング・システム５００は、システム相互接続５１５に結合された一つまたは複数のプロセッサ５１０を有しうる。プロセッサ５１０は、各コアについて動的プロファイルを構築するための動的プロファイリング装置を有する多コア・プロセッサでありうる。動的プロファイルは、動的プロファイリング装置自身によって開始される定期的試験を通じて構築されても、あるいはOSによって開始される試験を通じて構築されてもよい。各動的プロファイルは、コアの最大動作周波数、電力消費、電力リーク、機能的な正しさおよび他のパラメータについての情報を含みうる。動的プロファイルは、これらのパラメータの傾向情報をも含みうる。
【００２４】
コンピューティング・システム５００は、システム相互接続５１５に結合されたチップセット５３０をも含んでいてもよい。チップセット５３０は、一つまたは複数の集積回路パッケージまたはチップを含みうる。チップセット５３０は、コンピューティング・システム５００の他のコンポーネント５６０へのおよび／または他のコンポーネント５６０からのデータ転送をサポートするために、一つまたは複数のデバイス・インターフェース５３５を有しうる。たとえば、BIOSファームウェア、キーボード、マウス、記憶装置、ネットワーク・インターフェースなどといったものである。チップセット５３０は、周辺コンポーネント相互接続（PCI）バス５７０に結合されていてもよい。チップセット５３０は、PCIバス５７０にインターフェースを提供するPCIブリッジ５４５を含んでいてもよい。PCIブリッジ５４５は、プロセッサ５１０および他のコンポーネント５６０と周辺機器との間のデータ経路を提供してもよい。周辺機器とはたとえば、オーディオ装置５８０およびディスク・ドライブ５９０といったものである。図示しないが、他の装置もPCIバス５７０に結合されていてもよい。
【００２５】
さらに、チップセット５３０は、メイン・メモリ５５０に結合しているメモリ・コントローラ５２５を有しうる。メイン・メモリ５５０は、データおよびプロセッサ５１０またはシステムに含まれる他の任意の装置によって実行される命令のシーケンスを保存しうる。メモリ・コントローラ５２５は、プロセッサ５１０およびコンピューティング・システム５００内の他の装置に関連したメモリ・トランザクションに応答して、メイン・メモリ５５０にアクセスしうる。ある実施形態では、メモリ・コントローラ５５０は、プロセッサ５１０または他の何らかの回路内に位置されうる。メイン・メモリ５５０は、メモリ・コントローラ５２５がデータを読み出しおよび／または書き込みうるアドレス指定可能な記憶位置を提供するさまざまなメモリ・デバイスを含みうる。メイン・メモリ５５０は、動的ランダム・アクセス・メモリ（DRAM）デバイス、同期DRAM（SDRAM）デバイス、二倍データレート（DDR）SDRAMデバイスまたは他のメモリ・デバイスといった一つまたは複数の異なる型のメモリ・デバイスを含んでいてもよい。
【００２６】
図６は、多コア・プロセッサが使用されうるもう一つの例示的なコンピューティング・システム６００を示している。システム６００は、プロセッサ０  ６２０Ａのような複数プロセッサを含みうる。システム６００内の一つまたは複数のプロセッサは多数のコアを有しうる。多コア・プロセッサ（単数または複数）は、各コアについて動的プロファイルを構築するための動的プロファイリング装置を有しうる。動的プロファイルは、動的プロファイリング装置自身によって開始される定期的な試験を通じて、あるいはOSによって開始される試験を通じて構築されうる。各動的プロファイルは、コアの最大動作周波数、電力消費、電力リーク、機能的な正しさおよび他のパラメータについての情報を含みうる。動的プロファイルはまた、これらのパラメータの傾向情報をも含みうる。システム６００内の諸プロセッサは、システム相互接続６１０を使って互いに接続されうる。システム相互接続６１０は、フロント・サイド・バス（FSB）でありうる。各プロセッサは、システム相互接続を通じて、入出力（IO）デバイスならびにメモリ６３０に接続されうる。
【００２７】
図７は、多コア・プロセッサが使用されうるさらにもう一つの例示的なコンピューティング・システム７００を示している。システム７００では、複数プロセッサ（たとえば７２０Ａ、７２０Ｂ、７２０Ｃおよび７２０Ｄ）を接続するシステム相互接続７１０はリンクベースのポイントツーポイント接続である。各プロセッサは、リンクス・ハブ（links  hub）（たとえば７３０Ａ、７３０Ｂ、７３０Ｃおよび７３０Ｄ）を通じたシステム相互接続に接続しうる。いくつかの実施形態では、リンクス・ハブは、システム・メモリに出入りするトラフィックを調整するメモリ・コントローラと共位置でもよい。一つまたは複数のプロセッサが多くのコアを有していてもよい。多コア・プロセッサ（単数または複数）は、各コアについて動的プロファイルを構築するための動的プロファイリング装置を有しうる。動的プロファイルは、動的プロファイリング装置自身によって開始される定期的な試験を通じて、あるいはOSによって開始される試験を通じて構築されうる。各動的プロファイルは、コアの最大動作周波数、電力消費、電力リーク、機能的な正しさおよび他のパラメータについての情報を含みうる。動的プロファイルはまた、これらのパラメータの傾向情報をも含みうる。
【００２８】
図８は、タスク実行の効率を改善するために多コア・プロセッサ中の各コアの動的プロファイルを使う例示的なシステム８００のブロック図を示している。システム８００は、多コア・プロセッサ中のコアすべてについての動的プロファイル８１０、コア・ビン分けモジュール８２０、タスク・コントローラ８３０、再構成器８４０およびパフォーマンスおよび電力マネージャ８５０を有しうる。動的プロファイル８１０は、図２に記載されたような動的プロファイリング装置によって構築およびリフレッシュされうる。動的プロファイルは、多コア・プロセッサ内のコアによって供給されるメモリの指定されたセクション内に保存されうる。動的プロファイルはOSによってアクセス可能である。
【００２９】
コア・ビン分けモジュール８２０は、多コア・プロセッサ中のコアを、動的プロファイル内の一つまたは複数のコア特徴付けパラメータに従って一つまたは複数のビンにグループ化しうる。たとえば、動的プロファイルに基づいて、いくつかのコアが高速コアに割り当てられてもよく、いくつかが低速コアに割り当てられてもよく、他のものが予備コアとしてリザーブされてもよい。ビンの数は、特定のビン内のコアの数のよりよいコントロールを得るために調整されてもよい。コアは、時間がたつと、そのパフォーマンスの劣化のため、高速プールから低速プールに移動されてもよい。これが起こるとき、そのビン・レベルにおいて、当該プロセッサのパフォーマンスを維持するため、いくつかのオプションを追求しうる。予備のコアが高速プールに加えられてもよいし、あるいは既存のコアが、電圧スケーリングまたはボディ・バイアス調整技法を使って、より高い周波数で走らされてもよい。
【００３０】
もう一つの例では、コアは、その電力消費のレベルに従って、あるいは信頼性パラメータのような他のパラメータに従ってビンにグループ分けされてもよい。さらにもう一つの例では、コアは異なる複数のセットのビンにグループ化されてもよい：一つのセットは動作スピードに基づくもの、一つは電力消費レベルに基づくもの、一つは信頼性パラメータに基づくもの、などである。ある実施形態では、コアは動的プロファイルが構築されたあと、異なる複数のセットのビンにグループ化されてもよい。ビン分けプロセスは、多コア・プロセッサ内に組み込まれたソフトウェア／ファームウェア・モジュールによって実行されうる。もう一つの実施形態では、ビン分けプロセスは、タスクがOSによって受け取られるときに実行されうる。それにより、コアは、タスクの特定の要求に従ってビンにグループ化されうる。たとえば、あるタスクが非常に計算集約的である場合、コアは、その動作スピードに従ってビンにグループ化されうる；あるタスクがバッテリーで実行される場合、コアは、その電力消費レベルに従ってビンにグループ化されうる。さらにもう一つの実施形態では、コア・ビン分けモジュールは、コアを、動的プロファイルがすべてのコアについて構築されたあとで、動作スピードおよび電力消費といったいくつかのパラメータに従って少数の基本的なビンにグループ化してもよく、タスクが受け取られるときにOSの指令のもとにそのタスクの個別的な要求に従って他のビンのセットにグループ化してもよい。個別的なタスク（単数または複数）のために形成されるビンは、そのタスクが完了したのち、解体されても、保持されてもよい。
【００３１】
コアの特性が、ある試験と別の試験とで変わりうるので、種々のビンにわたる諸コアは、各試験後にシャッフルし直す必要があることがある。および／または、元来あるビンにはいったが、新たな試験後にはそのビンの基準を満たさなくなったコアの条件を調整して、そのビンにそのまま居続けられるようにしてもよい。たとえば、コアの電圧を上げれば、その動作スピードが上がりうるし、コアの電圧および／またはスピードを下げれば、そのコアの電力消費が低下しうる。
【００３２】
図８に示されるようなタスク割り当て器８３０は、コアの現在の動的プロファイルに基づいて、タスクをコアに割り当て、および／または動的に再割り当てしうる。ある実施形態では、各タスクの要求はタスク・カテゴリーに基づいてあらかじめ決定されてもよい。たとえば、タスクがリアルタイムで大量のデータを処理することであれば、そのタスクは高速コアを要求しうる；タスクが、プロセッサがバッテリー電力で動作中に実行されるものであれば、そのタスクは低レベルの電力消費をもつコアを要求しうる。もう一つの実施形態では、OSがタスクを解析してその要求を判別してもよい。各タスクの要求に基づいて、タスク割り当て器はタスクを、対応する特性をもつコア（単数または複数）に、あるいはタスクの要求が満たされるような異なるコアの組み合わせに割り当てうる。コア・プロファイルがタスクの実行中に変わる場合、タスク割り当て器は、そのタスクに割かれるパフォーマンス・レベルを維持するために、その割り当てを動的に変えてもよい。
【００３３】
再構成器８４０は、異なるコアの間で相互接続を再構成しうる。多コア・プロセッサ（図１に示されるような）における相互接続ファブリックは、コアの各ビンから良好な恩恵を導出するよう再構成可能であってもよい。コアのある特定のビンへの帰属は時間がたつと変わりうるので、静的なファブリックではコア間の帯域幅および遅延は幅広い揺動を受ける。こうして、柔軟かつ動的に再構成可能なファブリックを有することが望ましい。ビン内のコアの混合が変更されるチェックポイント毎に、ビン内の諸コアにわたる利用可能な帯域幅および遅延が評価されてもよく、必要なら、高いレベルの接続性を維持するためにファブリックが再構成されてもよい。ダイ上の諸コアの物理的な位置は変わらないながら、同じビン内の諸コアが互いに論理的に近接するよう、ファブリックをなすスイッチが再構成されてもよい。複数コア、予備コアのプールおよび接続性の高いファブリックの利用可能性は、欠陥からの、最小限のパフォーマンス劣化での迅速な回復を可能にする。試験によってある特定のコアについて問題が同定されるやいなや、そのコアは供用停止され、アクティブなサービスから外されうる。予備のプールからのコアがその代わりとなりうる。したがって、相互接続ファブリックも、欠陥コアがサービスから脱落することの効果を緩和するよう再構成されてもよい。これは、プロセッサが、変動および劣化に起因する欠陥を許容する能力を著しく改善する。
【００３４】
図８に示されるようなパフォーマンスおよび電力マネージャ８５０は、変化する環境に応じて、タスクをコアの異なる組み合わせに割り当て直し、あるいは同じセットの諸コアを再バランスしうる。電源電力からバッテリー電力にシステムを移行することは、タスクを、よりリークが少なく、より消費電力が少ないコアに割り当て直すことが必要となりうる例である。多数の電力ハングリーなアプリケーションに起因するシステム負荷の増大も、コア間での作業負荷の再バランスを必要とすることがありうる。こうして、コア・プロファイル自身に加えて、システムおよび環境の因子が、コアの動的管理において考慮される必要がある。パフォーマンス要求をもつ単一コア・プロセッサについて電圧、周波数、ボディ・バイアスをバランスさせる技法は、利用可能なコアの数の追加的な最適化変数とともに、多コア環境に適用されうる。たとえば、スピード段階変化（stepping）技法は、変化する状況に応じてタスクに割り当てられるコアを再バランスさせるために使用されうる。この場合、コアのスピードが、その電圧供給を下げるか上げるかすることにより、それぞれ下げるか上げるかされうる。そしてコアの電力消費は、その動作スピードおよび／またはその電圧供給を下げることによって低下させられうる。
【００３５】
図９は、多コア・プロセッサについてパフォーマンスおよび電力消費の管理の一例を示している。この図のx軸はGFLOP単位でのパフォーマンスを示し、y軸は一群のコアによって消費される電力を示している。図中の曲線は、異なるコア数について、パフォーマンスと電力消費の間の関係を表す。曲線９１０は、コア数64（たとえば8×8）の場合を表し、曲線９２０はコア数80（たとえば8×10）の場合を表し、曲線９３０はコア数96（たとえば8×12）の場合を表す。使われるコアが多いほど、パフォーマンスはよくなり、電力消費は少なくなることが示される。これは、使われるコアが多くなると、各コアが並列に低電圧で走って同じまたはよりよいパフォーマンス（使われるコア数がより少なく、各コアが高い電圧で走る状況と比べて）を達成でき、よって総合的な電力消費が低下されうるからである。したがって、変化する環境が電力消費が引き下げられることを要求するとき、パフォーマンスおよび電力マネージャはより多くのコアを使い、各コアへの電圧供給を下げるよう決定しうる。
【００３６】
図１０は、タスク実行の効率を改善するために多コア・プロセッサ中の各コアの動的プロファイルを使うための例示的なプロセス１０００のフローチャートを示している。プロセス１０００は、多コア・プロセッサ中のコアの動的プロファイルが構築されたのちに実行されうる。ブロック１０１０では、タスクがOSによって受領されうる。ブロック１０２０では、OSはタスクを解析してその要求（たとえばパフォーマンスおよび電力上の要求）を判別しうる。タスクの要求を判別するある例示的な手法は、タスクによって処理されるべきデータを見ることである。たとえば、リアルタイムで処理されるべき大量のデータがあれば、そのタスクはおそらく高速コアを必要とする。状況によっては、タスクの要求が何らかの所定のタスク・カテゴリーに基づいて事前に特徴付けられているため、OSがタスクの要求を判別するためにタスクを解析する必要はないこともありうる（たとえば、バッテリーを電源とするモバイル・アプリケーションは、低電力消費を要求するものとして事前に特徴付けされうる）。ブロック１０３０では、多コア・プロセッサ中のコアが、コアの動的プロファイルおよびタスクの要求に基づいて、異なる複数のビンにグループ化されうる。ある実施形態では、このブロックでのビン分けプロセスは、タスクが受け取られさえしないうちに部分的または完全に実行されうる。
【００３７】
ブロック１０４０では、タスクがそのタスクの要求を満たせるような特性をもつコアに割り当てられうる。ブロック１０５０では、多コア・プロセッサにおける相互接続ファブリックが再構成されて、同じタスクを実行するコアどうしが接続されて、利用可能な帯域幅を増し、それらにわたる遅延を減らすようにされうる。ブロック１０６０では、タスクが実行されうる。タスクを実行するプロセスの間、変化する環境により、そのタスクへの異なるセットの諸コアの再割り当ておよび／または同じセットの諸コアの再バランスがトリガーされうる。
【００３８】
開示される主題の例示的な実施形態が図１ないし図１０のブロック図および流れ図を参照して記載されているが、当業者は開示される手段を実装する他の多くの方法が代わりに使用されうることを容易に理解するであろう。たとえば、流れ図におけるブロックの実行順序は変更してもよいし、および／または記載されるブロック図／流れ図におけるブロックのいくつかは変更されたり、消去されたり、組み合わされたりしてもよい。
【００３９】
上記の記述において、開示される主題のさまざまな側面が記載されてきた。主題の十全な理解を与えるために、説明の目的上、個別的な数字、システムおよび構成が述べられた。しかしながら、本開示の恩恵を有する当業者には、主題が個別的な詳細なしで実施されうることは明らかである。他方、よく知られた特徴、コンポーネントまたはモジュールは、開示される主題をかすませないために、省略されたり、単純化されたり、組み合わされたり、分割されたりした。
【００４０】
開示される主題のさまざまな実施形態は、ハードウェア、ファームウェア、ソフトウェアまたはそれらの組み合わせにおいて実装されることができ、プログラム・コードを参照して、あるいはプログラム・コードとの関連で記載されてもよい。プログラム・コードとは、命令、関数、手続き、データ構造、論理、アプリケーション・プログラム、設計のシミュレーション、エミュレーションおよび製造のための設計表現またはフォーマットといったもので、機械によってアクセスされると、該機械が、抽象的なデータ型または低レベルのハードウェア・コンテキストを定義するタスクを実行する、あるいは結果を生じるという結果を生じるものである。
【００４１】
シミュレーションのためには、プログラム・コードは、ハードウェア記述言語または他の機能記述言語を使ってハードウェアを表現してもよい。機能記述言語とは、本質的には、設計されたハードウェアがどのように実行されると期待されるかのモデルを提供するものである。プログラム・コードは、アセンブリまたは機械語、あるいはコンパイルおよび／またはインタープリットされうるデータであってもよい。さらに、当技術分野では、ソフトウェアが何らかの形で動作するとか結果を引き起こすといった言い方が普通にされる。そのような表現は単に、プログラム・コードの処理システムによる実行がプロセッサをして動作を実行させ、あるいは結果を生じさせることを述べる短縮された言い方に過ぎない。
【００４２】
プログラム・コードはたとえば、揮発性および／または不揮発性メモリ内に保存されうる。該メモリはたとえば、記憶装置および／または付随する機械可読もしくは機械アクセス可能媒体であり、半導体メモリ、ハード・ドライブ、フロッピー（登録商標）・ディスク、光記憶、テープ、フラッシュメモリ、メモリースティック、デジタル・ビデオ・ディスク、デジタル多用途ディスク（DVD）などが含まれる。さらには機械アクセス可能な生物学的状態保存記憶（biological  state  preserving  storage）といったより変わった媒体も含まれる。機械可読媒体は、機械によって可読な形の情報を保存、送信または受信するためのいかなる機構をも含みうる。該媒体は、プログラム・コードをエンコードしている電気的、光学的、音響学的または他の形の伝搬される信号または搬送波が通りうる、アンテナ、光ファイバー、通信インターフェースなどといった具体的な媒体を含みうる。プログラム・コードはパケット、シリアル・データ、パラレル・データ、伝搬信号などの形で伝送されてもよく、圧縮されたまたは暗号化されたフォーマットで使われてもよい。
【００４３】
プログラム・コードは、移動型または静止型コンピュータ、携帯情報端末、セットトップボックス、携帯電話およびポケベルならびにその他の電子機器といったプログラム可能機械上で実行されるプログラムにおいて実装されてもよい。そうしたプログラム可能機械のそれぞれは、プロセッサ、該プロセッサによって可読な揮発性および／または不揮発性メモリ、少なくとも一つの入力装置および／または一つまたは複数の出力装置を含んでいる。プログラム・コードは、記載された諸実施形態を実行し、出力情報を生成するために、入力装置を使って入力されたデータに適用されうる。出力情報は、一つまたは複数の出力装置に適用されうる。当業者は、開示される主題の諸実施形態が、さまざまなコンピュータ・システム構成で実施できることを理解しうる。そうした構成には、マルチプロセッサまたは複数コアプロセッサ・システム、ミニコンピュータ、メインフレーム・コンピュータならびに実質的にいかなる機器にも組み込まれうる浸透型（pervasive）またはミニチュア・コンピュータまたはプロセッサが含まれる。開示される主題の実施形態はまた、タスクが通信ネットワークを通じてリンクされているリモートな複数の処理装置によって実行されうる、分散されたコンピューティング環境においても実施できる。
【００４４】
動作は逐次的な処理として記載されていることもあるが、動作の一部は実際には並列に、並行しておよび／または分散環境で、単一または複数プロセッサ機械によるアクセスのためにローカルおよび／またはリモートに保存されたプログラム・コードで実行されてもよい。さらに、いくつかの実施形態では、動作の順序は、開示される主題の精神から外れることなく再配列されうる。プログラム・コードは、組み込まれたコントローラによって、あるいは組み込まれたコントローラとの関連で使用されてもよい。
【００４５】
開示される主題は、例示的な実施形態を参照しつつ記載されてきたが、本記載は限定的な意味に解釈されることは意図されていない。開示される主題に係る技術分野の当業者に明らかな例示的な実施形態のさまざまな修正および主題の他の実施形態は、開示される主題の範囲内であると見なされる。
【図面の簡単な説明】
【００４６】
【図１】例示的な多コア・プロセッサを示す図である。
【図２】多コア・プロセッサ中の各コアについて動的プロファイリングを定期的に実行する動的プロファイリング装置の例示的なブロック図である。
【図３Ａ】多コア・プロセッサにおいて動的プロファイリングを実行する例を示す図である。
【図３Ｂ】多コア・プロセッサにおいて動的プロファイリングを実行する例を示す図である。
【図４】多コア・プロセッサ中の各コアについて動的プロファイリングを実行する例示的なプロセスのフローチャートを示す図である。
【図５】多コア・プロセッサが使用されうる例示的なコンピューティング・システムを示す図である。
【図６】多コア・プロセッサが使用されうるもう一つの例示的なコンピューティング・システムを示す図である。
【図７】多コア・プロセッサが使用されうるさらにもう一つの例示的なコンピューティング・システムを示す図である。
【図８】タスク実行の効率を改善するために多コア・プロセッサ中の各コアの動的プロファイルを使うシステムの例示的なブロック図である。
【図９】多コア・プロセッサについてのパフォーマンスおよび電力消費の管理の一例を示す図である。
【図１０】タスク実行の効率を改善するために多コア・プロセッサ中の各コアの動的プロファイルを使うための例示的なプロセスのフローチャートである。
【図１】
0005535481.tif 000002
【図２】
0005535481.tif 000003
【図３Ａ】
0005535481.tif 000004
【図３Ｂ】
0005535481.tif 000005
【図４】
0005535481.tif 000006
【図５】
0005535481.tif 000007
【図６】
0005535481.tif 000008
【図７】
0005535481.tif 000009
【図８】
0005535481.tif 000010
【図９】
0005535481.tif 000011
【図１０】
0005535481.tif 000012