(57)【要約】【課題】キャッシュメモリを有効的に利用することによりプログラムの実行性能を向上すること。【解決手段】最適化部３２は、セクタ機能付きキャッシュメモリを搭載する情報処理装置４０にて実行されるソースプログラムからソース解析部３１が変換した中間言語テキストを解析する。具体的には、最適化部３２は、各ループにて処理されるデータ集合のループ処理実行時における再利用性の有無を判定する。そして、最適化部３２は、再利用性の有無を判定したデータ集合を格納するために要するウェイ数とシステムの最大ウェイ数とから、セクタ分割比とセクタ番号とを決定する。そして、最適化部３２は、セクタ分割比およびセクタ番号が決定されたループにおいて、セクタ分割命令およびメセクタ番号を付加した命令文を挿入する。ファイル生成部３３は、命令文が挿入された中間言語テキストからオブジェクトファイルを生成する。【選択図】図４
2010244205.tif 000002
【特許請求の範囲】
【請求項１】
セクタ機能付きのキャッシュメモリを搭載する情報処理装置にて実行されるソースプログラムを解析することで、当該ソースプログラムの各ループにおいて処理されるデータ配列の集合であるデータ集合のループ処理実行時における再利用性の有無を判定し、当該再利用性の有無を判定したデータ集合を格納するために要する容量と前記キャッシュメモリの容量とから、前記キャッシュメモリにおけるセクタ分割比と、当該データ集合を格納するセクタを特定するためのセクタ番号とを決定する決定手順と、  
前記決定手順によって前記セクタ分割比および前記セクタ番号が決定されたループにおいて、当該セクタ分割比および当該セクタ番号に基づく命令制御文を前記ソースプログラムに挿入する挿入手順と、
前記挿入手順によって前記命令制御文が挿入されたソースプログラムからオブジェクトファイルを生成するファイル生成手順と、
をコンピュータに実行させることを特徴とするコンパイラプログラム。
【請求項２】
前記決定手順は、再利用性有りとして判定したデータ配列のデータ集合を格納するために要する容量と、当該再利用性有りとして判定したデータ配列以外のデータ集合を格納するために要する容量との和が、前記キャッシュメモリの容量となるように前記セクタ分割比と前記セクタ番号とを決定することを特徴とする請求項１に記載のコンパイラプログラム。
【請求項３】
前記決定手順は、再利用性有りのデータ配列がなかったループにて再利用性の無いストリームデータとして判定されるデータ集合が存在する場合、当該再利用性の無いストリームデータとして判定されるデータ集合を格納するために要する容量と当該再利用性の無いストリームデータとして判定されるデータ配列以外のデータ集合を格納するために要する容量との和が、前記キャッシュメモリの容量より大きくなるように前記セクタ分割比と前記セクタ番号とを決定することを特徴とする請求項２に記載のコンパイラプログラム。
【請求項４】
セクタ機能付きのキャッシュメモリに格納する際のセクタ分割比が作成者によりループ内にて指定されたソースプログラムを受け付ける受け付け手順と、
前記受け付け手順によって受け付けられた前記ソースプログラムから、当該ソースプログラムにて前記作成者により前記セクタ分割比が指定されたループにて用いられる配列データを抽出する抽出手順と、
前記抽出手順によって抽出された前記配列データの再利用性の有無と、前記セクタ分割比に基づいて、当該配列データを前記キャッシュメモリに格納する際のセクタ番号を決定する決定手順と、
前記決定手順によって前記セクタ番号が決定されたループにおいて、当該決定されたセクタ番号および前記作成者から指定されたセクタ分割比に基づく命令制御文を前記ソースプログラムに挿入する挿入手順と、
前記挿入手順によって前記命令制御文が挿入されたソースプログラムからオブジェクトファイルを生成するファイル生成手順と、
をコンピュータに実行させることを特徴とするコンパイラプログラム。
【請求項５】
前記決定手順は、前記作成者から指定されたセクタ分割比が、前記キャッシュメモリの容量に対応する範囲内で分割されたものであるか、前記キャッシュメモリの容量に対応する範囲より大きい範囲内で分割されたものであるかを判定したうえで、前記セクタ番号を決定することを特徴とする請求項４に記載のコンパイラプログラム。
【請求項６】
セクタ機能付きのキャッシュメモリを搭載する情報処理装置にて実行されるソースプログラムを解析することで、当該ソースプログラムの各ループにおいて処理されるデータ配列の集合であるデータ集合のループ処理実行時における再利用性の有無を判定し、当該再利用性の有無を判定したデータ集合を格納するために要する容量と前記キャッシュメモリの容量とから、前記キャッシュメモリにおけるセクタ分割比と、当該データ集合を格納するセクタを特定するためのセクタ番号とを決定する決定部と、  
前記決定部によって前記セクタ分割比および前記セクタ番号が決定されたループにおいて、当該セクタ分割比および当該セクタ番号に基づく命令制御文を前記ソースプログラムに挿入する挿入部と、
前記挿入部によって前記命令制御文が挿入されたソースプログラムからオブジェクトファイルを生成するファイル生成部と、
を有することを特徴とするコンパイラ装置。
【請求項７】
セクタ機能付きのキャッシュメモリに格納する際のセクタ分割比が作成者によりループ内にて指定されたソースプログラムを受け付ける受け付け部と、
前記受け付け部によって受け付けられた前記ソースプログラムから、当該ソースプログラムにて前記作成者により前記セクタ分割比が指定されたループにて用いられる配列データを抽出する抽出部と、
前記抽出部によって抽出された前記配列データの再利用性の有無と、前記セクタ分割比に基づいて、当該配列データを前記キャッシュメモリに格納する際のセクタ番号を決定する決定部と、
前記決定部によって前記セクタ番号が決定されたループにおいて、当該決定されたセクタ番号および前記作成者から指定されたセクタ分割比に基づく命令制御文を前記ソースプログラムに挿入する挿入部と、
前記挿入部によって前記命令制御文が挿入されたソースプログラムからオブジェクトファイルを生成するファイル生成部と、
を有することを特徴とするコンパイラ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、コンパイラプログラムおよびコンパイラ装置に関する。
【背景技術】
【０００２】
従来より、ＣＰＵ（Central Processing Unit）およびメインメモリ間に発生するデータ遅延を解消してプログラムの実行処理を向上するために、記憶容量が小さいが高速アクセスが可能なキャッシュメモリが利用されている（例えば、特許文献１〜５参照）。
【０００３】
ここで、以下に説明するように、特定のデータをできるだけ、あるいは、特定のデータを必ずキャッシュメモリ上に残すことで、プログラムの実行処理を向上させる技術が知られている。
【０００４】
第一の技術は、最弱ウェイ方式である。最弱ウェイ方式は、メモリアクセス命令によってデータをキャッシュメモリに転送する際に、同一インデクス内（同一ウェイ内）で最初に追い出すべきデータを指示することができる方式である。最弱ウェイ方式では、ストリームデータのような再利用性の無いデータとそれ以外のデータとを同じＬＲＵ方式により追出し（置換）するのではなく、再利用性の無いデータを優先的に追い出すことで、再利用性のあるデータがキャッシュ上に残り易くなる。なお、ＬＲＵ（Ｌｅａｓｔ Ｒｅｃｅｎｔｌｙ Ｕｓｅｄ）方式では、使われてから最も長い時間が経っているウェイのデータが選択され、選択されたデータが新たなデータと置換される。また、ウェイとは、セットアソシエイティブ方式により、キャッシュラインを複数に分割した場合の単位である。
【０００５】
第二の技術は、ローカルメモリ方式である（例えば、特許文献６、７参照）。ローカルメモリ方式では、キャッシュメモリ領域が通常のキャッシュメモリ領域とローカルメモリ（またはスクラッチパッド）領域とに分割される。そして、ローカルメモリ方式では、ローカルメモリ領域に再利用性のあるデータが配置される。したがって、ローカルメモリ方式では、ストリームデータのような再利用性の無いデータによって再利用性のあるデータがキャッシュメモリから追い出されることを防ぐことができる。
【０００６】
第三の技術は、キャッシュラインロック方式またはキャッシュウェイロック方式である。キャッシュラインロック方式では、特定のキャッシュラインがロックされ、キャッシュウェイロック方式では、特定のキャッシュウェイがロックされる。そして、キャッシュラインロック方式またはキャッシュウェイロック方式では、ローカルメモリ方式と同様に、再利用性のあるデータを書き込んだキャッシュラインやキャッシュウェイがロックされることで、ストリームデータのような再利用性の無いデータによって再利用性のあるデータがキャッシュメモリから追い出されることを防ぐことができる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開昭６２−２３３８６４号公報
【特許文献２】特表２００８−５２５９１９号公報
【特許文献３】特開２００５−１２２５０６号公報
【特許文献４】特開２００８−１０２７３３号公報
【特許文献５】特開２００２−４９５２９号公報
【特許文献６】特開平１０−１８７５３３号公報
【特許文献７】特開平４−１７５９４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ところで、上記したローカルメモリ方式では、通常のキャッシュメモリ領域およびメインメモリとは異なるローカルメモリ領域に対する特別なストア命令が必要となる。また、上記したローカルメモリ方式では、通常のキャッシュ領域およびスクラッチパッド領域と、メインメモリとの間でデータの一貫性を維持するための制御が必要になる。また、上記したローカルメモリ方式では、プログラム実行中に、ローカルメモリの領域サイズを変更する場合、大きなオーバーヘッドが必要となる。
【０００９】
また、上記したキャッシュラインロック方式またはキャッシュウェイロック方式では、プログラマがロック解除（アンロック）を忘れたり、誤って全てのキャッシュ領域をロックしてしまったりした場合、キャッシュシステムが正常動作しなくなる可能性がある。また、上記したキャッシュラインロック方式またはキャッシュウェイロック方式では、アンロックのための専用ハードウェア機構が必要となり、追加コストが大きくなってしまう。
【００１０】
また、上記した最弱ウェイ方式は、あくまでも優先的な追出しであり、ローカルメモリ方式やキャッシュラインロック方式またはキャッシュウェイロック方式と比べると、再利用性のあるデータがキャッシュメモリに残る確率が低くなる。また、上記した最弱ウェイ方式は、ローカルメモリ方式と同時に実装できない。
【００１１】
すなわち、上記した従来の技術は、必ずしもキャッシュメモリを有効的に利用することができないため、プログラムの実行性能が低下してしまう場合があるという課題があった。
【００１２】
そこで、開示の技術は、上述した従来技術の課題を解決するためになされたものであり、キャッシュメモリを有効的に利用することによりプログラムの実行性能を向上することが可能となるコンパイラプログラムおよびコンパイラ装置を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上述した課題を解決し、目的を達成するため、本願の開示するプログラムは、一つの様態において、セクタ機能付きのキャッシュメモリを搭載する情報処理装置にて実行されるソースプログラムを解析することで、当該ソースプログラムの各ループにおいて処理されるデータ配列の集合であるデータ集合のループ処理実行時における再利用性の有無を判定し、当該再利用性の有無を判定したデータ集合を格納するために要する容量と前記キャッシュメモリの容量とから、前記キャッシュメモリにおけるセクタ分割比と、当該データ集合を格納するセクタを特定するためのセクタ番号とを決定する決定手順と、前記決定手順によって前記セクタ分割比および前記セクタ番号が決定されたループにおいて、当該セクタ分割比および当該セクタ番号に基づく命令制御文を前記ソースプログラムに挿入する挿入手順と、前記挿入手順によって前記命令制御文が挿入されたソースプログラムからオブジェクトファイルを生成するファイル生成手順と、をコンピュータに実行させることを要件とする。
【００１４】
また、本願の開示するプログラムは、他の様態において、セクタ機能付きのキャッシュメモリに格納する際のセクタ分割比が作成者によりループ内にて指定されたソースプログラムを受け付ける受け付け手順と、前記受け付け手順によって受け付けられた前記ソースプログラムから、当該ソースプログラムにて前記作成者により前記セクタ分割比が指定されたループにて用いられる配列データを抽出する抽出手順と、前記抽出手順によって抽出された前記配列データの再利用性の有無と、前記セクタ分割比に基づいて、当該配列データを前記キャッシュメモリに格納する際のセクタ番号を決定する決定手順と、前記決定手順によって前記セクタ番号が決定されたループにおいて、当該決定されたセクタ番号および前記作成者から指定されたセクタ分割比に基づく命令制御文を前記ソースプログラムに挿入する挿入手順と、前記挿入手順によって前記命令制御文が挿入されたソースプログラムからオブジェクトファイルを生成するファイル生成手順と、をコンピュータに実行させることを要件とする。
【発明の効果】
【００１５】
開示のプログラムによれば、キャッシュメモリを有効的に利用することによりプログラムの実行性能を向上することが可能となる。
【図面の簡単な説明】
【００１６】
【図１】図１は、セクタ機能付きキャッシュシステムにおける最弱ウェイ方式を説明するための図である。
【図２】図２は、セクタ機能付きキャッシュシステムにおけるローカルメモリ方式を説明するための図である。
【図３】図３は、実施例１におけるコンパイラ装置によるセクタ分割処理の概念を説明するための図である。
【図４】図４は、実施例１におけるコンパイラ装置の構成を示すブロック図である。
【図５】図５は、実施例１におけるソースプログラム記憶部を説明するための図である。
【図６】図６は、アーキデータ記憶部を説明するための図である。
【図７】図７は、実施例１におけるコンパイラ装置の全体処理を説明するためのフローチャートである。
【図８】図８は、図７に示した最適化部の全体処理を説明するためのフローチャートである。
【図９】図９は、図８に示したセクタ分割比、セクタ分割比有効範囲およびセクタ番号の決定処理を説明するためのフローチャートである。
【図１０】図１０は、図９に示したセクタ分割比有効範囲の決定処理を説明するためのフローチャートである。
【図１１】図１１は、図９に示した再利用性のあるメモリアクセスデータとして扱うデータ集合および必要ウェイ数の決定処理を説明するためのフローチャートである。
【図１２】図１２は、図９に示したストリームデータとして扱うデータ集合および必要ウェイ数の決定処理を説明するためのフローチャートである。
【図１３】図１３は、図９に示した３種類の出力パターンを説明するための図である。
【図１４】図１４は、最適化結果記憶部を説明するための図である。
【図１５】図１５は、実施例２において用いられるキャッシュ制御文の一例を説明するための図である。
【図１６】図１６は、最弱ウェイ方式によるセクタ分割の指定例を説明するための図である。
【図１７】図１７は、ローカルメモリ方式によるセクタ分割の指定例を説明するための図である。
【図１８】図１８は、最弱ウェイ方式およびローカルメモリ方式によるセクタ分割の指定例を説明するための図である。
【図１９】図１９は、制御エリア指定の変形例を説明するための図である。
【図２０】図２０は、準ローカルメモリ方式によるセクタ分割の指定例を説明するための図である。
【図２１】図２１は、実施例２におけるソース解析部を説明するための図である。
【図２２】図２２は、実施例２における最適化部のセクタ決定処理を説明するためのフローチャートである。
【図２３】図２３は、実施例１のコンパイラプログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１７】
以下に添付図面を参照して、本願の開示するコンパイラプログラムおよびコンパイラ装置の実施例を詳細に説明する。なお、以下では、本願の開示するコンパイラプログラムを実行するコンパイラ装置を実施例として説明する。
【実施例１】
【００１８】
まず最初に、本実施例で用いる主要な用語を説明する。本実施例で用いる「セクタ機能付きキャッシュメモリシステム」とは、セット・アソシアティブ方式によりキャッシュラインが複数のウェイに分割されたキャッシュメモリを、プログラム実行中でも、複数のセクタに分割することを指示できるシステムのことである。
【００１９】
具体的には、「セクタ機能付きキャッシュメモリシステム」においては、キャッシュメモリをセクタに分割する際に、セクタの分割比（以下、セクタ分割比と記す）を指示することができる。さらに、「セクタ機能付きキャッシュメモリシステム」においては、後続する各メモリアクセス命令の使用セクタ（具体的には、分割された各セクタを特定するセクタ番号）を指示することができる。これにより、「セクタ機能付きキャッシュメモリシステム」においては、間接的（または、直接的）に各セクタの使用用途を指示できる。
【００２０】
また、「ＬＲＵ方式」とは、使われてから最も長い時間が経っている（ＬＲＵ：Ｌｅａｓｔ Ｒｅｃｅｎｔｌｙ Ｕｓｅｄ）データを順次キャッシュメモリから除去し、新たなデータを取り込む方式のことである。また、「最弱ウェイ方式」とは、メモリアクセス命令によってデータをキャッシュメモリに転送する際に、同一インデクス内（同一ウェイ内）で最初に追い出すべきデータを指示する方式のことである。また、「ローカルメモリ方式」とは、キャッシュメモリ領域を通常のキャッシュメモリ領域とローカルメモリ（またはスクラッチパッド）領域とに分割し、ローカルメモリ領域に再利用性のあるデータが配置される方式のことである。
【００２１】
さらに、「セクタ機能付きキャッシュメモリシステムにおける最弱ウェイ方式」とは、例えば、２つのセクタ（セクタ０およびセクタ１）に分割されたキャッシュメモリを用いてプログラムを実行する際に、最弱ウェイ方式を採用したシステムのことである。以下、「セクタ機能付きキャッシュメモリシステムにおける最弱ウェイ方式」について、図１を用いて説明する。なお、図１は、セクタ機能付きキャッシュシステムにおける最弱ウェイ方式を説明するための図である。
【００２２】
「セクタ機能付きキャッシュメモリシステムにおける最弱ウェイ方式」においては、図１の（Ａ）に示すように、セクタ０とセクタ１との最大ウェイ数の合計が、システムの最大ウェイ数より大きな値になるようにセクタ分割比が指定される。例えば、図１の（Ｂ）に示すように、１ウェイが５１２ＫＢであるシステム（キャッシュメモリ）の最大ウェイ数が「１０」である場合、セクタ０の最大ウェイ数は、システムの最大ウェイ数と同じ「１０」とされ、セクタ１の最大ウェイ数は、「５」とされる。
【００２３】
そして、例えば、図１の（Ｃ）に示すソースプログラムを実行する際、隣接領域を順次アクセスする連続性のあるデータであるストリームデータの配列ａおよび配列ｂは、セクタ１に割り当てられる。そして、図１の（Ｃ）に示すように、ｄｏループにおいて、再利用性のあるデータである配列ｃは、セクタ０に割り当てられる。これにより、「セクタ機能付きキャッシュメモリシステム」にて「最弱ウェイ方式」が実行された場合、配列ａおよび配列ｂのデータが別のセクタにストアされることで、配列ｃのデータがキャッシュメモリから追い出される確率を低減することができる。
【００２４】
また、「セクタ機能付きキャッシュメモリシステムにおけるローカルメモリ方式」とは、再利用性のある配列が予定外のキャッシュコンフリクトを起こしてキャッシュメモリから追い出されることを防止するローカルメモリ方式を、セクタ機能にて実現する方式のことである。一般的には、ローカルメモリは、通常のキャッシュメモリとは別の高速メモリを使うことが多いが、セクタ機能付きキャッシュメモリシステムでは、キャッシュ制御だけで、ローカルメモリ方式と同じ動きを実現する。以下、「セクタ機能付きキャッシュメモリシステムにおけるローカルメモリ方式」について、図２を用いて説明する。なお、図２は、セクタ機能付きキャッシュシステムにおけるローカルメモリ方式を説明するための図である。
【００２５】
「セクタ機能付きキャッシュメモリシステムにおけるローカルメモリ方式」では、セクタ機能付きキャッシュメモリをローカルメモリとして利用する場合、図２の（Ａ）に示すように、セクタ０とセクタ１との最大ウェイ数の合計が、システムの最大ウェイ数と同じ値になるようにセクタ分割比が指定される。例えば、図２の（Ｂ）に示すように、１ウェイが５１２ＫＢであるシステム（キャッシュメモリ）の最大ウェイ数が「１０」である場合、セクタ０の最大ウェイ数は、「９」とされ、セクタ１の最大ウェイ数は、「１０」から「９」を差し引いた「１」とされる。
【００２６】
そして、例えば、図２の（Ｃ）に示すソースプログラムを実行する際、再利用性のある配列ｃは、セクタ１に割当て、ストリームデータの配列ａおよび配列ｂは、セクタ０に割り当てられる。なお、図１の（Ｃ）に示すソースプログラムでは、配列ｃの宣言サイズが動的（do i=1,m）であるのに対し、図２の（Ｃ）に示すソースプログラムでは、配列ｃの宣言サイズが静的に「do i=1,1000」として示されている。
【００２７】
ここで、配列ｃのアクセス幅（サイズ）がセクタ１のサイズ５１２ＫＢ以下である場合、セクタ１を利用するデータは配列ｃのみであるため、配列ｃがキャッシュコンフリクトを起こしてセクタ１から追い出される確率は、０％となる。このように、「セクタ機能付きキャッシュメモリシステム」にて、セクタ１をローカルメモリとして扱うことにより、再利用性のある配列ｃがキャッシュから追い出されることを防ぐことができる。なお、図２の（Ｃ）に示すソースプログラムのように、ループの回転数が明確でない場合であっても、配列ｃの宣言サイズが静的に明示されていれば、「セクタ機能付きキャッシュメモリシステムにおけるローカルメモリ方式」は、実行可能である。
【００２８】
また、「セクタ機能付きキャッシュメモリシステムにおける準ローカルメモリ方式」とは、ローカルメモリとするセクタ番号のキャッシュメモリに割り当てる再利用性のある配列のアクセスサイズが不明の場合に用いられる方式のことである。「セクタ機能付きキャッシュメモリシステムにおける準ローカルメモリ方式」では、「セクタ機能付きキャッシュメモリシステムにおけるローカルメモリ方式」と同様に、セクタ０とセクタ１の最大ウェイ数の和がシステムの最大ウェイ数となる分割比が指定される。
【００２９】
例えば、図１の（Ａ）に示すソースプログラムでは、配列ｃのアクセスサイズも宣言サイズも不明である。「セクタ機能付きキャッシュメモリシステムにおける準ローカルメモリ方式」を用いる場合に、例えば、図２の（Ｃ）に示すようなセクタ分割を行う。すなわち、再利用性のある配列ｃのアクセスサイズが不明の場合、例えば、図２の（Ｃ）に示すように、システムの最大ウェイ数が「１０」である場合、セクタ０の最大ウェイ数は、「６」とされ、セクタ１の最大ウェイ数は、「１０」から「６」を差し引いた「４」とされる。すなわち、図２の（Ｃ）に示すセクタ分割比は、配列ｃのアクセスサイズが不明のため、図２の（Ｂ）に示すローカルメモリ方式と比較して、セクタ１の最大ウェイ数に余裕を持たせるように指定されている。
【００３０】
しかしながら、「セクタ機能付きキャッシュメモリシステムにおける準ローカルメモリ方式」では、以下に示す２つの課題がある。第一の課題は、再利用性のある配列のアクセス幅が不明なため、再利用性のある配列を割り当てたセクタ１内にてＬＲＵ方式により、キャッシュコンフリクトを起こす可能性があることである。また、第二の課題は、キャッシュコンフリクトを懸念して、セクタ１の最大ウェイ数を増やすと、セクタ０の最大ウェイ数が減るため、ストリームデータのオンキャッシュ率が低下することである。
【００３１】
このような２つの課題があるため、「セクタ機能付きキャッシュメモリシステムにおける準ローカルメモリ方式」では、例えば、ＰＡ（パフォーマンス・アナライザ）ツールによって収集したＰＡ情報に基づいて、セクタ分割比を決定する必要がある。このため、プログラマは、デフォルトではなくオプショナルの動作とするなどの工夫が必要となり、「セクタ機能付きキャッシュメモリシステム」を容易に用いることができない場合がある。すなわち、自動的にセクタ分割比と有効範囲（開始位置と終了位置）とを決め、メモリアクセスデータごとのセクタ番号を設定できるコンパイラ装置が無いため、プログラマは、セクタ機能付きキャッシュメモリを有効に活用することができない。
【００３２】
そこで、本実施例におけるコンパイラ装置は、以下、図３を用いて説明するようなセクタ分割処理を実行する。なお、図３は、実施例１におけるコンパイラ装置によるセクタ分割処理の概念を説明するための図である。
【００３３】
図３に示すように、本実施例におけるコンパイラ装置は、ループ内のデータのアクセス方法、ループ内で用いられるデータ配列のサイズ、キャッシュメモリのウェイ数、キャッシュメモリのサイズなど様々な要因（要因１〜ｎ）を解析する。そして、本実施例におけるコンパイラ装置は、図３に示すように、解析結果である各要因をパラメタとして、セクタ分割比、セクタ分割比有効範囲（開始位置および終了位置）および各データのセクタ番号を決定する決定関数に入力する。
【００３４】
決定関数の出力結果から、本実施例におけるコンパイラ装置は、図３に示すように、セクタ分割比、セクタ分割比有効範囲および各データのセクタ番号を決定し、ソースプログラムにセクタ分割命令の挿入およびメモリアクセス命令へのセクタ番号付加の最適化処理を実行する。なお、本実施例におけるコンパイラ装置は、ソースプログラムごとに解析した新しい要因に応じて、決定関数を変更する。
【００３５】
次に、本実施例におけるコンパイラ装置の構成について、図４を用いて説明する。図４は、実施例１におけるコンパイラ装置の構成を示すブロック図である。
【００３６】
図４に示すように、実施例１におけるコンパイラ装置１０は、ソースプログラム入力部１１と、オブジェクトファイル出力部１２と、通信部１３と、入出力制御Ｉ／Ｆ部１４と、記憶部２０と、処理部３０とを有する。また、本実施例におけるコンパイラ装置１０は、図２に示すように、情報処理装置４０と接続される。
【００３７】
情報処理装置４０は、「セクタ機能付きキャッシュメモリ」を搭載し、コンパイラ装置１０から出力されたオブジェクトファイルを実行する計算機である。なお、本実施例では、コンパイラ装置１０と情報処理装置４０とが独立した装置である場合について説明するが、本実施例はこれに限定されるものではなく、コンパイラ装置１０が情報処理装置４０に組み込まれている場合であってもよい。
【００３８】
ソースプログラム入力部１１は、プログラマが作成したソースプログラムを受け付け、オブジェクトファイル出力部１２は、処理部３０により生成されたオブジェクトファイルを、情報処理装置４０に出力する。通信部１３は、情報処理装置４０から後述するアーキデータを受信する。
【００３９】
通信部１３は、情報処理装置４０から後述するアーキデータを受信する。
【００４０】
入出力部Ｉ／Ｆ部１４は、ソースプログラム入力部１１、オブジェクトファイル出力部１２および通信部１３と、記憶部２０および処理部３０との間におけるデータ転送を制御する。
【００４１】
記憶部２０は、ソースプログラム入力部１１が受け付けたソースプログラムや後述する処理部１５による各種処理結果を記憶する。ここで、記憶部２０は、特に本実施例に密接に関連するものとして、図４に示すように、ソースプログラム記憶部２１と、ソース解析結果記憶部２２と、アーキデータ記憶部２３と、最適化結果報記憶部２４とを有する。
【００４２】
ソースプログラム記憶部２１は、ソースプログラム入力部１１が受け付けたソースプログラムを記憶する。例えば、ソースプログラム記憶部２１は、図５の（Ａ）、（Ｂ）および（Ｃ）に示すようなソースプログラムを記憶する。図５は、実施例１におけるソースプログラム記憶部を説明するための図である。
【００４３】
なお、図５に示す３種類のソースプログラムについては、後に詳細に説明する。
【００４４】
ソース解析結果記憶部２２は、後述するソース解析部３１がソースプログラムをコンパイラ装置１０が扱うことが可能となる言語表現に変換した中間言語テキストを記憶する。
【００４５】
アーキデータ記憶部２３は、通信部１３が受信した情報処理装置４０のハードウェア情報としてのアーキデータを記憶する。アーキデータは、情報処理装置４０に搭載されるキャッシュメモリのサイズ、キャッシュウェイ数およびキャッシュセクタ数の情報のことである。例えば、アーキデータ記憶部２３は、図６に示すように、情報処理装置４０の２次キャッシュメモリのアーキデータとして、キャッシュサイズが「５ＭＢ」であり、キャッシュウェイ数が「１０ＷＡＹ」であり、キャッシュセクタ数が「２」であるとする情報を記憶する。なお、キャッシュウェイ数は、システムの最大ウェイ数であり、キャッシュセクタ数は、セクタ分割数である。
【００４６】
最適化結果記憶部２４は、後述する最適化部３２の処理結果を記憶する。なお、最適化結果記憶部２４が記憶する内容については、後に詳述する。
【００４７】
処理部３０は、入出力部Ｉ／Ｆ部１４から転送されたソースプログラムがソースプログラム記憶部２１に格納された際に、各種処理を実行する。ここで、処理部３０は、特に本実施例に密接に関連するものとして、図４に示すように、ソース解析部３１と、最適化部３２と、ファイル生成部３３とを有する。
【００４８】
ここで、実施例１におけるコンパイラ装置１０が、図４に示すソース解析部３１と、最適化部３２と、ファイル生成部３３とを用いて実行する処理全体の大まかな流れについて、図７を用いて説明する。なお、図７は、実施例１におけるコンパイラ装置の全体処理を説明するためのフローチャートである。
【００４９】
図７に示すように、ソース解析部３１は、ソースプログラムが入力されると（ステップＳ１０１肯定）、ソースプログラム記憶部２１が記憶するソースプログラムを中間言語ファイルに変換するソース解析を行なう（ステップＳ１０２）。
【００５０】
そして、最適化部３２は、中間言語ファイルとアーキデータとに基づいて、図３を用いて説明したセクタ分割処理により最適化処理を行なう（ステップＳ１０３）。
【００５１】
そののち、ファイル生成部３３は、最適化部３２が最適化処理を行なった中間言語ファイルからオブジェクトファイルを生成してオブジェクトファイル出力部１２に出力し（ステップＳ１０４）、実施例１におけるコンパイラ装置１０は、処理を終了する。
【００５２】
ここで、図７に示した最適化部３２によるステップＳ１０３の処理について、図８〜図１２のフローチャートを用いて詳細に説明する。なお、図８は、図７に示した最適化部の全体処理を説明するためのフローチャートであり、図９は、図８に示したセクタ分割比、セクタ分割比有効範囲およびセクタ番号の決定処理を説明するためのフローチャートである。また、図１０は、図９に示したセクタ分割比有効範囲の決定処理を説明するためのフローチャートであり、図１１は、図９に示した再利用性のあるメモリアクセスデータとして扱うデータ集合および必要ウェイ数の決定処理を説明するためのフローチャートである。また、図１２は、図９に示したストリームデータとして扱うデータ集合および必要ウェイ数の決定処理を説明するためのフローチャートである。
【００５３】
図８に示すように、実施例１における最適化部３２は、アーキデータおよび中間言語テキストが格納されると（ステップＳ２０１肯定）、セクタ分割比、セクタ分割比有効範囲および各データのセクタ番号を決定する（ステップＳ２０２）。ここで、プログラム内のループには複雑な多重ループもあるので、最適化部３２は、プログラム内の各ループに対して、ループ制御変数に依存した配列があるかどうかと、ユーザ手続きがあるかどうかとを判別して、キャッシュ分割命令を挿入するループを最初に決定する。
【００５４】
具体的には、図９に示すように、最適化部３２は、まず、セクタ分割比有効範囲（ループ集合ＬＳＥＴ）の決定を行なう（ステップＳ３０１）。
【００５５】
より具体的には、図１０に示すように、最適化部３２は、中間言語テキスト内の全ループを検索し（ステップＳ４０１）、処理対象のループＬ内にループ制御変数に依存する配列がないか、または、ユーザ手続き（関数）があるかを判定する（ステップＳ４０２）。
【００５６】
ループＬ内において、ループ制御変数に依存する配列があり、かつ、ユーザ手続き（関数）がない場合（ステップＳ４０２否定）、最適化部３２は、セクタ分割比有効範囲（ループ集合ＬＳＥＴ）にループＬを登録する（ステップＳ４０３）。
【００５７】
一方、ループＬ内においてループ制御変数に依存する配列がない場合、または、ループＬ内においてユーザ手続き（関数）がある場合（ステップＳ４０２肯定）、最適化部３２は、ループＬを処理対象外とする。
【００５８】
そして、最適化部３２は、ステップＳ４０１にて検索した全ループを処理したか否かを判定し（ステップＳ４０４）、未処理のループがある場合（ステップＳ４０４否定）、ステップＳ４０２に戻って、次のループに対する処理を行なう。
【００５９】
一方、ステップＳ４０１にて検索した全ループを処理していた場合（ステップＳ４０４肯定）、登録されたループの集合であるセクタ分割比有効範囲（ループ集合ＬＳＥＴ）を決定し（ステップＳ４０５）、図９のステップＳ３０２の処理に移行する。
【００６０】
図９に戻って、最適化部３２は、決定したループ集合ＬＳＥＴ内のループに対して、１つずつ処理を開始し（ステップＳ３０２）、ループ内のすべての配列サイズが静的に分かり、キャッシュサイズより小さいか否かを判定する（ステップＳ３０３）。
【００６１】
ループ内のすべての配列サイズが静的に分かり、かつ、すべての配列サイズがキャッシュサイズより小さい場合（ステップＳ３０３肯定）、最適化部３２は、セクタ利用なしと判定して、ＬＲＵ方式を採用すると決定する（ステップＳ３１０）。
【００６２】
一方、配列サイズが静的に分からない配列がある、または、配列サイズがキャッシュサイズ以上である配列がある場合（ステップＳ３０３否定）、最適化部３２は、再利用性のあるメモリアクセスデータとして扱うデータ集合（Ｓ）および必要ウェイ数(ＳＷ)の決定を行なう（ステップＳ３０４）。
【００６３】
具体的には、図１１に示すように、最適化部３２は、ループ内の各データ（各データ配列）に対する処理を開始し（ステップＳ５０１）、再利用性のあるデータが「１」以上であるか否かを判定する（ステップＳ５０２）。
【００６４】
ループ内の再利用性のあるデータが「０」の場合（ステップＳ５０２否定）、最適化部３２は、「Ｓ＝ＮＵＬＬ」および「ＳＷ＝０」と決定する（ステップＳ５１１）。
【００６５】
一方、ループ内の再利用性のあるデータが「１」以上である場合（ステップＳ５０２肯定）、最適化部３２は、ループ内の再利用性のあるデータが「１」であるか否かを判定する（ステップＳ５０３）。
【００６６】
ループ内の再利用性のあるデータが「１」である場合（ステップＳ５０３肯定）、最適化部３２は、「Ｓ」を決定し、ＳＷを決定するためのＳＢを決定する（ステップＳ５０４）。すなわち、最適化部３２は、１つの再利用性のあるデータを「Ｓ」として決定し、再利用性のあるデータのサイズが、アクセスサイズまたは宣言サイズで静的に分かるほうを「ＳＢ、単位：バイト」と決定する。ここで、最適化部３２は、再利用性のあるデータのサイズが、アクセスサイズおよび宣言サイズの両方で静的に分かる場合、小さい値をＳＢとする。
【００６７】
一方、ループ内の再利用性のあるデータが「２」以上である場合（ステップＳ５０３否定）、最適化部３２は、再利用性のある配列が連続領域に割付可能か否かを判定する（ステップ５０５）。例えば、最適化部３２は、再利用性のある配列１および配列２の間に、別の再利用性の無い配列３が割り込まれるか否かを判定する。
【００６８】
ここで、再利用性のある配列が連続領域に割付不可である場合（ステップ５０５否定）、最適化部３２は、「Ｓ＝ＮＵＬＬ」および「ＳＷ＝０」と決定する（ステップＳ５１１）。
【００６９】
一方、再利用性のある配列が連続領域に割付可能である場合（ステップ５０５肯定）、最適化部３２は、再利用性のある２つ以上の配列の集合である「Ｓ」を決定し、ＳＷを決定するためのＳＢを決定する（ステップＳ５０６）。なお、最適化部３２は、再利用性のある配列のデータの宣言サイズを合計（ＳＵＭ）することで、ＳＢを決定する。
【００７０】
ステップＳ５０４およびステップＳ５０６により、ＳおよびＳＢが決定されると、最適化部３２は、決定したＳＢが予め設定された下限閾値から上限閾値の範囲内にあるか否かを判定する（ステップＳ５０７）。
【００７１】
ここで、決定したＳＢが予め設定された下限閾値から上限閾値の範囲内にない場合（ステップＳ５０７否定）、最適化部３２は、決定した集合Ｓを以降の処理に用いないとして、「Ｓ＝ＮＵＬＬ」および「ＳＷ＝０」と決定する（ステップＳ５１１）。
【００７２】
一方、決定したＳＢが予め設定された下限閾値から上限閾値の範囲内にある場合（ステップＳ５０７肯定）、ＳＢバイトが入るウェイ数をＳＷとして決定する（ステップＳ５０８）。
【００７３】
さらに、最適化部３２は、再利用性のあるデータ数比率（ＡＲ）を再利用性のあるデータ数を全データ数にて除することで算出し（ステップＳ５０９）、算出したＡＲが予め設定された下限閾値から上限閾値の範囲内にあるか否かを判定する（ステップＳ５１０）。なお、ＡＲに対して設定される閾値と、上述したＳＢに対して設定される閾値とは、異なる値である。
【００７４】
ここで、算出したＡＲが予め設定された下限閾値から上限閾値の範囲内にない場合（ステップＳ５１０否定）、最適化部３２は、決定した集合Ｓを以降の処理に用いないとして、「Ｓ＝ＮＵＬＬ」および「ＳＷ＝０」と決定する（ステップＳ５１１）。
【００７５】
一方、算出したＡＲが予め設定された下限閾値から上限閾値の範囲内にある場合（ステップＳ５１０肯定）、最適化部３２は、ステップＳ５０４またはステップＳ５０６で決定した集合ＳおよびステップＳ５０８で決定したＳＷを確定する（ステップＳ５１２）。
【００７６】
そして、最適化部３２は、ステップＳ５１１およびステップＳ５１２によりＳおよびＳＷが確定したのち、ステップＳ３０５に移行する。
【００７７】
図９に戻って、最適化部３２は、ステップＳ３０４（図１１）の処理により決定された再利用性のあるメモリアクセスデータのデータ集合Ｓが空（ＮＵＬＬ）であるか否かを判定する（ステップＳ３０５）。
【００７８】
ここで、データ集合Ｓが空でない場合（ステップＳ３０５否定）、最適化部３２は、ローカルメモリ方式の新アルゴリズムを生成すると決定する（ステップＳ３０７）。すなわち、最適化部３２は、再利用性のあるデータを連続領域に割当てることができるので、ローカルメモリ方式を採用できると判断する。
【００７９】
具体的には、最適化部３２は、セクタ分割比有効範囲であるループＬに対して、図６に示したキャッシュウェイ数「１０」から、セクタ分割比を「セクタ番号０：セクタ番号１＝１０−ＳＷ：ＳＷ」と決定する。また、最適化部３２は、データ集合Ｓに登録されたデータ配列をセクタ番号１に格納し、ループＬ内でデータ集合Ｓに含まれないデータ配列をセクタ番号０に格納すると決定する。なお、最適化部３２は、各セクタに格納されたデータをＬＲＵ方式により順次新たなデータにより置換すると決定する。
【００８０】
一方、データ集合Ｓが空である場合（ステップＳ３０５肯定）、最適化部３２は、ストリームデータ（連続する隣接アクセスデータ）として扱うデータ集合（Ｔ）および必要ウェイ数（ＴＷ）の決定を行なう（ステップＳ３０６）。
【００８１】
具体的には、図１２に示すように、最適化部３２は、ループ内の各データ（各データ配列）に対する処理を開始し（ステップＳ６０１）、ストリームデータがあるか否かを判定する（ステップＳ６０２）。
【００８２】
ループ内にストリームデータがない場合（ステップＳ６０２否定）、最適化部３２は、「Ｔ＝ＮＵＬＬ」および「ＴＷ＝０」と決定する（ステップＳ６１０）。
【００８３】
一方、ループ内にストリームデータがある場合（ステップＳ６０２肯定）、最適化部３２は、ループ内にストリームデータ以外のデータがあるか否かを判定する（ステップＳ６０３）。
【００８４】
ここで、ループ内にストリームデータしかない場合（ステップＳ６０３否定）、最適化部３２は、「Ｔ＝ＮＵＬＬ」および「ＴＷ＝０」と決定する（ステップＳ６１０）。
【００８５】
一方、ループ内にストリームデータとストリームデータ以外のデータとが混在する場合（ステップＳ６０３肯定）、最適化部３２は、「Ｔ」を決定し、ＴＷを決定するためのＴＢを決定する（ステップＳ６０４）。すなわち、最適化部３２は、ストリームデータの集合を「Ｔ」として決定し、ストリームデータの総アクセスサイズを回転数、または宣言サイズから最大アクセス幅を算出することで、ＴＢ（単位：バイト）を計算する。
【００８６】
ここで、ＴＢが計算され、明らかとなった場合（ステップＳ６０５否定）、ＴＢが予め設定された下限閾値から上限閾値の範囲内にあるか否かを判定する（ステップＳ６０６）。なお、ＴＢに対して設定される閾値と、上述したＳＢに対して設定される閾値とは、異なる値であってもよいし、同一の値であってもよい。
【００８７】
そして、ＴＢが予め設定された下限閾値から上限閾値の範囲内にない場合（ステップＳ６０６否定）、最適化部３２は、「Ｔ＝ＮＵＬＬ」および「ＴＷ＝０」と決定する（ステップＳ６１０）。
【００８８】
一方、ＴＢが計算されず、不明である場合（ステップＳ６０５肯定）、および、計算されたＴＢが予め設定された下限閾値から上限閾値の範囲内にある場合（ステップＳ６０６肯定）、最適化部３２は、ストリームデータ数比率を算出する（ステップＳ６０７）。すなわち、最適化部３２は、ストリームデータ数を全データ数にて除することでＢＲを算出する。
【００８９】
そして、最適化部３２は、算出したＢＲが予め設定された下限閾値から上限閾値の範囲内にあるか否かを判定する（ステップＳ６０８）。なお、ＢＲに対して設定される閾値と、上述したＴＢに対して設定される閾値とは、異なる値である。
【００９０】
ここで、ＢＲが予め設定された下限閾値から上限閾値の範囲内にない場合（ステップＳ６０８否定）、最適化部３２は、決定した集合Ｔを以降の処理に用いないとして、「Ｓ＝ＮＵＬＬ」および「ＳＷ＝０」と決定する（ステップＳ６１０）。
【００９１】
一方、ＢＲが予め設定された下限閾値から上限閾値の範囲内にある場合（ステップＳ６０８肯定）、最適化部３２は、キャッシュメモリの総ウェイ数にＡＲおよび予め設定した閾値を乗算することで、ＴＷを算出する（ステップＳ６０９）。なお、ＴＷを算出するために用いられる閾値は、プログラマにより任意に設定される。
【００９２】
そして、最適化部３２は、ステップＳ６０４で決定したＴおよびステップＳ６０９で算出したＴＷを確定する（ステップＳ６１１）。
【００９３】
続いて、最適化部３２は、ステップＳ６１０およびステップＳ６１１によりＴおよびＴＷが確定したのち、ステップＳ３０８に移行する。
【００９４】
図９に戻って、最適化部３２は、ステップＳ３０６（図１２）の処理により決定されたストリームデータとして扱うデータ集合Ｔが空（ＮＵＬＬ）であるか否かを判定する（ステップＳ３０８）。
【００９５】
ここで、データ集合Ｔが空であった場合（ステップＳ３０８肯定）、最適化部３２は、セクタ利用なしと判定して、ＬＲＵ方式を採用すると決定する（ステップＳ３１０）。
【００９６】
一方、データ集合Ｔが空でない場合（ステップＳ３０８否定）、最適化部３２は、最弱ウェイ方式の新アルゴリズムを生成すると決定する（ステップＳ３０９）。
【００９７】
具体的には、最適化部３２は、セクタ分割比有効範囲であるループＬに対して、図６に示したキャッシュウェイ数「１０」から、セクタ分割比を「セクタ番号０：セクタ番号１＝１０：ＴＷ」と決定する。また、最適化部３２は、データ集合Ｔに登録されたデータ配列をセクタ番号１に格納し、ループＬ内でデータ集合Ｔに含まれないデータ配列をセクタ番号０に格納すると決定する。なお、最適化部３２は、各セクタに格納されたデータをＬＲＵ方式により順次新たなデータにより置換すると決定する。
【００９８】
そして、ステップＳ３０７、ステップＳ３０９、または、ステップＳ３１０のいずれかの決定を行なったのち、最適化部３２は、図８に示すステップＳ２０３の処理に移行する。
【００９９】
ここで、図９において決定された３種類のパターンについて、図１３を用いて具体的に説明する。図１３は、図９に示した３種類の決定パターンを説明するための図である。
【０１００】
図５の（Ａ）に示すソースプログラムが格納された場合、最適化部３２は、図１３の（Ａ）に示すように、セクタ分割比有効範囲を「do J」と決定し、データ集合Ｓの要素を配列ｃと決定する。また、最適化部３２は、配列ｃの宣言サイズから算出されたＳＢが閾値範囲内にあり、ＡＲが閾値範囲内にあることから、ＳＢバイトを１ウェイのバイト数で除することで、例えば、「ＳＷ＝１」と決定する。そして、図６に示したキャッシュウェイ数「１０」から、最適化部３２は、図１３の（Ａ）に示すように、ローカルメモリ方式により、セクタ分割比を「セクタ番号０：セクタ番号１＝９：１」と決定する。また、最適化部３２は、データ集合Ｓに登録された配列ｃをセクタ番号１に格納し、ループＬ内でデータ集合Ｓに含まれない配列ａおよびｂをセクタ番号０に格納すると決定する。
【０１０１】
図５の（Ｂ）に示すソースプログラムが格納された場合、最適化部３２は、図１３の（Ｂ）に示すように、セクタ分割比有効範囲を「do J」と決定し、データ集合Ｓが空であると決定する。さらに、最適化部３２は、連続する隣接アクセスデータである配列ａを要素とするデータ集合Ｔを決定する。また、最適化部３２は、ＴＢが不明である配列ａのＢＲが閾値範囲内であることから、総ウェイ数（キャッシュウェイ数）とＢＲと閾値とを乗算することで、「ＴＷ＝５」と決定する。そして、図６に示したキャッシュウェイ数「１０」から、最適化部３２は、図１３の（Ｂ）に示すように、最弱ウェイ方式により、セクタ分割比を「セクタ番号０：セクタ番号１＝１０：５」と決定する。また、最適化部３２は、データ集合Ｔに登録された配列ａをセクタ番号１に格納し、ループＬ内でデータ集合Ｔに含まれない配列ｃおよびｂをセクタ番号０に格納すると決定する。
【０１０２】
図５の（Ｃ）に示すソースプログラムが格納された場合、最適化部３２は、ループ内のすべての配列サイズが明らかであり、キャッシュサイズより小さいことから、図１３の（Ｃ）に示すように、「セクタ分割データはなし」として、ＬＲＵ方式を採用すると決定する。
【０１０３】
図８に戻って、最適化部３２は、図９の処理ののち、決定したセクタ分割処理に応じて、セクタ分割命令の挿入およびメモリアクセス命令へのセクタ番号付加を行ない（ステップＳ２０３）、最適化処理を終了する。
【０１０４】
すなわち、最適化部３２は、決定したセクタ分割比制御範囲、セクタ分割比、データごとのセクタ番号にしたがって、セクタ分割命令の挿入やセクタ番号の付加を行なって、例えば、図１４に示すような処理結果を最適化結果記憶部２４に格納する。図１４は、最適化結果記憶部を説明するための図である。
【０１０５】
例えば、最適化部３２は、図１４の左側に示すループＬ１の前後がセクタ分割比有効範囲である場合、ローカルメモリ方式のセクタ分割比（９：１）で分割を指示する命令を挿入する。さらに、最適化部３２は、図１４に示すように、ループＬ１の後ろで、通常のＬＲＵ方式に戻す命令を挿入する。また、最適化部３２は、図１４に示すように、セクタ分割比有効範囲内の「load, store 」命令に対して、使用するセクタ番号（sector0, sector1）を指定する。そして、最適化部３２は、図１４の右側に示すデータを、最適化結果記憶部２４に格納する。なお、セクタ番号を指定する命令は、プリフェッチ命令である「prefetch」である場合であってもよい。
【０１０６】
そして、ステップＳ２０３（図８）にて最適化部３２の処理が終了すると、ファイル生成部３３は、ステップＳ１０４（図７）にて、オブジェクトファイルを生成する。
【０１０７】
上述してきたように、実施例１によれば、最適化部３２は、セクタ機能付きのキャッシュメモリを搭載する情報処理装置４０にて実行されるソースプログラムからソース解析部３１が変換した中間言語テキストを解析する。具体的には、最適化部３２は、各ループにおいて処理されるデータ配列の集合であるデータ集合のループ処理実行時における再利用性の有無を判定する。そして、最適化部３２は、再利用性の有無を判定したデータ集合を格納するために要するウェイ数とシステムの最大ウェイ数とから、セクタ分割比と、セクタ番号とを決定する。そして、最適化部３２は、セクタ分割比およびセクタ番号が決定されたループにおいて、セクタ分割命令およびメモリアクセス命令へのセクタ番号を付加した命令文を挿入する。そして、ファイル生成部３３は、命令文が挿入された中間言語テキストからオブジェクトファイルを生成する。
【０１０８】
したがって、コンパイラ装置１０において自動的にセクタ分割比とセクタ分割比有効範囲とセクタ番号と決定することができ、キャッシュメモリ、特にセクタ機能付きキャッシュメモリを有効的に利用することによりプログラムの実行性能を向上することが可能となる。また、再利用性のあるデータのアクセスサイズが分からない場合であっても、自動的にセクタ分割比およびセクタ番号を自動的に決定することができ、プログラマの負担を軽減して、セクタ機能付きキャッシュメモリを有効的に利用することが可能となる。
【０１０９】
また、実施例１では、最適化部３２は、再利用性有りであり連続割り付け可能として判定したデータ集合について、ローカルメモリ方式によりセクタ分割比とセクタ番号とを決定する。これにより、再利用性のあるデータが、再利用性のあるデータ以外のデータによりＬＲＵ方式によりキャッシュメモリから追い出されることを防止でき、セクタ機能付きキャッシュメモリをより有効的に利用することが可能となる。
【０１１０】
また、実施例１では、最適化部３２は、再利用性有りのデータ配列がなかったループにて再利用性の無いストリームデータ（連続する隣接アクセスデータ）として判定されるデータ集合が存在する場合、ストリームデータとして判定したデータ集合について、最弱ウェイ方式によりセクタ分割比とセクタ番号とを決定する。これにより、再利用性のあるデータがキャッシュラインのコンフリクトにより、予定外にキャッシュメモリから追い出されることを防ぐことができ、セクタ機能付きキャッシュメモリをさらに有効的に利用することが可能となる。
【０１１１】
なお、本実施例では、図１１に示したように、再利用性のあるデータ配列が連続領域に割り付け不可であった場合、Ｓを「ＮＵＬＬ」と決定する場合について説明したが、本実施例はこれに限定されるものではない。例えば、最適化部３２は、再利用性のあるデータ配列１、２および３のうち、データ配列１および２が連続領域に割り付け可能であった場合、データ配列１および２をＳとしてステップＳ５０６以降の処理を実行してもよい。
【実施例２】
【０１１２】
上述した実施例１では、セクタ分割比がコンパイラ装置１０により自動的に決定される場合について説明したが、実施例２では、セクタ分割比がプログラマにより指定される場合について説明する。
【０１１３】
実施例２におけるコンパイラ装置１０は、図４を用いて説明した実施例１におけるコンパイラ装置１０と同様の構成となる。しかし、実施例２においては、ソースプログラム入力部１１が受け付けるソースプログラムの内容と、ソース解析部３１および最適化部３２の処理内容とが実施例１と異なる。以下、これらを中心に説明する。
【０１１４】
実施例２においては、キャッシュメモリのセクタ分割をアセンブラ表記レベルでなく、ソースプログラムの表記レベルでプログラマが指定でき、かつ、コンパイラ装置１０が理解できるキャッシュ制御文が用いられる。実施例２において用いられるキャッシュ制御文の一例について、図１５を用いて説明する。なお、以下に説明するキャッシュ制御文は、あくまでも一例であり、プログラマが指定したセクタ分割比をコンパイラ装置１０が解読可能な形式であるならば、如何なる形式であってもよい。
【０１１５】
まず、キャッシュ制御文では、「!ocl sector_cache_begin」が、セクタ制御の開始を意味する制御文として用いられる（図１５の（１）参照）。なお、「!ocl」という表記は、一般的に最適化制御行と呼ばれるコンパイラに指示を与える制御文であり、多くのベンダでサポートされている。すなわち、図１５に示すキャッシュ制御文では、「!ocl」により、セクタ指定が行なわれている。
【０１１６】
また、キャッシュ制御文では、「!ocl sector0_max(m), sector1_max(n)」により、セクタ分割比が、セクタ番号とともに指示される（図１５の（２）参照）。ここで、図１５の（２）では、セクタ０の最大ウェイ数がｍ個であり、セクタ１の最大ウェイ数がｎ個であることが指定されている。ここで、実施例２におけるコンパイラ装置１０は、キャッシュ方式判定ルールとして、「ｍ＋ｎ」がシステムの最大ウェイ数と同じであるならば、ローカルメモリ方式をプログラマが指定していると判定する。また、実施例２におけるコンパイラ装置１０は、キャッシュ方式判定ルールとして、「ｍ＋ｎ」がシステムの最大ウェイ数より大きいならば最弱ウェイ方式をプログラマが指定していると判定する。
【０１１７】
また、キャッシュ制御文では、「!ocl sector0(array1), sector1(array2, array3)」により、セクタ番号ごとに格納されるデータの配列名が指定される（図１５の（３）参照）。ここで、図１５の（３）では、array1がセクタ０に割り当てる配列であり、array2およびarray3がセクタ１に割り当てる配列であるとして指定されている。
【０１１８】
なお、図１５の（３）に示すように、配列指定は、コンパイラ（コンパイル装置１０）に委ねることも可能である。ここで、コンパイラは、キャッシュ方式が最弱ウェイ方式と判定されたならば、セクタ１にストリームデータを割り当て、セクタ０にループ内のストリームデータ以外のデータを割り当てると判断する。また、コンパイラは、キャッシュ方式がローカルメモリ方式と判定されたならば、セクタ１に再利用性のあるデータを割り当て、セクタ０にループ内の再利用性のあるデータ以外のデータを割り当てると判断する。なお、再利用性のあるデータおよびストリームデータの判定は、実施例１で説明した方法と同様に行なう。
【０１１９】
また、キャッシュ制御文では、「!ocl sector_cache_end」が、セクタ制御の終了を意味する制御文として用いられる（図１５の（４）参照）。すなわち、「!ocl sector_cache_begin」および「!ocl sector_cache_end」により、実施例１で説明したセクタ分割比有効範囲の指定が、プログラマにより決定される。なお、以下では、実施例１で用いたセクタ分割比有効範囲に代わりに、制御開始位置から制御終了位置までを制御エリアと呼ぶ。
【０１２０】
また、キャッシュ制御文では、「!ocl loop sector_cache」が、「!ocl sector_cache_begin」および「!ocl sector_cache_end」による制御エリア指定の代わりに、後続するループに対して指示できる制御文として用いられてもよい（図１５の（５）参照）。
【０１２１】
また、キャッシュ制御文では、上記したルールの他に、図１５に示すように、「セクタの入れ子は許さない」とするルールや、「sector_cache_beginからsector_cache_endに必ず到達する」とするルールが採用される。
【０１２２】
ここで、図１６〜図２０を用いて、図１５に示したキャッシュ制御文による様々なセクタ分割の指定例について説明する。なお、図１６は、最弱ウェイ方式によるセクタ分割の指定例を説明するための図であり、図１７は、ローカルメモリ方式によるセクタ分割の指定例を説明するための図である。また、図１８は、最弱ウェイ方式およびローカルメモリ方式によるセクタ分割の指定例を説明するための図であり、図１９は、制御エリア指定の変形例を説明するための図である。また、図２０は、準ローカルメモリ方式によるセクタ分割の指定例を説明するための図である。
【０１２３】
また、図１６以降に示す指定例では、セクタ数が「２」であり、システムの最大ウェイ数が「１０」であるとして説明する。
【０１２４】
図１６に示すキャッシュ制御文では、再利用性のないストリームデータ（配列ａおよびｂ）を５ウェイのセクタ１に格納し、ストリームデータ以外の再利用性があるデータを含むデータ（配列ｃ）を１０ウェイのセクタ０に格納することが指定されている。ここで、コンパイラ装置１０は、「１０＋５＞１０」であることから、最弱ウェイ方式が指定されていると判定する。すなわち、プログラマは、再利用性のあるデータ（配列ｃ）がキャッシュメモリから追い出される確率を低くするように指定している。
【０１２５】
次に、図１７に示すキャッシュ制御文では、再利用性のあるデータ（配列ｃ）を１ウェイのセクタ１に格納し、再利用性のあるデータ以外のデータ（配列ａおよびｂ）を９ウェイのセクタ０に格納することが指定されている。ここで、コンパイラ装置１０は、「１＋９＝１０」であることから、ローカルメモリ方式が指定されていると判定する。すなわち、プログラマは、再利用性のあるデータ（配列ｃ）がキャッシュラインのコンフリクトにより、予定外にキャッシュメモリから追い出されることを完璧に防ぐことができる。
【０１２６】
次に、図１８に示すキャッシュ制御文では、セクタ機能付きキャッシュメモリシステムの特性を活用するために、ループごとにセクタ分割比を指定して、最弱ウェイ方式とローカルメモリ方式とが併用されている。
【０１２７】
すなわち、図１８に示すように、あるループでは、再利用性のあるデータ（配列ｃ）を１ウェイのセクタ１に格納し、再利用性のあるデータ以外のデータ（配列ａおよびｂ）を９ウェイのセクタ０に格納するローカルウェイ方式が指定されている。また、図１８に示すように、別のループでは、ストリームデータ（配列ｄ）を５ウェイのセクタ１に格納する最弱ウェイ方式が指定されている。
【０１２８】
次に、図１９に示すキャッシュ制御文では、上述した制御エリア指定の変形例を示している。すなわち、図１９に示す例では、「!ocl sector_cache_begin」および「!ocl sector_cache_end」の代わりに、「!ocl loop sector_cache」を用いてループごとにセクタ分割比とセクタ番号を指示している。一般的に、データの再利用性の有無は、ループのＤＯ制御変数を判定対象とすることが多い。つまり、プログラマにとっては、ループに着目した制御エリア指定が簡易にできる方が使い勝手が良いため、本実施例では、「!ocl loop sector_cache」という指定も可能としている。
【０１２９】
なお、ローカルメモリ方式を指定する場合、図１７および図１８に示すように、ローカルメモリ方式を指定する先頭の最内ループの回転数が静的に判明していることは、必須ではない。例えば、回転数が変数であってもプログラマが、変数の取りうる最大値を知っているのであれば、ローカルメモリ方式によるセクタ分割は、可能である。例えば、プリグラマは、実際の実行モジュールに対してＰＡ（パフォーマンス・アナライザ）ツールを使うことにより、変数の取りうる最大値を取得する。
【０１３０】
ここで、図２０に示すキャッシュ制御文は、再利用性のある配列のサイズが不明な配列ｃに対して、「６:４」と、セクタ分割比としてはローカルメモリ方式を適用した準ローカルメモリ方式の指定例を示している。しかし、準ローカルメモリ方式では、サイズが不明な配列ｃに関しては、セクタ１のキャッシュラインのコンフリクトを完全に防ぐことはできない可能性がある。また、準ローカルメモリ方式では、サイズの不明な配列ｃに対して、セクタ１のウェイ数を余分に取り過ぎてしまう可能性があるため、残りのデータを格納するウェイ数が減り、プログラムの実行性能が低下してしまう場合もある。
【０１３１】
したがって、セクタ機能付きキャッシュメモリシステムに準ローカルメモリ方式を指定する場合、プログラマは、例えば、実行モジュールを一度実行させ、ＰＡ（パフォーマンス・アナライザ）ツールでキャッシュ情報を把握した上で、キャッシュ制御文を入れる。
【０１３２】
以下、キャッシュ制御文が挿入されたソースプログラムが入力された場合の実施例２におけるコンパイラ装置１０の処理について説明する。
【０１３３】
実施例２におけるソース解析部３１は、入力されたソースプログラムに記述されているキャッシュ制御文を解析し、解析結果をキャッシュ制御文データとして、上述した中間言語テキストとともにソース解析結果記憶部２２に格納する。
【０１３４】
例えば、ソース解析部３１は、図１６に示すソースプログラムのキャッシュ制御文を解析して、図２１に示すように、「sector0_max」に「１０」、「sector1_max」に「５」、「制御開始位置」に「１０」を登録する。なお、図２１は、実施例２におけるソース解析部を説明するための図である。
【０１３５】
さらに、ソース解析部３１は、図２１に示すように、セクタ０が指定された配列が１つであり、「sector0[0]」に「ｃ」を登録する。また、ソース解析部３１は、図２１に示すように、セクタ１が指定された配列が２つであり、「sector1[0]」に「ａ」を、「sector1[1]」に「ｂ」を登録する。さらに、ソース解析部３１は、図２１には示さないが、「制御終了位置」にも解析した値を登録する。
【０１３６】
そして、実施例２における最適化部３２は、キャッシュ制御文データを読込んで、制御開始位置にキャッシュ分割命令を挿入する。具体的には、実施例１で説明した図１３のように、キャッシュ分割命令を挿入する。
【０１３７】
具体的には、最適化部３２は、キャッシュ制御文データを読込んで、データの再利用性の解析を行って、セクタにおけるウェイの重複を許すか否かを判定する。そして、最適化部３２は、制御エリア内のすべてのメモリアクセス命令（load, store, prefetch命令）に対し、各メモリアクセスのセクタ番号を決定する。ただし、最適化部３２は、キャッシュ制御文データに既にセクタ指定が明示されている場合、セクタ指定に従う。
【０１３８】
より具体的には、実施例２における最適化部３２は、図２２に示す手順により、セクタ決定処理を実行する。なお、図２２は、実施例２における最適化部のセクタ決定処理を説明するためのフローチャートである。
【０１３９】
図２２に示すように、実施例２における最適化部３２は、各データに対する処理を開始し（ステップＳ７０１）、キャッシュ制御文における「ｍ＋ｎ」がシステムの最大ウェイ数以上であるか否かを判定する（ステップＳ７０２）。なお、最適化部３２は、例えば、図２１に示す「sector0_max」と「sector1_max」とを足しあわすとこで「ｍ＋ｎ」を取得する。
【０１４０】
ここで、「ｍ＋ｎ」がシステムの最大ウェイ数より小さい場合（ステップＳ７０２否定）、最適化部３２は、セクタを指定しないと判定し（ステップＳ７０３）、処理を終了する。すなわち、最適化部３２は、セクタに分割せずに、ＬＲＵ方式にてデータの格納処理を実行すると判定する。
【０１４１】
一方、「ｍ＋ｎ」がシステムの最大ウェイ数以上である場合（ステップＳ７０２肯定）、最適化部３２は、キャッシュ制御文データにおいて、データのセクタ番号指定があるか否かを判定する（ステップＳ７０４）。すなわち、最適化部３２は、キャッシュ制御文のデータ構造内で、セクタが指定された配列があるか否かを判定する。
【０１４２】
ここで、データのセクタ番号指定がある場合（ステップＳ７０４肯定）、最適化部３２は、制御エリア内の全メモリアクセスに対し、セクタ番号を設定し、一部のデータ配列でセクタ番号指定がないものがあった場合、セクタ０に設定し（ステップＳ７０５）、処理を終了する。
【０１４３】
一方、データのセクタ番号指定がない場合（ステップＳ７０４否定）、最適化部３２は、メモリアクセスごとの添字解析による再利用性判定の結果、すべて再利用性のないストリームデータか否かを判定する（ステップＳ７０６）。具体的には、最適化部３２は、添字を解析することで、ループ内のメモリアクセスがすべてＤＯ制御変数に依存して隣接データを連続アクセスするストリームデータであるか否かを判定する。
【０１４４】
ここで、すべて再利用性のないストリームデータである場合（ステップＳ７０６肯定）、最適化部３２は、セクタに分割せずに、ＬＲＵ方式にてデータの格納処理を実行すると判定して、処理を終了する。
【０１４５】
一方、すべてのデータが、再利用性のないストリームデータでない場合（ステップＳ７０６否定）、最適化部３２は、「ｍ＋ｎ」がシステムの最大ウェイ数より大きいか否かを判定する（ステップＳ７０７）。
【０１４６】
ここで、「ｍ＋ｎ」がシステムの最大ウェイ数と同じ値である場合（ステップＳ７０７否定）、最適化部３２は、再利用性のあるメモリアクセスをセクタ番号「１」とし、それ以外をセクタ番号「０」と指定して（ステップＳ７０８）、処理を終了する。すなわち、最適化部３２は、ローカルメモリ方式にてセクタを分割すると判定する。
【０１４７】
一方、「ｍ＋ｎ」がシステムの最大ウェイ数より大きい場合（ステップＳ７０７肯定）、最適化部３２は、再利用性の無いストリームデータのメモリアクセスをセクタ番号「１」とし、それ以外をセクタ番号「０」と指定して（ステップＳ７０９）、処理を終了する。すなわち、最適化部３２は、最弱ウェイ方式にてセクタを分割すると判定する。なお、最適化部３２は、データ配列の再利用性の有無およびデータ配列がストリームデータであるか否かの判定を、実施例１で説明した処理により、実行する。
【０１４８】
これにより、実施例２における最適化部３２は、制御開始位置にキャッシュ分割命令を挿入して、キャッシュ分割命令が挿入された中間言語テキストを、最適化結果記憶部２４に格納する。ファイル生成部３３は、キャッシュ分割命令が挿入された中間言語テキストからオブジェクトファイルを生成して、情報処理装置４０に出力する。これにより、キャッシュ制御文が実行モジュールに反映され、情報処理装置４０は、プログラマが意図した通りのキャッシュ制御を実行する。
【０１４９】
上述してきたように、実施例２によれば、最適化部３２は、セクタ機能付きのキャッシュメモリに格納する際のセクタ分割比がプログラマによりキャッシュ制御文にてソースプログラムから、セクタ分割比が指定されたループにて用いられる配列データの再利用性の有無を判定する。そして、最適化部３２は、データ配列の再利用性の有無とキャッシュ制御文のセクタ分割比とに基づいて、セクタ番号を決定して、セクタ分割命令およびメモリアクセス命令へのセクタ番号を付加した命令文を中間言語テキストに挿入する。
【０１５０】
したがって、キャッシュ制御文を解読可能なコンパイラ装置１０を用いることにより、プログラマの意図に沿って、セクタ分割機能付きキャッシュメモリを有効的に利用することができ、プログラムの実行性能を向上させることが可能となる。
【０１５１】
また、実施例２では、最適化部３２は、キャッシュ制御文にて指定されたセクタ分割比からローカルメモリ方式か最弱ウェイ方式かを自動的に判定してセクタ番号を自動的に決定するので、プログラマの負担を軽減することが可能となる。
【０１５２】
なお、上記した実施例１および２において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともできる（例えば、ハードウェア情報を、プログラマが手動で入力するなど）。あるいは、本実施例において説明した各処理のうち、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報（例えば、図１５に示すキャッシュ制御文など）については、特記する場合を除いて任意に変更することができる。
【０１５３】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【０１５４】
ところで上記の実施例では、ハードウェアロジックによって各種の処理を実現する場合を説明したが、本発明はこれに限定されるものではなく、あらかじめ用意されたプログラムをコンピュータで実行するようにしてもよい。そこで以下では、図２３を用いて、上記の実施例１に示したコンパイラ装置１０と同様の機能を有するコンパイラプログラムを実行するコンピュータの一例を説明する。図２３は、実施例１のコンパイラプログラムを実行するコンピュータを示す図である。
【０１５５】
図２３に示すように、情報処理装置としてのコンピュータ１００は、キーボード１０１、ディスプレイ１０２、ＣＰＵ１０３、ＲＯＭ１０４、ＨＤＤ１０５、ＲＡＭ１０６を有する。そして、キーボード１０１、ディスプレイ１０２、ＣＰＵ１０３、ＲＯＭ１０４、ＨＤＤ１０５およびＲＡＭ１０６は、バス１０７などで接続される。また、コンピュータ１００は、情報処理装置４０と接続される。
【０１５６】
ＲＯＭ１０４には、上記の実施例１に示したコンパイラ装置１０と同様の機能を発揮するコンパイラプログラム、つまり、図２３に示すように、ソース解析プログラム１０４ａ、最適化プログラム１０４ｂ、ファイル生成プログラム１０４ｃが予め記憶されている。なお、これらのプログラム１０４ａ〜１０４ｃについては、図４に示したコンパイラ装置１０の各構成要素と同様、適宜統合または分散してもよい。
【０１５７】
そして、ＣＰＵ１０３が、これらのプログラム１０４ａ〜１０４ｃをＲＯＭ１０４から読みだして実行する。これにより、図２３に示すように、プログラム１０４ａ〜１０４ｃ
は、ソース解析プロセス１０３ａ、最適化プロセス１０３ｂ、ファイル生成プロセス１０３ｃとして機能するようになる。なお、各プロセス１０３ａ〜１０３ｃは、図４に示した、ソース解析部３１、最適化部３２、ファイル生成部３３にそれぞれ対応する。
【０１５８】
また、ＨＤＤ１０５には、図２３に示すように、ソースプログラムデータ１０５ａ、ソース解析データ１０５ｂ、アーキデータ１０５ｃ、最適化結果データ１０５ｄが設けられる。各プログラムデータ１０５ａ〜１０５ｄは、図４に用いたソースプログラム記憶部２１、ソース解析結果記憶部２２、アーキデータ記憶部２３、最適化結果記憶部２４にそれぞれ対応する。そしてＣＰＵ１０３は、ソースプログラムデータ１０６ａをソースプログラムデータ１０５ａに対して登録し、ソース解析データ１０６ｂをソース解析データ１０５ｂに対して登録し、アーキデータ１０６ｃをアーキデータ１０５ｃに対して登録する。また、ＣＰＵ１０３は、最適化結果データ１０６ｄを最適化結果データ１０５ｄに対して登録する。そして、ＣＰＵ１０３は、登録したデータを読み出してＲＡＭ１０６に格納し、ＲＡＭ１０６に格納されたソースプログラムデータ１０６ａ、ソース解析データ１０６ｂ、アーキデータ１０６ｃおよび最適化結果データ１０６ｄに基づいてコンパイル処理を実行する。
【０１５９】
なお、上記した各プログラム１０４ａ〜１０４ｃについては、必ずしも最初からＲＯＭ１０４に記憶させておく必要はなく、例えばコンピュータ１００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＭＯディスク、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」、または、コンピュータ１００の内外に備えられるＨＤＤなどの「固定用物理媒体」、さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ１００に接続される「他のコンピュータ（またはサーバ）」などに各プログラムを記憶させておき、コンピュータ１００がこれらから各プログラムを読み出して実行するようにしてもよい。
【０１６０】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１６１】
（付記１）セクタ機能付きのキャッシュメモリを搭載する情報処理装置にて実行されるソースプログラムを解析することで、当該ソースプログラムの各ループにおいて処理されるデータ配列の集合であるデータ集合のループ処理実行時における再利用性の有無を判定し、当該再利用性の有無を判定したデータ集合を格納するために要する容量と前記キャッシュメモリの容量とから、前記キャッシュメモリにおけるセクタ分割比と、当該データ集合を格納するセクタを特定するためのセクタ番号とを決定する決定手順と、  
前記決定手順によって前記セクタ分割比および前記セクタ番号が決定されたループにおいて、当該セクタ分割比および当該セクタ番号に基づく命令制御文を前記ソースプログラムに挿入する挿入手順と、
前記挿入手順によって前記命令制御文が挿入されたソースプログラムからオブジェクトファイルを生成するファイル生成手順と、
をコンピュータに実行させることを特徴とするコンパイラプログラム。
【０１６２】
（付記２）前記決定手順は、再利用性有りとして判定したデータ配列のデータ集合を格納するために要する容量と、当該再利用性有りとして判定したデータ配列以外のデータ集合を格納するために要する容量との和が、前記キャッシュメモリの容量となるように前記セクタ分割比と前記セクタ番号とを決定することを特徴とする付記１に記載のコンパイラプログラム。
【０１６３】
（付記３）前記決定手順は、再利用性有りのデータ配列がなかったループにて再利用性の無いストリームデータとして判定されるデータ集合が存在する場合、当該再利用性の無いストリームデータとして判定されるデータ集合を格納するために要する容量と当該再利用性の無いストリームデータとして判定されるデータ配列以外のデータ集合を格納するために要する容量との和が、前記キャッシュメモリの容量より大きくなるように前記セクタ分割比と前記セクタ番号とを決定することを特徴とする付記２に記載のコンパイラプログラム。
【０１６４】
（付記４）セクタ機能付きのキャッシュメモリに格納する際のセクタ分割比が作成者によりループ内にて指定されたソースプログラムを受け付ける受け付け手順と、
前記受け付け手順によって受け付けられた前記ソースプログラムから、当該ソースプログラムにて前記作成者により前記セクタ分割比が指定されたループにて用いられる配列データを抽出する抽出手順と、
前記抽出手順によって抽出された前記配列データの再利用性の有無と、前記セクタ分割比に基づいて、当該配列データを前記キャッシュメモリに格納する際のセクタ番号を決定する決定手順と、
前記決定手順によって前記セクタ番号が決定されたループにおいて、当該決定されたセクタ番号および前記作成者から指定されたセクタ分割比に基づく命令制御文を前記ソースプログラムに挿入する挿入手順と、
前記挿入手順によって前記命令制御文が挿入されたソースプログラムからオブジェクトファイルを生成するファイル生成手順と、
をコンピュータに実行させることを特徴とするコンパイラプログラム。
【０１６５】
（付記５）前記決定手順は、前記作成者から指定されたセクタ分割比が、前記キャッシュメモリの容量に対応する範囲内で分割されたものであるか、前記キャッシュメモリの容量に対応する範囲より大きい範囲内で分割されたものであるかを判定したうえで、前記セクタ番号を決定することを特徴とする付記４に記載のコンパイラプログラム。
【０１６６】
（付記６）セクタ機能付きのキャッシュメモリを搭載する情報処理装置にて実行されるソースプログラムを解析することで、当該ソースプログラムの各ループにおいて処理されるデータ配列の集合であるデータ集合のループ処理実行時における再利用性の有無を判定し、当該再利用性の有無を判定したデータ集合を格納するために要する容量と前記キャッシュメモリの容量とから、前記キャッシュメモリにおけるセクタ分割比と、当該データ集合を格納するセクタを特定するためのセクタ番号とを決定する決定部と、  
前記決定部によって前記セクタ分割比および前記セクタ番号が決定されたループにおいて、当該セクタ分割比および当該セクタ番号に基づく命令制御文を前記ソースプログラムに挿入する挿入部と、
前記挿入部によって前記命令制御文が挿入されたソースプログラムからオブジェクトファイルを生成するファイル生成部と、
を有することを特徴とするコンパイラ装置。
【０１６７】
（付記７）前記決定部は、再利用性有りとして判定したデータ配列のデータ集合を格納するために要する容量と、当該再利用性有りとして判定したデータ配列以外のデータ集合を格納するために要する容量との和が、前記キャッシュメモリの容量となるように前記セクタ分割比と前記セクタ番号とを決定することを特徴とする付記６に記載のコンパイラ装置。
【０１６８】
（付記８）前記決定部は、再利用性有りのデータ配列がなかったループにて再利用性の無いストリームデータとして判定されるデータ集合が存在する場合、当該再利用性の無いストリームデータとして判定されるデータ集合を格納するために要する容量と当該再利用性の無いストリームデータとして判定されるデータ配列以外のデータ集合を格納するために要する容量との和が、前記キャッシュメモリの容量より大きくなるように前記セクタ分割比と前記セクタ番号とを決定することを特徴とする付記７に記載のコンパイラ装置。
【０１６９】
（付記９）セクタ機能付きのキャッシュメモリに格納する際のセクタ分割比が作成者によりループ内にて指定されたソースプログラムを受け付ける受け付け部と、
前記受け付け部によって受け付けられた前記ソースプログラムから、当該ソースプログラムにて前記作成者により前記セクタ分割比が指定されたループにて用いられる配列データを抽出する抽出部と、
前記抽出部によって抽出された前記配列データの再利用性の有無と、前記セクタ分割比に基づいて、当該配列データを前記キャッシュメモリに格納する際のセクタ番号を決定する決定部と、
前記決定部によって前記セクタ番号が決定されたループにおいて、当該決定されたセクタ番号および前記作成者から指定されたセクタ分割比に基づく命令制御文を前記ソースプログラムに挿入する挿入部と、
前記挿入部によって前記命令制御文が挿入されたソースプログラムからオブジェクトファイルを生成するファイル生成部と、
を有することを特徴とするコンパイラ装置。
【０１７０】
（付記１０）前記決定部は、前記作成者から指定されたセクタ分割比が、前記キャッシュメモリの容量に対応する範囲内で分割されたものであるか、前記キャッシュメモリの容量に対応する範囲より大きい範囲内で分割されたものであるかを判定したうえで、前記セクタ番号を決定することを特徴とする付記９に記載のコンパイラ装置。
【符号の説明】
【０１７１】
１０  コンパイラ装置
１１  ソースプログラム入力部
１２  オブジェクトファイル出力部
１３  通信部
１４  入出力制御Ｉ／Ｆ部
２０  記憶部
２１  ソースプログラム記憶部
２２  ソース解析結果記憶部
２３  アーキデータ記憶部
２４  最適化結果記憶部
３０  処理部
３１  ソース解析部
３２  最適化部
３３  ファイル生成部
４０  情報処理装置
【図１】
2010244205.tif 000003
【図２】
2010244205.tif 000004
【図３】
2010244205.tif 000005
【図４】
2010244205.tif 000006
【図５】
2010244205.tif 000007
【図６】
2010244205.tif 000008
【図７】
2010244205.tif 000009
【図８】
2010244205.tif 000010
【図９】
2010244205.tif 000011
【図１０】
2010244205.tif 000012
【図１１】
2010244205.tif 000013
【図１２】
2010244205.tif 000014
【図１３】
2010244205.tif 000015
【図１４】
2010244205.tif 000016
【図１５】
2010244205.tif 000017
【図１６】
2010244205.tif 000018
【図１７】
2010244205.tif 000019
【図１８】
2010244205.tif 000020
【図１９】
2010244205.tif 000021
【図２０】
2010244205.tif 000022
【図２１】
2010244205.tif 000023
【図２２】
2010244205.tif 000024
【図２３】
2010244205.tif 000025