JP2006243838A - プログラム開発装置 - Google Patents

プログラム開発装置 Download PDF

Info

Publication number
JP2006243838A
JP2006243838A JP2005055020A JP2005055020A JP2006243838A JP 2006243838 A JP2006243838 A JP 2006243838A JP 2005055020 A JP2005055020 A JP 2005055020A JP 2005055020 A JP2005055020 A JP 2005055020A JP 2006243838 A JP2006243838 A JP 2006243838A
Authority
JP
Japan
Prior art keywords
function
instruction
source program
program
built
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
JP2005055020A
Other languages
English (en)
Inventor
Yutaka Ota
裕 太田
Atsushi Mizuno
水野  淳
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.)
Toshiba Corp
Original Assignee
Toshiba 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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP2005055020A priority Critical patent/JP2006243838A/ja
Priority to US11/362,728 priority patent/US7917899B2/en
Publication of JP2006243838A publication Critical patent/JP2006243838A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/73Program documentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

Abstract

【課題】 拡張可能なプロセッサの性能を十分に活かし、且つ効率的にプログラムを開発可能なプログラム開発装置を提供する。
【解決手段】 ソースプログラム中の最適化対象となるプログラム記述を定義した動作定義と、最適化後の命令列を記述したインライン節とを含む複合組込関数をソースプログラムの一部として記憶するソースプログラム記憶領域60と、複合組込関数をソースプログラム記憶領域から読み出し、複合組込関数を構文解析して動作定義及びインライン節を検出する解析部12と、ソースプログラム中の動作定義に一致するプログラム記述をインライン節中の命令列に最適化し、ソースプログラムからオブジェクトコードを生成するコード生成部13aとを備える。
【選択図】 図1

Description

本発明は、ユーザがプロセッサ・アーキテクチャ及び命令セット等の仕様を拡張可能なプロセッサに実行させるアプリケーション・プログラムの開発に用いられるプログラム開発装置に関する。
近年、ユーザがプロセッサ・アーキテクチャ及び命令セット等の仕様を拡張可能なプロセッサが発表されてきている(例えば、特許文献1参照。)。拡張可能なプロセッサを使えば、アプリケーションに適した命令セットを構成でき、且つプロセッサの処理速度を向上させることができる。よって、アプリケーション実行の性能向上に非常に効果的である。一方、高級言語で記述されたプログラムをオブジェクトコード(機械語)に変換するコンパイラは、プロセッサ・アーキテクチャ毎に用意される。したがって、拡張可能なプロセッサには、ユーザ仕様に対応したコンパイラが必要となる。
拡張可能なプロセッサ特有の命令記述をコンパイルさせるための第1の背景技術として、ユーザが定義した組込関数を使用する手法が知られている(例えば、特許文献2参照)。第2の背景技術として、組込関数を明示的に呼び出さなくても、組込関数を用いた処理動作と同等の処理動作を行うプログラム記述を、組込関数に応じた機械語に最適化可能な手法が提案されている(例えば、特許文献3参照。)。
しかしながら、上述した第2の背景技術においては、組込関数を用いた処理動作と同等の処理動作を行う命令文をコンパイラが検出し、検出結果を1命令に置き換えることはできるが、複数の命令に置き換えることができない。ソースプログラムを書き換えることで対応可能であるが、移植性を維持しようとすると可読性の低いプログラムになる恐れがある。したがって、拡張可能なプロセッサの性能を十分に活かし、且つ効率的にプログラム開発を進めることができなかった。
特開2003−323463号公報 特開2002−24029号公報 特開2004−295398号公報 特開2004−240999号公報
本発明は、拡張可能なプロセッサの性能を十分に活かし、且つ効率的にプログラムを開発可能なプログラム開発装置を提供する。
本発明の一態様は、(イ)ソースプログラム中の最適化対象となるプログラム記述を定義した動作定義と、最適化後の命令列を記述したインライン節とを含む複合組込関数をソースプログラムの一部として記憶するソースプログラム記憶領域と、(ロ)複合組込関数をソースプログラム記憶領域から読み出し、複合組込関数を構文解析して動作定義及びインライン節を検出する解析部と、(ハ)ソースプログラム中の動作定義に一致するプログラム記述をインライン節中の命令列に最適化し、ソースプログラムからオブジェクトコードを生成するコード生成部とを備えるプログラム開発装置であることを要旨とする。
本発明によれば、拡張可能なプロセッサの性能を十分に活かし、且つ効率的にプログラムを開発可能なプログラム開発装置を提供できる。
次に、図面を参照して、本発明の第1及び第2実施形態を説明する。以下の第1及び第2実施形態における図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。
(第1実施形態)
本発明の第1実施形態に係るプログラム開発装置は、図1に示すように、中央演算処理装置(CPU)1a、入力装置2、出力装置3、主記憶装置4、補助記憶装置5、及び記憶装置6等を備える。CPU1aは、C言語等の高級言語で記述されたソースプログラムをオブジェクトコード(機械語)に翻訳するコンパイラ10aの機能を実現する。以下の説明においては、ソースプログラムがC言語で記述されている場合を例に説明する。また、コンパイラ10aは、解析部12及びコード生成部13aを備える。更に、記憶装置6には、例えば、ソースプログラム記憶領域60、組込関数定義記憶領域62、複合組込関数定義記憶領域63、及びオブジェクトコード記憶領域64等が備えられる。ソースプログラム記憶領域60には、ソースプログラム中の最適化対象となるプログラム記述を定義した動作定義と、最適化後の命令列を記述したインライン節とを含む複合組込関数がソースプログラムの一部として記憶される。コンパイラ10aの解析部12は、複合組込関数をソースプログラム記憶領域60から読み出し、複合組込関数を構文解析して動作定義及びインライン節を検出する。コンパイラ10aのコード生成部13aは、ソースプログラム中の動作定義に一致するプログラム記述をインライン節中の命令列に最適化し、ソースプログラムからオブジェクトコードを生成する。
また、ソースプログラム記憶領域60には、ソースプログラムと、ユーザ定義の組込関数又は複合組込関数、或いは組込関数及び複合組込関数の両方とが予め格納される。組込関数及び複合組込関数は、ソースプログラムのヘッダファイルとして格納される。ここで、複合組込関数は、図2(a)に示すような形式(文法)で記述される。これに対して組込関数は、図2(b)に示すような形式で記述される。図2(a)に示す複合組込関数に関しては、関数修飾子として“_ASM”を指定可能にしている点と、関数本体にインライン節を指定する点が図2(b)に示す組込関数と異なる。
図1に示すコード生成部13aは、図2(a)に示す動作定義に一致するプログラム記述がソースプログラム中に検出された場合に、動作定義に一致するプログラム記述をインライン節中の命令列、即ち図2(c)に示す「文の並び」に最適化する。よって、ソースプログラムにおける動作定義に一致するプログラム記述を複数の命令に最適化可能である。尚、インライン節は、図2(c)に示すような形式で記述される。動作定義は、図2(d)に示すような形式で記述される。
これに対してコード生成部13aは、図2(b)に示す組込関数の動作定義に一致するプログラム記述がソースプログラム中に検出された場合、動作定義に一致するプログラム記述を組込関数名(宣言子)に最適化する。この結果、ソースプログラムにおける動作定義に一致するプログラム記述が、1つのユーザ定義命令に最適化される。
また、図1に示す組込関数定義記憶領域62には、解析部12が検出した組込関数の関数名及び組込関数の動作定義等が格納される。複合組込関数定義記憶領域63には、解析部12が検出した複合組込関数のインライン節中の命令列及び複合組込関数の動作定義等が格納される。オブジェクトコード記憶領域64には、コード生成部13aが生成したオブジェクトコードが格納される。
更に、図1に示すプログラム開発装置は、図3に示すようなプロセッサ70をターゲット・ハードウェアとする。図3に示すプロセッサ70は、例えば、プロセッサコア710、拡張部720、制御バス730、及びデータバス740等を備える。図1に示すプログラム開発装置が開発したアプリケーション・プログラム(ファームウェア)は、プロセッサ70の外部のプログラムメモリ(図示省略)に格納される。プロセッサコア710は、プログラムメモリからアプリケーション・プログラムを読み出す。読み出されたアプリケーション・プログラムは、プロセッサコア710の内部の命令RAM711に一旦格納される。
プログラムメモリに格納されたアプリケーション・プログラムにおいて、図1に示すコード生成部13aが組込関数又は複合組込関数を使用して最適化した1命令又は複数命令からなる命令列は、命令RAM711から拡張部720に転送されて、拡張部720により実行される。拡張部720には、目標性能及び処理内容等に応じて、ユーザ・カスタム命令(UCI)ユニット721、デジタル・シグナル・プロセッサ(DSP)722、又はコプロセッサ723等、或いはこれらの組合せが実装される。尚、プロセッサコア710は、命令RAM711に加えて、命令デコーダ712、算術演算ユニット(ALU)713、及びデータRAM714等を備える。
拡張部720にUCIユニット721が実装される場合、図1に示すソースプログラム記憶領域60に格納されたソースプログラム中のUCIユニット721に実行させたいプログラム記述を、例えば、図2(b)に示す組込関数の動作定義として定義した組込関数をソースプログラム記憶領域60に格納すれば良い。この結果、コンパイラ10aは、ソースプログラムをオブジェクトコードに変換すると共に、UCIユニット721に実行させる命令を選択的に生成する。UCIユニット721に実行させる命令は、実行時において、プロセッサコア710の命令RAM711に一旦格納されてUCIユニット721に転送される。
更に、拡張部720にDSP722又はコプロセッサ723が実装される場合、ソースプログラム中のDSP722又はコプロセッサ723に実行させたいプログラム記述を、例えば、図2(a)に示す組込関数の動作定義として定義し、DSP722又はコプロセッサ723向けの命令列をインライン節に記述した複合組込関数をソースプログラムの一部としてソースプログラム記憶領域60に格納すれば良い。この結果、コンパイラ10aは、ソースプログラムをオブジェクトコードに変換すると共に、DSP722又はコプロセッサ723に実行させる命令列を選択的に自動生成する。DSP722又はコプロセッサ723に実行させる命令列は、実行時において、プロセッサコア710の命令RAM711に一旦格納されてDSP722又はコプロセッサ723にそれぞれ転送される。
このように、拡張部720がプロセッサコア710の負担を軽減することで、プロセッサ70全体の処理速度を向上させることを可能としている。更に、拡張部720の構成を追加・変更した場合、複合組込関数及び組込関数を追加・変更することで対応可能であり、ソースプログラムを書き換える必要がない。よって、ソースプログラムの可読性を維持できる。更に、拡張部720の構成の追加・変更に伴うプログラム開発期間の増加を回避できる。
また、図1に示す解析部12は、字句解析部121及び構文解析部122を備える。字句解析部121は、例えば、ソースプログラム記憶領域60から組込関数及び複合組込関数を含むヘッダファイルと、ソースプログラムとを読み出す。解析部12は、ソースプログラム及びヘッダファイルを意味のある最小の単位であるトークン(token)に分割する。「トークン」の代表例は、プログラミング言語のキーワード、演算子、変数名、定数、区切り記号等である。
構文解析部122は、変数名や記号などのトークンに分割された命令について、プログラミング言語で定められた文法規則に適合しているか否かをチェックする。また、構文解析部122は、トークンに分割された命令又はこれら命令の組合せから、組込関数又は複合組込関数を検出する。組込関数が検出された場合、組込関数の関数名及び動作定義等が組込関数定義記憶領域62に格納される。複合組込関数が検出された場合、複合組込関数のインライン節及び動作定義等が複合組込関数定義記憶領域63に格納される。
一例として、構文解析部122は、ソースプログラム記憶領域60に図4(a)に示す組込関数が含まれる場合、動作定義“a = (a + 10) | b”、及び組込関数の関数名“uci”等の定義を組込関数定義記憶領域62に格納する。一方、構文解析部122は、ソースプログラム記憶領域60に図5(a)に示す複合組込関数が含まれる場合、動作定義“R3 = ((R1 << 1) | (R2 >> 1)) + 10”、及びインライン節中の命令列“dsp1(R1,R2) dsp2(0) dsp3(R3)”等の定義を複合組込関数定義記憶領域63に格納する。尚、図5(a)に示すインライン節中の命令列“dsp1(R1,R2) dsp2(0) dsp3(R3)”は、例えば、図3に示すDSP722により実行される。
更に、図1に示すコード生成部13aは、中間コード生成部131、中間コード最適化部132、オブジェクトコード生成部133a、オブジェクトコード最適化部134a、及びオブジェクトコード出力部135を備える。中間コード生成部131は、構文解析後のソースプログラムを、ソースプログラムと等価であり、且つ簡潔な記述である中間コードに変換する。尚、中間コードは、構文解析の直後にオブジェクトコードを生成した場合に生成されるプログラムのサイズが大きくなり、変換処理が効率よく行われない場合があるために生成される。
また、中間コード生成部131は、図4(b)に示すように、組込関数定義記憶領域62に格納された組込関数の動作定義及び組込関数の関数名を中間コードに変換する。この結果、組込関数名の中間コードA1及び動作定義の中間コードA2が生成される。
同様に、中間コード生成部131は、図5(b)に示すように、複合組込関数定義記憶領域63に格納された複合組込関数の動作定義及びインライン節中の命令列を中間コードに変換する。この結果、インライン節中の命令列の中間コードB1及び動作定義の中間コードB2が生成される。
図4(b)及び5(b)に示すように、組込関数の関数名及び複合組込関数のインライン節は、動作定義への仮想の分岐命令“COMPLEX_INLINE_START”と、関数名及びインライン節の終了であることを意味する命令“COMPLEX_INLINE_END”により挟まれる。インライン節の終了であることを意味する命令“COMPLEX_INLINE_END”の直後に、“COMPLEX_INLINE_END”に無条件分岐する命令を置くことにより、データフロー解析を行う場合に、インライン節と動作定義を完全に分離できる。したがって、オペランドの属性と定義内容に矛盾があるか否かのチェックを一回のパスで行うことができる。
また、中間コード生成部131は、図1に示すように一致判定部1321及び最適化部1322を備える。一致判定部1321は、組込関数又は複合組込関数の動作定義と一致する中間コードを検出する。組込関数の動作定義と一致する中間コードが検出された場合、最適化部1322は、組込関数の動作定義と一致する中間コードを組込関数の関数名に最適化する。これに対して複合組込関数の動作定義と一致する中間コードが検出された場合、最適化部1322は、複合組込関数の動作定義と一致する中間コードをインライン節中の命令列に最適化する。
例えば、図6に示すソースプログラムに基づいて図7に示す中間コードが生成されている場合、一致判定部1321は、図5(b)に示す動作定義の中間コードB2のオペランド“P0”,“P1”,及び“P2”と、図7の変数“T1”,“T10”,及び“T5”とを対応させることにより、図5(b)に示す動作定義の中間コードB2と図7の中間コードC1が一致すると判定する。
一致判定部1321が、図5(b)に示す動作定義の中間コードB2と図7の中間コードC1が一致すると判定すると、最適化部1322は、図7の中間コードC1を図5(b)に示すインライン節の中間コードB1に置換すると共に、図5(b)に示す動作定義の中間コードB2の“P0”,“P1”,及び“P2”に対して“T1”,“T10”,及び“T5”をそれぞれ代入する。この結果、図8に示すように、最適化後の中間コードD1が生成される。
図1に示すオブジェクトコード生成部133aは、最適化された中間コードからオブジェクトコードを生成する。詳細には、オブジェクトコード生成部133は、それまでに行われたソースプログラムの最小単位への分割、構文エラーのチェックなどの結果を受けて、コード・ジェネレータの機能を用いて中間コードをオブジェクトコードに変換する。
オブジェクトコード最適化部134aは、オブジェクトコード生成部133aにより生成されたオブジェクトコードに、実際の処理効率を向上させるための変更を加える。オブジェクトコード出力部135は、オブジェクトコードをオブジェクトコード記憶領域64に出力(格納)する。
図7に示す中間コードから生成されるオブジェクトコードは、図9に示すような記述になる。これに対して、図8に示す中間コードから生成されるオブジェクトコードは、図10に示すような記述になる。図9に示す5命令からなる命令列E1は、図10に示すように、3命令からなる命令列F1に最適化されている。
また、組込関数を利用する場合は、ソースプログラム中に、動作定義“R3 = ((R1 << 1) | (R2 >> 1)) + 10”を検出した場合、1命令に置き換えるだけであるが、複合組込関数を利用することにより、3命令からなる命令列“dsp1(R1,R2) dsp2(0) dsp3(R3)”に置き換え可能となる。
尚、図1に示す自動設計装置は、図示を省略するデータベース制御装置及び入出力制御装置を備える。データベース制御装置は、記憶装置6に対するファイルの格納場所の検索、及びデータの読み出し・書き込みを行う。これに対して入出力制御装置は、入力装置2からのデータを受け取り、CPU1aに伝達する。即ち入出力制御装置は、入力装置2、出力装置3、或いはCD−ROM、及びフレキシブルディスク等の補助記憶装置5の読取装置等をCPU1aに接続するインターフェイスである。データの流れから見ると、入出力制御装置は、入力装置2、出力装置3、補助記憶装置5、及び外部記憶装置の読取装置と主記憶装置4とのインターフェイスとなる。また入出力制御装置は、CPU1aからのデータを受け取り、出力装置3及び補助記憶装置5等へ伝達する。
更に、図に示す入力装置2としては、例えば、キーボード、マウス、光学式文字読取装置(OCR)等の認識装置、イメージスキャナ等の図形入力装置、及び音声認識装置等の特殊入力装置が使用できる。出力装置3としては、例えば、液晶ディスプレイ、CRTディスプレイ等の表示装置、インクジェットプリンタ、レーザープリンタなどの印刷装置が使用できる。主記憶装置4には、ROM及びRAMが組込まれている。ROMは、CPU1aにおいて実行されるプログラムを格納するプログラム記憶装置等として機能する。これに対してRAMは、CPU1aにおけるプログラム実行処理中に利用されるデータ等を一時的に格納したり、作業領域として利用される一時的なデータメモリ等として機能する。
次に、図11に示すフローチャートを参照して、第1実施形態に係るプログラム開発装置の処理手順例を説明する。
(A)ステップS00において、図1に示す字句解析部121は、ソースプログラム記憶領域60からソースプログラム及びヘッダファイルを読み出す。
(B)ステップS01において、字句解析部121は、ソースプログラム及びヘッダファイルに対して字句解析を行う。
(C)ステップS02において、構文解析部122は、字句解析部121の処理結果に対して構文解析を行う。この結果、組込関数の関数名及び動作定義等が検出され、複合組込関数のインライン節中の命令列及び動作定義等が検出される。構文解析部122は、組込関数の関数名及び動作定義等を組込関数定義記憶領域62に格納し、複合組込関数のインライン節中の命令列及び動作定義等を複合組込関数定義記憶領域63に格納する。構文解析部122の詳細な処理手順については後述する。
(D)ステップS03において、中間コード生成部131は、構文解析後のソースプログラムを中間コードに変換する。また、中間コード生成部131は、組込関数定義記憶領域62から組込関数の関数名及び動作定義等を読み出して中間コードに変換する。同様に、中間コード生成部131は、複合組込関数定義記憶領域63から複合組込関数のインライン節中の命令列及び動作定義等を読み出して中間コードに変換する。
(E)ステップS04において、中間コード最適化部132は、ステップS03で生成されたソースプログラムについての中間コードに対して、組込関数及び複合組込関数についての中間コードを用いた最適化を行う。中間コード最適化部132の詳細な処理手順については後述する。
(F)ステップS05において、オブジェクトコード生成部133aは、最適化後の中間コードをオブジェクトコードに変換する。
(G)ステップS06において、オブジェクトコード最適化部134aは、ステップS05で生成されたオブジェクトコードを最適化する。
(H)ステップS07において、オブジェクトコード出力部135は、最適化されたオブジェクトコードをオブジェクトコード記憶領域64に格納する。
次に、図12に示すフローチャートを参照して、構文解析処理の詳細な処理手順例を説明する。
(a1)ステップS21において、構文解析部122は、入力されたトークンが関数宣言であるか否かを判定する。関数宣言であると判定された場合、ステップS23に進む。関数宣言でないと判定された場合、ステップS22へ進み、構文解析部122は通常の構文解析処理を行う。
(a2)ステップS23において、構文解析部122は、関数宣言が組込関数又は複合組込関数の宣言であるか否か判定する。図2に示す例においては、関数宣言に独自の予約語“_asm”又は“_ASM”が付加されている場合、ユーザ定義の組込関数又は複合組込関数であると判断し、ステップS25に進む。予約語“_asm”又は“_ASM”が付加されていなければ、ステップS24に進み、通常の関数宣言処理が行われる。
(a3)ステップS25において、構文解析部122は、組込関数又は複合組込関数の宣言が、プロトタイプ宣言であるか、或いは関数定義であるのかを判定する。ここで、「プロトタイプ宣言」とはユーザ定義の組込関数のうち、仮引数の型情報や識別子の名前の定義のみで、動作定義を持たない組込関数又は複合組込関数の宣言をいう。プロトタイプ宣言であると判定された場合、ステップS26に進む。関数定義であると判断された場合、ステップS30に進む。
(a4)ステップS26において、構文解析部122は、組込関数又は複合組込関数の仮引数の型情報や識別子の名前の解釈を行い、仮引数の型情報や識別子の名前の指定方法に誤りがあるか否かを判定する。判定の結果、仮引数の型情報や識別子の名前の指定方法に誤りがなければ、ステップS27においてユーザ定義の組込関数又は複合組込関数の定義内容を組込関数定義記憶領域62又は複合組込関数定義記憶領域63に格納する。一方、仮引数の型情報や識別子の名前の指定方法に誤りがあれば、ステップS28においてエラーメッセージを出力する。
(a5)ステップS30において、構文解析部122は、組込関数又は複合組込関数の仮引数の型情報や識別子の名前の解釈を行い、仮引数の型情報や識別子の名前の指定方法に誤りがあるか否か、組込関数又は複合組込関数の動作定義に文法的な誤りがあるか否かを判定する。判定の結果、仮引数の型情報や識別子の名前の指定方法や動作定義に誤りがある場合、ステップS28においてエラーメッセージを出力する。仮引数の型情報や識別子の名前の指定方法や動作定義に誤りがない場合、ステップS31に進む。
(a6)ステップS31において、構文解析部122は、関数定義が、組込関数の関数定義であるか、複合組込関数の関数定義であるか判定する。図2に示す例においては、予約語“_asm”が付加されている場合、ステップS33に進み、組込関数の関数名及び動作定義が組込関数定義記憶領域62に格納される。予約語“_ASM”が付加されている場合、ステップS32に進む。
(a7)ステップS32において、構文解析部122は、複合組込関数のインライン節の記述に誤りがあるか否か判定する。インライン節の記述に誤りがあると判定された場合、ステップS28に進み、エラーメッセージが出力される。インライン節の記述に誤りがないと判定された場合、ステップS34に進み、複合組込関数のインライン節中の命令列及び動作定義が複合組込関数定義記憶領域63に格納される。
(a8)ステップS22、S24、S27、S33、又はS34の後のステップS29においては、すべてのトークンについて構文解析が終了したか否か判定される。すべてのトークンについて構文解析が終了したと判定された場合、構文解析処理が終了する。すべてのトークンについて構文解析が終了していないと判定された場合、ステップS21に処理が戻る。
次に、図13に示すフローチャートを参照して、中間コード最適化処理の詳細な処理手順例を説明する。
(b1)ステップS41において、中間コード最適化部132は、中間コード生成部131が生成した中間コードが、組込関数の明示的呼び出しか否か判定する。ここで、「明示的呼び出し」とは、図4(a)に示す組込関数例においては、ソースプログラム中に、直接“uci”が記述されている場合等を意味する。組込関数の明示的呼び出しであると判定された場合、ステップS43に進む。組込関数の明示的呼び出しでないと判定された場合、ステップS42に進む。
(b2)ステップS42において、中間コード最適化部132の一致判定部1321は、中間コードの組合せが、組込関数又は複合組込関数の動作定義と一致するか否か判定する。中間コードの組合せが組込関数又は複合組込関数の動作定義と一致すると判定された場合、ステップS44に進む。中間コードの組合せが組込関数又は複合組込関数の動作定義と一致しないと判定された場合、ステップS46に進み、通常の中間コードとして処理される。
(b3)ステップS44において、組込関数又は複合組込関数の動作定義と一致すると判定された中間コードの組合せが、複合組込関数の動作定義であるか否か判定される。複合組込関数の動作定義であると判定された場合、ステップS45に進み、最適化部1322により対応するインライン節の命令列(中間コード)に最適化される。複合組込関数の動作定義でない、即ち組込関数であると判定された場合、ステップS43に進み、最適化部1322により組込関数の中間コードに最適化される。
(b4)ステップS43、S45、又はS46の後のステップS47において、中間コード最適化部132は、すべての中間コードについて最適化処理が終了したか否か判定する。すべての中間コードについて最適化処理が終了したと判定された場合、中間コード最適化処理が終了する。すべての中間コードについて最適化処理が終了していないと判定された場合、ステップS41に処理が戻る。
このように、第1実施形態によれば、ソースプログラムを書き換えることなく、ターゲット・ハードウェアに最適なオブジェクトコードを生成できる。即ち、コンパイルの過程において、ソースプログラムを、ターゲット・ハードウェアに依存した特定の命令列を含む別のソースプログラムに置換する最適化が可能となる。したがって、ソースプログラム中の特定のプログラム記述を1命令に置き換えるだけでなく、複数命令からなる命令列に置き換えることができる。
(第1実施形態の第1変形例)
本発明の第1実施形態の第1変形例として図14に示すように、プログラム開発装置が、中間コードを生成せずに、ソースプログラムから直接オブジェクトコードを生成する構成でも良い。
オブジェクトコード生成部133bは、構文解析後のソースプログラムをオブジェクトコードに変換する。オブジェクトコード最適化部134bは、生成されたオブジェクトコードに対して、組込関数及び複合組込関数を用いた最適化を行う。その他の構成については、図1と同様である。また、図14に示すプログラム開発装置は図15に示すように、図11に示した中間コード生成処理(ステップS03)及び中間コード最適化処理(ステップS04)を実行しない。
図14に示すオブジェクトコード最適化部134bは、図16に示すように、オブジェクトコード(機械語)について組込関数又は複合組込関数との一致判定を行う。具体的には、オブジェクトコード最適化部134bの一致判定部1341は、図16のステップS62において、組込関数又は複合組込関数の動作定義と一致する機械語列を検出する。
オブジェクトコード最適化部134bの最適化部1342は、組込関数の動作定義と一致する機械語列が検出された場合、図16のステップS63において、組込関数の動作定義と一致する機械語列を組込関数の関数名に最適化する。これに対して複合組込関数の動作定義と一致する機械語列が検出された場合、最適化部1342は、図16のステップS65において、複合組込関数の動作定義と一致する機械語列をインライン節中の命令列に最適化する。その他の処理については、図13と同様である。
第1実施形態の第1変形例に係るプログラム開発装置によれば、中間コードを生成しないので、コンパイラ10bの構成を簡略化できる。
(第1実施形態の第2変形例)
本発明の第1実施形態の第2変形例として図17に示すように、図1に示した中間コード最適化部132が、最適化に使用した複合組込関数の履歴を作成し、履歴に存在する複合組込関数を優先的に使用しても良い。また、複合組込関数だけでなく、最適化に使用した組込関数の履歴を作成し、履歴に存在する組込関数を優先的に使用しても良い。尚、最適化に使用した複合組込関数の履歴は、例えば図1に示す複合組込関数定義記憶領域63に格納される。最適化に使用した組込関数の履歴は、例えば組込関数定義記憶領域62に格納される。
即ち、中間コード最適化部132は、図17のステップS400において、中間コードの組合せが、履歴に存在する組込関数又は複合組込関数の動作定義と一致するか否か判定する。履歴中の組込関数又は複合組込関数の動作定義と一致しないと判定された場合、ステップS401において、中間コード最適化部132は、中間コードの組合せが、組込関数又は複合組込関数の動作定義と一致するか否か判定する。ステップS402において、中間コード最適化部132は、ステップS401で一致すると判定された組込関数又は複合組込関数を履歴に追加する。その他の処理については図13と同様である。
一例として、図18に示す複合組込関数“case2”及び図19に示す複合組込関数“case3”がソースプログラム記憶領域60に格納されている場合、複合組込関数“case2”及び“case3”のそれぞれの動作定義G2及びH2は互いに類似することとなる。図20に示すようなソースプログラムがソースプログラム記憶領域60に格納される場合、ソースプログラムのプログラム記述I1中の3つの文は、いずれも複合組込関数“case3”の動作定義H2に一致する。
しかしながら、図20に示すソースプログラムのプログラム記述I2については、複合組込関数“case2”及び“case3”のそれぞれの動作定義G2及びH2のいずれとも一致する。よって、複合組込関数“case2”及び“case3”のいずれを選択するかの基準がない場合、複合組込関数“case2”に最適化される可能性もある。
したがって、第1実施形態の第2変形例においては、最適化に利用した複合組込関数の履歴を参照して、過去に最適化に使用された複合組込関数“case3”を採用する。この結果、図20に示すソースプログラム例に関しては、複合組込関数“case2”のインライン節G1だけに使用されている命令“dsp2”をハードウェア化する必要がなくなる。
このように、第1実施形態の第2変形例によれば、複合組込関数及び組込関数の適用に優先度を設けることができるため、最適化に使用される複合組込関数及び組込関数の種類を削減できる。この結果、最適化に使用されない複合組込関数のインライン節中の命令列を実行するためのハードウェア、及び最適化に使用されない組込関数を実行するためのハードウェアを実装不要とすることができ、ターゲット・ハードウェアのハードウェア規模を削減することが可能となる。
尚、第1実施形態の第2変形例においては、中間コード最適化部132が履歴を作成する一例を説明したが、図14に示すプログラム開発装置の構成を採用する場合、オブジェクトコード最適化部134bが履歴を作成することとなる。
(第1実施形態の第3変形例)
本発明の第1実施形態の第3変形例として、図21に示すように、図1に示した中間コード最適化部132が、ソースデバッグ情報を選択的に出力する構成でも良い。ここで、「デバッグ情報」としては、例えば行番号が利用できる。
具体的には、図1に示す最適化部1322が、図21のステップS411においてインライン節を解析し、ステップS411においてデバッグ情報を検出する。また、ステップS413及びS414に示すように、インライン節の中間コード列についてデバッグ情報を付加する。
一例として、図22に示す複合組込関数J1からは、図23に示すような中間コードが生成される。図23に示すように、図22に示す複合組込関数J1のインライン節の命令列から生成された中間コードに対しては、デバッグ情報(行番号)K1が付加されている。図22に示すソースプログラムJ2から生成された中間コードに対して、図23に示す複合組込関数の中間コードを用いて最適化が行われる場合、図24に示すオブジェクトコードが生成される。図24に示すオブジェクトコードにおいては、図23に示すデバッグ情報(行番号)が維持されている。
第1実施形態の第3変形例によれば、デバッガを使用した場合に、どのソースプログラムが、どの複合組込関数によって置き換えられたかについての情報をユーザに提供できる。また、最適化が行われた部分について、複合組込関数のインライン節の中を表示させることができる。
尚、第1実施形態の第3変形例においては、中間コード最適化部132が、インライン節の中間コード列についてデバッグ情報を付加する一例を説明したが、図14に示すプログラム開発装置の構成を採用する場合は、オブジェクトコード最適化部134bがインライン節の機械語列についてデバッグ情報を付加することとなる。
(第2実施形態)
本発明の第2実施形態に係るプログラム開発装置は、図25に示すように、超長命令語(VLIW)型の拡張命令(以下において「VLIW命令」という。)を生成可能な命令生成部700aを更に備える点が図1と異なる。即ち、図25に示すプログラム開発装置は、図3に示すコプロセッサ723がVLIW型である場合に適用される。VLIW命令においては命令語長を長くすることで、一度に複数命令を同時実行することが可能となる。ここで、「VLIW命令」とは、図3に示すプロセッサコア710及びコプロセッサ723で同時に実行される命令の組み合わせを1つの命令とした長命令を意味する。命令生成部700aは、ソースプログラム記憶領域60に格納されたソースプログラムからVLIW命令を自動的に生成する。更に、命令生成部700aは、VLIW命令をインライン節に含む複合組込関数を生成してソースプログラム記憶領域60に格納する。
具体的には、命令生成部700aは、並列化命令検出部701a、VLIW命令定義部72、複合組込関数生成部73、及び命令定義ファイル生成部74を備える。並列化命令検出部701aは、ソースプログラムからデータフローグラフを作成し、データフローグラフに基づいてソースプログラム中の並列実行可能な命令を検出する。「データフローグラフ」とは、複数命令のそれぞれのオペランドのデータ依存関係に応じて各命令を連結したグラフを意味する。VLIW命令定義部72は、並列実行可能な命令から、VLIW型のコプロセッサ723に実行させるコプロセッサ命令を定義する。複合組込関数生成部73は、VLIW命令をインライン節中の命令列として記述し、ソースプログラム中のVLIW命令への最適化対象となるプログラム記述を動作定義として定義して複合組込関数を生成する。命令定義ファイル生成部74は、VLIW命令定義部72が定義したコプロセッサ命令と、図3に示すプロセッサコア710及びコプロセッサ723間の転送命令等を作成する。命令定義ファイル生成部74が生成した命令定義ファイルは、命令定義ファイル記憶領域65に格納される。その他の構成については、図1と同様である。
また、並列化命令検出部701aは、コンパイラ71a、データフローグラフ作成部71b、検出部71c、及び判定部71dを備える。コンパイラ71aは、ソースプログラム記憶領域60からソースプログラムを読み出し、ソースプログラムをコンパイルしてアセンブリ記述を生成する。尚、コンパイラ71aとしては、ソースプログラムの言語に対応した既存のコンパイラが使用できる。一例として、コンパイラ71aは、図26に示すソースプログラムをコンパイルして図27に示すアセンブリ記述を生成する。
データフローグラフ作成部71bは、コンパイラ71aが生成したアセンブリ記述から、図28に示すようなデータフローグラフを作成する。具体的には、データフローグラフ作成部71bは、図27におけるオペランドの依存関係に基づいて、各命令を鎖状に連結することによりデータフローグラフを作成する。
検出部71cは、図28に示すように、データフローグラフの各ノード(命令)にラベルを付加する。図28においては、(1−1)、(1−2)、(2−1)、(2−2)、(2−3)、及び(3−1)等のラベルが、データフローグラフの各ノードに付加される。尚、図28においては、説明の簡略化のため、データフローグラフの一部にのみラベルを付している。
検出部71cは、図29に示すように、並列化可能な命令を検出するために図28に示すデータフローグラフを変形する。即ち、検出部71cは、図28に示すように分散して配置されている各ノードを、図29に示すように並列的に再配置することで並列化可能な命令を検出する。
検出部71cは、図29に示すデータフローグラフにより、(1−1)、(1−2)、(2−1)、(2−2)、(2−3)、及び(3−1)の各ノードに関して、(1−1)及び(1−2)のグループ(以下において{(1−1),(1−2)}と表記する。)と、(2−1)、(2−2)、及び(2−3)のグループ(以下において{(2−1),(2−2),(2−3)}と表記する。)と、(3−1)の3つが並列実行可能であることを検出する。
また、検出部71cは、データフローグラフから、アセンブリ記述の実行に要するサイクル数を見積もる。図28及び図29に示すデータフローグラフにより、総実行命令数は10であり、乗算“mul”と除算“div”の実行に20サイクル、乗算“mul”と除算“div”以外の各命令の実行に1サイクルを必要とする場合、すべての命令の実行に67サイクルが必要であると算出される。
或いは、計算によりアセンブリ記述の実行に要するサイクル数を求めることに代えて、ターゲット・ハードウェア又はシミュレーション上でアセンブリ記述の実行を解析し、解析結果に基づいてアセンブリ記述の実行に要するサイクル数を求めても良い。
更に、判定部71dは、図3に示すコプロセッサ723の並列実行可能な命令数(以下において「最大並列度」という。)に応じて、検出部71cが検出した並列実行可能な命令をプロセッサコア710及びコプロセッサ723のそれぞれに割り当てる。コプロセッサ723の最大並列度が2であるとすると、判定部71dは、3つのグループのうち最も実行サイクル数の多いアセンブリ記述をコプロセッサ723の命令として、次に実行サイクルの多いアセンブリ記述をそのコプロセッサ命令と対にしてプロセッサコアの命令系列に割り当てる。
よって、図29に示す例においては、{(2−1),(2−2),(2−3)}を1つのコプロセッサ命令系列とし、{(1−1),(1−2)}をそれと並列実行されるプロセッサコア命令系列とする。尚、最大並列度は、入力装置2に対する操作により決定されても良く、最大並列度のデータが記憶装置600に予め格納されていても良い。
また、VLIW命令定義部72は、判定部71dの判定結果に応じて、コプロセッサ723に実行させる並列化可能命令と等価なコプロセッサ命令を定義する。VLIW命令定義部72は、例えば、データフローグラフに基づいて並列化可能命令の入力数及び出力数を判定し、並列化可能命令に含まれる命令を解釈してコプロセッサ命令を生成する。{(2−1),(2−2),(2−3)}の命令系列と等価なコプロセッサ命令を新たに定義する場合、VLIW命令定義部72は、図29に示すデータフローグラフよりこの命令系列が2入力1出力であると判定する。更に、{(2−1),(2−2),(2−3)}の命令系列は、ターゲットとするプロセッサコア710の命令の機能がすべて登録されていると仮定すると、乗算の結果に3を加えるという処理であることを導出できる。尚、プロセッサコア710の命令は、例えばコンパイラ71aから得ることができる。
この結果、VLIW命令定義部72は、「2個のコプロセッサ・レジスタの値の積に3を加算し、加算結果をコプロセッサ・レジスタに格納する」というコプロセッサ命令を定義する。「コプロセッサ・レジスタ」は、コプロセッサ723の内部に備えられるレジスタを意味する。
更に、命令定義ファイル生成部74は、図30に示すように、VLIW命令定義部72が定義したコプロセッサ命令と、プロセッサコア710とコプロセッサ723(コプロセッサ・レジスタ)間の転送命令を作成する。図30において、各命令定義は、命令のニーモニック、ビットパターン、及び動作記述により構成されている。図30に示す命令“CMOV”は、プロセッサコア710とコプロセッサレジスタ間の転送命令であり、命令“CMAC3”は、図29に示す{(2−1),(2−2),(2−3)}を1つの命令にしたものであり、「2個のコプロセッサ・レジスタの値の積に3を加算し、加算結果をコプロセッサ・レジスタに格納する」というコプロセッサ命令である。尚、命令定義ファイルの命令フォーマットは、特開2003−323463号公報に開示されているアーキテクチャ・データベースとしても良い。この場合、コンパイラが新たに定義されたVLIW命令を生成できる。
また、複合組込関数生成部73は、並列化命令検出部701aのコンパイラ71aから出力されるアセンブリ記述内のシンボル情報により、ソースプログラムのソース行とアセンブリ記述の対応付けが可能である。よって、複合組込関数生成部73は、図29に示す{(2−1),(2−2),(2−3)}に相当するソースプログラムを切り出すことができる。したがって、図26に示す“y = c * d + 3;”は、図31に示すように、コプロセッサ命令を使った“cmac3(tmp_c, tmp_d);”とコプロセッサレジスタ転送命令に置き換えられる。尚、図31に示す記述を第1実施形態に係るコンパイラ10aがコンパイルすると、図32に示すオブジェクトコードが生成される。図31に示す“_cop”は、宣言された変数をコプロセッサ723のレジスタに割り付けるための指示子である。図32に示す“+”は、前後の命令が1つのVLIW命令に詰め込まれることを示す。図32において、例えば、“mul $1, $2”と“+cmac3 $c1, $c2”とを1つにまとめたものがVLIW命令であり、“+cmac3 $c1, $c2”はコプロセッサ命令である。
この結果、複合組込関数生成部73は、図33に示すように、VLIW命令をインライン節に含み、VLIW命令への置換対象となるソースプログラム中のプログラム記述を動作定義に含む複合組込関数を生成する。図33に示す複合組込関数は、図25に示すソースプログラム記憶領域60に格納される。コンパイラ10aは、ソースプログラム中に図33の動作定義M2に一致するプログラム記述を検出した場合、図33のインライン節M1中のVLIW命令を含む命令列に最適化する。
次に、図34に示すフローチャートを参照して、第2実施形態に係るプログラム開発装置の処理手順例を説明する。但し、第1実施形態に係るプログラム開発装置の処理と同様の処理については、重複する説明を省略する。
(A)ステップS101において、図25に示すコンパイラ71aは、ソースプログラム記憶領域60からソースプログラムを読み出し、ソースプログラムをコンパイルしてアセンブリ記述を生成する。
(B)ステップS102において、データフローグラフ作成部71bは、ステップS101で作成されたアセンブリ記述からデータフローグラフを作成する。
(C)ステップS103において、検出部71cは、ステップS102で作成されたデータフローグラフ中の並列化可能な命令を検出する。
(D)ステップS104において、判定部71dは、コプロセッサ723の最大並列度に応じて、ステップS103で検出された並列実行可能な命令をコプロセッサ命令とするか否か判定する。
(E)ステップS105において、VLIW命令定義部は、ステップS104の判定結果に応じて、並列実行可能な命令をコプロセッサ命令として定義する。
(F)ステップS106において、命令定義ファイル生成部74は、ステップS105で定義されたコプロセッサ命令から命令定義ファイルを作成する。命令定義ファイル生成部74が生成した命令定義ファイルは、命令定義ファイル記憶領域65に格納される。
(G)ステップS107において、複合組込関数生成部73は、ステップS105で定義されたVLIW命令をインライン節に含む複合組込関数を生成する。複合組込関数生成部73が生成した複合組込関数は、ソースプログラム記憶領域60に格納される。尚、ステップS107は、ステップS106の直前又はステップS106と同時に実行されても良い。
(H)ステップS01〜S07においては、図11と同様の処理が実行される。この結果、VLIW命令を含むオブジェクトコードが自動生成される。
このように、第2実施形態によれば、VLIW命令を自動生成できるので、拡張可能なプロセッサの性能を十分に活用できる。また、ユーザ自身が経験に基づいて試行錯誤しながら命令を追加し、シミュレーションによってその効果を確かめ、有用と判断すれば命令を追加する手順と比べて、与えられたアプリケーションに対して効果的な命令を極めて短期間で作成することが可能となる。よって、プログラムの開発期間を飛躍的に短縮できる。更に、データフローグラフを利用して並列実行可能な演算を検出して、コプロセッサ723の最大並列度に応じてVLIW命令を生成するので、コプロセッサ723のアーキテクチャ上の制約を満たすことができる。
(第2実施形態の変形例)
本発明の第2実施形態の変形例に係るプログラム開発装置として、図35に示すように、ソースプログラムを入力としてソースプログラムレベルでデータフローグラフを作成しても良い。即ち、図35に示すプログラム開発装置は、図25に示したコンパイラ71aを備えていない。また、図35に示すデータフローグラフ作成部71bは、ソースプログラム記憶領域60からソースプログラムを読み出し、ソースプログラムからデータフローグラフを作成する。
したがって、第2実施形態の変形例に係るプログラム開発装置によれば、ソースプログラムをコンパイルすることなく並列化可能な命令を検出できるので、並列化命令検出部701bの構成を簡略化できる。
(その他の実施形態)
上記のように、本発明は第1及び第2実施形態によって記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施形態、実施例及び運用技術が明らかとなろう。
上述した第1及び第2実施形態においては、ソースプログラム及びヘッダファイルが別個に用意されてコンパイラ10a及び10bに与えられても良いし、ソースプログラム中にヘッダファイルを明示的に挿入してコンパイラ10a及び10bに与えられても良い。
更に、ソースプログラムがC言語により記述されている場合を例に説明したが、C++言語又はfortran言語等の様々なプログラミング言語、或いはハードウェア記述言語(HDL)等に応用可能である。
尚、既に述べた第1及び第2実施形態に係る自動設計装置は、ソースプログラム及びヘッダファイル等のデータをネットワークを介して取得しても良い。この場合、プログラム開発装置が、ネットワークとの通信を制御する通信制御装置等を更に備える必要がある。
このように本発明は、ここでは記載していない様々な実施形態等を包含するということを理解すべきである。したがって、本発明はこの開示から妥当な特許請求の範囲の発明特定事項によってのみ限定されるものである。
本発明の第1実施形態に係るプログラム開発装置の構成例を示す機能ブロック図である。 図2(a)は複合組込関数の記述例を示す図であり、図2(b)は組込関数の記述例を示す図であり、図2(c)は図2(a)のインライン節の記述例を示す図であり、図2(d)は図2(a)及び(b)の動作定義の記述例を示す図である。 本発明の第1実施形態に係るプログラム開発装置のプログラム開発対象となるプロセッサの構成例を示すブロック図である。 図4(a)は組込関数の一例を示す図であり、図4(b)は図4(a)から生成される中間コードを示す図である。 図5(a)は複合組込関数の一例を示す図であり、図5(b)は図5(a)から生成される中間コードを示す図である。 本発明の第1実施形態に係るプログラム開発装置に入力されるソースプログラムの一例を示す図である。 図6から生成される中間コードを示す図である。 図7に示す中間コードに対して図5に示すインライン節を展開した場合の中間コードを示す図である。 図7に示す中間コードから生成されるオブジェクトコードを示す図である。 図8に示す中間コードから生成されるオブジェクトコードを示す図である。 本発明の第1実施形態に係るプログラム開発装置の処理手順例を示すフローチャートである。 本発明の第1実施形態に係る構文解析処理の処理手順例を示すフローチャートである。 本発明の第1実施形態に係る中間コード最適化処理の処理手順例を示すフローチャートである。 本発明の第1実施形態の第1変形例に係るプログラム開発装置の構成例を示す機能ブロック図である。 本発明の第1実施形態の第1変形例に係るプログラム開発装置の処理手順例を示すフローチャートである。 本発明の第1実施形態の第1変形例に係るオブジェクトコード最適化処理の処理手順例を示すフローチャートである。 本発明の第1実施形態の第2変形例に係る中間コード最適化処理の処理手順例を示すフローチャートである。 本発明の第1実施形態の第2変形例に係る中間コード最適化処理を説明するための複合組込関数の一例を示す図である(その1)。 本発明の第1実施形態の第2変形例に係る中間コード最適化処理を説明するための複合組込関数の一例を示す図である(その2)。 本発明の第1実施形態の第2変形例に係る中間コード最適化処理を説明するためのソースプログラムの一例を示す図である(その2)。 本発明の第1実施形態の第3変形例に係る中間コード最適化処理の処理手順例を示すフローチャートである。 本発明の第1実施形態の第3変形例に係る中間コード最適化処理を説明するためのソースプログラムの一例を示す図である。 図22のソースプログラムから生成されるソースデバッグ情報を含む中間コードを示す図である。 図23のソースデバッグ情報を含む中間コードから生成されるオブジェクトコードを示す図である。 本発明の第2実施形態に係るプログラム開発装置の構成例を示す機能ブロック図である。 本発明の第2実施形態に係るプログラム開発装置入力されるソースプログラムの一例を示す図である。 図26のソースプログラムをコンパイルして得られるアセンブリ記述を示す図である。 図27のアセンブリ記述から生成されるデータフローグラフを示す図である。 図28のデータフローグラフを変形した例を示す図である。 本発明の第2実施形態に係る命令定義ファイル生成部が生成する命令定義ファイルの一例を示す図である。 図26に示すソースプログラムを変形した一例を示す図である。 図31に示す変形後のソースプログラムから生成されるオブジェクトコードを示す図である。 本発明の第2実施形態に係る拡張命令定義部が生成する複合組込関数の一例を示す図である。 本発明の第2実施形態に係るプログラム開発装置の処理手順例を示すフローチャートである。 本発明の第2実施形態の変形例に係るプログラム開発装置の構成例を示す機能ブロック図である。
符号の説明
10a、10b…コンパイラ
12…解析部
13a、13b…コード生成部
60…ソースプログラム記憶領域
700a…命令生成部
701a、701b…並列化命令検出部
72…VLIW命令定義部
73…複合組込関数生成部
723…コプロセッサ

Claims (5)

  1. ソースプログラム中の最適化対象となるプログラム記述を定義した動作定義と、前記最適化後の命令列を記述したインライン節とを含む複合組込関数を前記ソースプログラムの一部として記憶するソースプログラム記憶領域と、
    前記複合組込関数を前記ソースプログラム記憶領域から読み出し、前記複合組込関数を構文解析して前記動作定義及び前記インライン節を検出する解析部と、
    前記ソースプログラム中の前記動作定義に一致するプログラム記述を前記インライン節中の命令列に最適化し、前記ソースプログラムからオブジェクトコードを生成するコード生成部
    とを備えることを特徴とするプログラム開発装置。
  2. 前記コード生成部は、前記最適化に使用した前記複合組込関数の履歴を作成し、前記履歴に存在する前記複合組込関数を優先的に使用することを特徴とする請求項1に記載のプログラム開発装置。
  3. 前記コード生成部は、前記オブジェクトコードにデバッグ情報を選択的に付加することを特徴とする請求項1又は2に記載のプログラム開発装置。
  4. 前記ソースプログラムからデータフローグラフを作成し、前記データフローグラフに基づいて前記ソースプログラム中の並列実行可能な命令を検出する並列化命令検出部と、
    前記並列実行可能な命令から、VLIW型のコプロセッサに実行させるコプロセッサ命令を含むVLIW命令を定義するVLIW命令定義部と、
    前記VLIW命令を前記インライン節中の命令列として記述し、前記ソースプログラム中の前記VLIW命令への最適化対象となるプログラム記述を前記動作定義として定義して前記複合組込関数を生成する複合組込関数生成部
    とを更に備えることを特徴とする請求項1〜3のいずれか1項に記載のプログラム開発装置。
  5. 前記並列化命令検出部は、前記コプロセッサの並列実行可能な命令数に応じて、前記並列化命令検出部が検出した前記並列実行可能な命令を前記コプロセッサ命令とするか否か判定することを特徴とする請求項4に記載のプログラム開発装置。

















JP2005055020A 2005-02-28 2005-02-28 プログラム開発装置 Pending JP2006243838A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2005055020A JP2006243838A (ja) 2005-02-28 2005-02-28 プログラム開発装置
US11/362,728 US7917899B2 (en) 2005-02-28 2006-02-28 Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005055020A JP2006243838A (ja) 2005-02-28 2005-02-28 プログラム開発装置

Publications (1)

Publication Number Publication Date
JP2006243838A true JP2006243838A (ja) 2006-09-14

Family

ID=36945488

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005055020A Pending JP2006243838A (ja) 2005-02-28 2005-02-28 プログラム開発装置

Country Status (2)

Country Link
US (1) US7917899B2 (ja)
JP (1) JP2006243838A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011096016A1 (ja) * 2010-02-05 2011-08-11 株式会社 東芝 コンパイラ装置

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7058941B1 (en) * 2000-11-14 2006-06-06 Microsoft Corporation Minimum delta generator for program binaries
US20060277525A1 (en) * 2005-06-06 2006-12-07 Microsoft Corporation Lexical, grammatical, and semantic inference mechanisms
WO2007113369A1 (en) * 2006-03-30 2007-10-11 Atostek Oy Parallel program generation method
US20080288919A1 (en) * 2007-05-14 2008-11-20 Microsoft Corporation Encoding of Symbol Table in an Executable
US8175099B2 (en) * 2007-05-14 2012-05-08 Microsoft Corporation Embedded system development platform
US8484629B2 (en) * 2007-05-24 2013-07-09 Microsoft Corporation Programming model for modular development
JP2012510661A (ja) 2008-12-01 2012-05-10 ケーピーアイティ クミンズ インフォシステムズ リミテッド 逐次コンピュータプログラムコードを並列処理する方法及びシステム
FR2953612A1 (fr) * 2009-12-03 2011-06-10 Flexycore Procede de mise au point d'application logicielle, systeme et produit programme d'ordinateur correspondant.
KR101849702B1 (ko) 2011-07-25 2018-04-17 삼성전자주식회사 외부 인트린직 인터페이스
US8656376B2 (en) * 2011-09-01 2014-02-18 National Tsing Hua University Compiler for providing intrinsic supports for VLIW PAC processors with distributed register files and method thereof
US10025563B2 (en) * 2016-09-14 2018-07-17 International Business Machines Corporation Selecting COBOL perform statements for inlining

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6316334A (ja) * 1986-07-08 1988-01-23 Nec Corp 利用者が任意に定義した機械語のインライン展開方式
JPH0451328A (ja) * 1990-06-19 1992-02-19 Fujitsu Ltd 複合型命令スケジューリング処理装置
JPH04175974A (ja) * 1990-11-09 1992-06-23 Hitachi Ltd コプロセッサ論理回路自動生成方法
JPH05298115A (ja) * 1992-04-23 1993-11-12 Toshiba Corp データ処理装置及び方法
JPH0784797A (ja) * 1993-06-30 1995-03-31 Toshiba Corp ロードモジュールへのソースコード行番号登録方法および装置
JP2000163266A (ja) * 1998-11-30 2000-06-16 Mitsubishi Electric Corp 命令実行方式
JP2000284970A (ja) * 1999-03-29 2000-10-13 Matsushita Electric Ind Co Ltd プログラム変換装置及びプロセッサ
JP2002024029A (ja) * 2000-07-11 2002-01-25 Toshiba Corp コンパイラ、コンパイル方法及びコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体
JP2003196106A (ja) * 2001-12-20 2003-07-11 Internatl Business Mach Corp <Ibm> プログラム変換方法、コンピュータ装置及びプログラム
JP2004070531A (ja) * 2002-08-02 2004-03-04 Matsushita Electric Ind Co Ltd コンパイラ用プログラム、コンパイラ装置及びコンパイル方法
JP2004295398A (ja) * 2003-03-26 2004-10-21 Toshiba Corp コンパイラ、コンパイル方法、及びプログラム開発ツール

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5179702A (en) * 1989-12-29 1993-01-12 Supercomputer Systems Limited Partnership System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling
US5175856A (en) * 1990-06-11 1992-12-29 Supercomputer Systems Limited Partnership Computer with integrated hierarchical representation (ihr) of program wherein ihr file is available for debugging and optimizing during target execution
US5548761A (en) * 1993-03-09 1996-08-20 International Business Machines Corporation Compiler for target machine independent optimization of data movement, ownership transfer and device control
JP2794523B2 (ja) * 1993-11-26 1998-09-10 日本アイ・ビー・エム株式会社 アレイ関数をもつプログラミング言語におけるインライン展開方法
US5701489A (en) * 1995-06-06 1997-12-23 International Business Machines Corporation System for partial in-line expansion of procedure calls during program compilation
US6091896A (en) * 1995-12-22 2000-07-18 Hewlett-Packard Company Debugging optimized code using data change points
US6003129A (en) * 1996-08-19 1999-12-14 Samsung Electronics Company, Ltd. System and method for handling interrupt and exception events in an asymmetric multiprocessor architecture
US6748587B1 (en) * 1998-01-02 2004-06-08 Hewlett-Packard Development Company, L.P. Programmatic access to the widest mode floating-point arithmetic supported by a processor
JP3284956B2 (ja) * 1998-01-26 2002-05-27 日本電気株式会社 プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
JP2002230065A (ja) * 2001-02-02 2002-08-16 Toshiba Corp システムlsi開発装置およびシステムlsi開発方法
US7080365B2 (en) * 2001-08-17 2006-07-18 Sun Microsystems, Inc. Method and apparatus for simulation system compiler
US6941548B2 (en) * 2001-10-16 2005-09-06 Tensilica, Inc. Automatic instruction set architecture generation
JP4202673B2 (ja) * 2002-04-26 2008-12-24 株式会社東芝 システムlsi開発環境生成方法及びそのプログラム
US7020873B2 (en) * 2002-06-21 2006-03-28 Intel Corporation Apparatus and method for vectorization of detected saturation and clipping operations in serial code loops of a source program
JP3840149B2 (ja) * 2002-06-28 2006-11-01 株式会社東芝 コンパイラ、演算処理システム及び演算処理方法
EP1378824A1 (en) * 2002-07-02 2004-01-07 STMicroelectronics S.r.l. A method for executing programs on multiple processors and corresponding processor system
US7155708B2 (en) * 2002-10-31 2006-12-26 Src Computers, Inc. Debugging and performance profiling using control-dataflow graph representations with reconfigurable hardware emulation
JP2004334429A (ja) * 2003-05-06 2004-11-25 Hitachi Ltd 論理回路及びその論理回路上で実行するプログラム
US7146606B2 (en) * 2003-06-26 2006-12-05 Microsoft Corporation General purpose intermediate representation of software for software development tools
US7159105B2 (en) * 2003-06-30 2007-01-02 Intel Corporation Platform-based optimization routines provided by firmware of a computer system
JP4175974B2 (ja) 2003-07-24 2008-11-05 シャープ株式会社 画像データ転送制御装置
US7386842B2 (en) * 2004-06-07 2008-06-10 International Business Machines Corporation Efficient data reorganization to satisfy data alignment constraints
JP2006243839A (ja) * 2005-02-28 2006-09-14 Toshiba Corp 命令生成装置及び命令生成方法

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6316334A (ja) * 1986-07-08 1988-01-23 Nec Corp 利用者が任意に定義した機械語のインライン展開方式
JPH0451328A (ja) * 1990-06-19 1992-02-19 Fujitsu Ltd 複合型命令スケジューリング処理装置
JPH04175974A (ja) * 1990-11-09 1992-06-23 Hitachi Ltd コプロセッサ論理回路自動生成方法
JPH05298115A (ja) * 1992-04-23 1993-11-12 Toshiba Corp データ処理装置及び方法
JPH0784797A (ja) * 1993-06-30 1995-03-31 Toshiba Corp ロードモジュールへのソースコード行番号登録方法および装置
JP2000163266A (ja) * 1998-11-30 2000-06-16 Mitsubishi Electric Corp 命令実行方式
JP2000284970A (ja) * 1999-03-29 2000-10-13 Matsushita Electric Ind Co Ltd プログラム変換装置及びプロセッサ
JP2002024029A (ja) * 2000-07-11 2002-01-25 Toshiba Corp コンパイラ、コンパイル方法及びコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体
JP2003196106A (ja) * 2001-12-20 2003-07-11 Internatl Business Mach Corp <Ibm> プログラム変換方法、コンピュータ装置及びプログラム
JP2004070531A (ja) * 2002-08-02 2004-03-04 Matsushita Electric Ind Co Ltd コンパイラ用プログラム、コンパイラ装置及びコンパイル方法
JP2004295398A (ja) * 2003-03-26 2004-10-21 Toshiba Corp コンパイラ、コンパイル方法、及びプログラム開発ツール

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011096016A1 (ja) * 2010-02-05 2011-08-11 株式会社 東芝 コンパイラ装置
JPWO2011096016A1 (ja) * 2010-02-05 2013-06-06 株式会社東芝 コンパイラ装置

Also Published As

Publication number Publication date
US7917899B2 (en) 2011-03-29
US20060200796A1 (en) 2006-09-07

Similar Documents

Publication Publication Date Title
JP2006243838A (ja) プログラム開発装置
JP4822817B2 (ja) コンパイルシステム
JP4057938B2 (ja) コンパイラ、コンパイル方法、及びプログラム開発ツール
JP2006243839A (ja) 命令生成装置及び命令生成方法
TWI463404B (zh) 編譯系統以及編譯方法
US20020019973A1 (en) Compiler and method for compiling easily adaptable to processor specifications
JP2001166949A (ja) シンボリック実行を用いてソースコードをコンパイルするための方法及び装置
JPH07105012A (ja) 言語処理プログラムのコンパイル処理方式
JP2005141410A (ja) コンパイラ装置及びコンパイル方法
Blindell Instruction Selection
JP2001166946A (ja) 階層の平坦化によりソースコードをコンパイルする方法及び装置
JP2008276735A (ja) プログラムコード変換装置及びプログラムコード変換方法
Nacke et al. Learn LLVM 17: A beginner's guide to learning LLVM compiler tools and core libraries with C++
JP4719415B2 (ja) 情報処理システム及びコード生成方法
KR102614967B1 (ko) 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법
JP2011113147A (ja) ソース解析プログラム、プリプロセッサ、レキサ、および構文木解析プログラム
JPH0756745A (ja) 言語処理プログラムのコンパイラ処理方式
Blindell Survey on instruction selection: An extensive and modern literature review
JP2019139675A (ja) ソースコード最適化装置、プログラムおよび方法
JP2004246924A (ja) アプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法
JP2001005655A (ja) アプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法
JPH11195011A (ja) 言語翻訳処理装置、言語翻訳処理方法、言語翻訳処理プログラムを記録した記録媒体
Fritzson Modelica Meta-Programming and Symbolic Transformations MetaModelica Programming Guide
JPH0981411A (ja) コンパイラ
Wang et al. Spoke

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20071211

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100216

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110111

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110314

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110628