(57)【要約】【課題】複数のコアを備えたマルチコアプロセッサ向けのソフトウエアチューニングを効率的におこなわしめること。【解決手段】粒度情報取得部２０１が、各コアに割り付けられた粒度に関する情報（粒度情報）を取得する。構造情報生成部２０４が、取得された粒度情報に基づいて、各タスクごとあるいは前記タスクが有する各関数ごとの出現回数を算出し、算出された出現回数に関する情報（構造情報）を生成する。依存情報生成部２０６が、取得された粒度情報に基づいて、各タスクごとあるいは前記タスクが有する各関数ごとの他のタスクあるいは関数への依存に関する情報（依存情報）を生成する。出力部２０３が、それらの各情報を出力する。【選択図】図２
2007264734.tif 000002
【特許請求の範囲】
【請求項１】
複数のコアを備えたマルチコアプロセッサ向けのソフトウエアチューニングを支援するチューニング支援装置において、
各コアに割り付けられた粒度に関する情報（以下「粒度情報」という）を取得する粒度情報取得手段と、
前記粒度情報取得手段によって取得された粒度情報を出力する出力手段と、
を備えたことを特徴とするチューニング支援装置。
【請求項２】
複数のコアを備えたマルチコアプロセッサ向けのソフトウエアチューニングを支援するチューニング支援装置において、
各コアに割り付けられた粒度に関する情報（以下「粒度情報」という）を取得する粒度情報取得手段と、
前記粒度情報取得手段によって取得された粒度情報に基づいて、各タスクごとあるいは前記タスクが有する各関数ごとの出現回数を算出し、算出された出現回数に関する情報（以下「構造情報」という）を生成する構造情報生成手段と、
前記構造情報生成手段によって生成された構造情報を、前記粒度情報とともに、あるいは前記粒度情報に代えて出力する出力手段と、
を備えたことを特徴とするチューニング支援装置。
【請求項３】
複数のコアを備えたマルチコアプロセッサ向けのソフトウエアチューニングを支援するチューニング支援装置において、
各コアに割り付けられた粒度に関する情報（以下「粒度情報」という）を取得する粒度情報取得手段と、
前記粒度情報取得手段によって取得された粒度情報に基づいて、各タスクごとあるいは前記タスクが有する各関数ごとの他のタスクあるいは関数への依存に関する情報（以下「依存情報」という）を生成する依存情報生成手段と、
前記依存情報生成手段によって生成された依存情報を、前記粒度情報とともに、あるいは前記粒度情報に代えて出力する出力手段と、
を備えたことを特徴とするチューニング支援装置。
【請求項４】
前記関数の種類によってあらかじめ定められた負荷に関する情報（以下「性能情報」という」）を登録する登録手段を備え、
前記出力手段は、前記登録手段によって登録された性能情報をあわせて出力することを特徴とする請求項１〜３のいずれか一つに記載のチューニング支援装置。
【請求項５】
前記関数は、前記タスク間またはコア間をまたぐ処理に関するものであることを特徴とする請求項２〜４のいずれか一つに記載のチューニング支援装置。
【請求項６】
複数のコアを備えたマルチコアプロセッサ向けのソフトウエアチューニングを支援するチューニング支援プログラムにおいて、
各コアに割り付けられた粒度に関する情報（以下「粒度情報」という）を取得させる粒度情報取得工程と、
前記粒度情報取得工程によって取得された粒度情報を出力させる出力工程と、
をコンピュータに実行させることを特徴とするチューニング支援プログラム。
【請求項７】
複数のコアを備えたマルチコアプロセッサ向けのソフトウエアチューニングを支援するチューニング支援プログラムにおいて、
各コアに割り付けられた粒度に関する情報（以下「粒度情報」という）を取得させる粒度情報取得工程と、
前記粒度情報取得工程によって取得された粒度情報に基づいて、各タスクごとあるいは前記タスクが有する各関数ごとの出現回数を算出させ、算出された出現回数に関する情報（以下「構造情報」という）を生成させる構造情報生成工程と、
前記構造情報生成工程によって生成された構造情報を、前記粒度情報とともに、あるいは前記粒度情報に代えて出力させる出力手段と、
をコンピュータに実行させることを特徴とするチューニング支援プログラム。
【請求項８】
複数のコアを備えたマルチコアプロセッサ向けのソフトウエアチューニングを支援するチューニング支援プログラムにおいて、
各コアに割り付けられた粒度に関する情報（以下「粒度情報」という）を取得させる粒度情報取得工程と、
前記粒度情報取得工程によって取得された粒度情報に基づいて、各タスクごとあるいは前記タスクが有する各関数ごとの他のタスクあるいは関数への依存に関する情報（以下「依存情報」という）を生成させる依存情報生成工程と、
前記依存情報生成工程によって生成された依存情報を、前記粒度情報とともに、あるいは前記粒度情報に代えて出力させる出力工程と、
をコンピュータに実行させることを特徴とするチューニング支援プログラム。
【請求項９】
前記請求項６〜８の少なくともいずれか一つに記載のチューニング支援プログラムを記録したことを特徴とするコンピュータ読み取り可能な記録媒体。
【請求項１０】
複数のコアを備えたマルチコアプロセッサ向けのソフトウエアチューニングを支援するチューニング支援方法において、
各コアに割り付けられた粒度に関する情報（以下「粒度情報」という）を取得する粒度情報取得工程と、
前記粒度情報取得工程によって取得された粒度情報を出力する出力工程と、
を含んだことを特徴とするチューニング支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、複数のコアを備えたマルチコアプロセッサ向けのソフトウエアチューニングを支援するチューニング支援装置、チューニング支援プログラム、チューニング支援プログラムを記録したコンピュータ読み取り可能な記録媒体およびチューニング支援方法に関する。
【背景技術】
【０００２】
プロセッサの一種として、１チップ上に複数のコアを集積し、所定機能をハードウエアとして負荷分散するマルチコアプロセッサが従来から知られていた（たとえば特許文献１参照。）。また、チューニングに際し、タスクの実行順序を決定し、どのプロセッサに対してどのタスクを割り当てるかなどの処理を動的におこなうことも知られていた（たとえば特許文献２参照。）。
【０００３】
そして、これらのマルチコアプロセッサのチューニングは、その処理の負荷分散して各コアの稼働率を改善するために、タスク自体のアルゴリズムやロジックを変更したり、タスクの分割や結合したりすることによって対応するものであった。
【０００４】
【特許文献１】特開２００２−１１７０１１号公報
【特許文献２】特開平８−２９２９３２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、この従来の方法は、静的な粒度を把握せずにチューニングがおこなわれていることから、上記チューニングをおこなう際に、チューニングによって受ける影響範囲を開発者が容易に把握することができず、チューニングをすることによって、コアの稼働率を低下させるなど、かえってマルチコアプロセッサの効率を下げてしまう場合があるという問題点があった。
【０００６】
この発明は、上述した従来技術による問題点を解消するため、開発者に対してチューニングを効果的におこなわしめることができるチューニング支援装置、チューニング支援プログラム、チューニング支援プログラムを記録したコンピュータ読み取り可能な記録媒体およびチューニング支援方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するため、この発明にかかるチューニング支援装置、チューニング支援プログラム、チューニング支援プログラムを記録したコンピュータ読み取り可能な記録媒体およびチューニング支援方法は、複数のコアを備えたマルチコアプロセッサ向けのソフトウエアチューニングを支援する際に、各コアに割り付けられた粒度に関する情報（粒度情報）を取得し、取得された粒度情報を出力することを特徴とする。これによって、負荷分散のための粒度情報を効率的に解析し、管理することができる。
【０００８】
また、この発明にかかるチューニング支援装置、チューニング支援プログラム、チューニング支援プログラムを記録したコンピュータ読み取り可能な記録媒体およびチューニング支援方法は、取得された粒度情報に基づいて、各タスクごとあるいは前記タスクが有する各関数ごとの出現回数を算出し、算出された出現回数に関する情報（構造情報）を生成し、生成された構造情報を、前記粒度情報とともに、あるいは前記粒度情報に代えて出力することを特徴とする。これによって、負荷分散のための構造情報を効率的に解析し、管理することができる。
【０００９】
また、この発明にかかるチューニング支援装置、チューニング支援プログラム、チューニング支援プログラムを記録したコンピュータ読み取り可能な記録媒体およびチューニング支援方法は、取得された粒度情報に基づいて、各タスクごとあるいは前記タスクが有する各関数ごとの他のタスクあるいは関数への依存に関する情報（依存情報）を生成し、生成された依存情報を、前記粒度情報とともに、あるいは前記粒度情報に代えて出力することを特徴とする。これによって、負荷分散のための依存情報を効率的に解析し、管理することができる。
【００１０】
また、この発明にかかるチューニング支援装置、チューニング支援プログラム、チューニング支援プログラムを記録したコンピュータ読み取り可能な記録媒体およびチューニング支援方法は、前記関数の種類によってあらかじめ定められた負荷に関する情報（性能情報）を登録し、登録された性能情報を、上記各情報とあわせて出力することを特徴とする。これによって、負荷分散のための性能情報を効率的に解析し、管理することができる。
【００１１】
また、この発明にかかるチューニング支援装置、チューニング支援プログラム、チューニング支援プログラムを記録したコンピュータ読み取り可能な記録媒体およびチューニング支援方法は、前記関数が、前記タスク間またはコア間をまたぐ処理に関するものであることを特徴とする。これによって、負荷分散のためのタスクとプロセッサ（コア）の依存情報を効率的に解析し、管理することができる。
【００１２】
そして、上記粒度情報、構造情報、依存情報、性能情報、タスクとプロセッサ（コア）の依存情報を管理することによって、負荷分散のためのタスク性能を効率的に解析し、管理することができる。
【発明の効果】
【００１３】
本発明によれば、チューニングの対象となるプログラムの静的な粒度をチューニング前に解析し、その結果管理するとともに、開発者に提供することで、開発者に対してチューニングを効果的におこなわしめることが可能なチューニング支援装置、チューニング支援プログラム、チューニング支援プログラムを記録したコンピュータ読み取り可能な記録媒体およびチューニング支援方法が得られるという効果を奏する。
【発明を実施するための最良の形態】
【００１４】
以下に添付図面を参照して、この発明によるチューニング支援装置、チューニング支援プログラム、チューニング支援プログラムを記録したコンピュータ読み取り可能な記録媒体およびチューニング支援方法の実施の形態を詳細に説明する。
【００１５】
（チューニング支援装置のハードウエア構成）
まず、チューニング支援装置のハードウエア構成について説明する。図１は、この発明の実施の形態にかかるチューニング支援装置のハードウエア構成を示すブロック図である。
【００１６】
図１において、チューニング支援装置は、ＣＰＵ１０１と、ＲＯＭ１０２と、ＲＡＭ１０３と、ＨＤＤ（ハードディスクドライブ）１０４と、ＨＤ（ハードディスク）１０５と、ＦＤＤ（フレキシブルディスクドライブ）１０６と、着脱可能な記録媒体の一例としてＦＤ（フレキシブルディスク）１０７と、ディスプレイ１０８と、Ｉ／Ｆ（インターフェース）１０９と、キーボード１１０と、マウス１１１と、スキャナ１１２と、プリンタ１１３と、を備えている。また、各構成部はバス１００によってそれぞれ接続されている。
【００１７】
ここで、ＣＰＵ１０１は、チューニング支援装置の全体の制御を司る。ＲＯＭ１０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ１０３は、ＣＰＵ１０１のワークエリアとして使用される。ＨＤＤ１０４は、ＣＰＵ１０１の制御にしたがってＨＤ１０５に対するデータのリード／ライトを制御する。ＨＤ１０５は、ＨＤＤ１０４の制御で書き込まれたデータを記憶する。
【００１８】
ＦＤＤ１０６は、ＣＰＵ１０１の制御にしたがってＦＤ１０７に対するデータのリード／ライトを制御する。ＦＤ１０７は、ＦＤＤ１０６の制御で書き込まれたデータを記憶したり、ＦＤ１０７に記憶されたデータをチューニング支援装置に読み取らせたりする。着脱可能な記録媒体として、ＦＤ１０７のほか、ＣＤ−ＲＯＭ（ＣＤ−Ｒ、ＣＤ−ＲＷ）、ＭＯ、ＤＶＤ（Ｄｉｇｉｔａｌ Ｖｅｒｓａｔｉｌｅ Ｄｉｓｋ）、メモリカードなどであってもよい。
【００１９】
ディスプレイ１０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ１０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００２０】
Ｉ／Ｆ１０９は、通信回線を通じてインターネットなどのネットワーク１１４に接続され、このネットワーク１１４を介して他の装置に接続される。そして、Ｉ／Ｆ１０９は、ネットワーク１１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２１】
キーボード１１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス１１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００２２】
スキャナ１１２は、画像を光学的に読み取り、チューニング支援装置内に画像データを取り込む。また、プリンタ１１３は、画像データや文書データを印刷する。プリンタ１１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００２３】
（チューニング支援装置の機能的構成）
つぎに、チューニング支援装置の機能的構成について説明する。図２は、この発明の実施の形態にかかるチューニング支援装置の機能的構成を示す説明図である。図２において、チューニング支援装置は、粒度情報取得部２０１と、粒度情報登録部２０２と、出力部２０３と、構造情報生成部２０４と、構造情報登録部２０５と、依存情報生成部２０６と、依存情報登録部２０７と、性能情報登録部２０８と、を含む構成となっている。
【００２４】
粒度情報取得部２０１は、複数のコアを備えたマルチコアプロセッサコアに割り付けられた粒度に関する情報（「粒度情報」）を取得する。粒度とは、本実施の形態においては、たとえば、プロセッサがおこなう処理の単位であって、タスク、関数（ファンクション）など、さらには関数などを構成する処理の総称であるとすることができる。したがって、たとえば、比較的大きな粒度といえば「タスク」が該当し、比較的小さな粒度といえばタスクを構成する「関数」が該当するとしてもよい。
【００２５】
粒度情報取得部２０１は、具体的には、後述する図３のフローチャートにおいてコーディングされ（ステップＳ３０１）、コーディングされたプログラムについて、静的解析（ステップＳ３０２）がなされた結果、各コアに割り当てられたタスク、関数、ループ、外部変数アクセス情報などのチューニングに必要な情報を取得する。
【００２６】
粒度情報の具体例についての詳細は後述する（図４〜図１１を参照）。粒度情報取得部２０１は、たとえば、ＲＯＭ１０２，ＲＡＭ１０３，ＨＤ１０５，ＦＤ１０７などに記憶されたプログラム解析ソフトウエアなどのプログラムを図１に示したＣＰＵ１０１が実行することによってその機能を実現する。
【００２７】
粒度情報登録部２０２は、粒度情報取得部２０１によって取得された粒度情報を登録する。粒度情報登録部２０２は、具体的には、図１に示したＨＤ１０５，ＦＤ１０７などによってその機能を実現する。
【００２８】
出力部２０３は、粒度情報取得部２０１によって取得された粒度情報、あるいは粒度情報登録部２０２に登録された粒度情報を出力する。出力部２０３は、具体的には、たとえば、図１に示したディスプレイ１０８への表示、プリンタ１１３による印刷、また、Ｉ／Ｆ１０９を用いておこなう、図示を省略する他の情報処理装置への送信などが含まれる。
【００２９】
構造情報生成部２０４は、粒度情報取得部２０１によって取得された前記粒度情報に基づいて、各タスクごとあるいは前記タスクが有する各関数ごとの出現回数を算出し、算出された出現回数に関する情報（構造情報）を生成する。このように構造情報は、通常、取得された粒度情報または取得され登録された粒度情報に基づいて生成される。構造情報の具体例については詳細は後述する（図１２を参照）。構造情報生成部２０４は、たとえば、ＲＯＭ１０２，ＲＡＭ１０３，ＨＤ１０５，ＦＤ１０７などに記憶されたプログラムを図１に示したＣＰＵ１０１が実行することによってその機能を実現する。
【００３０】
構造情報登録部２０５は、構造情報生成部２０４によって取得された粒度情報を登録する。構造情報登録部２０５は、具体的には、図１に示したＨＤ１０５、ＦＤ１０７などによってその機能を実現する。
【００３１】
依存情報生成部２０６は、粒度情報取得部２０１によって取得された前記粒度情報に基づいて、各タスクごとあるいは前記タスクが有する各関数ごとの他のタスクあるいは関数への依存に関する情報（依存情報）を生成する。このように依存情報は、通常、取得された粒度情報または取得され登録された粒度情報に基づいて生成される。依存情報の具体例については詳細は後述する（図１３、図１４−１、図１４−２を参照）。依存情報生成部２０６は、たとえば、ＲＯＭ１０２，ＲＡＭ１０３，ＨＤ１０５，ＦＤ１０７などに記憶されたプログラムを図１に示したＣＰＵ１０１が実行することによってその機能を実現する。
【００３２】
依存情報登録部２０７は、依存情報生成部２０６によって取得された粒度情報を登録する。依存情報登録部２０７は、具体的には、図１に示したＨＤ１０５、ＦＤ１０７などによってその機能を実現する。
【００３３】
性能情報登録部２０８は、前記関数の種類によってあらかじめ定められた負荷（重み）に関する情報（性能情報）を登録する。性能情報登録部２０８は、具体的には、図１に示したＨＤ１０５、ＦＤ１０７などによってその機能を実現する。
【００３４】
（プログラム生成処理の概要）
つぎに、プログラム生成処理の一連の概要について説明する。図３は、マルチコアプロセッサのプログラム生成処理の一連の概要を示すフローチャートである。図３のフローチャートにおいて、ます、コーディング、すなわちマルチコア、マルチタスク用にプログラミングが実施される（ステップＳ３０１）。
【００３５】
つぎに、実施されたプログラミングに対して静的解析がおこなわれる（ステップＳ３０２）。ここで、静的解析とは、たとえば、タスク、関数、ループ、外部変数アクセス情報などのチューニングに必要な「構造情報」、「管理情報」を収集する。その後、ターゲットプログラムの作成であるビルドがおこなわれ（ステップＳ３０３）、引き続き、性能の測定を実行する（ステップＳ３０４）。
【００３６】
その後、チューニング処理をおこなう（ステップＳ３０５）。具体的には、ステップＳ３０４の性能測定の結果を見てタスク構造を指摘化する。この際、ステップＳ３０２においておこなわれた静的解析の情報を利用する。チューニング処理の結果に基づいて、さらなるコーディングが実施される。
【００３７】
（粒度情報の内容）
つぎに、粒度情報の内容について説明する。本実施の形態では４つのタスク（Ｔａｓｋ１〜Ｔａｓｋ４）についてそれぞれ粒度情報が存在する。また、４つのタスクは、Ｔａｓｋ１とＴａｓｋ２が、第１のコア（ＣＯＲＥ０）に割り当てられ、Ｔａｓｋ３とＴａｓｋ４が、第２のコア（ＣＯＲＥ１）に割り付けられている。
【００３８】
図４は、Ｔａｓｋ１の粒度情報の内容を示す説明図である。図４において、Ｔａｓｋ１は３つのファンクション（ｆｕｎｃ１〜ｆｕｎｃ３）から構成されている。ここで、「ｇ++」は、外部変数ｇのインクリメントであり、これによってメモリアクセスを端的に示している。また、「ｉｏ」はＩ／Ｏアドレス参照であり、Ｉ／Ｏポートへのアクセスを端的に示している。「ｇ++」は、ｆｕｎｃ１では２回、ｆｕｎｃ２およびｆｕｎｃ３ではそれぞれ１回ずつおこなれれる。「ｉｏ」は、ｆｕｎｃ１で１回おこなわれる。
【００３９】
図５−１は、図４のＴａｓｋ１のｆｕｎｃ１のプログラムリストを示す説明図であり、図５−２は、図４のＴａｓｋ１のｆｕｎｃ２のプログラムリストを示す説明図であり、図５−３は、図４のＴａｓｋ１のｆｕｎｃ３のプログラムリストを示す説明図である。
【００４０】
また図６は、Ｔａｓｋ２の粒度情報の内容を示す説明図である。図６において、Ｔａｓｋ２は２つのファンクション（ｆｕｎｃｍ、ｆｕｎｃｎ）から構成されている。ここで、「ＭＰ＿ＡＰＩ」は、コア間（ＣＰＵ間）通信ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）であり、コアをまたいでの読み出しを示している。また、「ＡＰＩ」は、コア内ＡＰＩであり、同一コア内のタスクスイッチを示している。「ＭＰ＿ＡＰＩ」と「ＡＰＩ」を比較した場合に、「ＭＰ＿ＡＰＩ」のほうが「ＡＰＩ」よりも負荷が大きい。ｆｕｎｃｍでは「ｇ++」、「ＭＰ＿ＡＰＩ」が１回ずつ、ｆｕｎｃｎでは「ＡＰＩ」が１回おこなわれる。
【００４１】
図７−１は、図６のＴａｓｋ２のｆｕｎｃｍのプログラムリストを示す説明図であり、図７−２は、図６のＴａｓｋ２のｆｕｎｃｎのプログラムリストを示す説明図である。
【００４２】
また図８は、Ｔａｓｋ３の粒度情報の内容を示す説明図である。図８において、Ｔａｓｋ３は６つのファンクション（ｆｕｎｃａ〜ｆｕｎｃｆ）から構成されている。ここで、ｆｕｎｃｂでは「ｉｏ」が１回、ｆｕｎｃｃでは「ｇ++」が１回、ｆｕｎｃｄでは「ｉｏ」が１回、ｆｕｎｃｆでは「ＭＰ＿ＡＰＩ」が２回、「ｇ++」が１回おこなわれる。
【００４３】
図９−１は、図８のＴａｓｋ３のｆｕｎｃａのプログラムリストを示す説明図であり、図９−２は、図８のＴａｓｋ３のｆｕｎｃｂのプログラムリストを示す説明図であり、図９−３は、図８のＴａｓｋ３のｆｕｎｃｃのプログラムリストを示す説明図であり、図９−４は、図８のＴａｓｋ３のｆｕｎｃｄのプログラムリストを示す説明図であり、図９−５は、図８のＴａｓｋ３のｆｕｎｃｅのプログラムリストを示す説明図であり、図９−６は、図８のＴａｓｋ３のｆｕｎｃｆのプログラムリストを示す説明図である。
【００４４】
また図１０は、Ｔａｓｋ４の粒度情報の内容を示す説明図である。図１０において、Ｔａｓｋ４は一つのファンクション（ｆｕｎｃｘ）から構成されている。ここで、ｆｕｎｃｘでは「ｉｏ」が１回おこなわれる。図１１は、図１０のＴａｓｋ４のｆｕｎｃｘのプログラムリストを示す説明図である。このように、粒度情報にはプログラムリストそのものも含めてもよい。したがって、粒度情報の出力には図４〜図１１の内容を表示することも含めてよい。
【００４５】
（構造情報の内容）
つぎに、構造情報の内容について説明する。図１２は、Ｔａｓｋ１〜Ｔａｓｋ４の構造情報を示す説明図であり、上述した粒度情報（図４〜図１１）に基づくものである。図１２において、構造情報は、各タスク中に含まれる関数、ループ、外部変数アクセスなどに、負荷（サイクル数）に依存する要素を、各タスクごと、あるいは関数ごとにデータ管理する。
【００４６】
ここで、関数数、すなわちファンクションの数は、Ｔａｓｋ１、Ｔａｓｋ２、Ｔａｓｋ３、Ｔａｓｋ４がそれぞれ「３」、「２」、「６」、「１」である。Ｔａｓｋ１では、「ＭＰ＿ＡＰＩ」、「ＡＰＩ」は存在せず、外部変数参照数は、ｆｕｎｃ１が２回、ｆｕｎｃ２が１回、ｆｕｎｃ３が１回の合計４回である。ループ数は上述のように、ｆｕｎｃ１が２回、ｆｕｎｃ２が１回の合計３回である。Ｉ／Ｏアクセス数は、ｆｕｎｃ１の１回のみである。Ｔａｓｋ２以下も同様である。このようにして構造情報を生成する。
【００４７】
（依存情報の内容）
つぎに、依存情報の内容について説明する。図１３は、Ｔａｓｋ１〜Ｔａｓｋ４の依存情報を示す説明図であり、上述した粒度情報（図４〜図１１）に基づくものである。図１３において、２つのコア（ＣＯＲＥ０、ＣＯＲＥ１）にはそれぞれタスクが含まれるように図示されている。
【００４８】
ＣＯＲＥ０には、Ｔａｓｋ１とＴａｓｋ２の２つのタスクが割り付けられている。そして、各タスク内には、それぞれ自タスクが有する関数（ファンクション）をあわせて表示する。さらに、「ＭＰ＿ＡＰＩ」、「ＡＰＩ」に関する情報（どのタスクからの情報の読み出しかも含まれる）もあわせて表示する。
【００４９】
その結果、ＣＯＲＥ０に囲まれたＴａｓｋ１には、３つのファンクション（ｆｕｎｃ１、ｆｕｎｃ２、ｆｕｎｃ３）のみが存在し、「ＭＰ＿ＡＰＩ」、「ＡＰＩ」は存在しないことが容易に理解できる。また、ＣＯＲＥ０に囲まれたＴａｓｋ２には、２つのファンクション（ｆｕｎｃｍ、ｆｕｎｃｎ）が存在し、ｆｕｎｃｍには、Ｔａｓｋ４からの「ＭＰ＿ＡＰＩ」があり、ｆｕｎｃｎにはＴａｓｋ１に依存された「ＡＰＩ」があることが容易に理解できる。ここで、ＣＯＲＥ０に割り付けられているＴａｓｋ１にとっては、Ｔａｓｋ４はＣＯＲＥ１に割り付けられているため「ＭＰ＿ＡＰＩ」となり、Ｔａｓｋ１はＣＯＲＥ０に割り付けられているため「ＡＰＩ」となる。
【００５０】
ＣＯＲＥ１には、Ｔａｓｋ３とＴａｓｋ４の２つのタスクが割り付けられている。ＣＯＲＥ１に囲まれたＴａｓｋ３には、６つのファンクション（ｆｕｎｃａ〜ｆｕｎｃｆ）が存在し、ｆｕｎｃｆには、Ｔａｓｋ１に依存された「ＭＰ＿ＡＰＩ」が２回あることが容易に理解できる。ここで、ＣＯＲＥ１に割り付けられているＴａｓｋ３にとっては、Ｔａｓｋ１はＣＯＲＥ０に割り付けられているため「ＭＰ＿ＡＰＩ」となる。また、ＣＯＲＥ１に囲まれたＴａｓｋ４には、一つのファンクション（ｆｕｎｃｘ）のみが存在し、「ＭＰ＿ＡＰＩ」、「ＡＰＩ」は存在しないことが容易に理解できる。
【００５１】
さらに、Ｔａｓｋ１に注目しタスクの依存度を表したのが図１４−１および図１４−２である。図１４−１は、読み出し元タスクがＴａｓｋ３であり、読み出し回数が２回であるため、Ｔａｓｋ３はＴａｓｋ１に対して依存度２ということになる。図１４−２では、図１４−１と同様に、読み出し元タスクがＴａｓｋ２であり、読み出し回数が１回であるため、Ｔａｓｋ２はＴａｓｋ１に対して依存度１ということになる。依存情報は、関数間の依存性や「ＭＰ＿ＡＰＩ」の依存性を考慮すると、さらに精度を向上させることができる。
【００５２】
（表示機能の内容）
つぎに、この発明の実施の形態にかかるチューニング支援装置の表示機能について説明する。この発明の実施の形態にかかるチューニング支援装置では、コア間通信、タスクスイッチ、関数呼び出し、ループなどの負荷を定義し、粒度情報を表示することができる。図１５は、各要素に対する負荷の定義表を示す説明図である。図１５において、各要素に対して負荷（重み）を設定している。負荷（重み）とは、ＣＰＵのサイクル数といってもよい。ここで、「ＭＰ＿ＣＡＬＬ」は、コア間（ＣＰＵ）間をまたぐ関数呼び出しであり、ＯＳを使用しない場合などが該当する。
【００５３】
この定義表を利用して、あるタスクまたは関数（ファンクション）を、どちらのコアで実行させるべきかを開発者に判断させるヒントとして、コア間をまたぐタスク呼び出し、または関数呼び出しの負荷を表現することができる。図１６は、表示画面の一例を示す説明図である。
【００５４】
図１６に示すように、ｆｕｎｃｚ（）とｓｕｂ（）の関係は、ｆｕｎｃｙ（）とｓｕｂ（）の関係よりも大きな負荷がかかっていることがわかる。すなわち、ｆｕｎｃｙ（）からｓｕｂ（）を呼び出す負荷が「５」である場合、ｆｕｎｃｚ（）ではコア間をまたぐので、ｓｕｂ（）を呼び出すには、「ＭＰ＿ＣＡＬＬ」の負荷「８」にｓｕｂ（）を呼び出す負荷「５」を加えて、トータルの負荷が「１３」となる。このように、負荷「５」、「８＋５」などを表示することによって、コア間をまたぐタスク呼び出し、または関数呼び出しの負荷を表現することができる。
【００５５】
このような表示機能を有することによって、ｆｕｎｃｚ（）とｓｕｂ（）は積極的に同じコア内にマッピングする、さらに、できれば同じタスク内に含めるほうがよいなどを、開発者に知らしめることができる。
【００５６】
（診断機能の内容）
図１７および図１８は、診断の結果を示す表示例を示す説明図である。上述した表示機能において説明した負荷に基づいて、プロジェクトとしてテックして、たとえば図１７に示すガイダンス「１０００１ｎ：ｆｕｎｃｘｘをＣＯＲＥ１  プロジェクトに移動するのは非効率です。」を表示するとよい。
【００５７】
また、図１８に示すように、診断した結果として移動候補の一例を表示するようにしてもよい。図１８では、ＰＥ０（ＣＯＲＥ０）からＰＥ１（ＣＯＲＥ１）へ移動する候補として、「ｆｕｎｃｘ１とｆｕｎｃｘ２とｆｕｎｃｘ３」を例示しており、また、ＰＥ１（ＣＯＲＥ１）からＰＥ０（ＣＯＲＥ０）へ移動する候補として、「ｆｕｎｃｘａとｆｕｎｃｘｂとｆｕｎｃｘｃ」を例示している。
【００５８】
（チューニング処理の具体例）
つぎに、図３のフローチャートのステップＳ３０５に示したチューニング処理の具体例について説明する。図１９−１、図１９−２、図２０は、チューニング処理の一例を示す説明図である。
【００５９】
図１９−１は、図４に示した粒度情報に基づく、Ｔａｓｋ１の各関数（ｆｕｎｃ１、ｆｕｎｃ２、ｆｕｎｃ３）のサイクル数を示している。同様に図１９−２は、Ｔａｓｋ３の各関数（ｆｕｎｃａ〜ｆｕｎｃｆ）のサイクル数を示している。図１９−２を参照すると、ＣＯＲＥ１にマッピングされているＴａｓｋ３のサイクル数が多く（３０）、コストが高いことがわかる。そこで、図２０に示すチューニング前（Ｂｅｆｏｒｅ）の状態を見ると、「ＭＰ＿ＡＰＩ」を経由して、ＣＯＲＥ０にマッピングされているＴａｓｋ１を２度参照していることを知る。
【００６０】
そこで、図２０に示すチューニング後（Ａｆｔｅｒ）の状態のように、ＣＯＲＥ１にＴａｓｋ３とＴａｓｋ１を同じコアに置き、負荷の高いコア通信「ＭＰ＿ＡＰＩ」から、通常の（同一コア内）通信「ＡＰＩ」に変更する。その代わりに、ＣＯＲＥ０にはＴａｓｋ２に依存のあるＴａｓｋ４を移行する。このように、チューニング処理を実行する。
【００６１】
以上説明したように、本実施の形態によれば、チューニングの対象となるプログラムの静的な粒度である粒度情報、さらには、構造情報、依存情報、性能情報を管理するとともに、開発者に提供することで、開発者に対してチューニングを効果的におこなわしめることができる。
【００６２】
なお、本実施の形態で説明したチューニング支援装置、チューニング支援方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネットなどのネットワークを介して配布することが可能な伝送媒体であってもよい。
【００６３】
（付記１）複数のコアを備えたマルチコアプロセッサ向けのソフトウエアチューニングを支援するチューニング支援装置において、
各コアに割り付けられた粒度に関する情報（以下「粒度情報」という）を取得する粒度情報取得手段と、
前記粒度情報取得手段によって取得された粒度情報を出力する出力手段と、
を備えたことを特徴とするチューニング支援装置。
【００６４】
（付記２）複数のコアを備えたマルチコアプロセッサ向けのソフトウエアチューニングを支援するチューニング支援装置において、
各コアに割り付けられた粒度に関する情報（以下「粒度情報」という）を取得する粒度情報取得手段と、
前記粒度情報取得手段によって取得された粒度情報に基づいて、各タスクごとあるいは前記タスクが有する各関数ごとの出現回数を算出し、算出された出現回数に関する情報（以下「構造情報」という）を生成する構造情報生成手段と、
前記構造情報生成手段によって生成された構造情報を、前記粒度情報とともに、あるいは前記粒度情報に代えて出力する出力手段と、
を備えたことを特徴とするチューニング支援装置。
【００６５】
（付記３）複数のコアを備えたマルチコアプロセッサ向けのソフトウエアチューニングを支援するチューニング支援装置において、
各コアに割り付けられた粒度に関する情報（以下「粒度情報」という）を取得する粒度情報取得手段と、
前記粒度情報取得手段によって取得された前記粒度情報に基づいて、各タスクごとあるいは前記タスクが有する各関数ごとの他のタスクあるいは関数への依存に関する情報（以下「依存情報」という）を生成する依存情報生成手段と、
前記依存情報生成手段によって生成された依存情報を、前記粒度情報とともに、あるいは前記粒度情報に代えて出力する出力手段と、
を備えたことを特徴とするチューニング支援装置。
【００６６】
（付記４）前記関数の種類によってあらかじめ定められた負荷に関する情報（以下「性能情報」という」）を登録する登録手段を備え、
前記出力手段は、前記登録手段によって登録された性能情報をあわせて出力することを特徴とする付記１〜３のいずれか一つに記載のチューニング支援装置。
【００６７】
（付記５）前記関数は、前記タスク間またはコア間をまたぐ処理に関するものであることを特徴とする付記１〜４のいずれか一つに記載のチューニング支援装置。
【００６８】
（付記６）複数のコアを備えたマルチコアプロセッサ向けのソフトウエアチューニングを支援するチューニング支援プログラムにおいて、
各コアに割り付けられた粒度に関する情報（以下「粒度情報」という）を取得させる粒度情報取得工程と、
前記粒度情報取得工程によって取得された粒度情報を出力させる出力工程と、
をコンピュータに実行させることを特徴とするチューニング支援プログラム。
【００６９】
（付記７）複数のコアを備えたマルチコアプロセッサ向けのソフトウエアチューニングを支援するチューニング支援プログラムにおいて、
各コアに割り付けられた粒度に関する情報（以下「粒度情報」という）を取得させる粒度情報取得工程と、
前記粒度情報取得工程によって取得された前記粒度情報に基づいて、各タスクごとあるいは前記タスクが有する各関数ごとの出現回数を算出させ、算出された出現回数に関する情報（以下「構造情報」という）を生成させる構造情報生成工程と、
前記構造情報生成工程によって生成された構造情報を、前記粒度情報とともに、あるいは前記粒度情報に代えて出力させる出力工程と、
をコンピュータに実行させることを特徴とするチューニング支援プログラム。
【００７０】
（付記８）複数のコアを備えたマルチコアプロセッサ向けのソフトウエアチューニングを支援するチューニング支援プログラムにおいて、
各コアに割り付けられた粒度に関する情報（以下「粒度情報」という）を取得させる粒度情報取得工程と、
前記粒度情報取得工程によって取得された前記粒度情報に基づいて、各タスクごとあるいは前記タスクが有する各関数ごとの他のタスクあるいは関数への依存に関する情報（以下「依存情報」という）を生成させる依存情報生成工程と、
前記依存情報生成工程によって生成された依存情報を、前記粒度情報とともに、あるいは前記粒度情報に代えて出力させる出力工程と、
をコンピュータに実行させることを特徴とするチューニング支援プログラム。
【００７１】
（付記９）前記付記６〜８の少なくともいずれか一つに記載のチューニング支援プログラムを記録したことを特徴とするコンピュータ読み取り可能な記録媒体。
【００７２】
（付記１０）複数のコアを備えたマルチコアプロセッサ向けのソフトウエアチューニングを支援するチューニング支援方法において、
各コアに割り付けられた粒度に関する情報（以下「粒度情報」という）を取得する粒度情報取得工程と、
前記粒度情報取得工程によって取得された粒度情報を出力する出力工程と、
を含んだことを特徴とするチューニング支援方法。
【００７３】
（付記１１）複数のコアを備えたマルチコアプロセッサ向けのソフトウエアチューニングを支援するチューニング支援方法において、
各コアに割り付けられた粒度に関する情報（以下「粒度情報」という）を取得する粒度情報取得工程と、
前記粒度情報取得工程によって取得された前記粒度情報に基づいて、各タスクごとあるいは前記タスクが有する各関数ごとの出現回数を算出し、算出された出現回数に関する情報（以下「構造情報」という）を生成する構造情報生成工程と、
前記構造情報生成工程によって生成された構造情報を、前記粒度情報とともに、あるいは前記粒度情報に代えて出力する出力工程と、
を含んだことを特徴とするチューニング支援方法。
【００７４】
（付記１２）複数のコアを備えたマルチコアプロセッサ向けのソフトウエアチューニングを支援するチューニング支援方法において、
各コアに割り付けられた粒度に関する情報（以下「粒度情報」という）を取得する粒度情報取得工程と、
前記粒度情報取得工程によって取得された前記粒度情報に基づいて、各タスクごとあるいは前記タスクが有する各関数ごとの他のタスクあるいは関数への依存に関する情報（以下「依存情報」という）を生成する依存情報生成工程と、
前記依存情報生成工程によって生成された依存情報を、前記粒度情報とともに、あるいは前記粒度情報に代えて出力する出力工程と、
を含んだことを特徴とするチューニング支援方法。
【産業上の利用可能性】
【００７５】
以上のように、本発明にかかるチューニング支援装置、チューニング支援プログラム、チューニング支援プログラムを記録したコンピュータ読み取り可能な記録媒体およびチューニング支援方法は、複数のコアを備えたマルチコアプロセッサ向けのソフトウエアチューニングに有用である。
【図面の簡単な説明】
【００７６】
【図１】この発明の実施の形態にかかるチューニング支援装置のハードウエア構成を示すブロック図である。
【図２】この発明の実施の形態にかかるチューニング支援装置の機能的構成を示す説明図である。
【図３】マルチコアプロセッサのプログラム生成処理の概要を示すフローチャートである。
【図４】Ｔａｓｋ１の粒度情報の内容を示す説明図である。
【図５−１】図４のＴａｓｋ１のｆｕｎｃ１のプログラムリストを示す説明図である。
【図５−２】図４のＴａｓｋ１のｆｕｎｃ２のプログラムリストを示す説明図である。
【図５−３】図４のＴａｓｋ１のｆｕｎｃ３のプログラムリストを示す説明図である。
【図６】Ｔａｓｋ２の粒度情報の内容を示す説明図である。
【図７−１】図６のＴａｓｋ２のｆｕｎｃｍのプログラムリストを示す説明図である。
【図７−２】図６のＴａｓｋ２のｆｕｎｃｎのプログラムリストを示す説明図である。
【図８】Ｔａｓｋ３の粒度情報の内容を示す説明図である。
【図９−１】図８のＴａｓｋ３のｆｕｎｃａのプログラムリストを示す説明図である。
【図９−２】図８のＴａｓｋ３のｆｕｎｃｂのプログラムリストを示す説明図である。
【図９−３】図８のＴａｓｋ３のｆｕｎｃｃのプログラムリストを示す説明図である。
【図９−４】図８のＴａｓｋ３のｆｕｎｃｄのプログラムリストを示す説明図である。
【図９−５】図８のＴａｓｋ３のｆｕｎｃｅのプログラムリストを示す説明図である。
【図９−６】図８のＴａｓｋ３のｆｕｎｃｆのプログラムリストを示す説明図である。
【図１０】Ｔａｓｋ４の粒度情報の内容を示す説明図である。
【図１１】図１０のＴａｓｋ４のｆｕｎｃｘのプログラムリストを示す説明図である。
【図１２】Ｔａｓｋ１〜Ｔａｓｋ４の構造情報を示す説明図である。
【図１３】Ｔａｓｋ１〜Ｔａｓｋ４の依存情報を示す説明図である。
【図１４−１】Ｔａｓｋ１の依存度を示す説明図（その１）である。
【図１４−２】Ｔａｓｋ１の依存度を示す説明図（その２）である。
【図１５】各要素に対する負荷の定義表を示す説明図である。
【図１６】表示画面の一例を示す説明図である。
【図１７】診断の結果を示す表示例を示す説明図である。
【図１８】診断の結果を示す表示例を示す説明図である。
【図１９−１】チューニング処理の一例を示す説明図である。
【図１９−２】チューニング処理の一例を示す説明図である。
【図２０】チューニング処理の一例を示す説明図である。
【符号の説明】
【００７７】
２０１  粒度情報取得部
２０２  粒度情報登録部
２０３  出力部
２０４  構造情報生成部
２０５  構造情報登録部
２０６  依存情報生成部
２０７  依存情報登録部
２０８  性能情報登録部
【図１】
2007264734.tif 000003
【図２】
2007264734.tif 000004
【図３】
2007264734.tif 000005
【図４】
2007264734.tif 000006
【図５−１】
2007264734.tif 000007
【図５−２】
2007264734.tif 000008
【図５−３】
2007264734.tif 000009
【図６】
2007264734.tif 000010
【図７−１】
2007264734.tif 000011
【図７−２】
2007264734.tif 000012
【図８】
2007264734.tif 000013
【図９−１】
2007264734.tif 000014
【図９−２】
2007264734.tif 000015
【図９−３】
2007264734.tif 000016
【図９−４】
2007264734.tif 000017
【図９−５】
2007264734.tif 000018
【図９−６】
2007264734.tif 000019
【図１０】
2007264734.tif 000020
【図１１】
2007264734.tif 000021
【図１２】
2007264734.tif 000022
【図１３】
2007264734.tif 000023
【図１４−１】
2007264734.tif 000024
【図１４−２】
2007264734.tif 000025
【図１５】
2007264734.tif 000026
【図１６】
2007264734.tif 000027
【図１７】
2007264734.tif 000028
【図１８】
2007264734.tif 000029
【図１９−１】
2007264734.tif 000030
【図１９−２】
2007264734.tif 000031
【図２０】
2007264734.tif 000032