JP2010026851A - コンパイラによる最適化方法 - Google Patents
コンパイラによる最適化方法 Download PDFInfo
- Publication number
- JP2010026851A JP2010026851A JP2008188386A JP2008188386A JP2010026851A JP 2010026851 A JP2010026851 A JP 2010026851A JP 2008188386 A JP2008188386 A JP 2008188386A JP 2008188386 A JP2008188386 A JP 2008188386A JP 2010026851 A JP2010026851 A JP 2010026851A
- Authority
- JP
- Japan
- Prior art keywords
- range
- language program
- processing
- compiler
- level language
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
- G06F8/4442—Reducing the number of cache misses; Data prefetching
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
【課題】安価で容易にキャッシュミスに起因する性能の低下を抑制できる、コンパイラによる最適化方法を提供する。
【解決手段】コンパイラは、入力された高級言語プログラムに、相関関係にない(輻輳動作関係にない)処理を指定する記述が含まれている場合には、指定された処理に相当する命令コードを分岐命令の直後または近傍に配置しない。また、コンパイラは、入力された高級言語プログラムに、相関関係にない(輻輳動作関係にない)処理を指定する記述が含まれている場合には、キャッシュメモリ内の格納位置が重複するように、当該処理に相当する命令コードを配置する。
【選択図】図4
【解決手段】コンパイラは、入力された高級言語プログラムに、相関関係にない(輻輳動作関係にない)処理を指定する記述が含まれている場合には、指定された処理に相当する命令コードを分岐命令の直後または近傍に配置しない。また、コンパイラは、入力された高級言語プログラムに、相関関係にない(輻輳動作関係にない)処理を指定する記述が含まれている場合には、キャッシュメモリ内の格納位置が重複するように、当該処理に相当する命令コードを配置する。
【選択図】図4
Description
本発明は、プログラムの実行時間を短縮するコンパイル方法に関し、より特定的には、キャッシュミスに起因する性能の低下を抑制するコンパイラによる最適化方法に関する。
近年では、CPUの処理能力が向上したために、プログラムの実行時間を短縮するためには、メモリアクセスに要する時間を短縮することが重要な課題となっている。メモリアクセスに要する時間を短縮する方法の1つとして、キャッシュメモリを使用する方法が従来から広く知られている。
キャッシュメモリの使用によってメモリアクセスに要する時間を短縮できる理由は、プログラムが参照の局所性を有するからである。参照の局所性には、時間的局所性(同じデータに近い将来アクセスする可能性が高い)と、空間的局所性(近傍のデータに近い将来アクセスする可能性が高い)とが含まれる。プログラムがこのような参照の局所性を有するので、キャッシュメモリに格納されたデータは、近い将来アクセスされる可能性が高い。そこで、キャッシュメモリとしてメインメモリよりも高速にアクセスできるメモリを使用すれば、メモリアクセスに要する時間を外見上短縮することができる。
キャッシュメモリを備えた計算機システムでは、プログラム実行中にキャッシュミスが発生すると、プログラムの実行時間が長くなる。このため、命令コードを格納するキャッシュメモリの効果は、一連の命令コードをアドレス順に実行する場合や、キャッシュメモリに収まる範囲の命令コードを繰り返し実行する場合に大きくなる。しかし、現実のプログラムでは、処理性能、プログラムの開発効率、メモリサイズの制限、プログラムの可読性などの理由により、分岐、ループ、サブルーチンなどの構造が使用される。このため、現実のプログラムを実行したときに、キャッシュミスの発生を完全に抑えることはできない。
キャッシュミスに起因する性能の低下を抑制する方法の1つとして、近い将来実行される可能性が高いデータをキャッシュメモリにプリフェッチしておく方法が知られている。この方法では、プリフェッチの効果を高めるために、プログラムの実行に先だって、プログラム中の分岐やループの繰り返し回数などを解析し、キャッシュミスを予測する処理が行われることがある。しかしながら、分岐先やループの繰り返し回数などは、プログラム実行中に動的に決定されるので、多くの場合、プログラム実行前の静的な解析では正しく予測できない。このように、プログラムの静的な解析結果に基づきプリフェッチを行う方法には、キャッシュミスの予測がはずれやすいという問題がある。
また、キャッシュミスに起因する性能の低下をより効果的に抑制する方法として、コンパイラによる最適化を行うときに、プログラムの動的な解析結果(以下、プロファイル情報という)を用いる方法も提案されている。例えば、特許文献1には、プログラムの1次コンパイル結果を仮想的に実行してプロファイル情報を求め、求めたプロファイル情報に基づき2次コンパイルを行うことにより、好適な位置にプリフェッチ命令が挿入されたオブジェクトファイルを求める方法が開示されている。特許文献2には、プロファイル情報に基づき、条件付き分岐命令における分岐方向に偏りを持たせる方法が開示されている。
また、特許文献3には、空間的局所性を利用したキャッシュ効率をあげる方法が開示されている。
特開平7−306790号公報(第一図)
特開平11−149381号公報(第一図)
特開2006−309430(第四図)
しかしながら、上記特許文献に開示された方法では、プログラムの動的な解析結果であるプロファイル情報を求める必要がある。このため、これらの方法には、プロファイリングのアルゴリズムやコンパイラに特殊な方式が必要で、高度な技術や経験的に積み重ねられた分析技術が必要とされるという問題がある。
また、空間的局所性を利用した方法では、システム動作上の動作モードや、複数タスクの動作であって、動作しない処理部分のソースコードがキャッシュメモリに配置されることによって、必要な処理がキャッシュに配置されることを阻害されるという問題がある。
それ故に、本発明は、安価で容易にキャッシュミスに起因する性能の低下を抑制できる、コンパイラによる最適化方法を提供することを目的とする。
本発明のコンパイラによる最適化方法は、高級言語プログラムを機械語プログラムに変換するコンパイラによって実行される最適化方法であって、高級言語プログラムに含まれる記述に基づき、機械語プログラムの一部を処理範囲として決定する範囲決定ステップと、処理範囲内にある命令コードの配置位置を決定する配置決定ステップとを備える。
この場合、高級言語プログラムには、処理ブロックの相関関係(輻輳関係)を指定する記述が含まれており、範囲決定ステップは、機械語プログラムのうちで相関関係を指定した処理ブロックに相当する部分を処理範囲として選択し、配置決定ステップは、処理範囲内にある命令コードの配置位置を処理ブロックごとに決定してもよい。
より好ましくは、配置決定ステップは、高級言語プログラム内の相関関係を指定した処理の記述順序と、機械語プログラム内の相当する命令コードの配置順序とが異なるように、処理範囲内にある命令コードの配置位置を決定する場合があってもよい。
あるいは、高級言語プログラムには、第1の範囲を指定する記述が含まれており、範囲決定ステップは、機械語プログラムのうちで第1の範囲に相当する部分を処理範囲として選択してもよい。特に、高級言語プログラムには、第1の範囲内にある第2の範囲を指定する記述がさらに含まれており、範囲決定ステップは、機械語プログラムのうちで第1の範囲から第2の範囲を除いた部分に相当する部分を処理範囲として選択してもよい。
あるいは、高級言語プログラムには、第1の範囲を指定する記述が含まれており、範囲決定ステップは、機械語プログラムのうちで第1の範囲の外に相当する部分を処理範囲として選択してもよい。特に、高級言語プログラムには、第1の範囲内にある第2の範囲を指定する記述がさらに含まれており、範囲決定ステップは、機械語プログラムのうちで第1の範囲から第2の範囲を除いた部分の外に相当する部分を処理範囲として選択してもよい。
また、上記最適化方法をコンピュータに実行させるためのコンパイラ、および、これを記録したコンピュータ読み取り可能な記録媒体、ネットワークを介して伝送する情報伝送媒体も本発明の範囲に含まれる。
本発明によれば、プログラム開発者は高級言語プログラムを作成するときに処理ブロックの相関関係(輻輳関係)を指定し、コンパイラは相関関係を指定した処理ブロックに相当する命令コードを好適な位置に配置する。これにより、安価で容易にキャッシュミスの発生を防止し、キャッシュミスに起因する性能の低下を防止することができる。
以下では、ある高級言語で記述されたプログラム(以下、高級言語プログラムという)をある機械語で記述されたプログラム(以下、機械語プログラムという)に変換するコンパイラ、および、このコンパイラによって実行される最適化処理について説明する。
機械語プログラムは、キャッシュメモリを備えたコンピュータによって実行される。機械語プログラムが、分岐やサブルーチン呼び出しなどを含まず、アドレス空間内の1つの領域に連続して配置されていれば、キャッシュミスの発生は少なく、キャッシュミスに起因する性能の低下も大きな問題にはならない。しかしながら、現実の機械語プログラムは、分岐やサブルーチン呼び出しなどを含み、アドレス空間内の複数の領域に分割して配置される。このため、現実の機械語プログラムを実行する際には、キャッシュミスに起因する性能の低下が問題となる。
以下に示す各実施形態では、複数の処理タスクや複数の動作モードを含む高級言語プログラムを機械語プログラムに変換するとともに、機械語プログラムに含まれる命令コードの配置位置を決定する最適化処理を行うコンパイラについて説明する。実施形態では、複数の処理タスクや複数の動作モードを含む高級言語プログラムに対する最適化処理について説明する。なお、以下の説明では、高級言語の例としてC言語が使用されているが、高級言語および機械語の種類は任意でよい。
(第1の実施形態)
図1〜図5を参照して、本発明の第1の実施形態に係るコンパイラによる最適化処理の実行例を説明する。図1は、機械語プログラムに含まれる命令コードをキャッシュメモリのライン上に配置した様子を示す図である。図1に示す命令コードは、図2に示すフロー図で表された処理に相当する。図2に示す処理では、複数の処理タスク(もしくは複数の動作モード)ごとの処理ブロックを示す。この処理に相当する命令コードは、図1に示すように、各処理ブロックに相当する命令コードを含んでいる。
図1〜図5を参照して、本発明の第1の実施形態に係るコンパイラによる最適化処理の実行例を説明する。図1は、機械語プログラムに含まれる命令コードをキャッシュメモリのライン上に配置した様子を示す図である。図1に示す命令コードは、図2に示すフロー図で表された処理に相当する。図2に示す処理では、複数の処理タスク(もしくは複数の動作モード)ごとの処理ブロックを示す。この処理に相当する命令コードは、図1に示すように、各処理ブロックに相当する命令コードを含んでいる。
図1には、命令コードをキャッシュメモリの2つのウェイ上に配置した様子が、2とおり記載されている。図1(a)では、複数の処理タスク(もしくは複数の動作モード)の処理ブロックが混在して2つのウェイ上に配置されている。この配置(以下、第1の配置という)は、従来のコンパイラによって得られる。
これに対して、図1(b)では、複数の処理タスク(もしくは複数の動作モード)のうち、同一の処理タスク(もしくは同一の動作モード)の処理ブロックが1つのウェイ上に配置されている。この配置(以下、第2の配置という)は、本実施形態に係るコンパイラによって得られる。第2の配置では第1の配置と比べて、複数の処理タスク(もしくは複数の動作モード)の処理ブロックが、キャッシュのウェイに上書きして配置されている。
本実施形態では、コンピュータが機械語プログラムを実行するときには、ライン単位のプリフェッチが行われるとする。言い換えると、ある命令コードの読み出し時にキャッシュミスが発生した場合には、その命令コードを含む1ライン分の命令コードが、メインメモリからキャッシュメモリに転送されるとする。
上記の条件下で、発生するキャッシュミスについて説明する。第1の配置(図1(a))では、順次処理が実行されるときには、キャッシュメモリには処理タスクA(もしくは動作モードA)の処理A−1に相当する処理ブロックの命令がプリフェッチされている。次に処理タスクA(もしくは動作モードA)の処理A−2に相当する処理ブロックの命令が実行されるときに、処理A−2に相当する処理ブロックの命令はキャッシュメモリ内に格納されていないので、キャッシュミスが発生する。このキャッシュミスが発生したときに、処理A−2および処理A−3がメインメモリからキャッシュメモリに転送される。このように第1の配置では、処理されない(相関関係のない)処理タスクB(もしくは動作モードB)に関わる処理ブロックによって処理タスクA(もしくは動作モードA)に関わる一連の処理にキャッシュミスが発生する。
一方、第2の配置(図1(b))では、処理タスクA(もしくは動作モードA)に関わる処理が実行されるときには、キャッシュメモリには処理A−1および処理A−2および処理A−3がプリフェッチされている。処理A−1の次に処理A−2が実行されるときに、処理A−2はキャッシュメモリ内に格納されているので、処理タスクA(もしくは動作モードA)に関わる一連の処理にキャッシュミスは発生しない。このように第2の配置では、キャッシュミスが発生しない。したがって、第2の配置によれば、第1の配置よりもキャッシュミスの発生を抑制することができる。
プログラム開発者が図2に示すフロー図に基づき従来どおりのプログラミングを行うと、図3(a)に示す高級言語プログラムが得られる。この高級言語プログラムを従来のコンパイラで処理すると、図3(b)に示す機械語プログラムが得られる。この機械語プログラムでは、処理タスクA(もしくは動作モードA)の処理ブロックと、処理タスクB(もしくは動作モードB)の処理ブロックとが混在して配置されている。このように高級言語プログラム内の処理の記載によって、機械語プログラム内の相当する命令コードの配置で、処理タスクA(もしくは動作モードA)に関わる処理に相当する命令コードもしくは、処理タスクB(もしくは動作モードB)に関わる処理に相当する命令コードが、キャッシュメモリ内に混在せずに格納される可能性が低くなる。このため、高級言語プログラム内で任意に混在して記載された処理ブロックの発生確率が高い場合には、キャッシュミスが発生しやすくなる。
そこで、本実施形態では、プログラム開発者は、複数の処理タスク(もしくは複数の動作モード)を含む高級言語プログラムを作成するときに、同一のタスクもしくは、同時に動作しない動作モードなど一連の処理シーケンスとして実行されない、処理ブロックの相関関係(輻輳関係)を相関関係にない(輻輳動作関係にない)処理として指定する。より詳細には、プログラム開発者は、図4(a)に示すように、同一のタスクもしくは、同時に動作しない動作モードなど一連の処理シーケンスとして実行されない、処理ブロックを#pragmaプリプロセッサディレクティブを用いて指定する。この#pragmaプリプロセッサディレクティブは、#pragmaプリプロセッサを呼び出す機能を有する。パラメータが_uncorrelated_ON (相関関係なし指定オン)である#pragma プリプロセッサディレクティブと、パラメータが_ uncorrelated_OFF(相関関係なし指定オフ)である#pragma プリプロセッサディレクティブとに挟まれた処理ブロックが、処理ブロックの相関関係(輻輳関係)を相関関係にない(輻輳動作関係にない)処理となる。この#pragma プリプロセッサディレクティブが、高級言語プログラムに含まれる処理ブロックの相関関係(輻輳関係)を指定する記述に相当する。
図4(a)に示す高級言語プログラムを本実施形態に係るコンパイラで処理すると、図4(b)に示す機械語プログラムが得られる。この機械語プログラムでは、処理タスクA(もしくは動作モードA)に関わる処理が実行されるときには、キャッシュメモリには処理A−1の次に対応した命令コード(ここでは、処理A−2)は、処理A−1の直後に配置されている。この結果、処理A−1ないしA−3は、高級言語プログラム内の記述配置と異なる位置に配置される。このように相関関係のない処理ブロックに相当する命令コードを直後に配置しないと、処理タスクA(もしくは動作モードA)に関わる一連の処理に相当する命令コードは、キャッシュメモリ上に格納される。したがって、キャッシュミスの発生を抑制することができる。
以下、図5を参照して、本実施形態に係るコンパイラの構成を説明する。図5は、本実施形態に係るコンパイラの全体構成を示す図である。図5に示すように、本実施形態に係るコンパイラは、翻訳部10および連結部20を備えている。翻訳部10は、入力されたソースファイル1に基づき、オブジェクトファイル2を生成する。連結部20は、生成されたオブジェクトファイル2に基づき、実行形式ファイル3を生成する。ソースファイル1には高級言語プログラムが記録され、オブジェクトファイル2および実行形式ファイル3には機械語プログラムが記録される。
翻訳部10は、プリプロセッサディレクティブ解析ステップS11、分岐構造処理ステップS12、および、命令コード生成ステップS13を実行する。プリプロセッサディレクティブ解析ステップS11では、ソースファイルに記録された高級言語プログラムから、処理ブロックの相関関係(輻輳関係)を指定する#pragma プリプロセッサディレクティブが抽出される。分岐構造処理ステップS12では、処理ブロックの相関関係(輻輳関係)の指定に基づき分岐命令が生成され、命令コード生成ステップS13では、分岐構造処理ステップS12で生成された分岐命令以外の命令コードが生成され、相関関係にある(輻輳関係にある)命令コードが連続するように命令コードが配置される。生成された命令コードは、リンク前の機械語プログラムとしてオブジェクトファイルに記録される。
なお、分岐構造処理ステップS12、命令コード生成ステップS13が、請求項1中の前記高級言語プログラムに含まれる記述に基づき、前記機械語プログラムの一部を処理範囲として決定する範囲決定ステップと、前記処理範囲内にある命令コードの配置位置を決定する配置決定ステップに相当する。すなわち、相関関係にある処理ブロックが連続するように分岐命令で並べ替え、最終の配置決定(さらに効率化する位置決定)は、後述する第2の実施形態の図6のステップS34にて行われる。
連結部20は、結合ステップS21を実行する。結合ステップS21では、オブジェクトファイル2に記録されたリンク前の機械語プログラムに対してリンク処理が実行される。リンク後の機械語プログラムは、実行形式ファイル3に記録される。
以上に示すように、本実施形態に係るコンパイラは、入力された高級言語プログラムに処理ブロックの相関関係(輻輳関係)を指定する記述によって相関関係にない(輻輳動作関係にない)ことを示す処理であることを指定する記述が含まれている場合には、相関関係のない処理ブロックに相当する命令コードを直後に配置しない。プログラム開発者は、高級言語プログラムを作成するときに、同一のタスクもしくは、同時に動作しない動作モードなど一連の処理シーケンスとして実行されない、処理ブロックを相関関係にない(輻輳動作関係にない)処理ブロックとして指定する。プログラム開発者は、高級言語プログラムの動作を理解し、いずれの処理ブロックが相関関係にない(輻輳動作関係にない)処理ブロックで実行されるかを知っているので、多くの場合、相関関係にない(輻輳動作関係にない)処理ブロックを正しく指定することができる。例えば、再生系の処理と、記録系の処理があり、独立した動作モードで動作する場合、再生系の処理に必要な処理ブロックと、記録系の処理に必要な処理ブロックとが含まれている場合には、プログラム開発者は、再生系に必要な処理ブロックと、記録系に必要な処理ブロックを相関関係にない(輻輳動作関係にない)処理ブロックとして指定すればよい。
したがって、本実施形態に係るコンパイラによれば、相関関係のない(輻輳動作関係にない)処理ブロックに相当する命令コードを分岐命令の直後または近傍に配置しないことによって、ある一連の処理に相当する命令コードを直後に配置することにより、前記ある一連の処理が実行されるときのキャッシュミスの発生を抑制し、キャッシュミスに起因する性能の低下を抑制することができる。
(第2の実施形態)
図6〜図8を参照して、本発明の第2の実施形態に係るコンパイラによる最適化処理の実行例を説明する。なお、高級言語プログラムに含まれる処理ブロックの相関関係(輻輳関係)を指定する記述に関しては図4(a)に示したものと同様である。
図6〜図8を参照して、本発明の第2の実施形態に係るコンパイラによる最適化処理の実行例を説明する。なお、高級言語プログラムに含まれる処理ブロックの相関関係(輻輳関係)を指定する記述に関しては図4(a)に示したものと同様である。
第1の実施形態では、相関関係にない(輻輳動作関係にない)処理ブロックに相当する命令コードを直後に配置しないこととしたが、本実施形態は相関関係にない(輻輳動作関係にない)処理ブロックをキャッシュメモリ上の同一アドレスに配置するようにメインメモリ上のアドレスに配置することで、キャッシュミスに起因する性能の低下をより一層抑制できるようにしたものである。
このような命令コードの配置位置を求めるために、本実施形態に係るコンパイラは、高級言語プログラムに含まれる記述に基づき、機械語プログラムの一部を処理範囲として決定する処理と、処理範囲内にある命令コードの配置位置を決定する処理と行う。
以下、図6を参照して、本実施形態に係るコンパイラの構成を説明する。本実施形態に係るコンパイラの全体構成は、第1の実施形態に係るコンパイラと同じである(図5を参照)。ただし、本実施形態に係るコンパイラは、図5に示す連結部20において、図6に示す連結部30を備えている。連結部30は、1次結合ステップS31、範囲決定ステップS32、アドレス重複検出ステップS33、配置決定ステップS34、および、配置ステップS35を実行する。また、連結部30は、1次結合ステップS31の出力データを記録する1次実行形式ファイル4およびアドレスマッピング情報ファイル5を含む。
1次結合ステップS31では、オブジェクトファイル2に記録された機械語プログラムに対してリンク処理が行われる。これにより、実行可能な機械語プログラム(リンク後の機械語プログラム)と、サブルーチンやラベルのアドレス情報とが生成される。実行可能な機械語プログラムは1次実行形式ファイル4に記録され、アドレス情報はアドレスマッピング情報ファイル5に記録される。1次実行形式ファイル4には、高級言語プログラムにおいて高優先度の処理として指定された処理を特定する情報も記録される。
範囲決定ステップS32では、1次実行形式ファイル4に記録された内容に基づき、処理ブロックの相関関係(輻輳関係)が解析される。その結果、相関関係にない(輻輳動作関係にない)処理ブロックに相当する命令コードが、処理対象として選択される。
アドレス重複検出ステップS33では、アドレスマッピング情報ファイル5に記録された内容に基づき、相関関係にない(輻輳動作関係にない)処理ブロックに相当する命令コードのメインメモリ上のアドレスが求められる。また、求めたアドレスと、キャッシュメモリの構成に関する情報とに基づき、相関関係にない(輻輳動作関係にない)処理ブロックに相当する命令コードのキャッシュメモリ内の格納位置のうちで、互いに重複しないものが検出される。
キャッシュメモリ内の格納位置が重複しない命令コードが存在する場合、配置決定ステップS34では、命令コードが重複配置されるように、命令コードの配置位置が決定される。配置ステップS35では、相関関係にない(輻輳動作関係にない)処理ブロックに相当する命令コードが、配置決定ステップS34で決定された位置に配置される。
図7および図8を参照して、アドレス重複検出ステップS33で使用される、メインメモリのアドレスとキャッシュメモリのアドレスとの対応づけについて説明する。ここでは、例として、2ウェイ・セット・アソシエイティブ方式で、ラインサイズが32バイト、総容量が8Kバイトのキャッシュメモリ(図7を参照)について説明する。
メインメモリのアドレス幅が32ビットであるとすると、このうち下位13ビットがキャッシュメモリのアドレスに対応づけられる(図8を参照)。キャッシュメモリのアドレスは、タグアドレスの最下位ビット(1ビット)、インデックス(7ビット)、および、オフセット(5ビット)に分けられる。タグアドレスの最下位ビットは、2ウェイのいずれかを指定し、インデックスはラインを指定し、オフセットはライン上のバイトを指定する。
2つの処理に相当する命令コードのメインメモリのアドレスのうち、タグアドレスの最下位ビットとインデックスとを合わせた8ビットが一致する場合には、これら2つの命令コードは、キャッシュメモリ内に重複して配置される。このようにアドレス重複検出ステップS33では、メインメモリのアドレスの一部が一致しているか否かにより、命令コードのキャッシュメモリ内の格納位置が重複しているか否かを判断することができる。
したがって、本実施形態に係るコンパイラによれば、相関関係のない(輻輳動作関係にない)処理ブロックに相当する命令コードをキャッシュメモリ内の格納位置が重複するように配置することによって、キャッシュミスに起因する性能の低下を抑制することができる。
なお、本発明の第1,2の実施形態では、高級言語プログラム内でパラメータがオンである#pragmaプリプロセッサディレクティブとパラメータがオフである#pragmaプリプロセッサディレクティブとに挟まれた部分が、相関関係にない(輻輳動作関係にない)処理として指定されることとした。すなわち、高級言語プログラムに含まれる第1の範囲を指定する記述であり、機械語プログラムのうちで第1の範囲に相当する部分を処理範囲として選択するものである。なお、相関関係にない(輻輳動作関係にない)処理の指定方法として、これ以外の方法を用いてもよい。例えば、高級言語プログラム内には、相関関係にない(輻輳動作関係にない)処理として指定された範囲内にある相関関係のある(輻輳動作関係にある)処理部分を指定する#pragmaプリプロセッサディレクティブがさらに含まれていてもよい。すなわち、高級言語プログラムに含まれる第1の範囲内にある第2の範囲を指定する記述であり、機械語プログラムのうちで第1の範囲から第2の範囲を除いた部分に相当する部分を処理範囲として選択するものである。あるいは、高級言語プログラム内には、相関関係のある(輻輳動作関係にある)処理範囲を指定する#pragmaプリプロセッサディレクティブや、その範囲内にある相関関係にない(輻輳動作関係にない)処理である部分を指定する#pragmaプリプロセッサディレクティブが含まれていてもよい。すなわち、高級言語プログラムに含まれる第1の範囲を指定する記述であり、機械語プログラムのうちで第1の範囲の外に相当する部分を処理範囲として選択したり、高級言語プログラムに含まれる第1の範囲内にある第2の範囲を指定する記述であり、機械語プログラムのうちで第1の範囲から第2の範囲を除いた部分の外に相当する部分を処理範囲として選択するものである。
また、本発明のコンパイラは、第1,2の実施形態の最適化方法をコンピュータに実行させるためのコンパイラであり、本発明の記録媒体は、第1,2の実施形態の最適化方法をコンピュータに実行させるためのコンパイラを記録したコンピュータ読み取り可能な記録媒体であり、本発明の情報伝送媒体は、第1,2の実施形態の最適化方法をコンピュータに実行させるためのコンパイラをインターネット等を介して伝送するための情報伝送媒体である。
本発明のコンパイラによる最適化方法は、安価で容易にキャッシュミスに起因する性能の低下を抑制できるので、高級言語プログラムを機械語プログラムに変換する各種のコンパイラに利用することができる。
1 ソースファイル
2 オブジェクトファイル
3 実行形式ファイル
4 一次実行形式ファイル
5 アドレスマッピング情報ファイル
10 翻訳部
20、30 連結部
S11 プリプロセッサディレクティブ解析ステップ
S12 分岐構造処理ステップ
S13 命令コード生成ステップ
S21 結合ステップ
S31 一次結合ステップ
S32 範囲決定ステップ
S33 アドレス重複解析ステップ
S34 配置決定ステップ
S35 配置ステップ
2 オブジェクトファイル
3 実行形式ファイル
4 一次実行形式ファイル
5 アドレスマッピング情報ファイル
10 翻訳部
20、30 連結部
S11 プリプロセッサディレクティブ解析ステップ
S12 分岐構造処理ステップ
S13 命令コード生成ステップ
S21 結合ステップ
S31 一次結合ステップ
S32 範囲決定ステップ
S33 アドレス重複解析ステップ
S34 配置決定ステップ
S35 配置ステップ
Claims (9)
- 高級言語プログラムを機械語プログラムに変換するコンパイラによって実行される最適化方法であって、
前記高級言語プログラムに含まれる記述に基づき、前記機械語プログラムの一部を処理範囲として決定する範囲決定ステップと、
前記処理範囲内にある命令コードの配置位置を決定する配置決定ステップとを備えた、コンパイラによる最適化方法であって、
前記高級言語プログラムには、処理ブロックの相関関係(輻輳関係)を指定する記述が含まれており、
前記範囲決定ステップは、前記機械語プログラムのうちで相関関係を指定した処理ブロックに相当する部分を前記処理範囲として選択し、
前記配置決定ステップは、前記処理範囲内にある命令コードの配置位置を処理ブロックごとに決定することを特徴とする、コンパイラによる最適化方法。 - 前記配置決定ステップは、前記高級言語プログラム内の相関関係を指定した処理の記述順序と、前記機械語プログラム内の相当する命令コードの配置順序とが異なるように、前記処理範囲内にある命令コードの配置位置を決定する場合があることを特徴とする、請求項1に記載のコンパイラによる最適化方法。
- 前記高級言語プログラムには、第1の範囲を指定する記述が含まれており、
前記範囲決定ステップは、前記機械語プログラムのうちで前記第1の範囲に相当する部分を前記処理範囲として選択することを特徴とする、請求項1に記載のコンパイラによる最適化方法。 - 前記高級言語プログラムには、前記第1の範囲内にある第2の範囲を指定する記述がさらに含まれており、
前記範囲決定ステップは、前記機械語プログラムのうちで前記第1の範囲から前記第2の範囲を除いた部分に相当する部分を前記処理範囲として選択することを特徴とする、請求項3に記載のコンパイラによる最適化方法。 - 前記高級言語プログラムには、第1の範囲を指定する記述が含まれており、
前記範囲決定ステップは、前記機械語プログラムのうちで前記第1の範囲の外に相当する部分を前記処理範囲として選択することを特徴とする、請求項1に記載のコンパイラによる最適化方法。 - 前記高級言語プログラムには、前記第1の範囲内にある第2の範囲を指定する記述がさらに含まれており、
前記範囲決定ステップは、前記機械語プログラムのうちで前記第1の範囲から前記第2の範囲を除いた部分の外に相当する部分を前記処理範囲として選択することを特徴とする、請求項5に記載のコンパイラによる最適化方法。 - 高級言語プログラムを機械語プログラムに変換する処理および最適化処理をコンピュータに実行させるためのコンパイラであって、前記最適化処理として、
前記高級言語プログラムに含まれる記述に基づき、前記機械語プログラムの一部を処理範囲として決定する範囲決定ステップと、
前記処理範囲内にある命令コードの配置位置を決定する配置決定ステップとを、コンピュータに実行させるためのコンパイラ。 - 高級言語プログラムを機械語プログラムに変換する処理および最適化処理をコンピュータに実行させるためのコンパイラを記録したコンピュータ読み取り可能な記録媒体であって、前記最適化処理として、
前記高級言語プログラムに含まれる記述に基づき、前記機械語プログラムの一部を処理範囲として決定する範囲決定ステップと、
前記処理範囲内にある命令コードの配置位置を決定する配置決定ステップとを、コンピュータに実行させるためのコンパイラを記録したコンピュータ読み取り可能な記録媒体。 - 高級言語プログラムを機械語プログラムに変換する処理および最適化処理をコンピュータに実行させるためのコンパイラを伝送する情報伝送媒体であって、前記最適化処理として、
前記高級言語プログラムに含まれる記述に基づき、前記機械語プログラムの一部を処理範囲として決定する範囲決定ステップと、
前記処理範囲内にある命令コードの配置位置を決定する配置決定ステップとを、コンピュータに実行させるためのコンパイラを伝送する情報伝送媒体。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008188386A JP2010026851A (ja) | 2008-07-22 | 2008-07-22 | コンパイラによる最適化方法 |
CN2009801285458A CN102099786A (zh) | 2008-07-22 | 2009-07-17 | 程序优化方法 |
PCT/JP2009/003377 WO2010010678A1 (ja) | 2008-07-22 | 2009-07-17 | プログラム最適化方法 |
US13/009,564 US20110113411A1 (en) | 2008-07-22 | 2011-01-19 | Program optimization method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008188386A JP2010026851A (ja) | 2008-07-22 | 2008-07-22 | コンパイラによる最適化方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2010026851A true JP2010026851A (ja) | 2010-02-04 |
Family
ID=41570149
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008188386A Pending JP2010026851A (ja) | 2008-07-22 | 2008-07-22 | コンパイラによる最適化方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20110113411A1 (ja) |
JP (1) | JP2010026851A (ja) |
CN (1) | CN102099786A (ja) |
WO (1) | WO2010010678A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103299277A (zh) * | 2011-12-31 | 2013-09-11 | 华为技术有限公司 | Gpu***及其处理方法 |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8364751B2 (en) * | 2008-06-25 | 2013-01-29 | Microsoft Corporation | Automated client/server operation partitioning |
US8869123B2 (en) * | 2011-06-24 | 2014-10-21 | Robert Keith Mykland | System and method for applying a sequence of operations code to program configurable logic circuitry |
US10089277B2 (en) | 2011-06-24 | 2018-10-02 | Robert Keith Mykland | Configurable circuit array |
US9158544B2 (en) | 2011-06-24 | 2015-10-13 | Robert Keith Mykland | System and method for performing a branch object conversion to program configurable logic circuitry |
CN102955712B (zh) * | 2011-08-30 | 2016-02-03 | 国际商业机器公司 | 提供关联关系并执行代码优化的方法和装置 |
US9633160B2 (en) | 2012-06-11 | 2017-04-25 | Robert Keith Mykland | Method of placement and routing in a reconfiguration of a dynamically reconfigurable processor |
US9304770B2 (en) | 2011-11-21 | 2016-04-05 | Robert Keith Mykland | Method and system adapted for converting software constructs into resources for implementation by a dynamically reconfigurable processor |
WO2016097810A1 (en) * | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Multi-mode set associative cache memory dynamically configurable to selectively select one or a plurality of its sets depending upon mode |
US10698827B2 (en) * | 2014-12-14 | 2020-06-30 | Via Alliance Semiconductor Co., Ltd. | Dynamic cache replacement way selection based on address tag bits |
EP3055774B1 (en) * | 2014-12-14 | 2019-07-17 | VIA Alliance Semiconductor Co., Ltd. | Multi-mode set associative cache memory dynamically configurable to selectively allocate into all or a subset of its ways depending on the mode |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05324281A (ja) * | 1992-05-25 | 1993-12-07 | Nec Corp | アドレス割当変更方法 |
JP2002024031A (ja) * | 2000-07-07 | 2002-01-25 | Sharp Corp | オブジェクトコードの再合成方法および生成方法 |
JP2005122481A (ja) * | 2003-10-16 | 2005-05-12 | Matsushita Electric Ind Co Ltd | コンパイラ装置およびリンカ装置 |
JP2006309430A (ja) * | 2005-04-27 | 2006-11-09 | Matsushita Electric Ind Co Ltd | コンパイラによる最適化方法 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5212794A (en) * | 1990-06-01 | 1993-05-18 | Hewlett-Packard Company | Method for optimizing computer code to provide more efficient execution on computers having cache memories |
US5689712A (en) * | 1994-07-27 | 1997-11-18 | International Business Machines Corporation | Profile-based optimizing postprocessors for data references |
US6006033A (en) * | 1994-08-15 | 1999-12-21 | International Business Machines Corporation | Method and system for reordering the instructions of a computer program to optimize its execution |
US6301652B1 (en) * | 1996-01-31 | 2001-10-09 | International Business Machines Corporation | Instruction cache alignment mechanism for branch targets based on predicted execution frequencies |
US6427234B1 (en) * | 1998-06-11 | 2002-07-30 | University Of Washington | System and method for performing selective dynamic compilation using run-time information |
US6675374B2 (en) * | 1999-10-12 | 2004-01-06 | Hewlett-Packard Development Company, L.P. | Insertion of prefetch instructions into computer program code |
JP2001166948A (ja) * | 1999-12-07 | 2001-06-22 | Nec Corp | プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体 |
GB0028079D0 (en) * | 2000-11-17 | 2001-01-03 | Imperial College | System and method |
US7580914B2 (en) * | 2003-12-24 | 2009-08-25 | Intel Corporation | Method and apparatus to improve execution of a stored program |
US20060123401A1 (en) * | 2004-12-02 | 2006-06-08 | International Business Machines Corporation | Method and system for exploiting parallelism on a heterogeneous multiprocessor computer system |
JP4768984B2 (ja) * | 2004-12-06 | 2011-09-07 | パナソニック株式会社 | コンパイル方法、コンパイルプログラムおよびコンパイル装置 |
JP2006260096A (ja) * | 2005-03-16 | 2006-09-28 | Matsushita Electric Ind Co Ltd | プログラム変換方法およびプログラム変換装置 |
US7784042B1 (en) * | 2005-11-10 | 2010-08-24 | Oracle America, Inc. | Data reordering for improved cache operation |
GB2443277B (en) * | 2006-10-24 | 2011-05-18 | Advanced Risc Mach Ltd | Performing diagnostics operations upon an asymmetric multiprocessor apparatus |
US8886887B2 (en) * | 2007-03-15 | 2014-11-11 | International Business Machines Corporation | Uniform external and internal interfaces for delinquent memory operations to facilitate cache optimization |
-
2008
- 2008-07-22 JP JP2008188386A patent/JP2010026851A/ja active Pending
-
2009
- 2009-07-17 CN CN2009801285458A patent/CN102099786A/zh active Pending
- 2009-07-17 WO PCT/JP2009/003377 patent/WO2010010678A1/ja active Application Filing
-
2011
- 2011-01-19 US US13/009,564 patent/US20110113411A1/en not_active Abandoned
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05324281A (ja) * | 1992-05-25 | 1993-12-07 | Nec Corp | アドレス割当変更方法 |
JP2002024031A (ja) * | 2000-07-07 | 2002-01-25 | Sharp Corp | オブジェクトコードの再合成方法および生成方法 |
JP2005122481A (ja) * | 2003-10-16 | 2005-05-12 | Matsushita Electric Ind Co Ltd | コンパイラ装置およびリンカ装置 |
JP2006309430A (ja) * | 2005-04-27 | 2006-11-09 | Matsushita Electric Ind Co Ltd | コンパイラによる最適化方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103299277A (zh) * | 2011-12-31 | 2013-09-11 | 华为技术有限公司 | Gpu***及其处理方法 |
CN103299277B (zh) * | 2011-12-31 | 2016-11-09 | 华为技术有限公司 | Gpu***及其处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102099786A (zh) | 2011-06-15 |
US20110113411A1 (en) | 2011-05-12 |
WO2010010678A1 (ja) | 2010-01-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2010026851A (ja) | コンパイラによる最適化方法 | |
US9798528B2 (en) | Software solution for cooperative memory-side and processor-side data prefetching | |
JP4374221B2 (ja) | コンピュータシステムおよび記録媒体 | |
US9886384B2 (en) | Cache control device for prefetching using pattern analysis processor and prefetch instruction and prefetching method using cache control device | |
US20020013938A1 (en) | Fast runtime scheme for removing dead code across linked fragments | |
JP6398725B2 (ja) | コンパイルプログラム、コンパイル方法およびコンパイラ装置 | |
JP2006260096A (ja) | プログラム変換方法およびプログラム変換装置 | |
US7243195B2 (en) | Software managed cache optimization system and method for multi-processing systems | |
US7418699B2 (en) | Method and system for performing link-time code optimization without additional code analysis | |
WO2010134330A1 (ja) | 分岐予測装置、その分岐予測方法、コンパイラ、そのコンパイル方法及び分岐予測プログラム記録媒体 | |
US7480768B2 (en) | Apparatus, systems and methods to reduce access to shared data storage | |
US7702856B2 (en) | Dynamic prefetch distance calculation | |
JP2012123810A (ja) | 復帰スタックを管理する方法および装置 | |
US8359435B2 (en) | Optimization of software instruction cache by line re-ordering | |
US20120226892A1 (en) | Method and apparatus for generating efficient code for scout thread to prefetch data values for a main thread | |
JP2008293378A (ja) | プログラム書き換え装置 | |
CA2762563A1 (en) | Data prefetching and coalescing for partitioned global address space languages | |
JP2008003882A (ja) | コンパイラプログラム,リストベクトルの領域割当て最適化方法,コンパイル処理装置およびコンパイラプログラムを記録したコンピュータ読み取り可能な記録媒体 | |
US20090187897A1 (en) | Compiling method and compiling program | |
JPWO2009004709A1 (ja) | 間接分岐処理プログラムおよび間接分岐処理方法 | |
JP4047788B2 (ja) | コンパイラ装置およびリンカ装置 | |
JP2014112327A (ja) | 変換プログラム、変換装置及び変換方法 | |
US8166252B2 (en) | Processor and prefetch support program | |
US20090019225A1 (en) | Information processing apparatus and information processing system | |
JP2006309430A (ja) | コンパイラによる最適化方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20110708 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20130507 |