JP2009211424A - 最適化箇所判定装置及び最適化箇所判定システム及びコンピュータプログラム及び最適化箇所判定方法 - Google Patents

最適化箇所判定装置及び最適化箇所判定システム及びコンピュータプログラム及び最適化箇所判定方法 Download PDF

Info

Publication number
JP2009211424A
JP2009211424A JP2008053950A JP2008053950A JP2009211424A JP 2009211424 A JP2009211424 A JP 2009211424A JP 2008053950 A JP2008053950 A JP 2008053950A JP 2008053950 A JP2008053950 A JP 2008053950A JP 2009211424 A JP2009211424 A JP 2009211424A
Authority
JP
Japan
Prior art keywords
execution
program
unit
location determination
optimization
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2008053950A
Other languages
English (en)
Inventor
Masakatsu Toyama
正勝 外山
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2008053950A priority Critical patent/JP2009211424A/ja
Publication of JP2009211424A publication Critical patent/JP2009211424A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

【課題】限られた開発者資源を有効に活用して、対象プログラムの性能を向上する。
【解決手段】ソース解析部120は、ソース記憶部110が記憶した対象プログラムのソースコードに基づいて、対象プログラムのプログラム構造を解析する。トレース挿入部130は、ソース解析部120が解析したプログラム構造に基づいて、ソースコードにトレース命令を挿入する。実行モジュール生成部140は、トレース挿入部130がトレース命令を挿入したソースコードに基づいて、実行モジュールを生成する。実行装置821は、実行モジュール生成部140が生成した実行モジュールを実行して、実行ログを記録する。最適化箇所判定部160は、実行装置821が記録した実行ログに基づいて、最適化箇所を判定する。
【選択図】図4

Description

この発明は、コンピュータプログラムの性能を向上するための作業を効率化するため、コンピュータプログラムのソースコードを改善すべきプログラムブロックを判定する最適化箇所判定装置に関する。
ソフトウェア開発において、システム試験のような検証段階において、速度性能の未達成または劣化が指摘されることが多々ある。発覚した性能問題に対し、その原因となる箇所を特定する技術として、動的解析がある。これは、プログラムの任意の地点に置かれた命令を実行する時刻を記録し、時系列で分析することによって、ボトルネックとなっている処理が記述された箇所を特定する技術であり、一般的にプロファイリングと呼ばれる。
また一方で、速度性能は処理内容によって決まるが、性能を考慮した最適化プログラミングは、開発者の知識や経験といったスキルにも依存するため、一定品質を保つことが難しい。ソフトウェアの品質を確保するための技術として、静的解析がある。ソースコードに記述された内容を調べることで、プログラムを実行せずに論理的な誤りや問題となりうるコードを予測して指摘する技術である。
特開2001−282546号公報 特開2002−259167号公報
組込み製品の開発では、ハードウェアのコスト制約が厳しいため、ソフトウェアにおいて速度性能を意識した最適なプログラミング技術が求められる。しかしながら、近年の組込みソフトウェア開発規模の拡大によって、組込みソフトウェア開発のスキルを持った開発者の確保が難しくなってきており、様々な品質のソースコードが混在することになっている。
また、大規模なソフトウェアの開発では、機能単位で分割して開発管理を行われ、システム試験のような検証段階ではじめてソフトウェア全体のモジュールが結合される。ある機能単位を他のベンダに委託することもあり、実行時の性能の予測は難しい。
そのため、性能問題の多くは、システム試験といった開発工程の終盤過程に発覚することになる。発覚した性能問題は、処理の見直しやチューニングによって、許容されるレベルまで改善を図ることになるが、現実的には、納期までの短期間において、ソフトウェア構造の変更を伴うような大規模な改修は困難である。また、チューニングの内容は、対象とするハードウェア構成やシステムアーキテクチャによって変わってくるため、開発者のスキルや経験に依存するところが大きい。
この発明は、例えば、上記のような課題を解決するためになされたものであり、対象プログラムの性能を向上するため、限られた開発者資源を有効に活用できるよう、必要な情報を提供することを目的とする。
この発明にかかる最適化箇所判定装置は、
データを記憶する記憶装置と、データを処理する処理装置と、ソース記憶部と、ソース解析部と、トレース挿入部と、実行モジュール生成部と、最適化箇所判定部とを有し、
上記ソース記憶部は、上記記憶装置を用いて、対象となる対象プログラムのソースコードを記憶し、
上記ソース解析部は、上記処理装置を用いて、上記ソース記憶部が記憶したソースコードに基づいて、上記対象プログラムのプログラム構造を解析し、
上記トレース挿入部は、上記処理装置を用いて、上記ソース解析部が解析したプログラム構造に基づいて、上記対象プログラムの実行状況を記録するトレース命令を、上記ソース記憶部が記憶したソースコードに挿入し、
上記実行モジュール生成部は、上記処理装置を用いて、上記トレース挿入部がトレース命令を挿入したソースコードに基づいて、実行装置が実行できる形式の実行モジュールを生成し、
上記最適化箇所判定部は、上記処理装置を用いて、上記実行モジュール生成部が生成した実行モジュールを上記実行装置が実行することにより上記トレース挿入部が挿入したトレース命令を上記実行装置が実行して上記実行装置が記録した実行状況に基づいて、上記ソース解析部が解析したプログラム構造に基づいて上記ソース記憶部が記憶したソースコードを分割した複数のプログラムブロックのうちから、上記ソースコードを改善すべきプログラムブロックを判定することを特徴とする。
この発明にかかる最適化箇所判定装置によれば、実行モジュール生成部が生成した実行モジュールを実行装置が実行することにより記録した実行状況に基づいて、ソースコードを改善すべきプログラムブロックを判定するので、限られた開発者資源を、高い性能改善効果を得られるプログラムブロックの最適化作業に割り当てて、有効活用することができる。
実施の形態1.
実施の形態1について、図1〜図11を用いて説明する。
図1は、この実施の形態におけるプログラム最適化システム800の全体構成の一例を示すシステム構成図である。
プログラム最適化システム800は、プログラムの性能を向上するため、プログラムを最適化するシステムである。
プログラム最適化システム800は、性能評価システム810、最適化箇所判定システム820、ソース作成装置830を有する。
性能評価システム810は、最適化の対象となるプログラム(以下「対象プログラム」と呼ぶ。)のソースコード710に基づいて、対象プログラムの性能を評価し、評価結果720を出力する。性能評価システム810は、例えば、ソースコード710をコンパイルして実行モジュールを生成し、生成した実行モジュールを実際に実行することにより、実行にかかる時間などを測定し、測定した結果を評価結果720とする。
管理者960は、性能評価システム810が出力した評価結果720を見て、対象プログラムの最適化が必要かどうかを判断する。
最適化箇所判定システム820は、管理者960が対象プログラムの最適化が必要だと判断した場合、ソースコード710に基づいて、ソースコード710のなかから、対象プログラムの性能を向上するために最適化すべき箇所(以下「最適化箇所」と呼ぶ。)を判定し、判定結果730を出力する。
管理者960は、最適化箇所判定システム820が出力した判定結果730を見て、複数の開発者950に作業を割り当てる。
複数の開発者950はそれぞれ、割り当てられた作業に基づいて、ソース作成装置830を用いて、ソースコード710を修正し、対象プログラムを最適化する。
性能評価システム810は、修正されたソースコード710に基づいて、再び、対象プログラムの性能を評価する。満足のいく性能が得られるまで、以上の作業が繰り返される。
最適化箇所判定システム820は、最適化箇所判定装置100、実行装置821を有する。
最適化箇所判定装置100は、ソースコード710を入力し、入力したソースコード710に基づいて、最適化箇所を判定するために必要な情報を得るため実行装置821に実行させる実行モジュールを生成する。
実行装置821は、最適化箇所判定装置100が生成した実行モジュールを実行し、実行状況を記録した実行ログを生成する。
最適化箇所判定装置100は、実行装置821が生成した実行ログに基づいて、最適化箇所を判定し、判定結果730を出力する。
図2は、この実施の形態における最適化箇所判定装置100の外観の一例を示す図である。
最適化箇所判定装置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に接続されている。
図3は、この実施の形態における最適化箇所判定装置100のハードウェア資源の一例を示す図である。
最適化箇所判定装置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などは、出力部、出力装置の一例である。
通信装置915は、ファクシミリ機932、電話器931、LAN942等に接続されている。通信装置915は、LAN942に限らず、インターネット940、ISDN等のWAN(ワイドエリアネットワーク)などに接続されていても構わない。インターネット940或いはISDN等のWANに接続されている場合、ゲートウェイ941は不用となる。
磁気ディスク装置920には、オペレーティングシステム921(OS)、ウィンドウシステム922、プログラム群923、ファイル群924が記憶されている。プログラム群923のプログラムは、CPU911、オペレーティングシステム921、ウィンドウシステム922により実行される。
上記プログラム群923には、以下に述べる実施の形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、CPU911により読み出され実行される。
ファイル群924には、以下に述べる実施の形態の説明において、「〜の判定結果」、「〜の計算結果」、「〜の処理結果」として説明する情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリになどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してCPU911によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのCPUの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のCPUの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
また、以下に述べる実施の形態の説明において説明するフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、RAM914のメモリ、FDD904のフレキシブルディスク、CDD905のコンパクトディスク、磁気ディスク装置920の磁気ディスク、その他光ディスク、ミニディスク、DVD(Digital・Versatile・Disk)等の記録媒体に記録される。また、データや信号は、バス912や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
また、以下に述べる実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ROM913に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、DVD等の記録媒体に記憶される。プログラムはCPU911により読み出され、CPU911により実行される。すなわち、プログラムは、以下に述べる「〜部」としてコンピュータを機能させるものである。あるいは、以下に述べる「〜部」の手順や方法をコンピュータに実行させるものである。
なお、プログラム最適化システム800を構成する他の装置も、最適化箇所判定装置100と同様のハードウェア資源を有する。
図4は、この実施の形態における最適化箇所判定システム820の構成の一例を示すブロック構成図である。
最適化箇所判定システム820は、最適化箇所判定装置100、実行装置821のほかに、実行モジュール記憶装置822、実行ログ記憶装置823を有する。
実行モジュール記憶装置822は、磁気ディスク装置920を用いて、最適化箇所判定装置100が生成した実行モジュールを記憶する。
実行ログ記憶装置823は、磁気ディスク装置920を用いて、実行装置821が生成した実行ログを記憶する。
最適化箇所判定装置100は、ソース記憶部110、ソース解析部120、トレース挿入部130、実行モジュール生成部140、実行ログ取得部150、最適化箇所判定部160、判定結果表示部170を有する。
ソース記憶部110は、磁気ディスク装置920を用いて、ソースコード710を記憶する。
ソース解析部120は、CPU911を用いて、ソース記憶部110が記憶したソースコード710に基づいて、対象プログラムのプログラム構造を解析する。例えば、ソース解析部120は、ソースコード710を解析することにより、対象プログラムのうち、関数、サブルーチン、割込処理など一まとまりの処理として実行されるブロック(以下「プログラムブロック」と呼ぶ。)の開始位置、終了位置などの情報を取得する。
トレース挿入部130は、CPU911を用いて、ソース解析部120が解析したプログラム構造に基づいて、ソース記憶部110が記憶したソースコード710にトレース命令を挿入する。トレース命令とは、対象プログラムの実行状況を記録する命令であり、実行装置821がトレース命令を実行すると、例えば、ソースコード710内での位置、トレース命令が実行された時刻などの情報を、実行ログに記録する。
実行モジュール生成部140は、CPU911を用いて、トレース挿入部130がトレース命令を挿入したソースコード(以下「動態測定用コード」と呼ぶ。)に基づいて、実行装置821が実行できる形式の実行モジュール(以下「動態測定用モジュール」と呼ぶ。)を生成する。例えば、実行モジュール生成部140は、CPU911を用いて、動態測定用コードをコンパイルして、動態測定用モジュールを生成する。
実行モジュール記憶装置822は、磁気ディスク装置920を用いて、実行モジュール生成部140が生成した動態測定用モジュールを記憶する。
実行装置821は、CPU911を用いて、実行モジュール記憶装置822が記憶した動態測定用モジュールを実行する。実行装置821が動態測定用モジュールを実行することにより、トレース挿入部130が挿入したトレース命令を実行装置821が実行し、実行ログを記録する。
実行ログ記憶装置823は、磁気ディスク装置920を用いて、実行装置821が記録した実行ログを記憶する。
実行ログ取得部150は、CPU911を用いて、実行ログ記憶装置823が記憶した実行ログを取得する。
最適化箇所判定部160は、CPU911を用いて、実行ログ取得部150が取得した実行ログに基づいて、最適化箇所を判定する。最適化箇所判定部160は、最適化箇所として、ソース解析部120が解析した解析結果に基づいて、ソースコード710をプログラムブロックに分割し、分割したプログラムブロックのなかから、最適化箇所を判定する。
判定結果表示部170は、表示装置901を用いて、最適化箇所判定部160が判定した最適化箇所の判定結果を表示して、管理者960に通知する。
図5は、この実施の形態における最適化箇所判定装置100が最適化箇所を判定する最適化箇所判定処理の流れの一例を示すフローチャート図である。
ソース解析工程S511において、ソース解析部120は、CPU911を用いて、ソース記憶部110が記憶したソースコード710を入力する。ソース解析部120は、CPU911を用いて、入力したソースコード710に基づいて、対象プログラムのプログラム構造を解析し、プログラムブロックの開始位置などの情報を取得する。ソース解析部120は、磁気ディスク装置920を用いて、取得した情報を表わすデータ(以下「解析結果データ」と呼ぶ。)を記憶する。
トレース挿入工程S512において、トレース挿入部130は、CPU911を用いて、ソース記憶部110が記憶したソースコード710と、ソース解析工程S512でソース解析部120が記憶した解析結果データとを入力する。トレース挿入部130は、CPU911を用いて、入力した解析結果データが表わす情報に基づいて、プログラムブロックの開始位置など、トレース命令を挿入すべき位置を判別する。トレース挿入部130は、CPU911を用いて、入力したソースコード710に基づいて、判別した位置にトレース命令を挿入して、動態測定用コードを生成する。トレース挿入部130は、磁気ディスク装置920を用いて、生成した動態測定用コードを記憶する。
実行モジュール生成工程S513において、実行モジュール生成部140は、CPU911を用いて、トレース挿入工程S512でトレース挿入部130が記憶した動態測定用コードを入力する。実行モジュール生成部140は、CPU911を用いて、入力した動態測定用コードに基づいて、動態測定用モジュールを生成する。実行モジュール生成部140は、CPU911を用いて、生成した動態測定用モジュールを出力する。
実行モジュール記憶装置822は、CPU911を用いて、実行モジュール生成部140が出力した動態測定用モジュールを入力する。実行モジュール記憶装置822は、磁気ディスク装置920を用いて、入力した動態測定用モジュールを記憶する。
モジュール実行工程S514において、実行装置821は、CPU911を用いて、実行モジュール生成工程S513で実行モジュール記憶装置822が記憶した動態測定用モジュールを入力する。実行装置821は、CPU911を用いて、入力した動態測定用モジュールを実行する。実行装置821は、CPU911を用いて、動態測定用モジュールに含まれるトレース命令を実行することにより、実行時刻などの実行状況を表わすデータを出力する。
実行ログ記憶装置823は、CPU911を用いて、実行装置821が出力したデータを入力する。実行ログ記憶装置823は、磁気ディスク装置920を用いて、入力したデータが表わす実行状況を、実行ログとして記憶する。
実行装置821による動態測定用モジュールの実行が終了したのち、実行ログ取得工程S515において、実行ログ取得部150は、CPU911を用いて、実行ログ記憶装置823が記憶した実行ログを入力する。実行ログ取得部150は、磁気ディスク装置920を用いて、入力した実行ログを記憶する。
最適化箇所判定工程S516において、最適化箇所判定部160は、CPU911を用いて、実行ログ取得工程S515で実行ログ取得部150が記憶した実行ログを入力する。最適化箇所判定部160は、CPU911を用いて、入力した実行ログに基づいて、最適化箇所を判定する。最適化箇所判定部160は、磁気ディスク装置920を用いて、判定した結果を表わすデータを記憶する。
判定結果表示工程S517において、判定結果表示部170は、CPU911を用いて、最適化箇所判定工程S516で最適化箇所判定部160が記憶したデータを入力する。判定結果表示部170は、CPU911を用いて、入力したデータが表わす判定結果730を表示する。
図6は、この実施の形態におけるソース解析部120が生成する解析結果データ740の一例を示す図である。
解析結果データ740には、例えば、関数名741、パス名742、開始行番号743、終了行番号744、リターン行番号リスト745などのデータが含まれる。
関数名741は、「関数」(プログラムブロック)の名称を表わす文字列データである。
パス名742は、ソース記憶部110が磁気ディスク装置920に記憶したテキストファイル(ソースコード710)のパスを表わす文字列データである。
開始行番号743は、パス名742が表わすテキストファイルのなかで、関数名741が表わす「関数」の始まりである行の行番号を表わす数値データである。
終了行番号744は、パス名742が表わすテキストファイルのなかで、関数名741が表わす「関数」の終りである行の行番号を表わす数値データである。
リターン行番号リスト745は、パス名742が表わすテキストファイルのなかで、関数名741が表わす「関数」のうち最後に実行する命令(例えば「return文」)を記述した行の行番号のリストを表わすデータである。条件分岐などにより、一つの「関数」のなかに、最後に実行する命令が複数ある場合もあるので、リターン行番号リスト745は、1以上の行番号からなるリストを表わす。
この例において、ソース記憶部110は三つのソースコード710「/src/sample.c」「/src/util.c」「/src/drv.c」を記憶している。
ソース解析部120は、この三つのソースコード710を解析して、四つの関数(プログラムブロック)「Func_1」「Func_2」「Func_3」「Func_4」が含まれていることを判別し、関数「Func_1」がソースコード710「/src/sample.c」のなかの12行目から72行目までに記述されていることを判別し、関数「Func_1」のうち最後に実行する命令が、ソースコード710「/src/sample.c」のなかの71行目に記述されていることを判別して、解析結果データ740を生成している。
例えば、ソース解析部120は、CPU911を用いて、ソースコード710を一行ずつ読み込み、読み込んだ一行分のテキストが、「型宣言」(void、int、doubleなど)+「関数名」(ソース解析部120が抽出する「Func_1」などの文字列)+「(」+「引数の型及び引数名のリスト」+「)」+「{」という形式に合致するか否かを判定することにより、ソースコード710に含まれる関数を判別する。
ソース解析部120は、CPU911を用いて、上述した形式に合致する行が、ソースコード710のなかの何行目にあたるかを算出して、算出した行番号を表わすデータを開始行番号743とする。
また、ソース解析部120は、CPU911を用いて、その行に含まれる「{」と対応する「}」が、ソースコード710のなかの何行目に記述されているかを算出して、算出した行番号を表わすデータを終了行番号744とする。
更に、ソース解析部120は、CPU911を用いて、ソースコード710のなかの開始行番号743が表わす行と終了行番号744が表わす行との間から、「return文」が記述された行を探して、「ruturn文」が記述された行の行番号のリストを生成し、生成したリストを表わすデータをリターン行番号リスト745とする。
トレース挿入部130は、CPU911を用いて、ソース解析部120が生成した解析結果データ740に基づいて、トレース命令をソースコード710に挿入する。
この例において、トレース挿入部130は、CPU911を用いて、ソースコード710「/src/sample.c」の12行目(開始行番号743が表わす行)とその次の行(13行目)との間に、関数「Func_1」の入口における実行時刻を実行ログに書き出すトレース命令を挿入し、ソースコード710「/src/sample.c」の71行目(リターン行番号リスト745が表わす行)とその前の行(70行目)との間に、関数「Func_1」の出口における実行時刻を実行ログに書き出すトレース命令を挿入する。同様に、トレース挿入部130は、CPU911を用いて、ソースコード710「/src/util.c」の15行目と16行目との間と、43行目と44行目との間と、47行目と48行目との間と、62行目と63行目との間と、145行目と146行目との間と、ソースコード710「/src/drv.c」の10行目と11行目との間と、28行目と29行目との間とに、それぞれトレース命令を挿入する。
図7は、この実施の形態における実行装置821が動態測定用モジュールを実行して、生成する実行ログ750の一例を表わす図である。
実行ログ750には、例えば、実行時刻751、トレース種別752、トレースパラメータ753などのデータが含まれる。
実行時刻751は、トレース命令が実行された時刻を、例えばミリ秒単位の秒数で表わす数値データである。
トレース種別752は、トレース命令が挿入された場所の種別を表わすデータである。り、この例では、関数の入口であることを表わす「func entry」、関数の出口であることを表わす「func exit」などの文字列データをトレース種別752としているが、これらの代わりに、関数の入口であることを表わす「1」、関数の出口であることを表わす「2」などの数値データを用いてもよい。
トレースパラメータ753は、トレース命令が挿入されたプログラムブロックの名称を表わす文字列データである。
次に、最適化箇所判定部160の詳細について説明する。
図8は、この実施の形態における最適化箇所判定部160の内部ブロックの構成の一例を示す詳細ブロック図である。
最適化箇所判定部160は、動的解析部161、静的解析部165、作業優先度算出部169を有する。
動的解析部161は、実行ログ取得部150が取得した実行ログ750に基づいて、最適化箇所を判定するのに必要な情報を算出する。動的解析部161は、例えば、プログラムブロックの実行時間、呼出し回数、呼出し関係、ループ回数、通過経路、その他実行ログ750の解析によって抽出可能な情報を算出する。
動的解析部161は、実行回数算出部162、実行時間算出部163、総実行時間算出部164を有する。
実行回数算出部162は、CPU911を用いて、実行ログ750に基づいて、プログラムブロックごとに、そのプログラムブロックが実行された回数を算出する。一般的に、実行回数が多いプログラムブロックほど最適化の効果が大きく、実行回数が少ないプログラムブロックほど最適化の効果が小さくなる。
実行時間算出部163は、CPU911を用いて、実行ログ750に基づいて、各プログラムブロックが実行されるたびごとに、そのプログラムブロックの実行にかかった実質実行時間(他のプログラムブロックを呼び出して、実行終了を待っていた時間や、割込み処理を実行していた時間を除く時間)を算出する。
総実行時間算出部164は、CPU911を用いて、実行時間算出部163が算出した各プログラムブロックの実質実行時間に基づいて、プログラムブロックごとに、実質実行時間を合計し、そのプログラムブロックの総実行時間を算出する。一般的に、総実行時間が長いプログラムブロックほど最適化の効果が大きく、総実行時間が短いプログラムブロックほど最適化の効果が小さくなる。
静的解析部165は、ソース解析部120が生成した解析結果データ740に基づいて、最適化箇所を判定するのに必要な情報を算出する。静的解析部165は、例えば、プログラムブロックの開始地点、終了地点、命令ライン数、ループ・分岐ブロックの種別・開始点・終了点、関数呼び出し関係、その他静的解析によって抽出可能な情報を算出する。
静的解析部165は、規模算出部166、複雑度算出部167、難易度予測部168を有する。
規模算出部166は、CPU911を用いて、解析結果データ740に基づいて、プログラムブロックごとに、そのプログラムブロックの規模を算出する。プログラムブロックの規模とは、例えば、そのプログラムブロックに含まれる命令の数や、ソースコード710におけるそのプログラムブロックの行数などである。一般的に、規模の大きいプログラムブロックほど最適化の余地が大きく、規模が小さいプログラムブロックほどそれ以上最適化することが難しくなる。
複雑度算出部167は、CPU911を用いて、解析結果データ740に基づいて、プログラムブロックごとに、そのプログラムブロックの複雑度を算出する。プログラムブロックの複雑度とは、例えば、繰り返しループのネストの深さや条件分岐の数などである。一般的に、複雑なプログラムブロックほど最適化の余地が大きく、単純なプログラムブロックほどそれ以上最適化することが難しくなる。
難易度予測部168は、CPU911を用いて、規模算出部166が算出したプログラムブロックの規模と、複雑度算出部167が算出したプログラムブロックの複雑度とに基づいて、プログラムブロックごとに、そのプログラムブロックを最適化する作業の難易度(以下「最適化難易度」と呼ぶ。)を予測する。
作業優先度算出部169は、CPU911を用いて、実行回数算出部162が算出したプログラムブロックの実行回数と、総実行時間算出部164が算出したプログラムブロックの総実行時間と、難易度予測部168が算出したプログラムブロックの最適化難易度とに基づいて、プログラムブロックごとに、そのプログラムブロックを最適化する作業の優先度(以下「作業優先度」と呼ぶ。)を算出する。
例えば、作業優先度算出部169は、CPU911を用いて、プログラムブロックの実行回数が多い場合や、プログラムブロックの総実行時間が長い場合など、最適化の効果が大きいと予測されるプログラムブロックについては、高い作業優先度を算出し、逆に、最適化の効果が小さいと予測されるプログラムブロックについては、低い作業優先度を算出する。また、作業優先度算出部169は、CPU911を用いて、プログラムブロックの規模が大きい場合や、プログラムブロックの複雑度が高い場合など、最適化難易度が低いと予測されるプログラムブロックについては、高い作業優先度を算出し、逆に、最適化難易度が高いと予測されるプログラムブロックについては、低い作業優先度を算出する。
判定結果表示部170は、表示装置901を用いて、作業優先度算出部169が算出した作業優先度を、最適化箇所の判定結果730として表示する。例えば、判定結果表示部170は、表示装置901を用いて、作業優先度の高いものから順に、プログラムブロックを表示する。
大規模なソフトウェアの開発作業においては、ソフトウェアの各部分を多数の開発者が分担して作成し、開発の最終段階が近づいてから、多数の開発者が開発した各部分を組み合わせて、全体としての動作を検証する。
その結果、所望の処理速度が得られないなどして、対象プログラムの最適化が必要であることが判明した場合、開発期間が残りわずかであることから、開発者資源を有効に活用して、対象プログラムの最適化作業を行う必要がある。
実行回数が多いプログラムブロックは、プログラムの最適化によりわずかでも実行時間を短くすることができれば、対象プログラム全体としての実行時間を大幅に短くすることができるので、最適化の効果が大きく、優先的に最適化作業を行うべきである。
また、対象プログラム全体としての実行時間に対して、総実行時間の割合が高いプログラムブロックも、プログラムの最適化により実行時間を短くすることができれば、対象プログラム全体としての実行時間を短くすることができるので、最適化の効果が大きく、優先的に最適化作業を行うべきである。
逆に、最適化難易度の高いプログラムブロックは、最適化作業を行っても、実行時間をあまり短くすることができず、投入した開発者資源が無駄になってしまう場合があるので、最適化作業の優先順位を低くするべきである。
この実施の形態における最適化箇所判定装置100は、このような基準に基づいて、プログラムブロックごとの作業優先度を算出するので、管理者960が、どのプログラムブロックの最適化に開発者資源を投入すればよいかを容易に判断でき、対象プログラムの最適化作業を効率的に行うことができる。
なお、判定結果表示部170は、表示装置901を用いて、難易度予測部168が予測した最適化難易度を、作業優先度とともに表示してもよい。
そうすれば、管理者960が、作業優先度が高いが最適化難易度も高いプログラムブロックの最適化作業に、スキルの高い開発者を投入するなど、開発者のスキルに応じた作業を割り当てることができるので、対象プログラムの最適化作業を、更に効率的に行うことができる。
図9は、この実施の形態における最適化箇所判定部160が、最適化箇所を判定する最適化箇所判定工程S516の詳細な処理の流れの一例を示すフローチャート図である。
規模算出工程S521において、規模算出部166は、CPU911を用いて、ソース解析工程S511でソース解析部120が記憶した解析結果データ740を入力する。規模算出部166は、CPU911を用いて、入力した解析結果データ740に基づいて、プログラムブロックそれぞれについて、プログラムブロックの規模を算出する。規模算出部166は、RAM914を用いて、算出した規模を表わすデータ(以下「規模データ」と呼ぶ。)を記憶する。
複雑度算出工程S522において、複雑度算出部167は、CPU911を用いて、ソース解析工程S511でソース解析部120が記憶した解析結果データ740を入力する。複雑度算出部167は、CPU911を用いて、入力した解析結果データ740に基づいて、プログラムブロックそれぞれについて、プログラムブロックの複雑度を算出する。複雑度算出部167は、RAM914を用いて、算出した複雑度を表わすデータ(以下「複雑度データ」と呼ぶ。)を記憶する。
難易度予測工程S523において、難易度予測部168は、CPU911を用いて、規模算出工程S521で規模算出部166が記憶した規模データと、複雑度算出工程S522で複雑度算出部167が記憶した複雑度データとを入力する。難易度予測部168は、CPU911を用いて、入力した規模データと複雑度データとが表わすプログラムブロックの規模と複雑度とに基づいて、プログラムブロックそれぞれの最適化難易度を予測する。難易度予測部168は、RAM914を用いて、予測した最適化難易度を表わすデータ(以下「難易度データ」と呼ぶ。)を記憶する。
実行時間算出工程S524において、実行時間算出部163は、CPU911を用いて、実行ログ取得工程S515で実行ログ取得部150が記憶した実行ログを入力する。実行時間算出部163は、CPU911を用いて、入力した実行ログに基づいて、プログラムブロックの実行時それぞれについて、実質実行時間を算出する。実行時間算出部163は、RAM914を用いて、算出した実質実行時間を表わすデータ(以下「実行時間データ」と呼ぶ。)を記憶する。
実行回数算出工程S525において、実行回数算出部162は、CPU911を用いて、実行ログ取得工程S515で実行ログ取得部150が記憶した実行ログを入力する。実行回数算出部162は、CPU911を用いて、入力した実行ログに基づいて、プログラムブロックそれぞれについて、実行回数を算出する。実行回数算出部162は、RAM914を用いて、算出した実行回数を表わすデータ(以下「実行回数データ」と呼ぶ。)を記憶する。
総実行時間算出工程S526において、総実行時間算出部164は、CPU911を用いて、実行時間算出工程S524で実行時間算出部163が記憶した実行時間データを入力する。総実行時間算出部164は、CPU911を用いて、入力した実行時間データが表わす実質実行時間に基づいて、プログラムブロックそれぞれについて、総実行時間を算出する。総実行時間算出部164は、RAM914を用いて、算出した総実行時間を表わすデータ(以下「総実行時間データ」と呼ぶ。)を記憶する。
作業優先度算出工程S527において、作業優先度算出部169は、CPU911を用いて、難易度予測工程S523で難易度予測部168が記憶した難易度データと、実行回数算出工程S525で実行回数算出部162が記憶した実行回数データと、総実行時間算出工程S526で総実行時間算出部164が記憶した総実行時間データとを入力する。作業優先度算出部169は、CPU911を用いて、入力した難易度データと実行回数データと総実行時間データとが表わす最適化難易度と実行回数と総実行時間とに基づいて、プログラムブロックそれぞれについて、作業優先度を算出する。作業優先度算出部169は、磁気ディスク装置920を用いて、算出した作業優先度を表わすデータ(以下「作業優先度データ」と呼ぶ。)を判定結果730として記憶する。
図10は、この実施の形態における最適化箇所判定部160が生成する各種データの一例を表わす図である。
規模算出部166は、CPU911を用いて、ソース解析部120が生成した解析結果データ740に基づいて、規模データ782を生成する。
規模データ782には、例えば、関数名761、規模762などのデータが含まれる。
関数名761は、解析結果データ740に含まれる関数名741と同じく、プログラムブロックの名称を表わす文字列データである。
規模762は、そのプログラムブロックの規模を表わす数値データである。
例えば、規模算出部166は、CPU911を用いて、ソース解析部120が生成した解析結果データ740を一行ずつ入力し、入力した解析結果データ740に基づいて、関数名741と、開始行番号743と、終了行番号744とを取得する。規模算出部166は、CPU911を用いて、取得した関数名741を関数名761とする。規模算出部166は、CPU911を用いて、取得した開始行番号743と終了行番号744とに基づいて、そのプログラムブロックの行数(終了行番号744−開始行番号743)を算出して、規模762とする。
なお、規模算出部166がプログラムブロックの行数を算出して規模762とする場合、規模算出部166は、空行やコメント行を除いた行数を算出して、規模762としてもよい。そのほうが、最適化難易度の予測精度を高めることができるので、好ましい。
また、規模算出部166が空行やコメント行を除いた行数を算出して規模762とする場合、規模算出部166がソースコード710を読み込んで、空行やコメント行の行数を算出してもよいし、ソース解析部120が空行やコメント行の行数を算出し、算出した行数を表わすデータを含む解析結果データ740を生成してもよい。
複雑度算出部167は、CPU911を用いて、ソース解析部120が生成した解析結果データ740に基づいて、複雑度データ783を生成する。
複雑度データ783には、例えば、関数名761、複雑度763などのデータが含まれる。
関数名761は、規模データ782に含まれる関数名761と同様である。
複雑度763は、そのプログラムブロックの複雑度を表わす数値データである。
例えば、複雑度算出部167は、CPU911を用いて、ソース解析部120が生成した解析結果データ740を一行ずつ入力し、入力した解析結果データ740に基づいて、関数名741と、開始行番号743と、終了行番号744とを取得する。複雑度算出部167は、CPU911を用いて、取得した関数名741を関数名761とする。複雑度算出部167は、CPU911を用いて、取得した開始行番号743と終了行番号744とに基づいて、ソース記憶部110が記憶したソースコード710のうち、開始行番号743〜終了行番号744までの部分を入力する。複雑度算出部167は、CPU911を用いて、入力したソースコード710の一部に含まれる文字「{」の数を数えることにより、そのプログラムブロックに含まれるブロックの数を算出し、複雑度763とする。
なお、ソース解析部120が複雑度763を算出し、算出した複雑度763を含む解析結果データ740を生成してもよい。
難易度予測部168は、CPU911を用いて、規模算出部166が生成した規模データ782と、複雑度算出部167が生成した複雑度データ783とに基づいて、難易度データ784を生成する。
難易度データ784には、例えば、関数名761、最適化難易度764などのデータが含まれる。
関数名761は、規模データ782や複雑度データ783に含まれる関数名761と同様である。
最適化難易度764は、そのプログラムブロックの最適化難易度を表わす数値データである。
例えば、難易度予測部168は、磁気ディスク装置920を用いて、あらかじめ難易度テーブル770を記憶している。難易度テーブル770は、プログラムブロックの規模と、その規模のプログラムブロックについて予測される最適化難易度との関係を表わすテーブルであり、例えば、規模上限771と難易度772とを含む。規模上限771は、プログラムブロックの規模の上限を表わす数値データであり、難易度772は、その規模のプログラムブロックについて予測される最適化難易度を表わす数値データである。この例における難易度テーブル770は、プログラムブロックの規模が「10」以下であれば最適化難易度は「1」、規模が「11」〜「20」であれば最適化難易度は「2」と予測されることを表わしている。なお、この例では、最適化難易度の数値が大きいほど、最適化が容易であるという評価を表わす。
難易度予測部168は、CPU911を用いて、規模算出部166が生成した規模データ782を一行ずつ入力し、入力した規模データ782に基づいて、関数名761と、規模データ782とを取得する。難易度予測部168は、CPU911を用いて、取得した規模データ782に基づいて、難易度テーブル770を参照し、そのプログラムブロックについて予測される難易度772を取得する。
難易度予測部168は、同様に、磁気ディスク装置920を用いて、あらかじめ、プログラムブロックの複雑度と、その複雑度のプログラムブロックについて予測される最適化難易度とに関係を表わす難易度テーブルも記憶している(図示せず)。難易度予測部168は、CPU911を用いて、複雑度算出部167が生成した複雑度データ783を一行ずつ入力し、入力した規模データ782に基づいて、関数名761と、複雑度データ783とを取得する。難易度予測部168は、CPU911を用いて、取得した複雑度データ783に基づいて、難易度テーブルを参照し、そのプログラムブロックについて予測される難易度を算出する。
難易度予測部168は、CPU911を用いて、同一のプログラムブロックについて、規模データ782に基づいて予測した最適化難易度と、複雑度データ783に基づいて予測した最適化難易度とに基づいて、二つの最適化難易度の合計あるいは平均を算出し、最適化難易度764とする。
図11は、この実施の形態における最適化箇所判定部160が生成する各種データの一例を表わす図である。
総実行時間算出部164は、CPU911を用いて、実行ログ取得部150が取得した実行ログ750に基づいて実行時間算出部163が生成した実行時間データ(図示せず)に基づいて、総実行時間データ785を生成する。
総実行時間データ785には、例えば、関数名761、総実行時間765などのデータが含まれる。
関数名761は、難易度データ784に含まれる関数名761と同様である。
総実行時間765は、そのプログラムブロックの総実行時間を表わす数値データである。
例えば、実行時間算出部163は、CPU911を用いて、実行ログ取得部150が取得した実行ログ750を一行づつ入力し、入力した実行ログ750に基づいて、実行時刻751、トレース種別752、トレースパラメータ753を取得する。
実行時間算出部163は、CPU911を用いて、取得したトレース種別752に基づいて、トレースの種別を判定する。
トレース種別752が「func entry」または「int entry」である場合、実行時間算出部163は、RAM914を用いて、実行時刻751とトレースパラメータ753とを、実行中リストの末尾に追加して記憶する。
トレース種別752が「func exit」または「int exit」である場合、実行時間算出部163は、CPU911を用いて、記憶した実行中リストの末尾から実行時刻とトレースパラメータとを取り出し、取り出したトレースパラメータがトレースパラメータ753と一致すれば、実行中リストの末尾から取り出した実行時刻とトレースパラメータとを実行中リストから取り除く。実行時間算出部163は、CPU911を用いて、実行時刻751と、取り出した実行時刻との差を算出し、実行時間とする。実行時間算出部163は、記憶した実行中リストに含まれる実行時刻それぞれに、算出した実行時間を加算する。これにより、あるプログラムブロックの実行中に他のプログラムブロックや割込処理を実行した場合、他のプログラムブロックなどの実行にかかった時間を除き、実質的にそのプログラムブロックの実行にかかった時間を算出できる。実行時間算出部163は、CPU911を用いて、トレース種別752が「func exit」である場合、トレースパラメータ753を関数名とし、算出した実行時間を実質実行時間として、磁気ディスク装置920を用いて、実行時間データに追加して記憶する。
総実行時間算出部164は、CPU911を用いて、実行時間算出部163が生成した実行時間データを入力し、入力した実質実行時間データに基づいて、関数名と、実質実行時間とを取得する。実行時間算出部163は、CPU911を用いて、取得した関数名が表わすプログラムブロックについて総実行時間を記憶しているか判定し、記憶していないと判定した場合、RAM914を用いて、取得した実質実行時間を、そのプログラムブロックについての総実行時間として記憶する。実行時間算出部163は、CPU911を用いて、取得した関数名が表わすプログラムブロックについて総実行時間を既に記憶していると判定した場合、CPU911を用いて、取得した実質実行時間を、記憶したそのプログラムブロックについての総実行時間に加算し、RAM914を用いて記憶する。すべての実行時間データについての処理が終了したのち、総実行時間算出部164は、CPU911を用いて、記憶した総実行時間を総実行時間765として含む総実行時間データ785を生成する。
実行回数算出部162は、CPU911を用いて、実行ログ取得部150が取得した実行ログ750に基づいて、実行回数データ786を生成する。
実行回数データ786には、例えば、関数名761、実行回数766などのデータが含まれる。
関数名761は、総実行時間データ785に含まれる関数名761と同様である。
実行回数766は、そのプログラムブロックの実行回数を表わす数値データである。
例えば、実行回数算出部162は、CPU911を用いて、実行ログ取得部150が取得した実行ログ750を一行ずつ入力し、入力した実行ログ750に基づいて、トレース種別752、トレースパラメータ753を取得する。実行回数算出部162は、CPU911を用いて、取得したトレース種別752に基づいて、トレース種別752が「func entry」であるか判定する。実行回数算出部162は、CPU911を用いて、トレース種別752が「func entry」であると判定した場合、トレースパラメータ753が表わすプログラムブロックの実行回数を一つ増やし、RAM914を用いて記憶する。すべての実行ログ750についての処理が終了したのち、実行回数算出部162は、CPU911を用いて、記憶した実行回数を実行回数766として含む実行回数データ786を生成する。
作業優先度算出部169は、CPU911を用いて、総実行時間算出部164が生成した総実行時間データ785と、実行回数算出部162が生成した実行回数データ786と、難易度予測部168が生成した難易度データ784とに基づいて、判定結果730を生成する。
判定結果730には、例えば、関数名731、難易度データ732、作業優先度データ733などのデータが含まれる。
関数名731は、難易度データ784、総実行時間データ785、実行回数データ786に含まれる関数名761と同様、プログラムブロックの名称を表わす文字列データである。
難易度データ732は、そのプログラムブロックの最適化難易度を表わす数値データである。この例では、数値が小さいほどそのプログラムブロックの最適化が難しいことを表わす。
作業優先度データ733は、そのプログラムブロックの作業優先度を表わす数値データである。この例では、数値が大きいほどそのプログラムブロックの最適化作業の優先度が高いことを表わす。
例えば、作業優先度算出部169は、CPU911を用いて、難易度予測部168が生成した難易度データ784と、総実行時間算出部164が生成した総実行時間データ785と、実行回数算出部162が生成した実行回数データ786とを入力し、関数名761と、最適化難易度764と、総実行時間765と、実行回数766とを取得する。作業優先度算出部169は、CPU911を用いて、同じプログラムブロックについて、最適化難易度764と実行回数データ786とに基づいて、最適化難易度764と実行回数データ786との積を算出し、作業優先度とする。これにより、実行回数の多いプログラムブロックは作業優先度が高くなり、最適化難易度が高いプログラムブロックは作業優先度が低くなる。作業優先度算出部169は、CPU911を用いて、取得した総実行時間765に基づいて、作業優先度補正値を算出し、算出した作業優先度補正値を、算出した作業優先度に加算する。これにより、総実行時間に応じた作業優先度を算出できる。作業優先度算出部169は、CPU911を用いて、算出した作業優先度を表わす作業優先度データを生成し、生成した作業優先度データを作業優先度データ733として含み、取得した最適化難易度764を難易度データ732として含む判定結果730を生成する。
判定結果表示部170は、CPU911を用いて、作業優先度算出部169が生成した判定結果730を入力し、入力した判定結果730に基づいて、関数名731、難易度データ732、作業優先度データ733を取得する。判定結果表示部170は、CPU911を用いて、入力した判定結果730を、取得した作業優先度データ733に基づいて、作業優先度データ733が表わす作業優先度が高い順に並べ替え、表示装置901を用いて表示する。
この実施の形態における最適化箇所判定装置100は、データを記憶する記憶装置(磁気ディスク装置920、RAM914など)と、データを処理する処理装置(CPU911)と、ソース記憶部110と、ソース解析部120と、トレース挿入部130と、実行モジュール生成部140と、最適化箇所判定部160とを有する。
上記ソース記憶部110は、上記記憶装置(磁気ディスク装置920)を用いて、対象となる対象プログラムのソースコード710を記憶する。
上記ソース解析部120は、上記処理装置(CPU911)を用いて、上記ソース記憶部110が記憶したソースコード710に基づいて、上記対象プログラムのプログラム構造を解析する。
上記トレース挿入部130は、上記処理装置(CPU911)を用いて、上記ソース解析部120が解析したプログラム構造に基づいて、上記対象プログラムの実行状況(実行ログ750)を記録するトレース命令を、上記ソース記憶部110が記憶したソースコード710に挿入する。
上記実行モジュール生成部140は、上記処理装置(CPU911)を用いて、上記トレース挿入部130がトレース命令を挿入したソースコード710に基づいて、実行装置821が実行できる形式の実行モジュール(動態測定用モジュール)を生成する。
上記最適化箇所判定部160は、上記処理装置(CPU911)を用いて、上記実行モジュール生成部140が生成した実行モジュール(動態測定用モジュール)を上記実行装置821が実行することにより上記トレース挿入部130が挿入したトレース命令を上記実行装置821が実行して上記実行装置821が記録した実行状況(実行ログ750)に基づいて、上記ソース解析部120が解析したプログラム構造に基づいて上記ソース記憶部110が記憶したソースコードを分割した複数のプログラムブロック(関数)のうちから、上記ソースコード710を改善すべきプログラムブロックを判定する。
この実施の形態における最適化箇所判定装置100によれば、実行モジュール生成部140が生成した実行モジュールを実行装置821が実行することにより記録した実行状況に基づいて、ソースコード710を改善すべきプログラムブロックを判定するので、限られた開発者資源を、高い性能改善効果を得られるプログラムブロックの最適化作業に割り当てて、有効活用することができる。
この実施の形態における最適化箇所判定部160は、上記処理装置(CPU911)を用いて、上記複数のプログラムブロックそれぞれについて、上記ソースコード710を改善することにより得られる上記対象プログラムの性能向上の効果を予測し、予測した性能向上の効果に基づいて、上記ソースコード710を改善すべきプログラムブロックを判定する。
この実施の形態における最適化箇所判定装置100によれば、プログラムブロックのソースコード710を改善することによる対象プログラムの性能向上の効果を最適化箇所判定部160が予測し、予測した性能向上の効果に基づいて、ソースコード710を改善すべきプログラムブロックを判定するので、限られた開発者資源を、対象プログラムの性能向上の効果が高いプログラムブロックの最適化作業に割り当てて、有効活用することができる。
この実施の形態における最適化箇所判定部160は、上記処理装置(CPU911)を用いて、上記実行装置821が記録した実行状況に基づいて、上記複数のプログラムブロックそれぞれについて、上記プログラムブロックが実行された実行回数を算出し、算出した実行回数が多いほど性能向上の効果が高いものとして、上記対象プログラムの性能向上の効果を予測する。
この実施の形態における最適化箇所判定装置100によれば、最適化箇所判定部160が、実行回数の多いプログラムブロックほど、ソースコード710の改善による対象プログラムの性能向上の効果が高いと判定するので、プログラムブロックのソースコード710の改善による性能向上の効果を予測する予測精度を高めることができ、限られた開発者資源を、有効活用することができる。
この実施の形態における最適化箇所判定部160は、上記処理装置(CPU911)を用いて、上記複数のプログラムブロックそれぞれについて、上記ソースコード710を改善する作業の難易度を予測し、予測した作業の難易度に基づいて、上記ソースコード710を改善すべきプログラムブロックを判定する。
この実施の形態における最適化箇所判定装置100によれば、プログラムブロックのソースコード710を改善する作業の難易度を最適化箇所判定部160が予測し、予測した難易度に基づいて、ソースコード710を改善すべきプログラムブロックを判定するので、限られた開発者資源を、ソースコード710の改善作業が容易なプログラムブロックに割り当てて、有効活用することができる。
また、最適化箇所判定装置100が、予測した難易度を出力する構成とすれば、難しい作業にはスキルの高い開発者を、やさしい作業にはスキルを低い開発者を割り当てるなど、開発者のスキルに応じた作業割り当てが可能となり、開発者資源を更に有効活用できる。
この実施の形態における最適化箇所判定部160は、上記処理装置(CPU911)を用いて、上記ソース解析部120が解析したプログラム構造に基づいて、上記プログラムブロックの規模を算出し、算出した規模が小さいほど作業の難易度が高いものとして、上記ソースコード710を改善する作業の難易度を予測する。
この実施の形態における最適化箇所判定装置100によれば、最適化箇所判定部160が、規模の小さいプログラムブロックほど、ソースコード710を改善する作業が難しいと判定するので、プログラムブロックの最適化作業の難易度を予測する予測精度を高めることができ、限られた開発者資源を有効活用することができる。
この実施の形態における最適化箇所判定部160は、上記処理装置(CPU911)を用いて、上記ソース解析部120が解析したプログラム構造に基づいて、上記プログラムブロックの構造の複雑さ(複雑度)を算出し、算出した構造の複雑さが単純であるほど作業の難易度が高いものとして、上記ソースコード710を改善する作業の難易度を予測する。
この実施の形態における最適化箇所判定装置100によれば、最適化箇所判定部160が、構造が単純なプログラムブロックほど、ソースコード710を改善する作業が難しいと判定するので、プログラムブロックの最適化作業の難易度を予測する予測精度を高めることができ、限られた開発者資源を有効活用することができる。
この実施の形態における最適化箇所判定システム820は、最適化箇所判定装置100と、上記実行モジュール生成部140が生成した実行モジュール(動態測定用モジュール)を実行する実行装置821とを有する。
この実施の形態における最適化箇所判定システム820によれば、実行モジュール生成部140が生成した実行モジュールを実行装置821が実行することにより記録した実行状況に基づいて、ソースコード710を改善すべきプログラムブロックを判定するので、限られた開発者資源を、高い性能改善効果を得られるプログラムブロックの最適化作業に割り当てて、有効活用することができる。
この実施の形態における最適化箇所判定装置100は、コンピュータを最適化箇所判定装置100として機能させるコンピュータプログラムを、コンピュータが実行することにより、実現可能である。
この実施の形態における最適化箇所判定装置100として、コンピュータを機能させることを特徴とするコンピュータプログラムによれば、実行モジュール生成部140が生成した実行モジュールを実行装置821が実行することにより記録した実行状況に基づいて、ソースコード710を改善すべきプログラムブロックを判定するので、限られた開発者資源を、高い性能改善効果を得られるプログラムブロックの最適化作業に割り当てて、有効活用することができる最適化箇所判定装置100を実現することができる。
この実施の形態における最適化箇所判定装置100が、対象プログラムの最適化箇所を判定する最適化箇所判定方法は、以下の工程を有する。
上記処理装置(CPU911)が、上記対象プログラムのソースコード710に基づいて、上記対象プログラムのプログラム構造を解析する。
上記処理装置(CPU911)が、解析したプログラム構造に基づいて、上記対象プログラムの実行状況(実行ログ750)を記録するトレース命令を、上記ソースコード710に挿入する。
上記処理装置(CPU911)が、上記トレース命令を挿入したソースコードに基づいて、実行装置821が実行できる形式の実行モジュール(動態測定用モジュール)を生成する。
上記実行装置821が、上記最適化箇所判定装置100が生成した実行モジュールを実行することにより、上記最適化箇所判定装置100が挿入したトレース命令を実行して、上記対象プログラムの実行状況(実行ログ750)を記録する。
上記処理装置(CPU911)が、解析したプログラム構造に基づいて上記対象プログラムのソースコード710を分割した複数のプログラムブロックのうちから、上記実行装置821が記録した実行状況(実行ログ750)に基づいて、上記ソースコード710を改善すべきプログラムブロックを判定する。
この実施の形態における最適化箇所判定方法によれば、最適化箇所判定装置100が生成した実行モジュールを実行装置821が実行することにより記録した実行状況に基づいて、ソースコード710を改善すべきプログラムブロックを判定するので、限られた開発者資源を、高い性能改善効果を得られるプログラムブロックの最適化作業に割り当てて、有効活用することができる。
以上説明したプログラム最適化箇所自動判定システム(最適化箇所判定システム820)は、以下の構成を有する。
静的解析部(ソース解析部120、静的解析部165)は、入力されたソースプログラム(ソースコード710)に記述された内容を字句解析し、関数の構造に関するパラメータ、またはメトリクス値を抽出し、抽出した値のテーブルを関数ごとに記録する、関数構造情報(解析結果データ740、規模データ782、複雑度データ783など)を出力する。
トレース挿入部130は、静的解析によって得られた関数構造情報(解析結果データ740)をもとに、関数の実行履歴を取得するために必要なトレース命令をソースコード710中に埋め込む。なお、関数構造情報(解析結果データ740)を用いず、コンパイラとの連携等により、トレース挿入部130が、独自にトレース命令を挿入してもよい。
動態測定用モジュール(実行モジュール)は、トレース挿入部130によってトレース命令が埋め込まれたソースコードをコンパイル、リンク等の処理を経て、対象装置(実行装置821)上で実行可能な形式にしたものである。また、必要に応じて、OSやミドルウェアなどのシステムソフトウェアに対してもトレース命令を設定し、タスクやスレッドのコンテキストスイッチや割込みなど、関数の実行をプリエンプトする処理についてもトレース可能にしておく。チューニング対象となるソフトウェアが搭載される装置(実行装置821)上で動態測定用モジュールを実行し、実行履歴記録部(トレース命令を実行した実行装置821)によって、実行ログ情報(実行ログ750)が保存される。
動的解析部161では、チューニング対象装置(実行装置821)で記録された実行ログ情報(実行ログ750)を解析し、関数毎の呼出し回数、総実行時間を集計してテーブルを作成し、関数実行情報(総実行時間データ785、実行回数データ786など)として出力する。
性能チューニング候補判定部(作業優先度算出部169)では、関数構造情報、関数実行情報、および性能統計情報(難易度テーブル770など)を入力し、各々のパラメータを用いて改善余地、難易度、コスト、改善効果等を判断するアルゴリズムによって関数を評価し、その結果、性能チューニング対象関数情報(判定結果730)を出力する。
以上説明した静的解析部(ソース解析部120、静的解析部165)は、以下の処理をする。
静的解析部(ソース解析部120及び静的解析部165)は、ソースプログラム(ソースコード710)を入力し、一般的に確立された手段によって静的解析処理をして、関数(プログラムブロック)ごとにソースプログラム(ソースコード710)中の開始行番号および終了行番号、複数のreturn文に対応した位置リスト、コメントや空行を除いた実行命令行数から求められるメトリクスである関数規模、分岐命令による実行経路やループ構造から求められるメトリクスである複雑度などを抽出する。
静的解析部(ソース解析部120及び静的解析部165)は、抽出した情報に、関数名、ファイルパスなどを追加し、テーブル形式で出力する。
以上説明したトレース挿入部130は、以下の処理をする。
トレース挿入部130は、ソースプログラム(ソースコード710)と関数構造情報(解析結果データ740)とを入力する。トレース挿入部130は、入力したソースプログラムに対し、入力した関数構造情報(解析結果データ740)のなかから、特に開始行番号、終了行番号、およびreturn文位置リストを参照して、関数内の処理の入口と出口となる位置に、実行ログ750を取得するために必要となるパラメータを与えたトレース命令を挿入する。トレース挿入部130は、トレースが挿入されたプログラムを、一旦中間ファイルとして保存する。
その後、実行モジュール生成部140が、コンパイラ、リンカ等の外部プログラムによって、中間ファイルを処理することで、ターゲット上での実行形式である動態測定用モジュールを生成する。
以上説明した実行履歴記録部(実行装置821)は、以下の処理をする。
チューニング対象装置(実行装置821)は、トレース挿入部130の処理によって生成された動態測定用モジュールを、ダウンロードして実行する。その際、挿入された関数の入口および出口のポイントにおいて、トレース命令の呼び出しが行われる。トレース命令には、どの事象によるものなのかを識別するためのパラメータが与えられており、実行装置821は、タイマカウンタ等により現在の時刻を取得し、パラメータとセットにして記録することにより、図3のような形式で実行ログ情報(実行ログ750)を出力する。
以上説明した動的解析部161は、以下の処理をする。
動的解析部161は、実行コンテキスト毎にログを分離して、共通的に呼ばれる関数の入口と出口の対応を明確にする。動的解析部161は、関数出口のトレース時刻から関数入口のトレース時刻を差し引き、さらに他のタスクやスレッド、割り込みハンドラにプリエンプトされた時間も差し引くことにより、関数本来の処理に費やした時間を計算し、それを関数毎に累計する。また、動的解析部161は、関数が呼び出された回数を関数ごとに累計する。動的解析部161は、このようにして分析した関数の実行情報を出力する。
以上説明した性能チューニング候補判定部(難易度予測部168、作業優先度算出部169)は、以下の処理をする。
性能チューニング候補判定部(難易度予測部168)は、使用するデータ(関数構造情報、関数実行情報、性能統計情報など)を入力する。性能チューニング候補判定部は、まず関数構造情報(解析結果データ740)の終了行番号から開始行番号を引き、各々の関数の関数規模を計算する。そして、その関数規模に対応する改善指標値(最適化難易度)を、性能統計情報(難易度テーブル770)を用いて求める。
性能チューニング候補判定部(作業優先度算出部169)は、求めた改善指標値に、関数実行情報(実行回数データ786)の実行回数を掛けることで、改善効率指標値を算出する。
その後、関数実行情報(判定結果730)に対し、判定結果表示部170は、改善効率指標値の高い関数(プログラムブロック)から順番に並ぶようにソートし、その結果を性能チューニング対象関数情報(判定結果730)として出力する。この性能チューニング対象関数情報の順位が上位ものは、チューニングの余地があり、またチューニングによる効果が得られやすいという判断材料になる。
なお、作業優先度算出部169は、入力される関数構造情報と関数実行情報に含まれる各々のパラメータの組み合わせによって、様々な基準の改善指標値を導きだし、それを加味することで精度向上を図ることが可能である。
以上説明したプログラム最適化箇所自動判定システム(最適化箇所判定システム820)は、
ソースプログラム(ソースコード710)の記述内容の構文解析を行うことで関数の構造情報を抽出する静的解析部(ソース解析部120、静的解析部165)と、関数(プログラムブロック)の実行情報を得るために必要なトレース命令を関数の構造に従って挿入するトレース挿入部130と、チューニング対象装置(実行装置821)で取得したログ(実行ログ750)を解析して関数実行情報を抽出する動的解析部161と、入力された関数の構造情報と実行情報から、性能統計情報(難易度テーブル770など)にしたがって性能チューニング(最適化作業)の対象となる関数を選出する性能チューニング候補判定部(作業優先度算出部169)とを備える情報処理装置(最適化箇所判定装置100)と、
前記情報処理装置(最適化箇所判定装置100)によるトレース命令を含んだ動態測定用モジュールを実行することで得られる実行履歴を記録して実行ログ情報を出力する実行履歴記録部を備えたチューニング対象装置(実行装置821)とを有する。
このように、実際にプログラムを動かして得られる動的解析結果である関数の実行情報と、プログラムの静的解析によって得られる関数の構造情報とを組み合わせて分析することによって、処理時間のかかっている箇所のリストではなく、効果と難易度に判断基準をおいた性能チューニング箇所の候補リストを得ることができる。ここで、難易度とは、チューニングを行うための余地を静的解析によって判定したもので、例えば、実際に処理時間がかかっていたとしても、規模が小さくて構造が単純な関数に対してチューニングを施すのは一般的に難しいと判断される。最適化箇所判定システム820によって得られる性能チューニング箇所の候補をもとに、開発者のスキルに応じてチューニング作業を振り分けて実施すれば、高い性能改善効果を短時間で得ることが期待できる。
以上説明したプログラム最適化箇所自動判定システム(最適化箇所判定システム820)は、
性能チューニング候補判定部(作業優先度算出部169)が、静的解析結果に基づく関数構造情報と、動的解析結果に基づく関数実行情報とを組み合わせ、性能統計情報(難易度テーブル770など)を用いて評価することで、構造的なチューニングの難易度と、動態に基づく改善効果を予測し、その結果に基づいて性能チューニング対象関数情報を生成する。
以上説明したプログラム最適化箇所自動判定システム(最適化箇所判定システム820)は、
関数構造情報として、関数の開始点/終了地点、命令ライン数、ループ/分岐ブロックの種別と開始/終了地点、関数呼出し関係、その他静的解析によって抽出可能な情報を保持する。
以上説明したプログラム最適化箇所自動判定システム(最適化箇所判定システム820)は、
関数実行情報として、実行時間、呼出し回数、呼出し関係、ループ回数、通過経路、その他実行ログ情報の解析によって抽出可能な情報を保持する。
以上説明したプログラム最適化箇所自動判定システム(最適化箇所判定システム820)は、
性能統計情報として、関数構造情報や関数実行情報の各パラメータについて、性能改善の余地、難易度、コスト、パラメータ間の相関関係等について、データ構造または評価関数によって表現したものを保持する。
以上により、チューニングによる改善効果が見込める箇所の自動的な絞り込みが可能になり、性能改善効果が得られる確率を向上させることができる。このようにして得られた性能チューニング対象関数情報(判定結果730)をもとに、上位にランキングされた関数から順次チューニングを実施することで、単なる実行時間順の関数リストを用いた場合に比べて、短い時間で大きな改善効果を得やすくなる。これは、チューニング作業の効率は、時間がかかっている処理であっても性能改善効果が必ず得られるかどうかは不確定であり、それよりも対象とする処理の構造に強く依存するという特性を持っているためである。
実施の形態1におけるプログラム最適化システム800の全体構成の一例を示すシステム構成図。 実施の形態1における最適化箇所判定装置100の外観の一例を示す図。 実施の形態1における最適化箇所判定装置100のハードウェア資源の一例を示す図。 実施の形態1における最適化箇所判定システム820の構成の一例を示すブロック構成図。 実施の形態1における最適化箇所判定装置100が最適化箇所を判定する最適化箇所判定処理の流れの一例を示すフローチャート図。 実施の形態1におけるソース解析部120が生成する解析結果データ740の一例を示す図。 実施の形態1における実行装置821が動態測定用モジュールを実行して、生成する実行ログ750の一例を表わす図。 実施の形態1における最適化箇所判定部160の内部ブロックの構成の一例を示す詳細ブロック図。 実施の形態1における最適化箇所判定部160が、最適化箇所を判定する最適化箇所判定工程S516の詳細な処理の流れの一例を示すフローチャート図。 実施の形態1における最適化箇所判定部160が生成する各種データの一例を表わす図。 実施の形態1における最適化箇所判定部160が生成する各種データの一例を表わす図。
符号の説明
100 最適化箇所判定装置、110 ソース記憶部、120 ソース解析部、130 トレース挿入部、140 実行モジュール生成部、150 実行ログ取得部、160 最適化箇所判定部、161 動的解析部、162 実行回数算出部、163 実行時間算出部、164 総実行時間算出部、165 静的解析部、166 規模算出部、167 複雑度算出部、168 難易度予測部、169 作業優先度算出部、170 判定結果表示部、710 ソースコード、720 評価結果、730 判定結果、731,741,761 関数名、732 難易度データ、733 作業優先度データ、740 解析結果データ、742 パス名、743 開始行番号、744 終了行番号、745 リターン行番号リスト、750 実行ログ、751 実行時刻、752 トレース種別、753 トレースパラメータ、762 規模、763 複雑度、764 最適化難易度、765 総実行時間、766 実行回数、770 難易度テーブル、771 規模上限、772 難易度、782 規模データ、783 複雑度データ、784 難易度データ、785 総実行時間データ、786 実行回数データ、800 プログラム最適化システム、810 性能評価システム、820 最適化箇所判定システム、821 実行装置、822 実行モジュール記憶装置、823 実行ログ記憶装置、830 ソース作成装置、901 表示装置、902 キーボード、903 マウス、904 FDD、905 CDD、906 プリンタ装置、907 スキャナ装置、910 システムユニット、911 CPU、912 バス、913 ROM、914 RAM、915 通信装置、920 磁気ディスク装置、921 OS、922 ウィンドウシステム、923 プログラム群、924 ファイル群、931 電話器、932 ファクシミリ機、940 インターネット、941 ゲートウェイ、942 LAN、950 開発者、960 管理者。

Claims (9)

  1. データを記憶する記憶装置と、データを処理する処理装置と、ソース記憶部と、ソース解析部と、トレース挿入部と、実行モジュール生成部と、最適化箇所判定部とを有し、
    上記ソース記憶部は、上記記憶装置を用いて、対象となる対象プログラムのソースコードを記憶し、
    上記ソース解析部は、上記処理装置を用いて、上記ソース記憶部が記憶したソースコードに基づいて、上記対象プログラムのプログラム構造を解析し、
    上記トレース挿入部は、上記処理装置を用いて、上記ソース解析部が解析したプログラム構造に基づいて、上記対象プログラムの実行状況を記録するトレース命令を、上記ソース記憶部が記憶したソースコードに挿入し、
    上記実行モジュール生成部は、上記処理装置を用いて、上記トレース挿入部がトレース命令を挿入したソースコードに基づいて、実行装置が実行できる形式の実行モジュールを生成し、
    上記最適化箇所判定部は、上記処理装置を用いて、上記実行モジュール生成部が生成した実行モジュールを上記実行装置が実行することにより上記トレース挿入部が挿入したトレース命令を上記実行装置が実行して上記実行装置が記録した実行状況に基づいて、上記ソース解析部が解析したプログラム構造に基づいて上記ソース記憶部が記憶したソースコードを分割した複数のプログラムブロックのうちから、上記ソースコードを改善すべきプログラムブロックを判定することを特徴とする最適化箇所判定装置。
  2. 上記最適化箇所判定部は、上記処理装置を用いて、上記複数のプログラムブロックそれぞれについて、上記ソースコードを改善することにより得られる上記対象プログラムの性能向上の効果を予測し、予測した性能向上の効果に基づいて、上記ソースコードを改善すべきプログラムブロックを判定することを特徴とする請求項1に記載の最適化箇所判定装置。
  3. 上記最適化箇所判定部は、上記処理装置を用いて、上記実行装置が記録した実行状況に基づいて、上記複数のプログラムブロックそれぞれについて、上記プログラムブロックが実行された実行回数を算出し、算出した実行回数が多いほど性能向上の効果が高いものとして、上記対象プログラムの性能向上の効果を予測することを特徴とする請求項2に記載の最適化箇所判定装置。
  4. 上記最適化箇所判定部は、上記処理装置を用いて、上記複数のプログラムブロックそれぞれについて、上記ソースコードを改善する作業の難易度を予測し、予測した作業の難易度に基づいて、上記ソースコードを改善すべきプログラムブロックを判定することを特徴とする請求項1乃至請求項3のいずれかに記載の最適化箇所判定装置。
  5. 上記最適化箇所判定部は、上記処理装置を用いて、上記ソース解析部が解析したプログラム構造に基づいて、上記プログラムブロックの規模を算出し、算出した規模が小さいほど作業の難易度が高いものとして、上記ソースコードを改善する作業の難易度を予測することを特徴とする請求項4に記載の最適化箇所判定装置。
  6. 上記最適化箇所判定部は、上記処理装置を用いて、上記ソース解析部が解析したプログラム構造に基づいて、上記プログラムブロックの構造の複雑さを算出し、算出した構造の複雑さが単純であるほど作業の難易度が高いものとして、上記ソースコードを改善する作業の難易度を予測することを特徴とする請求項4または請求項5に記載の最適化箇所判定装置。
  7. 請求項1乃至請求項6のいずれかに記載の最適化箇所判定装置と、上記実行モジュール生成部が生成した実行モジュールを実行する実行装置とを有することを特徴とする最適化箇所判定システム。
  8. 請求項1乃至請求項6のいずれかに記載の最適化箇所判定装置として、コンピュータを機能させることを特徴とするコンピュータプログラム。
  9. データを記憶する記憶装置と、データを処理する処理装置とを有する最適化箇所判定装置が、対象プログラムの最適化箇所を判定する最適化箇所判定方法において、
    上記処理装置が、上記対象プログラムのソースコードに基づいて、上記対象プログラムのプログラム構造を解析し、
    上記処理装置が、解析したプログラム構造に基づいて、上記対象プログラムの実行状況を記録するトレース命令を、上記ソースコードに挿入し、
    上記処理装置が、上記トレース命令を挿入したソースコードに基づいて、実行装置が実行できる形式の実行モジュールを生成し、
    上記実行装置が、上記最適化箇所判定装置が生成した実行モジュールを実行することにより、上記最適化箇所判定装置が挿入したトレース命令を実行して、上記対象プログラムの実行状況を記録し、
    上記処理装置が、解析したプログラム構造に基づいて上記対象プログラムのソースコードを分割した複数のプログラムブロックのうちから、上記実行装置が記録した実行状況に基づいて、上記ソースコードを改善すべきプログラムブロックを判定することを特徴とする最適化箇所判定方法。
JP2008053950A 2008-03-04 2008-03-04 最適化箇所判定装置及び最適化箇所判定システム及びコンピュータプログラム及び最適化箇所判定方法 Pending JP2009211424A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008053950A JP2009211424A (ja) 2008-03-04 2008-03-04 最適化箇所判定装置及び最適化箇所判定システム及びコンピュータプログラム及び最適化箇所判定方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008053950A JP2009211424A (ja) 2008-03-04 2008-03-04 最適化箇所判定装置及び最適化箇所判定システム及びコンピュータプログラム及び最適化箇所判定方法

Publications (1)

Publication Number Publication Date
JP2009211424A true JP2009211424A (ja) 2009-09-17

Family

ID=41184497

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008053950A Pending JP2009211424A (ja) 2008-03-04 2008-03-04 最適化箇所判定装置及び最適化箇所判定システム及びコンピュータプログラム及び最適化箇所判定方法

Country Status (1)

Country Link
JP (1) JP2009211424A (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012155680A (ja) * 2011-01-28 2012-08-16 Fujitsu Ltd コンピュータプログラム、プログラム解析方法及びプログラム解析装置
KR101530888B1 (ko) * 2013-10-08 2015-06-24 국방과학연구소 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법
JP2016224814A (ja) * 2015-06-02 2016-12-28 富士通株式会社 性能情報生成プログラム、性能情報生成方法及び情報処理装置
JP2017041129A (ja) * 2015-08-20 2017-02-23 株式会社東芝 トレース情報管理システム、方法、及びプログラム
US11068381B2 (en) 2016-12-29 2021-07-20 Mitsubishi Electric Corporation Program analysis device, program analysis system, program analysis method and computer readable medium

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012155680A (ja) * 2011-01-28 2012-08-16 Fujitsu Ltd コンピュータプログラム、プログラム解析方法及びプログラム解析装置
KR101530888B1 (ko) * 2013-10-08 2015-06-24 국방과학연구소 무기체계 구조 개선을 위한 소프트웨어 리팩토링 방법
JP2016224814A (ja) * 2015-06-02 2016-12-28 富士通株式会社 性能情報生成プログラム、性能情報生成方法及び情報処理装置
JP2017041129A (ja) * 2015-08-20 2017-02-23 株式会社東芝 トレース情報管理システム、方法、及びプログラム
US11068381B2 (en) 2016-12-29 2021-07-20 Mitsubishi Electric Corporation Program analysis device, program analysis system, program analysis method and computer readable medium

Similar Documents

Publication Publication Date Title
KR101279179B1 (ko) 병렬 프로그램 생성 방법
US8806464B2 (en) Process flow optimized directed graph traversal
US6487715B1 (en) Dynamic code motion optimization and path tracing
US7065759B2 (en) System and method for assigning basic blocks to computer control flow paths
US9081586B2 (en) Systems and methods for customizing optimization/transformation/ processing strategies
JP6141365B2 (ja) 逐次コンピュータプログラムコードを並列処理する方法及びシステム
US8726238B2 (en) Interactive iterative program parallelization based on dynamic feedback
JP2015043198A (ja) 解析システム、解析方法および解析プログラム
CN102236550A (zh) 软件开发工具
CN102236551A (zh) 软件开发工具
US20180032320A1 (en) Computer-implemented method for allowing modification of a region of original code
KR20190015285A (ko) Cpu 이용 및 코드 리팩토링을 위한 쿼리 최적화기
JP2009211424A (ja) 最適化箇所判定装置及び最適化箇所判定システム及びコンピュータプログラム及び最適化箇所判定方法
US20150007150A1 (en) Determining control flow divergence due to variable value difference
GB2589900A (en) Apparatus and method for source code optimisation
US8458679B2 (en) May-constant propagation
JP7077909B2 (ja) デッドコード解析プログラム、デッドコード解析方法及びデッドコード解析装置
WO2020038376A1 (zh) 统一地执行特征抽取的方法及系统
US7228528B2 (en) Building inter-block streams from a dynamic execution trace for a program
JP5440287B2 (ja) シンボリック実行支援プログラム、方法及び装置
Kim et al. Performance evaluation and tuning for MapReduce computing in Hadoop distributed file system
CN115454702A (zh) 日志故障分析方法、装置、存储介质及电子设备
Mosaner et al. Compilation Forking: A Fast and Flexible Way of Generating Data for Compiler-Internal Machine Learning Tasks
JPWO2017204139A1 (ja) データ処理装置、データ処理方法、およびプログラム記録媒体
Vysocký et al. Application instrumentation for performance analysis and tuning with focus on energy efficiency