(57)【特許請求の範囲】
【請求項１】
与えられた対象プログラムの複数のスレッドを各々が独立して実行可能な複数のコアを備えるマルチコアプロセッサ上で、
前記対象プログラムと、
前記対象プログラムのスレッドが動作可能な前記コアを指定するコア割り当てプログラムと、
前記対象プログラムによって発生されたスレッド生成要求に応じて新規スレッドを生成するスレッド生成機能および動作可能に指定された前記コアで前記新規スレッドを動作させるコアアフィニティ機能を備えるオペレーティングシステムと
が動作すると共に、
前記マルチコアプロセッサは、前記コア割り当てプログラムの実行により、
前記対象プログラムを起動するプログラム起動機能と、
前記対象プログラムを起動する際に前記新規スレッドを割り当て可能な前記コアについてユーザから入力された設定内容を予め備えられた記憶手段に記憶するコア割り当て管理機能と、
前記スレッド生成要求の発生を検出するスレッド生成監視機能と、
前記検出された前記スレッド生成要求によって生成された新規スレッドが動作する前記コアを、前記記憶手段に記憶された前記設定内容に基づいて指定するコア割り当て設定機能と
を備えることを特徴とするコンピュータ。
【請求項２】
前記コア割り当て管理機能は、前記対象プログラムが生成した前記各新規スレッドの生成順と、当該スレッドの割り当て先である割り当てコアとを対応づけた前記設定内容を前記記憶手段に記憶するものであることを特徴とする、請求項１に記載のコンピュータ。
【請求項３】
前記マルチコアプロセッサは、前記オペレーティングシステムの実行により、前記対象プログラムによる前記スレッド生成要求の発生を前記スレッド生成監視機能に通知するシステムコールトラップ機能
を備えることを特徴とする、請求項１に記載のコンピュータ。
【請求項４】
前記マルチコアプロセッサは、前記コア割り当てプログラムの実行により、前記対象プログラムの実行中に前記記憶手段に記憶された前記新規スレッドを割り当て可能な前記コアについての設定内容をユーザからの入力に基づいて変更するコア割り当て変更機能
を備えることを特徴とする、請求項１に記載のコンピュータ。
【請求項５】
前記マルチコアプロセッサ上で、
前記対象プログラムによる前記スレッド生成要求を検出して前記スレッド生成監視機能に通知するトラップライブラリと、
前記新規スレッド生成要求の呼び出し先を前記オペレーティングシステムから前記トラップライブラリに変更するダイナミックリンカーと
が動作することを特徴とする、請求項１に記載のコンピュータ。
【請求項６】
与えられた対象プログラムの複数のスレッドを各々が独立して実行可能な複数のハードウェアスレッドを備えるマルチスレッドプロセッサ上で、
前記対象プログラムと、
前記対象プログラムのスレッドが動作可能な前記ハードウェアスレッドを指定するハードウェアスレッド割り当てプログラムと、
前記対象プログラムによって発生されたスレッド生成要求に応じて新規スレッドを生成するスレッド生成機能および動作可能に指定された前記ハードウェアスレッドで前記新規スレッドを動作させるアフィニティ機能を備えるオペレーティングシステムと
が動作すると共に、
前記マルチスレッドプロセッサは、前記ハードウェアスレッド割り当てプログラムの実行により、
前記対象プログラムを起動するプログラム起動機能と、
前記対象プログラムを起動する際に前記新規スレッドを割り当て可能な前記ハードウェアスレッドについてユーザから入力された設定内容を予め備えられた記憶手段に記憶するハードウェアスレッド割り当て管理機能と、
前記スレッド生成要求の発生を検出するスレッド生成監視機能と、
前記検出された前記スレッド生成要求によって生成された新規スレッドが動作する前記ハードウェアスレッドを、前記記憶手段に記憶された前記設定内容に基づいて指定するハードウェアスレッド割り当て設定機能と
を備えることを特徴とするコンピュータ。
【請求項７】
複数のスレッドを各々が独立して実行可能な複数のコアを備えるマルチコアプロセッサ上で対象プログラムを起動する際に新規スレッドを割り当て可能な前記コアについてユーザから入力された設定内容をコア割り当て管理機能が予め備えられた記憶手段に記憶し、
前記対象プログラムのスレッドが動作可能な前記コアを、前記記憶手段に記憶された前記設定内容に基づいてコア割り当て設定機能が指定し、
前記マルチコアプロセッサ上でプログラム起動機能が前記対象プログラムの動作を開始させ、
前記対象プログラムによってスレッド生成要求が発生されたか否かをスレッド生成監視機能が監視し、
前記スレッド生成要求によって生成された前記新規スレッドが動作する前記コアを、前記記憶手段に記憶された前記設定内容に基づいて前記コア割り当て設定機能が指定し、
前記コア割り当て設定機能によって指定された前記コアでオペレーティングシステムのコアアフィニティ機能が当該新規スレッドを動作させる
ことを特徴とするコア割り当て方法。
【請求項８】
パーソナルコンピュータが備える、与えられた対象プログラムの複数のスレッドを各々が独立して実行可能な複数のコアを備えるマルチコアプロセッサに、
複数の前記スレッドを各々が独立して実行可能な複数の前記コアを備えるマルチコアプロセッサ上で対象プログラムを起動する際に前記新規スレッドを割り当て可能なコアについてユーザから入力された設定内容を予め備えられた記憶手段に記憶する手順、
前記対象プログラムのスレッドが動作可能な前記コアを、前記記憶手段に記憶された前記設定内容に基づいて指定する手順、
前記マルチコアプロセッサ上で前記対象プログラムの動作を開始させる手順、
前記対象プログラムがスレッド生成要求を発するか否かを監視する手順、
前記対象プログラムが前記スレッド生成要求を発した場合にこの新規スレッドが動作する前記コアを、前記記憶手段に記憶された前記設定内容に基づいて指定する手順、
および当該新規スレッドを指定された前記コアで動作させる手順
を実行させることを特徴とするコア割り当てプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ、コア割り当て方法およびプログラムに関し、特にマルチコアプロセッサもしくはマルチスレッドプロセッサでプログラムを実行するユーザが当該プログラムのスレッドの各コア（もしくはハードウェアスレッド）への割り当てを指定することが可能なコンピュータ等に関する。
【背景技術】
【０００２】
パーソナルコンピュータは、通常は１台に１つのプロセッサ（ＣＰＵ: Central Processing Unit、主演算制御手段）を持ち、そこで数々の演算処理を実行している。しかしながら、近年ではプロセッサ単独での演算能力向上が限界に達しているので、１つのプロセッサの中で実際に演算処理を行う部分（コア）を複数個持つものが主流になっている。このような構成のプロセッサをマルチコアプロセッサという。マルチコアプロセッサは複数のスレッド（プロセッサの利用単位）を同時に実行することが可能である。
【０００３】
また、複数個のコアを持たなくとも、複数個のハードウェアスレッドを持つことによって複数のスレッドを同時に実行可能なプロセッサも存在する。これをマルチスレッドプロセッサという。マルチコアプロセッサおよびマルチスレッドプロセッサで動作性能の向上や消費電力の抑制の効果を得るためには、プログラムの側が複数スレッドの同時実行に対応したものであることが通常の場合には必要である。
【０００４】
マルチコアプロセッサ上でプログラムを動作させる場合、各スレッドの各コアへの割り当てが、動作性能の向上や消費電力の抑制の効果を得るために重要となる。特にプロセッサが階層的な構造を持つ場合、階層ごとでの演算器やメモリなどのようなリソース（コンピュータ資源）の共有や、階層単位での省電力化機能が備えられている場合などがあるので、なおさらスレッドのコアへの割り当てが重要となる。
【０００５】
図１９は、一般的なマルチコアプロセッサ９０１の内部構成について示す説明図である。図１９（ａ）は動作性能の向上が期待できるスレッドの割り当てを、図１９（ｂ）は消費電力の削減が期待できるスレッドの割り当てを各々示す。マルチコアプロセッサ９０１は、共有バス９３１で接続された２つのプロセッサノード９１１および９２１を持つ。共有バス９３１には記憶手段９３２も接続されている。
【０００６】
プロセッサノード９１１（ノード０）は２つのプロセッサコア９１２ａ（コア０）および９１２ｂ（コア１）と、これらプロセッサコア９１２ａおよび９１２ｂによって共有される共有キャッシュメモリ９１３を備える。プロセッサノード９２１（ノード１）もこれと同様に、２つのプロセッサコア９２２ａ（コア２）および９２２ｂ（コア３）と、共有キャッシュメモリ９２３を備える。
【０００７】
このマルチコアプロセッサ９０１でプログラム９４１を動作させる場合に、例えば図１９（ａ）に示すように、プログラム９４１の２つのスレッド９４１ａおよび９４１ｂを各々プロセッサコア９１２ａ（コア０）および９２２ａ（コア２）に割り当てると、共有キャッシュ９１３および９２３を各々１つのスレッドのみで占有できるので、動作性能の向上が期待できる。
【０００８】
また、図１９（ｂ）に示すように、２つのスレッド９４１ａおよび９４１ｂを各々プロセッサコア９１２ａ（コア０）および９１２ｂ（コア１）に割り当てると、プロセッサノード９２１（ノード１）で動作するスレッドが存在しないので、このプロセッサノード９２１（ノード１）を省電力状態にすることができ、これによって消費電力の削減が期待できる。
【０００９】
Ｌｉｎｕｘ（登録商標）やウィンドウズ（登録商標）などのような汎用的なＯＳ（Operating System、基本ソフトウェア）が利用されるマルチコアプロセッサでは、ＯＳが各スレッドをどのコアに割り当てるかを決定する機能を持つ。この機能をスケジューラという。
【００１０】
一般的に、汎用ＯＳのスケジューラは、汎用的なプロセッサアーキテクチャやアプリケーション構成を想定して設計されているため、ＯＳの行うコア割り当てでは、必ずしもユーザの満足する割り当てが行われるとは限らない。上記のように、ユーザが「動作性能の向上」を優先したい場合と「消費電力の削減」を優先したい場合とで、各スレッドを各コアに割り当てる動作が異なるからである。即ち、ユーザが期待する動作に応じて、コア割り当て指定を行えることが必要である。
【００１１】
この目的のため、ＯＳのコアアフィニティ（コア親和性）機能を利用することができる。コアアフィニティ機能では、割り当ての対象となるスレッドのＩＤと、当該スレッドを割り当て可能なコアの集合を指定することができる。この様な指定が行われたスレッドに対して、ＯＳのスケジューラは指定されたコア集合に含まれるコアにのみそのスレッドを割り当てる。
【００１２】
コアアフィニティ機能を用いてスレッドのコア割り当てを指定する場合、スレッドの動作を記述するプログラムでコアアフィニティ機能を呼び出すという方法がある。この方法では、各スレッドがコアアフィニティ機能を呼び出すことによって、呼び出し元のスレッドに対して「割り当て可能なコア集合」を設定することができる。
【００１３】
例えば以下の数１に示すようなコマンドラインでプログラムを起動し、「割り当て可能なコア集合」として特定のコアのみを含むようにすることで、特定のコアにスレッドを割り当てることができる。以下の数１では、プログラム（ｐｒｏｇｒａｍ）が４つのスレッドを生成する場合に、各スレッドを順にコア０、コア２、コア４、コア６に割り当てるように指定するという例を示している。
【数１】
0005659780.tif 000002
【００１４】
図２０は、図１９に示したマルチコアプロセッサ９０１で、コアアフィニティ機能を利用した場合の各スレッドに対するコアの割り当ての例について示す説明図である。マルチコアプロセッサ９０１は前述のようにコア０〜３の４つのコアを持つが、これに対して、図２０（ａ）ではスレッド９５１に対して「割り当て可能なコア集合」として「コア０およびコア１」を指定した場合を示し、図２０（ｂ）では「コア１」のみを指定した場合を示す。
【００１５】
図２０（ａ）に示した「割り当て可能なコア集合」を「コア０およびコア１」とした場合では、スレッド９５１はコア０およびコア１のうちいずれかに割り当てられる。これに対して、図２０（ｂ）に示した「割り当て可能なコア集合」を「コア１」とした場合では、スレッド９５１は必ずコア１に割り当てられる。
【００１６】
これに関連する技術として、たとえば以下のような技術文献がある。特許文献１には、複数のプロセッサを備えたコンピュータで、ＯＳのスケジューラが各プロセスを各プロセッサに割り当てて動作させるという技術が記載されている。この技術は、複数のプロセッサをグループに分割し、プロセスにグループを割り当てる。ＯＳのスケジューラは、割り当てられたグループ内のプロセッサにプロセスを割り当て、そのプロセスが生成した子プロセスもそのグループ内のプロセッサに割り当てる。これによって、子プロセスが他のグループのプロセッサに割り当てられないようにする。
【００１７】
非特許文献１には、ＯＳの一つであるＨＰ−ＵＸで、該ＯＳが提供する機能をプログラムが利用するための共有ライブラリについて記載されている。非特許文献２には、コアアフィニティ機能についての周知技術が記載されている。
【先行技術文献】
【特許文献】
【００１８】
【特許文献１】特開平０９−１４６８９８号公報
【非特許文献】
【００１９】
【非特許文献１】「共有ライブラリの作成」、ＨＰ−ＵＸリンカー＆ライブラリー・ユーザーズ・ガイドより、２００１年３月、ヒューレット・パッカード・カンパニー、［平成２２年１２月１４日検索］、インターネット＜URL：http://docs.hp.com/ja/B2355-90732/ch05s07.html＞
【非特許文献２】「プロセッサ親和性」、ウィキペディアより、２００９年１２月３日、［平成２２年１２月１４日検索］、インターネット＜URL：http://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%BB%E3%83%83%E3%82%B5%E8%A6%AA%E5%92%8C%E6%80%A7＞
【発明の概要】
【発明が解決しようとする課題】
【００２０】
前述の数１に示した「割り当て可能なコア集合」をコマンドラインで指定するという方法では、プログラム（ｐｒｏｇｒａｍ）がコアアフィニティ機能を呼び出すように作成されている必要がある。従って、プログラムがコアアフィニティ機能に対応するように開発されていない場合は、プログラムを修正する必要がある。プログラムのソースコードが入手できない場合などのように、プログラムを修正できない場合には、この方法を用いることができない。また、プログラムの修正が可能な場合でも、その修正には手間がかかる。
【００２１】
コアアフィニティ機能による割り当て可能コア集合は、最初に起動されたスレッドからそのスレッドによって新規に生成されたスレッド（以後子スレッドという）に継承される。これを利用して、スレッドのコアへの割り当てを制御したいコアアフィニティ機能非対応のプログラム（以後対象プログラムという）を起動する際に、スレッドのコアへの割り当てを行ってからその対象プログラムを起動するという方法もある。そのためのスレッドのコアへの割り当てを行うプログラムを、ここでは起動プログラムという。
【００２２】
この場合、以下の数２に示すようなコマンドラインで起動プログラム（ｌａｕｎｃｈｅｒ）を起動し、「割り当て可能なコア集合」を指定してから対象プログラム（ｐｒｏｇｒａｍ）を起動するようにする。以下の数２では、対象プログラム（ｐｒｏｇｒａｍ）のスレッドをコア０に割り当てるという例を示している。
【数２】
0005659780.tif 000003
【００２３】
図２１は、図１９に示したマルチコアプロセッサ９０１で数２に示すコマンドラインによって対象プログラムのスレッドをコア０に割り当てた場合の動作を示す説明図である。起動プログラム９６１は、ユーザの指定に基づいてコアアフィニティ機能を呼び出し、自分自身の割り当て可能なコアを指定する。これに引き続いて、起動プログラム９６１は対象プログラム９６２を起動する。このとき対象プログラム９６２は、起動プログラム９６１の子スレッドとして起動されるため、起動プログラム９６１に指定された割り当て可能コアがそのまま継承される。これによって、対象プログラム９６２に対してコア割り当ての指定が可能となる。
【００２４】
数２に示したコマンドラインで対象プログラム９６２に対して「コア０（プロセッサコア９１２ａ）」が割り当てられた場合、対象プログラム９６２の最初のスレッド９６２ａ（スレッド０）は当然「コア０」で動作する。
【００２５】
しかしながら、この対象プログラム９６２の最初のスレッド９６２ａ（スレッド０）がさらに子スレッド９６２ｂ（スレッド１）を生成する場合、この子スレッド９６２ｂ（スレッド１）も割り当て可能コアとして「コア０」の指定がスレッド０からそのまま引き継がれることになる。図２２は、図１９に示したマルチコアプロセッサ９０１上で数２に示すコマンドラインによって起動プログラム９６１から対象プログラム９６２を起動した場合の動作を示す説明図である。
【００２６】
この場合、図２２に示したように、「コア０（プロセッサコア９１２ａ）」上でスレッド９６２ａ（スレッド０）および子スレッド９６２ｂ（スレッド１）の両方が動作することになる。「コア０」上でスレッド９６２ａ（スレッド０）が動作するように指定した場合、その子スレッド９６２ｂ（スレッド１）に対してこれとは別の割り当て可能コアを指定することはできない。
【００２７】
即ち、対象プログラム９６２をコアアフィニティ機能に対応するように修正しない限り、その対象プログラム９６２の実行中に生成された子スレッドに対して最初のスレッドとは別個に割り当て可能コアを指定することは、周知技術では不可能である。これでは、マルチコアプロセッサを利用することによって期待される動作性能向上や省電力化の効果を得ることができない。
【００２８】
前述の特許文献１記載の技術では、生成された個々の子プロセスをグループ内のどのプロセッサに割り当てるかが考慮されない。そのため、この技術をマルチコアプロセッサにおけるスレッドのコアへの割り当てに適用したとしても、個々の子プロセスを割り当てるコアを指定することはできないので、上記の問題は解決されない。その他の非特許文献１〜２にも、この問題を解決しうる技術は記載されていない。
【００２９】
本発明の目的は、対象プログラムをコアアフィニティ機能に対応するように修正しなくとも、マルチコアプロセッサもしくはマルチスレッドプロセッサを利用することによる動作性能向上や省電力化の効果を得ることを可能とするコンピュータ、コア割り当て方法およびプログラムを提供することにある。
【課題を解決するための手段】
【００３０】
上記目的を達成するため、本発明に係るコンピュータは、与えられた対象プログラムの複数のスレッドを各々が独立して実行可能な複数のコアを備えるマルチコアプロセッサ上で、対象プログラムと、対象プログラムのスレッドが動作可能なコアを指定するコア割り当てプログラムと、対象プログラムによって発生されたスレッド生成要求に応じて新規スレッドを生成するスレッド生成機能および動作可能に指定されたコアで新規スレッドを動作させるコアアフィニティ機能を備えるオペレーティングシステムとが動作すると共に、マルチコアプロセッサは、コア割り当てプログラムの実行により、対象プログラムを起動するプログラム起動機能と、対象プログラムを起動する際に新規スレッドを割り当て可能なコアについてユーザから入力された設定内容を予め備えられた記憶手段に記憶するコア割り当て管理機能と、スレッド生成要求の発生を検出するスレッド生成監視機能と、検出されたスレッド生成要求によって生成された新規スレッドが動作するコアを、記憶手段に記憶された設定内容に基づいて指定するコア割り当て設定機能とを備えることを特徴とする。
【００３１】
上記目的を達成するため、本発明に係る他のコンピュータは、与えられた対象プログラムの複数のスレッドを各々が独立して実行可能な複数のハードウェアスレッドを備えるマルチスレッドプロセッサ上で、対象プログラムと、対象プログラムのスレッドが動作可能なハードウェアスレッドを指定するハードウェアスレッド割り当てプログラムと、対象プログラムによって発生されたスレッド生成要求に応じて新規スレッドを生成するスレッド生成機能および動作可能に指定されたハードウェアスレッドで新規スレッドを動作させるアフィニティ機能を備えるオペレーティングシステムとが動作すると共に、マルチスレッドプロセッサは、ハードウェアスレッド割り当てプログラムの実行により、対象プログラムを起動するプログラム起動機能と、対象プログラムを起動する際に新規スレッドを割り当て可能なハードウェアスレッドについてユーザから入力された設定内容を予め備えられた記憶手段に記憶するハードウェアスレッド割り当て管理機能と、スレッド生成要求の発生を検出するスレッド生成監視機能と、検出されたスレッド生成要求によって生成された新規スレッドが動作するハードウェアスレッドを、記憶手段に記憶された設定内容に基づいて指定するハードウェアスレッド割り当て設定機能とを備えることを特徴とする。
【００３２】
上記目的を達成するため、本発明に係るコア割り当て方法は、複数のスレッドを各々が独立して実行可能な複数のコアを備えるマルチコアプロセッサ上で対象プログラムを起動する際に新規スレッドを割り当て可能なコアについてユーザから入力された設定内容をコア割り当て管理機能が予め備えられた記憶手段に記憶し、対象プログラムのスレッドが動作可能なコアを、記憶手段に記憶された設定内容に基づいてコア割り当て設定機能が指定し、マルチコアプロセッサ上でプログラム起動機能が対象プログラムの動作を開始させ、対象プログラムによってスレッド生成要求が発生されたか否かをスレッド生成監視機能が監視し、スレッド生成要求によって生成された新規スレッドが動作するコアを、記憶手段に記憶された設定内容に基づいてコア割り当て設定機能が指定し、指定されたコアでオペレーティングシステムのコアアフィニティ機能が当該新規スレッドを動作させることを特徴とする。
【００３３】
上記目的を達成するため、本発明に係るコア割り当てプログラムは、パーソナルコンピュータが備える、与えられた対象プログラムの複数のスレッドを各々が独立して実行可能な複数のコアを備えるマルチコアプロセッサに、複数のスレッドを各々が独立して実行可能な複数のコアを備えるマルチコアプロセッサ上で対象プログラムを起動する際に新規スレッドを割り当て可能なコアについてユーザから入力された設定内容を予め備えられた記憶手段に記憶する手順、対象プログラムのスレッドが動作可能なコアを、記憶手段に記憶された設定内容に基づいて指定する手順、マルチコアプロセッサ上で対象プログラムの動作を開始させる手順、対象プログラムがスレッド生成要求を発するか否かを監視する手順、対象プログラムがスレッド生成要求を発した場合にこの新規スレッドが動作するコアを、記憶手段に記憶された設定内容に基づいて指定する手順、および当該新規スレッドを指定されたコアで動作させる手順を実行させることを特徴とする。
【発明の効果】
【００３４】
本発明は、上述したように対象プログラムが動作中に生成した新規スレッドを検出してこの新規スレッドが動作するコアを指定してそこで動作させるように構成したので、新規スレッドが動作するコアを動作要件などに応じてユーザが任意に指定することができる。これによって、対象プログラムをコアアフィニティ機能に対応するように修正しなくとも、マルチコアプロセッサもしくはマルチスレッドプロセッサを利用することによる動作性能向上や省電力化の効果を得ることが可能であるという優れた特徴を持つコンピュータ、コア割り当て方法およびプログラムを提供することができる。
【図面の簡単な説明】
【００３５】
【図１】本発明の第１の実施形態に係るパーソナルコンピュータの構成を示す説明図である。図１（ａ）は、パーソナルコンピュータにおけるハードウェアとＯＳおよびその他のソフトウェアの関連を主に示し、図１（ｂ）はソフトウェア相互間の関連を主に示している。
【図２】図１で示したコア割り当てプログラムのより詳しい構成について示す説明図である。
【図３】図１〜２に示した割り当て管理表の記憶内容の例を示す説明図である。
【図４】図１〜２に示したコア割り当てプログラムの動作について説明するフローチャートである。
【図５】図４のステップＳ１０３〜１０６に示した処理の概念について示す説明図である。
【図６】図１で示したプロセッサの構成について示す説明図である。
【図７】図１〜２および図６に示したプロセッサで、数５に示すコア割り当て指定で本実施形態の動作を行った場合の動作の一例について示す説明図である。
【図８】図１〜２および図６に示したプロセッサで、数６に示すコア割り当て指定で本実施形態の動作を行った場合の動作の別の一例について示す説明図である。
【図９】本発明の第１の実施形態の第１の拡張に係るパーソナルコンピュータの構成について示す説明図である。
【図１０】本発明の第１の実施形態の第２の拡張に係るパーソナルコンピュータの構成について示す説明図である。
【図１１】本発明の第２の実施形態に係るパーソナルコンピュータの構成を示す説明図である。図１１（ａ）は、パーソナルコンピュータにおけるハードウェアとＯＳおよびその他のソフトウェアの関連を主に示し、図１１（ｂ）はソフトウェア相互間の関連を主に示している。
【図１２】図１１で示したコア割り当てプログラムのより詳しい構成について示す説明図である。
【図１３】図１２に示したコア割り当て変更機能の動作を示すフローチャートである。
【図１４】本発明の第３の実施形態に係るパーソナルコンピュータの構成を示す説明図である。図１４（ａ）は、パーソナルコンピュータにおけるハードウェアとＯＳおよびその他のソフトウェアの関連を主に示し、図１４（ｂ）はソフトウェア相互間の関連を主に示している。
【図１５】図１４に示したコア割り当てプログラムおよびダイナミックリンカー、トラップライブラリの動作について説明するフローチャートである。
【図１６】本発明の第４の実施形態に係るパーソナルコンピュータの構成を示す説明図である。図１６（ａ）は、パーソナルコンピュータにおけるハードウェアとＯＳおよびその他のソフトウェアの関連を主に示し、図１６（ｂ）はソフトウェア相互間の関連を主に示している。
【図１７】図１６に示したプロセッサの構成について示す説明図である。
【図１８】図１６に示したパーソナルコンピュータ８１０で、対象プログラム８２３を動作させた場合の各々のスレッドのＨＷスレッドへの割り当ての例を示す説明図である。
【図１９】一般的なマルチコアプロセッサの内部構成について示す説明図である。図１９（ａ）は動作性能の向上が期待できるスレッドの割り当てを、図１９（ｂ）は消費電力の削減が期待できるスレッドの割り当てを各々示す。
【図２０】図１９に示したマルチコアプロセッサで、コアアフィニティ機能を利用した場合の各スレッドに対するコアの割り当ての例について示す説明図である。図２０（ａ）ではスレッドに対して「割り当て可能なコア集合」として「コア０およびコア１」を指定した場合を示し、図２０（ｂ）では「コア１」のみを指定した場合を示す。
【図２１】図１９に示したマルチコアプロセッサで数２に示すコマンドラインによって対象プログラムのスレッドをコア０に割り当てた場合の動作を示す説明図である。
【図２２】図１９に示したマルチコアプロセッサ上で数２に示すコマンドラインによって起動プログラムから対象プログラムを起動した場合の動作を示す説明図である。
【発明を実施するための形態】
【００３６】
（第１の実施形態）
以下、本発明の第１の実施形態の構成について添付図１〜２に基づいて説明する。
最初に、本実施形態の基本的な内容について説明し、その後でより具体的な内容について説明する。
本実施形態に係るコンピュータ（パーソナルコンピュータ１０）は、与えられた対象プログラムの複数のスレッドを各々が独立して実行可能な複数のコアを備えるマルチコアプロセッサ１１を備えたコンピュータである。このパーソナルコンピュータ１０は、マルチコアプロセッサ上で、対象プログラム２３と、対象プログラムのスレッドが動作可能なコアを指定するコア割り当てプログラム２１と、対象プログラムからの要求に応じて新規スレッドを生成するスレッド生成機能２２ａおよび動作可能に指定されたコアで新規スレッドを動作させるコアアフィニティ機能２２ｃを備えるオペレーティングシステム（ＯＳ２２）とが動作する。そしてコア割り当てプログラム２２が、対象プログラムが動作中に新規スレッドを生成した場合にこれを検出するスレッド生成監視機能２１ａと、検出された新規スレッドが動作するコアを指定するコア割り当て設定機能２１ｂとを持つ。
【００３７】
また、コア割り当てプログラムが、対象プログラムを起動するプログラム起動機能２１ｃと、対象プログラムを起動する際に新規スレッドを割り当て可能なコアについてユーザから入力された設定内容を予め備えられた記憶手段に記憶してこの設定内容に基づいてコア割り当て設定機能にコアを指定させるコア割り当て管理機能２１ｄを持つ。そして、ＯＳ２２が、対象プログラムによる新規スレッド生成要求があった場合にこのことをスレッド生成監視機能に通知するシステムコールトラップ機能２２ｂを持つ。
【００３８】
この構成を備えることにより、パーソナルコンピュータ１０は、対象プログラム２３をコアアフィニティ機能に対応するように修正しなくとも、対象プログラムの生成する個々のスレッドに対してコアの割り当てが可能となる。
以下、これをより詳細に説明する。
【００３９】
図１は、本発明の第１の実施形態に係るパーソナルコンピュータ１０の構成を示す説明図である。図１（ａ）は、パーソナルコンピュータ１０におけるハードウェアとＯＳおよびその他のソフトウェアの関連を主に示し、図１（ｂ）はソフトウェア相互間の関連を主に示している。
【００４０】
パーソナルコンピュータ１０は、コンピュータプログラムを実行する主体であるマルチコアプロセッサ１１と、データを記憶する記憶手段１２と、ユーザからの操作を受け付けると共にユーザに処理結果を提示する入出力手段１３とを備える。以後、マルチコアプロセッサ１１のことを単にプロセッサ１１という。
【００４１】
プロセッサ１１では、ＯＳ２２と、対象プログラム２３と、コア割り当てプログラム２１といった各々のコンピュータプログラムが動作する。対象プログラム２３は、ユーザの入出力手段１３を介した動作により起動されるアプリケーションソフトなどであり、ＯＳ２２上で動作する。
【００４２】
ＯＳ２２には、スレッド生成機能２２ａ、システムコールトラップ機能２２ｂ、コアアフィニティ機能２２ｃといった各々の機能（詳細は後述する）が備えられており、コア割り当てプログラム２１はこれらを利用して対象プログラム２３のスレッドが動作するコアを割り当てる。
【００４３】
ユーザは、コア割り当てプログラム２１を起動する際に、コマンドラインのオプションによってコア割り当てを指定することができる。より具体的には「ｌａｕｎｃｈｅｒ」をコア割り当てプログラム２１、「ｐｒｏｇｒａｍ」を対象プログラム２３とすると、以下の数３に示すように、「−ｔ」の後に対象プログラム２３が生成するスレッドを割り当てるコアを指定するオプションを記述する。より具体的な指定方法については後述する。
【数３】
0005659780.tif 000004
【００４４】
図２は、図１で示したコア割り当てプログラム２１のより詳しい構成について示す説明図である。コア割り当てプログラム２１には、スレッド生成監視機能２１ａ、コア割り当て設定機能２１ｂ、プログラム起動機能２１ｃ、コア割り当て管理機能２１ｄといった各々の機能（詳細は後述する）が備えられている。また、記憶手段１２に予め記憶されている割り当て管理表２１ｅを動作中にデータとして使用する。
【００４５】
コア割り当て管理機能２１ｄは、対象プログラム２３の各スレッドをどのコアに割り当てるかの指定を受けて、指定された割り当てを割り当て管理表２１ｅとして保持する。プログラム起動機能２１ｃは、指定されたプログラム（対象プログラム２３）を起動する。また、その対象プログラム２３を起動する際には、起動の際に最初に作成されるスレッドを割り当てるコアを指定する。
【００４６】
スレッド生成監視機能２１ａは、監視対象のスレッドによる子スレッドの生成を監視する。また、生成された子スレッドも監視対象とし、その子スレッドによる孫スレッド…の生成も同様に監視する。コア割り当て設定機能２１ｂは、指定されたスレッドを特定のコアに割り当てるよう、コアアフィニティ機能２２ｃに指令する。
【００４７】
図１に戻って、ＯＳ２２のスレッド生成機能２２ａは、対象プログラム２３が動作するスレッドを生成する。システムコールトラップ機能２２ｂは、ＯＳ上で動作するプログラム（スレッド）がＯＳの提供する機能を利用するためのシステムコール（ＯＳ呼び出し）を発した時に該スレッドを停止し、該スレッドを監視するスレッドにそのことを通知する機能である。
【００４８】
スレッドが子スレッドを生成する場合には、システムコールによってスレッド生成機能２２ａに子スレッドの生成を要求するので、本実施形態ではシステムコールトラップ機能２２ｂがこの子スレッド生成のためのシステムコール呼び出しをトラップすることによって、スレッドの生成を検出する。
【００４９】
コアアフィニティ機能２２ｃは、前述のように生成されたスレッドの特定のコアへの割り当てを行う。システムコールトラップ機能２２ｂの例としてはｌｉｎｕｘ（登録商標）のｐｔｒａｃｅ、コアアフィニティ機能２２ｃの例としてはｌｉｎｕｘのｓｃｈｅｄ＿ｓｅｔａｆｆｉｎｉｔｙといった各々の機能を利用することができる。
【００５０】
図３は、図１〜２に示した割り当て管理表２１ｅの記憶内容の例を示す説明図である。割り当て管理表２１ｅは、対象プログラム２３が生成した各スレッドの生成順と、そのスレッドの割り当て先である割り当てコアとを対応づけて示す表である。図３に示した例では、１〜４番目に生成されたスレッドを、各々コア０、コア２、コア４、コア６の順に割り当てるという対応が定義されている。
【００５１】
コア割り当て管理機能２１ｄは、ユーザがコア割り当てプログラム２１を起動する際にコマンドラインで指定したコアの割り当てについて割り当て管理表２１ｅに保存し、これを参照しつつ新規スレッドに割り当てるべきコアをコア割り当て設定機能２１ｂもしくはプログラム起動機能２１ｃに指示する。
【００５２】
図４は、図１〜２に示したコア割り当てプログラム２１の動作について説明するフローチャートである。本実施の形態の動作では、対象プログラム２３の実行を開始する際に、ユーザが後述のコマンドラインを入出力手段１３に入力することによって、コア割り当て管理機能２１ｄに対してスレッドを割り当てるコアを指定し、またプログラム起動機能２１ｃに対して起動するプログラムを指定する（ステップＳ１０１）。
【００５３】
プログラム起動機能２１ｃは、コア割り当て管理機能２１ｄに対象プログラム２３の最初のスレッドを割り当てるべきコアを問い合わせ、これに従って最初のスレッドがそのコアに割り当てられるように対象プログラム２３を起動する（ステップＳ１０２）。
【００５４】
次にプログラム起動機能２１ｃは、スレッド生成監視機能２１ａに対して、対象プログラム２３の最初のスレッドを監視するように指示する。これに応じてスレッド生成監視機能２１ａは、指定されたスレッドによる子スレッドの生成の監視を開始する（ステップＳ１０３）。
【００５５】
監視対象のスレッドが子スレッドを生成すると（ステップＳ１０４がイエス）、スレッド生成監視機能２１ａは、コア割り当て設定機能２１ｂを呼び出す。呼び出されたコア割り当て設定機能２１ｂは、コア割り当て管理機能２１ｄを参照して生成された子スレッドを割り当てるコアを決定する（ステップＳ１０５）。そしてコア割り当て設定機能２１ｂは、生成された子スレッドをここで決定されたコアに割り当てるように設定する（ステップＳ１０６）。
【００５６】
図５は、図４のステップＳ１０３〜１０６に示した処理の概念について示す説明図である。このステップＳ１０３〜１０６の処理を繰り返すことによって、コア割り当てプログラム２１は対象プログラム２３が生成する新規スレッドの各々に対して個別のコア割り当てを行うことができる。
【００５７】
以上、図４のフローチャートで示した動作について、より詳しく例を挙げつつ説明する。ユーザが対象プログラム２３を起動する際、その対象プログラム２３とコア割り当てを指定して起動する。たとえば、コマンドラインで、以下の数４に示すコマンドを入出力手段１３を介して入力して実行する。ここで「ｌａｕｎｃｈｅｒ」はコア割り当てプログラム２１であり、「ｐｒｏｇｒａｍ」は対象プログラム２３である。このコマンドの例では、対象プログラム２３が生成するスレッドを順番にコア０、コア２、コア４、コア６に割り当てることをコマンドラインのオプションによって指示している。
【数４】
0005659780.tif 000005
【００５８】
コア割り当てプログラム２１は、起動されるとこのオプションによるコア割り当てを解析して、コア割り当て管理機能２１ｄに通知する。コア割り当て管理部は、指定されたコア割り当てをコア割り当て管理表２１ｅに記録する。図３に示した例は、数４で示した起動例に対応する割り当て内容である（ステップＳ１０１）。
【００５９】
コア割り当てプログラム２１は、これに続いてプログラム起動機能２１ｃを呼び出す。呼び出されたプログラム起動機能２１ｃは、コア割り当て管理機能２１ｄに問い合わせて、最初のスレッドのコア割り当て指定を決定する（ステップＳ１０２）。図３に示した例では「コア０」となる。プログラム起動機能２１ｃは、対象プログラム２３に対してスレッド生成機能２２ａによって新しいスレッドを生成し、コアアフィニティ機能２２ｃによって生成したスレッドの割り当て可能コアをコア０に設定する。
【００６０】
これに続いてプログラム起動機能２１ｃは、スレッド生成監視機能２１ａを呼び出す。スレッド生成監視機能２１ａはシステムコールトラップ機能２２ｂを呼び出し、プログラム起動機能２１ｃがスレッド生成機能２２ａを利用して生成したスレッドによるスレッド生成システムコールの呼び出しをトラップするように設定する（ステップＳ１０３）。
【００６１】
スレッド生成監視機能２１ａによる設定が終わると、プログラム起動機能２１ｃは新しいスレッドで対象プログラム２３を実行するようにＯＳに指示する。これにより、対象プログラム２３がコア０で起動される。対象プログラム２３が動作中に子スレッドを生成しない場合（ステップＳ１０４がノー）、スレッド生成監視機能２１ａは引き続き監視を継続する。
【００６２】
ここで対象プログラム２３が動作中に子スレッドを生成した場合（ステップＳ１０４がイエス）、対象プログラム２３は子スレッドを生成するため、ＯＳに対してスレッド生成のシステムコールを行う。このシステムコールはシステムコールトラップ機能２２ｂによってトラップされるように設定されている。このシステムコールをトラップしたシステムコールトラップ機能２２ｂは、スレッド生成監視機能２１ａを呼び出して、新しく生成されたスレッドのＩＤを渡す。
【００６３】
呼び出されたスレッド生成監視機能２１ａは、コア割り当て設定機能２１ｂを呼び出す。呼び出されたコア割り当て設定機能２１ｂは、新しく生成されたスレッドが対象プログラム２３の何番目のスレッドであるかを調べ、これに応じてコア割り当て管理機能２１ｄにそのスレッドのコア割り当て指定を問い合わせる。図３に示した例では、２番目のスレッドはコア２に割り当てられることになる（ステップＳ１０５）。
【００６４】
コア割り当て設定機能２１ｂは、このコア割り当て指定に従って、コアアフィニティ機能２２ｃによって生成したスレッドの割り当て可能コアをコア２に設定する（ステップＳ１０６）。以後、新しいスレッドが生成されるたびに、このステップＳ１０３〜１０６の処理を繰り返す。
【００６５】
なお、対象プログラム２３が、数４および図３に示したコマンドラインでコア割り当て指定を指定した分よりも多くのスレッドを生成した場合の動作としては、再び最初のスレッドの指定から繰り返す方法や、特定のコアに割り当てる方法、スレッドの新規生成を禁止するなどのような方法を取ることができる。
【００６６】
（第１の実施形態の全体的な動作）
次に、上記の実施形態の全体的な動作について説明する。本実施形態に係るコア割り当て方法は、与えられた対象プログラム２３の複数のスレッドを各々が独立して実行可能な複数のコアを備えるマルチコアプロセッサ１１を備えたパーソナルコンピュータ１０にあって、対象プログラムのスレッドが動作可能なコアをコア割り当てプログラムが指定し（図４・ステップＳ１０１）、マルチコアプロセッサ上で対象プログラムが動作を開始し、対象プログラムが動作中に新規スレッドを生成するか否かをコア割り当てプログラムのスレッド生成監視機能が監視し（図４・ステップＳ１０２〜１０３）、対象プログラムが新規スレッドを生成した場合にこの新規スレッドが動作するコアをコア割り当てプログラムのコア割り当て設定機能が指定し（図４・ステップＳ１０４〜１０５）、当該新規スレッドを指定されたコアでオペレーティングシステムのコアアフィニティ機能が動作させる（図４・ステップＳ１０６）。
【００６７】
ここで、上記各動作ステップについては、これをコンピュータで実行可能にプログラム化し、これらを前記各ステップを直接実行するコンピュータであるパーソナルコンピュータ１０に実行させるようにしてもよい。本プログラムは、非一時的な記録媒体、例えば、ＤＶＤ、ＣＤ、フラッシュメモリ等に記録されてもよい。その場合、本プログラムは、記録媒体からコンピュータによって読み出され、実行される。
この動作により、本実施形態は以下のような効果を奏する。
【００６８】
（第１の実施形態の効果）
以上で示した第１の実施形態の効果について説明する。
図６は、図１で示した（マルチコア）プロセッサ１１の構成について示す説明図である。プロセッサ１１は、共有バス７１で接続された２つのプロセッサノード５１および６１を持つ。プロセッサノード５１は２つのプロセッサコア５２ａおよび５２ｂと、これらプロセッサコア５２ａおよび５２ｂによって共有される共有キャッシュメモリ５３を備える。プロセッサノード６１もこれと同様に、２つのプロセッサコア６２ａおよび６２ｂと、共有キャッシュメモリ６３を備える。共有バス７１には記憶手段１２も接続されている。
【００６９】
プロセッサノード５１および６１を各々「ノード０」および「ノード１」という。また、プロセッサコア５２ａおよび５２ｂを各々「コア０」および「コア１」、プロセッサコア６２ａおよび６２ｂを各々「コア２」および「コア３」という。
【００７０】
また、プロセッサ１１は各々のプロセッサノード５１および６１単位での省電力機能を備えている。この省電力機能は、スレッドが割り当てられてないノードがある場合に、そのノードの消費電力を低減する機能である。プロセッサ１１上で動作するＯＳ２２は、単一のＳＭＰ（Symmetrical MultiProcessing）型ＯＳであり、そのＯＳ管理下で複数のコアに各種プログラムの処理を割り当てることが可能なものである。
【００７１】
図７は、図１〜２および図６に示したプロセッサ１１で本実施形態の動作を行った場合の動作の一例について示す説明図である。対象プログラム２３は、以下の数５に示すコア割り当て指定の通り、最初のスレッドが「コア０（プロセッサコア５２ａ）」、次に生成されたスレッドは「コア１（プロセッサコア５２ｂ）」に割り当てられるように指定されている。
【数５】
0005659780.tif 000006
【００７２】
最初に起動されるスレッド８１（スレッド０）が「コア０（プロセッサコア５２ａ）」で動作し、次に生成された新規スレッド８２（スレッド１）は「コア１（プロセッサコア５２ｂ）」で動作する。即ち、ここまでの段階でプロセッサノード６１（ノード１）で動作するスレッドは特にないので、プロセッサノード６１（ノード１）では省電力機能によって消費電力を削減することができる。
【００７３】
図８は、図１〜２および図６に示したプロセッサ１１で本実施形態の動作を行った場合の動作の別の一例について示す説明図である。対象プログラム２３は、以下の数６に示すコア割り当て指定の通り、最初のスレッドが「コア０（プロセッサコア５２ａ）」、次に生成されたスレッドは「コア２（プロセッサコア６２ａ）」に割り当てられるように指定されている。
【数６】
0005659780.tif 000007
【００７４】
最初に起動されるスレッド８１（スレッド０）が「コア０（プロセッサコア５２ａ）」で動作し、次に生成された新規スレッド８２（スレッド１）は「コア２（プロセッサコア６２ａ）」で動作する。即ち、ここまでの段階でプロセッサノード５１および６１（ノード０および１）にまたがってスレッドが割り振られるので、省電力機能による消費電力の削減の効果は特にない。
【００７５】
しかしながら、図７のように複数のスレッドが１つのプロセッサノードの中で動作する場合、１つの共有キャッシュメモリをそれらのスレッドの間で分け合って使用することになるので、各スレッドが利用できるサイズは少なくなり、動作性能は低く抑えられることとなる。その点、図８のように複数のスレッドが複数のプロセッサノードにまたがって割り振られている場合は、共有キャッシュメモリの中で各スレッドが利用できるサイズが多くなるので、動作性能は高い。
【００７６】
従って、対象プログラム２３を「より高い動作性能で」動作させたい場合には数６に示したコマンドラインで図８に示した例のように起動するとよい。また「より低い消費電力で」動作させたい場合には数５に示したコマンドラインで図７に示した例のように起動するとよい。即ち、本実施形態に係るパーソナルコンピュータ１０では、「動作性能」と「消費電力」のいずれを重視するかをユーザの意図によって決定し、その意図に従ってコマンドラインを入力し、対象プログラム２３の動作スレッドを割り当てることが可能である。
【００７７】
（第１の実施形態の拡張１）
図９は、本発明の第１の実施形態の第１の拡張に係るパーソナルコンピュータ２１０の構成について示す説明図である。パーソナルコンピュータ２１０は、ハードウェアとしての構成は図１に示した本発明の第１の実施形態に係るパーソナルコンピュータ１０と同一であり、ただプロセッサ１１で動作するコア割り当てプログラム２１が別のコア割り当てプログラム２２１に置換されているだけである。
【００７８】
コア割り当てプログラム２２１は、本発明の第１の実施形態に係るコア割り当てプログラム２１のプログラム起動機能２１ｃが、プログラム指定機能２２１ｃに置換されている以外は、コア割り当てプログラム２１と同一である。従って、第１の実施形態と同一の要素については、同一の呼称および参照番号でいう。
【００７９】
プログラム指定機能２２１ｃは、既に起動されているプログラムをスレッド生成監視機能２１ａに通知して監視対象とする機能を有する。この場合、プログラム指定機能２２１ｃは例えば、対象プログラム２３のスレッドＩＤを指定してスレッド生成監視機能２１ａを呼び出すことができる。
【００８０】
この形態をとることによって、対象プログラム２３が既に起動されている場合についても、それ以降に生成されるスレッドに対してコアの割り当てを行うことができる。さらに、プログラム指定機能２２１ｃが呼び出された時点以降に生成されたスレッドに対してだけでなく、既に生成されているスレッドの一覧を取得して、それらに対してコアの割り当てを行うこともできる。
【００８１】
（第１の実施形態の拡張２）
図１０は、本発明の第１の実施形態の第２の拡張に係るパーソナルコンピュータ３１０の構成について示す説明図である。パーソナルコンピュータ２１０は、ハードウェアとしての構成は図１に示した本発明の第１の実施形態に係るパーソナルコンピュータ１０と同一であり、ただプロセッサ１１で動作するコア割り当てプログラム２１が別のコア割り当てプログラム３２１に置換されているだけである。
【００８２】
コア割り当てプログラム３２１は、本発明の第１の実施形態に係るコア割り当てプログラム２１のコア割り当て管理機能２１ｄが、別のコア割り当て管理機能３２１ｄに置換されている以外は、コア割り当てプログラム２１と同一である。従って、第１の実施形態と同一の要素については、同一の呼称および参照番号でいう。
【００８３】
コア割り当て管理機能３２１ｄは、スレッドの生成順によってコア割り当て指定を行うのではなく、スレッドの固有情報を用いて割り当て指定を行う。たとえば、スレッドが実行する関数によって異なるコアに割り当てるように指定するようにすれば、スレッドの処理内容によって異なるコアに割り当てを指定することができる。
【００８４】
さらに、本実施形態のコア割り当て管理機能は、スレッドを割り当てるコアの指定方法として、コア番号を直接指定するのではなく、コア番号を簡易に指定する規則を用いている。そのような規則の例として、たとえばコマンドラインで以下のように指定することで「０、１、２、３、４」という順番を指定することができる。
【数７】
0005659780.tif 000008
【００８５】
また、コマンドラインで以下のように指定することで「０、２、４」という順番を指定することもできる。
【数８】
0005659780.tif 000009
【００８６】
そして、コア割り当て管理機能３２１ｄは、コア番号の指定ではなく、特定のポリシーに基づいてコアの割り当てを行うようにしてもよい。たとえば図７〜８に示した例のように、対象プログラム２３を「より高い動作性能で」動作させることを優先してもよいし、また「より低い消費電力で」動作させることを優先してもよい。
【００８７】
（第２の実施形態）
本発明の第２の実施形態では、第１の実施形態の構成に加えて、コア割り当てプログラム４２１が、対象プログラムの実行中に記憶手段に記憶された新規スレッドを割り当て可能なコアについての設定内容をユーザからの入力に基づいて変更するコア割り当て変更機能４２１ｆを持つ構成とした。
【００８８】
この構成によれば、対象プログラムの実行中にも、ユーザの入力に応じて動作要件を変更することができる。
以下、これをより詳細に説明する。
【００８９】
図１１は、本発明の第２の実施形態に係るパーソナルコンピュータ４１０の構成を示す説明図である。図１１（ａ）は、パーソナルコンピュータ４１０におけるハードウェアとＯＳおよびその他のソフトウェアの関連を主に示し、図１１（ｂ）はソフトウェア相互間の関連を主に示している。
【００９０】
パーソナルコンピュータ４１０は、ハードウェア的には第１の実施形態に係るパーソナルコンピュータ１０と全く同一の構成、即ちプロセッサ１１と記憶手段１２と入出力手段１３とを備える。またソフトウェアとしての構成も、コア割り当てプログラム２１が別のコア割り当てプログラム４２１に置換されている以外は、第１の実施形態に係るパーソナルコンピュータ１０と同一である。
【００９１】
図１２は、図１１で示したコア割り当てプログラム４２１のより詳しい構成について示す説明図である。コア割り当てプログラム４２１は、第１の実施形態で説明したスレッド生成監視機能２１ａ、コア割り当て設定機能２１ｂ、プログラム起動機能２１ｃ、コア割り当て管理機能２１ｄの各々に加えて、新たにコア割り当て変更機能４２１ｆが追加されている。コア割り当てプログラム４２１は、コア割り当て変更機能４２１ｆ以外は、第１の実施形態のコア割り当てプログラム２１と同一である。
【００９２】
コア割り当て変更機能４２１ｆは、対象プログラム２３の実行中に割り当て管理表２１ｅの内容を呼び出して、その内容を後から変更する機能である。たとえば図７〜８に示した例のように、対象プログラム２３を「より高い動作性能で」動作させる場合のコア割り当ての指定を、「より低い消費電力で」動作させる指定に変更するなどのような場合に、ユーザは入出力手段１３を介して数５〜６に示したようなコマンドラインを入力する。「より低い消費電力で」動作させたい場合には数５に示したコマンドラインを入力する。「より高い動作性能で」動作させたい場合には数６に示したコマンドラインを入力する。
【００９３】
図１３は、図１２に示したコア割り当て変更機能４２１ｆの動作を示すフローチャートである。コア割り当て変更機能４２１ｆは、動作要件変更を命令するコマンドラインの入力を受けた場合に（ステップＳ５０１）、図４のステップＳ１０１と同様の動作でコマンドラインを分析して、その内容を割り当て管理表２１ｅに記録する（ステップＳ５０２）。
【００９４】
コア割り当てプログラム４２１のコア割り当て変更機能４２１ｆ以外の要素は、第１の実施形態のコア割り当てプログラム２１と全く同一に、即ち図４のフローチャートに示した通りに動作する。従って、割り当て管理表２１ｅが書き換えられた後に生成されたスレッドに対しては、書き換えられた後の割り当て管理表２１ｅの内容に従ってコアが割り当てられる。
【００９５】
即ち、本実施形態によって、「より高い動作性能で」動作させる場合と「より低い消費電力で」動作させる場合などのように対象プログラム２３の動作に対する要件を動作途中に変更する必要のある場合などに、この変更に対応することが可能である。そのような動作要件の変更は、たとえばパーソナルコンピュータ４１０が充電池から電力を供給されて動作する場合でかつその充電池の電力残量が減少した時などに、「より高い動作性能で」動作していた該コンピュータを「より低い消費電力で」の動作に変更する必要が発生するが、本実施形態によればそのような変更にも対応できるようになる。
【００９６】
（第３の実施形態）
本発明の第３の実施形態では、第１の実施形態の構成に加えて、マルチコアプロセッサ１１上で、対象プログラムによる新規スレッド生成要求を検出してスレッド生成監視機能に通知するトラップライブラリ６２５と、新規スレッド生成要求の呼び出し先をトラップライブラリに変更するダイナミックリンカー６２４とが動作する構成とした。
【００９７】
この構成によれば、システムコールトラップ機能を備えていないＯＳでも、第１の実施形態と同一の効果を得ることができる。
以下、これをより詳細に説明する。
【００９８】
図１４は、本発明の第３の実施形態に係るパーソナルコンピュータ６１０の構成を示す説明図である。図１４（ａ）は、パーソナルコンピュータ６１０におけるハードウェアとＯＳおよびその他のソフトウェアの関連を主に示し、図１４（ｂ）はソフトウェア相互間の関連を主に示している。
【００９９】
パーソナルコンピュータ６１０は、ハードウェア的には第１の実施形態に係るパーソナルコンピュータ１０と全く同一の構成、即ちプロセッサ１１と記憶手段１２と入出力手段１３とを備える。またソフトウェアとしての構成も、ＯＳ２２が別のＯＳ６２２に置換され、さらにダイナミックリンカー６２４とトラップライブラリ６２５が付け加えられている点以外は、第１の実施形態に係るパーソナルコンピュータ１０と同一である。
【０１００】
ＯＳ６２２は、第１の実施形態に係るＯＳ２２が備えていたシステムコールトラップ機能２２ｂを備えていない。スレッド生成機能２２ａおよびコアアフィニティ機能２２ｃは、第１の実施形態に係るＯＳ２２と同一である。そのため、システムコールトラップ機能２２ｂの代わりに、対象プログラム２３による子スレッドの生成を検出するものとして、ダイナミックリンカー６２４を使用する。
【０１０１】
ダイナミックリンカー６２４は、対象プログラム２３などのような実行中のプログラムがＯＳの提供する機能の中で必要なものを呼び出すためにリンクするダイナミックリンクライブラリ（以後ＤＬＬ :Dynamic Link Library）を利用する際に用いられるプログラムである。プログラムがＤＬＬの関数を初めて呼び出す時にはダイナミックリンカー６２４が呼び出され、リンクすべきライブラリを検索してプログラムにリンクさせることによって、プログラムはＤＬＬの関数を使用することができる。
【０１０２】
本実施形態のダイナミックリンカー６２４は、プログラムが指定する本来のライブラリではなく、異なったライブラリをリンクする機能を有する。ＬｉｎｕｘなどのＯＳで、この様な機能を備えるＤＬＬが利用されていることは、非特許文献１にも記載されているように、当業者にはよく知られている事項である。
【０１０３】
トラップライブラリ６２５は、ダイナミックリンカー６２４のこの機能によって、スレッド生成機能２２ａの代わりにリンクされるライブラリである。本実施形態では、トラップライブラリ６２５がＯＳのスレッド生成機能２２ａを呼び出して新規スレッドを生成した後、コア割り当てプログラム２１のスレッド生成監視機能２１ａを呼び出す。
【０１０４】
図１５は、図１４に示したコア割り当てプログラム２１およびダイナミックリンカー６２４、トラップライブラリ６２５の動作について説明するフローチャートである。本実施形態の動作では、まずダイナミックリンカー６２４が、対象プログラム２３がＤＬＬを呼び出す際にトラップライブラリ６２５中の関数が呼び出されるよう設定する（ステップＳ７０１）。そのための具体的な手法は、前述した非特許文献１などに記載されており、当業者には周知の事項である。
【０１０５】
この設定が完了した後、図４のステップＳ１０１〜１０４と同一の動作が行われ、スレッド生成監視機能２１ａが対象プログラム２３の最初のスレッドによる子スレッドの生成を監視する。以後も、概ね図４に記載の各ステップと同様に動作するので、同一の動作については同一の参照番号で言い、ここでは図４に示した動作と異なる部分のみを説明する。
【０１０６】
対象プログラム２３が子スレッドを生成しようとしてスレッド生成機能をもったライブラリ関数を呼び出すと（ステップＳ１０４がイエス）、ダイナミックリンカー６２４によって関連づけられたトラップライブラリ６２５中の関数が呼び出される（ステップＳ７０２）。
【０１０７】
このトラップライブラリ６２５中の関数は、スレッド生成機能２２ａによって新規スレッドを生成した後、生成された新規スレッドのＩＤを取得してコア割り当てプログラム２１のスレッド生成監視機能２１ａを呼び出す（ステップＳ７０３）。この呼び出しにはプロセス間通信を利用することができる。以後は図４のステップＳ１０５と同じく、スレッド生成監視機能２１ａがコア割り当て設定機能２１ｂを呼び出し、呼び出されたコア割り当て設定機能２１ｂがコア割り当て管理機能２１ｄを参照して生成された子スレッドを割り当てるコアを決定する。
【０１０８】
そしてスレッド生成監視機能２１ａが、トラップライブラリ６２５に対して生成されたスレッドを起動するよう指示する。トラップライブラリ６２５は、生成されたスレッドを起動し、スレッド生成完了の旨を対象プログラム２３に伝える（ステップＳ７０４）。以後、新しいスレッドが生成されるたびに、このステップＳ１０３〜７０４の処理を繰り返す。
【０１０９】
以上の動作により、システムコールトラップ機能２２ｂを備えていないＯＳを使用する場合であっても、ダイナミックリンカー６２４とトラップライブラリ６２５とを付け加えることによって、対象プログラム２３によって生成されたスレッドを指定したコアに割り当てることができる。
【０１１０】
以上の説明では、対象プログラム２３がＤＬＬの関数としてＯＳの提供する機能の中で必要なものを呼び出しているが、対象プログラム２３がスタティック（静的）リンクを用いている場合は、対象プログラム２３をリンクする際に、本来のスレッド生成用ライブラリに代えて、トラップライブラリ６２５をスタティックリンクとして対象プログラム２３に含めるという形態をとることが可能である。即ち、ダイナミックリンクの場合だけでなく、スタティックリンクの場合にも本実施形態を適用することができる。
【０１１１】
（第４の実施形態）
本発明の第４の実施形態に係るパーソナルコンピュータ８１０は、与えられた対象プログラムの複数のスレッドを各々が独立して実行可能な複数のハードウェアスレッドを備えるマルチスレッドプロセッサ８１１を備えたパーソナルコンピュータである。このマルチスレッドプロセッサ８１１上で、対象プログラム８２３と、対象プログラムのスレッドが動作可能なハードウェアスレッドを指定するハードウェアスレッド割り当てプログラム８２１と、対象プログラムからの要求に応じて新規スレッドを生成するスレッド生成機能８２２ａおよび動作可能に指定されたハードウェアスレッドで新規スレッドを動作させるアフィニティ機能８２２ｃを備えるオペレーティングシステム８２２とが動作する。そして、ハードウェアスレッド割り当てプログラム８２１が、対象プログラムが動作中に新規スレッドを生成した場合にこれを検出するスレッド生成監視機能２１ａと、検出された新規スレッドが動作するハードウェアスレッドを指定するハードウェアスレッド割り当て設定機能８２１ｂとを持つ構成とした。
【０１１２】
この構成によれば、マルチコアプロセッサではなくマルチスレッドプロセッサを備えたパーソナルコンピュータでも、第１の実施形態と同様の効果を得ることができる。
以下、これをより詳細に説明する。
【０１１３】
図１６は、本発明の第４の実施形態に係るパーソナルコンピュータ８１０の構成を示す説明図である。図１６（ａ）は、パーソナルコンピュータ８１０におけるハードウェアとＯＳおよびその他のソフトウェアの関連を主に示し、図１６（ｂ）はソフトウェア相互間の関連を主に示している。
【０１１４】
パーソナルコンピュータ８１０は、ハードウェアとしては第１の実施形態に係るパーソナルコンピュータ１０とは異なるプロセッサ８１１を備える。記憶手段１２および入出力手段１３は、第１の実施形態と同一である。ソフトウェアとしての構成は、第１の実施形態に係るパーソナルコンピュータ１０と同一である。
【０１１５】
即ち、プロセッサ８１１では、ＯＳ８２２と、対象プログラム８２３と、ＨＷスレッド割り当てプログラム８２１といった各々のコンピュータプログラムが動作する。これらのプログラムの動作内容は全て第１の実施形態と同一である。ただし、コア割り当てプログラムはＨＷスレッド割り当てプログラムに名称を読み替えるので、異なる参照番号で示す。
【０１１６】
ＨＷスレッド割り当てプログラム８２１の動作内容は、第１の実施形態のコア割り当てプログラム２１と同一であるが、対象プログラムのスレッドを割り当てる対象がコアではなくハードウェアスレッド（以後ＨＷスレッド）である。そのため、コア割り当て設定機能およびコア割り当て管理機能は、それぞれＨＷスレッド割り当て設定機能８２１ｂおよびＨＷスレッド割り当て管理機能８２１ｄに名称を変更している。
【０１１７】
また、ＯＳ８２２では、コアアフィニティ機能がアフィニティ機能８２２ｃに変更されている。これも、スレッドを割り当てる対象が「コア」を「ＨＷスレッド」に変わっただけで、行う処理内容は第１の実施形態と同一である。対象プログラム８２３の内容については後述する。
【０１１８】
図１７は、図１６に示したプロセッサ８１１の構成について示す説明図である。第１〜第３の実施例で使用されたプロセッサ１１はマルチコアプロセッサだったが、プロセッサ８１１はマルチスレッドプロセッサであり、共有バス８７１で接続された２つのプロセッサコア８５１および８６１を持つ。
【０１１９】
プロセッサコア８５１は２つのＨＷスレッド８５２ａおよび８５２ｂと、これらＨＷスレッド８５２ａおよび８５２ｂによって共有される演算器８５３を備える。プロセッサコア８６１もこれと同様に、２つのＨＷスレッド８６２ａおよび８６２ｂと、演算器８６３を備える。共有バス８７１には記憶手段１２も接続されている。
【０１２０】
ＨＷスレッドは物理的な構成であるマルチコアと必ずしもイコールではないが、ＯＳの機能によってソフトウェアの各々のスレッドをＨＷスレッドに割り当てることが可能である。従って、第１の実施形態として説明したプロセッサコアへのスレッドの割り当てと、全く同じ動作でＨＷスレッドへのスレッドの割り当てを行うことができる。その際の動作は、単に「（プロセッサ）コア」を「ＨＷスレッド」に読み替えるだけでよい。
【０１２１】
図１８は、図１６に示したパーソナルコンピュータ８１０で、対象プログラム８２３を動作させた場合の各々のスレッドのＨＷスレッドへの割り当ての例を示す説明図である。対象プログラム８２３は、スレッド８８１〜８８４の４スレッドで構成されている（各々スレッド０〜３という）。このうちスレッド０および１は、演算器８５３および８６３の利用率が高く、スレッド２および３は、演算器８５３および８６３の利用率が低い。
【０１２２】
図１８（ａ）は、演算器の利用率が高いスレッド０および１がいずれもプロセッサコア８５１側の各々ＨＷスレッド８５２ａおよび８５２ｂに割り当てられ、演算器の利用率が低いスレッド２および３がいずれもプロセッサコア８６１側の各々ＨＷスレッド８６２ａおよび８６２ｂに割り当てられた状態を示す。この状態では、プロセッサコア８５１側で共有される演算器８５３においてスレッド０および１の競合が多く起こりうるので、性能の劣化を引き起こす要因となる。
【０１２３】
図１８（ｂ）は、演算器の利用率が高いスレッド０および演算器の利用率が低いスレッド２をプロセッサコア８５１側の各々ＨＷスレッド８５２ａおよび８５２ｂに割り当て、演算器の利用率が高いスレッド１および演算器の利用率が低いスレッド３をプロセッサコア８６１側の各々ＨＷスレッド８６２ａおよび８６２ｂに割り当てた状態を示す。これは、ユーザはコマンドラインの入力によって行うことができる。
【０１２４】
現在の一般的なＯＳのスケジューラでは、以上のようなソフトウェアのスレッドごとの演算器の利用率を考慮してＨＷスレッドに割り当てるということが行われていない。特にユーザがこの割り当てを指定することができない。プログラム単位でプロセッサコアもしくはＨＷスレッドに各スレッドを割り当てる方式だと、プログラムを構成するすべてのスレッドに対して能率などを考慮せず、同一の割り当てを行ってしまうので、効率を向上させることができない。
【０１２５】
その点、本実施形態によれば、コマンドラインの入力によって個々のスレッドをＨＷスレッドに割り当てることができる、効率的な割り当てを行うことができる。その際、動作要件を「より高い動作性能で」動作させるようにしてもよいし、「より低い消費電力で」動作させるようにしてもよい。この動作要件は、ユーザの意思によって決定できる。また、コンピュータに演算器の利用率などを検出する手段を設けることにより、動作要件の設定および切り替えを自動的に行わせることも可能である。
【０１２６】
もちろん、第１の実施形態の拡張や第２〜３の実施形態として説明したプロセッサコアへのスレッドの割り当てと全く同じ動作で、ＨＷスレッドへのスレッドの割り当てを行うようにすることもできる。この場合も、動作は単に「（プロセッサ）コア」を「ＨＷスレッド」に読み替えるだけでよい。
【０１２７】
これまで本発明について図面に示した特定の実施形態をもって説明してきたが、本発明は図面に示した実施形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができる。
【０１２８】
上述した各々の実施形態について、その新規な技術内容の要点をまとめると、以下のようになる。なお、上記実施形態の一部または全部は、新規な技術として以下のようにまとめられるが、本発明は必ずしもこれに限定されるものではない。
【０１２９】
（付記１）  与えられた対象プログラムの複数のスレッドを各々が独立して実行可能な複数のコアを備えるマルチコアプロセッサ上で、
前記対象プログラムと、
前記対象プログラムのスレッドが動作可能な前記コアを指定するコア割り当てプログラムと、
前記対象プログラムによって発生されたスレッド生成要求に応じて新規スレッドを生成するスレッド生成機能および動作可能に指定された前記コアで前記新規スレッドを動作させるコアアフィニティ機能を備えるオペレーティングシステムと
が動作すると共に、
前記マルチコアプロセッサは、前記コア割り当てプログラムの実行により、
前記スレッド生成要求の発生を検出するスレッド生成監視機能と、
前記検出された前記スレッド生成要求によって生成された新規スレッドが動作する前記コアを指定するコア割り当て設定機能と
を備えることを特徴とするコンピュータ。
【０１３０】
（付記２）  前記マルチコアプロセッサは、前記コア割り当てプログラムの実行により、
前記対象プログラムを起動するプログラム起動機能と、
前記対象プログラムを起動する際に前記新規スレッドを割り当て可能な前記コアについてユーザから入力された設定内容を予め備えられた記憶手段に記憶してこの設定内容に基づいて前記コア割り当て設定機能に前記コアを指定させるコア割り当て管理機能と
を備えることを特徴とする、付記１に記載のコンピュータ。
【０１３１】
（付記３）  前記マルチコアプロセッサは、前記オペレーティングシステムの実行により、前記対象プログラムによる前記スレッド生成要求の発生を前記スレッド生成監視機能に通知するシステムコールトラップ機能を備えることを特徴とする、請求項１に記載のコンピュータ。
【０１３２】
（付記４）  前記マルチコアプロセッサは、前記コア割り当てプログラムの実行により、前記対象プログラムの実行中に前記記憶手段に記憶された前記新規スレッドを割り当て可能な前記コアについての設定内容をユーザからの入力に基づいて変更するコア割り当て変更機能を備えることを特徴とする、付記１に記載のコンピュータ。
【０１３３】
（付記５）  前記マルチコアプロセッサ上で、
前記対象プログラムによる前記スレッド生成要求を検出して前記スレッド生成監視機能に通知するトラップライブラリと、
前記新規スレッド生成要求の呼び出し先を前記オペレーティングシステムから前記トラップライブラリに変更するダイナミックリンカーと
が動作することを特徴とする、付記１に記載のコンピュータ。
【０１３４】
（付記６）  与えられた対象プログラムの複数のスレッドを各々が独立して実行可能な複数のハードウェアスレッドを備えるマルチスレッドプロセッサ上で、
前記対象プログラムと、
前記対象プログラムのスレッドが動作可能な前記ハードウェアスレッドを指定するハードウェアスレッド割り当てプログラムと、
前記対象プログラムによって発生されたスレッド生成要求に応じて新規スレッドを生成するスレッド生成機能および動作可能に指定された前記ハードウェアスレッドで前記新規スレッドを動作させるアフィニティ機能を備えるオペレーティングシステムと
が動作すると共に、
前記マルチスレッドプロセッサは、前記ハードウェアスレッド割り当てプログラムの実行により、
前記スレッド生成要求の発生を検出するスレッド生成監視機能と、
前記検出された前記スレッド生成要求によって生成された新規スレッドが動作する前記ハードウェアスレッドを指定するハードウェアスレッド割り当て設定機能と
を備えることを特徴とするコンピュータ。
【０１３５】
（付記７）  対象プログラムのスレッドが動作可能な前記コアを指定し、
複数の前記スレッドを各々が独立して実行可能な複数の前記コアを備えるマルチコアプロセッサ上で前記対象プログラムの動作を開始させ、
前記対象プログラムによってスレッド生成要求が発生されたか否かを監視し、
前記スレッド生成要求によって生成された新規スレッドが動作する前記コアを指定し、
前記指定された前記コアでオペレーティングシステムのコアアフィニティ機能を動作させる
ことを特徴とするコア割り当て方法。
【０１３６】
（付記８）  パーソナルコンピュータが備える、与えられた対象プログラムの複数のスレッドを各々が独立して実行可能な複数のコアを備えるマルチコアプロセッサを、
前記対象プログラムのスレッドが動作可能な前記コアを指定する手順、
前記マルチコアプロセッサ上で前記対象プログラムの動作を開始させる手順、
前記対象プログラムがスレッド生成要求を発するか否かを監視する手順、
前記対象プログラムが前記スレッド生成要求を発した場合にこの新規スレッドが動作する前記コアを指定する手順、
および当該新規スレッドを指定された前記コアで動作させる手順
を実行させることを特徴とするコア割り当てプログラム。
【産業上の利用可能性】
【０１３７】
本発明は、マルチコアプロセッサもしくはマルチスレッドプロセッサを備えたコンピュータに幅広く適用できる。また、プロセッサ自体を複数備えたコンピュータに適用することも可能である。
【符号の説明】
【０１３８】
１０，２１０，３１０，４１０，６１０，８１０  パーソナルコンピュータ
１１  プロセッサ（マルチコア）
１２  記憶手段
１３  入出力手段
２１，２２１，３２１，４２１  コア割り当てプログラム
２１ａ  スレッド生成監視機能
２１ｂ  コア割り当て設定機能
２１ｃ  プログラム起動機能
２１ｄ，３２１ｄ  コア割り当て管理機能
２１ｅ  割り当て管理表
２２，８２２  ＯＳ
２２ａ  スレッド生成機能
２２ｂ  システムコールトラップ機能
２２ｃ  コアアフィニティ機能
２３，８２３  対象プログラム
５１，６１  プロセッサノード
５２ａ，５２ｂ，６２ａ，６２ｂ  プロセッサコア
５３，６３  共有キャッシュメモリ
７１，８７１  共有バス
８１，８２，８８１，８８２，８８３，８８４  スレッド
２２１ｃ  プログラム指定機能
４２１ｆ  コア割り当て変更機能
６２４  ダイナミックリンカー
６２５  トラップライブラリ
８１１  プロセッサ（マルチスレッド）
８２１  ＨＷスレッド割り当てプログラム
８２１ｂ  ＨＷスレッド割り当て設定機能
８２１ｄ  ＨＷスレッド割り当て管理機能
８２２ｃ  アフィニティ機能
８５１，８６１  プロセッサコア
８５２ａ，８５２ｂ，８６２ａ，８６２ｂ  ＨＷスレッド
８５３，８６３  演算器
【図１】
0005659780.tif 000010
【図２】
0005659780.tif 000011
【図３】
0005659780.tif 000012
【図４】
0005659780.tif 000013
【図５】
0005659780.tif 000014
【図６】
0005659780.tif 000015
【図７】
0005659780.tif 000016
【図８】
0005659780.tif 000017
【図９】
0005659780.tif 000018
【図１０】
0005659780.tif 000019
【図１１】
0005659780.tif 000020
【図１２】
0005659780.tif 000021
【図１３】
0005659780.tif 000022
【図１４】
0005659780.tif 000023
【図１５】
0005659780.tif 000024
【図１６】
0005659780.tif 000025
【図１７】
0005659780.tif 000026
【図１８】
0005659780.tif 000027
【図１９】
0005659780.tif 000028
【図２０】
0005659780.tif 000029
【図２１】
0005659780.tif 000030
【図２２】
0005659780.tif 000031