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

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

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

特許7339537情報処理装置、情報処理プログラム、及び情報処理方法
<>
  • 特許-情報処理装置、情報処理プログラム、及び情報処理方法 図1
  • 特許-情報処理装置、情報処理プログラム、及び情報処理方法 図2
  • 特許-情報処理装置、情報処理プログラム、及び情報処理方法 図3
  • 特許-情報処理装置、情報処理プログラム、及び情報処理方法 図4
  • 特許-情報処理装置、情報処理プログラム、及び情報処理方法 図5
  • 特許-情報処理装置、情報処理プログラム、及び情報処理方法 図6
  • 特許-情報処理装置、情報処理プログラム、及び情報処理方法 図7
  • 特許-情報処理装置、情報処理プログラム、及び情報処理方法 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-08-29
(45)【発行日】2023-09-06
(54)【発明の名称】情報処理装置、情報処理プログラム、及び情報処理方法
(51)【国際特許分類】
   G06F 8/41 20180101AFI20230830BHJP
   G06F 9/32 20180101ALI20230830BHJP
【FI】
G06F8/41 130
G06F9/32 330A
【請求項の数】 5
(21)【出願番号】P 2020002837
(22)【出願日】2020-01-10
(65)【公開番号】P2021111136
(43)【公開日】2021-08-02
【審査請求日】2022-09-08
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100087480
【弁理士】
【氏名又は名称】片山 修平
(72)【発明者】
【氏名】新井 正樹
【審査官】松平 英
(56)【参考文献】
【文献】特表2016-510919(JP,A)
【文献】特開平5-120029(JP,A)
【文献】KOES, David ryan et al,A Global Progressive Register Allocator,ACM SIGPLAN Notices,ACM,2006年06月11日,Volume 41, Issue 6,pp. 204-215
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/40-8/54
9/30-9/355
9/455
(57)【特許請求の範囲】
【請求項1】
第1のループを分割して得られる複数の第2のループの各々に含まれる命令の参照先の個数がハードウェア数を超えない条件の下で、前記第1のループを複数の前記第2のループに分割する整数線形計画法の問題を解くのに要する時間と、前記第1のループの命令数との関係を取得する取得部と、
前記第1のループの前記命令数であって、第1の時間内に前記問題を解くことが可能な第1の命令数を算出する算出部と、
入力ループを分割することにより、前記第1の命令数よりも少ない第2の命令数の前記第1のループを複数生成する第1の分割部と、
前記関係から前記第2の命令数に対応する第2の時間を求め、前記第2の時間をかけて前記問題を解くことにより、前記第1のループを複数の前記第2のループに分割する第2の分割部と、
を有することを特徴とする情報処理装置。
【請求項2】
前記ハードウェア数は、レジスタ数又はメモリストリーム数であることを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記取得部は、
サンプル用の複数の前記第1のループの各々に対して前記問題の解の取得を試みることにより、前記解の精度が閾値に到達する第3の時間と、前記第1のループの前記命令数とを対応付け、
相互に対応する前記第3の時間と前記命令数とを学習データとする機械学習により前記関係を取得することを特徴とする請求項1に記載の情報処理装置。
【請求項4】
第1のループを分割して得られる複数の第2のループの各々に含まれる命令の参照先の個数がハードウェア数を超えない条件の下で、前記第1のループを複数の前記第2のループに分割する整数線形計画法の問題を解くのに要する時間と、前記第1のループの命令数との関係を取得する処理と、
前記第1のループの前記命令数であって、第1の時間内に前記問題を解くことが可能な第1の命令数を算出する処理と、
入力ループを分割することにより、前記第1の命令数よりも少ない第2の命令数の前記第1のループを複数生成する処理と、
前記関係から前記第2の命令数に対応する第2の時間を求め、前記第2の時間をかけて前記問題を解くことにより、前記第1のループを複数の前記第2のループに分割する処理と、
をコンピュータに実行させるための情報処理プログラム。
【請求項5】
第1のループを分割して得られる複数の第2のループの各々に含まれる命令の参照先の個数がハードウェア数を超えない条件の下で、前記第1のループを複数の前記第2のループに分割する整数線形計画法の問題を解くのに要する時間と、前記第1のループの命令数との関係を取得する処理と、
前記第1のループの前記命令数であって、第1の時間内に前記問題を解くことが可能な第1の命令数を算出する処理と、
入力ループを分割することにより、前記第1の命令数よりも少ない第2の命令数の前記第1のループを複数生成する処理と、
前記関係から前記第2の命令数に対応する第2の時間を求め、前記第2の時間をかけて前記問題を解くことにより、前記第1のループを複数の前記第2のループに分割する処理と、
をコンピュータが実行することを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置、情報処理プログラム、及び情報処理方法に関する。
【背景技術】
【0002】
コンパイラが行う最適化技術の一つにループ分割がある。ループ分割は、アプリケーションプログラムに含まれるループを複数個に分割することにより、一つのループに含まれる文の個数を減らす技術である。これにより、例えば分割後のループの実行時に発生するキャッシュミスを抑制でき、アプリケーションプログラムを高速に実行できる。
【0003】
但し、一つのループを複数個に分割する方法は多数あり、それらのうちで最適な分割方法を限られた時間内で精度よく求めるのは容易ではない。
【先行技術文献】
【特許文献】
【0004】
【文献】国際公開WO2018/066074号公報
【文献】特開2015-141543号公報
【文献】特開2012-133449号公報
【非特許文献】
【0005】
【文献】中田育男、コンパイラの構成と最適化(第2版)、朝倉書店、2009年、P466~P468
【発明の概要】
【発明が解決しようとする課題】
【0006】
一側面によれば、限られた時間内にループ分割を精度よく行うことを目的とする。
【課題を解決するための手段】
【0007】
一側面によれば、第1のループを分割して得られる複数の第2のループの各々に含まれる命令の参照先の個数がハードウェア数を超えない条件の下で、前記第1のループを複数の前記第2のループに分割する整数線形計画法の問題を解くのに要する時間と、前記第1のループの命令数との関係を取得する取得部と、前記第1のループの前記命令数であって、第1の時間内に前記問題を解くことが可能な第1の命令数を算出する算出部と、入力ループを分割することにより、前記第1の命令数よりも少ない第2の命令数の前記第1のループを複数生成する第1の分割部と、前記関係から前記第2の命令数に対応する第2の時間を求め、前記第2の時間をかけて前記問題を解くことにより、前記第1のループを複数の前記第2のループに分割する第2の分割部とを有する情報処理装置が提供される。
【発明の効果】
【0008】
一側面によれば、限られた時間内にループ分割を精度よく行うことができる。
【図面の簡単な説明】
【0009】
図1図1は、本願発明者が検討したループ分割について模式的に説明するための図である。
図2図2は、本実施形態に係るターゲットマシンのハードウェア構成図である。
図3図3は、本実施形態におけるループ分割の方法を模式的に示す図である。
図4図4は、近似モデルと詳細モデルを利用したときにループ分割に要する時間について説明するための模式図である。
図5図5は、本実施形態に係る情報処理装置のハードウェア構成図である。
図6図6は、本実施形態に係る情報処理装置の機能構成図である。
図7図7は、本実施形態に係るパラメータの決定方法を示すフローチャートである。
図8図8は、本実施形態に係る情報処理方法を示すフローチャートである。
【発明を実施するための形態】
【0010】
本実施形態の説明に先立ち、本願発明者が検討した事項について説明する。
【0011】
図1は、本願発明者が検討したループ分割について模式的に説明するための図である。
【0012】
図1の例では、アプリケーションプログラム1に含まれるループ1aを複数のループ1bに分割することにより出力プログラム2を生成した場合を想定している。アプリケーションプログラム1は、HPC(High Performance Computing)用のプログラムであって、ループ1aには数百~数千の命令が記述されているものとする。
【0013】
このように一つのループ1aに多数の命令が記述されていると、それらの命令が参照するレジスタの個数が、CPU(Central Processing Unit)のレジスタの個数を超えることがある。同様に、ループ1a内の命令が参照するメモリストリームの個数がハードウェアで規定された個数を超えることがある。
【0014】
この場合には、分割後のループ1bに含まれる命令が参照するレジスタやメモリストリームの個数がハードウェアで規定される個数を超えないという制約条件の下でループ分割を行えばよい。
【0015】
但し、この制約条件のみを満たすようにループ分割を行うと、命令数が最小のループ1bが多量に生成されることになる。これでは、多量のループ1bを実行するためのオーバヘッドが増大してしまい、プログラムの実行速度がかえって低下してしまう。更に、多量のループ1bが存在すると、後続のソフトウェアパイプライニングを適用するのが難しくなるという問題も発生する。
【0016】
そこで、レジスタやメモリストリームの個数がハードウェアで規定される個数を超えないという制約条件を満たしつつ、更に分割後のループの個数を表す目的関数を最小にするのが好ましい。
【0017】
また、ループの個数を表す目的関数だけでなく、プログラムの実行速度を向上させるのに有用な様々な目的関数が極値をとるようにループ分割を実行するのが好ましい。そのような目的関数としては、例えば、レジスタとメインメモリとの間で発生するスピルの回数等がある。
【0018】
このように、ループ分割は、レジスタやメモリストリームの個数に対する制約条件を満たしつつ、目的関数の極値を求める問題に帰着される。このような問題は整数線型計画法と呼ばれる。整数線型計画法はNP困難であることが知られており、解を求めるのに要する時間は、問題の複雑さに対して指数関数的に増加してしまう。
【0019】
そのため、図1のように膨大な命令を含むループ1aを限られた時間でループ1bに分割するのは困難である。
以下に、本実施形態について説明する。
【0020】
(本実施形態)
まず、アプリケーションプログラムを実行するターゲットマシンについて説明する。
【0021】
図2は、本実施形態に係るターゲットマシン10のハードウェア構成図である。
【0022】
ターゲットマシン10は、HPC用の並列計算機やPC(Personal Computer)であって、プロセッサ11とメインメモリ12とを有する。
【0023】
プロセッサ11は、各種の計算を行うハードウェアであって、計算コア13とキャッシュメモリ15とを有する。
【0024】
このうち、計算コア13は、算術演算や論理演算を行うALU(Arithmetic Logic Unit)、レジスタファイル14、及び記憶部16を備えた回路素子である。レジスタファイル14は、計算コア13が使用するデータを格納した複数のレジスタ14aを有する。これらのレジスタ14aの総数を以下ではレジスタ数HRと呼ぶ。
【0025】
そして、記憶部16は、ハードウェアプリフェッチを実行するためのハードウェアである。ハードウェアプリフェッチは、メモリアクセスのパターンを監視し、連続的に参照されるメモリストリームを検出して自動的にプリフェッチを行う機構である。
【0026】
その記憶部16には複数のブロック16aが設けられる。各ブロック16aは、キャッシュメモリ15に転送されるデータのアドレスやアクセスの規則性を保持するために割り当てられる記憶領域の単位である。以下ではブロック16aの個数のことをメモリストリーム数HSと呼ぶ。
【0027】
また、キャッシュメモリ15は、計算コア13で使用するデータを保持するSRAM(Static Random Access Memory)等のメモリである。
【0028】
一方、メインメモリ12は、計算コア13で実行するアプリケーションプログラム17を記憶したDRAM(Dynamic Random Access Memory)等のハードウェアである。
【0029】
アプリケーションプログラム17は、例えばC言語やFortranで記述されたHPC用のソースプログラムであり、数百~数千の命令を含む入力ループ17aを有する。このように大規模な入力ループ17aにおいては、ループの実行時に参照するレジスタやメモリストリームの個数がレジスタ数HRやメモリストリーム数HSを超えてしまい、アプリケーションプログラム17の実行速度が低下する。
【0030】
そこで、本実施形態では以下のように入力ループ17aを分割し、アプリケーションプログラム17の実行速度を速める。
【0031】
[ループ分割の方法]
図3は、本実施形態におけるループ分割の方法を模式的に示す図である。
【0032】
この例では、まず、入力ループ17aが記述されたアプリケーションプログラム17の入力を受け付ける。そして、近似モデルを利用して入力ループ17aを複数の第1のループ17bに分割し、その後に詳細モデルを利用して第1のループ17bを複数の第2のループ17cに分割する。
【0033】
なお、アプリケーションプログラム17がC言語のソースプログラムである場合には、for文やwhile文によるループ処理により入力ループ17aを実現できる。第1のループ17bと第2のループ17cについても同様である。
【0034】
近似モデルは、入力ループ17aに含まれる複数の命令を半分に分けることによりループ分割を行うモデルである。その近似モデルでは、レジスタ数HRやメモリストリーム数HS等のようにハードウェアで規定される制約条件を用いずに大雑把にループ分割が行われる。
【0035】
その近似モデルを複数回繰り返して適用することにより、第1のループ17bの命令数が半分ずつ減っていく。
【0036】
一方、詳細モデルは、レジスタ数HRやメモリストリーム数HS等のハードウェアから規定される制約条件を考慮しながら、第1のループ17bを複数の第2のループ17cに分割するモデルである。近似モデルとは異なり、詳細モデルでは、分割後のループの個数は2個とは限らず、3個以上のループが生成される場合もある。
【0037】
本実施形態では、近似モデルで入力ループ17aを分割するとき、分割後のループに含まれる命令数を任意とはせずに、一回の分割で命令数が半分になるようにする。これにより複数の第1のループ17bの各々が同程度の命令数となるため、第1のループ17bを第2のループ17cに分割するのに要する時間が第1のループ17bごとに大きくばらつくのを抑制できる。
【0038】
近似モデルと詳細モデルは、いずれも整数線型計画法でループ分割を行うモデルである。
次に、近似モデルと詳細モデルの各々について詳しく説明する。
【0039】
<近似モデルと詳細モデルの共通事項>
ループ内に含まれる命令の各々を以下の式(1)のようにiで表す。
【数1】
式(1)において、NIは、ループに含まれる命令の総数である。
【0040】
iとjをIに属する二つの命令とする。命令jが命令iにデータ依存する場合には、命令iの後に命令jを配置する必要がある。なお、データ依存には、レジスタ14aによる依存とメモリ参照による依存の二種類がある。
【0041】
また、r番目のレジスタ14aにアクセスする命令の集合をTOUCH(r)とする。
【0042】
更に、同じループ内に命令iと命令jを配置した場合のキャッシュ利用率の増加値をGi,jとする。なお、キャッシュ利用率は、キャッシュメモリ15を有効に利用できているかどうかを表す指標である。例えば、キャッシュヒット率をキャッシュ利用率として採用し得る。
【0043】
また、増加値Gi,jは、ループ内に命令iと命令jが配置されていない場合を基準としたときのキャッシュ利用率の増加値である。増加値Gi,jが正の大きい値であるほど、命令iと命令jを同じループに配置することでキャッシュ利用値が高まり、ループ分割後のプログラムの実行速度が向上する。また、増加値Gi,jが負の値である場合には、命令iと命令jとを別々のループに配置することによりプログラムの実行速度が向上する可能性が高まる。
【0044】
<近似モデル>
前述のように、近似モデルは、入力ループ17aを二つの第1のループ17bに分割するモデルである。
【0045】
その近似モデルでは、以下の(A)~(E)の観点から目的関数や制約条件が決定される。
【0046】
(A)分割後の二つの第1のループ17bの両方が参照するレジスタの個数についての目的関数
【0047】
分割後の二つの第1のループ17bが同一のレジスタ14aを参照する場合には、一方の第1のループ17bの終了時にレジスタ14aからメインメモリ12にデータがスピルアウトされる。そして、他方の第1のループ17bの開始時にそのデータがメインメモリ12からレジスタ14aにスピルインされる。このようにスピルが頻繁に発生するとプログラムの実行速度が低下してしまう。
【0048】
そこで、近似モデルでは、分割後の二つの第1のループ17bが共通に参照するレジスタ14aの個数が最小となるようにループ分割を行う。
【0049】
まず、近似モデルで分割された二つの第1のループ17bのうち、命令iが属するループの番号を表す変数Diを以下の式(2)で定義する。
【0050】
【数2】
【0051】
式(2)に示すように、変数Diは、0と1のいずれかの値をとる整数である。以下では、Di=0の第1のループ17bを先に実行し、その後にDi=1の第1のループ17bを実行するものとする。このとき、データの依存関係によって命令iの後に命令jを実行しなければいけないという制約は、次の式(3)のように表現できる。
【0052】
【数3】
【0053】
また、分割された二つの第1のループ17bに含まれる命令のうち、r番目のレジスタ14aを参照する命令の個数をR=|TOUCH(r)|とする。R=1の場合には、r番目のレジスタ14aを参照する命令が二つの第1のループ17bのいずれか一方のみに存在するため、二つの第1のループ17bが共通に参照するレジスタ14aは存在しない。そこで、以下ではR>1とする。
【0054】
二つの第1のループ17bの両方がr番目のレジスタ14aを参照することがないのは以下の(a)、(b)の場合のみである。
【0055】
(a)Di=1の第1のループ17b内でr番目のレジスタ14aを参照する命令がR個存在する場合。
【0056】
この場合は、Di=0の第1のループ17b内でr番目のレジスタ14aを参照する命令は存在しない。
【0057】
(b)Di=1の第1のループ17b内でr番目のレジスタ14aを参照する命令が0個存在する場合。
【0058】
この場合は、r番目のレジスタ14aを参照する全ての命令がDi=0の第1のループ17b内に存在することになる。
【0059】
Di=1の第1のループ17b内でr番目のレジスタ14aを参照する命令の個数Xは次の式(4)のように表現することができる。
【0060】
【数4】
【0061】
よって、二つの第1のループ17bの両方がr番目のレジスタ14aを参照するという条件は、次の式(5)のように表現できる。
【0062】
【数5】
【0063】
二つの第1のループ17bの両方がr番目のレジスタ14aを参照するかどうかを表す変数を次の式(6)で定義する。
【0064】
【数6】
【0065】
なお、Cr=0は、二つの第1のループ17bがr番目のレジスタ14aを参照していないことを表す。そして、Cr=1は、二つの第1のループ17bがr番目のレジスタ14aを参照していることを表す。
この場合、次の式(7)が成立する。
【0066】
【数7】
【0067】
そして、二つの第1のループ17bのそれぞれが参照しているレジスタ14aの総数S0,1は、次の式(8)で定義することができる。
【0068】
【数8】
【0069】
よって、前述のように分割後の二つの第1のループ17bの両方が参照するレジスタ14aの個数を最小とする目的関数は、次の式(9)のように表すことができる。
【0070】
【数9】
【0071】
(B)分割後の二つの第1のループ17bの両方が参照するメモリストリーム数についての目的関数
【0072】
配列は、その要素のアドレスが連続しているためメインメモリ12においてメモリストリームとなる。同一の配列が分割前の一つのループの異なる文に含まれている場合には、一方の文の実行時にレジスタ14aに格納されたメモリストリームを他方の文が参照することができる。
【0073】
これに対し、分割後の二つの第1のループ17bの各々に同一の配列が記述されていると、二つの第1のループ17bで二つのメモリストリームを消費することになる。そのため、メインメモリ12からレジスタ14aにメモリストリームを再ロードする場合が生じ、メモリストリームの使用量が増え、ハードウェアが扱うことのできるメモリストリーム数を超過する可能性が高くなる。例えば、二つの第1のループ17bの一方の実行を終了して他方を開始するときにそのようなメモリストリームの再ロードが発生する。また、キャッシュメモリ15の利用率が低下するため性能が低下する可能性が高まる。
【0074】
そこで、近似モデルでは、分割後の二つの第1のループ17bの両方が参照するメモリストリームの個数が最小となるようにループ分割を行う。
【0075】
まず、分割した二つの第1のループ17bに含まれる命令のうち、メモリストリームaを参照する命令の個数をA=|ACCESS(a)|とする。A=1の場合には、メモリストリームaを参照する命令が二つの第1のループ17bのいずれか一方のみに存在するため、第1のループ17bが共通に参照するメモリストリームは存在しない。そこで、以下ではA>1とする。
【0076】
二つの第1のループ17bの両方が同一のメモリストリームaを参照することがないのは以下の(a)、(b)の場合のみである。
【0077】
(a)Di=1の第1のループ17b内でメモリストリームaを参照する命令がA個存在する場合。
【0078】
この場合は、Di=0の第1のループ17b内でメモリストリームaを参照する命令は存在しない。
【0079】
(b)Di=1の第1のループ17b内でメモリストリームaを参照する命令が0個存在する場合。
【0080】
この場合は、メモリストリームaを参照する全ての命令がDi=0の第1のループ17b内に存在することになる。
【0081】
Di=1の第1のループ17b内でメモリストリームaを参照する命令の個数Xは次の式(10)のように表現することができる。
【0082】
【数10】
【0083】
よって、二つの第1のループ17bの両方が同一のメモリストリームaを参照するという条件は、次の式(11)のように表現できる。
【0084】
【数11】
【0085】
二つの第1のループ17bの両方が同一のメモリストリームaを参照するかどうかを表す変数を次の式(12)で定義する。
【0086】
【数12】
【0087】
なお、Ta=0は、二つの第1のループ17bの両方が同一のメモリストリームaを参照していないことを表す。そして、Ta=1は、二つの第1のループ17bの両方が同一のメモリストリームaを参照していることを表す。
この場合、次の式(13)が成立する。
【0088】
【数13】
【0089】
そして、二つの第1のループ17bの両方が参照しているメモリストリームの総数S0,2は、次の式(14)で定義することができる。
【0090】
【数14】
【0091】
よって、前述のように分割後の二つのループの両方が参照するメモリストリームの個数を最小とする目的関数は、次の式(15)のように表すことができる。
【0092】
【数15】
【0093】
(C)分割後の二つの第1のループ17bを合わせた全体のキャッシュ利用率
【0094】
前述のように、同じループ内に命令iと命令jを配置した場合のキャッシュ利用率の増加値Gi,jが大きいほどプログラムの実行速度が速くなる。そのため、近似モデルでは、分割後の二つの第1のループ17bを合わせた全体のキャッシュ利用率が最大となるようにループ分割を行う。
【0095】
まず、d番目の第1のループ17bに命令iと命令jが存在することを表す変数Pi,j,dを以下の式(16)のように定義する。
【0096】
【数16】
【0097】
Pi,j,d=1は、d番目の第1のループ17b内に命令iと命令jの両方が存在することを表す。また、Pi,j,d=0は、命令iと命令jのいずれか一方又は両方が第1のループ17b内に存在しないことを表す。
このとき、次の式(17)が成り立つ。
【0098】
【数17】
【0099】
また、d番目の第1のループ17bにおけるキャッシュ利用率の増加値は次の式(18)のように表される。
【0100】
【数18】
【0101】
更に、二つの第1のループ17bのキャッシュ利用率の増加値S0,3を以下の式(19)のように定義する。
【0102】
【数19】
【0103】
これによれば、分割後の二つの第1のループ17bを合わせた全体のキャッシュ利用率を最大化するための目的関数は次の式(20)のように表すことができる。
【0104】
【数20】
【0105】
(D)分割後の二つのループの各々の命令数
近似モデルでは、分割後の二つの第1のループ17bの各々の命令数を同程度とする。そこで、次の式(21)の制約条件を導入する。
【0106】
【数21】
【0107】
なお、Mは、一つの第1のループ17bに許容される命令数の範囲を定めるための整数である。例えば、NIが偶数でM=0の場合には、二つの第1のループ17bの命令数は同じになる。また、NIが偶数でM=1の場合には、Di=1の第1のループ17bの命令数は、Di=0の第1のループ17bの命令数の±1まで許容される。
【0108】
(E)近似モデル全体の目的関数
上記した式(9)、(15)、(20)により、近似モデルにおける目的関数は次の式(22)のように表すことができる。
【0109】
【数22】
【0110】
なお、W0,1とW0,2は、それぞれ目的関数に対するS0,1とS0,2の影響度を定義するための重み付け変数である。例えば、ループ分割においてS0,1の重要度を最も高くし、S0,2、S0,3の順に重要度を低くした場合には、このような重要度の相違が式(22)に反映されるようにW0,1とW0,2とを決定するのが好ましい。
【0111】
また、この例では、式(22)のようにS0,1、S0,2、S0,3の全てを考慮した目的関数を利用したが、これらのいずれかが極値をとるような目的関数を採用してもよい。
【0112】
以上のように、近似モデルでは、式(21)の制約条件の下で、式(22)のように目的関数を最小化する整数線形計画法に帰着される。そして、その整数線形計画法で求めるべき解は、各命令iに付される整数値の変数Diである。Di=0の場合には命令iが0番目のループに属し、Di=1の場合には命令iが1番目のループに属することになる。よって、整数線形計画法で変数Diの値を求めるということは、式(22)の目的関数が最小となるように、複数の命令の各々を二つの第1のループ17bのいずれかに分けるということである。
【0113】
<詳細モデル>
詳細モデルでは、複数の第2のループ17cの各々の参照先の個数がメモリストリーム数HSやレジスタ数HRを超えないように、第1のループ17bを複数の第2のループ17cに分割する。このループ分割は、分割前の第1のループ17bに属する複数の命令の各々を、分割後の複数の第2のループ17cのどれに割り当てるのかという問題を解くことにより実現される。
【0114】
そこで、第2のループ17cへの命令の割り当てを表現する方法について説明する。
【0115】
まず、分割後の第2のループ17cの各々を識別する番号として整数値の変数dを導入する。なお、1≦d≦ZDである。ZD(>0)はループ分割で得られる第2のループ17cの最大個数であり、第2のループ17cの個数がZDよりも多くなるような分割は行わないものとする。更に、ループ分割によって実際に得られた第2のループ17cの個数をND(≦ZD)とする。
【0116】
そして、分割前の第1のループ17bに配置されていた各命令iについて、命令iがd番目の第2のループ17cに存在するかどうかを表す変数Di,dを次の式(23)のように定義する。
【0117】
【数23】
【0118】
ここで、Di,d=0は、d番目の第2のループ17cに命令iが存在しないことを表す。そして、Di,d=1は、d番目の第2のループ17cに命令iが存在することを表す。
【0119】
また、命令iが属する第2のループ17cの番号を表す関数をD(i)とすると、D(i)は次の式(24)のように定義することができる。
【0120】
【数24】
【0121】
また、データ依存関係によって、命令iの後に命令jを実行しなければならないという条件は次の式(25)のように表すことができる。
【0122】
【数25】
【0123】
そして、分割後の複数の第2のループ17cのいずれか一つのみに命令iが存在するという条件は、次の式(26)のように表すことができる。
【0124】
【数26】
【0125】
次に、詳細モデルにおける目的関数と制約条件について説明する。目的関数と制約条件は、次の(F)~(M)の観点から決定される。
【0126】
(F) 全ての第2のループ17cが参照するレジスタ14aの総数についての目的関数
【0127】
全ての第2のループ17cが参照するレジスタ14aの総数が多いと、異なる第2のループ17cが同一のレジスタ14aを参照する可能性が高まり、スピルインやスピルアウトによってプログラムの実行速度が低下する。そのため、詳細モデルにおいては、以下のように全ての第2のループ17cが参照するレジスタ14aの総数を最小にする。
【0128】
まず、d番目の第2のループ17c内においてr番目のレジスタ14aを参照する命令が存在するかどうかを表す変数Cr,dを次の式(27)のように定義する。
【0129】
【数27】
【0130】
ここで、Cr,d=0は、d番目の第2のループ17c内においてr番目のレジスタ14aを参照する命令が存在しないことを表す。一方、Cr,d=1は、d番目の第2のループ17c内においてr番目のレジスタ14aを参照する命令が存在することを表す。
この変数Cr,dについて、次の式(28)が成立する。
【0131】
【数28】
【0132】
また、全ての第2のループ17cが参照するレジスタ14aの総数S1,1は次の式(29)のように表すことができる。
【0133】
【数29】
【0134】
よって、全ての第2のループ17cが参照するレジスタ14aの総数S1,1を最小にする目的関数は、次の式(30)のように表すことができる。
【0135】
【数30】
【0136】
なお、分割前の第1のループ17bが参照するレジスタ14aの総数をNRとすると、S1,1の取り得る範囲は次の式(31)で表すことができる。
【0137】
【数31】
なお、NDは、第2のループ17cの総数である。
【0138】
また、次の式(32)の条件が成立する場合には、同じレジスタ14aを参照する複数の第2のループ17cが存在しないことになる。
【0139】
【数32】
【0140】
(G) 各々の第2のループ17cが参照するレジスタ14aの個数についての制約条件
【0141】
一つの第2のループ17cが参照するレジスタ14aの個数がHR図2参照)を超えると、その第2のループ17cの実行時にスピルインやスピルアウトが発生し、プログラムの実行速度が低下する。そこで、詳細モデルでは、以下のようにして、第2のループ17cの各々が参照するレジスタ14aの個数をHR以下とする制約条件を課してループ分割を行う。
【0142】
まず、d番目の第2のループ17cが参照するレジスタ14aの個数をHR以下にする条件は、次の式(33)のように表すことができる。
【0143】
【数33】
【0144】
よって、全ての第2のループ17cにおいて、ループ内で参照するレジスタ14aの個数をHR以下とする制約条件は次の式(34)のようになる。
【0145】
【数34】
【0146】
なお、ZDは、前述のようにループ分割で得られる第2のループ17cの最大個数である。
【0147】
この制約条件を加味してループ分割を行うことにより、プログラムの実行速度がスピルインやスピルアウトによって低下するのを抑制することができる。
【0148】
(H)スピルインとスピルアウトの数
第2のループ17c内で参照するレジスタ14aがループの外側で定義されていると、そのループの実行前にメインメモリ12からレジスタ14aにデータを転送する必要があるためスピルインが発生する。これとは逆に、第2のループ17c内で定義したレジスタ14aをループの外側で参照すると、ループの実行を終了した後にレジスタ14aのデータがメインメモリ12に書き出されるためスピルアウトが発生する。
【0149】
これらのスピルインやスピルアウトは、メモリ空間でアドレスが連続した領域にアクセスするストリームアクセス命令により行われる。よって、第2のループ17cが参照するメモリストリームの個数をメモリストリーム数HS以下にするという制約条件を設定する場合には、第2のループ17c内におけるスピルインやスピルアウトの個数を考慮する必要がある。
【0150】
そこで、以下では、d番目の第2のループ17c内でのr番目のレジスタ14aに対するスピルインやスピルアウトが必要な条件を定義する。
【0151】
まず、全ての第2のループ17cが使用するレジスタの総数をUAとする。また、d番目の第2のループ17cが使用するレジスタ14aの総数をUとする。更に、d番目の第2のループ17cにr番目のレジスタ14aの定義がある場合には1となり、その定義がない場合には0となる変数Dを導入する。そして、次の式(35)を導入する。
【0152】
【数35】
ここで、Rは、UAよりも大きな整数の定数である。
次に、スピルインの数について説明する。
【0153】
式(35)のXが0<X<Rを満たす場合、r番目のレジスタ14aに関してd番目の第2のループ17c内でスピルインが必要となる。
【0154】
ここで、第2のループ17c内でr番目のレジスタ14aについてスピルインが必要かどうかを表す変数SIr,dを次の式(36)で定義する。
【0155】
【数36】
【0156】
なお、SIr,d=0は、d番目の第2のループ17c内でr番目のレジスタ14aについてスピルインが必要ないことを表す。また、SIr,d=1は、d番目の第2のループ17c内でr番目のレジスタ14aについてスピルインが必要であることを表す。
この変数SIr,dは、次の式(37)で定義できる。
【0157】
【数37】
次に、スピルアウトの数について説明する。
【0158】
式(35)のXがR<X<UA+Rを満たす場合、r番目のレジスタ14aに関してd番目の第2のループ17c内でスピルアウトが必要となる。
【0159】
ここで、d番目の第2のループ17c内でr番目のレジスタ14aについてスピルアウトをする必要があるかどうかを表す変数SOr,dを次の式(38)で定義する。
【0160】
【数38】
【0161】
なお、SOr,d=0は、d番目の第2のループ17c内でr番目のレジスタ14aについてスピルアウトする必要がないことを表す。また、SOr,d=1は、d番目の第2のループ17c内でレジスタrについてスピルアウトをする必要があることを表す。
この変数SOr,dは、次の式(39)で定義できる。
【0162】
【数39】
【0163】
(I)メモリストリーム数についての制約条件
第2のループ17cの各々のメモリストリーム数がハードウェアで規定される個数HS図2参照)を超えると、プログラムの実行時にメモリストリームを使わないメモリアクセスが必要となり、プログラムの実行速度が低下する。そこで、メモリストリーム数をHS以下にする制約条件について以下に説明する。
【0164】
まず、d番目の第2のループ17c内でメモリストリームaへの参照があるかどうかを表す変数Aa,dを次の式(40)で定義する。
【0165】
【数40】
【0166】
なお、Aa,d=0は、d番目の第2のループ17c内でメモリストリームaへの参照がないことを表す。また、Aa,d=1は、d番目の第2のループ17c内でメモリストリームaへの参照があることを表す。
この変数Aa,dは、次の式(41)で定義することができる。
【0167】
【数41】
【0168】
前述の各変数SIr,d、SOr,d、Aa,dを使うと、d番目の第2のループ17cにおけるメモリストリーム数がHSを超えないという条件は、次の式(42)のように表すことができる。
【0169】
【数42】
【0170】
そして、全ての第2のループ17cにおけるメモリストリーム数がHSを超えないという条件は、次の式(43)のように表すことができる。
【0171】
【数43】
【0172】
このような制約条件を考慮してループ分割を行うことにより、メモリストリームを使わないメモリアクセスによってプログラムの実行速度が低下するのを抑制できる。
【0173】
(J)全ての第2のループ17cが参照するメモリストリームの総数についての目的関数
【0174】
全ての第2のループ17cが参照するメモリストリームの総数が多いと、異なる第2のループ17cが同一のメモリストリームを参照する可能性が高まり、メモリストリームを使わないメモリアクセスによってプログラムの実行速度が低下する。これを防ぐには、全ての第2のループ17cが参照するメモリストリームの総数を最小にすればよい。
【0175】
そこで、詳細モデルでは、以下のように全ての第2のループ17cが参照するメモリストリームの総数S1,2を最小にする目的関数を導入する。
総数S1,2は、次の式44のように定義できる。
【0176】
【数44】
【0177】
そして、全ての第2のループ17cが参照するメモリストリームの総数S1,2を最小にする目的関数は次の式(45)のように定式化することができる。
【0178】
【数45】
【0179】
(K)キャッシュ利用率についての目的関数
前述のように、キャッシュ利用率は、キャッシュメモリ15を有効に利用できているかどうかを表す指標である。そのような指標としては、例えばキャッシュヒット率がある。
【0180】
キャッシュ利用率が高いほど、キャッシュメモリ15からメインメモリ12へのデータの追い出しが抑制され、プログラムの実行速度を向上させることができる。
【0181】
そこで、詳細モデルでは、以下のようにしてキャッシュ利用率の増加値を最大にする目的関数を導入する。
【0182】
まず、命令iと命令jがd番目の第2のループ17cに存在することを表す変数Pi,j,dを次の式(46)で定義する。
【0183】
【数46】
【0184】
なお、Pi,j,d=1は、d番目の第2のループ17c内に命令iと命令jの両方が存在することを表す。また、Pi,j,d=0は、命令iと命令jのいずれか一方又は両方がd番目の第2のループ17c内に存在しないことを表す。
この変数Pi,j,dについて次の式(47)が成立する。
【0185】
【数47】
【0186】
このとき、d番目の第2のループ17cにおけるキャッシュ利用率の増加値は、次の式(48)で定義できる。
【0187】
【数48】
【0188】
そして、全ての第2のループ12aにおけるキャッシュ利用率の増加値S1,3は、次の式(49)のように定義できる。
【0189】
【数49】
【0190】
よって、全ての第2のループ12aにおけるキャッシュ利用率の増加値S1,3を最大にする目的関数は次の式(50)のように定式化することができる。
【0191】
【数50】
【0192】
(L)第2のループ17cの総数についての目的関数
第2のループ17cの総数が多すぎると、多量のループを実行するためのオーバヘッドが増大してプログラムの実行速度が低下してしまう。これを防ぐために、第2のループ17cの総数は最小にするのが好ましい。
【0193】
そこで、詳細モデルでは、以下のようにして第2のループ17cの総数を最小にする目的関数を導入する。
【0194】
まず、第2のループ17cの総数S1,4を次の式(51)で定義する。
【0195】
【数51】
【0196】
このとき、第2のループ17cの総数を最小にする目的関数は次の式(52)のように定式化できる。
【0197】
【数52】
【0198】
(M)詳細モデル全体の目的関数
詳細モデルにおける個々の目的関数は、式(30)のS1,1、式(45)のS1,2、式(50)のS1,3である。よって、詳細モデルの全体の目的関数は、次の式(53)のように定義できる。
【0199】
【数53】
【0200】
なお、式(53)におけるW1,1、W1,2、W1,3は、それぞれ目的関数に対するS1,1、S1,2、S1,3の影響度を定義するための重み付け変数である。例えば、ループ分割においてS1,1の重要度を最も高くし、S1,2、S1,3、S1,4の順に重要度を低くした場合には、このような重要度の相違が式(53)に反映されるようにW1,1、W1,2、W1,3を決定するのが好ましい。
【0201】
また、この例では、式(53)のようにS1,1、S1,2、S1,3、S1,4の全てを考慮した目的関数を利用したが、これらのいずれかが極値をとるような目的関数を採用してもよい。
【0202】
以上のように、詳細モデルでは、式(34)と式(43)の制約条件の下で、式(53)のように目的関数を最小化する整数線形計画法に帰着される。そして、その整数線形計画法で求めるべき解は、各命令iに付される整数値の変数Di,dである。Di,d=1の場合には命令iがd番目の第2のループ17cに属し、Di,d=0の場合には命令iがd番目以外の第2のループ17cに属することになる。よって、整数線形計画法で変数Di,dの値を求めるということは、式(53)のように目的関数が最小となるように、複数の第2のループ17cの各々に複数の命令を割り当てるということである。
【0203】
[ループ分割に要する時間]
次に、ループ分割に要する時間について説明する。
図4は、近似モデルと詳細モデルを利用したときにループ分割に要する時間について説明するための模式図である。
【0204】
以下では、入力ループ17aから全ての第2のループ17cを得るのに要する時間に制限時間Tmaxを設定し、全てのループ分割に要する時間が制限時間Tmaxを超えないようにするための条件を考える。なお、制限時間Tmaxは第1の時間の一例であり、その長さはアプリケーションプログラム17の性質等によってユーザが適宜設定し得る。
【0205】
まず、近似モデルでループ分割を一回行うのに許容される時間を第1の許容時間T0とし、詳細モデルでループ分割を一回行うのに許容される時間を第2の許容時間T1とする。なお、第2の許容時間T1は第2の時間の一例である。
【0206】
更に、入力ループ17aに含まれる命令の命令数をNIとする。また、詳細モデルによるループ分割の対象となる第1のループ17bに含まれる命令の個数を第1の命令数S1と呼ぶ。そして、整数N0を次の式(54)で定義する。
【0207】
【数54】
【0208】
この場合、入力ループ17aから第2のループ17cの全てを得るのに要する時間はN0(T0+T1)となる。この時間が制限時間Tmaxを超えないという条件は次の式(55)のように表される。
【0209】
【数55】
【0210】
式(55)によれば、NIとTmaxを定数とみなすことにより、S1、T0、T1の各パラメータの値を決定することができる。この場合、各パラメータの以下の性質を考慮して値を決定するのが好ましい。
【0211】
例えば、第1の命令数S1は、その値を過度に小さくすると、詳細モデルにおける整数線形計画法の解が、第2のループ17cの全てを考慮した大域的な最適解から離れてしまうおそれがある。これとは逆に、第1の命令数S1の値を過度に大きくすると、詳細モデルで整数線形計画法を解くのに要する時間が長くなり、制限時間Tmax以内に解を見つけることができくなってしまう。
【0212】
また、第2の許容時間T1を過度に短くすると、詳細モデルで整数線形計画法を解けないか、解けたとしても最適解から離れた解が得られてしまう。一方、第2の許容時間T1を過度に長くすると、第2の許容時間T1以内に最適解に近い解が得られた場合に、その解の精度を高めようとして無駄に時間を浪費するおそれがある。
【0213】
一方、第1の許容時間T0は、第1の命令数S1と第2の許容時間T1とを決めてしまえば式(55)から決定することができる。
【0214】
本実施形態では、ループ分割を行う情報処理装置が、ある程度の精度の解が得られる第1の命令数S1と第2の許容時間T1とを決定することにより、時間と解の精度とのバランスをとる。
その情報処理装置について次に説明する。
【0215】
[情報処理装置]
図5は、本実施形態に係る情報処理装置のハードウェア構成図である。
【0216】
情報処理装置21は、前述のターゲットマシン10(図2参照)で実行するアプリケーションプログラム17に対してループ分割を行うPCやサーバ等の計算機である。
【0217】
この例では、情報処理装置21は、記憶装置22、メインメモリ23、プロセッサ24、入力装置25、及び表示装置26を備える。これらの各部はバス27によって相互に接続される。
【0218】
このうち、記憶装置22は、例えばHDD(Hard Disk Drive)やSSD(Solid State Drive)等の二次記憶装置であり、本実施形態に係る情報処理プログラム30を記憶する。情報処理プログラム30は、前述の近似モデルと詳細モデルとを用いてループ分割を行うプログラムである。
【0219】
なお、その情報処理プログラム30をコンピュータが読み取り可能な記録媒体28に記録させておき、プロセッサ24に記録媒体28の情報処理プログラム30を読み取らせるようにしてもよい。
【0220】
そのような記録媒体28としては、例えばCD-ROM(Compact Disc - Read Only Memory)、DVD(Digital Versatile Disc)、及びUSB(Universal Serial Bus)メモリ等の物理的な可搬型記録媒体がある。また、フラッシュメモリ等の半導体メモリやハードディスクドライブを記録媒体28として使用してもよい。これらの記録媒体28は、物理的な形態を持たない搬送波のような一時的な媒体ではない。
【0221】
更に、公衆回線、インターネット、及びLAN(Local Area Network)等に接続された装置に情報処理プログラム30を記憶させておき、プロセッサ24が情報処理プログラム30を読み出して実行するようにしてもよい。
【0222】
一方、メインメモリ23は、DRAM等のようにデータを一時的に記憶するハードウェアであって、その上に前述の情報処理プログラム30が展開される。
【0223】
プロセッサ24は、自装置の各部を制御したり、メインメモリ23と協働して情報処理プログラム30を実行したりするCPU等のハードウェアである。
【0224】
入力装置25は、キーボードやマウス等の入力デバイスである。ユーザがこれらの入力デバイスを操作することにより、情報処理プログラム30でループ分割を行うべきアプリケーションプログラム17を指定したり、ループ分割後のアプリケーションプログラム17の出力先が指定されたりする。
【0225】
また、表示装置26は、情報処理プログラム30の実行時にユーザが使用する様々なコマンドを表示する液晶ディスプレイ等の表示デバイスである。
【0226】
<機能構成>
図6は、本実施形態に係る情報処理装置21の機能構成図である。
図6に示すように、この情報処理装置21は、受付部41、取得部42、算出部43、第1の分割部44、第2の分割部45、及び出力部46を備える。これらの各部は、プロセッサ24とメインメモリ23が協働して前述の情報処理プログラム30を実行することにより実現される。
【0227】
このうち、受付部41は、アプリケーションプログラム17やサンプルプログラム51の入力を受け付ける機能ブロックである。サンプルプログラム51は、アプリケーションプログラム17に対してループ分割を行う前に、第1のループ17bの適切な命令数を見積もるためのプログラムである。
【0228】
また、取得部42は、詳細モデルで第1のループ17bを複数の第2のループ17cに分割する問題を解くのに要する時間と、第1のループ17bに含まれる命令の個数との関係を表す関数fiを取得する機能ブロックである。その問題は、前述のように、第2のループ17cの各々に含まれる命令の参照先の個数が、メモリストリーム数HSやレジスタ数HR等のハードウェア数を超えない条件下で、整数線形計画法でループ分割を行う問題である。
【0229】
そして、算出部43は、この問題を制限時間Tmax内に解くことが可能な第1の命令数S1を算出する。
【0230】
第1の分割部44は、近似モデルを用いて入力ループ17aを複数の第1のループ17bに分割することにより、第1のループ17bの各々の命令数を第1の命令数S1よりも少ない第2の命令数S2とする。
【0231】
そして、第2の分割部45は、詳細モデルを用いて、第1のループ17bを複数の第2のループ17cに分割する。このとき、第2の分割部45は、S2に対応する第2の許容時間T1を関係fiから求め、第2の許容時間T1をかけてループ分割を行う。これにより、制限時間Tmax内に規定精度で第1のループ17bを第2のループ17cに分割できる。
【0232】
出力部46は、これらの第2のループ17cが記述されたプログラムを出力プログラム52として出力する。
【0233】
[パラメータの決定方法]
本実施形態では、前述のようにループ分割の前に第1の命令数S1等のパラメータを事前に決定しておく。そこで、これらのパラメータの決定方法について以下に説明する。
【0234】
図7は、本実施形態に係るパラメータの決定方法を示すフローチャートである。
【0235】
まず、ステップP1において、受付部41が、第1の命令数S1や第2の許容時間T1のそれぞれの範囲の入力をユーザから受け付ける。
【0236】
例えば、第1の命令数S1の範囲はSmin≦S1≦Smaxとし、第2の許容時間T1の範囲はTmin≦T1≦Tmaxとする。これらの範囲は、第1の命令数S1や第2の許容時間T1の候補を絞り込むために、ユーザが経験的に設定し得る。なお、第2の許容時間T1の範囲の上限は、前述の制限時間Tmaxである。
【0237】
次に、ステップP2に移り、受付部41が、複数のサンプルプログラム51の入力を受け付ける。各々のサンプルプログラム51は、一つのループが記述されたプログラムであり、そのループに近似モデルを適用することで機械学習の様々な学習データが取得される。その学習データのバリエーションを広げるため、ここではループに含まれる命令の個数をサンプルプログラム51ごとに異なるようにする。
【0238】
続いて、ステップP3に移り、取得部42が、複数のサンプルプログラム51の各々のループを近似モデルで分割することにより、サンプル用の複数の第1のループ17bを作成する。サンプル用の第1のループ17bの命令数は、サンプル用の複数の第1のループ17bごとに異なる。以下では、命令数がs個のサンプル用の第1のループ17bの全体を集合Zsで表す。
【0239】
次に、ステップP4に移り、取得部42が、集合Zsの要素であるサンプル用の第1のループ17bの特徴データdを取得する。その特徴データdとしては、サンプル用の第1のループ17bに含まれる命令の命令数がある。また、第1のループ17bにおけるデータ依存グラフの辺の数、第1のループ17bが参照するレジスタ数やメモリストリーム数等を特徴データdとして採用してもよい。更に、第1のループ17bにおけるキャッシュ利用率を特徴データdとして採用してもよい。
【0240】
次いで、ステップP5に移り、取得部42が、複数のサンプル用の第1のループ17bの各々に対して詳細モデルにおける整数線形計画法の解の取得を試みる。
【0241】
前述のように、その整数線形計画法は、式(34)と式(43)の制約条件の下で式(53)の目的関数が最小となるような整数値の変数Di,dを求める問題である。変数Di,dは、i番目の命令が属するd番目の第2のループ17cを特定する整数である。よって、この問題を解くことにより、サンプル用の第1のループ17bが複数の第2のループ17cに分割される。
【0242】
続いて、ステップP6に移り、取得部42が、複数のサンプル用の第1のループ17bの各々について到達時間TBを取得する。到達時間TBは、第3の時間の一例であって、詳細モデルの整数線形計画法の解を探索し始めてからその解の精度が閾値Qに到達するまでの時間である。
閾値Qは特に限定されないが、ここでは閾値Qを90%とする。
本実施形態では、整数線形計画法の解の精度を次のように定義する。
【0243】
まず、詳細モデルにおける整数線形計画法を、変数Di,dの値を有理数にまで拡張した線型計画法に置き換える。このように有理数の解を許容する線形計画法は、整数線形計画法と比較して高速に解ける。そこで、まずこの線型計画法の有理数解を求める。そして、その有理数解を式(53)の目的関数(W1,1S1,1+W1,2S1,2-W1,3S1,3+ S1,4)に代入することにより、この目的関数の値G’を算出する。また、ステップP6で得た解を目的関数(W1,1S1,1+W1,2S1,2-W1,3S1,3+ S1,4)を代入したときの当該目的関数の値をGとする。
【0244】
この場合、解の精度は、G’とGとの比(G’/G)の百分率として定義される。例えば、前述のように閾値Qを90%とする場合は、G’/Gの値が0.9となった時間が到達時間TBとなる。
【0245】
このように整数線形計画法の解を有理数まで拡張することにより、目的関数の値から簡単に解の精度を求めることができる。
【0246】
次に、ステップP7に移り、取得部42が、複数のサンプル用の第1のループ17bの各々の特徴データdと到達時間TBとを対応させた学習データLを作成する。
【0247】
本実施形態では、制限時間Tmax内に解の精度が閾値Q以上となった場合に、詳細モデルにおける整数線形計画法の問題が到達時間TBにおいて解けたとみなす。一方、第1のループ17bのうちで、制限時間Tmax内に解の精度が閾値Q以上とならなかったものについては問題が解けなかったとみなし、当該第1のループ17bの特徴データdは学習データLに追加しない。
【0248】
これにより、学習データLは、制限時間Tmax内に問題を解くことができる特徴データdと到達時間TBとを対応させたデータとなる。そのような学習データLにおいては、特徴データdと到達時間TBとの間に統計的な相関関係があると考えられる。
【0249】
そこで、次のステップP8では、取得部42が、学習データLを利用した機械学習により、特徴データdと到達時間TBとの関係を表す関数fiを取得する。到達時間TBは整数線形計画法の問題を解くのに要する時間であるから、fi(d)を計算することにより、特徴データdを有する第1のループ17bを第2のループ17cに分割するのに要する時間を取得することができる。
【0250】
次いで、ステップP9に移り、算出部43が、第1のループ17bの命令数のうち、詳細モデルにおける整数線形計画法を制限時間Tmax内に解くことが可能な第1の命令数S1を算出する。
【0251】
第1の命令数S1の算出方法は特に限定されない。例えば、算出部43は、複数のサンプル用の第1のループ17bのうち、ステップP5において制限時間Tmax内に解の精度が閾値Qとなったループを選択する。これらのループの各々に含まれる命令の命令数は、制限時間Tmax内に解の精度が閾値Qとなる命令数である。そこで、算出部43は、このように選択した複数の第1のループ17bの各々の命令数を平均し、その平均値を第1の命令数S1とする。これにより、制限時間Tmax内に閾値Q以上の精度の解を取得可能な第1の命令数S1を算出することができる。
【0252】
次に、ステップP10に移り、算出部43が、全てのサンプル用の第1のループ17bの各々について、ステップP5で解の探索に要した時間を平均し、その平均値を平均時間T1Aとする。
【0253】
以上により、本実施形態におけるパラメータの決定方法の基本ステップを終える。
【0254】
次に、ステップP8で作成した関数fiとステップP9で算出した命令数S1とを利用した情報処理方法について説明する。
【0255】
[情報処理方法]
図8は、本実施形態に係る情報処理方法を示すフローチャートである。
【0256】
この情報処理方法は、アプリケーションプログラム17に対して近似モデルと詳細モデルの各々でループ分割を行う方法であり、以下のように実行される。
【0257】
まず、ステップP20において、受付部41がアプリケーションプログラム17の入力を受け付ける。
【0258】
次に、ステップP21に移り、第1の分割部44が、近似モデルでループ分割を一回行うのに許容される第1の許容時間T0を算出する。例えば、第1の分割部44は、次の式を満たすような第1の許容時間T0を算出する。
【0259】
【数56】
【0260】
なお、NIは、前述のように入力ループ17aに含まれる命令の命令数である。また、S1はステップP9で算出した第1の命令数であり、T1AはステップP10で算出した平均時間である。
【0261】
次に、ステップP22に移り、第1の分割部44が、変数Xに命令数NIを代入する。変数Xは、詳細モデルによるループ分割の対象となるループに含まれる命令数を表す。
【0262】
続いて、ステップP23に移り、第1の分割部44が、ステップP9で算出した第1の命令数S1よりも変数Xの値が小さいかどうかを判断する。
【0263】
ここでNOと判断された場合には、詳細モデルで入力ループ17aをループ分割しようとしても、制限時間Tmax内にループ分割を終えることができない。よって、この場合にはステップP24に移り、第1の分割部44が、第1の許容時間T0をかけて近似モデルで入力ループ17aを分割する。
【0264】
次に、ステップP25に移り、第1の分割部44が変数XにX/2を代入する。その後、ステップP23からやり直す。
【0265】
一方、ステップP23においてYESと判断された場合にはステップP26に移る。
【0266】
この段階においては、入力ループ17aから分割された複数の第1のループ17bが生成されており、各々の第1のループ17bの第2の命令数S2が第1の命令数S1よりも少なくなっている。ステップP26においては、第2の分割部45が、これらの第1のループ17bの特徴データdを取得する。
【0267】
前述のように、特徴データdには、第1のループ17bの第2の命令数S2、第1のループ17bにおけるデータ依存グラフの辺の数、第1のループ17bが参照するレジスタ数やストリーム数が含まれる。また、第1のループ17bにおけるキャッシュ利用率を特徴データdとして採用してもよい。
【0268】
次に、ステップP27に移り、第2の分割部45が、複数の第1のループ17bの各々に対して第2の許容時間T1を求める。ここでは、第2の分割部45が、ステップP8で作成した関数fiと特徴データdを利用して、T1=fi(d)により第1のループ17bごとに第2の許容時間T1を求める。
【0269】
前述のように、特徴データdには第1のループ17bの第2の命令数S2が含まれている。よって、この第2の許容時間T1は、分割前の第1のループ17bの命令数がS2である場合に、詳細モデルにおける整数線形計画法の解を得るのに要する時間となる。
【0270】
そして、ステップP28に移り、第2の分割部45が、第2の許容時間T1をかけて詳細モデルにおける整数線形計画法の問題を解くことにより、第1のループ17bの各々を複数の第2のループ17cに分割する。
【0271】
続いて、ステップP29に移り、出力部46がステップP28で得られた複数の第2のループ17cを出力プログラム52(図6参照)に記述し、その出力プログラム52を出力する。
【0272】
以上により、本実施形態に係る情報処理方法の基本ステップを終了する。
【0273】
上記した本実施形態によれば、ステップP24(図8)のループ分割により、制限時間Tmax内に詳細モデルの問題が解けることを保証する第1の命令数S1よりも少ない第2の命令数S2に第1のループ17bの命令数を減らす。これにより、ステップP28において詳細モデルの解を高い精度で求めることができ、その解に基づいて第1のループ17bを第2のループ17cに精度よく分割できる。
【0274】
しかも、レジスタ数HRやメモリストリーム数HS等のハードウェア数を考慮してステップP28のループ分割を行うため、出力プログラム52の実行速度が低下するのを抑制できる。
【0275】
更に、T1=fi(d)で定まる第2の許容時間T1は、第2の命令数S2等の特徴データdを有する第1のループ17bを第2のループ17cに分割する問題を解くのに要する時間である。よって、この第2の許容時間T1をかけてその問題を解くことで確実に第1のループ17bを第2のループ17cに分割できる。更に、このように第2の許容時間T1を設定することにより、第1のループ17bの分割に必要以上の時間を割り当てるおそれがなくなり、残りの時間を入力ループ17aの分割に割り当てることができる。
以上説明した各実施形態に関し、更に以下の付記を開示する。
【0276】
(付記1) 第1のループを分割して得られる複数の第2のループの各々に含まれる命令の参照先の個数がハードウェア数を超えない条件の下で、前記第1のループを複数の前記第2のループに分割する整数線形計画法の問題を解くのに要する時間と、前記第1のループの命令数との関係を取得する取得部と、
前記第1のループの前記命令数であって、第1の時間内に前記問題を解くことが可能な第1の命令数を算出する算出部と、
入力ループを分割することにより、前記第1の命令数よりも少ない第2の命令数の前記第1のループを複数生成する第1の分割部と、
前記関係から前記第2の命令数に対応する第2の時間を求め、前記第2の時間をかけて前記問題を解くことにより、前記第1のループを複数の前記第2のループに分割する第2の分割部と、
を有することを特徴とする情報処理装置。
(付記2) 前記ハードウェア数は、レジスタ数又はメモリストリーム数であることを特徴とする付記1に記載の情報処理装置。
(付記3) 前記第1の分割部は、前記入力ループに含まれる複数の命令を半分ずつ分ける分割を繰り返すことにより、前記入力ループから複数の前記第1のループを生成することを特徴とする付記1に記載の情報処理装置。
(付記4) 前記第1の分割部は、二つの前記第1のループの両方が参照するレジスタ数、二つの前記第1のループの両方が参照するメモリストリーム数、及び二つの前記第1のループのキャッシュ利用率のいずれかが極値をとるように、前記入力ループを分割することを特徴とする付記3に記載の情報処理装置。
(付記5) 前記問題は、前記条件の下で、複数の前記第2のループの全てが参照するレジスタの総数、複数の前記第2のループの全てが参照するメモリストリームの総数、複数の前記第2のループの全てのキャッシュ利用率、及び前記第2のループの総数のいずれかを表す目的関数が極値となるように、前記第1のループを前記第2のループに分割する問題であることを特徴とする付記1に記載の情報処理装置。
(付記6) 前記取得部は、
サンプル用の複数の前記第1のループの各々に対して前記問題の解の取得を試みることにより、前記解の精度が閾値に到達する第3の時間と、前記第1のループの前記命令数とを対応付け、
相互に対応する前記第3の時間と前記命令数とを学習データとする機械学習により前記関係を取得することを特徴とする付記1に記載の情報処理装置。
(付記7) 前記算出部は、
サンプル用の複数の前記第1のループの各々に対して前記問題の解の取得を試みたときに、前記第1の時間内に前記解の精度が閾値以上となった前記命令数の平均値を前記第1の命令数とすることを特徴とする付記1に記載の情報処理装置。
(付記8) 前記精度は、
前記整数線形計画法の目的関数に前記解を代入して得られた値と、前記問題を有理数に拡張した線型計画法の有理数解を前記目的関数に代入して得られた値との比の百分率であることを特徴とする付記7に記載の情報処理装置。
(付記9) 第1のループを分割して得られる複数の第2のループの各々に含まれる命令の参照先の個数がハードウェア数を超えない条件の下で、前記第1のループを複数の前記第2のループに分割する整数線形計画法の問題を解くのに要する時間と、前記第1のループの命令数との関係を取得する処理と、
前記第1のループの前記命令数であって、第1の時間内に前記問題を解くことが可能な第1の命令数を算出する処理と、
入力ループを分割することにより、前記第1の命令数よりも少ない第2の命令数の前記第1のループを複数生成する処理と、
前記関係から前記第2の命令数に対応する第2の時間を求め、前記第2の時間をかけて前記問題を解くことにより、前記第1のループを複数の前記第2のループに分割する処理と、
をコンピュータに実行させるための情報処理プログラム。
(付記10) 第1のループを分割して得られる複数の第2のループの各々に含まれる命令の参照先の個数がハードウェア数を超えない条件の下で、前記第1のループを複数の前記第2のループに分割する整数線形計画法の問題を解くのに要する時間と、前記第1のループの命令数との関係を取得する処理と、
前記第1のループの前記命令数であって、第1の時間内に前記問題を解くことが可能な第1の命令数を算出する処理と、
入力ループを分割することにより、前記第1の命令数よりも少ない第2の命令数の前記第1のループを複数生成する処理と、
前記関係から前記第2の命令数に対応する第2の時間を求め、前記第2の時間をかけて前記問題を解くことにより、前記第1のループを複数の前記第2のループに分割する処理と、
をコンピュータが実行することを特徴とする情報処理方法。
【符号の説明】
【0277】
1…アプリケーションプログラム、1a、1b…ループ、10…ターゲットマシン、11…プロセッサ、12…メインメモリ、13…計算コア、14…レジスタファイル、14a…レジスタ、15…キャッシュメモリ、16…記憶部、16a…ブロック、17…アプリケーションプログラム、17a…入力ループ、17b…第1のループ、17c…第2のループ、21…情報処理装置、22…記憶装置、23…メインメモリ、24…プロセッサ、25…入力装置、26…表示装置、27…バス、28…記録媒体、41…受付部、42…取得部、43…算出部、44…第1の分割部、45…第2の分割部、46…出力部、51…サンプルプログラム、52…出力プログラム。

図1
図2
図3
図4
図5
図6
図7
図8