説明

プログラム最適化装置およびプログラム最適化方法およびプログラム

【課題】プログラム51の実行中に、実行される命令コードの飛び先アドレスを変える分岐処理の内、不要な分岐処理をプログラム51から削除して、プログラムの実行時間を削減する。
【解決手段】プログラム51を実行する命令実行部11の実行内容を監視する命令実行監視部の監視結果と、プログラム51の内容を解析する独立分岐処理判定部20の解析結果とから、プログラム51に含まれる分岐処理が削除可能か否かを、以下の4条件を満たすか否かにより判定する削除可能命令抽出部を備える。(1)条件判断に基づく分岐を行う条件分岐処理。(2)固定値に基づいて条件判断を行う固定値分岐処理。(3)分岐が一方向に固定された一方向分岐処理。(4)他の処理の影響を受けない独立分岐処理。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、組込みシステムに搭載されるプログラムの最適化を行うプログラム最適化装置およびプログラム最適化方法およびプログラムに関する。
【背景技術】
【0002】
例えばプログラムの実行時間短縮を図る目的で、プログラムの最適化を行う方法が開示されている。プログラムには、所定の条件の成立、または不成立によって、コンピュータが次に実行する命令を変える分岐処理が含まれる。このような条件判断に基づく分岐処理を条件分岐処理と称する。(一方、条件判断に無関係な分岐処理を無条件分岐処理と称する。)そして、コンピュータは、予め生成されたプログラムを擬似的に実行し、プログラムの実行過程を表わすログ情報を取得する。このログ情報には、コンピュータが条件分岐処理において、所定の条件が成立すると判断(成立判断)したか、不成立であると判断(不成立判断)したかの情報が含まれる。そして、コンピュータは、ログ情報内の成立判断(分岐成立)または不成立判断(分岐不成立)の実行結果に基づき、成立判断時に実行する命令群と、不成立判断時に実行する命令群との配置の入れ替えを行う。また、例えばコンピュータは、実行回数の多い無条件分岐処理を削除し、分岐先の命令群を削除した無条件分岐処理の跡に挿入し、プログラムのサイズを小さくする。(例えば、特許文献1参照。)
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2000−35891号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
この発明の実施の形態は、例えば、プログラムの最適化を行う方法として実行回数の多い無条件分岐処理の削除に限らず、不要な条件分岐処理の削除を行い、プログラムの実行時間の削減を目的とする。
【課題を解決するための手段】
【0005】
この発明に係るプログラム最適化装置は、
所定の条件が成立するか否かを判断する命令コードである条件判断命令コードと、前記条件判断命令コードが実行された場合の条件判断の実行結果に対応して飛び先アドレスを変える命令コードである分岐命令コードとの命令コードの組を含む処理を示す条件分岐処理を少なくとも1つ含むプログラムを入力し、入力した前記プログラムをメモリを用いて実行する命令実行部と、
固定値が設定された変数である固定値変数の前記メモリにおけるアドレスを示す固定値アドレスを入力し、前記命令実行部が実行する前記プログラムに含まれる前記少なくとも1つの条件分岐処理の実行内容を監視することにより、前記少なくとも1つの条件分岐処理の内、監視に係る条件分岐処理が、固定値分岐処理であって、前記命令実行部が前記固定値アドレスにアクセスし、アクセスした前記固定値アドレスから前記固定値変数を読み込み、読み込んだ前記固定値変数に基づいて前記監視に係る条件分岐処理が含む条件判断命令コードにより条件判断を行い、前記条件判断命令コードの実行結果を用いて、前記監視に係る条件分岐処理が含む分岐命令コードを実行する、前記固定値分岐処理であるか否かを判定する命令実行監視部と、
前記命令実行監視部が前記固定値分岐処理であると判定した前記監視に係る条件分岐処理を、削除可能と判断する削除可能命令抽出部と
を備えたことを特徴とする。
【発明の効果】
【0006】
この発明に係るプログラム最適化装置は、例えば、プログラムの最適化を行う方法として実行回数の多い無条件分岐処理の削除に限らず、不要な条件分岐処理の削除を行い、プログラムの実行時間の削減を可能とする。
【図面の簡単な説明】
【0007】
【図1】実施の形態1を示す図で、プログラム最適化装置の外観の一例を示す図。
【図2】実施の形態1を示す図で、プログラム最適化装置100のハードウェア資源の一例を示す図。
【図3】実施の形態1を示す図で、プログラム最適化装置100の構成を示す図。
【図4】実施の形態1を示す図で、プログラム51の概要の例を示す図。((a)は機械語で書かれたプログラム51の例、(b)はプログラム51をアセンブリ言語で表記した例。)
【図5】実施の形態1を示す図で、ソースプログラムでの条件分岐処理の記述に対応する命令コードを示す例を示す図。((a)はソースプログラムの例、(b)はフローチャートの例、(c)は命令コードの具体例、(d)はC言語におけるフローチャートの例。)
【図6】実施の形態1を示す図で、固定値変数テーブル52の構成の例を示す図。
【図7】実施の形態1を示す図で、命令実行部11の動作(命令シミュレーション)を示すフローチャート。
【図8】実施の形態1を示す図で、命令実行監視部12の動作を示すフローチャート。
【図9】実施の形態1を示す図で、プログラム51の第1の具体例のフローチャート。
【図10】実施の形態1を示す図で、分岐命令実行結果13の第1の例を示す図。
【図11】実施の形態1を示す図で、削除可能分岐処理リスト31の第1の例を示す図。
【図12】実施の形態1を示す図で、図3のプログラム最適化装置100により最適化された最適化プログラム41の第1の例のフローチャート。
【図13】実施の形態2を示す図で、アセンブリ言語で作成されたプログラム51の第2の具体例のフローチャート。
【図14】実施の形態2を示す図で、独立分岐処理判定部を備えたプログラム最適化装置100の構成を示す図。
【図15】実施の形態2を示す図で、命令コード解析テーブル300の例を示す図。
【図16】実施の形態2を示す図で、独立分岐処理判定部20の動作を示すフローチャート。
【図17】実施の形態2を示す図で、分岐命令テーブル21の例を示す図。
【図18】実施の形態2を示す図で、分岐命令実行結果13の第2の例を示す図。
【図19】実施の形態2を示す図で、削除可能分岐処理リスト31の第2の例を示す図。
【図20】実施の形態2を示す図で、図14のプログラム最適化装置100により最適化された最適化プログラム41の第2の例のフローチャート。
【発明を実施するための形態】
【0008】
実施の形態1.
本実施の形態では、本実施の形態のプログラム最適化装置が例えば組込みシステムに用いられるプログラムを最適化する例を説明する。
【0009】
最初に、図1、図2を用いてプログラム最適化装置の概要を説明する。
【0010】
図1は、実施の形態1におけるプログラム最適化装置の外観の一例を示す図である。
図1において、プログラム最適化装置100は、システムユニット910、CRT(Cathode・Ray・Tube)やLCD(液晶)の表示画面を有する表示装置901、キーボード902(Key・Board:K/B)、マウス903、FDD904(Flexible・Disk・ Drive)、コンパクトディスク装置905(CDD)、プリンタ装置906、スキャナ装置907などのハードウェア資源を備え、これらはケーブルや信号線で接続されている。
システムユニット910は、コンピュータであり、ファクシミリ機932、電話器931とケーブルで接続され、また、ローカルエリアネットワーク942(LAN)、ゲートウェイ941を介してインターネット940に接続されている。
【0011】
図2は、実施の形態1におけるプログラム最適化装置100のハードウェア資源の一例を示す図である。
図2において、プログラム最適化装置100は、プログラムを実行するCPU911(Central・Processing・Unit、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう)を備えている。CPU911は、バス912を介してROM913、RAM914、通信ボード915、表示装置901、キーボード902、マウス903、FDD904、CDD905、プリンタ装置906、スキャナ装置907、磁気ディスク装置920と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置920の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。
RAM914は、揮発性メモリの一例である。ROM913、FDD904、CDD905、磁気ディスク装置920の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。
通信ボード915、キーボード902、スキャナ装置907、FDD904などは、入力部、入力装置の一例である。
また、通信ボード915、表示装置901、プリンタ装置906などは、出力部、出力装置の一例である。
【0012】
通信ボード915は、ファクシミリ機932、電話器931、LAN942等に接続されている。通信ボード915は、LAN942に限らず、インターネット940、ISDN等のWAN(ワイドエリアネットワーク)などに接続されていても構わない。インターネット940或いはISDN等のWANに接続されている場合、ゲートウェイ941は不用となる。
磁気ディスク装置920には、オペレーティングシステム921(OS)、ウィンドウシステム922、プログラム群923、ファイル群924が記憶されている。プログラム群923のプログラムは、CPU911、オペレーティングシステム921、ウィンドウシステム922により実行される。
【0013】
上記プログラム群923には、以下に述べる実施の形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、CPU911により読み出され実行される。
ファイル群924には、以下に述べる実施の形態の説明において、「〜の判定結果」、「〜の計算結果」、「〜の処理結果」として説明する情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してCPU911によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのCPUの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のCPUの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
また、以下に述べる実施の形態の説明において説明するフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、RAM914のメモリ、FDD904のフレキシブルディスク、CDD905のコンパクトディスク、磁気ディスク装置920の磁気ディスク、その他光ディスク、ミニディスク、DVD(Digital・Versatile・Disk)等の記録媒体に記録される。また、データや信号は、バス912や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【0014】
また、以下に述べる実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」、「手段」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」、「〜手段」として説明するものは、ROM913に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、DVD等の記録媒体に記憶される。プログラムはCPU911により読み出され、CPU911により実行される。すなわち、プログラムは、以下に述べる「〜部」としてコンピュータを機能させるものである。あるいは、以下に述べる「〜部」の手順や方法をコンピュータに実行させるものである。
【0015】
次に図3を用いて、プログラム最適化装置100の概要を説明する。
図3は、プログラム最適化装置100の構成を示す図である。図中の矢印はデータの流れを表わす。ここで、命令シミュレーション部10(命令実行部11、命令実行監視部12)、削除可能命令抽出部30、削除部40が、プログラム最適化装置100を構成する要素であり、プログラム51、固定値変数テーブル52、分岐命令実行結果13、削除可能分岐処理リスト31、最適化プログラム41はデータや記述されたプログラム等の情報を示す。
【0016】
プログラム51は、プログラム最適化装置100による最適化対象となるプログラムである。プログラム51は、命令コードから構成されている。(命令コードの詳細は、後述する。)そして、プログラム51は、プログラム最適化装置100の命令実行部11によって、実行される。また、プログラムには、プログラム最適化装置100の命令実行部11が行う所定の条件が成立するか否かの条件判断の結果によって、プログラム最適化装置100の命令実行部11が次に実行する命令を変える(分岐を行う)分岐処理が少なくとも1つ含まれる。このような条件判断に基づく分岐処理を以下「条件分岐処理」と称する。一方、条件判断に無関係な分岐処理を「無条件分岐処理」と称する。また、プログラム最適化装置100の命令実行部11が所定の条件が成立すると判断することを以下「成立判断」と称し、所定の条件が成立すると判断しないと判断することを以下「不成立判断」と称する。なお、条件分岐処理の詳細は、後述する。
【0017】
固定値変数テーブル52は、固定値変数のメモリ(例えばROM913やRAM914)におけるアドレスを示す固定値アドレスを記録したテーブルである。ここで、固定値変数とは、固定値が設定された変数である。例えば、プログラム51を使用する組込みシステムに接続される装置の構成が決定するとプログラム51内で使用する変数の値が確定し、以降変更されることがない。この変更されることがない変数を固定値変数と称する。
ここで、組込みシステムとは、特定の機能を実現する為のハードウェア(例えば演算装置やメモリなど)とプログラム51を含むソフトウェアとからなるコンピュータの一種である。組込みシステムが組込まれる対象は、例えばカーナビゲーション装置のような小規模なものから、例えばファクトリーオートメーション(Factory Automation、以下「FA」と称する)システムのような大規模なものまで含まれ、対象が限定されるものではない。例えば、カーナビゲーション装置では、カーナビゲーションの機能を実現する為のハードウェアとプログラム51を含むソフトウェアがカーナビゲーション装置に組込まれる。また、例えば、FAシステムでは、工場の生産自動化の機能を実現する為のハードウェアとプログラム51を含むソフトウェアがFAシステムに組込まれる。ここで、FAシステムは複数の加工装置から構成されるものでも良いし、1台の加工装置であっても良い。
以下、FAシステムを例に説明する。
例えば、FAシステムは、1つ以上のコントローラと各コントローラに接続される複数の入出力装置(Input/Output装置、以下「I/O装置」と称する)から構成される。
ここでコントローラがプログラム51を組み込まれる組込みシステムであり、I/O装置は組込みシステムであるコントローラに接続される装置である。I/O装置は、例えば製品の温度管理を行う温度センサ(入力装置)や、製品の加工を行う加工装置のモーター(出力装置)などが想定される。コントローラは、接続された入力装置からの情報を入力し、入力された情報に応じて、出力装置の制御をするために、プログラム51を用いる。
プログラム51内では、例えば、温度センサの型番を示す変数や、モーターのメーカーを示す変数などを用いて例えばモーターのメーカーを示す変数で指定されたモーターの回転数を制御する命令が書かれている。
そして、FAシステムの設計段階においては、様々なメーカーのモーターを試用する為に、例えば、プログラム51内で使用するモーターのメーカーを示す変数の値は「A社」であったり、「B社」であったりと変化する。しかし、FAシステムの設計が完了し、FAシステムに用いるモーターのメーカーが「A社」に決定した時は、モーターのメーカーを示す変数の値は「A社」に固定される。
そして、一度FAシステムを構成するハードウェア(I/O装置)が決まると、以降変更されることはほとんど無く、例えばモーターのメーカーを示す変数の値は「A社」という固定値が設定された変数、すなわち固定値変数となる。
【0018】
記憶装置50は、プログラム最適化装置100の外部に備えられ、プログラム51と固定値変数テーブル52とを記憶する。記憶装置50は、例えばダイナミック・ランダム・アクセス・メモリ(Dynamic Random Access Memory、DRAM)やフラッシュメモリなどである。ここで、プログラム51を記憶する記憶装置と、固定値変数テーブル52を記憶する記憶装置とが別々で有っても構わない。
命令シミュレーション部10は、命令実行部11と命令実行監視部12とで構成される。
命令実行部11は、記憶装置50が記憶するプログラム51を入力し、プログラム51を実行する。そして、命令実行部11は、プログラム51実行時に、固定値変数の情報が必要な場合には、固定値アドレスにアクセスして固定値変数の情報を得る。なお、命令実行部11がプログラム51を実行した結果は、プログラム最適化装置100から外部には出力されない為、命令実行部11はプログラム51を模擬実行(シミュレーション)しているとも言える。
【0019】
命令実行監視部12は、固定値変数テーブル52を入力し、命令実行部11が実行するプログラム51に含まれる条件分岐処理の実行内容を監視する。(例えば、命令実行監視部12は、固定値変数テーブル52に記録された固定値アドレスと同じアドレスに、命令実行部11がアクセスするか否かを監視する。)そして、命令実行監視部12は、条件分岐処理が固定値変数に基づいて条件判断を行う条件分岐処理(以下「固定値分岐処理」と称する)であるか否かを判定する。固定値分岐処理とは、更に詳しく説明すると、命令実行部11が固定値アドレスにアクセスし、アクセスした固定値アドレスから固定値変数を読み込み、読み込んだ固定値変数に基づいて、条件分岐処理が含む条件判断命令コードにより条件判断を行う条件分岐処理である。
また、命令実行監視部12は、命令実行部11がプログラム51の実行に使用するメモリやレジスタと、命令コードが配置されているプログラムアドレスと命令コードを監視する。
分岐命令実行結果13は、命令実行監視部12が出力した命令実行監視部12による監視の結果である。
削除可能命令抽出部30は、命令実行監視部12による監視の結果である分岐命令実行結果13を入力する。
削除可能命令抽出部30は、命令実行監視部12が固定値分岐処理であると判定した条件分岐処理を、削除可能と判断する。また、削除可能命令抽出部30は、条件分岐処理を削除可能と判断した結果を削除可能分岐処理リスト31として出力する。
削除部40は、削除可能命令抽出部30が削除可能と判断した条件分岐処理を、プログラム51から削除する。(削除部40は、削除可能分岐処理リスト31を入力し、入力した削除可能分岐処理リスト31から削除可能命令抽出部30が削除可能と判断した条件分岐処理を特定する。)そして、削除部40は、プログラム51から削除可能と判断された条件分岐処理を削除した結果を最適化プログラム41として出力する。
【0020】
次にプログラム51の説明を行う。
まず、図4を用いてプログラム51の説明を行う。
図4は、プログラム51の概要の例を示す図である。((a)は機械語で書かれたプログラム51の例、(b)はプログラム51をアセンブリ言語で表記した例。)
図4に示す例えば「58100328」が1つの命令コードである。命令コードとは、コンピュータを動作させる命令である。プログラム51は、命令コードから構成されている。「58100328」という命令コードは、例えばアセンブリ言語で表記すると「LDR R1 0x0328」となる。
プログラム51は、例えばアセンブリ言語で書かれたソースプログラム(例えば図4(b))がアセンブラで機械語に変換されていても良いし、例えばC言語などで書かれたソースプログラムがコンパイラで機械語に変換されたものでも良い。(ソースプログラムにおけるコンピュータ言語の種類の制限は無い。)
そして、プログラム51は機械語に変換された状態で、記憶装置50に記憶されている。(例えば、図4(a)。本例は機械語を16進数で表記している。)そして、命令実行部11は機械語のプログラム51をデコード(解析)しながら実行する。 例えば、命令実行部11は、図4(a)の1行目に示す「58100328」の機械語が示す「58」が「ロード(LDR)」、「10」が「レジスタ(仮にR1)」、「0328」が「0x0328番地のアドレス」と解釈する。そして、命令実行部11は、0x0328番地のアドレスに有るデータをR1(レジスタ)にロード(読み込む)する命令であると解釈し、動作を実行する。(アセンブリ言語で記述すると、図4(b)に示す「LDR R1 0x0328」。)
このように、機械語の命令コードとアセンブリ言語の命令とは1対1で対応する。よって、以下、説明の簡略化の為に、プログラム51の命令コードの具体例は、機械語の記述を省略し、アセンブリ言語で表記して説明を行う。そして、以下の説明において、機械語の命令コードをアセンブリ言語で表記したものも「命令コード」と称する。
【0021】
ここで、ソースプログラムでの記述が、どのように命令コードに変換されるか、一般的な例を示す。
図5は、ソースプログラムでの条件分岐処理の記述に対応する命令コードを示す例を示す図である。((a)はソースプログラムの例、(b)はフローチャートの例、(c)は命令コードの具体例、(d)はC言語におけるフローチャートの例。)
図5(a)に示す「IF文」は、例えばC言語のソースプログラムにおける条件判断付きの分岐処理(条件分岐処理)である。C言語のような高級言語では、図5(a)または図5(d)に示すように条件判断命令と分岐命令とが一つの命令として記述される。しかしながら、条件分岐処理を分解して考えると、図5(b)のようなフローチャートで図示することが出来る。まず、条件判断を行うためのステップS101として、条件判断を行う条件判断命令が配置される。この条件判断命令としては、論理演算や算術演算、比較演算、シフトなどの演算系命令が使用される。
その後に、条件判断命令の条件判断の実行結果(成立判断もしくは不成立判断)により分岐を行うステップS102として、分岐命令が配置される。
そして、図5(d)のようなC言語の分岐命令も、コンパイルされて機械語の命令コードに変換されると、図5(c)のような3つの命令コードとなる。
なお、関数呼び出し等のように条件判断が不要な無条件分岐では、S101は配置せず(条件判断命令なしで)、直接S102を配置する場合もある。
【0022】
そして、命令コードの具体例は、図5(c)に示すように、例えば「LDR R1 0x0328」(S103)と「CMP R1,d100」(S104)とが、図5(b)のS101に対応し、「B」(S105)が図5(b)のS102に対応する。
ここで、「LDR R1 0x0328」(S103)は、「0x0328番地のアドレスに有るデータをR1(レジスタ)にロード(読み込む)する」を意味する。S103には、値を設定する命令コード(以下、「値設定命令コード」と称する)が配置される。値設定命令コードは、メモリにアクセスして値を設定する命令コードなので、メモリアクセス命令コードとも称する。
そして、「CMP R1,d100」(S104)は、「R1(レジスタ)のデータを10進数の100と等しいか否かを比較(コンペア)する」を意味する。S104には、S103で設定された値を用いて、条件判断を行う命令コードが配置される。「CMP R1,d100」(S104)は、所定の条件が成立するか(Yes、成立判断)否か(No、不成立判断)を判断する命令コードである。所定の条件が成立するか否かを判断する命令コードを「条件判断命令コード」と称する。
すなわち、条件判断命令(S101)は、値設定命令コード(S103)と条件判断命令コード(S104)との2つの命令コードから構成されることとなる。
そして、「B(または「BR」)」(S105)は「分岐(ブランチ)」を意味するアセンブリ言語の命令コードである。「B」(S105)は、「CMP R1,d100」(S104)の条件判断の実行結果(成立判断もしくは不成立判断)によって、次のステップで実行される命令コードのアドレスを変える。次のステップで実行される命令コードのアドレスを「飛び先アドレス」と称する。すなわち、「B」(S105)は、条件判断命令コードが実行された場合の条件判断の実行結果に対応して飛び先アドレスを変える命令コードである。条件判断命令コードが実行された場合の条件判断の実行結果に対応して飛び先アドレスを変える命令コードを「分岐命令コード」と称する。
分岐命令(S102)は、アセンブリ言語においても分岐命令コード(S105)の1つの命令コードと対応する。
そして、条件判断命令コードと分岐命令コードとの命令コードの組を含む処理を「条件分岐処理」と称する。具体的には、例えば図5(c)に図示するようなS103〜S105の値設定命令コードを含んだ一連の処理を条件分岐処理と称する。
【0023】
ここで、図5(c)の例において、「0x0328」番地のアドレスに有るデータが常に固定されたデータ(固定値)で有る場合を考える。
例えば、「0x0328」番地のアドレスに有るデータが10進数の100で有る場合を想定する。この場合は、S105における分岐は必ず「成立判断」となる。すなわち、例えば、命令実行部11がこの図5(c)の処理を実行した場合に、必ず命令実行部11は、所定の条件が成立すると判断する「成立判断」を行う。
一方、「0x0328」番地のアドレスに有るデータが例えば10進数の50(すなわち10進数の100ではない)で有る場合を想定する。この場合は、S105における分岐は必ず「不成立判断」となる。すなわち、例えば、命令実行部11がこの図5(c)の処理を実行した場合に、必ず命令実行部11は、所定の条件が成立しないと判断する「不成立判断」を行う。
このように、例えば、命令実行部11が条件分岐処理の含む条件判断命令コードの実行により、成立判断と不成立判断とのいずれか一方のみの判断を行う場合の条件分岐処理は、特定の飛び先アドレスに向かう一方向の条件分岐処理であり、以下「一方向分岐処理」と称する。
すなわち、条件判断に固定値が用いられており、かつ、条件判断S105における分岐結果(成立判断もしくは不成立判断)が予め分かっている場合は、図5(c)に示すS103〜S105の処理は不要(削除可能)となる。
【0024】
次に図6を用いて固定値変数テーブル52の説明を行う。
図6は、固定値変数テーブル52の構成の例を示す図である。図6の例は、FAシステムを構成するI/O装置の例である。
固定値変数テーブル52は、固定値変数が格納(配置)されているアドレス101、固定値変数のサイズ102、固定値変数の変数名103で構成されている。ここで、固定値変数の変数名103は省略可能である。
この固定値変数は、I/O装置(例えば、FAシステムにおける製品加工装置のモーターなど)の情報を示す。そして、アドレス101は、I/O装置(システム構成装置)の情報を格納(配置)したメモリのメモリアドレスである。
具体例として、図6の1行目は、サイズ102が「4バイト」であるので、アドレス101が示す「0x8000」から「0x8003」までのメモリアドレスの間に変数名103が示す「I/O装置Aのメーカー名」の情報(固定値変数)が格納されていることを示す。
すなわち、アドレス101からアドレス101に固定値変数のサイズ102を加算した範囲のアドレス(前記の具体例では「0x8000」から「0x8003」)が固定値変数のメモリにおけるアドレスを示す固定値アドレスとなる。
【0025】
次に図7を用いて命令実行部11の動作を説明する。
図7は、命令実行部11の動作(命令シミュレーション)を示すフローチャートである。
命令シミュレーション部10の命令実行部11では、図7に示すフローチャートに従い、入力されたプログラム51の命令コードを解析しながら、命令を実行する(実行を模擬する)。
まず、命令実行部11は記憶装置50からプログラム51を入力し、入力したプログラム51を実行する。
以下、図7のフローチャートに沿って説明する。
S201において、命令実行部11は、プログラムカウンタ(以下「PC」と称する)を設定する。
S202において、命令実行部11は、設定されたPCが示すプログラムメモリから命令コードを取り出す。
S203において、命令実行部11は、取り出された命令コードのデコードを行う。
S204において、命令実行部11は、S203でのデコードの結果により、取り出された命令コードが、演算系命令コードであるか、メモリアクセス命令コード(値設定命令コード)であるか、分岐命令コードであるか等が判別できる。そして、命令実行部11は、取り出された命令コードが、分岐命令コードであるか否かを判断する。分岐命令コードでない場合(Noのケース)、命令実行部11は、デコード結果に従い、S205で命令コードを実行する。分岐命令コードであった場合(Yesのケース)、命令実行部11は、S210の処理を行う。
S210において、命令実行部11は、分岐命令コードの実行結果を判断する。不成立判断(分岐不成立)であった場合(Noのケース)、命令実行部11は、デコード結果に従い、S207で(分岐処理以外の)命令コードを実行する。成立判断(分岐成立)であった場合(Yesのケース)、命令実行部11は、デコード結果に従い、S211で(分岐処理以外の)命令コードを実行する。
命令実行部11は、S205及びS207を実行した後は、S206において、現PCに命令長を加算してPCを更新する。
命令実行部11は、S211を実行した後は、S212において成立判断時の飛び先アドレス(分岐先アドレス)をPCに設定する。
S206及びS212において、命令実行部11は、PCを更新あるいは設定後、S202の処理に戻り、該当PCから命令コードの取り出しを行う。
【0026】
次に図8と図9と図10とを用いて命令実行監視部12の動作を説明する。
図8は、命令実行監視部12の動作を示すフローチャートである。
図9は、プログラム51の第1の具体例のフローチャートである。
図10は、分岐命令実行結果13の第1の例を示す図である。
まず、命令実行監視部12は、記憶装置50から固定値変数テーブル52を入力する。命令実行監視部12は、入力した固定値変数テーブル52を例えば、RAM914や磁気ディスク装置920などの記憶装置に記憶する。(図8における図示は省略する。)
以下、図8のフローチャートに沿って説明する。
S801において、命令実行監視部12は、命令実行部11が図7のS205、S207、S211で命令コードを実行すると、命令実行部11が固定値変数テーブル52(図6参照)に登録されたアドレス101からアドレス101にサイズ102を加算したアドレスの範囲へアクセスを行ったか否かを監視する。ここで、命令実行監視部12は、固定値変数テーブル52に登録された全てのアドレス101とサイズ102の組が示すアドレスを監視の対象とする。
ここで、アドレス101からアドレス101にサイズ102を加算したアドレスの範囲(固定値アドレス)とは、図6で説明の通りシステムを構成するシステム構成要素の情報である固定値変数(固定値)が格納されているメモリの領域である。すなわち、命令実行部11が固定値アドレスにアクセスしたということは、命令実行部11は固定値変数(固定値)をメモリから読み込んだことを意味する。この場合、S801で監視した命令コードは、図5に示す値設定命令コード(S103)となる。命令実行監視部12は、S801における判定がYesの場合、S802の処理を行い、S801における判定がNoの場合、S805における処理を行う。
S802において、命令実行監視部12は、S801で監視した命令コードの次に実行される命令コードを命令実行部11が実行した場合に、固定値アドレスから得た固定値変数を用いて条件判断を行ったか否かを監視する。命令実行監視部12は、S802における判定がYesの場合、S803の処理を行い、S802における判定がNoの場合、S808における処理を行う。
S803において、命令実行監視部12は、S802で監視した命令コードの次に実行される命令コードを命令実行部11が実行した場合に、S802で監視した命令コードの条件判断に基づいて、分岐を行ったか否かを監視する。更に命令実行監視部12は、分岐の結果(成立判断または不成立判断)も監視する。命令実行監視部12は、S803における判定がYesの場合、S804の処理を行い、S802における判定がNoの場合、処理を終了し、命令実行部11が次の命令コードを実行するのを待機する。
【0027】
S804において、命令実行監視部12は、S801〜S803の監視の結果、一連の処理が、図5(c)に示すフローチャート構造の条件分岐処理であると判断する。すなわち、命令実行監視部12がS801で監視した命令コードが、図5(c)のS103の命令コードに対応し、固定値変数を読み込んでいる。そして、S802で監視した命令コードが図5(c)のS104の命令コードに対応し、固定値変数を用いて条件判断を行っている。そして、S803で監視した命令コードが図5(c)のS105の命令コードに対応し、固定値変数による条件判断結果を基に分岐を行っている。
つまり、S804に導かれた分岐処理は、図5(c)の説明と同様に、条件判断に固定値が用いられている為、分岐が固定される処理(固定値分岐処理)である。そして、命令実行監視部12は、一連の処理(分岐処理)が固定値分岐処理と判断し、固定値分岐処理フラグを「Yes」に設定する。(固定値分岐処理フラグは、後述の処理で、分岐命令実行結果13(図10)の固定値分岐処理フラグ306となる。)また、命令実行監視部12は、条件分岐処理であることを示す分岐処理種類を「条件」に設定する。(分岐処理種類は、後述の処理で、分岐命令実行結果13(図10)の分岐処理種類303となる。)
更に、命令実行監視部12はS801で監視した命令コードのアドレスを分岐命令実行結果13(図10)の分岐命令アドレス301に設定する。
そして、命令実行監視部12は処理をS810に進める。
【0028】
S810において、命令実行部11がプログラム51を実行中の間、命令実行監視部12は、前記で固定値分岐処理と判断した分岐の実行結果(成立判断または不成立判断)を継続監視する。(命令実行監視部12は、成立判断と不成立判断とのそれぞれの結果回数をカウントする。)(分岐処理はプログラム51の実行中に、複数回実行される。)
そして、命令実行監視部12は、命令実行部11がプログラム51を終了すると、分岐の実行結果(成立判断または不成立判断)として、図10に示す分岐命令実行結果13を出力する(例えば図10に示すD93(または、D94または、D95)。ここで分岐命令実行結果13は、分岐命令アドレス301、成立アドレス312(成立判断の場合の飛び先アドレス(分岐先))、不成立アドレス313(不成立判断の場合の飛び先アドレス(分岐先))、分岐処理種類303、成立判断回数304、不成立判断回数305、固定値分岐処理フラグ306から構成される。
【0029】
次に、図8のS805〜S807の流れを説明する。
このS805〜S807の流れは、条件分岐処理であるが、固定値変数を参照していない場合である。よって、命令実行監視部12は、S807において、固定値分岐処理フラグを「No」に設定し、分岐処理種類を「条件」に設定する。更に、命令実行監視部12は、分岐命令コードのアドレスを分岐命令アドレスに設定する。そして、命令実行監視部12は、S810において、分岐命令実行結果13を出力する(例えば、図10に示すD91)。
【0030】
次に、図8のS808〜S809の流れを説明する。
このS808〜S809の流れは、条件判断を行わない無条件分岐処理である。よって、命令実行監視部12は、S809において、固定値分岐処理フラグを「No」に設定し、分岐処理種類を「無条件」に設定する。更に、命令実行監視部12は、分岐命令コードのアドレスを分岐命令アドレスに設定する。そして、命令実行監視部12は、S810において、分岐命令実行結果13を出力する(例えば、図10に示すD95)。
【0031】
ここで、図9のプログラム51の具体例と図10の分岐命令実行結果13の例を用いて、命令実行監視部12の動作を具体的に説明する。
図9のプログラム51は、例えばアセンブリ言語で書かれたソースプログラムがアセンブラで機械語に変換されていても良いし、例えばC言語などで書かれたソースプログラムがコンパイラで機械語に変換されたものでも良い。(ソースプログラムにおけるコンピュータ言語の種類の制限は無い。)そして、プログラム51の命令コードを説明が分かり易いように、機械語に対応したアセンブリ言語で表記している。
図9のプログラム51の具体例は、点線の四角枠で囲まれた命令コードが値設定命令コードを示し、実線の四角枠で囲まれた命令コードが、条件判断命令コードを示し、ひし形枠で囲まれた命令コードが分岐命令コードを示す。また、黒丸は、分岐命令コードからの分岐先(飛び先アドレス)を示す。
そして、例えばS1001における「ADD」が命令コードの命令を示し、S1001における「0x0FF0」が命令コードのアドレスを16進数で示したものである。
なお、プログラム51による詳細な演算内容は、本実施の形態の説明に無関係である為、命令コードの演算の対象となる値や変数を示すオペランドの表示は省略する。
【0032】
図8のフローチャートと図9のS1001〜S1002の命令コードの説明は省略し、命令実行部11がS1003の命令コードを実行した場合から命令実行監視部12の監視内容を以下に列記する。
(1)図9のS1003
まず、命令実行部11が、S1003の命令コードを実行すると、命令実行監視部12は、命令実行部11が固定値変数テーブル52に示された固定値アドレスにアクセスしたか否かを監視する。S1003の命令コードは値設定命令コードであるが、「STR」という例えば演算結果の値をレジスタに保存(ストア)する命令であり、命令実行部11は固定値アドレスにアクセスしない。(例えば、命令実行部11が、固定値の設定されたアドレスに演算結果の値などを上書きする場合は無い。)よって、命令実行監視部12は、図8のS801において、「No」と判定する。続けて命令実行監視部12は、図8のS805とS808とにおいて、S1003の命令コードは条件判断命令コードでも分岐命令コードでもないので、「No」と判定する。そして、命令実行監視部12は、次にS1004の命令コードの監視を行う。
(2)図9のS1004〜S1005
S1004は、「ADD」という条件判断命令コードである。この「ADD」という命令コードは、演算系命令コードであり、具体的には加算を行う。他にも「SUB(減算)」、「ORR(論理和)」、「XOR(排他的論理和)」なども演算系命令コードである。これらの演算系命令コードは、演算を実施し、更に分岐命令コード「B」が分岐の判断を行う為のフラグを更新することが可能である。すなわち、演算系命令コードの処理結果に対応して、分岐命令コードは飛び先アドレスを変えるので、演算系命令コードは、条件判断命令コードであると言える。
命令実行部11がS1004の命令コードを実行すると、命令実行監視部12は、図8のS801において、「No」と判定するが、図8のS805においては「Yes」と判定する。
そして、続けて、命令実行監視部12は、次の命令コード(S1005)における命令実行部11の実行内容を監視する。S1005は、分岐命令コードなので、命令実行監視部12は、図8のS806において、「Yes」と判定する。そして、命令実行監視部12は図8のS807において、S1005の分岐命令コードの分岐処理種類303を条件分岐命令である「条件」と設定し、固定値分岐処理フラグ306を「No」に設定し、S810において分岐命令実行結果13の一部として出力する。
更に、命令実行監視部12は、命令実行部11がプログラム51の実行を完了するまで、S1005の分岐命令コードの実行結果(成立判断もしくは不成立判断)の監視を継続する。(命令実行監視部12は、成立判断と不成立判断とのそれぞれの結果回数をカウントする。)そして、命令実行部11がプログラム51の実行を完了すると、命令実行監視部12は図8のS810において、S1005の分岐命令コードにおける成立判断の回数(成立判断回数304)と不成立判断の回数(不成立判断回数305)とを分岐命令実行結果13の一部として出力する。
図10のD91がS1005の分岐命令コードの分岐命令実行結果を示す。D91の分岐命令アドレス301は、図9のS1005に示す通り、分岐命令コードのアドレスである。成立アドレス312は、図9に示す通り、分岐命令コードにおいて成立判断された場合の飛び先アドレスである。不成立アドレス313は、図9に示す通り、分岐命令コードにおいて不成立判断された場合の飛び先アドレスである。そして、成立判断回数304が100回で、不成立判断回数が50回であったことをD91は示している。分岐処理種類303と固定値分岐処理フラグ306は前記の通りであり、説明を省略する。
(3)図9のS1006
命令実行監視部12は、図8のS805で「Yes」と判定するが、次の命令コードS1007が分岐命令コードでは無いので、S1006は無視する。
(4)図9のS1007〜S1009
S1007は、値設定命令コードであり、命令実行監視部12は、命令実行部11が図8のS801で「Yes」(固定値アドレスにアクセス)と判定する可能性も有るが、本例では、S1007の命令コードは固定値アドレスにはアクセスしないものと仮定する。よって、命令実行監視部12は、S1003〜S1006と同様の処理を行う。
(5)図9のS1010〜S1012
S1010の「LDR」は、オペランドも含めて表記すると、「LDR R1 0x8008」という命令コードだと仮定する。
命令実行監視部12は、命令実行部11がS1010の命令コードを実行すると、固定値変数テーブル52に示されている固定値アドレス0x8008に命令実行部11がアクセスしたことを検知する。そして、命令実行監視部12は図8のS801において、「Yes」と判定する。更に命令実行監視部12は、次の命令コード「ADD」(S1011)が演算系命令コードすなわち、条件判断命令コードである為、図8のS802において「Yes」と判定する。更に、次の命令コードS1012も分岐命令コードであり,命令実行監視部12は、図8のS803においても「Yes」と判定する。そして、命令実行監視部12は図8のS804において、固定値分岐処理フラグを「Yes」と設定する。
S1012の分岐命令コードの分岐命令実行結果13は、図10のD93となる。
(6)図9のS1017〜S1019
S1010〜S1012の処理と同様である為、説明を省略する。ここで、命令実行部11は、S1017の命令コードの実行において、固定値アドレスにアクセスしているものとする。
(7)図9のS1020
命令実行監視部12は、図8のS801、S805において「No」と判定するが、S808において「Yes」と判定する。そして、命令実行監視部12は、図8のS809において、分岐処理種類303を無条件分岐を示す「無条件」に設定する。図10のD95に分岐命令実行結果13を示す。
【0033】
次に図11を用いて、削除可能命令抽出部30の説明を行う。
図11は、削除可能分岐処理リスト31の第1の例を示す図である。
削除可能命令抽出部30は、命令実行監視部12から分岐命令実行結果13を入力する。そして、削除可能命令抽出部30は、分岐命令実行結果13から削除可能分岐処理リスト31を作成する。
ここで、削除可能命令抽出部30は、成立判断回数304と不成立判断回数305のどちらかが0回である分岐命令コードを抽出し、図11に示す一方向分岐処理フラグ604を「Yes」に設定する。更に、削除可能命令抽出部30は、成立判断回数304が0回である分岐命令コードの不成立アドレス313を分岐先アドレス302として設定する。また、削除可能命令抽出部30は、不成立判断回数305が0回である分岐命令コードの成立アドレス312を分岐先アドレス302として設定する。
一方、削除可能命令抽出部30は、成立判断回数304と不成立判断回数305のいずれも0回でない分岐命令の一方向分岐処理フラグ604を「No」に設定する。この場合、削除可能命令抽出部30は、分岐命令コードの成立アドレス312もしくは不成立アドレス313のいずれを分岐先アドレス302として設定しても構わない。
そして、削除可能分岐処理リスト31では、以下の3条件を全て満たした分岐処理が削除対象の候補となる。
(条件1)分岐処理種類303が「条件」である。すなわち、対象の分岐処理は、条件分岐処理である。
(条件2)一方向分岐処理フラグ604が「Yes」である。すなわち、対象の分岐処理は、一方向分岐処理である。
(条件3)固定値分岐処理フラグ306が「Yes」である。すなわち、対象の分岐処理は、固定値分岐処理である。
そして、削除可能命令抽出部30は、前記条件1〜3を満たす分岐処理の削除可能命令フラグ607を「Yes」に設定する。一方、削除可能命令抽出部30は、前記条件1〜3を満たさない分岐処理の削除可能命令フラグ607を「No」に設定する。
【0034】
そして、図12を用いて削除部40の動作を説明する。
図12は、図3のプログラム最適化装置100により最適化された最適化プログラム41の第1の例のフローチャートである。
削除部40は、削除可能分岐処理リスト31で削除可能命令フラグ607が「Yes」に設定された分岐命令コードを含む条件分岐処理をプログラム51から削除する。
具体的には、図11において、D103とD104とが削除可能命令フラグ607が「Yes」となっている。
ここで、図11のD103が示す条件分岐処理を削除する場合を具体的に説明する。
すなわち、削除部40は、図11のD103が示す条件分岐処理(図9のS1010〜S1012)を削除する。
そして、削除部40は、図10において、D103が示す条件分岐処理を削除した後、D103の分岐命令アドレス301「0x101c」と分岐先アドレス302「0x200c」とで命令が繋がって実行されるようにプログラム51を編集する。(図10のD104が示す条件分岐処理(図9のS2004)を削除する場合については、説明を省略する。)
前記の方法により、削除部40は、プログラム51から最適化プログラム41を作成する。
【0035】
なお、命令実行監視部12は、固定値変数テーブル52が示す固定値アドレスの内、命令実行部11がアクセスしていない固定値アドレスを抽出することが可能である。
固定値アドレスは、前記のように例えば、システム構成装置(I/O装置)の情報を格納(配置)したメモリのメモリアドレスである。そして、例えばシステムの管理者は予め、どのシステム構成装置(I/O装置)の情報がどの固定値アドレスに対応しているかを知ることが出来る。(固定値変数テーブル52は、例えばシステムの管理者が作成している為。)
よって、システムの管理者は、命令実行監視部12が抽出した命令実行部11がアクセスしていない固定値アドレスを知ることが出来れば、プログラム51が未使用のシステム構成装置(I/O装置)を知ることも可能である。そして、プログラム最適化装置100は、命令実行監視部12が抽出した命令実行部11がアクセスしていない固定値アドレスを例えば、表示装置901などに出力することが可能である。
【0036】
以上の実施の形態により、プログラム最適化装置100は、不要な条件分岐処理をプログラム51から削除し、プログラムの実行時間の削減を可能とする。
本実施の形態のプログラム最適化装置100は、組込みシステムに用いられるプログラムの最適化に特に有効である。
すなわち、組込みシステムは、組込みシステムに接続されるI/O装置などのシステム構成装置が決定するとプログラム51内で使用するI/O装置に関係する変数の値が確定し、以降変更されることのない固定値変数となる。そして、プログラム最適化装置100は、固定値変数により条件判断を行っている条件分岐処理を削除することが可能となる。
また、プログラム最適化装置100は、未使用のI/O装置を検出することが可能で有り、例えば組込みシステムの設計者は、未使用のI/O装置に関する命令コードをプログラム51から削除することも可能である。
このように、プログラム最適化装置100でプログラムの実行時間の削減を対策した予め最適化プログラム41を作成し、作成した最適化プログラム41を組込みシステムに実装することが可能となり、組込みシステムを用いた作業を効率化出来る。
【0037】
実施の形態2.
本実施の形態では、本実施の形態のプログラム最適化装置が例えば組込みシステムに用いられるアセンブリ言語により作成されたプログラムを最適化する例を説明する。
【0038】
実施の形態1においては、例えば図9に示すように、分岐命令コードからの飛び先アドレスは、条件分岐処理の途中には存在していない。例えば、図9のS1012において成立判断された場合の飛び先アドレスは、条件分岐処理S2004の一連の処理の途中には存在せず、飛び先アドレスは、条件分岐処理S2004の先頭アドレス「0x200c」となっている。
図5で説明したように、例えばC言語などでプログラム51を作成した場合、条件分岐処理は図5(d)のように一つの命令(処理)として記述されるので、他の処理からの飛び先アドレスが、条件分岐処理の途中に存在する場合は無い。(C言語が書かれた条件分岐処理は、コンパイルされることによって、値設定命令コードと条件判断命令コードと分岐命令コードとの3つの命令コードとなる。)
一方、プログラム51がアセンブリ言語にて作成されていた場合、他の処理からの飛び先アドレスが条件分岐処理の途中に存在する場合が有り得る。
【0039】
図13は、アセンブリ言語で作成されたプログラム51の第2の具体例のフローチャートである。図9のプログラムの例と異なる点は、図13においては、S1009とS1012との成立判断時の飛び先アドレスが、条件分岐処理S2004の途中に存在する点である。
アセンブリ言語を用いて、プログラム51を作成する場合は、最初から命令コードに対応したアセンブリ言語の命令コードを用いるので、条件分岐処理も最初から3つのアセンブリ言語の命令コード(値設定命令コードと条件判断命令コードと分岐命令コード)で記述する。そして、3つのアセンブリ言語の命令コードはそれぞれアドレスが設定されており、プログラムの作成者は条件分岐処理の途中の命令コードのアドレスにも他の処理からの飛び先アドレスを設定することが可能である。
【0040】
そして、例えば、図13の条件分岐処理S2004に着目すると、分岐命令コードS1019は、条件判断命令コードS1018における判断結果では無くて、他の処理(S2002とS2003)の結果から飛び先アドレスを変えることとなる。ここで、条件分岐処理に含まれる分岐命令コードは、この分岐命令コードが含まれる条件分岐処理以外の他の処理が含む条件判断命令コード(他の処理が含む条件判断命令コードを以下「他処理条件判断命令コード」と称する。)が実行された場合の条件判断の実行結果にも対応して飛び先アドレスを変えることが可能な命令コードである。その為、条件分岐処理は、他処理条件判断命令コードの影響を受けることになる。
従って、条件判断命令コードと分岐命令コードとの間に、他の処理からの飛び先アドレスが存在する条件分岐処理は、実施の形態1に基づく処理によって、削除することが出来ない。
実施の形態2においては、特にアセンブリ言語で作成されたプログラム51のプログラム最適化装置100を説明する。
【0041】
図14は、独立分岐処理判定部を備えたプログラム最適化装置100の構成を示す図である。
図14は、実施の形態1のプログラム最適化装置100に独立分岐処理判定部20を追加したものである。よって、重複する部分の説明は省略する。(ここで、独立分岐処理判定部20が、プログラム最適化装置100を構成する要素であり、命令コード解析テーブル300、分岐命令テーブル21はデータや記述されたプログラム等の情報を示す。)
独立分岐処理判定部20は、プログラム51を入力し、入力したプログラムを解析して命令コード解析テーブル300を作成する。命令コード解析テーブル300は、プログラム最適化装置100の記憶装置に保持される。独立分岐処理判定部20は、さらに命令コード解析テーブル300を用いてプログラム51が含む条件分岐処理の内、条件判断命令コードの後に、他の処理からの飛び先アドレスが存在しない独立分岐処理を判定する。そして、その判定結果を分岐命令テーブル21として出力する。
【0042】
図15と図16と図17とを用いて、独立分岐処理判定部20の動作を説明する。
図15は、命令コード解析テーブル300の例を示す図である。
図16は、独立分岐処理判定部20の動作を示すフローチャートである。
図17は、分岐命令テーブル21の例を示す図である。
独立分岐処理判定部20は、プログラム51を解析し、プログラム51を構成する各命令コードに対して以下のフラグを付加し、命令コード解析テーブル300を作成する。付加されるフラグは、分岐命令コードであることを示す分岐命令フラグ403、他の処理からの飛び先アドレスであることを示す分岐先命令フラグ404、更に、条件判断命令コードかどうかを示す条件判断命令フラグ405である。
独立分岐処理判定部20が図13に示すプログラム51の例を解析して作成した命令コード解析テーブル300を図15に示す。
図15に示すS1001は、図13に示すS1001と対応している。S1001は、命令コードのアドレス401が「0xFF0」であり、命令402が「ADD」であり、条件判断命令である為に、条件判断命令フラグ405が「Yes」となる。
同様に、図15に示すS1002は、図13に示すS1002と対応している。S1002は、命令402が「B」であり、分岐命令コードである為に分岐命令フラグ403が「Yes」となる。
そして、S1003は、命令402が「STR」であり、S1002の分岐命令コードからの飛び先アドレスである為に分岐先命令フラグ404が「Yes」となる。
以下の説明は同様で有る為に省略する。
【0043】
そして、独立分岐処理判定部20は、命令コード解析テーブル300を解析し、各条件分岐処理の内、条件判断命令コードと分岐命令コードとの間に他の処理からの飛び先アドレスが設定されているか否かを、命令コード解析テーブル300を用いて判定する。
ここで、独立分岐処理判定部20は、プログラム51の最後に実行される命令コードから順に解析を行う。実際のプログラムは多くの命令コードを含むもので有るが、ここでは説明を簡単にする為に、図15に示すS1021の命令コードがプログラムの1番最後の命令コードと想定する。
まず、独立分岐処理判定部20は、図16のS161において、命令コード解析テーブル300が示すプログラムの1番最後の命令コード(図15のS1021)からプログラムの先頭の命令コードに向けて検索を行う。そして、独立分岐処理判定部20は、分岐命令フラグ403が「Yes」である命令コードのアドレス401を例えばRAM914などのメモリに記憶する。図15の例では、独立分岐処理判定部20は、まず、S1020のアドレス401「0x2018」を記憶する。
次に、図16のS162において、独立分岐処理判定部20は、更にプログラムの先頭に向けて検索を行い、条件判断命令フラグ405が「Yes」である命令コードのアドレス401を例えばRAM914などのメモリに記憶する。図15の例では、独立分岐処理判定部20は、「0x2010」を、条件判断命令フラグ405が「Yes」である命令コードのアドレスとして記憶する。
そして、図16のS163において、独立分岐処理判定部20は、S162で記憶したアドレスよりも大きく、S161で記憶したアドレス以下(同じアドレスも含む)のアドレスの範囲に分岐先命令フラグが「Yes」である命令コードが存在するか否かを検索する。そして、独立分岐処理判定部20は、分岐先命令フラグ404が「Yes」である命令コードが存在する場合は、図17に示す独立分岐処理フラグ502を「No」に設定する(S165)。一方、独立分岐処理判定部20は、分岐先命令フラグ404が「Yes」である命令コードが存在しない場合は、図17に示す独立分岐処理フラグ502を「Yes」に設定する(S164)。すなわち、条件判断命令コードと分岐命令コードとの間に他の処理からの飛び先アドレスが存在しない場合に、独立分岐処理フラグ502は「Yes」に設定される。
なお、分岐命令コードのアドレスと飛び先アドレスとが同じ場合は、条件判断命令コードと分岐命令コードとの間に他の処理からの飛び先アドレスが存在することになる。一方、条件判断命令コードのアドレスと飛び先アドレスとが同じ場合は、条件判断命令コードと分岐命令コードとの間に他の処理からの飛び先アドレスが存在することにはならない。
図15の例では、「0x2010」より大きく、「0x2018」以下のアドレスの範囲に図15のS1020とS2014との分岐先命令フラグが「Yes」である命令コードが存在する。よって、独立分岐処理判定部20は、S1020の分岐命令コードに対して、独立分岐処理フラグを「No」に設定する。そして、その結果を図17に示す分岐命令テーブル21として出力する。
【0044】
そして、独立分岐処理判定部20は、次の条件分岐処理の判定を行う為に、更にプログラムの先頭に向けて検索を行い、図16に示す処理を繰り返す。
独立分岐処理判定部20は、S1020のアドレス401「0x2018」の次に、S1020のアドレス401「0x2014」が、分岐命令フラグ403が「Yes」である命令コードであるとして、アドレス401「0x2014」を例えばRAM914などのメモリに記憶する。そして、独立分岐処理判定部20は、更にプログラムの先頭に向けて検索を行い、条件判断命令フラグ405が「Yes」である命令コード(S1018)のアドレス401「0x2010」を記憶する。そして、独立分岐処理判定部20は、「0x2010」より大きく、「0x2014」以下のアドレスの範囲に分岐先命令フラグが「Yes」である「0x2014」の命令コード(S1019)が存在する為、独立分岐処理フラグ502を「No」に設定する。
【0045】
更に独立分岐処理判定部20は、プログラムの先頭に向けて検索を行い、S1019のアドレス401「0x2014」の次に、S1012のアドレス401「0x101c」(図15のS1012)が、分岐命令フラグ403が「Yes」である命令コードであるとして、アドレス401「0x101c」を例えばRAM914などのメモリに記憶する。そして、独立分岐処理判定部20は、更にプログラムの先頭に向けて検索を行い、条件判断命令フラグ405が「Yes」である命令コード(S1011)のアドレス401「0x1018」を例えばRAM914などのメモリに記憶する。そして、独立分岐処理判定部20は、「0x1018」より大きく、「0x101c」以下のアドレスの範囲に分岐先命令フラグが「Yes」である命令コードが存在しない為に、独立分岐処理フラグを「Yes」に設定する。
この独立分岐処理フラグ502を「Yes」に設定された分岐命令コードを含む条件分岐処理は、他の処理の影響を受けない独立した条件分岐処理であり、以下「独立分岐処理」と称する。
【0046】
同様に独立分岐処理判定部20は、プログラムの先頭に向けて検索を行い、独立分岐処理か否かの判定を行うが、説明は省略する。
なお、独立分岐処理判定部20は、図15の命令コード解析テーブル300から、条件判断命令コードと分岐命令コードとの間に他の処理からの飛び先アドレスが設定されているか否かを判定出来れば良い。よって、独立分岐処理判定部20の独立分岐処理の判定方法は、本例で説明したアルゴリズム以外の方法で有っても構わない。
【0047】
そして、独立分岐処理判定部20は、命令コード解析テーブル300に含まれる条件分岐処理の解析が終了すると、図17に示す分岐命令テーブル21を出力する。
分岐命令テーブル21は、分岐命令コードのアドレスである分岐命令アドレス301と独立分岐処理で有るか否かを示す独立分岐処理フラグ502で構成される。
【0048】
図18と図19とを用いて削除可能命令抽出部30の説明を行う。
図18は、分岐命令実行結果13の第2の例を示す図である。
図19は、削除可能分岐処理リスト31の第2の例を示す図である。
図18の分岐命令実行結果13は、命令実行部11が実行した図13のプログラム51の第2の例の実行結果を命令実行監視部12が監視したものである。内容は実施の形態1と同じであるので、説明は省略する。(図18の分岐命令実行結果13は、D92とD93との成立アドレス312が、図10の分岐命令実行結果13とは異なっている。)
そして、削除可能命令抽出部30は、分岐命令実行結果13と分岐命令テーブル21とから削除可能分岐処理リスト31を作成する。
図19の削除可能分岐処理リスト31は、図11の削除可能分岐処理リスト31と比べ、分岐命令テーブル21に含まれる独立分岐処理フラグ502が追加されている。(一方向分岐処理フラグ604、分岐先アドレス302の設定方法は実施の形態1と同様である為、説明を省略する。)
【0049】
ここで、削除可能分岐処理リスト31では、以下の4条件を全て満たした分岐処理が削除対象の候補となる。
(条件1)分岐処理種類303が「条件」である。すなわち、対象の分岐処理は、条件分岐処理である。
(条件2)一方向分岐処理フラグ604が「Yes」である。すなわち、対象の分岐処理は、一方向分岐処理である。
(条件3)固定値分岐処理フラグ306が「Yes」である。すなわち、対象の分岐処理は、固定値分岐処理である。
(条件4)独立分岐処理フラグ502が「Yes」である。すなわち、対象の分岐処理は、独立分岐処理である。
そして、削除可能命令抽出部30は、前記条件1〜4を満たす分岐処理の削除可能命令フラグ607を「Yes」に設定する。
【0050】
そして、削除部40は、削除可能分岐処理リスト31で削除可能命令フラグ607が「Yes」である分岐処理をプログラム51から削除する。具体例を図20に示す。
【0051】
図20は、図14のプログラム最適化装置100により最適化された最適化プログラム41の第2の例のフローチャートである。
図19の削除可能分岐処理リスト31において、削除可能命令フラグ607が「Yes」となっているD103の処理(図20のS2003)のみが削除されている。(条件分岐処理の削除後の編集方法は、実施の形態1と同様である為、説明を省略する。)
【0052】
以上の実施の形態により、プログラム最適化装置100は、アセンブリ言語で作成されたプログラム51の最適化も可能である。
すなわち、プログラム最適化装置100は、条件分岐処理における条件判断命令コードと分岐命令コードとの間に他の処理からの飛び先アドレスが設定されているか否かを判定することが可能である。そして、プログラム最適化装置100は、アセンブリ言語で作成されたプログラム51特有の条件分岐処理における条件判断命令コードと分岐命令コードとの間に他の処理からの飛び先アドレスが設定されている条件分岐処理は最適化の対象外を判断する。このことにより、プログラム最適化装置100は、プログラムの実行結果に影響を与えること無く、アセンブリ言語で作成されたプログラム51の最適化を行う。
【0053】
改めて、まとめると、実施の形態1では、所定の条件が成立するか否かを判断する命令コードである条件判断命令コードと、条件判断命令コードが実行された場合の条件判断の実行結果に対応して飛び先アドレスを変える命令コードである分岐命令コードとの命令コードの組を含む処理を示す条件分岐処理を少なくとも1つ含むプログラム51を入力し、入力したプログラム51をメモリを用いて実行する命令実行部11と、固定値が設定された変数である固定値変数のメモリにおけるアドレスを示す固定値アドレスを入力し、命令実行部11が実行するプログラム51に含まれる少なくとも1つの条件分岐処理の実行内容を監視することにより、少なくとも1つの条件分岐処理の内、監視に係る条件分岐処理が、固定値分岐処理であって、命令実行部11が固定値アドレスにアクセスし、アクセスした固定値アドレスから固定値変数を読み込み、読み込んだ固定値変数に基づいて監視に係る条件分岐処理が含む条件判断命令コードにより条件判断を行い、条件判断命令コードの実行結果を用いて、監視に係る条件分岐処理が含む分岐命令コードを実行する、固定値分岐処理であるか否かを判定する命令実行監視部12と、命令実行監視部12が固定値分岐処理であると判定した監視に係る条件分岐処理を、削除可能と判断する削除可能命令抽出部30とを備えたことを特徴とするプログラム最適化装置100について説明した。
更に、実施の形態1では、命令実行監視部12は、命令実行部11が、監視に係る条件分岐処理を実行する毎に、監視に係る条件分岐処理が含む条件判断命令コードの実行により、所定の条件が成立すると判断する成立判断を行うか、所定の条件が成立しないと判断する不成立判断を行うかを監視し、削除可能命令抽出部30は、命令実行監視部12による監視の結果、命令実行部11が、監視に係る条件分岐処理を実行する毎の、どの実行においても、、成立判断と不成立判断との内の特定の一方のみの判断を行う場合に、監視に係る条件分岐処理を特定の飛び先アドレスに向かう一方向分岐処理と判断し、監視に係る条件分岐処理が一方向分岐処理であり、かつ、固定値分岐処理である場合に、監視に係る条件分岐処理を削除可能と判断することを特徴とするプログラム最適化装置100について説明した。
更に、実施の形態1では、プログラム最適化装置100は、さらに、削除可能命令抽出部30が削除可能と判断した条件分岐処理を、プログラム51から削除する削除部40を備えることを特徴とするプログラム最適化装置100について説明した。
更に、実施の形態1では、命令実行監視部12は、固定値アドレスを複数入力し、入力した複数の固定値アドレスの内、命令実行部11がアクセスを行わなかった固定値アドレスを抽出することを特徴とするプログラム最適化装置について説明した。
また、実施の形態2では、命令実行部11が実行するプログラム51の少なくとも1つの条件分岐処理に含まれる分岐命令コードは、さらに、他処理条件判断命令コードであって、分岐命令コードが含まれる条件分岐処理以外の他の処理が含む条件判断命令コードである他処理条件判断命令コードが実行された場合の条件判断の実行結果に対応して飛び先アドレスを変える命令コードであり、プログラム最適化装置100は、さらに、命令実行部11が実行するプログラム51を入力し、入力したプログラム51に含まれる少なくとも1つの条件分岐処理を解析することにより、少なくとも1つの条件分岐処理の内、解析に係る条件分岐処理が含む分岐命令コードが、解析に係る条件分岐処理以外の処理が含む他処理条件判断命令コードが実行された場合の条件判断の実行結果の影響を受けることなく、解析に係る条件分岐処理が含む条件判断命令コードが実行された場合の条件判断の実行結果のみに対応して飛び先アドレスを変える命令コードであると判断した場合に、解析に係る条件分岐処理を他の処理の影響を受けない独立した条件分岐処理である独立分岐処理と判定する独立分岐処理判定部20を備え、削除可能命令抽出部30は、一方向分岐処理と判定し、さらに、独立分岐処理判定部20が独立分岐処理と判定し、さらに、命令実行監視部12が固定値分岐処理と判定した条件分岐処理を、削除可能な条件分岐処理であると判断することを特徴とするプログラム最適化装置100について説明した。
【0054】
更に換言すると、本実施の形態では、システム構成が決まると以降変更されることのない固定値変数テーブル52と、プログラム51(命令コード)を入力し、入力されたプログラム51(命令コード)をシミュレーションし、分岐命令の成立判断(分岐成立)、不成立判断(不成立)を出力すると共に、固定値変数テーブル52の値同士、あるいは固定値変数テーブル52の値と即値の演算結果を分岐命令の条件に使用したかどうかの分岐命令実行結果13を出力する命令シミュレーション部10と、プログラム51(命令コード)から、直前に実行した分岐命令の次命令から分岐命令までの間に条件判断を更新する命令があるかどうかを解析し、分岐命令テーブル21を出力する独立分岐処理判定部20(分岐命令テーブル作成部)と、命令シミュレーション部10が出力した分岐命令実行結果13と独立分岐処理判定部20(分岐命令テーブル作成部)が出力した分岐命令テーブル21から削除可能な分岐命令を抽出し、削除可能分岐処理リスト31を出力する削除可能命令抽出部30と、削除可能命令抽出部30が出力した削除可能分岐処理リスト31とプログラム51(命令コード)からプログラム51(命令コード)の再構築を行い、最適化プログラム41(最適化命令コード)を出力する削除部40(命令コード再構築部)を備えることを特徴としたプログラム最適化装置100(命令コード最適化装置)について説明した。
【0055】
なお、既に、説明したように、本実施の形態1に示すプログラム最適化装置100は、処理装置たるCPU、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータである。
そして、上記したように「〜部」として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。
【符号の説明】
【0056】
10 命令シミュレーション部、11 命令実行部、12 命令実行監視部、13 分岐命令実行結果、20 独立分岐処理判定部、21 分岐命令テーブル、30 削除可能命令抽出部、31 削除可能分岐処理リスト、40 削除部、41 最適化プログラム、50 記憶装置、51 プログラム、52 固定値変数テーブル、100 プログラム最適化装置、101 アドレス、102 サイズ、103 変数名、300 命令コード解析テーブル、301 分岐命令アドレス、302 分岐先アドレス、303 分岐処理種類、304 成立判断回数、305 不成立判断回数、306 固定値分岐処理フラグ、312 成立アドレス、313 不成立アドレス、401 アドレス、402 命令、403 分岐命令フラグ、404 分岐先命令フラグ、405 条件判断命令フラグ、502 独立分岐処理フラグ、604 一方向分岐処理フラグ、607 削除可能命令フラグ、901 表示装置、902 キーボード、903 マウス、904 FDD、905 コンパクトディスク装置、906 プリンタ装置、907 スキャナ装置、910 システムユニット、911 CPU、912 バス、913 ROM、914 RAM、915 通信ボード、920 磁気ディスク装置、921 オペレーティングシステム、922 ウィンドウシステム、923 プログラム群、924 ファイル群、931 電話器、932 ファクシミリ機、940 インターネット、941 ゲートウェイ、942 ローカルエリアネットワーク。

【特許請求の範囲】
【請求項1】
所定の条件が成立するか否かを判断する命令コードである条件判断命令コードと、前記条件判断命令コードが実行された場合の条件判断の実行結果に対応して飛び先アドレスを変える命令コードである分岐命令コードとの命令コードの組を含む処理を示す条件分岐処理を少なくとも1つ含むプログラムを入力し、入力した前記プログラムをメモリを用いて実行する命令実行部と、
固定値が設定された変数である固定値変数の前記メモリにおけるアドレスを示す固定値アドレスを入力し、前記命令実行部が実行する前記プログラムに含まれる前記少なくとも1つの条件分岐処理の実行内容を監視することにより、前記少なくとも1つの条件分岐処理の内、監視に係る条件分岐処理が、固定値分岐処理であって、前記命令実行部が前記固定値アドレスにアクセスし、アクセスした前記固定値アドレスから前記固定値変数を読み込み、読み込んだ前記固定値変数に基づいて前記監視に係る条件分岐処理が含む条件判断命令コードにより条件判断を行い、前記条件判断命令コードの実行結果を用いて、前記監視に係る条件分岐処理が含む分岐命令コードを実行する、前記固定値分岐処理であるか否かを判定する命令実行監視部と、
前記命令実行監視部が前記固定値分岐処理であると判定した前記監視に係る条件分岐処理を、削除可能と判断する削除可能命令抽出部と
を備えたことを特徴とするプログラム最適化装置。
【請求項2】
前記命令実行監視部は、
前記命令実行部が、前記監視に係る条件分岐処理を実行する毎に、前記監視に係る条件分岐処理が含む条件判断命令コードの実行により、前記所定の条件が成立すると判断する成立判断を行うか、前記所定の条件が成立しないと判断する不成立判断を行うかを監視し、
前記削除可能命令抽出部は、
前記命令実行監視部による監視の結果、前記命令実行部が、前記監視に係る条件分岐処理を実行する毎の、どの実行においても、前記成立判断と前記不成立判断との内の特定の一方のみの判断を行う場合に、前記監視に係る条件分岐処理を特定の飛び先アドレスに向かう一方向分岐処理と判断し、前記監視に係る条件分岐処理が前記一方向分岐処理であり、かつ、前記固定値分岐処理である場合に、前記監視に係る条件分岐処理を削除可能と判断することを特徴とする請求項1記載のプログラム最適化装置。
【請求項3】
前記命令実行部が実行する前記プログラムの前記少なくとも1つの条件分岐処理に含まれる前記分岐命令コードは、さらに、
他処理条件判断命令コードであって、前記分岐命令コードが含まれる条件分岐処理以外の他の処理が含む条件判断命令コードである前記他処理条件判断命令コードが実行された場合の条件判断の実行結果に対応して前記飛び先アドレスを変える命令コードであり、
前記プログラム最適化装置は、さらに、
前記命令実行部が実行する前記プログラムを入力し、入力した前記プログラムに含まれる前記少なくとも1つの条件分岐処理を解析することにより、前記少なくとも1つの条件分岐処理の内、解析に係る条件分岐処理が含む分岐命令コードが、前記解析に係る条件分岐処理以外の処理が含む他処理条件判断命令コードが実行された場合の条件判断の実行結果の影響を受けることなく、前記解析に係る条件分岐処理が含む条件判断命令コードが実行された場合の条件判断の実行結果のみに対応して前記飛び先アドレスを変える命令コードであると判断した場合に、前記解析に係る条件分岐処理を前記他の処理の影響を受けない独立した条件分岐処理である独立分岐処理と判定する独立分岐処理判定部を備え、
前記削除可能命令抽出部は、
前記一方向分岐処理と判定し、さらに、前記独立分岐処理判定部が前記独立分岐処理と判定し、さらに、前記命令実行監視部が前記固定値分岐処理と判定した条件分岐処理を、削除可能な条件分岐処理であると判断することを特徴とする請求項1又は2記載のプログラム最適化装置。
【請求項4】
前記プログラム最適化装置は、さらに、
前記削除可能命令抽出部が削除可能と判断した条件分岐処理を、前記プログラムから削除する削除部を備えることを特徴とする請求項1〜3いずれか記載のプログラム最適化装置。
【請求項5】
前記命令実行監視部は、
前記固定値アドレスを複数入力し、入力した前記複数の固定値アドレスの内、前記命令実行部がアクセスを行わなかった前記固定値アドレスを抽出することを特徴とする請求項1〜4いずれか記載のプログラム最適化装置。
【請求項6】
命令実行部が、所定の条件が成立するか否かを判断する命令コードである条件判断命令コードと、前記条件判断命令コードが実行された場合の条件判断の実行結果に対応して飛び先アドレスを変える命令コードである分岐命令コードとの命令コードの組を含む処理を示す条件分岐処理を少なくとも1つ含むプログラムを入力し、入力した前記プログラムをメモリを用いて実行する命令実行ステップと、
命令実行監視部が、固定値が設定された変数である固定値変数の前記メモリにおけるアドレスを示す固定値アドレスを入力し、前記命令実行部が実行する前記プログラムに含まれる前記少なくとも1つの条件分岐処理の実行内容を監視することにより、前記少なくとも1つの条件分岐処理の内、監視に係る条件分岐処理が、固定値分岐処理であって、前記命令実行部が前記固定値アドレスにアクセスし、アクセスした前記固定値アドレスから前記固定値変数を読み込み、読み込んだ前記固定値変数に基づいて前記監視に係る条件分岐処理が含む条件判断命令コードにより条件判断を行う、前記固定値分岐処理であるか否かを判定する命令実行監視ステップと、
削除可能命令抽出部が、前記命令実行監視部が前記固定値分岐処理であると判定した前記監視に係る条件分岐処理を、削除可能と判断する削除可能命令抽出ステップと
を備えたことを特徴とするプログラム最適化方法。
【請求項7】
コンピュータを、請求項1〜5いずれか記載のプログラム最適化装置として機能させることを特徴とするプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate


【公開番号】特開2012−174153(P2012−174153A)
【公開日】平成24年9月10日(2012.9.10)
【国際特許分類】
【出願番号】特願2011−37843(P2011−37843)
【出願日】平成23年2月24日(2011.2.24)
【出願人】(000006013)三菱電機株式会社 (33,312)
【Fターム(参考)】