(57)【特許請求の範囲】
【請求項１】
最適化オブジェクト生成装置に於いて、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイラと、
前記コンパイラで生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令と実行されない命令を示す実行情報を生成するシミュレータと、
前記シミュレータの実行情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションと実行されなかった命令列を出力するセクションに分離し、それぞれに別のセクション名を付与するセクション名付与ユニットと、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のコンパイル単位に跨って複数のファイル中の実行されるセクション名をもつセクションと実行されなかったセクション名をもつセクションを各々を一箇所にまとめて実行部分と未実行部分に分けるリンク処理ユニットと、
を備えたことを特徴とする最適化オブジェクト生成装置。
【請求項２】
最適化オブジェクト生成装置に於いて、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイラと、
前記コンパイラで生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令の実行頻度情報を生成するシミュレータと、
前記シミュレータの実行頻度情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションに実行頻度に応じたセクション名を付与するセクション名付与ユニットと、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のコンパイル単位に跨って同じセクション名を持つセクションを一箇所にまとめて実行頻度の高い命令列を小さな範囲にまとめるリンク処理ユニットと、
を備えたことを特徴とする最適化オブジェクト生成装置。
【請求項３】
最適化オブジェクト生成装置に於いて、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイラと、
前記コンパイラで生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令の実行時間情報を生成するシミュレータと、
前記シミュレータの実行時間情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、時間的に近接して実行された命令列を出力するセクションに同じセクション名を付与するセクション名付与ユニットと、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のコンパイル単位に跨って同じセクション名を持つセクションを一箇所にまとめることで、複数のファイルに跨って時間的に近接して実行される命令列を空間的に近接するように配置するリンク処理ユニットと、
を備えたことを特徴とする最適化オブジェクト生成装置。
【請求項４】
最適化オブジェクト生成装置に於いて、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイラと、
前記コンパイラで生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令の実行頻度情報を生成するシミュレータと、
前記シミュレータの実行頻度情報に基づき、条件付き分岐命令の実行時に分岐先と分岐元の位置関係を見て分岐と非分岐を予測的に判断する静的分岐予測が正しくできるように、実行頻度の高い分岐先の命令列を出力するセクションと実行頻度の低い分岐先の命令列を出力するセクションに異なるセクション名を付与するセクション名付与ユニットと、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、前記セクション名に基づき、複数のコンパイル単位に跨って前記静的分岐予測が正しくできるように実行頻度の高い順に前記分岐先の命令列を配置するリンク処理ユニットと、
を備えたことを特徴とする最適化オブジェクト生成装置。
【請求項５】
最適化オブジェクト生成装置に於いて、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイラと、
前記コンパイラで生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令と実行されない命令を示す実行情報、実行された命令の頻度情報、及び実行された命令の実行時間情報を生成するシミュレータと、
前記シミュレータの実行情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションと実行されなかった命令列を出力する第１セクション名付与ユニットと、
前記シミュレータの実行頻度情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションに実行頻度に応じたセクション名を付与する第２セクション名付与ユニットと、
前記シミュレータの実行時間情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、時間的に近接して実行された命令列を出力するセクションに同じセクション名を付与する第３セクション名付与ユニットと、
前記シミュレータの実行頻度情報に基づき、条件付き分岐命令の実行時に分岐先と分岐元の位置関係を見て分岐と非分岐を予測的に判断する静的分岐予測が正しくできるように、実行頻度の高い分岐先の命令列を出力するセクションと実行頻度の低い分岐先の命令列を出力するセクションに異なるセクション名を付与する第４セクション名付与ユニットと、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のコンパイル単位に跨って複数のファイル中の同じセクション名をもつセクションを各々を一箇所にまとめることにより、命令列を実行部分と未実行部分に分け配置し、実行頻度の高い命令列を小さな範囲にまとめ、複数のファイルに跨って時間的に近接して実行される命令列を空間的に近接させ、更に前記静的分岐予測が正しくできるように実行頻度の高い順に前記分岐先の命令列を配置するリンク処理ユニットと、
を備えたことを特徴とする最適化オブジェクト生成装置。
【請求項６】
最適化オブジェクト生成装置に於いて、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイラと、
前記コンパイラで生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令と実行されない命令を示す実行情報を生成するシミュレータと、
前記シミュレータの実行情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションと実行されなかった命令列を出力するセクションに分離し、それぞれに別の外部参照名を付与すると同時に、実行された命令列が属するセクションの外部参照名と実行されなかった命令列が属するセクションの外部参照名に分けた外部参照名リストを作成する参照名付与ユニットと、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のコンパイル単位に跨って前記外部参照名リストに基づき、複数のファイル中の実行されたセクションと実行されなかったセクションを各々を一箇所にまとめて実行部分と未実行部分に分けるリンク処理ユニットと、
を備えたことを特徴とする最適化オブジェクト生成装置。
【請求項７】
最適化オブジェクト生成装置に於いて、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイラと、
前記コンパイラで生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令の実行頻度情報を生成するシミュレータと、
前記シミュレータの実行頻度情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションの実行頻度に応じて外部参照名を付与すると同時に、実行頻度の高い順にソートした外部参照名リストを作成する外部参照名付与ユニットと、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のコンパイル単位に跨って前記外部参照名リストに基づき、複数のファイル中の実行頻度の高いセクションの命令列を小さな範囲にまとめるリンク処理ユニットと、
ことを特徴とする最適化オブジェクト生成装置。
【請求項８】
最適化オブジェクト生成装置に於いて、
数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイラと、
前記コンパイラで生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令の実行時間情報を生成するシミュレータと、
前記シミュレータの実行時間情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、時間的に近接して実行された命令列を出力するセクションに同じ外部参照名を付与すると同時に、時間的に近接して実行された命令列を出力するセクションの外部参照名をまとめた外部参照名リストを作成する外部参照名付与ユニットと、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のコンパイル単位に跨って前記外部参照名リストに基づき、複数のファイルに跨って時間的に近接して実行される命令列を空間的に近接するように配置するリンク処理ユニットと、を備えたことを特徴とする最適化オブジェクト生成装置。
【請求項９】
最適化オブジェクト生成装置に於いて、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイラと、
前記コンパイラで生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令の実行頻度情報を生成するシミュレータと、
前記シミュレータの実行頻度情報に基づき、条件付き分岐命令の実行時に分岐先と分岐元の位置関係を見て分岐と非分岐を予測的に判断する静的分岐予測が正しくできるように、実行頻度の高い分岐先の命令列を出力するセクションと実行頻度の低い分岐先の命令列を出力するセクションに異なる外部参照名を付与すると同時に、実行頻度の高い順に並べた外部参照名リストを生成する外部参照名付与ユニットと、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のコンパイル単位に跨って前記外部参照名リストに基づき、前記静的分岐予測が正しくできるように実行頻度の高い順に前記分岐先の命令列を配置するリンク処理ユニットと、
を備えたことを特徴とする最適化オブジェクト生成装置。
【請求項１０】
最適化オブジェクト生成装置に於いて、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイラと、
前記コンパイラで生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令と実行されない命令を示す実行情報、実行された命令の頻度情報、及び実行された命令の実行時間情報を生成するシミュレータと、
前記シミュレータの実行情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションと実行されなかった命令列を出力するセクションに分離し、それぞれに別の外部参照名を付与すると同時に、実行された命令列が属するセクションの外部参照名と実行されなかった命令列が属するセクションの外部参照名に分けた外部参照名リストを作成する第１外部参照名付与ユニットと、
前記シミュレータの実行頻度情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションの実行頻度に応じて外部参照名を付与すると同時に、実行頻度の高い順にソートした外部参照名リストを作成する第２外部参照名付与ユニットと、
前記シミュレータの実行時間情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、時間的に近接して実行された命令列を出力するセクションに同じ外部参照名を付与すると同時に、時間的に近接して実行された命令列を出力するセクションの外部参照名をまとめた外部参照名リストを作成する第３外部参照名付与ユニットと、
前記シミュレータの実行頻度情報に基づき、条件付き分岐命令の実行時に分岐先と分岐元の位置関係を見て分岐と非分岐を予測的に判断する静的分岐予測が正しくできるように、実行頻度の高い分岐先の命令列を出力するセクションと実行頻度の低い分岐先の命令列を出力するセクションに異なる外部参照名を付与すると同時に、実行頻度の高い順に並べた外部参照名リストを生成する第４外部参照名付与ユニットと、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、前記外部参照名リストに基づき、複数のファイル中の実行されたセクションと実行されなかったセクションを各々を一箇所にまとめて実行部分と未実行部分に分け、複数のファイル中の実行されたセクションを複数のコンパイル単位に跨って一箇所にまとめて実行頻度の高い命令列を小さな範囲にまとめ、複数のファイルに跨って時間的に近接して実行される命令列を空間的に近接し、更に、前記静的分岐予測が正しくできるように実行頻度の高い順に前記分岐先の命令列をまとめるように配置するリンク処理ユニットと、
を備えたことを特徴とする最適化オブジェクト生成装置。
【請求項１１】
最適化オブジェクト生成装置に於いて、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイラと、
前記コンパイラで生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行時に参照されたデータと参照されなかったデータを示すデータ参照情報を生成するシミュレータと、
前記シミュレータのデータ参照情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、実行時に参照されたデータと参照されなかったデータに各々異なるセクション名を付与するセクション名付与ユニットと、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のコンパイル単位に跨って同じセクション名のデータを一箇所にまとめることにより、参照されたデータと参照されなかったデータに空間的に分離して隣接させるリンク処理ユニットと、
を備えたことを特徴とする最適化オブジェクト生成装置。
【請求項１２】
最適化オブジェクト生成装置に於いて、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイラと、
前記コンパイラで生成した前記オブジェクトプログラムを特定の実行環境下で実行し、参照されたデータの参照時間情報を生成するシミュレータと、
前記シミュレータの参照時間情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、時間的に近接して参照されたデータを出力するセクションに同じセクション名を付与するセクション名付与ユニットと、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のコンパイル単位に跨って同じセクション名を持つセクションを一箇所にまとめることで、時間的に近接して参照されたデータを空間的に近接するように配置するリンク処理ユニットと、
を備えたことを特徴とする最適化オブジェクト生成装置。
【請求項１３】
最適化オブジェクト生成方法に於いてコンピュータが、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイル過程と、
前記コンパイル過程で生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令と実行されない命令を示す実行情報を生成するシミュレーション過程と、
前記シミュレーション過程の実行情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションと実行されなかった命令列を出力するセクションに分離し、それぞれに別のセクション名を付与するセクション名付与過程と、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のコンパイル単位に跨って複数のファイル中の実行されるセクション名をもつセクションと実行されなかったセクション名をもつセクションを各々を１か所にまとめて実行部分と未実行部分に分けるリンク処理過程と、
を実行することを特徴とする最適化オブジェクト生成装置。
【請求項１４】
最適化オブジェクト生成方法に於いてコンピュータが、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイル過程と、
前記コンパイル過程で生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令の実行頻度情報を生成するシミュレーション過程と、
前記シミュレーション過程の実行頻度情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションに実行頻度に応じたセクション名を付与するセクション名付与過程と、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のコンパイル単位に跨って同じセクション名を持つセクションを１か所にまとめて実行頻度の高い命令列を小さな範囲にまとめるリンク処理過程と、
を実行することを特徴とする最適化オブジェクト生成方法。
【請求項１５】
最適化オブジェクト生成方法に於いてコンピュータが、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイル過程と、
前記コンパイル過程で生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令の実行時間情報を生成するシミュレーション過程と、
前記シミュレーション過程の実行時間情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、時間的に近接して実行された命令列を出力するセクションに同じセクション名を付与するセクション名付与過程と、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のコンパイル単位に跨って同じセクション名を持つセクションを１か所にまとめることで、複数のファイルに跨って時間的に近接して実行される命令列を空間的に近接するように配置するリンク処理過程と、
を実行することを特徴とする最適化オブジェクト生成方法。
【請求項１６】
最適化オブジェクト生成方法に於いてコンピュータが、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイル過程と、
前記コンパイル過程で生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令の実行頻度情報を生成するシミュレーション過程と、
前記シミュレーション過程の実行頻度情報に基づき、条件付き分岐命令の実行時に分岐先と分岐元の位置関係を見て分岐と非分岐を予測的に判断する静的分岐予測が正しくできるように、実行頻度の高い分岐先の命令列を出力するセクションと実行頻度の低い分岐先の命令列を出力するセクションに異なるセクション名を付与するセクション名付与過程と、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のコンパイル単位に跨って前記セクション名に基づき、前記静的分岐予測が正しくできるように実行頻度の高い順に前記分岐先の命令列を配置するリンク処理過程と、
を実行することを特徴とする最適化オブジェクト生成方法。
【請求項１７】
最適化オブジェクト生成方法に於いてコンピュータが、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイル過程と、
前記コンパイル過程で生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令と実行されない命令を示す実行情報、実行された命令の頻度情報、及び実行された命令の実行時間情報を生成するシミュレーション過程と、
前記シミュレーション過程の実行情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションと実行されなかった命令列を出力する第１セクション名付与過程と、
前記シミュレーション過程の実行頻度情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションに実行頻度に応じたセクション名を付与する第２セクション名付与過程と、
前記シミュレーション過程の実行時間情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、時間的に近接して実行された命令列を出力するセクションに同じセクション名を付与する第３セクション名付与過程と、
前記シミュレーション過程の実行頻度情報に基づき、条件付き分岐命令の実行時に分岐先と分岐元の位置関係を見て分岐と非分岐を予測的に判断する静的分岐予測が正しくできるように、実行頻度の高い分岐先の命令列を出力するセクションと実行頻度の低い分岐先の命令列を出力するセクションに異なるセクション名を付与する第４セクション名付与過程と、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のコンパイル単位に跨って複数のファイル中の同じセクション名をもつセクションを各々を１か所にまとめることにより、実行部分と未実行部分に分け配置し、実行頻度の高い命令列を小さな範囲にまとめ、複数のファイルに跨って時間的に近接して実行される命令列を空間的に近接させ、更に前記静的分岐予測が正しくできるように実行頻度の高い順に前記分岐先の命令列を配置するリンク処理過程と、
を実行することを特徴とする最適化オブジェクト生成方法。
【請求項１８】
最適化オブジェクト生成方法に於いてコンピュータが、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイル過程と、
前記コンパイル過程で生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令と実行されない命令を示す実行情報を生成するシミュレーション過程と、
前記シミュレーション過程の実行情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションと実行されなかった命令列を出力するセクションに分離し、それぞれに別の外部参照名を付与すると同時に、実行された命令列が属するセクションの外部参照名と実行されなかった命令列が属するセクションの外部参照名に分けた外部参照名リストを作成する外部参照名付与過程と、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のコンパイル単位に跨って前記外部参照名リストに基づき、複数のファイル中の実行されたセクションと実行されなかったセクションを各々を１か所にまとめて実行部分と未実行部分に分けるリンク処理過程と、
を実行することを特徴とする最適化オブジェクト生成方法。
【請求項１９】
最適化オブジェクト生成方法に於いてコンピュータが、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイル過程と、
前記コンパイル過程で生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令の実行頻度情報を生成するシミュレーション過程と、
前記シミュレーション過程の実行頻度情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションの実行頻度に応じて外部参照名を付与すると同時に、実行頻度に応じて高い順にソートした外部参照名リストを作成する外部参照名付与過程と、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のコンパイル単位に跨って前記外部参照名リストに基づき、複数のファイル中の実行されたセクションを１か所にまとめて実行頻度の高い命令列を小さな範囲にまとめるリンク処理過程と、
を実行することを特徴とする最適化オブジェクト生成方法。
【請求項２０】
最適化オブジェクト生成方法に於いてコンピュータが、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイル過程と、
前記コンパイル過程で生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令の実行時間情報を生成するシミュレーション過程と、
前記シミュレーション過程の実行時間情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、時間的に近接して実行された命令列を出力するセクションに同じ外部参照名を付与すると同時に、時間的に近接して実行された命令列を出力するセクションの外部参照名をまとめた外部参照名リストを作成する外部参照名付与過程と、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のコンパイル単位に跨って前記外部参照名リストに基づき、複数のファイルに跨って時間的に近接して実行される命令列を空間的に近接するように配置するリンク処理過程と、
を実行することを特徴とする最適化オブジェクト生成方法。
【請求項２１】
最適化オブジェクト生成方法に於いてコンピュータが、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイル過程と、
前記コンパイル過程で生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令の実行頻度情報を生成するシミュレーション過程と、
前記シミュレーション過程の実行頻度情報に基づき、条件付き分岐命令の実行時に分岐先と分岐元の位置関係を見て分岐と非分岐を予測的に判断する静的分岐予測が正しくできるように、実行頻度の高い分岐先の命令列を出力するセクションと実行頻度の低い分岐先の命令列を出力するセクションに異なる外部参照名を付与すると同時に、実行頻度の高い順に並べた外部参照名リストを生成する外部参照名付与過程と、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のコンパイル単位に跨って前記外部参照名リストに基づき、前記静的分岐予測が正しくできるように実行頻度の高い順に前記分岐先の命令列を配置するリンク処理過程と、
を実行することを特徴とする最適化オブジェクト生成方法。
【請求項２２】
最適化オブジェクト生成方法に於いてコンピュータが、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイル過程と、
前記コンパイル過程で生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令と実行されない命令を示す実行情報、実行された命令の頻度情報、及び実行された命令の実行時間情報を生成するシミュレーション過程と、
前記シミュレーション過程の実行情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションと実行されなかった命令列を出力するセクションに分離し、それぞれに別の外部参照名を付与すると同時に、実行された命令列が属するセクションの外部参照名と実行されなかった命令列が属するセクションの外部参照名に分けた外部参照名リストを作成する第１外部参照名付与過程と、
前記シミュレーション過程の実行頻度情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションの実行頻度に応じて外部参照名を付与すると同時に、実行頻度に応じて高い順にソートした外部参照名リストを作成する第２外部参照名付与過程と、
前記シミュレーション過程の実行時間情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、時間的に近接して実行された命令列を出力するセクションに同じ外部参照名を付与すると同時に、時間的に近接して実行された命令列を出力するセクションの外部参照名をまとめた外部参照名リストを作成する第３外部参照名付与過程と、
前記シミュレーション過程の実行頻度情報に基づき、条件付き分岐命令の実行時に分岐先と分岐元の位置関係を見て分岐と非分岐を予測的に判断する静的分岐予測が正しくできるように、実行頻度の高い分岐先の命令列を出力するセクションと実行頻度の低い分岐先の命令列を出力するセクションに異なる外部参照名を付与すると同時に、実行頻度の高い順に並べた外部参照名リストを生成する第４外部参照名付与過程と、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のコンパイル単位に跨って前記外部参照名リストに基づき、複数のファイル中の実行されたセクションと実行されなかったセクションを各々を１か所にまとめて実行部分と未実行部分に分け、複数のファイル中の実行されたセクションを１か所にまとめて実行頻度の高い命令列を小さな範囲にまとめ、複数のファイルに跨って時間的に近接して実行される命令列を空間的に近接し、更に、前記静的分岐予測が正しくできるように実行頻度の高い順に前記分岐先の命令列をまとめるように配置するリンク処理過程と、
を実行することを特徴とする最適化オブジェクト生成方法。
【請求項２３】
最適化オブジェクト生成方法に於いてコンピュータが、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイル過程と、
前記コンパイル過程で生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行時に参照されたデータと参照されなかったデータを示すデータ参照情報を生成するシミュレーション過程と、
前記シミュレーション過程のデータ参照情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、実行時に参照されたデータと参照されなかったデータに各々異なるセクション名を付与するセクション名付与過程と、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のコンパイル単位に跨って同じセクション名のデータを１か所にまとめることにより、参照されたデータと参照されなかったデータに空間的に分離して隣接させるリンク処理過程と、
を実行することを特徴とする最適化オブジェクト生成方法。
【請求項２４】
最適化オブジェクト生成方法に於いてコンピュータが、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイル過程と、
前記コンパイル過程で生成した前記オブジェクトプログラムを特定の実行環境下で実行し、参照されたデータの参照時間情報を生成するシミュレーション過程と、
前記シミュレーション過程の参照時間情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、時間的に近接して参照されたデータを出力するセクションに同じセクション名を付与するセクション名付与過程と、
前記オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のコンパイル単位に跨って同じセクション名を持つセクションを１か所にまとめることで、時間的に近接して参照されたデータを空間的に近接するように配置するリンク処理過程と、
を実行することを特徴とする最適化オブジェクト生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、多数のソースファイルで構成されたソースプログラムをコンパイルして生成されたオブジェクトプログラムから実行プログラムモジュールをリンクするための最適化オブジェクト生成装置及び方法に関し、特に、計算機のキャッシュ機能や予測分岐機能に好適な命令列の配置をもつ実行プログラムモジュールが生成できる最適化オブジェクト生成装置及び方法に関する。
【背景技術】
【０００２】
近代の計算機システムにおいては、データベース処理プログラム等の高速な命令実行のため、将来の実行に対し種々の予測を行いそれに基づいた実行を行っている。
例えば、これらの予測を利用した計算機高速化装置としては、
１．メモリの物理的な場所とプログラムから観測できる論理的な場所の対応を取るためのページテーブルの参照を高速に行うために用いられる変換参照バッファＴＬＢ（Translation Lookaside Buffer） 、
２．命令がアクセスするメモリの時間的、空間的局所性を用い、将来のメモリアクセスを予測しデータを保持しておくキャッシュ装置、
３．分岐命令の分岐又は非分岐が確定する前に、分岐と非分岐を予測し、予測結果に従って実行を先行して投機的に行うことを可能とする分岐予測装置、
などがある。
【０００３】
ここでデータベース処理プログラムは、例えば８ＧＢといったメモリ領域をもつ大型のプログラムであり、そのソースプログラムは、１０００から１００００程度のソースファイルの集合で構成され、１つのソースファイルは、通常、百以上で１万未満程度の命令列をもち、１ファイル当り平均１０００命令とすると、プログラム全体としては、１０万から１０００万といった膨大な数の命令列で構成される。
【０００４】
このような規模の大きなプログラムに対し実行高速化装置がうまく機能するか否かは、オブジェクトプログラムのリンク処理により生成された実行プログラムモジュールとしてのアプリケーションプログラムの命令列や実行方式に大きく依存する。例えば、命令実行に必要な命令の取り出しを行うための平均メモリアクセス時間を短縮するために用意される命令キャッシュ装置では、命令が分岐命令を実行せず一直線に実行されている場合には次々と隣接した命令を取り出すことになるため、命令キャッシュ装置がメモリから一度に取り出す単位であるキャッシュブロックを大きくすることにより、時間が掛かるメモリへのアクセスの回数を削減することができ、実行の高速化を図ることができる。
【０００５】
しかし、実際のアプリケーションプログラムには、条件分岐命令、無条件分岐命令、及びサブルーチン呼出命令があるため、次の理由により実行効率が大きく低下する。
１．命令は一直線には実行されず、せっかくメモリから取り出したブロックの中で実行されない部分がキャッシュ上に置かれてしまい、キャッシュの利用率が下がる。
２．分岐命令やサブルーチン呼出しなどで、異なったファイルに記述された命令列に制御が渡ることがあるため、実行プログラムモジュール中で実際に走行する命令列が飛び飛びになってしまい、メモリの物理的な場所とプログラムから観測できる論理的な場所の対応を取るための命令用ページテーブルの参照を高速に行うために用いられるための命令用変換参照バッファＴＬＢが頻繁に更新される。
【０００６】
また、データアクセスに関しても同様の問題があり、ある実行環境下でアクセスされるデータとアクセスされないデータが混在する場合や、時間的に近接してアクセスされるデータが空間的に離れた場所に配置される場合、メモリの物理的な場所とプログラムから観測できる論理的な場所の対応を取るためのデータアドレスの論理物理アドレスの変換用テーブルの参照を高速に行うために用いられるデータ用変換参照バッファＴＬＢが頻繁に更新され、実行速度が大きく低下している。これらは、キャッシュ容量やデータ用変換参照バッファＴＬＢの容量を増加させることで改善できるが、ハードウェア物量の増加を伴うため、コスト及びスペース面で実現が困難である。
【０００７】
更に、分岐予測装置においては、
１．ある条件分岐命令が過去に条件が成立したか否かの履歴を記録し将来の分岐と非分岐を予測する動的分岐予測、
２．命令記述時に分岐非分岐の情報を命令そのものに記録しておき、実行時に使用する明示的な静的分岐予測方式、
３．分岐先と分岐元の位置関係を見て分岐非分岐を実行時に判断する暗黙の静的分岐予測、
などがあり、実際にはそれらが組み合わせられ採用されている。
【０００８】
分岐予測装置の動的予測は、ある分岐命令が過去にどのように実行されたのかという履歴を用いて未来を予測する。このため、一度実行された命令が次に実行されるまでに多くの他の命令を実行するような大きなループ構造を持つ場合には、履歴記録に必要なハードウェア量の制限から、実行した分岐命令の履歴を全て記録しておくことができず、従って過去の履歴が利用できない場合も多い。
【０００９】
このように過去の履歴が利用できない場合にも、静的分岐予測は適用できる。よく使われる暗黙の静的分岐予測では、ループを構成する条件分岐命令は一般に「飛び先の命令がアドレスが小さいことが多く（後向き分岐）、飛び先の命令がアドレスが大きい方向への分岐（前向き分岐）はあまり成立しない」と言う経験則に従って分岐予測を行うことが多い。しかし、この経験則は必ずしもうまくは機能しない。
【００１０】
このような、ハードウェア面での命令実行の高速化機構を効率的に動作させるためには、オブジェクトプログラムあるいは実行プログラムモジュールを生成する際に、実行状況を推定するか、又は生成されたプログラムを試験的に実行し、実行状況を記録等により、実行される可能性が高い命令列を判別し、ある動作環境下で実行される部分とされない部分、あるいは頻繁に実行されると思われる部分と頻繁には実行されないと思われる部分を分離する。このようなプログラムを実行する部分としない部分及び頻繁に使用する部分に分けてまとめることで、変換参照バッファの更新頻度を下げ、また暗黙の静的分岐予測が正しく機能するように、分岐元と分岐先の位置関係を調整することができる。
【特許文献１】
特開平６−２１４８０３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
しかし、多数のソースファイルの集合体として構成されたソースプログラムは、ファイル、サブルーチン、及び関数等を１単位としてコンパイラにより翻訳されてオブジェクトプログラムを生成している。このため翻訳単位となるオブジェクトファイル、オブジェクトサブルーチン、オブジェクト関数毎に、実行する部分としない部分や頻繁に使用する部分に分けてまとめており、例えば複数のファイル間といった翻訳単位に跨がった処理はあまり行われていない。そのため、複数の翻訳単位に跨がって実行命令列を集中させたり、前後関係を調整して全体を最適化するには、多数のソースファイルで構成された膨大なソースプログラム全体を一括して翻訳するコンパイラが新たに必要であり、コンパイルにもかなりの時間がかかる問題があった。
【００１２】
またオブジェクトプログラムからリンカー又はアセンブラして知られたリンク処理プログラムによって実行プログラムモジュール（アプリケーションプログラム）を生成する場合においても、同様に翻訳単位に生成された例えば１つのオブジェクトファイル毎に実行プログラムモジュールのモジュールファイルを生成しており、複数のオブジェクトファイルに跨がった処理はあまり行われていない。そのため、複数のオブジェクトファイルに跨って実行命令列を集中させたり前後関係を調整するためには、複数のオブジェクトファイルを一括して処理する専用のリンク処理プログラムを作成する必要があり、リンク処理にもかなりの時間がかかる問題があった。
【課題を解決するための手段】
【００１３】
本発明はファイル、サブルーチン及び関数といったプログラムの翻訳単位を変えず、且つ全体を一括処理するリンク処理プログラムを作ることなく、翻訳単位を超えて複数の領域に点在する命令列やデータを適切に集中させ、且つ実行命令列の前後関係の調整を可能する。オブジェクトプログラムの実行した命令列と未実行の命令列、及び参照データと未参照データに各々別のセクション名を付与し、オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のファイル中の実行されるセクション名をもつセクションと実行されなかったセクション名をもつセクションを各々を１か所にまとめることで、命令は実行部分と未実行部分に、データは参照部分と未参照部分に分離するものである。
【００１４】
本発明に従えば、ファイル、サブルーチン及び関数といったプログラムの翻訳単位を変えず、且つ全体を一括処理するリンク処理プログラムを作ることなく、翻訳単位を超えて複数の領域に点在する命令列やデータを適切に集中させ、且つ実行命令列の前後関係の調整を可能とした最適化オブジェクト生成装置及び方法が提供される。
【００１５】
（セクション名付与による最適化）
本発明の最適化オブジェクト生成装置は、既存のコンパイラ、シミュレータ及びリンカに、新たにセクション名付与ユニットを設けたことを特徴とする。
【００１６】
コンパイラは、複数ファイルで構成されたソースプログラムからファイル、サブルーチンは関数等の所定の翻訳単位にオブジェクトプログラムを生成する。シミュレータは、コンパイラで生成したオブジェクトプログラムを特定の実行環境下で実行し、実行された命令と実行されない命令を示す実行情報を生成する。
【００１７】
本発明の特徴となるセクション名付与ユニットは、シミュレータの実行情報に基づき、オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションと実行されなかった命令列を出力するセクションに分離し、それぞれに別のセクション名を付与する。リンカ又はアセンブラであるリンク処理ユニット（リンク処理プログラム）は、オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のファイル中の実行されるセクション名をもつセクションと実行されなかったセクション名をもつセクションを各々を一箇所にまとめて実行部分と未実行部分に分ける。
【００１８】
このように本発明は、オブジェクトプログラムから実行プログラムモジュールを生成する既存のリンク処理ユニットがもっている「同一の名前のセクションをひと塊に集める機能」を利用し、ファイル、サブルーチン及び関数といったプログラムの翻訳単位を変えることなく、且つ全体を一括処理するリンク処理プログラムを作ることなく、翻訳単位を超えて複数の領域に点在する命令を、実行される可能性のある命令部分と実行される可能性のない命令部分に分けてまとめることができる。例えばデータベース処理プログラムの場合、全体が５ＭＢであっても、実行される可能性のある命令部分は２００ＫＢ程度とごく僅かであり、２００ＫＢの実行命令部分が５ＭＢ全体に分散している場合に比べ、これを１カ所にまとめることで、キャッシュ装置での命令用の参照変換バッファＴＬＢの更新の頻度を大幅に低下し、プログラムの実行を高速化する。
【００１９】
また本発明の最適化オブジェクト生成装置は、コンパイラで生成したオブジェクトプログラムを特定の実行環境下で実行し、実行された命令の実行頻度情報をシミュレータで生成し、シミュレータの実行頻度情報に基づき、セクション名付与ユニットがオブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションに実行頻度に応じたセクション名を付与し、最終的にリンク処理ユニットがオブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、同じセクション名を持つセクションを一箇所にまとめて実行頻度の高い命令列を小さな範囲にまとめる。
【００２０】
この場合は、リンク処理ユニットがもっている「同一の名前のセクションをひと塊に集める機能」を利用し、ファイル、サブルーチン及び関数といったプログラムの翻訳単位を変えることなく、且つ全体を一括処理するリンク処理プログラムを作ることなく、翻訳単位を超えて複数の領域に点在する実行頻度の高い命令列を小さな範囲にまとめることで、命令用の参照変換バッファＴＬＢの更新の頻度を大幅に下げ、プログラムの実行を高速化する。
【００２１】
また本発明の最適化オブジェクト生成装置は、コンパイラで生成したオブジェクトプログラムをシミュレータにより特定の実行環境下で実行し、実行された命令の実行時間情報を生成し、この実行時間情報に基づき、セクション名付与ユニットがオブジェクトプログラムの中の複数のファイルについて、時間的に近接して実行された命令列を出力するセクションに同じセクション名を付与し、最終的にリンク処理ユニットがオブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、同じセクション名を持つセクションを一箇所にまとめることで、複数のファイルに跨って時間的に近接して実行される命令列を空間的に近接するように配置する。
【００２２】
この場合は、リンク処理ユニットがもっている「同一の名前のセクションをひと塊に集める機能」を利用し、ファイル、サブルーチン及び関数といったプログラムの翻訳単位を変えることなく、且つ全体を一括処理するリンク処理プログラムを作ることなく、翻訳単位を超えて複数の領域に点在する時間的に近接して実行される命令列がメモリ空間に近接して配置され、命令用の参照変換バッファＴＬＢの更新の頻度を大幅に下げ、プログラムの実行を高速化する。
【００２３】
また本発明の最適化オブジェクト生成装置は、コンパイラで生成したオブジェクトプログラムを、シミュレータにより特定の実行環境下で実行し、実行された命令の実行頻度情報を生成する。セクション名付与ユニットは、シミュレータの実行頻度情報に基づき、条件付き分岐命令の実行時に分岐先と分岐元の位置関係を見て分岐と非分岐を予測的に判断する静的分岐予測が正しくできるように、実行頻度の高い分岐先の命令列を出力するセクションと実行頻度の低い分岐先の命令列を出力するセクションに異なるセクション名を付与する。最終的に、リンク処理ユニットは、オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、セクション名に基づき、静的分岐予測が正しくできるように実行頻度の高い順に前記分岐先の命令列を配置する。
【００２４】
この場合は、リンク処理ユニットがもっている「同一の名前のセクションをひと塊に集める機能」を利用し、ファイル、サブルーチン及び関数といったプログラムの翻訳単位を変えることなく、且つ全体を一括処理するリンク処理プログラムを作ることなく、静的分岐予測がよく的中するように点在する分岐先命令の前後関係が配置され、静的分岐予測が成功する確率が高まることで、プログラムの実行を高速化する。
【００２５】
更に最適化オブジェクト生成装置は、セクション名の付与に基づく実行未実行、実行頻度、時間近接実行の空間近接実行への変換、静的分岐予測を成功させる前後関係の調整の各機能を全て備えるようにしてもよい。即ち、この場合の最適化オブジェクト生成装置は、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイラと、
コンパイラで生成したオブジェクトプログラムを特定の実行環境下で実行し、実行された命令と実行されない命令を示す実行情報、実行された命令の頻度情報、及び実行された命令の実行時間情報を生成するシミュレータと、
シミュレータの実行情報に基づき、オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションと実行されなかった命令列を出力する第１セクション名付与ユニットと、
シミュレータの実行頻度情報に基づき、オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションに実行頻度に応じたセクション名を付与する第２セクション名付与ユニットと、
シミュレータの実行時間情報に基づき、オブジェクトプログラムの中の複数のファイルについて、時間的に近接して実行された命令列を出力するセクションに同じセクション名を付与する第３セクション名付与ユニットと、
シミュレータの実行頻度情報に基づき、条件付き分岐命令の実行時に分岐先と分岐元の位置関係を見て分岐と非分岐を予測的に判断する静的分岐予測が正しくできるように、実行頻度の高い分岐先の命令列を出力するセクションと実行頻度の低い分岐先の命令列を出力するセクションに異なるセクション名を付与する第４セクション名付与ユニットと、
オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のファイル中の同じセクション名をもつセクションを各々を一箇所にまとめることにより、実行部分と未実行部分に分け配置し、実行頻度の高い命令列を小さな範囲にまとめ、複数のファイルに跨って時間的に近接して実行される命令列を空間的に近接させ、更に静的分岐予測が正しくできるように実行頻度の高い順に前記分岐先の命令列を配置するリンク処理ユニットと、
を備える。
【００２６】
更に最適化オブジェクト生成装置は、セクション名の付与に基づく
１．実行未実行、
２．実行頻度、
３．時間近接実行の空間近接実行への変換、
４．静的分岐予測を成功させる前後関係の調整
の各機能につき、任意の組合せの変形を含む。
【００２７】
（外部参照名の付与による最適化）
本発明の別の形態にあっては、既存のリンク処理ユニットのもっている「外部参照名のリストに従ってモジュール内の接合順序を制御する機能」を利用し、ファイル、サブルーチン及び関数といったプログラムの翻訳単位を変えることなく、且つ全体を一括処理するリンク処理プログラムを作ることなく、最適化する。
【００２８】
このため本発明の最適化オブジェクト生成装置は、コンパイラ、シミュレータ、リンク処理ユニット、更に本発明の特徴である外部参照名付与ユニットで構成される。この場合、コンパイラで生成したオブジェクトプログラムをシミュレータにより特定の実行環境下で実行し、実行された命令と実行されない命令を示す実行情報を生成する。外部参照名付与ユニットは、シミュレータの実行情報に基づき、オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションと実行されなかった命令列を出力するセクションに分離し、それぞれに別の外部参照名を付与すると同時に、実行された命令列が属するセクションの外部参照名と実行されなかった命令列が属するセクションの外部参照名に分けた外部参照名リストを作成する。最終的に、リンク処理ユニットは、オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、外部参照名リストに基づき、複数のファイル中の実行されたセクションと実行されなかったセクションの各々を一箇所にまとめて実行部分と未実行部分に分ける。
【００２９】
このように本発明は、オブジェクトプログラムから実行プログラムモジュールを生成する既存のリンク処理ユニットがもっている「外部参照名のリストに従ってモジュール内の接合順序を制御する機能」を利用し、ファイル、サブルーチン及び関数といったプログラムの翻訳単位を変えることなく、且つ全体を一括処理するリンク処理プログラムを作ることなく、翻訳単位を超えて複数の領域に点在する命令を、実行される可能性のある命令部分と実行される可能性のない命令部分に分けてまとめることができる。このように実行される命令を１カ所にまとめることで、キャッシュ装置での命令用の参照変換バッファＴＬＢの更新の頻度を大幅に低下し、プログラムの実行を高速化する。
【００３０】
また本発明の最適化オブジェクト生成装置は、コンパイラで生成したオブジェクトプログラムを、シミュレータにより特定の実行環境下で実行し、実行された命令の実行頻度情報を生成する。外部参照名付与ユニットは、シミュレータの実行頻度情報に基づき、オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションの実行頻度に応じて外部参照名を付与すると同時に、実行頻度に応じて高い順にソートした外部参照名リストを作成する。最終的に、リンク処理ユニットは、オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、外部参照名リストに基づき、複数のファイル中の実行されたセクションを一箇所にまとめて実行頻度の高い命令列を小さな範囲にまとめる。
【００３１】
この場合、リンク処理ユニットがもっている「外部参照名のリストに従ってモジュール内の接合順序を制御する機能」を利用し、ファイル、サブルーチン及び関数といったプログラムの翻訳単位を変えることなく、且つ全体を一括処理するリンク処理プログラムを作ることなく、翻訳単位を超えて複数の領域に点在する実行頻度の高い命令列を小さな範囲にまとめることで、命令用の参照変換バッファＴＬＢの更新の頻度を大幅に下げ、プログラムの実行を高速化する。
【００３２】
また本発明の最適化オブジェクト生成装置は、コンパイラで生成したオブジェクトプログラムを、シミュレータにより特定の実行環境下で実行し、実行された命令の実行時間情報を生成する。外部参照名付与ユニットは、シミュレータの実行時間情報に基づき、オブジェクトプログラムの中の複数のファイルについて、時間的に近接して実行された命令列を出力するセクションに同じ外部参照名を付与すると同時に、時間的に近接して実行された命令列を出力するセクションの外部参照名をまとめた外部参照名リストを作成する。リンク処理ユニットは、オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、外部参照名リストに基づき、複数のファイルに跨って時間的に近接して実行される命令列を空間的に近接するように配置する。
【００３３】
この場合、リンク処理ユニットがもっている「外部参照名のリストに従ってモジュール内の接合順序を制御する機能」を利用し、ファイル、サブルーチン及び関数といったプログラムの翻訳単位を変えることなく、且つ全体を一括処理するリンク処理プログラムを作ることなく、翻訳単位を超えて複数の領域に点在する時間的に近接して実行される命令列がメモリ空間に近接して配置され、命令用の参照変換バッファＴＬＢの更新の頻度を大幅に下げ、プログラムの実行を高速化する。
【００３４】
また本発明の最適化オブジェクト生成装置は、コンパイラで生成したオブジェクトプログラムを、シミュレータにより特定の実行環境下で実行し、実行された命令の実行頻度情報を生成する。外部参照名付与ユニットは、シミュレータの実行頻度情報に基づき、条件付き分岐命令の実行時に分岐先と分岐元の位置関係を見て分岐と非分岐を予測的に判断する静的分岐予測が正しくできるように、実行頻度の高い分岐先の命令列を出力するセクションと実行頻度の低い分岐先の命令列を出力するセクションに異なる外部参照名を付与すると同時に、実行頻度の高い順に並べた外部参照名リストを生成する。リンク処理ユニットは、オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、外部参照リストに基づき、静的分岐予測が正しくできるように実行頻度の高い順に分岐先の命令列を配置する。
【００３５】
この場合は、リンク処理ユニットがもっている「外部参照名のリストに従ってモジュール内の接合順序を制御する機能」を利用し、ファイル、サブルーチン及び関数といったプログラムの翻訳単位を変えることなく、且つ全体を一括処理するリンク処理プログラムを作ることなく、静的分岐予測がよく的中するように点在する分岐先命令の前後関係が配置され、静的分岐予測が成功する確率が高まることで、プログラムの実行を高速化する。
【００３６】
更に最適化オブジェクト生成装置は、外部参照名の付与に基づく実行未実行、実行頻度、時間近接実行の空間近接実行への変換、静的分岐予測を成功させる前後関係の調整の角機能を全て備えるようにしてもよい。即ち、この場合の最適化オブジェクト生成装置は、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイラと、
コンパイラで生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令と実行されない命令を示す実行情報、実行された命令の頻度情報、及び実行された命令の実行時間情報を生成するシミュレータと、
シミュレータの実行情報に基づき、オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションと実行されなかった命令列を出力するセクションに分離し、それぞれに別の外部参照名を付与すると同時に、実行された命令列が属するセクションの外部参照名と実行されなかった命令列が属するセクションの外部参照名に分けた外部参照名リストを作成する第１参照名付与ユニットと、
シミュレータの実行頻度情報に基づき、オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションの実行頻度に応じて外部参照名を付与すると同時に、実行頻度に応じて高い順にソートした外部参照名リストを作成する第２外部参照名付与ユニットと、
シミュレータの実行時間情報に基づき、オブジェクトプログラムの中の複数のファイルについて、時間的に近接して実行された命令列を出力するセクションに同じ外部参照名を付与すると同時に、時間的に近接して実行された命令列を出力するセクションの外部参照名をまとめた外部参照名リストを作成する第３外部参照名付与ユニットと、
シミュレータの実行頻度情報に基づき、条件分岐命令の実行時に分岐先と分岐元の位置関係を見て分岐と非分岐を予測的に判断する静的分岐予測が正しくできるように、実行頻度の高い分岐先の命令列を出力するセクションと実行頻度の低い分岐先の命令列を出力するセクションに異なる外部参照名を付与すると同時に、実行頻度の高い順に並べた外部参照名リストを生成する第４外部参照名付与ユニットと、
オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、外部参照名リストに基づき、複数のファイル中の実行されたセクションと実行されなかったセクションの各々を一箇所にまとめて実行部分と未実行部分に分け、複数のファイル中の実行されたセクションを一箇所にまとめて実行頻度の高い命令列を小さな範囲にまとめ、複数のファイルに跨って時間的に近接して実行される命令列を空間的に近接し、更に、静的分岐予測が正しくできるように実行頻度の高い順に前記分岐先の命令列をまとめるように配置するリンク処理ユニットと、を備える。
【００３７】
（データ配置の最適化）
本発明の最適化オブジェクト生成装置は、オブジェクトプログラムから実行プログラムモジュールを生成する既存のリンク処理ユニットがもっている「同一の名前のセクションをひと塊に集める機能」を利用し、ファイル、サブルーチン及び関数といったプログラムの翻訳単位を変えることなく、且つ全体を一括処理するリンク処理プログラムを作ることなく、翻訳単位を超えて複数の領域に点在するデータを、実行時に参照される可能性のあるデータと参照される可能性のないデータに分けてまとめる。
【００３８】
このための最適化オブジェクト生成装置は、コンパイラで生成したオブジェクトプログラムをシミュレータにより特定の実行環境下で実行し、実行時に参照されたデータと参照されなかったデータを示すデータ参照情報を生成する。セクション名付与ユニットは、シミュレータのデータ参照情報に基づき、オブジェクトプログラムの中の複数のファイルについて、実行時に参照されたデータと参照されなかったデータに各々異なるセクション名を付与する。リンク処理ユニットは、オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、同じセクション名のデータを一箇所にまとめることにより、参照されたデータと参照されなかったデータに空間的に分離して隣接させる。
【００３９】
この場合、オブジェクトプログラムから実行プログラムモジュールを生成する既存のリンク処理ユニットがもっている「同一の名前のセクションをひと塊に集める機能」を利用し、ファイル、サブルーチン及び関数といったプログラムの翻訳単位を変えることなく、且つ全体を一括処理するリンク処理プログラムを作ることなく、翻訳単位を超えて複数の領域に点在するデータを、参照される可能性のあるデータと参照される可能性のないデータに分けてまとめることができ、キャッシュ装置でのデータ用の参照変換バッファＴＬＢの更新の頻度を大幅に低下し、プログラムの実行を高速化する。
【００４０】
また本発明の最適化オブジェクト生成装置は、コンパイラで生成したオブジェクトプログラムを、シミュレータにより特定の実行環境下で実行し、参照されたデータの参照時間情報を生成するシミュレータと、シミュレータの参照時間情報に基づき、オブジェクトプログラムの中の複数のファイルについて、時間的に近接して参照されたデータを出力するセクションに同じセクション名を付与するセクション名付与ユニットと、オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、同じセクション名を持つセクションを一箇所にまとめることで、時間的に近接して参照されたデータを空間的に近接するように配置するリンク処理ユニットとを備える。
【００４１】
この場合は、リンク処理ユニットがもっている「同一の名前のセクションをひと塊に集める機能」を利用し、ファイル、サブルーチン及び関数といったプログラムの翻訳単位を変えることなく、且つ全体を一括処理するリンク処理プログラムを作ることなく、翻訳単位を超えて複数の領域に点在する時間的に近接して参照されるデータがメモリ空間に近接して配置された参照変換バッファＴＬＢの更新の頻度を大幅に下げ、プログラムの実行を高速化する。
【００４２】
更に最適化オブジェクト生成装置は、外部参照名の付与に基づく
１．実行、未実行の分離、
２．実行頻度による分類
３．時間近接実行の空間近接実行への変換、
４．静的分岐予測を成功させる前後関係の調整
の各機能につき、任意の組合せの変形を含む。
【００４３】
（セクション名の付与による最適化方法）
また本発明は、最適化オブジェクト生成方法を提供するものであり、セクション名の付与で実行と未実行を分離する場合、次の過程を備える。
【００４４】
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイル過程；
コンパイル過程で生成したオブジェクトプログラムを特定の実行環境下で実行し、実行された命令と実行されない命令を示す実行情報を生成するシミュレーション過程；
シミュレーション過程の実行情報に基づき、オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションと実行されなかった命令列を出力するセクションに分離し、それぞれに別のセクション名を付与するセクション名付与過程；
オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のファイル中の実行されるセクション名をもつセクションと実行されなかったセクション名をもつセクションを各々を一箇所にまとめて実行部分と未実行部分に分けるリンク処理過程；
またセクション名の付与で実行頻度高い順に配置する場合は、
コンパイル過程で生成したオブジェクトプログラムを特定の実行環境下で実行し、実行された命令の実行頻度情報を生成するシミュレーション過程；
シミュレーション過程の実行頻度情報に基づき、オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションに実行頻度に応じたセクション名を付与するセクション名付与過程；
オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、同じセクション名を持つセクションを一箇所にまとめて実行頻度の高い命令列を小さな範囲にまとめるリンク処理過程；
を備える。
【００４５】
またセクション名の付与で時間近接命令を空間近接命令に配置替えする場合は、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイル過程；
コンパイル過程で生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令の実行時間情報を生成するシミュレーション過程；
シミュレーション過程の実行時間情報に基づき、オブジェクトプログラムの中の複数のファイルについて、時間的に近接して実行された命令列を出力するセクションに同じセクション名を付与するセクション名付与過程；
オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、同じセクション名を持つセクションを一箇所にまとめることで、複数のファイルに跨って時間的に近接して実行される命令列を空間的に近接するように配置するリンク処理過程；
を備える。
【００４６】
更に、静的分岐予測に基づく配置の最適化は、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイル過程；
コンパイル過程で生成したオブジェクトプログラムを特定の実行環境下で実行し、実行された命令の実行頻度情報を生成するシミュレーション過程；
シミュレーション過程の実行頻度情報に基づき、条件付き分岐命令の実行時に分岐先と分岐元の位置関係を見て分岐と非分岐を予測的に判断する静的分岐予測が正しくできるように、実行頻度の高い分岐先の命令列を出力するセクションと実行頻度の低い分岐先の命令列を出力するセクションに異なるセクション名を付与するセクション名付与過程；
オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、セクション名に基づき、静的分岐予測が正しくできるように実行頻度の高い順に前記分岐先の命令列を配置するリンク処理過程；
を備える。
【００４７】
更に複数の最適化機能の全てを組み合わせた場合には、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイル過程；
コンパイル過程で生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令と実行されない命令を示す実行情報、実行された命令の頻度情報、及び実行された命令の実行時間情報を生成するシミュレーション過程；
シミュレーション過程の実行情報に基づき、オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションと実行されなかった命令列を出力する第１セクション名付与過程；
シミュレーション過程の実行頻度情報に基づき、オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションに実行頻度に応じたセクション名を付与する第２セクション名付与過程；
シミュレーション過程の実行時間情報に基づき、オブジェクトプログラムの中の複数のファイルについて、時間的に近接して実行された命令列を出力するセクションに同じセクション名を付与する第３セクション名付与過程；
シミュレーション過程の実行頻度情報に基づき、条件付き分岐命令の実行時に分岐先と分岐元の位置関係を見て分岐と非分岐を予測的に判断する静的分岐予測が正しくできるように、実行頻度の高い分岐先の命令列を出力するセクションと実行頻度の低い分岐先の命令列を出力するセクションに異なるセクション名を付与する第４セクション名付与過程；
オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、複数のファイル中の同じセクション名をもつセクションを各々を一箇所にまとめることにより、実行部分と未実行部分に分け配置し、実行頻度の高い命令列を小さな範囲にまとめ、複数のファイルに跨って時間的に近接して実行される命令列を空間的に近接させ、更に前記静的分岐予測が正しくできるように実行頻度の高い順に前記分岐先の命令列を配置するリンク処理過程；
を備えたことを特徴とする。
【００４８】
（外部参照名による最適化方法）
外部参照名の付与で実行、未実行を分離配置する場合は、
ソースファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイル過程；
コンパイル過程で生成したオブジェクトプログラムを特定の実行環境下で実行し、実行された命令と実行されない命令を示す実行情報を生成するシミュレーション過程；
シミュレーション過程の実行情報に基づき、オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションと実行されなかった命令列を出力するセクションに分離し、それぞれに別の外部参照名を付与すると同時に、実行された命令列が属するセクションの外部参照名と実行されなかった命令列が属するセクションの外部参照名に分けた外部参照名リストを作成する参照名付与過程；
オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、外部参照名リストに基づき、複数のファイル中の実行されたセクションと実行されなかったセクションの各々を１か所にまとめて実行部分と未実行部分に分けるリンク処理過程；
を備える。
【００４９】
また、外部参照名の付与で実行頻度高い順に配置する場合は、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイル過程；
コンパイル過程で生成したオブジェクトプログラムを特定の実行環境下で実行し、実行された命令の実行頻度情報を生成するシミュレーション過程；
シミュレーション過程の実行頻度情報に基づき、オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションの実行頻度に応じて外部参照名を付与すると同時に、実行頻度に応じて高い順にソートした外部参照名リストを作成する外部参照名付与過程；
オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、外部参照名リストに基づき、複数のファイル中の実行されたセクションを一箇所にまとめて実行頻度の高い命令列を小さな範囲にまとめるリンク処理過程；
を備える。
【００５０】
更に、外部参照名の付与で時間的近接命令を空間的近接命令に配置替えする場合は、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイル過程；
コンパイル過程で生成したオブジェクトプログラムを特定の実行環境下で実行し、実行された命令の実行時間情報を生成するシミュレーション過程；
シミュレーション過程の実行時間情報に基づき、オブジェクトプログラムの中の複数のファイルについて、時間的に近接して実行された命令列を出力するセクションに同じ外部参照名を付与すると同時に、時間的に近接して実行された命令列を出力するセクションの外部参照名をまとめた外部参照名リストを作成する外部参照名付与過程；
オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、外部参照名リストに基づき、複数のファイルに跨って時間的に近接して実行される命令列を空間的に近接するように配置するリンク処理過程；
を備える。
【００５１】
更に、外部参照名付与による静的分岐予測に基づく配置の場合は、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイル過程；
コンパイル過程で生成した前記オブジェクトプログラムを特定の実行環境下で実行し、実行された命令の実行頻度情報を生成するシミュレーション過程；
シミュレーション過程の実行頻度情報に基づき、条件付き分岐命令の実行時に分岐先と分岐元の位置関係を見て分岐と非分岐を予測的に判断する静的分岐予測が正しくできるように、実行頻度の高い分岐先の命令列を出力するセクションと実行頻度の低い分岐先の命令列を出力するセクションに異なる外部参照名を付与すると同時に、実行頻度の高い順に並べた外部参照名リストを生成する外部参照名付与過程；
オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、前記外部参照リストに基づき、前記静的分岐予測が正しくできるように実行頻度の高い順に前記分岐先の命令列を配置するリンク処理過程；
とを備える。
【００５２】
更に、外部参照名の付与による全ての最適化機能の組合せの場合は、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイル過程；
コンパイル過程で生成したオブジェクトプログラムを特定の実行環境下で実行し、実行された命令と実行されない命令を示す実行情報、実行された命令の頻度情報、及び実行された命令の実行時間情報を生成するシミュレーション過程；
シミュレーション過程の実行情報に基づき、オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションと実行されなかった命令列を出力するセクションに分離し、それぞれに別の外部参照名を付与すると同時に、実行された命令列が属するセクションの外部参照名と実行されなかった命令列が属するセクションの外部参照名に分けた外部参照名リストを作成する第１参照名付与過程；
シミュレーション過程の実行頻度情報に基づき、オブジェクトプログラムの中の複数のファイルについて、実行された命令列を出力するセクションの実行頻度に応じて外部参照名を付与すると同時に、実行頻度に応じて高い順にソートした外部参照名リストを作成する第２外部参照名付与過程；
シミュレーション過程の実行時間情報に基づき、オブジェクトプログラムの中の複数のファイルについて、時間的に近接して実行された命令列を出力するセクションに同じ外部参照名を付与すると同時に、時間的に近接して実行された命令列を出力するセクションの外部参照名をまとめた外部参照名リストを作成する第３外部参照名付与過程；
シミュレーション過程の実行頻度情報に基づき、条件分岐命令の実行時に分岐先と分岐元の位置関係を見て分岐と非分岐を予測的に判断する静的分岐予測が正しくできるように、実行頻度の高い分岐先の命令列を出力するセクションと実行頻度の低い分岐先の命令列を出力するセクションに異なる外部参照名を付与すると同時に、実行頻度の高い順に並べた外部参照名リストを生成する第４外部参照名付与過程；
オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、外部参照名リストに基づき、複数のファイル中の実行されたセクションと実行されなかったセクションを各々を一箇所にまとめて実行部分と未実行部分に分け、複数のファイル中の実行されたセクションを一箇所にまとめて実行頻度の高い命令列を小さな範囲にまとめ、複数のファイルに跨って時間的に近接して実行される命令列を空間的に近接し、更に、静的分岐予測が正しくできるように実行頻度の高い順に前記分岐先の命令列を配置するように配置するリンク処理過程；
を備える。
【００５３】
（参照データと未参照データを分離する最適化方法）
この場合の最適化方法は、
ソースファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイル過程；
コンパイル過程で生成したオブジェクトプログラムを特定の実行環境下で実行し、実行時に参照されたデータと参照されなかったデータを示すデータ参照情報を生成するシミュレーション過程；
シミュレーション過程のデータ参照情報に基づき、前記オブジェクトプログラムの中の複数のファイルについて、実行時に参照されたデータと参照されなかったデータに各々異なるセクション名を付与するセクション名付与過程；
オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、同じセクション名のデータを一箇所にまとめることにより、参照されたデータと参照されなかったデータに空間的に分離して隣接させるリンク処理過程；
を備える。
【００５４】
（時間的近接データを空間的近接データに配置替えする最適化方法）
この場合の最適化オブジュクト生成方法は、
複数ファイルで構成されたソースプログラムから所定の翻訳単位にオブジェクトプログラムを生成するコンパイル過程；
コンパイル過程で生成したオブジェクトプログラムを特定の実行環境下で実行し、参照されたデータの参照時間情報を生成するシミュレーション過程；
シミュレーション過程の参照時間情報に基づき、オブジェクトプログラムの中の複数のファイルについて、時間的に近接して参照されたデータを出力するセクションに同じセクション名を付与するセクション名付与過程；
オブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、同じセクション名を持つセクションを一箇所にまとめることで、時間的に近接して参照されたデータを空間的に近接するように配置するリンク処理過程；
を備える。
【００５５】
この最適化オブジェクト生成方法の詳細は、装置構成に対応する。
【発明の効果】
【００５６】
以上説明した通り、本発明によれば、１つの翻訳単位に閉じて命令列の集中やデータの集中による最適化を行っていた場合に比べ、既存のリンカやアセンブラを使用しつつ複数の翻訳単位に跨がって命令やデータの配置を制御することができ、命令の実行速度を向上させることができる。
【発明を実施するための最良の形態】
【００５７】
（装置の機能構成）
図１は本発明による最適化オブジェクト生成装置の機能ブロック図である。図１において、本発明は、ソースプログラム１０をコンパイラ１２で翻訳してオブジェクトプログラム１４を生成し、このオブジェクトプログラム１４についてシミュレータ１６が特定の実行環境で実験的に実行して実行情報を収集する。この実行情報に基づき本発明で新たに設けられた最適化処理モジュール１８が最適化処理を行い、最終的にリンク処理プログラムとなるリンカ２０で、最適化処理の施されたオブジェクトプログラム１４のリンク処理により最適化された実行プログラムモジュール２２を生成している。ここでリンク処理プログラムとしてリンカ２０を例にとるが、アセンブラであってもよい。またソースプログラム１０は、例えば人間が記述し易いＣ言語等の高級言語で記述されており、例えばデータベース処理プログラムを例にとると、ソースプログラム１０は複数のソースファイル２６−１〜２６−ｎの集合体で構成されている。ソースファイル２６−１〜２６−ｎは通常、１００以上で１００００未満程度の命令列の集合体で構成される。
【００５８】
コンパイラ１２は、ソースプログラム１０を所定の翻訳単位、例えば２６−１〜２６−ｎ単位に翻訳してオブジェクトプログラム１４を生成する。このためオブジェクトプログラム１４は、ソースファイル２６−１〜２６−ｎに対応して翻訳されたオブジェクトファイル３０−１〜３０−ｎの集合体で構成される。ここでコンパイラ１２はソースプログラム１０のソースファイル２６−１〜２６−ｎを翻訳単位とする場合を例にとっているが、ソースファイル２６ー１〜２６〜ｎに含まれているサブルーチン、関数等の更に狭い命令列の部分を翻訳単位とすることもできる。シミュレータ１６は、オブジェクトプログラム１４に特定の実行環境を設定し、試験的にオブジェクトプログラム１４を動作させ、命令列の実行、未実行、実行頻度、実行時間等の実行情報を生成し、最適化処理モジュール１８に通知する。最適化処理モジュール１８は、シミュレータ１６によるオブジェクトプログラム１４の実行情報に基づき、リンク処理プログラムとして機能するリンカ２０が予め備えている
１．同一の名前のセクションを一塊に集める機能；
２．外部参照名のリストに従ってモジュール内の接合順序を制御する機能；のいずれかを利用することで、コンパイラ１２によるプログラムの翻訳単位を越えて、命令列及びデータを実行高速化を図るために配置する最適化処理を、リンカ２０によるリンク処理を通じて実現させる。
【００５９】
この最適化処理モジュール１８によるセクション名の付与または外部参照名の付与に基づく最適化は、命令列については
１．実行と未実行の分離
２．実行頻度による分類
３．時間近接実行の空間近接実行への変換
４．静的分岐予測を成功させる前後関係の調整
の４つの処理が行われる。また翻訳単位を越えたデータの取りまとめについては
１．参照と不参照の区別
２．時間的近接参照の空間的近接参照への変換
の２つの処理が行われる。
【００６０】
図２は、図１のシミュレータ１６とリンカ２０との間に設けた本発明に特有な最適化処理モジュール１８を除いた場合のオブジェクトプログラムの最適化処理である。データベース処理プログラム用のソースプログラム１０は、例えば１００乃至１０００個程度のソースファイル２４−１〜２４−ｎの集合体で構成されている。このソースファイル２４−１〜２４−ｎは、先頭のソースファイル２４−１に代表して示すように、命令列の塊である命令セクション２６−１，２６−２，２６−３，・・・、及び複数のデータの塊であるデータセクション２８−１，２８−２，・・・を含んでいる。
【００６１】
ここでソースプログラム１０のソースファイルの構成を簡単に説明すると図３のようになる。図３のソースファイル２４には例えばサブルーチン３８−１，３８−２が含まれており、それぞれ命令セクション２６−１，２６−２とデータセクション２８−１，２８−２を備えている。またソースファイル２４には、サブルーチン３８−１，３８−２と同等な１つの命令のまとまりをもつ関数４０−１，４０−２が含まれている。この関数４０−１，４０−２は例えば４０−２に示すように、それ自体にサブルーチン３８−３，３８−４を含む場合もある。このようなソースプログラム１０に対し、コンパイラ１２はソースファイル２４単位の翻訳や、更に狭い領域となるサブルーチンや関数単位の翻訳機能を備える。
【００６２】
再び図２を参照するに、コンパイラ１２で翻訳されたオブジェクトプログラム１４は、リンク処理プログラムとして機能するリンカ２０のリンク処理で実行プログラムモジュール（アプリケーシュンプログラム）に変換される。このときリンカ２０は、オブジェクトプログラム１４の中の命令セクション３２−１，３２−２，３２−３，・・・とデータセクション３４−１，３４−２，・・・を分離し、実行プログラムモジュール２２内に示すように命令部分３８とデータ部分４０に分離することができる。このような既存のリンカ２０がもつ命令部分とデータ部分を分離する機能は、ソースプログラムからオブジェクトプログラムを生成する計算機プログラムの作成環境においては広く一般的なものであり、この機能は本来、プログラムの中の命令領域とデータ領域、あるいは読出専用領域と書込領域とを大別することを目的とした機能である。しかしながら、このような既存のリンカ２０の機能では、本発明の最適化オブジェクト生成処理が意図する例えばプログラムの翻訳単位となるファイルを越えて跨がった範囲での命令部分及びデータ部分のまとめはできな
い。
【００６３】
図４は図１から本発明に特有な最適化処理モジュール１８を除いた場合の既存のリンカのもつリンク機能の他の例である。シミュレータ１６は、コンパイラ１２により生成されたオブジェクトプログラム１４を特定の実行環境下で試験的に実行し、例えばオブジェクトファイル３０−１の中の命令セクション３２−１，３２−２，３２−３，・・・３２−ｎについて、実行された命令列か実行されない命令列かの実行情報を収集する。同様にオブジェクトファイル３０−１の中のデータセクション３４−１，３４−２，・・・について、シミュレータ１６による試験実行時に参照されたデータか参照されなかったデータかの実行情報を生成する。このようなシミュレータ１６によるオブジェクトファイル３０−１の実行情報に基づき、リンカ２０は実行プログラムモジュール２２に示すように、翻訳単位となるモジュールファイル４２−１の中を、命令列については実行命令列４４と未実行命令列４６に分けることができ、同時にデータについては参照データ４８と未参照データ５０に分けることができる。
【００６４】
しかしながら、リンカ２０によりオブジェクトプログラム１４の実行情報に基づいて翻訳単位であるファイル単位に命令列を実行，未実行、データを参照，未参照に分けた場合には、図５に示すようにリンカ２０により生成された実行プログラムモジュール２０の中では、翻訳単位となるモジュールファイル４２−１，４２−２，・・・４２−ｎのそれぞれに、実行部分５２−１，５２−２，・・・５２−ｎと未実行部分５４−１，５４−２，・・・５４−ｎが分散して配置されている。このため、リンカが実行部分と未実行部分をまとめる機能を備えていても、この機能はプログラムの翻訳単位で処理されるため、図５に示すような生成された実行プログラムモジュール２２では計算機のキャッシュ装置に設けている変換参照バッファＴＬＢの更新が、実行部分５２−１〜５２−ｎの分散配置に対応して高頻度で行われ、高速実行化は期待できない。
【００６５】
これに対し図１のように本発明に特有な最適化処理モジュール１８を設けた場合には、図６のように、コンパイルされたオブジェクトプログラム１４についてシミュレータ１６により特定の動作環境下で実験的に実行して、命令列が実行されたか実行なかったかの実行，未実行に関する情報、及び実行時にデータが参照されたか参照されなかったかの参照，未参照の実行情報を取得して最適化処理モジュール１８に通知する。このシミュレータ１６からのオブジェクトプログラム１４に関する実行情報に基づき、最適化処理モジュール１８は例えば実行された命令列を出力する命令セクションと実行されなかった命令列を出力するセクションを分離して、それぞれ別のセクション名を付与する。
【００６６】
このように実行と未実行で異なるセクション名を付与したオブジェクトプログラム１４を対象にリンカ２０がリンク処理を行う。このときリンカ２０は同じセクション名の命令列を１つにまとめる機能を元々備えているため、実行プログラムモジュール２２に示すように、オブジェクトプログラム１４の翻訳単位となっているオブジェクトファイル３０−１〜３０−ｎに跨がって同じ実行命令列を示すセクション名をもつ命令列を集め、実行命令列６０として配置する。同時に、実行されていない命令列について同じセクション名をもつ命令列を１つにまとめることで、未実行命令列６２を配置する。またリンカ２０は最適化処理モジュール１８により、オブジェクトプログラム１４の翻訳単位であるオブジェクトファイル３０−１〜３０−ｎに跨がって参照データと参照されないデータについて、それぞれ異なったセクション名を付与していることから、参照データのセクション名のデータを集めて１つにまとめることで、実行プログラムモジュール２２に使用データ６４としてまとめて配置し、同時に、使用されていないデータに付与された同じセクション名をまとめて集めることで、未参照データ６６をまとめた配置ができる。
【００６７】
（セクション名の付与による最適化）
図７は図１の最適化処理モジュール１８の第１実施形態の機能ブロック図である。この実施形態にあっては、シミュレータ１６によるオブジェクトプログラム１４の実行情報に対するセクション名の付与により、リンカ２０で実行プログラムモジュールを生成する際に命令及びデータの翻訳単位を越えた最適配置を行うようにしたことを特徴とする。図７の最適化処理モジュール１８は、命令最適化ユニット６８とデータ最適化ユニット７０で構成される。命令最適化ユニット６８には、実行未実行セクション名付与ユニット７２、実行頻度セクション名付与ユニット７４、近接実行時間セクション名付与ユニット７６及び分岐予測処理ユニット７８が設けられる。
【００６８】
またデータ最適化ユニット７０には参照未参照セクション名付与ユニット８０、近接参照時間セクション名付与ユニット８１及びスイッチ文データ処理ユニット８２が設けられる。命令最適化ユニット６８に設けた実行未実行セクション名付与ユニット７２は、シミュレータで得られた実行された命令と実行されない命令を示す実行情報に基づき、オブジェクトプログラム１４の中の複数のファイルについて、実行された命令を出力するセクションと実行されなかった命令を出力するセクションに分離し、それぞれに別のセクション名を付与する。命令最適化ユニット６８の実行頻度セクション名付与ユニット７４は、シミュレータで得られた実行された命令の実行頻度情報に基づき、オブジェクトプログラム１４の中の複数のファイルについて、実行された命令列を出力するセクションに実行頻度に応じたセクション名を付与する。近接実行時間セクション名付与ユニット７６は、シミュレータ１６で生成した実行された命令の実行時間情報に基づき、オブジェクトプログラム１４の中の複数ファイルについて時間的に近接して実行された命令列を出力するセクションに同じセクション名を付与する。更に分岐予測処理ユニット７８は、シミュレータで生成された実行された命令の実行頻度情報に基づき、条件付き分岐命令の実行時に分岐前と分岐元の位置関係を見て分岐と非分岐を予測的に判断する静的分岐予測が正しくできるように、実行頻度の高い分岐前の命令列を出力するセクションと実行頻度の低い分岐前の命令列を出力するセクションに異なるセクション名を付与する。
【００６９】
またデータ最適化ユニット７０の参照未参照セクション名付与ユニット８０は、シミュレータ１６により生成した実行時に参照されたデータと参照されなかったデータを示すデータ参照情報に基づき、オブジェクトプログラム１２の中の複数のファイルについて実行時に参照されたデータと参照されなかったデータに各々異なるセクション名を付与する。
【００７０】
データ最適化ユニット７０の近接参照時間セクション名付与ユニット８１は、シミュレータ１６で生成した参照されたデータの参照時間情報に基づき、オブジェクトプログラム１４の中の複数ファイルについて時間的に近接して参照されたデータを出力するセクションに同じセクション名を付与する。更にスイッチ文データ処理ユニット８２は、この実施形態がソースプログラム１０としてＣ言語で記述されたプログラムを例にとっていることから、Ｃ言語のスイッチ分をコンパイラ１２で翻訳した際のオブジェクトプログラム１４中に命令列とデータテーブルのデータ列が混在し、そのままではリンカ２０による分離ができないことから、スイッチ分固有のオブジェクトファイルに対するデータ部を分離するためのセクション名の付与を行う。
【００７１】
図８は、図７の命令列最適化ユニット６８に設けた実行未実行セクション名付与ユニット７２を用いた本発明による最適化オブジェクト生成処理のフローチャートである。まずステップＳ１でソースプログラム１０を読み込み、ステップＳ２でコンパイラ１２により例えばファイル単位に翻訳するコンパイルを行う。続いてステップＳ３でシミュレータ１６により特定の実行環境の下でのオブジェクトプログラムの試験実行を行い、ステップＳ４で実行情報をサービスする。続いてステップＳ５で、図７の実行未実行セクション名付与ユニット７２が採取された実行情報について実行された命令列と実行されなかった命令列の２つに分離し、ステップＳ６で、実行された命令列を出力するセクションと実行されなかった命令列を出力するセクションの２つに分割して、それぞれ別のセクション名を付与する。続いてステップＳ７でデータについて図７のデータ最適化ユニット７０による処理を行い、ステップＳ８で、リンカ２０が実行プログラムモジュールを生成する際にステップＳ６で命令列セクションについて付与されたセクション名につき実行命令列を示すセクション名と未実行命令列を示すセクション名に分けて、図６に示したように最適化実行モジュール２２に実行命令列６０と未実行命令列６２のまとまりに分けて配置する。またステップＳ７におけるデータ最適化処理をサブルーチンとして処理において、参照されたデータのセクション名と参照されなかったデータのセクション名に分けて、図６の実行プログラムモジュール２２のように参照データ６４と未参照データ６６のまとまりに分けて配置する。
【００７２】
図９は、図８のステップＳ７におけるデータ最適化処理をサブルーチンとして表わしている。このデータ最適化処理にあっては、図７のデータ最適化ユニット７０に設けた参照未参照セクション名付与ユニット８０による最適化処理を示している。即ちステップＳ１において、オブジェクトプログラムのデータについて実行時に参照されたデータと参照されなかったデータに、取得した実行状況に基づいて分別し、ステップＳ２で、参照されたデータと参照されなかったデータに分けてセクション名を付与する。
【００７３】
図１０，図１１は、図８の実行された命令列と実行されなかった命令列にセクション名を付与して分離配置する本発明の最適化処理をＣ言語のソースプログラムを例にとって具体的に示している。図１０（Ａ）はソースファイル２４であり、このソースファイル２４はサブルーチン３８−１，３８−２で構成されている。ソースファイル２４をコンパイラ１２によりサブルーチン単位に翻訳すると、図１０（Ｂ）のオブジェクトファイル３０−１が生成される。また、生成されたオブジェクトファイル３０−１について、シミュレータ１６について特定の実行環境下で試験的に実行することで、オブジェクトファイル３０−１の右側に示す命令ごとに実行または未実行の情報が得られる。このような実行または未実行の実行情報を有するオブジェクトファイル３０について、図７に設けた命令最適化ユニット６８の実行未実行セクション名付与ユニット７２による処理を行うと、図１１（Ｃ）に示すオブジェクトファイル３０−２が得られる。このオブジェクトファイル３０−２にあっては、サブルーチン８４−１を実行部分８６−１と未実行部分８８−１に分け、またサブルーチン８４−２の部分も実行部分８６−２と未実行部分８８−２に分けている。そしてサブルーチン８４−１の実行部分８６−１については、１行目に既に記述されているセクション名「ＴＥＸＴ」をそのまま使用し、次の未実行部分８８−１については新たに別のセクション名「ＮＯ−ＲＵＮ−ＴＥＸＴ」を付与する。次のサブルーチン８４−２の実行部分８６−２については、その１行目にサブルーチン８４−１の実行部分８６−１と同じセクション名「ＴＥＸＴ」を付与し、次の未実行部分８８−３にはサブルーチン８４−１の未実行部分８８−１と同じ別のセクション名「ＮＯ−ＲＵＮ−ＴＥＸＴ」を付与する。このようにして実行部分と未実行部分に別のセクション名を付与した図１１（Ｃ）のオブジェクトファイル３０−２について、リンカ２０により実行プログラムモジュール２２を生成するためのリンク処理を行うと、図１１（Ｄ）のように、実行部分を示すセクション名「ＴＥＸＴ」をもつ例えばファイル２４−１，２４−２，２４−３，・・・の実行部分が実行領域９０としてまとめて配置され、実行されなかった部分のセクション名「ＮＯ−ＲＵＮ−ＴＥＸＴ」をもつファイル２４−１，２４−２，・・・の未実行部分が未実行領域９２としてまとめて配置された実行プログラムモジュール２２が生成できる。
【００７４】
ここで図７の命令最適化ユニット６８に設けた分岐予測処理ユニット７８は、例えば図１１（Ｃ）の実行された命令列と実行されない命令列に分けてセクション名を付与したオブジェクトファイル３０−２からリンカにより図１１（Ｄ）の実行プログラムモジュール２２を生成する際に、例えば実行されるセクションとなる実行部分８６−１から実行されないセクションである未実行部分８８−１への分岐予測が非分岐と予測されるように、図１１（Ｄ）の実行プログラムモジュールにおいて、実行されたセクション「ＴＥＸＴ」の実行部分８６−１のモジュール部分の後ろに実行されなかったセクション「ＮＯ−ＲＵＮ−ＴＥＸＴ」の未実行部分８８−１のモジュール部分が配置されるように、リンカへの制御が行われる。
【００７５】
図１２，図１３，図１４は、図９のフローチャートに示したセクション名により実行部分と未実行部分に分離配置するＣ言語のソースプログラムを対象とした他の具体的な処理例である。図１２（Ａ）は図１０（Ａ）と同じソースファイル２４であり、同じ内容のサブルーチン３８−１，３８−２で構成されている。このソースファイル２４は、コンパイラ１２によりサブルーチン単位に翻訳され、図１２（Ｂ）のオブジェクトファイル３０−１となり、次にシミュレータ１６による特定実行環境による試験実行で右側に示す実行未実行の実行情報が付加される。この実行未実行の情報が付加されたオブジェクトファイル３０−１に対し、図７の命令最適化ユニット６８に設けた実行未実行セクション名付与ユニット７２により、図１３（Ｃ）のように、実行部分と未実行部分に異なるセクション名を付与したオブジェクトファイル３０−２を生成する。あるいは、コンパライ自体がファイル内にある複数の関数に対し、実行部分をまとめて配置するような最適化コンパイラであった場合には、図１４（Ｄ）のように、実行部分と未実行部分に異なるセクション名を付与したオブジェクトファイル３０−３を生成する。すなわち、オブジェクトファイル３０−２の実行部分８６−１あるいは、オブジェクトファイル３０−３の実行部分８６については、第１行目に実行した命令列を出力するセクション名を示すセクション名「ＴＥＸＴ」を付与し、これに続く未実行部分８８−１あるいは８８−２には、その１行目に示すように、実行しなかった命令列を出力するセクションのセクション名「ＮＯ−ＲＵＮ−ＴＥＸＴ」を付与する。ここで実行部分８６−１あるいは実行部分８６については、図１２（Ｂ）のオブジェクトファイル３０−１の生成位置に記述されたセクション名「ＴＥＸＴ」がそのまま使用される。
【００７６】
この図１２（Ａ）（Ｂ）及び図１３（Ｃ）のようなソースファイルからオブジェクトファイルへの変換、又は、図１２（Ａ）（Ｂ）及び図１４（Ｄ）のようなソースファイルからオブジェクトファイルへの変換を、例えば複数のファイル１，２，３について同様に行い、その処理結果に対し、リンカ２０により実行プログラムモジュールを生成するリンク処理を行うと、図１４（Ｅ）に示すようにセクション名「ＴＥＸＴ」をもつファイル２４−１，２４−２，２４−３，・・・の実行部分がｔｅｘｔセクション９０として１つの実行領域にまとめられ、また実行されなかった命令列のセクション名「ＮＯ−ＲＵＮ−ＴＥＸＴ」をもつファイル２４−１，２４−２，・・・の未実行部分がｎｏ−ｒｕｎ−ｔｅｘｔセクション９２として１つの未実行領域２にまとめて配置された実行プログラムモジュール２２が生成できる。
【００７７】
図１５は、図７の命令列最適化ユニット６８に設けた実行頻度セクション名付与ユニット７４の機能による実行された命令列の実行頻度に応じて命令列を配置する本発明の最適化処理のフローチャートである。図１５において、まずステップＳ１で図１に示したようにソースプログラム１０を入力し、ステップＳ２でコンパイラ１２によりコンパイルしてオブジェクトプログラム１４を生成する。次にステップＳ３でシミュレータ１６によりプログラムの試験実行を特定の実行環境下で行い、ステップＳ４で実行状況を採取する。この実行状況の採取の中には、実行された命令の実行頻度情報が含まれる。次にステップＳ５で、図７の命令最適化ユニット６８に設けた実行頻度セクション名付与ユニット７４により実行された命令列の実行頻度、例えば高，中，低の３つの頻度に分けて命令列を分離する。続いてステップＳ６で、ステップＳ５で分離された高，中，低の各実行頻度ごとに分けて異なったセクション名を付与する。続いてステップＳ７で、図７のデータ最適化ユニット７０に設けた例えば参照未参照セクション名付与ユニット８０により、参照されたデータと参照されないデータの別々のセクション名の付与を行う。このステップＳ７は、図９のサブルーチンの内容をもつ。最終的にステップＳ８で、リンカ２０が実行頻度に応じてセクション名が付与されたオブジェクトプログラム１４から実行プログラムモジュール２２を生成するリンク時に、実行頻度である高，中，低に対応して付与されたセクション名ごとに同じセクション名をもつセクションを１か所にまとめて、実行頻度の高い順に命令列を小さな範囲にまとめて配置する。
【００７８】
図１６は、図１５の実行頻度に応じたセクション名の付与による命令列の配置の具体例である。図１６（Ａ）は図１５のステップＳ３のオブジェクトプログラムの試験実行で得られた実行頻度情報を付加したオブジェクトファイル３０である。このオブジェクトファイル３０は実行された命令を出力するセクションとして、セクション９４−１，９４−２，９４−３，９４−４に分けられており、各セクション９４−１〜９４−４の実行頻度情報に基づき、先頭のセクション９４−１と４番目のセクション９４−４は高頻度実行であることから、同じセクション名「ＴＥＸＴ」が付与されている。次に実行頻度が高いのはセクション９４−２であることから、セクション名「ＴＥＸＴ２」が付与される。更に一番実行頻度の低いセクション９４−３については、セクション名「ＴＥＸＴ３」が付与される。このように実行頻度の高，中，低に応じてセクション名が付与された図１５（Ａ）のオブジェクトファイル３０は、リンカ２０でオブジェクトプログラムから実行プログラムモジュールを生成するリンク時に、リンカ２０がもっている「同一の名前のセクションを一塊に集める機能」を利用し、図１６（Ａ）の実行頻度が最も高いセクション９４−１，９４−４のセクション名「ＴＥＸＴ」から生成したモジュールファイル９４−１１，９４−１２を１か所にまとめる。続いて、中頻度の実行頻度をもつ図１６（Ａ）のオブジェクトモジュール９４−２のセクション名「ＴＥＸＴ２」を含むセクションモジュール９４−１４を１か所にまとめて同じ中頻度をもつ他のモジュールセクションとまとめて配置する。更に、図１６（Ｂ）の最も実行頻度が低いオブジェクトモジュール９４−３から生成したセクションモジュール９４−１３を含むセクション名「ＴＥＸＴ３」のモジュールファイルを１か所にまとめて配置する。このようにリンカ２０のもっている「同一の名前のセクションを一塊に集める機能」を利用し、ファイル、サブルーチン及び関数といったプログラムの翻訳単位を変えることなく、また全体を一括処理するリンク処理プログラムを作ることなく、翻訳単位を越えて複数の領域に点在する実行頻度の高い命令列を小さな範囲にまとめることで、キャッシュ装置に設けている命令用の参照変換バッファＴＬＢを更新する頻度を大幅に下げ、プログラムの実行を高速化できる。
【００７９】
図１７は、図７の命令最適化ユニット６８に設けた近接実行時間セクション名付与ユニット７６の機能を利用した本発明による最適化処理のフローチャートである。図１７において、まずステップＳ１でソースプログラム１０を入力し、ステップＳ２でコンパイラ１２により例えばファイル単位に翻訳するコンパイルを行ってオブジェクトプログラム１４を生成する。次にステップＳ３でシミュレータ１６によりオブジェクトプログラム１４の試験実行を行い、ステップＳ４で実行状況の採取を行う。この場合、実行状況の採取としては、実行された命令の実行時間に関する時間情報を採取する。続いてステップＳ４で、図７の命令最適化ユニット６８に設けた近接実行時間セクション名付与ユニット７６により実行時間が近接した命令列に分類し、ステップＳ６で、時間的に近接して実行されている命令列に同じセクション名を付与する。続いてステップＳ７で図９のサブルーチンにより参照されたデータと参照されなかったデータに分けてセクション名を付与した後、ステップＳ８でリンカ２０により時間的に近接して実行された命令列に同じセクション名が付与されたオブジェクトプログラムから実行プログラムモジュールを生成する。このリンカ２０による実行オブジェクトプログラムを生成するリンク時に、ステップＳ６で同じセクション名が付与された命令列をリンカ２０のもつ「同一の名前のセクションを一塊に集める機能」を利用して１か所にまとめることで、複数のファイルに跨がって時間的に近接して実行される命令列が実行プログラム上で空間的にも近接するように配置される。したがって、キャッシュ装置に設けている命令用の参照変換バッファＴＬＢの更新頻度が空間的に近接している実行頻度の高い命令列を一塊としてロードするため、更新の頻度を大幅に下げ、プログラムの実行を高速化する。
【００８０】
図１８は、図１７のステップＳ７のデータ処理のサブルーチンの他の実施形態であり、図７のデータ最適化ユニット７０に設けた近接参照時間セクション名付与ユニット８１による処理機能を表わしている。即ち図１８のデータに関するサブルーチンについても、図１６の命令列の場合と同様、プログラム実行時に時間的に近接して参照されたデータを空間的に近接するように配置するデータの最適化を行う。この処理は、ステップＳ１で、プログラムの試験実行による実行状況の採取としてデータの参照時間を示す時間情報によりデータを類別する。続いてステップＳ２で、時間的に近接して参照されたデータに同じセクション名を付与する。
【００８１】
このような図７のサブルーチンのデータ処理が行われたオブジェクトプログラムを、図１７のステップＳ８で、リンカにより実行モジュールを生成するリンク時にリンカ２０は同じセクション名が付与されたデータを１か所にまとめて集めるように配置する。このため、データについても複数の領域に点在する時間的に近接して参照されるデータがメモリ空間に対応する実行プログラムモジュール内で空間的に近接して配置されることになり、キャッシュ装置のデータ用の参照変換バッファＴＬＢの更新頻度を大幅に下げ、プログラムの実行を高速化する。
【００８２】
図１９は図１７の時間的に近接して実行された命令列を空間的に近接した命令列に変換する最適化処理の具体例である。図１９（Ａ）はステップＳ３の試験実行が行われたオブジェクトプログラムのオブジェクトファイル３０であり、３つのセクション９６−１，９６−２，９６−３から構成されている。この内、オブジェクトプログラムの試験実行において例えばサブルーチン「ｓｕｂ１」と「ｓｕｂ２」の外部参照名が付されたオブジェクトセクション９６−１とオブジェクトセクション９６−３が時間的に近接して実行されることが観測されたとする。そこで、この時間的に近接して実行されることが観測されたオブジェクトセクション９６−１，９６−３に、それぞれの１行目に示すように同じセクション名「ＴＥＸＴ」を付与する。この図１９（Ａ）のオブジェクトファイル３０からリンカ２０により実行プログラムモジュール２２を生成するリンク時に、リンカ２０のもつ同じセクション名を一塊にまとめる機能により、図１９（Ｂ）のように時間的に近接して実行されることが観測された図１９（Ａ）のオブジェクトセクション９６−１，９６−３は、図１９（Ｂ）のように同じセクション名「ＴＥＸＴ」により一つにまとめられたモジュールセクション９６−１，９６−３として空間的に近接して配置される。その結果、図１８（Ａ）のオブジェクトファイル３０のレベルではオブジェクトセクション９６−１，９６−３の間にあったオブジェクトセクション９６−２は、図１９（Ｂ）の実行プログラムモジュール２２では空間的に３番目に配置される。
【００８３】
図２０は図７のデータ最適化ユニット７０に設けたスイッチ文データ処理ユニットによる処理動作のフローチャートである。高級プログラム言語として知られたＣ言語にあってはスイッチ文が用いられており、スイッチ文は変数の値によって多方向に分離する時に用いられる。この結果、スイッチ文の命令列の中には一体にデータテーブルが含まれており、このスイッチ文をもつオブジェクトプログラムについて、既存のリンカにより実行プログラムモジュールを生成しても、実行プログラムモジュールの中のスイッチ文の命令列には命令とデータが混在してしまう。そこで図２０のスイッチ文の処理にあっては、オブジェクトプログラムのスイッチ文の中に含まれているデータテーブルを実行プログラムモジュールを生成するリンク時に分離し、命令列とデータとを分けるようにしたことを特徴とする。
【００８４】
図２０において、ステップＳ１で図１のようにソースプログラム１０を入力し、ステップＳ２でコンパイラ１２によりコンパイルしてオブジェクトプログラム１４を生成する。続いてステップＳ３でオブジェクトプログラム１４の命令列の中に含まれる２以上の複数のスイッチ文のデータテーブルに同じセクション名を付与する。続いてステップＳ４で図９のサブルーチン及びまたは図１８のサブルーチンに示した図７の参照未参照セクション名付与ユニット８０及びまたは近接参照時間セクション名付与ユニット８１による処理を行った後、ステップＳ５でリンカ２０によりオブジェクトプログラムから実行プログラムモジュールを生成する。このとき複数のスイッチ分に混在しているデータテーブルには同じセクション名が付与されているため、リンカ２０のもつ同じセクション名を１つにまとめる機能によりスイッチ分の命令列の中からデータテーブルが分離され、１か所にまとめて配置することができる。
【００８５】
図２１は、図２０のスイッチ文の最適化処理の具体例である。図２１（Ａ）はソースプログラムのソースファイル２４であり、サブルーチン９８−１，９８−２の２つのスイッチ文で構成されている。このソースファイル２４は、コンパイラ１２によりサブルーチン単位に翻訳されて、図２１（Ｂ）のオブジェクトファイル３０−１を生成する。オブジェクトファイル３０−１はサブルーチン１００−１，１００−２に分けられ、それぞれ外部参照名「ｔａｂｌｅ１」で示されるデータテーブル「ｄｗ  ｌａｂｅｌ１」，「ｄｗ  ｌａｂｅｌ２」，「ｄｗ  ｌａｂｅｌ３」と、同じく外部参照名「ｔａｂｌｅ２」で示されるデータテーブル「ｄｗ  ｌａｂｅｌ４」，「ｄｗ  ｌａｂｅｌ５」，「ｄｗ  ｌａｂｅｌ６」を備えている。このようなオブジェクトファイル３０−１を既存のリンカ２０に与えても、それぞれのデータテーブルを命令列から分離できず、命令列とデータが混在した形の実行プログラムモジュールが生成されてしまう。そこで本発明にあっては、図２２（Ｃ）のように、図２１（Ｂ）にオブジェクトファイル３０−１を命令セクション１０２−１，１０２−２，１０２−３とデータセクション１０４−１，１０４−２に分け、データセクション１０４−１，１０４−２については、それぞれの１行目に示すように同じセクション名「ＴＬＢ」を付与する。このようにスイッチ文のデータセクションに同じセクション名「ＴＬＢ」を付与したオブジェクトファイル３０−２をリンカ２０でリンクして実行プログラムモジュール２２を生成すると、図２２（Ｄ）のように、図２２（Ｃ）の命令セクション１０２−１〜１０２−３に対応するモジュールセクション１０２−１１〜１０２−１３がスイッチ文の命令列として１つにまとまり、これに続いて同じセクション名「ＴＬＢ」を付与した図２２（Ｃ）のデータセクション１０４−１，１０４−２に対応するモジュールセクション１０４−１１，１０４−１２がその後ろに１つのまとまりとして配置される。このようにスイッチ文の命令列からデータ部分を分離して配置できれば、シミュレータ１６による試験実行で、もしこのスイッチ文が実行されていれば、図２２（Ｄ）の実行されたスイッチ文は実行プログラムモジュールの実行部分にまとめて配置され、またスイッチ文のデータ部分は参照されたデータ部分にまとめて配置できる。したがってＣ言語のスイッチ文についても、スイッチ文を命令列とデータに分離した後、更に翻訳単位となる例えばファイルを越えたモジュール全体として、命令列は実行部分または未実行部分、データは参照部分または未参照部分にまとめて配置することができる。
【００８６】
図２３は、図７に示したリンカ２０のもつ同じセクション名の命令列を１つにまとめる機能を利用した命令最適化ユニット６８及びデータ最適化ユニット７０の全ての処理機能を組み合わせた本発明の最適化処理のフローチャートである。図２３において、まずステップＳ１で図１のようにソースプログラム１０を入力し、ステップＳ２でコンパイラ１２により例えばファイル単位に翻訳してオブジェクトプログラム１４を生成する。続いてステップＳ３でシミュレータ１６によりプログラムの試験実行を行い、ステップＳ４で実行状況の採取を行う。続いてステップＳ５，ステップＳ６で、図７の実行未実行セクション名付与ユニット７２による処理を行う。即ち、実行された命令列と実行されなかった命令列に分けてセクション名を付与する。次にステップＳ７，Ｓ８で、図７の実行頻度セクション名付与ユニット７４による処理を行う。即ち実行頻度に応じて、例えば実行頻度の高，中，低に応じて命令列を分類し、この実行頻度の分類ごとにセクション名を付与する。続いてステップＳ９，Ｓ１０で、図７の近接実行時間セクション名付与ユニット７６による処理を行う。即ち、実行時間により命令列を分類し、実行時間の近接した命令列に同じセクション名を付与する。次にステップＳ１１でデータ最適化ユニット７０による処理を行う。このデータ最適化ユニット７０による処理は、参照未参照セクションユニット８０による図８のサブルーチンの処理、近接参照時間セクション名付与ユニット８１による図１８のサブルーチンの処理、更にはスイッチ分データ処理ユニット８２による図１９のステップＳ３に相当する処理の組合せとする。そして最終的に、ステップＳ１２でリンカ２０によりステップＳ５〜Ｓ１１に基づき、セクション名が付与されたオブジェクトモジュールから実行プログラムモジュールを生成するリンク時に、リンカ２０のもつ同じセクション名を集めて１つのまとまりとする機能により、
１．実行命令列と未実行命令列の分離、
２．実行頻度に応じた命令列のまとめ、
３．時間近接した命令列の空間近接した命令列への変換、
４．参照されたデータと参照されなかったデータの分離配置、
５．間敵に近接して参照されたデータの空間的に近接した配置への変換、
６．スイッチ分に含まれるデータの分離
７．静的分離予測を成功させるための実行頻度の高い命令列と実行頻度の低い命令列の配置、
が実行プログラムモジュール上の配置で実現できる。
【００８７】
（外部参照名の付与による最適配置）
図２４は、図１の最適化処理モジュール１８の第２実施形態であり、この実施形態にあっては、リンカ２０のもっている「外部参照名のリストに従ってモジュール内の接合順序を制御する機能」を利用し、ファイルサブルーチン及び関数といったプログラムの翻訳単位を変えることなく、且つ全体を一括処理するリンク処理プログラム（リンカ）を作ることなく、翻訳単位を越えて実行された命令列と実行されなかった命令列を分離してまとめたり、参照されたデータと参照されなかったデータを分離してまとめる最適化を行うことを特徴とする。
【００８８】
図２４において、第２実施形態の最適化処理モジュール１８は、命令最適化ユニット６８とデータ最適化ユニット７０で構成される。命令最適化ユニット６８には実行未実行外部参照名付与ユニット１０６、実行頻度外部参照名付与ユニット１０８、近接実行時間外部参照名付与ユニット１１０及び分岐予測処理ユニット１１２が設けられる。またデータ最適化ユニット７０には図７の最適化処理モジュール１８の第１実施形態と同様、参照未参照セクション名付与ユニット８０、近接参照時間セクション名付与ユニット８１及びスイッチ分データ処理ユニット８２が設けられる。命令最適化ユニット６８に設けた実行未実行外部参照名付与ユニット１０６は、シミュレータによるオブジェクトプログラムの試験実行で得られた実行された命令と実行されない命令を示す実行情報に基づき、オブジェクトプログラム１４の中の複数ファイルについて実行された命令列を出力するセクションと実行されなかった命令列を出力するセクションに分離し、それぞれのセクションに別の外部参照名を付与する。このため、リンカ２０は実行プログラムモジュールを作成するリンク時に実行未実行外部参照名付与ユニット１０６で作成された外部参照名リストに基づき、複数ファイルの中の実行されたセクションと実行されなかったセクションを各々１か所にまとめて、実行部分と未実行部分に分けることができる。実行頻度外部参照名付与ユニット１０８は、シミュレータ１６による試験実行で得られた実行された命令の実行頻度情報に基づき、オブジェクトプログラム中の複数のファイルについて実行された命令列を出力するセクションの実行頻度例えば実行頻度の高，中，低に応じてそれぞれ固有の外部参照名を付与し、更に実行頻度に応じて高い順にソートした外部参照名リストを作成する。このため、リンカ２０はリンク時に実行頻度外部参照名付与ユニット１０８で生成された外部参照名リストに基づき、複数のファイル中の実行頻度の高いセクションの命令列を小さな範囲にまとめることができる。近接実行時間外部参照名付与ユニット１１０は、シミュレータ１６による試験実行で得られたオブジェクトプログラム１４の中の実行された命令列の実行時間情報に基づき、時間的に近接して実行された命令列を出力するセクションに同じ外部参照名を付与すると同時に、時間的に近接して実行された命令列を出力するセクションの外部参照名をまとめた外部参照名リストを作成する。このためリンカ２０は、近接実行時間外部参照名付与ユニット１１０から与えられた外部参照名に基づき、複数のファイルに跨がって時間的に近接して実行されている命令を空間的に近接するように配置する。更に分岐予測処理ユニット１１２は、シミュレータ１６で試験実行されたオブジェクトプログラム１４における実行された命令の実行頻度情報に基づき、条件付き分岐命令の実行時に分岐先と分岐元の位置関係を見て分岐と非分岐を予測的に判断する静的分岐予測が正しくできるように、実行頻度の高い分岐先の命令列を出力するセクションと実行頻度の低い分岐先の命令列を出力するセクションに外部参照名を付与すると同時に、実行頻度の高い順に並べた外部参照名リストを作成する。このため、リンカ２０はリンク時に分岐予測処理ユニット１１２で生成された外部参照名リストに基づき、静的分岐予測が正しくできるように、実行頻度の高い順に分岐先の命令列を配置する。
【００８９】
図２５は、図２４の命令最適化ユニット６８に設けた実行未実行外部参照名付与ユニット１０６による最適化処理である。図２５において、ステップＳ１〜Ｓ５はセクション名を付与する場合の処理と同じである。ステップＳ６で、図２４の実行未実行外部参照名付与ユニット１０６が、実行された命令列と実行されなかった命令列のそれぞれに固有の外部参照名を付与し、ステップＳ７で例えば実行された命令列の外部参照名のリストを出力する。この外部参照名のリストは、実行された命令列の外部参照名に続いて実行されなかった命令列の外部参照名リストであっても良い。続いてステップＳ８で図２４のデータ最適化ユニット７０による処理を行い、ステップＳ９で、リンカ２０がステップＳ７で出力された実行された命令列の外部参照名のリストに基づき、実行された命令列と実行されなかった命令列に分けて実行プログラムモジュール内に命令列を配置する。
【００９０】
図２６は、図２５の外部参照名の付与による実行された命令列と実行されなかった命令列を分離配置する最適化処理の具体例である。図２６（Ａ）は図１のコンパイラ１２により生成されたオブジェクトプログラム１４のファイル３０−１，３０−２であり、ファイル３０−１については命令列の詳細を表わしている。このオブジェクトファイル３０−１，３０−２は、シミュレータ１６の試験実行による実行情報としてオブジェクトファイル３０−１の右側に示すように「実行」「未実行」の情報が与えられている。またオブジェクトファイル３０−１は、実行部分のオブジェクトセクション１１４−１と未実行部分のオブジェクトセクション１１４−２に分離されている。具体的には、図１２（Ａ）（Ｂ）及び図１３（Ｃ）と同じ処理を経て１つのファイル内を実行部分と未実行部分に分離してまとめたものである。次のオブジェクトファイル３０−２についても、同様に実行部分のオブジェクトセクション１１４−３と未実行部分のオブジェクトセクション１１４−４に分けられている。このようなオブジェクトファイル３０−１，３０−２に対し、図２５のステップＳ６の処理により、オブジェクトファイル３０−１の実行セクション１１４−１には外部参照名「ｓｕｂ１」が付与され、また未実行セクション１１４−２には外部参照名「ｎｏ−ｒｕｎ−ｐａｒｔ１」が付与されている。ここで実行オブジェクトセクション１１４−１の外部参照名「ｓｕｂ１」は、オブジェクトファイル生成時に付与されたものをそのまま使用している。次のファイル３０−２についても、実行オブジェクトセクション１１４−３に外部参照名「ｓｕｂ３」と未実行オブジェクトセクション１１４−２に外部参照名「ｎｏ−ｒｕｎ−ｐａｒｔ２」を付与する。この場合の実行オブジェクトセクション１１４−３の外部参照名「ｓｕｂ３」も、オブジェクトファイル生成時に付与されたものを利用している。次に図２５のステップＳ７の処理により、実行された命令列の外部参照名のリストを作成して出力する。図２６（Ａ）に対しては、図２７（Ｂ）のリスト１１６を作成して出力する。このリスト１１６には実行オブジェクトセクション１１４−１，１１４−３の外部参照名「ｓｕｂ１」「ｓｕｂ３」を並べ、続いて未実行オブジェクトセクション１１４−２，１１４−４の外部参照名「ｎｏ−ｒｕｎ−ｐａｒｔ１」「ｎｏ−ｒｕｎ−ｐａｒｔ２」を並べている。そして最終的に図２３のステップＳ９で、リンカ２０が図２７（Ｂ）のように出力された外部参照名のリスト１１６に基づき、図２６（Ａ）のファイル３０−１，３０−２につき、ファイルを越えて実行オブジェクトセクション１１４−１，１１４−３に対応するモジュールセクション１１４−１１，１１４−１３を含む実行部分１１６を１つにまとめ、また図２６（Ａ）の実行オブジェクトセクション１１４−２，１１４−４に対応するモジュールセクション１１４−１２，１１４−１４を１つにまとめた未実行部分１１８を配置し、ファイルを越えて実行部分１１６と未実行部分１１８に分けた図２７（Ｃ）の実行プログラムモジュール２２を生成する。
【００９１】
図２８は、図２４の実行頻度外部参照名付与ユニット１０８による最適化処理のフローチャートである。図２５のステップＳ１〜Ｓ５は、セクション名の付与に基づく図１５のステップＳ１〜Ｓ５と同じである。次のステップＳ６で図２４の実行頻度外部参照名付与ユニット１０８が実行頻度、例えば実行頻度高，中，低に分けて外部参照名を付与し、ステップＳ７で実行頻度の順にソートした外部参照名リストを出力する。続いてステップＳ８で、データ最適化ユニット７０によるデータの参照未参照、もしくはデータの時間近接から空間近接に変換するためのセクション名の付与が行われた後、ステップＳ９でリンカがステップＳ７で出力された外部参照名リストに従って高い実行頻度の命令列が１つの範囲にまとまるように実行プログラムモジュール内の命令列の配置を行う。
【００９２】
図２９は、図２８による実行頻度に応じた外部参照名の付与による最適化処理の具体例である。図２９（Ａ）はオブジェクトプログラムのオブジェクトファイル３０であり、実行頻度情報によりオブジェクトセクション１２０−１〜１２０−４に分けられている。このオブジェクトセクション１２０−１〜１２０−４には、試験実行による頻度情報に応じた高頻度，中頻度，低頻度の頻度情報が得られている。そこで、この頻度情報に分けてオブジェクトセクション１２０−１〜１２０−４にそれぞれ外部参照名「ｓｕｂ１」「ｌａｂｅｌ１」「ｌａｂｅｌ２」「ｓｕｂ２」を付与する。これらの外部参照名はオブジェクトファイルの生成時に付与されたものをそのまま使用しているが、外部参照名が付与されていない場合には新たに特定の外部参照名を付与する。続いて図２９（Ｂ）のように、オブジェクトセクション１２０−１〜１２０−４の頻度の順番に外部参照名をソートして格納したリスト１２２を作成する。リスト１２２は高頻度のオブジェクトセクション１２０−１，１２０−４の外部参照名「ｓｕｂ１」「ｓｕｂ２」が最初に配列され、続いて中頻度のオブジェクトセクション１２０−２の外部参照名「ｌａｂｅｌ１」が格納され、続いて低頻度のオブジェクトセクション１２０−３の外部参照名「ｌａｂｅｌ２」が格納される。そして図２５のステップＳ９のように、リンカ２０が図２９（Ｂ）の外部参照名リスト１２２に基づき、図２９（Ｃ）の実行プログラムモジュール２２のようにオブジェクトセクション１２０−１，１２０−４，１２０−２，１２０−３に対応したモジュールセクション１２０−１１，１２０−１４，１２０−１２，１２０−１３の順番に配置する。
【００９３】
図３０は、図２４の近接実行時間外部参照名付与ユニット１１０による最適化処理のフローチャートである。図２７のステップＳ１〜Ｓ５の処理は、図１７のセクション名の付与による最適化処理の場合と同じである。次のステップＳ６で図２４の近接実行時間外部参照名付与ユニット１１０が時間的に近接して実行された命令列に外部参照名を付与し、ステップＳ７でその外部参照名のリストを出力する。次のステップＳ８では図２４のデータ最適化ユニット７０によるデータの実行未実行、時間近接から空間近接への変換等が行われ、最終的にステップＳ９でリンカ２０が、ステップＳ７で出力された外部参照名のリストに従って命令列を配置した実行プログラムモジュールを生成する。
【００９４】
図３１は、図３０の外部参照名のリストを用いて時間的に近接した命令列を空間的に近接した命令列に変換する具体例である。図３１（Ａ）はオブジェクトプログラムのオブジェクトファイル３０であり、３つの命令出力のオブジェクトセクション１２４−１，１２４−２，１２４−３に分けられている。この内、先頭のオブジェクトセクション１２４−１と３番目のオブジェクトセクション１２４−３が実行部分であり、真ん中のオブジェクトセクション１２４−２は未実行のセクションである。このような図３１（Ａ）のオブジェクトファイル３０につき、図３０のステップＳ６でそれぞれ外部参照名を付与した後、ステップＳ７で図３１（Ｂ）のように、時間的に近接して実行されたオブジェクトファイル１２４−１，１２４−３を並べた外部参照名リスト１２６を作成して出力する。このため、図２７のステップＳ９で、リンカ２０は、図３１（Ｂ）の外部参照名リスト１２６の外部参照名に従って、図３１（Ａ）のオブジェクトファイル３０の時間的に近接したオブジェクトセクション１２４−１，１２４−３のモジュールセクション１２４−１１，１２４−１３を並べて配置し、これによって時間的に近接した命令列が空間的に近接した命令列に変換される。勿論、図３１（Ａ）の未実行のオブジェクトセクション１２４−２は、実行プログラムモジュール２２の未実行部分に分けて配置される。
【００９５】
図３２は、図２４の最適化処理モジュール１８に設けている全ての機能を組み合わせた場合の外部参照名の付与に基づく最適化処理のフローチャートである。この全ての機能を組み合わせた外部参照名の付与に基づく最適化処理にあっては、ステップＳ１〜Ｓ４は図２３のセクション名の付与に基づく全ての機能の組合せの場合と同じである。次のステップＳ５〜Ｓ７は図２４の実行未実行外部参照名付与ユニット１０６による処理となる。次のステップＳ８〜Ｓ１０が図２４の実行頻度外部参照名付与ユニット１０８による処理となる。またステップＳ１１〜Ｓ１３が図２４の近接実行時間外部参照名付与ユニット１１０による処理となる。更にステップＳ１４が図２４のデータ最適化ユニット７０による処理となる。最終的にステップＳ１５で、リンカ２０が実行未実行、実行頻度、近接実行、更にデータに関する外部参照名リストに従った命令列及びデータの分離配置を行って、実行プログラムモジュールを生成する。また図２２の外部参照名の付与による命令列及びデータの実行プログラムモジュール上での最適配置については、命令列最適化ユニット６８及びデータ最適化ユニット７０における各機能の全ての組合せのみならず、１または複数の適宜の組合せとしてもよいことはもちろんである。この点は図７のセクション名の付与に基づく最適化処理モジュール１８の第１実施形態についても同様である。
【００９６】
尚、上記の実施形態はソースプログラムとしてＣ言語を例にとるものであったが、これ以外に、Ｃ++言語や適宜の人間が記述し易い高級言語で記述されるプログラムを含む。また上記の実施形態は翻訳単位としてファイル単位を例にとるものであったが、更に小さいサブルーチンや関数を翻訳単位とした場合についても全く同様である。
【図面の簡単な説明】
【００９７】
【図１】本発明の処理手順の説明図
【図２】図１の最適化処理モジュールを除き、リンカで実行部分の未実行部分に分けて実行モジュールを生成する処理説明図
【図３】図２のソースプログラムの構造説明図
【図４】図１で本発明の最適化モジュール生成部を除き、リンカでファイル単位に実行部分と未実行部分に分けて実行モジュールを生成する処理説明図
【図５】図４の処理で生成した実行モジュールにおける実行部分と未実行部分の全体的な配置の説明図
【図６】図２の本発明の最適化モジュール生成部の処理結果に対しリンカで実行モジュールを生成した場合の説明図
【図７】セクション名の付与に基づいて実行モジュールを最適化する図１の最適化モジュール生成部の機能ブロック図
【図８】実行部分と未実行部分をセクション名の付与で分類してリンカで処理する本発明の最適化処理のフローチャート
【図９】図８の最適化処理におけるデータの参照未参照で分離して配置する処理をサブルーチンで示したフローチャート
【図１０】図８の最適化処理を適用した場合のソースプログラム、実行情報付きオブジェクトの説明図
【図１１】図８の最適化処理を適用した場合の図９に続くセクション名付与済みオブジェクト及び実行モジュールの具体例の説明図
【図１２】図８の最適化処理を適用した場合のソースプログラム及び実行情報付きオブジェクトの具体例の説明図
【図１３】図８の最適化処理を適用した場合の図９に続くファイル単位に実行未実行を分離したオブジェクトの具体例の説明図
【図１４】図８の最適化処理を適用した場合の図１３に続く、セクション名付与済みオブジェクト及び実行モジュールの具体例の説明図
【図１５】セクション名の付与と実行頻度に基づく本発明の最適化処理のフローチャート
【図１６】図１５の最適処理における実行頻度付きのオブジェクトと実行頻度順に配置した実行モジュールの説明図
【図１７】セクション名の付与により時間的に接近した実行部分を空間的に近接させる本発明の最適化処理のフローチャート
【図１８】図１７の最適化処理における時間的に接近したデータを空間的に近接して配置する処理をサブルーチンで示したフローチャート
【図１９】図１７の最適化処理における時間的に近接した実行部分を持つオブジェクトと空間的に近接配置した実行モジュールの説明図
【図２０】セクション名の付与によるスイッチ分に対する本発明の最適化処理のフローチャート
【図２１】図２０スイッチ文最適化処理におけるソースプログラムのスイッチ文、及びオブジェクトの説明図
【図２２】図２０のスイッチ文最適化処理における図２１に続いて生成される実行プログラムモジュールの説明図
【図２３】セクション名の付与により実行未実行、実行頻度、実行時間近接から空間近接への変換、及びデータの参照未参照による実行モジュールを最適化する本発明の他の実施形態のフローチャート
【図２４】外部参照名の付与に基づいて実行モジュールを最適化する図１の最適化モジュール生成部の機能ブロック図
【図２５】実行部分と未実行部分を外部参照名の付与で分類してリンカで処理する本発明の最適化処理のフローチャート
【図２６】図２５の最適化処理を適用した場合の外部参照名付与済みのオブジェクト及び外部参照名リストの説明図
【図２７】図２５の最適化処理を適用した場合の図２６に続いて生成される実行プログラムモジュールの説明図
【図２８】外部参照名の付与と実行頻度に基づく本発明の最適化処理のフローチャート
【図２９】図２８の最適化処理における実行頻度に応じて外部参照名を付与したオブジェクト、実行頻度に応じた外部参照名リスト、及び実行頻度に配置した実行モジュールの説明図
【図３０】外部参照名の付与により時間的に近接した実行部分を空間的に近接させる本発明のフローチャート
【図３１】図３０の最適化処理における時間的に近接した実行部分をもつオブジェクトと空間的に近接配置した実行モジュールの説明図
【図３２】外部参照名の付与により実行未実行、実行頻度、実行時間近接から空間近接への変換、及びデータの参照未参照による実行モジュールを最適化する本発明の実施形態のフローチャート
【符号の説明】
【００９８】
１０：ソースプログラム
１２：コンパイラ
１４：オブジェクトプログラム
１６：シミュレータ
１８：最適化処理部
２０：リンカ
２２：実行プログラムモジュール
２４：ソースファイル
３０：オブジェクトファイル
３２，３８：命令セクション
４０：関数
４２：モジュールファイル
４４：実行命令
４６：未実行命令
４８，６４：参照データ
５０，６６：未参照データ
５２：実行部分
５４：未実行部分
６０：実行命令列
６２：未実行命令列
６８：命令最適化部
７０：データ最適化部
【図１】
0003699354.tif 000002
【図２】
0003699354.tif 000003
【図３】
0003699354.tif 000004
【図４】
0003699354.tif 000005
【図５】
0003699354.tif 000006
【図６】
0003699354.tif 000007
【図７】
0003699354.tif 000008
【図８】
0003699354.tif 000009
【図９】
0003699354.tif 000010
【図１０】
0003699354.tif 000011
【図１１】
0003699354.tif 000012
【図１２】
0003699354.tif 000013
【図１３】
0003699354.tif 000014
【図１４】
0003699354.tif 000015
【図１５】
0003699354.tif 000016
【図１６】
0003699354.tif 000017
【図１７】
0003699354.tif 000018
【図１８】
0003699354.tif 000019
【図１９】
0003699354.tif 000020
【図２０】
0003699354.tif 000021
【図２１】
0003699354.tif 000022
【図２２】
0003699354.tif 000023
【図２３】
0003699354.tif 000024
【図２４】
0003699354.tif 000025
【図２５】
0003699354.tif 000026
【図２６】
0003699354.tif 000027
【図２７】
0003699354.tif 000028
【図２８】
0003699354.tif 000029
【図２９】
0003699354.tif 000030
【図３０】
0003699354.tif 000031
【図３１】
0003699354.tif 000032
【図３２】
0003699354.tif 000033