(57)【要約】  ＣＰＵ（２０１−１）が実行するマスタＯＳが、共有資源が有するバンクの使用数をスレッド群のスレッドごとに記憶する記憶装置から、対象スレッドのバンクの使用数と、各ＣＰＵ（２０１）に割当済のスレッドのバンクの使用数と、を特定する。マスタＯＳが、割当済のスレッドの特定されたバンクの使用数から最大値をＣＰＵ（２０１）ごとに検出する。マスタＯＳが、割当先候補に選択されたＣＰＵ（２０１−１）の検出された最大値と対象スレッドの特定されたバンクの使用数とのうちの大きい方の値と、ＣＰＵ（２０１−１）以外のＣＰＵ（２０１−２，２０１−３，２０４−４）の検出された最大値との総和ＳＵＭを算出する。マスタＯＳが、総和ＳＵＭが共有資源のバンク数以下であるか否かを判断する。マスタＯＳが、総和ＳＵＭが共有資源のバンク数以下であると判断した場合、対象スレッドをＣＰＵ（２０１−１）に割り当てる。
2013018184.tif 000002
【特許請求の範囲】
【請求項１】
マルチコアプロセッサのうちの特定のコアが、
前記マルチコアプロセッサで共有する共有資源が有する記憶領域の使用数をスレッド群のスレッドごとに記憶する記憶装置から、対象スレッドの記憶領域の使用数と、前記マルチコアプロセッサのコアごとに割当済のスレッドの記憶領域の使用数と、を特定する特定処理と、
前記割当済のスレッドの特定された記憶領域の使用数から前記コアごとに最大値を検出する検出処理と、
前記マルチコアプロセッサのうちの割当先候補に選択されたコアの検出された最大値と前記対象スレッドの特定された記憶領域の使用数とのうちの大きい方の値と、前記選択されたコア以外のコアの検出された最大値との総和が、前記共有資源内の記憶領域数以下であるか否かを判断する判断処理と、
前記総和が前記記憶領域数以下であると判断された場合、前記対象スレッドを前記選択されたコアに割り当てる割当処理と、
を実行することを特徴とする割当方法。
【請求項２】
前記検出処理による検出後、前記マルチコアプロセッサから、順にコアを割当先候補として選択する選択処理を実行し、
前記判断処理は、
前記選択処理によりコアが選択される都度、選択されたコアの検出された最大値と前記対象スレッドの前記記憶領域の使用数とのうちの大きい方の値と、前記選択されたコア以外のコアの検出された最大値との総和が、前記記憶領域数以下であるか否かを判断し、
前記割当処理は、
前記判断処理により前記総和が前記記憶領域数以下であると判断されたコアに前記対象スレッドを割り当てることを特徴とする請求項１に記載の割当方法。
【請求項３】
前記割当処理は、
前記総和が前記記憶領域数以下であると判断された割当先候補の数が複数ある場合、前記割当済のスレッドの処理時間が最小なコアに前記対象スレッドを割り当てることを特徴とする請求項２に記載の割当方法。
【請求項４】
前記選択処理は、
前記マルチコアプロセッサから、前記検出処理によって検出された最大値が大きい順にコアを割当先候補として選択することを特徴とする請求項２に記載の割当方法。
【請求項５】
前記選択されたコアが、前記マルチコアプロセッサのうちの前記検出された最大値が最大となるコアであることを特徴とする請求項１に記載の割当方法。
【請求項６】
前記割当処理は、
前記選択されたコアがいずれのコアであっても前記総和が前記記憶領域数以下でない場合、前記総和が最小となるコアに割り当てることを特徴とする請求項１または２に記載の割当方法。
【請求項７】
前記割当処理は、
前記特定処理による特定後、前記割当済のスレッドの特定された記憶領域の使用数と前記対象スレッドの前記記憶領域の使用数との合計値が前記記憶領域数以下であれば、前記検出処理と前記判断処理を実行せずに、前記マルチコアプロセッサのうちのいずれかのコアに割り当てることを特徴とする請求項１に記載の割当方法。
【請求項８】
前記対象スレッドと前記割当済のスレッドが前記スレッド群の中の特定のスレッドであることを特徴とする請求項１〜７のいずれか一つに記載の割当方法。
【請求項９】
前記割当処理は、
前記対象スレッドが前記スレッド群のうちの特定のスレッドでない場合、前記特定処理と前記検出処理と前記判断処理とを実行せずに、前記対象スレッドを前記マルチコアプロセッサのうちのいずれのスレッドも割り当てられていないコアに割り当てることを特徴とする請求項１〜７のいずれか一つに記載の割当方法。
【請求項１０】
第１の共有資源の記憶領域の使用数と、前記第１の共有資源よりもアクセス速度が速い第２の共有資源の記憶領域の使用数と、が前記スレッド群のスレッドごとに前記記憶装置に記憶されており、
前記特定処理が、
前記対象スレッドが、前記スレッド群の中の前記第１の共有資源へのアクセスに関する第１の条件に分類されたスレッドである場合、前記記憶装置から、前記対象スレッドの前記第１の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第１の共有資源の記憶領域の使用数を特定することを特徴とする請求項１〜７のいずれか一つに記載の割当方法。
【請求項１１】
第１の共有資源の記憶領域の使用数と、前記第１の共有資源よりもアクセス速度が速い第２の共有資源の記憶領域の使用数と、が前記スレッド群のスレッドごとに前記記憶装置に記憶されており、
前記特定処理が、
前記対象スレッドが、前記スレッド群の中の前記第２の共有資源へのアクセスに関する第２の条件に分類されたスレッドであり、かつ前記割当済のスレッドの中に、前記第１の共有資源へのアクセスに関する第１の条件に分類されたスレッドがない場合、前記記憶装置から、前記対象スレッドの前記第２の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第２の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第２の共有資源の記憶領域の使用数を特定することを特徴とする請求項１〜７のいずれか一つに記載の割当方法。
【請求項１２】
第１の共有資源の記憶領域の使用数と、前記第１の共有資源よりもアクセス速度が速い第２の共有資源の記憶領域の使用数と、が前記スレッド群のスレッドごとに前記記憶装置に記憶されており、
前記特定処理が、
前記対象スレッドが前記スレッド群の中の前記第２の共有資源へのアクセスに関する第２の条件に分類されたスレッドであっても、前記割当済のスレッドの中に、前記第１の共有資源へのアクセスに関する第１の条件に分類されたスレッドがある場合、前記記憶装置から、前記対象スレッドの前記第１の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第１の共有資源の記憶領域の使用数を特定することを特徴とする請求項１〜７のいずれか一つに記載の割当方法。
【請求項１３】
前記割当処理による第１のスケジューリングで割り当てた場合における、前記コアごとに前記割当済のスレッドの処理時間の合計値を算出する第１の算出処理と、
前記第１のスケジューリングと異なる第２のスケジューリングで割り当てた場合における、前記割当済のスレッドの処理時間の合計値を前記コアごとに算出する第２の算出処理と、
前記第１の算出処理による算出結果と、前記第２の算出処理による算出結果とを比較する比較処理と、
前記比較処理による比較結果に応じて、前記第１のスケジューリングと前記第２のスケジューリングとを切り替える切替処理と、を実行することを特徴とする請求項１〜１２のいずれか一つに記載の割当方法。
【請求項１４】
前記第２の算出処理は、
さらに、前記割当済のスレッドの処理時間の合計値に前記共有資源の競合による負荷時間が加算されることを特徴とする請求項１３に記載の割当方法。
【請求項１５】
前記負荷時間が、前記割当済のスレッドの処理時間と前記共有資源の競合による負荷の割合に応じて算出されることを特徴とする請求項１４に記載の割当方法。
【請求項１６】
前記比較処理は、
前記第１の算出処理による算出結果と、前記第２の算出処理による算出結果との関係が所定条件を満たすか否かを判断し、
前記切替処理は、
前記比較処理による比較結果が前記所定条件を満たす場合、前記第１のスケジューリングを実行し、前記比較処理による比較結果が前記所定条件を満たさない場合、前記第２のスケジューリングを実行することを特徴とする請求項１３〜１５のいずれか一つに記載の割当方法。
【請求項１７】
マルチコアプロセッサと、
前記マルチコアプロセッサで共有する共有資源が有する記憶領域の使用数をスレッド群のスレッドごとに記憶する記憶装置と、を備え、
前記マルチコアプロセッサのうちの特定のコアが、
前記記憶装置から、対象スレッドの記憶領域の使用数と、前記マルチコアプロセッサのコアごとに割当済のスレッドの記憶領域の使用数と、を特定する特定手段と、
前記割当済のスレッドの特定された記憶領域の使用数から前記コアごとに最大値を検出する検出手段と、
前記マルチコアプロセッサのうちの割当先候補に選択されたコアの検出された最大値と前記対象スレッドの特定された記憶領域の使用数とのうちの大きい方の値と、前記選択されたコア以外のコアの検出された最大値との総和が、前記共有資源内の記憶領域数以下であるか否かを判断する判断手段と、
前記総和が前記記憶領域数以下であると判断された場合、前記対象スレッドを前記選択されたコアに割り当てる割当手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スレッドを割り当てる割当方法、およびマルチコアプロセッサシステムに関する。
【背景技術】
【０００２】
従来、マルチコアプロセッサシステムにおいて、キャッシュヒット率を測定し、各スレッドのキャッシュヒット率が高くなるようにスレッドをスケジューリングする技術が知られている（たとえば、下記特許文献１〜３を参照。）。【０００３】
また、スレッドごとにキャッシュの優先度を設け、キャッシュの優先度に応じて同一のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に割り当てられるスレッドのキャッシュの使用量を決定する技術が知られている（たとえば、下記特許文献４を参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−２８５４３０号公報
【特許文献２】特表２００８−５４２９２５号公報
【特許文献３】特開平４−３３８８３７号公報
【特許文献４】特開平９−１０１９１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、たとえば、キャッシュのヒット率が低いスレッドが複数のＣＰＵで同時に実行された場合、複数のＣＰＵから共有メモリへのアクセスが競合し、共有メモリへのアクセスの待ち時間が発生する問題点がある。これにより、各スレッドの実行が進まなくなってしまい、スレッドの実行性能が低下する問題点がある。【０００６】
本発明は、上述した従来技術による問題点を解消するため、共有メモリへのアクセス競合によるスレッドの性能劣化の低減を図ることができる割当方法、およびマルチコアプロセッサシステムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、マルチコアプロセッサのうちの特定のコアが、前記マルチコアプロセッサで共有する共有資源が有する記憶領域の使用数をスレッド群のスレッドごとに記憶する記憶装置から、対象スレッドの記憶領域の使用数と、前記マルチコアプロセッサのコアごとに割当済のスレッドの記憶領域の使用数と、を特定し、前記割当済のスレッドの特定された記憶領域の使用数から前記コアごとに最大値を検出し、前記マルチコアプロセッサのうちの割当先候補に選択されたコアの検出された最大値と前記対象スレッドの特定された記憶領域の使用数とのうちの大きい方の値と、前記選択されたコア以外のコアの検出された最大値との総和が、前記共有資源内の記憶領域数以下であるか否かを判断し、前記総和が前記記憶領域数以下であると判断された場合、前記対象スレッドを前記選択されたコアに割り当てる割当方法、およびマルチコアプロセッサシステムが提案される。
【発明の効果】
【０００８】
本発明の一側面によれば、共有メモリへのアクセス競合によるスレッドの性能劣化の低減を図ることができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、マルチコアプロセッサシステムの処理例を示す説明図である。
【図２】図２は、マルチコアプロセッサシステムのハードウェア構成例を示す説明図である。
【図３】図３は、実施例１〜５にかかるスレッドテーブルの一例を示す説明図である。
【図４】図４は、実施例１〜６にかかる割当テーブルの一例を示す説明図である。
【図５】図５は、実施例１〜６にかかるマスタＯＳの機能例を示すブロック図である
【図６】図６は、実施例１にかかる各ＣＰＵ２０１の選択時の判断例を示す説明図である。
【図７】図７は、実施例１にかかる割当例を示す説明図である。
【図８】図８は、実施例１にかかるマスタＯＳが行う処理手順を示すフローチャートである。
【図９】図９は、実施例２にかかるＣＰＵ２０１の選択例を示す説明図である。
【図１０】図１０は、実施例２にかかるマスタＯＳが行う処理手順を示すフローチャートである。
【図１１】図１１は、実施例３にかかるＣＰＵ２０１の選択例を示す説明図である。
【図１２】図１２は、実施例３にかかるマスタＯＳが行う処理手順を示すフローチャートである。
【図１３】図１３は、実施例４にかかる割当例を示す説明図である。
【図１４】図１４は、実施例４にかかるマスタＯＳが行う処理手順を示すフローチャートである。
【図１５】図１５は、実施例５にかかる割当例を示す説明図である。
【図１６】図１６は、実施例５にかかるマスタＯＳが行う処理手順を示すフローチャート（その１）である。
【図１７】図１７は、実施例５にかかるマスタＯＳが行う処理手順を示すフローチャート（その２）である。
【図１８】図１８は、実施例６にかかるスレッドテーブルの一例を示す説明図である。
【図１９】図１９は、対象スレッドがＡに分類されている場合の例を示す説明図である。
【図２０】図２０は、対象スレッドがＣに分類されている場合の例を示す説明図である。
【図２１】図２１は、対象スレッドがＢに分類されている場合の例１を示す説明図である。
【図２２】図２２は、対象スレッドがＢに分類されている場合の例２を示す説明図である。
【図２３】図２３は、実施例６にかかるマスタＯＳが行う処理手順の一例を示すフローチャートである。
【図２４】図２４は、図２３で示したＡの割当処理（ステップＳ２３０８）の詳細な説明を示すフローチャートである。
【図２５】図２５は、図２３で示したＢの割当処理（ステップＳ２３１０）の詳細な処理手順を示すフローチャートである。
【図２６】図２６は、図２３で示したＣの割当処理（ステップＳ２３１１）の詳細な処理手順を示すフローチャートである。
【図２７】図２７は、実施例７にかかるスレッドテーブルの一例を示す説明図である。
【図２８】図２８は、実施例７にかかる割当テーブルの一例を示す説明図である。
【図２９】図２９は、アクセス競合のオーバーヘッド情報の一例を示す説明図である。
【図３０】図３０は、実施例７にかかるＯＳ２２１の機能例を示すブロック図である
【図３１】図３１は、第１，２のスケジューリングによる割当例を示す説明図である。
【図３２】図３２は、算出の一の例を示す説明図である。
【図３３】図３３は、算出の他の例を示す説明図である。
【図３４】図３４は、実施例７にかかるマスタＯＳが行う処理手順の一例を示すフローチャートである。
【図３５】図３５は、図３４で示した第２のスケジューリング処理（ステップＳ３４０２）の詳細な説明を示すフローチャートである。
【図３６】図３６は、マルチコアプロセッサシステム２００の適用例を示す図である。
【発明を実施するための形態】
【００１０】
マルチコアプロセッサシステムにおいて、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００１１】
マルチコアプロセッサの各コアで実行されるスレッドの総バンク使用数が、共有資源の総バンク数を上回ってしまうと、あるバンクに対し複数のスレッドからアクセスを受けることになる。このため、いずれのスレッドの組み合わせで並列実行されても、メモリバンク不足により発生するアクセス競合の低減を図る。すなわち、並列実行時のスレッドの使用バンク数の総和が共有資源のメモリバンク数を超えないように対象スレッドの割り当てを行う。このように、各コアで使用バンク数が最大のスレッドが同時に実行されたとしても、バンク不足を可能な限り回避することができる。したがって、共有資源へのアクセス競合によるスレッドの性能劣化の低減を図ることができる。
【００１２】
図１は、マルチコアプロセッサシステムの処理例を示す説明図である。まず、マルチコアプロセッサで共有する共有資源が有するバンクの使用数をスレッドごとに記憶装置に記憶させておく。ここで、スレッドとは、ＣＰＵが実行する処理の単位である。記憶装置と共有資源とは、同一であってもよいし、異なる資源であってもよい。たとえば、共有資源がＲＡＭ（Ｒａｎｄａｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）や２次キャッシュであり、記憶装置がフラッシュＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などのストレージである。共有資源の記憶領域は、複数のバンクに分割されている。バンクとは、共有資源のコントローラが共有資源を管理する際の記憶領域の単位である。共有資源のコントローラが、メモリインターリーブ機能により、ＣＰＵ２０１からの書き込み命令や読み出し命令を同時に複数のバンクに発行することができるため、異なるバンクへのアクセスであれば競合しない。図１では、共有資源のバンク数は１０である。
【００１３】
図１では、スレッド１０１−１〜１０１−８が各ＣＰＵ２０１に割当済である。ＣＰＵ２０１−１には、スレッド１０１−１，１０１−２が割り当てられ、ＣＰＵ２０１−２には、スレッド１０１−３，１０１−４が割り当てられている。ＣＰＵ２０１−３には、スレッド１０１−５，１０１−６が割り当てられ、ＣＰＵ２０１−４には、スレッド１０１−７，１０１−８が割り当てられている。
【００１４】
まず、ＣＰＵ２０１−１が実行するマスタＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が、記憶装置から、対象スレッド１００のバンクの使用数と、各ＣＰＵ２０１に割当済のスレッド１０１のバンクの使用数と、を特定する。対象スレッド１００は、割り当ての対象となるスレッドである。たとえば、対象スレッド１００は、起動指示がマスタＯＳによって受け付けられたスレッドである。各スレッドのバンクの使用数は図１中の各スレッドの括弧（  ）の中に記述されている。たとえば、対象スレッド１００のバンクの使用数は２である。
【００１５】
つぎに、マスタＯＳが、割当済のスレッド１０１の特定されたバンクの使用数のうちの最大値ＢをＣＰＵ２０１ごとに検出する。たとえば、ＣＰＵ２０１−１に割当済のスレッド１０１のバンクの使用数のうちの最大値Ｂ１は３であり、ＣＰＵ２０１−２に割当済のスレッド１０１のバンクの使用数のうちの最大値Ｂ２は２である。ＣＰＵ２０１−３に割当済のスレッド１０１のバンクの使用数のうちの最大値Ｂ３は２であり、ＣＰＵ２０１−４に割当済のスレッド１０１のバンクの使用数のうちの最大値Ｂ４は３である。
【００１６】
そして、マスタＯＳが、マルチコアプロセッサのうちの割当先候補に選択されたＣＰＵ２０１の検出された最大値と対象スレッド１００の特定されたバンクの使用数とのうちの大きい方の値を選択する。図１では、マスタＯＳが割当先候補としてＣＰＵ２０１−１を選択する。対象スレッド１００のバンクの使用数は２であり、ＣＰＵ２０１−１の検出された最大値は３であるため、マスタＯＳが大きい方の値として３を選択する。図１中点線枠で囲われたスレッドが、選択された大きい方の値のスレッドと、ＣＰＵ２０１−１以外のＣＰＵ２０１の検出された最大値のスレッドである。すなわち、対象スレッド１００をＣＰＵ２０１−１に割り当てた場合において、対象スレッド１００と割当済のスレッド１０１とが並列実行される組み合わせの中で、図１中点線枠で囲われたスレッドの組み合わせが、最も総バンク使用数が大きくなる。
【００１７】
そして、たとえば、マスタＯＳが、選択された大きい方の値と、ＣＰＵ２０１−１以外のＣＰＵ２０１の検出された最大値との総和ＳＵＭが、共有資源のバンク数以下であるか否かを判断する。マスタＯＳが、総和ＳＵＭが共有資源のバンク数以下であると判断した場合、対象スレッド１００を選択されたＣＰＵ２０１に割り当てる。総和ＳＵＭは１０であるため、マスタＯＳが対象スレッド１００をＣＰＵ２０１−１に割り当てる。これにより、対象スレッド１００をＣＰＵ２０１−１に割り当てた場合、いずれのスレッドの組み合わせで並列実行されても、バンク数不足に陥ることがない。また、マスタＯＳは、割当先候補としてＣＰＵ２０１−１以外のＣＰＵ２０１を選択してもよいし、ＣＰＵ２０１を順に選択してもよい。割当先候補の選択については、実施例にて後述する。
【００１８】
ＣＰＵ２０１−１〜２０１−４は、それぞれに複数のスレッドが割り当てられた場合、タイムスライスで切り替えながら実行するため、いずれのスレッドの組み合わせで並列実行されるか不明である。図１で示した例では、いずれのスレッドの組み合わせであっても、共有資源へのアクセスが競合しないように割り当てるため、アクセス競合によるスレッドの性能劣化の低減を図ることができる。
【００１９】
（マルチコアプロセッサシステム）
図２は、マルチコアプロセッサシステムのハードウェア構成例を示す説明図である。マルチコアプロセッサシステム２００は、ＣＰＵ２０１−１〜２０１−ｎと、２次キャッシュ２０２と、Ｉ／Ｏ２０３と、Ｉ／Ｆ２０４と、を有している。さらに、マルチコアプロセッサシステム２００は、ＲＡＭコントローラ２０５と、ＲＡＭ２０６と、フラッシュＲＯＭコントローラ２０７と、フラッシュＲＯＭ２０８と、ＲＯＭコントローラ２０９と、ＲＯＭ２１０と、を有している。
【００２０】
ＲＡＭコントローラ２０５と、フラッシュＲＯＭコントローラ２０７と、ＲＯＭコントローラ２０９と、２次キャッシュ２０２と、Ｉ／Ｏ２０３と、Ｉ／Ｆ２０４とは、バス２１１を介して接続されている。ＣＰＵ２０１−１〜２０１−ｎ（ｎ≧２）は、２次キャッシュ２０２を介して各部と接続されている。ＲＡＭ２０６は、ＲＡＭコントローラ２０５を介して各部と接続されている。フラッシュＲＯＭ２０８は、フラッシュＲＯＭコントローラ２０７を介して各部と接続されている。ＲＯＭ２１０は、ＲＯＭコントローラ２０９を介して各部と接続されている。
【００２１】
ＣＰＵ２０１−１はマスタＣＰＵであり、マルチコアプロセッサシステム２００の全体を制御する。ＣＰＵ２０１−２〜２０１−ｎはスレーブＣＰＵである。ＣＰＵ２０１−１〜２０１−ｎは、それぞれ１次キャッシュ２６１−１〜２６１−ｎ、レジスタ、コア、ＭＭＵ（Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）を有している。ＭＭＵは、ＣＰＵ２０１から書き込み命令や読み出し命令を受け付けると、各命令に含まれる論理アドレスを物理アドレスに変更する。ＣＰＵ２０１−１〜２０１−ｎは、それぞれＯＳ２２１−１〜２２１−ｎを実行している。
【００２２】
ＯＳ２２１−１は、マルチコアプロセッサの全体のマスタＯＳである。ＯＳ２２１−１は、ウエイトキュー２５０を有し、ウエイトキュー２５０にスレッドのバイナリ情報へのポインタが積まれると、ＯＳ２２１−１はスレッドの起動指示を受け付けたと判断する。
【００２３】
また、ＯＳ２２１−１〜２２１−ｎは、図示していないが、それぞれランキューを有している。各ランキューには各ＣＰＵ２０１に割り当てられたスレッドのコンテキスト情報のポインタが積まれる。コンテキスト情報とは、たとえば、ロードされたスレッドの実行状態や該スレッド内の変数などが含まれる情報である。ＯＳ２２１−１〜２２１−ｎはランキュー内のコンテキスト情報のポインタを取得し、スレッドのコンテキスト情報にアクセスすることで、スレッドを直ぐに実行することができる。
【００２４】
ＣＰＵ２０１−１〜２０１−ｎがそれぞれ有する１次キャッシュ２６１−１〜２６１−ｎはＯＳ２２１が実行するスレッドからＲＡＭ２０６やフラッシュＲＯＭ２０８への書込処理を一時的に記憶する。各１次キャッシュ２６１は、ＲＡＭ２０６やフラッシュＲＯＭ２０８から読み出されたデータを一時的に記憶する。各１次キャッシュ２６１は、スヌープ回路によって接続されている。スヌープ回路は、ＣＰＵ２０１が有する１次キャッシュ２６１で共有するデータがいずれかの１次キャッシュ２６１で更新された場合、該更新を検出し、他の１次キャッシュ２６１の該データも更新する。
【００２５】
２次キャッシュ２０２は、キャッシュメモリと２次キャッシュコントローラ２５１を有している。２次キャッシュ２０２では、各ＣＰＵ２０１が有する１次キャッシュ２６１から追い出されたデータやＲＡＭ２０６、フラッシュＲＯＭ２０８から読み出されたデータを記憶する。２次キャッシュ２０２は、１次キャッシュ２６１よりも記憶容量が大きくかつＣＰＵ２０１からのアクセス速度が遅いが、ＲＡＭ２０６よりも記憶容量が小さくかつＣＰＵ２０１からのアクセス速度が速い。
【００２６】
２次キャッシュ２０２のキャッシュメモリは、バンク２３１−１〜２３１−ｌに分割され、２次キャッシュコントローラ２５１は、メモリインターリーブ機能を有している。２次キャッシュコントローラ２５１はＣＰＵ２０１からの書き込み命令や読み出し命令を同時に複数のバンク２３１に発行することができる。したがって、異なるバンク２３１へのアクセスであれば競合が発生しない。
【００２７】
また、２次キャッシュコントローラ２５１は、図示しないアクセスキューをバンク２３１ごとに有している。２次キャッシュコントローラ２５１は、いずれのバンク２３１へのアクセスであるかを判断後、アクセス先のバンク２３１用のアクセスキューにアクセス要求（書き込み命令または読み出し命令）を登録する。そして、２次キャッシュコントローラ２５１は、アクセスキューに登録されたアクセス要求順にバンク２３１へのアクセスを行う。
【００２８】
たとえば、バンク２３１−１〜２３１−ｌは、それぞれ空き領域か否かを示すフラグを有してよい。そして、２次キャッシュコントローラ２５１が、ＣＰＵ２０１から読み出し命令または書き込み命令を受け付けた場合、読み出し命令または書き込み命令に関するデータ群がバンク２３１に記憶されているか否かを判断する。
【００２９】
たとえば、２次キャッシュコントローラ２５１が、該データ群がいずれかのバンク２３１に記憶されていない場合、バンク２３１−１〜２３１−ｌの空き領域か否かを示すフラグにより、空き領域のバンク２３１を特定する。そして、たとえば、２次キャッシュコントローラ２５１が、特定したバンク２３１へデータ群を記憶させ、特定したバンク２３１のフラグを使用領域に変更する。また、たとえば、データ群のうちのいずれかのデータがバンク２３１に記憶されている場合、データ群のうちの残余のデータも該バンク２３１と同一バンク２３１に記憶させることとしてもよい。
【００３０】
また、バンク２３１−１〜２３１−ｌは、バンク２３１に対する最新のアクセス時刻を有していてもよい。たとえば、２次キャッシュコントローラ２５１は、読み出し命令または書き込み命令に関するデータ群がバンク２３１に記憶されていない場合、最新のアクセス時刻が最も古いバンク２３１を特定する。そして、２次キャッシュコントローラ２５１は、特定したバンク２３１に記憶されているデータ群をＲＡＭ２０６やフラッシュＲＯＭ２０８へ追い出し、あらたな命令によるデータ群を特定したバンク２３１に記憶させ、アクセス時刻を更新する。
【００３１】
また、バンク２３１は、バンク２３１のキャッシュラインごとに空き領域であるか否かのフラグや最新のアクセス時刻を有していてもよい。また、各ＯＳ２２１がスレッドとバンク２３１とを関連付けて空き領域であるか否かのフラグを管理してもよい。
【００３２】
つぎに、ＲＡＭ２０６は、たとえば、ＣＰＵ２０１−１〜２０１−ｎのワークエリアとして使用される。ＲＡＭ２０６の記憶領域はバンク２４１−１〜２４１−ｍに分割されている。そのため、ＲＡＭコントローラ２０５は、メモリインターリーブ機能を有している。ＲＡＭコントローラ２０５は、メモリインターリーブ機能により、ＣＰＵ２０１からの書き込み命令や読み出し命令を同時に複数のバンク２４１に発行することができるため、異なるバンク２４１へのアクセスであれば競合しない。
【００３３】
また、ＲＡＭコントローラ２０５は、アクセスキューをバンク２４１ごとに有している。ＲＡＭコントローラ２０５は、いずれのバンク２４１へのアクセスであるかを判断後、アクセス先のバンク２４１用のアクセスキューにアクセス要求を登録する。そして、ＲＡＭコントローラ２０５は、アクセスキューに登録されたアクセス要求順にバンク２４１へのアクセスを行う。
【００３４】
たとえば、バンク２４１−１〜２４１−ｍは、それぞれ空き領域か否かを示すフラグを有してよい。まず、ＣＰＵ２０１は、スレッドを実行するためにはコンテキスト情報をＲＡＭ２０６へ記憶させる。そして、ＲＡＭコントローラ２０５が、ＣＰＵ２０１からスレッドのコンテキスト情報に関する書き込み命令を受け付けた場合、バンク２４１−１〜２４１−ｍの空き領域か否かを示すフラグにより、コンテキスト情報分の空き領域のバンク２４１を特定する。コンテキスト情報は、上述したようにスレッドのプログラムコードやスレッドの実行時に用いる変数などを有している。そして、たとえば、ＲＡＭコントローラ２０５が、特定したバンク２４１へコンテキスト情報を記憶させ、特定したバンク２４１のフラグを使用領域に変更する。これにより、ＲＡＭコントローラ２０５はスレッドごとにバンク２４１を割り当てることができる。
【００３５】
また、たとえば、ＲＡＭコントローラ２０５が、空き領域であるバンク２４１を特定できなかった場合、任意のバンク２４１に記憶されたデータをフラッシュＲＯＭ２０８へ一時的に退避させ、任意のバンク２４１へコンテキスト情報を記憶させる。
【００３６】
さらに、たとえば、実行中のスレッドはあらたなデータをＲＡＭ２０６に記憶させるために、記憶領域を動的に増やすことがある。このとき、スレッドは、すでに利用中の記憶領域（たとえば、コンテキスト情報の記憶領域）に連続した記憶領域にあらたなデータを記憶させるため、あらたなデータは、すでに利用中のバンク２４１と同一バンク２４１に記憶される。これにより、複数のスレッドがマルチコアプロセッサで同時に並列実行されても、ＲＡＭ２０６のバンク数を超えないようにスレッドを割り当てることで、スレッドは、異なるバンク２４１を利用することができる。利用中の記憶領域については、ＣＰＵ２０１がそれぞれ有するＭＭＵが論理アドレスと物理アドレスを変換する変換テーブルにより管理している。
【００３７】
また、バンク２４１−１〜２４１−ｍは、バンク２４１に対する最新のアクセス時刻を有していてもよい。これにより、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）によって、各スレッドにバンクを振り分けることができる。たとえば、ＲＡＭ２０６は、読み出し命令または書き込み命令に関するデータ群がバンク２４１に記憶されていない場合、最新のアクセス時刻が最も古いバンク２４１を特定する。そして、ＲＡＭ２０６は、特定したバンク２４１へデータ群を記憶させ、アクセス時刻を更新する。そして、ＲＡＭ２０６は、特定したバンク２４１に記憶されているデータ群をフラッシュＲＯＭ２０８へ一時的にスワップさせ、あらたな命令によるデータ群を特定したバンク２４１に記憶させ、アクセス時刻を更新する。アクセスされていない時間が最も長いバンク２４１のデータをスワップ対象にすることができる。
【００３８】
また、バンク２４１は、バンク２４１のキャッシュラインごとに空き領域であるか否かのフラグや最新のアクセス時刻を有していてもよい。ＲＡＭコントローラ２０５は、キャッシュラインごとに管理していたとしても、データ群は、連続した記憶領域に記憶させるため、たとえば、プログラムのコードのような大きなデータであれば、すべて同一バンク２４１に割り当てることができる。また、各ＯＳ２２１がスレッドとバンク２４１とを関連付けて空き領域であるか否かのフラグを管理してもよい。
【００３９】
また、本明細書では、ＲＡＭ２０６のバンク数として、ｍを用いるが、これに限らず、あらかじめスレッドが利用可能な上限値をＲＡＭ２０６のバンク数として定義してもよい。
【００４０】
ＲＯＭ２１０は、ブートプログラムなどのプログラムを記憶している。ＲＯＭコントローラ２０９は、ＲＯＭ２１０へのアクセスを制御する。フラッシュＲＯＭ２０８は、ＯＳ２２１などのシステムソフトウェアやアプリのプログラムを記憶している。フラッシュＲＯＭ２０８は、たとえば、マルチコアプロセッサシステム２００に内蔵されていてもよいし、メモリカード、ＳＤカードなどの記録媒体であってもよい。フラッシュＲＯＭコントローラ２０７は、フラッシュＲＯＭ２０８へのアクセスを制御する。
【００４１】
（スレッドテーブル）
図３は、実施例１〜５にかかるスレッドテーブルの一例を示す説明図である。実施例６のスレッドテーブルと実施例７のスレッドテーブルについては後述する。スレッドテーブル３００は、スレッドＩＤ、処理時間、使用数のフィールドを有している。各フィールドに値が設定されることで、スレッド情報（たとえば、３０１−１）がレコードとして記憶される。
【００４２】
スレッドＩＤのフィールドには、スレッドの識別情報が登録される。処理時間のフィールドには、各スレッドの処理時間が登録される。各スレッドの処理時間については、たとえば、各スレッドの設計時にシミュレーションツールによりあらかじめ計測されてよい。使用数のフィールドには、ＲＡＭ２０６の複数のバンクのうち、各スレッドが実行時に使用するバンクの使用数が登録される。各スレッドのバンクの使用数は、各スレッドの設計時にシミュレーションツールによりあらかじめ計数されてもよい。また、各スレッドのバンクの使用数は、各スレッドの実行時に計測された値でもよい。スレッドテーブル３００については、フラッシュＲＯＭ２０８に記憶されてよい。
【００４３】
（割当テーブル）
図４は、実施例１〜６にかかる割当テーブルの一例を示す説明図である。実施例７の割当テーブルについては後述する。割当テーブル４００は、ＣＰＵＩＤ、スレッドＩＤのフィールドを有している。各フィールドに値が設定されることで、スレッド情報（たとえば、４０１−１）がレコードとして記憶される。
【００４４】
ＣＰＵＩＤのフィールドには、ＣＰＵ２０１の識別情報が登録される。スレッドＩＤのフィールドには、各ＣＰＵ２０１に割り当てられたスレッドの識別情報が登録される。マスタＯＳであるＯＳ２２１−１がスレッドを各ＣＰＵ２０１に割り当てる都度、割当テーブル４００にスレッドの割当結果を設定することにより、あらたなレコードが生成される。また、ＯＳ２２１−１〜２２１−ｎがスレッドの実行が終了すると、割当テーブル４００から、実行が終了したスレッドに関するレコードを削除する。割当テーブル４００は、フラッシュＲＯＭ２０８に記憶されていることとする。
【００４５】
（実施例１〜６にかかるマスタＯＳの機能例を示すブロック図）
図５は、実施例１〜６にかかるマスタＯＳの機能例を示すブロック図である。実施例７にかかるマスタＯＳの機能例を示すブロック図については後述する。マスタＯＳであるＯＳ２２１−１は、特定部５０１と、検出部５０２と、選択部５０３と、判断部５０４と、割当部５０５と、分類判断部５０６と、を有している。特定部５０１から分類判断部５０６の処理が、マスタＯＳにコーディングされている。ＣＰＵ２０１−１が、フラッシュＲＯＭ２０８に記憶されているＯＳ２２１−１を読み出し、ＯＳ２２１−１にコーディングされている処理を実行する。これにより、特定部５０１から分類判断部５０６の機能が実現される。以下、特定部５０１から分類判断部５０６については、実施例１〜実施例６を用いて詳細に説明する。実施例１〜６では、ｎ＝４とし、ｌ＝１０とし、ｍ＝１０とする。また、実施例７については、図５で示すブロック図を包含するブロック図を用いて説明する。
【００４６】
（実施例１）
つぎに、実施例１について説明する。たとえ、選択された使用バンク数のスレッド群が各々のＣＰＵ２０１で同時に並列実行されても、バンク数不足に陥ることがないようにする。そこで、実施例１では、ＣＰＵ２０１を順に選択して、並列実行時のスレッドの使用バンク数の総和が共有資源のバンク数を超えないようなＣＰＵ２０１を対象スレッドの割当先として検出する。これにより、共有資源へのアクセス競合によるスレッドの性能劣化の低減を図ることができる。
【００４７】
図６は、実施例１にかかる各ＣＰＵ２０１の選択時の判断例を示す説明図である。まず、特定部５０１は、対象スレッド６００のバンクの使用数と、各ＣＰＵ２０１に割当済のスレッド６０１（６０１−１〜６０１−７）のバンクの使用数と、をスレッドテーブル３００から特定する。ここで、対象スレッド６００とは、たとえば、図２に示すＯＳ２２１−１が起動指示を受け付けたスレッドである。
【００４８】
たとえば、特定部５０１は、割当テーブル４００から、ＣＰＵ２０１の識別情報に基づいて各ＣＰＵ２０１に割当済のスレッド６０１の識別情報を抽出する。そして、たとえば、特定部５０１は、スレッドテーブル３００から、対象スレッド６００の識別情報と、抽出した各ＣＰＵ２０１に割当済のスレッド６０１の識別情報に基づいて、それぞれのスレッドのバンクの使用数を特定する。各スレッドのＲＡＭ２０６のバンクの使用数が図６中のスレッドの括弧（  ）内に記述されている。
【００４９】
検出部５０２は、割当済のスレッド６０１の特定部５０１により特定されたバンクの使用数から最大値ＢをＣＰＵ２０１ごとに検出する。図６では、ＣＰＵ２０１−１の最大値Ｂ１は３であり、ＣＰＵ２０１−２の最大値Ｂ２は２であり、ＣＰＵ２０１−３の最大値Ｂ３は２であり、ＣＰＵ２０１−４の最大値Ｂ４は３である。
【００５０】
選択部５０３は、検出部５０２による検出後、マルチコアプロセッサから、順にＣＰＵ２０１を割当先候補として選択する。たとえば、選択部５０３は、ＣＰＵ２０１の識別情報順に選択する。よって、選択部５０３は、ＣＰＵ２０１−１→ＣＰＵ２０１−２→ＣＰＵ２０１−３→ＣＰＵ２０１−４の順に選択する。
【００５１】
判断部５０４は、選択部５０３によりＣＰＵ２０１が選択される都度、選択されたＣＰＵ２０１の検出された最大値と対象スレッド６００の特定されたバンクの使用数とのうちの大きい方の値を選択する。そして、判断部５０４は、選択した大きいほうの値と、選択されたＣＰＵ２０１以外のＣＰＵ２０１の検出された最大値との総和ＳＵＭが、ＲＡＭ２０６のバンク数ｍ以下であるか否かを判断する。たとえば、判断部５０４は、下記式（１）を算出する。
【００５２】
ＳＵＭｉ（ｉ＝１〜ｎ）
＝ΣＢ１，・・・，ＭＡＸ（Ｂｉ，ｃ），・・・，Ｂｎ・・・（１）
【００５３】
ＭＡＸ（Ｂｉ，ｃ）は、選択されたＣＰＵ２０１の検出された最大値と対象スレッド６００の特定されたバンクの使用数とのうちの大きい方の値である。そして、たとえば、判断部５０４は、総和ＳＵＭｉがＲＡＭ２０６のバンク数ｍ以下であるか否かを判断する。
【００５４】
はじめに、図６の左上に示すように、選択部５０３は、ＣＰＵ２０１−１を選択する。このとき、総和ＳＵＭ１（点線枠で囲われたスレッドの総バンク使用数）は１０であるため、判断部５０４は、ＲＡＭ２０６のバンク数ｍ以下であると判断する。
【００５５】
つぎに、図６の右上に示すように、選択部５０３は、ＣＰＵ２０１−２を選択する。このとき、総和ＳＵＭ２（点線枠で囲われたスレッドの総バンク使用数）は１１であるため、判断部５０４は、ＲＡＭ２０６のバンク数ｍ以下でないと判断する。
【００５６】
そして、図６の左下に示すように、選択部５０３は、ＣＰＵ２０１−３を選択する。このとき、総和ＳＵＭ３（点線枠で囲われたスレッドの総バンク使用数）は１１であるため、判断部５０４は、ＲＡＭ２０６のバンク数ｍ以下でないと判断する。
【００５７】
最後に、図６の右下に示すように、選択部５０３は、ＣＰＵ２０１−４を選択する。このとき、総和ＳＵＭ４（点線枠で囲われたスレッドの総バンク使用数）は１０であるため、判断部５０４は、ＲＡＭ２０６のバンク数ｍ以下であると判断する。
【００５８】
割当部５０５は、判断部５０４により総和ＳＵＭがＲＡＭ２０６のバンク数ｍ以下であると判断されたＣＰＵ２０１に対象スレッド６００を割り当てる。たとえば、割当部５０５は、ＣＰＵ２０１−１またはＣＰＵ２０１−４に対象スレッド６００を割り当てる。つぎに、総和ＳＵＭがＲＡＭ２０６のバンク数ｍ以下であると判断された割当先候補が複数ある場合において、割当部５０５がいずれの割当先候補に割り当てるかについて図７を用いて説明する。
【００５９】
図７は、実施例１にかかる割当例を示す説明図である。たとえば、割当部５０５は、判断部５０４により総和ＳＵＭがＲＡＭ２０６のバンク数ｍ以下であると判断されたＣＰＵ２０１−１とＣＰＵ２０１−４のそれぞれに割当済のスレッド６０１の処理時間の合計値を算出する。たとえば、割当部５０５は、スレッドテーブル３００を参照することにより、割当済のスレッド６０１の処理時間を特定することができる。図７では、ＣＰＵ２０１−１に割当済のスレッド６０１の処理時間の合計値は、５０［ｍｓ］であり、ＣＰＵ２０１−４に割当済のスレッド６０１の処理時間の合計値は、３０［ｍｓ］であるため、対象スレッド６００はＣＰＵ２０１−４に割り当てられる。
【００６０】
（実施例１にかかるマスタＯＳが行う処理手順）
図８は、実施例１にかかるマスタＯＳが行う処理手順を示すフローチャートである。まず、マスタＯＳが、スレッドの起動指示を受け付けたか否かを判断する（ステップＳ８０１）。マスタＯＳが、スレッドの起動指示を受け付けていないと判断した場合（ステップＳ８０１：Ｎｏ）、ステップＳ８０１へ戻る。
【００６１】
マスタＯＳが、スレッドの起動指示を受け付けたと判断した場合（ステップＳ８０１：Ｙｅｓ）、特定部５０１により、ＣＰＵ２０１ごとに割当済のスレッドのバンクの使用数を特定する（ステップＳ８０２）。そして、マスタＯＳが、特定部５０１により、起動指示を受け付けたスレッド（対象スレッド）のバンクの使用数ｃを特定し（ステップＳ８０３）、検出部５０２により、特定したバンクの使用数から、最大値Ｂ（１〜ｎ）をＣＰＵ２０１ごとに検出する（ステップＳ８０４）。
【００６２】
つぎに、マスタＯＳが、選択部５０３により、ｉ＝１とし（ステップＳ８０５）、選択部５０３により、ｉ≦ＣＰＵ数であるか否かを判断する（ステップＳ８０６）。マスタＯＳが、ｉ≦ＣＰＵ数であると判断した場合（ステップＳ８０６：Ｙｅｓ）、ｉ番目のＣＰＵ２０１を選択する（ステップＳ８０７）。マスタＯＳが、ｉ番目のＣＰＵ２０１の最大値Ｂｉと対象スレッドの使用バンク数ｃのうち、大きい値（ＭＡＸ（Ｂｉ，ｃ））を選択する（ステップＳ８０８）。
【００６３】
そして、マスタＯＳが、ＳＵＭｉ＝ΣＢ１，・・・，ＭＡＸ（Ｂｉ，ｃ），・・・，Ｂｎを算出し（ステップＳ８０９）、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍであるか否かを判断する（ステップＳ８１０）。マスタＯＳが、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍであると判断した場合（ステップＳ８１０：Ｙｅｓ）、ｉ番目のＣＰＵ２０１を割当先候補として検出し（ステップＳ８１１）、ｉ＝ｉ＋１とし（ステップＳ８１２）、ステップＳ８０６へ戻る。マスタＯＳが、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍでないと判断した場合（ステップＳ８１０：Ｎｏ）、ステップＳ８１２へ移行する。
【００６４】
ステップＳ８０６において、マスタＯＳが、ｉ≦ＣＰＵ数でないと判断した場合（ステップＳ８０６：Ｎｏ）、検出したＣＰＵ２０１ごとに割当済のスレッドの処理時間の合計値を算出する（ステップＳ８１３）。そして、マスタＯＳが、検出したＣＰＵ２０１の中で、算出した合計値が最小のＣＰＵ２０１に対象スレッドを割り当て（ステップＳ８１４）、ステップＳ８０１へ移行する。図示していないが、マスタＯＳは、割当結果を割当テーブル４００に出力する。
【００６５】
実施例１によれば、複数のＣＰＵ２０１の中で、アクセス競合による性能劣化を低減させることができるＣＰＵ２０１に対象スレッドを割り当てることができる。さらに、総和ＳＵＭがＲＡＭ２０６のバンク数ｍ以下となる割当先候補の数が複数ある場合、割当済のスレッドの処理時間が最小なコアに対象スレッドを割り当てる。これにより、ＲＡＭ２０６へのアクセス競合による性能劣化を低減し、かつ負荷分散を行うことができる。
【００６６】
（実施例２）
つぎに、実施例２について説明する。実施例１では先頭のＣＰＵから順に選択したが、実施例２では、複数のＣＰＵ２０１から、検出された最大値が大きい順にＣＰＵ２０１を割当先候補として選択する。最大値が大きい順であれば、対象スレッドの使用バンク数よりも大きい可能性が高く、無作為にＣＰＵ２０１を選択するよりも、並列実行時のスレッドの使用バンク数の総和に変化が生じにくい。したがって、アクセス競合による性能劣化の低減を図りつつ、対象スレッドの割当先を高速に決定することができる。
【００６７】
図９は、実施例２にかかるＣＰＵ２０１の選択例を示す説明図である。図９では、スレッド９０１−１〜９０１−７がＣＰＵ２０１に割当済である。また、各スレッドのＲＡＭ２０６のバンクの使用数が図９中のスレッドの括弧（  ）内に記述されている。
【００６８】
まず、実施例２の特定部５０１と検出部５０２のそれぞれの処理は、実施例１で説明した処理と同一であるため、省略する。図９の例では、ＣＰＵ２０１−１の最大値Ｂ１が４であり、ＣＰＵ２０１−２の最大値Ｂ２が２であり、ＣＰＵ２０１−３の最大値Ｂ３が１であり、ＣＰＵ２０１−４の最大値Ｂ４が３である。
【００６９】
つぎに、選択部５０３は、検出部５０２によって検出された最大値Ｂが大きい順にＣＰＵ２０１を選択する。したがって、選択部５０３は、ＣＰＵ２０１−１→ＣＰＵ２０１−４→ＣＰＵ２０１−２→ＣＰＵ２０１−３の順で選択する。
【００７０】
はじめに、図９の左上に示すように、選択部５０３は、ＣＰＵ２０１−１を選択する。このとき、総和ＳＵＭ１（点線枠で囲われたスレッドの総バンク使用数）は１０であるため、判断部５０４は、総和ＳＵＭ１がＲＡＭ２０６のバンク数ｍ以下であると判断する。
【００７１】
つぎに、図９の右上に示すように、選択部５０３は、ＣＰＵ２０１−４を選択する。このとき、総和ＳＵＭ４（点線枠で囲われたスレッドの総バンク使用数）は１０であるため、判断部５０４は、総和ＳＵＭ４がＲＡＭ２０６のバンク数ｍ以下であると判断する。
【００７２】
そして、図９の中央下に示すように、選択部５０３は、ＣＰＵ２０１−２を選択する。このとき、総和ＳＵＭ２（点線枠で囲われたスレッドの総バンク使用数）は１１であるため、判断部５０４は、総和ＳＵＭ２がＲＡＭ２０６のバンク数ｍ以下でないと判断する。
【００７３】
つぎに、検出部５０２によって検出されたＣＰＵ２０１−３の最大値がＣＰＵ２０１−２の最大値以下であるため、総和ＳＵＭ３は総和ＳＵＭ２未満となることがない。よって、判断部５０４は、総和ＳＵＭ３を算出せずとも、総和ＳＵＭ３がＲＡＭ２０６のバンク数ｍ以下でないと判断する。
【００７４】
そして、割当部５０５は、ＣＰＵ２０１−１またはＣＰＵ２０１−４のいずれか一方に対象スレッド９００を割り当てる。割当部５０５については、実施例１で説明した処理と同一であるため、詳細な説明を省略する。
【００７５】
また、たとえば、割当部５０５は、総和ＳＵＭがＲＡＭ２０６のバンク数ｍ以下でないと判断された時点で、すでに総和ＳＵＭがＲＡＭ２０６のバンク数ｍ以下であると判断された割当先候補から対象スレッド９００の割当先を決定してもよい。これにより、すべてのＣＰＵ２０１の選択時に対して判断部５０４の処理を行わずとも、並列実行時のスレッドの使用バンク数の総和が共有資源のバンク数を超えないようなＣＰＵ２０１を検出することができ、割当処理を高速化することができる。
【００７６】
（実施例２にかかるマスタＯＳが行う処理手順）
図１０は、実施例２にかかるマスタＯＳが行う処理手順を示すフローチャートである。まず、マスタＯＳが、スレッドの起動指示を受け付けたか否かを判断する（ステップＳ１００１）。マスタＯＳが、スレッドの起動指示を受け付けていないと判断した場合（ステップＳ１００１：Ｎｏ）、ステップＳ１００１へ戻る。
【００７７】
マスタＯＳが、スレッドの起動指示を受け付けたと判断した場合（ステップＳ１００１：Ｙｅｓ）、特定部５０１により、ＣＰＵ２０１ごとに割当済のスレッドのバンクの使用数を特定する（ステップＳ１００２）。そして、マスタＯＳが、特定部５０１により、起動指示を受け付けたスレッド（対象スレッド）のバンクの使用数ｃを特定し（ステップＳ１００３）、検出部５０２により、特定したバンクの使用数から、最大値Ｂ（１〜ｎ）をＣＰＵ２０１ごとに検出する（ステップＳ１００４）。
【００７８】
つぎに、マスタＯＳが、選択部５０３により、未選択のＣＰＵ２０１があるか否かを判断する（ステップＳ１００５）。マスタＯＳが、未選択のＣＰＵ２０１があると判断した場合（ステップＳ１００５：Ｙｅｓ）、未選択のＣＰＵ２０１のうち、検出された最大値が最も大きいＣＰＵ２０１（ｘ番目のＣＰＵ２０１）を選択する（ステップＳ１００６）。
【００７９】
マスタＯＳが、ｘ番目のＣＰＵ２０１の最大値Ｂと対象スレッドの使用バンク数ｃのうち、大きい値（ＭＡＸ（Ｂｘ，ｃ））を選択する（ステップＳ１００７）。マスタＯＳが、ＳＵＭｘ＝ΣＢ１，・・・，ＭＡＸ（Ｂｘ，ｃ），・・・，Ｂｎを算出し（ステップＳ１００８）、総和ＳＵＭｘ≦ＲＡＭ２０６のバンク数ｍであるか否かを判断する（ステップＳ１００９）。マスタＯＳが、総和ＳＵＭｘ≦ＲＡＭ２０６のバンク数ｍであると判断した場合（ステップＳ１００９：Ｙｅｓ）、選択されたＣＰＵ２０１を割当先候補として検出し（ステップＳ１０１０）、ステップＳ１００５へ移行する。
【００８０】
マスタＯＳが、総和ＳＵＭｘ≦ＲＡＭ２０６のバンク数ｍでないと判断した場合（ステップＳ１００９：Ｎｏ）、ステップＳ１０１１へ移行する。また、ステップＳ１００５において、マスタＯＳが、未選択のＣＰＵ２０１がないと判断した場合（ステップＳ１００５：Ｎｏ）、ステップＳ１０１１へ移行する。
【００８１】
そして、マスタＯＳが、検出したＣＰＵ２０１ごとに割当済のスレッドの処理時間の合計値を算出し（ステップＳ１０１１）、検出したＣＰＵ２０１の中で、算出した合計値が最小のＣＰＵ２０１に対象スレッドを割り当て（ステップＳ１０１２）、ステップＳ１００１へ戻る。図示していないが、マスタＯＳは、割当結果を割当テーブル４００に出力する。
【００８２】
実施例２によれば、使用バンク数の総和に変化が発生しにくいＣＰＵから順に選択することで、アクセス競合による性能劣化の低減を図りつつ、対象スレッドの割当先ＣＰＵの決定を高速化することができる。
【００８３】
（実施例３）
つぎに、実施例３について説明する。実施例１や実施例２では、ＣＰＵを順に選択したが、実施例３では、検出された最大値が最大となるＣＰＵ２０１のみを選択する。検出された最大値が最も大きいＣＰＵ２０１であれば、対象スレッド１１００の使用バンク数よりも大きい可能性が最も高いので並列実行時のスレッドの使用バンク数の総和に変化が生じにくい。したがって、アクセス競合による性能劣化の低減を図りつつ、対象スレッド１１００の割当先を高速に決定することができる。
【００８４】
図１１は、実施例３にかかるＣＰＵ２０１の選択例を示す説明図である。図１１では、スレッド１１０１−１〜１１０１−７がＣＰＵ２０１に割当済である。また、各スレッドのＲＡＭ２０６のバンクの使用数が図１１中のスレッドの括弧（  ）内に記述されている。まず、実施例３の特定部５０１と検出部５０２のそれぞれの処理は、実施例１で説明した処理と同一であるため、省略する。
【００８５】
つぎに、選択部５０３は、検出部５０２により検出された最大値Ｂが最も大きいＣＰＵ２０１を選択する。図１１の例では、ＣＰＵ２０１−１の最大値Ｂ１が４であり、ＣＰＵ２０１−２の最大値Ｂ２が２であり、ＣＰＵ２０１−３の最大値Ｂ３が１であり、ＣＰＵ２０１−４の最大値Ｂ４が３であるため、選択部５０３は、ＣＰＵ２０１−１を選択する。
【００８６】
図１１では、総和ＳＵＭ１が１０であるため、判断部５０４が、総和ＳＵＭ１がＲＡＭ２０６のバンク数ｍ以下であると判断する。そして、割当部５０５が、対象スレッド１１００をＣＰＵ２０１−１に割り当てる。これにより、ＲＡＭ２０６のアクセス競合による性能劣化の低減を図り、かつ割当処理を高速化することができる。
【００８７】
（実施例３にかかるマスタＯＳが行う処理手順）
図１２は、実施例３にかかるマスタＯＳが行う処理手順を示すフローチャートである。まず、マスタＯＳが、スレッドの起動指示を受け付けたか否かを判断する（ステップＳ１２０１）。マスタＯＳが、スレッドの起動指示を受け付けていないと判断した場合（ステップＳ１２０１：Ｎｏ）、ステップＳ１２０１へ戻る。
【００８８】
マスタＯＳが、スレッドの起動指示を受け付けたと判断した場合（ステップＳ１２０１：Ｙｅｓ）、特定部５０１により、ＣＰＵ２０１ごとに割当済のスレッドのバンクの使用数を特定する（ステップＳ１２０２）。そして、マスタＯＳが、特定部５０１により、起動指示を受け付けたスレッド（対象スレッド）のバンクの使用数ｃを特定し（ステップＳ１２０３）、検出部５０２により、特定したバンクの使用数から、最大値Ｂ（１〜ｎ）をＣＰＵ２０１ごとに検出する（ステップＳ１２０４）。
【００８９】
つぎに、マスタＯＳが、選択部５０３により、検出された最大値Ｂが最大であるＣＰＵ２０１（ｘ番目のＣＰＵ２０１）を選択する（ステップＳ１２０５）。マスタＯＳが、ｘ番目のＣＰＵ２０１の最大値Ｂｘと対象スレッドの使用バンク数ｃのうち、大きい値（ＭＡＸ（Ｂｘ，ｃ））を選択する（ステップＳ１２０６）。
【００９０】
マスタＯＳが、ＳＵＭｘ＝ΣＢ１，・・・，ＭＡＸ（Ｂｘ，ｃ），・・・，Ｂｎを算出し（ステップＳ１２０７）、総和ＳＵＭｘ≦ＲＡＭ２０６のバンク数ｍであるか否かを判断する（ステップＳ１２０８）。マスタＯＳが、総和ＳＵＭｘ≦ＲＡＭ２０６のバンク数ｍであると判断した場合（ステップＳ１２０８：Ｙｅｓ）、ｘ番目のＣＰＵ２０１に対象スレッドを割り当て（ステップＳ１２０９）、ステップＳ１２０１へ戻る。
【００９１】
ステップＳ１２０８において、マスタＯＳが、総和ＳＵＭｘ≦ＲＡＭ２０６のバンク数ｍでないと判断した場合（ステップＳ１２０８：Ｎｏ）、ＣＰＵ２０１ごとに割当済のスレッドの処理時間の合計値を算出する（ステップＳ１２１０）。そして、マスタＯＳが、合計値が最小となるＣＰＵ２０１に対象スレッドを割り当て（ステップＳ１２１１）、ステップＳ１２０１へ戻る。図示していないが、マスタＯＳは、割当結果を割当テーブル４００に出力する。
【００９２】
実施例３によれば、並列実行時のスレッドの使用バンク数の総和に最も変化が生じにくいＣＰＵ２０１を選択することで、アクセス競合による性能劣化の低減を図りつつ、対象スレッドの割当先ＣＰＵの決定を高速化することができる。
【００９３】
（実施例４）
つぎに、実施例４について説明する。実施例４では、どのＣＰＵ２０１を選択してもバンク数不足に陥る場合、並列実行時のスレッドの使用バンク数の総和が最小となるＣＰＵ２０１に割り当てる。これにより、アクセスの競合の発生を最小限に抑えることができる。
【００９４】
図１３は、実施例４にかかる割当例を示す説明図である。実施例４では、選択部５０３がいずれのＣＰＵ２０１を選択しても、判断部５０４が、総和ＳＵＭがＲＡＭ２０６のバンク数ｍ以下でないと判断する場合について説明する。図１３では、スレッド１３０１−１〜１３０１−７がＣＰＵ２０１に割当済である。また、各スレッドのＲＡＭ２０６のバンクの使用数が図１３中のスレッドの括弧（  ）内に記述されている。
【００９５】
図１３の左上で示すように、選択部５０３がＣＰＵ２０１−１を選択する。このとき、ＳＵＭ１（点線枠で囲われたスレッドの総バンク使用数）が１１であるため、判断部５０４は、ＳＵＭ１がＲＡＭ２０６のバンク数ｍ以下でないと判断する。
【００９６】
図１３の右上で示すように、選択部５０３がＣＰＵ２０１−２を選択する。このとき、ＳＵＭ２（点線枠で囲われたスレッドの総バンク使用数）が１２であるため、判断部５０４は、ＳＵＭ２がＲＡＭ２０６のバンク数ｍ以下でないと判断する。
【００９７】
図１３の左下で示すように、選択部５０３がＣＰＵ２０１−３を選択する。このとき、ＳＵＭ３（点線枠で囲われたスレッドの総バンク使用数）が１２であるため、判断部５０４は、ＳＵＭ３がＲＡＭ２０６のバンク数ｍ以下でないと判断する。
【００９８】
図１３の右下で示すように、選択部５０３がＣＰＵ２０１−４を選択する。このとき、ＳＵＭ４（点線枠で囲われたスレッドの総バンク使用数）が１１であるため、判断部５０４は、ＳＵＭ４がＲＡＭ２０６のバンク数ｍ以下でないと判断する。
【００９９】
割当部５０５は、判断部５０４によりいずれのＣＰＵ２０１が選択部５０３により選択されても、総和ＳＵＭがＲＡＭ２０６のバンク数ｍ以下でないと判断された場合、総和ＳＵＭが最小であるＣＰＵ２０１に対象スレッドを割り当てる。図１３では、ＣＰＵ２０１−１とＣＰＵ２０１−４の総和ＳＵＭ１，４が１１で最小の総和であるため、割当部５０５は、対象スレッド１３００をＣＰＵ２０１−１またはＣＰＵ２０１−４に割り当てる。総和ＳＵＭが最小であるＣＰＵ２０１が複数ある場合、たとえば、割当部５０５は、割当済のスレッド１３０１の処理時間の合計値が最小なスレッドに割り当ててもよい。
【０１００】
（実施例４にかかるマスタＯＳが行う処理手順）
図１４は、実施例４にかかるマスタＯＳが行う処理手順を示すフローチャートである。まず、マスタＯＳが、スレッドの起動指示を受け付けたか否かを判断する（ステップＳ１４０１）。マスタＯＳが、スレッドの起動指示を受け付けていないと判断した場合（ステップＳ１４０１：Ｎｏ）、ステップＳ１４０１へ戻る。
【０１０１】
マスタＯＳが、スレッドの起動指示を受け付けたと判断した場合（ステップＳ１４０１：Ｙｅｓ）、特定部５０１により、ＣＰＵ２０１ごとに割当済のスレッドのバンクの使用数を特定する（ステップＳ１４０２）。そして、マスタＯＳが、特定部５０１により、起動指示を受け付けたスレッド（対象スレッド）のバンクの使用数ｃを特定し（ステップＳ１４０３）、検出部５０２により、特定したバンクの使用数から、最大値Ｂ（１〜ｎ）をＣＰＵ２０１ごとに検出する（ステップＳ１４０４）。
【０１０２】
つぎに、マスタＯＳが、選択部５０３により、ｉ＝１とし（ステップＳ１４０５）、選択部５０３により、ｉ≦ＣＰＵ数であるか否かを判断する（ステップＳ１４０６）。マスタＯＳが、ｉ≦ＣＰＵ数であると判断した場合（ステップＳ１４０６：Ｙｅｓ）、ｉ番目のＣＰＵ２０１を選択する（ステップＳ１４０７）。マスタＯＳが、ｉ番目のＣＰＵ２０１の最大値Ｂｉと対象スレッドの使用バンク数ｃのうち、大きい値（ＭＡＸ（Ｂｉ，ｃ））を選択する（ステップＳ１４０８）。
【０１０３】
そして、マスタＯＳが、ＳＵＭｉ＝ΣＢ１，・・・，ＭＡＸ（Ｂｉ，ｃ），・・・，Ｂｎを算出し（ステップＳ１４０９）、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍであるか否かを判断する（ステップＳ１４１０）。マスタＯＳが、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍであると判断した場合（ステップＳ１４１０：Ｙｅｓ）、ｉ番目のＣＰＵ２０１を割当先候補として検出し（ステップＳ１４１１）、ｉ＝ｉ＋１とし（ステップＳ１４１２）、ステップＳ１４０６へ戻る。マスタＯＳが、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍでないと判断した場合（ステップＳ１４１０：Ｎｏ）、ステップＳ１４１２へ移行する。
【０１０４】
ステップＳ１４０６において、マスタＯＳが、ｉ≦ＣＰＵ数でないと判断した場合（ステップＳ１４０６：Ｎｏ）、総和ＳＵＭがバンク数以下である割当先候補を検出したか否かを判断する（ステップＳ１４１３）。
【０１０５】
マスタＯＳが、総和ＳＵＭがバンク数以下である割当先候補を検出したと判断した場合（ステップＳ１４１３：Ｙｅｓ）、検出したＣＰＵ２０１に対象スレッドを割り当て（ステップＳ１４１４）、ステップＳ１４０１へ戻る。マスタＯＳが、総和ＳＵＭがバンク数以下である割当先候補を検出していないと判断した場合（ステップＳ１４１３：Ｎｏ）、ＳＵＭが最小であるＣＰＵ２０１に対象スレッドを割り当て（ステップＳ１４１５）、ステップＳ１４０１へ戻る。図示していないが、マスタＯＳは、割当結果を割当テーブル４００に出力する。
【０１０６】
実施例４によれば、いずれのＣＰＵ２０１を割当先候補として選択してもバンク数不足に陥る場合、総和ＳＵＭが最小となるＣＰＵ２０１に対象スレッドを割り当てることで、アクセス競合の発生を可能な限り低減させることができる。アクセス競合の発生を低減させることで、ＲＡＭ２０６内のデータのスワップ回数を減少させることができ、スレッドの性能劣化の低減を図ることができる。
【０１０７】
（実施例５）
つぎに、実施例５について説明する。割当済のスレッドのバンクの使用数と対象スレッドのバンクの使用数との合計値がＲＡＭ２０６のバンク数ｍ以下であれば、どのスレッドの並列処理の組み合わせであっても、バンク数不足に陥ることがない。このため、実施例５では、実施例１〜実施例４で挙げた処理の実行に先立って、スレッドの使用バンク数に関係なくスレッドを割り当てる。したがって、上記条件を満たした場合は、実施例１〜実施例４で挙げた処理を行わないため、割当処理の高速化を図ることができる。
【０１０８】
図１５は、実施例５にかかる割当例を示す説明図である。実施例５では、対象スレッド１５００と割当済のスレッド１５０１−１〜１５０１−７とのバンクの全使用数がＲＡＭ２０６のバンクの使用数以下の場合に、対象スレッド１５００をいずれのＣＰＵ２０１に割り当ててもアクセス競合が発生しない。そこで、割当部５０５は、選択部５０３から判断部５０４の処理に先立って、対象スレッド１５００をいずれかのＣＰＵ２０１に割り当てる。また、各スレッドのＲＡＭ２０６のバンクの使用数が図１５中のスレッドの括弧（  ）内に記述されている。
【０１０９】
まず、たとえば、割当部５０５が、特定部５０１により特定された対象スレッド１５００のバンクの使用数と、各ＣＰＵ２０１に割当済のスレッドのバンクの使用数と、の合計値を算出する。つぎに、たとえば、割当部５０５が、算出した合計値がＲＡＭ２０６のバンク数ｍ以下であるか否かを判断する。図１５の例では、全使用バンク数が９である。そして、割当部５０５は、算出した合計値がＲＡＭ２０６のバンク数ｍ以下であると判断した場合、検出部５０２と判断部５０４の処理を行わずに、対象スレッド１５００をいずれかのＣＰＵ２０１に割り当てる。
【０１１０】
（実施例５にかかるマスタＯＳが行う処理手順）
図１６および図１７は、実施例５にかかるマスタＯＳが行う処理手順を示すフローチャートである。まず、マスタＯＳが、スレッドの起動指示を受け付けたか否かを判断する（ステップＳ１６０１）。マスタＯＳが、スレッドの起動指示を受け付けていないと判断した場合（ステップＳ１６０１：Ｎｏ）、ステップＳ１６０１へ戻る。
【０１１１】
マスタＯＳが、スレッドの起動指示を受け付けたと判断した場合（ステップＳ１６０１：Ｙｅｓ）、特定部５０１により、ＣＰＵ２０１ごとに割当済のスレッドのバンクの使用数を特定する（ステップＳ１６０２）。そして、マスタＯＳが、特定部５０１により、起動指示を受け付けたスレッド（対象スレッド）のバンクの使用数ｃを特定する（ステップＳ１６０３）。マスタＯＳが、割当部５０５により、全使用バンク数＝割当済のスレッドのバンクの使用数＋対象スレッドのバンクの使用数ｃを算出し（ステップＳ１６０４）、算出した全使用バンク数≦ＲＡＭ２０６のバンク数ｍであるか否かを判断する（ステップＳ１６０５）。
【０１１２】
マスタＯＳが、全使用バンク数≦ＲＡＭ２０６のバンク数ｍであると判断した場合（ステップＳ１６０５：Ｙｅｓ）、ＣＰＵ２０１ごとに割当済のスレッドの処理時間の合計値を算出する（ステップＳ１６０６）。マスタＯＳが、ＣＰＵ２０１の中で、算出した合計値が最小のＣＰＵ２０１に対象スレッドを割り当て（ステップＳ１６０７）、ステップＳ１６０１へ戻る。
【０１１３】
マスタＯＳが、全使用バンク数≦ＲＡＭ２０６のバンク数ｍでないと判断した場合（ステップＳ１６０５：Ｎｏ）、検出部５０２により、特定したバンクの使用数から、最大値Ｂ（１〜ｎ）をＣＰＵ２０１ごとに検出する（ステップＳ１６０８）。
【０１１４】
つぎに、マスタＯＳが、選択部５０３により、ｉ＝１とし（ステップＳ１６０９）、選択部５０３により、ｉ≦ＣＰＵ数であるか否かを判断する（ステップＳ１６１０）。マスタＯＳが、ｉ≦ＣＰＵ数であると判断した場合（ステップＳ１６１０：Ｙｅｓ）、ｉ番目のＣＰＵ２０１を選択する（ステップＳ１６１１）。マスタＯＳが、ｉ番目のＣＰＵ２０１の最大値Ｂｉと対象スレッドの使用バンク数ｃのうち、大きい値（ＭＡＸ（Ｂｉ，ｃ））を選択する（ステップＳ１６１２）。
【０１１５】
そして、マスタＯＳが、ＳＵＭｉ＝ΣＢ１，・・・，ＭＡＸ（Ｂｉ，ｃ），・・・，Ｂｎを算出し（ステップＳ１６１３）、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍであるか否かを判断する（ステップＳ１６１４）。マスタＯＳが、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍであると判断した場合（ステップＳ１６１４：Ｙｅｓ）、ｉ番目のＣＰＵ２０１を割当先候補として検出し（ステップＳ１６１５）、ｉ＝ｉ＋１とし（ステップＳ１６１６）、ステップＳ１６１０へ戻る。マスタＯＳが、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍでないと判断した場合（ステップＳ１６１４：Ｎｏ）、ステップＳ１６１６へ移行する。
【０１１６】
ステップＳ１６１０において、マスタＯＳが、ｉ≦ＣＰＵ数でないと判断した場合（ステップＳ１６１０：Ｎｏ）、検出したＣＰＵ２０１ごとに割当済のスレッドの処理時間の合計値を算出する（ステップＳ１６１７）。そして、マスタＯＳが、検出したＣＰＵ２０１の中で、算出した合計値が最小のＣＰＵ２０１に対象スレッドを割り当て（ステップＳ１６１８）、ステップＳ１６０１へ移行する。図示していないが、マスタＯＳは、割当結果を割当テーブル４００に出力する。
【０１１７】
実施例５によれば、どのスレッドの組み合わせで並列処理されても、バンク数不足に陥ることがないため、割当処理の高速化を図ることができる。
【０１１８】
（実施例６）
つぎに、実施例６について説明する。実行されるスレッドによっては、アクセス先となる共有資源へのアクセス頻度が異なったりする場合がある。このように性質が異なるスレッドに対して一律に割り当て処理を行うと、スレッドの性質に合致しない割り当てがなされ、バンク不足によるアクセス競合が発生する場合がある。このため、実施例６では、事前にスレッドを種類ごとに分類し、分類されたスレッド群で割り当てを行うことで、スレッドの性質に応じて、アクセス競合の発生による性能劣化の低減を図る。
【０１１９】
実施例６では、スレッドをＡ〜Ｃに分類している。Ｃに分類されたスレッドは、たとえば、図２示すＲＡＭ２０６へのアクセスに関する第１の条件に分類されたスレッドである。ここで、第１の条件とは、たとえば、ＲＡＭ２０６へのアクセス頻度が高いか否かに関する条件である。Ｂに分類されたスレッドは、たとえば、第１の条件を満たさず、図２に示す２次キャッシュ２０２へのアクセスに関する第２の条件に分類されたスレッドである。ここで、第２の条件とは、たとえば、２次キャッシュ２０２へのアクセス頻度が高いか否かである。Ａに分類されたスレッドは、たとえば、１次キャッシュ２６１へのアクセスが多いスレッドであり、第１の条件と第２の条件を満たさないスレッドである。
【０１２０】
また、Ｃに分類されたスレッドは、ＲＡＭ２０６へのアクセス頻度が高いので、２次キャッシュ２０２や１次キャッシュ２６１１へのアクセス頻度も高い。Ｂに分類されたスレッドは、ＲＡＭ２０６へのアクセス頻度は低いが、２次キャッシュ２０２へのアクセス頻度が高いので、１次キャッシュ２６１１へのアクセス頻度も高い。
【０１２１】
ここで、各スレッドのＡ〜Ｃへの分類について説明する。マルチコアプロセッサシステム２００の２次キャッシュ２０２の容量、ＲＡＭ２０６の容量、２次キャッシュ２０２のバンク数ｌ、ＲＡＭ２０６のバンク数ｍ、それぞれのバンクサイズがあらかじめわかっていることとする。マルチコアプロセッサシステム２００のモデルを用いて、各スレッドのメモリアクセス領域がシミュレーションツールによって計測されることにより、各スレッドのバンクの使用量が算出される。また、スレッドのバンクの使用量は、各スレッドの実行中に算出された値でもよい。これにより、各スレッドの設計者が、算出されたバンクの使用量に基づいてスレッドをＡ〜Ｃのいずれかに分類する。たとえば、第１の条件とは、ＲＡＭ２０６へのアクセス頻度が数百回以上であり、ＲＡＭ２０６のバンクの使用数が２以上であるが挙げられる。たとえば、第２の条件は、第１の条件を満たさないが、２次キャッシュ２０２へのアクセス頻度が数百回以上であり、２次キャッシュ２０２のバンクの使用数が２以上であるなどが挙げられる。また、スレッドのバンクの使用量と同時に各スレッドの処理時に要した処理時間が計測されてもよい。
【０１２２】
（実施例６にかかるスレッドテーブル）
図１８は、実施例６にかかるスレッドテーブルの一例を示す説明図である。スレッドテーブル１８００は、スレッドＩＤ、分類、処理時間、使用数１、使用数２のフィールドを有している。各フィールドに値が設定されることで、スレッド情報（たとえば、１８０１−１）がレコードとして記憶される。
【０１２３】
スレッドＩＤのフィールドには、スレッドの識別情報が登録される。分類のフィールドには、各スレッドがＡ〜Ｃのうちのいずれに分類されているかが登録されている。処理時間のフィールドには、各スレッドの処理時間が登録される。使用数１のフィールドには、ＲＡＭ２０６の複数のバンクのうちのスレッドが使用するバンクの使用数が登録される。使用数２のフィールドには、２次キャッシュ２０２の複数のバンクのうちのスレッドが使用するバンクの使用数が登録される。スレッドテーブル１８００については、たとえば、フラッシュＲＯＭ２０８に記憶されていることとする。
【０１２４】
図１９は、対象スレッドがＡに分類されている場合の例を示す説明図である。まず、分類判断部５０６が、対象スレッド１９００の分類を特定する。たとえば、分類判断部５０６は、スレッドテーブル１８００から、対象スレッド１９００の識別情報に基づいて対象スレッド１９００に関するスレッド情報の分類のフィールドに登録されている情報を特定する。図１９では、対象スレッド１９００は、Ａに分類されていることが示されている。
【０１２５】
割当部５０５は、分類判断部５０６により対象スレッド１９００の分類がＡであると判断された場合、特定部５０１と検出部５０２と判断部５０４との処理を行わずに、マルチコアプロセッサからいずれのスレッドも割り当てられていないＣＰＵ２０１を特定する。そして、割当部５０５は、特定したＣＰＵ２０１に対象スレッド１９００を割り当てる。
【０１２６】
たとえば、割当部５０５は、対象スレッド１９００の分類がＡである場合、各ＣＰＵ２０１の識別情報に基づいて割当テーブル４００を参照することにより、いずれのスレッドも割り当てられていないＣＰＵ２０１を特定する。そして、たとえば、割当部５０５は、特定したＣＰＵ２０１に対象スレッド１９００を割り当てる。図１９の例では、割当部５０５は、ＣＰＵ２０１−４をいずれのスレッドも割り当てられていないＣＰＵ２０１として特定し、対象スレッド１９００をＣＰＵ２０１―４に割り当てる。
【０１２７】
図１９の例では、対象スレッド１９００のアクセス頻度は低い。そのため、割当部５０５がいずれのスレッドも割り当てられていないＣＰＵ２０１−４に対象スレッド１９００を割り当てても、割当済のスレッド１９０１からＲＡＭ２０６や２次キャッシュ２０２へのアクセスに対する影響が低い。そして、対象スレッド１９００がいずれのスレッドも割り当てられていないＣＰＵ２０１−４に割り当てられることで、ＣＰＵ２０１−４では他のスレッドとの切り替え処理がない。そのため、ＣＰＵ２０１−４の１次キャッシュ２６１には対象スレッド１９００に関するデータを多く記憶させることができるため、対象スレッド１９００のキャッシュヒット率を向上させることができる。
【０１２８】
図２０は、対象スレッドがＣに分類されている場合の例を示す説明図である。分類判断部５０６が、対象スレッド２０００の分類を特定する。たとえば、分類判断部５０６は、スレッドテーブル１８００から、対象スレッド２０００の識別情報に基づいて対象スレッド２０００に関するスレッド情報の分類のフィールドに登録されている情報を特定する。
【０１２９】
特定部５０１が、分類判断部５０６により対象スレッド２０００がＣに分類されていると判断された場合、スレッドテーブル１８００から、対象スレッド２０００のＲＡＭ２０６のバンクの使用数を特定する。さらに、特定部５０１が、割当済のスレッド２００１のＲＡＭ２０６のバンクの使用数を特定する。各スレッドのＲＡＭ２０６のバンクの使用数が図２０中のスレッドの括弧（  ）内に記述されている。
【０１３０】
また、検出部５０２、選択部５０３、判断部５０４、割当部５０５の処理については、実施例１〜５で説明した処理と同一であるため、ここでは、簡易的な例を挙げて説明する。図２０では、たとえば、選択部５０３が、割当先候補としてＣＰＵ２０１−１を選択する。総和ＳＵＭ１（点線枠で囲われたスレッドのＲＡＭ２０６の総バンク使用数）が１０であり、判断部５０４は、ＳＵＭ１がＲＡＭ２０６のバンク数ｍ以下であると判断する。そして、割当部５０５は、対象スレッド２０００をＣＰＵ２０１−１に割り当てる。
【０１３１】
図２１は、対象スレッドがＢに分類されている場合の例１を示す説明図である。図２１の例１では、対象スレッド２１００の分類がＢであり、かつ割当済のスレッド２１０１の分類がすべてＢの場合について説明する。分類判断部５０６が、対象スレッド２１００の分類を特定する。たとえば、分類判断部５０６は、スレッドテーブル１８００から、対象スレッド２１００の識別情報に基づいて対象スレッド２１００に関するスレッド情報の分類のフィールドに登録されている情報を特定する。そして、分類判断部５０６は、対象スレッド２１００の分類がＢであると判断した場合、割当済のスレッド２１０１の分類を特定する。たとえば、分類判断部５０６は、スレッドテーブル１８００から、割当済のスレッド２１０１の識別情報に基づいて割当済のスレッド２１０１に関するスレッド情報の分類のフィールドに設定されている情報を特定する。
【０１３２】
特定部５０１が、分類判断部５０６により対象スレッド２１００の分類がＢであり、かつ割当済のスレッド２１０１の中に分類がＣのスレッドがないと判断された場合、対象スレッド２１００の２次キャッシュ２０２のバンクの使用数を特定する。さらに、特定部５０１が、割当済のスレッド２１０１の２次キャッシュ２０２のバンクの使用数を特定する。２次キャッシュ２０２のバンクの使用数が図２１中のスレッドの括弧（  ）内に記述されている。
【０１３３】
また、検出部５０２、選択部５０３、判断部５０４、割当部５０５の処理については、実施例１〜５で説明した処理と同一であるため、ここでは、簡易的な例を挙げて説明する。図２１では、選択部５０３が、たとえば、割当先候補としてＣＰＵ２０１−１を選択する。総和ＳＵＭ１（点線枠で囲われたスレッドの２次キャッシュ２０２の総バンク使用数）が１０であり、判断部５０４は、たとえば、ＳＵＭ１が２次キャッシュ２０２のバンク数ｌ以下であると判断する。そして、割当部５０５は、たとえば、対象スレッド２１００をＣＰＵ２０１−１に割り当てる。
【０１３４】
図２２は、対象スレッドがＢに分類されている場合の例２を示す説明図である。図２２の例２では、対象スレッド２２００の分類がＢであっても、割当済のスレッド２２０１の中に、分類がＣのスレッドがある場合について説明する。分類がＣであるスレッドと分類がＢであるスレッドが並列実行された場合に、ＲＡＭ２０６のバンク不足が発生すると、ＲＡＭ２０６は２次キャッシュ２０２より容量が大きいため、２次キャッシュ２０２のバンク不足も発生する。よって、図２２の例２では、対象スレッド２２００の分類がＢであっても、ＲＡＭ２０６のバンク不足が発生しないように対象スレッド２２００を割り当てることとする。
【０１３５】
たとえば、分類判断部５０６は、スレッドテーブル１８００から、対象スレッド２２００の識別情報に基づいて対象スレッド２２００に関するスレッド情報の分類のフィールドに登録されている情報を特定する。そして、分類判断部５０６は、対象スレッド２２００の分類がＢであると判断した場合、割当済のスレッド２２０１の分類を特定する。たとえば、分類判断部５０６は、スレッドテーブル１８００から、割当済のスレッド２２０１の識別情報に基づいて割当済のスレッド２２０１に関するスレッド情報の分類のフィールドに設定されている情報を特定する。
【０１３６】
つぎに、たとえば、特定部５０１が、対象スレッド２２００の分類がＢであっても、割当済のスレッド２２０１の中にＣに分類されているスレッドがある場合、スレッドテーブル１８００から対象スレッド２２００のＲＡＭ２０６のバンクの使用数を特定する。
【０１３７】
そして、特定部５０１が、スレッドテーブル１８００から割当済のスレッド２２０１のＲＡＭ２０６のバンクの使用数を特定する。各スレッドの２次キャッシュ２０２のバンクの使用数が図２２中のスレッドの括弧（  ）内に記述されている。
【０１３８】
また、検出部５０２、選択部５０３、判断部５０４、割当部５０５の処理については、実施例１〜５で説明した処理と同一であるため、ここでは、簡易的な例を挙げて説明する。図２２では、選択部５０３が、たとえば、割当先候補としてＣＰＵ２０１−４を選択する。総和ＳＵＭ４（点線枠で囲われたスレッドのＲＡＭ２０６の総バンク使用数）が１０であり、判断部５０４は、たとえば、ＳＵＭ４がＲＡＭ２０６のバンク数ｍ以下であると判断する。そして、割当部５０５は、たとえば、対象スレッド２２００をＣＰＵ２０１−４に割り当てる。
【０１３９】
また、図示していないが、対象スレッドの分類がＢ，Ｃの場合に、割当済のスレッドの中の分類がＡであるスレッドについては、共有資源へのアクセス頻度が低いため、特定部５０１による共有資源の使用バンク数の特定対象となるスレッドから除外してもよい。
【０１４０】
（実施例６にかかるマスタＯＳが行う処理手順）
図２３は、実施例６にかかるマスタＯＳが行う処理手順の一例を示すフローチャートである。まず、マスタＯＳが、スレッドの起動指示を受け付けたか否かを判断する（ステップＳ２３０１）。マスタＯＳが、スレッドの起動指示を受け付けていないと判断した場合（ステップＳ２３０１：Ｎｏ）、ステップＳ２３０１へ戻る。
【０１４１】
マスタＯＳが、スレッドの起動指示を受け付けたと判断した場合（ステップＳ２３０１：Ｙｅｓ）、各ＣＰＵ２０１で実行中のスレッドおよび実行待機中のスレッドと起動指示を受け付けたスレッドを割当未決定キューへ分類順に登録する（ステップＳ２３０２）。これにより、実行中のスレッドや実行待機中のスレッドであっても、マスタＯＳが再割り当てすることができる。
【０１４２】
そして、マスタＯＳが、割当未決定キューに登録された分類がＣのスレッドのＲＡＭ２０６のバンクの使用数を特定し、割当未決定キューに登録された分類がＣのスレッドをＲＡＭ２０６のバンクの使用数順にソートする（ステップＳ２３０３）。これにより、ＲＡＭ２０６のバンクの使用数が大きいスレッドの割当先ＣＰＵを先に決定することができる。
【０１４３】
そして、マスタＯＳが、割当未決定キューに登録された分類がＢのスレッドの２次キャッシュ２０２のバンクの使用数を特定し、割当未決定キューに登録された分類がＢのスレッドを２次キャッシュ２０２のバンクの使用数順にソートする（ステップＳ２３０４）。これにより、２次キャッシュ２０２のバンクの使用数が大きいスレッドの割当先ＣＰＵを先に決定することができる。
【０１４４】
そして、マスタＯＳが、割当未決定キューが空か否かを判断し（ステップＳ２３０５）、割当未決定キューが空であると判断した場合（ステップＳ２３０５：Ｙｅｓ）、ステップＳ２３０１へ戻る。マスタＯＳが、割当未決定キューが空でないと判断した場合（ステップＳ２３０５：Ｎｏ）、割当未決定キューの先頭からスレッドを取り出す（ステップＳ２３０６）。
【０１４５】
そして、マスタＯＳが、取り出されたスレッドの分類は何か判断する（ステップＳ２３０７）。マスタＯＳが、取り出されたスレッドの分類がＡであると判断した場合（ステップＳ２３０７：Ａ）、Ａの割当処理を実行し（ステップＳ２３０８）、ステップＳ２３０５へ戻る。
【０１４６】
マスタＯＳが、取り出されたスレッドの分類がＢであると判断した場合（ステップＳ２３０７：Ｂ）、割当済のスレッドのうち、分類がＣのスレッドがあるか否かを判断する（ステップＳ２３０９）。マスタＯＳが、割当済のスレッドのうち、分類がＣのスレッドがないと判断した場合（ステップＳ２３０９：Ｎｏ）、Ｂの割当処理を実行し（ステップＳ２３１０）、ステップＳ２３０５へ戻る。
【０１４７】
ステップＳ２３０７において、マスタＯＳが、取り出されたスレッドの分類がＣの場合（ステップＳ２３０７：Ｃ）、ステップＳ２３１１へ移行する。ステップＳ２３０９において、マスタＯＳが、割当済のスレッドのうち、分類がＣのスレッドがあると判断した場合（ステップＳ２３０９：Ｙｅｓ）、ステップＳ２３１１へ移行する。ステップＳ２３０７のＣの場合またはステップＳ２３０９のＹｅｓの場合のつぎに、マスタＯＳが、Ｃの割当処理を実行し（ステップＳ２３１１）、ステップＳ２３０５へ戻る。
【０１４８】
図２４は、図２３で示したＡの割当処理（ステップＳ２３０８）の詳細な説明を示すフローチャートである。まず、マスタＯＳが、いずれのスレッドも割り当てられていないＣＰＵ２０１を検出し（ステップＳ２４０１）、検出したか否かを判断する（ステップＳ２４０２）。
【０１４９】
マスタＯＳが、いずれのスレッドも割り当てられていないＣＰＵ２０１を検出したと判断した場合（ステップＳ２４０２：Ｙｅｓ）、検出したＣＰＵ２０１に取り出されたスレッドを割り当て（ステップＳ２４０３）、Ｓ２３０５へ戻る。
【０１５０】
マスタＯＳが、いずれのスレッドも割り当てられていないＣＰＵ２０１を検出していないと判断した場合（ステップＳ２４０２：Ｎｏ）、ＣＰＵ２０１ごとに割当済のスレッドの処理時間の合計値を算出する（ステップＳ２４０４）。そして、マスタＯＳが、算出した合計値が最小のＣＰＵ２０１に取り出されたスレッドを割り当て（ステップＳ２４０５）、ステップＳ２３０５へ移行する。そして、図示していないが、マスタＯＳが割当結果を割当テーブル４００に出力する。また、取り出されたスレッドが実行中または実行待機状態のスレッドであり、割当先が変更されれば、マスタＯＳはマイグレーションを行う。
【０１５１】
図２５は、図２３で示したＢの割当処理（ステップＳ２３１０）の詳細な処理手順を示すフローチャートである。マスタＯＳが、特定部５０１により、ＣＰＵ２０１ごとに割当済のスレッドの２次キャッシュ２０２のバンクの使用数を特定する（ステップＳ２５０１）。そして、マスタＯＳが、特定部５０１により、取り出されたスレッド（対象スレッド）の２次キャッシュ２０２のバンクの使用数ｃを特定し（ステップＳ２５０２）、検出部５０２により、特定したバンクの使用数から、最大値Ｂ（１〜ｎ）をＣＰＵ２０１ごとに検出する（ステップＳ２５０３）。
【０１５２】
つぎに、マスタＯＳが、選択部５０３により、ｉ＝１とし（ステップＳ２５０４）、選択部５０３により、ｉ≦ＣＰＵ数であるか否かを判断する（ステップＳ２５０５）。マスタＯＳが、ｉ≦ＣＰＵ数であると判断した場合（ステップＳ２５０５：Ｙｅｓ）、ｉ番目のＣＰＵ２０１を選択する（ステップＳ２５０６）。マスタＯＳが、ｉ番目のＣＰＵ２０１の最大値Ｂｉと対象スレッドの２次キャッシュ２０２の使用バンク数ｃのうち、大きい値（ＭＡＸ（Ｂｉ，ｃ））を選択する（ステップＳ２５０７）。
【０１５３】
そして、マスタＯＳが、ＳＵＭｉ＝ΣＢ１，・・・，ＭＡＸ（Ｂｉ，ｃ），・・・，Ｂｎを算出し（ステップＳ２５０８）、ＳＵＭｉ≦２次キャッシュ２０２のバンク数ｌであるか否かを判断する（ステップＳ２５０９）。マスタＯＳが、総和ＳＵＭｉ≦２次キャッシュ２０２のバンク数ｌであると判断した場合（ステップＳ２５０９：Ｙｅｓ）、ｉ番目のＣＰＵ２０１を割当先候補として検出し（ステップＳ２５１０）、ｉ＝ｉ＋１とし（ステップＳ２５１１）、ステップＳ２５０５へ戻る。マスタＯＳが、総和ＳＵＭｉ≦２次キャッシュ２０２のバンク数ｌでないと判断した場合（ステップＳ２５０９：Ｎｏ）、ステップＳ２５１１へ移行する。
【０１５４】
ステップＳ２５０５において、マスタＯＳが、ｉ≦ＣＰＵ数でないと判断した場合（ステップＳ２５０５：Ｎｏ）、検出したＣＰＵ２０１ごとに割当済のスレッドの処理時間の合計値を算出する（ステップＳ２５１２）。そして、マスタＯＳが、検出したＣＰＵ２０１の中で、算出した合計値が最小のＣＰＵ２０１に対象スレッドを割り当て（ステップＳ２５１３）、ステップＳ２３０５へ移行する。そして、図示していないが、マスタＯＳが割当結果を割当テーブル４００に出力する。また、対象スレッドが実行中または実行待機状態のスレッドであり、割当先が変更されれば、マスタＯＳはマイグレーションを行う。
【０１５５】
図２６は、図２３で示したＣの割当処理（ステップＳ２３１１）の詳細な処理手順を示すフローチャートである。マスタＯＳが、特定部５０１により、ＣＰＵ２０１ごとに割当済のスレッドのＲＡＭ２０６のバンクの使用数を特定する（ステップＳ２６０１）。そして、マスタＯＳが、特定部５０１により、取り出されたスレッド（対象スレッド）のＲＡＭ２０６のバンクの使用数ｃを特定し（ステップＳ２６０２）、検出部５０２により、特定したバンクの使用数から、最大値Ｂ（１〜ｎ）をＣＰＵ２０１ごとに検出する（ステップＳ２６０３）。
【０１５６】
つぎに、マスタＯＳが、選択部５０３により、ｉ＝１とし（ステップＳ２６０４）、選択部５０３により、ｉ≦ＣＰＵ数であるか否かを判断する（ステップＳ２６０５）。マスタＯＳが、ｉ≦ＣＰＵ数であると判断した場合（ステップＳ２６０５：Ｙｅｓ）、ｉ番目のＣＰＵ２０１を選択する（ステップＳ２６０６）。マスタＯＳが、ｉ番目のＣＰＵ２０１の最大値Ｂｉと対象スレッドのＲＡＭ２０６の使用バンク数ｃのうち、大きい値（ＭＡＸ（Ｂｉ，ｃ））を選択する（ステップＳ２６０７）。
【０１５７】
そして、マスタＯＳが、ＳＵＭｉ＝ΣＢ１，・・・，ＭＡＸ（Ｂｉ，ｃ），・・・，Ｂｎを算出し（ステップＳ２６０８）、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍであるか否かを判断する（ステップＳ２６０９）。マスタＯＳが、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍであると判断した場合（ステップＳ２６０９：Ｙｅｓ）、ｉ番目のＣＰＵ２０１を割当先候補として検出し（ステップＳ２６１０）、ｉ＝ｉ＋１とし（ステップＳ２６１１）、ステップＳ２６０５へ戻る。マスタＯＳが、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍでないと判断した場合（ステップＳ２６０９：Ｎｏ）、ステップＳ２６１１へ移行する。
【０１５８】
ステップＳ２６０５において、マスタＯＳが、ｉ≦ＣＰＵ数でないと判断した場合（ステップＳ２６０５：Ｎｏ）、検出したＣＰＵ２０１ごとに割当済のスレッドの処理時間の合計値を算出する（ステップＳ２６１２）。そして、マスタＯＳが、検出したＣＰＵ２０１の中で、算出した合計値が最小のＣＰＵ２０１に対象スレッドを割り当て（ステップＳ２６１３）、ステップＳ２３０５へ移行する。そして、図示していないが、マスタＯＳが割当結果を割当テーブル４００に出力する。また、対象スレッドが実行中または実行待機状態のスレッドであり、割当先が変更されれば、マスタＯＳはマイグレーションを行う。
【０１５９】
実施例６によれば、事前にスレッドを種類ごとに分類し、分類されたスレッド群で割り当てを行うことで、スレッドの性質に応じて、アクセス競合の発生による性能劣化の低減を図ることができる。
【０１６０】
（実施例７）
つぎに、実施例７について説明する。アクセス競合を重視してスレッドを割り当てると、各スレッドの割り当て状態によっては、アクセス競合を無視してスレッドを割り当てた場合よりもスレッドの処理時間が長くなってしまう場合がある。このため、実施例７では、アクセス競合が発生しないように割り当てる第１のスケジューリングと、第１のスケジューリングと異なる第２のスケジューリングと、のうち、いずれのスケジューリングが最適かを判断する。これにより、第１のスケジューリングが選択された場合は、アクセス競合による対象スレッドの性能劣化の低減を図ることができる。第２のスケジューリングが選択された場合は、同一のＣＰＵ２０１に割り当てられたスレッドによる対象スレッドの性能劣化の低減を図ることができる。
【０１６１】
ここで、実施例７では、第２のスケジューリングの一例として、負荷分散によるスケジューリングを挙げる。ｎ＝２とし、ｌ＝２とし、ｍ＝３とする。
【０１６２】
（実施例７にかかるスレッドテーブル）
図２７は、実施例７にかかるスレッドテーブルの一例を示す説明図である。スレッドテーブル２７００は、スレッドＩＤ、分類、処理時間、アクセス時間の割合、使用数１、使用数２のフィールドを有している。各フィールドに値が設定されることで、スレッド情報（たとえば、２７０１−１）がレコードとして記憶される。
【０１６３】
スレッドＩＤのフィールドには、スレッドの識別情報が登録される。分類のフィールドには、各スレッドがＡ〜Ｃのうちのいずれに分類されているかが登録されている。処理時間のフィールドには、各スレッドの処理時間が登録される。アクセス時間の割合のフィールドには、スレッドの処理時間のうち、ＲＡＭ２０６へのアクセスにかける時間の割合が登録される。アクセス時間の割合については、各スレッドの設計時にシミュレーションツールによりあらかじめ計測されていることとする。また、各スレッドのアクセス時間の割合は、各スレッドの実行時に計測されてもよい。実施例７では、アクセス時間の割合をＲＡＭ２０６と２次キャッシュ２０２とで共通の割合を用いているが、より正確にオーバーヘッドを見積もるために、２次キャッシュ２０２へのアクセスにかかる時間の割合もあらかじめ計測しておいてもよい。
【０１６４】
使用数１のフィールドには、ＲＡＭ２０６の複数のバンクのうちのスレッドが使用するバンクの使用数が登録される。使用数２のフィールドには、２次キャッシュ２０２の複数のバンクのうちのスレッドが使用するバンクの使用数が登録される。スレッドテーブル２７００については、たとえば、フラッシュＲＯＭ２０８に記憶されていることとする。
【０１６５】
（実施例７にかかる割当テーブル）
図２８は、実施例７にかかる割当テーブルの一例を示す説明図である。割当テーブル２８００は、ＣＰＵＩＤ、スレッドＩＤ、処理経過時間のフィールドを有している。各フィールドに値が設定されることで、スレッド情報（たとえば、２８０１−１）がレコードとして記憶される。
【０１６６】
ＣＰＵＩＤのフィールドには、ＣＰＵ２０１の識別情報が登録される。スレッドＩＤのフィールドには、各ＣＰＵ２０１に割り当てられたスレッドの識別情報が登録される。処理経過時間のフィールドには、実行中のスレッドの経過時間が登録される。割当テーブル２８００は、フラッシュＲＯＭ２０８に記憶されていることとする。
【０１６７】
（アクセス競合のオーバーヘッド情報）
図２９は、アクセス競合のオーバーヘッド情報の一例を示す説明図である。アクセス競合のオーバーヘッド情報２９００は、競合発生レイヤー、オーバーヘッド割合のフィールドを有している。各フィールドに値が設定されることにより、割合情報（たとえば、２９０１−１，２９０１−２）がレコードとして記憶される。
【０１６８】
競合発生レイヤーのフィールドには、２次キャッシュ２０２とＲＡＭ２０６が登録されている。オーバーヘッド割合のフィールドには、２次キャッシュ２０２でアクセスが競合した場合の処理時間の増加率ＲＬ２と、ＲＡＭ２０６でアクセスが競合した場合の処理時間の増加率ＲＭが登録されている。
【０１６９】
増加率ＲＭと増加率ＲＬ２については、各スレッドの設計時にシミュレーションツールによりあらかじめ計測されていることとする。たとえば、設計者がパターン１〜３のシミュレーションを行う。たとえば、パターン１では、スレッドの実行時に２次キャッシュ２０２およびＲＡＭ２０６でのアクセス競合を発生させない。たとえば、パターン２では、スレッドの実行時に常時２次キャッシュ２０２でアクセス競合を発生させる。たとえば、パターン３では、スレッドの実行時に常時ＲＡＭ２０６でアクセス競合を発生させる。そして、たとえば、設計者が、パターン１のシミュレーション結果とパターン２のシミュレーション結果を比較することにより、増加率ＲＬ２を決定する。たとえば、設計者が、パターン１のシミュレーション結果とパターン３のシミュレーション結果を比較することにより、増加率ＲＭを決定する。
【０１７０】
（実施例７にかかるＯＳ２２１の機能例を示すブロック図）
図３０は、実施例７にかかるＯＳ２２１の機能例を示すブロック図である。ここでは、実施例７にかかるＯＳ２２１−１の機能例を示すブロック図と、ＯＳ２２１−ｋ（ｋ＝１〜ｎ）の機能例を示すブロック図を挙げる。ＯＳ２２１−１は、第１のスケジューリング部３００１と、第２のスケジューリング部３００２と、切替部３００６と、第１の算出部３００３と、第２の算出部３００４と、比較部３００５と、を有している。ＯＳ２２１−ｋ（ｋ＝１〜ｎ）は、計測部３０２０−ｋを有している。
【０１７１】
第１のスケジューリング部３００１から比較部３００５の処理が、マスタＯＳであるＯＳ２２１−１にコーディングされている。ＣＰＵ２０１−１が、フラッシュＲＯＭ２０８に記憶されているＯＳ２２１−１を読み出し、ＯＳ２２１−１にコーディングされている処理を実行する。これにより、第１のスケジューリング部３００１から比較部３００５の機能が実現される。計測部３０２０−ｋの処理がＯＳ２２１−ｋにコーディングされており、ＣＰＵ２０１−ｋが、フラッシュＲＯＭ２０８に記憶されているＯＳ２２１−ｋを読み出し、ＯＳ２２１−ｋにコーディングされている処理を実行する。これにより、計測部３０２０−ｋの機能が実現される。以下、第１のスケジューリング部３００１から比較部３００５について図３１〜図３３を用いて詳細に説明する。
【０１７２】
図３１は、第１，２のスケジューリングによる割当例を示す説明図である。ここで、図３１では、ＣＰＵ２０１−１にスレッド３１０１が割り当てられ、ＣＰＵ２０１−２にスレッド３１０２が割り当てられている。そして、ウエイトキュー２５０にスレッド３１０３とスレッド３１０４が積まれることにより、ＯＳ２２１−１がスレッド３１０１とスレッド３１０４の起動指示を受け付ける。スレッド３１０１の分類はＢであり、スレッド３１０２の分類はＣであり、スレッド３１０３の分類はＣであり、スレッド３１０４の分類はＣである。
【０１７３】
第１のスケジューリング部３００１は、図５で示した特定部５０１〜分類判断部５０６を有していることとする。第１のスケジューリング部３００１については、実施例１〜６で説明した処理と同一であるとし詳細な説明を省略する。ここで、第１のスケジューリング部３００１による第１のスケジューリングでは、ＣＰＵ２０１−１にスレッド３１０１とスレッド３１０４が割り当てられ、ＣＰＵ２０１−２にスレッド３１０３とスレッド３１０２が割り当てられる。
【０１７４】
第２のスケジューリング部３００２は、第１のスケジューリング部３００１によるスケジューリングと異なる第２のスケジューリングを行う。ここでは、第２のスケジューリングの一例として、負荷分散によるスケジューリングを示す。たとえば、第２のスケジューリング部３００２は、起動指示を受け付けたスレッドと各ＣＰＵ２０１で実行中のスレッドおよび実行待機中のスレッドをすべて割当未決定キューに登録する。そして、第２のスケジューリング部３００２は、割当未決定キューに登録されているスレッドを処理時間または残処理時間の短い順に対象スレッドとして選択する。残処理時間とは、割当テーブル２８００に登録される処理経過時間とスレッドテーブル２７００に登録されている処理時間の差分値である。
【０１７５】
そして、たとえば、第２のスケジューリング部３００２は、算出部３０１１と割当部３０１２を有している。第２のスケジューリング部３００２の算出部３０１１は、第２のスケジューリング部３００２による割り当てにおいて、割当済のスレッドの処理時間または残処理時間の合計値をＣＰＵ２０１ごとに算出する。そして、第２のスケジューリング部３００２の割当部３０１２は算出部３０１１により算出された合計値が最小のＣＰＵ２０１に対象スレッドを割り当てる。第２のスケジューリング部３００２による第２のスケジューリングでは、ＣＰＵ２０１−１にスレッド３１０１とスレッド３１０２が割り当てられ、ＣＰＵ２０１−２にスレッド３１０４とスレッド３１０３が割り当てられる。
【０１７６】
また、たとえば、計測部３０２０−ｋ（ｋ＝１〜ｎ）は、スレッドのディスパッチが発生する都度、スレッドの実行開始時刻からのスレッドの処理経過時間を計測する。計測結果については、割当テーブル２８００の処理経過時間のフィールドに設定される。
【０１７７】
図３２は、算出の一の例を示す説明図である。第１の算出部３００３は、第１のスケジューリング部３００１による第１のスケジューリングにおいて、ＣＰＵ２０１ごとに割当済のスレッドの処理時間または残処理時間の合計値を算出する。残処理時間は、処理時間から計測部３０２０−ｋによって計測された処理経過時間を引いた値である。
【０１７８】
ここで、実行中であるスレッド３１０１とスレッド３１０２については、残処理時間と、２次キャッシュ２０２のバンクの使用数と、ＲＡＭ２０６のバンクの使用数と、の一例を挙げる。さらに、起動指示が発生したスレッド３１０３とスレッド３１０４については、処理時間と、２次キャッシュ２０２のバンクの使用数と、ＲＡＭ２０６のバンクの使用数と、の一例を挙げる。
【０１７９】
スレッド３１０１の残処理時間は１．８［ｍｓ］であり、スレッド３１０１の２次キャッシュ２０２のバンクの使用数は１であり、スレッド３１０１のＲＡＭ２０６のバンクの使用数は１である。
【０１８０】
スレッド３１０２の残処理時間は２［ｍｓ］であり、スレッド３１０２の２次キャッシュ２０２のバンクの使用数は２であり、スレッド３１０２のＲＡＭ２０６のバンクの使用数は２である。
【０１８１】
スレッド３１０３の処理時間は２［ｍｓ］であり、スレッド３１０３の２次キャッシュ２０２のバンクの使用数は２であり、スレッド３１０３のＲＡＭ２０６のバンクの使用数は２である。
【０１８２】
スレッド３１０４の処理時間は１．８［ｍｓ］であり、スレッド３１０４の２次キャッシュ２０２のバンクの使用数は２であり、スレッド３１０４のＲＡＭ２０６のバンクの使用数は１である。
【０１８３】
第１の算出部３００３は、第１のスケジューリング部３００１による第１のスケジューリングにおいて、ＣＰＵ２０１ごとに割当済のスレッドの処理時間または残処理時間の合計値を算出する。たとえば、ＣＰＵ２０１−１は、スレッド３１０１とスレッド３１０４が割り当てられているため、合計値は３．６［ｍｓ］である。ＣＰＵ２０１−２は、スレッド３１０３とスレッド３１０２が割り当てられているため、合計値は４［ｍｓ］である。そして、第１の算出部３００３は、算出した割当済のスレッドの処理時間または残処理時間の合計値のうち、最大値を第１の算出結果とする。
【０１８４】
第２の算出部３００４は、第２のスケジューリング部３００２による第２のスケジューリングにおいて、ＣＰＵ２０１ごとに割当済のスレッドの処理時間または残処理時間の合計値を算出する。たとえば、ＣＰＵ２０１−１は、スレッド３１０１とスレッド３１０２が割り当てられているため、合計値は３．８［ｍｓ］である。ＣＰＵ２０１−２は、スレッド３１０４とスレッド３１０３が割り当てられているため、合計値は３．８［ｍｓ］である。
【０１８５】
そして、たとえば、第２の算出部３００４は、ＲＡＭ２０６のアクセス競合によるオーバーヘッドと、２次キャッシュ２０２のアクセス競合によるオーバーヘッドを算出する。実施例７では、分類がＣのスレッド同士が並列実行される場合にＲＡＭ２０６のアクセス競合によるオーバーヘッドが算出される。そして、実施例７では、分類がＢのスレッド同士が並列実行される場合に２次キャッシュ２０２のアクセス競合によるオーバーヘッドが算出されることとする。
【０１８６】
たとえば、第２の算出部３００４は、並列実行されるスレッドを予測する。そして、たとえば、第２の算出部３００４は、予測された並列実行される複数のスレッドのＲＡＭ２０６のバンクの使用数の合計値がＲＡＭ２０６のバンク数ｍより大きければ、ＲＡＭ２０６での競合が発生すると判断する。どのようなスレッドの組み合わせで並列実行されるかについては、ここでは限定していないが、たとえば、割当順で決定してもよいし、ＲＡＭ２０６のバンクの使用数に応じて決定してもよい。そして、たとえば、第２の算出部３００４は、下記式（２）に基づいてオーバーヘッドＯｃｘを算出する。
【０１８７】
Ｏｃｘ（ｘ＝１〜ｎ）＝Σ（ＳＢｐｘ×Ａｐｘ×ＲＬ２）＋Σ（ＳＣｐｘ×Ａｐｘ×ＲＭ）・・・（２）
【０１８８】
Σ（ＳＢｐｘ×Ａｐｘ×ＲＬ２）は、２次キャッシュ２０２で競合すると判断された場合の２次キャッシュ２０２での競合によるオーバーヘッドの合計値である。ＳＢｐｘはＣＰＵ２０１−ｘに割り当てられ、並列処理によって２次キャッシュ２０２でアクセス競合が発生すると予測されたスレッドＢｐの処理時間（実行中のスレッドＢｐであれば残処理時間）である。Ａｐｘは、ＣＰＵ２０１−ｘで実行中のスレッドＢｐのアクセス時間の割合である。アクセス時間の割合は、スレッドテーブル２７００に登録されている。増加率ＲＬ２はアクセス競合のオーバーヘッド情報２９００に登録されている。
【０１８９】
Σ（ＳＣｐｘ×Ａｐｘ×ＲＭ）は、ＲＡＭ２０６で競合すると判断された場合のＲＡＭ２０６での競合によるオーバーヘッドの合計値である。ＳＣｐｘはＣＰＵ２０１−ｘに割り当てられ、並列処理によってＲＡＭ２０６でアクセス競合が発生すると予測されたスレッドＣｐの処理時間（実行中のスレッドＢｐであれば残処理時間）である。Ａｐｘは、ＣＰＵ２０１−ｘで実行中のスレッドＣｐのアクセス時間の割合である。アクセス時間の割合は、スレッドテーブル２７００に登録されている。増加率ＲＭはアクセス競合のオーバーヘッド情報２９００に登録されている。
【０１９０】
図３１の例では、スレッド３１０２とスレッド３１０３とのＲＡＭ２０６の総バンク使用数が４であり、ＲＡＭ２０６のバンク数ｍが３である。よって、第２の算出部３００４は、スレッド３１０２とスレッド３１０３とはＲＡＭ２０６へのアクセスが競合すると判断し、ＣＰＵ２０１ごとにアクセス競合によるオーバーヘッドを算出する。第２の算出部３００４は、式（２）に基づいて各ＣＰＵ２０１でのＲＡＭ２０６のアクセス競合によるオーバーヘッドを算出する。
【０１９１】
増加率ＲＭが０．３であり、スレッド３１０２のアクセス時間の割合Ａｐが０．７であり、スレッド３１０３のアクセス時間の割合Ａｐが０．７である。したがって、Ｏｃ１＝２［ｍｓ］×０．７×０．３＝０．４２となり、Ｏｃ２＝２［ｍｓ］×０．７×０．３＝０．４２となる。
【０１９２】
たとえば、第２の算出部３００４は、ＣＰＵ２０１−１の処理時間の合計値（３．８［ｍｓ］）にオーバーヘッドＯｃ１（０．４２［ｍｓ］）が加算され、ＣＰＵ２０１−２の処理時間の合計値（３．８［ｍｓ］）にオーバーヘッドＯｃ２（０．４２［ｍｓ］）が加算される。ＣＰＵ２０１−１の加算結果は４．２２［ｍｓ］であり、ＣＰＵ２０１−２の加算結果は４．２２［ｍｓ］である。
【０１９３】
第１の算出部３００３は、ＣＰＵ２０１ごとに算出された算出結果うちの最大値を第１の算出結果とし、第２の算出部３００４は、ＣＰＵ２０１ごとに算出された算出結果のうちの最大値を第２の算出結果とする。比較部３００５は、第１の算出結果と第２の算出結果との関係が所定条件を満たすか否かを判断する。たとえば、比較部３００５は、第１の算出結果が第２の算出結果未満であるか否かを判断する。
【０１９４】
切替部３００６は、比較部３００５による比較結果に応じて、第１のスケジューリングと第２のスケジューリングとを切り替える。たとえば、切替部３００６は、第１の算出結果が第２の算出結果未満であれば、第１のスケジューリング部３００１による第１のスケジューリングを行うように制御する。また、たとえば、切替部３００６は、第１の算出結果が第２の算出結果未満でなければ、第２のスケジューリング部３００２による第２のスケジューリングを行うように制御する。図３２の例では、第１の算出結果が４［ｍｓ］であり、第２の算出結果が４．２２［ｍｓ］であるため、切替部３００６は、第１のスケジューリング部３００１により第１のスケジューリングを行うように制御する。
【０１９５】
また、ここでは、第２の算出部３００４は、分類がＣの組み合わせでＲＡＭ２０６へのアクセスが競合すると判断された場合、２次キャッシュ２０２のアクセス競合のオーバーヘッドを算出しない。２次キャッシュ２０２のアクセス競合によるオーバーヘッドは、ＲＡＭ２０６のアクセス競合によるオーバーヘッドよりも小さいので、ここでは、割当処理の高速化のために算出しないこととしている。また、たとえば、第２の算出部３００４が、分類がＣの組み合わせでＲＡＭ２０６へのアクセスが競合すると判断されても、２次キャッシュ２０２のアクセス競合によるオーバーヘッドを算出することにより、より精度の高い処理時間を算出できる。
【０１９６】
図３３は、算出の他の例を示す説明図である。図３３では、増加率ＲＭが０．０５の場合を例に挙げて説明する。第１の算出部３００３による算出処理と、第２の算出部３００４による算出処理については、図３２で説明した処理と同一であるため、詳細な説明を省略する。
【０１９７】
増加率ＲＭが０．０５であり、スレッド３１０２のアクセス時間の割合Ａｐが０．７であり、スレッド３１０３のアクセス時間の割合Ａｐが０．７である。これにより、Ｏｃ１＝２［ｍｓ］×０．７×０．０５＝０．０７となり、Ｏｃ２＝２［ｍｓ］×０．７×０．０５＝０．０７となる。
【０１９８】
たとえば、第２の算出部３００４は、ＣＰＵ２０１−１の処理時間の合計値にオーバーヘッドＯｃ１を加算し、ＣＰＵ２０１−２の処理時間の合計値にオーバーヘッドＯｃ２を加算する。ＣＰＵ２０１−１の加算結果は３．８７［ｍｓ］であり、ＣＰＵ２０１−２の加算結果は３．８７［ｍｓ］である。
【０１９９】
図３３の例では、第１の算出結果が４［ｍｓ］であり、第２の算出結果が３．８７［ｍｓ］であり、第１の算出結果が第２の算出結果以上であるため、切替部３００６は、第２のスケジューリング部３００２により第２のスケジューリングを行うように制御する。
【０２００】
増加率ＲＭや増加率Ｒ２Ｌが大きいほど、アクセス競合によるオーバーヘッドの影響が大きくなる。さらに、スレッドの並列処理の組み合わせによってアクセス競合が発生するほど、オーバーヘッドが増加する。
【０２０１】
（実施例７にかかるマスタＯＳが行う処理手順）
図３４は、実施例７にかかるマスタＯＳが行う処理手順の一例を示すフローチャートである。まず、マスタＯＳが、スレッドの起動指示を受け付けたか否かを判断する（ステップＳ３４０１）。マスタＯＳが、スレッドの起動指示を受け付けていないと判断した場合（ステップＳ３４０１：Ｎｏ）、ステップＳ３４０１へ戻る。
【０２０２】
マスタＯＳが、スレッドの起動指示を受け付けたと判断した場合（ステップＳ３４０１：Ｙｅｓ）、第２のスケジューリング部３００２により、第２のスケジューリング処理を実行する（ステップＳ３４０２）。第２のスケジューリング処理を実行するが、ここでは、マスタＯＳが第２のスケジューリング処理による割当結果を反映させていない。そして、マスタＯＳが、第２の算出部３００４により、第２のスケジューリング処理で割り当てた場合における、ＣＰＵ２０１ごとに割当済のスレッドの処理時間の合計値を算出する（ステップＳ３４０３）。そして、マスタＯＳが、第２の算出部３００４により、ＣＰＵ２０１ごとにオーバーヘッドＯｃを算出する（ステップＳ３４０４）。そして、マスタＯＳが、第２の算出部３００４により、ＣＰＵ２０１ごとに算出した合計値にオーバーヘッドＯｃを加算（加算結果がＴＬｘ）する（ステップＳ３４０５）。
【０２０３】
つぎに、マスタＯＳが、第１のスケジューリング部３００１により、第１のスケジューリング処理を実行する（ステップＳ３４０６）。第１のスケジューリング処理については、実施例１〜６で説明した例と同一であるため、ここでは、詳細な説明を省略する。また、第１のスケジューリング処理を実行するが、ここでは、マスタＯＳが第１のスケジューリング処理による割当結果を反映させていない。そして、マスタＯＳが、第１の算出部３００３により、第１のスケジューリング処理で割り当てた場合における、ＣＰＵ２０１ごとに割当済のスレッドの処理時間の合計値を算出（算出結果がＴｃｘ）する（ステップＳ３４０７）。
【０２０４】
つぎに、マスタＯＳが、比較部３００５により、ＭＡＸ（ＴＬｘ）≦ＭＡＸ（Ｔｃｘ）であるか否かを判断する（ステップＳ３４０８）。ＭＡＸ（Ｔｃｘ）は、ＣＰＵ２０１ごとに算出された合計値の（ＴＬｘ）の中の最大値である。ＭＡＸ（ＴＬｘ）は、ＣＰＵ２０１ごとに算出された合計値（Ｔｃｘ）の中の最大値である。
【０２０５】
ここでは、ＭＡＸ（ＴＬｘ）とＭＡＸ（Ｔｃｘ）が同一値の場合、第２のスケジューリング処理を行うようにしているが、第１のスケジューリング処理を行うようにしてもよい。また、第１のスケジューリング処理で実行中のスレッドや実行待機状態のスレッドの再割り当てを行い、第２のスケジューリング処理で再割り当てを行わない場合には、ＭＡＸ（ＴＬｘ）とＭＡＸ（Ｔｃｘ）が同一値であれば第２のスケジューリング処理を行う。第２のスケジューリングで再割り当てが行われなければ、マスタＯＳが再割り当てによる割当テーブル４００の書き換えを行う時間を短縮することができる。たとえば、第１のスケジューリング処理で実行中のスレッドや実行待機状態のスレッドの再割り当てを行わず、第２のスケジューリング処理で再割り当てを行う場合には、ＭＡＸ（ＴＬｘ）とＭＡＸ（Ｔｃｘ）が同一値であれば第１のスケジューリング処理を行うこととする。
【０２０６】
そして、マスタＯＳが、ＭＡＸ（ＴＬｘ）≦ＭＡＸ（Ｔｃｘ）であると判断した場合（ステップＳ３４０８：Ｙｅｓ）、切替部３００６により、第２のスケジューリング処理による割り当て結果に基づき、割り当て（ステップＳ３４０９）、一連の処理を終了する。第２のスケジューリング処理による割り当てでは、起動指示を受け付けたスレッドの割り当てだけでなく、実行中のスレッドが再割り当てされるため、実行中のスレッドを移行させる処理も発生する。また、マスタＯＳが、割当結果に沿って、割当テーブル２８００を更新する。
【０２０７】
また、マスタＯＳが、ＭＡＸ（ＴＬｘ）≦ＭＡＸ（Ｔｃｘ）でないと判断した場合（ステップＳ３４０８：Ｎｏ）、切替部３００６により、第１のスケジューリング処理による割り当て結果に基づき、割り当て（ステップＳ３４１０）、一連の処理を終了する。第１のスケジューリング処理による割り当てでは、起動指示を受け付けたスレッドの割り当てだけでなく、実行中のスレッドが再割り当てされるため、実行中のスレッドを移行させる処理も発生する。また、マスタＯＳが、割当結果に沿って、割当テーブル２８００を更新する。
【０２０８】
図３５は、図３４で示した第２のスケジューリング処理（ステップＳ３４０２）の詳細な説明を示すフローチャートである。マスタＯＳが、実行中、およびウエイトキュー２５０に存在するスレッドを割当未決定キューに入れる（ステップＳ３５０１）、割当未決定キューが空か否かを判断する（ステップＳ３５０２）。これにより、実行中のスレッドや実行待機中のスレッドであっても、マスタＯＳが再割り当てすることができる。マスタＯＳが、割当未決定キューが空であると判断した場合（ステップＳ３５０２：Ｙｅｓ）、ステップＳ３４０３へ戻る。
【０２０９】
マスタＯＳが、割当未決定キューが空でないと判断した場合（ステップＳ３５０２：Ｎｏ）、割当未決定キューからスレッドを取り出す（ステップＳ３５０３）。マスタＯＳが、ＣＰＵ２０１ごとに割り当て決定済のスレッドの処理時間の合計値を算出する（ステップＳ３５０４）、処理時間の合計値が最も小さいＣＰＵ２０１を取り出されたスレッドの割当先ＣＰＵに決定し（ステップＳ３５０５）、ステップＳ３５０１へ戻る。
【０２１０】
実施例７によれば、アクセス競合が発生しないように割り当てる第１のスケジューリングと、第１のスケジューリングと異なる第２のスケジューリングとの、それぞれのスケジューリングにおける処理時間を見積もり、最適なスケジューリングに切り替える。これにより、たとえアクセス競合が発生したとしても、処理時間が短い最適なスケジューリングを行うことができ、スレッドの性能劣化を低減させることができる。
【０２１１】
（マルチコアプロセッサシステム２００の適用例）
図３６は、マルチコアプロセッサシステム２００の適用例を示す図である。図３６において、ネットワークＮＷは、サーバ３６０１，３６０２とクライアント３６３１〜３６３４とが通信可能なネットワークＮＷであり、たとえば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネット、携帯電話網などで構成される。
【０２１２】
サーバ３６０２は、クラウド３６２０を構成するサーバ群（サーバ３６２１〜３６２５）の管理サーバである。クライアント３６３１〜３６３４のうち、クライアント３６３１はノート型パソコン、クライアント３６３２はデスクトップ型パソコン、クライアント３６３３は携帯電話機（スマートフォン、ＰＨＳ（Ｐｅｒｓｏｎａｌ  Ｈａｎｄｙｐｈｏｎｅ  Ｓｙｓｔｅｍ）でもよい）、クライアント３６３４はタブレット型端末である。図３６のサーバ３６０１，３６０２，３６２１〜３６２５、クライアント３６３１〜３６３４は、たとえば、図１に示したコンピュータにより実現される。
【０２１３】
また、本実施の形態は、図１に示した各ＣＰＵ２０１、および共有資源がそれぞれ異なるコンピュータ（たとえば図３６の携帯電話機やサーバ）に搭載され、複数のコンピュータがネットワークＮＷを介して分散型の並列処理を行う構成に適用することもできる。
【０２１４】
以上説明したように、本割当方法、およびマルチコアプロセッサシステムによれば、マルチコアプロセッサで並列実行時のスレッドの使用バンク数の総和が共有資源のバンク数を超えないようなＣＰＵに対象スレッドを割り当てる。これにより、本割当方法、およびマルチコアプロセッサシステムによれば、共有資源へのアクセス競合によるスレッドの性能劣化の低減を図ることができる。
【０２１５】
また、マルチコアプロセッサシステムの特定のＣＰＵが、ＣＰＵを順に選択し、各スレッドが選択されたＣＰＵに割り当てられた場合にマルチコアで並列実行されても合計の使用バンク数が共有資源のバンク数を超えないように対象スレッドを割り当てる。これにより、特定のＣＰＵが、共有資源へのアクセス競合によるスレッドの性能劣化の低減を図ることができる。
【０２１６】
また、特定のＣＰＵが、総和が共有資源のバンク数以下となる割当先候補の数が複数ある場合、割当済のスレッドの処理時間が最小なＣＰＵに対象スレッドを割り当てる。これにより、特定のＣＰＵが、共有資源へのアクセス競合によるスレッドの性能劣化の低減を図りつつ、各ＣＰＵの負荷を分散させることができる。
【０２１７】
また、特定のＣＰＵが、マルチコアプロセッサから、検出された最大値が大きい順にＣＰＵを割当先候補として選択する。そして、特定のＣＰＵが、複数のＣＰＵから、検出された最大値が大きい順にＣＰＵを割当先候補として選択する。特定のＣＰＵが、最大値を大きい順に選択すると、選択されたＣＰＵの最大値が対象スレッドの使用バンク数よりも大きい可能性が高く、無作為にＣＰＵを選択するよりも、並列実行時のスレッドの使用バンク数の総和に変化が生じにくい。したがって、特定のＣＰＵが、アクセス競合による性能劣化の低減を図りつつ、対象スレッドの割当先を高速に決定することができる。
【０２１８】
また、特定のＣＰＵが、検出された最大値が最大となるＣＰＵのみを割当先候補として選択する。検出された最大値が最も大きいＣＰＵであれば、対象スレッドの使用バンク数よりも大きい可能性が最も高いので並列実行時のスレッドの使用バンク数の総和に変化が生じにくい。したがって、特定のＣＰＵが、アクセス競合による性能劣化の低減を図りつつ、対象スレッドの割当先を高速に決定することができる。
【０２１９】
また、特定のＣＰＵが、いずれのＣＰＵに対象スレッドを割り当てたとしても、バンク数不足に陥る場合、並列実行時のスレッドの使用バンク数の総和が最小となるＣＰＵに割り当てる。これにより、特定のＣＰＵが、アクセス競合の発生を最小限に抑えることができる。
【０２２０】
また、割当済のスレッドの特定されたバンクの使用数と対象スレッドの特定されたバンクの使用数との合計値が共有資源のバンク数以下であれば、どのスレッドの並列処理の組み合わせであっても、バンク数不足に陥ることがない。そこで、特定のＣＰＵが、いずれかのＣＰＵに対象スレッドを直ちに割り当てることで、割当処理の高速化を図ることができる。
【０２２１】
また、対象スレッドと割当済のスレッドがスレッド群の中の特定のスレッドである。頻繁に共有資源へアクセスするか否かによってスレッドがあらかじめ分類されることにより、特定のＣＰＵが、共有資源へのアクセス頻度が少ないスレッドを除外して割り当てを決定することができる。
【０２２２】
また、対象スレッドがスレッド群の中の特定のスレッドでない場合、特定のＣＰＵが、いずれのスレッドも割り当てられていないＣＰＵに対象スレッドを割り当てる。特定のスレッドでないスレッドとは、共有資源へのアクセスが頻繁に発生しないスレッドであることを示す。実施例６では分類がＡのスレッドである。分類がＡのスレッドは１次キャッシュへ頻繁にアクセスする。そこで、他のスレッドと対象スレッドを同一ＣＰＵに割り当てないようにすることで、複数のスレッドのデータが１次キャッシュ内で混在してしまうのを避けることができる。これにより、１次キャッシュ内のデータのスワップ数を減らすことができ、スレッドの性能劣化の低減を図ることができる。
【０２２３】
また、第１の共有資源の第１の条件と、第１の共有資源よりもアクセス速度の速い第２の共有資源の第２の条件とにスレッドがあらかじめ分類されていることとする。第１の条件で分類される第１のスレッドと第２の条件で分類される第２のスレッドと、が並列処理されると、第１のスレッドの影響で第２のスレッドのアクセスミスが増加する恐れがある。そこで、第１のスレッドがいずれかのＣＰＵに割り当てられていたら、特定のＣＰＵが、第２の条件に分類される対象スレッドの割当先を第１の共有資源の使用バンク数に応じて決定する。これにより、特定のＣＰＵが、第１の共有資源でのアクセス競合によるスレッドの性能劣化の低減を図ることができる。
【０２２４】
また、第１のスレッドがいずれのＣＰＵにも割り当てられていなければ、特定のＣＰＵが、第２の条件に分類される対象スレッドの割当先を第２の共有資源の使用バンク数に応じて決定する。これにより、特定のＣＰＵが、第２の共有資源でのアクセス競合によるスレッドの性能劣化の低減を図ることができる。
【０２２５】
また、対象スレッドが第１の条件に分類されるスレッドの場合、いずれに分類されるスレッドがＣＰＵに割り当てられていても、特定のＣＰＵが、対象スレッドの割当先を第１の共有資源の使用バンク数に応じて決定する。これにより、特定のＣＰＵが、第２の共有資源でのアクセス競合によるスレッドの性能劣化の低減を図ることができる。
【０２２６】
また、アクセス競合を重視してスレッドが割り当てられると、各スレッドの割り当て状態によっては、アクセス競合を無視してスレッドが割り当てられた場合よりもスレッドの処理時間が長くなってしまう場合がある。そこで、特定のＣＰＵが、アクセス競合が発生しないように割り当てる第１のスケジューリングと、第１のスケジューリングと異なる第２のスケジューリングと、のうち、いずれのスケジューリングで割り当てるかを動的に切り替える。これにより、第１のスケジューリングが選択された場合は、アクセス競合による対象スレッドの性能劣化の低減を図ることができる。第２のスケジューリングが選択された場合は、同一のＣＰＵ２０１に割り当てられたスレッドの性能による対象スレッドの性能劣化の低減を図ることができる。
【０２２７】
また、特定のＣＰＵが、第２のスケジューリングにおける処理時間にアクセス競合により発生する負荷時間を加算する。これにより、特定のＣＰＵが、アクセス競合による性能劣化の影響を含めてスケジューリングを決定することができる。
【０２２８】
また、特定のＣＰＵが、負荷時間を割当済のスレッドの処理時間と共有資源の競合による負荷の割合に応じて算出する。これにより、特定のＣＰＵが、アクセス競合による影響をより正確に再現させることができる。
【０２２９】
また、特定のＣＰＵが、第１のスケジューリングによる処理時間の算出結果と、第２のスケジューリングによる処理時間の算出結果と、の関係が所定条件を満たすか否かを判断し、判断結果に応じて、いずれのスケジューリングを行うかが決定する。これにより、マルチコアプロセッサシステムの設計者が第２のスケジューリングのスケジューリング方法に応じて所定条件を定めることができる。
【０２３０】
なお、本実施の形態で説明した割当方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本割当プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本割当プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０２３１】
２００  マルチコアプロセッサシステム
２０１−１〜２０１−ｎ  ＣＰＵ
２０２  ２次キャッシュ
２０６  ＲＡＭ
２３１−１〜２３１−ｌ  バンク
２４１−１〜２４１−ｍ  バンク
５０１  特定部
５０２  検出部
５０３  選択部
５０４  判断部
５０５  割当部
５０６  分類判断部
【図１】
2013018184.tif 000003
【図２】
2013018184.tif 000004
【図３】
2013018184.tif 000005
【図４】
2013018184.tif 000006
【図５】
2013018184.tif 000007
【図６】
2013018184.tif 000008
【図７】
2013018184.tif 000009
【図８】
2013018184.tif 000010
【図９】
2013018184.tif 000011
【図１０】
2013018184.tif 000012
【図１１】
2013018184.tif 000013
【図１２】
2013018184.tif 000014
【図１３】
2013018184.tif 000015
【図１４】
2013018184.tif 000016
【図１５】
2013018184.tif 000017
【図１６】
2013018184.tif 000018
【図１７】
2013018184.tif 000019
【図１８】
2013018184.tif 000020
【図１９】
2013018184.tif 000021
【図２０】
2013018184.tif 000022
【図２１】
2013018184.tif 000023
【図２２】
2013018184.tif 000024
【図２３】
2013018184.tif 000025
【図２４】
2013018184.tif 000026
【図２５】
2013018184.tif 000027
【図２６】
2013018184.tif 000028
【図２７】
2013018184.tif 000029
【図２８】
2013018184.tif 000030
【図２９】
2013018184.tif 000031
【図３０】
2013018184.tif 000032
【図３１】
2013018184.tif 000033
【図３２】
2013018184.tif 000034
【図３３】
2013018184.tif 000035
【図３４】
2013018184.tif 000036
【図３５】
2013018184.tif 000037
【図３６】
2013018184.tif 000038
【手続補正書】
【提出日】平成26年1月29日(2014.1.29)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
マルチコアプロセッサのうちの特定のコアが、
前記マルチコアプロセッサで共有する共有資源が有する記憶領域の使用数をスレッド群のスレッドごとに記憶する記憶装置から、対象スレッドの記憶領域の使用数と、前記マルチコアプロセッサのコアごとに割当済のスレッドの記憶領域の使用数と、を特定する特定処理と、
前記割当済のスレッドの特定された記憶領域の使用数から前記コアごとに最大値を検出する検出処理と、
前記マルチコアプロセッサのうちの割当先候補に選択されたコアの検出された最大値と前記対象スレッドの特定された記憶領域の使用数とのうちの大きい方の値と、前記選択されたコア以外のコアの検出された最大値との総和が、前記共有資源内の記憶領域数以下であるか否かを判断する判断処理と、
前記総和が前記記憶領域数以下であると判断された場合、前記対象スレッドを前記選択されたコアに割り当てる割当処理と、
を実行することを特徴とする割当方法。
【請求項２】
前記検出処理による検出後、前記マルチコアプロセッサから、順にコアを割当先候補として選択する選択処理を実行し、
前記判断処理は、
前記選択処理によりコアが選択される都度、選択されたコアの検出された最大値と前記対象スレッドの前記記憶領域の使用数とのうちの大きい方の値と、前記選択されたコア以外のコアの検出された最大値との総和が、前記記憶領域数以下であるか否かを判断し、
前記割当処理は、
前記判断処理により前記総和が前記記憶領域数以下であると判断されたコアに前記対象スレッドを割り当てることを特徴とする請求項１に記載の割当方法。
【請求項３】
前記割当処理は、
前記総和が前記記憶領域数以下であると判断された割当先候補の数が複数ある場合、前記割当済のスレッドの処理時間が最小なコアに前記対象スレッドを割り当てることを特徴とする請求項２に記載の割当方法。
【請求項４】
前記選択処理は、
前記マルチコアプロセッサから、前記検出処理によって検出された最大値が大きい順にコアを割当先候補として選択することを特徴とする請求項２に記載の割当方法。
【請求項５】
前記選択されたコアが、前記マルチコアプロセッサのうちの前記検出された最大値が最大となるコアであることを特徴とする請求項１に記載の割当方法。
【請求項６】
前記割当処理は、
前記選択されたコアがいずれのコアであっても前記総和が前記記憶領域数以下でない場合、前記総和が最小となるコアに割り当てることを特徴とする請求項１または２に記載の割当方法。
【請求項７】
前記割当処理は、
前記特定処理による特定後、前記割当済のスレッドの特定された記憶領域の使用数と前記対象スレッドの前記記憶領域の使用数との合計値が前記記憶領域数以下であれば、前記検出処理と前記判断処理を実行せずに、前記マルチコアプロセッサのうちのいずれかのコアに割り当てることを特徴とする請求項１に記載の割当方法。
【請求項８】
前記対象スレッドと前記割当済のスレッドが前記スレッド群の中の特定のスレッドであることを特徴とする請求項１〜７のいずれか一つに記載の割当方法。
【請求項９】
第１の共有資源の記憶領域の使用数と、前記第１の共有資源よりもアクセス速度が速い第２の共有資源の記憶領域の使用数と、が前記スレッド群のスレッドごとに前記記憶装置に記憶されており、
前記特定処理が、
前記対象スレッドが、前記スレッド群の中の前記第１の共有資源へのアクセスに関する第１の条件に分類されたスレッドである場合、前記記憶装置から、前記対象スレッドの前記第１の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第１の共有資源の記憶領域の使用数を特定することを特徴とする請求項１〜７のいずれか一つに記載の割当方法。
【請求項１０】
第１の共有資源の記憶領域の使用数と、前記第１の共有資源よりもアクセス速度が速い第２の共有資源の記憶領域の使用数と、が前記スレッド群のスレッドごとに前記記憶装置に記憶されており、
前記特定処理が、
前記対象スレッドが、前記スレッド群の中の前記第２の共有資源へのアクセスに関する第２の条件に分類されたスレッドであり、かつ前記割当済のスレッドの中に、前記第１の共有資源へのアクセスに関する第１の条件に分類されたスレッドがない場合、前記記憶装置から、前記対象スレッドの前記第２の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第２の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第２の共有資源の記憶領域の使用数を特定することを特徴とする請求項１〜７のいずれか一つに記載の割当方法。
【請求項１１】
第１の共有資源の記憶領域の使用数と、前記第１の共有資源よりもアクセス速度が速い第２の共有資源の記憶領域の使用数と、が前記スレッド群のスレッドごとに前記記憶装置に記憶されており、
前記特定処理が、
前記対象スレッドが前記スレッド群の中の前記第２の共有資源へのアクセスに関する第２の条件に分類されたスレッドであっても、前記割当済のスレッドの中に、前記第１の共有資源へのアクセスに関する第１の条件に分類されたスレッドがある場合、前記記憶装置から、前記対象スレッドの前記第１の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第１の共有資源の記憶領域の使用数を特定することを特徴とする請求項１〜７のいずれか一つに記載の割当方法。
【請求項１２】
前記割当処理による第１のスケジューリングで割り当てた場合における、前記コアごとに前記割当済のスレッドの処理時間の合計値を算出する第１の算出処理と、
前記第１のスケジューリングと異なる第２のスケジューリングで割り当てた場合における、前記割当済のスレッドの処理時間の合計値を前記コアごとに算出する第２の算出処理と、
前記第１の算出処理による算出結果と、前記第２の算出処理による算出結果とを比較する比較処理と、
前記比較処理による比較結果に応じて、前記第１のスケジューリングと前記第２のスケジューリングとを切り替える切替処理と、を実行することを特徴とする請求項１〜１１のいずれか一つに記載の割当方法。
【請求項１３】
前記第２の算出処理は、
さらに、前記割当済のスレッドの処理時間の合計値に前記共有資源の競合による負荷時間が加算されることを特徴とする請求項１２に記載の割当方法。
【請求項１４】
前記負荷時間が、前記割当済のスレッドの処理時間と前記共有資源の競合による負荷の割合に応じて算出されることを特徴とする請求項１３に記載の割当方法。
【請求項１５】
前記比較処理は、
前記第１の算出処理による算出結果と、前記第２の算出処理による算出結果との関係が所定条件を満たすか否かを判断し、
前記切替処理は、
前記比較処理による比較結果が前記所定条件を満たす場合、前記第１のスケジューリングを実行し、前記比較処理による比較結果が前記所定条件を満たさない場合、前記第２のスケジューリングを実行することを特徴とする請求項１２〜１４のいずれか一つに記載の割当方法。
【請求項１６】
マルチコアプロセッサと、
前記マルチコアプロセッサで共有する共有資源が有する記憶領域の使用数をスレッド群のスレッドごとに記憶する記憶装置と、を備え、
前記マルチコアプロセッサのうちの特定のコアが、
前記記憶装置から、対象スレッドの記憶領域の使用数と、前記マルチコアプロセッサのコアごとに割当済のスレッドの記憶領域の使用数と、を特定する特定手段と、
前記割当済のスレッドの特定された記憶領域の使用数から前記コアごとに最大値を検出する検出手段と、
前記マルチコアプロセッサのうちの割当先候補に選択されたコアの検出された最大値と前記対象スレッドの特定された記憶領域の使用数とのうちの大きい方の値と、前記選択されたコア以外のコアの検出された最大値との総和が、前記共有資源内の記憶領域数以下であるか否かを判断する判断手段と、
前記総和が前記記憶領域数以下であると判断された場合、前記対象スレッドを前記選択されたコアに割り当てる割当手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スレッドを割り当てる割当方法、およびマルチコアプロセッサシステムに関する。
【背景技術】
【０００２】
従来、マルチコアプロセッサシステムにおいて、キャッシュヒット率を測定し、各スレッドのキャッシュヒット率が高くなるようにスレッドをスケジューリングする技術が知られている（たとえば、下記特許文献１〜３を参照。）。
【０００３】
また、スレッドごとにキャッシュの優先度を設け、キャッシュの優先度に応じて同一のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に割り当てられるスレッドのキャッシュの使用量を決定する技術が知られている（たとえば、下記特許文献４を参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−２８５４３０号公報
【特許文献２】特表２００８−５４２９２５号公報
【特許文献３】特開平４−３３８８３７号公報
【特許文献４】特開平９−１０１９１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、たとえば、キャッシュのヒット率が低いスレッドが複数のＣＰＵで同時に実行された場合、複数のＣＰＵから共有メモリへのアクセスが競合し、共有メモリへのアクセスの待ち時間が発生する問題点がある。これにより、各スレッドの実行が進まなくなってしまい、スレッドの実行性能が低下する問題点がある。
【０００６】
本発明は、上述した従来技術による問題点を解消するため、共有メモリへのアクセス競合によるスレッドの性能劣化の低減を図ることができる割当方法、およびマルチコアプロセッサシステムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、マルチコアプロセッサのうちの特定のコアが、前記マルチコアプロセッサで共有する共有資源が有する記憶領域の使用数をスレッド群のスレッドごとに記憶する記憶装置から、対象スレッドの記憶領域の使用数と、前記マルチコアプロセッサのコアごとに割当済のスレッドの記憶領域の使用数と、を特定し、前記割当済のスレッドの特定された記憶領域の使用数から前記コアごとに最大値を検出し、前記マルチコアプロセッサのうちの割当先候補に選択されたコアの検出された最大値と前記対象スレッドの特定された記憶領域の使用数とのうちの大きい方の値と、前記選択されたコア以外のコアの検出された最大値との総和が、前記共有資源内の記憶領域数以下であるか否かを判断し、前記総和が前記記憶領域数以下であると判断された場合、前記対象スレッドを前記選択されたコアに割り当てる割当方法、およびマルチコアプロセッサシステムが提案される。
【発明の効果】
【０００８】
本発明の一側面によれば、共有メモリへのアクセス競合によるスレッドの性能劣化の低減を図ることができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、マルチコアプロセッサシステムの処理例を示す説明図である。
【図２】図２は、マルチコアプロセッサシステムのハードウェア構成例を示す説明図である。
【図３】図３は、実施例１〜５にかかるスレッドテーブルの一例を示す説明図である。
【図４】図４は、実施例１〜６にかかる割当テーブルの一例を示す説明図である。
【図５】図５は、実施例１〜６にかかるマスタＯＳの機能例を示すブロック図である。
【図６】図６は、実施例１にかかる各ＣＰＵ２０１の選択時の判断例を示す説明図である。
【図７】図７は、実施例１にかかる割当例を示す説明図である。
【図８】図８は、実施例１にかかるマスタＯＳが行う処理手順を示すフローチャートである。
【図９】図９は、実施例２にかかるＣＰＵ２０１の選択例を示す説明図である。
【図１０】図１０は、実施例２にかかるマスタＯＳが行う処理手順を示すフローチャートである。
【図１１】図１１は、実施例３にかかるＣＰＵ２０１の選択例を示す説明図である。
【図１２】図１２は、実施例３にかかるマスタＯＳが行う処理手順を示すフローチャートである。
【図１３】図１３は、実施例４にかかる割当例を示す説明図である。
【図１４】図１４は、実施例４にかかるマスタＯＳが行う処理手順を示すフローチャートである。
【図１５】図１５は、実施例５にかかる割当例を示す説明図である。
【図１６】図１６は、実施例５にかかるマスタＯＳが行う処理手順を示すフローチャート（その１）である。
【図１７】図１７は、実施例５にかかるマスタＯＳが行う処理手順を示すフローチャート（その２）である。
【図１８】図１８は、実施例６にかかるスレッドテーブルの一例を示す説明図である。
【図１９】図１９は、対象スレッドがＡに分類されている場合の例を示す説明図である。
【図２０】図２０は、対象スレッドがＣに分類されている場合の例を示す説明図である。
【図２１】図２１は、対象スレッドがＢに分類されている場合の例１を示す説明図である。
【図２２】図２２は、対象スレッドがＢに分類されている場合の例２を示す説明図である。
【図２３】図２３は、実施例６にかかるマスタＯＳが行う処理手順の一例を示すフローチャートである。
【図２４】図２４は、図２３で示したＡの割当処理（ステップＳ２３０８）の詳細な説明を示すフローチャートである。
【図２５】図２５は、図２３で示したＢの割当処理（ステップＳ２３１０）の詳細な処理手順を示すフローチャートである。
【図２６】図２６は、図２３で示したＣの割当処理（ステップＳ２３１１）の詳細な処理手順を示すフローチャートである。
【図２７】図２７は、実施例７にかかるスレッドテーブルの一例を示す説明図である。
【図２８】図２８は、実施例７にかかる割当テーブルの一例を示す説明図である。
【図２９】図２９は、アクセス競合のオーバーヘッド情報の一例を示す説明図である。
【図３０】図３０は、実施例７にかかるＯＳ２２１の機能例を示すブロック図である。
【図３１】図３１は、第１，２のスケジューリングによる割当例を示す説明図である。
【図３２】図３２は、算出の一の例を示す説明図である。
【図３３】図３３は、算出の他の例を示す説明図である。
【図３４】図３４は、実施例７にかかるマスタＯＳが行う処理手順の一例を示すフローチャートである。
【図３５】図３５は、図３４で示した第２のスケジューリング処理（ステップＳ３４０２）の詳細な説明を示すフローチャートである。
【図３６】図３６は、マルチコアプロセッサシステム２００の適用例を示す図である。
【発明を実施するための形態】
【００１０】
マルチコアプロセッサシステムにおいて、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００１１】
マルチコアプロセッサの各コアで実行されるスレッドの総バンク使用数が、共有資源の総バンク数を上回ってしまうと、あるバンクに対し複数のスレッドからアクセスを受けることになる。このため、いずれのスレッドの組み合わせで並列実行されても、メモリバンク不足により発生するアクセス競合の低減を図る。すなわち、並列実行時のスレッドの使用バンク数の総和が共有資源のメモリバンク数を超えないように対象スレッドの割り当てを行う。このように、各コアで使用バンク数が最大のスレッドが同時に実行されたとしても、バンク不足を可能な限り回避することができる。したがって、共有資源へのアクセス競合によるスレッドの性能劣化の低減を図ることができる。
【００１２】
図１は、マルチコアプロセッサシステムの処理例を示す説明図である。まず、マルチコアプロセッサで共有する共有資源が有するバンクの使用数をスレッドごとに記憶装置に記憶させておく。ここで、スレッドとは、ＣＰＵが実行する処理の単位である。記憶装置と共有資源とは、同一であってもよいし、異なる資源であってもよい。たとえば、共有資源がＲＡＭ（Ｒａｎｄａｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）や２次キャッシュであり、記憶装置がフラッシュＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などのストレージである。共有資源の記憶領域は、複数のバンクに分割されている。バンクとは、共有資源のコントローラが共有資源を管理する際の記憶領域の単位である。共有資源のコントローラが、メモリインターリーブ機能により、ＣＰＵ２０１からの書き込み命令や読み出し命令を同時に複数のバンクに発行することができるため、異なるバンクへのアクセスであれば競合しない。図１では、共有資源のバンク数は１０である。
【００１３】
図１では、スレッド１０１−１〜１０１−８が各ＣＰＵ２０１に割当済である。ＣＰＵ２０１−１には、スレッド１０１−１，１０１−２が割り当てられ、ＣＰＵ２０１−２には、スレッド１０１−３，１０１−４が割り当てられている。ＣＰＵ２０１−３には、スレッド１０１−５，１０１−６が割り当てられ、ＣＰＵ２０１−４には、スレッド１０１−７，１０１−８が割り当てられている。
【００１４】
まず、ＣＰＵ２０１−１が実行するマスタＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が、記憶装置から、対象スレッド１００のバンクの使用数と、各ＣＰＵ２０１に割当済のスレッド１０１のバンクの使用数と、を特定する。対象スレッド１００は、割り当ての対象となるスレッドである。たとえば、対象スレッド１００は、起動指示がマスタＯＳによって受け付けられたスレッドである。各スレッドのバンクの使用数は図１中の各スレッドの括弧（  ）の中に記述されている。たとえば、対象スレッド１００のバンクの使用数は２である。
【００１５】
つぎに、マスタＯＳが、割当済のスレッド１０１の特定されたバンクの使用数のうちの最大値ＢをＣＰＵ２０１ごとに検出する。たとえば、ＣＰＵ２０１−１に割当済のスレッド１０１のバンクの使用数のうちの最大値Ｂ１は３であり、ＣＰＵ２０１−２に割当済のスレッド１０１のバンクの使用数のうちの最大値Ｂ２は２である。ＣＰＵ２０１−３に割当済のスレッド１０１のバンクの使用数のうちの最大値Ｂ３は２であり、ＣＰＵ２０１−４に割当済のスレッド１０１のバンクの使用数のうちの最大値Ｂ４は３である。
【００１６】
そして、マスタＯＳが、マルチコアプロセッサのうちの割当先候補に選択されたＣＰＵ２０１の検出された最大値と対象スレッド１００の特定されたバンクの使用数とのうちの大きい方の値を選択する。図１では、マスタＯＳが割当先候補としてＣＰＵ２０１−１を選択する。対象スレッド１００のバンクの使用数は２であり、ＣＰＵ２０１−１の検出された最大値は３であるため、マスタＯＳが大きい方の値として３を選択する。図１中点線枠で囲われたスレッドが、選択された大きい方の値のスレッドと、ＣＰＵ２０１−１以外のＣＰＵ２０１の検出された最大値のスレッドである。すなわち、対象スレッド１００をＣＰＵ２０１−１に割り当てた場合において、対象スレッド１００と割当済のスレッド１０１とが並列実行される組み合わせの中で、図１中点線枠で囲われたスレッドの組み合わせが、最も総バンク使用数が大きくなる。
【００１７】
そして、たとえば、マスタＯＳが、選択された大きい方の値と、ＣＰＵ２０１−１以外のＣＰＵ２０１の検出された最大値との総和ＳＵＭが、共有資源のバンク数以下であるか否かを判断する。マスタＯＳが、総和ＳＵＭが共有資源のバンク数以下であると判断した場合、対象スレッド１００を選択されたＣＰＵ２０１に割り当てる。総和ＳＵＭは１０であるため、マスタＯＳが対象スレッド１００をＣＰＵ２０１−１に割り当てる。これにより、対象スレッド１００をＣＰＵ２０１−１に割り当てた場合、いずれのスレッドの組み合わせで並列実行されても、バンク数不足に陥ることがない。また、マスタＯＳは、割当先候補としてＣＰＵ２０１−１以外のＣＰＵ２０１を選択してもよいし、ＣＰＵ２０１を順に選択してもよい。割当先候補の選択については、実施例にて後述する。
【００１８】
ＣＰＵ２０１−１〜２０１−４は、それぞれに複数のスレッドが割り当てられた場合、タイムスライスで切り替えながら実行するため、いずれのスレッドの組み合わせで並列実行されるか不明である。図１で示した例では、いずれのスレッドの組み合わせであっても、共有資源へのアクセスが競合しないように割り当てるため、アクセス競合によるスレッドの性能劣化の低減を図ることができる。
【００１９】
（マルチコアプロセッサシステム）
図２は、マルチコアプロセッサシステムのハードウェア構成例を示す説明図である。マルチコアプロセッサシステム２００は、ＣＰＵ２０１−１〜２０１−ｎと、２次キャッシュ２０２と、Ｉ／Ｏ２０３と、Ｉ／Ｆ２０４と、を有している。さらに、マルチコアプロセッサシステム２００は、ＲＡＭコントローラ２０５と、ＲＡＭ２０６と、フラッシュＲＯＭコントローラ２０７と、フラッシュＲＯＭ２０８と、ＲＯＭコントローラ２０９と、ＲＯＭ２１０と、を有している。
【００２０】
ＲＡＭコントローラ２０５と、フラッシュＲＯＭコントローラ２０７と、ＲＯＭコントローラ２０９と、２次キャッシュ２０２と、Ｉ／Ｏ２０３と、Ｉ／Ｆ２０４とは、バス２１１を介して接続されている。ＣＰＵ２０１−１〜２０１−ｎ（ｎ≧２）は、２次キャッシュ２０２を介して各部と接続されている。ＲＡＭ２０６は、ＲＡＭコントローラ２０５を介して各部と接続されている。フラッシュＲＯＭ２０８は、フラッシュＲＯＭコントローラ２０７を介して各部と接続されている。ＲＯＭ２１０は、ＲＯＭコントローラ２０９を介して各部と接続されている。
【００２１】
ＣＰＵ２０１−１はマスタＣＰＵであり、マルチコアプロセッサシステム２００の全体を制御する。ＣＰＵ２０１−２〜２０１−ｎはスレーブＣＰＵである。ＣＰＵ２０１−１〜２０１−ｎは、それぞれ１次キャッシュ２６１−１〜２６１−ｎ、レジスタ、コア、ＭＭＵ（Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）を有している。ＭＭＵは、ＣＰＵ２０１から書き込み命令や読み出し命令を受け付けると、各命令に含まれる論理アドレスを物理アドレスに変更する。ＣＰＵ２０１−１〜２０１−ｎは、それぞれＯＳ２２１−１〜２２１−ｎを実行している。
【００２２】
ＯＳ２２１−１は、マルチコアプロセッサの全体のマスタＯＳである。ＯＳ２２１−１は、ウエイトキュー２５０を有し、ウエイトキュー２５０にスレッドのバイナリ情報へのポインタが積まれると、ＯＳ２２１−１はスレッドの起動指示を受け付けたと判断する。
【００２３】
また、ＯＳ２２１−１〜２２１−ｎは、図示していないが、それぞれランキューを有している。各ランキューには各ＣＰＵ２０１に割り当てられたスレッドのコンテキスト情報のポインタが積まれる。コンテキスト情報とは、たとえば、ロードされたスレッドの実行状態や該スレッド内の変数などが含まれる情報である。ＯＳ２２１−１〜２２１−ｎはランキュー内のコンテキスト情報のポインタを取得し、スレッドのコンテキスト情報にアクセスすることで、スレッドを直ぐに実行することができる。
【００２４】
ＣＰＵ２０１−１〜２０１−ｎがそれぞれ有する１次キャッシュ２６１−１〜２６１−ｎはＯＳ２２１が実行するスレッドからＲＡＭ２０６やフラッシュＲＯＭ２０８への書込処理を一時的に記憶する。各１次キャッシュ２６１は、ＲＡＭ２０６やフラッシュＲＯＭ２０８から読み出されたデータを一時的に記憶する。各１次キャッシュ２６１は、スヌープ回路によって接続されている。スヌープ回路は、ＣＰＵ２０１が有する１次キャッシュ２６１で共有するデータがいずれかの１次キャッシュ２６１で更新された場合、該更新を検出し、他の１次キャッシュ２６１の該データも更新する。
【００２５】
２次キャッシュ２０２は、キャッシュメモリと２次キャッシュコントローラ２５１を有している。２次キャッシュ２０２では、各ＣＰＵ２０１が有する１次キャッシュ２６１から追い出されたデータやＲＡＭ２０６、フラッシュＲＯＭ２０８から読み出されたデータを記憶する。２次キャッシュ２０２は、１次キャッシュ２６１よりも記憶容量が大きくかつＣＰＵ２０１からのアクセス速度が遅いが、ＲＡＭ２０６よりも記憶容量が小さくかつＣＰＵ２０１からのアクセス速度が速い。
【００２６】
２次キャッシュ２０２のキャッシュメモリは、バンク２３１−１〜２３１−ｌに分割され、２次キャッシュコントローラ２５１は、メモリインターリーブ機能を有している。２次キャッシュコントローラ２５１はＣＰＵ２０１からの書き込み命令や読み出し命令を同時に複数のバンク２３１に発行することができる。したがって、異なるバンク２３１へのアクセスであれば競合が発生しない。
【００２７】
また、２次キャッシュコントローラ２５１は、図示しないアクセスキューをバンク２３１ごとに有している。２次キャッシュコントローラ２５１は、いずれのバンク２３１へのアクセスであるかを判断後、アクセス先のバンク２３１用のアクセスキューにアクセス要求（書き込み命令または読み出し命令）を登録する。そして、２次キャッシュコントローラ２５１は、アクセスキューに登録されたアクセス要求順にバンク２３１へのアクセスを行う。
【００２８】
たとえば、バンク２３１−１〜２３１−ｌは、それぞれ空き領域か否かを示すフラグを有してよい。そして、２次キャッシュコントローラ２５１が、ＣＰＵ２０１から読み出し命令または書き込み命令を受け付けた場合、読み出し命令または書き込み命令に関するデータ群がバンク２３１に記憶されているか否かを判断する。
【００２９】
たとえば、２次キャッシュコントローラ２５１が、該データ群がいずれかのバンク２３１に記憶されていない場合、バンク２３１−１〜２３１−ｌの空き領域か否かを示すフラグにより、空き領域のバンク２３１を特定する。そして、たとえば、２次キャッシュコントローラ２５１が、特定したバンク２３１へデータ群を記憶させ、特定したバンク２３１のフラグを使用領域に変更する。また、たとえば、データ群のうちのいずれかのデータがバンク２３１に記憶されている場合、データ群のうちの残余のデータも該バンク２３１と同一バンク２３１に記憶させることとしてもよい。
【００３０】
また、バンク２３１−１〜２３１−ｌは、バンク２３１に対する最新のアクセス時刻を有していてもよい。たとえば、２次キャッシュコントローラ２５１は、読み出し命令または書き込み命令に関するデータ群がバンク２３１に記憶されていない場合、最新のアクセス時刻が最も古いバンク２３１を特定する。そして、２次キャッシュコントローラ２５１は、特定したバンク２３１に記憶されているデータ群をＲＡＭ２０６やフラッシュＲＯＭ２０８へ追い出し、あらたな命令によるデータ群を特定したバンク２３１に記憶させ、アクセス時刻を更新する。
【００３１】
また、バンク２３１は、バンク２３１のキャッシュラインごとに空き領域であるか否かのフラグや最新のアクセス時刻を有していてもよい。また、各ＯＳ２２１がスレッドとバンク２３１とを関連付けて空き領域であるか否かのフラグを管理してもよい。
【００３２】
つぎに、ＲＡＭ２０６は、たとえば、ＣＰＵ２０１−１〜２０１−ｎのワークエリアとして使用される。ＲＡＭ２０６の記憶領域はバンク２４１−１〜２４１−ｍに分割されている。そのため、ＲＡＭコントローラ２０５は、メモリインターリーブ機能を有している。ＲＡＭコントローラ２０５は、メモリインターリーブ機能により、ＣＰＵ２０１からの書き込み命令や読み出し命令を同時に複数のバンク２４１に発行することができるため、異なるバンク２４１へのアクセスであれば競合しない。
【００３３】
また、ＲＡＭコントローラ２０５は、アクセスキューをバンク２４１ごとに有している。ＲＡＭコントローラ２０５は、いずれのバンク２４１へのアクセスであるかを判断後、アクセス先のバンク２４１用のアクセスキューにアクセス要求を登録する。そして、ＲＡＭコントローラ２０５は、アクセスキューに登録されたアクセス要求順にバンク２４１へのアクセスを行う。
【００３４】
たとえば、バンク２４１−１〜２４１−ｍは、それぞれ空き領域か否かを示すフラグを有してよい。まず、ＣＰＵ２０１は、スレッドを実行するためにはコンテキスト情報をＲＡＭ２０６へ記憶させる。そして、ＲＡＭコントローラ２０５が、ＣＰＵ２０１からスレッドのコンテキスト情報に関する書き込み命令を受け付けた場合、バンク２４１−１〜２４１−ｍの空き領域か否かを示すフラグにより、コンテキスト情報分の空き領域のバンク２４１を特定する。コンテキスト情報は、上述したようにスレッドのプログラムコードやスレッドの実行時に用いる変数などを有している。そして、たとえば、ＲＡＭコントローラ２０５が、特定したバンク２４１へコンテキスト情報を記憶させ、特定したバンク２４１のフラグを使用領域に変更する。これにより、ＲＡＭコントローラ２０５はスレッドごとにバンク２４１を割り当てることができる。
【００３５】
また、たとえば、ＲＡＭコントローラ２０５が、空き領域であるバンク２４１を特定できなかった場合、任意のバンク２４１に記憶されたデータをフラッシュＲＯＭ２０８へ一時的に退避させ、任意のバンク２４１へコンテキスト情報を記憶させる。
【００３６】
さらに、たとえば、実行中のスレッドはあらたなデータをＲＡＭ２０６に記憶させるために、記憶領域を動的に増やすことがある。このとき、スレッドは、すでに利用中の記憶領域（たとえば、コンテキスト情報の記憶領域）に連続した記憶領域にあらたなデータを記憶させるため、あらたなデータは、すでに利用中のバンク２４１と同一バンク２４１に記憶される。これにより、複数のスレッドがマルチコアプロセッサで同時に並列実行されても、ＲＡＭ２０６のバンク数を超えないようにスレッドを割り当てることで、スレッドは、異なるバンク２４１を利用することができる。利用中の記憶領域については、ＣＰＵ２０１がそれぞれ有するＭＭＵが論理アドレスと物理アドレスを変換する変換テーブルにより管理している。
【００３７】
また、バンク２４１−１〜２４１−ｍは、バンク２４１に対する最新のアクセス時刻を有していてもよい。これにより、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）によって、各スレッドにバンクを振り分けることができる。たとえば、ＲＡＭ２０６は、読み出し命令または書き込み命令に関するデータ群がバンク２４１に記憶されていない場合、最新のアクセス時刻が最も古いバンク２４１を特定する。そして、ＲＡＭ２０６は、特定したバンク２４１へデータ群を記憶させ、アクセス時刻を更新する。そして、ＲＡＭ２０６は、特定したバンク２４１に記憶されているデータ群をフラッシュＲＯＭ２０８へ一時的にスワップさせ、あらたな命令によるデータ群を特定したバンク２４１に記憶させ、アクセス時刻を更新する。アクセスされていない時間が最も長いバンク２４１のデータをスワップ対象にすることができる。
【００３８】
また、バンク２４１は、バンク２４１のキャッシュラインごとに空き領域であるか否かのフラグや最新のアクセス時刻を有していてもよい。ＲＡＭコントローラ２０５は、キャッシュラインごとに管理していたとしても、データ群は、連続した記憶領域に記憶させるため、たとえば、プログラムのコードのような大きなデータであれば、すべて同一バンク２４１に割り当てることができる。また、各ＯＳ２２１がスレッドとバンク２４１とを関連付けて空き領域であるか否かのフラグを管理してもよい。
【００３９】
また、本明細書では、ＲＡＭ２０６のバンク数として、ｍを用いるが、これに限らず、あらかじめスレッドが利用可能な上限値をＲＡＭ２０６のバンク数として定義してもよい。
【００４０】
ＲＯＭ２１０は、ブートプログラムなどのプログラムを記憶している。ＲＯＭコントローラ２０９は、ＲＯＭ２１０へのアクセスを制御する。フラッシュＲＯＭ２０８は、ＯＳ２２１などのシステムソフトウェアやアプリのプログラムを記憶している。フラッシュＲＯＭ２０８は、たとえば、マルチコアプロセッサシステム２００に内蔵されていてもよいし、メモリカード、ＳＤカードなどの記録媒体であってもよい。フラッシュＲＯＭコントローラ２０７は、フラッシュＲＯＭ２０８へのアクセスを制御する。
【００４１】
（スレッドテーブル）
図３は、実施例１〜５にかかるスレッドテーブルの一例を示す説明図である。実施例６のスレッドテーブルと実施例７のスレッドテーブルについては後述する。スレッドテーブル３００は、スレッドＩＤ、処理時間、使用数のフィールドを有している。各フィールドに値が設定されることで、スレッド情報（たとえば、３０１−１）がレコードとして記憶される。
【００４２】
スレッドＩＤのフィールドには、スレッドの識別情報が登録される。処理時間のフィールドには、各スレッドの処理時間が登録される。各スレッドの処理時間については、たとえば、各スレッドの設計時にシミュレーションツールによりあらかじめ計測されてよい。使用数のフィールドには、ＲＡＭ２０６の複数のバンクのうち、各スレッドが実行時に使用するバンクの使用数が登録される。各スレッドのバンクの使用数は、各スレッドの設計時にシミュレーションツールによりあらかじめ計数されてもよい。また、各スレッドのバンクの使用数は、各スレッドの実行時に計測された値でもよい。スレッドテーブル３００については、フラッシュＲＯＭ２０８に記憶されてよい。
【００４３】
（割当テーブル）
図４は、実施例１〜６にかかる割当テーブルの一例を示す説明図である。実施例７の割当テーブルについては後述する。割当テーブル４００は、ＣＰＵＩＤ、スレッドＩＤのフィールドを有している。各フィールドに値が設定されることで、スレッド情報（たとえば、４０１−１）がレコードとして記憶される。
【００４４】
ＣＰＵＩＤのフィールドには、ＣＰＵ２０１の識別情報が登録される。スレッドＩＤのフィールドには、各ＣＰＵ２０１に割り当てられたスレッドの識別情報が登録される。マスタＯＳであるＯＳ２２１−１がスレッドを各ＣＰＵ２０１に割り当てる都度、割当テーブル４００にスレッドの割当結果を設定することにより、あらたなレコードが生成される。また、ＯＳ２２１−１〜２２１−ｎがスレッドの実行が終了すると、割当テーブル４００から、実行が終了したスレッドに関するレコードを削除する。割当テーブル４００は、フラッシュＲＯＭ２０８に記憶されていることとする。
【００４５】
（実施例１〜６にかかるマスタＯＳの機能例を示すブロック図）
図５は、実施例１〜６にかかるマスタＯＳの機能例を示すブロック図である。実施例７にかかるマスタＯＳの機能例を示すブロック図については後述する。マスタＯＳであるＯＳ２２１−１は、特定部５０１と、検出部５０２と、選択部５０３と、判断部５０４と、割当部５０５と、分類判断部５０６と、を有している。特定部５０１から分類判断部５０６の処理が、マスタＯＳにコーディングされている。ＣＰＵ２０１−１が、フラッシュＲＯＭ２０８に記憶されているＯＳ２２１−１を読み出し、ＯＳ２２１−１にコーディングされている処理を実行する。これにより、特定部５０１から分類判断部５０６の機能が実現される。以下、特定部５０１から分類判断部５０６については、実施例１〜実施例６を用いて詳細に説明する。実施例１〜６では、ｎ＝４とし、ｌ＝１０とし、ｍ＝１０とする。また、実施例７については、図５で示すブロック図を包含するブロック図を用いて説明する。
【００４６】
（実施例１）
つぎに、実施例１について説明する。たとえ、選択された使用バンク数のスレッド群が各々のＣＰＵ２０１で同時に並列実行されても、バンク数不足に陥ることがないようにする。そこで、実施例１では、ＣＰＵ２０１を順に選択して、並列実行時のスレッドの使用バンク数の総和が共有資源のバンク数を超えないようなＣＰＵ２０１を対象スレッドの割当先として検出する。これにより、共有資源へのアクセス競合によるスレッドの性能劣化の低減を図ることができる。
【００４７】
図６は、実施例１にかかる各ＣＰＵ２０１の選択時の判断例を示す説明図である。まず、特定部５０１は、対象スレッド６００のバンクの使用数と、各ＣＰＵ２０１に割当済のスレッド６０１（６０１−１〜６０１−７）のバンクの使用数と、をスレッドテーブル３００から特定する。ここで、対象スレッド６００とは、たとえば、図２に示すＯＳ２２１−１が起動指示を受け付けたスレッドである。
【００４８】
たとえば、特定部５０１は、割当テーブル４００から、ＣＰＵ２０１の識別情報に基づいて各ＣＰＵ２０１に割当済のスレッド６０１の識別情報を抽出する。そして、たとえば、特定部５０１は、スレッドテーブル３００から、対象スレッド６００の識別情報と、抽出した各ＣＰＵ２０１に割当済のスレッド６０１の識別情報に基づいて、それぞれのスレッドのバンクの使用数を特定する。各スレッドのＲＡＭ２０６のバンクの使用数が図６中のスレッドの括弧（  ）内に記述されている。
【００４９】
検出部５０２は、割当済のスレッド６０１の特定部５０１により特定されたバンクの使用数から最大値ＢをＣＰＵ２０１ごとに検出する。図６では、ＣＰＵ２０１−１の最大値Ｂ１は３であり、ＣＰＵ２０１−２の最大値Ｂ２は２であり、ＣＰＵ２０１−３の最大値Ｂ３は２であり、ＣＰＵ２０１−４の最大値Ｂ４は３である。
【００５０】
選択部５０３は、検出部５０２による検出後、マルチコアプロセッサから、順にＣＰＵ２０１を割当先候補として選択する。たとえば、選択部５０３は、ＣＰＵ２０１の識別情報順に選択する。よって、選択部５０３は、ＣＰＵ２０１−１→ＣＰＵ２０１−２→ＣＰＵ２０１−３→ＣＰＵ２０１−４の順に選択する。
【００５１】
判断部５０４は、選択部５０３によりＣＰＵ２０１が選択される都度、選択されたＣＰＵ２０１の検出された最大値と対象スレッド６００の特定されたバンクの使用数とのうちの大きい方の値を選択する。そして、判断部５０４は、選択した大きいほうの値と、選択されたＣＰＵ２０１以外のＣＰＵ２０１の検出された最大値との総和ＳＵＭが、ＲＡＭ２０６のバンク数ｍ以下であるか否かを判断する。たとえば、判断部５０４は、下記式（１）を算出する。
【００５２】
ＳＵＭｉ（ｉ＝１〜ｎ）
＝ΣＢ１，・・・，ＭＡＸ（Ｂｉ，ｃ），・・・，Ｂｎ・・・（１）
【００５３】
ＭＡＸ（Ｂｉ，ｃ）は、選択されたＣＰＵ２０１の検出された最大値と対象スレッド６００の特定されたバンクの使用数とのうちの大きい方の値である。そして、たとえば、判断部５０４は、総和ＳＵＭｉがＲＡＭ２０６のバンク数ｍ以下であるか否かを判断する。
【００５４】
はじめに、図６の左上に示すように、選択部５０３は、ＣＰＵ２０１−１を選択する。このとき、総和ＳＵＭ１（点線枠で囲われたスレッドの総バンク使用数）は１０であるため、判断部５０４は、ＲＡＭ２０６のバンク数ｍ以下であると判断する。
【００５５】
つぎに、図６の右上に示すように、選択部５０３は、ＣＰＵ２０１−２を選択する。このとき、総和ＳＵＭ２（点線枠で囲われたスレッドの総バンク使用数）は１１であるため、判断部５０４は、ＲＡＭ２０６のバンク数ｍ以下でないと判断する。
【００５６】
そして、図６の左下に示すように、選択部５０３は、ＣＰＵ２０１−３を選択する。このとき、総和ＳＵＭ３（点線枠で囲われたスレッドの総バンク使用数）は１１であるため、判断部５０４は、ＲＡＭ２０６のバンク数ｍ以下でないと判断する。
【００５７】
最後に、図６の右下に示すように、選択部５０３は、ＣＰＵ２０１−４を選択する。このとき、総和ＳＵＭ４（点線枠で囲われたスレッドの総バンク使用数）は１０であるため、判断部５０４は、ＲＡＭ２０６のバンク数ｍ以下であると判断する。
【００５８】
割当部５０５は、判断部５０４により総和ＳＵＭがＲＡＭ２０６のバンク数ｍ以下であると判断されたＣＰＵ２０１に対象スレッド６００を割り当てる。たとえば、割当部５０５は、ＣＰＵ２０１−１またはＣＰＵ２０１−４に対象スレッド６００を割り当てる。つぎに、総和ＳＵＭがＲＡＭ２０６のバンク数ｍ以下であると判断された割当先候補が複数ある場合において、割当部５０５がいずれの割当先候補に割り当てるかについて図７を用いて説明する。
【００５９】
図７は、実施例１にかかる割当例を示す説明図である。たとえば、割当部５０５は、判断部５０４により総和ＳＵＭがＲＡＭ２０６のバンク数ｍ以下であると判断されたＣＰＵ２０１−１とＣＰＵ２０１−４のそれぞれに割当済のスレッド６０１の処理時間の合計値を算出する。たとえば、割当部５０５は、スレッドテーブル３００を参照することにより、割当済のスレッド６０１の処理時間を特定することができる。図７では、ＣＰＵ２０１−１に割当済のスレッド６０１の処理時間の合計値は、５０［ｍｓ］であり、ＣＰＵ２０１−４に割当済のスレッド６０１の処理時間の合計値は、３０［ｍｓ］であるため、対象スレッド６００はＣＰＵ２０１−４に割り当てられる。
【００６０】
（実施例１にかかるマスタＯＳが行う処理手順）
図８は、実施例１にかかるマスタＯＳが行う処理手順を示すフローチャートである。まず、マスタＯＳが、スレッドの起動指示を受け付けたか否かを判断する（ステップＳ８０１）。マスタＯＳが、スレッドの起動指示を受け付けていないと判断した場合（ステップＳ８０１：Ｎｏ）、ステップＳ８０１へ戻る。
【００６１】
マスタＯＳが、スレッドの起動指示を受け付けたと判断した場合（ステップＳ８０１：Ｙｅｓ）、特定部５０１により、ＣＰＵ２０１ごとに割当済のスレッドのバンクの使用数を特定する（ステップＳ８０２）。そして、マスタＯＳが、特定部５０１により、起動指示を受け付けたスレッド（対象スレッド）のバンクの使用数ｃを特定し（ステップＳ８０３）、検出部５０２により、特定したバンクの使用数から、最大値Ｂ（１〜ｎ）をＣＰＵ２０１ごとに検出する（ステップＳ８０４）。
【００６２】
つぎに、マスタＯＳが、選択部５０３により、ｉ＝１とし（ステップＳ８０５）、選択部５０３により、ｉ≦ＣＰＵ数であるか否かを判断する（ステップＳ８０６）。マスタＯＳが、ｉ≦ＣＰＵ数であると判断した場合（ステップＳ８０６：Ｙｅｓ）、ｉ番目のＣＰＵ２０１を選択する（ステップＳ８０７）。マスタＯＳが、ｉ番目のＣＰＵ２０１の最大値Ｂｉと対象スレッドの使用バンク数ｃのうち、大きい値（ＭＡＸ（Ｂｉ，ｃ））を選択する（ステップＳ８０８）。
【００６３】
そして、マスタＯＳが、ＳＵＭｉ＝ΣＢ１，・・・，ＭＡＸ（Ｂｉ，ｃ），・・・，Ｂｎを算出し（ステップＳ８０９）、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍであるか否かを判断する（ステップＳ８１０）。マスタＯＳが、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍであると判断した場合（ステップＳ８１０：Ｙｅｓ）、ｉ番目のＣＰＵ２０１を割当先候補として検出し（ステップＳ８１１）、ｉ＝ｉ＋１とし（ステップＳ８１２）、ステップＳ８０６へ戻る。マスタＯＳが、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍでないと判断した場合（ステップＳ８１０：Ｎｏ）、ステップＳ８１２へ移行する。
【００６４】
ステップＳ８０６において、マスタＯＳが、ｉ≦ＣＰＵ数でないと判断した場合（ステップＳ８０６：Ｎｏ）、検出したＣＰＵ２０１ごとに割当済のスレッドの処理時間の合計値を算出する（ステップＳ８１３）。そして、マスタＯＳが、検出したＣＰＵ２０１の中で、算出した合計値が最小のＣＰＵ２０１に対象スレッドを割り当て（ステップＳ８１４）、ステップＳ８０１へ移行する。図示していないが、マスタＯＳは、割当結果を割当テーブル４００に出力する。
【００６５】
実施例１によれば、複数のＣＰＵ２０１の中で、アクセス競合による性能劣化を低減させることができるＣＰＵ２０１に対象スレッドを割り当てることができる。さらに、総和ＳＵＭがＲＡＭ２０６のバンク数ｍ以下となる割当先候補の数が複数ある場合、割当済のスレッドの処理時間が最小なコアに対象スレッドを割り当てる。これにより、ＲＡＭ２０６へのアクセス競合による性能劣化を低減し、かつ負荷分散を行うことができる。
【００６６】
（実施例２）
つぎに、実施例２について説明する。実施例１では先頭のＣＰＵから順に選択したが、実施例２では、複数のＣＰＵ２０１から、検出された最大値が大きい順にＣＰＵ２０１を割当先候補として選択する。最大値が大きい順であれば、対象スレッドの使用バンク数よりも大きい可能性が高く、無作為にＣＰＵ２０１を選択するよりも、並列実行時のスレッドの使用バンク数の総和に変化が生じにくい。したがって、アクセス競合による性能劣化の低減を図りつつ、対象スレッドの割当先を高速に決定することができる。
【００６７】
図９は、実施例２にかかるＣＰＵ２０１の選択例を示す説明図である。図９では、スレッド９０１−１〜９０１−７がＣＰＵ２０１に割当済である。また、各スレッドのＲＡＭ２０６のバンクの使用数が図９中のスレッドの括弧（  ）内に記述されている。
【００６８】
まず、実施例２の特定部５０１と検出部５０２のそれぞれの処理は、実施例１で説明した処理と同一であるため、省略する。図９の例では、ＣＰＵ２０１−１の最大値Ｂ１が４であり、ＣＰＵ２０１−２の最大値Ｂ２が２であり、ＣＰＵ２０１−３の最大値Ｂ３が１であり、ＣＰＵ２０１−４の最大値Ｂ４が３である。
【００６９】
つぎに、選択部５０３は、検出部５０２によって検出された最大値Ｂが大きい順にＣＰＵ２０１を選択する。したがって、選択部５０３は、ＣＰＵ２０１−１→ＣＰＵ２０１−４→ＣＰＵ２０１−２→ＣＰＵ２０１−３の順で選択する。
【００７０】
はじめに、図９の左上に示すように、選択部５０３は、ＣＰＵ２０１−１を選択する。このとき、総和ＳＵＭ１（点線枠で囲われたスレッドの総バンク使用数）は１０であるため、判断部５０４は、総和ＳＵＭ１がＲＡＭ２０６のバンク数ｍ以下であると判断する。
【００７１】
つぎに、図９の右上に示すように、選択部５０３は、ＣＰＵ２０１−４を選択する。このとき、総和ＳＵＭ４（点線枠で囲われたスレッドの総バンク使用数）は１０であるため、判断部５０４は、総和ＳＵＭ４がＲＡＭ２０６のバンク数ｍ以下であると判断する。
【００７２】
そして、図９の中央下に示すように、選択部５０３は、ＣＰＵ２０１−２を選択する。このとき、総和ＳＵＭ２（点線枠で囲われたスレッドの総バンク使用数）は１１であるため、判断部５０４は、総和ＳＵＭ２がＲＡＭ２０６のバンク数ｍ以下でないと判断する。
【００７３】
つぎに、検出部５０２によって検出されたＣＰＵ２０１−３の最大値がＣＰＵ２０１−２の最大値以下であるため、総和ＳＵＭ３は総和ＳＵＭ２未満となることがない。よって、判断部５０４は、総和ＳＵＭ３を算出せずとも、総和ＳＵＭ３がＲＡＭ２０６のバンク数ｍ以下でないと判断する。
【００７４】
そして、割当部５０５は、ＣＰＵ２０１−１またはＣＰＵ２０１−４のいずれか一方に対象スレッド９００を割り当てる。割当部５０５については、実施例１で説明した処理と同一であるため、詳細な説明を省略する。
【００７５】
また、たとえば、割当部５０５は、総和ＳＵＭがＲＡＭ２０６のバンク数ｍ以下でないと判断された時点で、すでに総和ＳＵＭがＲＡＭ２０６のバンク数ｍ以下であると判断された割当先候補から対象スレッド９００の割当先を決定してもよい。これにより、すべてのＣＰＵ２０１の選択時に対して判断部５０４の処理を行わずとも、並列実行時のスレッドの使用バンク数の総和が共有資源のバンク数を超えないようなＣＰＵ２０１を検出することができ、割当処理を高速化することができる。
【００７６】
（実施例２にかかるマスタＯＳが行う処理手順）
図１０は、実施例２にかかるマスタＯＳが行う処理手順を示すフローチャートである。まず、マスタＯＳが、スレッドの起動指示を受け付けたか否かを判断する（ステップＳ１００１）。マスタＯＳが、スレッドの起動指示を受け付けていないと判断した場合（ステップＳ１００１：Ｎｏ）、ステップＳ１００１へ戻る。
【００７７】
マスタＯＳが、スレッドの起動指示を受け付けたと判断した場合（ステップＳ１００１：Ｙｅｓ）、特定部５０１により、ＣＰＵ２０１ごとに割当済のスレッドのバンクの使用数を特定する（ステップＳ１００２）。そして、マスタＯＳが、特定部５０１により、起動指示を受け付けたスレッド（対象スレッド）のバンクの使用数ｃを特定し（ステップＳ１００３）、検出部５０２により、特定したバンクの使用数から、最大値Ｂ（１〜ｎ）をＣＰＵ２０１ごとに検出する（ステップＳ１００４）。
【００７８】
つぎに、マスタＯＳが、選択部５０３により、未選択のＣＰＵ２０１があるか否かを判断する（ステップＳ１００５）。マスタＯＳが、未選択のＣＰＵ２０１があると判断した場合（ステップＳ１００５：Ｙｅｓ）、未選択のＣＰＵ２０１のうち、検出された最大値が最も大きいＣＰＵ２０１（ｘ番目のＣＰＵ２０１）を選択する（ステップＳ１００６）。
【００７９】
マスタＯＳが、ｘ番目のＣＰＵ２０１の最大値Ｂと対象スレッドの使用バンク数ｃのうち、大きい値（ＭＡＸ（Ｂｘ，ｃ））を選択する（ステップＳ１００７）。マスタＯＳが、ＳＵＭｘ＝ΣＢ１，・・・，ＭＡＸ（Ｂｘ，ｃ），・・・，Ｂｎを算出し（ステップＳ１００８）、総和ＳＵＭｘ≦ＲＡＭ２０６のバンク数ｍであるか否かを判断する（ステップＳ１００９）。マスタＯＳが、総和ＳＵＭｘ≦ＲＡＭ２０６のバンク数ｍであると判断した場合（ステップＳ１００９：Ｙｅｓ）、選択されたＣＰＵ２０１を割当先候補として検出し（ステップＳ１０１０）、ステップＳ１００５へ移行する。
【００８０】
マスタＯＳが、総和ＳＵＭｘ≦ＲＡＭ２０６のバンク数ｍでないと判断した場合（ステップＳ１００９：Ｎｏ）、ステップＳ１０１１へ移行する。また、ステップＳ１００５において、マスタＯＳが、未選択のＣＰＵ２０１がないと判断した場合（ステップＳ１００５：Ｎｏ）、ステップＳ１０１１へ移行する。
【００８１】
そして、マスタＯＳが、検出したＣＰＵ２０１ごとに割当済のスレッドの処理時間の合計値を算出し（ステップＳ１０１１）、検出したＣＰＵ２０１の中で、算出した合計値が最小のＣＰＵ２０１に対象スレッドを割り当て（ステップＳ１０１２）、ステップＳ１００１へ戻る。図示していないが、マスタＯＳは、割当結果を割当テーブル４００に出力する。
【００８２】
実施例２によれば、使用バンク数の総和に変化が発生しにくいＣＰＵから順に選択することで、アクセス競合による性能劣化の低減を図りつつ、対象スレッドの割当先ＣＰＵの決定を高速化することができる。
【００８３】
（実施例３）
つぎに、実施例３について説明する。実施例１や実施例２では、ＣＰＵを順に選択したが、実施例３では、検出された最大値が最大となるＣＰＵ２０１のみを選択する。検出された最大値が最も大きいＣＰＵ２０１であれば、対象スレッド１１００の使用バンク数よりも大きい可能性が最も高いので並列実行時のスレッドの使用バンク数の総和に変化が生じにくい。したがって、アクセス競合による性能劣化の低減を図りつつ、対象スレッド１１００の割当先を高速に決定することができる。
【００８４】
図１１は、実施例３にかかるＣＰＵ２０１の選択例を示す説明図である。図１１では、スレッド１１０１−１〜１１０１−７がＣＰＵ２０１に割当済である。また、各スレッドのＲＡＭ２０６のバンクの使用数が図１１中のスレッドの括弧（  ）内に記述されている。まず、実施例３の特定部５０１と検出部５０２のそれぞれの処理は、実施例１で説明した処理と同一であるため、省略する。
【００８５】
つぎに、選択部５０３は、検出部５０２により検出された最大値Ｂが最も大きいＣＰＵ２０１を選択する。図１１の例では、ＣＰＵ２０１−１の最大値Ｂ１が４であり、ＣＰＵ２０１−２の最大値Ｂ２が２であり、ＣＰＵ２０１−３の最大値Ｂ３が１であり、ＣＰＵ２０１−４の最大値Ｂ４が３であるため、選択部５０３は、ＣＰＵ２０１−１を選択する。
【００８６】
図１１では、総和ＳＵＭ１が１０であるため、判断部５０４が、総和ＳＵＭ１がＲＡＭ２０６のバンク数ｍ以下であると判断する。そして、割当部５０５が、対象スレッド１１００をＣＰＵ２０１−１に割り当てる。これにより、ＲＡＭ２０６のアクセス競合による性能劣化の低減を図り、かつ割当処理を高速化することができる。
【００８７】
（実施例３にかかるマスタＯＳが行う処理手順）
図１２は、実施例３にかかるマスタＯＳが行う処理手順を示すフローチャートである。まず、マスタＯＳが、スレッドの起動指示を受け付けたか否かを判断する（ステップＳ１２０１）。マスタＯＳが、スレッドの起動指示を受け付けていないと判断した場合（ステップＳ１２０１：Ｎｏ）、ステップＳ１２０１へ戻る。
【００８８】
マスタＯＳが、スレッドの起動指示を受け付けたと判断した場合（ステップＳ１２０１：Ｙｅｓ）、特定部５０１により、ＣＰＵ２０１ごとに割当済のスレッドのバンクの使用数を特定する（ステップＳ１２０２）。そして、マスタＯＳが、特定部５０１により、起動指示を受け付けたスレッド（対象スレッド）のバンクの使用数ｃを特定し（ステップＳ１２０３）、検出部５０２により、特定したバンクの使用数から、最大値Ｂ（１〜ｎ）をＣＰＵ２０１ごとに検出する（ステップＳ１２０４）。
【００８９】
つぎに、マスタＯＳが、選択部５０３により、検出された最大値Ｂが最大であるＣＰＵ２０１（ｘ番目のＣＰＵ２０１）を選択する（ステップＳ１２０５）。マスタＯＳが、ｘ番目のＣＰＵ２０１の最大値Ｂｘと対象スレッドの使用バンク数ｃのうち、大きい値（ＭＡＸ（Ｂｘ，ｃ））を選択する（ステップＳ１２０６）。
【００９０】
マスタＯＳが、ＳＵＭｘ＝ΣＢ１，・・・，ＭＡＸ（Ｂｘ，ｃ），・・・，Ｂｎを算出し（ステップＳ１２０７）、総和ＳＵＭｘ≦ＲＡＭ２０６のバンク数ｍであるか否かを判断する（ステップＳ１２０８）。マスタＯＳが、総和ＳＵＭｘ≦ＲＡＭ２０６のバンク数ｍであると判断した場合（ステップＳ１２０８：Ｙｅｓ）、ｘ番目のＣＰＵ２０１に対象スレッドを割り当て（ステップＳ１２０９）、ステップＳ１２０１へ戻る。
【００９１】
ステップＳ１２０８において、マスタＯＳが、総和ＳＵＭｘ≦ＲＡＭ２０６のバンク数ｍでないと判断した場合（ステップＳ１２０８：Ｎｏ）、ＣＰＵ２０１ごとに割当済のスレッドの処理時間の合計値を算出する（ステップＳ１２１０）。そして、マスタＯＳが、合計値が最小となるＣＰＵ２０１に対象スレッドを割り当て（ステップＳ１２１１）、ステップＳ１２０１へ戻る。図示していないが、マスタＯＳは、割当結果を割当テーブル４００に出力する。
【００９２】
実施例３によれば、並列実行時のスレッドの使用バンク数の総和に最も変化が生じにくいＣＰＵ２０１を選択することで、アクセス競合による性能劣化の低減を図りつつ、対象スレッドの割当先ＣＰＵの決定を高速化することができる。
【００９３】
（実施例４）
つぎに、実施例４について説明する。実施例４では、どのＣＰＵ２０１を選択してもバンク数不足に陥る場合、並列実行時のスレッドの使用バンク数の総和が最小となるＣＰＵ２０１に割り当てる。これにより、アクセスの競合の発生を最小限に抑えることができる。
【００９４】
図１３は、実施例４にかかる割当例を示す説明図である。実施例４では、選択部５０３がいずれのＣＰＵ２０１を選択しても、判断部５０４が、総和ＳＵＭがＲＡＭ２０６のバンク数ｍ以下でないと判断する場合について説明する。図１３では、スレッド１３０１−１〜１３０１−７がＣＰＵ２０１に割当済である。また、各スレッドのＲＡＭ２０６のバンクの使用数が図１３中のスレッドの括弧（  ）内に記述されている。
【００９５】
図１３の左上で示すように、選択部５０３がＣＰＵ２０１−１を選択する。このとき、ＳＵＭ１（点線枠で囲われたスレッドの総バンク使用数）が１１であるため、判断部５０４は、ＳＵＭ１がＲＡＭ２０６のバンク数ｍ以下でないと判断する。
【００９６】
図１３の右上で示すように、選択部５０３がＣＰＵ２０１−２を選択する。このとき、ＳＵＭ２（点線枠で囲われたスレッドの総バンク使用数）が１２であるため、判断部５０４は、ＳＵＭ２がＲＡＭ２０６のバンク数ｍ以下でないと判断する。
【００９７】
図１３の左下で示すように、選択部５０３がＣＰＵ２０１−３を選択する。このとき、ＳＵＭ３（点線枠で囲われたスレッドの総バンク使用数）が１２であるため、判断部５０４は、ＳＵＭ３がＲＡＭ２０６のバンク数ｍ以下でないと判断する。
【００９８】
図１３の右下で示すように、選択部５０３がＣＰＵ２０１−４を選択する。このとき、ＳＵＭ４（点線枠で囲われたスレッドの総バンク使用数）が１１であるため、判断部５０４は、ＳＵＭ４がＲＡＭ２０６のバンク数ｍ以下でないと判断する。
【００９９】
割当部５０５は、判断部５０４によりいずれのＣＰＵ２０１が選択部５０３により選択されても、総和ＳＵＭがＲＡＭ２０６のバンク数ｍ以下でないと判断された場合、総和ＳＵＭが最小であるＣＰＵ２０１に対象スレッドを割り当てる。図１３では、ＣＰＵ２０１−１とＣＰＵ２０１−４の総和ＳＵＭ１，４が１１で最小の総和であるため、割当部５０５は、対象スレッド１３００をＣＰＵ２０１−１またはＣＰＵ２０１−４に割り当てる。総和ＳＵＭが最小であるＣＰＵ２０１が複数ある場合、たとえば、割当部５０５は、割当済のスレッド１３０１の処理時間の合計値が最小なスレッドに割り当ててもよい。
【０１００】
（実施例４にかかるマスタＯＳが行う処理手順）
図１４は、実施例４にかかるマスタＯＳが行う処理手順を示すフローチャートである。まず、マスタＯＳが、スレッドの起動指示を受け付けたか否かを判断する（ステップＳ１４０１）。マスタＯＳが、スレッドの起動指示を受け付けていないと判断した場合（ステップＳ１４０１：Ｎｏ）、ステップＳ１４０１へ戻る。
【０１０１】
マスタＯＳが、スレッドの起動指示を受け付けたと判断した場合（ステップＳ１４０１：Ｙｅｓ）、特定部５０１により、ＣＰＵ２０１ごとに割当済のスレッドのバンクの使用数を特定する（ステップＳ１４０２）。そして、マスタＯＳが、特定部５０１により、起動指示を受け付けたスレッド（対象スレッド）のバンクの使用数ｃを特定し（ステップＳ１４０３）、検出部５０２により、特定したバンクの使用数から、最大値Ｂ（１〜ｎ）をＣＰＵ２０１ごとに検出する（ステップＳ１４０４）。
【０１０２】
つぎに、マスタＯＳが、選択部５０３により、ｉ＝１とし（ステップＳ１４０５）、選択部５０３により、ｉ≦ＣＰＵ数であるか否かを判断する（ステップＳ１４０６）。マスタＯＳが、ｉ≦ＣＰＵ数であると判断した場合（ステップＳ１４０６：Ｙｅｓ）、ｉ番目のＣＰＵ２０１を選択する（ステップＳ１４０７）。マスタＯＳが、ｉ番目のＣＰＵ２０１の最大値Ｂｉと対象スレッドの使用バンク数ｃのうち、大きい値（ＭＡＸ（Ｂｉ，ｃ））を選択する（ステップＳ１４０８）。
【０１０３】
そして、マスタＯＳが、ＳＵＭｉ＝ΣＢ１，・・・，ＭＡＸ（Ｂｉ，ｃ），・・・，Ｂｎを算出し（ステップＳ１４０９）、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍであるか否かを判断する（ステップＳ１４１０）。マスタＯＳが、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍであると判断した場合（ステップＳ１４１０：Ｙｅｓ）、ｉ番目のＣＰＵ２０１を割当先候補として検出し（ステップＳ１４１１）、ｉ＝ｉ＋１とし（ステップＳ１４１２）、ステップＳ１４０６へ戻る。マスタＯＳが、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍでないと判断した場合（ステップＳ１４１０：Ｎｏ）、ステップＳ１４１２へ移行する。
【０１０４】
ステップＳ１４０６において、マスタＯＳが、ｉ≦ＣＰＵ数でないと判断した場合（ステップＳ１４０６：Ｎｏ）、総和ＳＵＭがバンク数以下である割当先候補を検出したか否かを判断する（ステップＳ１４１３）。
【０１０５】
マスタＯＳが、総和ＳＵＭがバンク数以下である割当先候補を検出したと判断した場合（ステップＳ１４１３：Ｙｅｓ）、検出したＣＰＵ２０１に対象スレッドを割り当て（ステップＳ１４１４）、ステップＳ１４０１へ戻る。マスタＯＳが、総和ＳＵＭがバンク数以下である割当先候補を検出していないと判断した場合（ステップＳ１４１３：Ｎｏ）、ＳＵＭが最小であるＣＰＵ２０１に対象スレッドを割り当て（ステップＳ１４１５）、ステップＳ１４０１へ戻る。図示していないが、マスタＯＳは、割当結果を割当テーブル４００に出力する。
【０１０６】
実施例４によれば、いずれのＣＰＵ２０１を割当先候補として選択してもバンク数不足に陥る場合、総和ＳＵＭが最小となるＣＰＵ２０１に対象スレッドを割り当てることで、アクセス競合の発生を可能な限り低減させることができる。アクセス競合の発生を低減させることで、ＲＡＭ２０６内のデータのスワップ回数を減少させることができ、スレッドの性能劣化の低減を図ることができる。
【０１０７】
（実施例５）
つぎに、実施例５について説明する。割当済のスレッドのバンクの使用数と対象スレッドのバンクの使用数との合計値がＲＡＭ２０６のバンク数ｍ以下であれば、どのスレッドの並列処理の組み合わせであっても、バンク数不足に陥ることがない。このため、実施例５では、実施例１〜実施例４で挙げた処理の実行に先立って、スレッドの使用バンク数に関係なくスレッドを割り当てる。したがって、上記条件を満たした場合は、実施例１〜実施例４で挙げた処理を行わないため、割当処理の高速化を図ることができる。
【０１０８】
図１５は、実施例５にかかる割当例を示す説明図である。実施例５では、対象スレッド１５００と割当済のスレッド１５０１−１〜１５０１−７とのバンクの全使用数がＲＡＭ２０６のバンクの使用数以下の場合に、対象スレッド１５００をいずれのＣＰＵ２０１に割り当ててもアクセス競合が発生しない。そこで、割当部５０５は、選択部５０３から判断部５０４の処理に先立って、対象スレッド１５００をいずれかのＣＰＵ２０１に割り当てる。また、各スレッドのＲＡＭ２０６のバンクの使用数が図１５中のスレッドの括弧（  ）内に記述されている。
【０１０９】
まず、たとえば、割当部５０５が、特定部５０１により特定された対象スレッド１５００のバンクの使用数と、各ＣＰＵ２０１に割当済のスレッドのバンクの使用数と、の合計値を算出する。つぎに、たとえば、割当部５０５が、算出した合計値がＲＡＭ２０６のバンク数ｍ以下であるか否かを判断する。図１５の例では、全使用バンク数が９である。そして、割当部５０５は、算出した合計値がＲＡＭ２０６のバンク数ｍ以下であると判断した場合、検出部５０２と判断部５０４の処理を行わずに、対象スレッド１５００をいずれかのＣＰＵ２０１に割り当てる。
【０１１０】
（実施例５にかかるマスタＯＳが行う処理手順）
図１６および図１７は、実施例５にかかるマスタＯＳが行う処理手順を示すフローチャートである。まず、マスタＯＳが、スレッドの起動指示を受け付けたか否かを判断する（ステップＳ１６０１）。マスタＯＳが、スレッドの起動指示を受け付けていないと判断した場合（ステップＳ１６０１：Ｎｏ）、ステップＳ１６０１へ戻る。
【０１１１】
マスタＯＳが、スレッドの起動指示を受け付けたと判断した場合（ステップＳ１６０１：Ｙｅｓ）、特定部５０１により、ＣＰＵ２０１ごとに割当済のスレッドのバンクの使用数を特定する（ステップＳ１６０２）。そして、マスタＯＳが、特定部５０１により、起動指示を受け付けたスレッド（対象スレッド）のバンクの使用数ｃを特定する（ステップＳ１６０３）。マスタＯＳが、割当部５０５により、全使用バンク数＝割当済のスレッドのバンクの使用数＋対象スレッドのバンクの使用数ｃを算出し（ステップＳ１６０４）、算出した全使用バンク数≦ＲＡＭ２０６のバンク数ｍであるか否かを判断する（ステップＳ１６０５）。
【０１１２】
マスタＯＳが、全使用バンク数≦ＲＡＭ２０６のバンク数ｍであると判断した場合（ステップＳ１６０５：Ｙｅｓ）、ＣＰＵ２０１ごとに割当済のスレッドの処理時間の合計値を算出する（ステップＳ１６０６）。マスタＯＳが、ＣＰＵ２０１の中で、算出した合計値が最小のＣＰＵ２０１に対象スレッドを割り当て（ステップＳ１６０７）、ステップＳ１６０１へ戻る。
【０１１３】
マスタＯＳが、全使用バンク数≦ＲＡＭ２０６のバンク数ｍでないと判断した場合（ステップＳ１６０５：Ｎｏ）、検出部５０２により、特定したバンクの使用数から、最大値Ｂ（１〜ｎ）をＣＰＵ２０１ごとに検出する（ステップＳ１６０８）。
【０１１４】
つぎに、マスタＯＳが、選択部５０３により、ｉ＝１とし（ステップＳ１６０９）、選択部５０３により、ｉ≦ＣＰＵ数であるか否かを判断する（ステップＳ１６１０）。マスタＯＳが、ｉ≦ＣＰＵ数であると判断した場合（ステップＳ１６１０：Ｙｅｓ）、ｉ番目のＣＰＵ２０１を選択する（ステップＳ１６１１）。マスタＯＳが、ｉ番目のＣＰＵ２０１の最大値Ｂｉと対象スレッドの使用バンク数ｃのうち、大きい値（ＭＡＸ（Ｂｉ，ｃ））を選択する（ステップＳ１６１２）。
【０１１５】
そして、マスタＯＳが、ＳＵＭｉ＝ΣＢ１，・・・，ＭＡＸ（Ｂｉ，ｃ），・・・，Ｂｎを算出し（ステップＳ１６１３）、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍであるか否かを判断する（ステップＳ１６１４）。マスタＯＳが、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍであると判断した場合（ステップＳ１６１４：Ｙｅｓ）、ｉ番目のＣＰＵ２０１を割当先候補として検出し（ステップＳ１６１５）、ｉ＝ｉ＋１とし（ステップＳ１６１６）、ステップＳ１６１０へ戻る。マスタＯＳが、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍでないと判断した場合（ステップＳ１６１４：Ｎｏ）、ステップＳ１６１６へ移行する。
【０１１６】
ステップＳ１６１０において、マスタＯＳが、ｉ≦ＣＰＵ数でないと判断した場合（ステップＳ１６１０：Ｎｏ）、検出したＣＰＵ２０１ごとに割当済のスレッドの処理時間の合計値を算出する（ステップＳ１６１７）。そして、マスタＯＳが、検出したＣＰＵ２０１の中で、算出した合計値が最小のＣＰＵ２０１に対象スレッドを割り当て（ステップＳ１６１８）、ステップＳ１６０１へ移行する。図示していないが、マスタＯＳは、割当結果を割当テーブル４００に出力する。
【０１１７】
実施例５によれば、どのスレッドの組み合わせで並列処理されても、バンク数不足に陥ることがないため、割当処理の高速化を図ることができる。
【０１１８】
（実施例６）
つぎに、実施例６について説明する。実行されるスレッドによっては、アクセス先となる共有資源へのアクセス頻度が異なったりする場合がある。このように性質が異なるスレッドに対して一律に割り当て処理を行うと、スレッドの性質に合致しない割り当てがなされ、バンク不足によるアクセス競合が発生する場合がある。このため、実施例６では、事前にスレッドを種類ごとに分類し、分類されたスレッド群で割り当てを行うことで、スレッドの性質に応じて、アクセス競合の発生による性能劣化の低減を図る。
【０１１９】
実施例６では、スレッドをＡ〜Ｃに分類している。Ｃに分類されたスレッドは、たとえば、図２示すＲＡＭ２０６へのアクセスに関する第１の条件に分類されたスレッドである。ここで、第１の条件とは、たとえば、ＲＡＭ２０６へのアクセス頻度が高いか否かに関する条件である。Ｂに分類されたスレッドは、たとえば、第１の条件を満たさず、図２に示す２次キャッシュ２０２へのアクセスに関する第２の条件に分類されたスレッドである。ここで、第２の条件とは、たとえば、２次キャッシュ２０２へのアクセス頻度が高いか否かである。Ａに分類されたスレッドは、たとえば、１次キャッシュ２６１へのアクセスが多いスレッドであり、第１の条件と第２の条件を満たさないスレッドである。
【０１２０】
また、Ｃに分類されたスレッドは、ＲＡＭ２０６へのアクセス頻度が高いので、２次キャッシュ２０２や１次キャッシュ２６１１へのアクセス頻度も高い。Ｂに分類されたスレッドは、ＲＡＭ２０６へのアクセス頻度は低いが、２次キャッシュ２０２へのアクセス頻度が高いので、１次キャッシュ２６１１へのアクセス頻度も高い。
【０１２１】
ここで、各スレッドのＡ〜Ｃへの分類について説明する。マルチコアプロセッサシステム２００の２次キャッシュ２０２の容量、ＲＡＭ２０６の容量、２次キャッシュ２０２のバンク数ｌ、ＲＡＭ２０６のバンク数ｍ、それぞれのバンクサイズがあらかじめわかっていることとする。マルチコアプロセッサシステム２００のモデルを用いて、各スレッドのメモリアクセス領域がシミュレーションツールによって計測されることにより、各スレッドのバンクの使用量が算出される。また、スレッドのバンクの使用量は、各スレッドの実行中に算出された値でもよい。これにより、各スレッドの設計者が、算出されたバンクの使用量に基づいてスレッドをＡ〜Ｃのいずれかに分類する。たとえば、第１の条件とは、ＲＡＭ２０６へのアクセス頻度が数百回以上であり、ＲＡＭ２０６のバンクの使用数が２以上であるが挙げられる。たとえば、第２の条件は、第１の条件を満たさないが、２次キャッシュ２０２へのアクセス頻度が数百回以上であり、２次キャッシュ２０２のバンクの使用数が２以上であるなどが挙げられる。また、スレッドのバンクの使用量と同時に各スレッドの処理時に要した処理時間が計測されてもよい。
【０１２２】
（実施例６にかかるスレッドテーブル）
図１８は、実施例６にかかるスレッドテーブルの一例を示す説明図である。スレッドテーブル１８００は、スレッドＩＤ、分類、処理時間、使用数１、使用数２のフィールドを有している。各フィールドに値が設定されることで、スレッド情報（たとえば、１８０１−１）がレコードとして記憶される。
【０１２３】
スレッドＩＤのフィールドには、スレッドの識別情報が登録される。分類のフィールドには、各スレッドがＡ〜Ｃのうちのいずれに分類されているかが登録されている。処理時間のフィールドには、各スレッドの処理時間が登録される。使用数１のフィールドには、ＲＡＭ２０６の複数のバンクのうちのスレッドが使用するバンクの使用数が登録される。使用数２のフィールドには、２次キャッシュ２０２の複数のバンクのうちのスレッドが使用するバンクの使用数が登録される。スレッドテーブル１８００については、たとえば、フラッシュＲＯＭ２０８に記憶されていることとする。
【０１２４】
図１９は、対象スレッドがＡに分類されている場合の例を示す説明図である。まず、分類判断部５０６が、対象スレッド１９００の分類を特定する。たとえば、分類判断部５０６は、スレッドテーブル１８００から、対象スレッド１９００の識別情報に基づいて対象スレッド１９００に関するスレッド情報の分類のフィールドに登録されている情報を特定する。図１９では、対象スレッド１９００は、Ａに分類されていることが示されている。
【０１２５】
割当部５０５は、分類判断部５０６により対象スレッド１９００の分類がＡであると判断された場合、特定部５０１と検出部５０２と判断部５０４との処理を行わずに、マルチコアプロセッサからいずれのスレッドも割り当てられていないＣＰＵ２０１を特定する。そして、割当部５０５は、特定したＣＰＵ２０１に対象スレッド１９００を割り当てる。
【０１２６】
たとえば、割当部５０５は、対象スレッド１９００の分類がＡである場合、各ＣＰＵ２０１の識別情報に基づいて割当テーブル４００を参照することにより、いずれのスレッドも割り当てられていないＣＰＵ２０１を特定する。そして、たとえば、割当部５０５は、特定したＣＰＵ２０１に対象スレッド１９００を割り当てる。図１９の例では、割当部５０５は、ＣＰＵ２０１−４をいずれのスレッドも割り当てられていないＣＰＵ２０１として特定し、対象スレッド１９００をＣＰＵ２０１―４に割り当てる。
【０１２７】
図１９の例では、対象スレッド１９００のアクセス頻度は低い。そのため、割当部５０５がいずれのスレッドも割り当てられていないＣＰＵ２０１−４に対象スレッド１９００を割り当てても、割当済のスレッド１９０１からＲＡＭ２０６や２次キャッシュ２０２へのアクセスに対する影響が低い。そして、対象スレッド１９００がいずれのスレッドも割り当てられていないＣＰＵ２０１−４に割り当てられることで、ＣＰＵ２０１−４では他のスレッドとの切り替え処理がない。そのため、ＣＰＵ２０１−４の１次キャッシュ２６１には対象スレッド１９００に関するデータを多く記憶させることができるため、対象スレッド１９００のキャッシュヒット率を向上させることができる。
【０１２８】
図２０は、対象スレッドがＣに分類されている場合の例を示す説明図である。分類判断部５０６が、対象スレッド２０００の分類を特定する。たとえば、分類判断部５０６は、スレッドテーブル１８００から、対象スレッド２０００の識別情報に基づいて対象スレッド２０００に関するスレッド情報の分類のフィールドに登録されている情報を特定する。
【０１２９】
特定部５０１が、分類判断部５０６により対象スレッド２０００がＣに分類されていると判断された場合、スレッドテーブル１８００から、対象スレッド２０００のＲＡＭ２０６のバンクの使用数を特定する。さらに、特定部５０１が、割当済のスレッド２００１のＲＡＭ２０６のバンクの使用数を特定する。各スレッドのＲＡＭ２０６のバンクの使用数が図２０中のスレッドの括弧（  ）内に記述されている。
【０１３０】
また、検出部５０２、選択部５０３、判断部５０４、割当部５０５の処理については、実施例１〜５で説明した処理と同一であるため、ここでは、簡易的な例を挙げて説明する。図２０では、たとえば、選択部５０３が、割当先候補としてＣＰＵ２０１−１を選択する。総和ＳＵＭ１（点線枠で囲われたスレッドのＲＡＭ２０６の総バンク使用数）が１０であり、判断部５０４は、ＳＵＭ１がＲＡＭ２０６のバンク数ｍ以下であると判断する。そして、割当部５０５は、対象スレッド２０００をＣＰＵ２０１−１に割り当てる。
【０１３１】
図２１は、対象スレッドがＢに分類されている場合の例１を示す説明図である。図２１の例１では、対象スレッド２１００の分類がＢであり、かつ割当済のスレッド２１０１の分類がすべてＢの場合について説明する。分類判断部５０６が、対象スレッド２１００の分類を特定する。たとえば、分類判断部５０６は、スレッドテーブル１８００から、対象スレッド２１００の識別情報に基づいて対象スレッド２１００に関するスレッド情報の分類のフィールドに登録されている情報を特定する。そして、分類判断部５０６は、対象スレッド２１００の分類がＢであると判断した場合、割当済のスレッド２１０１の分類を特定する。たとえば、分類判断部５０６は、スレッドテーブル１８００から、割当済のスレッド２１０１の識別情報に基づいて割当済のスレッド２１０１に関するスレッド情報の分類のフィールドに設定されている情報を特定する。
【０１３２】
特定部５０１が、分類判断部５０６により対象スレッド２１００の分類がＢであり、かつ割当済のスレッド２１０１の中に分類がＣのスレッドがないと判断された場合、対象スレッド２１００の２次キャッシュ２０２のバンクの使用数を特定する。さらに、特定部５０１が、割当済のスレッド２１０１の２次キャッシュ２０２のバンクの使用数を特定する。２次キャッシュ２０２のバンクの使用数が図２１中のスレッドの括弧（  ）内に記述されている。
【０１３３】
また、検出部５０２、選択部５０３、判断部５０４、割当部５０５の処理については、実施例１〜５で説明した処理と同一であるため、ここでは、簡易的な例を挙げて説明する。図２１では、選択部５０３が、たとえば、割当先候補としてＣＰＵ２０１−１を選択する。総和ＳＵＭ１（点線枠で囲われたスレッドの２次キャッシュ２０２の総バンク使用数）が１０であり、判断部５０４は、たとえば、ＳＵＭ１が２次キャッシュ２０２のバンク数ｌ以下であると判断する。そして、割当部５０５は、たとえば、対象スレッド２１００をＣＰＵ２０１−１に割り当てる。
【０１３４】
図２２は、対象スレッドがＢに分類されている場合の例２を示す説明図である。図２２の例２では、対象スレッド２２００の分類がＢであっても、割当済のスレッド２２０１の中に、分類がＣのスレッドがある場合について説明する。分類がＣであるスレッドと分類がＢであるスレッドが並列実行された場合に、ＲＡＭ２０６のバンク不足が発生すると、ＲＡＭ２０６は２次キャッシュ２０２より容量が大きいため、２次キャッシュ２０２のバンク不足も発生する。よって、図２２の例２では、対象スレッド２２００の分類がＢであっても、ＲＡＭ２０６のバンク不足が発生しないように対象スレッド２２００を割り当てることとする。
【０１３５】
たとえば、分類判断部５０６は、スレッドテーブル１８００から、対象スレッド２２００の識別情報に基づいて対象スレッド２２００に関するスレッド情報の分類のフィールドに登録されている情報を特定する。そして、分類判断部５０６は、対象スレッド２２００の分類がＢであると判断した場合、割当済のスレッド２２０１の分類を特定する。たとえば、分類判断部５０６は、スレッドテーブル１８００から、割当済のスレッド２２０１の識別情報に基づいて割当済のスレッド２２０１に関するスレッド情報の分類のフィールドに設定されている情報を特定する。
【０１３６】
つぎに、たとえば、特定部５０１が、対象スレッド２２００の分類がＢであっても、割当済のスレッド２２０１の中にＣに分類されているスレッドがある場合、スレッドテーブル１８００から対象スレッド２２００のＲＡＭ２０６のバンクの使用数を特定する。
【０１３７】
そして、特定部５０１が、スレッドテーブル１８００から割当済のスレッド２２０１のＲＡＭ２０６のバンクの使用数を特定する。各スレッドの２次キャッシュ２０２のバンクの使用数が図２２中のスレッドの括弧（  ）内に記述されている。
【０１３８】
また、検出部５０２、選択部５０３、判断部５０４、割当部５０５の処理については、実施例１〜５で説明した処理と同一であるため、ここでは、簡易的な例を挙げて説明する。図２２では、選択部５０３が、たとえば、割当先候補としてＣＰＵ２０１−４を選択する。総和ＳＵＭ４（点線枠で囲われたスレッドのＲＡＭ２０６の総バンク使用数）が１０であり、判断部５０４は、たとえば、ＳＵＭ４がＲＡＭ２０６のバンク数ｍ以下であると判断する。そして、割当部５０５は、たとえば、対象スレッド２２００をＣＰＵ２０１−４に割り当てる。
【０１３９】
また、図示していないが、対象スレッドの分類がＢ，Ｃの場合に、割当済のスレッドの中の分類がＡであるスレッドについては、共有資源へのアクセス頻度が低いため、特定部５０１による共有資源の使用バンク数の特定対象となるスレッドから除外してもよい。
【０１４０】
（実施例６にかかるマスタＯＳが行う処理手順）
図２３は、実施例６にかかるマスタＯＳが行う処理手順の一例を示すフローチャートである。まず、マスタＯＳが、スレッドの起動指示を受け付けたか否かを判断する（ステップＳ２３０１）。マスタＯＳが、スレッドの起動指示を受け付けていないと判断した場合（ステップＳ２３０１：Ｎｏ）、ステップＳ２３０１へ戻る。
【０１４１】
マスタＯＳが、スレッドの起動指示を受け付けたと判断した場合（ステップＳ２３０１：Ｙｅｓ）、各ＣＰＵ２０１で実行中のスレッドおよび実行待機中のスレッドと起動指示を受け付けたスレッドを割当未決定キューへ分類順に登録する（ステップＳ２３０２）。これにより、実行中のスレッドや実行待機中のスレッドであっても、マスタＯＳが再割り当てすることができる。
【０１４２】
そして、マスタＯＳが、割当未決定キューに登録された分類がＣのスレッドのＲＡＭ２０６のバンクの使用数を特定し、割当未決定キューに登録された分類がＣのスレッドをＲＡＭ２０６のバンクの使用数順にソートする（ステップＳ２３０３）。これにより、ＲＡＭ２０６のバンクの使用数が大きいスレッドの割当先ＣＰＵを先に決定することができる。
【０１４３】
そして、マスタＯＳが、割当未決定キューに登録された分類がＢのスレッドの２次キャッシュ２０２のバンクの使用数を特定し、割当未決定キューに登録された分類がＢのスレッドを２次キャッシュ２０２のバンクの使用数順にソートする（ステップＳ２３０４）。これにより、２次キャッシュ２０２のバンクの使用数が大きいスレッドの割当先ＣＰＵを先に決定することができる。
【０１４４】
そして、マスタＯＳが、割当未決定キューが空か否かを判断し（ステップＳ２３０５）、割当未決定キューが空であると判断した場合（ステップＳ２３０５：Ｙｅｓ）、ステップＳ２３０１へ戻る。マスタＯＳが、割当未決定キューが空でないと判断した場合（ステップＳ２３０５：Ｎｏ）、割当未決定キューの先頭からスレッドを取り出す（ステップＳ２３０６）。
【０１４５】
そして、マスタＯＳが、取り出されたスレッドの分類は何か判断する（ステップＳ２３０７）。マスタＯＳが、取り出されたスレッドの分類がＡであると判断した場合（ステップＳ２３０７：Ａ）、Ａの割当処理を実行し（ステップＳ２３０８）、ステップＳ２３０５へ戻る。
【０１４６】
マスタＯＳが、取り出されたスレッドの分類がＢであると判断した場合（ステップＳ２３０７：Ｂ）、割当済のスレッドのうち、分類がＣのスレッドがあるか否かを判断する（ステップＳ２３０９）。マスタＯＳが、割当済のスレッドのうち、分類がＣのスレッドがないと判断した場合（ステップＳ２３０９：Ｎｏ）、Ｂの割当処理を実行し（ステップＳ２３１０）、ステップＳ２３０５へ戻る。
【０１４７】
ステップＳ２３０７において、マスタＯＳが、取り出されたスレッドの分類がＣの場合（ステップＳ２３０７：Ｃ）、ステップＳ２３１１へ移行する。ステップＳ２３０９において、マスタＯＳが、割当済のスレッドのうち、分類がＣのスレッドがあると判断した場合（ステップＳ２３０９：Ｙｅｓ）、ステップＳ２３１１へ移行する。ステップＳ２３０７のＣの場合またはステップＳ２３０９のＹｅｓの場合のつぎに、マスタＯＳが、Ｃの割当処理を実行し（ステップＳ２３１１）、ステップＳ２３０５へ戻る。
【０１４８】
図２４は、図２３で示したＡの割当処理（ステップＳ２３０８）の詳細な説明を示すフローチャートである。まず、マスタＯＳが、いずれのスレッドも割り当てられていないＣＰＵ２０１を検出し（ステップＳ２４０１）、検出したか否かを判断する（ステップＳ２４０２）。
【０１４９】
マスタＯＳが、いずれのスレッドも割り当てられていないＣＰＵ２０１を検出したと判断した場合（ステップＳ２４０２：Ｙｅｓ）、検出したＣＰＵ２０１に取り出されたスレッドを割り当て（ステップＳ２４０３）、Ｓ２３０５へ戻る。
【０１５０】
マスタＯＳが、いずれのスレッドも割り当てられていないＣＰＵ２０１を検出していないと判断した場合（ステップＳ２４０２：Ｎｏ）、ＣＰＵ２０１ごとに割当済のスレッドの処理時間の合計値を算出する（ステップＳ２４０４）。そして、マスタＯＳが、算出した合計値が最小のＣＰＵ２０１に取り出されたスレッドを割り当て（ステップＳ２４０５）、ステップＳ２３０５へ移行する。そして、図示していないが、マスタＯＳが割当結果を割当テーブル４００に出力する。また、取り出されたスレッドが実行中または実行待機状態のスレッドであり、割当先が変更されれば、マスタＯＳはマイグレーションを行う。
【０１５１】
図２５は、図２３で示したＢの割当処理（ステップＳ２３１０）の詳細な処理手順を示すフローチャートである。マスタＯＳが、特定部５０１により、ＣＰＵ２０１ごとに割当済のスレッドの２次キャッシュ２０２のバンクの使用数を特定する（ステップＳ２５０１）。そして、マスタＯＳが、特定部５０１により、取り出されたスレッド（対象スレッド）の２次キャッシュ２０２のバンクの使用数ｃを特定し（ステップＳ２５０２）、検出部５０２により、特定したバンクの使用数から、最大値Ｂ（１〜ｎ）をＣＰＵ２０１ごとに検出する（ステップＳ２５０３）。
【０１５２】
つぎに、マスタＯＳが、選択部５０３により、ｉ＝１とし（ステップＳ２５０４）、選択部５０３により、ｉ≦ＣＰＵ数であるか否かを判断する（ステップＳ２５０５）。マスタＯＳが、ｉ≦ＣＰＵ数であると判断した場合（ステップＳ２５０５：Ｙｅｓ）、ｉ番目のＣＰＵ２０１を選択する（ステップＳ２５０６）。マスタＯＳが、ｉ番目のＣＰＵ２０１の最大値Ｂｉと対象スレッドの２次キャッシュ２０２の使用バンク数ｃのうち、大きい値（ＭＡＸ（Ｂｉ，ｃ））を選択する（ステップＳ２５０７）。
【０１５３】
そして、マスタＯＳが、ＳＵＭｉ＝ΣＢ１，・・・，ＭＡＸ（Ｂｉ，ｃ），・・・，Ｂｎを算出し（ステップＳ２５０８）、ＳＵＭｉ≦２次キャッシュ２０２のバンク数ｌであるか否かを判断する（ステップＳ２５０９）。マスタＯＳが、総和ＳＵＭｉ≦２次キャッシュ２０２のバンク数ｌであると判断した場合（ステップＳ２５０９：Ｙｅｓ）、ｉ番目のＣＰＵ２０１を割当先候補として検出し（ステップＳ２５１０）、ｉ＝ｉ＋１とし（ステップＳ２５１１）、ステップＳ２５０５へ戻る。マスタＯＳが、総和ＳＵＭｉ≦２次キャッシュ２０２のバンク数ｌでないと判断した場合（ステップＳ２５０９：Ｎｏ）、ステップＳ２５１１へ移行する。
【０１５４】
ステップＳ２５０５において、マスタＯＳが、ｉ≦ＣＰＵ数でないと判断した場合（ステップＳ２５０５：Ｎｏ）、検出したＣＰＵ２０１ごとに割当済のスレッドの処理時間の合計値を算出する（ステップＳ２５１２）。そして、マスタＯＳが、検出したＣＰＵ２０１の中で、算出した合計値が最小のＣＰＵ２０１に対象スレッドを割り当て（ステップＳ２５１３）、ステップＳ２３０５へ移行する。そして、図示していないが、マスタＯＳが割当結果を割当テーブル４００に出力する。また、対象スレッドが実行中または実行待機状態のスレッドであり、割当先が変更されれば、マスタＯＳはマイグレーションを行う。
【０１５５】
図２６は、図２３で示したＣの割当処理（ステップＳ２３１１）の詳細な処理手順を示すフローチャートである。マスタＯＳが、特定部５０１により、ＣＰＵ２０１ごとに割当済のスレッドのＲＡＭ２０６のバンクの使用数を特定する（ステップＳ２６０１）。そして、マスタＯＳが、特定部５０１により、取り出されたスレッド（対象スレッド）のＲＡＭ２０６のバンクの使用数ｃを特定し（ステップＳ２６０２）、検出部５０２により、特定したバンクの使用数から、最大値Ｂ（１〜ｎ）をＣＰＵ２０１ごとに検出する（ステップＳ２６０３）。
【０１５６】
つぎに、マスタＯＳが、選択部５０３により、ｉ＝１とし（ステップＳ２６０４）、選択部５０３により、ｉ≦ＣＰＵ数であるか否かを判断する（ステップＳ２６０５）。マスタＯＳが、ｉ≦ＣＰＵ数であると判断した場合（ステップＳ２６０５：Ｙｅｓ）、ｉ番目のＣＰＵ２０１を選択する（ステップＳ２６０６）。マスタＯＳが、ｉ番目のＣＰＵ２０１の最大値Ｂｉと対象スレッドのＲＡＭ２０６の使用バンク数ｃのうち、大きい値（ＭＡＸ（Ｂｉ，ｃ））を選択する（ステップＳ２６０７）。
【０１５７】
そして、マスタＯＳが、ＳＵＭｉ＝ΣＢ１，・・・，ＭＡＸ（Ｂｉ，ｃ），・・・，Ｂｎを算出し（ステップＳ２６０８）、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍであるか否かを判断する（ステップＳ２６０９）。マスタＯＳが、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍであると判断した場合（ステップＳ２６０９：Ｙｅｓ）、ｉ番目のＣＰＵ２０１を割当先候補として検出し（ステップＳ２６１０）、ｉ＝ｉ＋１とし（ステップＳ２６１１）、ステップＳ２６０５へ戻る。マスタＯＳが、総和ＳＵＭｉ≦ＲＡＭ２０６のバンク数ｍでないと判断した場合（ステップＳ２６０９：Ｎｏ）、ステップＳ２６１１へ移行する。
【０１５８】
ステップＳ２６０５において、マスタＯＳが、ｉ≦ＣＰＵ数でないと判断した場合（ステップＳ２６０５：Ｎｏ）、検出したＣＰＵ２０１ごとに割当済のスレッドの処理時間の合計値を算出する（ステップＳ２６１２）。そして、マスタＯＳが、検出したＣＰＵ２０１の中で、算出した合計値が最小のＣＰＵ２０１に対象スレッドを割り当て（ステップＳ２６１３）、ステップＳ２３０５へ移行する。そして、図示していないが、マスタＯＳが割当結果を割当テーブル４００に出力する。また、対象スレッドが実行中または実行待機状態のスレッドであり、割当先が変更されれば、マスタＯＳはマイグレーションを行う。
【０１５９】
実施例６によれば、事前にスレッドを種類ごとに分類し、分類されたスレッド群で割り当てを行うことで、スレッドの性質に応じて、アクセス競合の発生による性能劣化の低減を図ることができる。
【０１６０】
（実施例７）
つぎに、実施例７について説明する。アクセス競合を重視してスレッドを割り当てると、各スレッドの割り当て状態によっては、アクセス競合を無視してスレッドを割り当てた場合よりもスレッドの処理時間が長くなってしまう場合がある。このため、実施例７では、アクセス競合が発生しないように割り当てる第１のスケジューリングと、第１のスケジューリングと異なる第２のスケジューリングと、のうち、いずれのスケジューリングが最適かを判断する。これにより、第１のスケジューリングが選択された場合は、アクセス競合による対象スレッドの性能劣化の低減を図ることができる。第２のスケジューリングが選択された場合は、同一のＣＰＵ２０１に割り当てられたスレッドによる対象スレッドの性能劣化の低減を図ることができる。
【０１６１】
ここで、実施例７では、第２のスケジューリングの一例として、負荷分散によるスケジューリングを挙げる。ｎ＝２とし、ｌ＝２とし、ｍ＝３とする。
【０１６２】
（実施例７にかかるスレッドテーブル）
図２７は、実施例７にかかるスレッドテーブルの一例を示す説明図である。スレッドテーブル２７００は、スレッドＩＤ、分類、処理時間、アクセス時間の割合、使用数１、使用数２のフィールドを有している。各フィールドに値が設定されることで、スレッド情報（たとえば、２７０１−１）がレコードとして記憶される。
【０１６３】
スレッドＩＤのフィールドには、スレッドの識別情報が登録される。分類のフィールドには、各スレッドがＡ〜Ｃのうちのいずれに分類されているかが登録されている。処理時間のフィールドには、各スレッドの処理時間が登録される。アクセス時間の割合のフィールドには、スレッドの処理時間のうち、ＲＡＭ２０６へのアクセスにかける時間の割合が登録される。アクセス時間の割合については、各スレッドの設計時にシミュレーションツールによりあらかじめ計測されていることとする。また、各スレッドのアクセス時間の割合は、各スレッドの実行時に計測されてもよい。実施例７では、アクセス時間の割合をＲＡＭ２０６と２次キャッシュ２０２とで共通の割合を用いているが、より正確にオーバーヘッドを見積もるために、２次キャッシュ２０２へのアクセスにかかる時間の割合もあらかじめ計測しておいてもよい。
【０１６４】
使用数１のフィールドには、ＲＡＭ２０６の複数のバンクのうちのスレッドが使用するバンクの使用数が登録される。使用数２のフィールドには、２次キャッシュ２０２の複数のバンクのうちのスレッドが使用するバンクの使用数が登録される。スレッドテーブル２７００については、たとえば、フラッシュＲＯＭ２０８に記憶されていることとする。
【０１６５】
（実施例７にかかる割当テーブル）
図２８は、実施例７にかかる割当テーブルの一例を示す説明図である。割当テーブル２８００は、ＣＰＵＩＤ、スレッドＩＤ、処理経過時間のフィールドを有している。各フィールドに値が設定されることで、スレッド情報（たとえば、２８０１−１）がレコードとして記憶される。
【０１６６】
ＣＰＵＩＤのフィールドには、ＣＰＵ２０１の識別情報が登録される。スレッドＩＤのフィールドには、各ＣＰＵ２０１に割り当てられたスレッドの識別情報が登録される。処理経過時間のフィールドには、実行中のスレッドの経過時間が登録される。割当テーブル２８００は、フラッシュＲＯＭ２０８に記憶されていることとする。
【０１６７】
（アクセス競合のオーバーヘッド情報）
図２９は、アクセス競合のオーバーヘッド情報の一例を示す説明図である。アクセス競合のオーバーヘッド情報２９００は、競合発生レイヤー、オーバーヘッド割合のフィールドを有している。各フィールドに値が設定されることにより、割合情報（たとえば、２９０１−１，２９０１−２）がレコードとして記憶される。
【０１６８】
競合発生レイヤーのフィールドには、２次キャッシュ２０２とＲＡＭ２０６が登録されている。オーバーヘッド割合のフィールドには、２次キャッシュ２０２でアクセスが競合した場合の処理時間の増加率ＲＬ２と、ＲＡＭ２０６でアクセスが競合した場合の処理時間の増加率ＲＭが登録されている。
【０１６９】
増加率ＲＭと増加率ＲＬ２については、各スレッドの設計時にシミュレーションツールによりあらかじめ計測されていることとする。たとえば、設計者がパターン１〜３のシミュレーションを行う。たとえば、パターン１では、スレッドの実行時に２次キャッシュ２０２およびＲＡＭ２０６でのアクセス競合を発生させない。たとえば、パターン２では、スレッドの実行時に常時２次キャッシュ２０２でアクセス競合を発生させる。たとえば、パターン３では、スレッドの実行時に常時ＲＡＭ２０６でアクセス競合を発生させる。そして、たとえば、設計者が、パターン１のシミュレーション結果とパターン２のシミュレーション結果を比較することにより、増加率ＲＬ２を決定する。たとえば、設計者が、パターン１のシミュレーション結果とパターン３のシミュレーション結果を比較することにより、増加率ＲＭを決定する。
【０１７０】
（実施例７にかかるＯＳ２２１の機能例を示すブロック図）
図３０は、実施例７にかかるＯＳ２２１の機能例を示すブロック図である。ここでは、実施例７にかかるＯＳ２２１−１の機能例を示すブロック図と、ＯＳ２２１−ｋ（ｋ＝１〜ｎ）の機能例を示すブロック図を挙げる。ＯＳ２２１−１は、第１のスケジューリング部３００１と、第２のスケジューリング部３００２と、切替部３００６と、第１の算出部３００３と、第２の算出部３００４と、比較部３００５と、を有している。ＯＳ２２１−ｋ（ｋ＝１〜ｎ）は、計測部３０２０−ｋを有している。
【０１７１】
第１のスケジューリング部３００１から比較部３００５の処理が、マスタＯＳであるＯＳ２２１−１にコーディングされている。ＣＰＵ２０１−１が、フラッシュＲＯＭ２０８に記憶されているＯＳ２２１−１を読み出し、ＯＳ２２１−１にコーディングされている処理を実行する。これにより、第１のスケジューリング部３００１から比較部３００５の機能が実現される。計測部３０２０−ｋの処理がＯＳ２２１−ｋにコーディングされており、ＣＰＵ２０１−ｋが、フラッシュＲＯＭ２０８に記憶されているＯＳ２２１−ｋを読み出し、ＯＳ２２１−ｋにコーディングされている処理を実行する。これにより、計測部３０２０−ｋの機能が実現される。以下、第１のスケジューリング部３００１から比較部３００５について図３１〜図３３を用いて詳細に説明する。
【０１７２】
図３１は、第１，２のスケジューリングによる割当例を示す説明図である。ここで、図３１では、ＣＰＵ２０１−１にスレッド３１０１が割り当てられ、ＣＰＵ２０１−２にスレッド３１０２が割り当てられている。そして、ウエイトキュー２５０にスレッド３１０３とスレッド３１０４が積まれることにより、ＯＳ２２１−１がスレッド３１０１とスレッド３１０４の起動指示を受け付ける。スレッド３１０１の分類はＢであり、スレッド３１０２の分類はＣであり、スレッド３１０３の分類はＣであり、スレッド３１０４の分類はＣである。
【０１７３】
第１のスケジューリング部３００１は、図５で示した特定部５０１〜分類判断部５０６を有していることとする。第１のスケジューリング部３００１については、実施例１〜６で説明した処理と同一であるとし詳細な説明を省略する。ここで、第１のスケジューリング部３００１による第１のスケジューリングでは、ＣＰＵ２０１−１にスレッド３１０１とスレッド３１０４が割り当てられ、ＣＰＵ２０１−２にスレッド３１０３とスレッド３１０２が割り当てられる。
【０１７４】
第２のスケジューリング部３００２は、第１のスケジューリング部３００１によるスケジューリングと異なる第２のスケジューリングを行う。ここでは、第２のスケジューリングの一例として、負荷分散によるスケジューリングを示す。たとえば、第２のスケジューリング部３００２は、起動指示を受け付けたスレッドと各ＣＰＵ２０１で実行中のスレッドおよび実行待機中のスレッドをすべて割当未決定キューに登録する。そして、第２のスケジューリング部３００２は、割当未決定キューに登録されているスレッドを処理時間または残処理時間の短い順に対象スレッドとして選択する。残処理時間とは、割当テーブル２８００に登録される処理経過時間とスレッドテーブル２７００に登録されている処理時間の差分値である。
【０１７５】
そして、たとえば、第２のスケジューリング部３００２は、算出部３０１１と割当部３０１２を有している。第２のスケジューリング部３００２の算出部３０１１は、第２のスケジューリング部３００２による割り当てにおいて、割当済のスレッドの処理時間または残処理時間の合計値をＣＰＵ２０１ごとに算出する。そして、第２のスケジューリング部３００２の割当部３０１２は算出部３０１１により算出された合計値が最小のＣＰＵ２０１に対象スレッドを割り当てる。第２のスケジューリング部３００２による第２のスケジューリングでは、ＣＰＵ２０１−１にスレッド３１０１とスレッド３１０２が割り当てられ、ＣＰＵ２０１−２にスレッド３１０４とスレッド３１０３が割り当てられる。
【０１７６】
また、たとえば、計測部３０２０−ｋ（ｋ＝１〜ｎ）は、スレッドのディスパッチが発生する都度、スレッドの実行開始時刻からのスレッドの処理経過時間を計測する。計測結果については、割当テーブル２８００の処理経過時間のフィールドに設定される。
【０１７７】
図３２は、算出の一の例を示す説明図である。第１の算出部３００３は、第１のスケジューリング部３００１による第１のスケジューリングにおいて、ＣＰＵ２０１ごとに割当済のスレッドの処理時間または残処理時間の合計値を算出する。残処理時間は、処理時間から計測部３０２０−ｋによって計測された処理経過時間を引いた値である。
【０１７８】
ここで、実行中であるスレッド３１０１とスレッド３１０２については、残処理時間と、２次キャッシュ２０２のバンクの使用数と、ＲＡＭ２０６のバンクの使用数と、の一例を挙げる。さらに、起動指示が発生したスレッド３１０３とスレッド３１０４については、処理時間と、２次キャッシュ２０２のバンクの使用数と、ＲＡＭ２０６のバンクの使用数と、の一例を挙げる。
【０１７９】
スレッド３１０１の残処理時間は１．８［ｍｓ］であり、スレッド３１０１の２次キャッシュ２０２のバンクの使用数は１であり、スレッド３１０１のＲＡＭ２０６のバンクの使用数は１である。
【０１８０】
スレッド３１０２の残処理時間は２［ｍｓ］であり、スレッド３１０２の２次キャッシュ２０２のバンクの使用数は２であり、スレッド３１０２のＲＡＭ２０６のバンクの使用数は２である。
【０１８１】
スレッド３１０３の処理時間は２［ｍｓ］であり、スレッド３１０３の２次キャッシュ２０２のバンクの使用数は２であり、スレッド３１０３のＲＡＭ２０６のバンクの使用数は２である。
【０１８２】
スレッド３１０４の処理時間は１．８［ｍｓ］であり、スレッド３１０４の２次キャッシュ２０２のバンクの使用数は２であり、スレッド３１０４のＲＡＭ２０６のバンクの使用数は１である。
【０１８３】
第１の算出部３００３は、第１のスケジューリング部３００１による第１のスケジューリングにおいて、ＣＰＵ２０１ごとに割当済のスレッドの処理時間または残処理時間の合計値を算出する。たとえば、ＣＰＵ２０１−１は、スレッド３１０１とスレッド３１０４が割り当てられているため、合計値は３．６［ｍｓ］である。ＣＰＵ２０１−２は、スレッド３１０３とスレッド３１０２が割り当てられているため、合計値は４［ｍｓ］である。そして、第１の算出部３００３は、算出した割当済のスレッドの処理時間または残処理時間の合計値のうち、最大値を第１の算出結果とする。
【０１８４】
第２の算出部３００４は、第２のスケジューリング部３００２による第２のスケジューリングにおいて、ＣＰＵ２０１ごとに割当済のスレッドの処理時間または残処理時間の合計値を算出する。たとえば、ＣＰＵ２０１−１は、スレッド３１０１とスレッド３１０２が割り当てられているため、合計値は３．８［ｍｓ］である。ＣＰＵ２０１−２は、スレッド３１０４とスレッド３１０３が割り当てられているため、合計値は３．８［ｍｓ］である。
【０１８５】
そして、たとえば、第２の算出部３００４は、ＲＡＭ２０６のアクセス競合によるオーバーヘッドと、２次キャッシュ２０２のアクセス競合によるオーバーヘッドを算出する。実施例７では、分類がＣのスレッド同士が並列実行される場合にＲＡＭ２０６のアクセス競合によるオーバーヘッドが算出される。そして、実施例７では、分類がＢのスレッド同士が並列実行される場合に２次キャッシュ２０２のアクセス競合によるオーバーヘッドが算出されることとする。
【０１８６】
たとえば、第２の算出部３００４は、並列実行されるスレッドを予測する。そして、たとえば、第２の算出部３００４は、予測された並列実行される複数のスレッドのＲＡＭ２０６のバンクの使用数の合計値がＲＡＭ２０６のバンク数ｍより大きければ、ＲＡＭ２０６での競合が発生すると判断する。どのようなスレッドの組み合わせで並列実行されるかについては、ここでは限定していないが、たとえば、割当順で決定してもよいし、ＲＡＭ２０６のバンクの使用数に応じて決定してもよい。そして、たとえば、第２の算出部３００４は、下記式（２）に基づいてオーバーヘッドＯｃｘを算出する。
【０１８７】
Ｏｃｘ（ｘ＝１〜ｎ）＝Σ（ＳＢｐｘ×Ａｐｘ×ＲＬ２）＋Σ（ＳＣｐｘ×Ａｐｘ×ＲＭ）・・・（２）
【０１８８】
Σ（ＳＢｐｘ×Ａｐｘ×ＲＬ２）は、２次キャッシュ２０２で競合すると判断された場合の２次キャッシュ２０２での競合によるオーバーヘッドの合計値である。ＳＢｐｘはＣＰＵ２０１−ｘに割り当てられ、並列処理によって２次キャッシュ２０２でアクセス競合が発生すると予測されたスレッドＢｐの処理時間（実行中のスレッドＢｐであれば残処理時間）である。Ａｐｘは、ＣＰＵ２０１−ｘで実行中のスレッドＢｐのアクセス時間の割合である。アクセス時間の割合は、スレッドテーブル２７００に登録されている。増加率ＲＬ２はアクセス競合のオーバーヘッド情報２９００に登録されている。
【０１８９】
Σ（ＳＣｐｘ×Ａｐｘ×ＲＭ）は、ＲＡＭ２０６で競合すると判断された場合のＲＡＭ２０６での競合によるオーバーヘッドの合計値である。ＳＣｐｘはＣＰＵ２０１−ｘに割り当てられ、並列処理によってＲＡＭ２０６でアクセス競合が発生すると予測されたスレッドＣｐの処理時間（実行中のスレッドＢｐであれば残処理時間）である。Ａｐｘは、ＣＰＵ２０１−ｘで実行中のスレッドＣｐのアクセス時間の割合である。アクセス時間の割合は、スレッドテーブル２７００に登録されている。増加率ＲＭはアクセス競合のオーバーヘッド情報２９００に登録されている。
【０１９０】
図３１の例では、スレッド３１０２とスレッド３１０３とのＲＡＭ２０６の総バンク使用数が４であり、ＲＡＭ２０６のバンク数ｍが３である。よって、第２の算出部３００４は、スレッド３１０２とスレッド３１０３とはＲＡＭ２０６へのアクセスが競合すると判断し、ＣＰＵ２０１ごとにアクセス競合によるオーバーヘッドを算出する。第２の算出部３００４は、式（２）に基づいて各ＣＰＵ２０１でのＲＡＭ２０６のアクセス競合によるオーバーヘッドを算出する。
【０１９１】
増加率ＲＭが０．３であり、スレッド３１０２のアクセス時間の割合Ａｐが０．７であり、スレッド３１０３のアクセス時間の割合Ａｐが０．７である。したがって、Ｏｃ１＝２［ｍｓ］×０．７×０．３＝０．４２となり、Ｏｃ２＝２［ｍｓ］×０．７×０．３＝０．４２となる。
【０１９２】
たとえば、第２の算出部３００４は、ＣＰＵ２０１−１の処理時間の合計値（３．８［ｍｓ］）にオーバーヘッドＯｃ１（０．４２［ｍｓ］）が加算され、ＣＰＵ２０１−２の処理時間の合計値（３．８［ｍｓ］）にオーバーヘッドＯｃ２（０．４２［ｍｓ］）が加算される。ＣＰＵ２０１−１の加算結果は４．２２［ｍｓ］であり、ＣＰＵ２０１−２の加算結果は４．２２［ｍｓ］である。
【０１９３】
第１の算出部３００３は、ＣＰＵ２０１ごとに算出された算出結果うちの最大値を第１の算出結果とし、第２の算出部３００４は、ＣＰＵ２０１ごとに算出された算出結果のうちの最大値を第２の算出結果とする。比較部３００５は、第１の算出結果と第２の算出結果との関係が所定条件を満たすか否かを判断する。たとえば、比較部３００５は、第１の算出結果が第２の算出結果未満であるか否かを判断する。
【０１９４】
切替部３００６は、比較部３００５による比較結果に応じて、第１のスケジューリングと第２のスケジューリングとを切り替える。たとえば、切替部３００６は、第１の算出結果が第２の算出結果未満であれば、第１のスケジューリング部３００１による第１のスケジューリングを行うように制御する。また、たとえば、切替部３００６は、第１の算出結果が第２の算出結果未満でなければ、第２のスケジューリング部３００２による第２のスケジューリングを行うように制御する。図３２の例では、第１の算出結果が４［ｍｓ］であり、第２の算出結果が４．２２［ｍｓ］であるため、切替部３００６は、第１のスケジューリング部３００１により第１のスケジューリングを行うように制御する。
【０１９５】
また、ここでは、第２の算出部３００４は、分類がＣの組み合わせでＲＡＭ２０６へのアクセスが競合すると判断された場合、２次キャッシュ２０２のアクセス競合のオーバーヘッドを算出しない。２次キャッシュ２０２のアクセス競合によるオーバーヘッドは、ＲＡＭ２０６のアクセス競合によるオーバーヘッドよりも小さいので、ここでは、割当処理の高速化のために算出しないこととしている。また、たとえば、第２の算出部３００４が、分類がＣの組み合わせでＲＡＭ２０６へのアクセスが競合すると判断されても、２次キャッシュ２０２のアクセス競合によるオーバーヘッドを算出することにより、より精度の高い処理時間を算出できる。
【０１９６】
図３３は、算出の他の例を示す説明図である。図３３では、増加率ＲＭが０．０５の場合を例に挙げて説明する。第１の算出部３００３による算出処理と、第２の算出部３００４による算出処理については、図３２で説明した処理と同一であるため、詳細な説明を省略する。
【０１９７】
増加率ＲＭが０．０５であり、スレッド３１０２のアクセス時間の割合Ａｐが０．７であり、スレッド３１０３のアクセス時間の割合Ａｐが０．７である。これにより、Ｏｃ１＝２［ｍｓ］×０．７×０．０５＝０．０７となり、Ｏｃ２＝２［ｍｓ］×０．７×０．０５＝０．０７となる。
【０１９８】
たとえば、第２の算出部３００４は、ＣＰＵ２０１−１の処理時間の合計値にオーバーヘッドＯｃ１を加算し、ＣＰＵ２０１−２の処理時間の合計値にオーバーヘッドＯｃ２を加算する。ＣＰＵ２０１−１の加算結果は３．８７［ｍｓ］であり、ＣＰＵ２０１−２の加算結果は３．８７［ｍｓ］である。
【０１９９】
図３３の例では、第１の算出結果が４［ｍｓ］であり、第２の算出結果が３．８７［ｍｓ］であり、第１の算出結果が第２の算出結果以上であるため、切替部３００６は、第２のスケジューリング部３００２により第２のスケジューリングを行うように制御する。
【０２００】
増加率ＲＭや増加率Ｒ２Ｌが大きいほど、アクセス競合によるオーバーヘッドの影響が大きくなる。さらに、スレッドの並列処理の組み合わせによってアクセス競合が発生するほど、オーバーヘッドが増加する。
【０２０１】
（実施例７にかかるマスタＯＳが行う処理手順）
図３４は、実施例７にかかるマスタＯＳが行う処理手順の一例を示すフローチャートである。まず、マスタＯＳが、スレッドの起動指示を受け付けたか否かを判断する（ステップＳ３４０１）。マスタＯＳが、スレッドの起動指示を受け付けていないと判断した場合（ステップＳ３４０１：Ｎｏ）、ステップＳ３４０１へ戻る。
【０２０２】
マスタＯＳが、スレッドの起動指示を受け付けたと判断した場合（ステップＳ３４０１：Ｙｅｓ）、第２のスケジューリング部３００２により、第２のスケジューリング処理を実行する（ステップＳ３４０２）。第２のスケジューリング処理を実行するが、ここでは、マスタＯＳが第２のスケジューリング処理による割当結果を反映させていない。そして、マスタＯＳが、第２の算出部３００４により、第２のスケジューリング処理で割り当てた場合における、ＣＰＵ２０１ごとに割当済のスレッドの処理時間の合計値を算出する（ステップＳ３４０３）。そして、マスタＯＳが、第２の算出部３００４により、ＣＰＵ２０１ごとにオーバーヘッドＯｃを算出する（ステップＳ３４０４）。そして、マスタＯＳが、第２の算出部３００４により、ＣＰＵ２０１ごとに算出した合計値にオーバーヘッドＯｃを加算（加算結果がＴＬｘ）する（ステップＳ３４０５）。
【０２０３】
つぎに、マスタＯＳが、第１のスケジューリング部３００１により、第１のスケジューリング処理を実行する（ステップＳ３４０６）。第１のスケジューリング処理については、実施例１〜６で説明した例と同一であるため、ここでは、詳細な説明を省略する。また、第１のスケジューリング処理を実行するが、ここでは、マスタＯＳが第１のスケジューリング処理による割当結果を反映させていない。そして、マスタＯＳが、第１の算出部３００３により、第１のスケジューリング処理で割り当てた場合における、ＣＰＵ２０１ごとに割当済のスレッドの処理時間の合計値を算出（算出結果がＴｃｘ）する（ステップＳ３４０７）。
【０２０４】
つぎに、マスタＯＳが、比較部３００５により、ＭＡＸ（ＴＬｘ）≦ＭＡＸ（Ｔｃｘ）であるか否かを判断する（ステップＳ３４０８）。ＭＡＸ（Ｔｃｘ）は、ＣＰＵ２０１ごとに算出された合計値の（ＴＬｘ）の中の最大値である。ＭＡＸ（ＴＬｘ）は、ＣＰＵ２０１ごとに算出された合計値（Ｔｃｘ）の中の最大値である。
【０２０５】
ここでは、ＭＡＸ（ＴＬｘ）とＭＡＸ（Ｔｃｘ）が同一値の場合、第２のスケジューリング処理を行うようにしているが、第１のスケジューリング処理を行うようにしてもよい。また、第１のスケジューリング処理で実行中のスレッドや実行待機状態のスレッドの再割り当てを行い、第２のスケジューリング処理で再割り当てを行わない場合には、ＭＡＸ（ＴＬｘ）とＭＡＸ（Ｔｃｘ）が同一値であれば第２のスケジューリング処理を行う。第２のスケジューリングで再割り当てが行われなければ、マスタＯＳが再割り当てによる割当テーブル４００の書き換えを行う時間を短縮することができる。たとえば、第１のスケジューリング処理で実行中のスレッドや実行待機状態のスレッドの再割り当てを行わず、第２のスケジューリング処理で再割り当てを行う場合には、ＭＡＸ（ＴＬｘ）とＭＡＸ（Ｔｃｘ）が同一値であれば第１のスケジューリング処理を行うこととする。
【０２０６】
そして、マスタＯＳが、ＭＡＸ（ＴＬｘ）≦ＭＡＸ（Ｔｃｘ）であると判断した場合（ステップＳ３４０８：Ｙｅｓ）、切替部３００６により、第２のスケジューリング処理による割り当て結果に基づき、割り当て（ステップＳ３４０９）、一連の処理を終了する。第２のスケジューリング処理による割り当てでは、起動指示を受け付けたスレッドの割り当てだけでなく、実行中のスレッドが再割り当てされるため、実行中のスレッドを移行させる処理も発生する。また、マスタＯＳが、割当結果に沿って、割当テーブル２８００を更新する。
【０２０７】
また、マスタＯＳが、ＭＡＸ（ＴＬｘ）≦ＭＡＸ（Ｔｃｘ）でないと判断した場合（ステップＳ３４０８：Ｎｏ）、切替部３００６により、第１のスケジューリング処理による割り当て結果に基づき、割り当て（ステップＳ３４１０）、一連の処理を終了する。第１のスケジューリング処理による割り当てでは、起動指示を受け付けたスレッドの割り当てだけでなく、実行中のスレッドが再割り当てされるため、実行中のスレッドを移行させる処理も発生する。また、マスタＯＳが、割当結果に沿って、割当テーブル２８００を更新する。
【０２０８】
図３５は、図３４で示した第２のスケジューリング処理（ステップＳ３４０２）の詳細な説明を示すフローチャートである。マスタＯＳが、実行中、およびウエイトキュー２５０に存在するスレッドを割当未決定キューに入れる（ステップＳ３５０１）、割当未決定キューが空か否かを判断する（ステップＳ３５０２）。これにより、実行中のスレッドや実行待機中のスレッドであっても、マスタＯＳが再割り当てすることができる。マスタＯＳが、割当未決定キューが空であると判断した場合（ステップＳ３５０２：Ｙｅｓ）、ステップＳ３４０３へ戻る。
【０２０９】
マスタＯＳが、割当未決定キューが空でないと判断した場合（ステップＳ３５０２：Ｎｏ）、割当未決定キューからスレッドを取り出す（ステップＳ３５０３）。マスタＯＳが、ＣＰＵ２０１ごとに割り当て決定済のスレッドの処理時間の合計値を算出する（ステップＳ３５０４）、処理時間の合計値が最も小さいＣＰＵ２０１を取り出されたスレッドの割当先ＣＰＵに決定し（ステップＳ３５０５）、ステップＳ３５０１へ戻る。
【０２１０】
実施例７によれば、アクセス競合が発生しないように割り当てる第１のスケジューリングと、第１のスケジューリングと異なる第２のスケジューリングとの、それぞれのスケジューリングにおける処理時間を見積もり、最適なスケジューリングに切り替える。これにより、たとえアクセス競合が発生したとしても、処理時間が短い最適なスケジューリングを行うことができ、スレッドの性能劣化を低減させることができる。
【０２１１】
（マルチコアプロセッサシステム２００の適用例）
図３６は、マルチコアプロセッサシステム２００の適用例を示す図である。図３６において、ネットワークＮＷは、サーバ３６０１，３６０２とクライアント３６３１〜３６３４とが通信可能なネットワークＮＷであり、たとえば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネット、携帯電話網などで構成される。
【０２１２】
サーバ３６０２は、クラウド３６２０を構成するサーバ群（サーバ３６２１〜３６２５）の管理サーバである。クライアント３６３１〜３６３４のうち、クライアント３６３１はノート型パソコン、クライアント３６３２はデスクトップ型パソコン、クライアント３６３３は携帯電話機（スマートフォン、ＰＨＳ（Ｐｅｒｓｏｎａｌ  Ｈａｎｄｙｐｈｏｎｅ  Ｓｙｓｔｅｍ）でもよい）、クライアント３６３４はタブレット型端末である。図３６のサーバ３６０１，３６０２，３６２１〜３６２５、クライアント３６３１〜３６３４は、たとえば、図１に示したコンピュータにより実現される。
【０２１３】
また、本実施の形態は、図１に示した各ＣＰＵ２０１、および共有資源がそれぞれ異なるコンピュータ（たとえば図３６の携帯電話機やサーバ）に搭載され、複数のコンピュータがネットワークＮＷを介して分散型の並列処理を行う構成に適用することもできる。
【０２１４】
以上説明したように、本割当方法、およびマルチコアプロセッサシステムによれば、マルチコアプロセッサで並列実行時のスレッドの使用バンク数の総和が共有資源のバンク数を超えないようなＣＰＵに対象スレッドを割り当てる。これにより、本割当方法、およびマルチコアプロセッサシステムによれば、共有資源へのアクセス競合によるスレッドの性能劣化の低減を図ることができる。
【０２１５】
また、マルチコアプロセッサシステムの特定のＣＰＵが、ＣＰＵを順に選択し、各スレッドが選択されたＣＰＵに割り当てられた場合にマルチコアで並列実行されても合計の使用バンク数が共有資源のバンク数を超えないように対象スレッドを割り当てる。これにより、特定のＣＰＵが、共有資源へのアクセス競合によるスレッドの性能劣化の低減を図ることができる。
【０２１６】
また、特定のＣＰＵが、総和が共有資源のバンク数以下となる割当先候補の数が複数ある場合、割当済のスレッドの処理時間が最小なＣＰＵに対象スレッドを割り当てる。これにより、特定のＣＰＵが、共有資源へのアクセス競合によるスレッドの性能劣化の低減を図りつつ、各ＣＰＵの負荷を分散させることができる。
【０２１７】
また、特定のＣＰＵが、マルチコアプロセッサから、検出された最大値が大きい順にＣＰＵを割当先候補として選択する。そして、特定のＣＰＵが、複数のＣＰＵから、検出された最大値が大きい順にＣＰＵを割当先候補として選択する。特定のＣＰＵが、最大値を大きい順に選択すると、選択されたＣＰＵの最大値が対象スレッドの使用バンク数よりも大きい可能性が高く、無作為にＣＰＵを選択するよりも、並列実行時のスレッドの使用バンク数の総和に変化が生じにくい。したがって、特定のＣＰＵが、アクセス競合による性能劣化の低減を図りつつ、対象スレッドの割当先を高速に決定することができる。
【０２１８】
また、特定のＣＰＵが、検出された最大値が最大となるＣＰＵのみを割当先候補として選択する。検出された最大値が最も大きいＣＰＵであれば、対象スレッドの使用バンク数よりも大きい可能性が最も高いので並列実行時のスレッドの使用バンク数の総和に変化が生じにくい。したがって、特定のＣＰＵが、アクセス競合による性能劣化の低減を図りつつ、対象スレッドの割当先を高速に決定することができる。
【０２１９】
また、特定のＣＰＵが、いずれのＣＰＵに対象スレッドを割り当てたとしても、バンク数不足に陥る場合、並列実行時のスレッドの使用バンク数の総和が最小となるＣＰＵに割り当てる。これにより、特定のＣＰＵが、アクセス競合の発生を最小限に抑えることができる。
【０２２０】
また、割当済のスレッドの特定されたバンクの使用数と対象スレッドの特定されたバンクの使用数との合計値が共有資源のバンク数以下であれば、どのスレッドの並列処理の組み合わせであっても、バンク数不足に陥ることがない。そこで、特定のＣＰＵが、いずれかのＣＰＵに対象スレッドを直ちに割り当てることで、割当処理の高速化を図ることができる。
【０２２１】
また、対象スレッドと割当済のスレッドがスレッド群の中の特定のスレッドである。頻繁に共有資源へアクセスするか否かによってスレッドがあらかじめ分類されることにより、特定のＣＰＵが、共有資源へのアクセス頻度が少ないスレッドを除外して割り当てを決定することができる。
【０２２２】
また、対象スレッドがスレッド群の中の特定のスレッドでない場合、特定のＣＰＵが、いずれのスレッドも割り当てられていないＣＰＵに対象スレッドを割り当てる。特定のスレッドでないスレッドとは、共有資源へのアクセスが頻繁に発生しないスレッドであることを示す。実施例６では分類がＡのスレッドである。分類がＡのスレッドは１次キャッシュへ頻繁にアクセスする。そこで、他のスレッドと対象スレッドを同一ＣＰＵに割り当てないようにすることで、複数のスレッドのデータが１次キャッシュ内で混在してしまうのを避けることができる。これにより、１次キャッシュ内のデータのスワップ数を減らすことができ、スレッドの性能劣化の低減を図ることができる。
【０２２３】
また、第１の共有資源の第１の条件と、第１の共有資源よりもアクセス速度の速い第２の共有資源の第２の条件とにスレッドがあらかじめ分類されていることとする。第１の条件で分類される第１のスレッドと第２の条件で分類される第２のスレッドと、が並列処理されると、第１のスレッドの影響で第２のスレッドのアクセスミスが増加する恐れがある。そこで、第１のスレッドがいずれかのＣＰＵに割り当てられていたら、特定のＣＰＵが、第２の条件に分類される対象スレッドの割当先を第１の共有資源の使用バンク数に応じて決定する。これにより、特定のＣＰＵが、第１の共有資源でのアクセス競合によるスレッドの性能劣化の低減を図ることができる。
【０２２４】
また、第１のスレッドがいずれのＣＰＵにも割り当てられていなければ、特定のＣＰＵが、第２の条件に分類される対象スレッドの割当先を第２の共有資源の使用バンク数に応じて決定する。これにより、特定のＣＰＵが、第２の共有資源でのアクセス競合によるスレッドの性能劣化の低減を図ることができる。
【０２２５】
また、対象スレッドが第１の条件に分類されるスレッドの場合、いずれに分類されるスレッドがＣＰＵに割り当てられていても、特定のＣＰＵが、対象スレッドの割当先を第１の共有資源の使用バンク数に応じて決定する。これにより、特定のＣＰＵが、第２の共有資源でのアクセス競合によるスレッドの性能劣化の低減を図ることができる。
【０２２６】
また、アクセス競合を重視してスレッドが割り当てられると、各スレッドの割り当て状態によっては、アクセス競合を無視してスレッドが割り当てられた場合よりもスレッドの処理時間が長くなってしまう場合がある。そこで、特定のＣＰＵが、アクセス競合が発生しないように割り当てる第１のスケジューリングと、第１のスケジューリングと異なる第２のスケジューリングと、のうち、いずれのスケジューリングで割り当てるかを動的に切り替える。これにより、第１のスケジューリングが選択された場合は、アクセス競合による対象スレッドの性能劣化の低減を図ることができる。第２のスケジューリングが選択された場合は、同一のＣＰＵ２０１に割り当てられたスレッドの性能による対象スレッドの性能劣化の低減を図ることができる。
【０２２７】
また、特定のＣＰＵが、第２のスケジューリングにおける処理時間にアクセス競合により発生する負荷時間を加算する。これにより、特定のＣＰＵが、アクセス競合による性能劣化の影響を含めてスケジューリングを決定することができる。
【０２２８】
また、特定のＣＰＵが、負荷時間を割当済のスレッドの処理時間と共有資源の競合による負荷の割合に応じて算出する。これにより、特定のＣＰＵが、アクセス競合による影響をより正確に再現させることができる。
【０２２９】
また、特定のＣＰＵが、第１のスケジューリングによる処理時間の算出結果と、第２のスケジューリングによる処理時間の算出結果と、の関係が所定条件を満たすか否かを判断し、判断結果に応じて、いずれのスケジューリングを行うかが決定する。これにより、マルチコアプロセッサシステムの設計者が第２のスケジューリングのスケジューリング方法に応じて所定条件を定めることができる。
【０２３０】
なお、本実施の形態で説明した割当方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本割当プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本割当プログラムは、インターネット等のネットワークを介して配布してもよい。
【０２３１】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０２３２】
（付記１）マルチコアプロセッサのうちの特定のコアが、
前記マルチコアプロセッサで共有する共有資源が有する記憶領域の使用数をスレッド群のスレッドごとに記憶する記憶装置から、対象スレッドの記憶領域の使用数と、前記マルチコアプロセッサのコアごとに割当済のスレッドの記憶領域の使用数と、を特定する特定処理と、
前記割当済のスレッドの特定された記憶領域の使用数から前記コアごとに最大値を検出する検出処理と、
前記マルチコアプロセッサのうちの割当先候補に選択されたコアの検出された最大値と前記対象スレッドの特定された記憶領域の使用数とのうちの大きい方の値と、前記選択されたコア以外のコアの検出された最大値との総和が、前記共有資源内の記憶領域数以下であるか否かを判断する判断処理と、
前記総和が前記記憶領域数以下であると判断された場合、前記対象スレッドを前記選択されたコアに割り当てる割当処理と、
を実行することを特徴とする割当方法。
【０２３３】
（付記２）前記検出処理による検出後、前記マルチコアプロセッサから、順にコアを割当先候補として選択する選択処理を実行し、
前記判断処理は、
前記選択処理によりコアが選択される都度、選択されたコアの検出された最大値と前記対象スレッドの前記記憶領域の使用数とのうちの大きい方の値と、前記選択されたコア以外のコアの検出された最大値との総和が、前記記憶領域数以下であるか否かを判断し、
前記割当処理は、
前記判断処理により前記総和が前記記憶領域数以下であると判断されたコアに前記対象スレッドを割り当てることを特徴とする付記１に記載の割当方法。
【０２３４】
（付記３）前記割当処理は、
前記総和が前記記憶領域数以下であると判断された割当先候補の数が複数ある場合、前記割当済のスレッドの処理時間が最小なコアに前記対象スレッドを割り当てることを特徴とする付記２に記載の割当方法。
【０２３５】
（付記４）前記選択処理は、
前記マルチコアプロセッサから、前記検出処理によって検出された最大値が大きい順にコアを割当先候補として選択することを特徴とする付記２に記載の割当方法。
【０２３６】
（付記５）前記選択されたコアが、前記マルチコアプロセッサのうちの前記検出された最大値が最大となるコアであることを特徴とする付記１に記載の割当方法。
【０２３７】
（付記６）前記割当処理は、
前記選択されたコアがいずれのコアであっても前記総和が前記記憶領域数以下でない場合、前記総和が最小となるコアに割り当てることを特徴とする付記１または２に記載の割当方法。
【０２３８】
（付記７）前記割当処理は、
前記特定処理による特定後、前記割当済のスレッドの特定された記憶領域の使用数と前記対象スレッドの前記記憶領域の使用数との合計値が前記記憶領域数以下であれば、前記検出処理と前記判断処理を実行せずに、前記マルチコアプロセッサのうちのいずれかのコアに割り当てることを特徴とする付記１に記載の割当方法。
【０２３９】
（付記８）前記対象スレッドと前記割当済のスレッドが前記スレッド群の中の特定のスレッドであることを特徴とする付記１〜７のいずれか一つに記載の割当方法。
【０２４０】
（付記９）前記割当処理は、
前記対象スレッドが前記スレッド群のうちの特定のスレッドでない場合、前記特定処理と前記検出処理と前記判断処理とを実行せずに、前記対象スレッドを前記マルチコアプロセッサのうちのいずれのスレッドも割り当てられていないコアに割り当てることを特徴とする付記１〜７のいずれか一つに記載の割当方法。
【０２４１】
（付記１０）第１の共有資源の記憶領域の使用数と、前記第１の共有資源よりもアクセス速度が速い第２の共有資源の記憶領域の使用数と、が前記スレッド群のスレッドごとに前記記憶装置に記憶されており、
前記特定処理が、
前記対象スレッドが、前記スレッド群の中の前記第１の共有資源へのアクセスに関する第１の条件に分類されたスレッドである場合、前記記憶装置から、前記対象スレッドの前記第１の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第１の共有資源の記憶領域の使用数を特定することを特徴とする付記１〜７のいずれか一つに記載の割当方法。
【０２４２】
（付記１１）第１の共有資源の記憶領域の使用数と、前記第１の共有資源よりもアクセス速度が速い第２の共有資源の記憶領域の使用数と、が前記スレッド群のスレッドごとに前記記憶装置に記憶されており、
前記特定処理が、
前記対象スレッドが、前記スレッド群の中の前記第２の共有資源へのアクセスに関する第２の条件に分類されたスレッドであり、かつ前記割当済のスレッドの中に、前記第１の共有資源へのアクセスに関する第１の条件に分類されたスレッドがない場合、前記記憶装置から、前記対象スレッドの前記第２の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第２の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第２の共有資源の記憶領域の使用数を特定することを特徴とする付記１〜７のいずれか一つに記載の割当方法。
【０２４３】
（付記１２）第１の共有資源の記憶領域の使用数と、前記第１の共有資源よりもアクセス速度が速い第２の共有資源の記憶領域の使用数と、が前記スレッド群のスレッドごとに前記記憶装置に記憶されており、
前記特定処理が、
前記対象スレッドが前記スレッド群の中の前記第２の共有資源へのアクセスに関する第２の条件に分類されたスレッドであっても、前記割当済のスレッドの中に、前記第１の共有資源へのアクセスに関する第１の条件に分類されたスレッドがある場合、前記記憶装置から、前記対象スレッドの前記第１の共有資源の記憶領域の使用数と前記割当済のスレッドの前記第１の共有資源の記憶領域の使用数を特定することを特徴とする付記１〜７のいずれか一つに記載の割当方法。
【０２４４】
（付記１３）前記割当処理による第１のスケジューリングで割り当てた場合における、前記コアごとに前記割当済のスレッドの処理時間の合計値を算出する第１の算出処理と、
前記第１のスケジューリングと異なる第２のスケジューリングで割り当てた場合における、前記割当済のスレッドの処理時間の合計値を前記コアごとに算出する第２の算出処理と、
前記第１の算出処理による算出結果と、前記第２の算出処理による算出結果とを比較する比較処理と、
前記比較処理による比較結果に応じて、前記第１のスケジューリングと前記第２のスケジューリングとを切り替える切替処理と、を実行することを特徴とする付記１〜１２のいずれか一つに記載の割当方法。
【０２４５】
（付記１４）前記第２の算出処理は、
さらに、前記割当済のスレッドの処理時間の合計値に前記共有資源の競合による負荷時間が加算されることを特徴とする付記１３に記載の割当方法。
【０２４６】
（付記１５）前記負荷時間が、前記割当済のスレッドの処理時間と前記共有資源の競合による負荷の割合に応じて算出されることを特徴とする付記１４に記載の割当方法。
【０２４７】
（付記１６）前記比較処理は、
前記第１の算出処理による算出結果と、前記第２の算出処理による算出結果との関係が所定条件を満たすか否かを判断し、
前記切替処理は、
前記比較処理による比較結果が前記所定条件を満たす場合、前記第１のスケジューリングを実行し、前記比較処理による比較結果が前記所定条件を満たさない場合、前記第２のスケジューリングを実行することを特徴とする付記１３〜１５のいずれか一つに記載の割当方法。
【０２４８】
（付記１７）マルチコアプロセッサと、
前記マルチコアプロセッサで共有する共有資源が有する記憶領域の使用数をスレッド群のスレッドごとに記憶する記憶装置と、を備え、
前記マルチコアプロセッサのうちの特定のコアが、
前記記憶装置から、対象スレッドの記憶領域の使用数と、前記マルチコアプロセッサのコアごとに割当済のスレッドの記憶領域の使用数と、を特定する特定手段と、
前記割当済のスレッドの特定された記憶領域の使用数から前記コアごとに最大値を検出する検出手段と、
前記マルチコアプロセッサのうちの割当先候補に選択されたコアの検出された最大値と前記対象スレッドの特定された記憶領域の使用数とのうちの大きい方の値と、前記選択されたコア以外のコアの検出された最大値との総和が、前記共有資源内の記憶領域数以下であるか否かを判断する判断手段と、
前記総和が前記記憶領域数以下であると判断された場合、前記対象スレッドを前記選択されたコアに割り当てる割当手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
【符号の説明】
【０２４９】
２００  マルチコアプロセッサシステム
２０１−１〜２０１−ｎ  ＣＰＵ
２０２  ２次キャッシュ
２０６  ＲＡＭ
２３１−１〜２３１−ｌ  バンク
２４１−１〜２４１−ｍ  バンク
５０１  特定部
５０２  検出部
５０３  選択部
５０４  判断部
５０５  割当部
５０６  分類判断部
【国際調査報告】
2013018184.tif 000039
2013018184.tif 000040
2013018184.tif 000041
2013018184.tif 000042