(57)【要約】  生成装置（１００）のコンパイラ（１０１）は、アプリケーションソースコード（ＡＳ）ごとに評価コンパイル（１１１）と実装コンパイル（１１２）をおこなう。評価コンパイル（１１１）では、プロファイルタグテーブル（Ｔ）を生成する。ＥＳＬシミュレータ（１０２）は、競合特性情報（１２０）を生成する第１のＥＳＬシミュレーションと競合特性情報（１２０）を用いて評価用実行コード（Ｃ１９を実行する第２のＥＳＬシミュレーションを実行する。第２のＥＳＬシミュレーションでは、実装するマルチコアプロセッサシステムをＥＳＬでモデル化したシステムモデル上で各評価用実行コード（Ｃ１）を実行する。これにより、評価用実行コード（Ｃ１）内の関数ごとにスケジューリング方式が決定され、プロファイルタグテーブル（Ｔ）に登録される。
2011114478.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサモデルと当該プロセッサモデルがアクセス可能なメモリモデルとアクセス競合率に応じて前記メモリモデルにアクセスする負荷源とを表現したシミュレーションモデルを用いてシミュレーションを実行することにより、前記プロセッサモデルの性能に関する指標値を前記アクセス競合率ごとに求める実行工程と、
前記実行工程によって求められた前記アクセス競合率ごとの指標値を競合特性情報として記憶領域に保存する保存工程と、
を含んだことを特徴とする生成方法。
【請求項２】
前記実行工程により、前記アクセス競合率ごとに求められた前記プロセッサモデルの性能に関する指標値に基づいて、前記プロセッサモデルに関する競合特性の近似式を生成する生成工程を含み、
前記保存工程は、
前記生成工程によって生成された近似式を前記競合特性情報として前記記憶領域に保存することを特徴とする請求項１に記載の生成方法。
【請求項３】
前記生成工程によって生成された競合特性の近似式に基づいて、前記プロセッサモデルの性能に関する指標値の中から、前記プロセッサモデルの性能が漸近する性能漸近値を特定する特定工程を含み、
前記保存工程は、
前記特定工程によって特定された性能漸近値を前記競合特性情報として前記記憶領域に保存することを特徴とする請求項２に記載の生成方法。
【請求項４】
前記アクセス競合率のうち、前記特定工程によって特定された性能漸近値に対する許容誤差値と前記近似式とに基づくアクセス競合率を、前記プロセッサモデルの性能劣化の境界値に決定する決定工程を含み、
前記保存工程は、
前記許容誤差値および前記決定工程によって決定された境界値を前記競合特性情報として前記記憶領域に保存することを特徴とする請求項３に記載の生成方法。
【請求項５】
第１のプロセッサモデルと第２のプロセッサモデルと前記第１および第２のプロセッサモデルがアクセス可能な共有メモリモデルとを表現したマルチコアプロセッサシステムモデルにおいて、第１および第２のプログラムのうち前記第２のプログラムが前記第２のプロセッサモデルで実行中に、前記第１のプログラムを前記第１のプロセッサモデルで実行させたときの前記第１のプロセッサモデルの性能に関する指標値を取得する取得工程と、
前記近似式を参照して、前記取得工程によって取得された指標値でのアクセス競合率を検出する検出工程と、
前記検出工程によって検出されたアクセス競合率と前記境界値とを比較することにより、前記第２のプログラムの実行中に前記第１のプログラムを実行する場合のスケジューリング方式を、動的スケジューリングまたは静的スケジューリングの中から選択する選択工程と、
前記選択工程によって選択されたスケジューリング方式を、前記第１のプログラムの呼出時に参照されるテーブルに登録する登録工程と、
を含んだことを特徴とする請求項４に記載の生成方法。
【請求項６】
プログラムごとに他のプログラムと同時実行する場合のスケジューリング方式が登録され前記プログラムの呼出時に参照されるテーブルと、マルチコアプロセッサと、を備える情報処理装置が、
対象プログラムを指定する指定工程と、
前記指定工程によって前記対象プログラムが指定された場合、前記マルチコアプロセッサ内のプロセッサにより実行中のプログラムを検出する検出工程と、
前記テーブルを参照して、前記検出工程によって検出された実行中のプログラムとともに前記マルチコアプロセッサで前記対象プログラムを実行させる場合の前記対象プログラムのスケジューリング方式を特定する特定工程と、
前記特定工程によって特定されたスケジューリング方式に従って前記対象プログラムを実行させるプロセッサを前記マルチコアプロセッサの中から決定する決定工程と、
前記決定工程によって決定されたプロセッサに前記対象プログラムを割り当てる割当工程と、
を実行することを特徴とするスケジューリング方法。
【請求項７】
前記決定工程は、
前記特定工程によって特定されたスケジューリング方式が静的スケジューリングである場合、前記対象プログラムを実行させるプロセッサを、前記対象プログラムを前記実行中のプログラムが割り当てられているプロセッサに決定することを特徴とする請求項６に記載のスケジューリング方法。
【請求項８】
前記決定工程は、
前記特定工程によって特定されたスケジューリング方式が動的スケジューリングである場合、前記対象プログラムを実行させるプロセッサを、前記対象プログラムを前記実行中のプログラムが割り当てられているプロセッサ以外の残余のプロセッサのうち最も低負荷のプロセッサに決定することを特徴とする請求項６に記載のスケジューリング方法。
【請求項９】
プロセッサモデルと当該プロセッサモデルがアクセス可能なメモリモデルとアクセス競合率に応じて前記メモリモデルにアクセスする負荷源とを表現したシミュレーションモデルを用いてシミュレーションを実行することにより、前記プロセッサモデルの性能に関する指標値を前記アクセス競合率ごとに求める実行工程と、
前記実行工程によって求められた前記アクセス競合率ごとの指標値を競合特性情報として記憶領域に保存する保存工程と、
をコンピュータに実行させることを特徴とする生成プログラム。
【請求項１０】
プログラムごとに他のプログラムと同時実行する場合のスケジューリング方式が登録され前記プログラムの呼出時に参照されるテーブルと、マルチコアプロセッサと、を備える情報処理装置に、
対象プログラムを指定する指定工程と、
前記指定工程によって前記対象プログラムが指定された場合、前記マルチコアプロセッサ内のプロセッサにより実行中のプログラムを検出する検出工程と、
前記テーブルを参照して、前記検出工程によって検出された実行中のプログラムとともに前記マルチコアプロセッサで前記対象プログラムを実行させる場合の前記対象プログラムのスケジューリング方式を特定する特定工程と、
前記特定工程によって特定されたスケジューリング方式に従って前記対象プログラムを実行させるプロセッサを前記マルチコアプロセッサの中から選択する選択工程と、
前記選択工程によって選択されたプロセッサに前記対象プログラムを割り当てる割当工程と、
を実行させることを特徴とするスケジューリングプログラム。
【請求項１１】
プロセッサモデルと当該プロセッサモデルがアクセス可能なメモリモデルとアクセス競合率に応じて前記メモリモデルにアクセスする負荷源とを表現したシミュレーションモデルを用いてシミュレーションを実行することにより、前記プロセッサモデルの性能に関する指標値を前記アクセス競合率ごとに求める実行手段と、
前記実行工程によって求められた前記アクセス競合率ごとの指標値を競合特性情報として記憶領域に保存する保存手段と、
を備えることを特徴とする生成装置。
【請求項１２】
プログラムごとに他のプログラムと同時実行する場合のスケジューリング方式が登録され前記プログラムの呼出時に参照されるテーブルと、マルチコアプロセッサと、を備える情報処理装置であって、
対象プログラムを指定する指定手段と、
前記指定手段によって前記対象プログラムが指定された場合、前記マルチコアプロセッサ内のプロセッサにより実行中のプログラムを検出する検出手段と、
前記テーブルを参照して、前記検出手段によって検出された実行中のプログラムとともに前記マルチコアプロセッサで前記対象プログラムを実行させる場合の前記対象プログラムのスケジューリング方式を特定する特定手段と、
前記特定手段によって特定されたスケジューリング方式に従って前記対象プログラムを実行させるプロセッサを前記マルチコアプロセッサの中から選択する選択手段と、
前記選択手段によって選択されたプロセッサに前記対象プログラムを割り当てる割当手段と、
を備えることを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報を生成したり生成された情報を用いてスケジューリングをおこなう生成方法、スケジューリング方法、生成プログラム、スケジューリングプログラム、生成装置、および情報処理装置に関する。
【背景技術】
【０００２】
従来、スケジューリング技術として静的スケジューリングと動的スケジューリングが存在する。【０００３】
静的スケジューリングとは、コンパイルの段階で実行状態を予測したコードを予め固定的なコードとして実行オブジェクトに埋めておくスケジューリング方式である。具体的には、一般的なコードプティマイズや負荷分散をおこなうための実行先ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に固定的にもたせることにより、静的スケジューリングが実行される。【０００４】
また、静的スケジューリングは、条件分岐処理にあたって、予め分岐比率をもとめることにより、より分岐確率の高いコードをキャッシュラインにのせるようなコード生成をおこなうことができる。静的スケジューリングは、不要なコードを埋め込むことがないため、判断を要する段階でスケジューリングに要する演算処理が入らない。したがって、スケジューリングオーバーヘッドがほとんど発生しない。【０００５】
また、動的スケジューリングとは、コンパイル時に判明しない不確定要素がある場合、スケジューリングイベント時に、イベント時の状態情報（各プロセッサの負荷など）を収集し、イベント毎の最適な状態をその都度演算するスケジューリング方式である。コンパイル時に判明しない不確定要素としては、たとえば、実行開始後に演算処理量が判明したり、他のソフトウェアとの同時実行にあたって負荷状態が実行してみないとわからない状態がある。【０００６】
また、スケジューリング計算はＮＰ（Ｎｏｎ−ｄｅｔｅｒｍｉｎｉｓｔｉｃ  Ｐｏｌｙｎｏｍｉａｌ）困難問題とされ、本質的に最適解を求めることは現実時間では難しく、通常は最適解に対する近似解となる（本明細書では、近似解を最適解とする）。従来は、このような最適解を得るためのさまざまなアルゴリズムが提案されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００７−３２８４１６号公報
【特許文献２】特開２００７−１８２６８号公報
【特許文献３】特開２０００−２１５１８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述した静的スケジューリングでは、分岐予測がはずれる場合や、想定外の状態が発生した場合にシステム全体のバランスがくずれてパフォーマンスが極端に落ちることがあるという問題があった。【０００９】
また、スケジューラなどによるソフトウェアのオーバーヘッドを動的予測するのは効率的ではなく、すでに値が決まっているので静的解析すべきである。また、マルチコア環境で共用メモリにアクセスしたときに発生するアクセス競合といったハードウェア的なオーバーヘッドによりスケジューリング結果が乱される場合がある。【００１０】
この場合、次回のパターンを予測しようとしても、次回にはパターンが変化してしまうため、動的予測する意味がない。したがって、動的スケジューリングでは、スケジューリングイベントが頻発すると、最適解をもとめるためのスケジューリングオーバーヘッドそのものがパフォーマンスを落とす要因になるという問題があった。【００１１】
本発明は、上述した従来技術による問題点を解消するため、システムパフォーマンスを劣化させるスケジューリングオーバーヘッドを軽減すべく、動的処理を余儀なくされたようなケースにおいても静的スケジューリングを行うことでシステムパフォーマンスを向上させることができる生成方法、スケジューリング方法、生成プログラム、スケジューリングプログラム、生成装置、および情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本実施例の一態様によると、プロセッサモデルと当該プロセッサモデルがアクセス可能なメモリモデルとアクセス競合率に応じて前記メモリモデルにアクセスする負荷源とを表現したシミュレーションモデルを用いてシミュレーションを実行することにより、前記プロセッサモデルの性能に関する指標値を前記アクセス競合率ごとに求め、求められた前記アクセス競合率ごとの指標値を競合特性情報として記憶領域に保存する生成方法、スケジューリング方法、生成プログラム、スケジューリングプログラム、生成装置、および情報処理装置を提供する。【００１３】
また、本実施例の他の態様によると、対象プログラムを指定し、前記対象プログラムが指定された場合、マルチコアプロセッサ内のプロセッサにより実行中のプログラムを検出し、テーブルを参照して、検出された実行中のプログラムと同時に前記対象プログラムを実行させる場合の前記対象プログラムのスケジューリング方式を特定し、特定されたスケジューリング方式に従って前記対象プログラムを実行させるプロセッサを前記マルチコアプロセッサの中から決定し、決定されたプロセッサに前記対象プログラムを割り当てるスケジューリング方法、スケジューリングプログラム、および情報処理装置を提供する。
【発明の効果】
【００１４】
本生成方法、スケジューリング方法、生成プログラム、スケジューリングプログラム、生成装置、および情報処理装置によれば、システムパフォーマンスを劣化させるスケジューリングオーバーヘッドを軽減すべく、動的処理を余儀なくされたようなケースにおいても静的スケジューリングを行うことでシステムパフォーマンスを向上させることができるという効果を奏する。
【図面の簡単な説明】
【００１５】
【図１】本実施の形態にかかる生成装置の一実施例を示す説明図である。
【図２】プロファイルタグテーブルＴの一例を示す説明図である。
【図３】負荷源Ｌのコード例を示す説明図である。
【図４】本実施の形態にかかる情報処理装置の一実施例を示すブロック図である。
【図５】本実施の形態にかかる第１のＥＳＬシミュレーションを示す説明図である。
【図６】競合特性情報１２０を示すグラフである。
【図７】本実施の形態にかかる第２のＥＳＬシミュレーションを示す説明図である。
【図８】登録後のプロファイルタグテーブルＴの一例を示す説明図である。
【図９】本実施の形態にかかる生成装置１００のハードウェア構成の一例を示すブロック図である。
【図１０】本実施の形態にかかる生成装置１００の機能的構成を示すブロック図である。
【図１１】情報処理装置４００の機能的構成を示すブロック図である。
【図１２】本実施の形態にかかる生成装置１００による第１のＥＳＬシミュレーションの処理手順を示すフローチャートである。
【図１３】第２のＥＳＬシミュレーションの処理手順を示すフローチャートである。
【図１４】プロファイルタグテーブルＴへの登録処理手順を示すフローチャートである。
【図１５】情報処理装置４００によるスケジューリング処理手順を示すフローチャートである。
【図１６】本実施の形態を適用しない場合の失敗例となるスケジューリングを示す説明図である。
【図１７】本実施の形態を適用した場合のスケジューリング（その１）を示す説明図である。
【図１８】本実施の形態を適用した場合のスケジューリング（その２）を示す説明図である。
【発明を実施するための形態】
【００１６】
本実施の形態では、マルチコアプロセッサシステム内の一のプロセッサで実行中のプログラム（一のアプリケーション内のプロセスやスレッド。「一の関数」。）がある場合、これから呼び出されるプログラム（他のアプリケーション内のプロセスやスレッド。「他の関数」。）をどのようにスケジューリングすべきかというスケジューリング方式を設計段階で決めておく。そして、製品化後は、設計段階で決められたスケジューリング方式でスケジューリングすることでアプリケーションを実行する。
【００１７】
たとえば、静的スケジューリングの場合は、他の関数を一の関数を実行中の一のプロセッサに割り当てて、一の関数と他の関数を時分割で実行することとなる。したがって、時分割実行のため、一の関数と他の関数との間でコンテンションは発生しないこととなる。
【００１８】
一方、動的スケジューリングの場合は、他の関数を一の関数を実行中の一のプロセッサとは異なる他のプロセッサ（たとえば空いているプロセッサ）に割り当てることとなる。
【００１９】
これにより、システムパフォーマンスを劣化させるスケジューリングオーバーヘッドを軽減すべく、動的スケジューリングを余儀なくされたようなケースにおいてもできる限り静的スケジューリングを行うことでシステムパフォーマンスを向上させる。以下に添付図面を参照して詳細に説明する。
【００２０】
図１は、本実施の形態にかかる生成装置の一実施例を示す説明図である。生成装置１００は、アプリケーションソースコードＡＳを入力し、実装用実行コードＣ２およびプロファイルタグテーブルＴを出力する。
【００２１】
生成装置１００は、コンパイラ１０１とＥＳＬ（Ｅｌｅｃｔｒｏｎｉｃ  Ｓｙｓｔｅｍ  Ｌｅｖｅｌ）シミュレータ１０２とリンカ１０３とを備えている。コンパイラ１０１は、アプリケーションソースコードＡＳごとに評価コンパイル１１１と実装コンパイル１１２をおこなう。評価コンパイル１１１とは、アプリケーションソースコードＡＳの評価用実行コードＣ１を生成する処理である。
【００２２】
評価用実行コードＣ１とは、通常の実行コード（図１でいう実装用実行コードＣ２）に、デバッグ情報が埋め込まれた実行コードである。評価オブジェクトとも言う。この埋め込まれたデバッグ情報により、評価用実行コードＣ１は、実装用実行コードＣ２よりも余計な動作をする。また、評価コンパイル１１１では、プロファイルタグテーブルＴを生成する。
【００２３】
図２は、プロファイルタグテーブルＴの一例を示す説明図である。プロファイルタグテーブルＴは、コーリー・コーラー情報エリアと実行開始・終了時刻情報エリアとを有するテーブルである。コーリー・コーラー情報エリアとは、関数や手続きの呼出単位となるコーリー情報やコーラ−情報を記録するエリアである。また、実行開始・終了時刻情報エリアは、評価用実行コードＣ１内の関数の実行開始時刻と実行終了時刻とを記録するエリアである。
【００２４】
本実施の形態では、プロファイルタグテーブルＴは、さらに、動作条件エリアを有する。動作条件エリアとは、事前評価実行時の動作条件を記録するエリアである。簡単に説明すると、対象となる関数のスケジューリング方式が記録されているが、詳細については後述する。なお、プロファイルタグテーブルＴの生成時では、いずれのエリアも空の状態であり、評価用実行コードＣ１を実行することで埋められる。
【００２５】
また、図１において、ＥＳＬシミュレータ１０２は、ＥＳＬシミュレーションを実行する。ここで、ＥＳＬモデルとはハードウェアデバイスのビヘイビア（ふるまい）をもとに記述することによりハードウェア環境をシミュレーション化する技術である。たとえば、プロセッサのＥＳＬモデルでは命令発行の電気回路的なメカニズムをそのままシミュレーションするのではなく、発行命令とそれに要する時間で表現する。
【００２６】
また、バスのＥＳＬモデルでは同様に、回路メカニズムによるデータ伝播の遅延を厳密に計算するのではなく、アクセス要求により設計上のレイテンシパターンを掛け合わせて、動作と時間概念をビヘイビア（ふるまい）としてシミュレーションしていくこととなる。
【００２７】
従来、シミュレーションというとＲＴＬ（Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ）などの回路設計情報をもとに実際に半導体を実装することなくシミュレーションを行うことで実デバイスと同等の動作を実現することで検証を行うために用いられていた。
【００２８】
しかしながら、回路レベルの詳細シミュレーションを実施するには非常に時間がかかり（通常、実デバイスのスピードに対し数千万から数億分の一の処理時間）、アプリケーションを動作させながらのシステム全体の挙動を解析するのは現実的に困難であった。一方で、ＥＳＬモデルでは処理と時間の概念をふるまいとして解析するため回路のシミュレーションをおこなうまでもなく概ねの処理時間を評価することが可能な環境である。
【００２９】
本実施の形態では、２種類のＥＳＬシミュレーションを実行する。１つは、競合特性情報１２０を生成するためのＥＳＬシミュレーションである（以下、「第１のＥＳＬシミュレーション」）。もう１つは、競合特性情報１２０を用いて評価用実行コードＣ１を実行するＥＳＬシミュレーションである（以下、「第２のＥＳＬシミュレーション」）。
【００３０】
まず、第１のＥＳＬシミュレーションでは、マルチコアプロセッサシステムを搭載した情報処理装置のために競合特性情報１２０を生成するが、競合特性情報１２０を生成する際のＥＳＬのシステムモデルは、マルチコアプロセッサシステムと同一構成のモデルではない。マルチコアプロセッサシステムのシステムモデルでは、ＣＰＵモデルが複数用意されるが、ここでは、ＣＰＵモデルが１つで、残余のＣＰＵモデル群については、単一の負荷源Ｌとしてまとめてモデル化する。
【００３１】
すなわち、残余のＣＰＵモデル群がそれぞれアプリケーションによりどのようにふるまうかは関係ない。その反面、共有メモリに対してどれだけトランザクション負荷をかけるかをみればよいため、残余のＣＰＵモデル群を負荷源Ｌとしてまとめても問題なく、かえってシミュレーション速度の高速化を実現できる。
【００３２】
また、第１のＥＳＬシミュレーションでは、競合特性情報１２０を生成する場合、ＥＳＬのシステムモデル上でアクセス競合テストプログラムＴＰを実行することとなる。アクセス競合テストプログラムＴＰは、Ｉ／Ｏ系のベンチマークプログラムであり、共有リソース（たとえば、共有メモリ）に対し、リードとライトをおこなうプログラムである。
【００３３】
また、負荷源Ｌは、アクセス競合テストプログラムＴＰ以外のプログラムを実行するＣＰＵモデル群を擬似的に表現したモデルである。ＣＰＵモデル群がそれぞれアプリケーションにより実際にどのようにふるまうかは関係なく、共有メモリに対してどれだけトランザクション負荷をかけるかをみればよいため、負荷源Ｌとしてまとめても問題なく、かえってシミュレーション速度の高速化を実現できる。
【００３４】
図３は、負荷源Ｌのコード例を示す説明図である。負荷源Ｌは、意図的にコンテンション（競合）を発生させるプログラムである。アクセスが競合している状態の密度（アクセス競合率ρ）がパラメトリックになっている。
【００３５】
また、図１において、第２のＥＳＬシミュレーションでは、負荷源Ｌを有するＥＳＬのシステムモデルとは別に、実装するマルチコアプロセッサシステムをＥＳＬでモデル化したシステムモデル上で各評価用実行コードＣ１を実行する。これにより、評価用実行コードＣ１内の関数ごとにスケジューリング方式が決定される。そして、プロファイルタグテーブルＴに登録する。
【００３６】
このようにして、相手方である実行中である一の関数との組み合わせにより他の関数のスケジューリング方式が決まる。このあと、コンパイラ１０１により各アプリケーションソースコードＡＳを実装コンパイル１１２することで実装用実行コードＣ２群が得られる。なお、実装用実行コードＣ２を実行するとリンカ１０３によりどのプロファイルタグテーブルＴと関連づけられるかがわかる。したがって、実装用実行コードＣ２とそれに対応するプロファイルタグテーブルＴとが組み合わさって、実装用実行コードＣ２ごとに出力される。
【００３７】
図４は、本実施の形態にかかる情報処理装置の一実施例を示すブロック図である。情報処理装置４００は、マルチコアプロセッサ（図４では例として４個のＣＰＵ４０１〜４０４）と共有メモリ４０５とがバス４０６で接続されたマルチコアプロセッサシステム４１０を搭載したコンピュータである。情報処理装置４００は、たとえば、携帯電話機、ＰＨＳ、スマートフォン、携帯ゲーム機、電子辞書、電子書籍端末、ノート型パソコンといった携帯型端末が挙げられる。
【００３８】
ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のスケジューラ４１１は、実装用実行コードＣ２とそのプロファイルタグテーブルＴを参照し、起動しようとする実装用実行コードＣ２内の関数のスケジューリングをおこなう。これにより、動的または静的スケジューリングが可能となる。つぎに、図１に示したＥＳＬシミュレータ１０２の具体的な動作について説明する。
【００３９】
図５は、本実施の形態にかかる第１のＥＳＬシミュレーションを示す説明図である。ＥＳＬシミュレータ１０２では、ＣＰＵモデル５０１と図３に示した負荷源Ｌと共有メモリモデル５０２とをバスモデル５０３で接続したシステムモデル５００を用いる。負荷源Ｌは、自律的にアクセス競合率ρを０〜１００［％］に変化させる。たとえば、Δρ刻みで変化させる。Δρは、１［％］など任意に設定可能である。また、競合特性情報１２０は、アクセス競合率に対するＣＰＵモデル５０１の性能を示している。
【００４０】
たとえば、あるアクセス競合率ρのとき、アクセス競合テストプログラムＴＰのスコアが、９：１（９がアクセス競合テストプログラムＴＰを実行したＣＰＵモデル５０１、１が負荷源Ｌ）であるとすると、このアクセス競合率ρでのＣＰＵ性能比率は、９０［％］となる。すなわち、負荷源Ｌにより１０［％］性能が劣化したことを示している。
【００４１】
図６は、競合特性情報１２０を示すグラフである。図６では、横軸をアクセス競合率、縦軸をピークに対するＣＰＵ性能比率としている。ピークに対するＣＰＵ性能比率とは、負荷源Ｌによる負荷が無負荷状態（ρ＝０）のときのＣＰＵ性能を１００［％］、すなわちピークとしたときのＣＰＵ性能の比率である。
【００４２】
また、競合特性情報１２０は通常のアーキテクチャであれば、アクセス競合率が増加するにつれ、一定の値で飽和（漸近）する。ハードアービトレーションにより必ず一定周期でアクセス可能になるからである。
【００４３】
実際には、Δρ刻みでＣＰＵ性能比率をプロットされる。プロットされた各点を用いて最小自乗法などの周知の技術により競合特性情報１２０の近似式を生成する。近似式をグラフ化すると競合特性曲線６００となる。そして、近似式（競合特性曲線６００）から性能漸近値Ｚを求める。性能漸近値Ｚの求め方は、近似式でのρの値を無限大まで大きくしたときのＣＰＵ性能比率を求めればよい。また、単純に、ρ＝１００［％］のときのＣＰＵ性能比率を性能漸近値Ｚとしてもよい。
【００４４】
また、求めた性能漸近値Ｚに対する許容値率σを設定する。たとえば、σ＝１０［％］とする。性能漸近値Ｚのσ［％］のＣＰＵ性能比率と競合特性曲線６００とが交差するときのアクセス競合率ρを境界値ｂとする。すなわち、境界値ｂ以上で静的スケジューリングすべきと判断され、境界値ｂ未満で動的スケジューリングすべきと判断される。
【００４５】
図６では、性能漸近値ＺをＣＰＵ性能比率３０［％］、許容値率σ＝１０［％］とすると、アクセス競合率ρ＝３８［％］が性能劣化の境界値ｂとなる。すなわち、ピーク（１００［％］）から７０［％］分下がった性能比率を性能漸近値Ｚとして、性能劣化の境界となる境界値ｂを設けることとなる。なお、許容値率σについては、対象となるアーキテクチャ（マルチコアプロセッサシステム）に応じて設定する。
【００４６】
図７は、本実施の形態にかかる第２のＥＳＬシミュレーションを示す説明図である。図７では、２つのＣＰＵモデル７０１，７０２と共有メモリモデル７０３とがバスモデル７０４に接続されたマルチコアプロセッサシステムのシステムモデル７００を用いる。第２のＣＰＵモデル７０２には、第２のアプリケーションＣ１２内のプロセスやスレッドなどの第２の関数ｃ１２を割り当てて実行させておく。第１のＣＰＵモデル７０１には、第２のアプリケーションＣ１２とは異なる第１のアプリケーションＣ１１内の呼出対象となる関数ｃ１１を割り当てる。
【００４７】
たとえば、第２のＣＰＵモデル７０２では、アプリケーションＢの関数Ｂ１が実行中であるとする。この状況で、第１の関数としてアプリケーションＡの関数Ａ１を呼び出して第１のＣＰＵモデル７０１で実行させると、共有メモリモデル７０３にアクセス競合が発生する。そして、第１のＣＰＵモデル７０１のＣＰＵ性能比率を第２のＥＳＬシミュレーションによる競合結果として取り出す。競合結果となるＣＰＵ性能比率は、第２のＣＰＵモデル７０２が実行していない状態、すなわち、無負荷状態をピークとする。
【００４８】
そして、競合結果を競合特性情報１２０の近似式（競合特性曲線６００）に当てはめて、競合結果（ＣＰＵ性能比率）であるときの第１のＣＰＵモデル７０１のアクセス競合率ρを求める。このときのアクセス競合率ρが境界値ｂ未満である場合は、アプリケーションＡの関数Ａ１のスケジューリング方式は動的スケジューリングを選択する。
【００４９】
一方、境界値ｂ以上である場合は、アプリケーションＡの関数Ａ１のスケジューリング方式は静的スケジューリングを選択する。そして、この選択されたスケジューリング方式を、アプリケーションＡのプロファイルタグテーブルＴの動作条件エリアに、関数Ｂ１を実行中の場合の関数Ａ１のスケジューリング方式として登録する。
【００５０】
図８は、登録後のプロファイルタグテーブルＴの一例を示す説明図である。図８では、アプリケーションＡのプロファイルタグテーブルＴの登録内容を示している。プロファイルタグテーブルＴでは、関数ごとに、コーリー・コーラー情報エリア、実行開始・終了時刻情報エリア、および動作条件エリアが確保されているが、図８では、簡略化のため、コーリー・コーラー情報エリアを省略している。プロファイルタグテーブルＴにおいて、『ｃｏｎｔｅｎｔｉｏｎ｛』から『｝／／ｃｏｎｔｅｎｔｉｏｎ』までの記述が該当する関数の動作条件エリアである。
【００５１】
たとえば、関数Ａ１（「ｆｕｎｃＡ１」）が呼出対象関数である場合、実行中の関数が各アプリケーションＢ（「ＡｐｐｌｙＢ」）の関数Ｂ１（「ｆｕｎｃＢ１」）のときは、“ｓｔａｔｉｃ”が登録されている。すなわち、アプリケーションＢの関数Ｂ１実行中に関数Ａ１が呼ばれたら静的スケジューリングをおこなうことを示している。この場合、常に競合が発生している状態なので、静的スケジューリング、たとえば、同一のプロセッサに割り当ててタイムスライス動作させることで競合を解消する。
【００５２】
一方、実行中の関数が各アプリケーションＢの関数Ｂ３（「ＦｕｎｃＢ３」）のときは、“ｄｙｎａｍｉｃ”が登録されている。すなわち、アプリケーションＢの関数Ｂ３実行中に関数Ａ１が呼ばれたら動的スケジューリングをおこなうことを示している。この場合、アプリケーションＢからの影響をうけにくかったり、または、動作状態によるオーバーヘッドが広域変化するため、最も負荷の軽いＣＰＵにダイナミックに割り当てる。
【００５３】
図９は、本実施の形態にかかる生成装置１００のハードウェア構成の一例を示すブロック図である。図９において、生成装置１００は、ＣＰＵ９０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）９０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９０３と、磁気ディスクドライブ９０４と、磁気ディスク９０５と、光ディスクドライブ９０６と、光ディスク９０７と、ディスプレイ９０８と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）９０９と、キーボード９１０と、マウス９１１と、スキャナ９１２と、プリンタ９１３と、を備えている。また、各構成部はバス９００によってそれぞれ接続されている。
【００５４】
ここで、ＣＰＵ９０１は、生成装置１００の全体の制御を司る。ＲＯＭ９０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ９０３は、ＣＰＵ９０１のワークエリアとして使用される。磁気ディスクドライブ９０４は、ＣＰＵ９０１の制御にしたがって磁気ディスク９０５に対するデータのリード／ライトを制御する。磁気ディスク９０５は、磁気ディスクドライブ９０４の制御で書き込まれたデータを記憶する。
【００５５】
光ディスクドライブ９０６は、ＣＰＵ９０１の制御にしたがって光ディスク９０７に対するデータのリード／ライトを制御する。光ディスク９０７は、光ディスクドライブ９０６の制御で書き込まれたデータを記憶したり、光ディスク９０７に記憶されたデータをコンピュータに読み取らせたりする。
【００５６】
ディスプレイ９０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ９０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００５７】
インターフェース（以下、「Ｉ／Ｆ」と略する。）９０９は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク９１４に接続され、このネットワーク９１４を介して他の装置に接続される。そして、Ｉ／Ｆ９０９は、ネットワーク９１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ９０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００５８】
キーボード９１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス９１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００５９】
スキャナ９１２は、画像を光学的に読み取り、生成装置１００内に画像データを取り込む。なお、スキャナ９１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ９１３は、画像データや文書データを印刷する。プリンタ９１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００６０】
（生成装置１００の機能的構成）
図１０は、本実施の形態にかかる生成装置１００の機能的構成を示すブロック図である。生成装置１００は、実行部１００１と、生成部１００２と、特定部１００３と、決定部１００４と、保存部１００５と、取得部１００６と、検出部１００７と、選択部１００８と、登録部１００９と、を備える。実行部１００１〜登録部１００９は、具体的には、たとえば、図９に示したＲＯＭ９０２、ＲＡＭ９０３、磁気ディスク９０５などの記憶装置に記憶されたプログラムをＣＰＵ９０１に実行させることにより、その機能を実現する。
【００６１】
実行部１００１は、第１のＥＳＬシミュレーションを実行する機能を有する。具体的には、たとえば、図５に示したシステムモデルにより第１のＥＳＬシミュレーションを実行する。そして、実行結果となるＣＰＵモデルの性能に関する指標値として、たとえば、ピークに対するＣＰＵ性能比率を取得することとなる。また、第１のＥＳＬシミュレーションでは、アクセス競合率ρがΔρ刻みで０〜１００［％］まで変化するため、アクセス競合率ρごとにピークに対するＣＰＵ性能比率を取得することとなる。
【００６２】
生成部１００２は、アクセス競合率ごとに求められたプロセッサモデルの性能に関する指標値に基づいて、プロセッサの競合特性の近似式を生成する機能を有する。具体的には、実行部１００１では、アクセス競合率ρごとにピークに対するＣＰＵ性能比率が取得されるため、各ＣＰＵ性能比率に対し最小自乗法などの周知の技術を適用することで競合特性情報１２０の近似式を生成する。なお、アクセス競合が発生した場合は、指数関数または対数関数的な減衰となるため、モデルとなる曲線６００は指数関数や対数関数を用いればよい。
【００６３】
特定部１００３は、生成部１００２によって生成された競合特性の近似式に基づいて、プロセッサモデルの性能に関する指標値の中から、プロセッサモデルの性能が漸近する性能漸近値Ｚを特定する機能を有する。具体的には、たとえば、競合特性曲線６００から性能漸近値Ｚを求める。
【００６４】
決定部１００４は、アクセス競合率のうち、特定部１００３によって特定された性能漸近値Ｚに対する許容誤差値と近似式とに基づくアクセス競合率を、プロセッサモデルの性能劣化の境界値ｂに決定する機能を有する。具体的には、たとえば、許容値率σから得られた性能漸近値Ｚの許容誤差値と競合特性曲線６００とが交差するアクセス競合率ρを境界値ｂに決定する。
【００６５】
保存部１００５は、実行部１００１、生成部１００２、特定部１００３および決定部１００４から得られた競合特性情報１２０を記憶領域に保存する機能を有する。保存された競合特性情報１２０は、第２のＥＳＬシミュレーションに用いられる。
【００６６】
取得部１００６は、第２のＥＳＬシミュレーションを実行して、実行結果となる性能指標値を取得する機能を有する。具体的には、たとえば、図７に示したマルチコアプロセッサシステムモデルにより第２のＥＳＬシミュレーションを実行する。そして、実行結果となる第１のＣＰＵモデル７０１の性能に関する指標値として、たとえば、第１のＣＰＵモデル７０１のピークに対するＣＰＵ性能比率を取得することとなる。
【００６７】
検出部１００７は、近似式を参照して、取得部１００６によって取得された指標値でのアクセス競合率を検出する機能を有する。具体的には、たとえば、取得されたＣＰＵ性能比率に対応するアクセス競合率ρを競合特性曲線６００から検出する。
【００６８】
選択部１００８は、検出されたアクセス競合率ρと境界値ｂとを比較することにより、第２のプログラムの実行中に第１のプログラムを実行する場合のスケジューリング方式を、動的スケジューリングまたは静的スケジューリングの中から選択する機能を有する。具体的には、たとえば、図７に示した第２のＥＳＬシミュレーションにおいて、第２の関数の実行中に第１の関数を実行する場合のスケジューリング方式を選択する。たとえば、検出されたアクセス競合率ρが境界値ｂ以上である場合は静的スケジューリング、境界値ｂ未満の場合は動的スケジューリングを選択する。
【００６９】
登録部１００９は、選択部１００８によって選択されたスケジューリング方式をプロファイルタグテーブルＴに登録する機能を有する。具体的には、たとえば、図８に示したように、関数Ａ１（第１の関数）について選択されたスケジューリング方式（たとえば、静的スケジューリング）のタグ“ｓｔａｔｉｃ”を関数Ｂ１と関連付けて登録する。
【００７０】
図１１は、情報処理装置４００の機能的構成を示すブロック図である。情報処理装置４００は、指定部１１０１と、検出部１１０２と、特定部１１０３と、決定部１１０４と、割当部１１０５とを備えている。指定部１１０１〜割当部１１０５は、具体的には、たとえば、図４に示した共有メモリ４０５などの記憶装置に記憶されたプログラムをＣＰＵ４０１〜４０４に実行させることにより、その機能を実現する。
【００７１】
指定部１１０１は、対象プログラムを指定する機能を有する。具体的には、たとえば、呼び出されたアプリケーション内の呼出対象関数を指定する。
【００７２】
検出部１１０２は、指定部１１０１によって対象プログラムが指定された場合、マルチコアプロセッサ内のプロセッサにより実行中のプログラムを検出する機能を有する。たとえば、指定部１１０１により呼出対象関数として関数Ａ１が指定された場合、マルチコアプロセッサ内で他の関数Ｂ１を実行中のＣＰＵを検出し、そのＣＰＵ番号を保持しておく。
【００７３】
特定部１１０３は、テーブルを参照して、検出部１１０２によって検出された実行中のプログラムと同時に対象プログラムを実行させる場合の対象プログラムのスケジューリング方式を特定する機能を有する。具体的には、たとえば、呼出対象関数を含むアプリケーションのプロファイルタグテーブルＴを参照して、関数Ｂ１の実行中における関数Ａ１のスケジューリング方式を読み出し、静的スケジューリングであるか動的スケジューリングであるかを特定する。“ｓｔａｔｉｃ”ならば静的スケジューリングであり、“ｄｙｎａｍｉｃ”ならば動的スケジューリングである。
【００７４】
決定部１１０４は、特定部１１０３によって特定されたスケジューリング方式に従って対象プログラムを実行させるプロセッサをマルチコアプロセッサの中から決定する機能を有する。具体的には、特定部１１０３によって特定されたスケジューリング方式が静的スケジューリングである場合、対象プログラムを実行させるプロセッサを、対象プログラムを実行中のプログラムが割り当てられているプロセッサに決定する。たとえば、関数Ｂ１の実行中における関数Ａ１のスケジューリング方式は静的スケジューリングであるため、関数Ｂ１を実行するＣＰＵのＣＰＵ番号を読み出す。
【００７５】
一方、特定部１１０３によって特定されたスケジューリング方式が動的スケジューリングである場合、対象プログラムを実行させるプロセッサを、対象プログラムを実行中のプログラムが割り当てられているプロセッサ以外の残余のプロセッサのうち最も低負荷のプロセッサに決定する。
【００７６】
たとえば、図８を参照すると、関数Ｂ３の実行中における関数Ａ１のスケジューリング方式は動的スケジューリングであるため、関数Ｂ１を実行するＣＰＵ以外の残余のＣＰＵ群の中から割当先に決定する。より具体的には、残余のＣＰＵ群のうちアイドル状態のＣＰＵを割当先に決定する。アイドル状態のＣＰＵがない場合は、残余のＣＰＵ群のうち最も低負荷なＣＰＵを割当先に決定する。なお、ＣＰＵの負荷については既存技術によりＯＳが取得している。
【００７７】
割当部１１０５は、決定部１１０４によって決定されたプロセッサに対象プログラムを割り当てる機能を有する。具体的には、たとえば、決定部１１０４によって決定された割当先のＣＰＵに、対象プログラムである呼出対象関数を通知する。より具体的には、呼出対象関数が保存されている共有メモリ内のアドレスを通知することで、割当先のＣＰＵはその通知されたアドレスを指定して、割当先のＣＰＵ内のキャッシュメモリに読み込んで実行することとなる。
【００７８】
図１２は、本実施の形態にかかる生成装置１００による第１のＥＳＬシミュレーションの処理手順を示すフローチャートである。まず、生成装置１００は、実行部１００１により、システムモデル５００内の負荷源Ｌのアクセス競合率ρをρ＝０に設定する（ステップＳ１２０１）。つぎに、生成装置１００は、システムモデル５００についてＥＳＬシミュレーションを実行する（ステップＳ１２０２）。
【００７９】
このＥＳＬシミュレーションにより、生成装置１００は、ＣＰＵモデル５０１のアクセス競合率ρでのＣＰＵ性能比率を取得する（ステップＳ１２０３）。そして、生成装置１００は、実行部１００１により、ρ＜１００［％］であるか否かを判断する（ステップＳ１２０４）。
【００８０】
ρ＜１００［％］でない場合（ステップＳ１２０４：Ｎｏ）、生成装置１００は、現在のρにΔρを加算して（ステップＳ１２０５）、ステップＳ１２０２に戻る。一方、ρ＜１００［％］である場合（ステップＳ１２０４：Ｙｅｓ）、生成装置１００は、得られたＣＰＵ性能比率から競合特性の近似式を生成する（ステップＳ１２０６）。
【００８１】
このあと、生成装置１００は、生成された近似式から競合特性に関する性能漸近値Ｚを特定する（ステップＳ１２０７）。そして、生成装置１００は、近似式と許容値率σから性能劣化のしきい値となる境界値ｂを決定する（ステップＳ１２０８）。このあと、生成装置１００は、競合特性情報１２０として保存する記憶装置に保存する（ステップＳ１２０９）。これにより、第１のＥＳＬシミュレーションを終了する。
【００８２】
このように、第１のＥＳＬシミュレーションをおこなうことで、対象アーキテクチャで起こりうる競合によるＣＰＵの統計的な性能劣化を把握することができる。つぎに、図１２の第１のＥＳＬシミュレーションで得られた競合特性情報１２０を用いた第２のＥＳＬシミュレーションの処理手順について説明する。
【００８３】
図１３は、第２のＥＳＬシミュレーションの処理手順を示すフローチャートである。生成装置１００は、取得部１００６により、事前に同時実行するアプリケーションの組み合わせを読み込んでおく。そして、生成装置１００は、第１のアプリケーションとなる未選択のアプリケーション（評価用実行コードＣ１）があるか否かを判断する（ステップＳ１３０１）。未選択のアプリケーションがある場合（ステップＳ１３０１：Ｙｅｓ）、生成装置１００は、未選択のアプリケーションを選択して第１のアプリケーションに設定する（ステップＳ１３０２）。
【００８４】
つぎに、生成装置１００は、第１のアプリケーションに未選択の関数があるか否かを判断する（ステップＳ１３０３）。未選択の関数がある場合（ステップＳ１３０３：Ｙｅｓ）、生成装置１００は、未選択の関数を選択して第１の関数に設定する（ステップＳ１３０４）。また、生成装置１００は、同時実行する第２のアプリとなる未選択のアプリケーションがあるか否かを判断する（ステップＳ１３０５）。
【００８５】
未選択のアプリケーションがある場合（ステップＳ１３０５：Ｙｅｓ）、生成装置１００は、未選択のアプリケーションを選択して第２のアプリケーションに設定する（ステップＳ１３０６）。つぎに、生成装置１００は、第２のアプリケーションに未選択の関数があるか否かを判断する（ステップＳ１３０７）。未選択の関数がある場合（ステップＳ１３０７：Ｙｅｓ）、生成装置１００は、未選択の関数を選択して第２の関数に設定する（ステップＳ１３０８）。
【００８６】
このあと、生成装置１００は、第２の関数を第２のＣＰＵモデル７０２に与えてＥＳＬシミュレーションを実行する（ステップＳ１３０９）。さらに、生成装置１００は、第２の関数の実行中において、関数が割り当てられていない第１のＣＰＵモデル７０１に第１の関数を与えて、ＥＳＬシミュレーションを実行する（ステップＳ１３１０）。これにより、第１の関数を実行する第１のＣＰＵモデル７０１のＣＰＵ性能比率が得られる。
【００８７】
たとえば、第１のＣＰＵモデル７０１と第２のＣＰＵモデル７０２との共有メモリへのアクセス頻度が、７：３である場合、ピーク（１００［％］）に対する第１のＣＰＵモデル７０１のＣＰＵ性能比率は、７０［％］となる。すなわち、第２のＣＰＵモデル７０２が第２の関数を実行中であるため、第１のＣＰＵモデル７０１の性能が３０［％］劣化したことを示している。そして、生成装置１００は、ＥＳＬシミュレーションが終了するまで待ち受け（ステップＳ１３１１：Ｎｏ）、終了した場合（ステップＳ１３１１：Ｙｅｓ）、ステップＳ１３０７に戻る。
【００８８】
そして、ステップＳ１３０７において、未選択の関数がない場合（ステップＳ１３０７：Ｎｏ）、ステップＳ１３０５に戻る。また、ステップＳ１３０５において、未選択のアプリケーションがない場合（ステップＳ１３０５：Ｎｏ）、ステップＳ１３０３に戻る。また、ステップＳ１３０３において、第１のアプリケーションに未選択関数がない場合（ステップＳ１３０３：Ｎｏ）、ステップＳ１３０１に戻る。
【００８９】
また、ステップＳ１３０１において、第１のアプリケーションとなる未選択のアプリケーションがない場合（ステップＳ１３０１：Ｎｏ）、第２のＥＳＬシミュレーションを終了する。これにより、すべての関数の組み合わせについて第２のＥＳＬシミュレーションを網羅することができる。
【００９０】
図１４は、プロファイルタグテーブルＴへの登録処理手順を示すフローチャートである。図１４のフローチャートに示した登録処理は、図１３に示した第２のＥＳＬシミュレーションと連動して実行される。
【００９１】
まず、生成装置１００は、図１３のステップＳ１３０４において第１の関数が設定されるのを待ち受ける（ステップＳ１４０１：Ｎｏ）。第１の関数が設定された場合（ステップＳ１４０１：Ｙｅｓ）、生成装置１００は、第１のアプリケーションのプロファイルタグテーブルＴの動作条件エリアに第１の関数を登録する（ステップＳ１４０２）。
【００９２】
つぎに、生成装置１００は、図１３のステップＳ１３０８において第２の関数が設定されるのを待ち受ける（ステップＳ１４０３：Ｎｏ）。第２の関数が設定された場合（ステップＳ１４０３：Ｙｅｓ）、生成装置１００は、第１のアプリケーションのプロファイルタグテーブルＴの動作条件エリアの第１の関数の登録エリアに、第２の関数を登録する（ステップＳ１４０４）。
【００９３】
そして、図１３のステップＳ１３１０でのＥＳＬシミュレーションから得られる第１のＣＰＵモデル７０１のＣＰＵ性能比率を取得する（ステップＳ１４０５）。ＣＰＵ性能比率を取得した場合、生成装置１００は、競合特性情報１２０を参照して、取得したＣＰＵ性能比率に対応するアクセス競合率を取得する（ステップＳ１４０６）。そして、取得したアクセス競合率が境界値ｂ以上であるか否かを判断する（ステップＳ１４０７）。
【００９４】
境界値ｂ以上である場合（ステップＳ１４０７：Ｙｅｓ）、具体的には、図６の境界値ｂから左側の領域の場合、生成装置１００は、第１のＣＰＵモデル７０１のＣＰＵ性能比率が高いため静的スケジューリングすべきと判断し、第２の関数に対し、静的スケジューリングタグを登録する（ステップＳ１４０８）。すなわち、第２の関数の実行中において第１の関数が呼び出された場合は静的スケジューリングすべきとの登録をおこなう。
【００９５】
一方、取得したアクセス競合率が境界値ｂ未満である場合（ステップＳ１４０７：Ｎｏ）、具体的には、図６の境界値ｂから左側の領域の場合、生成装置１００は、第１のＣＰＵモデル７０１のＣＰＵ性能比率が高いため動的スケジューリングすべきと判断し、第２の関数に対し、動的スケジューリングタグを登録する（ステップＳ１４０９）。すなわち、第２の関数の実行中において第１の関数が呼び出された場合は動的スケジューリングすべきとの登録をおこなう。そして、ステップＳ１４０８またはＳ１４０９のあと、ステップＳ１４０１に戻る。
【００９６】
図１５は、情報処理装置４００によるスケジューリング処理手順を示すフローチャートである。スケジューリング処理は、情報処理装置４００内のＯＳのスケジューラ４１１がプロフィルタグテーブルＴを参照することで実行される。
【００９７】
まず、情報処理装置４００は、呼び出しを待ち受け（ステップＳ１５０１：Ｎｏ）、呼び出しがあった場合（ステップＳ１５０１：Ｙｅｓ）、情報処理装置４００は、呼出対象アプリケーション中の呼出対象関数を特定する（ステップＳ１５０２）。一方で、情報処理装置４００は、実行中アプリケーションの実行中関数を特定する（ステップＳ１５０３）。
【００９８】
つぎに、情報処理装置４００は、呼出対象アプリケーションのプロファイルタグテーブルＴを参照して、実行中関数の実行中における呼出対象関数のスケジューリング方式を取得する（ステップＳ１５０４）。たとえば、図８において、実行中関数が関数Ｂ１、呼出対象関数が関数Ａ１とすると、“ｓｔａｔｉｃ”を読み出す。
【００９９】
そして、情報処理装置４００は、取得したスケジューリング方式が動的スケジューリングか静的スケジューリングかを判断する（ステップＳ１５０５）。動的スケジューリングの場合（ステップＳ１５０５：動的）、情報処理装置４００は、空きＣＰＵ番号を特定し（ステップＳ１５０６）、ステップＳ１５０８に移行する。なお、空きＣＰＵがない場合は、実行中関数を実行しているＣＰＵ以外の残余のＣＰＵで最も低負荷なＣＰＵのＣＰＵ番号を特定することとする。
【０１００】
一方、静的スケジューリングの場合（ステップＳ１５０５：静的）、情報処理装置４００は、実行中関数を実行中のＣＰＵのＣＰＵ番号を特定して（ステップＳ１５０７）、ステップＳ１５０８に移行する。
【０１０１】
ステップＳ１５０８では、情報処理装置４００は、呼出対象関数の関数名およびステップＳ１５０６またはＳ１５０７で特定されたＣＰＵ番号をタスク実行テーブルに登録する（ステップＳ１５０８）。そして、情報処理装置４００は、呼出対象関数のコンテキストを生成し（ステップＳ１５０９）、タスク実行テーブルを参照して、生成されたコンテキストを、特定されたＣＰＵ番号のＣＰＵに通知する（ステップＳ１５１０）。これにより、呼出対象関数が、通知されたＣＰＵで実行されることとなる。
【０１０２】
つぎに、動作例について図１６〜図１８を用いて説明する。図１６〜図１８では、ＣＰＵ４０１にはアプリケーションＡが起動されており、ＣＰＵ４０２にはアプリケーションＢが起動されており、ＣＰＵ４０３にはアプリケーションＢの関数Ｂ１が実行中であり、ＣＰＵ４０４がアイドル状態の空きＣＰＵである。また、スケジューラ４１１は、たとえば、マスタとなるＣＰＵ４０１で実行されるものとする。この状況で、アプリケーションＡの関数Ａ１を呼び出す場合について説明する。
【０１０３】
図１６は、本実施の形態を適用しない場合の失敗例となるスケジューリングを示す説明図である。図１６では、上述した実施の形態を適用しないため、関数Ａ１が呼び出された場合、ＣＰＵ４０１ではスケジューラ４１１が空きＣＰＵ４０４を特定し、動的スケジューリングをおこなう。すなわち、空きＣＰＵであるＣＰＵ４０４に呼出対象関数である関数Ａ１を割り当てることとなる。この場合、関数Ａ１と関数Ｂ１との間でロック状態が頻発するため、ロック期間中のＣＰＵパワーが無駄となる。
【０１０４】
図１７は、本実施の形態を適用した場合のスケジューリング（その１）を示す説明図である。図１７は、静的スケジューリングをおこなった例である。図１７では、関数Ａ１を静的スケジューリングするため、関数Ａ１を実行中の関数Ｂ１と同一のＣＰＵ４０３に割り当てる。これにより、ＣＰＵ４０３では、関数Ａ１と関数Ｂ１とがタイムスライス動作するため、共有メモリでのアクセス競合（オーバーヘッド）が全く発生しない。
【０１０５】
したがって、アクセス競合による性能劣化を隠蔽することができ、ＣＰＵリソースを余すことなく使用することができる。また、関数Ａ１はＣＰＵ４０４に割り当てられないため、ＣＰＵ４０４はアイドル状態を継続することができ、電力のセーブを継続することができる。さらに、スケジューラ４１１は、静的スケジューリングの場合、関数Ｂ１を実行中のＣＰＵのＣＰＵ番号の通知を受けるだけであり、空きＣＰＵを探すといった負荷がなくなるため、スケジューリングのオーバーヘッドも発生しないこととなる。
【０１０６】
図１８は、本実施の形態を適用した場合のスケジューリング（その２）を示す説明図である。図１８は、動的スケジューリングをおこなった例である。図１８では、関数Ｂ３のコンテンションが低いため、空きＣＰＵ４０４に動的にスケジューリングしてもアクセス競合の性能劣化があっても問題なく動作することができる。
【０１０７】
このように、本実施の形態では、可能な限り静的スケジューリングを実施することでオーバーヘッドを軽減しつつ、不確定な動作をするような状態のみにおいて動的スケジューリングを実施することができる。
【０１０８】
特に、組み込みシステムの場合、たとえばテレビシステムなど、限られた操作とアプリケーションしか存在しないようなシステムでは比較的静的スケジューリングが有効であるが、携帯端末など、組み込みシステムでありながら任意のアプリケーションを利用者の任意のオペレーションにより操作されるような汎用的な運用を行うものにおいては、どうしても動的にスケジューリングするユースケースが多くなる。
【０１０９】
したがって、本実施の形態を適用することで、システムパフォーマンスを劣化させるスケジューリングオーバーヘッドを軽減すべく、従来では動的処理を余儀なくされたようなケースにおいても静的スケジューリングを行うことができる。したがって、システムパフォーマンスの向上を図ることができる。
【符号の説明】
【０１１０】
１００  生成装置
４００  情報処理装置
１２０  競合特性情報
４１０  マルチコアプロセッサシステム
１００１  実行部
１００２  生成部
１００３  特定部
１００４  決定部
１００５  保存部
１００６  取得部
１００７  検出部
１００８  選択部
１００９  登録部
１１０１  指定部
１１０２  検出部
１１０３  特定部
１１０４  決定部
１１０５  割当部
【図１】
2011114478.tif 000003
【図２】
2011114478.tif 000004
【図３】
2011114478.tif 000005
【図４】
2011114478.tif 000006
【図５】
2011114478.tif 000007
【図６】
2011114478.tif 000008
【図７】
2011114478.tif 000009
【図８】
2011114478.tif 000010
【図９】
2011114478.tif 000011
【図１０】
2011114478.tif 000012
【図１１】
2011114478.tif 000013
【図１２】
2011114478.tif 000014
【図１３】
2011114478.tif 000015
【図１４】
2011114478.tif 000016
【図１５】
2011114478.tif 000017
【図１６】
2011114478.tif 000018
【図１７】
2011114478.tif 000019
【図１８】
2011114478.tif 000020
【手続補正書】
【提出日】平成24年9月26日(2012.9.26)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プロセッサモデルと当該プロセッサモデルがアクセス可能なメモリモデルとアクセス競合率に応じて前記メモリモデルにアクセスする負荷源とを表現したシミュレーションモデルを用いてシミュレーションを実行することにより、前記プロセッサモデルの性能に関する指標値を前記アクセス競合率ごとに求める実行工程と、
前記実行工程によって求められた前記アクセス競合率ごとの指標値を競合特性情報として記憶領域に保存する保存工程と、
を含んだことを特徴とする生成方法。
【請求項２】
前記実行工程により、前記アクセス競合率ごとに求められた前記プロセッサモデルの性能に関する指標値に基づいて、前記プロセッサモデルに関する競合特性の近似式を生成する生成工程を含み、
前記保存工程は、
前記生成工程によって生成された近似式を前記競合特性情報として前記記憶領域に保存することを特徴とする請求項１に記載の生成方法。
【請求項３】
前記生成工程によって生成された競合特性の近似式に基づいて、前記プロセッサモデルの性能に関する指標値の中から、前記プロセッサモデルの性能が漸近する性能漸近値を特定する特定工程を含み、
前記保存工程は、
前記特定工程によって特定された性能漸近値を前記競合特性情報として前記記憶領域に保存することを特徴とする請求項２に記載の生成方法。
【請求項４】
前記アクセス競合率のうち、前記特定工程によって特定された性能漸近値に対する許容誤差値と前記近似式とに基づくアクセス競合率を、前記プロセッサモデルの性能劣化の境界値に決定する決定工程を含み、
前記保存工程は、
前記許容誤差値および前記決定工程によって決定された境界値を前記競合特性情報として前記記憶領域に保存することを特徴とする請求項３に記載の生成方法。
【請求項５】
第１のプロセッサモデルと第２のプロセッサモデルと前記第１および第２のプロセッサモデルがアクセス可能な共有メモリモデルとを表現したマルチコアプロセッサシステムモデルにおいて、第１および第２のプログラムのうち前記第２のプログラムが前記第２のプロセッサモデルで実行中に、前記第１のプログラムを前記第１のプロセッサモデルで実行させたときの前記第１のプロセッサモデルの性能に関する指標値を取得する取得工程と、
前記近似式を参照して、前記取得工程によって取得された指標値でのアクセス競合率を検出する検出工程と、
前記検出工程によって検出されたアクセス競合率と前記境界値とを比較することにより、前記第２のプログラムの実行中に前記第１のプログラムを実行する場合のスケジューリング方式を、動的スケジューリングまたは静的スケジューリングの中から選択する選択工程と、
前記選択工程によって選択されたスケジューリング方式を、前記第１のプログラムの呼出時に参照されるテーブルに登録する登録工程と、
を含んだことを特徴とする請求項４に記載の生成方法。
【請求項６】
プログラムごとに他のプログラムと同時実行する場合のスケジューリング方式が登録され前記プログラムの呼出時に参照されるテーブルと、マルチコアプロセッサと、を備える情報処理装置が、
対象プログラムを指定する指定工程と、
前記指定工程によって前記対象プログラムが指定された場合、前記マルチコアプロセッサ内のプロセッサにより実行中のプログラムを検出する検出工程と、
前記テーブルを参照して、前記検出工程によって検出された実行中のプログラムとともに前記マルチコアプロセッサで前記対象プログラムを実行させる場合の前記対象プログラムのスケジューリング方式を特定する特定工程と、
前記特定工程によって特定されたスケジューリング方式に従って前記対象プログラムを実行させるプロセッサを前記マルチコアプロセッサの中から決定する決定工程と、
前記決定工程によって決定されたプロセッサに前記対象プログラムを割り当てる割当工程と、
を実行することを特徴とするスケジューリング方法。
【請求項７】
前記決定工程は、
前記特定工程によって特定されたスケジューリング方式が静的スケジューリングである場合、前記対象プログラムを実行させるプロセッサを、前記対象プログラムを前記実行中のプログラムが割り当てられているプロセッサに決定することを特徴とする請求項６に記載のスケジューリング方法。
【請求項８】
前記決定工程は、
前記特定工程によって特定されたスケジューリング方式が動的スケジューリングである場合、前記対象プログラムを実行させるプロセッサを、前記対象プログラムを前記実行中のプログラムが割り当てられているプロセッサ以外の残余のプロセッサのうち最も低負荷のプロセッサに決定することを特徴とする請求項６に記載のスケジューリング方法。
【請求項９】
プロセッサモデルと当該プロセッサモデルがアクセス可能なメモリモデルとアクセス競合率に応じて前記メモリモデルにアクセスする負荷源とを表現したシミュレーションモデルを用いてシミュレーションを実行することにより、前記プロセッサモデルの性能に関する指標値を前記アクセス競合率ごとに求める実行工程と、
前記実行工程によって求められた前記アクセス競合率ごとの指標値を競合特性情報として記憶領域に保存する保存工程と、
をコンピュータに実行させることを特徴とする生成プログラム。
【請求項１０】
プログラムごとに他のプログラムと同時実行する場合のスケジューリング方式が登録され前記プログラムの呼出時に参照されるテーブルと、マルチコアプロセッサと、を備える情報処理装置に、
対象プログラムを指定する指定工程と、
前記指定工程によって前記対象プログラムが指定された場合、前記マルチコアプロセッサ内のプロセッサにより実行中のプログラムを検出する検出工程と、
前記テーブルを参照して、前記検出工程によって検出された実行中のプログラムとともに前記マルチコアプロセッサで前記対象プログラムを実行させる場合の前記対象プログラムのスケジューリング方式を特定する特定工程と、
前記特定工程によって特定されたスケジューリング方式に従って前記対象プログラムを実行させるプロセッサを前記マルチコアプロセッサの中から選択する選択工程と、
前記選択工程によって選択されたプロセッサに前記対象プログラムを割り当てる割当工程と、
を実行させることを特徴とするスケジューリングプログラム。
【請求項１１】
プロセッサモデルと当該プロセッサモデルがアクセス可能なメモリモデルとアクセス競合率に応じて前記メモリモデルにアクセスする負荷源とを表現したシミュレーションモデルを用いてシミュレーションを実行することにより、前記プロセッサモデルの性能に関する指標値を前記アクセス競合率ごとに求める実行手段と、
前記実行手段によって求められた前記アクセス競合率ごとの指標値を競合特性情報として記憶領域に保存する保存手段と、
を備えることを特徴とする生成装置。
【請求項１２】
プログラムごとに他のプログラムと同時実行する場合のスケジューリング方式が登録され前記プログラムの呼出時に参照されるテーブルと、マルチコアプロセッサと、を備える情報処理装置であって、
対象プログラムを指定する指定手段と、
前記指定手段によって前記対象プログラムが指定された場合、前記マルチコアプロセッサ内のプロセッサにより実行中のプログラムを検出する検出手段と、
前記テーブルを参照して、前記検出手段によって検出された実行中のプログラムとともに前記マルチコアプロセッサで前記対象プログラムを実行させる場合の前記対象プログラムのスケジューリング方式を特定する特定手段と、
前記特定手段によって特定されたスケジューリング方式に従って前記対象プログラムを実行させるプロセッサを前記マルチコアプロセッサの中から選択する選択手段と、
前記選択手段によって選択されたプロセッサに前記対象プログラムを割り当てる割当手段と、
を備えることを特徴とする情報処理装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報を生成したり生成された情報を用いてスケジューリングをおこなう生成方法、スケジューリング方法、生成プログラム、スケジューリングプログラム、生成装置、および情報処理装置に関する。
【背景技術】
【０００２】
従来、スケジューリング技術として静的スケジューリングと動的スケジューリングが存在する。
【０００３】
静的スケジューリングとは、コンパイルの段階で実行状態を予測したコードを予め固定的なコードとして実行オブジェクトに埋めておくスケジューリング方式である。具体的には、一般的なコードプティマイズや負荷分散をおこなうための実行先ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に固定的にもたせることにより、静的スケジューリングが実行される。
【０００４】
また、静的スケジューリングは、条件分岐処理にあたって、予め分岐比率をもとめることにより、より分岐確率の高いコードをキャッシュラインにのせるようなコード生成をおこなうことができる。静的スケジューリングは、不要なコードを埋め込むことがないため、判断を要する段階でスケジューリングに要する演算処理が入らない。したがって、スケジューリングオーバーヘッドがほとんど発生しない。
【０００５】
また、動的スケジューリングとは、コンパイル時に判明しない不確定要素がある場合、スケジューリングイベント時に、イベント時の状態情報（各プロセッサの負荷など）を収集し、イベント毎の最適な状態をその都度演算するスケジューリング方式である。コンパイル時に判明しない不確定要素としては、たとえば、実行開始後に演算処理量が判明したり、他のソフトウェアとの同時実行にあたって負荷状態が実行してみないとわからない状態がある。
【０００６】
また、スケジューリング計算はＮＰ（Ｎｏｎ−ｄｅｔｅｒｍｉｎｉｓｔｉｃ  Ｐｏｌｙｎｏｍｉａｌ）困難問題とされ、本質的に最適解を求めることは現実時間では難しく、通常は最適解に対する近似解となる（本明細書では、近似解を最適解とする）。従来は、このような最適解を得るためのさまざまなアルゴリズムが提案されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００７−３２８４１６号公報
【特許文献２】特開２００７−１８２６８号公報
【特許文献３】特開２０００−２１５１８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述した静的スケジューリングでは、分岐予測がはずれる場合や、想定外の状態が発生した場合にシステム全体のバランスがくずれてパフォーマンスが極端に落ちることがあるという問題があった。
【０００９】
また、スケジューラなどによるソフトウェアのオーバーヘッドを動的予測するのは効率的ではなく、すでに値が決まっているので静的解析すべきである。また、マルチコア環境で共用メモリにアクセスしたときに発生するアクセス競合といったハードウェア的なオーバーヘッドによりスケジューリング結果が乱される場合がある。
【００１０】
この場合、次回のパターンを予測しようとしても、次回にはパターンが変化してしまうため、動的予測する意味がない。したがって、動的スケジューリングでは、スケジューリングイベントが頻発すると、最適解をもとめるためのスケジューリングオーバーヘッドそのものがパフォーマンスを落とす要因になるという問題があった。
【００１１】
本発明は、上述した従来技術による問題点を解消するため、システムパフォーマンスを劣化させるスケジューリングオーバーヘッドを軽減すべく、動的処理を余儀なくされたようなケースにおいても静的スケジューリングを行うことでシステムパフォーマンスを向上させることができる生成方法、スケジューリング方法、生成プログラム、スケジューリングプログラム、生成装置、および情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本実施例の一態様によると、プロセッサモデルと当該プロセッサモデルがアクセス可能なメモリモデルとアクセス競合率に応じて前記メモリモデルにアクセスする負荷源とを表現したシミュレーションモデルを用いてシミュレーションを実行することにより、前記プロセッサモデルの性能に関する指標値を前記アクセス競合率ごとに求め、求められた前記アクセス競合率ごとの指標値を競合特性情報として記憶領域に保存する生成方法、生成プログラム、および生成装置を提供する。
【００１３】
また、本実施例の他の態様によると、対象プログラムを指定し、前記対象プログラムが指定された場合、マルチコアプロセッサ内のプロセッサにより実行中のプログラムを検出し、テーブルを参照して、検出された実行中のプログラムと同時に前記対象プログラムを実行させる場合の前記対象プログラムのスケジューリング方式を特定し、特定されたスケジューリング方式に従って前記対象プログラムを実行させるプロセッサを前記マルチコアプロセッサの中から決定し、決定されたプロセッサに前記対象プログラムを割り当てるスケジューリング方法、スケジューリングプログラム、および情報処理装置を提供する。
【発明の効果】
【００１４】
本生成方法、スケジューリング方法、生成プログラム、スケジューリングプログラム、生成装置、および情報処理装置によれば、システムパフォーマンスを劣化させるスケジューリングオーバーヘッドを軽減すべく、動的処理を余儀なくされたようなケースにおいても静的スケジューリングを行うことでシステムパフォーマンスを向上させることができるという効果を奏する。
【図面の簡単な説明】
【００１５】
【図１】本実施の形態にかかる生成装置の一実施例を示す説明図である。
【図２】プロファイルタグテーブルＴの一例を示す説明図である。
【図３】負荷源Ｌのコード例を示す説明図である。
【図４】本実施の形態にかかる情報処理装置の一実施例を示すブロック図である。
【図５】本実施の形態にかかる第１のＥＳＬシミュレーションを示す説明図である。
【図６】競合特性情報１２０を示すグラフである。
【図７】本実施の形態にかかる第２のＥＳＬシミュレーションを示す説明図である。
【図８】登録後のプロファイルタグテーブルＴの一例を示す説明図である。
【図９】本実施の形態にかかる生成装置１００のハードウェア構成の一例を示すブロック図である。
【図１０】本実施の形態にかかる生成装置１００の機能的構成を示すブロック図である。
【図１１】情報処理装置４００の機能的構成を示すブロック図である。
【図１２】本実施の形態にかかる生成装置１００による第１のＥＳＬシミュレーションの処理手順を示すフローチャートである。
【図１３】第２のＥＳＬシミュレーションの処理手順を示すフローチャートである。
【図１４】プロファイルタグテーブルＴへの登録処理手順を示すフローチャートである。
【図１５】情報処理装置４００によるスケジューリング処理手順を示すフローチャートである。
【図１６】本実施の形態を適用しない場合の失敗例となるスケジューリングを示す説明図である。
【図１７】本実施の形態を適用した場合のスケジューリング（その１）を示す説明図である。
【図１８】本実施の形態を適用した場合のスケジューリング（その２）を示す説明図である。
【発明を実施するための形態】
【００１６】
本実施の形態では、マルチコアプロセッサシステム内の一のプロセッサで実行中のプログラム（一のアプリケーション内のプロセスやスレッド。「一の関数」。）がある場合、これから呼び出されるプログラム（他のアプリケーション内のプロセスやスレッド。「他の関数」。）をどのようにスケジューリングすべきかというスケジューリング方式を設計段階で決めておく。そして、製品化後は、設計段階で決められたスケジューリング方式でスケジューリングすることでアプリケーションを実行する。
【００１７】
たとえば、静的スケジューリングの場合は、他の関数を一の関数を実行中の一のプロセッサに割り当てて、一の関数と他の関数を時分割で実行することとなる。したがって、時分割実行のため、一の関数と他の関数との間でコンテンションは発生しないこととなる。
【００１８】
一方、動的スケジューリングの場合は、他の関数を一の関数を実行中の一のプロセッサとは異なる他のプロセッサ（たとえば空いているプロセッサ）に割り当てることとなる。
【００１９】
これにより、システムパフォーマンスを劣化させるスケジューリングオーバーヘッドを軽減すべく、動的スケジューリングを余儀なくされたようなケースにおいてもできる限り静的スケジューリングを行うことでシステムパフォーマンスを向上させる。以下に添付図面を参照して詳細に説明する。
【００２０】
図１は、本実施の形態にかかる生成装置の一実施例を示す説明図である。生成装置１００は、アプリケーションソースコードＡＳを入力し、実装用実行コードＣ２およびプロファイルタグテーブルＴを出力する。
【００２１】
生成装置１００は、コンパイラ１０１とＥＳＬ（Ｅｌｅｃｔｒｏｎｉｃ  Ｓｙｓｔｅｍ  Ｌｅｖｅｌ）シミュレータ１０２とリンカ１０３とを備えている。コンパイラ１０１は、アプリケーションソースコードＡＳごとに評価コンパイル１１１と実装コンパイル１１２をおこなう。評価コンパイル１１１とは、アプリケーションソースコードＡＳの評価用実行コードＣ１を生成する処理である。
【００２２】
評価用実行コードＣ１とは、通常の実行コード（図１でいう実装用実行コードＣ２）に、デバッグ情報が埋め込まれた実行コードである。評価オブジェクトとも言う。この埋め込まれたデバッグ情報により、評価用実行コードＣ１は、実装用実行コードＣ２よりも余計な動作をする。また、評価コンパイル１１１では、プロファイルタグテーブルＴを生成する。
【００２３】
図２は、プロファイルタグテーブルＴの一例を示す説明図である。プロファイルタグテーブルＴは、コーリー・コーラー情報エリアと実行開始・終了時刻情報エリアとを有するテーブルである。コーリー・コーラー情報エリアとは、関数や手続きの呼出単位となるコーリー情報やコーラ−情報を記録するエリアである。また、実行開始・終了時刻情報エリアは、評価用実行コードＣ１内の関数の実行開始時刻と実行終了時刻とを記録するエリアである。
【００２４】
本実施の形態では、プロファイルタグテーブルＴは、さらに、動作条件エリアを有する。動作条件エリアとは、事前評価実行時の動作条件を記録するエリアである。簡単に説明すると、対象となる関数のスケジューリング方式が記録されているが、詳細については後述する。なお、プロファイルタグテーブルＴの生成時では、いずれのエリアも空の状態であり、評価用実行コードＣ１を実行することで埋められる。
【００２５】
また、図１において、ＥＳＬシミュレータ１０２は、ＥＳＬシミュレーションを実行する。ここで、ＥＳＬモデルとはハードウェアデバイスのビヘイビア（ふるまい）をもとに記述することによりハードウェア環境をシミュレーション化する技術である。たとえば、プロセッサのＥＳＬモデルでは命令発行の電気回路的なメカニズムをそのままシミュレーションするのではなく、発行命令とそれに要する時間で表現する。
【００２６】
また、バスのＥＳＬモデルでは同様に、回路メカニズムによるデータ伝播の遅延を厳密に計算するのではなく、アクセス要求により設計上のレイテンシパターンを掛け合わせて、動作と時間概念をビヘイビア（ふるまい）としてシミュレーションしていくこととなる。
【００２７】
従来、シミュレーションというとＲＴＬ（Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ）などの回路設計情報をもとに実際に半導体を実装することなくシミュレーションを行うことで実デバイスと同等の動作を実現することで検証を行うために用いられていた。
【００２８】
しかしながら、回路レベルの詳細シミュレーションを実施するには非常に時間がかかり（通常、実デバイスのスピードに対し数千万から数億分の一の処理時間）、アプリケーションを動作させながらのシステム全体の挙動を解析するのは現実的に困難であった。一方で、ＥＳＬモデルでは処理と時間の概念をふるまいとして解析するため回路のシミュレーションをおこなうまでもなく概ねの処理時間を評価することが可能な環境である。
【００２９】
本実施の形態では、２種類のＥＳＬシミュレーションを実行する。１つは、競合特性情報１２０を生成するためのＥＳＬシミュレーションである（以下、「第１のＥＳＬシミュレーション」）。もう１つは、競合特性情報１２０を用いて評価用実行コードＣ１を実行するＥＳＬシミュレーションである（以下、「第２のＥＳＬシミュレーション」）。
【００３０】
まず、第１のＥＳＬシミュレーションでは、マルチコアプロセッサシステムを搭載した情報処理装置のために競合特性情報１２０を生成するが、競合特性情報１２０を生成する際のＥＳＬのシステムモデルは、マルチコアプロセッサシステムと同一構成のモデルではない。マルチコアプロセッサシステムのシステムモデルでは、ＣＰＵモデルが複数用意されるが、ここでは、ＣＰＵモデルが１つで、残余のＣＰＵモデル群については、単一の負荷源Ｌとしてまとめてモデル化する。
【００３１】
すなわち、残余のＣＰＵモデル群がそれぞれアプリケーションによりどのようにふるまうかは関係ない。その反面、共有メモリに対してどれだけトランザクション負荷をかけるかをみればよいため、残余のＣＰＵモデル群を負荷源Ｌとしてまとめても問題なく、かえってシミュレーション速度の高速化を実現できる。
【００３２】
また、第１のＥＳＬシミュレーションでは、競合特性情報１２０を生成する場合、ＥＳＬのシステムモデル上でアクセス競合テストプログラムＴＰを実行することとなる。アクセス競合テストプログラムＴＰは、Ｉ／Ｏ系のベンチマークプログラムであり、共有リソース（たとえば、共有メモリ）に対し、リードとライトをおこなうプログラムである。
【００３３】
また、負荷源Ｌは、アクセス競合テストプログラムＴＰ以外のプログラムを実行するＣＰＵモデル群を擬似的に表現したモデルである。ＣＰＵモデル群がそれぞれアプリケーションにより実際にどのようにふるまうかは関係なく、共有メモリに対してどれだけトランザクション負荷をかけるかをみればよいため、負荷源Ｌとしてまとめても問題なく、かえってシミュレーション速度の高速化を実現できる。
【００３４】
図３は、負荷源Ｌのコード例を示す説明図である。負荷源Ｌは、意図的にコンテンション（競合）を発生させるプログラムである。アクセスが競合している状態の密度（アクセス競合率ρ）がパラメトリックになっている。
【００３５】
また、図１において、第２のＥＳＬシミュレーションでは、負荷源Ｌを有するＥＳＬのシステムモデルとは別に、実装するマルチコアプロセッサシステムをＥＳＬでモデル化したシステムモデル上で各評価用実行コードＣ１を実行する。これにより、評価用実行コードＣ１内の関数ごとにスケジューリング方式が決定される。そして、プロファイルタグテーブルＴに登録する。
【００３６】
このようにして、相手方である実行中である一の関数との組み合わせにより他の関数のスケジューリング方式が決まる。このあと、コンパイラ１０１により各アプリケーションソースコードＡＳを実装コンパイル１１２することで実装用実行コードＣ２群が得られる。なお、実装用実行コードＣ２を実行するとリンカ１０３によりどのプロファイルタグテーブルＴと関連づけられるかがわかる。したがって、実装用実行コードＣ２とそれに対応するプロファイルタグテーブルＴとが組み合わさって、実装用実行コードＣ２ごとに出力される。
【００３７】
図４は、本実施の形態にかかる情報処理装置の一実施例を示すブロック図である。情報処理装置４００は、マルチコアプロセッサ（図４では例として４個のＣＰＵ４０１〜４０４）と共有メモリ４０５とがバス４０６で接続されたマルチコアプロセッサシステム４１０を搭載したコンピュータである。情報処理装置４００は、たとえば、携帯電話機、ＰＨＳ、スマートフォン、携帯ゲーム機、電子辞書、電子書籍端末、ノート型パソコンといった携帯型端末が挙げられる。
【００３８】
ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のスケジューラ４１１は、実装用実行コードＣ２とそのプロファイルタグテーブルＴを参照し、起動しようとする実装用実行コードＣ２内の関数のスケジューリングをおこなう。これにより、動的または静的スケジューリングが可能となる。つぎに、図１に示したＥＳＬシミュレータ１０２の具体的な動作について説明する。
【００３９】
図５は、本実施の形態にかかる第１のＥＳＬシミュレーションを示す説明図である。ＥＳＬシミュレータ１０２では、ＣＰＵモデル５０１と図３に示した負荷源Ｌと共有メモリモデル５０２とをバスモデル５０３で接続したシステムモデル５００を用いる。負荷源Ｌは、自律的にアクセス競合率ρを０〜１００［％］に変化させる。たとえば、Δρ刻みで変化させる。Δρは、１［％］など任意に設定可能である。また、競合特性情報１２０は、アクセス競合率に対するＣＰＵモデル５０１の性能を示している。
【００４０】
たとえば、あるアクセス競合率ρのとき、アクセス競合テストプログラムＴＰのスコアが、９：１（９がアクセス競合テストプログラムＴＰを実行したＣＰＵモデル５０１、１が負荷源Ｌ）であるとすると、このアクセス競合率ρでのＣＰＵ性能比率は、９０［％］となる。すなわち、負荷源Ｌにより１０［％］性能が劣化したことを示している。
【００４１】
図６は、競合特性情報１２０を示すグラフである。図６では、横軸をアクセス競合率、縦軸をピークに対するＣＰＵ性能比率としている。ピークに対するＣＰＵ性能比率とは、負荷源Ｌによる負荷が無負荷状態（ρ＝０）のときのＣＰＵ性能を１００［％］、すなわちピークとしたときのＣＰＵ性能の比率である。
【００４２】
また、競合特性情報１２０は通常のアーキテクチャであれば、アクセス競合率が増加するにつれ、一定の値で飽和（漸近）する。ハードアービトレーションにより必ず一定周期でアクセス可能になるからである。
【００４３】
実際には、Δρ刻みでＣＰＵ性能比率をプロットされる。プロットされた各点を用いて最小自乗法などの周知の技術により競合特性情報１２０の近似式を生成する。近似式をグラフ化すると競合特性曲線６００となる。そして、近似式（競合特性曲線６００）から性能漸近値Ｚを求める。性能漸近値Ｚの求め方は、近似式でのρの値を無限大まで大きくしたときのＣＰＵ性能比率を求めればよい。また、単純に、ρ＝１００［％］のときのＣＰＵ性能比率を性能漸近値Ｚとしてもよい。
【００４４】
また、求めた性能漸近値Ｚに対する許容値率σを設定する。たとえば、σ＝１０［％］とする。性能漸近値Ｚのσ［％］のＣＰＵ性能比率と競合特性曲線６００とが交差するときのアクセス競合率ρを境界値ｂとする。すなわち、境界値ｂ以上で静的スケジューリングすべきと判断され、境界値ｂ未満で動的スケジューリングすべきと判断される。
【００４５】
図６では、性能漸近値ＺをＣＰＵ性能比率３０［％］、許容値率σ＝１０［％］とすると、アクセス競合率ρ＝３８［％］が性能劣化の境界値ｂとなる。すなわち、ピーク（１００［％］）から７０［％］分下がった性能比率を性能漸近値Ｚとして、性能劣化の境界となる境界値ｂを設けることとなる。なお、許容値率σについては、対象となるアーキテクチャ（マルチコアプロセッサシステム）に応じて設定する。
【００４６】
図７は、本実施の形態にかかる第２のＥＳＬシミュレーションを示す説明図である。図７では、２つのＣＰＵモデル７０１，７０２と共有メモリモデル７０３とがバスモデル７０４に接続されたマルチコアプロセッサシステムのシステムモデル７００を用いる。第２のＣＰＵモデル７０２には、第２のアプリケーションＣ１２内のプロセスやスレッドなどの第２の関数ｃ１２を割り当てて実行させておく。第１のＣＰＵモデル７０１には、第２のアプリケーションＣ１２とは異なる第１のアプリケーションＣ１１内の呼出対象となる関数ｃ１１を割り当てる。
【００４７】
たとえば、第２のＣＰＵモデル７０２では、アプリケーションＢの関数Ｂ１が実行中であるとする。この状況で、第１の関数としてアプリケーションＡの関数Ａ１を呼び出して第１のＣＰＵモデル７０１で実行させると、共有メモリモデル７０３にアクセス競合が発生する。そして、第１のＣＰＵモデル７０１のＣＰＵ性能比率を第２のＥＳＬシミュレーションによる競合結果として取り出す。競合結果となるＣＰＵ性能比率は、第２のＣＰＵモデル７０２が実行していない状態、すなわち、無負荷状態をピークとする。
【００４８】
そして、競合結果を競合特性情報１２０の近似式（競合特性曲線６００）に当てはめて、競合結果（ＣＰＵ性能比率）であるときの第１のＣＰＵモデル７０１のアクセス競合率ρを求める。このときのアクセス競合率ρが境界値ｂ未満である場合は、アプリケーションＡの関数Ａ１のスケジューリング方式は動的スケジューリングを選択する。
【００４９】
一方、境界値ｂ以上である場合は、アプリケーションＡの関数Ａ１のスケジューリング方式は静的スケジューリングを選択する。そして、この選択されたスケジューリング方式を、アプリケーションＡのプロファイルタグテーブルＴの動作条件エリアに、関数Ｂ１を実行中の場合の関数Ａ１のスケジューリング方式として登録する。
【００５０】
図８は、登録後のプロファイルタグテーブルＴの一例を示す説明図である。図８では、アプリケーションＡのプロファイルタグテーブルＴの登録内容を示している。プロファイルタグテーブルＴでは、関数ごとに、コーリー・コーラー情報エリア、実行開始・終了時刻情報エリア、および動作条件エリアが確保されているが、図８では、簡略化のため、コーリー・コーラー情報エリアを省略している。プロファイルタグテーブルＴにおいて、『ｃｏｎｔｅｎｔｉｏｎ｛』から『｝／／ｃｏｎｔｅｎｔｉｏｎ』までの記述が該当する関数の動作条件エリアである。
【００５１】
たとえば、関数Ａ１（「ｆｕｎｃＡ１」）が呼出対象関数である場合、実行中の関数が各アプリケーションＢ（「ＡｐｐｌｙＢ」）の関数Ｂ１（「ｆｕｎｃＢ１」）のときは、“ｓｔａｔｉｃ”が登録されている。すなわち、アプリケーションＢの関数Ｂ１実行中に関数Ａ１が呼ばれたら静的スケジューリングをおこなうことを示している。この場合、常に競合が発生している状態なので、静的スケジューリング、たとえば、同一のプロセッサに割り当ててタイムスライス動作させることで競合を解消する。
【００５２】
一方、実行中の関数が各アプリケーションＢの関数Ｂ３（「ＦｕｎｃＢ３」）のときは、“ｄｙｎａｍｉｃ”が登録されている。すなわち、アプリケーションＢの関数Ｂ３実行中に関数Ａ１が呼ばれたら動的スケジューリングをおこなうことを示している。この場合、アプリケーションＢからの影響をうけにくかったり、または、動作状態によるオーバーヘッドが広域変化するため、最も負荷の軽いＣＰＵにダイナミックに割り当てる。
【００５３】
図９は、本実施の形態にかかる生成装置１００のハードウェア構成の一例を示すブロック図である。図９において、生成装置１００は、ＣＰＵ９０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）９０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９０３と、磁気ディスクドライブ９０４と、磁気ディスク９０５と、光ディスクドライブ９０６と、光ディスク９０７と、ディスプレイ９０８と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）９０９と、キーボード９１０と、マウス９１１と、スキャナ９１２と、プリンタ９１３と、を備えている。また、各構成部はバス９００によってそれぞれ接続されている。
【００５４】
ここで、ＣＰＵ９０１は、生成装置１００の全体の制御を司る。ＲＯＭ９０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ９０３は、ＣＰＵ９０１のワークエリアとして使用される。磁気ディスクドライブ９０４は、ＣＰＵ９０１の制御にしたがって磁気ディスク９０５に対するデータのリード／ライトを制御する。磁気ディスク９０５は、磁気ディスクドライブ９０４の制御で書き込まれたデータを記憶する。
【００５５】
光ディスクドライブ９０６は、ＣＰＵ９０１の制御にしたがって光ディスク９０７に対するデータのリード／ライトを制御する。光ディスク９０７は、光ディスクドライブ９０６の制御で書き込まれたデータを記憶したり、光ディスク９０７に記憶されたデータをコンピュータに読み取らせたりする。
【００５６】
ディスプレイ９０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ９０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００５７】
インターフェース（以下、「Ｉ／Ｆ」と略する。）９０９は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク９１４に接続され、このネットワーク９１４を介して他の装置に接続される。そして、Ｉ／Ｆ９０９は、ネットワーク９１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ９０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００５８】
キーボード９１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス９１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００５９】
スキャナ９１２は、画像を光学的に読み取り、生成装置１００内に画像データを取り込む。なお、スキャナ９１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ９１３は、画像データや文書データを印刷する。プリンタ９１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００６０】
（生成装置１００の機能的構成）
図１０は、本実施の形態にかかる生成装置１００の機能的構成を示すブロック図である。生成装置１００は、実行部１００１と、生成部１００２と、特定部１００３と、決定部１００４と、保存部１００５と、取得部１００６と、検出部１００７と、選択部１００８と、登録部１００９と、を備える。実行部１００１〜登録部１００９は、具体的には、たとえば、図９に示したＲＯＭ９０２、ＲＡＭ９０３、磁気ディスク９０５などの記憶装置に記憶されたプログラムをＣＰＵ９０１に実行させることにより、その機能を実現する。
【００６１】
実行部１００１は、第１のＥＳＬシミュレーションを実行する機能を有する。具体的には、たとえば、図５に示したシステムモデルにより第１のＥＳＬシミュレーションを実行する。そして、実行結果となるＣＰＵモデルの性能に関する指標値として、たとえば、ピークに対するＣＰＵ性能比率を取得することとなる。また、第１のＥＳＬシミュレーションでは、アクセス競合率ρがΔρ刻みで０〜１００［％］まで変化するため、アクセス競合率ρごとにピークに対するＣＰＵ性能比率を取得することとなる。
【００６２】
生成部１００２は、アクセス競合率ごとに求められたプロセッサモデルの性能に関する指標値に基づいて、プロセッサの競合特性の近似式を生成する機能を有する。具体的には、実行部１００１では、アクセス競合率ρごとにピークに対するＣＰＵ性能比率が取得されるため、各ＣＰＵ性能比率に対し最小自乗法などの周知の技術を適用することで競合特性情報１２０の近似式を生成する。なお、アクセス競合が発生した場合は、指数関数または対数関数的な減衰となるため、モデルとなる曲線６００は指数関数や対数関数を用いればよい。
【００６３】
特定部１００３は、生成部１００２によって生成された競合特性の近似式に基づいて、プロセッサモデルの性能に関する指標値の中から、プロセッサモデルの性能が漸近する性能漸近値Ｚを特定する機能を有する。具体的には、たとえば、競合特性曲線６００から性能漸近値Ｚを求める。
【００６４】
決定部１００４は、アクセス競合率のうち、特定部１００３によって特定された性能漸近値Ｚに対する許容誤差値と近似式とに基づくアクセス競合率を、プロセッサモデルの性能劣化の境界値ｂに決定する機能を有する。具体的には、たとえば、許容値率σから得られた性能漸近値Ｚの許容誤差値と競合特性曲線６００とが交差するアクセス競合率ρを境界値ｂに決定する。
【００６５】
保存部１００５は、実行部１００１、生成部１００２、特定部１００３および決定部１００４から得られた競合特性情報１２０を記憶領域に保存する機能を有する。保存された競合特性情報１２０は、第２のＥＳＬシミュレーションに用いられる。
【００６６】
取得部１００６は、第２のＥＳＬシミュレーションを実行して、実行結果となる性能指標値を取得する機能を有する。具体的には、たとえば、図７に示したマルチコアプロセッサシステムモデルにより第２のＥＳＬシミュレーションを実行する。そして、実行結果となる第１のＣＰＵモデル７０１の性能に関する指標値として、たとえば、第１のＣＰＵモデル７０１のピークに対するＣＰＵ性能比率を取得することとなる。
【００６７】
検出部１００７は、近似式を参照して、取得部１００６によって取得された指標値でのアクセス競合率を検出する機能を有する。具体的には、たとえば、取得されたＣＰＵ性能比率に対応するアクセス競合率ρを競合特性曲線６００から検出する。
【００６８】
選択部１００８は、検出されたアクセス競合率ρと境界値ｂとを比較することにより、第２のプログラムの実行中に第１のプログラムを実行する場合のスケジューリング方式を、動的スケジューリングまたは静的スケジューリングの中から選択する機能を有する。具体的には、たとえば、図７に示した第２のＥＳＬシミュレーションにおいて、第２の関数の実行中に第１の関数を実行する場合のスケジューリング方式を選択する。たとえば、検出されたアクセス競合率ρが境界値ｂ以上である場合は静的スケジューリング、境界値ｂ未満の場合は動的スケジューリングを選択する。
【００６９】
登録部１００９は、選択部１００８によって選択されたスケジューリング方式をプロファイルタグテーブルＴに登録する機能を有する。具体的には、たとえば、図８に示したように、関数Ａ１（第１の関数）について選択されたスケジューリング方式（たとえば、静的スケジューリング）のタグ“ｓｔａｔｉｃ”を関数Ｂ１と関連付けて登録する。
【００７０】
図１１は、情報処理装置４００の機能的構成を示すブロック図である。情報処理装置４００は、指定部１１０１と、検出部１１０２と、特定部１１０３と、決定部１１０４と、割当部１１０５とを備えている。指定部１１０１〜割当部１１０５は、具体的には、たとえば、図４に示した共有メモリ４０５などの記憶装置に記憶されたプログラムをＣＰＵ４０１〜４０４に実行させることにより、その機能を実現する。
【００７１】
指定部１１０１は、対象プログラムを指定する機能を有する。具体的には、たとえば、呼び出されたアプリケーション内の呼出対象関数を指定する。
【００７２】
検出部１１０２は、指定部１１０１によって対象プログラムが指定された場合、マルチコアプロセッサ内のプロセッサにより実行中のプログラムを検出する機能を有する。たとえば、指定部１１０１により呼出対象関数として関数Ａ１が指定された場合、マルチコアプロセッサ内で他の関数Ｂ１を実行中のＣＰＵを検出し、そのＣＰＵ番号を保持しておく。
【００７３】
特定部１１０３は、テーブルを参照して、検出部１１０２によって検出された実行中のプログラムと同時に対象プログラムを実行させる場合の対象プログラムのスケジューリング方式を特定する機能を有する。具体的には、たとえば、呼出対象関数を含むアプリケーションのプロファイルタグテーブルＴを参照して、関数Ｂ１の実行中における関数Ａ１のスケジューリング方式を読み出し、静的スケジューリングであるか動的スケジューリングであるかを特定する。“ｓｔａｔｉｃ”ならば静的スケジューリングであり、“ｄｙｎａｍｉｃ”ならば動的スケジューリングである。
【００７４】
決定部１１０４は、特定部１１０３によって特定されたスケジューリング方式に従って対象プログラムを実行させるプロセッサをマルチコアプロセッサの中から決定する機能を有する。具体的には、特定部１１０３によって特定されたスケジューリング方式が静的スケジューリングである場合、対象プログラムを実行させるプロセッサを、対象プログラムを実行中のプログラムが割り当てられているプロセッサに決定する。たとえば、関数Ｂ１の実行中における関数Ａ１のスケジューリング方式は静的スケジューリングであるため、関数Ｂ１を実行するＣＰＵのＣＰＵ番号を読み出す。
【００７５】
一方、特定部１１０３によって特定されたスケジューリング方式が動的スケジューリングである場合、対象プログラムを実行させるプロセッサを、対象プログラムを実行中のプログラムが割り当てられているプロセッサ以外の残余のプロセッサのうち最も低負荷のプロセッサに決定する。
【００７６】
たとえば、図８を参照すると、関数Ｂ３の実行中における関数Ａ１のスケジューリング方式は動的スケジューリングであるため、関数Ｂ１を実行するＣＰＵ以外の残余のＣＰＵ群の中から割当先に決定する。より具体的には、残余のＣＰＵ群のうちアイドル状態のＣＰＵを割当先に決定する。アイドル状態のＣＰＵがない場合は、残余のＣＰＵ群のうち最も低負荷なＣＰＵを割当先に決定する。なお、ＣＰＵの負荷については既存技術によりＯＳが取得している。
【００７７】
割当部１１０５は、決定部１１０４によって決定されたプロセッサに対象プログラムを割り当てる機能を有する。具体的には、たとえば、決定部１１０４によって決定された割当先のＣＰＵに、対象プログラムである呼出対象関数を通知する。より具体的には、呼出対象関数が保存されている共有メモリ内のアドレスを通知することで、割当先のＣＰＵはその通知されたアドレスを指定して、割当先のＣＰＵ内のキャッシュメモリに読み込んで実行することとなる。
【００７８】
図１２は、本実施の形態にかかる生成装置１００による第１のＥＳＬシミュレーションの処理手順を示すフローチャートである。まず、生成装置１００は、実行部１００１により、システムモデル５００内の負荷源Ｌのアクセス競合率ρをρ＝０に設定する（ステップＳ１２０１）。つぎに、生成装置１００は、システムモデル５００についてＥＳＬシミュレーションを実行する（ステップＳ１２０２）。
【００７９】
このＥＳＬシミュレーションにより、生成装置１００は、ＣＰＵモデル５０１のアクセス競合率ρでのＣＰＵ性能比率を取得する（ステップＳ１２０３）。そして、生成装置１００は、実行部１００１により、ρ＜１００［％］であるか否かを判断する（ステップＳ１２０４）。
【００８０】
ρ＜１００［％］でない場合（ステップＳ１２０４：Ｎｏ）、生成装置１００は、現在のρにΔρを加算して（ステップＳ１２０５）、ステップＳ１２０２に戻る。一方、ρ＜１００［％］である場合（ステップＳ１２０４：Ｙｅｓ）、生成装置１００は、得られたＣＰＵ性能比率から競合特性の近似式を生成する（ステップＳ１２０６）。
【００８１】
このあと、生成装置１００は、生成された近似式から競合特性に関する性能漸近値Ｚを特定する（ステップＳ１２０７）。そして、生成装置１００は、近似式と許容値率σから性能劣化のしきい値となる境界値ｂを決定する（ステップＳ１２０８）。このあと、生成装置１００は、競合特性情報１２０として保存する記憶装置に保存する（ステップＳ１２０９）。これにより、第１のＥＳＬシミュレーションを終了する。
【００８２】
このように、第１のＥＳＬシミュレーションをおこなうことで、対象アーキテクチャで起こりうる競合によるＣＰＵの統計的な性能劣化を把握することができる。つぎに、図１２の第１のＥＳＬシミュレーションで得られた競合特性情報１２０を用いた第２のＥＳＬシミュレーションの処理手順について説明する。
【００８３】
図１３は、第２のＥＳＬシミュレーションの処理手順を示すフローチャートである。生成装置１００は、取得部１００６により、事前に同時実行するアプリケーションの組み合わせを読み込んでおく。そして、生成装置１００は、第１のアプリケーションとなる未選択のアプリケーション（評価用実行コードＣ１）があるか否かを判断する（ステップＳ１３０１）。未選択のアプリケーションがある場合（ステップＳ１３０１：Ｙｅｓ）、生成装置１００は、未選択のアプリケーションを選択して第１のアプリケーションに設定する（ステップＳ１３０２）。
【００８４】
つぎに、生成装置１００は、第１のアプリケーションに未選択の関数があるか否かを判断する（ステップＳ１３０３）。未選択の関数がある場合（ステップＳ１３０３：Ｙｅｓ）、生成装置１００は、未選択の関数を選択して第１の関数に設定する（ステップＳ１３０４）。また、生成装置１００は、同時実行する第２のアプリとなる未選択のアプリケーションがあるか否かを判断する（ステップＳ１３０５）。
【００８５】
未選択のアプリケーションがある場合（ステップＳ１３０５：Ｙｅｓ）、生成装置１００は、未選択のアプリケーションを選択して第２のアプリケーションに設定する（ステップＳ１３０６）。つぎに、生成装置１００は、第２のアプリケーションに未選択の関数があるか否かを判断する（ステップＳ１３０７）。未選択の関数がある場合（ステップＳ１３０７：Ｙｅｓ）、生成装置１００は、未選択の関数を選択して第２の関数に設定する（ステップＳ１３０８）。
【００８６】
このあと、生成装置１００は、第２の関数を第２のＣＰＵモデル７０２に与えてＥＳＬシミュレーションを実行する（ステップＳ１３０９）。さらに、生成装置１００は、第２の関数の実行中において、関数が割り当てられていない第１のＣＰＵモデル７０１に第１の関数を与えて、ＥＳＬシミュレーションを実行する（ステップＳ１３１０）。これにより、第１の関数を実行する第１のＣＰＵモデル７０１のＣＰＵ性能比率が得られる。
【００８７】
たとえば、第１のＣＰＵモデル７０１と第２のＣＰＵモデル７０２との共有メモリへのアクセス頻度が、７：３である場合、ピーク（１００［％］）に対する第１のＣＰＵモデル７０１のＣＰＵ性能比率は、７０［％］となる。すなわち、第２のＣＰＵモデル７０２が第２の関数を実行中であるため、第１のＣＰＵモデル７０１の性能が３０［％］劣化したことを示している。そして、生成装置１００は、ＥＳＬシミュレーションが終了するまで待ち受け（ステップＳ１３１１：Ｎｏ）、終了した場合（ステップＳ１３１１：Ｙｅｓ）、ステップＳ１３０７に戻る。
【００８８】
そして、ステップＳ１３０７において、未選択の関数がない場合（ステップＳ１３０７：Ｎｏ）、ステップＳ１３０５に戻る。また、ステップＳ１３０５において、未選択のアプリケーションがない場合（ステップＳ１３０５：Ｎｏ）、ステップＳ１３０３に戻る。また、ステップＳ１３０３において、第１のアプリケーションに未選択関数がない場合（ステップＳ１３０３：Ｎｏ）、ステップＳ１３０１に戻る。
【００８９】
また、ステップＳ１３０１において、第１のアプリケーションとなる未選択のアプリケーションがない場合（ステップＳ１３０１：Ｎｏ）、第２のＥＳＬシミュレーションを終了する。これにより、すべての関数の組み合わせについて第２のＥＳＬシミュレーションを網羅することができる。
【００９０】
図１４は、プロファイルタグテーブルＴへの登録処理手順を示すフローチャートである。図１４のフローチャートに示した登録処理は、図１３に示した第２のＥＳＬシミュレーションと連動して実行される。
【００９１】
まず、生成装置１００は、図１３のステップＳ１３０４において第１の関数が設定されるのを待ち受ける（ステップＳ１４０１：Ｎｏ）。第１の関数が設定された場合（ステップＳ１４０１：Ｙｅｓ）、生成装置１００は、第１のアプリケーションのプロファイルタグテーブルＴの動作条件エリアに第１の関数を登録する（ステップＳ１４０２）。
【００９２】
つぎに、生成装置１００は、図１３のステップＳ１３０８において第２の関数が設定されるのを待ち受ける（ステップＳ１４０３：Ｎｏ）。第２の関数が設定された場合（ステップＳ１４０３：Ｙｅｓ）、生成装置１００は、第１のアプリケーションのプロファイルタグテーブルＴの動作条件エリアの第１の関数の登録エリアに、第２の関数を登録する（ステップＳ１４０４）。
【００９３】
そして、図１３のステップＳ１３１０でのＥＳＬシミュレーションから得られる第１のＣＰＵモデル７０１のＣＰＵ性能比率を取得する（ステップＳ１４０５）。ＣＰＵ性能比率を取得した場合、生成装置１００は、競合特性情報１２０を参照して、取得したＣＰＵ性能比率に対応するアクセス競合率を取得する（ステップＳ１４０６）。そして、取得したアクセス競合率が境界値ｂ以上であるか否かを判断する（ステップＳ１４０７）。
【００９４】
境界値ｂ以上である場合（ステップＳ１４０７：Ｙｅｓ）、具体的には、図６の境界値ｂから左側の領域の場合、生成装置１００は、第１のＣＰＵモデル７０１のＣＰＵ性能比率が高いため静的スケジューリングすべきと判断し、第２の関数に対し、静的スケジューリングタグを登録する（ステップＳ１４０８）。すなわち、第２の関数の実行中において第１の関数が呼び出された場合は静的スケジューリングすべきとの登録をおこなう。
【００９５】
一方、取得したアクセス競合率が境界値ｂ未満である場合（ステップＳ１４０７：Ｎｏ）、具体的には、図６の境界値ｂから左側の領域の場合、生成装置１００は、第１のＣＰＵモデル７０１のＣＰＵ性能比率が高いため動的スケジューリングすべきと判断し、第２の関数に対し、動的スケジューリングタグを登録する（ステップＳ１４０９）。すなわち、第２の関数の実行中において第１の関数が呼び出された場合は動的スケジューリングすべきとの登録をおこなう。そして、ステップＳ１４０８またはＳ１４０９のあと、ステップＳ１４０１に戻る。
【００９６】
図１５は、情報処理装置４００によるスケジューリング処理手順を示すフローチャートである。スケジューリング処理は、情報処理装置４００内のＯＳのスケジューラ４１１がプロフィルタグテーブルＴを参照することで実行される。
【００９７】
まず、情報処理装置４００は、呼び出しを待ち受け（ステップＳ１５０１：Ｎｏ）、呼び出しがあった場合（ステップＳ１５０１：Ｙｅｓ）、情報処理装置４００は、呼出対象アプリケーション中の呼出対象関数を特定する（ステップＳ１５０２）。一方で、情報処理装置４００は、実行中アプリケーションの実行中関数を特定する（ステップＳ１５０３）。
【００９８】
つぎに、情報処理装置４００は、呼出対象アプリケーションのプロファイルタグテーブルＴを参照して、実行中関数の実行中における呼出対象関数のスケジューリング方式を取得する（ステップＳ１５０４）。たとえば、図８において、実行中関数が関数Ｂ１、呼出対象関数が関数Ａ１とすると、“ｓｔａｔｉｃ”を読み出す。
【００９９】
そして、情報処理装置４００は、取得したスケジューリング方式が動的スケジューリングか静的スケジューリングかを判断する（ステップＳ１５０５）。動的スケジューリングの場合（ステップＳ１５０５：動的）、情報処理装置４００は、空きＣＰＵ番号を特定し（ステップＳ１５０６）、ステップＳ１５０８に移行する。なお、空きＣＰＵがない場合は、実行中関数を実行しているＣＰＵ以外の残余のＣＰＵで最も低負荷なＣＰＵのＣＰＵ番号を特定することとする。
【０１００】
一方、静的スケジューリングの場合（ステップＳ１５０５：静的）、情報処理装置４００は、実行中関数を実行中のＣＰＵのＣＰＵ番号を特定して（ステップＳ１５０７）、ステップＳ１５０８に移行する。
【０１０１】
ステップＳ１５０８では、情報処理装置４００は、呼出対象関数の関数名およびステップＳ１５０６またはＳ１５０７で特定されたＣＰＵ番号をタスク実行テーブルに登録する（ステップＳ１５０８）。そして、情報処理装置４００は、呼出対象関数のコンテキストを生成し（ステップＳ１５０９）、タスク実行テーブルを参照して、生成されたコンテキストを、特定されたＣＰＵ番号のＣＰＵに通知する（ステップＳ１５１０）。これにより、呼出対象関数が、通知されたＣＰＵで実行されることとなる。
【０１０２】
つぎに、動作例について図１６〜図１８を用いて説明する。図１６〜図１８では、ＣＰＵ４０１にはアプリケーションＡが起動されており、ＣＰＵ４０２にはアプリケーションＢが起動されており、ＣＰＵ４０３にはアプリケーションＢの関数Ｂ１が実行中であり、ＣＰＵ４０４がアイドル状態の空きＣＰＵである。また、スケジューラ４１１は、たとえば、マスタとなるＣＰＵ４０１で実行されるものとする。この状況で、アプリケーションＡの関数Ａ１を呼び出す場合について説明する。
【０１０３】
図１６は、本実施の形態を適用しない場合の失敗例となるスケジューリングを示す説明図である。図１６では、上述した実施の形態を適用しないため、関数Ａ１が呼び出された場合、ＣＰＵ４０１ではスケジューラ４１１が空きＣＰＵ４０４を特定し、動的スケジューリングをおこなう。すなわち、空きＣＰＵであるＣＰＵ４０４に呼出対象関数である関数Ａ１を割り当てることとなる。この場合、関数Ａ１と関数Ｂ１との間でロック状態が頻発するため、ロック期間中のＣＰＵパワーが無駄となる。
【０１０４】
図１７は、本実施の形態を適用した場合のスケジューリング（その１）を示す説明図である。図１７は、静的スケジューリングをおこなった例である。図１７では、関数Ａ１を静的スケジューリングするため、関数Ａ１を実行中の関数Ｂ１と同一のＣＰＵ４０３に割り当てる。これにより、ＣＰＵ４０３では、関数Ａ１と関数Ｂ１とがタイムスライス動作するため、共有メモリでのアクセス競合（オーバーヘッド）が全く発生しない。
【０１０５】
したがって、アクセス競合による性能劣化を隠蔽することができ、ＣＰＵリソースを余すことなく使用することができる。また、関数Ａ１はＣＰＵ４０４に割り当てられないため、ＣＰＵ４０４はアイドル状態を継続することができ、電力のセーブを継続することができる。さらに、スケジューラ４１１は、静的スケジューリングの場合、関数Ｂ１を実行中のＣＰＵのＣＰＵ番号の通知を受けるだけであり、空きＣＰＵを探すといった負荷がなくなるため、スケジューリングのオーバーヘッドも発生しないこととなる。
【０１０６】
図１８は、本実施の形態を適用した場合のスケジューリング（その２）を示す説明図である。図１８は、動的スケジューリングをおこなった例である。図１８では、関数Ｂ３のコンテンションが低いため、空きＣＰＵ４０４に動的にスケジューリングしてもアクセス競合の性能劣化があっても問題なく動作することができる。
【０１０７】
このように、本実施の形態では、可能な限り静的スケジューリングを実施することでオーバーヘッドを軽減しつつ、不確定な動作をするような状態のみにおいて動的スケジューリングを実施することができる。
【０１０８】
特に、組み込みシステムの場合、たとえばテレビシステムなど、限られた操作とアプリケーションしか存在しないようなシステムでは比較的静的スケジューリングが有効であるが、携帯端末など、組み込みシステムでありながら任意のアプリケーションを利用者の任意のオペレーションにより操作されるような汎用的な運用を行うものにおいては、どうしても動的にスケジューリングするユースケースが多くなる。
【０１０９】
したがって、本実施の形態を適用することで、システムパフォーマンスを劣化させるスケジューリングオーバーヘッドを軽減すべく、従来では動的処理を余儀なくされたようなケースにおいても静的スケジューリングを行うことができる。したがって、システムパフォーマンスの向上を図ることができる。
【０１１０】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１１１】
（付記１）プロセッサモデルと当該プロセッサモデルがアクセス可能なメモリモデルとアクセス競合率に応じて前記メモリモデルにアクセスする負荷源とを表現したシミュレーションモデルを用いてシミュレーションを実行することにより、前記プロセッサモデルの性能に関する指標値を前記アクセス競合率ごとに求める実行工程と、
前記実行工程によって求められた前記アクセス競合率ごとの指標値を競合特性情報として記憶領域に保存する保存工程と、
を含んだことを特徴とする生成方法。
【０１１２】
（付記２）前記実行工程により、前記アクセス競合率ごとに求められた前記プロセッサモデルの性能に関する指標値に基づいて、前記プロセッサモデルに関する競合特性の近似式を生成する生成工程を含み、
前記保存工程は、
前記生成工程によって生成された近似式を前記競合特性情報として前記記憶領域に保存することを特徴とする付記１に記載の生成方法。
【０１１３】
（付記３）前記生成工程によって生成された競合特性の近似式に基づいて、前記プロセッサモデルの性能に関する指標値の中から、前記プロセッサモデルの性能が漸近する性能漸近値を特定する特定工程を含み、
前記保存工程は、
前記特定工程によって特定された性能漸近値を前記競合特性情報として前記記憶領域に保存することを特徴とする付記２に記載の生成方法。
【０１１４】
（付記４）前記アクセス競合率のうち、前記特定工程によって特定された性能漸近値に対する許容誤差値と前記近似式とに基づくアクセス競合率を、前記プロセッサモデルの性能劣化の境界値に決定する決定工程を含み、
前記保存工程は、
前記許容誤差値および前記決定工程によって決定された境界値を前記競合特性情報として前記記憶領域に保存することを特徴とする付記３に記載の生成方法。
【０１１５】
（付記５）第１のプロセッサモデルと第２のプロセッサモデルと前記第１および第２のプロセッサモデルがアクセス可能な共有メモリモデルとを表現したマルチコアプロセッサシステムモデルにおいて、第１および第２のプログラムのうち前記第２のプログラムが前記第２のプロセッサモデルで実行中に、前記第１のプログラムを前記第１のプロセッサモデルで実行させたときの前記第１のプロセッサモデルの性能に関する指標値を取得する取得工程と、
前記近似式を参照して、前記取得工程によって取得された指標値でのアクセス競合率を検出する検出工程と、
前記検出工程によって検出されたアクセス競合率と前記境界値とを比較することにより、前記第２のプログラムの実行中に前記第１のプログラムを実行する場合のスケジューリング方式を、動的スケジューリングまたは静的スケジューリングの中から選択する選択工程と、
前記選択工程によって選択されたスケジューリング方式を、前記第１のプログラムの呼出時に参照されるテーブルに登録する登録工程と、
を含んだことを特徴とする付記４に記載の生成方法。
【０１１６】
（付記６）プログラムごとに他のプログラムと同時実行する場合のスケジューリング方式が登録され前記プログラムの呼出時に参照されるテーブルと、マルチコアプロセッサと、を備える情報処理装置が、
対象プログラムを指定する指定工程と、
前記指定工程によって前記対象プログラムが指定された場合、前記マルチコアプロセッサ内のプロセッサにより実行中のプログラムを検出する検出工程と、
前記テーブルを参照して、前記検出工程によって検出された実行中のプログラムとともに前記マルチコアプロセッサで前記対象プログラムを実行させる場合の前記対象プログラムのスケジューリング方式を特定する特定工程と、
前記特定工程によって特定されたスケジューリング方式に従って前記対象プログラムを実行させるプロセッサを前記マルチコアプロセッサの中から決定する決定工程と、
前記決定工程によって決定されたプロセッサに前記対象プログラムを割り当てる割当工程と、
を実行することを特徴とするスケジューリング方法。
【０１１７】
（付記７）前記決定工程は、
前記特定工程によって特定されたスケジューリング方式が静的スケジューリングである場合、前記対象プログラムを実行させるプロセッサを、前記対象プログラムを前記実行中のプログラムが割り当てられているプロセッサに決定することを特徴とする付記６に記載のスケジューリング方法。
【０１１８】
（付記８）前記決定工程は、
前記特定工程によって特定されたスケジューリング方式が動的スケジューリングである場合、前記対象プログラムを実行させるプロセッサを、前記対象プログラムを前記実行中のプログラムが割り当てられているプロセッサ以外の残余のプロセッサのうち最も低負荷のプロセッサに決定することを特徴とする付記６に記載のスケジューリング方法。
【０１１９】
（付記９）プロセッサモデルと当該プロセッサモデルがアクセス可能なメモリモデルとアクセス競合率に応じて前記メモリモデルにアクセスする負荷源とを表現したシミュレーションモデルを用いてシミュレーションを実行することにより、前記プロセッサモデルの性能に関する指標値を前記アクセス競合率ごとに求める実行工程と、
前記実行工程によって求められた前記アクセス競合率ごとの指標値を競合特性情報として記憶領域に保存する保存工程と、
をコンピュータに実行させることを特徴とする生成プログラム。
【０１２０】
（付記１０）プログラムごとに他のプログラムと同時実行する場合のスケジューリング方式が登録され前記プログラムの呼出時に参照されるテーブルと、マルチコアプロセッサと、を備える情報処理装置に、
対象プログラムを指定する指定工程と、
前記指定工程によって前記対象プログラムが指定された場合、前記マルチコアプロセッサ内のプロセッサにより実行中のプログラムを検出する検出工程と、
前記テーブルを参照して、前記検出工程によって検出された実行中のプログラムとともに前記マルチコアプロセッサで前記対象プログラムを実行させる場合の前記対象プログラムのスケジューリング方式を特定する特定工程と、
前記特定工程によって特定されたスケジューリング方式に従って前記対象プログラムを実行させるプロセッサを前記マルチコアプロセッサの中から選択する選択工程と、
前記選択工程によって選択されたプロセッサに前記対象プログラムを割り当てる割当工程と、
を実行させることを特徴とするスケジューリングプログラム。
【０１２１】
（付記１１）プロセッサモデルと当該プロセッサモデルがアクセス可能なメモリモデルとアクセス競合率に応じて前記メモリモデルにアクセスする負荷源とを表現したシミュレーションモデルを用いてシミュレーションを実行することにより、前記プロセッサモデルの性能に関する指標値を前記アクセス競合率ごとに求める実行手段と、
前記実行手段によって求められた前記アクセス競合率ごとの指標値を競合特性情報として記憶領域に保存する保存手段と、
を備えることを特徴とする生成装置。
【０１２２】
（付記１２）プログラムごとに他のプログラムと同時実行する場合のスケジューリング方式が登録され前記プログラムの呼出時に参照されるテーブルと、マルチコアプロセッサと、を備える情報処理装置であって、
対象プログラムを指定する指定手段と、
前記指定手段によって前記対象プログラムが指定された場合、前記マルチコアプロセッサ内のプロセッサにより実行中のプログラムを検出する検出手段と、
前記テーブルを参照して、前記検出手段によって検出された実行中のプログラムとともに前記マルチコアプロセッサで前記対象プログラムを実行させる場合の前記対象プログラムのスケジューリング方式を特定する特定手段と、
前記特定手段によって特定されたスケジューリング方式に従って前記対象プログラムを実行させるプロセッサを前記マルチコアプロセッサの中から選択する選択手段と、
前記選択手段によって選択されたプロセッサに前記対象プログラムを割り当てる割当手段と、
を備えることを特徴とする情報処理装置。
【符号の説明】
【０１２３】
１００  生成装置
４００  情報処理装置
１２０  競合特性情報
４１０  マルチコアプロセッサシステム
１００１  実行部
１００２  生成部
１００３  特定部
１００４  決定部
１００５  保存部
１００６  取得部
１００７  検出部
１００８  選択部
１００９  登録部
１１０１  指定部
１１０２  検出部
１１０３  特定部
１１０４  決定部
１１０５  割当部
【国際調査報告】
2011114478.tif 000021
2011114478.tif 000022
2011114478.tif 000023
2011114478.tif 000024
2011114478.tif 000025
2011114478.tif 000026
2011114478.tif 000027