JP4177681B2 - コンパイル方法、コンパイラ、およびコンパイル装置 - Google Patents

コンパイル方法、コンパイラ、およびコンパイル装置 Download PDF

Info

Publication number
JP4177681B2
JP4177681B2 JP2003042628A JP2003042628A JP4177681B2 JP 4177681 B2 JP4177681 B2 JP 4177681B2 JP 2003042628 A JP2003042628 A JP 2003042628A JP 2003042628 A JP2003042628 A JP 2003042628A JP 4177681 B2 JP4177681 B2 JP 4177681B2
Authority
JP
Japan
Prior art keywords
data
target
loop
loops
group
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.)
Expired - Lifetime
Application number
JP2003042628A
Other languages
English (en)
Other versions
JP2004252728A (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.)
Waseda University
Original Assignee
Waseda University
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 Waseda University filed Critical Waseda University
Priority to JP2003042628A priority Critical patent/JP4177681B2/ja
Publication of JP2004252728A publication Critical patent/JP2004252728A/ja
Application granted granted Critical
Publication of JP4177681B2 publication Critical patent/JP4177681B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Description

【0001】
【発明の属する技術分野】
本発明は、ソースプログラムをコンパイルして目的プログラムを生成するコンパイル方法、コンパイラ、およびコンパイル装置に係り、例えば、主記憶共有型マルチプロセッサマシンを用いてキャッシュメモリを効果的に利用して演算を行う場合等に利用できる。
【0002】
【背景技術】
一般に、多くのコンピュータは、高速に動作するプロセッサと、アクセス速度の遅い主メモリと、これらの速度のギャップを埋めるために設けられたアクセス速度の速い比較的小容量のキャッシュメモリとを備えている。主メモリとキャッシュメモリ(以下、単にキャッシュということがある。)との間のデータ転送単位はブロックと称されている。主メモリから転送されてくるブロックを、キャッシュ上のいずれのキャッシュラインに置くかを決定する方式には、フルアソシアティブ方式、セットアソシアティブ方式、およびダイレクトマップ方式の3種類がある。
【0003】
ダイレクトマップ方式では、主メモリから転送されてくる各ブロックの一つ一つは、ある一つの決まったキャッシュライン(例えば、主メモリのアドレスの下位ビットによりキャッシュラインのアドレスを決めることが多い。)にマッピングされるので、一度キャッシュライン上に置かれたデータであっても、同一のキャッシュラインにマッピングされるブロックに含まれるデータの参照があると、キャッシュライン上に置かれたデータは、キャッシュから追い出され、次の参照時には、キャッシュ上に存在しない状態となる。この現象をキャッシュラインコンフリクトと呼び、これによって生じるキャッシュミスをキャッシュラインコンフリクトミスという。
【0004】
また、セットアソシアティブ方式では、主メモリから転送されてくる各ブロックの一つ一つは、ある決められた複数(nウェイ・セットアソシアティブの場合には、n個)のキャッシュラインにマッピングされ、空いている方のキャッシュラインに置かれるが、空いているキャッシュラインが無ければ、ダイレクトマップ方式の場合と同様に、キャッシュラインコンフリクトが起きる。
【0005】
従って、ダイレクトマップ方式やセットアソシアティブ方式のキャッシュを備えたコンピュータでは、プログラムによってはキャッシュラインコンフリクトが多発し、処理速度が著しく低下する場合がある。
【0006】
そこで、従来より、このようなキャッシュラインコンフリクトミスを削減する方法として、例えば、変数の宣言サイズを変更する変数内パディング(Intra-variable padding)、複数変数の間にダミー変数を入れる変数間パディング(Inter-variable padding)等のデータレイアウト変更による手法などが研究されている(例えば、特許文献1等参照)。
【0007】
一方、マルチプロセッサシステムの実効性能を向上させるためのマルチグレイン並列処理の粗粒度タスク並列処理においても、データローカライゼーション手法が研究されてきた。データローカライゼーション手法をSMPマシン上のキャッシュに応用し、データを共有する粗粒度タスクを同一プロセッサ上で連続実行させることにより、粗粒度タスク間でのデータ転送にキャッシュを有効利用する手法が本願出願人により提案されている(非特許文献1,2参照)。
【0008】
なお、この粗粒度タスク並列処理においては、ソースプログラムを階層的に分割してマクロタスクを生成し、マクロタスク間のコントロールフロー、データ依存を解析した後に、マクロタスク間の並列性を抽出するために、各マクロタスクの最早実行可能条件を解析するという手順がとられる。マクロタスクの最早実行可能条件とは、そのマクロタスクが最も早い時点で実行可能になる条件である(非特許文献3参照)。
【0009】
【特許文献1】
特開平8−212081号公報(段落[0021]〜[0024]、[0027]、[0028]、[0094]、図15)
【非特許文献1】
笠原博徳(Hironori Kasahara),外1名,「ア・データ−ローカライゼーション・コンピレーション・スキーム・ユーズィング・パーシャル−スタティック・タスク・アサインメント・フォー・フォートラン・コース−グレイン・パラレル・プロセスィング(A data-localization compilation scheme using partial-static task assignment for Fortran coarse-grain parallel processing)」,パラレル・コンピューティング(PARALLEL COMPUTING),(オランダ),パラレル・コンピューティング(PARALLEL COMPUTING)発行,1998年,Parallel Computing24(1998),p.579−596
【非特許文献2】
石坂,中野,八木,小幡,笠原,「共有メモリマルチプロセッサ上でのキャッシュ最適化を考慮した粗粒度タスク並列処理」,情報処理学会論文誌,情報処理学会発行,2002年,Vol.43,No.4
【非特許文献3】
笠原博徳,「並列処理技術」,コロナ社発行,1991年6月20日(初版),p.140−148
【0010】
【発明が解決しようとする課題】
前述したように、従来より単一ループ、若しくは複数のループを融合したループ(このループフュージョンについては、前述した非特許文献3のp.125−128に詳述されている。)に対するコンフリクトミスの削減法が研究されている。これらの技術は、主として、同一イタレーションで使用する配列間でラインコンフリクトミスを削減するためのパディングや、外側ループのイタレーションで使用したデータを次のイタレーションで使用する場合に、それらの間でデータがキャッシュから追い出されないようにするためのパディング法である。
【0011】
しかし、従来のパディングは、コンフリクトミス削減により単一ループ内でのローカリティの向上を図ることはできるが、複数のループ間でアクセスされるデータに対してグローバルなコンフリクトミスの削減を行うことはできないという問題があった。
【0012】
また、従来のデータローカライゼーション手法では、同一のデータローカライザブルグループに属する分割ループ集合間でアクセスされるデータ集合を同一プロセッサ上のキャッシュに割り当てることにより、キャッシュミスは軽減できるものの、ラインコンフリクトの削減はできないという問題があった(後述する図6の右上部分、図14〜図17の各右側部分、図22の左側部分参照)。
【0013】
本発明の目的は、ラインコンフリクトを含めたトータルなキャッシュミスを軽減でき、処理速度を向上させることができるコンパイル方法、コンパイラ、およびコンパイル装置を提供するところにある。
【0014】
【課題を解決するための手段】
本発明は、ソースプログラムをコンパイルして目的プログラムを生成するコンパイル方法であって、ソースプログラムに含まれるデータ依存を有する複数のループをそれぞれ分割して各ループについてそれぞれ複数の小ループを生成し、これらの各小ループのうち同一の部分的な配列データを使用する小ループ同士を集合させて複数のデータローカライザブルグループを形成し、かつ、この分割・グループ化処理の際には、各データローカライザブルグループに属する各小ループによりそれぞれ使用される部分的な各配列データの合計サイズが、各データローカライザブルグループ毎にキャッシュメモリのサイズ以下に収まるように整合分割を行い、その後、各小ループの実行が確定する実行確定条件および各小ループの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を満たす範囲内で、同一のデータローカライザブルグループに属する各小ループ同士が、可能な限り連続して実行されるスケジューリングを行うとともに、各データローカライザブルグループに属する各小ループにより使用される部分的な各配列データ同士がキャッシュメモリ上で重なりを持たないように、各配列データに対してパディングを用いたデータレイアウト変更を行うことを特徴とするものである。
【0015】
ここで、本発明における「コンパイル」とは、広義のコンパイルを意味し、ソースプログラムから機械語コードにより構成される狭義のオブジェクトプログラムへの変換処理(狭義のコンパイル)のみならず、例えばFortran等の高級言語コードにより構成されるソースプログラムから同じFortran等の高級言語コードにより構成されるプログラムへの変換処理も含まれる。さらに、リンカ(リンケージ・エディタ)によって実行可能プログラムとされる前の状態のプログラムへの変換処理も含まれる。以下の発明においても同様である。
【0016】
また、本発明における「目的プログラム」とは、機械語コードにより構成される狭義のオブジェクトプログラムのみならず、例えばFortran等の高級言語コードにより構成されるプログラムも含まれる。さらに、リンカによって実行可能プログラムとされる前の状態のプログラムも含まれる。以下の発明においても同様である。
【0017】
さらに、「部分的な配列データ」とは、一つの配列データのうちの一部分をいい、その配列データを使用するループを分割することにより生じるものである。例えば、配列データがA(1:1024,1:1024)であるときに、A(1:1024,1:256)やA(1:1024,257:512)等が部分的な配列データに相当する。
【0018】
そして、「各データローカライザブルグループに属する各小ループによりそれぞれ使用される部分的な各配列データの合計サイズが、各データローカライザブルグループ毎にキャッシュメモリのサイズ以下に収まるように整合分割を行い」とは、同一のデータローカライザブルグループに属する各小ループにより使用される複数の部分的な配列データの合計サイズが、キャッシュサイズ以下に収まるように整合分割するという意味であり、このことが各データローカライザブルグループ毎に、それぞれ成立するという意味である。
【0019】
また、「各データローカライザブルグループに属する各小ループにより使用される部分的な各配列データ同士がキャッシュメモリ上で重なりを持たないように、各配列データに対してパディングを用いたデータレイアウト変更を行う」とされているのは、キャッシュメモリ上で重なりを持たないように配慮される対象となるのは、部分的な配列データ単位であるのに対し、パディングを入れる際には、部分的な配列データ単位ではなく、配列データまたは複数の配列データの集合を単位として考えるという意味である。
【0020】
さらに、「スケジューリング」と「データレイアウト変更」とは、いずれを先に行ってもよい。
【0021】
そして、「スケジューリングを行う」ことには、目的プログラム内における各データローカライザブルグループに属する各小ループの配置順序や配置位置そのものを変更して実行順序を定めること、および目的プログラム内にスケジューリング情報(例えば、GOTO文等のジャンプ機能を付与するための情報など)を挿入して実行順序を定めること等が含まれる。
【0022】
このような本発明のコンパイル方法においては、ソースプログラムに含まれるデータ依存を有する複数のループを対象としてループ整合分割行い、かつ、パディングを用いてこれらのループにより使用(アクセス)される配列データについてレイアウト変更を行う。そして、同一のデータローカライザブルグループに属する各小ループ同士を可能な限り連続実行するスケジューリングを行う。
【0023】
このため、上記のようなスケジューリングを行う結果、同一のデータローカライザブルグループに属する整合分割後の各小ループにより使用される複数の部分的な配列データは、連続して一つのキャッシュに置かれることが多くなり、この際、これらの複数の部分的な配列データは、パディングを用いたレイアウトが行われているため、キャッシュ上の異なるラインにマッピングされ、キャッシュ上で重なりを持つことはなくなる。例えば、配列データがA(1:1024,1:1024)およびB(1:1024,1:1024)であるときに、これらについての部分的な配列データであるA(1:1024,1:256)およびB(1:1024,1:256)が同一のデータローカライザブルグループに属する各小ループにより使用されるとすると、A(1:1024,1:256)とB(1:1024,1:256)とは、一つのキャッシュに置かれ、しかもキャッシュ上の異なるラインにマッピングされるようになる(後述する図7〜図10、図18〜図21、図22の右側部分参照)。
【0024】
従って、キャッシュラインコンフリクトミスが回避され、計算機(用途は問わない。例えば、学術計算用、会計処理用、ゲーム用、事務処理用、その他の演算処理用等、任意である。)の処理速度を向上させることが可能となり、これらにより前記目的が達成される。
【0025】
また、前述したコンパイル方法において、複数のプロセッサを用いて並列処理を行うためのマルチプロセッサ用のスケジューリングを行う際には、最早実行可能条件を満たす範囲内で、同一のデータローカライザブルグループに属する各小ループ同士が、可能な限り同一のプロセッサ上で連続して実行されるスケジューリングを行うことが望ましい。
【0026】
ここで、プロセッサ数と、ループ整合分割の分割数とは、一致していてもよく、一致していなくてもよい。
【0027】
このようにマルチプロセッサマシンへの適用を図った場合には、各データローカライザブルグループで行うループ処理を、複数のプロセッサに分散して行わせることができるようになり、例えば、各データローカライザブルグループに属する各小ループの処理を、各データローカライザブルグループ毎にそれぞれ異なるプロセッサに割り当てること等が可能となり、各データローカライザブルグループで行われるループ処理の並列性を利用して処理速度を、より一層向上させることが可能となる。
【0028】
さらに、前述したコンパイル方法において、パディングは、各データローカライザブルグループに属する各小ループにより使用される配列とは異なるデータ(いわゆるダミーデータ)により確保される領域としてもよく(例えば、後述する図18〜図21の場合等)、あるいは、各データローカライザブルグループに属する各小ループにより使用される配列のうちの少なくとも一つの配列のサイズを、非連続アクセス次元について拡大して確保される領域としてもよい(例えば、後述する図7〜図10、図22の場合等)。
【0029】
また、上記のうち、配列サイズを非連続アクセス次元について拡大してパディングを行う後者の場合においては、各データローカライザブルグループに属する各小ループにより使用される配列のサイズを、各配列毎にそれぞれ非連続アクセス次元について拡大してパディングを行ってもよく(例えば、後述する図7〜図10、図22の場合等)、あるいは、各配列毎ではなく、複数の配列の集合を一つの単位として考えてパディングを行ってもよい(例えば、後述する図18〜図21において、配列E,K,Rの各後ろ側にダミーデータを挿入するのではなく、各配列E,K,Rを拡大する場合等)。但し、各配列毎にパディングを行う際には、最後の配列については、必ずしもパディングを行う必要はない。
【0030】
なお、「非連続アクセス次元」とは、配列の宣言次元のうちメモリ格納時に最も大きなアクセスストライドを持つ次元であり、例えば、Fortranの場合には、カラムメジャーオーダーなので、右端で宣言される次元、すなわちA(i,j,k)であれば、kの次元の宣言サイズを拡大変更する。換言すれば、「非連続アクセス次元」とは、複数次元の配列の場合に、ループ処理において各イタレーションで固定された状態が続く次元であり、例えば、二重ループの場合には、外側のループ(処理の効率化の観点から、外側に配置されるべきループ)で変化する次元である。具体的には、例えば、A(1,1)、A(2,1)、A(3,1)、…、A(1,2)、A(2,2)、A(3,2)、…という順にアクセスする場合には、第2次元目のサイズを拡大変更する。
【0031】
また、本発明のコンパイラは、以上に述べたコンパイル方法を用いてコンパイルを行うことを特徴とするものである。
【0032】
このような本発明のコンパイラにおいては、前述した本発明のコンパイル方法で得られる作用・効果がそのまま得られ、これにより前記目的が達成される。
【0033】
さらに、本発明は、ソースプログラムをコンパイルして目的プログラムを生成するコンパイラであって、ソースプログラムをブロック単位で分割して複数のマクロタスクを生成するマクロタスク生成手段と、各マクロタスクの実行が確定する実行確定条件および各マクロタスクの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を解析する並列性解析手段と、各マクロタスクとしてソースプログラムに含まれるデータ依存を有する各ループのうちから、キャッシュメモリを効果的に利用するためのループ整合分割が可能な複数のループを、キャッシュ最適化用のターゲットループグループとして選択するターゲットループグループ選択手段と、このターゲットループグループ選択手段により選択されたターゲットループグループをターゲットループグループテーブルに格納するターゲットループグループ格納手段と、ターゲットループグループを構成する複数のループによりそれぞれ使用される各配列データを、キャッシュ最適化用の対象配列データとして選択する対象配列データ選択手段と、この対象配列データ選択手段により選択された各対象配列データを対象配列データテーブルに格納する対象配列データ格納手段と、各対象配列データの合計サイズおよびキャッシュメモリのサイズに基づき、ターゲットループグループを構成する複数のループの分割数を決定する分割数決定手段と、この分割数決定手段により決定した分割数に基づき、ターゲットループグループテーブルに格納されたターゲットループグループを構成する複数のループをそれぞれ分割して各ループについてそれぞれ複数の小ループを生成し、これらの各小ループのうち同一の部分的な対象配列データを使用する小ループ同士を集合させて複数のデータローカライザブルグループを形成するループ整合分割手段と、各小ループの実行が確定する実行確定条件および各小ループの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を満たす範囲内で、同一のデータローカライザブルグループに属する各小ループ同士が、可能な限り連続して実行されるスケジューリングを行うスケジューリング手段と、各データローカライザブルグループに属する各小ループにより使用される部分的な各対象配列データ同士がキャッシュメモリ上で重なりを持たないように、各対象配列データの主メモリへの格納位置をずらすために挿入するパディング用データのサイズを決定するパディングサイズ決定手段と、このパディングサイズ決定手段により決定したサイズに相当するパディング用データを、対象配列データテーブルに格納された対象配列データの内部または対象配列データ間に挿入することによりパディングを用いたデータレイアウト変更を行うデータレイアウト変更手段として、コンピュータを機能させることを特徴とするものである。
【0034】
ここで、「分割数決定手段」における「各対象配列データの合計サイズおよびキャッシュメモリのサイズに基づき」とは、全ての対象配列データの合計サイズをキャッシュメモリのサイズで除した値に基づき、分割数を決定するという意味である。
【0035】
また、「対象配列データの内部または対象配列データ間に挿入する」とは、対象配列のサイズを非連続アクセス次元について拡大するか、または対象配列データ間にいわゆるダミーデータを入れるという意味である。
【0036】
このような本発明のコンパイラにおいては、前述した本発明のコンパイル方法で得られる作用・効果がそのまま得られ、これにより前記目的が達成される。
【0037】
そして、本発明は、ソースプログラムをコンパイルして目的プログラムを生成するコンパイル装置であって、ソースプログラムをブロック単位で分割して複数のマクロタスクを生成するマクロタスク生成手段と、各マクロタスクの実行が確定する実行確定条件および各マクロタスクの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を解析する並列性解析手段と、各マクロタスクとしてソースプログラムに含まれるデータ依存を有する各ループのうちから、キャッシュメモリを効果的に利用するためのループ整合分割が可能な複数のループを、キャッシュ最適化用のターゲットループグループとして選択するターゲットループグループ選択手段と、このターゲットループグループ選択手段により選択されたターゲットループグループを格納するターゲットループグループテーブルと、ターゲットループグループを構成する複数のループによりそれぞれ使用される各配列データを、キャッシュ最適化用の対象配列データとして選択する対象配列データ選択手段と、この対象配列データ選択手段により選択された各対象配列データを格納する対象配列データテーブルと、各対象配列データの合計サイズおよびキャッシュメモリのサイズに基づき、ターゲットループグループを構成する複数のループの分割数を決定する分割数決定手段と、この分割数決定手段により決定した分割数に基づき、ターゲットループグループテーブルに格納されたターゲットループグループを構成する複数のループをそれぞれ分割して各ループについてそれぞれ複数の小ループを生成し、これらの各小ループのうち同一の部分的な対象配列データを使用する小ループ同士を集合させて複数のデータローカライザブルグループを形成するループ整合分割手段と、各小ループの実行が確定する実行確定条件および各小ループの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を満たす範囲内で、同一のデータローカライザブルグループに属する各小ループ同士が、可能な限り連続して実行されるスケジューリングを行うスケジューリング手段と、各データローカライザブルグループに属する各小ループにより使用される部分的な各対象配列データ同士がキャッシュメモリ上で重なりを持たないように、各対象配列データの主メモリへの格納位置をずらすために挿入するパディング用データのサイズを決定するパディングサイズ決定手段と、このパディングサイズ決定手段により決定したサイズに相当するパディング用データを、対象配列データテーブルに格納された対象配列データの内部または対象配列データ間に挿入することによりパディングを用いたデータレイアウト変更を行うデータレイアウト変更手段とを備えたことを特徴とするものである。
【0038】
このような本発明のコンパイル装置においては、前述した本発明のコンパイル方法で得られる作用・効果がそのまま得られ、これにより前記目的が達成される。
【0039】
また、本発明は、プログラムを構成するコードを作成するプログラムコード作成方法であって、実行対象とするデータ依存を有する複数のループをそれぞれ分割して各ループについてそれぞれ複数の小ループを作成し、これらの各小ループのうち同一の部分的な配列データを使用する小ループ同士を集合させて複数のデータローカライザブルグループを形成し、かつ、この分割・グループ化作業の際には、各データローカライザブルグループに属する各小ループによりそれぞれ使用される部分的な各配列データの合計サイズが、各データローカライザブルグループ毎にキャッシュメモリのサイズ以下に収まるように整合分割を行い、その後、各小ループの実行が確定する実行確定条件および各小ループの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を満たす範囲内で、同一のデータローカライザブルグループに属する各小ループ同士が、可能な限り連続して実行されるようにスケジューリングを行うとともに、各データローカライザブルグループに属する各小ループにより使用される部分的な各配列データ同士がキャッシュメモリ上で重なりを持たないように、各配列データをパディングを用いてレイアウトすることを特徴とするものである。
【0040】
このような本発明のプログラムコード作成方法においては、前述した本発明のコンパイル方法で得られる作用・効果がそのまま得られ、これにより前記目的が達成される。
【0041】
さらに、前述したプログラムコード作成方法において、複数のプロセッサを用いて並列処理を行うためのマルチプロセッサ用のスケジューリングを行う際には、最早実行可能条件を満たす範囲内で、同一のデータローカライザブルグループに属する各小ループ同士が、可能な限り同一のプロセッサ上で連続して実行されるようにスケジューリングを行うことが望ましい。
【0042】
このようにマルチプロセッサマシンへの適用を図った場合には、各データローカライザブルグループで行うループ処理を、複数のプロセッサに分散して行わせることができるようになり、例えば、各データローカライザブルグループに属する各小ループの処理を、各データローカライザブルグループ毎にそれぞれ異なるプロセッサに割り当てること等が可能となり、各データローカライザブルグループで行われるループ処理の並列性を利用して処理速度を、より一層向上させることが可能となる。
【0043】
また、本発明のプログラムは、以上に述べたコンパイル方法またはプログラムコード作成方法を用いて生成または作成されたことを特徴とするものである。
【0044】
さらに、本発明のプログラムは、以上に述べたコンパイラにより生成されたことを特徴とするものである。
【0045】
なお、以上に述べたプログラムまたはその一部は、例えば、光磁気ディスク(MO)、コンパクトディスク(CD)を利用した読出し専用メモリ(CD−ROM)、CDレコーダブル(CD−R)、CDリライタブル(CD−RW)、デジタル・バーサタイル・ディスク(DVD)を利用した読出し専用メモリ(DVD−ROM)、DVDを利用したランダム・アクセス・メモリ(DVD−RAM)、フレキシブルディスク(FD)、磁気テープ、ハードディスク、読出し専用メモリ(ROM)、電気的消去および書換可能な読出し専用メモリ(EEPROM)、フラッシュ・メモリ、ランダム・アクセス・メモリ(RAM)等の記録媒体に記録して保存や流通等させることが可能であるとともに、例えば、ローカル・エリア・ネットワーク(LAN)、メトロポリタン・エリア・ネットワーク(MAN)、ワイド・エリア・ネットワーク(WAN)、インターネット、イントラネット、エクストラネット等の有線ネットワーク、あるいは無線通信ネットワーク、さらにはこれらの組合せ等の伝送媒体を用いて伝送することが可能であり、また、搬送波に載せて搬送することも可能である。さらに、以上に述べたプログラムは、他のプログラムの一部分であってもよく、あるいは別個のプログラムと共に記録媒体に記録されていてもよい。
【0046】
また、本発明のキャッシュ最適利用演算方法は、プロセッサと、主メモリと、これらの間に設けられたキャッシュメモリとを備えた演算装置を用いて、以上に述べたプログラムを実行することにより、キャッシュラインコンフリクトミスの発生を抑えながらキャッシュメモリを利用して演算処理を行うことを特徴とするものである。
【0047】
さらに、本発明のキャッシュ最適利用演算装置は、プロセッサと、主メモリと、これらの間に設けられたキャッシュメモリとを備え、以上に述べたプログラムが搭載され、このプログラムが実行されることにより、キャッシュラインコンフリクトミスの発生を抑えながらキャッシュメモリが利用されて演算処理が行われる構成とされていることを特徴とするものである。
【0048】
なお、本発明のキャッシュ最適利用演算装置の用途は、例えば、学術計算用、会計処理用、ゲーム用、事務処理用、その他の演算処理用等、任意である。
【0049】
【発明の実施の形態】
以下に本発明の一実施形態を図面に基づいて説明する。図1には、本実施形態のコンパイル装置10およびキャッシュ最適利用演算装置20の全体構成が示されている。また、図2は、コンパイル装置10を機能的に示した構成図である。
【0050】
コンパイル装置10は、ソースプログラム1をコンパイルして目的プログラム2を生成する装置である。キャッシュ最適利用演算装置20は、コンパイル装置10で生成した目的プログラム2、またはこの目的プログラム2をさらにコンパイルして得られたプログラムが、実行可能な状態でプログラム3として搭載されている装置である。これらのコンパイル装置10およびキャッシュ最適利用演算装置20は、説明の便宜上、別の装置として記載されているが、物理的に同じ装置(コンピュータ)を用いて実現されてもよい。
【0051】
図1において、コンパイル装置10は、CPU(中央演算処理装置)11を備えたコンピュータにより構成され、ソースプログラム1をコンパイルして目的プログラム2を生成するための言語処理プログラムであるコンパイラ12を搭載している。
【0052】
キャッシュ最適利用演算装置20は、主記憶共有型マルチプロセッサマシンであり、高速で動作して各種演算処理を行う複数(本実施形態では、一例として4つとする。)のプロセッサ30,31,32,33と、これらのプロセッサ30〜33により共有される状態でアクセスされる主メモリ40と、各プロセッサ30〜33と主メモリ40との間に設けられた複数(本実施形態では、一例として4つとする。)のL2キャッシュ50,51,52,53と、主メモリ40に接続された外部記憶装置60とを備えている。
【0053】
各L2キャッシュ50〜53は、アクセス速度の遅い主メモリ40に比べ、高速アクセスが可能なレベル2のキャッシュメモリであり、比較的小容量のメモリである。
【0054】
外部記憶装置60は、例えばハードディスク等の大容量のメモリであり、キャッシュ最適利用演算装置20で実行されるプログラム3が記憶されている。プログラム3の用途、つまりキャッシュ最適利用演算装置20の用途は、例えば、学術計算用、会計処理用、ゲーム用、事務処理用、その他の演算処理用等、任意である。
【0055】
また、各プロセッサ30,31,32,33は、L1キャッシュ70,71,72,73をそれぞれ有している。これらのL1キャッシュ70〜73は、L2キャッシュ50〜53に比べ、より高速アクセスが可能なキャッシュメモリであるが、メモリ容量はL2キャッシュ50〜53よりもさらに小さい。本実施形態では、キャッシュ最適化の対象として、L2キャッシュ50〜53を選択するものとする。但し、本発明によるキャッシュ最適化の対象は、L2キャッシュ50〜53だけではなく、L1キャッシュ70〜73としてもよい。また、L3キャッシュ、あるいはL4以上のキャッシュがある場合には、それらのキャッシュも本発明による最適化の対象となり得る。
【0056】
なお、図示は省略されているが、コンパイル装置10およびキャッシュ最適利用演算装置20は、それぞれ例えば、マウス、キーボード、トラックボール、ライトペン、トラックパッド、トラックポイント、タブレットおよびスタイラス、ジョイスティック、あるいはこれらの組合せ等の入力手段と、例えば、液晶ディスプレイ、CRTディスプレイ、有機ELディスプレイ、ECLディスプレイ、プロジェクタおよびスクリーン、あるいはこれらの組合せ等の表示手段と、例えば、プリンタ、プロッタ、あるいはこれらの組合せ等の出力手段とを適宜備えている。
【0057】
図2において、コンパイル装置10は、コンパイルに必要な各種処理を行う処理手段13と、この処理手段13による処理で必要となるデータを格納するターゲットループグループテーブル14および対象配列データテーブル15等の各種テーブルとを含んで構成されている。
【0058】
処理手段13は、マクロタスク生成手段13Aと、並列性解析手段13Bと、ターゲットループグループ選択手段13Cと、ターゲットループグループ格納手段13Dと、対象配列データ選択手段13Eと、対象配列データ格納手段13Fと、分割数決定手段13Gと、ループ整合分割手段13Hと、スケジューリング手段13Jと、パディングサイズ決定手段13Kと、データレイアウト変更手段13Lとを含んで構成されている。
【0059】
そして、処理手段13を構成する各手段13A〜13Lは、CPU11およびこのCPU11の動作手順を規定するコンパイラ12により実現される。また、ターゲットループグループテーブル14および対象配列データテーブル15等の各種テーブルは、コンパイル装置10の主メモリ(不図示)に保持され、あるいは必要に応じ、コンパイル装置10に設けられた例えばハードディスク等の外部記憶装置(不図示)に記憶される。
【0060】
マクロタスク生成手段13Aは、ソースプログラム1をブロック単位で分割して複数のマクロタスクを生成する処理を行うものである。
【0061】
並列性解析手段13Bは、各マクロタスクの実行が確定する実行確定条件および各マクロタスクの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件(最早実行開始条件とも称される。)を解析する処理を行うものである。
【0062】
ここで、あるマクロタスクXの最早実行可能条件は、簡単に表現すると、次のようになる。前者の実行確定条件は、プログラムの流れ(コントロールフロー)を定めるものであり、粗粒度タスク間の並列性を表現するマクロタスクグラフにおいて、マクロタスクXがコントロール依存する条件分岐を含むマクロタスクが、マクロタスクXの実行を確定する方向に分岐するという条件である。後者のデータアクセス条件は、マクロタスクXの前にそのデータを定義あるいは使用する先行タスク(データ依存先行マクロタスク)の実行が終了するか、あるいはデータ依存先行マクロタスクが実行されないことが確定し、マクロタスクXが必要とするデータが使用可能となるという条件である。最早実行可能条件については、前述した非特許文献3のp.145付近に詳述されているので、ここでは詳しい説明は省略する。
【0063】
ターゲットループグループ選択手段13Cは、各マクロタスクとしてソースプログラム1に含まれるデータ依存を有する各ループのうちから、キャッシュメモリ(本実施形態では、L2キャッシュ50〜53)を効果的に利用するためのループ整合分割が可能な複数のループを、キャッシュ最適化用のターゲットループグループ(TLG:Target Loop Group)として選択する処理を行うものである。
【0064】
ターゲットループグループ格納手段13Dは、ターゲットループグループ選択手段13Cにより選択された複数のループを、ターゲットループグループテーブル14に格納する処理を行うものである。
【0065】
対象配列データ選択手段13Eは、ターゲットループグループを構成する複数のループによりそれぞれ使用(アクセス)される各配列データを、キャッシュ最適化用の対象配列データとして選択する処理を行うものである。
【0066】
対象配列データ格納手段13Fは、対象配列データ選択手段13Eにより選択された各対象配列データを、対象配列データテーブル15に格納する処理を行うものである。
【0067】
分割数決定手段13Gは、各対象配列データの合計サイズおよびキャッシュサイズに基づき、ターゲットループグループを構成する複数のループの分割数(複数のループをそれぞれ分割する際の分割数)を決定する処理を行うものである。具体的には、各対象配列データの合計サイズがキャッシュサイズよりも大きい場合には、各対象配列データの合計サイズを分割数で除した値が、キャッシュサイズ以下となるように各ループの分割数を決定する。すなわち、分割数は、各対象配列データの合計サイズをキャッシュサイズで除した値以上とする。なお、各対象配列データの合計サイズがキャッシュサイズと同じか、キャッシュサイズよりも小さい場合には、パディングは行わない。
【0068】
ループ整合分割手段13Hは、分割数決定手段13Gにより決定した分割数に基づき、ターゲットループグループテーブル14に格納されたターゲットループグループを構成する複数のループをそれぞれ分割して各ループについてそれぞれ複数の小ループを生成し、これらの各小ループのうち同一の部分的な対象配列データを使用する小ループ同士を集合させて複数のデータローカライザブルグループ(DLG:Data Localizable Group)を形成する処理を行うものである。なお、ループ整合分割については、前述した非特許文献1に詳述されているので、ここでは詳しい説明は省略する。
【0069】
スケジューリング手段13Jは、各小ループの実行が確定する実行確定条件および各小ループの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を満たす範囲内で、同一のデータローカライザブルグループに属する各小ループ同士が、可能な限り連続して実行されるスケジューリング処理を行うものである。
【0070】
また、本実施形態のキャッシュ最適利用演算装置20のような複数のプロセッサを備えた装置で実行されるプログラムをコンパイル対象とする場合には、スケジューリング手段13Jは、次のような処理を行う。すなわち、複数のプロセッサを用いて並列処理を行うためのマルチプロセッサ用のスケジューリングを行う際には、最早実行可能条件を満たす範囲内で、同一のデータローカライザブルグループに属する各小ループ同士が、可能な限り同一のプロセッサ上で連続して実行されるスケジューリング処理を行う。
【0071】
パディングサイズ決定手段13Kは、各データローカライザブルグループに属する各小ループにより使用される部分的な各対象配列データ同士がキャッシュ上で重なりを持たないように、各対象配列データの主メモリ40への格納位置をずらすために挿入するパディング用データのサイズを決定する処理を行うものである。
【0072】
データレイアウト変更手段13Lは、パディングサイズ決定手段13Kにより決定したサイズに相当するパディング用データを、対象配列データテーブル15に格納された対象配列データの内部または対象配列データ間に挿入することにより、パディングを用いたデータレイアウト変更処理を行うものである。
【0073】
ターゲットループグループテーブル14は、ターゲットループグループ選択手段13Cにより選択されたターゲットループグループを格納するものである。
【0074】
対象配列データテーブル15は、対象配列データ選択手段13Eにより選択された各対象配列データを格納するものである。
【0075】
このような本実施形態においては、以下のようにしてコンパイル装置10を用いてコンパイルが行われる。図3には、コンパイル装置10によるコンパイル処理の流れがフローチャートで示されている。
【0076】
先ず、コンパイルの対象となるソースプログラム1を用意する。ここでは、理解を容易にするため、具体的な例として、図4に示すようなプログラム100を用いて説明を行うものとする。また、キャッシュ最適利用演算装置20のL2キャッシュ50〜53の各サイズを4メガバイトとする(図4参照)。さらに、主メモリ40から各L2キャッシュ50〜53へのデータ転送は、ダイレクトマップ方式(アソシアティビティが1)によるものとする。但し、本発明は、ダイレクトマップ方式に限らず、セットアソシアティブ方式(アソシアティビティが2以上)について適用しても有効である。なお、転送ブロック長(キャッシュライン長)については、特に想定はなく、例えば32バイトや64バイト等、任意である。
【0077】
図4において、プログラム100は、Fortran等の高級言語により記述されている。プログラム100には、配列宣言部101と、互いにデータ依存を有する複数(ここでは、2つとする。)のループ102,103とが含まれている。
【0078】
配列宣言部101では、4つの2次元の配列が宣言されている。各配列は、A(1024,1024)、B(1024,1024)、C(1024,1024)、D(1024,1024)であり、各配列の一つの要素は、integer(整数型)で4バイトである。従って、配列Aのサイズは、1024×1024×4=4メガバイトである。他の配列B,C,Dも同様である。また、各配列A,B,C,Dの合計サイズは、16メガバイトである。図4の右側部分には、各4メガバイトの配列A,B,C,Dを、4メガバイトのキャッシュ上に割り当てたときのイメージが示されている。なお、この例では、各配列A,B,C,Dのサイズが全て同じとされているが、本発明は、各配列のサイズが異なっている場合にも、適用することができる。
【0079】
そして、コンパイル装置10の電源を投入し、コンパイラ12(図1参照)を起動して、用意したソースプログラム1についてのコンパイル処理を開始する(図3のステップS1)。
【0080】
次に、マクロタスク生成手段13Aおよび並列性解析手段13B等により、前処理を行う(ステップS2)。この前処理では、ソースコードを中間言語に変換するとともに、変数テーブルを作成する。それから、マクロタスク生成手段13Aにより、コンパイル対象のプログラム100を、ループ、サブルーチン、基本ブロック等のブロック単位で分割し、複数のマクロタスクを生成する。
【0081】
続いて、並列性解析手段13Bにより、マクロタスク生成手段13で生成した各マクロタスクについて、データ依存解析、コントロールフロー解析を行った後、実行確定条件およびデータアクセス条件からなる最早実行可能条件の解析を行い、プログラム100中に含まれるループ、サブルーチン、基本ブロック等の各マクロタスク間の並列性を解析する。
【0082】
それから、ターゲットループグループ選択手段13Cにより、プログラム100中に含まれるデータ依存を伴う各ループのうちから、キャッシュ最適化用にループ分割が可能、すなわち整合分割が可能な複数のループを、キャッシュ最適化用のターゲットループグループ(TLG)として選択する(図3のステップS3)。図4の例では、2つのループ102,103がターゲットループグループ(以下、TLG1という。)として選択されるものとする。
【0083】
そして、ターゲットループグループ選択手段13Cにより選択されたTLG1を構成するループ102,103は、ターゲットループグループ格納手段13Dにより、ターゲットループグループテーブル14に格納される。
【0084】
続いて、対象配列データ選択手段13Eにより、TLG1を構成する複数のループ102,103によりそれぞれ使用(アクセス)される各配列A,B,C,Dを、キャッシュ最適化用の対象配列として選択する(図3のステップS4)。
【0085】
そして、対象配列データ選択手段13Eにより選択された各対象配列A,B,C,Dは、対象配列データ格納手段13Fにより、対象配列データテーブル15に格納される。
【0086】
その後、分割数決定手段13Gにより、各対象配列A,B,C,Dの合計サイズおよびキャッシュサイズに基づき、TLG1を構成する複数のループ102,103の分割数(複数のループ102,103をそれぞれ分割する際の分割数)を決定する(図3のステップS5)。
【0087】
図4の例では、各対象配列A,B,C,Dの合計サイズが16メガバイトであり、キャッシュサイズが4メガバイトであるから、各対象配列データの合計サイズがキャッシュサイズよりも大きい。従って、各対象配列データA,B,C,Dの合計サイズを分割数で除した値が、キャッシュサイズ以下となるように、各ループ102,103の分割数を決定する。すなわち、各対象配列A,B,C,Dの合計サイズをキャッシュサイズで除すると、16メガバイト÷4メガバイト=4となるので、4分割以上とする。ここでは、一例として4分割とする。
【0088】
分割数決定手段13Gにより分割数を決定した後には、図5に示すように、決定した分割数(ここでは、4分割)に基づき、ループ整合分割手段13Hにより、ターゲットループグループテーブル14に格納されたTLG1を構成する複数のループ102,103をそれぞれ分割(ここでは、4分割)し、ループ102について、複数(ここでは、4つ)の小ループ102A,102B,102C,102Dを生成し、ループ103について、複数(ここでは、4つ)の小ループ103A,103B,103C,103Dを生成する(図3のステップS6)。
【0089】
図4の例では、配列Aの各要素A(i,j)、但し、i=1〜1024、j=1〜1024のデータの並び順は、A(1,1)、A(2,1)、A(3,1)、…であるから、第1次元目のiが連続アクセス次元であり、第2次元目のjが非連続アクセス次元となる。他の配列B,C,Dも同様である。また、ループ102,103では、図4に示すように、外側のループがj=1〜1024であるため、この非連続アクセス次元である第2次元目のjについて4分割し、j=1〜256を小ループ102A,103Aとし、j=257〜512を小ループ102B,103Bとし、j=513〜768を小ループ102C,103Cとし、j=769〜1024を小ループ102D,103Dとする。
【0090】
そして、配列A,B,C,Dもこれに合わせてj=1〜256、j=257〜512、j=513〜768、j=769〜1024で4分割し、各配列A,B,C,Dについて、それぞれ4つの部分的な配列を生成する。例えば、配列データA(1:1024,1:1024)については、A(1:1024,1:256)、A(1:1024,257:512)、A(1:1024,513:768)、A(1:1024,769:1024)という4つの部分的な配列データを生成する。他の配列B,C,Dも同様である。
【0091】
ここで、図5に示すように、2つの小ループ102A,103Aは、A(1:1024,1:256)、B(1:1024,1:256)、C(1:1024,1:256)、D(1:1024,1:256)という同じ部分的な配列データにアクセスする。従って、2つの小ループ102A,103Aの集合により、データローカライザブルグループ(以下、DLG10という。)が形成される。同様にして、2つの小ループ102B,103Bの集合により、データローカライザブルグループ(以下、DLG11という。)が形成され、2つの小ループ102C,103Cの集合により、データローカライザブルグループ(以下、DLG12という。)が形成され、2つの小ループ102D,103Dの集合により、データローカライザブルグループ(以下、DLG13という。)が形成される。
【0092】
また、ループ整合分割手段13Hにより、図5に示すようなループ整合分割を行って得られた各小ループ102A,102B,102C,102D,103A,103B,103C,103Dについても、マクロタスクとして扱われる。
【0093】
続いて、ループ整合分割を行った後には、再び、並列性解析手段13Bにより、新たに生成されたマクロタスクである各小ループ102A,102B,102C,102D,103A,103B,103C,103Dを含め、実行確定条件およびデータアクセス条件からなる最早実行可能条件の解析を行い、各小ループ102A,102B,102C,102D,103A,103B,103C,103Dを含めたマクロタスク間の並列性を解析する。
【0094】
それから、スケジューリング手段13Jにより、各小ループの実行が確定する実行確定条件および各小ループの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を満たす範囲内で、同一のデータローカライザブルグループに属する各小ループ同士が、可能な限り同一のプロセッサ上で連続して実行されるようにスケジューリングを行う(図3のステップS7)。
【0095】
図4の例では、DLG10に属する102A,103Aを同一プロセッサ上で連続実行し、DLG11に属する102B,103Bを同一プロセッサ上で連続実行し、DLG12に属する102C,103Cを同一プロセッサ上で連続実行し、DLG13に属する102D,103Dを同一プロセッサ上で連続実行するようにスケジューリングを行う。
【0096】
図11には、4つのプロセッサ30〜33に、それぞれ異なるデータローカライザブルグループを割り当てるスケジューリングを行ったときの実行イメージが示されている。図11では、DLG10,DLG11,DLG12,DLG13が、各プロセッサ30〜33で並列処理される。
【0097】
図12には、一つのプロセッサ(ここでは、プロセッサ30とする。)に全てのデータローカライザブルグループを割り当てるスケジューリングを行ったときの実行イメージが示されている。図12では、DLG10,DLG11,DLG12,DLG13の順に処理される。この場合は、シングルプロセッサのマシンの場合と同様である。
【0098】
スケジューリング手段13Jによりスケジューリングを行った後には、パディングサイズ決定手段13により、DLG10,DLG11,DLG12,DLG13に属する各小ループにより使用される部分的な各対象配列データ同士がキャッシュ上で重なりを持たないように、各対象配列データの主メモリ40への格納位置をずらすために挿入するパディング用データのサイズを決定する(図3のステップS8)。
【0099】
図5に示すように、DLG10では、A(1:1024,1:256)、B(1:1024,1:256)、C(1:1024,1:256)、D(1:1024,1:256)という部分的な各配列データにアクセスするので、これらがキャッシュ上で重なりを持たないようにパディング量を決定する。DLG11,DLG12,DLG13についても同様である。
【0100】
図6は、DLG10の実行時に起きるラインコンフリクトおよびこれを回避するためのパディング量の説明図である。図6の右上部分に示すように、パディングを行わないと、DLG10に属する各小ループ102A,103Aによりアクセスされる部分的な各配列データの全てがキャッシュ上の同じ領域に割り当てられるため、キャッシュラインコンフリクトが起こる。
【0101】
そこで、図6の右下部分に示すようなデータレイアウトとすれば、部分的な各配列データは、キャッシュ上の異なる領域に割り当てられ、重なりがなくなるため、ラインコンフリクトが削減される。従って、4メガバイトの一つの配列データ(例えば、A(1:1024,1:1024)等)についてのパディング量は、ループ整合分割により生成された一つの部分的な配列データ(例えば、A(1:1024,1:256)等)と同じサイズであり、1メガバイトである。
【0102】
続いて、データレイアウト変更手段13Lにより、パディングサイズ決定手段13Kで決定したサイズに相当するパディング用データを、対象配列データテーブル15に格納された各対象配列A,B,C,Dの内部または各対象配列A,B,C,D間に挿入することにより、パディングを用いたデータレイアウト変更を行う(図3のステップS9)。
【0103】
図7〜図10には、パディングを行ってDLG10,DLG11,DLG12,DLG13の実行時にラインコンフリクトが回避される状態の説明図が示されている。図7〜図10の右上部分には、各対象配列A,B,C,Dのそれぞれの内部にパディング用データ(図中の斜線部分の領域)を挿入した状態が示されている。各対象配列A,B,C,Dは、非連続アクセス次元である第2次元目のj(図中の数値にアンダーラインが付されている次元)について、それぞれ配列サイズを拡大されている。配列Aについては、A(1:1024,1025:1280)が1メガバイトのパディング用データとして挿入されている。同様にして、配列Bについては、B(1:1024,1025:1280)が、配列Cについては、C(1:1024,1025:1280)が、それぞれ1メガバイトのパディング用データとして挿入されている。なお、最後の配列Dについては、パディング用データは挿入されない。
【0104】
図7の右下部分に示すように、DLG10の実行時には、キャッシュ上への部分的な各配列データの割り当て領域は、図中の点線の矢印で示す如く、キャッシュ先頭から、A(1:1024,1:256)、B(1:1024,1:256)、C(1:1024,1:256)、D(1:1024,1:256)という順になり、重なることはない。従って、ラインコンフリクトが回避されることがわかる。
【0105】
図8の右下部分に示すように、DLG11の実行時には、キャッシュ上への部分的な各配列データの割り当て領域は、図中の点線の矢印で示す如く、キャッシュ先頭から、D(1:1024,257:512)、A(1:1024,257:512)、B(1:1024,257:512)、C(1:1024,257:512)という順になり、重なることはない。従って、ラインコンフリクトが回避されることがわかる。
【0106】
図9の右下部分に示すように、DLG12の実行時には、キャッシュ上への部分的な各配列データの割り当て領域は、図中の点線の矢印で示す如く、キャッシュ先頭から、C(1:1024,513:768)、D(1:1024,513:768)、A(1:1024,513:768)、B(1:1024,513:768)という順になり、重なることはない。従って、ラインコンフリクトが回避されることがわかる。
【0107】
図10の右下部分に示すように、DLG13の実行時には、キャッシュ上への部分的な各配列データの割り当て領域は、図中の点線の矢印で示す如く、キャッシュ先頭から、B(1:1024,769:1024)、C(1:1024,769:1024)、D(1:1024,769:1024)、A(1:1024,769:1024)という順になり、重なることはない。従って、ラインコンフリクトが回避されることがわかる。
【0108】
データレイアウト変更手段13Lによるパディングを用いたデータレイアウト変更が終了すると、目的プログラム2が生成される。この目的プログラム2は、Fortran等の高級言語コードの状態である場合もあり、また、機械語コードで構成された狭義のオブジェクトコードの状態である場合もある。なお、コンパイルして生成された目的プログラム2が、Fortran等の高級言語コードの状態である場合には、さらにコンパイルを行う。この際のコンパイルは、Fortran等の高級言語の翻訳のために用意された通常のコンパイラ(本発明のコンパイラではないもの)により行われ、ハードウェアとしては、本実施形態のコンパイル装置10を実現しているコンピュータで処理してもよく、別のコンピュータで処理してもよい。
【0109】
以上により、コンパイラ12によるコンパイル処理を終了する(図3のステップS10)。なお、以上に述べたコンパイラ12によるコンパイル処理と同様なプログラムコードの作成作業を、人間が手作業で行うことも可能である。
【0110】
その後、図1に示すように、目的プログラム2またはこれをさらにコンパイルして得られたプログラムを、実行可能なプログラム3として、キャッシュ最適利用演算装置20に搭載する。そして、キャッシュ最適利用演算装置20でプログラム3を実行すると、前述した図11または図12で示すような流れで、DLG10,DLG11,DLG12,DLG13を含むプログラムの処理が実行され、キャッシュラインコンフリクトミスの発生を抑えながら、効率的な演算処理が行われる。
【0111】
また、以上においては、図4に示すようなプログラム100を具体例として挙げて説明を行っていたが、以下では、図13に示すようなプログラム200を具体例とする説明を行う。
【0112】
図13において、プログラム200は、Fortran等の高級言語により記述されている。プログラム200は、パラメータ文が記述された定数値設定部201と、配列宣言部202と、互いにデータ依存を有する複数(ここでは、3つとする。)のループ203,204,205とが含まれている。
【0113】
定数値設定部201では、配列宣言部202で宣言される各配列のサイズを指定するための定数N1,N2の値が定められている。ここでは、N1=513、N2=513とされている。
【0114】
配列宣言部202では、13個の2次元の配列が宣言されている。各配列は、U(N1,N2)、V(N1,N2)、T(N1,N2)、E(N1,N2)、F(N1,N2)、G(N1,N2)、H(N1,N2)、K(N1,N2)、N(N1,N2)、P(N1,N2)、Q(N1,N2)、R(N1,N2)、S(N1,N2)であり、各配列の一つの要素は、real(実数型)で4バイトである。従って、配列Uのサイズは、513×513×4=約1メガバイトである。他の配列V,T,E,F,G,H,K,N,P,Q,R,Sも同様である。また、13個の各配列データの合計サイズは、約13メガバイトである。図13の右側部分には、それぞれ約1メガバイトの13個の配列データを、各ループ203,204,205の処理時に4メガバイトのキャッシュ上に割り当てたときのイメージが示されている。なお、この例では、13個の各配列のサイズが全て同じとされているが、本発明は、各配列のサイズが異なっている場合にも、適用することができる。
【0115】
図13の例の場合には、ターゲットループグループ選択手段13Cにより選択されるターゲットループグループは、3つのループ203,204,205により構成されるターゲットループグループ(以下、TLG2という。)であり、このTLG2を構成する各ループ203,204,205が、ターゲットループグループ格納手段13Dによりターゲットループグループテーブル14に格納される。
【0116】
また、対象配列データ選択手段13Eにより選択される対象配列は、13個の配列U,V,T,E,F,G,H,K,N,P,Q,R,Sであり、これらの13個の各配列データが、対象配列データ格納手段13Fにより対象配列データテーブル15に格納される。
【0117】
さらに、分割数決定手段13Gによる分割数の決定は、次のように行われる。13個の各配列の合計サイズをキャッシュサイズで除すると、約13メガバイト÷4メガバイト=約3.25となるので、分割数は4以上となる。ここでは、4分割とする。
【0118】
そして、ループ整合分割手段13Hによるループ整合分割は、次のように行われる。図14〜図17には、図13のプログラム200についてループ整合分割を行った状態が示されている。図14〜図17の左側部分には、ループ整合分割を行って得られた各データローカライザブルグループが示され、右側部分には、各データローカライザブルグループを構成する各小ループによりアクセスされる部分的な各配列データが、キャッシュ上に割り当てられる状態のイメージが示されている。
【0119】
図13のプログラム200に含まれる3つのループ203,204,205は、図14〜図17に示すように、それぞれ4つの小ループに分割され、これらの小ループにより4つのデータローカライザブルグループが形成される。
【0120】
すなわち、図13のループ203(j=1〜512)については、図14〜図17に示すように、小ループ203A(j=1〜128)と、小ループ203B(j=129〜256)と、小ループ203C(j=257〜384)と、小ループ203D(j=385〜512)とに分割される。図13のループ204(j=1〜512)については、図14〜図17に示すように、小ループ204A(j=1〜128)と、小ループ204B(j=129〜256)と、小ループ204C(j=257〜384)と、小ループ204D(j=385〜512)とに分割される。図13のループ205(j=1〜512)については、図14〜図17に示すように、小ループ205A(j=1〜128)と、小ループ205B(j=129〜256)と、小ループ205C(j=257〜384)と、小ループ205D(j=385〜512)とに分割される。
【0121】
また、図14に示すように、3つの小ループ203A,204A,205Aにより、一つのデータローカライザブルグループ(以下、DLG20という。)が形成される。図14の右下部分に示すように、DLG20を構成する各小ループ203A,204A,205Aによりアクセスされる部分的な各配列データ(図中の斜線部分)は、キャッシュ上の同じ領域に割り当てられ、これによりラインコンフリクトが発生することがわかる。
【0122】
図15に示すように、3つの小ループ203B,204B,205Bにより、一つのデータローカライザブルグループ(以下、DLG21という。)が形成される。図15の右下部分に示すように、DLG21を構成する各小ループ203B,204B,205Bによりアクセスされる部分的な各配列データ(図中の斜線部分)は、キャッシュ上の同じ領域に割り当てられ、これによりラインコンフリクトが発生することがわかる。
【0123】
図16に示すように、3つの小ループ203C,204C,205Cにより、一つのデータローカライザブルグループ(以下、DLG22という。)が形成される。図16の右下部分に示すように、DLG22を構成する各小ループ203C,204C,205Cによりアクセスされる部分的な各配列データ(図中の斜線部分)は、キャッシュ上の同じ領域に割り当てられ、これによりラインコンフリクトが発生することがわかる。
【0124】
図17に示すように、3つの小ループ203D,204D,205Dにより、一つのデータローカライザブルグループ(以下、DLG23という。)が形成される。図17の右下部分に示すように、DLG23を構成する各小ループ203D,204D,205Dによりアクセスされる部分的な各配列データ(図中の斜線部分)は、キャッシュ上の同じ領域に割り当てられ、これによりラインコンフリクトが発生することがわかる。
【0125】
そこで、パディングサイズ決定手段13Kによりパディング用データのサイズを決定する。ここでは、4つの配列データの集合(つまり、4つの合計で約4メガバイト)に対し、一つの部分的な配列データ(つまり、約256キロバイト)と同じか若しくは略同じサイズのパディング用データの挿入を行うものとする。
【0126】
図18〜図21には、パディングを行ってDLG20,DLG21,DLG22,DLG23の実行時にラインコンフリクトが回避される状態の説明図が示されている。図18〜図21の右側部分には、データレイアウト変更手段13Lにより配列E,K,Rの各後ろ側にパディング用のダミーデータ(図中の網掛部分の領域)を挿入した状態が示されている。なお、ダミーデータの挿入ではなく、配列E,K,Rのサイズを拡大してパディングを行ってもよい。
【0127】
図18〜図21において、DLG20,DLG21,DLG22,DLG23を構成する各小ループによりアクセスされる部分的な各配列データ(図中の斜線部分の領域)は、図18〜図21の右下部分に示すように、キャッシュ上に重なることなく割り当てられる。従って、ラインコンフリクトが回避されることがわかる。
【0128】
なお、前述した図4のプログラム100をコンパイルした場合には、図11に示す如く、DLG10,DLG11,DLG12,DLG13をそれぞれ異なるプロセッサ30,31,32,33に割り当てて並列処理させ、あるいは図12に示す如く、DLG10,DLG11,DLG12,DLG13をこの順で一つのプロセッサ30等に処理させるスケジューリングを行っていたが、これと同様に、図13のプログラム200をコンパイルした場合にも、DLG20,DLG21,DLG22,DLG23をそれぞれ異なるプロセッサ30,31,32,33に割り当てて並列処理させるスケジューリングを行ってもよく、あるいはDLG20,DLG21,DLG22,DLG23をこの順で一つのプロセッサ30等に処理させるスケジューリングを行ってもよい。
【0129】
また、図18〜図21においては、配列E,K,Rの各後ろ側にパディング用のダミーデータ(図中の網掛部分の領域)を挿入することによりパディングを行っているが、各配列(但し、最後の配列は除いてもよい。)毎に非連続アクセス次元の配列サイズを拡大し、または各配列(但し、最後の配列は除いてもよい。)のそれぞれの後ろ側にダミーデータを挿入することによりパディングを行ってもよい。
【0130】
図22には、各配列毎に非連続アクセス次元の配列サイズを拡大してパディングを行った状態が示されている。図22の左側部分には、パディング前のラインコンフリクトが起きる状態が示され、右側部分は、パディング後のラインコンフリクトの発生が回避される状態が示されている。
【0131】
図22において、パディング前には、プログラム200(図13参照)中の定数値設定部201で、第1次元目の配列サイズがN1=513、第2次元目の配列サイズがN2=513と指定されているが、データレイアウト変更手段13Lにより非連続アクセス次元である第2次元目の配列サイズN2を、513から544に拡大し、パディング後には、N2=544とする。従って、13個の各配列U,V,T,E,F,G,H,K,N,P,Q,R,Sについて、それぞれ(544−513)×513×4=約64キロバイトの配列サイズの拡大が行われる。これを4つの配列分で合計して考えれば、約64キロバイト×4=約256キロバイトとなるので、前述した図18〜図21のような4つの配列の集合に対してパディングを行う場合と比べ、パディング量は同じになる。なお、最後の配列Sについては、配列サイズを拡大しなくてもよい。また、図22の例では、各配列毎に非連続アクセス次元の配列サイズを拡大することによりパディングを行っているが、各配列のそれぞれの後ろ側にダミーデータを挿入することによりパディングを行ってもよい。
【0132】
このような本実施形態によれば、次のような効果がある。すなわち、コンパイル装置10によりコンパイルを行う際には、ソースプログラム1に含まれるデータ依存を有する複数のループを対象としてループ整合分割行った後、同一のデータローカライザブルグループに属する各小ループ同士を可能な限り連続実行するスケジューリングを行うとともに、パディングを用いて各データローカライザブルグループで使用される配列データについてレイアウト変更を行うので、同一のデータローカライザブルグループに属する整合分割後の各小ループにより使用される複数の部分的な配列データを、キャッシュ上に重なることなく割り当てることができる(図7〜図10、図18〜図21、図22の右側部分参照)。このため、キャッシュラインコンフリクトの発生を抑えることができるので、キャッシュ最適利用演算装置20の処理速度を向上させることができる。
【0133】
また、キャッシュ最適利用演算装置20は、主記憶共有型マルチプロセッサマシンであるが、このような複数のプロセッサを備えたマシンで実行されるプログラムをコンパイル装置10によりコンパイルする際には、同一のデータローカライザブルグループに属する各小ループ同士が、可能な限り同一のプロセッサ上で連続して実行されるスケジューリングを行うので、各データローカライザブルグループで行うループ処理を、複数のプロセッサに分散して行わせることができる。例えば、図11に示すように、DLG10,DLG11,DLG12,DLG13の各処理を、それぞれ異なるプロセッサ30,31,32,33に割り当てることができる。このため、DLG10,DLG11,DLG12,DLG13のループ処理の並列性を利用し、キャッシュ最適利用演算装置20の処理速度を、より一層向上させることができる。
【0134】
なお、本発明は前記実施形態に限定されるものではなく、本発明の目的を達成できる範囲内での変形等は本発明に含まれるものである。
【0135】
すなわち、前記実施形態では、キャッシュ最適利用演算装置20は、主記憶共有型マルチプロセッサマシンであったが、本発明は、マルチプロセッサマシンのみならず、シングルプロセッサマシンにも適用することができる。
【0136】
また、前記実施形態では、図3に示すように、スケジューリング処理(ステップS7)が、パディングサイズの決定処理(ステップS8)およびデータレイアウトの変更処理(ステップS9)の前に行われるようになっていたが、これらの処理順序は、逆順としてもよい。
【0137】
さらに、前記実施形態では、L2キャッシュ50〜53(キャッシュサイズは、例えば4メガバイト等)を対象としてキャッシュ最適化を行っていたが、本発明は、L1キャッシュ70〜73を対象とするキャッシュ最適化を行うこともできる。
【0138】
【発明の効果】
以上に述べたように本発明によれば、ソースプログラムに含まれるデータ依存を有する複数のループを対象としてループ整合分割行った後、同一のデータローカライザブルグループに属する各小ループ同士を可能な限り連続実行するスケジューリングを行うとともに、パディングを用いて各データローカライザブルグループで使用される配列データについてレイアウト変更を行うので、同一のデータローカライザブルグループに属する整合分割後の各小ループにより使用される複数の部分的な配列データを、キャッシュ上に重なることなく割り当てることができ、キャッシュラインコンフリクトの発生を抑えて処理速度を向上させることができるという効果がある。
【図面の簡単な説明】
【図1】本発明の一実施形態のコンパイル装置およびキャッシュ最適利用演算装置の全体構成図。
【図2】前記実施形態のコンパイル装置を機能的に示した構成図。
【図3】前記実施形態のコンパイル装置によるコンパイル処理の流れを示すフローチャートの図。
【図4】前記実施形態のコンパイル対象となるプログラム例、およびこのプログラム中に含まれるキャッシュ最適化対象ループで使用される対象配列データをキャッシュ上に割り当てたときのイメージを示す図。
【図5】前記実施形態のコンパイル対象となるプログラム中に含まれるキャッシュ最適化対象ループについてループ整合分割を行ったときの状態を示す図。
【図6】前記実施形態のループ整合分割で得られたデータローカライザブルグループ(DLG10)の実行時に起きるラインコンフリクト、およびこれを回避するためのパディング量の説明図。
【図7】前記実施形態において、パディングを行ってデータローカライザブルグループ(DLG10)の実行時にラインコンフリクトが回避される状態の説明図。
【図8】前記実施形態において、パディングを行ってデータローカライザブルグループ(DLG11)の実行時にラインコンフリクトが回避される状態の説明図。
【図9】前記実施形態において、パディングを行ってデータローカライザブルグループ(DLG12)の実行時にラインコンフリクトが回避される状態の説明図。
【図10】前記実施形態において、パディングを行ってデータローカライザブルグループ(DLG13)の実行時にラインコンフリクトが回避される状態の説明図。
【図11】前記実施形態において、複数のプロセッサにそれぞれ異なるデータローカライザブルグループを割り当てるスケジューリングを行ったときの実行イメージを示す図。
【図12】前記実施形態において、一つのプロセッサに全てのデータローカライザブルグループを割り当てるスケジューリングを行ったときの実行イメージを示す図。
【図13】前記実施形態のコンパイル対象となる別のプログラム例、およびこのプログラム中に含まれるキャッシュ最適化対象ループで使用される対象配列データをキャッシュ上に割り当てたときのイメージを示す図。
【図14】前記実施形態において、ループ整合分割を行って得られたデータローカライザブルグループ(DLG20)、およびこのDLG20を構成する各小ループによりアクセスされる部分的な各配列データが、キャッシュ上に割り当てられる状態のイメージを示す図。
【図15】前記実施形態において、ループ整合分割を行って得られたデータローカライザブルグループ(DLG21)、およびこのDLG21を構成する各小ループによりアクセスされる部分的な各配列データが、キャッシュ上に割り当てられる状態のイメージを示す図。
【図16】前記実施形態において、ループ整合分割を行って得られたデータローカライザブルグループ(DLG22)、およびこのDLG22を構成する各小ループによりアクセスされる部分的な各配列データが、キャッシュ上に割り当てられる状態のイメージを示す図。
【図17】前記実施形態において、ループ整合分割を行って得られたデータローカライザブルグループ(DLG23)、およびこのDLG23を構成する各小ループによりアクセスされる部分的な各配列データが、キャッシュ上に割り当てられる状態のイメージを示す図。
【図18】前記実施形態において、パディングを行ってデータローカライザブルグループ(DLG20)の実行時にラインコンフリクトが回避される状態の説明図。
【図19】前記実施形態において、パディングを行ってデータローカライザブルグループ(DLG21)の実行時にラインコンフリクトが回避される状態の説明図。
【図20】前記実施形態において、パディングを行ってデータローカライザブルグループ(DLG22)の実行時にラインコンフリクトが回避される状態の説明図。
【図21】前記実施形態において、パディングを行ってデータローカライザブルグループ(DLG23)の実行時にラインコンフリクトが回避される状態の説明図。
【図22】前記実施形態において、パディング前のラインコンフリクトが起きる状態、および各配列毎に非連続アクセス次元の配列サイズを拡大してパディングを行うことによりラインコンフリクトの発生が回避される状態を示す図。
【符号の説明】
1 ソースプログラム
2 目的プログラム
3 プログラム
10 コンパイル装置
13A マクロタスク生成手段
13B 並列性解析手段
13C ターゲットループグループ選択手段
13D ターゲットループグループ格納手段
13E 対象配列データ選択手段
13F 対象配列データ格納手段
13G 分割数決定手段
13H ループ整合分割手段
13J スケジューリング手段
13K パディングサイズ決定手段
13L データレイアウト変更手段
14 ターゲットループグループテーブル
15 対象配列データテーブル
20 キャッシュ最適利用演算装置
30〜33 プロセッサ
40 主メモリ
50〜53 キャッシュメモリであるL2キャッシュ
102,103,203,204,205 ループ
102A,102B,102C,102D,103A,103B,103C,103D,203A,203B,203C,203D,204A,204B,204C,204D,205A,205B,205C,205D 小ループ
DLG10,DLG11,DLG12,DLG13,DLG20,DLG21,DLG22,DLG23 データローカライザブルグループ
TLG1,TLG2 ターゲットループグループ
A,B,C,D,E,F,G,H,K,N,P,Q,R,S,T,U,V 配列

Claims (11)

  1. ソースプログラムをコンパイルして目的プログラムを生成するコンパイラであって、
    前記ソースプログラムをブロック単位で分割して複数のマクロタスクを生成するマクロタスク生成手段と、
    前記各マクロタスクの実行が確定する実行確定条件および前記各マクロタスクの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を解析する並列性解析手段と、
    前記各マクロタスクとして前記ソースプログラムに含まれるデータ依存を有する各ループのうちから、キャッシュメモリを効果的に利用するためのループ整合分割が可能な複数のループを、キャッシュ最適化用のターゲットループグループとして選択するターゲットループグループ選択手段と、
    このターゲットループグループ選択手段により選択された前記ターゲットループグループをターゲットループグループテーブルに格納するターゲットループグループ格納手段と、
    前記ターゲットループグループを構成する前記複数のループによりそれぞれ使用される各配列データを、キャッシュ最適化用の対象配列データとして選択する対象配列データ選択手段と、
    この対象配列データ選択手段により選択された前記各対象配列データを対象配列データテーブルに格納する対象配列データ格納手段と、
    前記各対象配列データの合計サイズおよび前記キャッシュメモリのサイズに基づき、前記ターゲットループグループを構成する前記複数のループの分割数を決定する分割数決定手段と、
    この分割数決定手段により決定した前記分割数に基づき、前記ターゲットループグループテーブルに格納された前記ターゲットループグループを構成する前記複数のループをそれぞれ分割して前記各ループについてそれぞれ複数の小ループを生成し、これらの各小ループのうち同一の部分的な前記対象配列データを使用する小ループ同士を集合させて複数のデータローカライザブルグループを形成するループ整合分割手段と、
    前記各小ループの実行が確定する実行確定条件および前記各小ループの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を満たす範囲内で、同一の前記データローカライザブルグループに属する前記各小ループ同士が、可能な限り連続して実行されるスケジューリングを行うスケジューリング手段と、
    前記各データローカライザブルグループに属する前記各小ループにより使用される部分的な前記各対象配列データ同士が前記キャッシュメモリ上で重なりを持たないように、前記各対象配列データの主メモリへの格納位置をずらすために挿入するパディング用データのサイズを決定するパディングサイズ決定手段と、
    このパディングサイズ決定手段により決定した前記サイズに相当するパディング用データを、前記対象配列データテーブルに格納された前記対象配列データの内部または前記対象配列データ間に挿入することによりパディングを用いたデータレイアウト変更を行うデータレイアウト変更手段として、
    コンピュータを機能させることを特徴とするコンパイラ。
  2. 請求項1に記載のコンパイラにおいて、
    前記スケジューリング手段は、複数のプロセッサを用いて並列処理を行うためのマルチプロセッサ用のスケジューリングを行う際には、
    前記最早実行可能条件を満たす範囲内で、同一の前記データローカライザブルグループに属する前記各小ループ同士が、可能な限り同一のプロセッサ上で連続して実行されるスケジューリングを行う構成とされている
    ことを特徴とするコンパイラ。
  3. 請求項1または2に記載のコンパイラにおいて、
    前記パディングは、前記各データローカライザブルグループに属する前記各小ループに より使用される配列とは異なるデータにより確保される領域である
    ことを特徴とするコンパイラ。
  4. 請求項1または2に記載のコンパイラにおいて、
    前記パディングは、前記各データローカライザブルグループに属する前記各小ループにより使用される配列のうちの少なくとも一つの配列のサイズを、非連続アクセス次元について拡大して確保される領域である
    ことを特徴とするコンパイラ。
  5. 請求項4に記載のコンパイラにおいて、
    前記パディングは、前記各データローカライザブルグループに属する前記各小ループにより使用される配列のサイズを、各配列毎にそれぞれ非連続アクセス次元について拡大して確保される領域である
    ことを特徴とするコンパイラ。
  6. ソースプログラムをコンパイルして目的プログラムを生成するコンパイル装置であって、
    前記ソースプログラムをブロック単位で分割して複数のマクロタスクを生成するマクロタスク生成手段と、
    前記各マクロタスクの実行が確定する実行確定条件および前記各マクロタスクの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を解析する並列性解析手段と、
    前記各マクロタスクとして前記ソースプログラムに含まれるデータ依存を有する各ループのうちから、キャッシュメモリを効果的に利用するためのループ整合分割が可能な複数のループを、キャッシュ最適化用のターゲットループグループとして選択するターゲットループグループ選択手段と、
    このターゲットループグループ選択手段により選択された前記ターゲットループグループを格納するターゲットループグループテーブルと、
    前記ターゲットループグループを構成する前記複数のループによりそれぞれ使用される各配列データを、キャッシュ最適化用の対象配列データとして選択する対象配列データ選択手段と、
    この対象配列データ選択手段により選択された前記各対象配列データを格納する対象配列データテーブルと、
    前記各対象配列データの合計サイズおよび前記キャッシュメモリのサイズに基づき、前記ターゲットループグループを構成する前記複数のループの分割数を決定する分割数決定手段と、
    この分割数決定手段により決定した前記分割数に基づき、前記ターゲットループグループテーブルに格納された前記ターゲットループグループを構成する前記複数のループをそれぞれ分割して前記各ループについてそれぞれ複数の小ループを生成し、これらの各小ループのうち同一の部分的な前記対象配列データを使用する小ループ同士を集合させて複数のデータローカライザブルグループを形成するループ整合分割手段と、
    前記各小ループの実行が確定する実行確定条件および前記各小ループの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を満たす範囲内で、同一の前記データローカライザブルグループに属する前記各小ループ同士が、可能な限り連続して実行されるスケジューリングを行うスケジューリング手段と、
    前記各データローカライザブルグループに属する前記各小ループにより使用される部分的な前記各対象配列データ同士が前記キャッシュメモリ上で重なりを持たないように、前記各対象配列データの主メモリへの格納位置をずらすために挿入するパディング用データのサイズを決定するパディングサイズ決定手段と、
    このパディングサイズ決定手段により決定した前記サイズに相当するパディング用データを、前記対象配列データテーブルに格納された前記対象配列データの内部または前記対象配列データ間に挿入することによりパディングを用いたデータレイアウト変更を行うデータレイアウト変更手段と
    を備えたことを特徴とするコンパイル装置。
  7. 請求項6に記載のコンパイル装置において、
    前記スケジューリング手段は、複数のプロセッサを用いて並列処理を行うためのマルチプロセッサ用のスケジューリングを行う際には、
    前記最早実行可能条件を満たす範囲内で、同一の前記データローカライザブルグループに属する前記各小ループ同士が、可能な限り同一のプロセッサ上で連続して実行されるスケジューリングを行う構成とされている
    ことを特徴とするコンパイル装置。
  8. 請求項6または7に記載のコンパイル装置において、
    前記パディングは、前記各データローカライザブルグループに属する前記各小ループにより使用される配列とは異なるデータにより確保される領域である
    ことを特徴とするコンパイル装置。
  9. 請求項6または7に記載のコンパイル装置において、
    前記パディングは、前記各データローカライザブルグループに属する前記各小ループにより使用される配列のうちの少なくとも一つの配列のサイズを、非連続アクセス次元について拡大して確保される領域である
    ことを特徴とするコンパイル装置。
  10. 請求項9に記載のコンパイル装置において、
    前記パディングは、前記各データローカライザブルグループに属する前記各小ループにより使用される配列のサイズを、各配列毎にそれぞれ非連続アクセス次元について拡大して確保される領域である
    ことを特徴とするコンパイル装置。
  11. ソースプログラムをコンパイルして目的プログラムを生成する処理を実行するコンピュータにより構成されたコンパイル装置で実行されるコンパイル方法であって、
    マクロタスク生成手段が、前記ソースプログラムをブロック単位で分割して複数のマクロタスクを生成する処理を実行し、
    並列性解析手段が、前記各マクロタスクの実行が確定する実行確定条件および前記各マクロタスクの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を解析する処理を実行し、
    ターゲットループグループ選択手段が、前記各マクロタスクとして前記ソースプログラムに含まれるデータ依存を有する各ループのうちから、キャッシュメモリを効果的に利用するためのループ整合分割が可能な複数のループを、キャッシュ最適化用のターゲットループグループとして選択する処理を実行し、
    ターゲットループグループ格納手段が、前記ターゲットループグループ選択手段により選択された前記ターゲットループグループをターゲットループグループテーブルに格納する処理を実行し、
    対象配列データ選択手段が、前記ターゲットループグループを構成する前記複数のループによりそれぞれ使用される各配列データを、キャッシュ最適化用の対象配列データとして選択する処理を実行し、
    対象配列データ格納手段が、前記対象配列データ選択手段により選択された前記各対象配列データを対象配列データテーブルに格納する処理を実行し、
    分割数決定手段が、前記各対象配列データの合計サイズおよび前記キャッシュメモリのサイズに基づき、前記ターゲットループグループを構成する前記複数のループの分割数を決定する処理を実行し、
    ループ整合分割手段が、前記分割数決定手段により決定した前記分割数に基づき、前記ターゲットループグループテーブルに格納された前記ターゲットループグループを構成する前記複数のループをそれぞれ分割して前記各ループについてそれぞれ複数の小ループを生成し、これらの各小ループのうち同一の部分的な前記対象配列データを使用する小ループ同士を集合させて複数のデータローカライザブルグループを形成する処理を実行し、
    スケジューリング手段が、前記各小ループの実行が確定する実行確定条件および前記各小ループの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を満たす範囲内で、同一の前記データローカライザブルグループに属する前記各小ループ同士が、可能な限り連続して実行されるスケジューリングを行う処理を実行し、
    パディングサイズ決定手段が、前記各データローカライザブルグループに属する前記各小ループにより使用される部分的な前記各対象配列データ同士が前記キャッシュメモリ上で重なりを持たないように、前記各対象配列データの主メモリへの格納位置をずらすために挿入するパディング用データのサイズを決定する処理を実行し、
    データレイアウト変更手段が、前記パディングサイズ決定手段により決定した前記サイズに相当するパディング用データを、前記対象配列データテーブルに格納された前記対象配列データの内部または前記対象配列データ間に挿入することによりパディングを用いたデータレイアウト変更を行う処理を実行する
    ことを特徴とするコンパイル方法。
JP2003042628A 2003-02-20 2003-02-20 コンパイル方法、コンパイラ、およびコンパイル装置 Expired - Lifetime JP4177681B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2003042628A JP4177681B2 (ja) 2003-02-20 2003-02-20 コンパイル方法、コンパイラ、およびコンパイル装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003042628A JP4177681B2 (ja) 2003-02-20 2003-02-20 コンパイル方法、コンパイラ、およびコンパイル装置

Publications (2)

Publication Number Publication Date
JP2004252728A JP2004252728A (ja) 2004-09-09
JP4177681B2 true JP4177681B2 (ja) 2008-11-05

Family

ID=33025857

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003042628A Expired - Lifetime JP4177681B2 (ja) 2003-02-20 2003-02-20 コンパイル方法、コンパイラ、およびコンパイル装置

Country Status (1)

Country Link
JP (1) JP4177681B2 (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102016201612A1 (de) 2015-02-05 2016-08-11 Denso Corporation Parallelisierungskompilierungsverfahren, Parallelisierungskompilierer und elektronische Vorrichtung
DE102016204960A1 (de) 2015-03-31 2016-10-06 Denso Corporation Parallelisierungskompilierverfahren, Parallelisierungskompilierer und Fahrzeugvorrichtung
DE102016204963A1 (de) 2015-03-31 2016-10-06 Denso Corporation Parallelisierungskompilierverfahren, Parallelisierungskompilierer und Fahrzeugvorrichtung
US9760355B2 (en) 2013-06-14 2017-09-12 Denso Corporation Parallelizing compile method, parallelizing compiler, parallelizing compile apparatus, and onboard apparatus
EP3343351A1 (en) 2016-12-28 2018-07-04 Waseda University Parallel program generating method and parallelization compiling apparatus

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4082706B2 (ja) 2005-04-12 2008-04-30 学校法人早稲田大学 マルチプロセッサシステム及びマルチグレイン並列化コンパイラ
JP4936517B2 (ja) 2006-06-06 2012-05-23 学校法人早稲田大学 ヘテロジニアス・マルチプロセッサシステムの制御方法及びマルチグレイン並列化コンパイラ
JP4784827B2 (ja) 2006-06-06 2011-10-05 学校法人早稲田大学 ヘテロジニアスマルチプロセッサ向けグローバルコンパイラ
WO2012020478A1 (ja) 2010-08-10 2012-02-16 富士通株式会社 スケジューラ、マルチコアプロセッサシステムおよびスケジューリング方法
KR101754998B1 (ko) 2011-01-27 2017-07-06 삼성전자주식회사 멀티 코어 시스템 및 멀티 코어 시스템에서의 데이터 병렬 처리 방법
JP5706754B2 (ja) * 2011-05-13 2015-04-22 キヤノン株式会社 データ処理装置及びデータ処理方法
US9176716B2 (en) * 2013-04-18 2015-11-03 Siemens Aktiengesellschaft Method and apparatus for exploiting data locality in dynamic task scheduling
JP6432333B2 (ja) 2014-12-16 2018-12-05 富士通株式会社 情報処理装置、データ処理方法、およびデータ処理プログラム
JP7367365B2 (ja) * 2019-07-23 2023-10-24 富士通株式会社 タスク実行管理装置、タスク実行管理方法、および、タスク実行管理プログラム

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9760355B2 (en) 2013-06-14 2017-09-12 Denso Corporation Parallelizing compile method, parallelizing compiler, parallelizing compile apparatus, and onboard apparatus
DE102016201612A1 (de) 2015-02-05 2016-08-11 Denso Corporation Parallelisierungskompilierungsverfahren, Parallelisierungskompilierer und elektronische Vorrichtung
DE102016204960A1 (de) 2015-03-31 2016-10-06 Denso Corporation Parallelisierungskompilierverfahren, Parallelisierungskompilierer und Fahrzeugvorrichtung
DE102016204963A1 (de) 2015-03-31 2016-10-06 Denso Corporation Parallelisierungskompilierverfahren, Parallelisierungskompilierer und Fahrzeugvorrichtung
EP3343351A1 (en) 2016-12-28 2018-07-04 Waseda University Parallel program generating method and parallelization compiling apparatus

Also Published As

Publication number Publication date
JP2004252728A (ja) 2004-09-09

Similar Documents

Publication Publication Date Title
JP4177681B2 (ja) コンパイル方法、コンパイラ、およびコンパイル装置
US8266603B2 (en) Technique for allocating register to variable for compiling
US9798528B2 (en) Software solution for cooperative memory-side and processor-side data prefetching
US7926046B2 (en) Compiler method for extracting and accelerator template program
JP3601341B2 (ja) 並列プログラム生成方法
US20060048121A1 (en) Method and apparatus for a generic language interface to apply loop optimization transformations
JP2008217134A (ja) メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム
JP2007531075A (ja) プログラム・コードを変換するための共用コード・キャッシングの方法および装置
US6148439A (en) Nested loop data prefetching using inner loop splitting and next outer loop referencing
JPH1069389A (ja) ブランチの再配置によるタグなしブランチ予測キャッシュを活用する装置
US7107583B2 (en) Method and apparatus for reducing cache thrashing
Colombet et al. Studying optimal spilling in the light of SSA
US9146719B2 (en) Data layout using data type information
Liu et al. Programming in VS Fortran on the IBM 3090 for maximum vector performance
US11226798B2 (en) Information processing device and information processing method
Sharma et al. Data layout optimization for portable performance
Shin et al. Exploiting superword-level locality in multimedia extension architectures
Sampaio et al. Spill code placement for simd machines
Sakdhnagool et al. RegDem: Increasing GPU performance via shared memory register spilling
Lin et al. Automatic loop tiling for direct memory access
JP3638171B2 (ja) 資源割付装置
JP6442967B2 (ja) 情報処理プログラム、情報処理装置、情報処理方法
JP7035751B2 (ja) コード変換装置、コード変換方法、及びコード変換プログラム
Kim et al. WCET-aware function-level dynamic code management on scratchpad memory
Kelefouras A methodology pruning the search space of six compiler transformations by addressing them together as one problem and by exploiting the hardware architecture details

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20051125

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20080410

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080603

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080717

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: 20080819

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080822

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110829

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4177681

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140829

Year of fee payment: 6

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S201 Request for registration of exclusive licence

Free format text: JAPANESE INTERMEDIATE CODE: R314201

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S804 Written request for registration of cancellation of exclusive licence

Free format text: JAPANESE INTERMEDIATE CODE: R314803

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term