(57)【要約】【課題】分岐命令を含むプログラムであって、プログラムの実行期間中の各パスの実行頻度が一定でない場合でも、各プロセッサエレメントの効率的な利用を図ることができるプログラムを提供する。【解決手段】実行プログラム１３０の並列実行制御部１３１は、実行プログラム１３０が実行されることにより更新されるメモリ３００に記憶された実行履歴情報３０１と総実行回数情報３０２とに基づき、全パスの総実行回数に対する各パスの実行回数が、パス選択用閾値より大きいパスについての個別パスコードを選択し、ターゲットハードウェアにおいて使用可能なプロセッサエレメント数に応じて、補償パスココード１３２と選択した個別パスコードとにプロセッサエレメントを割り当て、並列実行させるよう制御し、また、全パスの総実行回数が所定の回数毎に補償パスコードと並列実行させる各個別パスコードの見直しを行う。【選択図】図３
2008158806.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサエレメントを備えるコンピュータに実行させるためのプログラムであって、
分岐命令を含むことにより複数の実行経路を有する第１プログラム部分と、
前記第１プログラム部分と共に並列実行を繰り返されるための第２プログラム部分であり、かつ、前記複数の実行経路のうちの特定の一の実行経路における、分岐命令を除く部分による処理内容と等価でかつ実行時間を短縮するように構成した部分と、当該特定の一の実行経路が実行されるべき条件が満たされているか否かを判定する部分と、一の繰り返し実行単位において、前記条件が満たされていれば前記第１プログラム部分と共に次の繰り返し実行部分の処理に移るように制御する部分とを含む第２プログラム部分と、
前記第１プログラム部分及び前記第２プログラム部分の少なくともいずれか一方に含まれており、ある実行経路の実行の有無を検出して検出結果である実行履歴を保持する実行履歴取得部分と、
前記第２プログラム部分を前記第１プログラム部分と並列実行させるか否かを前記実行履歴に基づいて繰り返し判断する並列実行判断部分と、
前記第１プログラム部分を第１プロセッサエレメントに割り当てると共に、前記並列実行判断部分による判断結果に応じて、前記第２プログラム部分を第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるか否かに係る制御を行うプロセッサエレメント割当制御部分とを含む
ことを特徴とするプログラム。
【請求項２】
前記実行履歴取得部分は、前記特定の一の実行経路の実行の有無を検出して、当該特定の一の実行経路の実行回数を前記実行履歴として保持するものであって、
前記並列実行判断部分は、前記実行履歴が示す前記特定の一の実行経路の前記実行回数が所定の閾値未満である場合に、前記第２プログラム部分を前記第１プログラム部分と並列実行させないと判断する
ことを特徴とする請求項１記載のプログラム。
【請求項３】
前記プログラムは、更に、
前記第１プログラム部分と共に並列実行を繰り返されるための第３プログラム部分であり、かつ、前記複数の実行経路のうち前記特定の一の実行経路である第１実行経路以外の第２実行経路における、分岐命令を除く部分による処理内容と等価でかつ実行時間を短縮するように構成した部分と、当該第２実行経路が実行されるべき条件が満たされているか否かを判定する部分と、一の繰り返し実行単位において、前記条件が満たされていれば前記第１実行プログラム部分と共に次の繰り返し実行部分の処理に移るように制御する部分とを含む第３プログラム部分を含み、
前記並列実行判断部分は、更に
前記第２プログラム部分を前記第１プログラム部分と並列実行させないと判断した場合に、前記第３プログラム部分を前記第１プログラム部分と並列実行させるか否かを前記実行履歴に基づいて繰り返し判断し、
前記プロセッサエレメント割当制御部分は、更に
前記第１プログラム部分を第１プロセッサエレメントに割り当てると共に、前記第１プログラム部分と並列実行させるか否かを判断する前記並列実行判断部分による判断結果に応じて、前記第３プログラム部分を第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるか否かに係る制御を行う
ことを特徴とする請求項１記載のプログラム。
【請求項４】
前記実行履歴取得部分は、前記特定の一の実行経路の実行の有無を検出して、当該特定の一の実行経路の実行回数を前記実行履歴として保持するものであって、
前記並列実行判断部分は、前記プロセッサエレメント割当制御部分が、前記第２プログラム部分を前記第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるよう制御を行っている場合に、前記実行履歴が示す前記特定の一の実行経路の前記実行回数が所定の閾値未満であるときは、前記第２プログラム部分を前記第１プログラム部分と並列実行させないと判断し、
前記プロセッサエレメント割当制御部分は、第２プログラム部分について、第１プログラム部分との並列実行を停止するよう制御を行う
ことを特徴とする請求項１記載のプログラム。
【請求項５】
前記実行履歴取得部分は、前記特定の一の実行経路の実行の有無を検出して、当該特定の一の実行経路の実行回数を前記実行履歴として保持するものであって、
前記並列実行判断部分は、前記プロセッサエレメント割当制御部分が、前記第２プログラム部分を前記第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるよう制御を行っている場合に、前記実行履歴が示す前記特定の一の実行経路の前記実行回数が所定の閾値未満であるときは、前記第２プログラム部分を前記第１プログラム部分と並列実行させないと判断し、
前記プロセッサエレメント割当制御部分は、第２プログラム部分について、第２プロセッサエレメントへの割当を解除するよう制御を行う
ことを特徴とする請求項１記載のプログラム。
【請求項６】
前記プログラムは、更に、
前記第１プログラム部分と共に並列実行を繰り返されるための第３プログラム部分であり、かつ、前記複数の実行経路のうち前記特定の一の実行経路以外の第２実行経路における、分岐命令を除く部分による処理内容と等価でかつ実行時間を短縮するように構成した部分と、当該第２実行経路が実行されるべき条件が満たされているか否かを判定する部分と、一の繰り返し実行単位において、前記条件が満たされていれば前記第１実行プログラム部分と共に次の繰り返し実行部分の処理に移るように制御する部分とを含む第３プログラム部分と、
前記第３プログラム部分に含まれており、前記第２実行経路の実行の有無を検出して検出結果である実行履歴を保持する実行履歴取得部分とを含み、
前記並列実行判断部分は、更に
前記第２プログラム部分を前記第１プログラム部分と並列実行させないと判断した場合に、第３プログラム部分を前記第１プログラム部分と並列実行させるか否かを前記第３プログラム部分に含まれている前記実行履歴取得部分が保持する前記実行履歴に基づいて繰り返し判断し、
前記プロセッサエレメント割当制御部分は、更に
前記第１プログラム部分を第１プロセッサエレメントに割り当てると共に、前記並列実行判断部分による判断結果に応じて、前記第３プログラム部分を第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるか否かに係る制御を行う
ことを特徴とする請求項５記載のプログラム。
【請求項７】
前記プログラムは、更に
前記コンピュータにおいて割当可能なプロセッサエレメント数を取得する割当可能数取得部分を含み、
前記プロセッサエレメント割当制御部分は、更に
割当済みのプロセッサエレメント数を計数し、当該割当済みのプロセッサエレメント数が、前記割当可能数取得部分が取得した前記割当可能なプロセッサエレメント数未満であるか判断する割当可否判断部分を含み、前記並列実行判断部分が、前記第２プログラム部分を前記第１プログラム部分と並列実行させると判断した場合に、前記割当済みのプロセッサエレメント数が前記割当可能なプロセッサエレメント数未満であるときは、前記第２プログラム部分を第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるよう制御する
ことを特徴とする請求項１記載のプログラム。
【請求項８】
前記プログラムは、更に
前記並列実行判断部分が前記判断を行う毎に前記実行履歴の内容を初期化する実行履歴初期化部分を含む
ことを特徴とする請求項１記載のプログラム。
【請求項９】
前記プログラムは、更に、
前記第１プログラム部分と共に並列実行を繰り返されるための第３プログラム部分であり、前記複数の実行経路のうちの特定の一の実行経路である第１実行経路における、分岐命令を除く部分による処理内容と等価でかつ実行時間を短縮するように構成した部分と、当該第１実行経路が実行されるべき条件が満たされているか否かを判定する部分と、一の繰り返し実行単位において、当該条件が満たされていれば前記第１プログラム部分と共に次の繰り返し実行部分の処理に移り、前記条件が満たされていなければ、前記複数の実行経路のうち、前記第１実行経路以外の特定の実行経路である第２実行経路における、分岐命令を除く部分による処理内容と等価でかつ実行時間を短縮するように構成した部分と、当該第２実行経路が実行されるべき条件が満たされているか否かを判定する部分と、一の繰り返し実行単位において、当該第２実行経路が実行されるべき前記条件が満たされていれば前記第１プログラム部分と共に次の繰り返し実行部分の処理に移るように制御する部分とを含む第３プログラム部分を備え、
前記並列実行判断部分は、更に
前記第３プログラム部分を前記第１プログラム部分と並列実行させるか否かを前記実行履歴に基づいて繰り返し判断し、
前記プロセッサエレメント割当制御部分は、更に
前記第１プログラム部分を第１プロセッサエレメントに割り当てると共に、前記並列実行判断部分による判断結果に応じて、前記第３プログラム部分を第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるか否かに係る制御を行う
ことを特徴とする請求項１記載のプログラム。
【請求項１０】
前記並列実行判断部分が、前記実行履歴に基づいて前記第２プログラム部分を前記第１プログラム部分と並列実行させないと判断した場合に、前記第３プログラム部分における前記第２実行経路を当該第２プログラム部分における特定の一の実行経路とする
ことを特徴とする請求項９記載のプログラム。
【請求項１１】
前記実行履歴取得部分は、更に
前記第３プログラム部分に含まれており、前記第１実施経路及び前記第２実施経路の実行の有無を検出して、当該第１実施経路の実行回数及び当該第２実施経路の実行回数を前記実行履歴として保持するものであって、
前記第１実行経路の当該実行回数が、前記第２実行経路の当該実行回数より多い
ことを特徴とする請求項９記載のプログラム。
【請求項１２】
分岐命令を含むことにより複数の実行経路を有するソースプログラムに基づいて、複数のプロセッサエレメントを備えるコンピュータに実行させるための実行プログラムを生成するプログラム生成方法であって、
前記ソースプログラムが有する複数の実行経路にある全ての命令群を基に、実行経路間の関係を保ったまま実行形式の第１プログラム部分を生成する第１プログラム部分生成ステップと、
前記第１プログラム部分と共に並列実行を繰り返されるための第２プログラム部分であり、かつ、前記複数の実行経路のうちの特定の一の実行経路における、分岐命令を除く部分による処理内容と等価でかつ実行時間を短縮するように構成した部分と、当該特定の一の実行経路が実行されるべき条件が満たされているか否かを判定する部分と、一の繰り返し実行単位において、前記条件が満たされていれば前記第１プログラム部分と共に次の繰り返し実行部分の処理に移るように制御する部分とを含む第２プログラム部分を生成する第２プログラム部分生成ステップと、
前記第１プログラム部分及び前記第２プログラム部分の少なくともいずれか一方に含まれており、ある実行経路の実行の有無を検出して検出結果である実行履歴を保持する実行履歴取得部分を生成する実行履歴取得部分生成ステップと、
前記第２プログラム部分を前記第１プログラム部分と並列実行させるか否かを前記実行履歴に基づいて繰り返し判断する並列実行判断部分を生成する並列実行判断部分生成ステップと、
前記第１プログラム部分を第１プロセッサエレメントに割り当てると共に、前記並列実行判断部分による判断結果に応じて、前記第２プログラム部分を第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるか否かに係る制御を行うプロセッサエレメント割当制御部分を生成するプロセッサエレメント割当制御部分生成ステップとを含む
ことを特徴とするプログラム生成方法。
【請求項１３】
分岐命令を含むことにより複数の実行経路を有するソースプログラムに基づいて、複数のプロセッサエレメントを備えるコンピュータに実行させるための実行プログラムを生成するプログラム生成装置であって、
前記ソースプログラムを取得するソースプログラム取得手段と、
前記ソースプログラム取得手段が取得した前記ソースプログラムが有する複数の実行経路にある全ての命令群を基に、実行経路間の関係を保ったまま実行形式の第１プログラム部分を生成する第１プログラム部分生成手段と、
前記第１プログラム部分と共に並列実行を繰り返されるための第２プログラム部分であり、かつ、前記複数の実行経路のうちの特定の一の実行経路における、分岐命令を除く部分による処理内容と等価でかつ実行時間を短縮するように構成した部分と、当該特定の一の実行経路が実行されるべき条件が満たされているか否かを判定する部分と、一の繰り返し実行単位において、前記条件が満たされていれば前記第１プログラム部分と共に次の繰り返し実行部分の処理に移るように制御する部分とを含む第２プログラム部分を生成する第２プログラム部分生成手段と、
前記第１プログラム部分及び前記第２プログラム部分の少なくともいずれか一方に含まれており、ある実行経路の実行の有無を検出して検出結果である実行履歴を保持する実行履歴取得部分を生成する実行履歴取得部分生成手段と、
前記第２プログラム部分を前記第１プログラム部分と並列実行させるか否かを前記実行履歴に基づいて繰り返し判断する並列実行判断部分を生成する並列実行判断部分生成手段と、
前記第１プログラム部分を第１プロセッサエレメントに割り当てると共に、前記並列実行判断部分による判断結果に応じて、前記第２プログラム部分を第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるか否かに係る制御を行うプロセッサエレメント割当制御部分を生成するプロセッサエレメント割当制御部分生成手段とを含む
ことを特徴とするプログラム生成装置。
【請求項１４】
請求項１記載のプログラムを実行するプログラム実行装置であって、
当該プログラム実行装置は、
前記プログラムを取得する取得部と、
複数のプロセッサエレメントを有し、当該プロセッサエレメントを割り当てることにより、前記取得部が取得した前記プログラムを実行する実行部とを備え、
前記実行部は、前記プログラムを実行することにより前記プロセッサエレメントの割当が要求されると、割り当てられていない一のプロセッサエレメントを割り当てること
を特徴とするプログラム実行装置。
【請求項１５】
複数のプロセッサエレメントを備えるコンピュータに実行させるためのプログラムを記録したコンピュータ読取可能な記録媒体であって、
分岐命令を含むことにより複数の実行経路を有する第１プログラム部分と、
前記第１プログラム部分と共に並列実行を繰り返されるための第２プログラム部分であり、かつ、前記複数の実行経路のうちの特定の一の実行経路における、分岐命令を除く部分による処理内容と等価でかつ実行時間を短縮するように構成した部分と、当該特定の一の実行経路が実行されるべき条件が満たされているか否かを判定する部分と、一の繰り返し実行単位において、前記条件が満たされていれば前記第１プログラム部分と共に次の繰り返し実行部分の処理に移るように制御する部分とを含む第２プログラム部分と、
前記第１プログラム部分及び前記第２プログラム部分の少なくともいずれか一方に含まれており、ある実行経路の実行の有無を検出して検出結果である実行履歴を保持する実行履歴取得部分と、
前記第２プログラム部分を前記第１プログラム部分と並列実行させるか否かを前記実行履歴に基づいて繰り返し判断する並列実行判断部分と、
前記第１プログラム部分を第１プロセッサエレメントに割り当てると共に、前記並列実行判断部分による判断結果に応じて、前記第２プログラム部分を第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるか否かに係る制御を行うプロセッサエレメント割当制御部分とを含むプログラムを記録した
ことを特徴とする記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサエレメントを備えるプロセッサ（コンピュータ）に実行させるためのプログラムの生成技術に関し、特に、生成するプログラムの最適化に関する。
【背景技術】
【０００２】
２以上の命令を並列して実行可能なコンピュータ用の実行プログラムを生成する場合において、特に条件分岐命令以降の所定区間の命令の並列化技術として、例えば、特許文献１に記載された技術が知られている。
特許文献１では、条件分岐命令が存在するソースプログラムから、条件分岐命令以降の所定区間内の各実行経路（以下、「パス」という）の情報を取得し、また、ソースプログラムを実行形式にした実行プログラムを、標準的なデータを用いて実行させることにより、各パスの実行頻度の情報を取得する。以下、この方法をプロファイリングという。
【０００３】
取得した実行頻度の情報から総合的に実行頻度の高い１又は複数のパスを選択し、選択された各パスに含まれる命令群について最適化された各コード列とソースプログラムそのものに含まれる全命令についてのコード列とにそれぞれ別のプロセッサエレメントを割り当てて並列実行させる実行プログラムを生成し、これを実行することによって、選択されたパスが実行されるべきときにおける条件分岐命令を含むプログラムの処理速度の高速化を図っている。
【特許文献１】特願２００４−３４２０３６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかし、一般的に、プログラムの実行期間中の各パスの実行頻度は一定でなく、例えば、プログラムの実行期間中の序盤部分、中盤部分、終盤部分で、予めプロファイリング等により求めた総合的な実行頻度の傾向と異なる傾向を示す場合がある。
このような場合に、プログラムの実行期間全体において一定の実行頻度の情報に基づいて、実行頻度の高いパスにプロセッサエレメントを割り当ててしまうと、その実行頻度の情報と異なる実行頻度の傾向を示す実行期間では、各プロセッサエレメントの効率的な利用が図れない。
【０００５】
本発明においては、分岐命令を含むプログラムであって、プログラムの実行期間中の各パスの実行頻度が一定でない場合でも、各プロセッサエレメントの効率的な利用を図ることができるプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記課題を解決するため、本発明に係るプログラムは、複数のプロセッサエレメントを備えるコンピュータに実行させるためのプログラムであって、分岐命令を含むことにより複数の実行経路を有する第１プログラム部分と、前記第１プログラム部分と共に並列実行を繰り返されるための第２プログラム部分であり、かつ、前記複数の実行経路のうちの特定の一の実行経路における、分岐命令を除く部分による処理内容と等価でかつ実行時間を短縮するように構成した部分と、当該特定の一の実行経路が実行されるべき条件が満たされているか否かを判定する部分と、一の繰り返し実行単位において、前記条件が満たされていれば前記第１プログラム部分と共に次の繰り返し実行部分の処理に移るように制御する部分とを含む第２プログラム部分と、前記第１プログラム部分及び前記第２プログラム部分の少なくともいずれか一方に含まれており、ある実行経路の実行の有無を検出して検出結果である実行履歴を保持する実行履歴取得部分と、前記第２プログラム部分を前記第１プログラム部分と並列実行させるか否かを前記実行履歴に基づいて繰り返し判断する並列実行判断部分と、前記第１プログラム部分を第１プロセッサエレメントに割り当てると共に、前記並列実行判断部分による判断結果に応じて、前記第２プログラム部分を第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるか否かに係る制御を行うプロセッサエレメント割当制御部分とを含むことを特徴とする。
【発明の効果】
【０００７】
これにより、実行履歴取得部分は、プログラムが実行されることによりある実行経路の実行の有無を検出して検出結果を実行履歴として保持し、その実行履歴に基づいて、並列実行判断部分は、第２プログラム部分を第１プログラム部分と並列実行させるか否かを判断するため、プロセッサエレメント割当制御部分は、プログラムが実行されることにより変化し得る実行履歴を考慮したプロセッサエレメントへの割当が可能となり、プロセッサエレメントの効率的な利用を図ることができる。
【０００８】
また、前記実行履歴取得部分は、前記特定の一の実行経路の実行の有無を検出して、当該特定の一の実行経路の実行回数を前記実行履歴として保持するものであって、前記並列実行判断部分は、前記実行履歴が示す前記特定の一の実行経路の前記実行回数が所定の閾値未満である場合に、前記第２プログラム部分を前記第１プログラム部分と並列実行させないと判断することとしてもよい。
【０００９】
これにより、並列実行判断部分は、特定の一の実行経路の実行回数が所定の閾値未満である場合には、第２プログラム部分を第１プログラム部分と並列実行させないと判断するため、実行回数が閾値より少ない実行頻度の低いプログラム部分をプロセッサエレメントに割り当てることを防止し、プロセッサエレメントの効率的な利用を図ることができる。
また、前記プログラムは、更に、前記第１プログラム部分と共に並列実行を繰り返されるための第３プログラム部分であり、かつ、前記複数の実行経路のうち前記特定の一の実行経路である第１実行経路以外の第２実行経路における、分岐命令を除く部分による処理内容と等価でかつ実行時間を短縮するように構成した部分と、当該第２実行経路が実行されるべき条件が満たされているか否かを判定する部分と、一の繰り返し実行単位において、前記条件が満たされていれば前記第１実行プログラム部分と共に次の繰り返し実行部分の処理に移るように制御する部分とを含む第３プログラム部分を含み、前記並列実行判断部分は、更に前記第２プログラム部分を前記第１プログラム部分と並列実行させないと判断した場合に、前記第３プログラム部分を前記第１プログラム部分と並列実行させるか否かを前記実行履歴に基づいて繰り返し判断し、前記プロセッサエレメント割当制御部分は、更に前記第１プログラム部分を第１プロセッサエレメントに割り当てると共に、前記第１プログラム部分と並列実行させるか否かを判断する前記並列実行判断部分による判断結果に応じて、前記第３プログラム部分を第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるか否かに係る制御を行うこととしてもよい。
【００１０】
これにより、並列実行判断部分は、第２プログラム部分を第１プログラム部分と並列実行させないと判断した場合に、複数の実行経路のうち特定の一の実行経路以外の第２実行経路における処理を含む第３プログラム部分について、第１プログラム部分と並列実行させるか否かを実行履歴に基づいて判断するため、より実行頻度の高いプログラム部分をプロセッサエレメントに割り当てられる可能性を高めることができる。
【００１１】
また、前記実行履歴取得部分は、前記特定の一の実行経路の実行の有無を検出して、当該特定の一の実行経路の実行回数を前記実行履歴として保持するものであって、前記並列実行判断部分は、前記プロセッサエレメント割当制御部分が、前記第２プログラム部分を前記第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるよう制御を行っている場合に、前記実行履歴が示す前記特定の一の実行経路の前記実行回数が所定の閾値未満であるときは、前記第２プログラム部分を前記第１プログラム部分と並列実行させないと判断し、前記プロセッサエレメント割当制御部分は、第２プログラム部分について、第１プログラム部分との並列実行を停止するよう制御を行うこととしてもよい。
【００１２】
これにより、特定の一の実行経路の実行回数が所定の閾値未満である場合に、プロセッサエレメント割当制御部分は、第２プログラム部分の第１プログラム部分との並列実行を停止するため、実行頻度の低いプログラムの実行によって発生する電力消費を抑えることができる。
また、前記実行履歴取得部分は、前記特定の一の実行経路の実行の有無を検出して、当該特定の一の実行経路の実行回数を前記実行履歴として保持するものであって、前記並列実行判断部分は、前記プロセッサエレメント割当制御部分が、前記第２プログラム部分を前記第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるよう制御を行っている場合に、前記実行履歴が示す前記特定の一の実行経路の前記実行回数が所定の閾値未満であるときは、前記第２プログラム部分を前記第１プログラム部分と並列実行させないと判断し、前記プロセッサエレメント割当制御部分は、第２プログラム部分について、第２プロセッサエレメントへの割当を解除するよう制御を行うこととしてもよい。
【００１３】
これにより、特定の一の実行経路の実行回数が所定の閾値未満である場合に、プロセッサエレメント割当制御部分は、第２プログラム部分の第２プロセッサエレメントへの割当を解除するため、実行頻度の低いプログラムに割り当てられていたプロセッサエレメントを他の処理に割り当てることが可能になり、プロセッサエレメントの効率的な利用を図ることができる
また、前記プログラムは、更に、前記第１プログラム部分と共に並列実行を繰り返されるための第３プログラム部分であり、かつ、前記複数の実行経路のうち前記特定の一の実行経路以外の第２実行経路における、分岐命令を除く部分による処理内容と等価でかつ実行時間を短縮するように構成した部分と、当該第２実行経路が実行されるべき条件が満たされているか否かを判定する部分と、一の繰り返し実行単位において、前記条件が満たされていれば前記第１実行プログラム部分と共に次の繰り返し実行部分の処理に移るように制御する部分とを含む第３プログラム部分と、前記第３プログラム部分に含まれており、前記第２実行経路の実行の有無を検出して検出結果である実行履歴を保持する実行履歴取得部分とを含み、前記並列実行判断部分は、更に前記第２プログラム部分を前記第１プログラム部分と並列実行させないと判断した場合に、第３プログラム部分を前記第１プログラム部分と並列実行させるか否かを前記第３プログラム部分に含まれている前記実行履歴取得部分が保持する前記実行履歴に基づいて繰り返し判断し、前記プロセッサエレメント割当制御部分は、更に
前記第１プログラム部分を第１プロセッサエレメントに割り当てると共に、前記並列実行判断部分による判断結果に応じて、前記第３プログラム部分を第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるか否かに係る制御を行うこととしてもよい。
【００１４】
これにより、第２プロセッサエレメントに割り当てられた第２プログラム部分の割当を解除した場合に、並列実行判断部分は、複数の実行経路のうち特定の一の実行経路以外の第２実行経路における処理を含む第３プログラム部分について、第１プログラム部分と並列実行させるか否かを実行履歴に基づいて判断するため、より実行頻度の高いプログラム部分をプロセッサエレメントに割り当てる可能性を高めることができる。
【００１５】
また、前記プログラムは、更に前記コンピュータにおいて割当可能なプロセッサエレメント数を取得する割当可能数取得部分を含み、前記プロセッサエレメント割当制御部分は、更に割当済みのプロセッサエレメント数を計数し、当該割当済みのプロセッサエレメント数が、前記割当可能数取得部分が取得した前記割当可能なプロセッサエレメント数未満であるか判断する割当可否判断部分を含み、前記並列実行判断部分が、前記第２プログラム部分を前記第１プログラム部分と並列実行させると判断した場合に、前記割当済みのプロセッサエレメント数が前記割当可能なプロセッサエレメント数未満であるときは、前記第２プログラム部分を第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるよう制御することとしてもよい。
【００１６】
これにより、プロセッサエレメント割当制御部分は、割当済みのプロセッサエレメント数が割当可能なプロセッサエレメント数未満である場合に、第２プログラム部分を第２プロセッサエレメントに割り当てるため、割当可能なプロセッサエレメント数に応じて並列実行させることができる。
また、前記プログラムは、更に前記並列実行判断部分が前記判断を行う毎に前記実行履歴の内容を初期化する実行履歴初期化部分を含むこととしてもよい。
【００１７】
これにより、実行履歴初期化部分は、並列実行判断部分が第２プログラム部分を第１プログラムと並列実行させるか否かを判断する毎に実行履歴の内容を初期化し、並列実行判断部分は、前回の判断後に得られた実行履歴に基づいて判断するため、プログラムを実行させることにより変化し得る実行履歴を考慮したプロセッサエレメントへの割当が可能となり、プロセッサエレメントの効率的な利用を図ることができる。
【００１８】
また、前記プログラムは、更に、前記第１プログラム部分と共に並列実行を繰り返されるための第３プログラム部分であり、前記複数の実行経路のうちの特定の一の実行経路である第１実行経路における、分岐命令を除く部分による処理内容と等価でかつ実行時間を短縮するように構成した部分と、当該第１実行経路が実行されるべき条件が満たされているか否かを判定する部分と、一の繰り返し実行単位において、当該条件が満たされていれば前記第１プログラム部分と共に次の繰り返し実行部分の処理に移り、前記条件が満たされていなければ、前記複数の実行経路のうち、前記第１実行経路以外の特定の実行経路である第２実行経路における、分岐命令を除く部分による処理内容と等価でかつ実行時間を短縮するように構成した部分と、当該第２実行経路が実行されるべき条件が満たされているか否かを判定する部分と、一の繰り返し実行単位において、当該第２実行経路が実行されるべき前記条件が満たされていれば前記第１プログラム部分と共に次の繰り返し実行部分の処理に移るように制御する部分とを含む第３プログラム部分を備え、前記並列実行判断部分は、更に第３プログラム部分を前記第１プログラム部分と並列実行させるか否かを前記実行履歴に基づいて繰り返し判断し、前記プロセッサエレメント割当制御部分は、更に前記第１プログラム部分を第１プロセッサエレメントに割り当てると共に、前記並列実行判断部分による判断結果に応じて、前記第３プログラム部分を第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるか否かに係る制御を行うこととしてもよい。
【００１９】
これにより、プロセッサエレメント割当制御部分により、第３プログラム部分に第２プロセッサエレメントが割り当てられ、第１プログラム部分と並列実行させるよう制御された場合に、第１実施経路が実行されるべき条件が満たされていないときは、第１実行経路における処理に続けて、同一プロセッサエレメントにより第２実行経路における処理が実行されるため、１つのプロセッサエレメントを有効に活用できる。
【００２０】
また、前記並列実行判断部分が、前記実行履歴に基づいて前記第２プログラム部分を前記第１プログラム部分と並列実行させないと判断した場合に、前記第３プログラム部分における前記第２実行経路を当該第２プログラム部分における特定の一の実行経路とすることとしてもよい。
これにより、並列実行判断部分が、前記第２プログラム部分を前記第１プログラム部分と並列実行させないと判断した場合に、第１実行経路が実行されるべき条件が満たされていないときは、第１実行経路における処理に続けて、同一プロセッサエレメントにより第２プログラム部分における特定の一の実行経路の処理が実行されるため、１つのプロセッサエレメントを有効に活用できる。
【００２１】
また、前記実行履歴取得部分は、更に前記第３プログラム部分に含まれており、前記第１実施経路及び前記第２実施経路の実行の有無を検出して、当該第１実施経路の実行回数及び当該第２実施経路の実行回数を前記実行履歴として保持するものであって、前記第１実行経路の当該実行回数が、前記第２実行経路の当該実行回数より多いこととしてもよい。
【００２２】
これにより、実行回数の多い第１実行経路における処理が実行され、第１実行経路が実行されるべき条件が満たされていないときに、第１実行経路よりも実行回数が少ない第２実行経路における処理が実行されるため、１つのプロセッサエレメントを有効に活用しつつ、より高速な処理を実現できる可能性を高めることが可能になる。
【発明を実施するための最良の形態】
【００２３】
以下、本発明に係るプログラムの実施の形態を、図面を用いながら説明していく。
≪実施の形態１≫
＜概要＞
実施の形態１に係るプログラムは、複数のプロセッサエレメントを備えるプロセッサ、つまりコンピュータ（以下、「ターゲットハードウェア」という）により実行されるためのプログラムであって、従来のプログラムを改良したものである。
【００２４】
実施の形態１に係るプログラムは、分岐命令を有し、繰り返し実行される部分を有するソースプログラムを実行形式にしたコード列を含むコード列（以下、「補償パスコード」という）と補償パスコードに含まれる分岐命令を除いた複数のパスの処理内容それぞれに対応するコード列を含む各コード列（以下、「個別パスコード」という）とを含む。
補償パスコードと各個別パスコードとは、実行されたパスの実行回数を示す実行履歴情報と補償パスコード及び各個別パスコードの実行回数を合計した総実行回数を示す総実行回数情報とをそれぞれ１つ増加させる履歴更新処理コードをそれぞれ含み、実施の形態１に係るプログラムが実行されることによって、実行されるべき条件が満たされたパスについての実行履歴情報と、総実行回数情報とが更新される。
【００２５】
また、実施の形態１に係るプログラムは、実行履歴情報に基づき、補償パスコードと並列実行させる実行頻度の高い各個別パスコードを選択し、ターゲットハードウェアにおいて使用可能なプロセッサエレメント数に応じて、補償パスコードと選択した各個別パスコードとにプロセッサエレメントを割り当て、
プロセッサエレメントを割り当てられた補償パスコードと各個別パスコードとを並列実行させるよう制御する。
【００２６】
この制御は、ＯＳ（Opereting System）等を介して、プロセッサの各プロセッサエレメントに補償パスコードと選択した各個別パスコードとを割り当てることにより実現される。
また、実施の形態１に係るプログラムは、総実行回数情報に基づき、総実行回数が所定の回数毎に補償パスコードと並列実行させる各個別パスコードの見直しを行い、実行履歴情報に基づき、並列実行させている各個別パスコードのうち、前回の見直し時から今回の見直し時の間において、実行頻度が低くなった個別パスコードについて並列実行を停止させる、つまり割り当てているプロセッサエレメントの動作を停止させ、プロセッサエレメントの割り当てを解除する。
【００２７】
さらに実施の形態１に係るプログラムは、上述のプロセッサエレメントの割当の解除と共に、並列実行させていなかった各個別パスコードの中に、実行頻度の高い各個別パスコードがある場合には、ターゲットハードウェアにおいて使用可能なプロセッサエレメント数に応じて、この実行頻度の高い各個別パスコードにプロセッサエレメントを割り当て、プロセッサエレメントを割り当てられた各個別パスコードを補償パスコードと並列実行させるよう制御する。
【００２８】
このように、実施の形態１に係るプログラムは、実施の形態１に係るプログラムを実行させることにより更新される実行履歴情報に基づき、補償パスコードと実行頻度の高い各個別パスコードとを並列実行させるため、ターゲットハードウェアにおけるプロセッサエレメントを有効活用し、また、実施の形態１に係るプログラムの実行時間を短縮させる可能性を高めることができる。
＜プログラム生成装置＞
まず、実施の形態１に係るプログラムを生成するプログラム生成装置１００について説明する。
【００２９】
＜プログラム生成装置１００の構成＞
実施の形態１に係るプログラムを生成するプログラム生成装置１００の構成を、図１を用いて説明する。
同図に示すとおり、プログラム生成装置１００は、解析部１０１、最適化部１０２、コード変換部１０３からなる。
【００３０】
なお、プログラム生成装置１００は、図示していないが、プロセッサ及びメモリを備え、解析部１０１、最適化部１０２、コード変換部１０３の各機能は、メモリに記憶されているプログラムをプロセッサに実行させることにより実現される。
解析部１０１は、ソースプログラム１１０の分岐や実行内容を解析し、解析することにより得られたソースプログラム１１０に含まれるパスに関する情報であるパス情報を最適化部１０２に送出する機能を有する。
【００３１】
最適化部１０２は、解析部１０１から受領したパス情報、及び各パスの実行頻度に関する情報である実行頻度情報１２０に基づいて、ソースプログラム１１０に含まれる各パスのうち、実行頻度が高いパスに含まれる分岐命令を除く命令列の実行順序の変更等を行い、その実行時間が短縮されるよう最適化した中間コードを生成し、生成した中間コードをコード生成部１０３に送出する機能を有する。
【００３２】
なお、実行頻度情報１２０は、予めプロファイリングを行うことによって、得ることができる。本実施形態において、プロファイリングとは、ソースプログラム１１０上の分岐命令においてどちらの分岐に進んだかを検出して、各パスに関して、そのパスを１回通るたびに１カウントするプロファイリングコードをソースプログラム１１０に組み込み、そのソースプログラム１１０を実行形式にした実行プログラムを実行することによって、各パスの実行頻度を得ることをいう。
【００３３】
また、実行頻度が高いパスか否かの判断は、ソフトウェア開発者によって予め与えられたコード生成用閾値と実行頻度情報１２０との比較によって判断する。
コード変換部１０３は、ターゲットハードウェア上で実行可能な実行プログラム１３０を生成し、出力する機能を有する。
実行プログラム１３０は、ソースプログラム１１０を実行形式にした処理内容コードを含む補償パスコードと、最適化部１０２から受領した実行頻度の高い各パスの中間コードそれぞれを実行形式にした各処理内容コードを含む各個別パスコードと、各個別パスコードに該当するパスの実行回数を示す実行履歴情報に基づいて並列実行させる各個別パスコードを選択して補償パスコードと選択した各個別パスコードとにプロセッサエレメントを割り当てるよう制御し、また、実行履歴情報に基づいて並列実行させている各個別パスコードへのプロセッサエレメントの割り当てを解除するよう制御する並列実行制御コードとを含む。
【００３４】
補償パスコードと各個別パスコードとは、実行されたパスの実行回数を示す実行履歴情報と補償パスコードの実行回数及び各個別パスコードの実行回数を合計した総実行回数を示す総実行回数情報とをそれぞれ１つ増加させる履歴更新処理コードをそれぞれ含み、実施の形態１に係るプログラムが実行されることによって、実行されるべき条件が満たされたパスについての実行履歴情報と、実行回数情報とが更新される。
【００３５】
実行プログラム１３０が実行されることにより更新される実行履歴情報に基づいて、各個別パスコードへのプロセッサエレメントの割当と割り当てられたプロセッサエレメントの割当解除についての制御がなされるため、プロセッサエレメントを有効に活用することができる。
また、実行プログラム１３０が実行されることにより補償パスコードが必ず実行されるため、実際に実行されたパスが各個別パスコードに該当するパスでない場合でも、実行結果の整合性を保つことができ、また、実際に実行されたパスが、各個別パスコードに該当するパスである場合には、各個別パスコードは、実行時間が短縮されるよう最適化されているため、補償パスコードを実行するよりも、高速に処理することができる。
【００３６】
実行プログラム１３０の詳細については、後述する。
＜データ＞
以下、プログラム生成装置１００に入力されるデータについて説明する。
＜ソースプログラム１１０＞
図２はソースプログラム１１０の一部の区間（以下、「部分プログラム」という）を制御フローグラフで示したものであり、この区間は分岐命令を含み、ソースプログラム１１０全体において、繰り返し実行される。この区間には、ブロックＩ２００、Ｘ２０１、Ｊ２０２、Ｋ２０３、Ｑ２０４、Ｓ２０５、Ｌ２０６、Ｕ２０７、Ｔ２０８を含み、これらは、基本ブロックである。基本ブロックとは、その途中に分岐命令を含まない連続した命令列をいう。
【００３７】
図２の制御フローグラフのパスには、ブロックＩ２００→Ｊ２０２→Ｑ２０４を通るパス（以下、「パスＩＪＱ」という）、ブロックＩ２００→Ｊ２０２→Ｋ２０３→Ｌ２０６を通るパス（以下、「パスＩＪＫＬ」という）、ブロックＩ２００→Ｊ２０２→Ｋ２０３→Ｓ２０５→Ｔ２０８を通るパス（以下、「パスＩＪＫＳＴ」という）、ブロックＩ２００→Ｊ２０２→Ｋ２０３→Ｓ２０５→Ｕ２０７を通るパス（以下、パスＩＪＫＳＵ）、ブロックＩ２００→Ｘ２０１を通るパス（以下、「パスＩＸ」という）の５つがある。
【００３８】
＜実行頻度情報１２０＞
実行頻度情報１２０は、ソースプログラムに含まれる各パスを識別するための識別子と、ターゲットハードウェア、又はその他のコンピュータ上においてプロファイリングした結果、その識別子が示すパスが実行された回数とからなる。
以下の説明では、例えば、図２に示すソースプログラム１１０の一部区間を１００回実行するプロファイリングを行った結果、得られた各パスの実行回数は、パスＩＪＱが６０回、パスＩＪＫＬが３０回、パスＩＪＫＳＴが５回、パスＩＸが３回、パスＩＪＫＳＵが２回であったものとする。
【００３９】
＜プログラム生成装置１００の動作＞
以下では、図２に示すソースプログラム１１０の部分プログラムがプログラム生成装置１００に入力された場合を例に示しながら、実行プログラム１３０が出力されるまでの動作について説明する。
なお、以下の説明では、ソフトウェア開発者から指定されているコード生成用閾値は「５％」であるとする。
【００４０】
ソースプログラム１１０が入力されると、解析部１０１は、ソースプログラム１１０の解析を行い、得られたパス情報（図２に示す部分プログラムにおいては、パスＩＪＱ、パスＩＪＫＬ、パスＩＪＫＳＴ、パスＩＸ、パスＩＪＫＳＵの５つのパス情報）を最適化部１０２に送出する。
最適化部１０２は、解析部１０１から受領したパス情報と、予めプロファイリングにより得られた実行頻度情報１２０に基づき、実行頻度がコード生成用閾値（５％）以上である実行頻度が高いパス（図２に示す部分プログラムにおいては、パスＩＪＱ、パスＩＪＫＬ、パスＩＪＫＳＴの３つのパス）について、命令の実行順序等を変更し、実行時間について最適化した中間コードを生成し、コード生成部１０３に送出する。
【００４１】
コード生成部１０３は、ソースプログラム１１０を実行形式にした処理内容コードを含む補償パスコードと、最適化部１０２から受領した実行頻度の高い各パス（図２に示す部分プログラムにおいては、パスＩＪＱ、パスＩＪＫＬ、パスＩＪＫＳＴの３つのパス）の中間コードそれぞれを実行形式にした各処理内容コードを含む各個別パスコードと、各個別パスコードに該当するパスの実行回数を示す実行履歴情報に基づいて、補償パスコードと並列実行させる個別パスコードを選択して補償パスコードと選択した個別パスコードとにプロセッサエレメントを割り当てるよう制御し、また、実行履歴情報に基づいて並列実行させている各個別パスコードへのプロセッサエレメントの割当を解除するよう制御する並列実行制御コードとを含む実行プログラム１３０を生成し、出力する。
【００４２】
なお、補償パスコードと各個別パスコードとは、それぞれ処理内容コードの他に、実行されたパスの実行回数を示す実行履歴情報と補償パスコードの実行回数及び各個別パスコードの実行回数の合計である総実行回数を示す総実行回数情報とをそれぞれ１つ増加させる履歴更新処理コードを含む。
＜実行プログラム１３０＞
以下、実施の形態１に係る実行プログラム１３０について説明する。
【００４３】
＜構成＞
実施の形態１に係る実行プログラム１３０の構成を、図３を用いて説明する。
同図に示すとおり、実行プログラム１３０は、並列実行制御部１３１、補償パスコード１３２、第１パスコード１３３、第２パスコード１３４、第３パスコード１３５、・・・、第ｎパスコード１３６からなり、ターゲットハードウェアが備えるメモリ３００に記憶されている。
【００４４】
並列実行制御部１３１は、メモリ３００に記憶された実行履歴情報３０１が示す各パスについての実行回数に基づいて、第１パスコード１３３、第２パスコード１３４、第３パスコード１３５、・・・、第ｎパスコード１３６の中から、補償パスコード１３２と並列実行させる各個別パスコードを選択し、ターゲットハードウェア上で使用可能なプロセッサエレメント数に応じて、補償パスコード１３２と選択した各個別パスコードとにプロセッサエレメントを割り当てるよう制御する機能を有する。
【００４５】
具体的には、並列実行制御部１３１は、メモリ３００に記憶された実行履歴情報３０１が示す各パスの実行回数を、メモリ３００に記憶された総実行回数情報３０２が示す補償パスコードの実行回数及び各個別パスコードの実行回数の合計である総実行回数でそれぞれ除算して、各パスについて総実行回数に対する実行回数の割合を求め、後述するパス選択用閾値より大きい総実行回数に対する実行回数の割合を示すパスについての個別パスコードを選択する。
【００４６】
更に、並列実行制御部１３１は、ターゲットハードウェア上で使用可能なプロセッサエレメント数をｎとすると、補償パスコード１３２にプロセッサエレメントを割り当てるよう制御すると共に、選択した個別パスコードのうち、総実行回数に対する実行回数の割合が大きいパスについての個別パスコードから順にｎ―１個の個別パスコードにプロセッサエレメントの割り当てるよう制御する。
【００４７】
ここで、パス選択用閾値とは、例えば予めプロファイリングによって取得した各パスの実行回数から算出した、全パスの実行回数の合計に対する各パスの実行回数の割合や、ソフトウェア開発者によって任意に設定された全パスの実行回数の合計に対する実行回数の割合をいうが、以下では、ソフトウェア開発者によって任意に設定された全パスの実行回数の合計に対する実行回数の割合であるとして説明する。
【００４８】
また、並列実行制御部１３１は、メモリ３００に記憶された総実行回数情報３０２に基づき、総実行回数が所定回数毎、例えば１００回毎に、補償パスコード１３２と並列実行させる個別パスコードの見直しを行う。
具体的には、上記と同様に、補償パスコード１３２と並列実行させる各個別パスコードを選択し、並列実行させている各個別パスコードが、選択した各個別パスコードに含まれていない場合にはその個別パスコードへのプロセッサエレメントの割当を解除し、選択した各個別パスコードの中に、並列実行させている各個別パスコードと異なる個別パスコードが含まれている場合には、ターゲットハードウェア上で使用可能なプロセッサエレメント数に応じて、その個別パスコードにプロセッサエレメントを割り当てるよう制御する機能を有する。
【００４９】
なお、並列実行制御部１３１は、補償パスコード１３２と並列実行させる個別パスコードの見直しを行う度に、メモリ３００に記憶された実行回数情報３０１と総実行回数情報３０２とに記録されたデータを初期化、即ち各個別パスコードに該当するパスの実行回数及び総実行回数をゼロに設定する（以下、「リセットする」という）。これにより、見直しがなされた後、次の見直し時までに更新された各個別パスコードに該当するパスの実行回数に基づいて、プロセッサエレメントへの割当、割当の解除の制御を行うことができる。
【００５０】
また、プロセッサエレメントの割当や、割当の解除に関する制御は、並列実行制御部１３１がターゲットハードウェア上で動作するＯＳを介して割当または割当の解除を行うことより実現される。ＯＳによるプロセッサエレメントの割当や、割当の解除の制御については、一般的なＯＳの機能であるため、説明は省略する。
また、並列実行制御部１３１も、ターゲットハードウェアが備えるプロセッサエレメントを割り当てられることにより、その機能が実現される。図３においては、並列実行制御部１３１に、補償パスコード１３２と共に第１ＰＥ３１１が割り当てられた例を示している。
【００５１】
補償パスコード１３２は、並列実行制御部１３１が、プロセッサエレメントを割り当てるよう制御することにより、ターゲットハードウェア上のプロセッサエレメントである第１ＰＥ３１１、第２ＰＥ３１２、第３ＰＥ３１３、第４ＰＥ３１４のいずれかにより実行される。図３においては、補償パスコード１３２には、第１ＰＥ３１１が割り当てられた例を示している。
【００５２】
以下、補償パスコード１３２について、図４を用いて詳細に説明する。
図４は、図２に示すソースプログラム１１０の一部プログラムにおける補償パスコード１３２と、第１パスコード１３３、第２パスコード１３４、第３パスコード１３５とにプロセッサエレメントを割り当て、並列実行させる様子を示す図である。
同図に示すとおり、補償パスコード１３２は、処理内容コード４００、第１楔コード４０１、第２楔コード４０２、第３楔コード４０３、第４楔コード４０４、第５楔コード４０５、第６楔コード４０６、履歴更新コード４０７からなる。
【００５３】
処理内容コード４００は、ソースプログラムを実行形式にしたコード列であり、並列実行させる各個別パスコードに該当するパスが実行されない場合に、実行結果の整合性を補償するためのコードである。
第１楔コード４０１、第２楔コード４０２、第３楔コード４０３、第４楔コード４０４、第５楔コード４０５、第６楔コード４０６は、それぞれ異なる識別情報である分岐命令識別情報３０３を出力するコードである。出力された分岐命令識別情報３０３は、実際に実行されたパスを特定するために用いられる。
分岐命令識別情報３０３のデータ構成や、分岐命令識別情報３０３を用いた実際に実行されたパスの特定方法については、後述する。
【００５４】
履歴更新コード４０７は、各楔コードから出力された分岐命令識別情報３０３の組み合わせから実際に実行されたパスを特定し、実行履歴情報３０１が示す特定したパスの実行回数を１つ増加させ、また、総実行回数情報３０２が示す総実行回数を１つ増加させる履歴更新処理を行う機能を有する。
第１パスコード１３３、第２パスコード１３４、第３パスコード１３５、・・・、第ｎパスコード１３６は、補償パスコード１３２と並列実行される個別パスコードであり、並列実行制御部１３１が、実行履歴情報３０１が示す各個別パスコードに該当するパスの実行回数に基づき、プロセッサエレメントを割り当てるよう制御した場合に、ターゲットハードウェア上のプロセッサエレメントである第１ＰＥ３１１、第２ＰＥ３１２、第３ＰＥ３１３、第４ＰＥ３１４のいずれかにより実行される。図３においては、第１パスコード１３３に第２ＰＥ３１２が、第２パスコード１３４に第３ＰＥ３１３が、第３パスコード１３５に第４ＰＥ３１４が割り当てられ、第ｎパスコード１３６には、プロセッサエレメントを割り当てられていない例を示している。
【００５５】
第１パスコード１３３、第２パスコード１３４、第３パスコード１３５、・・・、第ｎパスコード１３６は、基本的には、同様の構成を有するため、以下では、第１パスコード１３３について、図４を用いて詳細に説明する。
同図に示すとおり、第１パスコード１３３は、処理内容コード４０８、パス条件判定コード４０９、履歴更新コード４２０、コミットコード４３０、停止コード４４０からなる。
【００５６】
処理内容コード４０８は、パスＩＪＱの分岐命令を除く命令列の実行順序の変更等を行い、その実行時間が短縮されるよう最適化した中間コードを実行形式にしたコードである。なお、処理内容コードは個別パスコード毎に異なり、処理内容コード４１０はパスＩＪＫＬについて、処理内容コード４１２は、パスＪＫＤＳＴについて最適化した中間コードを実行形式にしたコードである。
【００５７】
パス条件判定コード４０９は、パスＩＪＱが実行されるべき条件が満たされているかを判定する機能を有する。なお、パス条件判定コードは個別パスコード毎に異なり、パス条件判定コード４１１はパスＩＪＱが、パス条件判定コード４１３はパスＪＫＤＳＴが実行されるべき条件が満たされているかを判定するコードである。
履歴更新コード４２０は、パス条件判定コードにおいて条件が満たされていると判定された場合に実行されるコードであり、実行履歴情報３０１が示すそのパスの実行回数、即ち第１パスコード１３３における履歴更新コード４２０においてはパスＩＪＱの実行回数を１つ増加させ、また、総実行回数情報３０２が示す総実行回数を１つ増加させる機能を有する。
【００５８】
コミットコード４３０は、履歴更新コード４２０の実行後に実行されるコードであり、自個別パスコード以外、即ち補償パスコード１３２及び他の個別パスコードの実行を停止させ、自個別パスコードの実行によって得られた演算結果を反映させる機能を有する。
停止コード４４０は、パス条件判定コード４０９において条件が満たされないと判定された場合に実行されるコードであり、自個別パスコードの実行を停止する機能を有する。
【００５９】
なお、処理内容コード４０８は、実行時間が短縮されるよう最適化した中間コードを実行形式にしたコードであり、個別パスコードの実行時間は補償コード１３２の実行時間より短くなる。
従って、パス条件判断コード４０９により、個別パスコードに該当するパスが実行されるべき条件を満たしていると判定された場合には、コミットコード４３０が実行されることにより、補償パスコード１３２の実行が停止され、補償パスコード１３２に含まれる履歴更新コード４０７は実行されないこととなる。
【００６０】
＜データ＞
ターゲットハードウェアのメモリ３００に記憶されている実行プログラム１３０が使用するデータについて説明する。
実行履歴情報３０１は、ソースプログラムに含まれる各パスを識別するための識別子と、その識別子に対応して、ターゲットハードウェア上においてその識別子が示すパスが実際に実行された実行回数とからなる。
【００６１】
補償パスコード１３２の履歴更新コード４０７、又は各個別パスコードの履歴更新コード４２０が実行されることにより、実際に実行されたパスの実行回数が、１ずつ増加する。
総実行回数情報３０２は、補償パスコード１３２の実行回数、及び各個別パスコードの実行回数の合計である総実行回数を示す値である。総実行回数は、補償パスコード１３２の履歴更新コード４０７、又は各個別パスコードの履歴更新コード４２０が実行されることにより、１ずつ増加する。
【００６２】
分岐命令識別情報３０３は、図４における第１楔コード４０１〜第６楔コード４０６が実行されることにより出力される情報であり、いずれの楔コードが実行されたかを識別できる情報である。分岐命令識別情報３０３を用いることにより、実際に実行されたパスを特定することができる。
分岐命令識別情報３０３は、第１楔コード４０１〜第６楔コード４０６のいずれが実行されたか識別できる情報であればどのような情報でもよいが、例えば、第１楔コード４０１が実行されると「１」、第２楔コード４０２が実行されると「２」、第３楔コードが実行されると「３」、第４楔コード４０４が実行されると「４」、第５楔コード４０５が実行されると「５」、第６楔コード４０６が実行されると「６」という分岐命令識別情報３０３が出力されるとして以下、説明する。
【００６３】
例えば、分岐命令識別情報３０３として「１」のみが出力されたとすると、分岐命令識別情報３０３「１」が出力されていることから基本ブロックであるＩ２００が実行されたことが分かる。また、出力されている分岐命令識別情報３０３は「１」のみであるため、基本ブロックＪ２０２は実行されていないこととなり、基本ブロックＸ２０１が実行されたことが分かる。このようにして、実際に実行されたパスとしてパスＩＸを特定することができる。
【００６４】
＜動作＞
実行プログラム１３０の動作について説明する。
＜パスの選択＞
以下では、並列実行制御部１３１のパスの選択処理について図５に示すフローチャートを用いて説明する。
【００６５】
並列実行制御部１３１は、全ての個別パスコードに該当するパスについて、以下説明するステップＳ５０２の処理を行っているか確認する（ステップＳ５０１）。
全ての個別パスコードに該当するパスについて処理を行っていない場合には（ステップＳ５０１：Ｎ）、並列実行制御部１３１は、メモリ３００に記憶されている実行履歴情報３０１と総実行回数情報３０２とに基づいて、処理を行っていない１つのパスについての総実行回数に対する実行回数の割合がソフトウェア開発者によって任意に設定されたパス選択用閾値以上か確認する（ステップＳ５０２）。
【００６６】
そのパスについての総実行回数に対する実行回数の割合がパス選択用閾値以上である場合には（ステップＳ５０２：Ｙ）、並列実行制御部１３１は、パスの総実行回数に対する実行回数の割合が降順になるように、そのパスを並列実行可能パスリストに追加し（ステップＳ５０３）、ステップＳ５０１に戻る。
そのパスの総実行回数に対する実行回数の割合がパス選択用閾値未満の場合（ステップＳ５０２：Ｎ）、ステップ５０１に戻る。
【００６７】
全ての個別パスコードに該当するパスについて処理を行っている場合（ステップＳ５０１：Ｙ）は、処理を終了する。
＜プロセッサエレメントの割当＞
以下では、並列実行制御部１３１のプロセッサエレメント割当処理について図６に示すフローチャートを用いて説明する。
【００６８】
並列実行制御部１３１は、ターゲットコンピュータ上で使用可能なプロセッサエレメント数を取得する（ステップＳ６０１）。
並列実行制御部１３１は、補償パスコード１３２にプロセッサエレメントを割り当て、実行パスリストに補償パスを追加する（ステップＳ６０２）。
並列実行制御部１３１は、プロセッサエレメント割当済のパスの数が、ターゲットコンピュータ上で使用可能なプロセッサエレメント数と等しいか確認する（ステップＳ６０３）。
【００６９】
プロセッサエレメント割当済のパスの数が、ターゲットコンピュータ上で使用可能なプロセッサエレメント数と等しくない場合（ステップＳ６０３：Ｎ）、並列実行制御部１３１は、並列実行可能パスリストの先頭のパス、即ち並列実行可能パスリスト内で最も総実行回数に対する実行回数の割合が高いパスについての個別パスコードにプロセッサエレメントを割り当て、並列実行可能パスリストからプロセッサエレメントを割り当てたパスを削除する（ステップＳ６０４）。
【００７０】
並列実行制御部１３１は、実行パスリストにプロセッサエレメントを割り当てたパスを追加する（ステップＳ６０５）。
並列実行制御部１３１は、並列実行可能パスリストにパスが存在しないか確認する（ステップＳ６０６）。
並列実行可能パスリストにパスが存在する場合には（ステップＳ６０６：Ｎ）、ステップＳ６０３へ戻り、並列実行可能パスリストにパスが存在しない場合には（ステップＳ６０６：Ｙ）、メモリ３００に記憶された実行履歴情報３０１が示す各パスの実行回数と総実行回数情報３０２が示す総実行回数をリセットする（ステップＳ６０７）。
【００７１】
並列実行制御部１３１は、実行パスリストに含まれる全てのパスについてのコード（補償パスコード１３２と実行パスリストに含まれるパスについての個別パスコード）を実行する（ステップＳ６０８）。
プロセッサエレメント割当済のパスの数が、ターゲットコンピュータ上で使用可能なプロセッサエレメント数と等しい場合（ステップＳ６０３：Ｙ）、ステップＳ６０７に進む。
【００７２】
＜履歴更新コード４０７の動作＞
以下では、補償パスコード１３２に含まれる履歴更新コード４０７による、実行履歴情報３０１と総実行回数情報３０２との更新処理について、図７に示すフローチャートを用いて説明する。
履歴更新コード４０７は、メモリ３００に記憶された分岐命令識別情報３０３を取得する（ステップＳ７０１）。
【００７３】
履歴更新コード４０７は、取得した分岐命令識別情報３０３から、実際に実行されたパスを特定する（ステップＳ７０２）。
履歴更新コード４０７は、メモリ３００に記憶された実行履歴情報３０１の識別子のうち、特定した実際に実行されたパスを示す識別子についての実行回数を１つ増加させる（ステップＳ７０３）。
【００７４】
履歴更新コード４０７は、総実行回数情報３０２が示す総実行回数を１つ増加させる（ステップＳ７０４）。
＜履歴更新コード４２０の動作＞
以下では、各個別パスコードに含まれる履歴更新コード４２０による、実行履歴情報３０１と総実行回数情報３０２との更新処理について、図８に示すフローチャートを用いて説明する。
【００７５】
履歴更新コード４２０は、実行履歴情報３０１の識別子のうち、自個別パスコードを示す識別子についての実行回数を１つ増加させる（ステップＳ８０１）。
履歴更新コード４２０は、総実行回数情報３０２が示す総実行回数を１つ増加させる（ステップＳ８０２）。
＜プロセッサエレメントの割当の見直し＞
以下では、補償パスコード１３２と並列実行させる個別パスコードの見直し処理について、図９に示すフローチャートを用いて説明する。
【００７６】
並列実行制御部１３１は、メモリ３００に記憶されている総実行回数情報３０２が示す総実行回数が１００と等しいかを確認する（ステップＳ９０１）。
総実行回数が１００と等しくない場合には（ステップＳ９０１：Ｎ）、ステップＳ９０１に戻る。
総実行回数が１００と等しい場合には（ステップＳ９０１：Ｙ）、並列実行制御部１３１は、図５に示すフローチャートに従って補償パスコード１３２と並列実行させる個別パスコードに該当するパスの選択処理を行う（ステップＳ９０２）。
【００７７】
並列実行制御部１３１は、実行パスリストに含まれ、並列実行可能パスリストに含まれない個別パスコードに該当するパスがあるかを確認する（ステップＳ９０３）。
実行パスリストに含まれ、並列実行可能パスリストに含まれない個別パスコードに該当するパスがある場合には（ステップＳ９０３：Ｙ）、並列実行制御部１３１は、該当する全てのパスについての各個別パスコードへのプロセッサエレメントの割当を解除し、実行パスリストから該当する全てのパスを削除する（ステップＳ９０４）。そして、ステップＳ９０５に進む。
【００７８】
また、実行パスリストに含まれ、並列実行可能パスリストに含まれない個別パスコードに該当するパスがない場合には（ステップＳ９０３：Ｎ）、ステップＳ９０５に進む。
並列実行制御部１３１は、並列実行可能パスリストに含まれ、実行パスリストに含まれない個別パスコードに該当するパスがあるかを確認する（ステップＳ９０５）。
並列実行可能パスリストに含まれ、実行パスリストに含まれない個別パスコードに該当するパスがある場合には（ステップＳ９０５：Ｙ）、並列実行制御部１３１は、並列実行可能パスリストから、該当パス以外のパスを削除する（ステップＳ９０６）。そして、ステップＳ９０７に進む。
【００７９】
また、並列実行可能パスリストに含まれ、実行パスリストに含まれない個別パスコードに該当するパスがない場合には（ステップＳ９０５：Ｎ）、ステップＳ９１２に進む。
ステップＳ９０７は図６に示すプロセッサエレメント割当処理のステップＳ６０１、ステップＳ９０８〜〜ステップＳ９１３までの処理は、図６に示すプロセッサエレメント割当処理のステップＳ６０３〜ステップＳ６０８までの処理と同様であるため、説明は省略する。
【００８０】
＜具体的な動作＞
実行プログラム１３０の動作について図２に示すソースプログラム１１０の一部区間における例を用いて具体的に説明する。
＜パスの選択＞
まず、並列実行制御部１３１のパスの選択処理について、図５に示すフローチャートを用いて説明する。
【００８１】
以下の説明では、第１パスコードとしてパスＩＪＱについての個別パスコードが、第２パスコードとしてパスＩＪＫＬについての個別パスコードが、第３パスコードとしてパスＩＪＫＳＴについての個別パスコードが、第４パスコードとしてパスＩＸについての個別パスコードがメモリ３００に記憶されているものとする。
また、図２に示すソースプログラム１１０の一部区間を１００回実行するプロファイリングを行った結果を実行履歴情報３０１の初期値として使用することとし、プロファイリングによって得られた各パスの実行回数は、パスＩＪＱが６０回、パスＩＪＫＬが３０回、パスＩＪＫＳＴが５回、パスＩＸが３回であるものとする。
【００８２】
また、ソフトウェア開発者によって任意に設定されたパス選択用閾値は、５％であるとする。
並列実行制御部１３１は、パスＩＪＱ、パスＩＪＫＬ、パスＩＪＫＳＴ、パスＩＸについて、ステップＳ５０２の処理を行っているか確認する（ステップＳ５０１）。
パスＩＪＱ、パスＩＪＫＬ、パスＩＪＫＳＴ、パスＩＸについて処理を行っていないため（ステップＳ５０１：Ｎ）、並列実行制御部１３１は、メモリ３００に記憶されている実行履歴情報３０１と総実行回数情報３０２とに基づいて、処理を行っていないパスＩＪＱについての総実行回数に対する実行回数の割合（６０％）がソフトウェア開発者によって任意に設定されたパス選択用閾値（５％）以上か確認する（ステップＳ５０２）。
【００８３】
パスＩＪＱについての総実行回数に対する実行回数の割合（６０％）がパス選択用閾値（５％）以上であるため（ステップＳ５０２：Ｙ）、並列実行制御部１３１は、パスＩＪＱを並列実行可能パスリストに追加し（ステップＳ５０３）、ステップＳ５０１に戻る。
並列実行制御部１３１は、パスＩＪＱ、パスＩＪＫＬ、パスＩＪＫＳＴ、パスＩＸについて、ステップＳ５０２の処理を行っているか確認する（ステップＳ５０１）。
【００８４】
パスＩＪＫＬ、パスＩＪＫＳＴ、パスＩＸについて処理を行っていないため（ステップＳ５０１：Ｎ）、並列実行制御部１３１は、メモリ３００に記憶されている実行履歴情報３０１と総実行回数情報３０２とに基づいて、処理を行っていないパスＩＪＫＬについての総実行回数に対する実行回数の割合（３０％）がソフトウェア開発者によって任意に設定されたパス選択用閾値（５％）以上か確認する（ステップＳ５０２）。
【００８５】
パスＩＪＫＬについての総実行回数に対する実行回数の割合（３０％）がパス選択用閾値（５％）以上であるため（ステップＳ５０２：Ｙ）、並列実行制御部１３１は、パスＩＪＫＬを並列実行可能パスリストに追加し（ステップＳ５０３）、ステップＳ５０１に戻る。
並列実行制御部１３１は、パスＩＪＱ、パスＩＪＫＬ、パスＩＪＫＳＴ、パスＩＸについて、ステップＳ５０２の処理を行っているか確認する（ステップＳ５０１）。
【００８６】
パスＩＪＫＳＴ、パスＩＸについて処理を行っていないため（ステップＳ５０１：Ｎ）、並列実行制御部１３１は、メモリ３００に記憶されている実行履歴情報３０１と総実行回数情報３０２とに基づいて、処理を行っていないパスＩＪＫＳＴについての総実行回数に対する実行回数の割合（５％）がソフトウェア開発者によって任意に設定されたパス選択用閾値（５％）以上か確認する（ステップＳ５０２）。
【００８７】
パスＩＪＫＳＴについての総実行回数に対する実行回数の割合（５％）がパス選択用閾値（５％）以上であるため（ステップＳ５０２：Ｙ）、並列実行制御部１３１は、パスＩＪＫＳＴを並列実行可能パスリストに追加し（ステップＳ５０３）、ステップＳ５０１に戻る。
並列実行制御部１３１は、パスＩＪＱ、パスＩＪＫＬ、パスＩＪＫＳＴ、パスＩＸについて、ステップＳ５０２の処理を行っているか確認する（ステップＳ５０１）。
【００８８】
パスＩＸについて処理を行っていないため（ステップＳ５０１：Ｎ）、並列実行制御部１３１は、メモリ３００に記憶されている実行履歴情報３０１と総実行回数情報３０２とに基づいて、処理を行っていないパスＩＸについての総実行回数に対する実行回数の割合（３％）がソフトウェア開発者によって任意に設定されたパス選択用閾値（５％）以上か確認する（ステップＳ５０２）。
【００８９】
パスＩＸについての総実行回数に対する実行回数の割合（３％）がパス選択用閾値（５％）未満であるため（ステップＳ５０２：Ｎ）、ステップ５０１に戻る。
並列実行制御部１３１は、パスＩＪＱ、パスＩＪＫＬ、パスＩＪＫＳＴ、パスＩＸについて、ステップＳ５０２の処理を行っているか確認する（ステップＳ５０１）。
パスＩＪＱ、パスＩＪＫＬ、パスＩＪＫＳＴ、パスＩＸについて処理を行っているため（ステップＳ５０１：Ｙ）は、処理を終了する。
【００９０】
以上の処理により、並列実行可能パスリストには、パスＩＪＱ、パスＩＪＫＬ、パスＩＪＫＳＴが登録されていることになる。
＜プロセッサエレメントの割当＞
次に、並列実行制御部１３１のプロセッサエレメント割当処理について、図６に示すフローチャートを用いて説明する。
【００９１】
以下の説明では、並列実行可能パスリストには、パスＩＪＱ、パスＩＪＫＬ、パスＩＪＫＳＴが登録されており、ターゲットコンピュータ上で使用可能なプロセッサエレメント数は「３」であるとする。
並列実行制御部１３１は、ターゲットコンピュータ上で使用可能なプロセッサエレメント数（３）を取得する（ステップＳ６０１）。
【００９２】
並列実行制御部１３１は、補償パスコード１３２にプロセッサエレメントを割り当て、実行パスリストに補償パスを追加する（ステップＳ６０２）。
並列実行制御部１３１は、プロセッサエレメント割当済のパスの数（１）が、ターゲットコンピュータ上で使用可能なプロセッサエレメント数（３）と等しいか確認する（ステップＳ６０３）。
【００９３】
プロセッサエレメント割当済のパスの数（１）が、ターゲットコンピュータ上で使用可能なプロセッサエレメント数（３）と等しくないため（ステップＳ６０３：Ｎ）、並列実行制御部１３１は、並列実行可能パスリストの先頭のパスＩＪＱについての個別パスコードにプロセッサエレメントを割り当て、並列実行可能パスリストからプロセッサエレメントを割り当てたパスＩＪＱを削除する（ステップＳ６０４）。
【００９４】
並列実行制御部１３１は、実行パスリストにプロセッサエレメントを割り当てたパスＩＪＱを追加する（ステップＳ６０５）。
並列実行制御部１３１は、並列実行可能パスリストにパスが存在しないか確認する（ステップＳ６０６）。
並列実行可能パスリストにパスＩＪＫＬ、パスＩＪＫＳＴが存在するため（ステップＳ６０６：Ｎ）、ステップＳ６０３へ戻る。
【００９５】
並列実行制御部１３１は、プロセッサエレメント割当済のパスの数（２）が、ターゲットコンピュータ上で使用可能なプロセッサエレメント数（３）と等しいか確認する（ステップＳ６０３）。
プロセッサエレメント割当済のパスの数（２）が、ターゲットコンピュータ上で使用可能なプロセッサエレメント数（３）と等しくないため（ステップＳ６０３：Ｎ）、並列実行制御部１３１は、並列実行可能パスリストの先頭のパスＩＪＫＬについての個別パスコードにプロセッサエレメントを割り当て、並列実行可能パスリストからプロセッサエレメントを割り当てたパスＩＪＫＬを削除する（ステップＳ６０４）。
【００９６】
並列実行制御部１３１は、実行パスリストにプロセッサエレメントを割り当てたパスＩＪＫＬを追加する（ステップＳ６０５）。
並列実行制御部１３１は、並列実行可能パスリストにパスが存在しないか確認する（ステップＳ６０６）。
並列実行可能パスリストにパスＩＪＫＳＴが存在するため（ステップＳ６０６：Ｎ）、ステップＳ６０３へ戻る。
【００９７】
並列実行制御部１３１は、プロセッサエレメント割当済のパスの数（３）が、ターゲットコンピュータ上で使用可能なプロセッサエレメント数（３）と等しいか確認する（ステップＳ６０３）。
プロセッサエレメント割当済のパスの数（３）が、ターゲットコンピュータ上で使用可能なプロセッサエレメント数（３）と等しいため（ステップＳ６０３：Ｙ）、ステップＳ６０７に進む。
【００９８】
並列実行制御部１３１は、メモリ３００に記憶された実行履歴情報３０１が示す各パスの実行回数と総実行回数情報３０２が示す総実行回数をリセットする（ステップＳ６０７）。
並列実行制御部１３１は、実行パスリストに含まれる全てのパスについてのコード（補償パスコード１３２とパスＩＪＱについての個別パスコードとパスＩＪＫＬについての個別パスコード）を実行する（ステップＳ６０８）。
【００９９】
＜履歴更新コード４０７の動作＞
次に、補償パスコード１３２に含まれる履歴更新コード４０７による、実行履歴情報３０１と総実行回数情報３０２との更新処理について、図７に示すフローチャートを用いて説明する。
以下の説明では、分岐命令識別情報３０３として、「１」、「２」、「３」、「４」、「６」が登録されており、メモリ３００に記憶された実行履歴情報３０１が示すパスＩＪＫＳＴの実行回数は２９回であり、総実行回数情報３０２が示す総実行回数は９８回とする。
【０１００】
履歴更新コード４０７は、メモリ３００に記憶された分岐命令識別情報３０３（「１」、「２」、「３」、「４」、「６」）を取得する（ステップＳ７０１）。
履歴更新コード４０７は、取得した分岐命令識別情報３０３（「１」、「２」、「３」、「４」、「６」）から、実際に実行されたパスＩＪＫＳＴを特定する（ステップＳ７０２）。
【０１０１】
履歴更新コード４０７は、メモリ３００に記憶された実行履歴情報３０１の識別子のうち、特定した実際に実行されたパスＩＪＫＳＴを示す識別子についての実行回数（２９）を１つ増加させ、３０とする（ステップＳ７０３）。
履歴更新コード４０７は、総実行回数情報３０２が示す総実行回数（９８）を１つ増加させ、９９とする（ステップＳ７０４）。
【０１０２】
＜履歴更新コード４２０の動作＞
次に、各個別パスコードに含まれる履歴更新コード４２０による、実行履歴情報３０１と総実行回数情報３０２との更新処理について、図８に示すフローチャートを用いて説明する。
以下の説明では、第１パスコードとしてパスＩＪＱについての個別パスコードが、第２ＰＥ３１２に割り当てられており、パス条件判定コード４０９により、パスＩＪＱが実行されるべき条件が満たされているかを判定されたものとし、メモリ３００に記憶された実行履歴情報３０１におけるパスＩＪＱの実行回数は４９回であり、総実行回数情報３０２が示す総実行回数は９９回とする。
【０１０３】
履歴更新コード４２０は、実行履歴情報３０１の識別子のうち、自個別パスコード（パスＩＪＱについての個別パスコード）を示す識別子についての実行回数（４９）を１つ増加させ、５０とする（ステップＳ８０１）。
履歴更新コード４２０は、総実行回数情報３０２が示す総実行回数（９９）を１つ増加させ、１００とする（ステップＳ８０２）。
【０１０４】
＜プロセッサエレメントの割当の見直し＞
次に、補償パスコード１３２と並列実行させる個別パスコードの見直し処理について、図９に示すフローチャートを用いて説明する。
以下の説明では、実行パスリストには、補償パス、パスＩＪＱ、パスＩＪＫＬが登録されており、プロセッサエレメント割当済のパスの数は「３」であり、使用可能なプロセッサエレメント数は「３」であるとする。
【０１０５】
また、メモリ３００に記憶された実行履歴情報３０１における各パスの実行回数はパスＩＪＱが５０回、パスＩＪＫＬが２０回、パスＩＪＫＳＴが３０回、パスＩＸが０回であり、総実行回数情報３０２が示す総実行回数は１００回であり、ソフトウェア開発者によって任意に設定されたパス選択用閾値は、３０％であるとする。
並列実行制御部１３１は、メモリ３００に記憶されている総実行回数情報３０２が示す総実行回数（１００）が１００と等しいかを確認する（ステップＳ９０１）。
【０１０６】
総実行回数が１００と等しいため（ステップＳ９０１：Ｙ）、並列実行制御部１３１は、図５に示すフローチャートに従って補償パスコード１３２と並列実行させる個別パスコードに該当するパスの選択処理を行う（ステップＳ９０２）。その結果、並列実行可能パスリストには、パスＩＪＱ、パスＩＪＫＳＴが登録される。
並列実行制御部１３１は、実行パスリスト（補償パス、パスＩＪＱ、パスＩＪＫＬ）に含まれ、並列実行可能パスリスト（パスＩＪＱ、パスＩＪＫＳＴ）に含まれない個別パスコードに該当するパスがあるかを確認する（ステップＳ９０３）。
【０１０７】
実行パスリストに含まれ、並列実行可能パスリストに含まれない個別パスコードに該当するパスＩＪＫＬがあるため（ステップＳ９０３：Ｙ）、並列実行制御部１３１は、そのパスＩＪＫＬについての個別パスコードへのプロセッサエレメントの割当を解除し、実行パスリストからそのパスを削除する（ステップＳ９０４）。これにより、プロセッサエレメント割当済のパスの数は、２となる。
【０１０８】
並列実行制御部１３１は、並列実行可能パスリスト（パスＩＪＱ、パスＩＪＫＳＴ）に含まれ、実行パスリスト（補償パス、パスＩＪＱ）に含まれない個別パスコードに該当するパスがあるかを確認する（ステップＳ９０５）。
並列実行可能パスリストに含まれ、実行パスリストに含まれない個別パスコードに該当するパスＩＪＫＳＴがあるため（ステップＳ９０５：Ｙ）、並列実行制御部１３１は、並列実行可能パスリストから、パスＩＪＫＳＴ以外のパスを削除する（ステップＳ９０６）。
【０１０９】
並列実行制御部１３１は、ターゲットコンピュータ上で使用可能なプロセッサエレメント数（３）を取得する（ステップＳ９０７）。
並列実行制御部１３１は、プロセッサエレメント割当済のパスの数（２）が、ターゲットコンピュータ上で使用可能なプロセッサエレメント数（３）と等しいか確認する（ステップＳ９０８）。
【０１１０】
プロセッサエレメント割当済のパスの数（２）が、ターゲットコンピュータ上で使用可能なプロセッサエレメント数（３）と等しくないため（ステップＳ９０８：Ｎ）、並列実行制御部１３１は、並列実行可能パスリストの先頭のパスＩＪＫＳＴについての個別パスコードにプロセッサエレメントを割り当て、並列実行可能パスリストからプロセッサエレメントを割り当てたパスＩＪＫＳＴを削除する（ステップＳ９０９）。
【０１１１】
並列実行制御部１３１は、実行パスリストにプロセッサエレメントを割り当てたパスＩＪＫＳＴを追加する（ステップＳ９１０）。
並列実行制御部１３１は、並列実行可能パスリストにパスが存在しないか確認する（ステップＳ９１１）。
並列実行可能パスリストにパスが存在しないため（ステップＳ９１１：Ｙ）並列実行制御部１３１は、メモリ３００に記憶された実行履歴情報３０１が示す各パスの実行回数と総実行回数情報３０２が示す総実行回数をリセットする（ステップＳ９１２）。
【０１１２】
並列実行制御部１３１は、実行パスリストに含まれる全てのパスについてのコード（補償パスコード１３２とパスＩＪＱについての個別パスコードとパスＩＪＫＳＴについての個別パスコード）を実行する（ステップＳ９１３）。
≪実施の形態２≫
＜概要＞
実施の形態１に係る実行プログラム１３０は、並列実行させる個別パスコードの見直し処理において、補償パスコードと並列実行させていた各個別パスコードのうち、総実行回数に対する実行回数の割合がパス選択用閾値より小さくなったパス（以下、「抑制パス」という）についての個別パスコードへのプロセッサエレメントの割当を解除し、それまで並列実行させていない、総実行回数に対する実行回数の割合がパス選択用閾値より大きくなったパスがある場合には、使用可能なプロセッサエレメント数に応じて、そのパスについての個別パスコードへプロセッサエレメントを割り当て、補償パスコードと並列実行させることにより、プロセッサエレメントを効率的に利用し、また、処理を高速化する可能性を高めるものである。
【０１１３】
実施の形態２に係る実行プログラム１０００は、並列実行させる個別パスコードの見直し処理において、抑制パスについての個別パスコードへのプロセッサエレメントの割当を解除し、プロセッサエレメントの効率的利用を図る点は実施の形態１と同様である。
実施の形態２に係る実行プログラム１０００は、更に、補償パスコードと並列実行させていた個別パスコードのうち、総実行回数に対する実行回数の割合がパス選択用閾値より大きいパス（以下、「継続実行パス」という）についての個別パスコードと抑制パスについての個別パスコードとに対し、継続実行パスについての個別パスコードの実行時間と抑制パスについての個別パスコードの実行時間との合計が、補償パスコードの実行時間より短いことを条件に、１つのプロセッサエレメントを割り当て、補償パスコードとを並列実行させる。
【０１１４】
１つのプロセッサエレメントを割り当てて実行する際、実行頻度の高い継続実行パスを先に実行し、継続実行パスが実行されるべき条件を満たさない場合に実行頻度の低い抑制パスについての個別パスコードが実行されるようにすることで、継続実行パスが実行されるべき条件を満たしている場合には、実施の形態１と同様に、処理の高速化を図ることができる。
【０１１５】
更に、継続実行パスについての個別パスコードの実行時間と抑制パスについての個別パスコードの実行時間との合計は、補償パスコードの実行時間より短いため、継続実行パスが実行されるべき条件を満たさず、抑制パスが実行されるべき条件を満たしている場合にも、処理の高速化を図ることができる。
＜プログラム生成装置＞
実施の形態２に係る実行プログラム１０００を生成するプログラム生成装置について説明する。
【０１１６】
実施の形態２に係るプログラム生成装置は、基本的には、実施の形態１に係るプログラム生成装置１００と同様の構成を有するが、実施の形態２に係るコード変換部は、実施の形態１に係るコード変換部１０３が生成する実行プログラム１３０と、各個別パスコード及び並列実行制御コードの内容が異なる実行プログラム１０００を生成する点で実施の形態１に係るプログラム生成装置１００と異なる。
【０１１７】
なお、実施の形態２に係るプログラム生成装置に入力されるデータ及び、実施の形態２に係るプログラム生成装置の動作は上述の実行プログラム１０００が生成される以外、実施の形態１に係るプログラム生成装置１００と同様であるため、説明は省略する。
＜実行プログラム１０００＞
以下、実施の形態２に係る実行プログラム１０００について説明する。
【０１１８】
＜構成＞
実施の形態２に係る実行プログラム１０００の構成を、図１０を用いて説明する。
同図に示すとおり、実行プログラム１０００は、補償パスコード１３２、並列実行制御部１００１、第１パスコード１００３、第２パスコード１００４、第３パスコード１００５、・・・、第ｎパスコード１００６からなり、ターゲットハードウェアのメモリ３００に記憶されている。
【０１１９】
なお、補償パスコード１３２については、実施の形態１と同様であるため、説明は省略する。
並列実行制御部１００１は、基本的には、実施の形態１における並列実行制御部１３１と同様の機能を有するが、個別パスコードの見直しにおいて並列実行制御部１３１と異なる機能を有する。
【０１２０】
並列実行制御部１００１は、並列実行されていた各個別パスコードに対応するパスのうち、メモリ３００に記憶された実行履歴情報３０１と総実行回数情報３０２とに基づいて、総実行回数に対する実行回数の割合がパス選択用閾値より小さい抑制パスについての個別パスコードへのプロセッサエレメントの割当を解除するよう制御し、総実行回数に対する実行回数の割合がパス選択用閾値より大きい継続実行パスについての個別パスコードとプロセッサエレメントの割り当てを解除された抑制パスについての個別パスコードとに１つのプロセッサエレメントを割り当てるか否かの判定を行う機能を有する。
【０１２１】
具体的には、抑制パスについての総実行回数に対する実行回数の割合が、パス選択用閾値以下の所定の値、例えばパス選択用閾値×０．７以上で、かつ、継続実行パスについての個別パスコードの実行時間と抑制パスについての個別パスコードの実行時間との合計が、補償パスコードの実行時間より短い場合に、継続実行パスについての個別パスコードと抑制パスについての個別パスコードとに１つのプロセッサエレメントを割り当てる判定を行い、メモリ３００上のマージパス情報１００２にその継続実行パスを識別する識別子とその抑制パスを識別する識別子とを登録する。
【０１２２】
ここで、抑制パスについての総実行回数に対する実行回数の割合が、パス選択用閾値以下の所定の値（上記では、パス選択用閾値×０．７）以上であることを条件としているのは、抑制パスの総実行回数に対する実行回数の割合が、パス選択用閾値と比較し、余りにも小さい場合には、継続実行パスについての個別パスコードと抑制パスについての個別パスコードとに１つのプロセッサエレメントを割り当てても、抑制パスについての個別パスコードが実行される可能性が極めて低いためである。
【０１２３】
なお、本実施形態では、パス選択用閾値以下の所定の値については、ソフトウェア開発者によって予め指定されるものとし、また、継続実行パスについての個別パスコードの実行時間、抑制パスについての個別パスコードの実行時間、補償パスコードの実行時間は、プロファイリング等により予め取得したものを用いることとする。
また、上記識別子は、実行履歴情報３０１において、各パスを識別する識別子と同様である。マージパス情報１００２の詳細は、後述する。
【０１２４】
第１パスコード１００３、第２パスコード１００４、第３パスコード１００５、・・・、第ｎパスコード１００６は、実施の形態１における第１パスコード１３３、第２パスコード１３４、第３パスコード１３５、・・・、第ｎパスコード１３６と基本的には同様の個別パスコードであるが、ターゲットハードウェアにおけるメモリ３００に記憶されたマージパス情報１００２に基づいて、抑制パスについての個別パスコードを実行させるか否かを判断する抑制パス実行判定コード１１０１と抑制パスについての個別パスコードを実行させる抑制パス実行コード１１０２とを含む点で、実施の形態１における第１パスコード１３３等と異なる。
【０１２５】
第１パスコード１００３、第２パスコード１００４、第３パスコード１００５、・・・、第ｎパスコード１００６は、基本的には、同様の構成を有するため、以下では、第１パスコード１００３について、図１１を用いて詳細に説明する。
図１１は、図２に示すソースプログラム１１０の一部プログラムにおける補償パスコード１３２と、第１パスコード１００３、第２パスコード１００４、第３パスコード１００５とにプロセッサエレメントを割り当て、並列実行させる様子を示す図である。
【０１２６】
同図に示すとおり、第１パスコード１００３は、処理内容コード４０８、パス条件判定コード４０９、履歴更新コード４２０、コミットコード４３０、停止コード４４０、抑制パス実行判定コード１１０１、抑制パス実行コード１１０２からなる。
抑制パス実行判定コード１１０１、抑制パス実行コード１１０２以外については、実施の形態１における第１パスコード１３３と同様であるため、説明は省略する。
【０１２７】
抑制パス実行判定コード１１０１は、パス条件判定コード４０９において条件が満たされないと判定された場合に実行されるコードであり、パスＩＪＱに引き続き実行すべき抑制パスがあるかを判定する機能を有する。
具体的には、メモリ３００に記憶されたマージパス情報１００２に基づき、パスＩＪＱを示す識別子に対応する抑制パスの識別子が登録されている場合には実行すべき抑制パスがあると判定する。
【０１２８】
抑制パス実行コード１１０２は、抑制パス実行判定コード１１０１において、引き続き実行すべき抑制パスがあると判定された場合に、メモリ３００に記憶されたマージパス情報１００２に基づき、パスＩＪＱを示す識別子に対応する抑制パスの識別子が示す抑制パスについての個別パスコードを実行するコードである。
＜データ＞
マージパス情報１００２は、各継続実行パスを識別するための識別子と、その識別子に対応して、継続実行パスに引き続き実行される抑制パスを識別するための識別子とからなる。
【０１２９】
並列実行制御部１００１が、継続実行パスについての個別パスコードと抑制パスについての個別パスコードとに１つのプロセッサエレメントを割り当てる判定を行った場合にマージパス情報１００２にデータが追加される。
＜動作＞
＜プロセッサエレメントの割当の見直し＞
以下では、補償パスコード１３２と並列実行させる個別パスコードの見直し処理について、図１２に示すフローチャートを用いて説明する。
【０１３０】
ステップＳ１２０１、ステップＳ１２０２は、それぞれ図９に示すフローチャートにおけるステップＳ９０１、ステップＳ９０２と同様であるため、説明は省略する。
並列実行制御部１００１は、実行パスリストに含まれ、並列実行可能パスリストに含まれないパスがあるかを確認する（ステップＳ１２０３）。
実行パスリストに含まれ、並列実行可能パスリストに含まれないパスがある場合には（ステップＳ１２０３：Ｙ）、並列実行制御部１００１は、該当する全ての抑制パスについての個別パスコードへのプロセッサエレメントの割当を解除し、実行パスリストから該当する全ての抑制パスを削除する（ステップＳ１２０４）。そして、ステップＳ１２０５へ進む。
【０１３１】
また、実行パスリストに含まれ、並列実行可能パスリストに含まれないパスがない場合には（ステップＳ１２０３：Ｎ）、ステップＳ１２１２に進む。
並列実行制御部１００１は、該当する全ての抑制パスを抑制パスリストに追加する（ステップＳ１２０５）。
並列実行制御部１００１は、抑制パスの総実行回数に対する実行回数の割合がパス選択用閾値以下の所定の値、例えばパス選択用閾値×０．７の値以上であるかを確認する（ステップＳ１２０６）。
【０１３２】
抑制パスの実行回数の割合がパス選択用閾値以下の所定の値以上である場合には（ステップＳ１２０６：Ｙ）、並列実行制御部１００１は、補償パスと既に抑制パスと共に１つのプロセッサエレメントに割り当てると判定されたパス以外の実行パスリストにおける全てのパスについて、以降説明するステップ１２０８の処理が行われているかを確認する（ステップＳ１２０７）。
【０１３３】
実行パスリストにおける全てのパスについて処理済でない場合には（ステップＳ１２０７：Ｎ）、並列実行制御部１００１は、実行パスリストの該当パスの実行時間と該当の抑制パスの実行時間との合計が、補償パスの実行時間未満であることを確認する（ステップＳ１２０８）。
実行パスリストの該当パスの実行時間と該当の抑制パスの実行時間との合計が、補償パスの実行時間以上である場合には（ステップＳ１２０８：Ｎ）、ステップＳ１２０７に戻る。
【０１３４】
実行パスリストの該当パスの実行時間と該当の抑制パスの実行時間との合計が、補償パスの実行時間未満である場合には（ステップＳ１２０８：Ｙ）、並列実行制御部１００１は、メモリ３００に記憶されたマージパス情報１００２に実行パスリストの該当パスを示す識別子と該当の抑制パスを示す識別子とを登録する（ステップＳ１２０９）。
並列実行制御部１００１は、抑制パスリストから、該当の抑制パスを削除する（ステップＳ１２１０）。
【０１３５】
並列実行制御部１００１は、抑制パスリストに抑制パスが存在するか確認する（ステップＳ１２１１）。
並列実行可能パスリストに抑制パスが存在する場合には（ステップＳ１２１１：Ｎ）、ステップＳ１２０６へ戻る。
並列実行可能パスリストに抑制パスが存在しない場合には（ステップＳ１２１１：Ｙ）、並列実行制御部１００１は、メモリ３００に記憶された実行履歴情報３０１が示す各パスの実行回数と総実行回数情報３０２が示す総実行回数をリセットする（ステップＳ１２１２）。
【０１３６】
並列実行制御部１００１は、実行パスリストに含まれる全てのパスについてのコード（補償パスコード１３２と実行パスリストに含まれるパスについての個別パスコード）を実行する（ステップＳ１２１３）。
また、抑制パスの実行回数の割合がパス選択用閾値以下の所定の値未満である場合（ステップＳ１２０６：Ｎ）、又は、実行パスリストにおける全てのパスについて処理済である場合には（ステップＳ１２０７：Ｙ）、ステップＳ１２１０へ進む。
【０１３７】
＜具体的な動作＞
実行プログラム１０００の動作について図２に示すソースプログラム１１０の一部区間における例を用いて具体的に説明する。
＜プロセッサエレメントの割当の見直し＞
以下では、補償パスコード１３２と並列実行させる個別パスコードの見直し処理について、図１２に示すフローチャートを用いて説明する。
【０１３８】
以下の説明では、実行パスリストには、補償パス、パスＩＪＱ、パスＩＪＫＬが登録されており、プロセッサエレメント割当済のパスの数は「３」であり、使用可能なＰＥ数は「３」であるとする。
また、メモリ３００に記憶された実行履歴情報３０１における各パスの実行回数はパスＩＪＱが７０回、パスＩＪＫＬが２０回、パスＩＪＫＳＴが１０回、パスＩＸが０回であり、総実行回数情報３０２が示す総実行回数は１００回であるとする。
また、ソフトウェア開発者によって任意に設定されたパス選択用閾値は３０％であり、パス選択用閾値以下の所定の値は２０％であるとする。
【０１３９】
また、パスＩＪＱの実行時間とパスＩＪＫＬの実行時間との合計は、補償パスの実行時間未満であるとする。
並列実行制御部１３１は、メモリ３００に記憶されている総実行回数情報３０２が示す総実行回数（１００）が１００と等しいかを確認する（ステップＳ１２０１）。
総実行回数が１００と等しいため（ステップＳ１２０１：Ｙ）、並列実行制御部１３１は、図５に示すフローチャートに従って補償パスコード１３２と並列実行させる個別パスコードに該当するパスの選択処理を行う（ステップＳ１２０２）。その結果、並列実行可能パスリストには、パスＩＪＱが登録される。
【０１４０】
並列実行制御部１００１は、実行パスリスト（補償パス、パスＩＪＱ、パスＩＪＫＬ）に含まれ、並列実行可能パスリスト（パスＩＪＱ）に含まれないパスがあるかを確認する（ステップＳ１２０３）。
実行パスリストに含まれ、並列実行可能パスリストに含まれないパス（パスＩＪＫＬ）があるため（ステップＳ１２０３：Ｙ）、並列実行制御部１００１は、その抑制パスＩＪＫＬについての個別パスコードのプロセッサエレメントの割当を解除し、実行パスリストから抑制パスＩＪＫＬを削除する（ステップＳ１２０４）。
【０１４１】
並列実行制御部１００１は、抑制パスＩＪＫＬを抑制パスリストに追加する（ステップＳ１２０５）。
並列実行制御部１００１は、抑制パスＩＪＫＬの総実行回数に対する実行回数の割合（２０％）がパス選択用閾値以下の所定の値（２０％）の値以上であるかを確認する（ステップＳ１２０６）。
【０１４２】
抑制パスの実行回数の割合がパス選択用閾値以下の所定の値以上であるため（ステップＳ１２０６：Ｙ）、並列実行制御部１００１は、補償パスと既に抑制パスと共に１つのプロセッサエレメントに割り当てると判定されたパス以外の実行パスリストにおける全てのパス（パスＩＪＱ）について、ステップ１２０８の処理が行われているかを確認する（ステップＳ１２０７）。
【０１４３】
実行パスリストにおけるパスＩＪＱについて処理済でないため（ステップＳ１２０７：Ｎ）、並列実行制御部１００１は、実行パスリストのパスＩＪＱの実行時間と抑制パスＩＪＫＬの実行時間との合計が、補償パスの実行時間未満であることを確認する（ステップＳ１２０８）。
実行パスリストのパスＩＪＱの実行時間と抑制パスＩＪＫＬの実行時間との合計が、補償パスの実行時間未満であるため（ステップＳ１２０８：Ｙ）、並列実行制御部１００１は、メモリ３００に記憶されたマージパス情報１００２に実行パスリストのパスＩＪＱを示す識別子と抑制パスＩＪＫＬを示す識別子とを登録する（ステップＳ１２０９）。
【０１４４】
並列実行制御部１００１は、抑制パスリストから、抑制パスＩＪＫＬを削除する（ステップＳ１２１０）。
並列実行制御部１００１は、抑制パスリストに抑制パスが存在するか確認する（ステップＳ１２１１）。
並列実行可能パスリストに抑制パスが存在しないため（ステップＳ１２１１：Ｙ）、並列実行制御部１００１は、メモリ３００に記憶された実行履歴情報３０１が示す各パスの実行回数と総実行回数情報３０２が示す総実行回数をリセットする（ステップＳ１２１２）。
【０１４５】
並列実行制御部１００１は、実行パスリストに含まれる全てのパスについてのコード（補償パスコード１３２とパスＩＪＱについての個別パスコード）を実行する（ステップＳ１２１３）。
＜補足＞
以上、本発明に係るプログラムについて実施の形態に基づいて説明したが、以下のように変形することも可能であり、本発明は上述した実施の形態で示したとおりのプログラムに限られないことは勿論である。
（１）実施の形態１における並列制御処理部１３１、実施の形態２における並列制御処理部１００１は、補償パスコード１３２と各個別パスコードとを実行するターゲットハードウェアとは別のハードウェアにより処理させることとしてもよい。
（２）補償パスコード１３２は、ソースプログラムそのものを実行形式にした処理内容コード４００を含むこととしたが、ソースプログラムから各個別パスコードに該当するパスに含まれる命令列を除いたものを処理内容コード４００としてもよい。
（３）図５のフローチャートに示すパスの選択処理における並列実行する各個別パスコードを選択するためのパス選択用閾値と、図９のフローチャートに示すプロセッサエレメントの割当の見直し処理におけるプロセッサエレメントの割り当てを解除するかを判定するためのパス選択用閾値とについて、同一のものを使用するとして説明したが、異なるものとしてもよい。例えば、図５のフローチャートに示すパスの選択処理におけるパス選択用閾値を３０％、図９のフローチャートに示すプロセッサエレメントの割当の見直し処理におけるプロセッサエレメントの割り当てを解除するかを判定するためのパス選択用閾値を２０％とすることにより、各個別パスコードの実行回数の割合がパス選択用閾値付近で頻繁に増減するような場合に、プロセッサエレメントの割当、割当の解除の頻発を防止できる。
（４）実施の形態１におけるプロセッサエレメントの割当の見直し処理において、各個別パスコードの総実行回数に対する実行回数の割合がパス選択用閾値より小さくなった場合には、プロセッサエレメントの割当を解除することとしたが、各個別パスコードの実行のみを停止し、プロセッサエレメントは割り当てたままとしてもよい。これにより、実行を停止された個別パスコードに該当するパスの実行回数の割合が、再びパス選択用閾値より大きくなった場合に、プロセッサエレメントの割当処理を省略して、迅速に実行を開始することができる。
（５）実施の形態１及び実施の形態２においては、総実行回数が１００回となる各個別パスコードに該当するパスの実行回数を用いてプロセッサエレメントの割当の見直し処理を行うこととしたが、これに限るものではなく、例えば、各個別パスコードに該当するパスの実行回数をリセットすることなく累積実行回数を用いてプロセッサエレメントの割当の見直し処理を行うこととしてもよい。また、例えば、総実行回数が２００回となる各個別パスコードに該当するパスの実行回数で判断することとしてもよい。
（６）補償パスコード１３２においては、実行されたパスを完全に特定するために、第１楔コード４０１〜第６楔コード４０６を設けることとしたが、ソフトウェア開発者に指定させることにより、例えば、第１楔コード４０１〜第４楔コード４０４のみを設け、実行頻度の高い主要なパスのみを特定できるようにしてもよい。
（７）実施の形態１において、分岐命令識別情報３０３は、各楔コードが出力した「１」等の数字として説明したが、例えば、埋め込まれた楔コードの数のビット数からなるバイナリーデータであり、各楔コードは実行されると予め指定されたビットを１に設定するものとしてもよい。
（８）実施の形態２のプロセッサエレメントの割当の見直し処理においては、抑制パスを継続実行パスと共に１つのプロセッサエレメントにより実行させる処理のみを説明したが、それまで並列実行させていなかったパスがパスの選択処理により選択された場合には、実施の形態１と同様に、ターゲットハードウェアにおいて使用可能なプロセッサエレメント数に応じて、そのパスについての個別パスコードへのプロセッサエレメントを割り当ててもよい。
（９）実施の形態２においては、プロセッサエレメントの割当の見直し処理において、抑制パスを継続実行パスと共に１つのプロセッサエレメントにより実行させる処理を行うこととしたが、実行プログラム１０００の実行開始時のプロセッサエレメント割当処理において同様の処理を行うこととしてもよい。
（１０）実施の形態１に係るプログラムにおいて、補償パスコードと選択した各個別パスコードとの各プロセッサへエレメントの割当は、ＯＳ等を介して実現されることとして説明したが、ＯＳ等を介さない方法により実現することとしてもよい。例えば、実施の形態１に係るプログラムにおいて各プロセッサエレメントへの割当機能を持たせ、実現することとしてもよい。
（１１）プログラム生成装置１００におけるコード生成用閾値は、ソフトウェア開発者によって予め与えられるとして説明したが、ソフトウェア開発者によって予め与えられたものでなくてもよい。例えば、プログラム生成装置１００において予め設定された固定値や、所定のアルゴリズムによって求められる変動値であってもよい。
（１２）実施の形態２においては、継続パスについての個別パスコードと抑制パスについての個別パスコードとを１つのプロセッサエレメントに割り当て、継続パスについての個別パスコードが実行されない場合に、抑制パスについての個別パスコードが実行されるものとして説明した。
【０１４６】
実行頻度が高い継続パスについての個別パスコードと実行頻度の低い抑制パスについての個別パスコードとを１つのプロセッサエレメント割り当てることにより、特に、プロセッサエレメントを有効に活用することができ、また、いずれかの個別パスコードが実行された場合に、処理の高速化を図ることができる。
ただし、１つのプロセッサエレメントに割り当てられる個別パスコードは、継続パスについての個別パスコードと抑制パスについての個別パスコードとに限定されるものではなく、抑制パスの個別パスコード同士であってもよいし、継続パスの個別パスコード同士であってもよい。
【０１４７】
また、２つの個別パスコードを１つのプロセッサエレメントに割り当てる場合に限らず、複数の個別パスコードを１つのプロセッサエレメントに割り当てることとしてもよい。
なお、上述のいずれの場合においても、実施の形態２で説明した場合と同様に、実行頻度の高い個別パスコードから実行されるように１つのプロセッサエレメントに割り当て、また、１つのプロセッサエレメントに割り当てられた複数の個別パスコードの実行時間の合計が、補償パスコードの実行時間より短くなるようにする必要がある。
【０１４８】
これにより、プロセッサエレメントに割り当てられた個別パスコードが実行された場合に、処理の高速化を図ることができる。
【産業上の利用可能性】
【０１４９】
本発明に係るプログラムは、複数のプロセッサエレメントを備えるプロセッサ（コンピュータ）に実行させるプログラムを最適化するために利用されるものである。
【図面の簡単な説明】
【０１５０】
【図１】本発明に係るプログラムを生成するプログラム生成装置１００の構成図である。
【図２】ソースプログラム１１０の部分プログラムを制御フローグラフで示した図である。
【図３】実施の形態１に係る実行プログラム１３０の構成図である。
【図４】補償パスコード１３２と各個別パスコードとの構成図である。
【図５】並列実行制御部１３１のパスの選択手順を示すフローチャートである。
【図６】並列実行制御部１３１のプロセッサエレメント割当手順を示すフローチャートである。
【図７】履歴更新コード４０７による実行履歴情報３０１と総実行回数情報３０２との更新手順を示すフローチャートである。
【図８】履歴更新コード４２０による実行履歴情報３０１と総実行回数情報３０２との更新手順を示すフローチャートである。
【図９】並列実行制御部１３１の並列実行させる個別パスコードの見直し処理手順を示すフローチャートである。
【図１０】実施の形態１に係る実行プログラム１０００の構成図である。
【図１１】補償パスコード１３２と各個別パスコードとの構成図である。
【図１２】並列実行制御部１００１の並列実行させる個別パスコードの見直し処理手順を示すフローチャートである。
【符号の説明】
【０１５１】
１００  プログラム生成装置
１０１  解析部
１０２  最適化部
１０３  コード変換部
１１０  ソースプログラム
１２０  実行頻度情報
１３０  実行プログラム
１３１、１００１  並列実行制御部
１３２  補償パスコード
１３３、１００３  第１パスコード
１３４、１００４  第２パスコード
１３５、１００５  第３パスコード
１３６、１００６  第ｎパスコード
２００、２０１、２０２、２０３、２０４、２０５、２０６、２０７、２０８  基本ブロック
３００  メモリ
３０１  実行履歴情報
３０２  総実行回数情報
３０３  分岐命令識別情報
３１１  第１ＰＥ
３１２  第２ＰＥ
３１３  第３ＰＥ
４０１  第１楔コード
４０２  第２楔コード
４０３  第３楔コード
４０４  第４楔コード
４０５  第５楔コード
４０６  第６楔コード
４０７、４２０  履歴更新コード
４０８、４１０、４１２  処理内容コード
４０９  パス条件判定コード
４３０  コミットコード
４４０  停止コード
１００２  マージパス情報
１１０１  抑制パス実行判定コード
１１０２  抑制パス実行コード
【図１】
2008158806.tif 000003
【図２】
2008158806.tif 000004
【図３】
2008158806.tif 000005
【図４】
2008158806.tif 000006
【図５】
2008158806.tif 000007
【図６】
2008158806.tif 000008
【図７】
2008158806.tif 000009
【図８】
2008158806.tif 000010
【図９】
2008158806.tif 000011
【図１０】
2008158806.tif 000012
【図１１】
2008158806.tif 000013
【図１２】
2008158806.tif 000014
【手続補正書】
【提出日】平成19年10月2日(2007.10.2)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のプロセッサエレメントを備えるコンピュータに実行させるためのプログラムであって、
複数のプロセッサエレメントに並列実行可能な複数のプログラム部分を割り当てて、前記複数のプログラム部分を並列に実行させることを目的とした並列実行プログラム部分と、
前記複数のプログラム部分の実行の有無を検出して検出結果である実行履歴を保持する実行履歴取得部分と、
前記複数のプログラム部分を並列実行させるか否かを前記実行履歴に基づいて判断する並列実行判断部分と、
前記並列実行判断部分による判断結果に応じて、前記複数のプログラム部分を複数のプロセッサエレメントに割り当てるか否かに係る制御を行うプロセッサエレメント割当制御部分とを含む
ことを特徴とするプログラム。
【請求項２】
前記並列実行プログラム部分において、
分岐命令を含むことにより複数の実行経路を有する第１プログラム部分と、
前記第１プログラム部分と共に並列実行を繰り返されるための第２プログラム部分であり、かつ、前記複数の実行経路のうちの特定の一の実行経路における、分岐命令を除く部分による処理内容と等価でかつ実行時間を短縮するように構成した部分と、当該特定の一の実行経路が実行されるべき条件が満たされているか否かを判定する部分と、一の繰り返し実行単位において、前記条件が満たされていれば前記第１プログラム部分と共に次の繰り返し実行部分の処理に移るように制御する部分とを含む第２プログラム部分と、
前記実行履歴取得部分が、前記第１プログラム部分及び前記第２プログラム部分の少なくともいずれか一方に含まれている
ことを特徴とする請求項１記載のプログラム。
【請求項３】
前記実行履歴取得部分は、前記特定の一の実行経路の実行の有無を検出して、当該特定の一の実行経路の実行回数を前記実行履歴として保持するものであって、
前記並列実行判断部分は、前記実行履歴が示す前記特定の一の実行経路の前記実行回数が所定の閾値未満である場合に、前記第２プログラム部分を前記第１プログラム部分と並列実行させないと判断する
ことを特徴とする請求項２記載のプログラム。
【請求項４】
前記プログラムは、更に、
前記第１プログラム部分と共に並列実行を繰り返されるための第３プログラム部分であり、かつ、前記複数の実行経路のうち前記特定の一の実行経路である第１実行経路以外の第２実行経路における、分岐命令を除く部分による処理内容と等価でかつ実行時間を短縮するように構成した部分と、当該第２実行経路が実行されるべき条件が満たされているか否かを判定する部分と、一の繰り返し実行単位において、前記条件が満たされていれば前記第１実行プログラム部分と共に次の繰り返し実行部分の処理に移るように制御する部分とを含む第３プログラム部分を含み、
前記並列実行判断部分は、更に
前記第２プログラム部分を前記第１プログラム部分と並列実行させないと判断した場合に、前記第３プログラム部分を前記第１プログラム部分と並列実行させるか否かを前記実行履歴に基づいて繰り返し判断し、
前記プロセッサエレメント割当制御部分は、更に
前記第１プログラム部分を第１プロセッサエレメントに割り当てると共に、前記第１プログラム部分と並列実行させるか否かを判断する前記並列実行判断部分による判断結果に応じて、前記第３プログラム部分を第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるか否かに係る制御を行う
ことを特徴とする請求項２記載のプログラム。
【請求項５】
前記実行履歴取得部分は、前記特定の一の実行経路の実行の有無を検出して、当該特定の一の実行経路の実行回数を前記実行履歴として保持するものであって、
前記並列実行判断部分は、前記プロセッサエレメント割当制御部分が、前記第２プログラム部分を前記第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるよう制御を行っている場合に、前記実行履歴が示す前記特定の一の実行経路の前記実行回数が所定の閾値未満であるときは、前記第２プログラム部分を前記第１プログラム部分と並列実行させないと判断し、
前記プロセッサエレメント割当制御部分は、第２プログラム部分について、第１プログラム部分との並列実行を停止するよう制御を行う
ことを特徴とする請求項２記載のプログラム。
【請求項６】
前記実行履歴取得部分は、前記特定の一の実行経路の実行の有無を検出して、当該特定の一の実行経路の実行回数を前記実行履歴として保持するものであって、
前記並列実行判断部分は、前記プロセッサエレメント割当制御部分が、前記第２プログラム部分を前記第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるよう制御を行っている場合に、前記実行履歴が示す前記特定の一の実行経路の前記実行回数が所定の閾値未満であるときは、前記第２プログラム部分を前記第１プログラム部分と並列実行させないと判断し、
前記プロセッサエレメント割当制御部分は、第２プログラム部分について、第２プロセッサエレメントへの割当を解除するよう制御を行う
ことを特徴とする請求項２記載のプログラム。
【請求項７】
前記プログラムは、更に、
前記第１プログラム部分と共に並列実行を繰り返されるための第３プログラム部分であり、かつ、前記複数の実行経路のうち前記特定の一の実行経路以外の第２実行経路における、分岐命令を除く部分による処理内容と等価でかつ実行時間を短縮するように構成した部分と、当該第２実行経路が実行されるべき条件が満たされているか否かを判定する部分と、一の繰り返し実行単位において、前記条件が満たされていれば前記第１実行プログラム部分と共に次の繰り返し実行部分の処理に移るように制御する部分とを含む第３プログラム部分と、
前記第３プログラム部分に含まれており、前記第２実行経路の実行の有無を検出して検出結果である実行履歴を保持する実行履歴取得部分とを含み、
前記並列実行判断部分は、更に
前記第２プログラム部分を前記第１プログラム部分と並列実行させないと判断した場合に、第３プログラム部分を前記第１プログラム部分と並列実行させるか否かを前記第３プログラム部分に含まれている前記実行履歴取得部分が保持する前記実行履歴に基づいて繰り返し判断し、
前記プロセッサエレメント割当制御部分は、更に
前記第１プログラム部分を第１プロセッサエレメントに割り当てると共に、前記並列実行判断部分による判断結果に応じて、前記第３プログラム部分を第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるか否かに係る制御を行う
ことを特徴とする請求項６記載のプログラム。
【請求項８】
前記プログラムは、更に
前記コンピュータにおいて割当可能なプロセッサエレメント数を取得する割当可能数取得部分を含み、
前記プロセッサエレメント割当制御部分は、更に
割当済みのプロセッサエレメント数を計数し、当該割当済みのプロセッサエレメント数が、前記割当可能数取得部分が取得した前記割当可能なプロセッサエレメント数未満であるか判断する割当可否判断部分を含み、前記並列実行判断部分が、前記第２プログラム部分を前記第１プログラム部分と並列実行させると判断した場合に、前記割当済みのプロセッサエレメント数が前記割当可能なプロセッサエレメント数未満であるときは、前記第２
プログラム部分を第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるよう制御する
ことを特徴とする請求項２記載のプログラム。
【請求項９】
前記プログラムは、更に
前記並列実行判断部分が前記判断を行う毎に前記実行履歴の内容を初期化する実行履歴初期化部分を含む
ことを特徴とする請求項２記載のプログラム。
【請求項１０】
前記プログラムは、更に、
前記第１プログラム部分と共に並列実行を繰り返されるための第３プログラム部分であり、前記複数の実行経路のうちの特定の一の実行経路である第１実行経路における、分岐命令を除く部分による処理内容と等価でかつ実行時間を短縮するように構成した部分と、当該第１実行経路が実行されるべき条件が満たされているか否かを判定する部分と、一の繰り返し実行単位において、当該条件が満たされていれば前記第１プログラム部分と共に次の繰り返し実行部分の処理に移り、前記条件が満たされていなければ、前記複数の実行経路のうち、前記第１実行経路以外の特定の実行経路である第２実行経路における、分岐命令を除く部分による処理内容と等価でかつ実行時間を短縮するように構成した部分と、当該第２実行経路が実行されるべき条件が満たされているか否かを判定する部分と、一の繰り返し実行単位において、当該第２実行経路が実行されるべき前記条件が満たされていれば前記第１プログラム部分と共に次の繰り返し実行部分の処理に移るように制御する部分とを含む第３プログラム部分を備え、
前記並列実行判断部分は、更に
前記第３プログラム部分を前記第１プログラム部分と並列実行させるか否かを前記実行履歴に基づいて繰り返し判断し、
前記プロセッサエレメント割当制御部分は、更に
前記第１プログラム部分を第１プロセッサエレメントに割り当てると共に、前記並列実行判断部分による判断結果に応じて、前記第３プログラム部分を第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるか否かに係る制御を行う
ことを特徴とする請求項２記載のプログラム。
【請求項１１】
前記並列実行判断部分が、前記実行履歴に基づいて前記第２プログラム部分を前記第１プログラム部分と並列実行させないと判断した場合に、前記第３プログラム部分における前記第２実行経路を当該第２プログラム部分における特定の一の実行経路とする
ことを特徴とする請求項１０記載のプログラム。
【請求項１２】
前記実行履歴取得部分は、更に
前記第３プログラム部分に含まれており、前記第１実施経路及び前記第２実施経路の実行の有無を検出して、当該第１実施経路の実行回数及び当該第２実施経路の実行回数を前記実行履歴として保持するものであって、
前記第１実行経路の当該実行回数が、前記第２実行経路の当該実行回数より多い
ことを特徴とする請求項１０記載のプログラム。
【請求項１３】
分岐命令を含むことにより複数の実行経路を有するソースプログラムに基づいて、複数のプロセッサエレメントを備えるコンピュータに実行させるための実行プログラムを生成するプログラム生成方法であって、
前記ソースプログラムが有する複数の実行経路にある全ての命令群を基に、実行経路間の関係を保ったまま実行形式の第１プログラム部分を生成する第１プログラム部分生成ステップと、
前記第１プログラム部分と共に並列実行を繰り返されるための第２プログラム部分であり、かつ、前記複数の実行経路のうちの特定の一の実行経路における、分岐命令を除く部分による処理内容と等価でかつ実行時間を短縮するように構成した部分と、当該特定の一の実行経路が実行されるべき条件が満たされているか否かを判定する部分と、一の繰り返し実行単位において、前記条件が満たされていれば前記第１プログラム部分と共に次の繰り返し実行部分の処理に移るように制御する部分とを含む第２プログラム部分を生成する第２プログラム部分生成ステップと、
前記第１プログラム部分及び前記第２プログラム部分の少なくともいずれか一方に含まれており、ある実行経路の実行の有無を検出して検出結果である実行履歴を保持する実行履歴取得部分を生成する実行履歴取得部分生成ステップと、
前記第２プログラム部分を前記第１プログラム部分と並列実行させるか否かを前記実行履歴に基づいて繰り返し判断する並列実行判断部分を生成する並列実行判断部分生成ステップと、
前記第１プログラム部分を第１プロセッサエレメントに割り当てると共に、前記並列実行判断部分による判断結果に応じて、前記第２プログラム部分を第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるか否かに係る制御を行うプロセッサエレメント割当制御部分を生成するプロセッサエレメント割当制御部分生成ステップとを含む
ことを特徴とするプログラム生成方法。
【請求項１４】
分岐命令を含むことにより複数の実行経路を有するソースプログラムに基づいて、複数のプロセッサエレメントを備えるコンピュータに実行させるための実行プログラムを生成するプログラム生成装置であって、
前記ソースプログラムを取得するソースプログラム取得手段と、
前記ソースプログラム取得手段が取得した前記ソースプログラムが有する複数の実行経路にある全ての命令群を基に、実行経路間の関係を保ったまま実行形式の第１プログラム部分を生成する第１プログラム部分生成手段と、
前記第１プログラム部分と共に並列実行を繰り返されるための第２プログラム部分であり、かつ、前記複数の実行経路のうちの特定の一の実行経路における、分岐命令を除く部分による処理内容と等価でかつ実行時間を短縮するように構成した部分と、当該特定の一の実行経路が実行されるべき条件が満たされているか否かを判定する部分と、一の繰り返し実行単位において、前記条件が満たされていれば前記第１プログラム部分と共に次の繰り返し実行部分の処理に移るように制御する部分とを含む第２プログラム部分を生成する第２プログラム部分生成手段と、
前記第１プログラム部分及び前記第２プログラム部分の少なくともいずれか一方に含まれており、ある実行経路の実行の有無を検出して検出結果である実行履歴を保持する実行履歴取得部分を生成する実行履歴取得部分生成手段と、
前記第２プログラム部分を前記第１プログラム部分と並列実行させるか否かを前記実行履歴に基づいて繰り返し判断する並列実行判断部分を生成する並列実行判断部分生成手段と、
前記第１プログラム部分を第１プロセッサエレメントに割り当てると共に、前記並列実行判断部分による判断結果に応じて、前記第２プログラム部分を第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるか否かに係る制御を行うプロセッサエレメント割当制御部分を生成するプロセッサエレメント割当制御部分生成手段とを含む
ことを特徴とするプログラム生成装置。
【請求項１５】
請求項２記載のプログラムを実行するプログラム実行装置であって、
当該プログラム実行装置は、
前記プログラムを取得する取得部と、
複数のプロセッサエレメントを有し、当該プロセッサエレメントを割り当てることにより、前記取得部が取得した前記プログラムを実行する実行部とを備え、
前記実行部は、前記プログラムを実行することにより前記プロセッサエレメントの割当が要求されると、割り当てられていない一のプロセッサエレメントを割り当てること
を特徴とするプログラム実行装置。
【請求項１６】
複数のプロセッサエレメントを備えるコンピュータに実行させるためのプログラムを記録したコンピュータ読取可能な記録媒体であって、
分岐命令を含むことにより複数の実行経路を有する第１プログラム部分と、
前記第１プログラム部分と共に並列実行を繰り返されるための第２プログラム部分であり、かつ、前記複数の実行経路のうちの特定の一の実行経路における、分岐命令を除く部分による処理内容と等価でかつ実行時間を短縮するように構成した部分と、当該特定の一の実行経路が実行されるべき条件が満たされているか否かを判定する部分と、一の繰り返し実行単位において、前記条件が満たされていれば前記第１プログラム部分と共に次の繰り返し実行部分の処理に移るように制御する部分とを含む第２プログラム部分と、
前記第１プログラム部分及び前記第２プログラム部分の少なくともいずれか一方に含まれており、ある実行経路の実行の有無を検出して検出結果である実行履歴を保持する実行履歴取得部分と、
前記第２プログラム部分を前記第１プログラム部分と並列実行させるか否かを前記実行履歴に基づいて繰り返し判断する並列実行判断部分と、
前記第１プログラム部分を第１プロセッサエレメントに割り当てると共に、前記並列実行判断部分による判断結果に応じて、前記第２プログラム部分を第２プロセッサエレメントに割り当てて前記第１プログラム部分と並列実行させるか否かに係る制御を行うプロセッサエレメント割当制御部分とを含むプログラムを記録した
ことを特徴とする記録媒体。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００３
【補正方法】変更
【補正の内容】
【０００３】
取得した実行頻度の情報から総合的に実行頻度の高い１又は複数のパスを選択し、選択された各パスに含まれる命令群について最適化された各コード列とソースプログラムそのものに含まれる全命令についてのコード列とにそれぞれ別のプロセッサエレメントを割り当てて並列実行させる実行プログラムを生成し、これを実行することによって、選択されたパスが実行されるべきときにおける条件分岐命令を含むプログラムの処理速度の高速化を図っている。
【特許文献１】特願２００４−３４１２３６号
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０００６
【補正方法】変更
【補正の内容】
【０００６】
上記課題を解決するため、本発明に係るプログラムは、図１３に示すプログラムとする。具体的には、複数のプロセッサエレメントを備えるコンピュータ１３００に実行させるためのプログラム１３１０であって、複数のプロセッサエレメントに並列実行可能な複数のプログラム部分を割り当てて、前記複数のプログラム部分を並列に実行させることを目的とした並列実行プログラム部分１３５０と、前記複数のプログラム部分の実行の有無を検出して検出結果である実行履歴を保持する実行履歴取得部分１３２０と、前記複数のプログラム部分を並列実行させるか否かを前記実行履歴に基づいて判断する並列実行判断部分１３３０と、前記並列実行判断部分による判断結果に応じて、前記複数のプログラム部分を複数のプロセッサエレメントに割り当てるか否かに係る制御を行うプロセッサエレメント割当制御部分１３４０とを含むことを特徴とする。
また特に、前記並列実行プログラム部分１３５０において、分岐命令を含むことにより複数の実行経路を有する第１プログラム部分と、前記第１プログラム部分と共に並列実行を繰り返されるための第２プログラム部分であり、かつ、前記複数の実行経路のうちの特定の一の実行経路における、分岐命令を除く部分による処理内容と等価でかつ実行時間を短縮するように構成した部分と、当該特定の一の実行経路が実行されるべき条件が満たされているか否かを判定する部分と、一の繰り返し実行単位において、前記条件が満たされていれば前記第１プログラム部分と共に次の繰り返し実行部分の処理に移るように制御する部分とを含む第２プログラム部分と、前記実行履歴取得部分が、前記第１プログラム部分及び前記第２プログラム部分の少なくともいずれか一方に含まれていることを特徴とする。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００３０
【補正方法】変更
【補正の内容】
【００３０】
なお、プログラム生成装置１００は、図示していないが、プロセッサ及びメモリを備え、解析部１０１、最適化部１０２、コード変換部１０３の各機能は、メモリに記憶されているコード変換プログラムであるコンパイラをプロセッサに実行させることにより実現される。
解析部１０１は、ソースプログラム１１０の分岐や実行内容を解析し、解析することにより得られたソースプログラム１１０に含まれるパスに関する情報であるパス情報を最適化部１０２に送出する機能を有する。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】０１４５
【補正方法】変更
【補正の内容】
【０１４５】
並列実行制御部１００１は、実行パスリストに含まれる全てのパスについてのコード（補償パスコード１３２とパスＩＪＱについての個別パスコード）を実行する（ステップＳ１２１３）。
＜補足＞
以上、本発明に係るプログラムについて実施の形態に基づいて説明したが、以下のように変形することも可能であり、本発明は上述した実施の形態で示したとおりのプログラムに限られないことは勿論である。
（１）実施の形態１における並列制御処理部１３１、実施の形態２における並列制御処理部１００１は、補償パスコード１３２と各個別パスコードとを実行するターゲットハードウェアとは別のハードウェアにより処理させることとしてもよい。
（２）補償パスコード１３２は、ソースプログラムそのものを実行形式にした処理内容コード４００を含むこととしたが、ソースプログラムから各個別パスコードに該当するパスに含まれる命令列を除いたものを処理内容コード４００としてもよい。
（３）図５のフローチャートに示すパスの選択処理における並列実行する各個別パスコードを選択するためのパス選択用閾値と、図９のフローチャートに示すプロセッサエレメントの割当の見直し処理におけるプロセッサエレメントの割り当てを解除するかを判定するためのパス選択用閾値とについて、同一のものを使用するとして説明したが、異なるものとしてもよい。例えば、図５のフローチャートに示すパスの選択処理におけるパス選択用閾値を３０％、図９のフローチャートに示すプロセッサエレメントの割当の見直し処理におけるプロセッサエレメントの割り当てを解除するかを判定するためのパス選択用閾値を２０％とすることにより、各個別パスコードの実行回数の割合がパス選択用閾値付近で頻繁に増減するような場合に、プロセッサエレメントの割当、割当の解除の頻発を防止できる。
（４）実施の形態１におけるプロセッサエレメントの割当の見直し処理において、各個別パスコードの総実行回数に対する実行回数の割合がパス選択用閾値より小さくなった場合には、プロセッサエレメントの割当を解除することとしたが、各個別パスコードの実行のみを停止し、プロセッサエレメントは割り当てたままとしてもよい。これにより、実行を停止された個別パスコードに該当するパスの実行回数の割合が、再びパス選択用閾値より大きくなった場合に、プロセッサエレメントの割当処理を省略して、迅速に実行を開始することができる。
（５）実施の形態１及び実施の形態２においては、総実行回数が１００回となる各個別パスコードに該当するパスの実行回数を用いてプロセッサエレメントの割当の見直し処理を行うこととしたが、これに限るものではなく、例えば、各個別パスコードに該当するパスの実行回数をリセットすることなく累積実行回数を用いてプロセッサエレメントの割当の見直し処理を行うこととしてもよい。また、例えば、総実行回数が２００回となる各個別パスコードに該当するパスの実行回数で判断することとしてもよい。
（６）補償パスコード１３２においては、実行されたパスを完全に特定するために、第１楔コード４０１〜第６楔コード４０６を設けることとしたが、ソフトウェア開発者に指定させることにより、例えば、第１楔コード４０１〜第４楔コード４０４のみを設け、実行頻度の高い主要なパスのみを特定できるようにしてもよい。
（７）実施の形態１において、分岐命令識別情報３０３は、各楔コードが出力した「１」等の数字として説明したが、例えば、埋め込まれた楔コードの数のビット数からなるバイナリーデータであり、各楔コードは実行されると予め指定されたビットを１に設定するものとしてもよい。
（８）実施の形態２のプロセッサエレメントの割当の見直し処理においては、抑制パスを継続実行パスと共に１つのプロセッサエレメントにより実行させる処理のみを説明したが、それまで並列実行させていなかったパスがパスの選択処理により選択された場合には、実施の形態１と同様に、ターゲットハードウェアにおいて使用可能なプロセッサエレメント数に応じて、そのパスについての個別パスコードへのプロセッサエレメントを割り当ててもよい。
（９）実施の形態２においては、プロセッサエレメントの割当の見直し処理において、抑制パスを継続実行パスと共に１つのプロセッサエレメントにより実行させる処理を行うこととしたが、実行プログラム１０００の実行開始時のプロセッサエレメント割当処理において同様の処理を行うこととしてもよい。
（１０）実施の形態１に係るプログラムにおいて、補償パスコードと選択した各個別パスコードとの各プロセッサへエレメントの割当は、ＯＳ等を介して実現されることとして説明したが、ＯＳ等を介さない方法により実現することとしてもよい。例えば、実施の形態１に係るプログラムにおいて各プロセッサエレメントへの割当機能を持たせ、実現することとしてもよい。
（１１）プログラム生成装置１００におけるコード生成用閾値は、ソフトウェア開発者によって予め与えられるとして説明したが、ソフトウェア開発者によって予め与えられたものでなくてもよい。例えば、プログラム生成装置１００において予め設定された固定値や、所定のアルゴリズムによって求められる変動値であってもよい。
（１２）実施の形態２においては、継続実行パスについての個別パスコードと抑制パスについての個別パスコードとを１つのプロセッサエレメントに割り当て、継続実行パスについての個別パスコードが実行されない場合に、抑制パスについての個別パスコードが実行されるものとして説明した。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】０１４６
【補正方法】変更
【補正の内容】
【０１４６】
実行頻度が高い継続実行パスについての個別パスコードと実行頻度の低い抑制パスについての個別パスコードとを１つのプロセッサエレメント割り当てることにより、特に、プロセッサエレメントを有効に活用することができ、また、いずれかの個別パスコードが実行された場合に、処理の高速化を図ることができる。
ただし、１つのプロセッサエレメントに割り当てられる個別パスコードは、継続実行パスについての個別パスコードと抑制パスについての個別パスコードとに限定されるものではなく、抑制パスの個別パスコード同士であってもよいし、継続実行パスの個別パスコード同士であってもよい。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】０１５０
【補正方法】変更
【補正の内容】
【０１５０】
【図１】本発明に係るプログラムを生成するプログラム生成装置１００の構成図である。
【図２】ソースプログラム１１０の部分プログラムを制御フローグラフで示した図である。
【図３】実施の形態１に係る実行プログラム１３０の構成図である。
【図４】補償パスコード１３２と各個別パスコードとの構成図である。
【図５】並列実行制御部１３１のパスの選択手順を示すフローチャートである。
【図６】並列実行制御部１３１のプロセッサエレメント割当手順を示すフローチャートである。
【図７】履歴更新コード４０７による実行履歴情報３０１と総実行回数情報３０２との更新手順を示すフローチャートである。
【図８】履歴更新コード４２０による実行履歴情報３０１と総実行回数情報３０２との更新手順を示すフローチャートである。
【図９】並列実行制御部１３１の並列実行させる個別パスコードの見直し処理手順を示すフローチャートである。
【図１０】実施の形態１に係る実行プログラム１０００の構成図である。
【図１１】補償パスコード１３２と各個別パスコードとの構成図である。
【図１２】並列実行制御部１００１の並列実行させる個別パスコードの見直し処理手順を示すフローチャートである。
【図１３】本発明に係るプログラムの構成とプログラム実行装置の関係を表した図である。
【手続補正８】
【補正対象書類名】図面
【補正対象項目名】図１３
【補正方法】追加
【補正の内容】
【図１３】
2008158806.tif 000015