(57)【要約】コンピューティングデバイス（１００）は、複数のコア（１１１〜１１４）と、コア変換コンポーネント（６１６）と、コア割当コンポーネント（６１７）と、を含むプロセッサ（１００）を備える。コア変換コンポーネントは、レジスタ（４０５）のセットを設け、複数のプロセッサコアのコア毎に１つのレジスタが存在する。コア割り当てコンポーネントは、プロセッサの初期化中に、コア割り当てスキームに従って、コア変換コンポーネントのレジスタの各々にコアインデックスを提供するコンポーネントを含む。コアインデックスに基づいて、オペレーティングシステムからのプロセス命令が各コアに転送される。【選択図】図２
2021507390.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングデバイスであって、
プロセッサを備え、
前記プロセッサは、
複数のプロセッサコアと、
レジスタのセットを有するコア変換コンポーネントであって、各レジスタは、前記複数のプロセッサコアのうち対応するプロセッサコアに関連付けられている、コア変換コンポーネントと、
コア割り当てコンポーネントと、を含み、
前記コア割り当てコンポーネントは、
プロセッサの初期化中にコア割り当てスキームに従って、前記コア変換コンポーネントの前記レジスタの各々にコアインデックスを割り当てることと、
前記コアインデックスに基づいて、各コアにプロセス命令を転送することと、
を行うように構成されている、
コンピューティングデバイス。
【請求項２】
前記コア割り当てスキームは、ラウンドロビン割り当てスキームである、
請求項１のコンピューティングデバイス。
【請求項３】
前記コア割り当てスキームは、疑似ランダム割り当てスキームである、
請求項１のコンピューティングデバイス。
【請求項４】
前記各々のレジスタに提供されるコアインデックスの各々は、前記複数のプロセッサコアの各々のコアのバス番号である、
請求項１のコンピューティングデバイス。
【請求項５】
前記複数のプロセッサコアのうち少なくとも２つは、コアのクラスタとして結合されており、
前記コア割り当てスキームは、前記クラスタのコアインデックスのみが互いに再配置されるように、結合するクラスタに基づいて前記コアのクラスタの前記コアの各々のコアインデックスを提供する、
請求項１〜３の何れかのコンピューティングデバイス。
【請求項６】
前記コア割り当てコンポーネントは、前記コアインデックスを前記コア変換コンポーネントの前記レジスタに提供するために、前記プロセッサをサポートするマザーボードに動作可能に関連付けられたリアルタイムクロックの動作に基づく疑似乱数生成器（ＰＲＮＧ）を含む、
請求項１のコンピューティングデバイス。
【請求項７】
リアルタイムクロック（ＲＴＣ）を有するマザーボードをさらに備え、
前記ＰＲＮＧは、前記コアインデックスを前記コア変換コンポーネントの前記レジスタに提供する場合に、前記ＲＴＣと通信する、
請求項６のコンピューティングデバイス。
【請求項８】
前記コア割り当てコンポーネントは、
前記複数のプロセッサコアの前記コアの順序の順列テーブルの行を識別することであって、前記テーブルの前記行は前記コア割り当てスキームである、ことと、
前記コアの順序の順列テーブルの識別された行の値に基づいて、前記コアインデックスを前記各々のレジスタに提供することと、
を行うように構成されている、
請求項１のコンピューティングデバイス。
【請求項９】
プロセッサであって、
複数のプロセッサコアと、
前記複数のプロセッサコア毎の１つのレジスタから構成されたレジスタのセットと、
コア割り当てコンポーネントと、を備え、
前記コア割り当てコンポーネントは、
ブートプロセス中に、前記複数のプロセッサコアのうち第１のプロセッサコアのバス番号を前記レジスタのセットのうち第１のレジスタに疑似ランダムに割り当てることであって、前記第１のレジスタは、前記プロセッサのデフォルトコアに指定される、ことと、
残りのプロセッサコアのバス番号を前記レジスタのセットのうち他のレジスタに割り当てることと、
割り当てられたバス番号に基づいて、前記プロセッサの前記レジスタで受信されたプロセッサ命令を前記プロセッサコアに転送することと、
を行うように構成されている、
プロセッサ。
【請求項１０】
前記コア割り当てコンポーネントは、
前記残りのプロセッサコアの前記バス番号を前記他のレジスタに疑似ランダムに提供する、
請求項９のプロセッサ。
【請求項１１】
前記第１のコアの前記疑似ランダムに提供されたバス番号は、前記ブートプロセス中に前記プロセッサによって取得されたリアルタイムクロック（ＲＴＣ）値に基づいて提供される、
請求項１０のプロセッサ。
【請求項１２】
前記コア割り当てコンポーネントは、
前記プロセッサのバスにおいて再割り当て信号を検出することと、
前記再割り当て信号を検出したことに応じて、前記レジスタのセットのうち第１のレジスタを疑似ランダムに選択することと、
前記再割り当て信号を検出したことに応じて、前記レジスタのセットのうち第２のレジスタを疑似ランダムに選択することと、
前記第１のレジスタ及び前記第２のレジスタを選択した後に、選択された前記第１のレジスタの前記バス番号を、選択された前記第２のレジスタに切り替えることと、
前記第１のレジスタ及び前記第２のレジスタを選択した後に、選択された前記第２のレジスタの前記バス番号を、選択された前記第１のレジスタに切り替えることと、
を行うように構成されている、
請求項９のプロセッサ。
【請求項１３】
前記再割り当て信号は、前記プロセッサ命令を前記プロセッサに提供するオペレーティングシステムのスケジューラによって生成され、前記再割り当て信号は、所定のコア消耗目標時間経過後に送信される、
請求項１２のプロセッサ。
【請求項１４】
方法であって、
コア割り当てスキームに従って、インデックスをプロセッサの複数のコアの各コアに割り当てることであって、前記インデックスは、ブートシーケンス中に前記プロセッサが電源投入されると変化する、ことと、
前記インデックスを前記プロセッサのメモリ構造に永続的に記憶することと、
前記プロセッサにおいて受信したプロセッサ命令を、前記割り当てられたインデックスに基づいて、コアバス番号と共に、オペレーティングシステムから前記プロセッサのコアにルーティングすることと、を含む、
方法。
【請求項１５】
前記コア割り当てスキームは、ラウンドロビンスキームであり、各コアのコアインデックスは、前記ブートシーケンスのプロセッサ初期化ステップ中に、前記メモリ構造内で１つのコアだけシフトする、
請求項１４の方法。
【請求項１６】
前記割り当てスキームは、疑似ランダム割り当てスキームであり、前記複数のコアのうち第１のコアは、疑似ランダムにインデックスが割り当てられており、
他のコアのインデックスは、物理コアの順序で割り当てられている、
請求項１４の方法。
【請求項１７】
前記割り当てスキームは、疑似ランダム割り当てスキームであり、各コアのインデックスは、疑似ランダムに割り当てられている、
請求項１４の方法。
【請求項１８】
各コアインデックスは、別のコアのバス番号である、
請求項１４の方法。
【請求項１９】
前記複数のコアのうち少なくとも２つは、コアのクラスタとして結合されており、
前記コア割り当てスキームは、前記クラスタのコアのコアインデックスのみが互いに再配置されるように、結合するクラスタに基づいて、前記クラスタのコアの各々のコアインデックスを提供する、
請求項１４〜１９の何れかの方法。
【請求項２０】
前記割り当てスキームは、前記コアの順序の順列テーブルの行の値に基づいている、
請求項１４の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
複数のコアを有するプロセッサを有する従来の処理システムでは、１つのコアが、処理システムのブートプロセスを実施するためのデフォルトコアとして指定され、プロセッサの他のコアが低電力状態にある間、様々なタスクを処理するためにアクティブ状態に留まる。このデフォルトコアの割り当ては、ブートプロセス及び状態変化に亘って静的及び永続的である。したがって、このデフォルトコアとして永続的に指定されたコアは、プロセッサのコンピューティングワークロードの不均衡な共有を受ける。その結果、デフォルトコアの動作寿命が他のコアと比較して短くなり、デフォルトコアが最小仕様内で動作しなくなると、一般的に、プロセッサ全体がスクラップ又は廃棄される。
【０００２】
添付の図面を参照することにより、本開示をより良く理解することができ、その多くの特徴及び利点が当業者に明らかになる。異なる図面で同じ符号を使用している場合、類似又は同一のアイテムを示す。
【図面の簡単な説明】
【０００３】
【図１】いくつかの実施形態による、動的に割り当てられたデフォルトコアを有するマルチコアプロセッサを有するコンピューティングデバイスのブロック図である。
【図２】いくつかの実施形態による、交替デフォルトコア割り当てを用いるマルチコアプロセッサを有するコンピューティングデバイスのブロック図である。
【図３】いくつかの実施形態による、マルチコアプロセッサの論理コアをオペレーティングシステムに割り当てる方法を示すフロー図である。
【図４】いくつかの実施形態による、ＡＣＰＩ（Advanced Configuration and Power Interface）パーシステントメモリを用いてコアが指定されるマルチコアプロセッサを有するコンピューティングデバイスのブロック図である。
【図５】いくつかの実施形態による、ＡＣＰＩパーシステントメモリを用いてマルチコアプロセッサの論理コアを割り当てる方法を示すフロー図である。
【図６】いくつかの実施形態による、オペレーティングシステムへのコア割り当てを指定するマルチコアプロセッサを有するコンピューティングデバイスのブロック図である。
【図７】いくつかの実施形態による、マルチコアプロセッサのコアを指定するマルチコアプロセッサに関する方法を示すフロー図である。
【図８】いくつかの実施形態による、１つ以上のブートコンポーネントによってマルチコアプロセッサのコアを指定するコンピューティングデバイスのブロック図である。
【図９】いくつかの実施形態による、ブートローダによってマルチコアプロセッサのコアを指定する方法を示すフロー図である。
【発明を実施するための形態】
【０００４】
一般的に、コンピューティングデバイスのオペレーティングシステム（ＯＳ）は、ピン番号に従ってマルチコアプロセッサのコアを論理的に列挙し、第１ピン位置又は番号のコアは、プロセッサによって実行されるために割り当てられたプロセスを処理するためのデフォルトコアとして、オペレーティングシステムによってＣ（０）（又は「Ｃ０」）と番号付けされる。この割り当ては、多くの場合、再起動や起動の間の数週間から数カ月、オペレーティングシステムがアクティブのままである限り維持される。さらに、コンピューティング需要が低減すると、マルチコアプロセッサの１つ以上のコアが低電力状態に置かれ、デフォルトコアＣ（０）は、アクティブ状態（又は、よりアクティブな状態）に維持され、これにより、少なくとも１つのコアが、実行するためのプロセスを受け入れるのに利用可能になっている。したがって、アイドル状態であっても、ＯＳは、概して、プロセスの実行をデフォルトコアＣ（０）に割り当てることを好む傾向がある。しかしながら、ブートタスク、低レベルカーネルタスク及びユーザ空間プログラムプロセスのデフォルトコアＣ（０）への割り当ての間、特に、プロセッサの他のコアが頻繁にアイドル状態又は低電力状態に設定される場合、デフォルトコアＣ（０）は、他のコアよりも早く損耗する。したがって、ワークロードをプロセッサの全てのコアに均等に分散させないと、デフォルトコアＣ（０）が消耗するため、プロセッサの動作寿命が短くなる。１つのコアが故障又は消耗すると、プロセッサ（及び、おそらく、プロセッサを実装するデバイス）は、非動作状態になる。この理由として、プロセッサは、一般的に、プロセッサの全てのコアがＯＳからプロセスタスクを受け入れることができる状態を維持しない限り動作するように設計されていないためである。
【０００５】
したがって、いくつかの実施形態によれば、ブートストラッププロセス中に、マルチプロセッサコアを有するプロセッサを実装するコンピューティングデバイスは、複数のコアのうち１つのコアを、プロセス実行のためのデフォルトコアとして永続的に選択しないように構成されており、これにより、コンピューティングデバイス及びＯＳは、デフォルトコアとして常に同じコアを割り当てるようにデフォルト設定しない。他のコアは、この選択に基づいて割り当てられる。デフォルトコアＣ（０）の割り当ては、後述するように、複数の技術のうち１つに従って行われる。デフォルトコアとしての１つのコアの選択は一時的なものであるので、コンピューティングデバイスは、ブートプロセス後のある時点で、デフォルトコアＣ（０）として異なるコアを動的に再割り当てすることが可能である。結果として、デフォルトコアＣ（０）として動作するための責任が、プロセッサのコア間で均等に分散される。これにより、コアの消耗がより均等に広がり、プロセッサの動作寿命が延びる。
【０００６】
図１は、いくつかの実施形態による、コア割り当てが第１の時間及び第２の時間において再割り当てされる２つの異なる時間においてマルチコアプロセッサを有するコンピューティングデバイスのブロック図である。例えば、これらの２つの時間は、ブートプロセスの２つの実行後のものである。コンピューティングデバイス１００は、少なくとも１つのシステムメモリ１０２及びマルチコアプロセッサ１１０に電力及びサポートを提供するマザーボード１０１を含む。プロセッサ１１０は、メモリ１１５のＬ３キャッシュに隣接して配列された４つのコア１１１〜１１４を含む。システムメモリ１０２内のＯＳ１０３は、ブートプロセスを通じてアクティブになっている。
【０００７】
第１の時間（時間１）において、デバイス１００で動作するコア割り当てコンポーネント１０４は、左上の第１のコア（コア１）をデフォルトコアＣ（０）としてＯＳ１０３に割り当て又は指定しており、ここで、コアインデックスが０から開始するように番号付けられている。第２のコア（コア２）１１２は、第２のコアＣ（１）として割り当てられている。第３のコア（コア３）１１３は、第３のコアＣ（２）として割り当てられている。第４のコア（コア４）１１４は、第４のコアＣ（３）として割り当てられている。いくつかの実施形態によれば、第１の時間の前又は後の第２の時間（時間２）において、コア１１１〜１１４は、コア割り当てコンポーネント１０４等のコンピューティングデバイス１００の１つ以上のコンポーネントによって異なるように割り当てられている。プロセッサ１１０内の同じ物理的位置に同じ物理コアが残っているが、コアの割り当ては変化している。第２の時間において、コア１１１〜１１４の各々は、Ｃ（３）、Ｃ（２）、Ｃ（１）及びＣ（０）として指定される。
【０００８】
いくつかの実施形態によれば、第４のコア１１４は、ランダムに選択されており、デフォルトコアＣ（０）として指定され、残りのコアは、ブートプロセス中に遭遇するプロセッサ１１０のピン順序に従って指定される。他の実施形態は、他の方法によってコア指定を割り当てる。例えば、他の実施形態によれば、第３のコア１１３及び第４のコア１１４は、ランダムに選択されており、それぞれ第２のコアＣ（１）及びデフォルトコアＣ（０）として指定されており、残りのコアは、ブートプロセス中に遭遇するプロセッサ１１０のピン順序に従って指定される。さらに他の実施形態では、第２のコア１１２、第３のコア１１３及び第４のコア１１４は、ランダムに選択されており、それぞれ第３のコアＣ（２）、第２のコアＣ（１）及びデフォルトコアＣ（０）として指定されており、残りのコアは、ブートプロセス中に遭遇するプロセッサ１１０のピン順序に従って指定される。実施形態のさらなる例及びさらなる例示的な詳細が、他の図に関連して本明細書に提供される。
【０００９】
コンピューティングデバイス１００が第１の時間で動作しているか第２の時間で動作しているかに関係なく、ＯＳ１０３は、コアインデックスに従って、プロセス命令をコア１１１〜１１４に送信する。例えば、ＯＳ１０３からプロセッサ１１０に渡されるプロセス命令は、インデックス（例えば、第２のコア１１２又は第３のコア１１３の何れかに対応する１６進表記の１）及びハードウェア識別子（例えば、プロセッサ１１０に対応するＨＩＤ＝ＬＮＸＣＰＵ：００）に従って行われる。したがって、プロセス命令を実行するためにＯＳ１０３のプロセスへの参照をシステムメモリ１０２からプロセッサ１１０に渡す必要がある場合、メカニズムはコアインデックスを含む。コアインデックスにより、デバイス１００は、ＯＳ１０３がマザーボード１０１に対してプロセッサ１１０の特定のピン番号を渡すことなく、プロセッサ命令を適切なコアに配信することを可能にする。その結果、ＯＳ１０３は、様々なタイプのプロセッサに亘って書き込まれ、コンパイルされ、動作されることが可能になり、様々なデバイスに亘るハードウェア変更毎にオペレーティングシステムを変更する必要がない。ここで、ＯＳ１０３等のＯＳが使用するプロセッサコアインデックスを割り当てる方法の例として、様々な実施形態を説明する。
【００１０】
図２は、いくつかの実施形態による、交替デフォルトコア割り当てを用いたマルチコアプロセッサを有するコンピューティングデバイス２００のブロック図である。コンピューティングデバイス２００は、例えば、デスクトップコンピュータ、ノートブックコンピュータ、サーバ、タブレットコンピュータ、ゲーム機又は携帯電話を含む。コンピューティングデバイス２００は、ブートメモリ２０２と、マルチコアプロセッサ２１０と、ハードドライブ２２０又は他のストレージデバイスと、システムメモリ２３０と、を含む様々なハードウェア要素を動作させるためのマザーボード２０１を含む。いくつかの実施形態によれば、システムメモリ２３０は、読み出し専用メモリ（ＲＯＭ）又はランダムアクセスメモリ（ＲＡＭ）を含む。
【００１１】
プロセッサ２１０は、第１のコア２１１と、第２のコア２１２と、第３のコア２１３と、第４のコア２１４と、を含む複数のコアを含む。これらのコアは、例えば、中央処理装置（ＣＰＵ）コア、グラフィックス処理ユニット（ＧＰＵ）コア、又は、これらの組み合わせを含む。いくつかの実施形態によれば、コア２１１〜２１４は、例示し易くするために、図２に示されていないＬ１キャッシュ及びＬ２キャッシュ等の各コア自体のメモリ構造を含む。また、コア２１１〜２１４は、Ｌ３キャッシュ２１５を共有する。コア２１１〜２１４及び関連するキャッシュは、コアのクラスタ２１６を形成する。プロセッサ２１０は他のコアのクラスタを有することができる。いくつかの実施形態によれば、コア２１１〜２１４は、ハイパースレッディングをサポートすることができる物理コアであり、これにより、各コア２１１〜２１４は、プロセッサ命令を受け入れるために２つの「コア」又はプロセッサをＯＳ２３２に提供する。このような場合、プロセッサ２１０内のコアの数は、デフォルトコアＣ（０）を選択する目的のために、８になる。さらに、いくつかの実施形態によれば、コア２１１〜２１４は、他のコアの電力状態に影響を及ぼすことなく、低電力状態又はアイドル状態に個々に置かれてもよい。また、クラスタ２１６を低電力状態又はアイドル状態に置くことにより、コア２１１〜２１４を低電力状態にして、デバイス２００が、プロセスを、プロセッサ２１０の他の利用可能な（電源投入された）コアに割り当てることを可能にする。
【００１２】
いくつかの実施形態によれば、ブートメモリ２０２は、マザーボードのパワーオンリセットによって開始するブートプロセス中に実行されるブートコードを記憶するＲＯＭとして実装されている。ブートメモリ２０２は、ＡＣＰＩフレームワーク２０３及び基本入出力システム（ＢＩＯＳ）２０４等のスタートアップサービスを含む。ＡＣＰＩフレームワーク２０３は、ハードウェアレジスタを、マザーボード２０１によって電力供給されるコンポーネントに提供し、ハードウェアアドレス等によって各コンポーネントをネイティブに直接呼び出すことなく、電力管理及びデバイス動作を可能にする。ＡＣＰＩフレームワーク２０３は、デバイス２００のＢＩＯＳ２０４とＯＳ２３２との間のインタフェース層として機能する。
【００１３】
パワーオンリセット又は他のブート初期化イベントにおいて、マザーボード２０１に電力が供給される。マザーボード２０１が最初に電力を受けると、ブートメモリ２０２がアクティブになり、そのセットアップ、初期化及びパワーオンセルフテスト（ＰＯＳＴ）を含むセルフテストを完了する。次に、ＢＩＯＳ２０４は、ファームウェアの初期化中に得られた情報を使用して、電力インタフェースデータを含む様々なプラットフォーム及びデバイス構成を有するＡＣＰＩフレームワーク２０３のテーブルを生成又は更新する。ブートプロセス中、プロセッサ２１０は、コア情報２０５を生成し、コア２１１〜２１４に関するデータをＯＳ２３２に提供する。具体的には、コア情報２０５は、コア２１１〜２１４のうち１つをデフォルトコアＣ（０）として指定し、そのように指定されたデフォルトコアＣ（０）と共に、他のコアをＣ（１）〜Ｃ（Ｎ−１）として列挙する。
【００１４】
ブートプロセス中、ＢＩＯＳ２０４は、デバイス２００用のＯＳを有する可能性のあるブートデバイス用の全ての利用可能なストレージデバイスを識別する。ＢＩＯＳ２０４は、マザーボード２０１に利用可能なパーシステントストレージ内で指定されたブート順序を使用する。いくつかのマザーボードでは、パーシステントストレージは、個別のチップである。多くの場合、ＢＩＯＳパーシステントストレージは、ハードドライブコントローラ、Ｉ／Ｏコントローラ及び統合コンポーネントに関与するマザーボード２０１上のリアルタイムクロック（ＲＴＣ）又は集積回路（ＩＣ）と統合する。いくつかの実施形態では、ＢＩＯＳパーシステントストレージは、デバイス２００のマザーボード２０１が一次電力を失った場合であっても、ＢＩＯＳパーシステントストレージがブート順序、コア割り当て２０７等を維持することを可能にするバッテリの形態で自身の電源を備える。
【００１５】
ＢＩＯＳ２０４は、ブート順序シーケンスにおいて、各ストレージデバイスの第１のセクタにロードするＯＳを探す。図２において、ＢＩＯＳ２０４は、ハードドライブ２２０を潜在的なブートデバイスとして識別する。第１のセクタは、２つのアイテム（マスタブートレコード（ＭＢＲ）２２１、又は、ハードドライブ２２０内に複数のパーティションがある場合には、ボリュームブートレコード（ＶＢＲ））のうち少なくとも１つを記憶する。ＢＩＯＳ２０４は、ＭＢＲ２２１をシステムメモリ２３０にコピーする。コピーされたＭＢＲ２３１は、ＯＳが配置されているアクティブパーティション２２２を指すように構成されている。ハードドライブ２２０は、プログラム及びプログラムデータが配置され得る第２のパーティション２２３等の１つ以上の他の非アクティブなパーティションを含むことができる。
【００１６】
コピーされたＭＢＲ２３１は、ＯＳ２３２のブートローダを含む。ブートローダは、ＯＳ２３２をシステムメモリ２３０にロードしてＯＳを起動する実行可能コードを含む。この時点で、ＢＩＯＳ２０４は、ブートローダをアクティブにし、マザーボード２０１及びデバイス２００の制御を停止する。ブートローダは、システムメモリ２３０内のＯＳ２３２の様々なコンポーネントをロード及び実行する。ＯＳ２３２の初期化中、ＯＳ２３２は、カーネル２３３を起動及び初期化して、カーネル２３３が、プロセッサ命令の形式でタスクをプロセッサコア２１１〜２１４に提供できるようにする。カーネル２３３は、コア２１１〜２１４上のプロセスの実行を管理する。初期化中、カーネル２３３は、コア割り当て２０７に対応する参照インデックスを用いて、コア２１１〜２１４にアクセスするように構成されている。いくつかの実施形態によれば、コア割り当て２０７は、レジスタのグループ又はＡＣＰＩフレームワーク２０３のテーブルとして実装され、カーネル２３３は、従来のプラクティスに従って動作する。他の実施形態では、コア割り当て２０７は、ＭＢＲ２３１のブートローダによってカーネル２３３に提供され、カーネル２３３は、新たなコア割り当て２０７を使用して、Ｃ（０）のデフォルトコア指定を第２のコア２１２、第３のコア２１３又は第４のコア２１４のうち１つに効果的にシフトする。さらに他の実施形態では、プロセッサ２１０は、ＯＳ２３２の初期化中に、コア割り当て２０７をブートローダ又はカーネル２３３の何れかに提供する。さらなる実施形態によれば、ブートプロセスの後、ＯＳ２３２の動作中に、コア割り当て２０７は、プロセッサ２１０の寿命中に、消耗をコア２１１〜２１４に分散するために、定期的に又は要求に応じて、新たなインデックス値に更新される。再割り当て後、様々なプロセッサコア２１１〜２１４は、新たなコア割り当てに従ってプロセスが割り当てられる。
【００１７】
いくつかの実施形態によれば、ＯＳがコア２１１〜２１４で実行するプロセスをスケジュールする場合、ＯＳは、アフィニティマスク（affinity mask）によってコア２１１〜２１４を参照する。アフィニティマスクは、デバイス２００内のプロセッサ２１０のＮ個のコアの各々に１つずつのＮビットのセットである。コア情報２０５は、実行がスケジュールされた特定のプロセスのタスク又はスレッドを実際に受信する物理コア２１１〜２１４を、ＯＳ２３２のために変換する。
【００１８】
図３は、いくつかの実施形態による、論理コアをオペレーティングシステムに割り当てる方法３００を示すフロー図である。ブロック３０１において、プロセッサのコアは、起動中又はブートプロセス中に、ＣＰＵ初期化ステップの一部等として列挙される。ブロック３０２において、コア割り当てが、各コアの物理的列挙を各コアの割り当てられた列挙に変更するために生成される。ブロック３０３において、コア割り当ては、図２のＯＳ２３２のカーネル２３３等のＯＳのカーネルに提供される。
【００１９】
いくつかの実施形態によれば、コア割り当ては、ブートメモリのハードウェアコンポーネント内にインデックスを永続的に記憶することによって利用可能なインデックスを生成することによって、ＯＳに提供される。ハードウェアコンポーネントの一例は、図２のブートメモリ２０２の不揮発性相補型金属−酸化物−半導体（ＣＭＯＳ）メモリである。例えば、コアインデックの現在のセットがブートメモリ２０２に記憶され、これにより、コアインデックスが、ＣＭＯＳメモリ内のＯＳ２３２のカーネル２３３に利用可能になる。別の例として、コアインデックスの現在のセットがテーブルに記憶され、インデックス及びテーブルの両方が、当業者に既知であるような図２のＡＣＰＩフレームワーク２０３の起動中に実行されるＡＣＰＩマシン語（ＡＭＬ）バイトコードによって生成される。必要に応じて、コア割り当て２０７を随時交替させるために、コアインデックスの現在のセットが再配置され、ＯＳ２３２のカーネル２３３に利用可能にされる。コアインデックスを再配置することによって、マルチコアプロセッサ２１０のコア２１１〜２１４が、ＯＳがデバイスを動作する以前よりも経時的に均等に消耗するように、コア消耗が分散される。
【００２０】
図４は、いくつかの実施形態による、ＡＣＰＩパーシステントメモリ等のパーシステントブートメモリを用いてコアを指定するマルチコアプロセッサを有するコンピューティングデバイスのブロック図である。コンピューティングデバイス４００は、様々なハードウェア要素を動作させるためのマザーボード４０１を含む。なお、図４では、説明を容易にするために、システムメモリ（例えば、ＲＯＭ）やハードドライブ等の一般的な処理デバイスの一部を省略している。マザーボード４０１は、ブートメモリ４０２及びマルチコアプロセッサ４１０を動作させる。ブートメモリ４０２は、ＡＣＰＩパーシステントメモリ又はＢＩＯＳ  ＣＭＯＳメモリ等のパーシステントブートメモリを含む。いくつかの実施形態によれば、プロセッサ４１０はＣＰＵであり、第１のコア４１１、第２のコア４１２、第３のコア４１３及び第４のコア４１４を含む複数のコアを含む。いくつかの実施形態によれば、コア４１１〜４１４は、各々のメモリ構造を含み、このようなメモリ構造は、説明を容易にするために図４に示されていない共有メモリ（例えば、Ｌ３キャッシュ）を共有することができる。コア４１１〜４１４は、コアのクラスタ４１５を形成する。プロセッサ４１０は、他のコアのクラスタを有することができる。
【００２１】
ブートメモリ４０２は、ＡＣＰＩフレームワーク４０３と、ＢＩＯＳ４０４と、を含み、ＢＩＯＳ４０４は、コンピューティングデバイス４００のＯＳが、プロセッサ４１０上で実行される処理命令をスケジュールすることによって、プロセッサ４１０を使用することを可能にする。ＡＣＰＩフレームワーク４０３は、コンピューティングデバイス４００のコンポーネントを動作させるための値を記憶することができるＡＣＰＩパーシステントメモリを含む。いくつかの実施形態によれば、ＡＣＰＩパーシステントメモリは、当業者に既知であるようなＡＣＰＩテーブル、ＡＣＰＩレジスタのグループ、又は、ＡＣＰＩレジスタ４０５のセットの形態をとる。プロセッサ４１０は、ＡＣＰＩフレームワーク４０３のＡＣＰＩネームスペースで宣言される。概して、ＡＣＰＩネームスペースは、プロセッサ４１０を含むマザーボード４０１のコンポーネントを操作するためのＡＣＰＩテーブルを含む。ＯＳの初期化中、コンピューティングデバイス４００のＯＳは、ＡＣＰＩテーブルから自身のネームスペースを構築する。プロセッサ４１０のデバイス定義は、ＯＳがプロセッサ４１０のコア４１１〜４１４上で実行するプロセスをスケジュールするために使用するハードウェア識別子を使用して、コンピューティングデバイス４００のＯＳにおいて宣言される。
【００２２】
ＯＳは、レジスタのセット４０５を使用して、プロセッサ４１０上でプロセスをスケジュールする。ＡＣＰＩフレームワーク４０３は、コア割り当て４０７の形式で、プロセッサ４１０のコア４１１〜４１４の各々のレジスタを含む。いくつかの実施形態によれば、コア割り当て４０７は、コア４１１〜４１４に関するバス番号（例えば、０×４Ｃ、０×１０）に対応するが、便宜上、図４にインデックスとして表される。ＯＳが動作し、プロセスを実行すると、ＯＳのカーネルは、従来のコアインデックス０〜Ｎ−１に基づいてプロセスをスケジュールする。ＯＳのカーネルのＯＳスケジューラのインデックスは、図４のコアインデックス４０６に対応する（例えば、ＰＩＤ０１２３を有するプロセスは、プロセッサインデックス（０）を有するプロセッサのコア（２）上で実行される）。しかしながら、ＯＳとプロセッサ４１０との間の構成可能なインタフェースの一部として、コア割り当て４０７は、スケジュールされたプロセスを、レジスタ４０５の内容（具体的には、コア割り当て４０７）に従ってコア４１１〜４１４に渡すことを可能にする。例えば、４０６のコアインデックス（０）（すなわち、デフォルトコアＣ（０））で実行されるようにＯＳによってスケジュールされたプロセスは、４０７のインデックス（３）を有する物理コア（すなわち、Ｃ（３）、第４のコア４１４）に実際に渡される。このようにして、従来システムのデフォルトコアＣ（０）として元々及び永続的にハードウェアに組み込まれた又は構成された第１のコア４１１が第４のコアＣ（３）に変換され、（ＯＳの観点から）デフォルトコアＣ（０）で実行するために割り当てられたプロセスが、実際にＣ（３）に送信される。このスケジューリングは、コア割り当て４０７が再生成されるまで、コア割り当て４０７を使用して繰り返される。ＯＳスケジューラの観点から考えると、プロセスがデフォルトコアＣ（０）で実行され、実際には、プロセスは、第４のコアＣ（３）４１４に透過的に渡され、第４のコアＣ（３）４１４上で実行される。したがって、プロセスは、コア割り当て４０７のインデックスに対応する各コア４１１〜４１４に渡され、これにより、ＯＳとプロセッサコア４１１〜４１４との間に構成可能なインタフェースが生成される。したがって、図４は、構成可能なコアインタフェースがＡＣＰＩフレームワーク４０３によって生成され、ＡＣＰＩフレームワーク４０３に永続的に記憶されることを示す。
【００２３】
いくつかの実施形態によれば、割り当て４０７は、当技術分野で既知であるように、ＡＣＰＩ４０３の汎用イベントを実行することによって、ブートプロセス中に行われる。１つの例示的な実施形態によれば、物理コアインデックス４０６（０〜３）の各々に対応するコア割り当て４０７は、コア順列テーブル４０８を使用することによって生成され、当該テーブル４０８の各行は、プロセッサ４１０のＮ個のコアのＮ乗の順列数のうち１つに対応する。例えば、図４のコア割り当て４０７として示されているインデックスは、コア４１１〜４１４のインデックス「０」、「１」、「２」、「３」に対応する、物理コア４０６の「３」、「２」、「０」、「１」である。デバイス４００をリブートする毎に、又は、ＡＣＰＩフレームワーク４０３を初期化又は変更する毎に、新たなコア割り当て４０７が生成される。
【００２４】
一例として、ブートプロセス中に、行インデックス４０９は、パーシステントメモリレジスタ４０５等から取得される。行インデックス４０９は、コア順列テーブル４０８の１つの行に対応する。順列テーブル４０８は一連の行を含み、その１行は、コア４１１〜４１４のインデックスの順列の各々に対応する。一実施形態によれば、順列テーブル４０８は、電力がマザーボード４０１に供給されなくなった場合であっても、ブートメモリ４０２に永続的に記憶されるＡＣＰＩテーブルである。別の実施形態によれば、順列テーブル４０８は、デバイス４００のマザーボード４０１がブートされる毎に生成され、順列テーブル４０８は、プロセッサ４１０内のコアの数を尋ねるクエリの応答に基づいて生成される。このクエリは、ブートプロセス中にＡＭＬバイトコードとして実行される。行インデックス４０９は、ブート間で永続的に記憶される。所定のブートプロセス中に、行インデックス４０９が１つ進み、次に、新たな行インデックス４０９に対応する順列テーブル４０８の行を参照することによって、コア割り当て４０７が生成される。別の例示的な実施形態として、行インデックス４０９は、ＡＣＰＩフレームワーク４０３内でＡＭＬバイトコードとして動作可能なランダムアルゴリズム又は疑似ランダムアルゴリズムに基づいて選択される。このようにして、コア４１１〜４１４の各々は、対応するコア割り当て４０７に基づく実行プロセスを受信する。
【００２５】
コア割り当て４０７を生成するための他のメカニズムも可能である。コア割り当て４０７を生成するためのメカニズムの別の例として、ブートプロセス中にＡＭＬバイトコードとしてプログラムされ、コンパイルされ、実行される乱数生成アルゴリズムは、プロセッサ４１０のコア４１１〜４１４の各々に対して１つずつの割り当てが全て完了するまで、コア割り当て４０７の各々が割り当てられる。
【００２６】
図５は、いくつかの実施形態による、ＡＣＰＩパーシステントメモリを用いてマルチコアプロセッサの論理コアを割り当てる方法５００を示すフロー図である。ブロック５０１において、プロセッサのコアが列挙される。列挙は、コンピューティングデバイス内のプロセッサ又は全てのプロセッサのコアの数を識別することを含む。他の実施形態によれば、列挙は、オペレーティングシステムが、実行されるプロセスを送信するコアの各々の識別子、アドレス、バスアドレス又はバス番号を取得することを含む。コアは、物理コアにおいてハイパースレッディングをサポートすることによって利用可能であり、これにより、各物理コアにおける２つ以上のコア又は「プロセッサ」において、プロセッサ命令の実行を可能にする。いくつかの実施形態によれば、列挙は、この機能に提供されるＡＭＬバイトコードを用いて行われる。他の実施形態によれば、列挙は、この目的のために、ＢＩＯＳにプログラムされコンパイルされたＢＩＯＳ機能を用いて行われる。
【００２７】
ブロック５０２において、列挙されたコアのコア割り当てが生成される。いくつかの実施形態によれば、割り当てテーブルの複数の行のうち１行がアクセスされ、新たなコアインデックス番号が、列挙されたコアの各々に提供される。例えば、コアに０、１、２、３が物理的に番号付けされた４つのコアプロセッサの場合、これらの４つのコアの各々に新たなインデックス番号が提供される。図４の４０７に示すように、新たなコアインデックス番号の一例は、第１の物理コア４１１には「３」、第２の物理コア４１２には「２」、第３の物理コア４１３には「０」、第４の物理コア４１４には「１」である。いくつかの実施形態によれば、コア割り当ては、この機能のために提供されたＡＭＬバイトコードを用いて行われる。他の実施形態によれば、コア割り当ては、この目的のために、ＢＩＯＳにプログラムされコンパイルされたＢＩＯＳ機能を用いて行われる。
【００２８】
ブロック５０３において、方法５００は、プロセスをプロセッサコアに渡す際に使用するために、コア割り当てを永続的に記憶することを含む。例えば、永続的に記憶することは、図４のＡＣＰＩテーブル又はＡＣＰＩレジスタ４０５等の持続ブートメモリ内のプロセッサコアの各々のアドレス（例えば、バスアドレス、バス番号）若しくは識別子を記憶することを含む。別の例として、永続的に記憶することは、（ＡＣＰＩテーブルの形式の）順列テーブルの行インデックスを記憶することを含む。コアインデックス又はコア割り当てを必要とする場合、記憶された行インデックスは、プロセッサの各コアのコア割り当てを識別するために使用される。いくつかの実施形態によれば、コア割り当てを永続的に記憶することは、この機能のために提供されたＡＭＬバイトコードを用いて行われる。他の実施形態によれば、コア割り当てを永続的に記憶することは、この目的のために、ＢＩＯＳにプログラムされコンパイルされたＢＩＯＳ機能を用いて行われる。
【００２９】
図６は、いくつかの実施形態による、オペレーティングシステムへのコア割り当てを指定するマルチコアプロセッサを有するコンピューティングデバイスのブロック図である。コンピューティングデバイス６００は、様々なハードウェア要素を動作させるためのマザーボード６０１を含む。システムメモリ（例えば、ＲＯＭ）及びハードドライブ等の汎用処理デバイスのいくつかの要素は、説明の便宜上、図６から省略されている。マザーボード６０１は、ブートメモリ６０２及びマルチコアプロセッサ６１０を動作させる。ブートメモリ６０２は、ＡＣＰＩパーシステントメモリ又はＢＩＯＳ  ＣＭＯＳメモリ等のパーシステントブートメモリを含む。ブートメモリ６０２は、ＡＣＰＩフレームワーク６０３及びＢＩＯＳ６０４を含み、ＢＩＯＳ６０４は、コンピューティングデバイス６００のＯＳがプロセッサ６１０を使用することを可能にする。ＡＣＰＩフレームワーク６０３は、コンピューティングデバイス６００のコンポーネントを動作させるための値を記憶できるＡＣＰＩパーシステントメモリを含む。
【００３０】
いくつかの実施形態によれば、プロセッサ６１０はＣＰＵであり、第１のコア６１１、第２のコア６１２、第３のコア６１３、第４のコア６１４を含む複数のコアを含む。コア６１１〜６１４のうち１つは、デフォルトコアＣ（０）として指定される。コア６１１〜６１４は、各々のメモリ構造を含み、このようなメモリ構造は、説明を容易にするために図６に示されていない共有メモリ（例えば、Ｌ３キャッシュ）を共有することができる。コア６１１〜６１４は、コアの第１のクラスタ６２０を形成する。プロセッサ６１０は、他のコアのクラスタを有してもよい。
【００３１】
また、プロセッサ６１０は、コア変換コンポーネント６１５及びコア変換コンポーネント６１６を含む。これらのモジュール６１５，６１６は、複数のコア割り当てスキームのうち１つに従って設計され、動作する。本明細書では、プロセッサ６１０のコンポーネントを構造化するための複数のスキームの例として、２つのコア割り当てスキームを説明する。コンポーネントは、プロセッサ６１０のコア６１１〜６１４の指定をシャッフルし、これらのコンポーネントは、コアがＯＳを含むデバイス６００の他のコンポーネントと相互運用することを可能にするインタフェースを提供する。
【００３２】
いくつかの実施形態によれば、一例のスキームとして、プロセッサ構成中又は初期化プロセス中（例えば、ブートプロセス中）、コア変換コンポーネント６１５は、コアインデックス６１８（例えば、コアインデックス、コアアドレス又はバス番号の形式）をコア変換コンポーネント６１６に提供することによって、コア割り当てコンポーネント６１７を使用してコア変換コンポーネント６１６を構成する。ブートプロセス後、コンピューティングデバイス６００の動作中、ＯＳは、バス番号がプロセッサ６１０のバスにおいて変化されていないかのように、プロセッサ６１０の同じバス番号のセットを参照することによって、従来のスケジューリングメカニズムにあるようなプロセス命令をルーティングする。ＯＳは、従来の方法でＡＣＰＩフレームワーク６０３と相互運用する。しかしながら、プロセッサ６１０の内部のブートプロセス中に動作可能なコア割り当てコンポーネント６１７に基づいてＯＳから来るプロセス命令は、コア変換コンポーネント６１６のインデックス６１８に基づいてコア６１１〜６１４にルーティングされる。プロセッサ６１０は、コアインデックス６１８として表される特定のコアインデックススキームに従って、コア変換コンポーネント６１６を介して、命令をコア６１１〜６１４の内部にルーティングする。プロセッサ６１０が初期化される毎に、これらのコアインデックス６１８の順序又はシーケンスが変更される。例えば、デフォルトコアＣ（０）上で実行されるようにスケジュールされた第１のプロセスは、実際には、図６の「３」である第１のコアインデックス６１８にアドレス指定されたコアに渡される。このプロセスは、コア６１１〜６１４のうち１つで実行されるためにプロセッサ６１０に渡されるプロセス毎に繰り返される。ＯＳの観点から考えると、プロセス命令がプロセッサ６１０のコア６１１〜６１４のうち１つで実行され、その結果が動作メモリ及びＯＳに戻された後、何も変化していない。プロセッサ６１０の観点から考えると、プロセッサ命令は、プロセッサ６１０の寿命に亘って、より均一に様々なコア６１１〜６１４に分散される。
【００３３】
いくつかの実施形態によれば、プロセッサ６１０又はプロセッサ６１０のコア変換コンポーネント６１５は、疑似乱数生成器（ＰＲＮＧ）６１９又はコアインデックス番号生成を実施するコンポーネントを含む。コア変換コンポーネント６１５は、ＰＲＮＧ６１９を呼び出し又はアクティブにして、各レジスタ内部に入れるインデックス値を提供することによって、疑似ランダムスキームに従ってインデックス６１８を提供する。コア割り当てコンポーネント６１７は、不正なインデックス６１８（例えば、プロセッサ６１０の４つのコア６１１〜６１４について０〜３のみが可能である場合での「５」の値）が提供されていないことを確認するように提供されてもよい。或いは、コア変換コンポーネント６１５は、ＰＲＮＧ６１９を呼び出し又はアクティブにして、何れのレジスタがデフォルトコアＣ（０）として指定されるかを選択することができる。次に、アドレス又はコアバス番号がプロセッサ６１０内の特定のレジスタに提供される。このプロセスは、全てのコア６１１〜６１４にインデックス６１８が割り当てられるまで繰り返すことができる。
【００３４】
或いは、Ｃ（０）レジスタが識別され、満たされると、他のレジスタは、ランダム性に関係なく、少なくとも、Ｃ（０）がプロセッサ６１０に疑似ランダムに選択されるように、順番に満たされてもよい。いくつかの実施形態によれば、マザーボード６０１は、その中で動作するリアルタイムクロック（ＲＴＣ）を含み、ＰＲＮＧ６１９は、コアインデックス６１８をコア変換コンポーネントのレジスタに提供する際にＲＴＣと通信し、ＰＲＮＧ６１９は、その動作をＲＴＣの値に基づいて行う。このような実施形態によれば、ＰＲＮＧ６１９は、ＲＴＣを使用して、少なくともＣ（０）指定をコア６１１〜６１４のうち１つに対応する１つのレジスタに分配するためのエントロピーを取得する。
【００３５】
この例示的なスキームの変形例によれば、プロセッサ構成プロセスの間、コア変換コンポーネント６１５は、ラウンドロビンスキームに従ってコア割り当てコンポーネント６１７を使用して、コア変換コンポーネント６１６のレジスタを構成する。本明細書で使用される場合、ラウンドロビンスキームは、ブートシーケンスのプロセッサ初期化ステップ中に、各コアのコアインデックスを１つの位置だけシフトする。これらの位置は、プロセッサを動作させるデバイスがブートプロセスを受ける毎に、又は、プロセッサ６１０がプロセッサ６１０のバスにおいて再割り当て信号を検出する毎にシフトされる。
【００３６】
動作の一例として、プロセッサ６１０が再割り当て信号を検出すると、コア割り当てコンポーネント６１７は、インデックス６１８を保持するレジスタのセットの第１のレジスタ及び第２のレジスタを疑似ランダムに選択する。次に、コア割り当てコンポーネント６１７は、選択された第１のレジスタ及び選択された第２のレジスタのインデックス６１８を切り替える。所定のコア消耗目標時間を超えた後に、デバイス６００内でアクティブなＯＳのカーネルのスケジューラによって再割り当て信号が送信されてもよく、所定のコア消耗目標時間は、コア６１１〜６１４の典型的な寿命推定に従って製造業者又はＯＳのプログラマによって指定されている。例として、コア消耗目標時間は、事前に決定されてもよく、特定のコア割り当て構成で動作する時間数又は日数として設定されてもよい。
【００３７】
他の実施形態によれば、別の例示的なスキームとして、プロセッサ構成中又は初期化プロセス中（例えば、ブートプロセス中）、コア変換コンポーネント６１５は、コアインデックス６１８（例えば、インデックス、コアアドレス又はバス番号の形式）をＡＣＰＩフレームワーク６０３に提供することによって、コア割り当てコンポーネント６１７を使用して、ＡＣＰＩフレームワーク６０３のＡＣＰＩレジスタ又はＡＣＰＩテーブル（プロセッサ６１０のコア６１１〜６１４に対応する）を構成する。いくつかの実施形態によれば、コアインデックス６１８は、コア６１１〜６１４のバス番号（例えば、０×４Ｃ、０×１０）に対応する。実施形態の一例として、コア変換コンポーネント６１５は、コアインデックス６１８をコア変換コンポーネント６１６から読み出し、インデックス６１８をＡＣＰＩフレームワーク６０３に渡す。別の例示的な実施形態によれば、コア変換コンポーネント６１６は、後続の構成又は初期化ステップで使用できるコアインデックス６１８又は値のセットの順列テーブルを含む。プロセッサ６１０の初期化ステップ中に、コア変換コンポーネント６１５は、コア割り当てコンポーネント６１７を介して、複数行のうち１つの行をコアインデックス６１８のセットの順列テーブルからランダムに選択し、インデックス６１８をＡＣＰＩフレームワーク６０３に渡す。
【００３８】
動作において、第２の例示的なスキームによれば、プロセス命令は、コア変換コンポーネント６１５によってＡＣＰＩフレームワーク６０３に提供された情報を用いてＯＳからルーティングされる。コンピューティングデバイス６００のＯＳのスケジューラ及びカーネルは、従来のコア呼び出し及びコアスケジューリングを使用して動作するが、命令は、透過的に、コアインデックス６１８によって示された様々なコア６１１〜６１４のうち１つにルーティングされ、従来の動作のようなハードウェアに組み込まれた指定によってルーティングされない。例えば、Ｃ（０）上で実行するようにスケジュールされた第１のプロセスは、実際には、図６の「３」である第１のインデックスでアドレス指定されたコアに渡される。この方法は、実行するためにプロセッサ６１０に渡されるプロセス毎に繰り返される。このように、従来のシステムではＣ（０）として永続的にハードウェアに組み込まれ又は構成された第１のコア６１１がＣ（３）に変換され、Ｃ（０）上で実行するように割り当てられたプロセスが、実際にはＣ（３）に送信される。
【００３９】
このスケジューリングのスキームは、コア割り当て６０７が随時再生成されるまで、コア割り当て６０７を使用して繰り返される。コア再割り当ては、ＯＳから又はコンピュータデバイス６００内の他のコンポーネント若しくはコンポーネントの組み合わせによってスケジュール又はトリガされるように、リブート毎又は要求に応じて行われる。要約すると、図６に関連して説明するように、ＯＳスケジューラの観点から、各プロセスは、Ｃ（０）、Ｃ（１）、Ｃ（２）、Ｃ（３）のうち１つで実行され、実際には、各プロセスは、コアインデックス６１８によって指定されたコアに透過的に渡され、当該コア上で実行される。コアインデックス６１８、コア変換コンポーネント６１６及びコア変換コンポーネント６１５は、ＯＳとプロセッサコア６１１〜６１４との間の構成可能なインタフェースの一部である。図６は、構成可能なコアインタフェースがＯＳとプロセッサ６１０のコア６１１〜６１４との間に存在し得ることを示している。ＯＳの観点から考えると、プロセス命令が正常に実行され、結果がＯＳによってアクセスメモリに戻されてからは、何も変化していない。プロセッサ６１０の観点から考えると、プロセッサ命令は、プロセッサ６１０の寿命に亘って、より均一に様々なコア６１１〜６１４に分散される。
【００４０】
別の実施形態によれば、別の例示的なスキームとして、プロセッサ構成中又は初期化プロセス中（例えば、ブートプロセス中）、第１のコア割り当ては、第１のプロセッサ（例えば、アームプロセッサ）のコア変換コンポーネントによって提供され、そのコア割り当ての出力は、図６のプロセッサ６１０等の第２のプロセッサに提供される。この実施形態では、第２のプロセッサは、第１のプロセッサと異なる命令セット（例えば、ｘ８６命令セット）を使用するように構成された第２のプロセッサ等と同じ又は異なるプロセッサタイプである。この実施形態では、ＢＩＯＳシーケンスの最初又は初期の実行の間、第１のプロセッサは、第１のプロセッサがもはや必要でなくなるか使用されなくなるまで、変換スキームに従って、第１のプロセッサのコア変換コンポーネントを使用することと、第１のプロセッサのコアを使用することと、が指示される。その後、ＢＩＯＳシーケンスの第２の実行又は後期の実行の間、メモリ又は第１のプロセッサ内で動作可能なＢＩＯＳは、第１のプロセッサに、そのコア変換コンポーネントを使用して、第２のコア割り当て又はさらなるコア割り当て（第２のコア再割り当て）を第２のプロセッサに提供するように指示する。第２のプロセッサは、その新たなコア割り当て（例えば、コアインデックス、コアアドレス又はバス番号の形式）を受信し保持するためのストレージレジスタを含む。或いは、第１のプロセッサは、新たなコア割り当てを、第２のプロセッサのオペレーティングシステム（ＯＳ）に提供する。このようにして、ＯＳに、第２のプロセッサのコアにプロセスを割り当てさせる目的で、第２のプロセッサは、再番号付けされるコアを有する。
【００４１】
図７は、いくつかの実施形態による、プロセッサによって、マルチコアプロセッサのコアを指定する方法を示すフロー図である。ブロック７０１において、コア再割り当てスキームが生成される。再割り当てスキームは、コンピューティングデバイスの１つのプロセッサ内又は全てのプロセッサ内のコアの数を使用して、新たなインデックス番号を、利用可能なコアの各々にランダム又は疑似ランダムに提供する。このスキームは、疑似ランダム割り当てスキームとして説明できる。このスキームは、オペレーティングシステムが、実行されるプロセスを送信するコアの各々の識別子、アドレス、バスアドレス又はバス番号を取得することを含むことができる。いくつかの実施形態によれば、この再割り当てスキームは、図６のプロセッサ６１０等のプロセッサの一部によって実行されるロジック又は一連のステップによって生成される。或る実施形態によれば、コアは、マルチコアＣＰＵ又はマルチコアＧＰＵのコアであり、再割り当てスキームは、デバイス内の各マルチコアプロセッサに適用される。
【００４２】
ブロック７０２において、ブロック７０１において生成されたコア再割り当てスキームが永続的に記憶される。記憶することは、バスアドレス等のアドレスを、ブートメモリ、ＡＣＰＩフレームワークのメモリ構造、又は、システムＲＡＭ等のコンピューティングデバイス内の別の要素に渡す形式をとることができる。
【００４３】
ブロック７０３において、プロセッサのコア上で実行するためのプロセス命令は、再割り当てスキームに基づいて、各々のコアのうち１つに渡される。例えば、６１８に示すように、スケジュールされてコアＣ（０）に渡されるプロセスは、実際には、Ｃ（３）又は再割り当てされるコアＣ（０）の何れかに送信される。
【００４４】
図８は、いくつかの実施形態による、１つ以上のブートコンポーネントによってマルチコアプロセッサのコアを指定するためのコンピューティングデバイスのブロック図である。コンピューティングデバイス８００は、様々なハードウェア要素を動作させるためのマザーボード８０１を含む。マザーボード８０１は、ブートメモリ８０２と、ハードドライブ８０８等のストレージメモリと、マルチコアプロセッサ８１０と、システムメモリ８２０と、を含む様々なコンポーネントを動作させる。ハードドライブ８０８は、命令を有するアクティブパーティション８０９を含む。
【００４５】
いくつかの実施形態によれば、プロセッサ８１０は、第１のコア８１１と、第２のコア８１２と、第３のコア８１３と、第４のコア８１４と、を含む複数のコアを含む。コア８１１〜８１４は、各々のメモリ構造を含み、このようなメモリ構造は、説明を容易にするために図８に示されていない共有メモリ（例えば、Ｌ３キャッシュ）を共有する。コア８１１〜８１４は、コアの第１のクラスタ８１５を形成する。プロセッサ８１０は、他のコアのクラスタを有してもよく、同じ又は異なるソケットの何れかの他のクラスタのコアは、第１のクラスタ８１５のものと同様に扱われる。
【００４６】
ブートメモリ８０２は、ＡＣＰＩフレームワーク８０３及びＢＩＯＳ８０４を含み、ＢＩＯＳ８０４は、コンピューティングデバイス８００のＯＳが、プロセッサ８１０上で実行されるプロセスをプロセッサ８１０のコア８１１〜８１４に提供することを可能にする。ＡＣＰＩフレームワーク８０３は、ブートメモリ８０２内に、又は、ブートメモリ８０２の一部として、ＡＣＰＩメモリを含む。ＡＣＰＩメモリは、コンピューティングデバイス８００のコンポーネントを動作させるための値を記憶する。いくつかの実施形態によれば、ＡＣＰＩメモリは、当業者に既知であるようなＡＣＰＩテーブル、ＡＣＰＩレジスタのグループ又はＡＣＰＩレジスタのセットの形式をとる。ブートプロセス中、プロセッサ８１０は、ＡＣＰＩフレームワーク８０３のＡＣＰＩネームスペースで宣言される。ＡＣＰＩネームスペースは、プロセッサ８１０及びそのコア８１１〜８１４を含むマザーボード８０１のコンポーネントを動作させるためのＡＣＰＩテーブルを含む。ＯＳの初期化中、コンピューティングデバイス８００のＯＳは、ＡＣＰＩテーブルから自身のネームスペースを構築する。プロセッサ８１０のためのデバイス定義は、ＯＳがプロセッサ８１０のコア８１１〜８１４上で実行するプロセスをスケジュールするために使用するハードウェア識別子を使用して、コンピューティングデバイス８００のＯＳにおいて宣言される。
【００４７】
ＯＳは、ＡＣＰＩレジスタのセットの情報を使用して、プロセッサ８１０のコア８１１〜８１４上のプロセスをスケジュールする。ＡＣＰＩフレームワーク８０３は、コア割り当て８０７の形式で、プロセッサ８１０のコア８１１〜８１４の各々のレジスタを含む。いくつかの実施形態によれば、コア割り当て８０７は、コア８１１〜８１４のバス番号（例えば、０×４Ｃ、０×１０）に対応するが、バス番号は、プロセッサ８１０のコンポーネントのアーキテクチャ及びレイアウトによって変わるので、便宜上、図８ではインデックスとして表される。ＯＳ８２２が動作し、プロセスを実行すると、ＯＳ８２２のカーネル８２３は、従来のコアインデックス０〜Ｎ−１に基づいてプロセスをスケジュールする。カーネル８２３のＯＳスケジューラのインデックスは、図８のコアインデックス８０６に対応する（例えば、ＰＩＤ０１２３を有する実行プロセスは、プロセッサインデックス（０）を有するプロセッサのコア（２）上で実行される）。しかしながら、ＯＳとプロセッサ８１０との間の構成可能なインタフェースの一部として、コア割り当て８０７は、コア割り当て８０７に従って、従来のコア番号付け及び静的バス番号によらずに、スケジュールされたプロセスをコア８１１〜８１４に渡すことを可能にする。
【００４８】
例えば、８０６においてコアインデックス（０）（すなわち、デフォルトコアＣ（０））で実行するようにスケジュールされたプロセスは、８０７（すなわち、第４のコアＣ（３））においてインデックス（３）を有するコアに実際に渡される。このように、従来のシステムのデフォルトコアＣ（０）として元々及び永続的にハードウェアに組み込まれた又は構成された第１のコア８１１は、第４のコアＣ（３）に変換され、第１のコア８１１上で実行するために割り当てられたプロセスは、実際には、第４のコア８１４に送信される。このスケジューリングは、コア割り当て８０７が再生成されるまで、各々のコア割り当て８０７の全てを使用して繰り返される。ＯＳスケジューラの観点から考えると、プロセスがデフォルトコアＣ（０）上で実行され、実際には、プロセスは、第４のコア８１４又はＣ（３）に透過的に渡され、第４のコア８１４又はＣ（３）上で実行される。このようにして、プロセスは、コア割り当て８０７のインデックスに対応する各々のコア８１１〜８１４に渡され、これにより、ＯＳとプロセッサコア８１１〜８１４との間に構成可能なインタフェースが生成される。要するに、図８は、構成可能なコアインタフェースがＡＣＰＩ８０３内で永続的に記憶されることを示している。
【００４９】
いくつかの実施形態によれば、コア割り当て８０７は、マスタブートレコード（ＭＢＲ）８２１の実行中に、ブートコンポーネントによってブートプロセス中に生成される。ＭＢＲ８２１を実行する前に、或るＢＩＯＳ命令がブートメモリ８０２から実行される。ＢＩＯＳ８０４は、最終的に、ＭＢＲ８２１のブートローダをアクティブにし、ＢＩＯＳ８０４は、マザーボード８０１及びデバイス８００の直接制御を停止する。ＭＢＲ８２１は、ＯＳ８２２用のブートローダを含む。ブートローダは、フェッチコードを起動するブートストラップスレッド（例えば、プロセッサ（０）のコア（０）のスレッド（０））を実行する。フェッチコードは、特定のアドレスから開始して、ハードドライブ８０８のアクティブパーティション８０９の第１のセクタから追加の命令を引き出す。追加の命令は、コア割り当て８０７を生成する命令を含む。また、追加の命令は、ＯＳをシステムメモリ８２０にロードし、コア割り当てを生成した後にＯＳ８２２を初期化する命令を含む。
【００５０】
したがって、いくつかの実施形態によれば、コア割り当て８０７は、ＯＳ８２２の一部又は全てをロードして動作する前に生成される。ブートローダの命令は、初期化されると、ＯＳ８２２を、コンピューティングデバイス８００上でユーザ定義命令を実行する状態に置くことによって、ＯＳ８２２を開始する。ＯＳ８２２の初期化中、ＯＳ８２２は、カーネル８２３を開始及び初期化する。カーネル８２３は、コア割り当て８０７を使用して、プロセス命令をプロセッサコア８１１〜８１４に提供する。
【００５１】
図８に関して、コア割り当て８０７は、ＡＣＰＩ８０３、ブートローダ、ＭＢＲ８２１、ＯＳ８２２、又は、これらの組み合わせの命令によって生成される。１つの例示的な実施形態によれば、コア割り当て８０７は、ＢＩＯＳ８０４がマザーボード８０１を制御するのを停止した後に、ブートローダの命令の実行によってトリガされた命令によって提供される。いくつかの実施形態によれば、システムメモリ８２０内で動作可能な命令は、物理コアアドレス（例えば、バス番号）を、コアインデックス８０６で表されるようなブートメモリ８０２内のＡＣＰＩフレームワーク８０３のＡＣＰＩレジスタから読み出す。命令は、複数の利用可能な割り当てスキームのうち１つに従って、レジスタ８０５内のコアインデックス８０６（０〜３が番号付けされている）として示された物理コア８１１〜８１４の各々に対して１つずつ、コア割り当て８０７のセットを決定する。図８に示すように、レジスタ８０５は、ＭＢＲ８２１の一部としてシステムメモリ８２０内に存在する。後続の命令は、レジスタ８０５の情報を使用してコア割り当てを生成する。
【００５２】
コア割り当て８０７を決定命令は、複数の形式のうち１つをとる。例えば、命令は、プロセッサ８１０のコアのＮ個の数のＮ乗の数の順列のうち１つに対応する１つ以上の行を有するコア順列テーブルを使用する。コアの数は、ブートプロセス中にＡＣＰＩフレームワーク８０３の１つ以上のレジスタを読み出すことによって、ＭＢＲ８２１の命令又はＭＢＲ８２１のブートローダによってブートプロセス中に決定されてもよい。別の例として、ＭＢＲ８２１の命令は、コア割り当て８０７の一部又は全てを生成するために呼び出される乱数生成アルゴリズムを含む。第１の変形例によれば、デフォルトコアＣ（０）の第１のランダム又は疑似ランダム割り当ては、利用可能なコア８１１〜８１４間で生成される。続いて、他のコアの各々は、残りのコア割り当て８０７を生成するために、バス順序で順次割り当てられる。コア割り当て８０７を行うための第２の変形例によれば、コア（Ｃ（０）〜Ｃ（３））の各々は、ランダム又は疑似ランダムに割り当てられる。コア割り当て８０７を生成するための命令は、ＯＳ８２２のカーネル８２３で利用可能な割り当て８０７を存続すること、又は、そうでなければ割り当て８０７を生成することを含む。そうするための１つのメカニズムは、ＡＣＰＩフレームワーク８０３の特定のレジスタ又はＡＣＰＩフレームワーク８０３の１つ以上の各々のＡＣＰＩテーブルの１つ以上のＡＣＰＩテーブルエントリを書き込む又は再書き込みする命令を実行することを含む。いくつかの実施形態によれば、ＭＢＲ８２１は、コア割り当て８０７を存続する命令を含む。
【００５３】
図９は、いくつかの実施形態による、ブートローダ命令、マスタブートレコード命令、カーネル命令、ＯＳ命令、又は、これらの組み合わせによって、マルチコアプロセッサのコアを指定する方法９００を示すフロー図である。ブロック９０１において、システムメモリ内の命令は、プロセッサのコアアドレスをブートメモリから読み出す。例えば、ブートローダ命令は、マルチコアプロセッサのコアのセットに対応するＡＣＰＩレジスタのグループからバス番号を読み出す。ブロック９０２において、コア割り当ては、マルチコアプロセッサのコアのセットのコア毎に生成される。コア割り当ては、他の図に関連して説明する様々な方法のうち１つに従って生成される。ブロック９０３において、コア割り当てに基づいて、コアアドレスが、ブートメモリ等のメモリに書き込まれる。次に、新たに生成されたコア割り当ては、プロセスの実行をスケジュールする際に、オペレーティングシステムのカーネルのスケジューラによって使用される。いくつかの実施形態によれば、この方法９００を使用して、オペレーティングシステムは、オペレーティングシステムの構成、プログラミング又は実行を実質的に変更することなく、従来の方法でプロセスを実行することができ、マルチコアプロセッサの寿命に亘って、少なくとも１つのデフォルトコアＣ（０）を第１のコア指定としてマルチコアプロセッサの各コアに割り当てることによって全てのコアをほぼ等しくエージングすることによって、マルチコアプロセッサの寿命を延ばすことができる。
【００５４】
いくつかの実施形態では、上記の装置及び技術は、図１〜図９を参照して上述したマルチコアプロセッサ等の１つ以上の集積回路（ＩＣ）デバイス（集積回路パッケージ又はマイクロチップとも呼ばれる）を含むデバイス又はシステムに実装される。これらのＩＣデバイスの設計及び製造には、電子設計自動化（ＥＤＡ）及びコンピュータ支援設計（ＣＡＤ）ソフトウェアツールが使用される。これらの設計ツールは、通常、１つ以上のソフトウェアプログラムとして表される。１つ以上のソフトウェアプログラムは、回路を製造するための製造システムを設計又は適合するための処理の少なくとも一部を実行するように１つ以上のＩＣデバイスの回路を表すコードで動作するようにコンピュータシステムを操作する、コンピュータシステムによって実行可能なコードを含む。このコードは、命令、データ、又は、命令及びデータの組み合わせを含むことができる。設計ツール又は製造ツールを表すソフトウェア命令は、通常、コンピューティングシステムがアクセス可能なコンピュータ可読記憶媒体に記憶される。同様に、ＩＣデバイスの設計又は製造の１つ以上のフェーズを表すコードは、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体に記憶されてもよいし、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体からアクセスされてもよい。
【００５５】
コンピュータ可読記憶媒体は、命令及び／又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の非一時的な記憶媒体又は非一時的な記憶媒体の組み合わせを含む。かかる記憶媒体には、限定されないが、光媒体（例えば、コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）、ブルーレイ（登録商標）ディスク）、磁気媒体（例えば、フロッピー（登録商標）ディスク、磁気テープ、磁気ハードドライブ）、揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）、キャッシュ）、不揮発性メモリ（例えば、読み出し専用メモリ（ＲＯＭ）、フラッシュメモリ）、又は、微小電気機械システム（ＭＥＭＳ）ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体は、コンピュータシステムに内蔵されてもよいし（例えば、システムＲＡＭ又はＲＯＭ）、コンピュータシステムに固定的に取り付けられてもよいし（例えば、磁気ハードドライブ）、コンピュータシステムに着脱可能に取り付けられてもよいし（例えば、光学ディスク又はユニバーサルシリアルバス（ＵＳＢ）ベースのフラッシュメモリ）、有線又は無線のネットワークを介してコンピュータシステムに接続されてもよい（例えば、ネットワークアクセス可能なストレージ（ＮＡＳ））。
【００５６】
いくつかの実施形態では、上記の技術のいくつかの態様は、ソフトウェアを実行する処理システムの１つ以上のプロセッサによって実装されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体上で有形に具現化された実行可能命令の１つ以上のセットを含む。ソフトウェアは、１つ以上のプロセッサによって実行されると、上記の技術の１つ以上の態様を実行するように１つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶デバイス、例えばフラッシュメモリ等のソリッドステート記憶デバイス、キャッシュ、ランダムアクセスメモリ（ＲＡＭ）、又は、他の不揮発性メモリデバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、１つ以上のプロセッサによって解釈若しくは実行可能な他の命令フォーマットであってもよい。
【００５７】
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、１つ以上のさらなるアクティビティが実行される場合があり、１つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
【００５８】
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。
【図１】
2021507390.tif 000003
【図２】
2021507390.tif 000004
【図３】
2021507390.tif 000005
【図４】
2021507390.tif 000006
【図５】
2021507390.tif 000007
【図６】
2021507390.tif 000008
【図７】
2021507390.tif 000009
【図８】
2021507390.tif 000010
【図９】
2021507390.tif 000011
【手続補正書】
【提出日】令和2年8月18日(2020.8.18)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピューティングデバイスであって、
プロセッサを備え、
前記プロセッサは、
複数のプロセッサコアと、
レジスタのセットを有するコア変換コンポーネントであって、各レジスタは、前記複数のプロセッサコアのうち対応するプロセッサコアに関連付けられている、コア変換コンポーネントと、
コア割り当てコンポーネントと、を含み、
前記コア割り当てコンポーネントは、
プロセッサの初期化中にコア割り当てスキームに従って、前記コア変換コンポーネントの前記レジスタの各々にコアインデックスを割り当てることと、
前記コアインデックスに基づいて、各コアにプロセス命令を転送することと、
を行うように構成されている、
コンピューティングデバイス。
【請求項２】
前記コア割り当てスキームは、ラウンドロビン割り当てスキーム及び疑似ランダム割り当てスキームのうち何れかである、
請求項１のコンピューティングデバイス。
【請求項３】
前記各々のレジスタに提供されるコアインデックスの各々は、前記複数のプロセッサコアの各々のコアのバス番号である、
請求項１のコンピューティングデバイス。
【請求項４】
前記複数のプロセッサコアのうち少なくとも２つは、コアのクラスタとして結合されており、
前記コア割り当てスキームは、前記クラスタのコアインデックスのみが互いに再配置されるように、結合するクラスタに基づいて前記コアのクラスタの前記コアの各々のコアインデックスを提供する、
請求項１〜３の何れかのコンピューティングデバイス。
【請求項５】
前記コア割り当てコンポーネントは、前記コアインデックスを前記コア変換コンポーネントの前記レジスタに提供するために、前記プロセッサをサポートするマザーボードに動作可能に関連付けられたリアルタイムクロックの動作に基づく疑似乱数生成器（ＰＲＮＧ）を含む、
請求項１のコンピューティングデバイス。
【請求項６】
リアルタイムクロック（ＲＴＣ）を有するマザーボードをさらに備え、
前記ＰＲＮＧは、前記コアインデックスを前記コア変換コンポーネントの前記レジスタに提供する場合に、前記ＲＴＣと通信する、
請求項５のコンピューティングデバイス。
【請求項７】
前記コア割り当てコンポーネントは、
前記複数のプロセッサコアの前記コアの順序の順列テーブルの行を識別することであって、前記テーブルの前記行は前記コア割り当てスキームである、ことと、
前記コアの順序の順列テーブルの識別された行の値に基づいて、前記コアインデックスを前記各々のレジスタに提供することと、
を行うように構成されている、
請求項１のコンピューティングデバイス。
【請求項８】
前記複数のプロセッサコア毎の１つのレジスタから構成されたレジスタのセットを備え、
前記コア割り当てコンポーネントは、
ブートプロセス中に、前記複数のプロセッサコアのうち第１のプロセッサコアのバス番号を前記レジスタのセットのうち第１のレジスタに疑似ランダムに割り当てることであって、前記第１のレジスタは、前記プロセッサのデフォルトコアに指定される、ことと、
残りのプロセッサコアのバス番号を前記レジスタのセットのうち他のレジスタに割り当てることと、
割り当てられたバス番号に基づいて、前記プロセッサの前記レジスタで受信されたプロセッサ命令を前記プロセッサコアに転送することと、
を行うように構成されている、
請求項１のコンピューティングデバイス。
【請求項９】
前記コア割り当てコンポーネントは、
前記残りのプロセッサコアの前記バス番号を前記他のレジスタに疑似ランダムに提供し、
前記第１のコアの前記疑似ランダムに提供されたバス番号は、前記ブートプロセス中に前記プロセッサによって取得されたリアルタイムクロック（ＲＴＣ）値に基づいて提供される、
請求項８のコンピューティングデバイス。
【請求項１０】
前記コア割り当てコンポーネントは、
前記プロセッサのバスにおいて再割り当て信号を検出することと、
前記再割り当て信号を検出したことに応じて、前記レジスタのセットのうち第１のレジスタを疑似ランダムに選択することと、
前記再割り当て信号を検出したことに応じて、前記レジスタのセットのうち第２のレジスタを疑似ランダムに選択することと、
前記第１のレジスタ及び前記第２のレジスタを選択した後に、選択された前記第１のレジスタの前記バス番号を、選択された前記第２のレジスタに切り替えることと、
前記第１のレジスタ及び前記第２のレジスタを選択した後に、選択された前記第２のレジスタの前記バス番号を、選択された前記第１のレジスタに切り替えることと、
を行うように構成されている、
請求項８のコンピューティングデバイス。
【請求項１１】
前記再割り当て信号は、前記プロセッサ命令を前記プロセッサに提供するオペレーティングシステムのスケジューラによって生成され、前記再割り当て信号は、所定のコア消耗目標時間経過後に送信される、
請求項１０のコンピューティングデバイス。
【請求項１２】
方法であって、
コア割り当てスキームに従って、コアインデックスをプロセッサの複数のコアの各コアに割り当てることであって、前記コアインデックスは、ブートシーケンス中に前記プロセッサが電源投入されると変化する、ことと、
前記コアインデックスを前記プロセッサのメモリ構造に永続的に記憶することと、
前記プロセッサにおいて受信したプロセッサ命令を、前記割り当てられたコアインデックスに基づいて、コアバス番号と共に、オペレーティングシステムから前記プロセッサのコアにルーティングすることと、を含む、
方法。
【請求項１３】
前記コア割り当てスキームは、ラウンドロビンスキームであり、各コアのコアインデックスは、前記ブートシーケンスのプロセッサ初期化中に、前記メモリ構造内で１つのコアだけシフトする、又は、
前記割り当てスキームは、疑似ランダム割り当てスキームであり、前記複数のコアのうち第１のコアは、疑似ランダムにコアインデックスが割り当てられている、
請求項１２の方法。
【請求項１４】
各コアインデックスは、別のコアのバス番号である、
請求項１２の方法。
【請求項１５】
前記複数のコアのうち少なくとも２つは、コアのクラスタとして結合されており、
前記コア割り当てスキームは、前記クラスタのコアのコアインデックスのみが互いに再配置されるように、結合するクラスタに基づいて、前記クラスタのコアの各々のコアインデックスを提供する、
請求項１２〜１４の何れかの方法。
【国際調査報告】
2021507390.tif 000012
2021507390.tif 000013
2021507390.tif 000014