(57)【特許請求の範囲】
【請求項１】
コンピュータに、
スレッドに対する処理の開始指示を受けると、前記スレッドに対して複数のプロセッサコアのいずれかを割り当て、
記憶部に記憶された、前記複数のプロセッサコアそれぞれが前記処理の実行の際に参照する前記複数のプロセッサコアそれぞれについて異なるメモリ領域の所在を示す情報と前記複数のプロセッサコアそれぞれを識別する識別情報とを関連付けた関連情報に基づいて、前記スレッドに割り当てられたプロセッサコアの識別情報から前記所在を示す情報を特定し、
特定した前記所在を示す情報用いて前記メモリ領域を参照する処理を前記スレッドに割り当てられたプロセッサコアを用いて実行する、
処理を実行させることを特徴とする割り当て制御プログラム。
【請求項２】
前記所在を示す情報をレジスタに保持し、前記スレッドにレジスタから前記所在を示す情報を取得させることを特徴とする請求項１に記載の割り当て制御プログラム。
【請求項３】
前記特定する処理は、前記関連情報に基づいて特定した前記所在を示す情報とレジスタ退避域に待避したレジスタ退避情報を結合してレジスタに展開することを特徴とする請求項２に記載の割り当て制御プログラム。
【請求項４】
コンピュータが、
スレッドに対する処理の開始指示を受けると、前記スレッドに対して複数のプロセッサコアのいずれかを割り当て、
記憶部に記憶された、前記複数のプロセッサコアそれぞれが前記処理の実行の際に参照する前記複数のプロセッサコアそれぞれについて異なるメモリ領域の所在を示す情報と前記複数のプロセッサコアそれぞれを識別する識別情報とを関連付けた関連情報に基づいて、前記スレッドに割り当てられたプロセッサコアの識別情報から前記所在を示す情報を特定し、
特定した前記所在を示す情報用いて前記メモリ領域を参照する処理を前記スレッドに割り当てられたプロセッサコアを用いて実行する、
処理を実行することを特徴とする割り当て制御方法。
【請求項５】
メモリと該メモリに接続されたＣＰＵとを有する割り当て制御装置において、
前記ＣＰＵに、
スレッドに対する処理の開始指示を受けると、前記スレッドに対して複数のプロセッサコアのいずれかを割り当て、
前記メモリに記憶された、前記複数のプロセッサコアそれぞれが前記処理の実行の際に参照する前記複数のプロセッサコアそれぞれについて異なるメモリ領域の所在を示す情報と前記複数のプロセッサコアそれぞれを識別する識別情報とを関連付けた関連情報に基づいて、前記スレッドに割り当てられたプロセッサコアの識別情報から前記所在を示す情報を特定し、
特定した前記所在を示す情報用いて前記メモリ領域を参照する処理を前記スレッドに割り当てられたプロセッサコアを用いて実行する、
処理を実行させることを特徴とする割り当て制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、割り当て制御プログラム、割り当て制御方法及び割り当て制御装置に関する。
【背景技術】
【０００２】
複数のＣＰＵ（Central  Processing  Unit）コアを備えた情報処理装置の動作においては、複数のＣＰＵコアが同じメモリ領域を参照した場合、スヌーピングが発生し、処理性能の低下を招く。ここで、ＣＰＵコアは、ＣＰＵに含まれるコアが１つの場合にはＣＰＵそのものであり、ＣＰＵに複数のコアが含まれる場合には、各コアである。また、スヌーピングとは、複数のＣＰＵコアが同じメモリへアクセスするときにキャッシュメモリ間の整合性を保つ処理であり、キャッシュコヒーレンシとも呼ばれる。
【０００３】
図１０は、スヌーピングを説明するための図である。図１０は、ｃｏｒｅ＃０〜ｃｏｒｅ＃９で示される１０個のＣＰＵコアをそれぞれ備えた４つのＣＰＵ（ＣＰＵ＃０〜ＣＰＵ＃３）がインターコネクト７で接続される場合を示す。各ＣＰＵコアは、メモリ３内の同じ領域９をアクセスし、領域９がＣＰＵ＃０のｃｏｒｅ＃０及びｃｏｒｅ＃１、及びＣＰＵ＃１のｃｏｒｅ＃１でキャッシュされているとする。
【０００４】
そして、ＣＰＵ＃０のｃｏｒｅ＃０がキャッシュメモリ８内の領域９にデータを書き込むと、ＣＰＵ＃０のｃｏｒｅ＃０はデータを書き込んだ領域９のアドレスを他のＣＰＵコアへ通知する（１）。すると、通知を受け取った他のＣＰＵコアは、通知されたアドレスをキャッシュしている場合にデータを無効化し、また、ＣＰＵ＃０のｃｏｒｅ＃０は書き換えたデータでメモリ３の領域９を更新する（２）。そして、他のＣＰＵコアは、領域９のデータを必要とする場合、メモリ３から領域９のデータを読み込む（３）。
【０００５】
このようなキャッシュメモリ８へのデータの書き込みに伴ってキャッシュメモリ８間の整合性を保つために行われる一連の処理（１）〜（３）がスヌーピングと呼ばれる。
【０００６】
図１１は、スヌーピングが発生する処理事例を示す図である。図１１では、ｃｏｒｅ＃０で実行されるスレッドＡ、ｃｏｒｅ＃１で実行されるスレッドＢ、ｃｏｒｅ＃２で実行されるスレッドＣ、．．．、が管理域［０］〜管理域［１０２３］を分散して使用する。ここで、スレッドとは、ＣＰＵコアを利用する単位であり、並列処理に対応したＯＳ（Operating  System）上でのプログラムの実行の最小単位である。カウンタ３３は、管理域［０］〜管理域［１０２３］を分散して使用するためのインデックスであり、「０」に初期化される。
【０００７】
図１１に示す例では、まず、スレッドＡがカウンタ３３を参照し（１）、カウンタ３３の値に基づいてスレッドＡとスレッドＡが使用する管理域との対応付けが行われる（２）。ここでは、カウンタ３３の値は「０」であるので、スレッドＡは管理域［０］と対応付けられる。
【０００８】
そして、スレッドＡは、次のスレッドＢのためにカウンタ３３を「０」から「１」に更新する（３）。そして、スレッドＢがカウンタ３３を参照し（４）、カウンタ３３の値に基づいてスレッドＢとスレッドＢが使用する管理域との対応付けが行われる。
【０００９】
この例では、異なるスレッドが動作する異なるＣＰＵコアから同一メモリ領域であるカウンタ３３への参照、更新が行われることでスヌーピングが発生し、これにより（４）で示す参照の処理に遅延が発生する。
【００１０】
このため、異なるＣＰＵコアから書き込みが行われる同一メモリ領域をＣＰＵコア数分用意し、スレッドをグループ分けして同一メモリ領域へのアクセスを分散させることで、スヌーピングを抑制することが行われている。図１２は、従来のスヌーピングの対処例を示す図である。図１２は、ＣＰＵコアが２個であって、スレッドをグループ＃１とグループ＃２の２つのグループにグループ分けする場合を示している。
【００１１】
図１２において、グループ＃１に属するスレッドはカウンタＡにアクセスして、グループ＃１用の管理域［０］〜管理域［５１１］を使用する。また、グループ＃２に属するスレッドはカウンタＢにアクセスして、グループ＃２用の管理域［０］〜管理域［５１１］を使用する。このように、スレッドを２つにグループ分けして同一メモリ領域へのアクセスを半減させることでスヌーピングの発生を抑えることができる。
【００１２】
なお、スレッド間で同じデータをアクセスする場合、スレッドＸの出力データがスレッドＹの入力データとなることを判断し、スレッドＹが動作するＣＰＵのキャッシュにデータを書き込むことによってスヌーピングを抑止する従来技術がある。また、ＣＰＵのバストラフィックを監視し、バスのトラフィックが閾値を超えている場合にプロセッサ間でのプロセスの移動を抑止することによって、スヌーピングを抑止する従来技術がある。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】国際公開第２０１１／１６１７７４号
【特許文献２】特開平６−２５９３９５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
図１２に示した従来技術では、グループ＃１に属するスレッドＡがｃｏｒｅ＃０で実行され、グループ＃２に属するスレッドＢがｃｏｒｅ＃１で実行される場合＃１では、スヌーピングは発生しない。一方、グループ＃２に属するスレッドＤがｃｏｒｅ＃０で実行され、同じグループ＃２に属するスレッドＢがｃｏｒｅ＃１で実行される場合＃２では、２つのスレッドがカウンタＢをアクセスするためスヌーピングが発生する。
【００１５】
ＯＳは空いているＣＰＵコアにディスパッチすることによってスレッドを動作させるため、場合＃１と場合＃２はどちらも発生する。したがって、図１２に示した従来技術には、スヌーピングが発生する場合があるという問題がある。
【００１６】
本発明は、１つの側面では、スヌーピングを抑止することを目的とする。
【課題を解決するための手段】
【００１７】
本願の開示する割り当て制御プログラムは、１つの態様において、コンピュータに、割当処理、特定処理及び実行処理を実行させる。割り当て処理は、スレッドに対する処理の開始指示を受けると、前記スレッドに対して複数のプロセッサコアのいずれかを割り当てる。特定処理は、前記複数のプロセッサコアそれぞれについて異なるメモリ領域の所在を示す情報と前記複数のプロセッサコアそれぞれを識別する識別情報とを関連付けた関連情報に基づいて、前記所在を示す情報を特定する。実行処理は、特定した前記所在を示す情報用いて前記メモリ領域を参照する処理を前記スレッドに割り当てられたプロセッサコアを用いて実行する。
【発明の効果】
【００１８】
１実施態様によれば、スヌーピングを抑止することができる。
【図面の簡単な説明】
【００１９】
【図１】図１は、実施例に係るＯＳによるＣＰＵコアとカウンタの対応付けを説明するための図である。
【図２】図２は、実施例に係るＯＳがＣＰＵコア固有の情報とスレッドを動的にひも付けする仕組みを説明するための図である。
【図３】図３は、実施例に係るサーバの構成を示す図である。
【図４】図４は、固有情報管理域の一例を示す図である。
【図５】図５は、プロセス実行制御のフローを示すフローチャートである。
【図６】図６は、スレッド処理のフローを示すフローチャートである。
【図７】図７は、結合処理のフローを示すフローチャートである。
【図８Ａ】図８Ａは、プロセス起動時の予約済みレジスタ管理域の例を示す図である。
【図８Ｂ】図８Ｂは、スレッドにＣＰＵコアを割り当てた時の予約済みレジスタ管理域の例を示す図である。
【図８Ｃ】図８Ｃは、スレッドにＣＰＵコアを割り当てた時の予約済みレジスタ管理域の例を示す図である。
【図９】図９は、サーバのハードウェア構成を示す図である。
【図１０】図１０は、スヌーピングを説明するための図である。
【図１１】図１１は、スヌーピングが発生する処理事例を示す図である。
【図１２】図１２は、従来のスヌーピングの対処例を示す図である。
【発明を実施するための形態】
【００２０】
以下に、本願の開示する割り当て制御プログラム、割り当て制御方法及び割り当て制御装置の実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【００２１】
まず、実施例に係るＯＳによるＣＰＵコアとカウンタの対応付けについて説明する。ここで、カウンタは、異なるＣＰＵコアから書き込みが行われる同一メモリ領域の例である。図１は、実施例に係るＯＳによるＣＰＵコアとカウンタの対応付けを説明するための図である。図１は、ＣＰＵコアの数すなわちグループ数が２つの場合を示す。
【００２２】
図１に示すように、実施例に係るＯＳは、ｃｏｒｅ＃０とグループ＃１を対応付け、ｃｏｒｅ＃１とグループ＃２を対応付ける。すなわち、実施例に係るＯＳは、ｃｏｒｅ＃０でスレッドＡ及びスレッドＣが実行された場合には、スレッドＡ及びスレッドＣをグループ＃１に動的にひも付けて、カウンタＡを使用させる。また、実施例に係るＯＳは、ｃｏｒｅ＃１でスレッドＤ及びスレッドＢが実行された場合には、スレッドＤ及びスレッドＢをグループ＃２に動的にひも付け、カウンタＢを使用させる。
【００２３】
このように、実施例に係るＯＳは、カウンタとスレッドを動的にひも付けする。すなわち、実施例に係るＯＳは、ＣＰＵコア固有の情報とスレッドを動的にひも付けする。
【００２４】
図２は、実施例に係るＯＳがＣＰＵコア固有の情報とスレッドを動的にひも付けする仕組みを説明するための図である。実施例に係るＯＳは、ＣＰＵコア固有の情報とスレッドを動的にひも付けするためにレジスタを利用する。図２では、レジスタ＃１が利用されるが、他のレジスタでもよい。
【００２５】
通常、スレッドに待避したレジスタ情報を全てレジスタに展開することでスレッドは動作することができる。そこで、実施例に係るＯＳは、待避したレジスタの情報をスレッドの動作開始時に展開する際に、スレッドに割り当てられたＣＰＵコアの固有の情報のアドレスをレジスタ＃１に格納し、スレッドがＣＰＵコア固有の情報をアクセスできるようにする。
【００２６】
このため、実施例に係るＯＳは、プロセス内に予約済みレジスタ管理域３１を設ける。予約済みレジスタ管理域３１は、ＣＰＵコア固有の情報を管理するための領域であり、展開先レジスタの番号とＣＰＵコア毎にＣＰＵコア固有の情報のアドレスを記憶する。ここで、展開先レジスタとは、ＣＰＵコア固有の情報のアドレスを格納するレジスタである。
【００２７】
例えば、図２では、予約済みレジスタ管理域３１は、展開先レジスタの番号として「１」を記憶し、ｃｏｒｅ＃０に対応付けてｃｏｒｅ＃０用情報のアドレスを記憶し、ｃｏｒｅ＃１に対応付けてｃｏｒｅ＃１用情報のアドレスを記憶する。ここで、ｃｏｒｅ＃０用情報とはｃｏｒｅ＃０に固有な情報であり、ｃｏｒｅ＃１用情報とはｃｏｒｅ＃１に固有な情報である。
【００２８】
実施例に係るＯＳは、スレッドの実行開始時に、スレッドが割り当てられたＣＰＵコアに固有な情報のアドレスを予約済レジスタ管理域３１から取得し、レジスタ退避域３２に格納されているレジスタ＃２〜レジスタ＃Ｎの情報と結合する。そして、実施例に係るＯＳは、結合した情報をレジスタ＃１〜レジスタ＃Ｎに展開する（１）。
【００２９】
図２では、ｃｏｒｅ＃０でスレッドＡが実行される場合に、ｃｏｒｅ＃０用情報のアドレスが予約済レジスタ管理域３１から取り出されてレジスタ＃１に格納される。また、レジスタ退避域３２からレジスタ＃２〜レジスタ＃Ｎの情報が取り出されてレジスタ＃２〜レジスタ＃Ｎにそれぞれ格納される。
【００３０】
なお、レジスタ＃１に格納すべき情報が予約済レジスタ管理域３１にない場合は、実施例に係るＯＳは、スレッドに割り当てられたＣＰＵコアの固有の情報のアドレスを、ＣＰＵコアと対応付けて予約済レジスタ管理域３１に登録した後レジスタ＃１に格納する。レジスタ＃１に格納すべき情報が予約済レジスタ管理域３１にない場合とは、ＣＰＵが追加され、ＣＰＵコアが初めて使用される場合である。
【００３１】
スレッドＡは、スレッドに割り当てられたｃｏｒｅ＃０用情報のアドレスをレジスタ＃１から取得し（２）、ｃｏｒｅ＃０用情報の参照及び更新を行う（３）。その後、ｃｏｒｅ＃０で動作するスレッドが他のスレッドに切り替えられる際に、実施例に係るＯＳは、レジスタ＃１〜レジスタ＃Ｎの情報をレジスタ退避域３２へ格納する（４）。レジスタ＃１の情報はレジスタ退避域３２へ格納する必要はないが、レジスタ＃１〜レジスタ＃Ｎは１命令でまとめてレジスタ退避域３２へ格納されるため、レジスタ＃１の情報もレジスタ退避域３２へ格納される。
【００３２】
このように、実施例に係るＯＳは、スレッドが割り当てられたＣＰＵコアに固有な情報のアドレスを展開先レジスタに格納することで、スレッドがＣＰＵコアに固有な情報をアクセスできるようにする。したがって、実施例に係るＯＳは、スレッドが割り当てられたＣＰＵコアに固有な情報とスレッドとを動的にひも付けることができ、スレッドは割り当てられたＣＰＵコアに固有な情報をアクセスできる。したがって、実施例に係るＯＳは、異なるＣＰＵコアで動作するスレッドが同一のメモリ領域にアクセスすることを防ぎ、スヌーピングを防ぐことができる。
【００３３】
次に、実施例に係るサーバの構成について説明する。図３は、実施例に係るサーバの構成を示す図である。図３に示すように、サーバ１は、ｃｏｒｅ＃０及びｃｏｒｅ＃１で示される２つのＣＰＵコア２とメモリ３とを有する。なお、ここでは説明の便宜上、２つのＣＰＵコア２のみを示したが、サーバ１は３つ以上のＣＰＵコア２を有してよい。また、サーバ１は複数のＣＰＵを有してもよく、各ＣＰＵが複数のＣＰＵコア２を有してもよい。
【００３４】
ＣＰＵコア２は、スレッドを実行する演算処理装置であり、レジスタ＃１〜レジスタ＃Ｎで示されるＮ個のレジスタ２１を有する。メモリ３は、ＣＰＵコア２が使用する情報やＣＰＵコア２で実行されるプログラム等を記憶するＲＡＭ（Random  Access  Memory）である。メモリ３は、予約済みレジスタ管理域３１と、レジスタ退避域３２と、ｃｏｒｅ＃０用情報域３３ａと、ｃｏｒｅ＃１用情報域３３ｂとを有する。
【００３５】
予約済みレジスタ管理域３１は、ＣＰＵコア２固有の情報を管理するための領域であり、展開先レジスタ域３１ａと、固有情報管理域３１ｂとを有する。展開先レジスタ域３１ａは、ＣＰＵコア固有の情報のアドレスの展開先のレジスタの番号を記憶する。固有情報管理域３１ｂは、ＣＰＵコア２の識別子とＣＰＵコア固有の情報のアドレスとをＣＰＵコア２毎に対応付けて記憶する。
【００３６】
図４は、固有情報管理域３１ｂの一例を示す図である。図４に示すように、固有情報管理域３１ｂは、ＣＰＵコア番号と格納先アドレスとをＣＰＵコア２毎に対応付けて記憶する。ＣＰＵコア番号は、ＣＰＵコア２を識別する番号である。格納先アドレスは、ＣＰＵコア固有の情報の格納先のアドレスである。例えば、ｃｏｒｅ＃０については、ＣＰＵコア番号「０」とｃｏｒｅ＃０用情報域３３ａのアドレスが対応付けて記憶される。
【００３７】
レジスタ退避域３２は、スレッド５１の実行が中断された場合にレジスタ＃１〜レジスタ＃Ｎの情報を待避する領域である。レジスタ退避域３２は、スレッド５１に対応付けられる。
【００３８】
ｃｏｒｅ＃０用情報域３３ａは、ｃｏｒｅ＃０に固有の情報であるｃｏｒｅ＃０用情報を記憶する領域である。ｃｏｒｅ＃１用情報域３３ｂは、ｃｏｒｅ＃１に固有の情報であるｃｏｒｅ＃１用情報を記憶する領域である。
【００３９】
ＣＰＵコア２では、ＯＳ４が実行され、ＯＳ４の管理下でプロセス５が実行される。ＯＳ４は、プロセス５の実行を制御するプロセス実行制御プログラムをＣＰＵコア２で実行することによりプロセス実行制御部４１を実現する。プロセス実行制御部４１は、コア割当部４１ａと、レジスタ展開制御部４１ｂと、スレッド実行制御部４１ｃを有する。コア割当部４１ａは、スレッド５１にＣＰＵコア２を割り当てる。
【００４０】
レジスタ展開制御部４１ｂは、スレッド５１が割り当てられたＣＰＵコア２に固有な情報をスレッド５１からアクセス可能とするため、スレッド５１が割り当てられたＣＰＵコア２に固有な情報のアドレスがレジスタ＃１に格納されるようにレジスタ展開を制御する。具体的には、レジスタ展開制御部４１ｂは、スレッド５１が割り当てられたＣＰＵコア２に固有な情報のアドレスとレジスタ退避域３２のレジスタ＃２〜＃Ｎの情報を結合し、スレッド５１が割り当てられたＣＰＵコア２のレジスタ＃１〜＃Ｎに展開する。
【００４１】
また、レジスタ展開制御部４１ｂは、プロセス５起動時に予約済みレジスタ管理域３１の獲得、展開先レジスタの決定、ＣＰＵコア２及び展開先レジスタの予約済み管理域への登録を行う。なお、展開先レジスタは、例えばレジスタ＃１に固定してもよい。
【００４２】
スレッド実行制御部４１ｃは、スレッド５１の実行を制御する。例えば、スレッド実行制御部４１ｃは、スレッド５１切り替え時にスレッド５１で使用されたレジスタ＃１〜レジスタ＃Ｎの情報をレジスタ退避域３２へ退避する。
【００４３】
次に、プロセス実行制御のフローについて説明する。図５は、プロセス実行制御のフローを示すフローチャートである。図５に示すように、プロセス５の起動時に、レジスタ展開制御部４１ｂが、予約済みレジスタ管理域３１を獲得する（ステップＳ１）。
【００４４】
そして、レジスタ展開制御部４１ｂは、展開先レジスタを決定し（ステップＳ２）、ＣＰＵコア２と展開先レジスタを予約済みレジスタ管理域３１に登録する（ステップＳ３）。なお、ここでは、プロセス毎に展開先レジスタを決定するが、ＯＳで展開先レジスタを一意に決めてもよい。
【００４５】
その後、プロセス５の処理の途中でスレッド５１が生成されると、コア割当部４１ａがスレッド５１にＣＰＵコア２を割り当て（ステップＳ４）、スレッド実行制御部４１ｃがスレッドを実行するスレッド処理を行う（ステップＳ５）。
【００４６】
このように、レジスタ展開制御部４１ｂは、プロセス５の起動時に、ＣＰＵコア２と展開先レジスタを予約済みレジスタ管理域３１に登録することによって、レジスタ展開の準備をすることができる。
【００４７】
次に、スレッド処理のフローについて説明する。図６は、スレッド処理のフローを示すフローチャートである。図６に示すように、スレッド処理開始時に、レジスタ展開制御部４１ｂは、スレッド５１が属するプロセス５の予約済みレジスタ管理域３１に割当先ＣＰＵコア２が登録済みか否かを判定する（ステップＳ１１）。ここで、割当先ＣＰＵコア２とは、スレッド５１が割り当てられたＣＰＵコア２である。
【００４８】
その結果、登録済みでない場合には、プロセス起動後にＣＰＵ追加があった時であるので、レジスタ展開制御部４１ｂは、予約済みレジスタ管理域３１に割当先ＣＰＵコア用の領域を追加する（ステップＳ１２）。そして、レジスタ展開制御部４１ｂは、割当先ＣＰＵコア２を予約済みレジスタ管理域３１に登録する（ステップＳ１３）。
【００４９】
そして、スレッド５１が割当先ＣＰＵコア用の情報域すなわちカウンタを作成する（ステップＳ１４）と、レジスタ展開制御部４１ｂは、割当先ＣＰＵコア用の情報のアドレスを固有情報管理域３１ｂの格納先アドレスへ登録する（ステップＳ１５）。そして、レジスタ展開制御部４１ｂは、予約済みレジスタ管理域３１の情報とレジスタ退避域３２の情報とを結合してレジスタ＃１〜レジスタ＃Ｎへ展開する結合処理を実行する（ステップＳ１６）。
【００５０】
そして、スレッド５１が割当先ＣＰＵコア２の展開先レジスタから割当先ＣＰＵコア用の情報のアドレスを取得する（ステップＳ１７）。そして、スレッド５１が、取得した割当先ＣＰＵコア用の情報のアドレスを用いて、割当先ＣＰＵコア用カウンタの参照及び更新を行う（ステップＳ１８）。そして、スレッド実行制御部４１ｃは、スレッド５１の割当先ＣＰＵコア２のレジスタ＃１〜レジスタ＃Ｎをスレッド５１のレジスタ退避域３２へ格納し（ステップＳ１９）、スレッド処理を終了する。
【００５１】
また、予約済みレジスタ管理域３１に割当先ＣＰＵコアが登録済みである場合（ステップＳ１１，Ｙ）には、レジスタ展開制御部４１ｂは予約済みレジスタ管理域３１にＣＰＵコア固有の情報の格納先アドレスが登録済みであるか否かを判定する（ステップＳ２０）。ここで、予約済みレジスタ管理域３１に割当先ＣＰＵコアが登録済みである場合とは、プロセス起動後にＣＰＵ追加が無い時である。
【００５２】
そして、スレッド実行制御部４１ｃは、予約済みレジスタ管理域３１にＣＰＵコア固有の情報の格納先アドレスが登録済みである場合には、ステップＳ１６へ移動し、登録済みでない場合には、ステップＳ１４へ移動する。
【００５３】
このように、レジスタ展開制御部４１ｂが割当先ＣＰＵコア２に固有な情報のアドレスを展開先レジスタに展開することで、スレッド５１は割当先ＣＰＵコア２に固有な情報にアクセスすることができる。
【００５４】
次に、結合処理のフローについて説明する。図７は、結合処理のフローを示すフローチャートである。図７に示すように、レジスタ展開制御部４１ｂは、割当先ＣＰＵコア２に固有な情報の格納先アドレスを予約済みレジスタ管理域３１から取得する（ステップＳ３１）。そして、レジスタ展開制御部４１ｂは、展開先レジスタの情報を予約済みレジスタ管理域３１から取得する（ステップＳ３２）。
【００５５】
そして、レジスタ展開制御部４１ｂは、対象スレッド５１のレジスタ退避域３２の展開先レジスタに割当先ＣＰＵコア２に固有な情報の格納先アドレスを設定する（ステップＳ３３）。そして、レジスタ展開制御部４１ｂは、割当先ＣＰＵコア２のレジスタ＃１〜レジスタ＃Ｎに対象スレッド５１のレジスタ退避域３２の値を設定する（ステップＳ３４）。
【００５６】
このように、レジスタ展開制御部４１ｂが展開先レジスタに割当先ＣＰＵコア２に固有な情報の格納先アドレスを設定することによって、スレッド５１は割当先ＣＰＵコア２に固有な情報にアクセスすることができる。
【００５７】
次に、予約済みレジスタ管理域３１の例について説明する。図８Ａは、プロセス起動時の予約済みレジスタ管理域３１の例を示す図であり、図８Ｂ及び図８Ｃは、スレッド５１にＣＰＵコア２を割り当てた時の予約済みレジスタ管理域３１の例を示す図である。図８Ｂは、スレッド５１にｃｏｒｅ＃１を割り当てた場合を示し、図８Ｃは、プロセス起動後にＣＰＵ追加があり、追加されたｃｏｒｅ＃Ｎをスレッド５１に割り当てた場合を示す。
【００５８】
図８Ａは、展開先レジスタがレジスタ＃１であり、ＣＰＵコア２の数がＮである場合を示す。図８Ａに示すように、プロセス起動時に、展開先レジスタ域３１ａには「１」が格納され、固有情報管理域３１ｂのＣＰＵコア番号には「０」〜「Ｎ−１」が登録される。
【００５９】
また、図８Ｂに示すように、スレッド５１にｃｏｒｅ＃１を割り当てた場合、ＣＰＵコア番号「１」に対応する格納先アドレスとして「ｘｘｘｘｘｘｘｘ」が固有情報管理域３１ｂに登録される。また、図８Ｃに示すように、プロセス起動後にＣＰＵ追加があり、追加されたｃｏｒｅ＃Ｎをスレッド５１に割り当てた場合、ＣＰＵコア番号「Ｎ」に対応する格納先アドレスとして「ｙｙｙｙｙｙｙｙ」が固有情報管理域３１ｂに登録される。
【００６０】
上述してきたように、実施例では、予約済みレジスタ管理域３１に展開先レジスタ域３１ａと固有情報管理域３１ｂを含める。展開先レジスタ域３１ａは、展開先レジスタの番号を記憶する。固有情報管理域３１ｂは、ＣＰＵコア２に対応付けてＣＰＵコア２に固有な情報の格納先アドレスを記憶する。そして、レジスタ展開制御部４１ｂが、スレッド５１に割り当てられたＣＰＵコア２に固有な情報のアドレスを予約済みレジスタ管理域３１から取得して展開先レジスタに格納する。
【００６１】
このため、スレッド５１は、展開先レジスタに格納されたアドレスを用いてＣＰＵコア２に固有な情報にアクセスすることができる。したがって、複数のスレッド５１からアクセスされる領域をＣＰＵコア２に固有な情報の領域とすることによって、ＯＳ４は、スヌーピングを防ぐことができる。
【００６２】
なお、図３では、サーバ１がハードウェアとして２つのＣＰＵコア２とメモリ３とを有することを示したが、サーバ１はその他のハードウェアも有する。そこで、サーバ１のハードウェア構成について説明する。
【００６３】
図９は、サーバ１のハードウェア構成を示す図である。図９に示すように、サーバ１は、メモリ３と、２つのＣＰＵコア２を含むＣＰＵ１１と、ＬＡＮ（Local  Area  Network）インタフェース１２と、ＨＤＤ（Hard  Disk  Drive）１３とを有する。また、サーバ１は、スーパーＩＯ（Input  Output）１４と、ＤＶＩ（Digital  Visual  Interface）１５と、ＯＤＤ（Optical  Disk  Drive）１６とを有する。
【００６４】
ＬＡＮインタフェース１２は、サーバ１をＬＡＮ経由で他のコンピュータに接続するためのインタフェースである。ＨＤＤ１３は、プログラムやデータを格納するディスク装置であり、スーパーＩＯ１４は、マウスやキーボード等の入力装置を接続するためのインタフェースである。ＤＶＩ１５は、液晶表示装置を接続するインタフェースであり、ＯＤＤ１６は、ＤＶＤの読み書きを行う装置である。
【００６５】
ＬＡＮインタフェース１２は、ＰＣＩエクスプレス（ＰＣＩｅ）によりＣＰＵ１１に接続され、ＨＤＤ１３及びＯＤＤ１６は、ＳＡＴＡ（Serial  Advanced  Technology  Attachment）によりＣＰＵ１１に接続される。スーパーＩＯ１４は、ＬＰＣ（Low  Pin  Count）によりＣＰＵ１１に接続される。
【００６６】
そして、サーバ１において実行されるＯＳ４等のプログラムは、ＤＶＤに記憶され、ＯＤＤ１６によってＤＶＤから読み出されてサーバ１にインストールされる。あるいは、ＯＳ４等のプログラムは、ＬＡＮインタフェース１２を介して接続された他のコンピュータシステムのデータベース等に記憶され、これらのデータベースから読み出されてサーバ１にインストールされる。そして、インストールされたＯＳ４等のプログラムは、ＨＤＤ１３に記憶され、メモリ３に読み出されてＣＰＵ１１によって実行される。
【００６７】
また、実施例では、ＣＰＵコア固有の情報としてカウンタを例として説明したが、本発明はこれに限定されるものではなく、例えば構造体等をＣＰＵコア固有の情報とする場合にも同様に適用することができる。
【００６８】
また、実施例では、ＣＰＵコア固有の情報の格納領域のアドレスをレジスタに格納してスレッドからアクセスできるようにする場合について説明した。しかしながら、本発明はこれに限定されるものではなく、他の方法でスレッドがアクセスできるようにする場合にも同様に適用することができる。
【００６９】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００７０】
（付記１）コンピュータに、
スレッドに対する処理の開始指示を受けると、前記スレッドに対して複数のプロセッサコアのいずれかを割り当て、
記憶部に記憶された、前記複数のプロセッサコアそれぞれが前記処理の実行の際に参照する前記複数のプロセッサコアそれぞれについて異なるメモリ領域の所在を示す情報と前記複数のプロセッサコアそれぞれを識別する識別情報とを関連付けた関連情報に基づいて、前記スレッドに割り当てられたプロセッサコアの識別情報から前記所在を示す情報を特定し、
特定した前記所在を示す情報用いて前記メモリ領域を参照する処理を前記スレッドに割り当てられたプロセッサコアを用いて実行する、
処理を実行させることを特徴とする割り当て制御プログラム。
【００７１】
（付記２）前記所在を示す情報をレジスタに保持し、前記スレッドにレジスタから前記所在を示す情報を取得させることを特徴とする付記１に記載の割り当て制御プログラム。
【００７２】
（付記３）前記特定する処理は、前記関連情報に基づいて特定した前記所在を示す情報とレジスタ退避域に待避したレジスタ退避情報を結合してレジスタに展開することを特徴とする付記２に記載の割り当て制御プログラム。
【００７３】
（付記４）コンピュータが、
スレッドに対する処理の開始指示を受けると、前記スレッドに対して複数のプロセッサコアのいずれかを割り当て、
記憶部に記憶された、前記複数のプロセッサコアそれぞれが前記処理の実行の際に参照する前記複数のプロセッサコアそれぞれについて異なるメモリ領域の所在を示す情報と前記複数のプロセッサコアそれぞれを識別する識別情報とを関連付けた関連情報に基づいて、前記スレッドに割り当てられたプロセッサコアの識別情報から前記所在を示す情報を特定し、
特定した前記所在を示す情報用いて前記メモリ領域を参照する処理を前記スレッドに割り当てられたプロセッサコアを用いて実行する、
処理を実行することを特徴とする割り当て制御方法。
【００７４】
(付記５)複数のプロセッサコアそれぞれが処理の実行の際に参照する情報であって前記複数のプロセッサコアそれぞれについて異なるメモリ領域の所在を示す情報と、前記複数のプロセッサコアそれぞれを識別する識別情報とを関連付けた関連情報を記憶する記憶部と、
スレッドに対する処理の開始指示を受けると、前記スレッドに対して複数のプロセッサコアのいずれかを割り当てる割当部と、
前記記憶部が記憶する関連情報に基づいて、前記スレッドに割り当てられたプロセッサコアの識別情報から前記所在を示す情報を特定する特定部と、
特定した前記所在を示す情報用いて前記メモリ領域を参照する処理を前記スレッドに割り当てられたプロセッサコアを用いて実行する実行制御部と
を備えることを特徴とする割り当て制御装置。
【００７５】
（付記６）コンピュータに、
スレッドに対する処理の開始指示を受けると、前記スレッドに対して複数のプロセッサコアのいずれかを割り当て、
記憶部に記憶された、前記複数のプロセッサコアそれぞれが前記処理の実行の際に参照する前記複数のプロセッサコアそれぞれについて異なるメモリ領域の所在を示す情報と前記複数のプロセッサコアそれぞれを識別する識別情報とを関連付けた関連情報に基づいて、前記スレッドに割り当てられたプロセッサコアの識別情報から前記所在を示す情報を特定し、
特定した前記所在を示す情報用いて前記メモリ領域を参照する処理を前記スレッドに割り当てられたプロセッサコアを用いて実行する、
処理を実行させることを特徴とする割り当て制御プログラムを記憶したコンピュータ読み取り可能記憶媒体。
【００７６】
（付記７）メモリと該メモリに接続されたＣＰＵとを有する割り当て制御装置において、
前記ＣＰＵに、
スレッドに対する処理の開始指示を受けると、前記スレッドに対して複数のプロセッサコアのいずれかを割り当て、
前記メモリに記憶された、前記複数のプロセッサコアそれぞれが前記処理の実行の際に参照する前記複数のプロセッサコアそれぞれについて異なるメモリ領域の所在を示す情報と前記複数のプロセッサコアそれぞれを識別する識別情報とを関連付けた関連情報に基づいて、前記スレッドに割り当てられたプロセッサコアの識別情報から前記所在を示す情報を特定し、
特定した前記所在を示す情報用いて前記メモリ領域を参照する処理を前記スレッドに割り当てられたプロセッサコアを用いて実行する、
処理を実行させることを特徴とする割り当て制御装置。
【符号の説明】
【００７７】
１    サーバ
２    ＣＰＵコア
３    メモリ
４    ＯＳ
５    プロセス
７    インターコネクト
８    キャッシュメモリ
９    領域
１２    ＬＡＮインタフェース
１３    ＨＤＤ
１４    スーパーＩＯ
１５    ＤＶＩ
１６    ＯＤＤ
２１    レジスタ
３１    予約済みレジスタ管理域
３１ａ    展開先レジスタ域
３１ｂ    固有情報管理域
３２    レジスタ退避域
３３    カウンタ
３３ａ    ｃｏｒｅ＃０用情報域
３３ｂ    ｃｏｒｅ＃１用情報域
４１    プロセス実行制御部
４１ａ    コア割当部
４１ｂ    レジスタ展開制御部
４１ｃ    スレッド実行制御部
５１    スレッド
【図１】
0006281442.tif 000002
【図２】
0006281442.tif 000003
【図３】
0006281442.tif 000004
【図４】
0006281442.tif 000005
【図５】
0006281442.tif 000006
【図６】
0006281442.tif 000007
【図７】
0006281442.tif 000008
【図８Ａ】
0006281442.tif 000009
【図８Ｂ】
0006281442.tif 000010
【図８Ｃ】
0006281442.tif 000011
【図９】
0006281442.tif 000012
【図１０】
0006281442.tif 000013
【図１１】
0006281442.tif 000014
【図１２】
0006281442.tif 000015