IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

特開2024-100561パイプライン数縮退コンパイラおよびパイプライン数縮退方法
<>
  • 特開-パイプライン数縮退コンパイラおよびパイプライン数縮退方法 図1
  • 特開-パイプライン数縮退コンパイラおよびパイプライン数縮退方法 図2
  • 特開-パイプライン数縮退コンパイラおよびパイプライン数縮退方法 図3
  • 特開-パイプライン数縮退コンパイラおよびパイプライン数縮退方法 図4
  • 特開-パイプライン数縮退コンパイラおよびパイプライン数縮退方法 図5
  • 特開-パイプライン数縮退コンパイラおよびパイプライン数縮退方法 図6
  • 特開-パイプライン数縮退コンパイラおよびパイプライン数縮退方法 図7
  • 特開-パイプライン数縮退コンパイラおよびパイプライン数縮退方法 図8
  • 特開-パイプライン数縮退コンパイラおよびパイプライン数縮退方法 図9
  • 特開-パイプライン数縮退コンパイラおよびパイプライン数縮退方法 図10
  • 特開-パイプライン数縮退コンパイラおよびパイプライン数縮退方法 図11
  • 特開-パイプライン数縮退コンパイラおよびパイプライン数縮退方法 図12
  • 特開-パイプライン数縮退コンパイラおよびパイプライン数縮退方法 図13
  • 特開-パイプライン数縮退コンパイラおよびパイプライン数縮退方法 図14
  • 特開-パイプライン数縮退コンパイラおよびパイプライン数縮退方法 図15
  • 特開-パイプライン数縮退コンパイラおよびパイプライン数縮退方法 図16
  • 特開-パイプライン数縮退コンパイラおよびパイプライン数縮退方法 図17
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024100561
(43)【公開日】2024-07-26
(54)【発明の名称】パイプライン数縮退コンパイラおよびパイプライン数縮退方法
(51)【国際特許分類】
   G06F 8/41 20180101AFI20240719BHJP
【FI】
G06F8/41 130
【審査請求】未請求
【請求項の数】6
【出願形態】OL
(21)【出願番号】P 2023004654
(22)【出願日】2023-01-16
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100104190
【弁理士】
【氏名又は名称】酒井 昭徳
(72)【発明者】
【氏名】柴田 純
(72)【発明者】
【氏名】鎌塚 俊
(72)【発明者】
【氏名】荒川 敬
【テーマコード(参考)】
5B081
【Fターム(参考)】
5B081CC32
(57)【要約】
【課題】プログラムの性能低下を防ぎつつ、電力効率を高めること。
【解決手段】情報処理装置101は、プログラムコード110から抽出したループ処理111について、エコモードがONの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後のループ処理111の実行にかかる第1のサイクル数C1を算出する。情報処理装置101は、ループ処理111について、エコモードをOFFの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後のループ処理111の実行にかかる第2のサイクル数C2を算出する。情報処理装置101は、第1のサイクル数C1が第2のサイクル数C2以下の場合、プログラムコード110における、ループ処理111の直前にON命令112を挿入し、ループ処理111の直後にOFF命令113を挿入する。
【選択図】図1
【特許請求の範囲】
【請求項1】
プログラムコードから所定の処理を抽出し、
抽出した前記所定の処理について、パイプライン数を制限するエコモードがONの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後の前記所定の処理の実行にかかる第1のサイクル数を算出し、
前記所定の処理について、前記エコモードがOFFの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後の前記所定の処理の実行にかかる第2のサイクル数を算出し、
算出した前記第1のサイクル数が前記第2のサイクル数以下の場合、前記プログラムコードにおける、前記所定の処理の直前に前記エコモードをONに切り替えるON命令を挿入するとともに、前記所定の処理の直後に前記エコモードをOFFに切り替えるOFF命令を挿入する、
処理をコンピュータに実行させることを特徴とするパイプライン数縮退コンパイラ。
【請求項2】
前記所定の処理は、ループ処理である、ことを特徴とする請求項1に記載のパイプライン数縮退コンパイラ。
【請求項3】
前記プログラムコードから、前記ON命令が直前に挿入され、かつ、前記OFF命令が直後に挿入された第1のループ処理を抽出し、
前記プログラムコードから、前記第1のループ処理に隣接するループ処理であって、前記ON命令が直前に挿入され、かつ、前記OFF命令が直後に挿入された第2のループ処理を抽出し、
抽出した前記第1のループ処理と前記第2のループ処理との間に存在する非ループ処理について、前記エコモードがONの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後の前記非ループ処理の実行にかかる第3のサイクル数を算出し、
前記非ループ処理について、前記エコモードがOFFの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後の前記非ループ処理の実行にかかる第4のサイクル数を算出し、
算出した前記第3のサイクル数から前記第4のサイクル数を減算した値が、前記エコモードの切り替えにかかるサイクル数以下の場合、前記第1のループ処理と前記第2のループ処理との間に挿入された前記ON命令および前記OFF命令を削除する、
処理を前記コンピュータに実行させることを特徴とする請求項2に記載のパイプライン数縮退コンパイラ。
【請求項4】
前記非ループ処理は、他の処理を呼び出さない非ループ処理である、ことを特徴とする請求項3に記載のパイプライン数縮退コンパイラ。
【請求項5】
前記第1のサイクル数を算出する処理は、
前記所定の処理について、前記エコモードがONの場合に対応するパイプライン数、デコード幅、および、当該パイプライン数分のパイプラインそれぞれが実行可能な演算の種類に基づくスケジューリングを行って、前記第1のサイクル数を算出し、
前記第2のサイクル数を算出する処理は、
前記所定の処理について、前記エコモードがOFFの場合に対応するパイプライン数、デコード幅、および、当該パイプライン数分のパイプラインそれぞれが実行可能な演算の種類に基づくスケジューリングを行って、前記第2のサイクル数を算出する、
ことを特徴とする請求項1~4のいずれか一つに記載のパイプライン数縮退コンパイラ。
【請求項6】
プログラムコードから所定の処理を抽出し、
抽出した前記所定の処理について、パイプライン数を制限するエコモードがONの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後の前記所定の処理の実行にかかる第1のサイクル数を算出し、
前記所定の処理について、前記エコモードがOFFの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後の前記所定の処理の実行にかかる第2のサイクル数を算出し、
算出した前記第1のサイクル数が前記第2のサイクル数以下の場合、前記プログラムコードにおける、前記所定の処理の直前に前記エコモードをONに切り替えるON命令を挿入するとともに、前記所定の処理の直後に前記エコモードをOFFに切り替えるOFF命令を挿入する、
処理をコンピュータが実行することを特徴とするパイプライン数縮退方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、パイプライン数縮退コンパイラおよびパイプライン数縮退方法に関する。
【背景技術】
【0002】
従来、CPU(Central Processing Unit)における電力削減手法として、整数・浮動小数点演算処理装置のパイプライン数を削減するものがある。例えば、パイプライン数を縮退することで、電力効率を高める機能(エコモード)が搭載されたCPUがある。
【0003】
先行技術としては、コードにおける複数の区間の各々について、動作する演算器の数を決定する処理において、動作する演算器の数が或る数である場合における区間の実行時間より、動作する演算器の数が或る数より1少ない数である場合における区間の実行時間が長い場合、動作する演算器の数を或る数に決定するものがある。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2016-212743号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、従来技術では、プログラム中のエコモードを適用する箇所を判断することが難しく、プログラムの性能低下を防ぎつつ、電力効率を高めることができない場合がある。
【0006】
一つの側面では、本発明は、プログラムの性能低下を防ぎつつ、電力効率を高めることができるパイプライン数縮退コンパイラおよびパイプライン数縮退方法を提供することを目的とする。
【課題を解決するための手段】
【0007】
1つの実施態様では、プログラムコードから所定の処理を抽出し、抽出した前記所定の処理について、パイプライン数を制限するエコモードがONの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後の前記所定の処理の実行にかかる第1のサイクル数を算出し、前記所定の処理について、前記エコモードがOFFの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後の前記所定の処理の実行にかかる第2のサイクル数を算出し、算出した前記第1のサイクル数が前記第2のサイクル数以下の場合、前記プログラムコードにおける、前記所定の処理の直前に前記エコモードをONに切り替えるON命令を挿入するとともに、前記所定の処理の直後に前記エコモードをOFFに切り替えるOFF命令を挿入する、パイプライン数縮退コンパイラが提供される。
【発明の効果】
【0008】
本発明の一側面によれば、プログラムの性能低下を防ぎつつ、電力効率を高めることができるという効果を奏する。
【図面の簡単な説明】
【0009】
図1図1は、実施の形態1にかかるパイプライン数縮退方法の一実施例を示す説明図である。
図2図2は、情報処理装置101のハードウェア構成例を示すブロック図である。
図3図3は、実施の形態2にかかる情報処理装置101の機能的構成例を示すブロック図である。
図4図4は、制御フローグラフの具体例を示す説明図である。
図5図5は、エコモードのON命令およびOFF命令の削除例を示す説明図である。
図6図6は、実施の形態2にかかる情報処理装置101の第1の最適化処理手順の一例を示すフローチャートである。
図7図7は、情報処理装置101の第2の最適化処理手順の一例を示すフローチャート(その1)である。
図8図8は、情報処理装置101の第2の最適化処理手順の一例を示すフローチャート(その2)である。
図9図9は、情報処理装置101のパイプライン数縮退処理の適用箇所の一例を示す説明図である。
図10図10は、ソースプログラムの具体例を示す説明図である。
図11図11は、アセンブラの具体例を示す説明図である。
図12図12は、エコモードOFFの場合のスケジューリング結果の一例を示す説明図である。
図13図13は、エコモードONの場合のスケジューリング結果の一例を示す説明図である。
図14図14は、デコード幅が異なる場合のスケジューリング結果の一例を示す説明図(その1)である。
図15図15は、デコード幅が異なる場合のスケジューリング結果の一例を示す説明図(その2)である。
図16図16は、アドレス計算パイプラインを考慮しない場合のスケジューリング結果の一例を示す説明図である。
図17図17は、アドレス計算パイプラインを考慮する場合のスケジューリング結果の一例を示す説明図である。
【発明を実施するための形態】
【0010】
以下に図面を参照して、本発明にかかるパイプライン数縮退コンパイラおよびパイプライン数縮退方法の実施の形態を詳細に説明する。
【0011】
(実施の形態1)
図1は、実施の形態1にかかるパイプライン数縮退方法の一実施例を示す説明図である。図1において、情報処理装置101は、ソースコードをコンパイルして、オブジェクトを生成するコンピュータである。情報処理装置101は、例えば、サーバ、PC(Personal Computer)、タブレット端末、スマートフォンなどである。
【0012】
ソースコードは、プログラミング言語によりソフトウェアの処理内容が記述されたファイルである。プログラミング言語は、例えば、C言語、C++、Fortranなどである。オブジェクトは、例えば、実行モジュール、オブジェクトファイル、アセンブラなどである。
【0013】
情報処理装置101は、エコモードの機能が搭載されたCPU(例えば、後述の図2に示すCPU201)を有する。エコモードは、パイプライン数を制限(縮退)することで、電力効率を高める機能である。エコモードでは、例えば、同種の演算器が複数あるハードウェアに対して、プログラムに必要十分な演算器数を利用するように調整することで、パイプライン数が制限される。
【0014】
パイプライン(命令パイプライン)は、複数の命令を実行するためのプロセッサ内部の機構である。なお、パイプライン数の制限(縮退)とは、例えば、CPUに設けられた複数のパイプラインのうちの一部のパイプラインの電源をOFFにして、使用可能なパイプライン数を少なくすることである。
【0015】
一般に、CPUでは、一命令に対して命令フェッチから書き込み処理まで行われる。コンパイラは、パイプライン数などに配慮し、無駄なくリソースを使うためのスケジューリングを行う。例えば、1コアあたり2本のFPU(Floating-Point Unit)パイプラインがあるとする。
【0016】
FPUパイプラインは、命令の実行において浮動小数点演算が行われる場合に利用される。FPUパイプラインの数に応じて、並列実行できる浮動小数点演算の数が決まる。一方、命令列の依存関係や、CPUの資源数(レジスタ数、演算器数など)の影響により、命令スケジューリングの結果、FPUパイプライン数を削減しても、全体の実行サイクル数が変わらない場合がある。
【0017】
このため、1コアあたり2本のFPUパイプラインがあっても、演算によっては、他のボトルネックにより1本のFPUパイプラインで演算しても、処理性能が変わらない場合がある。このような場合、エコモードでFPUパイプラインを1本に制限して、底上げ電力を削減することが可能となる。
【0018】
従来、プログラム中のどの箇所(処理)にエコモードを適用するかは、人手により判断されていた。例えば、プログラムを実行後に、プログラマーが、プログラムのプロファイル情報を参照して、エコモードの適用箇所を判断し、そこにエコモードの切替え命令(コマンド)を挿入していた。
【0019】
しかしながら、プログラムのプロファイル情報から、エコモードをONにしても実行速度が低下しない処理を判断するにはスキルが必要であり、プログラム中のエコモードを適用する箇所を人手により判断することは難しい。また、プログラムにおけるエコモードを適用する箇所を一つ一つ人手により判断するには、手間や時間がかかる。
【0020】
ここで、プログラム中の処理について、パイプライン数を変更してスケジューリング結果(実行サイクル数)を見積もることで、プログラム中のエコモードを適用する箇所を判断することが考えられる。具体的には、例えば、パイプライン数を制限した場合と、パイプライン数を制限しない場合とのスケジューリング結果を比較することで、エコモードによる性能影響を判断することが考えられる。
【0021】
しかしながら、エコモードでは、通常時(エコモードOFF)に比べて、パイプライン数が制限されるだけでなく、デコード幅が縮小されるなど、性能に影響するパラメータが変わる場合がある。このため、パイプライン数の違いのみを考慮しても、エコモード適用時の性能影響を正確に見積もることができない。
【0022】
そこで、実施の形態1では、プログラム中の所定の処理について、エコモード適用時の性能影響を精度よく見積もって、エコモード対象となる処理を判断することで、プログラムの性能低下を防ぎつつ、電力効率を高めるパイプライン数縮退方法について説明する。ここで、情報処理装置101の処理例(下記(1)~(4)の処理に対応)について説明する。
【0023】
(1)情報処理装置101は、プログラムコード110から所定の処理を抽出する。プログラムコード110は、中間言語で記述されたプログラムのソースコードである。プログラムコード110は、例えば、アプリケーションに含まれるある関数(ルーチン)に対応する。プログラムコード110は、例えば、コンパイラ(本パイプライン数縮退コンパイラ)によって高級言語(C言語、C++、Fortranなど)で記述されたソースコードを変換することによって生成される。
【0024】
所定の処理は、任意に設定可能である。所定の処理としては、例えば、プログラムコード110中の処理のうち、処理時間や処理負荷などの実行コストが相対的に高い処理が設定される。所定の処理は、例えば、ループ処理である。ループ処理は、例えば、値を変えたりしながら、同じ処理を繰り返し行う処理である。ループ処理は、実行コストが相対的に高いといえる。
【0025】
図1の例では、プログラムコード110からループ処理111が抽出された場合を想定する。
【0026】
(2)情報処理装置101は、抽出したループ処理111について、エコモードがONの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後のループ処理111の実行にかかる第1のサイクル数を算出する。ここで、パイプライン数は、使用可能なパイプラインの数である。
【0027】
デコード幅は、単位時間(例えば、1サイクル)あたりにデコード可能な命令数を表す。デコード幅は、実行サイクル数に寄与するパラメータの一つである。デコード幅は、パイプライン数のみに応じて決まる値ではなく、パイプライン数と単純な比例関係となるわけではない。
【0028】
パイプライン数およびデコード幅は、エコモードのON(有効)/OFF(無効)に応じて、予め設定されている。エコモードがONの場合に対応するパイプライン数は、エコモードがOFFの場合に対応するパイプライン数よりも小さい。エコモードがONの場合に対応するデコード幅は、例えば、エコモードがOFFの場合に対応するデコモード幅よりも小さい。
【0029】
パイプライン数は、例えば、パイプラインの種類ごとの数を表す。パイプラインの種類としては、例えば、アドレス計算パイプライン、整数命令パイプライン、浮動小数点命令パイプラインなどがある。パイプラインの種類によっては、エコモードON/OFFで同じ数のパイプラインがあってもよい。
【0030】
具体的には、例えば、情報処理装置101は、ループ処理111について、エコモードがONの場合に対応するパイプライン数およびデコード幅に基づいて、無駄なくリソースを使用して性能が高くなるようにスケジューリングを行う。そして、情報処理装置101は、そのスケジューリング結果から第1のサイクル数を算出する。サイクル(実行サイクル)は、CPUのクロックサイクルに対応する。
【0031】
(3)情報処理装置101は、ループ処理111について、エコモードをOFFの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後のループ処理111の実行にかかる第2のサイクル数を算出する。
【0032】
図1の例では、エコモードがONの場合にループ処理111の実行にかかる第1のサイクル数C1と、エコモードがOFFの場合にループ処理111の実行にかかる第2のサイクル数C2とが算出された場合を想定する。
【0033】
(4)情報処理装置101は、算出した第1のサイクル数C1が第2のサイクル数C2以下の場合、プログラムコード110における、ループ処理111の直前にON命令を挿入する。また、情報処理装置101は、プログラムコード110における、ループ処理111の直後にOFF命令を挿入する。
【0034】
ここで、ON命令は、エコモードをONに切り替える命令(コマンド)である。OFF命令は、エコモードをOFFに切り替える命令である。ここで、第1のサイクル数C1が第2のサイクル数C2等しい(条件としては、「C1≦C2」)ということは、エコモードをONにしてループ処理111を実行しても、性能に影響がないことを表す。
【0035】
この場合、情報処理装置101は、プログラム実行時の電力効率を高めるために、ループ処理111をエコモード対象(エコモードの適用箇所)とする。そして、情報処理装置101は、プログラムコード110におけるループ処理111の前後にON命令およびOFF命令を挿入する。
【0036】
図1の例では、プログラムコード110において、ループ処理111の直前にON命令112が挿入され、ループ処理111の直後にOFF命令113が挿入される。ON命令112は、ループ処理111をエコモードで実行するためのものである。OFF命令113は、エコモードを解除するためのものである。
【0037】
このように、実施の形態1にかかる情報処理装置101によれば、プログラムコード110中の所定の処理(例えば、ループ処理111)について、エコモード適用時の性能影響を見積もることができる。この際、情報処理装置101によれば、エコモードのON/OFFに応じたパイプライン数だけでなくデコード幅も考慮することで、エコモード適用時の性能影響を精度よく見積もることができる。
【0038】
そして、情報処理装置101は、実行性能が変化しない場合にエコモードでの実行に切り替えるON/OFF命令をプログラムコード110に自動で挿入することができる。これにより、情報処理装置101は、プログラムの性能低下を防ぎつつ、電力効率を高めることができる。
【0039】
図1の例では、ループ処理111をエコモードで実行しても性能影響がないため、ループ処理111の前後にON命令112、OFF命令113が挿入される。これにより、情報処理装置101は、ループ処理111の性能低下を防ぎつつ、ループ処理111の実行にかかる消費電力を削減することができる。
【0040】
なお、上述した説明では、第1のサイクル数C1が第2のサイクル数C2以下の場合に、ループ処理111の前後にON命令112およびOFF命令113を挿入することにしたが、これに限らない。例えば、情報処理装置101は、第1のサイクル数C1が第2のサイクル数C2以下の場合、ループ処理111をエコモード対象に決定して、コンパイラの構造体の中のループ処理111の情報に、エコモード対象であることを示す情報(フラグ)を記録してもよい。
【0041】
これにより、以降において、情報処理装置101は、任意のタイミングで、コンパイラの構造体の中のループ処理111の情報を参照して、エコモード対象のループ処理111を特定することができる。そして、情報処理装置101は、特定したループ処理111の前後にON命令112およびOFF命令113を挿入することができる。
【0042】
また、ループ処理111の前後に対するON命令112およびOFF命令113の挿入処理は、例えば、情報処理装置101とは異なる他のコンピュータにおいて実行されてもよい。例えば、情報処理装置101は、コンパイラの構造体の中のループ処理111の情報を、他のコンピュータに出力してもよい。この場合、他のコンピュータは、プログラム実行時などに、ループ処理111の情報を参照して、エコモード対象のループ処理111を特定し、ループ処理111の前後にON命令112およびOFF命令113を挿入することができる。
【0043】
(実施の形態2)
つぎに、実施の形態2にかかる情報処理装置101について説明する。実施の形態1で説明した箇所と同様の箇所については説明を省略する。
【0044】
まず、情報処理装置101のハードウェア構成例について説明する。
【0045】
図2は、情報処理装置101のハードウェア構成例を示すブロック図である。図2において、情報処理装置101は、CPU201と、メモリ202と、ディスクドライブ203と、ディスク204と、通信I/F(Interface)205と、可搬型記録媒体I/F206と、可搬型記録媒体207と、を有する。また、各構成部は、バス200によってそれぞれ接続される。
【0046】
ここで、CPU201は、情報処理装置101の全体の制御を司る。CPU201は、複数のコアを有していてもよい。メモリ202は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMがOSのプログラムを記憶し、ROMがアプリケーションプログラムを記憶し、RAMがCPU201のワークエリアとして使用される。メモリ202に記憶されるプログラムは、CPU201にロードされることで、コーディングされている処理をCPU201に実行させる。
【0047】
ディスクドライブ203は、CPU201の制御に従ってディスク204に対するデータのリード/ライトを制御する。ディスク204は、ディスクドライブ203の制御で書き込まれたデータを記憶する。ディスク204は、例えば、磁気ディスク、光ディスクなどである。
【0048】
通信I/F205は、通信回線を通じてネットワーク210に接続され、ネットワーク210を介して外部のコンピュータに接続される。そして、通信I/F205は、ネットワーク210と装置内部とのインターフェースを司り、外部のコンピュータからのデータの入出力を制御する。ネットワーク210は、例えば、インターネット、LAN(Local Area Network)、WAN(Wide Area Network)などである。通信I/F205は、例えば、モデムやLANアダプタなどである。
【0049】
可搬型記録媒体I/F206は、CPU201の制御に従って可搬型記録媒体207に対するデータのリード/ライトを制御する。可搬型記録媒体207は、可搬型記録媒体I/F206の制御で書き込まれたデータを記憶する。可搬型記録媒体207は、例えば、CD(Compact Disc)-ROM、DVD(Digital Versatile Disk)、USB(Universal Serial Bus)メモリなどである。
【0050】
なお、情報処理装置101は、上述した構成部のほかに、例えば、入力装置、ディスプレイなどを有してもよい。また、情報処理装置101は、上述した構成部のうち、例えば、可搬型記録媒体I/F206、可搬型記録媒体207を有さなくてもよい。
【0051】
(情報処理装置101の機能的構成例)
つぎに、実施の形態2にかかる情報処理装置101の機能的構成例について説明する。
【0052】
図3は、実施の形態2にかかる情報処理装置101の機能的構成例を示すブロック図である。図3において、情報処理装置101は、取得部301と、抽出部302と、第1の算出部303と、第2の算出部304と、モード制御部305と、出力部306と、を含む。取得部301~出力部306は制御部300となる機能であり、具体的には、例えば、図2に示したメモリ202、ディスク204、可搬型記録媒体207などの記憶装置に記憶されたプログラムをCPU201に実行させることにより、または、通信I/F205により、その機能を実現する。各機能部の処理結果は、例えば、メモリ202、ディスク204などの記憶装置に記憶される。
【0053】
取得部301は、プログラムコードを取得する。ここで、プログラムコードは、コンパイル対象となるプログラムの中間コードである。プログラムは、例えば、アプリケーションである。中間コードは、中間言語で記述されたソースコードである。中間言語は、高級言語(高水準言語)と機械語との中間に介在するプログラミング言語である。
【0054】
具体的には、例えば、取得部301は、プログラムのソースコード(高級言語)を変換することによって、ルーチン内のソースコード(中間言語)を取得する。ルーチンは、コンパイル対象となる処理単位であり、例えば、関数である。例えば、アプリケーションに含まれる関数ごとのプログラムは、例えば、別々のコンパイラ(本パイプライン数縮退コンパイラ)によって処理される。
【0055】
なお、プログラムのソースコード(高級言語)は、例えば、ネットワーク210を介して、不図示のユーザ装置から取得されてもよく、また、不図示の入力装置を用いたユーザの操作入力により取得されてもよい。
【0056】
抽出部302は、取得されたプログラムコードから所定の処理を抽出する。所定の処理は、例えば、ループ処理である。所定の処理は、例えば、プログラムコード中の処理のうち、処理時間や処理負荷などの実行コストが相対的に高い処理である。
【0057】
以下の説明では、抽出対象となる所定の処理を「ループ処理」と表記する場合がある。
【0058】
具体的には、例えば、抽出部302は、取得されたルーチン内のソースコード(中間言語)から、制御フローグラフ(CFG:Control Flow Graph)を生成する。CFGは、基本ブロックをノードとして、プログラムの処理をグラフ化したものである。基本ブロック(BB:Basic Block)は、一つの入り口と一つの出口を持ち、内部に分岐を持たないコードである。
【0059】
ここで、図4を用いて、制御フローグラフ(CFG)の具体例について説明する。
【0060】
図4は、制御フローグラフの具体例を示す説明図である。図4において、制御フローグラフ400は、ソースコード410に対応するCFGである。制御フローグラフ400は、ノード401~404を含む。ノード401~404は、基本ブロックを表す。有向エッジは、基本ブロック間の遷移を表す。
【0061】
制御フローグラフ400によれば、ソースコード410に含まれる処理やソースコード410を実行したときに通る経路(パス)などを特定することができる。
【0062】
例えば、抽出部302は、ルーチン内のCFG(例えば、図4に示した制御フローグラフ400)を参照して、深さ優先探索などで探索した最外ループをループ処理として抽出する。最外ループとは、入れ子構造となっているループの一番外側のループのことである。ただし、1重のループも最外ループに含む。
【0063】
第1の算出部303は、抽出されたループ処理について、エコモードがONの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後のループ処理の第1の実行サイクル数を算出する。第1の実行サイクル数は、スケジューリング後のループ処理の実行にかかるサイクル数である。
【0064】
エコモードがON/OFFの場合に対応するパイプライン数およびデコード幅は、例えば、予め設定されてメモリ202、ディスク204などの記憶装置に記憶されている。ループ処理のスケジューリングは、例えば、無駄なくリソースを使用して性能が高くなるように行われる。
【0065】
なお、デコード幅が異なる場合のスケジューリング結果の差については、図14および図15を用いて後述する。
【0066】
ここで、パイプラインには、アドレス計算パイプライン、整数命令パイプライン、浮動小数点命令パイプラインなどがある。アドレス計算パイプラインは、命令の実行においてアドレス計算が行われる場合に利用される。整数命令パイプラインは、命令の実行において整数演算が行われる場合に利用される。浮動小数点命令パイプラインは、命令の実行において浮動小数点演算が行われる場合に利用される。
【0067】
アドレス計算パイプラインは、一部の整数演算が可能である。このため、整数命令パイプラインを減らしたときなどに、整数演算をアドレス演算パイプラインに振り分けるスケジューリングを行うことができる。整数演算をアドレス演算パイプラインに振り分けることで、エコモードでも性能影響がない場合がある。
【0068】
そこで、第1の算出部303は、抽出されたループ処理について、エコモードがONの場合に対応するパイプライン数、デコード幅、および、当該パイプライン数分のパイプラインそれぞれが実行可能な演算の種類に基づいて、スケジューリングを行ってもよい。そして、第1の算出部303は、スケジューリング後のループ処理の第1の実行サイクル数を算出してもよい。
【0069】
なお、パイプラインが実行可能な演算の種類を考慮した場合のスケジューリング結果の差については、図16および図17を用いて後述する。
【0070】
また、エコモードでは、メモリバンド幅が縮小される場合がある。メモリバンド幅は、コンパイラが命令やデータをメモリから読み込むときの速度を表す。メモリバンド幅が性能に影響を及ぼす場合がある。エコモードがON/OFFの場合に対応するメモリバンド幅は、例えば、予め設定されてメモリ202、ディスク204などの記憶装置に記憶されている。
【0071】
そこで、第1の算出部303は、抽出されたループ処理について、エコモードがONの場合に対応するパイプライン数、デコード幅およびメモリバンド幅に基づいて、スケジューリングを行ってもよい。そして、第1の算出部303は、スケジューリング後のループ処理の第1の実行サイクル数を算出してもよい。
【0072】
第2の算出部304は、抽出されたループ処理について、エコモードがOFFの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後のループ処理の第2の実行サイクル数を算出する。第2の実行サイクル数は、スケジューリング後のループ処理の実行にかかるサイクル数である。
【0073】
また、第2の算出部304は、抽出されたループ処理について、エコモードがOFFの場合に対応するパイプライン数、デコード幅、および、当該パイプライン数分のパイプラインそれぞれが実行可能な演算の種類に基づいて、スケジューリングを行ってもよい。そして、第2の算出部304は、スケジューリング後のループ処理の第2の実行サイクル数を算出してもよい。
【0074】
また、第2の算出部304は、抽出されたループ処理について、エコモードがOFFの場合に対応するパイプライン数、デコード幅およびメモリバンド幅に基づいて、スケジューリングを行ってもよい。そして、第2の算出部304は、スケジューリング後のループ処理の第2の実行サイクル数を算出してもよい。
【0075】
なお、第1の実行サイクル数および第2の実行サイクル数の算出例については、例えば、図10図14を用いて後述する。
【0076】
モード制御部305は、算出された第1の実行サイクル数が第2の実行サイクル数より大きい場合、抽出されたループ処理をエコモード対象の処理に決定しない。一方、モード制御部305は、算出された第1の実行サイクル数が第2の実行サイクル数以下の場合、抽出されたループ処理をエコモード対象の処理に決定する。
【0077】
エコモード対象の処理とは、エコモードを適用する処理である。そして、モード制御部305は、取得されたプログラムコードにおける、決定したエコモード対象の処理の直前にON命令を挿入するとともに、エコモード対象の処理の直後にOFF命令を挿入する。
【0078】
ON命令は、エコモードをONに切り替える命令(コマンド)である。OFF命令は、エコモードをOFFに切り替える命令である。これにより、プログラム実行時に、エコモード対象の処理の実行直前にエコモードとなり、エコモード対象の処理の実行直後にエコモードが解除される。
【0079】
なお、モード制御部305は、例えば、コンパイラの構造体の中のループ処理の情報に、エコモード対象か否かを示す情報(フラグ)を記録してもよい。
【0080】
ここで、エコモード対象のループ処理が連続する場合、ループ処理の前後にON/OFF命令が挿入されるため、ループ処理間の非ループ処理を中心に見ると、直前でエコモードがOFFとなって、直後にエコモードがONになることになる。エコモードの切り替えには、オーバーヘッド(処理時間)がかかる。
【0081】
このため、非ループ処理の前後のエコモードOFF/ONの切り替えが無い状態と比較して、実行時間が増加してしまう場合がある。例えば、非ループ処理の内容によっては、エコモードで実行したほうが、エコモード切り替えのオーバーヘッドがない分、プログラム全体の処理時間を抑えることができる場合がある。
【0082】
そこで、抽出部302は、取得されたプログラムコードから、エコモード対象の第1のループ処理と、第1のループ処理に隣接するエコモード対象の第2のループ処理とを抽出してもよい。エコモード対象のループ処理は、ON命令が直前に挿入され、かつ、OFF命令が直後に挿入されたループ処理である。
【0083】
エコモード対象のループ処理は、例えば、エコモードのON命令およびOFF命令が挿入されたルーチン内のソースコード(中間言語)を参照して特定されてもよい。また、エコモード対象のループ処理は、例えば、コンパイラの構造体の中のループ処理の情報(エコモード対象か否かを示す)を参照して特定されてもよい。
【0084】
第1のループ処理に隣接するエコモード対象の第2のループ処理は、第1のループ処理の直前または直後のエコモード対象のループ処理である。そして、抽出部302は、プログラムコードから、抽出した第1のループ処理と第2のループ処理との間に存在する非ループ処理を抽出する。
【0085】
非ループ処理は、例えば、他の処理を呼び出さない非ループ処理である。他の処理は、例えば、関数である。具体的には、例えば、抽出対象となる非ループ処理は、サブルーチンコール、return、goto、例外処理などの自処理の外に出る処理が存在しない非ループ処理である。
【0086】
また、第1の算出部303は、抽出された非ループ処理について、エコモードがONの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後の非ループ処理の第3の実行サイクル数を算出してもよい。
【0087】
なお、第1の算出部303は、非ループ処理について、さらに、エコモードがONの場合に対応するパイプライン数分のパイプラインそれぞれが実行可能な演算の種類に基づいてスケジューリングを行ってもよい。また、第1の算出部303は、非ループ処理について、さらに、エコモードがONの場合に対応するメモリバンド幅に基づいて、スケジューリングを行ってもよい。
【0088】
具体的には、例えば、第1の算出部303は、第1のループ処理と第2のループ処理との間のCFG(制御フローグラフ)から、非ループ処理のクリティカルパスを特定する。クリティカルパスとは、非ループ処理の開始から終了までの経路のうち、最も処理時間がかかる経路である。クリティカルパスは、例えば、既存のパス抽出技術を用いて特定される。そして、第1の算出部303は、特定した非ループ処理のクリティカルパスについて、エコモードがONの場合のスケジューリングを行って、スケジューリング後の非ループ処理の第3の実行サイクル数を算出する。
【0089】
また、第2の算出部304は、抽出された非ループ処理について、エコモードがOFFの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後の非ループ処理の第4の実行サイクル数を算出してもよい。
【0090】
なお、第2の算出部304は、非ループ処理について、さらに、エコモードがOFFの場合に対応するパイプライン数分のパイプラインそれぞれが実行可能な演算の種類に基づいてスケジューリングを行ってもよい。また、第2の算出部304は、非ループ処理について、さらに、エコモードがOFFの場合に対応するメモリバンド幅に基づいて、スケジューリングを行ってもよい。
【0091】
具体的には、例えば、第2の算出部304は、非ループ処理のクリティカルパスを特定する。そして、第2の算出部304は、特定した非ループ処理のクリティカルパスについて、エコモードがOFFの場合のスケジューリングを行って、スケジューリング後の非ループ処理の第4の実行サイクル数を算出する。
【0092】
そして、モード制御部305は、算出された第3のサイクル数から第4のサイクル数を減算した値が、閾値以下の場合、第1のループ処理と第2のループ処理との間に挿入されたON命令およびOFF命令を削除する。ここで、閾値は、エコモードの切り替えにかかるサイクル数によって表される(例えば、後述する図8に示すCC_COST)。
【0093】
エコモードの切り替えにかかるサイクル数は、例えば、第1のループ処理の後にエコモードをOFFにするためにかかる実行サイクル数と、第2のループ処理の前にエコモードをONにするためにかかる実行サイクル数との合計である。例えば、閾値は、1000サイクルなどに設定される。
【0094】
なお、エコモードのON命令およびOFF命令の削除例については、図5を用いて後述する。
【0095】
出力部306は、エコモードのON命令およびOFF命令が挿入されたプログラムコードを出力する。また、出力部306は、エコモードのON命令およびOFF命令が挿入されたプログラムコードに基づき生成されるアセンブラコードまたはオブジェクトコードを出力してもよい。出力部306の出力形式としては、例えば、メモリ202、ディスク204などの記憶装置への記憶、通信I/F205による他のコンピュータへの送信などがある。
【0096】
具体的には、例えば、情報処理装置101は、エコモードのON命令およびOFF命令が挿入されたソースコード(中間言語)に対して既存の最適化を実施する。そして、情報処理装置101は、最適化後のソースコード(中間言語)に基づいて、アセンブラコードおよびオブジェクトコードを生成する。この場合、出力部306は、生成されたアセンブラコードまたはオブジェクトコードを出力する。
【0097】
(エコモードのON命令およびOFF命令の削除例)
つぎに、図5を用いて、エコモードのON命令およびOFF命令の削除例について説明する。
【0098】
図5は、エコモードのON命令およびOFF命令の削除例を示す説明図である。図5において、ソースコード500は、エコモードのON命令およびOFF命令が挿入される前の元のソースコードを表す。ソースコード500中、ループAは、エコモード対象の第1のループ処理に対応し、ループBは、エコモード対象の第2のループ処理に対応するとする。
【0099】
この場合、ソースコード500におけるループAの前後に、エコモードのON命令501およびOFF命令502が挿入される。また、ソースコード500におけるループBの前後に、エコモードのON命令503およびOFF命令504が挿入される。
【0100】
ここで、ループAとループBとの間には、処理Xが存在する。処理Xは、エコモード対象のループ処理間の非ループ処理に対応する。処理Xは、サブルーチンコール、return、goto、例外処理などの処理Xの外に出る処理が存在しない非ループ処理であるとする。
【0101】
処理Xを中心に見ると、直前でエコモードがOFFとなって、直後にエコモードがONになることになり、エコモードの切り替えにオーバーヘッドがかかる。このため、情報処理装置101は、処理Xについて、エコモードがONの場合のスケジューリングを行って、スケジューリング後の処理Xの第3の実行サイクル数を算出する。
【0102】
また、情報処理装置101は、処理Xについて、エコモードがOFFの場合のスケジューリングを行って、スケジューリング後の処理Xの第4の実行サイクル数を算出する。そして、情報処理装置101は、算出した第3のサイクル数から第4のサイクル数を減算した値が、閾値以下であるか否かを判断する。
【0103】
ここでは、閾値を「閾値=1000サイクル」とする。また、第3のサイクル数から第4のサイクル数を減算した値を「500サイクル」とする。情報処理装置101は、第33のサイクル数から第4のサイクル数を減算した値が、閾値以下であると判断する。
【0104】
第3のサイクル数から第4のサイクル数を減算した値が閾値以下ということは、エコモードで処理Xを実行することによる性能影響(実行サイクル数の増加分)が、エコモードOFF/ONの切り替えにかかるオーバーヘッドよりも小さいことを表す。このため、処理Xをエコモードのまま実行するほうが、プログラム全体の高速化につながる。
【0105】
そこで、情報処理装置101は、ソースコード500から、処理Xの前後に挿入されたOFF命令502およびON命令503を削除する。この結果、処理Xを含むループAからループBまでの区間が、エコモードONの区間となる。これにより、情報処理装置101は、エコモードの切り替えにかかるオーバーヘッドを削減して、プログラム全体の高速化を図ることができる。
【0106】
(情報処理装置101のパイプライン数縮退処理手順)
つぎに、実施の形態2にかかる情報処理装置101のパイプライン数縮退処理手順について説明する。情報処理装置101のパイプライン数縮退処理は、第1の最適化処理と第2の最適化処理とを含む。まず、図6を用いて、情報処理装置101の第1の最適化処理手順について説明する。
【0107】
図6は、実施の形態2にかかる情報処理装置101の第1の最適化処理手順の一例を示すフローチャートである。図6のフローチャートにおいて、まず、情報処理装置101は、ルーチン内のソースコード(中間言語)を取得する(ステップS601)。つぎに、情報処理装置101は、取得したソースコード(中間言語)に基づいて、深さ優先探索でループ処理Lを検出する(ステップS602)。例えば、情報処理装置101は、取得したソースコード(中間言語)に基づくルーチン内のCFGからループ処理Lを検出する。
【0108】
そして、情報処理装置101は、検出したループ処理Lが最外ループか否かを判断する(ステップS603)。ここで、ループ処理Lが最外ループではない場合(ステップS603:No)、情報処理装置101は、ステップS609に移行する。
【0109】
一方、ループ処理Lが最外ループの場合(ステップS603:Yes)、情報処理装置101は、ループ処理Lについて、エコモードONでのスケジューリングを行って、実行サイクル数CC1を算出する(ステップS604)。エコモードONでのスケジューリング(命令スケジューリング)は、例えば、エコモードがONの場合に対応するパイプライン数、デコード幅、メモリバンド幅、各パイプラインが実行可能な演算の種類などに基づいて行われる。実行サイクル数CC1は、スケジューリング後のループ処理Lの実行にかかるサイクル数(第1の実行サイクル数)である。
【0110】
つぎに、情報処理装置101は、ループ処理Lについて、エコモードOFFでのスケジューリングを行って、実行サイクル数CC2を算出する(ステップS605)。エコモードOFFでのスケジューリングは、例えば、エコモードがOFFの場合に対応するパイプライン数、デコード幅、メモリバンド幅、各パイプラインが実行可能な演算の種類などに基づいて行われる。実行サイクル数CC2は、スケジューリング後のループ処理Lの実行にかかるサイクル数(第2の実行サイクル数)である。
【0111】
そして、情報処理装置101は、算出した実行サイクル数CC1が実行サイクル数CC2以下であるか否かを判断する(ステップS606)。ここで、実行サイクル数CC1が実行サイクル数CC2より大きい場合(ステップS606:No)、情報処理装置101は、ステップS609に移行する。
【0112】
一方、実行サイクル数CC1が実行サイクル数CC2以下の場合(ステップS606:Yes)、情報処理装置101は、検出したループ処理Lをエコモード対象に決定する(ステップS607)。そして、情報処理装置101は、取得したソースコード(中間言語)における、検出したループ処理L(エコモード対象)の直前にON命令を挿入するとともに、ループ処理Lの直後にOFF命令を挿入する(ステップS608)。
【0113】
つぎに、情報処理装置101は、取得したソースコード(中間言語)に基づいて、未探索のループ処理があるか否かを判断する(ステップS609)。ここで、未探索のループ処理がある場合(ステップS609:Yes)、情報処理装置101は、ステップS602に戻る。
【0114】
一方、未探索のループ処理がない場合(ステップS609:No)、情報処理装置101は、本フローチャートによる一連の処理を終了する。
【0115】
これにより、情報処理装置101は、ルーチン内のループ処理について、エコモード適用時の性能影響を精度よく見積もって、実行性能が変化しない場合にエコモードでの実行に切り替える命令(ON/OFF命令)をソースコード(中間言語)に挿入することができる。
【0116】
なお、ステップS608において、情報処理装置101は、ループ処理Lの前後にON命令およびOFF命令を挿入することにしたが、これに限らない。例えば、情報処理装置101は、この時点ではON命令およびOFF命令を挿入せず、コンパイラの構造体の中のループ処理の情報に、エコモード対象か否かを示す情報(フラグ)を記録してもよい。
【0117】
つぎに、図7および図8を用いて、情報処理装置101の第2の最適化処理手順について説明する。第2の最適化処理は、例えば、第1の最適化処理の後に続けて実行される。
【0118】
図7および図8は、情報処理装置101の第2の最適化処理手順の一例を示すフローチャートである。図7のフローチャートにおいて、まず、情報処理装置101は、ルーチン内のソースコード(中間言語)を取得する(ステップS701)。取得されるソースコード(中間言語)は、例えば、エコモード対象のループ処理の前後にエコモードのON/OFFするので、命令が挿入されたものである。
【0119】
つぎに、情報処理装置101は、取得したソースコード(中間言語)に基づいて、深さ優先探索でループ処理L1を検出する(ステップS702)。例えば、情報処理装置101は、取得したソースコード(中間言語)に基づくルーチン内のCFGからループ処理Lを検出する。
【0120】
そして、情報処理装置101は、検出したループ処理L1がエコモード対象であるか否かを判断する(ステップS703)。エコモード対象は、例えば、ソースコード(中間言語)に挿入されたエコモードの切替命令(ON/OFF命令)、または、コンパイラの構造体の中のループ処理の情報から判断される。
【0121】
ここで、ループ処理L1がエコモード対象ではない場合には(ステップS703:No)、情報処理装置101は、ステップS707に移行する。一方、ループ処理L1がエコモード対象の場合(ステップS703:Yes)、情報処理装置101は、ルーチン内のCFGから、幅優先探索でループ処理L1の直前のループ処理L2を検出する(ステップS704)。そして、情報処理装置101は、エコモード対象の直前のループ処理L2が検出されたか否かを判断する(ステップS705)。
【0122】
ここで、エコモード対象の直前のループ処理L2が検出されなかった場合(ステップS705:No)、情報処理装置101は、ステップS707に移行する。一方、エコモード対象の直前のループ処理L2が検出された場合(ステップS705:Yes)、情報処理装置101は、ループ処理L1と直前のループ処理L2との間のCFGを参照して、CFGの外に出る基本ブロックがあるか否かを判断する(ステップS706)。
【0123】
ここで、CFGの外に出る基本ブロックがない場合(ステップS706:No)、情報処理装置101は、図8に示すステップS801に移行する。一方、CFGの外に出る基本ブロックがある場合(ステップS706:Yes)、情報処理装置101は、取得したソースコード(中間言語)に基づいて、未探索のループ処理があるか否かを判断する(ステップS707)。
【0124】
ここで、未探索のループ処理がある場合(ステップS707:Yes)、情報処理装置101は、ステップS702に戻る。一方、未探索のループ処理がない場合には(ステップS707:No)、情報処理装置101は、本フローチャートによる一連の処理を終了する。
【0125】
図8のフローチャートにおいて、まず、情報処理装置101は、ループ処理L1と直前のループ処理L2との間のCFGを参照して、第1のループ処理と第2のループ処理との間の非ループ処理のクリティカルパスを特定する(ステップS801)。
【0126】
そして、情報処理装置101は、特定したクリティカルパスについて、エコモードONでのスケジューリングを行って、実行サイクル数CC_ONを算出する(ステップS802)。エコモードONでのスケジューリングは、例えば、エコモードがONの場合に対応するパイプライン数、デコード幅、メモリバンド幅、各パイプラインが実行可能な演算の種類などに基づいて行われる。実行サイクル数CC_ONは、スケジューリング後の非ループ処理(クリティカルパス)の実行にかかるサイクル数(第3の実行サイクル数)である。
【0127】
つぎに、情報処理装置101は、特定したクリティカルパスについて、エコモードOFFでのスケジューリングを行って、実行サイクル数CC_OFFを算出する(ステップS803)。エコモードOFFでのスケジューリングは、例えば、エコモードがOFFの場合に対応するパイプライン数、デコード幅、メモリバンド幅、各パイプラインが実行可能な演算の種類などに基づいて行われる。実行サイクル数CC_OFFは、スケジューリング後の非ループ処理(クリティカルパス)の実行にかかるサイクル数(第4の実行サイクル数)である。
【0128】
つぎに、情報処理装置101は、切替コストCC_COSTを取得する(ステップS804)。切替コストCC_COSTは、エコモードの切り替えにかかるコスト(サイクル数)を表す。切替コストCC_COSTは、例えば、メモリ202、ディスク204などの記憶装置から取得される。
【0129】
そして、情報処理装置101は、算出した実行サイクル数CC_ONから実行サイクル数CC_OFFを減算した値がCC_COST以下であるか否かを判断する(ステップS805)。ここで、実行サイクル数CC_ONから実行サイクル数CC_OFFを減算した値がCC_COSTより大きい場合(ステップS805:No)、図7に示したステップS707に移行する。
【0130】
一方、実行サイクル数CC_ONから実行サイクル数CC_OFFを減算した値がCC_COST以下の場合(ステップS805:Yes)、情報処理装置101は、ルーチン内のソースコード(中間言語)から、ループ処理L1と直前のループ処理L2との間のエコモードのOFF/ON命令を削除する(ステップS806)。そして、情報処理装置101は、図7に示したステップS707に移行する。
【0131】
これにより、情報処理装置101は、エコモードのまま実行するほうがプログラム全体の高速化につながる非ループ処理について、非ループ処理の前後に挿入されたOFF命令およびON命令を削除することができる。
【0132】
なお、ステップS806の時点では、コンパイラの構造体の中のループ処理の情報に、エコモード対象か否かを示す情報(フラグ)が記録されているだけで、ソースコード(中間言語)にエコモードのON/OFF命令が挿入されていない場合がある。この場合、情報処理装置101は、ステップS806において、コンパイラの構造体の中の非ループ処理の情報に、エコモード対象であることを示す情報(フラグ)を記録してもよい。そして、情報処理装置101は、第2の最適化処理を実行後に、コンパイラの構造体の中のループ処理の情報を参照して、エコモード対象のループ対象の前後にエコモードのON/OFF命令を挿入してもよい。また、情報処理装置101は、第2の最適化処理を実行後に、コンパイラの構造体の中の非ループ処理の情報を参照して、エコモード対象の非ループ対象の前後のOFF/ON命令を削除してもよい。
【0133】
つぎに、情報処理装置101のパイプライン数縮退処理の適用箇所について説明する。
【0134】
図9は、情報処理装置101のパイプライン数縮退処理の適用箇所の一例を示す説明図である。図において、本パイプライン数縮退コンパイラにより実行される処理(解析処理901,最適化処理902,コード出力903)の一例が示されている。
【0135】
解析処理901では、C言語、C++、Fortranなどで記述されたソースコード(高級言語)の解析(字句解析、構文解析、意味解析など)が行われ、ソースコード(中間言語)が生成される。最適化処理902では、ソースコード(中間言語)に対する最適化が行われる。
【0136】
情報処理装置101のパイプライン数縮退処理910は、最適化処理902における種々の最適化構成の中で、関数インライン化911とループスケジューリング912の後に実行される。コード出力903では、アセンブラコード920やオブジェクトコード930が出力される。
【0137】
(第1の実行サイクル数および第2の実行サイクル数の算出例)
つぎに、図10図14を用いて、第1の実行サイクル数および第2の実行サイクル数の算出例について説明する。まず、図10および図11を用いて、ルーチン内のソースコード(中間言語)から抽出されたループ処理に対応するプログラムについて説明する。
【0138】
図10は、ソースプログラムの具体例を示す説明図である。図10において、ソースプログラム1000は、抽出されたループ処理に対応するプログラムである。配列は、整数型とする。図11は、アセンブラの具体例を示す説明図である。図11において、アセンブラ1100は、図10に示したソースプログラム1000に対するアセンブラである。
【0139】
以下、アセンブラ1100(ソースプログラム1000)に基づく第1の実行サイクル数および第2の実行サイクル数の算出例について説明する。
【0140】
ここでは、エコモードがOFFの場合に対応する各種パラメータを以下とする。
整数演算パイプライン数=2
浮動小数点パイプライン数=2
アドレス計算パイプライン数=4
デコード幅=4
【0141】
また、エコモードがONの場合に対応する各種パラメータを以下とする。
整数演算パイプライン数=1
浮動小数点パイプライン数=1
アドレス計算パイプライン数=2
デコード幅=2
【0142】
また、各命令の実行サイクル数を以下とする。
ロード・ストア・比較命令=5[サイクル]
ただし、実行サイクル数の内訳は、「命令フェッチ:1、デコード:1、読み込み:1、実行1、書き込み:1」とする。
【0143】
整数演算命令=6[サイクル]
ただし、実行サイクル数の内訳は、「命令フェッチ:1、デコード:1、読み込み:1、実行2、書き込み:1」とする。
【0144】
図12は、エコモードOFFの場合のスケジューリング結果の一例を示す説明図である。図12において、スケジューリング結果1200は、エコモードOFFの場合のスケジューリング結果(forループ1回転分)を示す。図12中、f,d,r,e,wは、命令フェッチ、デコード、読み込み、実行、書き込みを表す。また、w1~w11等は、整数レジスタを表す。矢印1201の箇所では、添え字iが更新されるため、順序の制約がある。矢印1202の箇所では、添え字iの読み書きのため、順序の制約がある。
【0145】
スケジューリング結果1200によれば、エコモードOFFの場合の実行サイクル数(第2の実行サイクル数)は、25サイクルとなる。
【0146】
図13は、エコモードONの場合のスケジューリング結果の一例を示す説明図である。図13において、スケジューリング結果1300は、エコモードONの場合のスケジューリング結果(forループ1回転分)を示す。図13中、f,d,r,e,wは、命令フェッチ、デコード、読み込み、実行、書き込みを表す。また、w1~w11等は、整数レジスタを表す。矢印1301の箇所では、添え字iが更新されるため、順序の制約がある。矢印1302の箇所では、添え字iの読み書きのため、順序の制約がある。
【0147】
スケジューリング結果1300によれば、エコモードONの場合の実行サイクル数(第1の実行サイクル数)は、26サイクルとなる。
【0148】
この場合、エコモードONの場合の実行サイクル数(第1の実行サイクル数)がエコモードOFFの場合の実行サイクル数(第2の実行サイクル数)よりも大きい。このため、情報処理装置101は、抽出されたループ処理をエコモード対象の処理に決定しない。
【0149】
つぎに、図14および図15を用いて、デコード幅の考慮によりスケジューリング結果に差が出るケースについて説明する。
【0150】
ここでは、実行サイクル数の算出対象となるループ処理を、図11に示したアセンブラ1100(ソースプログラム1000)に対応するループ処理とする。また、パイプライン数を以下のように固定した場合を想定する。
【0151】
整数演算パイプライン数=2(同時に2命令まで浮動小数点演算可能)
浮動小数点パイプライン数=2(同時に2命令まで整数演算可能)
【0152】
また、各命令の実行サイクル数を「5[サイクル]」とする。実行サイクル数の内訳は、「命令フェッチ:1、デコード:1、読み込み:1、実行1、書き込み:1」とする。
【0153】
図14は、デコード幅が異なる場合のスケジューリング結果の一例を示す説明図(その1)である。図14において、スケジューリング結果1400は、デコード幅が「4」の場合のスケジューリング結果(forループ1回転分)を示す。図14中、f,d,r,e,wは、命令フェッチ、デコード、読み込み、実行、書き込みを表す。また、w1~w11等は、整数レジスタを表す。矢印1401の箇所では、添え字iが更新されるため、順序の制約がある。矢印1402の箇所では、添え字iの読み書きのため、順序の制約がある。
【0154】
スケジューリング結果1400では、デコード幅が「4」のため4命令まで同時実行可能であり、実行サイクル数は、22サイクルとなる。
【0155】
図15は、デコード幅が異なる場合のスケジューリング結果の一例を示す説明図(その2)である。図15において、スケジューリング結果1500は、デコード幅が「2」の場合のスケジューリング結果(forループ1回転分)を示す。図15中、f,d,r,e,wは、命令フェッチ、デコード、読み込み、実行、書き込みを表す。また、w1~w11等は、整数レジスタを表す。矢印1501の箇所では、添え字iが更新されるため、順序の制約がある。矢印1502の箇所では、添え字iの読み書きのため、順序の制約がある。
【0156】
スケジューリング結果1500では、デコード幅が「2」のため2命令まで同時実行可能であり、実行サイクル数は、23サイクルとなる。
【0157】
このように、デコード幅が異なると、スケジューリング結果が異なるものとなって、実行サイクル数に差が出る場合がある。例えば、デコード幅が「2」の場合、2サイクル目のデコードが2命令までに制限されるため、デコード幅が「4」の場合に比べて、全体が1サイクル遅延する。
【0158】
つぎに、図16および図17を用いて、アドレス計算パイプラインの考慮(パイプラインが実行可能な演算の種類)によりスケジューリング結果に差が出るケースについて説明する。アドレス計算パイプラインは、整数演算(アドレス計算、算術演算、論理演算)の一部を実行可能である。
【0159】
ここでは、実行サイクル数の算出対象となるループ処理を、図11に示したアセンブラ1100(ソースプログラム1000)に対応するループ処理とする。また、パイプライン数を以下のように固定した場合を想定する。
【0160】
整数演算パイプライン数=1(同時に1命令まで浮動小数点演算可能)
浮動小数点パイプライン数=1(同時に1命令まで整数演算可能)
アドレス計算パイプライン=1
【0161】
また、各命令の実行サイクル数を「5[サイクル]」とする。実行サイクル数の内訳は、「命令フェッチ:1、デコード:1、読み込み:1、実行1、書き込み:1」とする。
【0162】
図16は、アドレス計算パイプラインを考慮しない場合のスケジューリング結果の一例を示す説明図である。図16において、スケジューリング結果1600は、アドレス計算パイプラインを考慮しない場合のスケジューリング結果(forループ1回転分)を示す。図16中、f,d,r,e,wは、命令フェッチ、デコード、読み込み、実行、書き込みを表す。また、w1~w11等は、整数レジスタを表す。矢印1601の箇所では、添え字iが更新されるため、順序の制約がある。矢印1602の箇所では、添え字iの読み書きのため、順序の制約がある。
【0163】
スケジューリング結果1600では、整数演算パイプライン数が「1」のため整数演算は、1サイクルにつき1命令までしか実行できない。この結果、スケジューリング結果1600では、実行サイクル数は、23サイクルとなる。
【0164】
図17は、アドレス計算パイプラインを考慮する場合のスケジューリング結果の一例を示す説明図である。図17において、スケジューリング結果1700は、アドレス計算パイプラインを考慮する場合のスケジューリング結果(forループ1回転分)を示す。図17中、f,d,r,e,wは、命令フェッチ、デコード、読み込み、実行、書き込みを表す。また、w1~w11等は、整数レジスタを表す。矢印1701の箇所では、添え字iが更新されるため、順序の制約がある。矢印1702の箇所では、添え字iの読み書きのため、順序の制約がある。
【0165】
スケジューリング結果1700では、整数演算パイプライン数が「1」であるが、アドレス計算パイプラインで代用可能なため、整数演算は、1サイクルにつき2命令まで実行可能である。この結果、スケジューリング結果1700では、実行サイクル数は、22サイクルとなる。
【0166】
このように、アドレス計算パイプラインを考慮するかどうかによって、スケジューリング結果が異なるものとなって、実行サイクル数に差が出る場合がある。例えば、アドレス計算パイプラインを考慮しない場合、整数演算を1サイクルにつき1命令までしか実行できず、アドレス計算パイプラインを考慮する場合に比べて、全体が1サイクル遅延する。
【0167】
以上説明したように、実施の形態2にかかる情報処理装置101によれば、プログラムコードからループ処理を抽出し、抽出したループ処理について、エコモードがONの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後のループ処理の第1の実行サイクル数を算出することができる。また、情報処理装置101によれば、抽出したループ処理について、エコモードがOFFの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後のループ処理の第2の実行サイクル数を算出することができる。そして、情報処理装置101によれば、算出した第1の実行サイクル数が第2の実行サイクル数以下の場合、プログラムコードにおける、ループ処理の直前にエコモードのON命令を挿入するとともに、ループ処理の直後にエコモードのOFF命令を挿入することができる。
【0168】
これにより、情報処理装置101は、コンパイル対象のルーチン内のループ処理について、エコモード適用時の性能影響を精度よく見積もって、実行性能が変化しない場合にエコモードでの実行に切り替える命令(ON/OFF命令)をソースコード(中間言語)に挿入することができる。このため、情報処理装置101は、アプリケーションなどのプログラムの性能低下を防ぎつつ、プログラム実行時の電力効率を高めることができる。
【0169】
また、情報処理装置101によれば、プログラムコードから、エコモード対象の第1のループ処理と、第1のループ処理に隣接するエコモード対象の第2のループ処理を抽出することができる。そして、情報処理装置101によれば、抽出した第1のループ処理と第2のループ処理との間に存在する非ループ処理について、エコモードがONの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後の非ループ処理の第3の実行サイクル数を算出することができる。また、情報処理装置101によれば、非ループ処理について、エコモードがOFFの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後の非ループ処理の第4の実行サイクル数を算出することができる。そして、情報処理装置101によれば、算出した第3の実行サイクル数から第4の実行サイクル数を減算した値が、エコモードの切り替えにかかるサイクル数以下の場合、第1のループ処理と第2のループ処理との間に挿入されたエコモードのON命令およびOFF命令を削除することができる。
【0170】
これにより、情報処理装置101は、エコモードのまま実行するほうがプログラム全体の高速化につながる非ループ処理の前後に挿入されたOFF命令およびON命令を削除することができ、エコモードの切り替えにかかるオーバーヘッドを削減して、プログラム全体の高速化を図ることができる。
【0171】
また、情報処理装置101によれば、プログラムコードから、第1のループ処理と第2のループ処理との間に存在し、かつ、他の処理を呼び出さない非ループ処理を抽出することができる。他の処理は、例えば、関数である。
【0172】
これにより、情報処理装置101は、コンパイラ内で実行サイクルを精度よく見積もることができる非ループ処理を対象として、エコモードの適否を判断することができる。例えば、情報処理装置101は、別ファイルの処理を呼び出すような命令が含まれ、実行サイクル数を正確に見積もることができない非ループ処理を、エコモードの適否の判断対象から除外することができる。
【0173】
また、情報処理装置101によれば、抽出したループ処理について、エコモードがONの場合に対応するパイプライン数およびデコード幅、および、当該パイプライン数分のパイプラインそれぞれが実行可能な演算の種類に基づくスケジューリングを行って、スケジューリング後のループ処理の第1の実行サイクル数を算出することができる。また、情報処理装置101によれば、抽出したループ処理について、エコモードがOFFの場合に対応するパイプライン数、デコード幅、および、当該パイプライン数分のパイプラインそれぞれが実行可能な演算の種類に基づくスケジューリングを行って、スケジューリング後のループ処理の第2の実行サイクル数を算出することができる。
【0174】
これにより、情報処理装置101は、ループ処理について、他のパイプラインで代用できるような演算が含まれる場合に、使用可能なパイプラインが実行できる演算の種類を考慮してスケジューリングを行うことができ、実行サイクルの見積もり精度を向上させることができる。
【0175】
また、情報処理装置101によれば、非ループ処理について、エコモードがONの場合に対応するパイプライン数およびデコード幅、および、当該パイプライン数分のパイプラインそれぞれが実行可能な演算の種類に基づくスケジューリングを行って、スケジューリング後のループ処理の第3の実行サイクル数を算出することができる。また、情報処理装置101によれば、非ループ処理について、エコモードがOFFの場合に対応するパイプライン数、デコード幅、および、当該パイプライン数分のパイプラインそれぞれが実行可能な演算の種類に基づくスケジューリングを行って、スケジューリング後のループ処理の第4の実行サイクル数を算出することができる。
【0176】
これにより、情報処理装置101は、非ループ処理について、他のパイプラインで代用できるような演算が含まれる場合に、使用可能なパイプラインが実行できる演算の種類を考慮してスケジューリングを行うことができ、実行サイクルの見積もり精度を向上させることができる。
【0177】
また、情報処理装置101によれば、エコモードのON命令およびOFF命令が挿入されたプログラムコードに基づき生成されるアセンブラコードまたはオブジェクトコードを出力することができる。
【0178】
これにより、情報処理装置101は、ターゲットマシン向けのオブジェクトとして、実行時の電力効率を高めたアセンブラコードやオブジェクトコードを提供することができる。
【0179】
これらのことから、実施の形態2にかかる情報処理装置101によれば、実行性能を確保した演算器数の調整により電力効率を高める最適化機能を有するコンパイラ(パイプライン数縮退コンパイラ)を提供することができる。また、情報処理装置101によれば、プログラマーなどが人手によりエコモードの適用箇所を判断してON/OFF命令を挿入する場合に比べて、プログラムの改良にかかる作業負荷や作業時間を削減することができる。
【0180】
なお、本実施の形態で説明したパイプライン数縮退方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本パイプライン数縮退コンパイラは、ハードディスク、フレキシブルディスク、CD-ROM、DVD、USBメモリ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本パイプライン数縮退コンパイラは、インターネット等のネットワークを介して配布してもよい。
【0181】
上述した実施の形態に関し、さらに以下の付記を開示する。
【0182】
(付記1)プログラムコードから所定の処理を抽出し、
抽出した前記所定の処理について、パイプライン数を制限するエコモードがONの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後の前記所定の処理の実行にかかる第1のサイクル数を算出し、
前記所定の処理について、前記エコモードがOFFの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後の前記所定の処理の実行にかかる第2のサイクル数を算出し、
算出した前記第1のサイクル数が前記第2のサイクル数以下の場合、前記プログラムコードにおける、前記所定の処理の直前に前記エコモードをONに切り替えるON命令を挿入するとともに、前記所定の処理の直後に前記エコモードをOFFに切り替えるOFF命令を挿入する、
処理をコンピュータに実行させることを特徴とするパイプライン数縮退コンパイラ。
【0183】
(付記2)前記所定の処理は、ループ処理である、ことを特徴とする付記1に記載のパイプライン数縮退コンパイラ。
【0184】
(付記3)前記プログラムコードから、前記ON命令が直前に挿入され、かつ、前記OFF命令が直後に挿入された第1のループ処理を抽出し、
前記プログラムコードから、前記第1のループ処理に隣接するループ処理であって、前記ON命令が直前に挿入され、かつ、前記OFF命令が直後に挿入された第2のループ処理を抽出し、
抽出した前記第1のループ処理と前記第2のループ処理との間に存在する非ループ処理について、前記エコモードがONの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後の前記非ループ処理の実行にかかる第3のサイクル数を算出し、
前記非ループ処理について、前記エコモードがOFFの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後の前記非ループ処理の実行にかかる第4のサイクル数を算出し、
算出した前記第3のサイクル数から前記第4のサイクル数を減算した値が、前記エコモードの切り替えにかかるサイクル数以下の場合、前記第1のループ処理と前記第2のループ処理との間に挿入された前記ON命令および前記OFF命令を削除する、
処理を前記コンピュータに実行させることを特徴とする付記2に記載のパイプライン数縮退コンパイラ。
【0185】
(付記4)前記非ループ処理は、他の処理を呼び出さない非ループ処理である、ことを特徴とする付記3に記載のパイプライン数縮退コンパイラ。
【0186】
(付記5)前記第1のサイクル数を算出する処理は、
前記所定の処理について、前記エコモードがONの場合に対応するパイプライン数、デコード幅、および、当該パイプライン数分のパイプラインそれぞれが実行可能な演算の種類に基づくスケジューリングを行って、前記第1のサイクル数を算出し、
前記第2のサイクル数を算出する処理は、
前記所定の処理について、前記エコモードがOFFの場合に対応するパイプライン数、デコード幅、および、当該パイプライン数分のパイプラインそれぞれが実行可能な演算の種類に基づくスケジューリングを行って、前記第2のサイクル数を算出する、
ことを特徴とする付記1~4のいずれか一つに記載のパイプライン数縮退コンパイラ。
【0187】
(付記6)前記第3のサイクル数を算出する処理は、
前記非ループ処理について、前記エコモードがONの場合に対応するパイプライン数、デコード幅、および、当該パイプライン数分のパイプラインそれぞれが実行可能な演算の種類に基づくスケジューリングを行って、前記第3のサイクル数を算出し、
前記第4のサイクル数を算出する処理は、
前記非ループ処理について、前記エコモードがOFFの場合に対応するパイプライン数、デコード幅、および、当該パイプライン数分のパイプラインそれぞれが実行可能な演算の種類に基づくスケジューリングを行って、前記第4のサイクル数を算出する、
ことを特徴とする付記3または4に記載のパイプライン数縮退コンパイラ。
【0188】
(付記7)前記ON命令および前記OFF命令が挿入された前記プログラムコードに基づき生成されるアセンブラコードまたはオブジェクトコードを出力する、処理を前記コンピュータに実行させることを特徴とする付記1~6のいずれか一つに記載のパイプライン数縮退コンパイラ。
【0189】
(付記8)プログラムコードから、パイプライン数を制限するエコモードをONに切り替えるON命令が直前に挿入され、かつ、前記エコモードをOFFに切り替えるOFF命令が直後に挿入された第1のループ処理を抽出し、
前記プログラムコードから、前記第1のループ処理に隣接するループ処理であって、前記ON命令が直前に挿入され、かつ、前記OFF命令が直後に挿入された第2のループ処理を抽出し、
抽出した前記第1のループ処理と前記第2のループ処理との間に存在する非ループ処理について、前記エコモードがONの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後の前記非ループ処理の実行にかかる第3のサイクル数を算出し、
前記非ループ処理について、前記エコモードがOFFの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後の前記非ループ処理の実行にかかる第4のサイクル数を算出し、
算出した前記第3のサイクル数から前記第4のサイクル数を減算した値が、前記エコモードの切り替えにかかるサイクル数以下の場合、前記第1のループ処理と前記第2のループ処理との間に挿入された前記ON命令および前記OFF命令を削除する、
処理をコンピュータに実行させることを特徴とするパイプライン数縮退コンパイラ。
【0190】
(付記9)プログラムコードから所定の処理を抽出し、
抽出した前記所定の処理について、パイプライン数を制限するエコモードがONの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後の前記所定の処理の実行にかかる第1のサイクル数を算出し、
前記所定の処理について、前記エコモードがOFFの場合に対応するパイプライン数およびデコード幅に基づくスケジューリングを行って、スケジューリング後の前記所定の処理の実行にかかる第2のサイクル数を算出し、
算出した前記第1のサイクル数が前記第2のサイクル数以下の場合、前記プログラムコードにおける、前記所定の処理の直前に前記エコモードをONに切り替えるON命令を挿入するとともに、前記所定の処理の直後に前記エコモードをOFFに切り替えるOFF命令を挿入する、
処理をコンピュータが実行することを特徴とするパイプライン数縮退方法。
【符号の説明】
【0191】
101 情報処理装置
110 プログラムコード
111 ループ処理
112,501,503 ON命令
113,502,504 OFF命令
200 バス
201 CPU
202 メモリ
203 ディスクドライブ
204 ディスク
205 通信I/F
206 可搬型記録媒体I/F
207 可搬型記録媒体
210 ネットワーク
300 制御部
301 取得部
302 抽出部
303 第1の算出部
304 第2の算出部
305 モード制御部
306 出力部
400 制御フローグラフ
401,402,403,404 ノード
410,500 ソースコード
901 解析処理
902 最適化処理
903 コード出力
910 パイプライン数縮退処理
911 関数インライン化
912 ループスケジューリング
920 アセンブラコード
930 オブジェクトコード
1000 ソースプログラム
1100 アセンブラ
1200,1300,1400,1500,1600,1700 スケジューリング結果
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17