(57)【要約】【課題】ラインコンフリクトを含めたトータルなキャッシュミスを軽減でき、処理速度を向上させることができるコンパイル方法、コンパイラ、コンパイル装置、プログラムコード作成方法、プログラム、キャッシュ最適利用演算方法、およびキャッシュ最適利用演算装置を提供すること。【解決手段】ループ整合分割を行った後、同一データローカライザブルグループ（ＤＬＧ）に属する各小ループ同士を可能な限り連続実行するスケジューリングを行うとともに、パディングを用いて各ＤＬＧで使用される配列データについてレイアウト変更を行うことにより、同一ＤＬＧに属する各小ループにより使用される複数の部分的な配列データをキャッシュ上に重なることなく割り当てる。【選択図】  図１８
2004252728.tif 000002
【特許請求の範囲】
【請求項１】
ソースプログラムをコンパイルして目的プログラムを生成するコンパイル方法であって、
前記ソースプログラムに含まれるデータ依存を有する複数のループをそれぞれ分割して前記各ループについてそれぞれ複数の小ループを生成し、これらの各小ループのうち同一の部分的な配列データを使用する小ループ同士を集合させて複数のデータローカライザブルグループを形成し、かつ、この分割・グループ化処理の際には、前記各データローカライザブルグループに属する前記各小ループによりそれぞれ使用される部分的な各配列データの合計サイズが、前記各データローカライザブルグループ毎にキャッシュメモリのサイズ以下に収まるように整合分割を行い、
その後、前記各小ループの実行が確定する実行確定条件および前記各小ループの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を満たす範囲内で、同一の前記データローカライザブルグループに属する前記各小ループ同士が、可能な限り連続して実行されるスケジューリングを行うとともに、
前記各データローカライザブルグループに属する前記各小ループにより使用される部分的な前記各配列データ同士が前記キャッシュメモリ上で重なりを持たないように、前記各配列データに対してパディングを用いたデータレイアウト変更を行う
ことを特徴とするコンパイル方法。
【請求項２】
請求項１に記載のコンパイル方法において、
複数のプロセッサを用いて並列処理を行うためのマルチプロセッサ用のスケジューリングを行う際には、
前記最早実行可能条件を満たす範囲内で、同一の前記データローカライザブルグループに属する前記各小ループ同士が、可能な限り同一のプロセッサ上で連続して実行されるスケジューリングを行う
ことを特徴とするコンパイル方法。
【請求項３】
請求項１または２に記載のコンパイル方法において、
前記パディングは、前記各データローカライザブルグループに属する前記各小ループにより使用される配列とは異なるデータにより確保される領域である
ことを特徴とするコンパイル方法。
【請求項４】
請求項１または２に記載のコンパイル方法において、
前記パディングは、前記各データローカライザブルグループに属する前記各小ループにより使用される配列のうちの少なくとも一つの配列のサイズを、非連続アクセス次元について拡大して確保される領域である
ことを特徴とするコンパイル方法。
【請求項５】
請求項４に記載のコンパイル方法において、
前記パディングは、前記各データローカライザブルグループに属する前記各小ループにより使用される配列のサイズを、各配列毎にそれぞれ非連続アクセス次元について拡大して確保される領域である
ことを特徴とするコンパイル方法。
【請求項６】
請求項１〜５のいずれかに記載のコンパイル方法を用いてコンパイルを行うことを特徴とするコンパイラ。
【請求項７】
ソースプログラムをコンパイルして目的プログラムを生成するコンパイラであって、
前記ソースプログラムをブロック単位で分割して複数のマクロタスクを生成するマクロタスク生成手段と、
前記各マクロタスクの実行が確定する実行確定条件および前記各マクロタスクの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を解析する並列性解析手段と、
前記各マクロタスクとして前記ソースプログラムに含まれるデータ依存を有する各ループのうちから、キャッシュメモリを効果的に利用するためのループ整合分割が可能な複数のループを、キャッシュ最適化用のターゲットループグループとして選択するターゲットループグループ選択手段と、
このターゲットループグループ選択手段により選択された前記ターゲットループグループをターゲットループグループテーブルに格納するターゲットループグループ格納手段と、
前記ターゲットループグループを構成する前記複数のループによりそれぞれ使用される各配列データを、キャッシュ最適化用の対象配列データとして選択する対象配列データ選択手段と、
この対象配列データ選択手段により選択された前記各対象配列データを対象配列データテーブルに格納する対象配列データ格納手段と、
前記各対象配列データの合計サイズおよび前記キャッシュメモリのサイズに基づき、前記ターゲットループグループを構成する前記複数のループの分割数を決定する分割数決定手段と、
この分割数決定手段により決定した前記分割数に基づき、前記ターゲットループグループテーブルに格納された前記ターゲットループグループを構成する前記複数のループをそれぞれ分割して前記各ループについてそれぞれ複数の小ループを生成し、これらの各小ループのうち同一の部分的な前記対象配列データを使用する小ループ同士を集合させて複数のデータローカライザブルグループを形成するループ整合分割手段と、
前記各小ループの実行が確定する実行確定条件および前記各小ループの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を満たす範囲内で、同一の前記データローカライザブルグループに属する前記各小ループ同士が、可能な限り連続して実行されるスケジューリングを行うスケジューリング手段と、
前記各データローカライザブルグループに属する前記各小ループにより使用される部分的な前記各対象配列データ同士が前記キャッシュメモリ上で重なりを持たないように、前記各対象配列データの主メモリへの格納位置をずらすために挿入するパディング用データのサイズを決定するパディングサイズ決定手段と、
このパディングサイズ決定手段により決定した前記サイズに相当するパディング用データを、前記対象配列データテーブルに格納された前記対象配列データの内部または前記対象配列データ間に挿入することによりパディングを用いたデータレイアウト変更を行うデータレイアウト変更手段として、
コンピュータを機能させることを特徴とするコンパイラ。
【請求項８】
ソースプログラムをコンパイルして目的プログラムを生成するコンパイル装置であって、
前記ソースプログラムをブロック単位で分割して複数のマクロタスクを生成するマクロタスク生成手段と、
前記各マクロタスクの実行が確定する実行確定条件および前記各マクロタスクの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を解析する並列性解析手段と、
前記各マクロタスクとして前記ソースプログラムに含まれるデータ依存を有する各ループのうちから、キャッシュメモリを効果的に利用するためのループ整合分割が可能な複数のループを、キャッシュ最適化用のターゲットループグループとして選択するターゲットループグループ選択手段と、
このターゲットループグループ選択手段により選択された前記ターゲットループグループを格納するターゲットループグループテーブルと、
前記ターゲットループグループを構成する前記複数のループによりそれぞれ使用される各配列データを、キャッシュ最適化用の対象配列データとして選択する対象配列データ選択手段と、
この対象配列データ選択手段により選択された前記各対象配列データを格納する対象配列データテーブルと、
前記各対象配列データの合計サイズおよび前記キャッシュメモリのサイズに基づき、前記ターゲットループグループを構成する前記複数のループの分割数を決定する分割数決定手段と、
この分割数決定手段により決定した前記分割数に基づき、前記ターゲットループグループテーブルに格納された前記ターゲットループグループを構成する前記複数のループをそれぞれ分割して前記各ループについてそれぞれ複数の小ループを生成し、これらの各小ループのうち同一の部分的な前記対象配列データを使用する小ループ同士を集合させて複数のデータローカライザブルグループを形成するループ整合分割手段と、
前記各小ループの実行が確定する実行確定条件および前記各小ループの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を満たす範囲内で、同一の前記データローカライザブルグループに属する前記各小ループ同士が、可能な限り連続して実行されるスケジューリングを行うスケジューリング手段と、
前記各データローカライザブルグループに属する前記各小ループにより使用される部分的な前記各対象配列データ同士が前記キャッシュメモリ上で重なりを持たないように、前記各対象配列データの主メモリへの格納位置をずらすために挿入するパディング用データのサイズを決定するパディングサイズ決定手段と、
このパディングサイズ決定手段により決定した前記サイズに相当するパディング用データを、前記対象配列データテーブルに格納された前記対象配列データの内部または前記対象配列データ間に挿入することによりパディングを用いたデータレイアウト変更を行うデータレイアウト変更手段と
を備えたことを特徴とするコンパイル装置。
【請求項９】
プログラムを構成するコードを作成するプログラムコード作成方法であって、
実行対象とするデータ依存を有する複数のループをそれぞれ分割して前記各ループについてそれぞれ複数の小ループを作成し、これらの各小ループのうち同一の部分的な配列データを使用する小ループ同士を集合させて複数のデータローカライザブルグループを形成し、かつ、この分割・グループ化作業の際には、前記各データローカライザブルグループに属する前記各小ループによりそれぞれ使用される部分的な各配列データの合計サイズが、前記各データローカライザブルグループ毎にキャッシュメモリのサイズ以下に収まるように整合分割を行い、
その後、前記各小ループの実行が確定する実行確定条件および前記各小ループの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を満たす範囲内で、同一の前記データローカライザブルグループに属する前記各小ループ同士が、可能な限り連続して実行されるようにスケジューリングを行うとともに、
前記各データローカライザブルグループに属する前記各小ループにより使用される部分的な前記各配列データ同士が前記キャッシュメモリ上で重なりを持たないように、前記各配列データをパディングを用いてレイアウトする
ことを特徴とするプログラムコード作成方法。
【請求項１０】
請求項９に記載のプログラムコード作成方法において、
複数のプロセッサを用いて並列処理を行うためのマルチプロセッサ用のスケジューリングを行う際には、
前記最早実行可能条件を満たす範囲内で、同一の前記データローカライザブルグループに属する前記各小ループ同士が、可能な限り同一のプロセッサ上で連続して実行されるようにスケジューリングを行う
ことを特徴とするプログラムコード作成方法。
【請求項１１】
請求項１〜５のいずれかに記載のコンパイル方法または請求項９，１０のいずれかに記載のプログラムコード作成方法を用いて生成または作成されたことを特徴とするプログラム。
【請求項１２】
請求項６または７に記載のコンパイラにより生成されたことを特徴とするプログラム。
【請求項１３】
プロセッサと、主メモリと、これらの間に設けられたキャッシュメモリとを備えた演算装置を用いて、
請求項１１または１２に記載のプログラムを実行することにより、キャッシュラインコンフリクトミスの発生を抑えながら前記キャッシュメモリを利用して演算処理を行う
ことを特徴とするキャッシュ最適利用演算方法。
【請求項１４】
プロセッサと、主メモリと、これらの間に設けられたキャッシュメモリとを備え、
請求項１１または１２に記載のプログラムが搭載され、このプログラムが実行されることにより、キャッシュラインコンフリクトミスの発生を抑えながら前記キャッシュメモリが利用されて演算処理が行われる構成とされている
ことを特徴とするキャッシュ最適利用演算装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ソースプログラムをコンパイルして目的プログラムを生成するコンパイル方法、コンパイラ、およびコンパイル装置、プログラムを構成するコードを作成するプログラムコード作成方法、これらにより生成または作成されたプログラム、並びにこれらのプログラムを用いたキャッシュ最適利用演算方法およびキャッシュ最適利用演算装置に係り、例えば、主記憶共有型マルチプロセッサマシンを用いてキャッシュメモリを効果的に利用して演算を行う場合等に利用できる。
【０００２】
【背景技術】
一般に、多くのコンピュータは、高速に動作するプロセッサと、アクセス速度の遅い主メモリと、これらの速度のギャップを埋めるために設けられたアクセス速度の速い比較的小容量のキャッシュメモリとを備えている。主メモリとキャッシュメモリ（以下、単にキャッシュということがある。）との間のデータ転送単位はブロックと称されている。主メモリから転送されてくるブロックを、キャッシュ上のいずれのキャッシュラインに置くかを決定する方式には、フルアソシアティブ方式、セットアソシアティブ方式、およびダイレクトマップ方式の３種類がある。
【０００３】
ダイレクトマップ方式では、主メモリから転送されてくる各ブロックの一つ一つは、ある一つの決まったキャッシュライン（例えば、主メモリのアドレスの下位ビットによりキャッシュラインのアドレスを決めることが多い。）にマッピングされるので、一度キャッシュライン上に置かれたデータであっても、同一のキャッシュラインにマッピングされるブロックに含まれるデータの参照があると、キャッシュライン上に置かれたデータは、キャッシュから追い出され、次の参照時には、キャッシュ上に存在しない状態となる。この現象をキャッシュラインコンフリクトと呼び、これによって生じるキャッシュミスをキャッシュラインコンフリクトミスという。
【０００４】
また、セットアソシアティブ方式では、主メモリから転送されてくる各ブロックの一つ一つは、ある決められた複数（ｎウェイ・セットアソシアティブの場合には、ｎ個）のキャッシュラインにマッピングされ、空いている方のキャッシュラインに置かれるが、空いているキャッシュラインが無ければ、ダイレクトマップ方式の場合と同様に、キャッシュラインコンフリクトが起きる。
【０００５】
従って、ダイレクトマップ方式やセットアソシアティブ方式のキャッシュを備えたコンピュータでは、プログラムによってはキャッシュラインコンフリクトが多発し、処理速度が著しく低下する場合がある。
【０００６】
そこで、従来より、このようなキャッシュラインコンフリクトミスを削減する方法として、例えば、変数の宣言サイズを変更する変数内パディング（Ｉｎｔｒａ−ｖａｒｉａｂｌｅ  ｐａｄｄｉｎｇ）、複数変数の間にダミー変数を入れる変数間パディング（Ｉｎｔｅｒ−ｖａｒｉａｂｌｅ  ｐａｄｄｉｎｇ）等のデータレイアウト変更による手法などが研究されている（例えば、特許文献１等参照）。
【０００７】
一方、マルチプロセッサシステムの実効性能を向上させるためのマルチグレイン並列処理の粗粒度タスク並列処理においても、データローカライゼーション手法が研究されてきた。データローカライゼーション手法をＳＭＰマシン上のキャッシュに応用し、データを共有する粗粒度タスクを同一プロセッサ上で連続実行させることにより、粗粒度タスク間でのデータ転送にキャッシュを有効利用する手法が本願出願人により提案されている（非特許文献１，２参照）。
【０００８】
なお、この粗粒度タスク並列処理においては、ソースプログラムを階層的に分割してマクロタスクを生成し、マクロタスク間のコントロールフロー、データ依存を解析した後に、マクロタスク間の並列性を抽出するために、各マクロタスクの最早実行可能条件を解析するという手順がとられる。マクロタスクの最早実行可能条件とは、そのマクロタスクが最も早い時点で実行可能になる条件である（非特許文献３参照）。
【０００９】
【特許文献１】
特開平８−２１２０８１号公報（段落［００２１］〜［００２４］、［００２７］、［００２８］、［００９４］、図１５）
【非特許文献１】
笠原博徳（Ｈｉｒｏｎｏｒｉ  Ｋａｓａｈａｒａ），外１名，「ア・データ−ローカライゼーション・コンピレーション・スキーム・ユーズィング・パーシャル−スタティック・タスク・アサインメント・フォー・フォートラン・コース−グレイン・パラレル・プロセスィング（Ａ  ｄａｔａ−ｌｏｃａｌｉｚａｔｉｏｎ  ｃｏｍｐｉｌａｔｉｏｎ  ｓｃｈｅｍｅ  ｕｓｉｎｇ  ｐａｒｔｉａｌ−ｓｔａｔｉｃ  ｔａｓｋ  ａｓｓｉｇｎｍｅｎｔ  ｆｏｒ  Ｆｏｒｔｒａｎ  ｃｏａｒｓｅ−ｇｒａｉｎ  ｐａｒａｌｌｅｌ  ｐｒｏｃｅｓｓｉｎｇ）」，パラレル・コンピューティング（ＰＡＲＡＬＬＥＬ  ＣＯＭＰＵＴＩＮＧ），（オランダ），パラレル・コンピューティング（ＰＡＲＡＬＬＥＬ  ＣＯＭＰＵＴＩＮＧ）発行，１９９８年，Ｐａｒａｌｌｅｌ  Ｃｏｍｐｕｔｉｎｇ２４（１９９８），ｐ．５７９−５９６
【非特許文献２】
石坂，中野，八木，小幡，笠原，「共有メモリマルチプロセッサ上でのキャッシュ最適化を考慮した粗粒度タスク並列処理」，情報処理学会論文誌，情報処理学会発行，２００２年，Ｖｏｌ．４３，Ｎｏ．４
【非特許文献３】
笠原博徳，「並列処理技術」，コロナ社発行，１９９１年６月２０日（初版），ｐ．１４０−１４８
【００１０】
【発明が解決しようとする課題】
前述したように、従来より単一ループ、若しくは複数のループを融合したループ（このループフュージョンについては、前述した非特許文献３のｐ．１２５−１２８に詳述されている。）に対するコンフリクトミスの削減法が研究されている。これらの技術は、主として、同一イタレーションで使用する配列間でラインコンフリクトミスを削減するためのパディングや、外側ループのイタレーションで使用したデータを次のイタレーションで使用する場合に、それらの間でデータがキャッシュから追い出されないようにするためのパディング法である。
【００１１】
しかし、従来のパディングは、コンフリクトミス削減により単一ループ内でのローカリティの向上を図ることはできるが、複数のループ間でアクセスされるデータに対してグローバルなコンフリクトミスの削減を行うことはできないという問題があった。
【００１２】
また、従来のデータローカライゼーション手法では、同一のデータローカライザブルグループに属する分割ループ集合間でアクセスされるデータ集合を同一プロセッサ上のキャッシュに割り当てることにより、キャッシュミスは軽減できるものの、ラインコンフリクトの削減はできないという問題があった（後述する図６の右上部分、図１４〜図１７の各右側部分、図２２の左側部分参照）。
【００１３】
本発明の目的は、ラインコンフリクトを含めたトータルなキャッシュミスを軽減でき、処理速度を向上させることができるコンパイル方法、コンパイラ、コンパイル装置、プログラムコード作成方法、プログラム、キャッシュ最適利用演算方法、およびキャッシュ最適利用演算装置を提供するところにある。
【００１４】
【課題を解決するための手段】
本発明は、ソースプログラムをコンパイルして目的プログラムを生成するコンパイル方法であって、ソースプログラムに含まれるデータ依存を有する複数のループをそれぞれ分割して各ループについてそれぞれ複数の小ループを生成し、これらの各小ループのうち同一の部分的な配列データを使用する小ループ同士を集合させて複数のデータローカライザブルグループを形成し、かつ、この分割・グループ化処理の際には、各データローカライザブルグループに属する各小ループによりそれぞれ使用される部分的な各配列データの合計サイズが、各データローカライザブルグループ毎にキャッシュメモリのサイズ以下に収まるように整合分割を行い、その後、各小ループの実行が確定する実行確定条件および各小ループの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を満たす範囲内で、同一のデータローカライザブルグループに属する各小ループ同士が、可能な限り連続して実行されるスケジューリングを行うとともに、各データローカライザブルグループに属する各小ループにより使用される部分的な各配列データ同士がキャッシュメモリ上で重なりを持たないように、各配列データに対してパディングを用いたデータレイアウト変更を行うことを特徴とするものである。
【００１５】
ここで、本発明における「コンパイル」とは、広義のコンパイルを意味し、ソースプログラムから機械語コードにより構成される狭義のオブジェクトプログラムへの変換処理（狭義のコンパイル）のみならず、例えばＦｏｒｔｒａｎ等の高級言語コードにより構成されるソースプログラムから同じＦｏｒｔｒａｎ等の高級言語コードにより構成されるプログラムへの変換処理も含まれる。さらに、リンカ（リンケージ・エディタ）によって実行可能プログラムとされる前の状態のプログラムへの変換処理も含まれる。以下の発明においても同様である。
【００１６】
また、本発明における「目的プログラム」とは、機械語コードにより構成される狭義のオブジェクトプログラムのみならず、例えばＦｏｒｔｒａｎ等の高級言語コードにより構成されるプログラムも含まれる。さらに、リンカによって実行可能プログラムとされる前の状態のプログラムも含まれる。以下の発明においても同様である。
【００１７】
さらに、「部分的な配列データ」とは、一つの配列データのうちの一部分をいい、その配列データを使用するループを分割することにより生じるものである。例えば、配列データがＡ（１：１０２４，１：１０２４）であるときに、Ａ（１：１０２４，１：２５６）やＡ（１：１０２４，２５７：５１２）等が部分的な配列データに相当する。
【００１８】
そして、「各データローカライザブルグループに属する各小ループによりそれぞれ使用される部分的な各配列データの合計サイズが、各データローカライザブルグループ毎にキャッシュメモリのサイズ以下に収まるように整合分割を行い」とは、同一のデータローカライザブルグループに属する各小ループにより使用される複数の部分的な配列データの合計サイズが、キャッシュサイズ以下に収まるように整合分割するという意味であり、このことが各データローカライザブルグループ毎に、それぞれ成立するという意味である。
【００１９】
また、「各データローカライザブルグループに属する各小ループにより使用される部分的な各配列データ同士がキャッシュメモリ上で重なりを持たないように、各配列データに対してパディングを用いたデータレイアウト変更を行う」とされているのは、キャッシュメモリ上で重なりを持たないように配慮される対象となるのは、部分的な配列データ単位であるのに対し、パディングを入れる際には、部分的な配列データ単位ではなく、配列データまたは複数の配列データの集合を単位として考えるという意味である。
【００２０】
さらに、「スケジューリング」と「データレイアウト変更」とは、いずれを先に行ってもよい。
【００２１】
そして、「スケジューリングを行う」ことには、目的プログラム内における各データローカライザブルグループに属する各小ループの配置順序や配置位置そのものを変更して実行順序を定めること、および目的プログラム内にスケジューリング情報（例えば、ＧＯＴＯ文等のジャンプ機能を付与するための情報など）を挿入して実行順序を定めること等が含まれる。
【００２２】
このような本発明のコンパイル方法においては、ソースプログラムに含まれるデータ依存を有する複数のループを対象としてループ整合分割行い、かつ、パディングを用いてこれらのループにより使用（アクセス）される配列データについてレイアウト変更を行う。そして、同一のデータローカライザブルグループに属する各小ループ同士を可能な限り連続実行するスケジューリングを行う。
【００２３】
このため、上記のようなスケジューリングを行う結果、同一のデータローカライザブルグループに属する整合分割後の各小ループにより使用される複数の部分的な配列データは、連続して一つのキャッシュに置かれることが多くなり、この際、これらの複数の部分的な配列データは、パディングを用いたレイアウトが行われているため、キャッシュ上の異なるラインにマッピングされ、キャッシュ上で重なりを持つことはなくなる。例えば、配列データがＡ（１：１０２４，１：１０２４）およびＢ（１：１０２４，１：１０２４）であるときに、これらについての部分的な配列データであるＡ（１：１０２４，１：２５６）およびＢ（１：１０２４，１：２５６）が同一のデータローカライザブルグループに属する各小ループにより使用されるとすると、Ａ（１：１０２４，１：２５６）とＢ（１：１０２４，１：２５６）とは、一つのキャッシュに置かれ、しかもキャッシュ上の異なるラインにマッピングされるようになる（後述する図７〜図１０、図１８〜図２１、図２２の右側部分参照）。
【００２４】
従って、キャッシュラインコンフリクトミスが回避され、計算機（用途は問わない。例えば、学術計算用、会計処理用、ゲーム用、事務処理用、その他の演算処理用等、任意である。）の処理速度を向上させることが可能となり、これらにより前記目的が達成される。
【００２５】
また、前述したコンパイル方法において、複数のプロセッサを用いて並列処理を行うためのマルチプロセッサ用のスケジューリングを行う際には、最早実行可能条件を満たす範囲内で、同一のデータローカライザブルグループに属する各小ループ同士が、可能な限り同一のプロセッサ上で連続して実行されるスケジューリングを行うことが望ましい。
【００２６】
ここで、プロセッサ数と、ループ整合分割の分割数とは、一致していてもよく、一致していなくてもよい。
【００２７】
このようにマルチプロセッサマシンへの適用を図った場合には、各データローカライザブルグループで行うループ処理を、複数のプロセッサに分散して行わせることができるようになり、例えば、各データローカライザブルグループに属する各小ループの処理を、各データローカライザブルグループ毎にそれぞれ異なるプロセッサに割り当てること等が可能となり、各データローカライザブルグループで行われるループ処理の並列性を利用して処理速度を、より一層向上させることが可能となる。
【００２８】
さらに、前述したコンパイル方法において、パディングは、各データローカライザブルグループに属する各小ループにより使用される配列とは異なるデータ（いわゆるダミーデータ）により確保される領域としてもよく（例えば、後述する図１８〜図２１の場合等）、あるいは、各データローカライザブルグループに属する各小ループにより使用される配列のうちの少なくとも一つの配列のサイズを、非連続アクセス次元について拡大して確保される領域としてもよい（例えば、後述する図７〜図１０、図２２の場合等）。
【００２９】
また、上記のうち、配列サイズを非連続アクセス次元について拡大してパディングを行う後者の場合においては、各データローカライザブルグループに属する各小ループにより使用される配列のサイズを、各配列毎にそれぞれ非連続アクセス次元について拡大してパディングを行ってもよく（例えば、後述する図７〜図１０、図２２の場合等）、あるいは、各配列毎ではなく、複数の配列の集合を一つの単位として考えてパディングを行ってもよい（例えば、後述する図１８〜図２１において、配列Ｅ，Ｋ，Ｒの各後ろ側にダミーデータを挿入するのではなく、各配列Ｅ，Ｋ，Ｒを拡大する場合等）。但し、各配列毎にパディングを行う際には、最後の配列については、必ずしもパディングを行う必要はない。
【００３０】
なお、「非連続アクセス次元」とは、配列の宣言次元のうちメモリ格納時に最も大きなアクセスストライドを持つ次元であり、例えば、Ｆｏｒｔｒａｎの場合には、カラムメジャーオーダーなので、右端で宣言される次元、すなわちＡ（ｉ，ｊ，ｋ）であれば、ｋの次元の宣言サイズを拡大変更する。換言すれば、「非連続アクセス次元」とは、複数次元の配列の場合に、ループ処理において各イタレーションで固定された状態が続く次元であり、例えば、二重ループの場合には、外側のループ（処理の効率化の観点から、外側に配置されるべきループ）で変化する次元である。具体的には、例えば、Ａ（１，１）、Ａ（２，１）、Ａ（３，１）、…、Ａ（１，２）、Ａ（２，２）、Ａ（３，２）、…という順にアクセスする場合には、第２次元目のサイズを拡大変更する。
【００３１】
また、本発明のコンパイラは、以上に述べたコンパイル方法を用いてコンパイルを行うことを特徴とするものである。
【００３２】
このような本発明のコンパイラにおいては、前述した本発明のコンパイル方法で得られる作用・効果がそのまま得られ、これにより前記目的が達成される。
【００３３】
さらに、本発明は、ソースプログラムをコンパイルして目的プログラムを生成するコンパイラであって、ソースプログラムをブロック単位で分割して複数のマクロタスクを生成するマクロタスク生成手段と、各マクロタスクの実行が確定する実行確定条件および各マクロタスクの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を解析する並列性解析手段と、各マクロタスクとしてソースプログラムに含まれるデータ依存を有する各ループのうちから、キャッシュメモリを効果的に利用するためのループ整合分割が可能な複数のループを、キャッシュ最適化用のターゲットループグループとして選択するターゲットループグループ選択手段と、このターゲットループグループ選択手段により選択されたターゲットループグループをターゲットループグループテーブルに格納するターゲットループグループ格納手段と、ターゲットループグループを構成する複数のループによりそれぞれ使用される各配列データを、キャッシュ最適化用の対象配列データとして選択する対象配列データ選択手段と、この対象配列データ選択手段により選択された各対象配列データを対象配列データテーブルに格納する対象配列データ格納手段と、各対象配列データの合計サイズおよびキャッシュメモリのサイズに基づき、ターゲットループグループを構成する複数のループの分割数を決定する分割数決定手段と、この分割数決定手段により決定した分割数に基づき、ターゲットループグループテーブルに格納されたターゲットループグループを構成する複数のループをそれぞれ分割して各ループについてそれぞれ複数の小ループを生成し、これらの各小ループのうち同一の部分的な対象配列データを使用する小ループ同士を集合させて複数のデータローカライザブルグループを形成するループ整合分割手段と、各小ループの実行が確定する実行確定条件および各小ループの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を満たす範囲内で、同一のデータローカライザブルグループに属する各小ループ同士が、可能な限り連続して実行されるスケジューリングを行うスケジューリング手段と、各データローカライザブルグループに属する各小ループにより使用される部分的な各対象配列データ同士がキャッシュメモリ上で重なりを持たないように、各対象配列データの主メモリへの格納位置をずらすために挿入するパディング用データのサイズを決定するパディングサイズ決定手段と、このパディングサイズ決定手段により決定したサイズに相当するパディング用データを、対象配列データテーブルに格納された対象配列データの内部または対象配列データ間に挿入することによりパディングを用いたデータレイアウト変更を行うデータレイアウト変更手段として、コンピュータを機能させることを特徴とするものである。
【００３４】
ここで、「分割数決定手段」における「各対象配列データの合計サイズおよびキャッシュメモリのサイズに基づき」とは、全ての対象配列データの合計サイズをキャッシュメモリのサイズで除した値に基づき、分割数を決定するという意味である。
【００３５】
また、「対象配列データの内部または対象配列データ間に挿入する」とは、対象配列のサイズを非連続アクセス次元について拡大するか、または対象配列データ間にいわゆるダミーデータを入れるという意味である。
【００３６】
このような本発明のコンパイラにおいては、前述した本発明のコンパイル方法で得られる作用・効果がそのまま得られ、これにより前記目的が達成される。
【００３７】
そして、本発明は、ソースプログラムをコンパイルして目的プログラムを生成するコンパイル装置であって、ソースプログラムをブロック単位で分割して複数のマクロタスクを生成するマクロタスク生成手段と、各マクロタスクの実行が確定する実行確定条件および各マクロタスクの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を解析する並列性解析手段と、各マクロタスクとしてソースプログラムに含まれるデータ依存を有する各ループのうちから、キャッシュメモリを効果的に利用するためのループ整合分割が可能な複数のループを、キャッシュ最適化用のターゲットループグループとして選択するターゲットループグループ選択手段と、このターゲットループグループ選択手段により選択されたターゲットループグループを格納するターゲットループグループテーブルと、ターゲットループグループを構成する複数のループによりそれぞれ使用される各配列データを、キャッシュ最適化用の対象配列データとして選択する対象配列データ選択手段と、この対象配列データ選択手段により選択された各対象配列データを格納する対象配列データテーブルと、各対象配列データの合計サイズおよびキャッシュメモリのサイズに基づき、ターゲットループグループを構成する複数のループの分割数を決定する分割数決定手段と、この分割数決定手段により決定した分割数に基づき、ターゲットループグループテーブルに格納されたターゲットループグループを構成する複数のループをそれぞれ分割して各ループについてそれぞれ複数の小ループを生成し、これらの各小ループのうち同一の部分的な対象配列データを使用する小ループ同士を集合させて複数のデータローカライザブルグループを形成するループ整合分割手段と、各小ループの実行が確定する実行確定条件および各小ループの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を満たす範囲内で、同一のデータローカライザブルグループに属する各小ループ同士が、可能な限り連続して実行されるスケジューリングを行うスケジューリング手段と、各データローカライザブルグループに属する各小ループにより使用される部分的な各対象配列データ同士がキャッシュメモリ上で重なりを持たないように、各対象配列データの主メモリへの格納位置をずらすために挿入するパディング用データのサイズを決定するパディングサイズ決定手段と、このパディングサイズ決定手段により決定したサイズに相当するパディング用データを、対象配列データテーブルに格納された対象配列データの内部または対象配列データ間に挿入することによりパディングを用いたデータレイアウト変更を行うデータレイアウト変更手段とを備えたことを特徴とするものである。
【００３８】
このような本発明のコンパイル装置においては、前述した本発明のコンパイル方法で得られる作用・効果がそのまま得られ、これにより前記目的が達成される。
【００３９】
また、本発明は、プログラムを構成するコードを作成するプログラムコード作成方法であって、実行対象とするデータ依存を有する複数のループをそれぞれ分割して各ループについてそれぞれ複数の小ループを作成し、これらの各小ループのうち同一の部分的な配列データを使用する小ループ同士を集合させて複数のデータローカライザブルグループを形成し、かつ、この分割・グループ化作業の際には、各データローカライザブルグループに属する各小ループによりそれぞれ使用される部分的な各配列データの合計サイズが、各データローカライザブルグループ毎にキャッシュメモリのサイズ以下に収まるように整合分割を行い、その後、各小ループの実行が確定する実行確定条件および各小ループの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を満たす範囲内で、同一のデータローカライザブルグループに属する各小ループ同士が、可能な限り連続して実行されるようにスケジューリングを行うとともに、各データローカライザブルグループに属する各小ループにより使用される部分的な各配列データ同士がキャッシュメモリ上で重なりを持たないように、各配列データをパディングを用いてレイアウトすることを特徴とするものである。
【００４０】
このような本発明のプログラムコード作成方法においては、前述した本発明のコンパイル方法で得られる作用・効果がそのまま得られ、これにより前記目的が達成される。
【００４１】
さらに、前述したプログラムコード作成方法において、複数のプロセッサを用いて並列処理を行うためのマルチプロセッサ用のスケジューリングを行う際には、最早実行可能条件を満たす範囲内で、同一のデータローカライザブルグループに属する各小ループ同士が、可能な限り同一のプロセッサ上で連続して実行されるようにスケジューリングを行うことが望ましい。
【００４２】
このようにマルチプロセッサマシンへの適用を図った場合には、各データローカライザブルグループで行うループ処理を、複数のプロセッサに分散して行わせることができるようになり、例えば、各データローカライザブルグループに属する各小ループの処理を、各データローカライザブルグループ毎にそれぞれ異なるプロセッサに割り当てること等が可能となり、各データローカライザブルグループで行われるループ処理の並列性を利用して処理速度を、より一層向上させることが可能となる。
【００４３】
また、本発明のプログラムは、以上に述べたコンパイル方法またはプログラムコード作成方法を用いて生成または作成されたことを特徴とするものである。
【００４４】
さらに、本発明のプログラムは、以上に述べたコンパイラにより生成されたことを特徴とするものである。
【００４５】
なお、以上に述べたプログラムまたはその一部は、例えば、光磁気ディスク（ＭＯ）、コンパクトディスク（ＣＤ）を利用した読出し専用メモリ（ＣＤ−ＲＯＭ）、ＣＤレコーダブル（ＣＤ−Ｒ）、ＣＤリライタブル（ＣＤ−ＲＷ）、デジタル・バーサタイル・ディスク（ＤＶＤ）を利用した読出し専用メモリ（ＤＶＤ−ＲＯＭ）、ＤＶＤを利用したランダム・アクセス・メモリ（ＤＶＤ−ＲＡＭ）、フレキシブルディスク（ＦＤ）、磁気テープ、ハードディスク、読出し専用メモリ（ＲＯＭ）、電気的消去および書換可能な読出し専用メモリ（ＥＥＰＲＯＭ）、フラッシュ・メモリ、ランダム・アクセス・メモリ（ＲＡＭ）等の記録媒体に記録して保存や流通等させることが可能であるとともに、例えば、ローカル・エリア・ネットワーク（ＬＡＮ）、メトロポリタン・エリア・ネットワーク（ＭＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、インターネット、イントラネット、エクストラネット等の有線ネットワーク、あるいは無線通信ネットワーク、さらにはこれらの組合せ等の伝送媒体を用いて伝送することが可能であり、また、搬送波に載せて搬送することも可能である。さらに、以上に述べたプログラムは、他のプログラムの一部分であってもよく、あるいは別個のプログラムと共に記録媒体に記録されていてもよい。
【００４６】
また、本発明のキャッシュ最適利用演算方法は、プロセッサと、主メモリと、これらの間に設けられたキャッシュメモリとを備えた演算装置を用いて、以上に述べたプログラムを実行することにより、キャッシュラインコンフリクトミスの発生を抑えながらキャッシュメモリを利用して演算処理を行うことを特徴とするものである。
【００４７】
さらに、本発明のキャッシュ最適利用演算装置は、プロセッサと、主メモリと、これらの間に設けられたキャッシュメモリとを備え、以上に述べたプログラムが搭載され、このプログラムが実行されることにより、キャッシュラインコンフリクトミスの発生を抑えながらキャッシュメモリが利用されて演算処理が行われる構成とされていることを特徴とするものである。
【００４８】
なお、本発明のキャッシュ最適利用演算装置の用途は、例えば、学術計算用、会計処理用、ゲーム用、事務処理用、その他の演算処理用等、任意である。
【００４９】
【発明の実施の形態】
以下に本発明の一実施形態を図面に基づいて説明する。図１には、本実施形態のコンパイル装置１０およびキャッシュ最適利用演算装置２０の全体構成が示されている。また、図２は、コンパイル装置１０を機能的に示した構成図である。
【００５０】
コンパイル装置１０は、ソースプログラム１をコンパイルして目的プログラム２を生成する装置である。キャッシュ最適利用演算装置２０は、コンパイル装置１０で生成した目的プログラム２、またはこの目的プログラム２をさらにコンパイルして得られたプログラムが、実行可能な状態でプログラム３として搭載されている装置である。これらのコンパイル装置１０およびキャッシュ最適利用演算装置２０は、説明の便宜上、別の装置として記載されているが、物理的に同じ装置（コンピュータ）を用いて実現されてもよい。
【００５１】
図１において、コンパイル装置１０は、ＣＰＵ（中央演算処理装置）１１を備えたコンピュータにより構成され、ソースプログラム１をコンパイルして目的プログラム２を生成するための言語処理プログラムであるコンパイラ１２を搭載している。
【００５２】
キャッシュ最適利用演算装置２０は、主記憶共有型マルチプロセッサマシンであり、高速で動作して各種演算処理を行う複数（本実施形態では、一例として４つとする。）のプロセッサ３０，３１，３２，３３と、これらのプロセッサ３０〜３３により共有される状態でアクセスされる主メモリ４０と、各プロセッサ３０〜３３と主メモリ４０との間に設けられた複数（本実施形態では、一例として４つとする。）のＬ２キャッシュ５０，５１，５２，５３と、主メモリ４０に接続された外部記憶装置６０とを備えている。
【００５３】
各Ｌ２キャッシュ５０〜５３は、アクセス速度の遅い主メモリ４０に比べ、高速アクセスが可能なレベル２のキャッシュメモリであり、比較的小容量のメモリである。
【００５４】
外部記憶装置６０は、例えばハードディスク等の大容量のメモリであり、キャッシュ最適利用演算装置２０で実行されるプログラム３が記憶されている。プログラム３の用途、つまりキャッシュ最適利用演算装置２０の用途は、例えば、学術計算用、会計処理用、ゲーム用、事務処理用、その他の演算処理用等、任意である。
【００５５】
また、各プロセッサ３０，３１，３２，３３は、Ｌ１キャッシュ７０，７１，７２，７３をそれぞれ有している。これらのＬ１キャッシュ７０〜７３は、Ｌ２キャッシュ５０〜５３に比べ、より高速アクセスが可能なキャッシュメモリであるが、メモリ容量はＬ２キャッシュ５０〜５３よりもさらに小さい。本実施形態では、キャッシュ最適化の対象として、Ｌ２キャッシュ５０〜５３を選択するものとする。但し、本発明によるキャッシュ最適化の対象は、Ｌ２キャッシュ５０〜５３だけではなく、Ｌ１キャッシュ７０〜７３としてもよい。また、Ｌ３キャッシュ、あるいはＬ４以上のキャッシュがある場合には、それらのキャッシュも本発明による最適化の対象となり得る。
【００５６】
なお、図示は省略されているが、コンパイル装置１０およびキャッシュ最適利用演算装置２０は、それぞれ例えば、マウス、キーボード、トラックボール、ライトペン、トラックパッド、トラックポイント、タブレットおよびスタイラス、ジョイスティック、あるいはこれらの組合せ等の入力手段と、例えば、液晶ディスプレイ、ＣＲＴディスプレイ、有機ＥＬディスプレイ、ＥＣＬディスプレイ、プロジェクタおよびスクリーン、あるいはこれらの組合せ等の表示手段と、例えば、プリンタ、プロッタ、あるいはこれらの組合せ等の出力手段とを適宜備えている。
【００５７】
図２において、コンパイル装置１０は、コンパイルに必要な各種処理を行う処理手段１３と、この処理手段１３による処理で必要となるデータを格納するターゲットループグループテーブル１４および対象配列データテーブル１５等の各種テーブルとを含んで構成されている。
【００５８】
処理手段１３は、マクロタスク生成手段１３Ａと、並列性解析手段１３Ｂと、ターゲットループグループ選択手段１３Ｃと、ターゲットループグループ格納手段１３Ｄと、対象配列データ選択手段１３Ｅと、対象配列データ格納手段１３Ｆと、分割数決定手段１３Ｇと、ループ整合分割手段１３Ｈと、スケジューリング手段１３Ｊと、パディングサイズ決定手段１３Ｋと、データレイアウト変更手段１３Ｌとを含んで構成されている。
【００５９】
そして、処理手段１３を構成する各手段１３Ａ〜１３Ｌは、ＣＰＵ１１およびこのＣＰＵ１１の動作手順を規定するコンパイラ１２により実現される。また、ターゲットループグループテーブル１４および対象配列データテーブル１５等の各種テーブルは、コンパイル装置１０の主メモリ（不図示）に保持され、あるいは必要に応じ、コンパイル装置１０に設けられた例えばハードディスク等の外部記憶装置（不図示）に記憶される。
【００６０】
マクロタスク生成手段１３Ａは、ソースプログラム１をブロック単位で分割して複数のマクロタスクを生成する処理を行うものである。
【００６１】
並列性解析手段１３Ｂは、各マクロタスクの実行が確定する実行確定条件および各マクロタスクの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件（最早実行開始条件とも称される。）を解析する処理を行うものである。
【００６２】
ここで、あるマクロタスクＸの最早実行可能条件は、簡単に表現すると、次のようになる。前者の実行確定条件は、プログラムの流れ（コントロールフロー）を定めるものであり、粗粒度タスク間の並列性を表現するマクロタスクグラフにおいて、マクロタスクＸがコントロール依存する条件分岐を含むマクロタスクが、マクロタスクＸの実行を確定する方向に分岐するという条件である。後者のデータアクセス条件は、マクロタスクＸの前にそのデータを定義あるいは使用する先行タスク（データ依存先行マクロタスク）の実行が終了するか、あるいはデータ依存先行マクロタスクが実行されないことが確定し、マクロタスクＸが必要とするデータが使用可能となるという条件である。最早実行可能条件については、前述した非特許文献３のｐ．１４５付近に詳述されているので、ここでは詳しい説明は省略する。
【００６３】
ターゲットループグループ選択手段１３Ｃは、各マクロタスクとしてソースプログラム１に含まれるデータ依存を有する各ループのうちから、キャッシュメモリ（本実施形態では、Ｌ２キャッシュ５０〜５３）を効果的に利用するためのループ整合分割が可能な複数のループを、キャッシュ最適化用のターゲットループグループ（ＴＬＧ：Ｔａｒｇｅｔ  Ｌｏｏｐ  Ｇｒｏｕｐ）として選択する処理を行うものである。
【００６４】
ターゲットループグループ格納手段１３Ｄは、ターゲットループグループ選択手段１３Ｃにより選択された複数のループを、ターゲットループグループテーブル１４に格納する処理を行うものである。
【００６５】
対象配列データ選択手段１３Ｅは、ターゲットループグループを構成する複数のループによりそれぞれ使用（アクセス）される各配列データを、キャッシュ最適化用の対象配列データとして選択する処理を行うものである。
【００６６】
対象配列データ格納手段１３Ｆは、対象配列データ選択手段１３Ｅにより選択された各対象配列データを、対象配列データテーブル１５に格納する処理を行うものである。
【００６７】
分割数決定手段１３Ｇは、各対象配列データの合計サイズおよびキャッシュサイズに基づき、ターゲットループグループを構成する複数のループの分割数（複数のループをそれぞれ分割する際の分割数）を決定する処理を行うものである。具体的には、各対象配列データの合計サイズがキャッシュサイズよりも大きい場合には、各対象配列データの合計サイズを分割数で除した値が、キャッシュサイズ以下となるように各ループの分割数を決定する。すなわち、分割数は、各対象配列データの合計サイズをキャッシュサイズで除した値以上とする。なお、各対象配列データの合計サイズがキャッシュサイズと同じか、キャッシュサイズよりも小さい場合には、パディングは行わない。
【００６８】
ループ整合分割手段１３Ｈは、分割数決定手段１３Ｇにより決定した分割数に基づき、ターゲットループグループテーブル１４に格納されたターゲットループグループを構成する複数のループをそれぞれ分割して各ループについてそれぞれ複数の小ループを生成し、これらの各小ループのうち同一の部分的な対象配列データを使用する小ループ同士を集合させて複数のデータローカライザブルグループ（ＤＬＧ：Ｄａｔａ  Ｌｏｃａｌｉｚａｂｌｅ  Ｇｒｏｕｐ）を形成する処理を行うものである。なお、ループ整合分割については、前述した非特許文献１に詳述されているので、ここでは詳しい説明は省略する。
【００６９】
スケジューリング手段１３Ｊは、各小ループの実行が確定する実行確定条件および各小ループの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を満たす範囲内で、同一のデータローカライザブルグループに属する各小ループ同士が、可能な限り連続して実行されるスケジューリング処理を行うものである。
【００７０】
また、本実施形態のキャッシュ最適利用演算装置２０のような複数のプロセッサを備えた装置で実行されるプログラムをコンパイル対象とする場合には、スケジューリング手段１３Ｊは、次のような処理を行う。すなわち、複数のプロセッサを用いて並列処理を行うためのマルチプロセッサ用のスケジューリングを行う際には、最早実行可能条件を満たす範囲内で、同一のデータローカライザブルグループに属する各小ループ同士が、可能な限り同一のプロセッサ上で連続して実行されるスケジューリング処理を行う。
【００７１】
パディングサイズ決定手段１３Ｋは、各データローカライザブルグループに属する各小ループにより使用される部分的な各対象配列データ同士がキャッシュ上で重なりを持たないように、各対象配列データの主メモリ４０への格納位置をずらすために挿入するパディング用データのサイズを決定する処理を行うものである。
【００７２】
データレイアウト変更手段１３Ｌは、パディングサイズ決定手段１３Ｋにより決定したサイズに相当するパディング用データを、対象配列データテーブル１５に格納された対象配列データの内部または対象配列データ間に挿入することにより、パディングを用いたデータレイアウト変更処理を行うものである。
【００７３】
ターゲットループグループテーブル１４は、ターゲットループグループ選択手段１３Ｃにより選択されたターゲットループグループを格納するものである。
【００７４】
対象配列データテーブル１５は、対象配列データ選択手段１３Ｅにより選択された各対象配列データを格納するものである。
【００７５】
このような本実施形態においては、以下のようにしてコンパイル装置１０を用いてコンパイルが行われる。図３には、コンパイル装置１０によるコンパイル処理の流れがフローチャートで示されている。
【００７６】
先ず、コンパイルの対象となるソースプログラム１を用意する。ここでは、理解を容易にするため、具体的な例として、図４に示すようなプログラム１００を用いて説明を行うものとする。また、キャッシュ最適利用演算装置２０のＬ２キャッシュ５０〜５３の各サイズを４メガバイトとする（図４参照）。さらに、主メモリ４０から各Ｌ２キャッシュ５０〜５３へのデータ転送は、ダイレクトマップ方式（アソシアティビティが１）によるものとする。但し、本発明は、ダイレクトマップ方式に限らず、セットアソシアティブ方式（アソシアティビティが２以上）について適用しても有効である。なお、転送ブロック長（キャッシュライン長）については、特に想定はなく、例えば３２バイトや６４バイト等、任意である。
【００７７】
図４において、プログラム１００は、Ｆｏｒｔｒａｎ等の高級言語により記述されている。プログラム１００には、配列宣言部１０１と、互いにデータ依存を有する複数（ここでは、２つとする。）のループ１０２，１０３とが含まれている。
【００７８】
配列宣言部１０１では、４つの２次元の配列が宣言されている。各配列は、Ａ（１０２４，１０２４）、Ｂ（１０２４，１０２４）、Ｃ（１０２４，１０２４）、Ｄ（１０２４，１０２４）であり、各配列の一つの要素は、ｉｎｔｅｇｅｒ（整数型）で４バイトである。従って、配列Ａのサイズは、１０２４×１０２４×４＝４メガバイトである。他の配列Ｂ，Ｃ，Ｄも同様である。また、各配列Ａ，Ｂ，Ｃ，Ｄの合計サイズは、１６メガバイトである。図４の右側部分には、各４メガバイトの配列Ａ，Ｂ，Ｃ，Ｄを、４メガバイトのキャッシュ上に割り当てたときのイメージが示されている。なお、この例では、各配列Ａ，Ｂ，Ｃ，Ｄのサイズが全て同じとされているが、本発明は、各配列のサイズが異なっている場合にも、適用することができる。
【００７９】
そして、コンパイル装置１０の電源を投入し、コンパイラ１２（図１参照）を起動して、用意したソースプログラム１についてのコンパイル処理を開始する（図３のステップＳ１）。
【００８０】
次に、マクロタスク生成手段１３Ａおよび並列性解析手段１３Ｂ等により、前処理を行う（ステップＳ２）。この前処理では、ソースコードを中間言語に変換するとともに、変数テーブルを作成する。それから、マクロタスク生成手段１３Ａにより、コンパイル対象のプログラム１００を、ループ、サブルーチン、基本ブロック等のブロック単位で分割し、複数のマクロタスクを生成する。
【００８１】
続いて、並列性解析手段１３Ｂにより、マクロタスク生成手段１３で生成した各マクロタスクについて、データ依存解析、コントロールフロー解析を行った後、実行確定条件およびデータアクセス条件からなる最早実行可能条件の解析を行い、プログラム１００中に含まれるループ、サブルーチン、基本ブロック等の各マクロタスク間の並列性を解析する。
【００８２】
それから、ターゲットループグループ選択手段１３Ｃにより、プログラム１００中に含まれるデータ依存を伴う各ループのうちから、キャッシュ最適化用にループ分割が可能、すなわち整合分割が可能な複数のループを、キャッシュ最適化用のターゲットループグループ（ＴＬＧ）として選択する（図３のステップＳ３）。図４の例では、２つのループ１０２，１０３がターゲットループグループ（以下、ＴＬＧ１という。）として選択されるものとする。
【００８３】
そして、ターゲットループグループ選択手段１３Ｃにより選択されたＴＬＧ１を構成するループ１０２，１０３は、ターゲットループグループ格納手段１３Ｄにより、ターゲットループグループテーブル１４に格納される。
【００８４】
続いて、対象配列データ選択手段１３Ｅにより、ＴＬＧ１を構成する複数のループ１０２，１０３によりそれぞれ使用（アクセス）される各配列Ａ，Ｂ，Ｃ，Ｄを、キャッシュ最適化用の対象配列として選択する（図３のステップＳ４）。
【００８５】
そして、対象配列データ選択手段１３Ｅにより選択された各対象配列Ａ，Ｂ，Ｃ，Ｄは、対象配列データ格納手段１３Ｆにより、対象配列データテーブル１５に格納される。
【００８６】
その後、分割数決定手段１３Ｇにより、各対象配列Ａ，Ｂ，Ｃ，Ｄの合計サイズおよびキャッシュサイズに基づき、ＴＬＧ１を構成する複数のループ１０２，１０３の分割数（複数のループ１０２，１０３をそれぞれ分割する際の分割数）を決定する（図３のステップＳ５）。
【００８７】
図４の例では、各対象配列Ａ，Ｂ，Ｃ，Ｄの合計サイズが１６メガバイトであり、キャッシュサイズが４メガバイトであるから、各対象配列データの合計サイズがキャッシュサイズよりも大きい。従って、各対象配列データＡ，Ｂ，Ｃ，Ｄの合計サイズを分割数で除した値が、キャッシュサイズ以下となるように、各ループ１０２，１０３の分割数を決定する。すなわち、各対象配列Ａ，Ｂ，Ｃ，Ｄの合計サイズをキャッシュサイズで除すると、１６メガバイト÷４メガバイト＝４となるので、４分割以上とする。ここでは、一例として４分割とする。
【００８８】
分割数決定手段１３Ｇにより分割数を決定した後には、図５に示すように、決定した分割数（ここでは、４分割）に基づき、ループ整合分割手段１３Ｈにより、ターゲットループグループテーブル１４に格納されたＴＬＧ１を構成する複数のループ１０２，１０３をそれぞれ分割（ここでは、４分割）し、ループ１０２について、複数（ここでは、４つ）の小ループ１０２Ａ，１０２Ｂ，１０２Ｃ，１０２Ｄを生成し、ループ１０３について、複数（ここでは、４つ）の小ループ１０３Ａ，１０３Ｂ，１０３Ｃ，１０３Ｄを生成する（図３のステップＳ６）。
【００８９】
図４の例では、配列Ａの各要素Ａ（ｉ，ｊ）、但し、ｉ＝１〜１０２４、ｊ＝１〜１０２４のデータの並び順は、Ａ（１，１）、Ａ（２，１）、Ａ（３，１）、…であるから、第１次元目のｉが連続アクセス次元であり、第２次元目のｊが非連続アクセス次元となる。他の配列Ｂ，Ｃ，Ｄも同様である。また、ループ１０２，１０３では、図４に示すように、外側のループがｊ＝１〜１０２４であるため、この非連続アクセス次元である第２次元目のｊについて４分割し、ｊ＝１〜２５６を小ループ１０２Ａ，１０３Ａとし、ｊ＝２５７〜５１２を小ループ１０２Ｂ，１０３Ｂとし、ｊ＝５１３〜７６８を小ループ１０２Ｃ，１０３Ｃとし、ｊ＝７６９〜１０２４を小ループ１０２Ｄ，１０３Ｄとする。
【００９０】
そして、配列Ａ，Ｂ，Ｃ，Ｄもこれに合わせてｊ＝１〜２５６、ｊ＝２５７〜５１２、ｊ＝５１３〜７６８、ｊ＝７６９〜１０２４で４分割し、各配列Ａ，Ｂ，Ｃ，Ｄについて、それぞれ４つの部分的な配列を生成する。例えば、配列データＡ（１：１０２４，１：１０２４）については、Ａ（１：１０２４，１：２５６）、Ａ（１：１０２４，２５７：５１２）、Ａ（１：１０２４，５１３：７６８）、Ａ（１：１０２４，７６９：１０２４）という４つの部分的な配列データを生成する。他の配列Ｂ，Ｃ，Ｄも同様である。
【００９１】
ここで、図５に示すように、２つの小ループ１０２Ａ，１０３Ａは、Ａ（１：１０２４，１：２５６）、Ｂ（１：１０２４，１：２５６）、Ｃ（１：１０２４，１：２５６）、Ｄ（１：１０２４，１：２５６）という同じ部分的な配列データにアクセスする。従って、２つの小ループ１０２Ａ，１０３Ａの集合により、データローカライザブルグループ（以下、ＤＬＧ１０という。）が形成される。同様にして、２つの小ループ１０２Ｂ，１０３Ｂの集合により、データローカライザブルグループ（以下、ＤＬＧ１１という。）が形成され、２つの小ループ１０２Ｃ，１０３Ｃの集合により、データローカライザブルグループ（以下、ＤＬＧ１２という。）が形成され、２つの小ループ１０２Ｄ，１０３Ｄの集合により、データローカライザブルグループ（以下、ＤＬＧ１３という。）が形成される。
【００９２】
また、ループ整合分割手段１３Ｈにより、図５に示すようなループ整合分割を行って得られた各小ループ１０２Ａ，１０２Ｂ，１０２Ｃ，１０２Ｄ，１０３Ａ，１０３Ｂ，１０３Ｃ，１０３Ｄについても、マクロタスクとして扱われる。
【００９３】
続いて、ループ整合分割を行った後には、再び、並列性解析手段１３Ｂにより、新たに生成されたマクロタスクである各小ループ１０２Ａ，１０２Ｂ，１０２Ｃ，１０２Ｄ，１０３Ａ，１０３Ｂ，１０３Ｃ，１０３Ｄを含め、実行確定条件およびデータアクセス条件からなる最早実行可能条件の解析を行い、各小ループ１０２Ａ，１０２Ｂ，１０２Ｃ，１０２Ｄ，１０３Ａ，１０３Ｂ，１０３Ｃ，１０３Ｄを含めたマクロタスク間の並列性を解析する。
【００９４】
それから、スケジューリング手段１３Ｊにより、各小ループの実行が確定する実行確定条件および各小ループの実行に必要なデータが使用可能状態になるデータアクセス条件からなる最早実行可能条件を満たす範囲内で、同一のデータローカライザブルグループに属する各小ループ同士が、可能な限り同一のプロセッサ上で連続して実行されるようにスケジューリングを行う（図３のステップＳ７）。
【００９５】
図４の例では、ＤＬＧ１０に属する１０２Ａ，１０３Ａを同一プロセッサ上で連続実行し、ＤＬＧ１１に属する１０２Ｂ，１０３Ｂを同一プロセッサ上で連続実行し、ＤＬＧ１２に属する１０２Ｃ，１０３Ｃを同一プロセッサ上で連続実行し、ＤＬＧ１３に属する１０２Ｄ，１０３Ｄを同一プロセッサ上で連続実行するようにスケジューリングを行う。
【００９６】
図１１には、４つのプロセッサ３０〜３３に、それぞれ異なるデータローカライザブルグループを割り当てるスケジューリングを行ったときの実行イメージが示されている。図１１では、ＤＬＧ１０，ＤＬＧ１１，ＤＬＧ１２，ＤＬＧ１３が、各プロセッサ３０〜３３で並列処理される。
【００９７】
図１２には、一つのプロセッサ（ここでは、プロセッサ３０とする。）に全てのデータローカライザブルグループを割り当てるスケジューリングを行ったときの実行イメージが示されている。図１２では、ＤＬＧ１０，ＤＬＧ１１，ＤＬＧ１２，ＤＬＧ１３の順に処理される。この場合は、シングルプロセッサのマシンの場合と同様である。
【００９８】
スケジューリング手段１３Ｊによりスケジューリングを行った後には、パディングサイズ決定手段１３により、ＤＬＧ１０，ＤＬＧ１１，ＤＬＧ１２，ＤＬＧ１３に属する各小ループにより使用される部分的な各対象配列データ同士がキャッシュ上で重なりを持たないように、各対象配列データの主メモリ４０への格納位置をずらすために挿入するパディング用データのサイズを決定する（図３のステップＳ８）。
【００９９】
図５に示すように、ＤＬＧ１０では、Ａ（１：１０２４，１：２５６）、Ｂ（１：１０２４，１：２５６）、Ｃ（１：１０２４，１：２５６）、Ｄ（１：１０２４，１：２５６）という部分的な各配列データにアクセスするので、これらがキャッシュ上で重なりを持たないようにパディング量を決定する。ＤＬＧ１１，ＤＬＧ１２，ＤＬＧ１３についても同様である。
【０１００】
図６は、ＤＬＧ１０の実行時に起きるラインコンフリクトおよびこれを回避するためのパディング量の説明図である。図６の右上部分に示すように、パディングを行わないと、ＤＬＧ１０に属する各小ループ１０２Ａ，１０３Ａによりアクセスされる部分的な各配列データの全てがキャッシュ上の同じ領域に割り当てられるため、キャッシュラインコンフリクトが起こる。
【０１０１】
そこで、図６の右下部分に示すようなデータレイアウトとすれば、部分的な各配列データは、キャッシュ上の異なる領域に割り当てられ、重なりがなくなるため、ラインコンフリクトが削減される。従って、４メガバイトの一つの配列データ（例えば、Ａ（１：１０２４，１：１０２４）等）についてのパディング量は、ループ整合分割により生成された一つの部分的な配列データ（例えば、Ａ（１：１０２４，１：２５６）等）と同じサイズであり、１メガバイトである。
【０１０２】
続いて、データレイアウト変更手段１３Ｌにより、パディングサイズ決定手段１３Ｋで決定したサイズに相当するパディング用データを、対象配列データテーブル１５に格納された各対象配列Ａ，Ｂ，Ｃ，Ｄの内部または各対象配列Ａ，Ｂ，Ｃ，Ｄ間に挿入することにより、パディングを用いたデータレイアウト変更を行う（図３のステップＳ９）。
【０１０３】
図７〜図１０には、パディングを行ってＤＬＧ１０，ＤＬＧ１１，ＤＬＧ１２，ＤＬＧ１３の実行時にラインコンフリクトが回避される状態の説明図が示されている。図７〜図１０の右上部分には、各対象配列Ａ，Ｂ，Ｃ，Ｄのそれぞれの内部にパディング用データ（図中の斜線部分の領域）を挿入した状態が示されている。各対象配列Ａ，Ｂ，Ｃ，Ｄは、非連続アクセス次元である第２次元目のｊ（図中の数値にアンダーラインが付されている次元）について、それぞれ配列サイズを拡大されている。配列Ａについては、Ａ（１：１０２４，１０２５：１２８０）が１メガバイトのパディング用データとして挿入されている。同様にして、配列Ｂについては、Ｂ（１：１０２４，１０２５：１２８０）が、配列Ｃについては、Ｃ（１：１０２４，１０２５：１２８０）が、それぞれ１メガバイトのパディング用データとして挿入されている。なお、最後の配列Ｄについては、パディング用データは挿入されない。
【０１０４】
図７の右下部分に示すように、ＤＬＧ１０の実行時には、キャッシュ上への部分的な各配列データの割り当て領域は、図中の点線の矢印で示す如く、キャッシュ先頭から、Ａ（１：１０２４，１：２５６）、Ｂ（１：１０２４，１：２５６）、Ｃ（１：１０２４，１：２５６）、Ｄ（１：１０２４，１：２５６）という順になり、重なることはない。従って、ラインコンフリクトが回避されることがわかる。
【０１０５】
図８の右下部分に示すように、ＤＬＧ１１の実行時には、キャッシュ上への部分的な各配列データの割り当て領域は、図中の点線の矢印で示す如く、キャッシュ先頭から、Ｄ（１：１０２４，２５７：５１２）、Ａ（１：１０２４，２５７：５１２）、Ｂ（１：１０２４，２５７：５１２）、Ｃ（１：１０２４，２５７：５１２）という順になり、重なることはない。従って、ラインコンフリクトが回避されることがわかる。
【０１０６】
図９の右下部分に示すように、ＤＬＧ１２の実行時には、キャッシュ上への部分的な各配列データの割り当て領域は、図中の点線の矢印で示す如く、キャッシュ先頭から、Ｃ（１：１０２４，５１３：７６８）、Ｄ（１：１０２４，５１３：７６８）、Ａ（１：１０２４，５１３：７６８）、Ｂ（１：１０２４，５１３：７６８）という順になり、重なることはない。従って、ラインコンフリクトが回避されることがわかる。
【０１０７】
図１０の右下部分に示すように、ＤＬＧ１３の実行時には、キャッシュ上への部分的な各配列データの割り当て領域は、図中の点線の矢印で示す如く、キャッシュ先頭から、Ｂ（１：１０２４，７６９：１０２４）、Ｃ（１：１０２４，７６９：１０２４）、Ｄ（１：１０２４，７６９：１０２４）、Ａ（１：１０２４，７６９：１０２４）という順になり、重なることはない。従って、ラインコンフリクトが回避されることがわかる。
【０１０８】
データレイアウト変更手段１３Ｌによるパディングを用いたデータレイアウト変更が終了すると、目的プログラム２が生成される。この目的プログラム２は、Ｆｏｒｔｒａｎ等の高級言語コードの状態である場合もあり、また、機械語コードで構成された狭義のオブジェクトコードの状態である場合もある。なお、コンパイルして生成された目的プログラム２が、Ｆｏｒｔｒａｎ等の高級言語コードの状態である場合には、さらにコンパイルを行う。この際のコンパイルは、Ｆｏｒｔｒａｎ等の高級言語の翻訳のために用意された通常のコンパイラ（本発明のコンパイラではないもの）により行われ、ハードウェアとしては、本実施形態のコンパイル装置１０を実現しているコンピュータで処理してもよく、別のコンピュータで処理してもよい。
【０１０９】
以上により、コンパイラ１２によるコンパイル処理を終了する（図３のステップＳ１０）。なお、以上に述べたコンパイラ１２によるコンパイル処理と同様なプログラムコードの作成作業を、人間が手作業で行うことも可能である。
【０１１０】
その後、図１に示すように、目的プログラム２またはこれをさらにコンパイルして得られたプログラムを、実行可能なプログラム３として、キャッシュ最適利用演算装置２０に搭載する。そして、キャッシュ最適利用演算装置２０でプログラム３を実行すると、前述した図１１または図１２で示すような流れで、ＤＬＧ１０，ＤＬＧ１１，ＤＬＧ１２，ＤＬＧ１３を含むプログラムの処理が実行され、キャッシュラインコンフリクトミスの発生を抑えながら、効率的な演算処理が行われる。
【０１１１】
また、以上においては、図４に示すようなプログラム１００を具体例として挙げて説明を行っていたが、以下では、図１３に示すようなプログラム２００を具体例とする説明を行う。
【０１１２】
図１３において、プログラム２００は、Ｆｏｒｔｒａｎ等の高級言語により記述されている。プログラム２００は、パラメータ文が記述された定数値設定部２０１と、配列宣言部２０２と、互いにデータ依存を有する複数（ここでは、３つとする。）のループ２０３，２０４，２０５とが含まれている。
【０１１３】
定数値設定部２０１では、配列宣言部２０２で宣言される各配列のサイズを指定するための定数Ｎ１，Ｎ２の値が定められている。ここでは、Ｎ１＝５１３、Ｎ２＝５１３とされている。
【０１１４】
配列宣言部２０２では、１３個の２次元の配列が宣言されている。各配列は、Ｕ（Ｎ１，Ｎ２）、Ｖ（Ｎ１，Ｎ２）、Ｔ（Ｎ１，Ｎ２）、Ｅ（Ｎ１，Ｎ２）、Ｆ（Ｎ１，Ｎ２）、Ｇ（Ｎ１，Ｎ２）、Ｈ（Ｎ１，Ｎ２）、Ｋ（Ｎ１，Ｎ２）、Ｎ（Ｎ１，Ｎ２）、Ｐ（Ｎ１，Ｎ２）、Ｑ（Ｎ１，Ｎ２）、Ｒ（Ｎ１，Ｎ２）、Ｓ（Ｎ１，Ｎ２）であり、各配列の一つの要素は、ｒｅａｌ（実数型）で４バイトである。従って、配列Ｕのサイズは、５１３×５１３×４＝約１メガバイトである。他の配列Ｖ，Ｔ，Ｅ，Ｆ，Ｇ，Ｈ，Ｋ，Ｎ，Ｐ，Ｑ，Ｒ，Ｓも同様である。また、１３個の各配列データの合計サイズは、約１３メガバイトである。図１３の右側部分には、それぞれ約１メガバイトの１３個の配列データを、各ループ２０３，２０４，２０５の処理時に４メガバイトのキャッシュ上に割り当てたときのイメージが示されている。なお、この例では、１３個の各配列のサイズが全て同じとされているが、本発明は、各配列のサイズが異なっている場合にも、適用することができる。
【０１１５】
図１３の例の場合には、ターゲットループグループ選択手段１３Ｃにより選択されるターゲットループグループは、３つのループ２０３，２０４，２０５により構成されるターゲットループグループ（以下、ＴＬＧ２という。）であり、このＴＬＧ２を構成する各ループ２０３，２０４，２０５が、ターゲットループグループ格納手段１３Ｄによりターゲットループグループテーブル１４に格納される。
【０１１６】
また、対象配列データ選択手段１３Ｅにより選択される対象配列は、１３個の配列Ｕ，Ｖ，Ｔ，Ｅ，Ｆ，Ｇ，Ｈ，Ｋ，Ｎ，Ｐ，Ｑ，Ｒ，Ｓであり、これらの１３個の各配列データが、対象配列データ格納手段１３Ｆにより対象配列データテーブル１５に格納される。
【０１１７】
さらに、分割数決定手段１３Ｇによる分割数の決定は、次のように行われる。１３個の各配列の合計サイズをキャッシュサイズで除すると、約１３メガバイト÷４メガバイト＝約３．２５となるので、分割数は４以上となる。ここでは、４分割とする。
【０１１８】
そして、ループ整合分割手段１３Ｈによるループ整合分割は、次のように行われる。図１４〜図１７には、図１３のプログラム２００についてループ整合分割を行った状態が示されている。図１４〜図１７の左側部分には、ループ整合分割を行って得られた各データローカライザブルグループが示され、右側部分には、各データローカライザブルグループを構成する各小ループによりアクセスされる部分的な各配列データが、キャッシュ上に割り当てられる状態のイメージが示されている。
【０１１９】
図１３のプログラム２００に含まれる３つのループ２０３，２０４，２０５は、図１４〜図１７に示すように、それぞれ４つの小ループに分割され、これらの小ループにより４つのデータローカライザブルグループが形成される。
【０１２０】
すなわち、図１３のループ２０３（ｊ＝１〜５１２）については、図１４〜図１７に示すように、小ループ２０３Ａ（ｊ＝１〜１２８）と、小ループ２０３Ｂ（ｊ＝１２９〜２５６）と、小ループ２０３Ｃ（ｊ＝２５７〜３８４）と、小ループ２０３Ｄ（ｊ＝３８５〜５１２）とに分割される。図１３のループ２０４（ｊ＝１〜５１２）については、図１４〜図１７に示すように、小ループ２０４Ａ（ｊ＝１〜１２８）と、小ループ２０４Ｂ（ｊ＝１２９〜２５６）と、小ループ２０４Ｃ（ｊ＝２５７〜３８４）と、小ループ２０４Ｄ（ｊ＝３８５〜５１２）とに分割される。図１３のループ２０５（ｊ＝１〜５１２）については、図１４〜図１７に示すように、小ループ２０５Ａ（ｊ＝１〜１２８）と、小ループ２０５Ｂ（ｊ＝１２９〜２５６）と、小ループ２０５Ｃ（ｊ＝２５７〜３８４）と、小ループ２０５Ｄ（ｊ＝３８５〜５１２）とに分割される。
【０１２１】
また、図１４に示すように、３つの小ループ２０３Ａ，２０４Ａ，２０５Ａにより、一つのデータローカライザブルグループ（以下、ＤＬＧ２０という。）が形成される。図１４の右下部分に示すように、ＤＬＧ２０を構成する各小ループ２０３Ａ，２０４Ａ，２０５Ａによりアクセスされる部分的な各配列データ（図中の斜線部分）は、キャッシュ上の同じ領域に割り当てられ、これによりラインコンフリクトが発生することがわかる。
【０１２２】
図１５に示すように、３つの小ループ２０３Ｂ，２０４Ｂ，２０５Ｂにより、一つのデータローカライザブルグループ（以下、ＤＬＧ２１という。）が形成される。図１５の右下部分に示すように、ＤＬＧ２１を構成する各小ループ２０３Ｂ，２０４Ｂ，２０５Ｂによりアクセスされる部分的な各配列データ（図中の斜線部分）は、キャッシュ上の同じ領域に割り当てられ、これによりラインコンフリクトが発生することがわかる。
【０１２３】
図１６に示すように、３つの小ループ２０３Ｃ，２０４Ｃ，２０５Ｃにより、一つのデータローカライザブルグループ（以下、ＤＬＧ２２という。）が形成される。図１６の右下部分に示すように、ＤＬＧ２２を構成する各小ループ２０３Ｃ，２０４Ｃ，２０５Ｃによりアクセスされる部分的な各配列データ（図中の斜線部分）は、キャッシュ上の同じ領域に割り当てられ、これによりラインコンフリクトが発生することがわかる。
【０１２４】
図１７に示すように、３つの小ループ２０３Ｄ，２０４Ｄ，２０５Ｄにより、一つのデータローカライザブルグループ（以下、ＤＬＧ２３という。）が形成される。図１７の右下部分に示すように、ＤＬＧ２３を構成する各小ループ２０３Ｄ，２０４Ｄ，２０５Ｄによりアクセスされる部分的な各配列データ（図中の斜線部分）は、キャッシュ上の同じ領域に割り当てられ、これによりラインコンフリクトが発生することがわかる。
【０１２５】
そこで、パディングサイズ決定手段１３Ｋによりパディング用データのサイズを決定する。ここでは、４つの配列データの集合（つまり、４つの合計で約４メガバイト）に対し、一つの部分的な配列データ（つまり、約２５６キロバイト）と同じか若しくは略同じサイズのパディング用データの挿入を行うものとする。
【０１２６】
図１８〜図２１には、パディングを行ってＤＬＧ２０，ＤＬＧ２１，ＤＬＧ２２，ＤＬＧ２３の実行時にラインコンフリクトが回避される状態の説明図が示されている。図１８〜図２１の右側部分には、データレイアウト変更手段１３Ｌにより配列Ｅ，Ｋ，Ｒの各後ろ側にパディング用のダミーデータ（図中の網掛部分の領域）を挿入した状態が示されている。なお、ダミーデータの挿入ではなく、配列Ｅ，Ｋ，Ｒのサイズを拡大してパディングを行ってもよい。
【０１２７】
図１８〜図２１において、ＤＬＧ２０，ＤＬＧ２１，ＤＬＧ２２，ＤＬＧ２３を構成する各小ループによりアクセスされる部分的な各配列データ（図中の斜線部分の領域）は、図１８〜図２１の右下部分に示すように、キャッシュ上に重なることなく割り当てられる。従って、ラインコンフリクトが回避されることがわかる。
【０１２８】
なお、前述した図４のプログラム１００をコンパイルした場合には、図１１に示す如く、ＤＬＧ１０，ＤＬＧ１１，ＤＬＧ１２，ＤＬＧ１３をそれぞれ異なるプロセッサ３０，３１，３２，３３に割り当てて並列処理させ、あるいは図１２に示す如く、ＤＬＧ１０，ＤＬＧ１１，ＤＬＧ１２，ＤＬＧ１３をこの順で一つのプロセッサ３０等に処理させるスケジューリングを行っていたが、これと同様に、図１３のプログラム２００をコンパイルした場合にも、ＤＬＧ２０，ＤＬＧ２１，ＤＬＧ２２，ＤＬＧ２３をそれぞれ異なるプロセッサ３０，３１，３２，３３に割り当てて並列処理させるスケジューリングを行ってもよく、あるいはＤＬＧ２０，ＤＬＧ２１，ＤＬＧ２２，ＤＬＧ２３をこの順で一つのプロセッサ３０等に処理させるスケジューリングを行ってもよい。
【０１２９】
また、図１８〜図２１においては、配列Ｅ，Ｋ，Ｒの各後ろ側にパディング用のダミーデータ（図中の網掛部分の領域）を挿入することによりパディングを行っているが、各配列（但し、最後の配列は除いてもよい。）毎に非連続アクセス次元の配列サイズを拡大し、または各配列（但し、最後の配列は除いてもよい。）のそれぞれの後ろ側にダミーデータを挿入することによりパディングを行ってもよい。
【０１３０】
図２２には、各配列毎に非連続アクセス次元の配列サイズを拡大してパディングを行った状態が示されている。図２２の左側部分には、パディング前のラインコンフリクトが起きる状態が示され、右側部分は、パディング後のラインコンフリクトの発生が回避される状態が示されている。
【０１３１】
図２２において、パディング前には、プログラム２００（図１３参照）中の定数値設定部２０１で、第１次元目の配列サイズがＮ１＝５１３、第２次元目の配列サイズがＮ２＝５１３と指定されているが、データレイアウト変更手段１３Ｌにより非連続アクセス次元である第２次元目の配列サイズＮ２を、５１３から５４４に拡大し、パディング後には、Ｎ２＝５４４とする。従って、１３個の各配列Ｕ，Ｖ，Ｔ，Ｅ，Ｆ，Ｇ，Ｈ，Ｋ，Ｎ，Ｐ，Ｑ，Ｒ，Ｓについて、それぞれ（５４４−５１３）×５１３×４＝約６４キロバイトの配列サイズの拡大が行われる。これを４つの配列分で合計して考えれば、約６４キロバイト×４＝約２５６キロバイトとなるので、前述した図１８〜図２１のような４つの配列の集合に対してパディングを行う場合と比べ、パディング量は同じになる。なお、最後の配列Ｓについては、配列サイズを拡大しなくてもよい。また、図２２の例では、各配列毎に非連続アクセス次元の配列サイズを拡大することによりパディングを行っているが、各配列のそれぞれの後ろ側にダミーデータを挿入することによりパディングを行ってもよい。
【０１３２】
このような本実施形態によれば、次のような効果がある。すなわち、コンパイル装置１０によりコンパイルを行う際には、ソースプログラム１に含まれるデータ依存を有する複数のループを対象としてループ整合分割行った後、同一のデータローカライザブルグループに属する各小ループ同士を可能な限り連続実行するスケジューリングを行うとともに、パディングを用いて各データローカライザブルグループで使用される配列データについてレイアウト変更を行うので、同一のデータローカライザブルグループに属する整合分割後の各小ループにより使用される複数の部分的な配列データを、キャッシュ上に重なることなく割り当てることができる（図７〜図１０、図１８〜図２１、図２２の右側部分参照）。このため、キャッシュラインコンフリクトの発生を抑えることができるので、キャッシュ最適利用演算装置２０の処理速度を向上させることができる。
【０１３３】
また、キャッシュ最適利用演算装置２０は、主記憶共有型マルチプロセッサマシンであるが、このような複数のプロセッサを備えたマシンで実行されるプログラムをコンパイル装置１０によりコンパイルする際には、同一のデータローカライザブルグループに属する各小ループ同士が、可能な限り同一のプロセッサ上で連続して実行されるスケジューリングを行うので、各データローカライザブルグループで行うループ処理を、複数のプロセッサに分散して行わせることができる。例えば、図１１に示すように、ＤＬＧ１０，ＤＬＧ１１，ＤＬＧ１２，ＤＬＧ１３の各処理を、それぞれ異なるプロセッサ３０，３１，３２，３３に割り当てることができる。このため、ＤＬＧ１０，ＤＬＧ１１，ＤＬＧ１２，ＤＬＧ１３のループ処理の並列性を利用し、キャッシュ最適利用演算装置２０の処理速度を、より一層向上させることができる。
【０１３４】
なお、本発明は前記実施形態に限定されるものではなく、本発明の目的を達成できる範囲内での変形等は本発明に含まれるものである。
【０１３５】
すなわち、前記実施形態では、キャッシュ最適利用演算装置２０は、主記憶共有型マルチプロセッサマシンであったが、本発明は、マルチプロセッサマシンのみならず、シングルプロセッサマシンにも適用することができる。
【０１３６】
また、前記実施形態では、図３に示すように、スケジューリング処理（ステップＳ７）が、パディングサイズの決定処理（ステップＳ８）およびデータレイアウトの変更処理（ステップＳ９）の前に行われるようになっていたが、これらの処理順序は、逆順としてもよい。
【０１３７】
さらに、前記実施形態では、Ｌ２キャッシュ５０〜５３（キャッシュサイズは、例えば４メガバイト等）を対象としてキャッシュ最適化を行っていたが、本発明は、Ｌ１キャッシュ７０〜７３を対象とするキャッシュ最適化を行うこともできる。
【０１３８】
【発明の効果】
以上に述べたように本発明によれば、ソースプログラムに含まれるデータ依存を有する複数のループを対象としてループ整合分割行った後、同一のデータローカライザブルグループに属する各小ループ同士を可能な限り連続実行するスケジューリングを行うとともに、パディングを用いて各データローカライザブルグループで使用される配列データについてレイアウト変更を行うので、同一のデータローカライザブルグループに属する整合分割後の各小ループにより使用される複数の部分的な配列データを、キャッシュ上に重なることなく割り当てることができ、キャッシュラインコンフリクトの発生を抑えて処理速度を向上させることができるという効果がある。
【図面の簡単な説明】
【図１】本発明の一実施形態のコンパイル装置およびキャッシュ最適利用演算装置の全体構成図。
【図２】前記実施形態のコンパイル装置を機能的に示した構成図。
【図３】前記実施形態のコンパイル装置によるコンパイル処理の流れを示すフローチャートの図。
【図４】前記実施形態のコンパイル対象となるプログラム例、およびこのプログラム中に含まれるキャッシュ最適化対象ループで使用される対象配列データをキャッシュ上に割り当てたときのイメージを示す図。
【図５】前記実施形態のコンパイル対象となるプログラム中に含まれるキャッシュ最適化対象ループについてループ整合分割を行ったときの状態を示す図。
【図６】前記実施形態のループ整合分割で得られたデータローカライザブルグループ（ＤＬＧ１０）の実行時に起きるラインコンフリクト、およびこれを回避するためのパディング量の説明図。
【図７】前記実施形態において、パディングを行ってデータローカライザブルグループ（ＤＬＧ１０）の実行時にラインコンフリクトが回避される状態の説明図。
【図８】前記実施形態において、パディングを行ってデータローカライザブルグループ（ＤＬＧ１１）の実行時にラインコンフリクトが回避される状態の説明図。
【図９】前記実施形態において、パディングを行ってデータローカライザブルグループ（ＤＬＧ１２）の実行時にラインコンフリクトが回避される状態の説明図。
【図１０】前記実施形態において、パディングを行ってデータローカライザブルグループ（ＤＬＧ１３）の実行時にラインコンフリクトが回避される状態の説明図。
【図１１】前記実施形態において、複数のプロセッサにそれぞれ異なるデータローカライザブルグループを割り当てるスケジューリングを行ったときの実行イメージを示す図。
【図１２】前記実施形態において、一つのプロセッサに全てのデータローカライザブルグループを割り当てるスケジューリングを行ったときの実行イメージを示す図。
【図１３】前記実施形態のコンパイル対象となる別のプログラム例、およびこのプログラム中に含まれるキャッシュ最適化対象ループで使用される対象配列データをキャッシュ上に割り当てたときのイメージを示す図。
【図１４】前記実施形態において、ループ整合分割を行って得られたデータローカライザブルグループ（ＤＬＧ２０）、およびこのＤＬＧ２０を構成する各小ループによりアクセスされる部分的な各配列データが、キャッシュ上に割り当てられる状態のイメージを示す図。
【図１５】前記実施形態において、ループ整合分割を行って得られたデータローカライザブルグループ（ＤＬＧ２１）、およびこのＤＬＧ２１を構成する各小ループによりアクセスされる部分的な各配列データが、キャッシュ上に割り当てられる状態のイメージを示す図。
【図１６】前記実施形態において、ループ整合分割を行って得られたデータローカライザブルグループ（ＤＬＧ２２）、およびこのＤＬＧ２２を構成する各小ループによりアクセスされる部分的な各配列データが、キャッシュ上に割り当てられる状態のイメージを示す図。
【図１７】前記実施形態において、ループ整合分割を行って得られたデータローカライザブルグループ（ＤＬＧ２３）、およびこのＤＬＧ２３を構成する各小ループによりアクセスされる部分的な各配列データが、キャッシュ上に割り当てられる状態のイメージを示す図。
【図１８】前記実施形態において、パディングを行ってデータローカライザブルグループ（ＤＬＧ２０）の実行時にラインコンフリクトが回避される状態の説明図。
【図１９】前記実施形態において、パディングを行ってデータローカライザブルグループ（ＤＬＧ２１）の実行時にラインコンフリクトが回避される状態の説明図。
【図２０】前記実施形態において、パディングを行ってデータローカライザブルグループ（ＤＬＧ２２）の実行時にラインコンフリクトが回避される状態の説明図。
【図２１】前記実施形態において、パディングを行ってデータローカライザブルグループ（ＤＬＧ２３）の実行時にラインコンフリクトが回避される状態の説明図。
【図２２】前記実施形態において、パディング前のラインコンフリクトが起きる状態、および各配列毎に非連続アクセス次元の配列サイズを拡大してパディングを行うことによりラインコンフリクトの発生が回避される状態を示す図。
【符号の説明】
１  ソースプログラム
２  目的プログラム
３  プログラム
１０  コンパイル装置
１３Ａ  マクロタスク生成手段
１３Ｂ  並列性解析手段
１３Ｃ  ターゲットループグループ選択手段
１３Ｄ  ターゲットループグループ格納手段
１３Ｅ  対象配列データ選択手段
１３Ｆ  対象配列データ格納手段
１３Ｇ  分割数決定手段
１３Ｈ  ループ整合分割手段
１３Ｊ  スケジューリング手段
１３Ｋ  パディングサイズ決定手段
１３Ｌ  データレイアウト変更手段
１４  ターゲットループグループテーブル
１５  対象配列データテーブル
２０  キャッシュ最適利用演算装置
３０〜３３  プロセッサ
４０  主メモリ
５０〜５３  キャッシュメモリであるＬ２キャッシュ
１０２，１０３，２０３，２０４，２０５  ループ
１０２Ａ，１０２Ｂ，１０２Ｃ，１０２Ｄ，１０３Ａ，１０３Ｂ，１０３Ｃ，１０３Ｄ，２０３Ａ，２０３Ｂ，２０３Ｃ，２０３Ｄ，２０４Ａ，２０４Ｂ，２０４Ｃ，２０４Ｄ，２０５Ａ，２０５Ｂ，２０５Ｃ，２０５Ｄ  小ループ
ＤＬＧ１０，ＤＬＧ１１，ＤＬＧ１２，ＤＬＧ１３，ＤＬＧ２０，ＤＬＧ２１，ＤＬＧ２２，ＤＬＧ２３  データローカライザブルグループ
ＴＬＧ１，ＴＬＧ２  ターゲットループグループ
Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆ，Ｇ，Ｈ，Ｋ，Ｎ，Ｐ，Ｑ，Ｒ，Ｓ，Ｔ，Ｕ，Ｖ  配列
【図１】
2004252728.tif 000003
【図２】
2004252728.tif 000004
【図３】
2004252728.tif 000005
【図４】
2004252728.tif 000006
【図５】
2004252728.tif 000007
【図６】
2004252728.tif 000008
【図７】
2004252728.tif 000009
【図８】
2004252728.tif 000010
【図９】
2004252728.tif 000011
【図１０】
2004252728.tif 000012
【図１１】
2004252728.tif 000013
【図１２】
2004252728.tif 000014
【図１３】
2004252728.tif 000015
【図１４】
2004252728.tif 000016
【図１５】
2004252728.tif 000017
【図１６】
2004252728.tif 000018
【図１７】
2004252728.tif 000019
【図１８】
2004252728.tif 000020
【図１９】
2004252728.tif 000021
【図２０】
2004252728.tif 000022
【図２１】
2004252728.tif 000023
【図２２】
2004252728.tif 000024