JP7339537B2 - 情報処理装置、情報処理プログラム、及び情報処理方法 - Google Patents

情報処理装置、情報処理プログラム、及び情報処理方法 Download PDF

Info

Publication number
JP7339537B2
JP7339537B2 JP2020002837A JP2020002837A JP7339537B2 JP 7339537 B2 JP7339537 B2 JP 7339537B2 JP 2020002837 A JP2020002837 A JP 2020002837A JP 2020002837 A JP2020002837 A JP 2020002837A JP 7339537 B2 JP7339537 B2 JP 7339537B2
Authority
JP
Japan
Prior art keywords
loop
loops
instructions
time
information processing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2020002837A
Other languages
English (en)
Other versions
JP2021111136A (ja
Inventor
正樹 新井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2020002837A priority Critical patent/JP7339537B2/ja
Publication of JP2021111136A publication Critical patent/JP2021111136A/ja
Application granted granted Critical
Publication of JP7339537B2 publication Critical patent/JP7339537B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は、情報処理装置、情報処理プログラム、及び情報処理方法に関する。
コンパイラが行う最適化技術の一つにループ分割がある。ループ分割は、アプリケーションプログラムに含まれるループを複数個に分割することにより、一つのループに含まれる文の個数を減らす技術である。これにより、例えば分割後のループの実行時に発生するキャッシュミスを抑制でき、アプリケーションプログラムを高速に実行できる。
但し、一つのループを複数個に分割する方法は多数あり、それらのうちで最適な分割方法を限られた時間内で精度よく求めるのは容易ではない。
国際公開WO2018/066074号公報 特開2015-141543号公報 特開2012-133449号公報
中田育男、コンパイラの構成と最適化(第2版)、朝倉書店、2009年、P466~P468
一側面によれば、限られた時間内にループ分割を精度よく行うことを目的とする。
一側面によれば、第1のループを分割して得られる複数の第2のループの各々に含まれる命令の参照先の個数がハードウェア数を超えない条件の下で、前記第1のループを複数の前記第2のループに分割する整数線形計画法の問題を解くのに要する時間と、前記第1のループの命令数との関係を取得する取得部と、前記第1のループの前記命令数であって、第1の時間内に前記問題を解くことが可能な第1の命令数を算出する算出部と、入力ループを分割することにより、前記第1の命令数よりも少ない第2の命令数の前記第1のループを複数生成する第1の分割部と、前記関係から前記第2の命令数に対応する第2の時間を求め、前記第2の時間をかけて前記問題を解くことにより、前記第1のループを複数の前記第2のループに分割する第2の分割部とを有する情報処理装置が提供される。
一側面によれば、限られた時間内にループ分割を精度よく行うことができる。
図1は、本願発明者が検討したループ分割について模式的に説明するための図である。 図2は、本実施形態に係るターゲットマシンのハードウェア構成図である。 図3は、本実施形態におけるループ分割の方法を模式的に示す図である。 図4は、近似モデルと詳細モデルを利用したときにループ分割に要する時間について説明するための模式図である。 図5は、本実施形態に係る情報処理装置のハードウェア構成図である。 図6は、本実施形態に係る情報処理装置の機能構成図である。 図7は、本実施形態に係るパラメータの決定方法を示すフローチャートである。 図8は、本実施形態に係る情報処理方法を示すフローチャートである。
本実施形態の説明に先立ち、本願発明者が検討した事項について説明する。
図1は、本願発明者が検討したループ分割について模式的に説明するための図である。
図1の例では、アプリケーションプログラム1に含まれるループ1aを複数のループ1bに分割することにより出力プログラム2を生成した場合を想定している。アプリケーションプログラム1は、HPC(High Performance Computing)用のプログラムであって、ループ1aには数百~数千の命令が記述されているものとする。
このように一つのループ1aに多数の命令が記述されていると、それらの命令が参照するレジスタの個数が、CPU(Central Processing Unit)のレジスタの個数を超えることがある。同様に、ループ1a内の命令が参照するメモリストリームの個数がハードウェアで規定された個数を超えることがある。
この場合には、分割後のループ1bに含まれる命令が参照するレジスタやメモリストリームの個数がハードウェアで規定される個数を超えないという制約条件の下でループ分割を行えばよい。
但し、この制約条件のみを満たすようにループ分割を行うと、命令数が最小のループ1bが多量に生成されることになる。これでは、多量のループ1bを実行するためのオーバヘッドが増大してしまい、プログラムの実行速度がかえって低下してしまう。更に、多量のループ1bが存在すると、後続のソフトウェアパイプライニングを適用するのが難しくなるという問題も発生する。
そこで、レジスタやメモリストリームの個数がハードウェアで規定される個数を超えないという制約条件を満たしつつ、更に分割後のループの個数を表す目的関数を最小にするのが好ましい。
また、ループの個数を表す目的関数だけでなく、プログラムの実行速度を向上させるのに有用な様々な目的関数が極値をとるようにループ分割を実行するのが好ましい。そのような目的関数としては、例えば、レジスタとメインメモリとの間で発生するスピルの回数等がある。
このように、ループ分割は、レジスタやメモリストリームの個数に対する制約条件を満たしつつ、目的関数の極値を求める問題に帰着される。このような問題は整数線型計画法と呼ばれる。整数線型計画法はNP困難であることが知られており、解を求めるのに要する時間は、問題の複雑さに対して指数関数的に増加してしまう。
そのため、図1のように膨大な命令を含むループ1aを限られた時間でループ1bに分割するのは困難である。
以下に、本実施形態について説明する。
(本実施形態)
まず、アプリケーションプログラムを実行するターゲットマシンについて説明する。
図2は、本実施形態に係るターゲットマシン10のハードウェア構成図である。
ターゲットマシン10は、HPC用の並列計算機やPC(Personal Computer)であって、プロセッサ11とメインメモリ12とを有する。
プロセッサ11は、各種の計算を行うハードウェアであって、計算コア13とキャッシュメモリ15とを有する。
このうち、計算コア13は、算術演算や論理演算を行うALU(Arithmetic Logic Unit)、レジスタファイル14、及び記憶部16を備えた回路素子である。レジスタファイル14は、計算コア13が使用するデータを格納した複数のレジスタ14aを有する。これらのレジスタ14aの総数を以下ではレジスタ数HRと呼ぶ。
そして、記憶部16は、ハードウェアプリフェッチを実行するためのハードウェアである。ハードウェアプリフェッチは、メモリアクセスのパターンを監視し、連続的に参照されるメモリストリームを検出して自動的にプリフェッチを行う機構である。
その記憶部16には複数のブロック16aが設けられる。各ブロック16aは、キャッシュメモリ15に転送されるデータのアドレスやアクセスの規則性を保持するために割り当てられる記憶領域の単位である。以下ではブロック16aの個数のことをメモリストリーム数HSと呼ぶ。
また、キャッシュメモリ15は、計算コア13で使用するデータを保持するSRAM(Static Random Access Memory)等のメモリである。
一方、メインメモリ12は、計算コア13で実行するアプリケーションプログラム17を記憶したDRAM(Dynamic Random Access Memory)等のハードウェアである。
アプリケーションプログラム17は、例えばC言語やFortranで記述されたHPC用のソースプログラムであり、数百~数千の命令を含む入力ループ17aを有する。このように大規模な入力ループ17aにおいては、ループの実行時に参照するレジスタやメモリストリームの個数がレジスタ数HRやメモリストリーム数HSを超えてしまい、アプリケーションプログラム17の実行速度が低下する。
そこで、本実施形態では以下のように入力ループ17aを分割し、アプリケーションプログラム17の実行速度を速める。
[ループ分割の方法]
図3は、本実施形態におけるループ分割の方法を模式的に示す図である。
この例では、まず、入力ループ17aが記述されたアプリケーションプログラム17の入力を受け付ける。そして、近似モデルを利用して入力ループ17aを複数の第1のループ17bに分割し、その後に詳細モデルを利用して第1のループ17bを複数の第2のループ17cに分割する。
なお、アプリケーションプログラム17がC言語のソースプログラムである場合には、for文やwhile文によるループ処理により入力ループ17aを実現できる。第1のループ17bと第2のループ17cについても同様である。
近似モデルは、入力ループ17aに含まれる複数の命令を半分に分けることによりループ分割を行うモデルである。その近似モデルでは、レジスタ数HRやメモリストリーム数HS等のようにハードウェアで規定される制約条件を用いずに大雑把にループ分割が行われる。
その近似モデルを複数回繰り返して適用することにより、第1のループ17bの命令数が半分ずつ減っていく。
一方、詳細モデルは、レジスタ数HRやメモリストリーム数HS等のハードウェアから規定される制約条件を考慮しながら、第1のループ17bを複数の第2のループ17cに分割するモデルである。近似モデルとは異なり、詳細モデルでは、分割後のループの個数は2個とは限らず、3個以上のループが生成される場合もある。
本実施形態では、近似モデルで入力ループ17aを分割するとき、分割後のループに含まれる命令数を任意とはせずに、一回の分割で命令数が半分になるようにする。これにより複数の第1のループ17bの各々が同程度の命令数となるため、第1のループ17bを第2のループ17cに分割するのに要する時間が第1のループ17bごとに大きくばらつくのを抑制できる。
近似モデルと詳細モデルは、いずれも整数線型計画法でループ分割を行うモデルである。
次に、近似モデルと詳細モデルの各々について詳しく説明する。
<近似モデルと詳細モデルの共通事項>
ループ内に含まれる命令の各々を以下の式(1)のようにiで表す。
Figure 0007339537000001
式(1)において、NIは、ループに含まれる命令の総数である。
iとjをIに属する二つの命令とする。命令jが命令iにデータ依存する場合には、命令iの後に命令jを配置する必要がある。なお、データ依存には、レジスタ14aによる依存とメモリ参照による依存の二種類がある。
また、r番目のレジスタ14aにアクセスする命令の集合をTOUCH(r)とする。
更に、同じループ内に命令iと命令jを配置した場合のキャッシュ利用率の増加値をGi,jとする。なお、キャッシュ利用率は、キャッシュメモリ15を有効に利用できているかどうかを表す指標である。例えば、キャッシュヒット率をキャッシュ利用率として採用し得る。
また、増加値Gi,jは、ループ内に命令iと命令jが配置されていない場合を基準としたときのキャッシュ利用率の増加値である。増加値Gi,jが正の大きい値であるほど、命令iと命令jを同じループに配置することでキャッシュ利用値が高まり、ループ分割後のプログラムの実行速度が向上する。また、増加値Gi,jが負の値である場合には、命令iと命令jとを別々のループに配置することによりプログラムの実行速度が向上する可能性が高まる。
<近似モデル>
前述のように、近似モデルは、入力ループ17aを二つの第1のループ17bに分割するモデルである。
その近似モデルでは、以下の(A)~(E)の観点から目的関数や制約条件が決定される。
(A)分割後の二つの第1のループ17bの両方が参照するレジスタの個数についての目的関数
分割後の二つの第1のループ17bが同一のレジスタ14aを参照する場合には、一方の第1のループ17bの終了時にレジスタ14aからメインメモリ12にデータがスピルアウトされる。そして、他方の第1のループ17bの開始時にそのデータがメインメモリ12からレジスタ14aにスピルインされる。このようにスピルが頻繁に発生するとプログラムの実行速度が低下してしまう。
そこで、近似モデルでは、分割後の二つの第1のループ17bが共通に参照するレジスタ14aの個数が最小となるようにループ分割を行う。
まず、近似モデルで分割された二つの第1のループ17bのうち、命令iが属するループの番号を表す変数Diを以下の式(2)で定義する。
Figure 0007339537000002
式(2)に示すように、変数Diは、0と1のいずれかの値をとる整数である。以下では、Di=0の第1のループ17bを先に実行し、その後にDi=1の第1のループ17bを実行するものとする。このとき、データの依存関係によって命令iの後に命令jを実行しなければいけないという制約は、次の式(3)のように表現できる。
Figure 0007339537000003
また、分割された二つの第1のループ17bに含まれる命令のうち、r番目のレジスタ14aを参照する命令の個数をR=|TOUCH(r)|とする。R=1の場合には、r番目のレジスタ14aを参照する命令が二つの第1のループ17bのいずれか一方のみに存在するため、二つの第1のループ17bが共通に参照するレジスタ14aは存在しない。そこで、以下ではR>1とする。
二つの第1のループ17bの両方がr番目のレジスタ14aを参照することがないのは以下の(a)、(b)の場合のみである。
(a)Di=1の第1のループ17b内でr番目のレジスタ14aを参照する命令がR個存在する場合。
この場合は、Di=0の第1のループ17b内でr番目のレジスタ14aを参照する命令は存在しない。
(b)Di=1の第1のループ17b内でr番目のレジスタ14aを参照する命令が0個存在する場合。
この場合は、r番目のレジスタ14aを参照する全ての命令がDi=0の第1のループ17b内に存在することになる。
Di=1の第1のループ17b内でr番目のレジスタ14aを参照する命令の個数Xは次の式(4)のように表現することができる。
Figure 0007339537000004
よって、二つの第1のループ17bの両方がr番目のレジスタ14aを参照するという条件は、次の式(5)のように表現できる。
Figure 0007339537000005
二つの第1のループ17bの両方がr番目のレジスタ14aを参照するかどうかを表す変数を次の式(6)で定義する。
Figure 0007339537000006
なお、Cr=0は、二つの第1のループ17bがr番目のレジスタ14aを参照していないことを表す。そして、Cr=1は、二つの第1のループ17bがr番目のレジスタ14aを参照していることを表す。
この場合、次の式(7)が成立する。
Figure 0007339537000007
そして、二つの第1のループ17bのそれぞれが参照しているレジスタ14aの総数S0,1は、次の式(8)で定義することができる。
Figure 0007339537000008
よって、前述のように分割後の二つの第1のループ17bの両方が参照するレジスタ14aの個数を最小とする目的関数は、次の式(9)のように表すことができる。
Figure 0007339537000009
(B)分割後の二つの第1のループ17bの両方が参照するメモリストリーム数についての目的関数
配列は、その要素のアドレスが連続しているためメインメモリ12においてメモリストリームとなる。同一の配列が分割前の一つのループの異なる文に含まれている場合には、一方の文の実行時にレジスタ14aに格納されたメモリストリームを他方の文が参照することができる。
これに対し、分割後の二つの第1のループ17bの各々に同一の配列が記述されていると、二つの第1のループ17bで二つのメモリストリームを消費することになる。そのため、メインメモリ12からレジスタ14aにメモリストリームを再ロードする場合が生じ、メモリストリームの使用量が増え、ハードウェアが扱うことのできるメモリストリーム数を超過する可能性が高くなる。例えば、二つの第1のループ17bの一方の実行を終了して他方を開始するときにそのようなメモリストリームの再ロードが発生する。また、キャッシュメモリ15の利用率が低下するため性能が低下する可能性が高まる。
そこで、近似モデルでは、分割後の二つの第1のループ17bの両方が参照するメモリストリームの個数が最小となるようにループ分割を行う。
まず、分割した二つの第1のループ17bに含まれる命令のうち、メモリストリームaを参照する命令の個数をA=|ACCESS(a)|とする。A=1の場合には、メモリストリームaを参照する命令が二つの第1のループ17bのいずれか一方のみに存在するため、第1のループ17bが共通に参照するメモリストリームは存在しない。そこで、以下ではA>1とする。
二つの第1のループ17bの両方が同一のメモリストリームaを参照することがないのは以下の(a)、(b)の場合のみである。
(a)Di=1の第1のループ17b内でメモリストリームaを参照する命令がA個存在する場合。
この場合は、Di=0の第1のループ17b内でメモリストリームaを参照する命令は存在しない。
(b)Di=1の第1のループ17b内でメモリストリームaを参照する命令が0個存在する場合。
この場合は、メモリストリームaを参照する全ての命令がDi=0の第1のループ17b内に存在することになる。
Di=1の第1のループ17b内でメモリストリームaを参照する命令の個数Xは次の式(10)のように表現することができる。
Figure 0007339537000010
よって、二つの第1のループ17bの両方が同一のメモリストリームaを参照するという条件は、次の式(11)のように表現できる。
Figure 0007339537000011
二つの第1のループ17bの両方が同一のメモリストリームaを参照するかどうかを表す変数を次の式(12)で定義する。
Figure 0007339537000012
なお、Ta=0は、二つの第1のループ17bの両方が同一のメモリストリームaを参照していないことを表す。そして、Ta=1は、二つの第1のループ17bの両方が同一のメモリストリームaを参照していることを表す。
この場合、次の式(13)が成立する。
Figure 0007339537000013
そして、二つの第1のループ17bの両方が参照しているメモリストリームの総数S0,2は、次の式(14)で定義することができる。
Figure 0007339537000014
よって、前述のように分割後の二つのループの両方が参照するメモリストリームの個数を最小とする目的関数は、次の式(15)のように表すことができる。
Figure 0007339537000015
(C)分割後の二つの第1のループ17bを合わせた全体のキャッシュ利用率
前述のように、同じループ内に命令iと命令jを配置した場合のキャッシュ利用率の増加値Gi,jが大きいほどプログラムの実行速度が速くなる。そのため、近似モデルでは、分割後の二つの第1のループ17bを合わせた全体のキャッシュ利用率が最大となるようにループ分割を行う。
まず、d番目の第1のループ17bに命令iと命令jが存在することを表す変数Pi,j,dを以下の式(16)のように定義する。
Figure 0007339537000016
Pi,j,d=1は、d番目の第1のループ17b内に命令iと命令jの両方が存在することを表す。また、Pi,j,d=0は、命令iと命令jのいずれか一方又は両方が第1のループ17b内に存在しないことを表す。
このとき、次の式(17)が成り立つ。
Figure 0007339537000017
また、d番目の第1のループ17bにおけるキャッシュ利用率の増加値は次の式(18)のように表される。
Figure 0007339537000018
更に、二つの第1のループ17bのキャッシュ利用率の増加値S0,3を以下の式(19)のように定義する。
Figure 0007339537000019
これによれば、分割後の二つの第1のループ17bを合わせた全体のキャッシュ利用率を最大化するための目的関数は次の式(20)のように表すことができる。
Figure 0007339537000020
(D)分割後の二つのループの各々の命令数
近似モデルでは、分割後の二つの第1のループ17bの各々の命令数を同程度とする。そこで、次の式(21)の制約条件を導入する。
Figure 0007339537000021
なお、Mは、一つの第1のループ17bに許容される命令数の範囲を定めるための整数である。例えば、NIが偶数でM=0の場合には、二つの第1のループ17bの命令数は同じになる。また、NIが偶数でM=1の場合には、Di=1の第1のループ17bの命令数は、Di=0の第1のループ17bの命令数の±1まで許容される。
(E)近似モデル全体の目的関数
上記した式(9)、(15)、(20)により、近似モデルにおける目的関数は次の式(22)のように表すことができる。
Figure 0007339537000022
なお、W0,1とW0,2は、それぞれ目的関数に対するS0,1とS0,2の影響度を定義するための重み付け変数である。例えば、ループ分割においてS0,1の重要度を最も高くし、S0,2、S0,3の順に重要度を低くした場合には、このような重要度の相違が式(22)に反映されるようにW0,1とW0,2とを決定するのが好ましい。
また、この例では、式(22)のようにS0,1、S0,2、S0,3の全てを考慮した目的関数を利用したが、これらのいずれかが極値をとるような目的関数を採用してもよい。
以上のように、近似モデルでは、式(21)の制約条件の下で、式(22)のように目的関数を最小化する整数線形計画法に帰着される。そして、その整数線形計画法で求めるべき解は、各命令iに付される整数値の変数Diである。Di=0の場合には命令iが0番目のループに属し、Di=1の場合には命令iが1番目のループに属することになる。よって、整数線形計画法で変数Diの値を求めるということは、式(22)の目的関数が最小となるように、複数の命令の各々を二つの第1のループ17bのいずれかに分けるということである。
<詳細モデル>
詳細モデルでは、複数の第2のループ17cの各々の参照先の個数がメモリストリーム数HSやレジスタ数HRを超えないように、第1のループ17bを複数の第2のループ17cに分割する。このループ分割は、分割前の第1のループ17bに属する複数の命令の各々を、分割後の複数の第2のループ17cのどれに割り当てるのかという問題を解くことにより実現される。
そこで、第2のループ17cへの命令の割り当てを表現する方法について説明する。
まず、分割後の第2のループ17cの各々を識別する番号として整数値の変数dを導入する。なお、1≦d≦ZDである。ZD(>0)はループ分割で得られる第2のループ17cの最大個数であり、第2のループ17cの個数がZDよりも多くなるような分割は行わないものとする。更に、ループ分割によって実際に得られた第2のループ17cの個数をND(≦ZD)とする。
そして、分割前の第1のループ17bに配置されていた各命令iについて、命令iがd番目の第2のループ17cに存在するかどうかを表す変数Di,dを次の式(23)のように定義する。
Figure 0007339537000023
ここで、Di,d=0は、d番目の第2のループ17cに命令iが存在しないことを表す。そして、Di,d=1は、d番目の第2のループ17cに命令iが存在することを表す。
また、命令iが属する第2のループ17cの番号を表す関数をD(i)とすると、D(i)は次の式(24)のように定義することができる。
Figure 0007339537000024
また、データ依存関係によって、命令iの後に命令jを実行しなければならないという条件は次の式(25)のように表すことができる。
Figure 0007339537000025
そして、分割後の複数の第2のループ17cのいずれか一つのみに命令iが存在するという条件は、次の式(26)のように表すことができる。
Figure 0007339537000026
次に、詳細モデルにおける目的関数と制約条件について説明する。目的関数と制約条件は、次の(F)~(M)の観点から決定される。
(F) 全ての第2のループ17cが参照するレジスタ14aの総数についての目的関数
全ての第2のループ17cが参照するレジスタ14aの総数が多いと、異なる第2のループ17cが同一のレジスタ14aを参照する可能性が高まり、スピルインやスピルアウトによってプログラムの実行速度が低下する。そのため、詳細モデルにおいては、以下のように全ての第2のループ17cが参照するレジスタ14aの総数を最小にする。
まず、d番目の第2のループ17c内においてr番目のレジスタ14aを参照する命令が存在するかどうかを表す変数Cr,dを次の式(27)のように定義する。
Figure 0007339537000027
ここで、Cr,d=0は、d番目の第2のループ17c内においてr番目のレジスタ14aを参照する命令が存在しないことを表す。一方、Cr,d=1は、d番目の第2のループ17c内においてr番目のレジスタ14aを参照する命令が存在することを表す。
この変数Cr,dについて、次の式(28)が成立する。
Figure 0007339537000028
また、全ての第2のループ17cが参照するレジスタ14aの総数S1,1は次の式(29)のように表すことができる。
Figure 0007339537000029
よって、全ての第2のループ17cが参照するレジスタ14aの総数S1,1を最小にする目的関数は、次の式(30)のように表すことができる。
Figure 0007339537000030
なお、分割前の第1のループ17bが参照するレジスタ14aの総数をNRとすると、S1,1の取り得る範囲は次の式(31)で表すことができる。
Figure 0007339537000031
なお、NDは、第2のループ17cの総数である。
また、次の式(32)の条件が成立する場合には、同じレジスタ14aを参照する複数の第2のループ17cが存在しないことになる。
Figure 0007339537000032
(G) 各々の第2のループ17cが参照するレジスタ14aの個数についての制約条件
一つの第2のループ17cが参照するレジスタ14aの個数がHR(図2参照)を超えると、その第2のループ17cの実行時にスピルインやスピルアウトが発生し、プログラムの実行速度が低下する。そこで、詳細モデルでは、以下のようにして、第2のループ17cの各々が参照するレジスタ14aの個数をHR以下とする制約条件を課してループ分割を行う。
まず、d番目の第2のループ17cが参照するレジスタ14aの個数をHR以下にする条件は、次の式(33)のように表すことができる。
Figure 0007339537000033
よって、全ての第2のループ17cにおいて、ループ内で参照するレジスタ14aの個数をHR以下とする制約条件は次の式(34)のようになる。
Figure 0007339537000034
なお、ZDは、前述のようにループ分割で得られる第2のループ17cの最大個数である。
この制約条件を加味してループ分割を行うことにより、プログラムの実行速度がスピルインやスピルアウトによって低下するのを抑制することができる。
(H)スピルインとスピルアウトの数
第2のループ17c内で参照するレジスタ14aがループの外側で定義されていると、そのループの実行前にメインメモリ12からレジスタ14aにデータを転送する必要があるためスピルインが発生する。これとは逆に、第2のループ17c内で定義したレジスタ14aをループの外側で参照すると、ループの実行を終了した後にレジスタ14aのデータがメインメモリ12に書き出されるためスピルアウトが発生する。
これらのスピルインやスピルアウトは、メモリ空間でアドレスが連続した領域にアクセスするストリームアクセス命令により行われる。よって、第2のループ17cが参照するメモリストリームの個数をメモリストリーム数HS以下にするという制約条件を設定する場合には、第2のループ17c内におけるスピルインやスピルアウトの個数を考慮する必要がある。
そこで、以下では、d番目の第2のループ17c内でのr番目のレジスタ14aに対するスピルインやスピルアウトが必要な条件を定義する。
まず、全ての第2のループ17cが使用するレジスタの総数をUAとする。また、d番目の第2のループ17cが使用するレジスタ14aの総数をUとする。更に、d番目の第2のループ17cにr番目のレジスタ14aの定義がある場合には1となり、その定義がない場合には0となる変数Dを導入する。そして、次の式(35)を導入する。
Figure 0007339537000035
ここで、Rは、UAよりも大きな整数の定数である。
次に、スピルインの数について説明する。
式(35)のXが0<X<Rを満たす場合、r番目のレジスタ14aに関してd番目の第2のループ17c内でスピルインが必要となる。
ここで、第2のループ17c内でr番目のレジスタ14aについてスピルインが必要かどうかを表す変数SIr,dを次の式(36)で定義する。
Figure 0007339537000036
なお、SIr,d=0は、d番目の第2のループ17c内でr番目のレジスタ14aについてスピルインが必要ないことを表す。また、SIr,d=1は、d番目の第2のループ17c内でr番目のレジスタ14aについてスピルインが必要であることを表す。
この変数SIr,dは、次の式(37)で定義できる。
Figure 0007339537000037
次に、スピルアウトの数について説明する。
式(35)のXがR<X<UA+Rを満たす場合、r番目のレジスタ14aに関してd番目の第2のループ17c内でスピルアウトが必要となる。
ここで、d番目の第2のループ17c内でr番目のレジスタ14aについてスピルアウトをする必要があるかどうかを表す変数SOr,dを次の式(38)で定義する。
Figure 0007339537000038
なお、SOr,d=0は、d番目の第2のループ17c内でr番目のレジスタ14aについてスピルアウトする必要がないことを表す。また、SOr,d=1は、d番目の第2のループ17c内でレジスタrについてスピルアウトをする必要があることを表す。
この変数SOr,dは、次の式(39)で定義できる。
Figure 0007339537000039
(I)メモリストリーム数についての制約条件
第2のループ17cの各々のメモリストリーム数がハードウェアで規定される個数HS(図2参照)を超えると、プログラムの実行時にメモリストリームを使わないメモリアクセスが必要となり、プログラムの実行速度が低下する。そこで、メモリストリーム数をHS以下にする制約条件について以下に説明する。
まず、d番目の第2のループ17c内でメモリストリームaへの参照があるかどうかを表す変数Aa,dを次の式(40)で定義する。
Figure 0007339537000040
なお、Aa,d=0は、d番目の第2のループ17c内でメモリストリームaへの参照がないことを表す。また、Aa,d=1は、d番目の第2のループ17c内でメモリストリームaへの参照があることを表す。
この変数Aa,dは、次の式(41)で定義することができる。
Figure 0007339537000041
前述の各変数SIr,d、SOr,d、Aa,dを使うと、d番目の第2のループ17cにおけるメモリストリーム数がHSを超えないという条件は、次の式(42)のように表すことができる。
Figure 0007339537000042
そして、全ての第2のループ17cにおけるメモリストリーム数がHSを超えないという条件は、次の式(43)のように表すことができる。
Figure 0007339537000043
このような制約条件を考慮してループ分割を行うことにより、メモリストリームを使わないメモリアクセスによってプログラムの実行速度が低下するのを抑制できる。
(J)全ての第2のループ17cが参照するメモリストリームの総数についての目的関数
全ての第2のループ17cが参照するメモリストリームの総数が多いと、異なる第2のループ17cが同一のメモリストリームを参照する可能性が高まり、メモリストリームを使わないメモリアクセスによってプログラムの実行速度が低下する。これを防ぐには、全ての第2のループ17cが参照するメモリストリームの総数を最小にすればよい。
そこで、詳細モデルでは、以下のように全ての第2のループ17cが参照するメモリストリームの総数S1,2を最小にする目的関数を導入する。
総数S1,2は、次の式44のように定義できる。
Figure 0007339537000044
そして、全ての第2のループ17cが参照するメモリストリームの総数S1,2を最小にする目的関数は次の式(45)のように定式化することができる。
Figure 0007339537000045
(K)キャッシュ利用率についての目的関数
前述のように、キャッシュ利用率は、キャッシュメモリ15を有効に利用できているかどうかを表す指標である。そのような指標としては、例えばキャッシュヒット率がある。
キャッシュ利用率が高いほど、キャッシュメモリ15からメインメモリ12へのデータの追い出しが抑制され、プログラムの実行速度を向上させることができる。
そこで、詳細モデルでは、以下のようにしてキャッシュ利用率の増加値を最大にする目的関数を導入する。
まず、命令iと命令jがd番目の第2のループ17cに存在することを表す変数Pi,j,dを次の式(46)で定義する。
Figure 0007339537000046
なお、Pi,j,d=1は、d番目の第2のループ17c内に命令iと命令jの両方が存在することを表す。また、Pi,j,d=0は、命令iと命令jのいずれか一方又は両方がd番目の第2のループ17c内に存在しないことを表す。
この変数Pi,j,dについて次の式(47)が成立する。
Figure 0007339537000047
このとき、d番目の第2のループ17cにおけるキャッシュ利用率の増加値は、次の式(48)で定義できる。
Figure 0007339537000048
そして、全ての第2のループ12aにおけるキャッシュ利用率の増加値S1,3は、次の式(49)のように定義できる。
Figure 0007339537000049
よって、全ての第2のループ12aにおけるキャッシュ利用率の増加値S1,3を最大にする目的関数は次の式(50)のように定式化することができる。
Figure 0007339537000050
(L)第2のループ17cの総数についての目的関数
第2のループ17cの総数が多すぎると、多量のループを実行するためのオーバヘッドが増大してプログラムの実行速度が低下してしまう。これを防ぐために、第2のループ17cの総数は最小にするのが好ましい。
そこで、詳細モデルでは、以下のようにして第2のループ17cの総数を最小にする目的関数を導入する。
まず、第2のループ17cの総数S1,4を次の式(51)で定義する。
Figure 0007339537000051
このとき、第2のループ17cの総数を最小にする目的関数は次の式(52)のように定式化できる。
Figure 0007339537000052
(M)詳細モデル全体の目的関数
詳細モデルにおける個々の目的関数は、式(30)のS1,1、式(45)のS1,2、式(50)のS1,3である。よって、詳細モデルの全体の目的関数は、次の式(53)のように定義できる。
Figure 0007339537000053
なお、式(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を決定するのが好ましい。
また、この例では、式(53)のようにS1,1、S1,2、S1,3、S1,4の全てを考慮した目的関数を利用したが、これらのいずれかが極値をとるような目的関数を採用してもよい。
以上のように、詳細モデルでは、式(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の各々に複数の命令を割り当てるということである。
[ループ分割に要する時間]
次に、ループ分割に要する時間について説明する。
図4は、近似モデルと詳細モデルを利用したときにループ分割に要する時間について説明するための模式図である。
以下では、入力ループ17aから全ての第2のループ17cを得るのに要する時間に制限時間Tmaxを設定し、全てのループ分割に要する時間が制限時間Tmaxを超えないようにするための条件を考える。なお、制限時間Tmaxは第1の時間の一例であり、その長さはアプリケーションプログラム17の性質等によってユーザが適宜設定し得る。
まず、近似モデルでループ分割を一回行うのに許容される時間を第1の許容時間T0とし、詳細モデルでループ分割を一回行うのに許容される時間を第2の許容時間T1とする。なお、第2の許容時間T1は第2の時間の一例である。
更に、入力ループ17aに含まれる命令の命令数をNIとする。また、詳細モデルによるループ分割の対象となる第1のループ17bに含まれる命令の個数を第1の命令数S1と呼ぶ。そして、整数N0を次の式(54)で定義する。
Figure 0007339537000054
この場合、入力ループ17aから第2のループ17cの全てを得るのに要する時間はN0(T0+T1)となる。この時間が制限時間Tmaxを超えないという条件は次の式(55)のように表される。
Figure 0007339537000055
式(55)によれば、NIとTmaxを定数とみなすことにより、S1、T0、T1の各パラメータの値を決定することができる。この場合、各パラメータの以下の性質を考慮して値を決定するのが好ましい。
例えば、第1の命令数S1は、その値を過度に小さくすると、詳細モデルにおける整数線形計画法の解が、第2のループ17cの全てを考慮した大域的な最適解から離れてしまうおそれがある。これとは逆に、第1の命令数S1の値を過度に大きくすると、詳細モデルで整数線形計画法を解くのに要する時間が長くなり、制限時間Tmax以内に解を見つけることができくなってしまう。
また、第2の許容時間T1を過度に短くすると、詳細モデルで整数線形計画法を解けないか、解けたとしても最適解から離れた解が得られてしまう。一方、第2の許容時間T1を過度に長くすると、第2の許容時間T1以内に最適解に近い解が得られた場合に、その解の精度を高めようとして無駄に時間を浪費するおそれがある。
一方、第1の許容時間T0は、第1の命令数S1と第2の許容時間T1とを決めてしまえば式(55)から決定することができる。
本実施形態では、ループ分割を行う情報処理装置が、ある程度の精度の解が得られる第1の命令数S1と第2の許容時間T1とを決定することにより、時間と解の精度とのバランスをとる。
その情報処理装置について次に説明する。
[情報処理装置]
図5は、本実施形態に係る情報処理装置のハードウェア構成図である。
情報処理装置21は、前述のターゲットマシン10(図2参照)で実行するアプリケーションプログラム17に対してループ分割を行うPCやサーバ等の計算機である。
この例では、情報処理装置21は、記憶装置22、メインメモリ23、プロセッサ24、入力装置25、及び表示装置26を備える。これらの各部はバス27によって相互に接続される。
このうち、記憶装置22は、例えばHDD(Hard Disk Drive)やSSD(Solid State Drive)等の二次記憶装置であり、本実施形態に係る情報処理プログラム30を記憶する。情報処理プログラム30は、前述の近似モデルと詳細モデルとを用いてループ分割を行うプログラムである。
なお、その情報処理プログラム30をコンピュータが読み取り可能な記録媒体28に記録させておき、プロセッサ24に記録媒体28の情報処理プログラム30を読み取らせるようにしてもよい。
そのような記録媒体28としては、例えばCD-ROM(Compact Disc - Read Only Memory)、DVD(Digital Versatile Disc)、及びUSB(Universal Serial Bus)メモリ等の物理的な可搬型記録媒体がある。また、フラッシュメモリ等の半導体メモリやハードディスクドライブを記録媒体28として使用してもよい。これらの記録媒体28は、物理的な形態を持たない搬送波のような一時的な媒体ではない。
更に、公衆回線、インターネット、及びLAN(Local Area Network)等に接続された装置に情報処理プログラム30を記憶させておき、プロセッサ24が情報処理プログラム30を読み出して実行するようにしてもよい。
一方、メインメモリ23は、DRAM等のようにデータを一時的に記憶するハードウェアであって、その上に前述の情報処理プログラム30が展開される。
プロセッサ24は、自装置の各部を制御したり、メインメモリ23と協働して情報処理プログラム30を実行したりするCPU等のハードウェアである。
入力装置25は、キーボードやマウス等の入力デバイスである。ユーザがこれらの入力デバイスを操作することにより、情報処理プログラム30でループ分割を行うべきアプリケーションプログラム17を指定したり、ループ分割後のアプリケーションプログラム17の出力先が指定されたりする。
また、表示装置26は、情報処理プログラム30の実行時にユーザが使用する様々なコマンドを表示する液晶ディスプレイ等の表示デバイスである。
<機能構成>
図6は、本実施形態に係る情報処理装置21の機能構成図である。
図6に示すように、この情報処理装置21は、受付部41、取得部42、算出部43、第1の分割部44、第2の分割部45、及び出力部46を備える。これらの各部は、プロセッサ24とメインメモリ23が協働して前述の情報処理プログラム30を実行することにより実現される。
このうち、受付部41は、アプリケーションプログラム17やサンプルプログラム51の入力を受け付ける機能ブロックである。サンプルプログラム51は、アプリケーションプログラム17に対してループ分割を行う前に、第1のループ17bの適切な命令数を見積もるためのプログラムである。
また、取得部42は、詳細モデルで第1のループ17bを複数の第2のループ17cに分割する問題を解くのに要する時間と、第1のループ17bに含まれる命令の個数との関係を表す関数fiを取得する機能ブロックである。その問題は、前述のように、第2のループ17cの各々に含まれる命令の参照先の個数が、メモリストリーム数HSやレジスタ数HR等のハードウェア数を超えない条件下で、整数線形計画法でループ分割を行う問題である。
そして、算出部43は、この問題を制限時間Tmax内に解くことが可能な第1の命令数S1を算出する。
第1の分割部44は、近似モデルを用いて入力ループ17aを複数の第1のループ17bに分割することにより、第1のループ17bの各々の命令数を第1の命令数S1よりも少ない第2の命令数S2とする。
そして、第2の分割部45は、詳細モデルを用いて、第1のループ17bを複数の第2のループ17cに分割する。このとき、第2の分割部45は、S2に対応する第2の許容時間T1を関係fiから求め、第2の許容時間T1をかけてループ分割を行う。これにより、制限時間Tmax内に規定精度で第1のループ17bを第2のループ17cに分割できる。
出力部46は、これらの第2のループ17cが記述されたプログラムを出力プログラム52として出力する。
[パラメータの決定方法]
本実施形態では、前述のようにループ分割の前に第1の命令数S1等のパラメータを事前に決定しておく。そこで、これらのパラメータの決定方法について以下に説明する。
図7は、本実施形態に係るパラメータの決定方法を示すフローチャートである。
まず、ステップP1において、受付部41が、第1の命令数S1や第2の許容時間T1のそれぞれの範囲の入力をユーザから受け付ける。
例えば、第1の命令数S1の範囲はSmin≦S1≦Smaxとし、第2の許容時間T1の範囲はTmin≦T1≦Tmaxとする。これらの範囲は、第1の命令数S1や第2の許容時間T1の候補を絞り込むために、ユーザが経験的に設定し得る。なお、第2の許容時間T1の範囲の上限は、前述の制限時間Tmaxである。
次に、ステップP2に移り、受付部41が、複数のサンプルプログラム51の入力を受け付ける。各々のサンプルプログラム51は、一つのループが記述されたプログラムであり、そのループに近似モデルを適用することで機械学習の様々な学習データが取得される。その学習データのバリエーションを広げるため、ここではループに含まれる命令の個数をサンプルプログラム51ごとに異なるようにする。
続いて、ステップP3に移り、取得部42が、複数のサンプルプログラム51の各々のループを近似モデルで分割することにより、サンプル用の複数の第1のループ17bを作成する。サンプル用の第1のループ17bの命令数は、サンプル用の複数の第1のループ17bごとに異なる。以下では、命令数がs個のサンプル用の第1のループ17bの全体を集合Zsで表す。
次に、ステップP4に移り、取得部42が、集合Zsの要素であるサンプル用の第1のループ17bの特徴データdを取得する。その特徴データdとしては、サンプル用の第1のループ17bに含まれる命令の命令数がある。また、第1のループ17bにおけるデータ依存グラフの辺の数、第1のループ17bが参照するレジスタ数やメモリストリーム数等を特徴データdとして採用してもよい。更に、第1のループ17bにおけるキャッシュ利用率を特徴データdとして採用してもよい。
次いで、ステップP5に移り、取得部42が、複数のサンプル用の第1のループ17bの各々に対して詳細モデルにおける整数線形計画法の解の取得を試みる。
前述のように、その整数線形計画法は、式(34)と式(43)の制約条件の下で式(53)の目的関数が最小となるような整数値の変数Di,dを求める問題である。変数Di,dは、i番目の命令が属するd番目の第2のループ17cを特定する整数である。よって、この問題を解くことにより、サンプル用の第1のループ17bが複数の第2のループ17cに分割される。
続いて、ステップP6に移り、取得部42が、複数のサンプル用の第1のループ17bの各々について到達時間TBを取得する。到達時間TBは、第3の時間の一例であって、詳細モデルの整数線形計画法の解を探索し始めてからその解の精度が閾値Qに到達するまでの時間である。
閾値Qは特に限定されないが、ここでは閾値Qを90%とする。
本実施形態では、整数線形計画法の解の精度を次のように定義する。
まず、詳細モデルにおける整数線形計画法を、変数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とする。
この場合、解の精度は、G’とGとの比(G’/G)の百分率として定義される。例えば、前述のように閾値Qを90%とする場合は、G’/Gの値が0.9となった時間が到達時間TBとなる。
このように整数線形計画法の解を有理数まで拡張することにより、目的関数の値から簡単に解の精度を求めることができる。
次に、ステップP7に移り、取得部42が、複数のサンプル用の第1のループ17bの各々の特徴データdと到達時間TBとを対応させた学習データLを作成する。
本実施形態では、制限時間Tmax内に解の精度が閾値Q以上となった場合に、詳細モデルにおける整数線形計画法の問題が到達時間TBにおいて解けたとみなす。一方、第1のループ17bのうちで、制限時間Tmax内に解の精度が閾値Q以上とならなかったものについては問題が解けなかったとみなし、当該第1のループ17bの特徴データdは学習データLに追加しない。
これにより、学習データLは、制限時間Tmax内に問題を解くことができる特徴データdと到達時間TBとを対応させたデータとなる。そのような学習データLにおいては、特徴データdと到達時間TBとの間に統計的な相関関係があると考えられる。
そこで、次のステップP8では、取得部42が、学習データLを利用した機械学習により、特徴データdと到達時間TBとの関係を表す関数fiを取得する。到達時間TBは整数線形計画法の問題を解くのに要する時間であるから、fi(d)を計算することにより、特徴データdを有する第1のループ17bを第2のループ17cに分割するのに要する時間を取得することができる。
次いで、ステップP9に移り、算出部43が、第1のループ17bの命令数のうち、詳細モデルにおける整数線形計画法を制限時間Tmax内に解くことが可能な第1の命令数S1を算出する。
第1の命令数S1の算出方法は特に限定されない。例えば、算出部43は、複数のサンプル用の第1のループ17bのうち、ステップP5において制限時間Tmax内に解の精度が閾値Qとなったループを選択する。これらのループの各々に含まれる命令の命令数は、制限時間Tmax内に解の精度が閾値Qとなる命令数である。そこで、算出部43は、このように選択した複数の第1のループ17bの各々の命令数を平均し、その平均値を第1の命令数S1とする。これにより、制限時間Tmax内に閾値Q以上の精度の解を取得可能な第1の命令数S1を算出することができる。
次に、ステップP10に移り、算出部43が、全てのサンプル用の第1のループ17bの各々について、ステップP5で解の探索に要した時間を平均し、その平均値を平均時間T1Aとする。
以上により、本実施形態におけるパラメータの決定方法の基本ステップを終える。
次に、ステップP8で作成した関数fiとステップP9で算出した命令数S1とを利用した情報処理方法について説明する。
[情報処理方法]
図8は、本実施形態に係る情報処理方法を示すフローチャートである。
この情報処理方法は、アプリケーションプログラム17に対して近似モデルと詳細モデルの各々でループ分割を行う方法であり、以下のように実行される。
まず、ステップP20において、受付部41がアプリケーションプログラム17の入力を受け付ける。
次に、ステップP21に移り、第1の分割部44が、近似モデルでループ分割を一回行うのに許容される第1の許容時間T0を算出する。例えば、第1の分割部44は、次の式を満たすような第1の許容時間T0を算出する。
Figure 0007339537000056
なお、NIは、前述のように入力ループ17aに含まれる命令の命令数である。また、S1はステップP9で算出した第1の命令数であり、T1AはステップP10で算出した平均時間である。
次に、ステップP22に移り、第1の分割部44が、変数Xに命令数NIを代入する。変数Xは、詳細モデルによるループ分割の対象となるループに含まれる命令数を表す。
続いて、ステップP23に移り、第1の分割部44が、ステップP9で算出した第1の命令数S1よりも変数Xの値が小さいかどうかを判断する。
ここでNOと判断された場合には、詳細モデルで入力ループ17aをループ分割しようとしても、制限時間Tmax内にループ分割を終えることができない。よって、この場合にはステップP24に移り、第1の分割部44が、第1の許容時間T0をかけて近似モデルで入力ループ17aを分割する。
次に、ステップP25に移り、第1の分割部44が変数XにX/2を代入する。その後、ステップP23からやり直す。
一方、ステップP23においてYESと判断された場合にはステップP26に移る。
この段階においては、入力ループ17aから分割された複数の第1のループ17bが生成されており、各々の第1のループ17bの第2の命令数S2が第1の命令数S1よりも少なくなっている。ステップP26においては、第2の分割部45が、これらの第1のループ17bの特徴データdを取得する。
前述のように、特徴データdには、第1のループ17bの第2の命令数S2、第1のループ17bにおけるデータ依存グラフの辺の数、第1のループ17bが参照するレジスタ数やストリーム数が含まれる。また、第1のループ17bにおけるキャッシュ利用率を特徴データdとして採用してもよい。
次に、ステップP27に移り、第2の分割部45が、複数の第1のループ17bの各々に対して第2の許容時間T1を求める。ここでは、第2の分割部45が、ステップP8で作成した関数fiと特徴データdを利用して、T1=fi(d)により第1のループ17bごとに第2の許容時間T1を求める。
前述のように、特徴データdには第1のループ17bの第2の命令数S2が含まれている。よって、この第2の許容時間T1は、分割前の第1のループ17bの命令数がS2である場合に、詳細モデルにおける整数線形計画法の解を得るのに要する時間となる。
そして、ステップP28に移り、第2の分割部45が、第2の許容時間T1をかけて詳細モデルにおける整数線形計画法の問題を解くことにより、第1のループ17bの各々を複数の第2のループ17cに分割する。
続いて、ステップP29に移り、出力部46がステップP28で得られた複数の第2のループ17cを出力プログラム52(図6参照)に記述し、その出力プログラム52を出力する。
以上により、本実施形態に係る情報処理方法の基本ステップを終了する。
上記した本実施形態によれば、ステップP24(図8)のループ分割により、制限時間Tmax内に詳細モデルの問題が解けることを保証する第1の命令数S1よりも少ない第2の命令数S2に第1のループ17bの命令数を減らす。これにより、ステップP28において詳細モデルの解を高い精度で求めることができ、その解に基づいて第1のループ17bを第2のループ17cに精度よく分割できる。
しかも、レジスタ数HRやメモリストリーム数HS等のハードウェア数を考慮してステップP28のループ分割を行うため、出力プログラム52の実行速度が低下するのを抑制できる。
更に、T1=fi(d)で定まる第2の許容時間T1は、第2の命令数S2等の特徴データdを有する第1のループ17bを第2のループ17cに分割する問題を解くのに要する時間である。よって、この第2の許容時間T1をかけてその問題を解くことで確実に第1のループ17bを第2のループ17cに分割できる。更に、このように第2の許容時間T1を設定することにより、第1のループ17bの分割に必要以上の時間を割り当てるおそれがなくなり、残りの時間を入力ループ17aの分割に割り当てることができる。
以上説明した各実施形態に関し、更に以下の付記を開示する。
(付記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のループに分割する処理と、
をコンピュータが実行することを特徴とする情報処理方法。
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…出力プログラム。

Claims (5)

  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のループに分割する処理と、
    をコンピュータが実行することを特徴とする情報処理方法。
JP2020002837A 2020-01-10 2020-01-10 情報処理装置、情報処理プログラム、及び情報処理方法 Active JP7339537B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2020002837A JP7339537B2 (ja) 2020-01-10 2020-01-10 情報処理装置、情報処理プログラム、及び情報処理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2020002837A JP7339537B2 (ja) 2020-01-10 2020-01-10 情報処理装置、情報処理プログラム、及び情報処理方法

Publications (2)

Publication Number Publication Date
JP2021111136A JP2021111136A (ja) 2021-08-02
JP7339537B2 true JP7339537B2 (ja) 2023-09-06

Family

ID=77059926

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020002837A Active JP7339537B2 (ja) 2020-01-10 2020-01-10 情報処理装置、情報処理プログラム、及び情報処理方法

Country Status (1)

Country Link
JP (1) JP7339537B2 (ja)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5120029B2 (ja) 2008-03-31 2013-01-16 大日本印刷株式会社 感光性樹脂組成物、およびこれを用いた物品、及びネガ型パターン形成方法
JP2016510919A (ja) 2013-03-06 2016-04-11 クゥアルコム・インコーポレイテッドQualcomm Incorporated 過度のコンパイル時間の低減

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5120029B2 (ja) 2008-03-31 2013-01-16 大日本印刷株式会社 感光性樹脂組成物、およびこれを用いた物品、及びネガ型パターン形成方法
JP2016510919A (ja) 2013-03-06 2016-04-11 クゥアルコム・インコーポレイテッドQualcomm Incorporated 過度のコンパイル時間の低減

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
KOES, David ryan et al,A Global Progressive Register Allocator,ACM SIGPLAN Notices,ACM,2006年06月11日,Volume 41, Issue 6,pp. 204-215

Also Published As

Publication number Publication date
JP2021111136A (ja) 2021-08-02

Similar Documents

Publication Publication Date Title
Mittal et al. A survey of techniques for optimizing deep learning on GPUs
US11243816B2 (en) Program execution on heterogeneous platform
US9733978B2 (en) Data management for multiple processing units using data transfer costs
JP7220914B2 (ja) コンピュータに実装する方法、コンピュータ可読媒体および異種計算システム
US9477601B2 (en) Apparatus and method for determining a sector division ratio of a shared cache memory
TWI728421B (zh) 用於修改機器學習模型之方法及非暫時性電腦儲存媒體以及機器學習計算系統
CN108205469B (zh) 一种基于MapReduce的资源分配方法及服务器
US20070094652A1 (en) Lockless scheduling of decreasing chunks of a loop in a parallel program
WO2018121242A1 (zh) 基于多个缓存的数据淘汰方法及装置
Bai et al. Efficient data loader for fast sampling-based gnn training on large graphs
WO2020028183A1 (en) A storage-based graph for enabling computation graph optimization
Zou et al. Distributed training large-scale deep architectures
JP2022537007A (ja) データ記憶
Neele et al. Partial-order reduction for GPU model checking
Wang et al. A fast work-efficient sssp algorithm for gpus
JP2014056425A (ja) データ管理装置、データ管理システム、処理割当方法および処理割当プログラム
US11226798B2 (en) Information processing device and information processing method
JP7339537B2 (ja) 情報処理装置、情報処理プログラム、及び情報処理方法
Uddin et al. Cache-based high-level simulation of microthreaded many-core architectures
JP5687603B2 (ja) プログラム変換装置、プログラム変換方法、および変換プログラム
CN113157541A (zh) 面向分布式数据库的多并发olap型查询性能预测方法及系统
Beach et al. Integrating acceleration devices using CometCloud
WO2021098105A1 (en) Method and apparatus for functional unit assignment
CN110389833B (zh) 一种处理器的性能调度方法及系统
Sengupta et al. High-Performance Incremental SVM Learning on Intel Xeon Phi™ Processors

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220908

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20230725

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20230726

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230807

R150 Certificate of patent or registration of utility model

Ref document number: 7339537

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150