JP4158239B2 - 情報処理装置および方法、並びに記録媒体 - Google Patents

情報処理装置および方法、並びに記録媒体 Download PDF

Info

Publication number
JP4158239B2
JP4158239B2 JP25362798A JP25362798A JP4158239B2 JP 4158239 B2 JP4158239 B2 JP 4158239B2 JP 25362798 A JP25362798 A JP 25362798A JP 25362798 A JP25362798 A JP 25362798A JP 4158239 B2 JP4158239 B2 JP 4158239B2
Authority
JP
Japan
Prior art keywords
instruction
execution
upper limit
clocks
limit value
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.)
Expired - Fee Related
Application number
JP25362798A
Other languages
English (en)
Other versions
JP2000089964A (ja
Inventor
順久 藤波
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.)
Sony Corp
Original Assignee
Sony 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 Sony Corp filed Critical Sony Corp
Priority to JP25362798A priority Critical patent/JP4158239B2/ja
Priority to US09/379,135 priority patent/US6694512B1/en
Publication of JP2000089964A publication Critical patent/JP2000089964A/ja
Application granted granted Critical
Publication of JP4158239B2 publication Critical patent/JP4158239B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、情報処理装置および方法、並びに記録媒体に関し、特に、クロック数に基づいて、超最適化を行うようにした情報処理装置および方法、並びに記録媒体に関する。
【0002】
【従来の技術】
コンピュータにより処理されるプログラム(マシン命令列)は、出来るだけ迅速に処理することができるのが好ましい。このような観点から、命令数またはクロック数が出来るだけ小さくなるように最適化が行われる。
【0003】
さらに、最適化を発展させ、マシン語で書かれたプログラムを入力として受け取り、可能なプログラムを全て調べ、元のプログラムと同じ機能を有するものを探し出すようにすること、すなわち超最適化することも提案されている。この超最適化については、例えばMassalin,H.氏により、「Superoptimizer -- A Look at the Smallest Program,Proceedings of the Second International Conference on Architectural Support for Programming Languages and Operating System,1987,PP.122-126」に開示されている。
【0004】
【発明が解決しようとする課題】
しかしながら、上記した論文に記載されている超最適化は、全探索に基づいて、与えられた関数を計算する命令数が最小となるプログラム(マシン命令列)を探索するものである。しかしながら、近年のパイプライン化されたプロセッサにおいては、命令実行パイプラインのスケジューリングが重要であり、命令数が少なくても、必ずしも実行時間が短くなることにはならない。
【0005】
本発明はこのような状況に鑑みてなされたものであり、クロック数に基づいて、超最適化を行うことにより、より迅速に処理が可能なプログラムを生成できるようにするものである。
【0006】
【課題を解決するための手段】
請求項1に記載の情報処理装置は、入力を解析する解析手段と、解析手段により解析された結果に対応して命令を生成する生成手段と、生成手段により生成された命令を実行する実行手段と、実行手段による命令の実行に必要とされるクロック数の上限値を設定し、上限値以下のクロック数で実行される命令を生成手段に生成させるとともに、実行手段により上限値以下のクロック数で、生成された命令が正しく実行されなかった場合、上限値を増加させて設定し直すことにより、クロック数が最小となる命令を探索する探索手段とを備えることを特徴とする。
【0007】
請求項5に記載の情報処理方法は、入力を解析する解析ステップと、命令の実行に必要とされるクロック数の上限値を設定する設定ステップと、解析ステップで解析された結果に対応して、上限値以下のクロック数で実行される命令を生成する生成ステップと、生成ステップで生成された命令を実行する実行ステップと、実行ステップにおいて上限値以下のクロック数で、生成された命令が正しく実行されなかった場合、上限値を増加させて設定し直すことにより、クロック数が最小となる命令を探索する探索ステップとを含むことを特徴とする。
【0008】
請求項6に記載の記録媒体は、入力を解析する解析ステップと、命令の実行に必要とされるクロック数の上限値を設定する設定ステップと、解析ステップで解析された結果に対応して、上限値以下のクロック数で実行される命令を生成する生成ステップと、生成ステップで生成された命令を実行する実行ステップと、実行ステップにおいて上限値以下のクロック数で、生成された命令が正しく実行されなかった場合、上限値を増加させて設定し直すことにより、クロック数が最小となる命令を探索する探索ステップとを含む処理を情報処理装置に実行させる情報処理装置が読みとり可能なプログラムが記録されていることを特徴とする。
【0009】
請求項1に記載の情報処理装置、請求項5に記載の情報処理方法、および請求項6に記載の記録媒体においては、入力を解析した結果に対応して、設定された上限値以下のクロック数で実行される命令が生成され、実行される。上限値以下のクロック数で、生成された命令が正しく実行されなかった場合、上限値が増加されて設定し直されることにより、命令の実行に必要とされるクロック数が最小となる命令が探索される。
【0010】
【発明の実施の形態】
以下に本発明の実施の形態を説明するが、特許請求の範囲に記載の発明の各手段と以下の実施の形態との対応関係を明らかにするために、各手段の後の括弧内に、対応する実施の形態(但し一例)を付加して本発明の特徴を記述すると、次のようになる。但し勿論この記載は、各手段を記載したものに限定することを意味するものではない。
【0011】
請求項1に記載の情報処理装置は、入力を解析する解析手段(例えば、図1の構文解析部1)と、解析手段により解析された結果に対応して命令を生成する生成手段(例えば、図1の命令生成部3)と、生成手段により生成された命令を実行する実行手段(例えば、図1の命令実行シミュレータ4)と、実行手段による命令の実行に必要とされるクロック数の上限値を設定し、上限値以下のクロック数で実行される命令を生成手段に生成させるとともに、実行手段により上限値以下のクロック数で、生成された命令が正しく実行されなかった場合、上限値を増加させて設定し直すことにより、クロック数が最小となる命令を探索する探索手段(例えば、図1の探索実行部2)とを備えることを特徴とする。
【0012】
請求項4に記載の情報処理装置は、無駄な命令の生成を禁止する禁止手段(例えば、図4のステップS3)をさらに備えることを特徴とする。
【0013】
図1は、本発明を適用した超最適化装置の機能的構成例を表している。なお、以後の説明では例として、インテル社のPentium(商標)プロセッサの浮動小数点命令を使用するが、本発明は、それ以外のプロセッサに対しても有効である。構文解析部1は、コマンドライン引数で指定された目的の関数を構文解析し、入力された代入文を表すDAG(Directed Acyclic Graph)を生成する。なお、ここで、使用可能な演算子は、2項演算子(例えば、A+Bの「+」)の+,-,*,/、または単項演算子(例えば、−Aの「−」)の-,ABS(絶対値),SQRT(平方根)となっているが、必要なら他の演算子を追加することもできる。共通部分式(例えば、A×B+A×Bの「A×B」)は、ここでは、自動的に検出される。
【0014】
探索実行部2は、構文解析部1により生成されたDAGに対応して、命令生成部3を再帰呼び出しし、命令を生成させる。また、探索実行部2は、命令実行シミュレータ4より供給されたクロック数に基づいて、クロック数の上限値を1,2,3,・・・と増加し、深さ優先探索処理を行う。再帰の各段階では、DAGの各ノードの実行に必要な命令、あるいは対応するノードのない命令(例えば、FXCH命令など)が1つ生成される。全てのノードに対する命令が生成され、クロック数の上限以内であれば、その命令列が出力される。解が見つからない場合には、クロック数の上限値が増加され、探索が継続される。
【0015】
命令生成部3は、探索実行部2から呼び出され、DAGの各ノードの実行に必要な命令を生成し、再帰を行う。オペランドがそろっていないなど、実行できない場合には、命令生成部3は、何も処理しない。命令の候補が複数存在する場合には、順番に生成処理が行われる。例えば、レジスタST(本明細書において、レジスタST(0)は、レジスタSTとも記載される)とレジスタST(1)の加算を行う命令には、FADD ST,ST(1)、FADD ST(1),ST、FADDP ST(1),STの3種類があるが、これらは順番に生成される。
【0016】
命令実行シミュレータ4は、Pentiumプロセッサの状態(演算に使用されるレジスタの保持している値に対応するノードへのポインタ、計算終了時刻など)、経過時間、生成した命令列などを保持している。また、命令生成部3により生成された命令を実行し、命令生成部3から読み出される手続きにより状態を更新する。後述する枝刈り処理などによるバックトラックのために命令を取り除くときは、状態が元に戻される。命令実行シミュレータ4は、命令を実行する上において必要となったクロック数を探索実行部2に出力する。探索実行部2は、入力されたクロック数が最小となる命令を探索する。
【0017】
なお、この超最適化装置においては、次のようなことが前提とされている。
(1)レジスタが足りなくなることはないものとする。すなわち、メモリアクセスは、入出力の変数アクセスのみとされ、また、変数そのものを除く共通部分式は、使い終わるまで消去されない。
(2)入出力両方に現れる変数や、重複する出力変数はないものとする。そのようなメモリアクセスは冗長だからである。
(3)実行時間にキャッシュミス、ミスアラインメントなどは考慮されない。
(4)結合法則、分配法則など、代数的に等価な変換は、浮動小数点値では問題を起こす可能性があるので考慮されない。
【0018】
次に、その動作について説明する。構文解析部1は、入力された代入文を構文解析してDAGを生成し、探索実行部2に出力する。例えば、いま代入文として、
A:=B+C+D
E:=F+G+H
が入力されたとすると、それぞれから、例えば図2と図3に示すようなDAGが生成される。なお、図2と図3において、○印はノードを示している。
【0019】
このようにして生成されたDAGに基づいて、探索実行部2、命令生成部3、および命令実行シミュレータ4は、例えば図4のフローチャートに示す処理を実行する。
【0020】
すなわち、最初にステップS1において、探索実行部2は、クロックの上限値を表す変数limitclocksに1を初期設定し、ステップS2において、命令生成部3は、命令生成の初期化処理を実行する。
【0021】
次に、ステップS3において、命令生成部3は、命令列を生成する。生成した命令列は、ステップS4において、命令実行シミュレータ4に供給され、シミュレートされる。さらに、命令実行シミュレータ4は、入力された命令が正しく実行され、かつ、ステップS1で設定した上限値limitclocks以下のクロックでその命令を実行することができたか否かを判定する。ステップS4において、NOの判定が行われた場合には、ステップS6に進み、探索実行部2は、クロック数が上限値limitclocks以内の全ての命令を生成したか否かを判定する。まだ全ての命令を生成していない場合には、ステップS3に戻り、それ以降の処理が繰り返し実行される。
【0022】
ステップS6において、クロック数が上限値limitclocks以内の全ての命令が生成されたと判定された場合、ステップS7に進み、探索実行部2は、命令列がステップS5において既に出力されたか否かを判定する。命令列がまだ出力されていない場合には、ステップS8に進み、探索実行部2は、上限値limitclocksを1だけインクリメントした後、ステップS2に戻る。そして、ステップS2以降の処理が繰り返し実行される。
【0023】
以上のような動作が繰り返し実行されて、ステップS4において、生成された命令列が正しく実行され、かつ、上限値limitclocks以下のクロックで実行できたと判定された場合、ステップS5に進み、探索実行部2は、その命令列をアセンブリ言語命令列として出力する。この命令列が出力された後は、その後、ステップS7の処理ステップで命令列が出力されたと判定され、処理が終了される。
【0024】
以下に、
A:=B+C+D
E:=F+G+H
の演算を行うプログラム(B+C+Dを演算してAに代入し、F+G+Hを演算してEに代入するプログラム)を超最適化した場合について説明するが、その前に、超最適化を行わず、この代入文を素朴にインテルPentiumプロセッサのアセンブリ言語に翻訳した場合について、図5を参照して説明する。
【0025】
すなわち、この代入文を素朴に翻訳すると、図5に示すような結果が得られる。図5の第1行目の命令FLD [B]において、レジスタST(0)にメモリBの値をロードする。この処理は、第1番目のクロックで実行される。
【0026】
次に、第2行目の命令FADD [C]により、レジスタST(0)にメモリCの値が加算される。これにより、レジスタST(0)には、B+Cが保持されることになる。この演算は、第2番目乃至第4番目のクロック(加算には3クロックが必要)で実行される。
【0027】
次に、第3行目の命令FADD [D]が実行されると、それまでのレジスタST(0)の値B+CにメモリDの値が加算され、B+C+Dとなる。この演算は、第5番目乃至第7番目のクロックで実行される。
【0028】
次に、第4行目の命令FSTP [A]により、レジスタST(0)に保持されている値B+C+DがメモリAにロードされる。この命令FSTPは、その命令を開始する1クロック前までに、ロードする値を必要とするので、第8番目のクロック分だけストールされた後、第9番目のクロックと第10番目のクロックにおいて、FSTP [A]の命令が実行される。
【0029】
以上により、A:=B+C+Dが実行されたことになる。
【0030】
以下、同様に、第5行目乃至第8行目の命令により、上述した場合と同様にして、E:=F+G+Hの処理が実行される。
【0031】
図6は、
A:=B+C+D
E:=F+G+H
のプログラムを、図1の超最適化装置により超最適化した場合の例を表している。この例においては、第1行目の命令FLD [B]において、レジスタST(0)にメモリBの値がロードされる。この命令は、第1クロックで実行される。第2行目の命令FADD [C]は、レジスタST(0)にメモリCに記憶されている値を加算する命令である。これにより、レジスタST(0)には、B+Cが保持されることになる。この加算は、第1行目の命令が完了した後の第2乃至第4クロックで実行される。
【0032】
第3行目の命令FLD [F]は、レジスタST(0)にメモリFの値をロードする命令であり、このとき、それまでレジスタST(0)に記憶されていた値B+Cは、後段のレジスタST(1)にシフトされる。Pentium(商標)プロセッサにおいては、演算がパイプライン化され、FADD,FSUB,FMULの各命令は、その実行開始の次のクロックで引き続く命令の実行を開始することができる(但し、FMULが連続するときは2クロック後)。従って、第2行目の命令FADD [C]が第2番目のクロックで開始された後、次の第3番目のクロックにおいて、第3行目の命令FLD [F]が実行される。
【0033】
第4行目の命令FADD [G]は、メモリGに記憶されている値をレジスタST(0)に記憶された値に加算する命令であり、いまの場合、レジスタST(0)には、値Fがすでに記憶されているので、これに新たな値Gが加算され、F+Gとなる。この命令は、第4番目乃至第6番目までの3クロックで実行される。
【0034】
第5行目の命令FXCH ST(1)は、レジスタST(0)とレジスタST(1)の値を交換するものであり、いまの場合、それまでレジスタST(1)に保持されていた値B+CがレジスタST(0)に移転され、それまでレジスタST(0)に保持されていた値F+GがレジスタST(1)に移転される。この命令FXCHは、値が計算途中であっても実行可能な命令である。しかも、ある条件の下で、前の命令と同時に実行を開始できる。そこで、この第5行目の命令は、第4行目の命令FADD [G]と同じタイミングで、第4番目のクロックで開始される。
【0035】
次に、第6行目の命令FADD [D]により、レジスタST(0)に保持されている値B+Cに値Dが加算される。この命令は、第5行目の命令が完了した後、第5番目のクロックから第7番目のクロックで実行される。
【0036】
第7行目の命令FLD [H]により、レジスタST(0)にメモリHの値がロードされ、それまでレジスタST(0)に保持されていた値B+C+Dは、後段のレジスタST(1)にシフトされ、それまでレジスタST(1)に保持されていた値F+Gは、後段のレジスタST(2)にシフトされる。この命令FLDは、直前の第6行目の命令がFADDであるので、それが開始された第5番目のクロックの次の第6番目のクロックにおいて実行される。
【0037】
第8行目の命令FADDP ST(2),STは、レジスタST(2)に保持されている値F+GにレジスタST(レジスタST(0))に保持されている値Hを加算し、さらに、それまでレジスタST(0)に保持されていた値Hを削除し、そのとき、レジスタST(1)に保持されている値B+C+Dを前段のレジスタST(0)に転送し、そのときレジスタST(2)に保持されている値F+G+Hを前段のレジスタST(1)に転送する命令である。この命令は、直前の第7行目の命令が実行された第6番目のクロックの次の第7番目から第9番目のクロックの間に実行される。
【0038】
さらに、第9行目の命令FSTP [A]は、メモリAに、レジスタST(0)にそれまで保持されている値B+C+Dを記憶させる命令であり、その結果、それまで後段のレジスタST(1)に保持されていた値F+G+Hが、前段のレジスタST(0)に転送された状態となる。命令FSTPは、その命令を開始する1クロック前までにロードする値を必要とし、その値B+C+Dは、第6行目の命令FADD [D]を実行した第7番目のクロックのタイミングで得られるので、第8番目のクロックを待って、第9番目のクロックと第10番目のクロックにおいて、この命令が実行される。
【0039】
次に、第10行目の命令FSTP [E]において、レジスタST(0)に保持されている値F+G+HがメモリEに記憶される。その結果、レジスタST(0)には、何も記憶されていない状態となる。第9行目と第10行目に、命令FSTPが連続して現れるが、この命令FSTPは並列処理することができない。従って、直前の第9行目の命令FSTPの処理が終了した第11番目のクロックの次の第12番目のクロックから実行される。
【0040】
図5の命令列は、8行で構成されるが、その処理に必要とするクロック数は、20となっている。これに対して、図6の命令列は、10行であるが、そのクロック数は、12となっている。従って、図6の命令列の方が図5の命令列に較べて、より迅速に同一の内容の演算結果を得ることができることになる。
【0041】
このように、本発明においては、並列に実行できる命令や1クロック待つ命令を最適な順序で組み合わせるように超最適化処理が行われるため、より少ない数のクロックで処理可能なプログラムが生成される。
【0042】
また、命令生成部3は、ステップS3において命令列を生成するにあたり、予め無駄と判る命令列の生成を省略する(枝刈り処理する)ことにより、より迅速に超最適化処理を完了できるようにしている。DAGの各ノードは、この枝刈り処理のため、演算子名、変数名、子ノードへのポインタなどの他、参照カウント、実行済みフラグ、クリティカルパスクロック数といったデータを計算して保持している。
【0043】
参照カウントとは、そのノードの値を必要とするノード(そのノードを子ノードとしているノード)のうち、実行済みでないものの数を表す。実行済みフラグとは、そのノードの表す値を計算済みかどうかを表すフラグである。クリティカルパスクロック数とは、そのノードに対する命令が今実行されたとして、その結果に依存する計算が全て完了するまでにかかるクロック数を表し、複数の経路がある場合には、最大値が選択される。
【0044】
枝刈り処理には、値の参照数による枝刈り、クロック数による枝刈り、クリティカルパスによる枝刈り、およびコードサイズによる枝刈りがある。
【0045】
値の参照数による枝刈りは、命令列に命令をつけ加える際、次のような命令は候補としないようにするものである。
(1)参照カウントの値が0でないノードの表す値を持つレジスタの値を全て消すような命令。
(2)参照カウントの値が0である変数の値をレジスタにロードする命令。
【0046】
クロック数による枝刈りとは、命令を付け加えた後、未実行のノードの実行に最低必要な時間を合計し、今まで生成した命令列のクロック数とその和が上限を超えていたら、その命令は候補としない(バックトラックする)というものである。例えば、加算が1個、代入が2個残っているような場合、1×1+2×2=5クロックサイクル最低必要となるので、現在のクロック数に5を加算した値が上限を超えていたら、その命令は候補としないようにする。
【0047】
クリティカルパスによる枝刈りとは、命令を付け加えた後、未実行のノードの中で、クリティカルパスクロック数の最大値を求め、今まで生成した命令列のクロック数との合計が上限を超えるような命令は候補としないようにするものである。例えば、加算結果をそのまま代入する場合に、代入ノードには、FSTP命令の実行時間の2を記憶させ、加算ノードには、これにFSTP命令の待ち時間1と、加算の実行時間3を加えた6を記憶させる。そして、探索を進める前に、毎回未実行のノードの記憶している値の最大値を求め、今まで生成した命令のクロック数との合計が上限を超えていたら、バックトラックするようにする。
【0048】
コードサイズによる枝刈りは、命令を付け加えた後、未実行のノードの実行に最低必要な命令のバイト数を合計して、今まで生成した命令のバイト数との和が既に見つかった解のバイト数を超えている場合、その命令は候補としないようにするものである。これは、同じクロック数の中で、なるべく短い(バイト数の少ない)命令列を出力することにしているために有効な方法である。
【0049】
3次元モデルの処理によく使用されるベクトル和、内積、外積、および一次変換について、本願発明における方法と他の方法とで実験した結果、図7に示すような結果が得られた。
【0050】
なお、図7において、超最適化の項に記載されている値が本願発明における方法に基づくものであり、BC5、VC5、およびIntelは、それぞれ次のようなコンパイラとコンパイルオプションを利用したものである。
BC5:Borland C++5.0J(BCC32-5-02-S)
VC5:Visual C++5.0(CL/G5/02/Fa)
Intel:Borland C++5.0Jに付属するインテル(商標)製コンパイラ
(BCC32I-5-02-S)
【0051】
図7に示す値は、生成コードのバイト数とクロック数である。本願発明における方法により、バイト数は若干多くなる場合もあるが、クロック数は最も少ない命令列を生成できることが判る。
【0052】
なお、図7における演算のうち、例えば外積の演算は、C++プログラムで表すと、図8に示すようになる。図9は、この外積の命令列を本願発明の方法により超最適化した場合を表している。22クロックで外積演算が行われることが判る。
【0053】
このように、本願発明においては、クロック数の上限値以内で実行できる命令列を、命令数に関係なく全て生成するようにしている。空の命令列から初めて命令を1つずつ付け加えていって、候補となる命令列が生成される。目的の関数を計算できる前にクロック数の上限値を超えた場合、その命令列は、候補から削除される。実際には、クロック数の上限値に達する前に、枝刈り処理により候補から削除される命令列も発生する。
【0054】
以上においては、クロック数を得るのに、動作のシミュレーションを行うようにしているが、命令を実際に動作させて時間を計測することでも、時間はクロックに対応するので、同様の結果を得ることができる。
【0055】
なお、本明細書において、システムとは、複数の装置により構成される装置全体を表すものとする。
【0056】
また、上記したような処理を行うコンピュータプログラムをユーザに提供する提供媒体としては、磁気ディスク、CD-ROM、固体メモリなどの記録媒体の他、ネットワーク、衛星などの通信媒体を利用することができる。
【0057】
【発明の効果】
以上の如く、請求項1に記載の情報処理装置、請求項5に記載の情報処理方法、および請求項6に記載の記録媒体によれば、入力を解析し、解析された結果に対応して、設定された上限値以下のクロック数で実行される命令を生成し、上限値以下のクロック数で、生成された命令が正しく実行されなかった場合、上限値が増加されて設定し直されることにより、クロック数が最小となる命令を探索するようにしたので、より迅速な処理が可能な命令列を生成することが可能となる。
【図面の簡単な説明】
【図1】本発明の情報処理装置を適用した超最適化装置の構成例を示すブロック図である。
【図2】 DAGを説明する図である。
【図3】 DAGを説明する図である。
【図4】図1の超最適化装置の動作を説明するフローチャートである。
【図5】通常の方法により生成された命令列を説明する図である。
【図6】図1の超最適化装置により生成された命令列を説明する図である。
【図7】本願発明とその他の方法により生成された命令列のコードのバイト数とクロック数の関係を示す図である。
【図8】外積を計算するC++プログラムを説明する図である。
【図9】外積を演算する場合における命令列を説明する図である。
【符号の説明】
1 構文解析部, 2 検索実行部, 3 命令生成部, 4 命令実行シミュレータ

Claims (6)

  1. 入力を解析する解析手段と、
    前記解析手段により解析された結果に対応して命令を生成する生成手段と、
    前記生成手段により生成された前記命令を実行する実行手段と、
    前記実行手段による命令の実行に必要とされるクロック数の上限値を設定し、前記上限値以下のクロック数で実行される前記命令を前記生成手段に生成させるとともに、前記実行手段により前記上限値以下のクロック数で、生成された前記命令が正しく実行されなかった場合、前記上限値を増加させて設定し直すことにより、前記クロック数が最小となる前記命令を探索する探索手段と
    を備えることを特徴とする情報処理装置。
  2. 前記解析手段は、入力に対応するDAGを生成する
    ことを特徴とする請求項1に記載の情報処理装置。
  3. 前記DAGを構成するノードに用いられる演算子は、2項演算子の+,-,*,/、または単項演算子の-,ABS,SQRTである
    ことを特徴とする請求項2に記載の情報処理装置。
  4. 無駄な命令の生成を禁止する禁止手段をさらに備える
    ことを特徴とする請求項1に記載の情報処理装置。
  5. 入力を解析する解析手段と、
    命令を生成する生成手段と、
    生成された前記命令を実行する実行手段と、
    前記実行手段による命令の実行に必要とされるクロック数の上限値を設定し、前記クロック数が最小となる前記命令を探索する探索手段と
    を備える情報処理装置の情報処理方法であって、
    前記解析手段が入力を解析する解析ステップと、
    前記探索手段が命令の実行に必要とされるクロック数の前記上限値を設定する設定ステップと、
    前記解析ステップで解析された結果に対応して、前記生成手段が、前記上限値以下のクロック数で実行される命令を生成する生成ステップと、
    前記実行手段が前記生成ステップで生成された前記命令を実行する実行ステップと、
    前記実行ステップにおいて前記上限値以下のクロック数で、生成された前記命令が正しく実行されなかった場合、前記探索手段が前記上限値を増加させて設定し直すことにより、前記クロック数が最小となる前記命令を探索する探索ステップと
    を含むことを特徴とする情報処理方法。
  6. 入力を解析する解析手段と、
    命令を生成する生成手段と、
    生成された前記命令を実行する実行手段と、
    前記実行手段による命令の実行に必要とされるクロック数の上限値を設定し、前記クロック数が最小となる前記命令を探索する探索手段と
    を備える情報処理装置に、
    前記解析手段が入力を解析する解析ステップと、
    前記探索手段が命令の実行に必要とされるクロック数の前記上限値を設定する設定ステップと、
    前記解析ステップで解析された結果に対応して、前記生成手段が、前記上限値以下のクロック数で実行される命令を生成する生成ステップと、
    前記実行手段が前記生成ステップで生成された前記命令を実行する実行ステップと、
    前記実行ステップにおいて前記上限値以下のクロック数で、生成された前記命令が正しく実行されなかった場合、前記探索手段が前記上限値を増加させて設定し直すことにより、前記クロック数が最小となる前記命令を探索する探索ステップと
    を含む処理を実行させる前記情報処理装置が読みとり可能なプログラムが記録されていることを特徴とする記録媒体。
JP25362798A 1998-09-08 1998-09-08 情報処理装置および方法、並びに記録媒体 Expired - Fee Related JP4158239B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP25362798A JP4158239B2 (ja) 1998-09-08 1998-09-08 情報処理装置および方法、並びに記録媒体
US09/379,135 US6694512B1 (en) 1998-09-08 1999-08-24 Data processing device, data processing method and supply medium thereof

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP25362798A JP4158239B2 (ja) 1998-09-08 1998-09-08 情報処理装置および方法、並びに記録媒体

Publications (2)

Publication Number Publication Date
JP2000089964A JP2000089964A (ja) 2000-03-31
JP4158239B2 true JP4158239B2 (ja) 2008-10-01

Family

ID=17253986

Family Applications (1)

Application Number Title Priority Date Filing Date
JP25362798A Expired - Fee Related JP4158239B2 (ja) 1998-09-08 1998-09-08 情報処理装置および方法、並びに記録媒体

Country Status (2)

Country Link
US (1) US6694512B1 (ja)
JP (1) JP4158239B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20050112890A (ko) 2004-05-28 2005-12-01 삼성전자주식회사 아키텍쳐 시뮬레이터에서의 명령 디코딩 방법
US7581082B2 (en) * 2005-05-13 2009-08-25 Texas Instruments Incorporated Software source transfer selects instruction word sizes
US9432666B2 (en) * 2012-03-29 2016-08-30 Intel Corporation CAVLC decoder with multi-symbol run before parallel decode

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5440537A (en) * 1977-09-07 1979-03-30 Hitachi Ltd Pipeline control system
US5307478A (en) * 1990-06-11 1994-04-26 Supercomputer Systems Limited Partnership Method for inserting a path instruction during compliation of computer programs for processors having multiple functional units
US5202975A (en) * 1990-06-11 1993-04-13 Supercomputer Systems Limited Partnership Method for optimizing instruction scheduling for a processor having multiple functional resources
US5287490A (en) * 1991-03-07 1994-02-15 Digital Equipment Corporation Identifying plausible variable length machine code of selecting address in numerical sequence, decoding code strings, and following execution transfer paths
US5317740A (en) * 1991-03-07 1994-05-31 Digital Equipment Corporation Alternate and iterative analysis of computer programs for locating translatable code by resolving callbacks and other conflicting mutual dependencies
US5507030A (en) * 1991-03-07 1996-04-09 Digitial Equipment Corporation Successive translation, execution and interpretation of computer program having code at unknown locations due to execution transfer instructions having computed destination addresses
US6126329A (en) * 1993-06-08 2000-10-03 Rational Software Coporation Method and apparatus for accurate profiling of computer programs
US5491823A (en) * 1994-01-25 1996-02-13 Silicon Graphics, Inc. Loop scheduler
US6006033A (en) * 1994-08-15 1999-12-21 International Business Machines Corporation Method and system for reordering the instructions of a computer program to optimize its execution
US5680626A (en) * 1995-05-18 1997-10-21 Motorola, Inc. Method and apparatus for providing only that number of clock pulses necessary to complete a task
TW470915B (en) * 1996-03-12 2002-01-01 Matsushita Electric Industrial Co Ltd Optimization apparatus which removes transfer instructions by a global analysis of equivalence relations
US5768596A (en) * 1996-04-23 1998-06-16 Silicon Graphics, Inc. System and method to efficiently represent aliases and indirect memory operations in static single assignment form during compilation
US5889999A (en) * 1996-05-15 1999-03-30 Motorola, Inc. Method and apparatus for sequencing computer instruction execution in a data processing system
US6381739B1 (en) * 1996-05-15 2002-04-30 Motorola Inc. Method and apparatus for hierarchical restructuring of computer code
US5894576A (en) * 1996-11-12 1999-04-13 Intel Corporation Method and apparatus for instruction scheduling to reduce negative effects of compensation code
US6058266A (en) * 1997-06-24 2000-05-02 International Business Machines Corporation Method of, system for, and computer program product for performing weighted loop fusion by an optimizing compiler
EP0926594B1 (en) * 1997-12-17 2007-05-23 Hewlett-Packard Company, A Delaware Corporation Method of using primary and secondary processors
US6026497A (en) * 1997-12-23 2000-02-15 Sun Microsystems, Inc. System and method for determining the resolution of a granular clock provided by a digital computer and for using it to accurately time execution of computer program fragment by the digital computer
JPH11194957A (ja) * 1998-01-07 1999-07-21 Matsushita Electric Ind Co Ltd デバッグ支援装置、並列実行情報生成装置、及びこれらに適用されるプログラムを記録した記録媒体
US6189141B1 (en) * 1998-05-04 2001-02-13 Hewlett-Packard Company Control path evaluating trace designator with dynamically adjustable thresholds for activation of tracing for high (hot) activity and low (cold) activity of flow control
US6456996B1 (en) * 1998-06-05 2002-09-24 I2 Technologies Us, Inc. Computer implemented scheduling system and process using abstract local search technique
US6233678B1 (en) * 1998-11-05 2001-05-15 Hewlett-Packard Company Method and apparatus for profiling of non-instrumented programs and dynamic processing of profile data
US6539542B1 (en) * 1999-10-20 2003-03-25 Verizon Corporate Services Group Inc. System and method for automatically optimizing heterogenous multiprocessor software performance

Also Published As

Publication number Publication date
JP2000089964A (ja) 2000-03-31
US6694512B1 (en) 2004-02-17

Similar Documents

Publication Publication Date Title
US8555266B2 (en) Managing variable assignments in a program
US20040230957A1 (en) Methods for comparing versions of a program
EP0428560A4 (en) Machine process for translating programs in binary machine language into another binary machine language
JP2001166949A (ja) シンボリック実行を用いてソースコードをコンパイルするための方法及び装置
EP0703532A2 (en) Embedded program flow information for object code manipulation
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
CN102360306A (zh) 高级语言代码中循环数据流图提取优化信息处理方法
JP4158239B2 (ja) 情報処理装置および方法、並びに記録媒体
US7120905B2 (en) System and method for transformation of assembly code for conditional execution
JP4719415B2 (ja) 情報処理システム及びコード生成方法
CN112306502B (zh) 一种代码生成方法及装置
DeVries A vectorizing SUIF compiler, implementation and performance
Rahmouni et al. A loop-based scheduling algorithm for hardware description languages
US8037464B2 (en) Generating optimized SIMD code in the presence of data dependences
CN118092931A (zh) 基于指导语句的函数向量化方法及系统
JPH10320212A (ja) キャッシュ向け最適化方法
Livadas et al. Slicing in the presence of pointer variables
KR101276308B1 (ko) 다중 출력 명령어를 지원하는 그래프 기반의 코드 생성 장치 및 그 코드 생성 방법
Sugino et al. Computational ordering of digital networks under pipeline constraints and its application to compiler for DSPs
CN118246377B (zh) 一种张量处理器的模拟器架构、模拟方法、设备及介质
JPH02176938A (ja) 機械語命令最適化方式
JP3551352B2 (ja) ループ分割方法
Tanaka et al. A code selection method for SIMD processors with PACK instructions
US20090112568A1 (en) Method for Generating a Simulation Program Which Can Be Executed On a Host Computer
Pfeffer et al. Reverse engineering of ARM binaries using formal transformations

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050830

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20080109

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080121

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080213

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080409

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080519

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20080624

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080707

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110725

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees