JP2005216177A - コンフィグラブル・プロセッサの設計装置、設計方法、ライブラリの最適化方法、プロセッサ、及びプロセッサを備えた半導体装置の製造方法 - Google Patents

コンフィグラブル・プロセッサの設計装置、設計方法、ライブラリの最適化方法、プロセッサ、及びプロセッサを備えた半導体装置の製造方法 Download PDF

Info

Publication number
JP2005216177A
JP2005216177A JP2004024499A JP2004024499A JP2005216177A JP 2005216177 A JP2005216177 A JP 2005216177A JP 2004024499 A JP2004024499 A JP 2004024499A JP 2004024499 A JP2004024499 A JP 2004024499A JP 2005216177 A JP2005216177 A JP 2005216177A
Authority
JP
Japan
Prior art keywords
instruction
unit
processor
extension
program
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
JP2004024499A
Other languages
English (en)
Inventor
Kazuyoshi Kono
和義 河野
Atsushi Mizuno
水野  淳
Tokuji Masuda
篤司 増田
Ryuichiro Oyama
隆一郎 大山
Yutaka Ota
裕 太田
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 JP2004024499A priority Critical patent/JP2005216177A/ja
Priority to US11/044,085 priority patent/US7337301B2/en
Publication of JP2005216177A publication Critical patent/JP2005216177A/ja
Priority to US11/957,781 priority patent/US7707386B2/en
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • G06F30/3308Design verification, e.g. functional simulation or model checking using simulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • 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
    • G06F8/4434Reducing the memory space required by the program code

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

【課題】 構成変更可能なプロセッサの設計において、拡張命令の定義処理、拡張命令及びハードウェア拡張の選択といった処理を自動的に行うこと。
【解決手段】 目的に応じて構成変更可能なプロセッサを設計するための設計装置であって、プロセッサで実行するプログラムの内容を解析する解析部(122,132)と、解析部による解析結果に基づいて、プログラムのうちハードウェア拡張化する部分を求め、求めたハードウェア拡張化部分のハードウェア拡張情報を生成するハードウェア拡張部(142)と、解析部による解析結果に基づいて、プログラムのうち拡張命令化する部分を求め、求めた拡張命令化部分の拡張命令定義を生成する拡張命令定義部(141)と、ハードウェア拡張部が生成したハードウェア拡張情報と拡張命令定義部が生成した拡張命令定義のいずれか一方もしくは両方によって、プロセッサの性能が目標性能を満足するか否かを見積もる性能見積部(143)とを備える。
【選択図】 図1

Description

本発明は、目的に応じて構成変更可能なプロセッサの設計装置、設計方法、ライブラリの最適化方法に係り、特に、コンフィグラブル・プロセッサの設計におけるハードウェア拡張や拡張命令定義を自動化するための技術に関する。
目的に応じて命令を追加したり、構成を変更したりできるプロセッサを搭載したSoC(System on Chip)などのシステムLSI設計では、設計者は、開発対象のシステムに求められるアルゴリズムをC言語などの高級言語でソースプログラムを記述し、上位レベルでのシステムシミュレーションを行って所望する性能を達成したか否かを検証を行っている。検証の結果、所望の性能を達成していない場合は)、ボトルネックとなっている箇所を特定し、拡張命令(ユーザ定義命令)を新たに定義したり、拡張命令に置き換える部分やハードウェアに置き換える部分を選び出したりして、ソースプログラムを書き換え、システムシミュレーションを再度実行して、所望の性能が達成されたか否かを検証する。
このような一連の作業を軽減するために、例えば、検証環境や開発ツールを作成する装置(例えば、特許文献1参照)や、ハードウェアとソフトウェアの切り分け作業の初期段階における性能評価作業を支援する装置(例えば、特許文献2参照)が開示されている。
特開2002−230065号公報 特開2000−57188号公報
しかしながら、従来は、拡張命令の定義や命令セットの仕様を策定する作業や、解析結果に基づいてソースプログラムから拡張命令に置き換える部分やハードウェアに置き換える部分を選び出す作業などを、専ら人手によって試行錯誤をしながら行っていたため、非常に時間と手間のかかる作業となっていた。
また、拡張命令の定義方法や、拡張命令化及びハードウェア化の拡張方法には、様々な選択肢があるため、最適な定義方法や拡張方法を選択するためには、逐一検証する必要があり、非常に時間と手間のかかる作業となっていた。
また、システムシミュレーションを行って所望する性能を達成したか否かを検証する場合、従来は、ソースプログラムの関数毎の実行回数や命令毎の実行回数等を基にプログラムの動作状況を解析していたが、関数単位での解析では大まかな動作状況しか解析できず、命令単位の解析では命令の前後の関係が失われるため、大局的な判断ができないという問題があった。
また、従来は、ソースプログラムを動作させるにあたって、ユーザが新たに定義した拡張命令の命令セットを自動的に生成するような仕組みがなかった。
さらにまた、新たに定義された拡張命令よってソースプログラムを最適化することはできても、ソースプログラムの翻訳時等に用いられるライブラリを最適化することはできなかった。
本発明は、このような問題に鑑みてなされたものであって、構成変更可能なプロセッサの設計において、拡張命令の定義処理、拡張命令及びハードウェア拡張の選択といった処理を自動的に行うことができ、最適な拡張方法を選択できるコンフィグラブル・プロセッサの設計装置、設計方法、及びライブラリの最適化方法を提供することを目的とする。
上記課題を解決するため、本発明に係る設計装置の特徴は、目的に応じて構成変更可能なプロセッサを設計するための設計装置であって、プロセッサで実行するプログラムの内容を解析する解析部と、解析部による解析結果に基づいて、プログラムのうちハードウェア拡張化する部分を求め、求めたハードウェア拡張化部分のハードウェア拡張情報を生成するハードウェア拡張部と、解析部による解析結果に基づいて、プログラムのうち拡張命令化する部分を求め、求めた拡張命令化部分の拡張命令定義を生成する拡張命令定義部と、ハードウェア拡張部が生成したハードウェア拡張情報と拡張命令定義部が生成した拡張命令定義のいずれか一方もしくは両方によって、プロセッサの性能が目標性能を満足するか否かを見積もる性能見積部とを備えることにある。
また、本発明に係る設計装置の別の特徴は、目的に応じて構成変更可能なプロセッサを設計するための設計装置であって、プロセッサで実行するプログラムを実行し、その実行結果から得られるプロファイル情報を用いて動的解析情報を解析する解析部と、解析部による解析結果に基づいて、プログラムのうちハードウェア拡張化する部分を求め、求めたハードウェア拡張化部分のハードウェア拡張情報を生成するハードウェア拡張部と、解析部による解析結果に基づいて、プログラムのうち拡張命令化する部分を求め、求めた拡張命令化部分の拡張命令定義を生成する拡張命令定義部とを備える。そして、動的解析部は、プログラムの命令列をブロックに分割する命令列分割部と、分割されたブロック単位で命令の実行回数をカウントする命令実行部とを備え、ブロック単位でカウントした実行回数を動的解析結果として出力することにある。
また、本発明に係る設計装置の別の特徴は、目的に応じて構成変更可能なプロセッサを設計するための設計装置であって、プロセッサで実行するプログラムの内容を解析する解析部と、解析部による解析結果に基づいて、プログラムのうち拡張命令化する部分を求め、求めた拡張命令化部分、あるいはユーザにより与えられた拡張命令化部分に対して、の拡張命令定義を生成する拡張命令定義部とを備える。そして、拡張命令定義部は、プログラムのうち拡張命令化候補のブロックに対し、当該ブロックの処理動作と等価な処理動作を行う拡張命令の生成の可否を判定する命令化判定部と、命令化判定部の判定結果に従って、ブロックの処理動作と等価な処理動作を行う拡張命令記述を生成する命令記述生成部とを備えることにある。
また、本発明に係る設計装置の別の特徴は、目的に応じて構成変更可能なプロセッサを設計するための設計装置であって、プロセッサで実行するプログラムのための拡張命令を組み合わせて部分命令集合群を生成する部分命令集合生成部と、各部分命令集合を用いて行ったプログラムの翻訳結果から得られる構文解析情報と、翻訳結果を用いて実行したプログラムの実行結果から得られるプロファイル情報とから、各部分命令集合を用いることによる効果を解析する解析部と、解析部による解析結果に基づいて、所定の制約条件に最適な部分命令集合を選択し、選択した部分命令集合を拡張命令セットとして生成する命令セット生成部とを備えることにある。
また、本発明に係る設計装置の別の特徴は、目的に応じて構成変更可能なプロセッサで実行するプログラムの内容を解析する解析部と、解析部による解析結果に基づいて、プログラムのうち拡張命令化する部分を求め、求めた拡張命令化部分の拡張命令定義を生成する拡張命令定義部とを備えるコンフィグラブル・プロセッサの設計装置であって、プログラムの翻訳に用いるライブラリを最適化するライブラリ・オプティマイザを備える。そして、ライブラリ・オプティマイザは、拡張命令定義内に定義された拡張命令に適合するプロセッサの命令列を解析する解析部と、解析部の解析結果に基づいて、ライブラリのバイナリコードに、該当する命令列が存在するか否かを検出する検出部と、検出部の検出結果に基づいて、ライブラリのバイナリコードを最適化するバイナリ変換部とを含むことにある。
また、本発明に係る設計方法の特徴は、目的に応じて構成変更可能なプロセッサをコンピュータにより設計するための設計方法であって、解析部が、プロセッサで実行するプログラムの内容を解析する段階と、ハードウェア拡張部が、解析部による解析結果に基づいて、プログラムのうちハードウェア拡張化する部分を求め、求めたハードウェア拡張化部分のハードウェア拡張情報を生成する段階と、拡張命令定義部が、解析部による解析結果に基づいて、プログラムのうち拡張命令化する部分を求め、求めた拡張命令化部分の拡張命令定義を生成する段階と、性能見積部が、ハードウェア拡張部が生成したハードウェア拡張情報と拡張命令定義部が生成した拡張命令定義のいずれか一方もしくは両方によって、プロセッサの性能が目標性能を満足するか否かを見積もる段階とを含み、プロセッサの性能が目標性能を満足するまで各段階の処理をコンピュータの各部に実行させることにある。
また、本発明に係る設計方法の別の特徴は、目的に応じて構成変更可能なプロセッサをコンピュータにより設計するための設計方法であって、命令列分割部が、プロセッサで実行するプログラムの命令列をブロックに分割する段階と、命令実行部が、プログラムを実行し、分割されたブロック単位で命令の実行回数をカウントし、カウントした実行回数を動的解析結果として出力する段階と、ハードウェア拡張部が、命令実行部による解析結果に基づいて、プログラムのうちハードウェア拡張化する部分を求め、求めたハードウェア拡張化部分のハードウェア拡張情報を生成する段階と、拡張命令定義部が、命令実行部による解析結果に基づいて、プログラムのうち拡張命令化する部分を求め、求めた拡張命令化部分の拡張命令定義を生成する段階とを含み、各段階の処理をコンピュータの各部に実行させることにある。
また、本発明に係る設計方法の別の特徴は、目的に応じて構成変更可能なプロセッサをコンピュータにより設計するための設計方法であって、解析部が、プロセッサで実行するプログラムの内容を解析する段階と、命令化判定部が、解析部による解析結果に基づいて、プログラムのうち拡張命令化候補のブロックに対し、当該ブロックの処理動作と等価な処理動作を行う拡張命令の生成の可否を判定する段階と、命令記述生成部が、命令化判定部の判定結果に従って、ブロックの処理動作と等価な処理動作を行う拡張命令記述を生成する段階とを含み、各段階の処理をコンピュータの各部に実行させることにある。
また、本発明に係る設計方法の別の特徴は、目的に応じて構成変更可能なプロセッサをコンピュータにより設計するための設計方法であって、部分命令集合生成部が、プロセッサで実行するプログラムのための拡張命令を組み合わせて部分命令集合群を生成する段階と、解析部が、各部分命令集合を用いて行ったプログラムの翻訳結果から得られる構文解析情報と、翻訳結果を用いて実行したプログラムの実行結果から得られるプロファイル情報とから、各部分命令集合を用いることによる効果を解析する段階と、命令セット生成部が、解析部による解析結果に基づいて、所定の制約条件に最適な部分命令集合を選択し、選択した部分命令集合を拡張命令セットとして生成する段階とを含み、各段階の処理をコンピュータの各部に実行させることにある。
また、本発明に係るライブラリ最適化方法の特徴は、目的に応じて構成変更可能なプロセッサで実行するプログラムの翻訳結果から得られる構文解析情報と、翻訳結果を用いて実行したプログラムの実行結果から得られるプロファイル情報とからプログラムを解析する解析部と、解析部による解析結果に基づいて、プログラムのうち拡張命令化する部分を求め、求めた拡張命令化部分の拡張命令定義を生成する拡張命令定義部とを備えるコンフィグラブル・プロセッサの設計装置において、プログラムの翻訳に用いられるライブラリをコンピュータにより最適化する最適化方法であって、解析部が、拡張命令定義内に定義された拡張命令に適合するプロセッサの命令列を解析する段階と、検出部が、解析部の解析結果に基づいて、ライブラリのバイナリコードに、該当する命令列が存在するか否かを検出する段階と、バイナリ変換部が、検出部の検出結果に基づいて、ライブラリのバイナリコードを最適化する段階とを含み、各段階の処理をコンピュータの各部に実行させることにある。
本発明によれば、構成変更可能なプロセッサの設計において、拡張命令の定義処理、拡張命令及びハードウェア拡張の選択といった処理を自動的に行うことができ、最適な拡張方法を選択できるコンフィグラブル・プロセッサの設計装置、設計方法、及びライブラリの最適化方法を提供することができる。
以下、本発明の実施形態を図面に基づいて説明する。尚、各図面を通じて同一もしくは同等の部位や構成要素には、同一もしくは同等の参照符号を付し、その説明を省略もしくは簡略化する。
以下に示すそれぞれの実施形態における、コンフィグラブル・プロセッサの設計装置は、ターゲットシステムに応じて、命令を追加したり、構成を変更したりすることができるコンフィグラブル・プロセッサ等を設計するための設計装置であり、例えば、中央処理装置、記憶装置、入力装置、出力装置などを備えたコンピュータシステムにより実現される。また、各実施形態に示す設計処理手順をコンピュータプログラムにして、コンピュータ読み取り可能な記憶媒体に格納し、上記コンピュータシステムにより実現される設計装置に読み取らせ、読み取らせたコンピュータプログラムに記述されている各処理を設計装置に実行させることができる。
[実施形態1]
図1に示すように、実施形態1における設計装置は、ツール生成部103、言語ツール104、シミュレータ105、拡張処理部109、入力/表示部114などを備えている。
ツール生成部103は、リターゲッタブルまたはコンフィギュラブルなプロセッサの開発環境生成ツールであり、プロセッサ構成情報102を入力し、入力したプロセッサ構成情報102に基づいて、言語ツール104、ライブラリ112、シミュレータ105等を生成する。プロセッサ構成情報102には、拡張命令定義やハードウェア拡張情報が含まれる。
言語ツール104は、翻訳部121と静的解析部122を備えている。翻訳部121は、例えばC言語により記述されたプログラム101を入力して、シミュレータ105で実行可能な実行形式106(アセンブリ記述)に変換するコンパイル機能を有する。プログラム101には、設計対象のプロセッサで実行したいアルゴリズムの全部または一部が記述されている。静的解析部122は、C言語記述をパース(構文解析)する機能が含まれており、構文木、データフロー解析結果、ループ解析結果、変数のライフタイム解析結果等を静的解析情報107として出力する。
シミュレータ105は、シミュレータ部131と動的解析部132とを備えている。シミュレータ部131は、言語ツール104が生成した実行形式106を用いてシミュレーションを実行する。また、動的解析部132は、プロファイル機能を有し、関数単位,文単位,命令単位の実行情報を解析し、動的解析情報108として出力する。
拡張処理部109は、拡張命令定義部141、ハードウェア拡張部142、性能見積部143を備えている。拡張命令定義部141は、静的解析情報107及び動的解析情報108を基に、プログラム101の中で拡張命令化する部分を求め、求めた拡張命令化部分の拡張命令定義を生成する。ハードウェア拡張部142は、静的解析情報107及び動的解析情報108を基に、プログラム101の中でハードウェア拡張化する部分を求め、求めたハードウェア拡張化部分のハードウェア拡張情報を生成する。拡張命令定義部141により生成された拡張命令定義や、ハードウェア拡張部142により生成されたハードウェア拡張情報は、プロセッサ構成情報102に反映される。更に、ハードウェア拡張を行った場合には、プログラム101(C言語記述)にも反映される。性能見積部143は、拡張命令定義部141が生成した拡張命令定義とハードウェア拡張部142が生成したハードウェア拡張情報のいずれか一方もしくは両方によって、設定対象のプロセッサの性能が目標性能を満足するか否かを見積もる。つまり、性能見積部143は、制約条件110により目標性能(目的関数及び目標値)が与えられ、空間を探索しその目標値を満たす点(ハードウェア拡張方法および拡張命令定義の組み合わせが空間の点に対応する)を求める。目的関数としては、例えば、プログラム101の実行速度が挙げられる。
また、拡張命令定義部141及びハードウェア拡張部142は、外部より与えられる制約条件110を用いるようにすることもできる。制約条件110は、性能見積部143が探索する探索空間を限定する働きがある。制約条件110としては、例えば、ゲート数,コードサイズ,消費電力などがある。
図2は、コンフィグラブル・プロセッサを含むハードウェアおよびプロセッサ上で実行するソフトウェアの設計処理手順を例示している。
ここで説明する設計処理例では、設計対象のプロセッサがプログラム101を実行する速度を、所定の基準値以下に収めることを目的とする。
ステップS201において、プロセッサに実行させるアルゴリズムを、C言語を用いてプログラム101に記述し、入力/表示部114から入力する。また、プロセッサ構成情報102を入力/表示部114から作成する。更に、拡張(ハードウェア拡張化及び拡張命令化)を制約するための制約条件110とプロセッサの目標性能を、入力/表示部114から作成する。本情報は、エディタ等を使用して作成してもよいし、GUIを用いて必要項目を表示し、項目毎に値を入力することによって作成しても良い。
次に、ステップS202において、ツール生成部103は、プロセッサ構成情報102に従って、言語ツール104やシミュレータ105を生成(カスタマイズ)する。生成された言語ツール104の翻訳部121は、プログラム101をコンパイルして実行形式106に変換する。言語ツール104の静的解析部122は、プログラム101のコンパイル結果から得られる構文解析情報を用いて静的解析情報107を出力する。動的解析部132は、静的解析情報107として翻訳部121(コンパイラ)から生成されるアセンブリ記述やプログラム解析情報を使用する。プログラム解析情報には、C言語のプログラムを構成する各文に対するループのネスト数を表すループ情報、各関数を構成する命令数、各関数で使用する外部データのサイズ、コードサイズなどが含まれるものとする。
また、シミュレータ部131は、言語ツール104が生成した実行形式106を用いてシミュレーションを実行し、動的解析部132は、シミュレーションによる実行状態を解析し、動的解析情報108として出力する。動的解析部132は、動的解析情報108としてシミュレータ部131から生成されるプロファイル情報を使用する。プロファイル情報としては、各関数の呼び出し回数、各文および各命令の実行回数、プログラム101全体の実行命令数に対する関数毎の実行命令数の割合などが出力される。
次に、ステップS203において、拡張処理部109の性能見積部143は、静的解析情報107または動的解析情報108を基に評価を行う。動的解析情報108には、実行命令数、実行サイクル数などが含まれる。これらの情報からプロセッサによるプログラム101の実行速度を見積もり、ステップS204において、プロセッサによるプログラム101の実行速度が、制約条件110として与えられている目標性能に達しているか否かを判定する。また、制約条件110としてコードサイズが与えられている場合には、静的解析情報107に含まれるコードサイズと比較することにより、制約条件110を満たしているか否かを調べることができる。
見積もった実行速度が目標性能を満たし、且つ制約条件110も満足している場合、ステップS211以降の半導体装置の製造工程に移行する。
見積もった実行速度が目標性能を満たさない、または見積もった実行速度が制約条件110を満たさない場合、ステップS205において、拡張命令定義部141あるいはハードウェア拡張部142は、拡張命令化あるいはハードウェア拡張化を行って、制約条件110及び目標性能を満たすようにプロセッサのアーキテクチャを変更する。例えば、プログラム101内の複数の命令を集約して新たな単一の命令に定義し、定義した単一の命令をプログラム101で使用するようにする(拡張命令化)、あるいは、プログラム101でソフトウェア的に実行している処理を専用ハードウェアで代替する(ハードウェア拡張化)ことにより、プロセッサ全体の処理速度を向上することができる。ハードウェア拡張化は、あるまとまった処理(例えば関数)に対して行うため、拡張命令化よりも高い性能向上が期待できる。
拡張処理部109が行う拡張処理は、拡張命令化あるいはハードウェア拡張化の様々な方法の中から最適な拡張方法を探索する問題とみなすことができる。ここでは、静的解析情報107を使用して探索する場合と、動的解析情報108を使用して探索する場合について、説明する。探索問題を解くアルゴリズムには様々なものが提案されているが、ここでは、貪欲法を採用する。
まず、静的解析情報107を使用する場合について具体的に説明する。図3は拡張処理の手順を擬似コードで表現したものである。図3の0303行から0313行の処理では、静的解析情報107に基づいて、プログラム101の中のボトルネックとなっている関数(命令数が最も多い関数)を特定し、特定した関数に対して、制約条件110と目標性能を満たす拡張方法が選択される。同様に、0314行から0323行の処理では、静的解析情報107に基づいて、プログラム101の中のボトルネックとなっている文(命令数が最も多い文)を特定し、特定した文に対して、制約条件110と目標性能を満たす拡張方法が選択される。
プログラム101でソフトウェア的に実行している処理を専用ハードウェアで代替する場合、ゲート数の増加につながるが、どの程度ゲート数が増加するかは、高位合成ツールを使用することにより評価することができる。制約条件110としてゲート数が与えられた場合、この情報を用いることで制約条件110を満たすか否かを調べることができる。関数が外部データを参照している場合、処理の前でそのデータを専用ハードウェアに転送し、終了後にプロセッサ側に転送することが必要となる。関数を選択する場合に、この情報を考慮することにより処理能力をより正確に評価することもできる。
動的解析情報108を使用して最適な拡張方法を探索する場合は、シミュレータ105が実行形式106を用いてシミュレーションすることにより得られるプロファイル結果を参照する。これにより、プログラム101の中の各関数に対して、プログラム101全体の実行命令数に対する各関数の実行命令数の割合を取得できる。この割合の多い関数が、ハードウェア拡張化あるいは拡張命令化の候補となる。尚、静的解析情報107と動的解析情報108の両方を使用して最適な拡張方法を探索することも可能である。尚、ハードウェア拡張化あるいは拡張命令化の対象となる箇所を特定するのを自動化する以外に、ユーザが対象となる箇所を入力/表示部114から指定することもできる。
ステップS204の判定処理で、制約条件110を満たし、且つ目標性能も満足していると判定された場合、以下に示すステップS211以降の半導体装置の製造工程に移行する。
ステップS211において、ステップS201〜ステップS205で設計された結果を基に、設計されたプロセッサを含む半導体回路のマスクデータを作成する。
ステップS212において、ステップS211で作成されたマスクデータを基にマスクを作成する。
ステップS213において、ステップS212で作成されたマスクを用いて、上記プロセッサを含む半導体回路パターンを、半導体基板内及び半導体基板上に形成する。

図4は、ハードウェア拡張化あるいは拡張命令化の対象となる箇所を、入力/表示部114から指定するための表示画面の例である。
画面の向かって左側には、プログラム101を構成する関数を、各関数の呼び出し関係がわかるようにツリー状に表示する関数表示ウインド401が配置されている。画面の向かって右側には、関数のコードを表示するコード表示ウインド402が配置されている。
関数表示ウインド401に対して行うことができる操作は、次の5種類の操作である。
第1の操作は、ハードウェア拡張化対象の関数を選択する操作である。複数の関数を選択することも可能である。図4に示した例では、関数“foo200()”が選択されている。この操作によって選択された関数は、優先的にハードウェア拡張の対象となる。
第2の操作は、ハードウェア拡張化非対象の関数を選択する操作である。複数の関数を選択することも可能である。この操作によって選択された関数は、ハードウェア拡張の対象外となる。
第3の操作は、拡張命令化対象の関数を選択する操作である。複数の関数を選択することも可能である。この操作によって選択された関数は、優先的に拡張命令化の対象となる。
第4の操作は、拡張命令化非対象の関数を選択する操作である。複数の関数を選択することも可能である。この操作によって選択された関数は、拡張命令化の対象外となる。
第5の操作は、コード表示ウインド402にコードを表示する関数を選択する機能である。図4に示した例では、関数表示ウインド401で選択された関数“foo200()”のコードがコード表示ウインド402に表示されている。
コード表示ウインド402に対する操作は、次の2種類の操作である。
第1の操作は、拡張命令化対象のコード領域を指定する操作である。複数の領域を指定することも可能である。この操作によって指定された領域は、優先的に拡張命令化の対象となる。
第2の操作は、拡張命令化非対象のコード領域を指定する操作である。複数の領域を指定することも可能である。この操作によって指定された領域は、拡張命令化の対象外となる。
図5は、本実施形態における設計装置及び設計方法によって設計されるコンフィグラブル・プロセッサ500の構成を例示している。コンフィグラブル・プロセッサ500は、タイマ・カウンタ501、割込みコントローラ502、デバック機能503、オプション命令504、コンフィグラブル・プロセッサコア505、バス・インタフェース・ユニット(BIU)506、命令キャッシュ/RAM508及びデータキャッシュ/RAM509を含むローカルメモリ507、グローバルバス・インタフェース・ユニット510、DSPユニット511、ユーザカスタム命令(UCI)ユニット512、コプロセッサ513、ハードウェアエンジン514、ローカルバス516及びDMAコントローラ517を含むデータストリーマ515などを備えている。本実施形態における設計装置及び設計方法によって、オプション命令504、DSPユニット511、UCIユニット512、コプロセッサ513、ハードウェアエンジン514等が拡張の対象となり、コンフィグラブル・プロセッサコア505の処理能力を補いつつ、コンフィグラブル・プロセッサ500全体の高速化を図るように拡張される。
以上、説明したように、実施形態1における設計装置及び設計方法によれば、拡張命令の定義や、ハードウェア拡張および拡張命令の選択を自動的に行うことができるため、様々な拡張方法を短時間に評価することが可能となり、最適な拡張方法を選択することが可能となる。
[実施形態2]
実施形態2では、図1に示した設計装置の拡張処理部109、特に拡張命令定義部141において、プログラム101のうちの拡張命令化対象ブロックについて拡張命令化が可能か否かを判定し、可能であればそれと等価な拡張命令を定義した命令記述を生成する仕組みについて、詳細に説明する。
コンフィギュラブル・プロセッサでは、あらかじめ用意されている命令セットに加えて、アプリケーション向けの拡張命令をユーザが定義することができる。特に、プログラム101中でボトルネックとなっている部分を、より少ない命令列の拡張命令に置き換えることで、パフォーマンス、コードサイズとも改善され、非常に効果的である。しかし実際には、オペランドとして使えるレジスタの個数や使用できる演算器などの制約から、プログラムの一部をそのまま拡張命令に置き換えることができるのは稀である。従って、ユーザはプログラムの構成を変更するなどの試行錯誤をして、置き換え可能な拡張命令を見つけなければならず、非常に手間のかかる作業となっていた。
そこで、図6に示すように、実施形態2における拡張命令定義部141は、プログラム101のうち拡張命令化対象のブロック(ブロック情報601により対象ブロックが指定される)に対し、そのブロックの処理動作と等価な処理動作を行う拡張命令の生成の可否を判定する命令化判定部602と、命令化判定部602の判定結果に従って、拡張命令化対象のブロックの処理動作と等価な処理動作を行う拡張命令記述605を生成する命令記述生成部604を備えている。更に拡張命令定義部141は、拡張命令化対象のブロックを更に分割するブロック分割部603を備え、命令記述生成部604は、ブロック分割部603によって更に分割された各ブロックの一部または全部に対し、拡張命令記述605の生成を実行する。
尚、ブロック分割部603は、プログラム101に記述されている単一の文を複数のブロックに分割することもできる。命令記述生成部604は、分割して生成された各ブロックの中から、所定の変数を使用している文、あるいは所定のレジスタを使用している命令列を含むブロックに対し、拡張命令記述605の生成を実行することもできる。また、命令記述生成部604は、ブロック内で使用されている変数をプロセッサ外部のレジスタに割り当て、割り当てられたプロセッサ外部のレジスタとプロセッサ間の転送命令を定義した拡張命令記述605を生成することもできる。
図7は、拡張命令定義部141が行う拡張命令記述605を生成する処理の動作例を示している。
尚、以下に示す例では、拡張命令化の対象ブロックとして、図8に例示するプログラムの0811行から0814行までの文からなるブロックが指定され、複数種類用意されている命令拡張方法の中からコプロセッサ拡張が指定(命令拡張方法の方法は制約条件110で指定される)された場合について説明する。選択された命令化拡張方法により命令化判定の条件が変わってくるが、コプロセッサ拡張における命令化可能条件については、命令化判定処理の部分で説明する。また、既に図9に例示する命令をもつコプロセッサ513が付加されているものとする。
図8の0803行の“__cop”は、それをつけて宣言された変数をコプロセッサ513のレジスタに割り当てるよう、コンパイラ(翻訳部121)に指示をするための指示子である。図8のソースプログラムをコンパイルした結果のアセンブリコードを図10に示す。
ステップS701において、命令化判定部602は、拡張命令化対象のブロックについて拡張命令の生成の可否を判定する。判定の結果(ステップS702)、拡張命令の生成が可能であれば、ステップS703において、命令記述生成部604は、拡張命令化対象のブロックの処理動作と等価な処理動作を行う拡張命令記述605を生成する。
ここで、コプロセッサ拡張における制約条件110として、拡張命令のオペランドは最大3個までとし、そのうちプロセッサコア505の汎用レジスタのオペランドは、最大2個まで定義可能であるとする。対象としているブロックは少なくとも4個のコアの汎用レジスタをオペランドとして必要になるため、命令化判定部602は、このブロックは命令化不可能と判定する。
次に、ステップS704において、ブロック分割部603は、現状のブロックをさらに分割して拡張命令化を試みる。ブロック分割部603は、ブロック内の0811〜0814行の各文が、一つ一つのブロックになるよう分割し、ステップS705〜ステップS709のループ処理で、分割した各ブロックに対して命令化を試みる。
図8の0811〜0813行の文は、図10の1001〜1003行目の単一命令へそれぞれ変換されるため、ステップS706において、命令化判定部602は、命令化不要と判断し、0811〜0813行の文からなるブロックに対しては拡張命令化を行わない。それに対して、図8の0814行目の文は、図10の1004〜1006行目までの3つの命令列へ変換されるため、命令化判定部602は、更にコプロセッサ拡張の制約条件110を満たすか否かを調べる。図8の0814行目の命令文は、プロセッサコア505のレジスタ2個の値、コプロセッサ513のレジスタの値、定数値を入力とし、結果をプロセッサコア505のレジスタへと返却している。定数値を即値オペランドではなく命令動作内に組み込めば、プロセッサコア505のレジスタオペランド2個、コプロセッサ513のレジスタオペランド1個で命令として定義できることになり、コプロセッサ拡張の制約条件110を満たす。従って、命令化判定部602は、0814行目の命令文については命令化可能と判定する。
ステップS708において、命令記述生成部604は、図11に例示するように、(0814)行目の命令文から拡張命令の命令定義記述605を生成する。拡張命令の名前は、既存の命令と重複しないように、“cinst_”の後に拡張命令の通し番号(図11に示した例では“0001”を付加したものとする。1101行目の引数には、図8の0814行目に出現する変数を書き出す。1103行目の動作定義部分には、図8の0814行目の文をそのまま書き出す。尚、命令の名前やオペコードは、ユーザが入力/表示部114から指定するようにしてもよい。
ここで、後述する『コンパイラによる最適化処理方法』を用いると、図11に示す命令記述定義をコンパイラ(翻訳部121)に与えることで、図11に定義したコプロセッサ命令も生成できるよう、コンパイラをカスタマイズできる。図8の0814行目の文は、拡張命令追加後のコンパイラを使ってコンパイルすると、図12の1204行目のようなコンパイル結果になる。図12に示すコードは、図10に示すコードに比べて、命令が2つ減り、コードサイズ、実行命令数、実行サイクル数の削減に対して効果がある。このような処理をソースプログラムの多くの部分に適用すれば、さらに効果が大きくなる。また、従来はこのような命令追加を人手で行っていたが、本システムでは自動で行うため、開発期間の短縮化に大きく寄与する。尚、ここで説明した例では、ブロックの分割を文単位で行ったが、構文木解析を行い、複数の文を含む分割単位や、文の一部だけからなる分割単位を作ってもよい。また、C言語で記述されたプログラムを例に説明したが、他のプログラミング言語でもよく、アセンブリ言語やバイナリ形式でもよい。アセンブリ言語やバイナリ形式を処理する場合、ブロックの分割は命令列を分割すればよい。アセンブリ言語やバイナリ形式から生成した命令記述の動作部分は、命令化した命令列と等価なC言語等の記述として生成すればよい。
また、命令化判定部602は、オペランドの個数と等価な命令の存在を命令化判定条件としたが、演算の種類、ブロックに表れる文の種類などを、命令化判定条件に加えてもよい。例えば、1サイクルで終了する命令だけ定義可能な命令拡張方法では、ブロック内に乗算がある場合不可としてもよい。またメモリアクセスをする文や、関数呼び出しなどの制御文がブロック内にあれば、命令化不可としてもよい。
また、図7に例示したフローチャートでは、命令化対象ブロックが1つだけ指定された場合を例示しているが、複数の命令化対象ブロックに対して、図7の処理を繰り返し実行するようにして、複数の命令対象ブロックに対して拡張命令記述605を生成するようにしてもよい。また、図7のフローチャートでは、分割後のどのブロックも命令化ができなければ、次のステップS710へ進んでいるが、分割のパターンを数通り試みてそれでも命令化できなければ、次のステップS710へ進むようにしてもよい。更に、追加命令が増えすぎるのを抑えるため、命令化の採用/不採用を、ユーザが入力/表示部114から指定するようにしてもよい。
次に、プロセッサ外のレジスタに変数を割り当てる場合を例にして説明する。
命令化の対象となるブロックとして、図13の1306行目の文が与えられたとする。尚、図13に示すプログラムを、拡張命令なしの命令セットでコンパイルした結果のアセンブリコードを、図14に示す。図13の1306行目の文に対応するアセンブリコードは、1404〜1405行目のコードである。
図7のフローチャートに示すように、ステップS701において、命令化判定部602は、図13の1306行目の文について拡張命令化の判定を行う。拡張命令の制限条件として、プロセッサコア505の汎用レジスタのオペランドは2個まで使用可能であるとすると、1306行目の文は、変数“tmp”,“a[i]”,“x[i]”に相当する3個のレジスタを使用するため、命令化判定部602は、ステップS702において、拡張命令化不可と判定する。
次に、ステップS703において、ブロック分割部603は、1306行目の文の分解を試みる。ブロック分割部603は、構文木解析を行って、1306行目の文を“Z=(a[i] + x[i]) / 2;”と“tmp=tmp+Z;”の2つのブロックに分解する。尚、変数“Z”は、文の分解により出現した中間変数である。
ステップS706において、命令化判定部602は、この2つのブロックに対して、拡張命令化が可能か否かを調べる。“Z=(a[i] + x[i]) / 2”のブロックは、中間変数“Z”が“a[i]”または“x[i]”に割り当てられたレジスタと共有できるか判断できないため、3個のレジスタオペランドが必要となる。従って、命令化判定部602は、“Z=(a[i] + x[i]) / 2”のブロックについては命令化不可と判定する。一方、“tmp=tmp+Z;”のブロックは1つの命令に変換されるため、命令化判定部602は、“tmp=tmp+Z;”のブロックについても拡張命令化不可と判定する。また、“Z=(a[i] + x[i]) / 2”の文を更に分割しても、1つの命令に変換されるブロックにしか分割されないため、プロセッサ外のレジスタ(外部レジスタ)への変数の割り付けを考慮した命令化判定のステップS710へ進む。
ここで、図13に示す各文に出現する変数のデータ型や他の属性は、予めわかっているものとする。これらは公知のプログラム解析技術により容易に実現可能であり、プログラムを解析した結果を外部から与えてもよいし、プログラム解析機能を含めてもよい。
ここでは、ブロック内の変数の中から外部レジスタに割り付けるのに適当な変数を選び出す。本実施形態では、基本データ型のローカル変数ということから、変数“tmp”を外部レジスタに割り付けることとする。そうすると、1306行目の文におけるコアのレジスタは、変数“a[i]”及び変数“x[i]”に相当する2個だけとなり、ステップS711において、命令化判定部602は拡張命令化が可能と判定する。
ステップS712において、命令記述生成部604は、1306行目のブロックに相当する命令に加え、変数を外部レジスタに割り当てたため、拡張モジュール内のレジスタとプロセッサの汎用レジスタ間でデータ転送を行う命令も自動的に追加生成する。この結果、命令記述生成部604は、図15に例示するような3個の命令を定義した命令定義記述605を生成する。図15に例示する命令定義記述605の動作記述内に現れる変数“dspreg”が、拡張モジュール内のレジスタを表す変数であり、1501行目の“reg : 32 : dspreg;”で定義されている。また、命令“dspst”は、プロセッサのレジスタから拡張モジュールのレジスタへの転送命令であり、命令“dspld”が拡張モジュールのレジスタからプロセッサのレジスタへの転送命令である。また、1306行目の文から生成した命令“dinst_0001”の動作記述では、外部レジスタに割り当てられた変数“tmp”の代わりに“dspreg”を用いる。
ここで、後述する『コンパイラによる最適化処理方法』を用いると、図15に示す命令記述定義をコンパイラ(翻訳部121)に与えることで、コンパイラがカスタマイズされ、図13の1306行目の文のコンパイル結果は図16のようになる。また、変数“tmp”が拡張モジュール内のレジスタに割り付けられるため、コンパイラは変数“tmp”への代入および参照をしている部分に対し、拡張モジュール内のレジスタへの転送命令を生成する。拡張モジュール内のレジスタとの転送命令がループの前後に挿入されることになるが、ループ内部の命令数が減ったため、実行命令数、実行サイクル数とも減少し、パフォーマンスは改善される。
[コンパイラによる最適化処理方法]
ここで、前述の『コンパイラによる最適化処理方法』について説明する。
ユーザが定義した拡張命令とその動作内容の定義をコンパイラ(翻訳部121)に与えると、コンパイラは、プログラム101内に記述された命令文のうち、ユーザが定義した拡張命令を用いた処理動作と同等の動作を行う命令文を、ユーザが定義した拡張命令に応じた機械語に最適化する。具体的には、コンパイラは、プログラム101の構文解析を行う際に、プログラム101内に記述された命令について文法規則への適合性を解析し、命令の組み合わせが拡張命令及び該拡張命令の動作内容を定義しているか否かを解析し、構文解析された拡張命令及び該拡張命令の動作内容の定義を記憶しておく。そして、コンパイラは、ソースプログラムから生成した機械語と、記憶しておいた拡張命令の動作内容とが一致するか否かを判定し、一致する場合、当該機械語を拡張命令の動作内容に応じた機械語に最適化する。
以上のようにして、コンパイラ(翻訳部121)は、ユーザが定義した拡張命令を用いたプログラム101のコンパイル処理を最適化することができる。
以上、実施形態2について詳細に説明したように、実施形態2によれば、従来は非常に手間がかかり困難であった、追加命令の定義を効率よく容易に行うことができる。また、コンパイラも自動的に命令追加に対応できるため、コードサイズの削減やパフォーマンスの改善効果を即座に得ることができる。
また、ブロック分割や外部レジスタ割り当てなどの機能を有しているため、ブロック内のさまざまなパターンの追加命令を生成することが可能であり、従来はユーザが試行錯誤をして求めていた拡張命令を、効率よく求めることができる。
[実施形態3]
シミュレーション結果に基づいて動的解析部132がプログラム101の動作を動的に解析する際に、例えば関数毎に実行回数等を解析すると、大まかな動作状況しか解析できなく、ある命令列が動作条件によって動作するかどうかを判別するのは難しい。また、命令毎に実行回数等を解析すると、命令の前後の関係が失われてしまい、大極的な判断ができなくなる。そこで実施形態3では、動的解析部132は、命令列を分岐や収斂のない基本ブロック単位に分割し、その基本ブロック単位での実行回数を解析する例を説明する。
図17は、実施形態3における動的解析部132の構成例を示している。命令列分割部1703は、翻訳部121(コンパイラやアセンブラ)で生成された実行形式106の命令列1701と、ユーザが動作解析を行いたい(実行回数を取得したい)命令ブロックの情報であるユーザ指定分割情報1702を入力し、命令列1701をユーザ指定分割情報1702の範囲でブロック分割し、命令ブロック情報1704として出力する。命令列1701は、一般にオブジェクトコード、実行コードと呼ばれるものである。ユーザ指定分割情報1702は、動作解析を行おうとする命令列1701の範囲を、ユーザが入力/表示部114から指定した情報で、コードの開始アドレスと終了アドレスの組からなっている。尚、ユーザ指定分割情報1702は必須の情報ではなく、ユーザ指定分割情報1702が指定されなければ、命令列分割部1703は所定の範囲でブロック分割を実行する。
命令実行部1705は、命令列分割部1703が出力した命令ブロック情報1704を用いて、各命令ブロックについて命令ブロック毎の実行回数を解析し、解析結果を命令ブロック実行回数1706として出力し、動的解析情報108となる。
図18は、命令列分割部1703の詳細な構成を例示している。分岐命令探索部1801は、ユーザ指定分割情報1702を入力し、ユーザにより指定されている分割範囲を探索範囲とする。分岐命令探索部1801は、命令列1701の開始アドレスを、分岐先のアドレスとして分岐収斂情報1802の初期値として記憶する。
次に、分岐命令探索部1801は、探索範囲中の命令列の中で、分岐を発生させる可能性のある命令を全て探索し、探索した分岐命令のアドレス及び分岐先のアドレスと、そのアドレスが分岐命令のものであるか分岐先のものであるかの情報を、分岐収斂情報1802として記憶する。分岐先のアドレスは、分岐命令が分岐条件を持っている場合は2カ所以上あるので、分岐命令探索部1801は、この全てのアドレスを分岐収斂情報1802に記憶する。
次に、分岐ブロック生成部1803は、ユーザ指定分割情報1702を命令ブロック情報1704として出力し、分岐収斂情報1802をアドレス順にソートし、ソートされた分岐収斂情報1802の前後の組み合わせを命令ブロックとして、命令ブロック情報1704に追加する。尚、分岐収斂情報1802から命令ブロック情報1704に変換する際に、終了アドレスが分岐先のアドレスである場合には、そのアドレスから1を減算する。また、その際に、開始アドレスが分岐アドレスならば、命令ブロックとしては分岐収斂情報1802に追加しない。
図19は、命令実行部1705の詳細な構成を例示している。命令シミュレータ1906の内部で持つ、現命令と現命令アドレスを用いて命令ブロックの実行回数が計算される。命令シミュレータ1906が1つの命令を実行する度に以下の動作を行う。
まず、命令実行部1705は、シミュレーションを開始する前に先行命令情報1901を空にしておく。シミュレーション時には、ブロック情報計算部1902は、現命令アドレスと命令ブロック情報1704とから、現命令がどの命令ブロックに属しているかを計算し、結果をブロック情報1903として記憶する。
次に、情報比較部1904は、先行命令情報1901とブロック情報1903とを入力し、命令ブロック実行回数1706をカウントするか否かの判定を行う。情報比較部1904の出力は、ブロック情報1903が先行命令情報1901の命令ブロックと異なるか、または先行命令情報1901内の命令が分岐命令である場合には、真になり、その他の場合には偽となる。
次に、命令ブロック実行回数計算部1905は、情報比較部1904の出力が真の場合にのみ、ブロック情報1903に該当するブロックの実行回数を1増加させる。最後に、命令ブロック実行回数計算部1905は、情報比較部1904の出力値に関わらず、現命令とブロック情報1903とを、先行命令情報1901として登録する。
ここで、具体的な例を用いて、本実施形態3における動的解析部132の処理動作を説明する。尚、以下に説明する例では、ユーザ指定分割情報1702は、指定されていないものとする。
図20は、動的解析部132が入力する命令列1701の一例である。命令列1701は、アドレス情報と命令との組み合わせで構成される。命令は、実際には2進表記のコードとなっているが、ここでは説明をわかりやすくするために、ニーモニックで表記している。本実施形態3では、“LD”,“ADD”,“SUB”,“JNZ”,“JMP”の5種類の命令が出現する命令列1701を用意した。ニーモニック中の“R”で始まる変数は、レジスタを表しており、()付きの数値は、メモリアクセスを表している。“LD”はロードストア、“ADD”は加算、“SUB”は減算、“JNZ”はゼロ以外で分岐、“JMP”が無条件分岐を行う命令を表している。
まず、命令列分割部1703に、図20に示された命令列1701が入力されると、分岐命令探索部1801は、命令列1701の先頭アドレスである“0001”番地を、“分岐先”という属性で分岐収斂情報1802に記憶する。次に、分岐命令探索部1801は、この命令列1701内から分岐命令を探索する。命令列1701において、分岐命令は“0006”番地,“0009”番地,“000d”番地に存在し、そのうち“0006”番地の分岐命令は、条件分岐命令であり、条件が成立した場合には“000a”番地に分岐し、不成立の場合には“0007”番地の命令を実行する。そこで、分岐命令探索部1801は、“0006”番地を“分岐”という属性で、“000a”番地,“0007”番地を“分岐先”の属性で分岐収斂情報1802に登録する。同様にして処理を繰り返すと、図21に示すような分岐収斂情報1802が得られる。最後に、分岐命令探索部1801は、図21に示した分岐収斂情報1802をアドレス順にソートし、図22に示すような分岐収斂情報1802が生成される。
次に、分岐ブロック生成部1803は、図22に示したように生成された分岐収斂情報1802を入力し、命令ブロック情報1704を生成する。分岐ブロック生成部1803は、まず、分岐収斂情報1802の先頭から連続する2つの情報を読み出す。最初に読み出されるのは、“0001”番地(分岐先)と“0002”番地(分岐先)の情報で、これを命令ブロック情報1704の開始アドレスと終了アドレスとする。ここで、終了アドレスに属性が“分岐先”である情報を使う場合には、アドレスから1を減算することになっているので、開始アドレスが“0001”番地で、終了アドレスが“0001”番地という情報が得られ、分岐ブロック生成部1803は、これを命令ブロック情報1704に登録する。
次に分岐収斂情報1802から読み出される情報は、“0002”番地(分岐先)と“0006”番地(分岐)の組であるので、分岐ブロック生成部1803は、開始アドレスが“0002”番地で、終了アドレスが“0006”番地という情報を、命令ブロック情報1704に登録する。
次に分岐収斂情報1802から読み出される情報は、“0006”番地(分岐)と“0007”番地(分岐先)の組であるが、属性が“分岐”であるアドレスは、開始アドレスとして使用しないので、この組では何もしない。
次に分岐収斂情報1802から読み出される情報は、“0007”番地(分岐先)と“0009”(分岐)の組、というように処理を進めていくと、図23に示すような命令ブロック情報1704が得られる。尚、この命令ブロック情報1704には、区別のため各ブロックに命令ブロック番号を振ってある。
最後に、命令実行部1705において命令のシミュレーションが行われ、命令ブロック実行回数1706が計算される。以下、最初の10命令分について、具体的に説明する。尚、“0006”番地の条件分岐は成立し、“000a”番地にジャンプしたものとする。
(1)“0001”番地について…ブロック情報計算部1902は、“0001”番地の命令が命令ブロック番号“0”のブロックに属していると算出する。情報比較部1904の判定結果は、先行命令情報1901が空であるため不一致となり、命令ブロック実行回数計算部1905は、命令ブロック番号“0”の実行回数に1を加算する。そして、現命令“LD”と命令ブロック番号“0”を、先行命令情報1901に登録する。
(2)“0002”番地について…ブロック情報計算部1902は、“0002”番地の命令が命令ブロック番号“1”のブロックに属していると算出する。情報比較部1904の判定結果は、先行命令情報1901の内容が命令“LD”と命令ブロック番号“0”であるため、不一致となり、命令ブロック実行回数計算部1905は、命令ブロック番号“1”の実行回数に1を加算する。そして、現命令“LD”と命令ブロック番号“1”を、先行命令情報1901に登録する。
(3)“0003”番地について…ブロック情報計算部1902は、“0003”番地の命令が命令ブロック番号“1”のブロックに属していると算出する。先行命令情報1901の内容は、命令“LD”と命令ブロック番号“1”であるため、情報比較部1904の判定結果は一致となり、命令ブロック実行回数計算部1905は実行回数をカウントしない。そして、現命令“LD”と命令ブロック番号“1”を、先行命令情報1901に登録する。
(4)“0004”番地について…ブロック情報計算部1902は、“0004”番地の命令が命令ブロック番号“1”のブロックに属していると算出する。先行命令情報1901の内容は、命令“LD”と命令ブロック番号“1”であるため、情報比較部1904の判定結果は一致となり、命令ブロック実行回数計算部1905は実行回数をカウントしない。そして、現命令“ADD”と命令ブロック番号“1”を、先行命令情報1901に登録する。
(5)“0005”番地について…ブロック情報計算部1902は、“0005”番地の命令が命令ブロック番号“1”のブロックに属していると算出する。先行命令情報1901の内容は、命令“ADD”と命令ブロック番号“1”であるため、情報比較部1904は一致と判定し、命令ブロック実行回数計算部1905は実行回数をカウントしない。そして、現命令“LD”と命令ブロック番号“1”を、先行命令情報1901に登録する。
(6)“0006”番地について…ブロック情報計算部1902は、“0006”番地の命令が命令ブロック番号“1”のブロックに属していると算出する。先行命令情報1901の内容は、命令“LD”と命令ブロック番号“1”であるため、情報比較部1904は一致と判定し、命令ブロック実行回数計算部1905は実行回数をカウントしない。そして、現命令“JNZ”と命令ブロック番号“1”を、先行命令情報1901に登録する。
(7)“000a”番地について…ブロック情報計算部1902は、“000a”番地の命令が命令ブロック番号“3”のブロックに属していると算出する。先行命令情報1901の内容が命令“JNZ”と命令ブロック番号“1”であるため、情報比較部1904の判定結果は不一致となり、命令ブロック実行回数計算部1905は、命令ブロック番号“3”の実行回数に1を加算する。そして、現命令“SUB”と命令ブロック番号“3”を、先行命令情報1901に登録する。
(8)“000b”番地について…ブロック情報計算部1902は、“000b”番地の命令が命令ブロック番号“4”のブロックに属していると算出する。先行命令情報1901の内容が命令“SUB”と命令ブロック番号“3”であるため、情報比較部1904の判定結果は不一致となり、命令ブロック実行回数計算部1905は、命令ブロック番号“4”の実行回数に1を加算する。そして、現命令“LD”と命令ブロック番号“4”を、先行命令情報1901に登録する。
(9)“000c”番地について…ブロック情報計算部1902は、“000c”番地の命令が命令ブロック番号“4”のブロックに属していると算出する。先行命令情報1901の内容は、命令“LD”と命令ブロック番号“4”であるため、情報比較部1904は一致と判定し、命令ブロック実行回数計算部1905は実行回数をカウントしない。そして、現命令“SUB”と命令ブロック番号“4”を、先行命令情報1901に登録する。
(10)“000d”番地について…ブロック情報計算部1902は、“000d”番地の命令が命令ブロック番号“4”のブロックに属していると算出する。先行命令情報1901の内容は、命令“SUB”と命令ブロック番号“4”であるため、情報比較部1904は一致と判定し、命令ブロック実行回数計算部1905は実行回数をカウントしない。そして、現命令“JNZ”と命令ブロック番号“4”を、先行命令情報1901に登録する。
同様の処理を繰り返すことにより、図24に示す命令ブロック実行回数1706を得ることができる。尚、図24に示した例は、“0006”番地の条件分岐が常に成立したものとした結果である。
以上説明したように、実施形態3によれば、従来はプログラムの動的解析時に関数毎や命令毎にしか実行回数等を解析できなかったものを、指定されたブロック毎の実行回数や、分岐や収斂の無い命令列毎の実行回数を解析することができる。
実行命令列の頻度解析に於いては、従来は全実行命令列を検索して調べることが必要であったし、割り込みが入った場合等は割り込みの処理の命令列も解析データに含まれてしまっていた。それに対して、実施形態3に示したような解析データを作成し、実行プログラムを検索して、該当するブロックの実行回数を加算していくことで、全実行命令列を検索したのと同等の解析結果を容易に得ることができる。このように、実行プログラムのサイズは、一般的に全実行命令列に比べると非常に小さなものとなるので、検索にかかる時間を大幅に短縮することが可能である。対話的な処理の場合には待ち時間の短縮につながるので、特に効果がある。
[実施形態4]
実施形態4では、コンフィグラブル・プロセッサの設計装置において、プログラム101を動作させるにあたってユーザの与えた制約条件110を満たすユーザ定義命令(拡張命令)を、命令セットとして生成する例について、以下に示す第1〜2実施例で説明する。更に、命令セットの一部を実行時に切り替えて使うための部分命令セットと、それに対応したプロセッサについて、以下に示す第3実施例で説明する。
[第1実施例]
図25は、実施形態4(第1実施例)における設計装置の構成例を示している。この設計装置は、部分命令集合生成部2502、プログラム解析部2503、命令セット生成部2504などを備えている。部分命令集合生成部2502は、プロセッサで実行するプログラム101のためのユーザ定義命令(拡張命令)を組み合わせて部分命令集合群{U_0,U_1,…,U_n}を生成する。プログラム解析部2503は、各部分命令集合を用いて行ったプログラム101の翻訳結果から得られる構文解析情報と、翻訳結果を用いて実行したプログラム101の実行結果から得られるプロファイル情報とから、各部分命令集合を用いることによる効果を解析する。命令セット生成部2504は、プログラム解析部2503による解析結果に基づいて、制約条件110に最適な部分命令集合を選択し、選択した部分命令集合を拡張命令セット定義2505として生成する。
まず、ユーザは、設計装置の入力として、プロセッサ上で動作させるプログラム101と、ユーザ定義命令群Uを与える。
ステップS2502において、部分命令集合生成部2502は、入力として与えられたユーザ定義命令群Uの命令を組み合わせて、部分命令集合U_x{x=0,1,…,n}を生成する。全ての命令の組み合わせについて生成したものを、集合U_all = {U_0,U_1,…,U_n}とする。
プログラム解析部2503は、集合U_allの個々の部分命令集合U_x{x=0,1,…,n}について、以下の手順でプログラムのコンパイルと解析を行う。
ステップS2512において、プログラム解析部2503は、部分命令集合U_xをユーザ定義命令の命令セットとして用い、プログラム101をコンパイルし、アセンブリコード及びオブジェクトコードを生成する。この時、コンパイラは、実施形態2で説明した『コンパイラによる最適化処理方法』の技術を用いることで、ユーザ定義命令を使って、コードサイズが最小に最適化されるアセンブリコードを生成する。
ステップS2513において、プログラム解析部2503は、ステップS2512で生成したオブジェクトコードをシミュレータ上で実行し、プロファイル結果から基本ブロックごとの実行回数を記録する(動的解析)。また、プログラム解析部2503は、コンパイルしたプログラムのアセンブリコードから、基本ブロック毎に命令数を記録する(静的解析)。
ステップS2514において、プログラム解析部2503は、ステップS2513で記録した基本ブロックごとの実行回数と基本ブロック毎の命令数との乗算で、基本ブロック毎の実行命令数を求める。同様の手順で、基本ブロックごとの実行命令数を全てのブロックについて求め、合計した値がプログラム全体の実行命令数となる
ステップS2515において、命令セット生成部2504は、プログラム解析部2503で求めた実行命令数が、ユーザの与えた制約条件110を満たすような部分命令集合U_xが、1つ以上存在するか否かを判定する。判定の結果、制約条件110を満たす部分命令集合U_xが存在する場合、ステップS2516において、命令セット生成部2504は、それらのうち命令定義数が最小である部分命令集合U_xを、拡張命令セット定義2505として出力する。
次に、具体例について詳細に説明する。
図26に示すような、C言語で記述されたプログラム101を、設計装置の入力として与える。このプログラムは、3つの基本ブロックから構成されている。また、図27に示すようなユーザ定義命令群Uを、設計装置の入力として与える。
プログラム解析部2503において、図26の入力のプログラム101をコンパイルすると、コンパイル結果としてアセンブリコードが得られる。
図28は、図27のユーザ定義命令群Uを使わずに、図26のプログラム101をコンパイルした結果を示している。図28のアセンブルリストを、アセンブルリストA<empty>と呼ぶことにする。アセンブルリストA<empty>のアセンブリコードに使われている命令は、プロセッサにおいて標準的に利用可能なコア命令のみである。
それに対して、図27のユーザ定義命令群Uを使ってアセンブルした結果を、図29に示す。図29のアセンブルリストを、アセンブルリストA<muldivi, muldiv2>と呼ぶことにする。アセンブルリストA<empty>とアセンブルリストA<muldivi, muldiv2>を比較すると、アセンブルリストA<empty>の3〜5行目が“muldivi”命令に、また11〜12行目が“muldiv2”命令に置き換えられており、コード中の命令数が減少していることがわかる。命令数が減少していることから、実行時の実行命令数も減少することがわかる。
次に、命令セット生成部2504において、制約条件110を満たし、且つユーザ定義命令数が最小になるような部分命令集合U_xを求める。ここでは、制約条件110として「実行命令数が66命令以下」という制約条件110を入力として与えるものとする。
図28より、基本ブロック毎の実行回数と命令数の積和として実行命令数を求めると、アセンブルリストA<empty>の実行命令数は71命令であり、制約条件110を満たしていない。また、図29より、基本ブロック毎の実行回数と命令数の積和として実行命令数を求めると、アセンブルリストA<muldivi, muldiv2>の実行命令数は62命令であり、このことから“muldiv2”命令及び“muldivi”命令を使うことで制約条件110を満たすということがわかる。
次に、命令セット生成部2504において、ユーザ定義命令数が最小になるような集合を求める。手順としては、入力で与えた最大の集合U_allから、ユーザ定義命令数を1つづつ減らした部分命令集合を求め、対応するアセンブリコードを生成するという処理を、制約条件110を満たす間繰り返す。
ここでは集合の候補として、
U={muldiv2, muldivi}
U_I={muldivi}
U_2={muldiv2}
の3つが考えられる。
具体的な手順としては、命令セット生成部2504は、部分命令集合U_Iに対応するアセンブリコードA<muldivi>と、ユーザ命令定義群U_2に対応するアセンブリコードA<muldiv2>を、命令変換によって導き出し、それぞれの集合が制約条件110を満たすかどうかをチェックする。
図30に、アセンブリコードA<muldivi>を導き出した結果を示す。図30から、アセンブリコードA<muldivi>の実行命令数は、69命令であり、制約条件110を満たしていないことがわかる。
次に、アセンブリコードA<muldiv2>を導き出した結果を、図31に示す。図31から、アセンブリコードA<muldiv2>の実行命令数は、64命令であり、ユーザ命令定義群U_2が制約条件110を満たしていることがわかる。
最終的に、命令セット生成部2504は、図32に例示するように“muldiv2”命令を唯一の命令として持つユーザ命令定義群U_2を、拡張命令セット定義2505として出力する。
上記の例では、ユーザ命令定義群U_2が制約条件110を満たし、且つユーザ定義命令数が最小となる唯一の命令セット定義となったが、制約条件110の与え方によっては、複数のユーザ命令定義群が命令セット定義の条件を満たすこともある。例えば、上記の例において制約条件110が「実行命令数が70命令以下」であった場合、ユーザ命令定義群U_Iとユーザ命令定義群U_2の両方が、条件を満たすことになる。このような場合は、条件を満たす命令セット定義を複数出力してもよい。また、ユーザが指定した以外の条件を考慮して順序を決定し、それに従って出力することも可能である。上記の例で、ユーザが指定していない「プログラム101中の命令数」を考慮することにした場合、ユーザ命令定義群U_Iに対応するアセンブリコードA<muldivi>が15命令であるのに対して、ユーザ命令定義群U_2に対応するアセンブリコードA<muldiv2>は16命令であるため、ユーザ命令定義群U_2よりユーザ命令定義群U_Iを優先して出力する。
[第2実施例]
第1実施例では、制約条件110として「プログラムの実行命令数」及び「プログラムの命令数」を用いる例を説明したが、第2実施例ではそれ以外の制約条件110を用いる場合を考える。
まず、制約条件110としての「コードサイズ」については、プログラム101を命令セット定義を用いてアセンブルし、出力されるオブジェクトの大きさ(サイズ)によって求めることができる。
また、制約条件110としての「チップサイズ」については、求めるための幾つかの方法が考えられる。まずは、ユーザ定義命令毎に概算のチップサイズの値をユーザが制約条件110として与え、それらの値を合計して命令セット定義のチップサイズとする方法である。この応用として、複数のユーザ定義命令の組み合わせに対してチップサイズの値を与え、同様にして合計で命令セット定義のチップサイズを求める方法も考えられる。この方法は、複数のユーザ定義命令で演算器を共用可能な場合に有効である。例えば、図27に示した“muldivi”命令と“muldiv2”命令は、どちらも乗算器と除算器を必要とするので、これらを両命令で共用することが考えられる。また、それぞれの命令セット定義毎に高位合成ツール等の外部ツールを用いて回路を生成し、チップサイズを見積もる方法も考えられる。
[第3実施例]
図33は、実施形態4の第3実施例における設計装置の構成例を示している。この設計装置は、以下のような手順で処理を行う。第1実施例の手順と異なる部分は、命令セット生成部2504が、プログラム分割部3302と部分命令セット定義部3303に置き換わっていることと、入力であるユーザ定義命令群Uの命令オペコードに、未確定のオペコードが含まれていて良いということである。
まず、ユーザは、設計装置の入力として、プロセッサ上で動作させるプログラム101と、ユーザ定義命令群Uを与える。ユーザ定義命令群U中のユーザ定義命令には、オペコードに確定していない部分があってよい。
ステップS3311において、プログラム解析部3301は、入力として与えられたユーザ定義命令群Uを用いて、プログラム101をコンパイルし、アセンブリコード及びオブジェクトコードを生成する。また、プログラム解析部3301は、基本ブロック毎に各ユーザ定義命令の出現頻度を記録する。更に、プログラム解析部3301は、シミュレータのプロファイル結果から基本ブロックごとの実行回数を記録する。
ステップS3312において、プログラム分割部3302は、基本ブロックを単位として、同じユーザ定義命令群を使う基本ブロックの集合にまとめる。同じユーザ定義命令群を使う基本ブロックの集合を、命令ブロック集合と呼ぶことにする。
ステップS3313において、部分命令セット生成部3303は、ステップS3312で生成された命令ブロック集合のそれぞれについて、使用されているユーザ定義命令群を、部分命令セット定義として出力する。このとき、入力として制約条件110が与えられていれば、部分命令セット定義を出力する前に、第1実施例のステップS2516の手順と同様の手順で命令変換を行い、使用するユーザ定義命令を削減する。
ステップS3314において、部分命令セット生成部3303は、ユーザ定義命令群Uの命令のオペコードに未確定な部分があるか否かを判定し、未確定な部分がある場合、ステップS3315において、利用可能な範囲からオペコードを割り当てる。そして、部分命令セット生成部3303は、ステップS3316において、各々の命令ブロックの集合を、部分命令セット定義3305として出力する。
具体例を以下に示す。入力として、図34に示すような、C言語で記述されたプログラム101と、図35に示すようなユーザ定義命令群Umaxを与える場合を考える。図35に示すように、ユーザ定義命令群Umaxには、“muldivi”命令,“max3”命令,“min3”命令の3つのユーザ定義命令が定義されている。図27に示したユーザ定義命令群と異なる点は、オペコードに“*”が指定されている点である。オペコードは、その命令のビットパターンを1文字1ビットで表記したものであり、“0”,“1”は、対応するビットの値を示す。また“n”,“m”,“k”は、それぞれ対応するレジスタオペランドRn,Rm,Rkのレジスタ番号が、それぞれの位置に設定されることを示す。この部分は、アセンブリコードでのオペランド指定におけるレジスタ番号の値が、そのままエンコードされる。“_”は区切り文字で、データとしては無視される。“*”は、命令のオペコードのうちその部分が未確定であることを示す。
プログラム解析部3301が、ユーザ定義命令群Umaxを使って、図34のプログラム101をアセンブルした結果、アセンブルリストA<muldiv2, muldivi, max3, min3>は、図36に示すようになる。
次に、プログラム分割部3302は、アセンブルリストA< muldiv2, max3, min3>を基に、基本ブロック1〜4を命令ブロック集合に分割する。分割の手法はいろいろ考えられるが、ここでは単純に同じユーザ定義命令を使っているブロックをまとめることにする。その結果は、図37に示すようになる。
次に、部分命令セット生成部3303は、各命令ブロック集合に対応する部分命令セット定義を生成する。この場合、命令ブロック集合IB1に対応する部分命令セット定義は、部分命令セット定義U_IB1={muldiv2}となり、命令ブロック集合IB2に対応する部分命令セット定義は、部分命令セット定義U_IB2={min3, max3}となる。命令ブロック集合IB3では、ユーザ定義命令が使われていないので、部分命令セット定義は出力されない。
更に、ユーザ定義命令群Umaxでは、オペコードの一部が未確定だったので、部分命令セット生成部3303は、割り当てるオペコードを決定する。ここでは制約条件110として、利用可能なオペコードの範囲を入力として与えることにする。仮に、利用可能なオペコードの範囲として「下位5ビットを自由に使える」という指定をしたとする。
図38に示すように、各命令はオペコード上で下位から数えて5〜8ビット目が未確定(“*”)であるが、利用可能な範囲は1〜5ビット目のみであるため、割り当てを変更可能なのは5ビット目だけとなる。1ビットの変更で指定できるオペコードは2つだけであるため、“muldiv2”命令、“max3”命令、“min3”命令の3つの命令を同時に割り当てることはできない。そこで、部分命令セット定義U_IB1と部分命令セット定義U_IB2に、同じオペコードの範囲を割り当てることにする。各部分命令セット毎のユーザ定義命令は、それぞれ2命令以下であるから、このようにすることで、全ての命令にオペコードを割り当てることができる。
オペコードの割り当てを行った結果を、図39に示す。オペコードの命令への割り当ては、ユーザが直接指定してもよいし、利用可能なオペコード集合から、部分命令セット生成部3303が自動的に割り当ててもよい。
図39に示した例の場合、“muldiv2”命令と“max3”命令は同じオペコードになる可能性があるため、両方を同時に使うことはできず、何らかの手段で部分命令セット定義の切り替えを行う必要がある。切り替えの方法は、専用命令を使う方法や、特定の制御レジスタに値を設定して切り替える方法などが考えられる。
図40は、基本ブロック毎の先頭に、専用命令である“switchiss”命令を挿入し、切り替えて使う方法を用いた例である。複数の部分命令セット定義を同じハードウェアに実装し、切り替えて実行することにより、このような命令セット定義を扱うことが可能になる。これらの部分命令セット定義は、例えばダイナミックリコンフィギュラブル回路上に実装することが考えられる。
以上説明したように、実施形態4によれば、ユーザの要求を制約条件110として与えることで、要求を満たす命令セットを自動的に求めることが可能になる。また、未確定のオペコードの割り当ても自動的に行うことができる。また、複数の部分命令セット定義を同一のハードウェアに割り当てることで、必要なユーザ定義命令の実行を可能にしながら、チップサイズの削減を行うことができる。
[実施形態5]
実施形態5では、プログラム101の翻訳等に用いられるライブラリを、コンフィギュラブル・プロセッサの拡張命令定義に応じて最適化するライブラリ・オプティマイザについて説明する。
図41に例示するように、ライブラリ・オプティマイザは、解析部4101、検出部4104、変換部4107などを備えている。解析部4101は、拡張命令定義ファイル113内に定義された拡張命令に適合するプロセッサの命令列を解析する。検出部4104は、解析部4101の解析結果(対応表4102)に基づいて、ライブラリ112aのバイナリコードに、該当する前記命令列が存在するか否かを検出する。バイナリ変換部4107は、検出部4104の検出結果4105に基づいて、ライブラリ112aのバイナリコードを最適化する。
以下、上記の各部の処理動作例を詳細に説明する。
図42は解析部4101の処理動作例を示している。
図42に示すように、解析部4101は、まず拡張命令定義ファイル113を入力し、定義されている拡張命令を解析する(ステップS4201)。拡張命令定義ファイル113は、上記各実施形態の設計装置により生成されたファイルでもよいし、手動で生成されたファイルでもよい。拡張命令定義ファイル113は、ターゲットプロセッサの命令定義もすべて含んでいるものとする。
また、解析部4101は、入力した拡張命令定義ファイル113を、内部的にアセンブラ定義ファイル4103と、C言語ヘッダファイル4211あるいはC言語ヘッダファイル4211と同等の内部情報に変換するが、手動または自動で生成されたアセンブラ定義ファイル4103とC言語ヘッダファイル4211を、解析部4101が外部から入力できるようにしてもよい。
ステップS4201の解析の結果、拡張命令である場合、次に、解析部4101は、C言語ヘッダファイル4211から、拡張された命令について、これと等価なターゲットプロセッサの命令列の解析を行う(ステップS4203)。この処理については、実施形態2で説明した『コンパイラによる最適化処理方法』の技術を用いる。ただし、解析部4101は、中間コードではなく、アセンブラコードレベルの解析を行う。
拡張命令定義ファイル113内に定義されている命令が残っている場合は、ステップS4201に戻り、拡張命令定義ファイル113内に定義されている命令が終わるまで、以上の処理を繰り返す(ステップS4204)。
この結果、解析結果として、拡張された命令と、それに変換可能なターゲットプロセッサの命令列の対応表4102を生成することができる。
このとき、コードサイズが削減されるような解析結果のみを有効とする。これは、コードサイズが不変または増加する場合は、最適化する意味がないためであり、また、後述する変換部4107の局所的バイナリ変換のために必要であるためである。コードサイズについては、アセンブラ定義ファイル4103より情報が得られる。
図43は検出部4104の処理動作例を示している。
図43に示すように、検出部4104は、各ライブラリ112aに対して、拡張命令への変換が可能な命令列を検出する。ライブラリ112aは、すべてのライブラリを対象にしてもよいし、別途プロファイル情報を外部から入力し、最適化の対象とするライブラリ112a、さらには、ライブラリ112a内部の対象範囲を限定してもよい。検出対象を限定する場合、検出処理と変換処理を高速に行うことができる。いずれにしても、ライブラリ112aを個々に走査しておくので、以下、単独のライブラリ112aに対して検出と変換を行うことを前提に説明する。検出と変換の対象となるライブラリを、当該ライブラリと呼ぶ。当該ライブラリは、C言語から作成されたライブラリ112aを前提とするが、条件を満たせば、それ以外でも可能である。詳細は後述する。
逆アセンブル結果生成部4311は、まずアセンブラ定義ファイル4103を使用して、当該ライブラリの逆アセンブル結果4106を生成する(ステップS4301)。そして、逆アセンブル結果生成部4311は、逆アセンブル結果4106から、解析部4101で生成した対応表4102を使用して、拡張命令に等価な命令列の検出を行い、検出結果4105として出力する(ステップS4303)。拡張命令に等価な命令列の検出方法は、実施形態2で説明した『コンパイラによる最適化処理方法』の技術を用いる。
ステップS4303の拡張命令に等価な命令列の検出において、収斂のある命令を含むことはできない。これを考慮するため、逆アセンブル結果生成部4311は、逆アセンブル時に、収斂のある命令に対して、ラベルを付加する(ステップS4302)。これにより、途中にラベルを含んだような命令列を、拡張命令に変換可能な命令列として検出されることを回避する。
逆アセンブル結果生成部4311は、ラベルの付加を、以下の手順で行う。
(1)逆アセンブル時に、無条件分岐命令の次の命令には、ラベルを付加しておく。
(2)PC相対の分岐命令に対しては、当該ライブラリ全体にわたって、オフセットを計算し、すべてのラベルを付加しておく。
(3)絶対アドレスへの分岐命令に対しては、当該ライブラリのリロケーション情報を検索して、すべてのラベルを付加しておく。
この結果、当該ライブラリがC言語から作成されたライブラリである場合は、当該ライブラリ中で収斂のある命令すべてにラベルを付加できたことになる。大域シンボルが、他のライブラリあるいはモジュールから参照される場合、それは必ず関数の先頭であり、その直前は、必ず無条件分岐命令になっている。C言語から当該ライブラリを作成するコンパイラで、関数の先頭の命令の直前命令が無条件分岐にならない場合は、コンパイラオプションの対応やコンパイラの実装で、必ず無条件分岐にするように修正することは、技術的に可能である。ポインタ参照により、収斂してくる場合は、C言語から作成されたライブラリである限り、関数の先頭に限定されるはずであり、上述のように検出可能である。
図44は、変換部4107の処理動作例を示している。
図44に示すように、変換部4107は、検出部4104の検出結果4105に基づいて、ライブラリ112aのバイナリを最適化し変換する。
まず、変換部4107は、該当する命令列をすべて削除し、その一番小さいアドレスに変換する拡張命令のバイナリに変換する(ステップS4401)。変換した結果、余った領域は、隙間となる。
次に、変換部4107は、隙間を、該当した命令列の、次の命令以降の命令を、前に移動して詰めていく(ステップS4402)。このとき、変換部4107は、以下の処理を実行する。
(1)移動する命令がラベルの場合、当該ライブラリ全体にわたって、そのラベルへのPC相対の分岐命令に対しては、その命令が移動しないのであれば、移動量によりオフセットを修正し、そのラベルへの絶対アドレスへの分岐命令に対しては、リロケーション情報を適切に修正する。
(2)移動する命令がPC相対の分岐命令の場合、その分岐先が移動しない命令であれば、移動量によりオフセットを修正する。
(3)移動する命令が絶対アドレスへの分岐命令の場合、リロケーション情報を適切に修正する。
(4)移動する命令が無条件分岐命令(リターン命令を含む)の場合、上記(2)(3)の修正を行い、移動後に、移動を終了。移動する命令が無条件分岐命令でない場合は、さらに次の命令を前に移動してつめていく(ステップS4403)。
上述のように、無条件分岐命令を移動した後に処理を終了するため、変換処理を高速化できる。また、移動が終了した後、新たに生じた隙間は、そのまま放置してもよいし、“nop”命令で埋めることにより、デバッグ時の逆アセンブル結果を整形して見せるようにしてもよい。
最後に、変換部4107は、当該ライブラリを再アセンブルし、最適化されたライブラリ112bとして出力する。
次に、標準ライブラリの“atoi”関数を用いた実施例を説明する。ここで使用する“atoi”関数は、完全な関数ではないが、実施例としては十分である。図45に例示するようなC言語でプログラミングされ、図46に示すようにバイナリとして、ライブラリ化されているものとする。尚、図46の(4501)行目の“rrrrrr”は、リロケーション情報を意味する。
ここで、命令拡張の定義として、図47に示すような拡張命令定義が与えられたとする。この拡張命令定義は、拡張命令自動生成により生成されてもよいし、手動で生成されてもよい。ライブラリ・オプティマイザは、上記ファイルを直接入力してもよいし、図48に示すような、別途生成されたアセンブラ定義ファイルとC言語ヘッダファイルを入力してもよい。
解析部4101は、C言語ヘッダヘッダファイルから、拡張定義された命令と等価なターゲットプロセッサの命令列の解析を行う。この解析には、実施形態2で説明した『コンパイラによる最適化処理方法』の技術を用いる。
すなわち、
“slad3 $t,$n,$n”
“mov $u,$t”
“add3 $t,$m,-48”
“sll $u,1”
“add3 $n,$t,$u”
の命令列は、拡張した命令
“digit $n,$u”
に変換可能であるという解析結果(対応表4104)を生成する。
検出部4104は、上記のバイナリに対して、逆アセンブル結果4106を生成する。上述した逆アセンブル結果の、
“_atoi”
“L50000”
“L5”
は、詳細説明の条件に従って検出できるラベルであり、検出部4104内部でラベルとして認識している。
検出部4104は、この逆アセンブル結果4106に対して、解析結果をもとに、“digit”命令に変換可能な命令列を検出する。この解析には、実施形態2で説明した『コンパイラによる最適化処理方法』の技術を用いる。
この結果、ラベルを含まない命令列
“slad3 $0,$0,$0”
“mov $12,$0”
“add3 $0,$11,-48”
“sll $12,1”
“add3 $0,$0,$12”
を、拡張した命令
“digit $0,$11”
に変換可能であるという検出結果4105を出力する。
変換部4107は、検出したコード列を隙間とし、隙間の先頭を拡張命令に変換する。この時点で、当該ライブラリは、図49に示すようになる。余った隙間(4811行目〜4813行目)は “xxxx”で表示する。
次に、変換部4107は、隙間をうめるための移動を開始する。隙間となる“xxxx”を削除するように、それ以降の命令列を移動する。ラベル“L5”(4815行目)が移動されるので、それへのオフセットを使用している命令(“beqz”命令(4809行目))のバイナリも変換する。また、PC相対の分岐命令(“bra”命令(4814行目))も移動されるので、そのバイナリも変換する。“ret”命令(4816行目)は無条件分岐なので、それを移動した時点で、移動は終了する。移動の結果を図50に示す。
新たに生じた隙間(4914〜4917行目)は、放置してもよいが、ここではデバッグ時の逆アセンブル結果の見栄えをよくするために、図51に示すように、“nop”命令に変換しておく。
以上説明したように、実施形態5によれば、アプリケーションプログラムにリンクされるライブラリを拡張命令に応じて最適化することができ、より高速に実行可能なオブジェクトファイルを生成することができる。
以上、本発明の実施の形態について詳細に説明したが、本発明は、その精神または主要な特徴から逸脱することなく、他の色々な形で実施することができる。
従って、前述の各実施例はあらゆる点で単なる例示に過ぎず、限定的に解釈してはならない。本発明の範囲は、特許請求の範囲によって示すものであって、明細書本文には何ら拘束されない。更に、特許請求の範囲の均等範囲に属する変形や変更は、全て本発明の範囲内のものである。
実施形態1における、構成変更可能なプロセッサの設計装置の構成例を示す概略ブロック図である。 図1に示した設計装置による設計処理手順を例示するフローチャートである。 拡張命令化及びハードウェア拡張化の処理手順を擬似コードで表現した一例を示す図である。 ハードウェア拡張化や拡張命令化の対象となる箇所を指定するための表示画面のレイアウト例である。 実施形態1における設計装置及び設計方法によって設計されるコンフィグラブル・プロセッサの構成を例示した図である。 実施形態2における拡張命令定義部の構成例を示す図である。 図6に示した拡張命令定義部が行う拡張命令記述を生成する処理の動作例を示すフローチャートである。 図6に示した拡張命令定義部が入力するソースプログラムの一例を示す図である。 拡張命令化前のコプロセッサの命令定義例を示す図である。 図6に示したソースプログラムをコンパイルした結果のアセンブリコードを例示する図である。 命令記述生成部が生成する拡張命令の命令定義記述の一例を示す図である。 拡張命令追加後のコンパイラを用いて、図8に示したソースプログラムをコンパイルした結果を例示する図である。 図6に示した拡張命令定義部が入力するソースプログラムの別の例を示す図である。 図13に示すプログラムを、拡張命令なしの命令セットでコンパイルした結果のアセンブリコードを例示する図である。 命令記述生成部が生成する拡張命令の命令定義記述の一例を示す図である。 図13に示すプログラムを、拡張命令を用いてコンパイルした結果のアセンブリコードを例示する図である。 実施形態3における動的解析部の構成例を示す図である。 図17に示した動的解析部のうち、命令列分割部の構成例を示す図である。 図17に示した動的解析部のうち、命令実行部の構成例を示す図である。 図17に示した動的解析部が入力する命令列の一例を示す図である。 図18に示した命令列分割部のうち、分岐命令探索部が出力する分岐収斂情報の一例を示す図である。 図21に示した分岐収斂情報を、アドレス順にソートした結果を例示する図である。 図18に示した命令列分割部のうち、分岐ブロック生成部が出力する命令ブロック情報の一例を示す図である。 図18に示した命令ブロック実行回数計算部が出力する命令ブロック実行回数の一例を示す図である。 実施形態4(第1実施例)における設計装置の構成例を示す図である。 図25に示した設計装置が入力するソースプログラムの一例を示す図である。 図25に示した設計装置が入力するユーザ定義命令群の一例を示す図である。 図27に示したユーザ定義命令群を使わずに、図26のプログラムをコンパイルした結果を例示する図である。 図27に示したユーザ定義命令群を使って、図26のプログラムをコンパイルした結果を例示する図である。 ユーザ定義命令群U_Iによって導き出されたアセンブリコードA<muldivi>を例示する図である。 ユーザ定義命令群U_2によって導き出されたアセンブリコードA<muldiv2>を例示する図である。 命令セット生成部によって出力される命令セット定義の一例を示す図である。 実施形態4(第3実施例)における設計装置の構成例を示す図である。 図33に示した設計装置が入力するソースプログラムの一例を示す図である。 図33に示した設計装置が入力するユーザ定義命令群の一例を示す図である。 図35に示したユーザ定義命令群を使って、図34のプログラムをコンパイルした結果を例示する図である。 プログラム分割部によって分割された命令ブロックの集合を例示する図である。 ユーザ定義命令とそのオペコード(未確定コードを含む)の一例を示す図である。 ユーザ定義命令とそのオペコード(コード割り当て済み)の一例を示す図である。 部分命令セット定義の切り替えを使ったアセンブリコードの一例を示す図である。 実施形態5におけるライブラリ・オプティマイザの構成例を示す図である。 図41に示したライブラリ・オプティマイザのうち、解析部の詳細な構成を例示する図である。 図41に示したライブラリ・オプティマイザのうち、検出部の詳細な構成を例示する図である。 図41に示したライブラリ・オプティマイザのうち、変換部の詳細な構成を例示する図である。 図41に示したライブラリ・オプティマイザが最適化するライブラリに登録されている関数の一例を例示する図である。 図45に示した関数のバイナリ例を例示する図である。 図41に示したライブラリ・オプティマイザが入力する拡張命令定義ファイルの一例を示す図である。 図41に示したライブラリ・オプティマイザが外部から入力するアセンブラ定義ファイルとC言語ヘッダファイルの一例を示す図である。 ライブラリ・オプティマイザが変換したライブラリデータの一例を示す図である。 図49に示したライブラリデータの隙間を埋めるためにコードを移動した様子を例示する図である。 図50に示した移動処理の結果、新たにできた隙間に“nop”命令を埋めた例を示す図である。
符号の説明
101…プログラム
102…プロセッサ構成情報
103…ツール生成部
104…言語ツール
105…シミュレータ
106…実行形式
107…静的解析情報
108…動的解析情報
109…拡張処理部
110…制約条件
112…ライブラリ
112a…ライブラリ(最適化前)
112b…ライブラリ(最適化後)
113…拡張命令定義ファイル
114…入力/表示部
121…翻訳部
122…静的解析部
131…シミュレータ部
132…動的解析部
141…拡張命令定義部
142…ハードウェア拡張部
143…性能見積部
401…関数表示ウインド
402…コード表示ウインド
500…プロセッサ
501…タイマ・カウンタ
502…割込みコントローラ
503…デバック機能
504…オプション命令
505…プロセッサコア
506…BIU
507…ローカルメモリ
508…命令キャッシュ/RAM
509…データキャッシュ/RAM
510…グローバルバスI/Fユニット
511…DSPユニット
512…UCIユニット
513…コプロセッサ
514…ハードウェアエンジン
515…データストリーマ
516…ローカルバス
517…DMAコントローラ
601…ブロック情報
602…命令化判定部
603…ブロック分割部
604…命令記述生成部
605…拡張命令記述
1701…命令列
1702…ユーザ指定分割情報
1703…命令列分割部
1704…命令ブロック情報
1705…命令実行部
1706…命令ブロック実行回数
1801…分岐命令探索部
1802…分岐収斂情報
1803…分岐ブロック生成部
1704…命令ブロック情報
1901…先行命令情報
1902…ブロック情報計算部
1903…ブロック情報
1904…情報比較部
1905…命令ブロック実行回数計算部
1906…命令シミュレータ
2502…部分命令集合生成部
2503…プログラム解析部
2504…命令セット生成部
2505…拡張命令セット定義
3301…プログラム解析部
3302…プログラム分割部
3303…部分命令セット生成部
3305…部分命令セット定義
4101…解析部
4102…対応表
4103…アセンブラ定義ファイル
4104…検出部
4105…検出結果
4106…逆アセンブル結果
4107…変換部
4211…C言語ヘッダファイル
4311…逆アセンブル結果生成部

Claims (29)

  1. 目的に応じて構成変更可能なプロセッサを設計するための設計装置であって、
    前記プロセッサで実行するプログラムの内容を解析する解析部と、
    前記解析部による解析結果に基づいて、前記プログラムのうちハードウェア拡張化する部分を求め、求めたハードウェア拡張化部分のハードウェア拡張情報を生成するハードウェア拡張部と、
    前記解析部による解析結果に基づいて、前記プログラムのうち拡張命令化する部分を求め、求めた拡張命令化部分の拡張命令定義を生成する拡張命令定義部と、
    前記ハードウェア拡張部が生成した前記ハードウェア拡張情報と前記拡張命令定義部が生成した前記拡張命令定義のいずれか一方もしくは両方によって、前記プロセッサの性能が目標性能を満足するか否かを見積もる性能見積部と
    を備えることを特徴とするコンフィグラブル・プロセッサの設計装置。
  2. 前記解析部は、前記プログラムの翻訳結果から得られる構文解析情報を用いて静的解析情報を解析する静的解析部と、前記プログラムの実行結果から得られるプロファイル情報を用いて動的解析情報を解析する動的解析部の少なくとも一方を含むこと
    を特徴とする請求項1記載のコンフィグラブル・プロセッサの設計装置。
  3. 前記ハードウェア拡張化及び前記拡張命令化を制約するための制約条件を入力する入力部を備え、
    前記ハードウェア拡張部は、前記制約条件を満たすように前記ハードウェア拡張化を実行し、前記拡張命令定義部は、前記制約条件を満たすように前記拡張命令化を実行すること
    を特徴とする請求項1または請求項2のいずれか1項に記載のコンフィグラブル・プロセッサの設計装置。
  4. 前記ハードウェア拡張化あるいは前記拡張命令化を実行する部分、または、前記ハードウェア拡張化あるいは前記拡張命令化の実行を禁止する部分を指定するための指示情報を入力する入力部を備えること
    を特徴とする請求項1ないし請求項3のいずれか1項に記載のコンフィグラブル・プロセッサの設計装置。
  5. 目的に応じて構成変更可能なプロセッサを設計するための設計装置であって、
    前記プロセッサで実行するプログラムを実行し、その実行結果から得られるプロファイル情報を用いて動的解析情報を解析する解析部と、
    前記解析部による解析結果に基づいて、前記プログラムのうちハードウェア拡張化する部分を求め、求めたハードウェア拡張化部分のハードウェア拡張情報を生成するハードウェア拡張部と、
    前記解析部による解析結果に基づいて、前記プログラムのうち拡張命令化する部分を求め、求めた拡張命令化部分の拡張命令定義を生成する拡張命令定義部とを備え、
    前記動的解析部は、
    前記プログラムの命令列をブロックに分割する命令列分割部と、
    分割された前記ブロック単位で命令の実行回数をカウントする命令実行部とを備え、
    前記ブロック単位でカウントした前記実行回数を動的解析結果として出力すること
    を特徴とするコンフィグラブル・プロセッサの設計装置。
  6. 前記命令列分割部は、前記プログラムの命令列のうち、分岐及び収斂を含まない命令列群を1ブロックとして分割すること
    を特徴とする請求項5記載のコンフィグラブル・プロセッサの設計装置。
  7. 前記命令実行部は、前記分岐及び収斂を含まない命令列群からなるブロックの先頭命令の実行回数のみをカウントして、当該ブロックの実行回数とすること
    を特徴とする請求項6記載のコンフィグラブル・プロセッサの設計装置。
  8. 目的に応じて構成変更可能なプロセッサを設計するための設計装置であって、
    前記プロセッサで実行するプログラムの内容を解析する解析部と、
    前記解析部による解析結果に基づいて、前記プログラムのうち拡張命令化する部分を求め、求めた拡張命令化部分、あるいはユーザにより与えられた拡張命令化部分に対して、の拡張命令定義を生成する拡張命令定義部とを備え、
    前記拡張命令定義部は、
    前記プログラムのうち拡張命令化候補のブロックに対し、当該ブロックの処理動作と等価な処理動作を行う拡張命令の生成の可否を判定する命令化判定部と、
    前記命令化判定部の判定結果に従って、前記ブロックの処理動作と等価な処理動作を行う拡張命令記述を生成する命令記述生成部とを備えること
    を特徴とするコンフィグラブル・プロセッサの設計装置。
  9. 前記拡張命令定義部は、前記ブロックを更に分割するブロック分割部を備え、
    前記命令記述生成部は、前記更に分割された各ブロックの一部または全部に対し、前記拡張命令記述の生成を実行すること
    を特徴とする請求項8に記載のコンフィグラブル・プロセッサの設計装置。
  10. 前記ブロック分割部は、前記プログラムに記述されている単一の文を複数のブロックに分割すること
    を特徴とする請求項9に記載のコンフィグラブル・プロセッサの設計装置。
  11. 前記命令記述生成部は、分割して生成された各ブロックの中から、所定の変数を使用している文、あるいは所定のレジスタを使用している命令列を含むブロックに対し、前記拡張命令記述の生成を実行すること
    を特徴とする請求項8に記載のコンフィグラブル・プロセッサの設計装置。
  12. 前記命令記述生成部は、前記ブロック内で使用されている変数を前記プロセッサ外部のレジスタに割り当て、割り当てられた前記プロセッサ外部のレジスタと前記プロセッサ間の転送命令を定義した拡張命令記述を生成すること
    を特徴とする請求項8に記載のコンフィグラブル・プロセッサの設計装置。
  13. 目的に応じて構成変更可能なプロセッサを設計するための設計装置であって、
    前記プロセッサで実行するプログラムのための拡張命令を組み合わせて部分命令集合群を生成する部分命令集合生成部と、
    各部分命令集合を用いて行った前記プログラムの翻訳結果から得られる構文解析情報と、前記翻訳結果を用いて実行した前記プログラムの実行結果から得られるプロファイル情報とから、前記各部分命令集合を用いることによる効果を解析する解析部と、
    前記解析部による解析結果に基づいて、所定の制約条件に最適な部分命令集合を選択し、選択した部分命令集合を拡張命令セットとして生成する命令セット生成部と
    を備えることを特徴とするコンフィグラブル・プロセッサの設計装置。
  14. 前記制約条件は、プログラムの実行命令数、プログラムのコードサイズ、プロセッサのチップサイズのうち、少なくとも1つを含むこと
    を備えることを特徴とする請求項13記載のコンフィグラブル・プロセッサの設計装置。
  15. 前記命令セット生成部は、
    前記解析部による解析結果に基づいて、前記プログラムを部分プログラムに分割するプログラム分割部と、
    各部分プログラムで実行される命令の集合である部分命令セット定義を生成する部分命令セット定義生成部を備えること
    を特徴とする請求項13記載のコンフィグラブル・プロセッサの設計装置。
  16. 前記部分命令セット定義生成部は、各部分プログラムにオペコードが未定義の命令が含まれている場合、利用可能なオペコードを割り当てること
    を特徴とする請求項15記載のコンフィグラブル・プロセッサの設計装置。
  17. 前記部分命令セット定義生成部は、複数の前記部分命令セット定義に対して、同じオペコードの集合を割り当てること
    を特徴とする請求項15記載のコンフィグラブル・プロセッサの設計装置。
  18. 目的に応じて構成変更可能なプロセッサで実行するプログラムの内容を解析する解析部と、前記解析部による解析結果に基づいて、前記プログラムのうち拡張命令化する部分を求め、求めた拡張命令化部分の拡張命令定義を生成する拡張命令定義部とを備えるコンフィグラブル・プロセッサの設計装置であって、
    前記プログラムの翻訳に用いるライブラリを最適化するライブラリ・オプティマイザを備え、前記ライブラリ・オプティマイザは、
    前記拡張命令定義内に定義された拡張命令に適合する前記プロセッサの命令列を解析する解析部と、
    前記解析部の解析結果に基づいて、前記ライブラリのバイナリコードに、該当する前記命令列が存在するか否かを検出する検出部と、
    前記検出部の検出結果に基づいて、前記ライブラリのバイナリコードを最適化するバイナリ変換部とを含むこと
    を特徴とするコンフィグラブル・プロセッサの設計装置。
  19. 前記拡張命令定義は、アセンブラ定義ファイルとC言語によるヘッダファイルにより構成されることを特徴とする請求項18に記載のコンフィグラブル・プロセッサの設計装置。
  20. 前記検出部は、外部よりプロファイル情報を入力し、ライブラリのクリティカルな部分の最適化のみ行うこと
    を特徴とする請求項18または請求項19のいずれかに記載のコンフィグラブル・プロセッサの設計装置。
  21. 前記変換部は、ライブラリ内の局所的なバイナリ変換を行うこと
    を特徴とする請求項18ないし請求項20のいずれか1項に記載のコンフィグラブル・プロセッサの設計装置。
  22. 目的に応じて構成変更可能なプロセッサをコンピュータにより設計するための設計方法であって、
    解析部が、前記プロセッサで実行するプログラムの内容を解析する段階と、
    ハードウェア拡張部が、前記解析部による解析結果に基づいて、前記プログラムのうちハードウェア拡張化する部分を求め、求めたハードウェア拡張化部分のハードウェア拡張情報を生成する段階と、
    拡張命令定義部が、前記解析部による解析結果に基づいて、前記プログラムのうち拡張命令化する部分を求め、求めた拡張命令化部分の拡張命令定義を生成する段階と、
    性能見積部が、前記ハードウェア拡張部が生成した前記ハードウェア拡張情報と前記拡張命令定義部が生成した前記拡張命令定義のいずれか一方もしくは両方によって、前記プロセッサの性能が目標性能を満足するか否かを見積もる段階とを含み、
    前記プロセッサの性能が前記目標性能を満足するまで前記各段階の処理を前記コンピュータの前記各部に実行させることを特徴とするコンフィグラブル・プロセッサの設計方法。
  23. 目的に応じて構成変更可能なプロセッサをコンピュータにより設計するための設計方法であって、
    命令列分割部が、前記プロセッサで実行するプログラムの命令列をブロックに分割する段階と、
    命令実行部が、前記プログラムを実行し、分割された前記ブロック単位で命令の実行回数をカウントし、カウントした前記実行回数を動的解析結果として出力する段階と、
    ハードウェア拡張部が、前記命令実行部による解析結果に基づいて、前記プログラムのうちハードウェア拡張化する部分を求め、求めたハードウェア拡張化部分のハードウェア拡張情報を生成する段階と、
    拡張命令定義部が、前記命令実行部による解析結果に基づいて、前記プログラムのうち拡張命令化する部分を求め、求めた拡張命令化部分の拡張命令定義を生成する段階とを含み、
    前記各段階の処理を前記コンピュータの前記各部に実行させることを特徴とするコンフィグラブル・プロセッサの設計方法。
  24. 目的に応じて構成変更可能なプロセッサをコンピュータにより設計するための設計方法であって、
    解析部が、前記プロセッサで実行するプログラムの内容を解析する段階と、
    命令化判定部が、前記解析部による解析結果に基づいて、前記プログラムのうち拡張命令化候補のブロックに対し、当該ブロックの処理動作と等価な処理動作を行う拡張命令の生成の可否を判定する段階と、
    命令記述生成部が、前記命令化判定部の判定結果に従って、前記ブロックの処理動作と等価な処理動作を行う拡張命令記述を生成する段階とを含み、
    前記各段階の処理を前記コンピュータの前記各部に実行させることを特徴とするコンフィグラブル・プロセッサの設計方法。
  25. 目的に応じて構成変更可能なプロセッサをコンピュータにより設計するための設計方法であって、
    部分命令集合生成部が、前記プロセッサで実行するプログラムのための拡張命令を組み合わせて部分命令集合群を生成する段階と、
    解析部が、各部分命令集合を用いて行った前記プログラムの翻訳結果から得られる構文解析情報と、前記翻訳結果を用いて実行した前記プログラムの実行結果から得られるプロファイル情報とから、前記各部分命令集合を用いることによる効果を解析する段階と、
    命令セット生成部が、前記解析部による解析結果に基づいて、所定の制約条件に最適な部分命令集合を選択し、選択した部分命令集合を拡張命令セットとして生成する段階とを含み、
    前記各段階の処理を前記コンピュータの前記各部に実行させることを特徴とするコンフィグラブル・プロセッサの設計方法。
  26. 目的に応じて構成変更可能なプロセッサで実行するプログラムの翻訳結果から得られる構文解析情報と、前記翻訳結果を用いて実行した前記プログラムの実行結果から得られるプロファイル情報とから前記プログラムを解析する解析部と、前記解析部による解析結果に基づいて、前記プログラムのうち拡張命令化する部分を求め、求めた拡張命令化部分の拡張命令定義を生成する拡張命令定義部とを備えるコンフィグラブル・プロセッサの設計装置において、前記プログラムの翻訳に用いられるライブラリをコンピュータにより最適化する最適化方法であって、
    解析部が、前記拡張命令定義内に定義された拡張命令に適合する前記プロセッサの命令列を解析する段階と、
    検出部が、前記解析部の解析結果に基づいて、前記ライブラリのバイナリコードに、該当する前記命令列が存在するか否かを検出する段階と、
    バイナリ変換部が、前記検出部の検出結果に基づいて、前記ライブラリのバイナリコードを最適化する段階とを含み、
    前記各段階の処理を前記コンピュータの前記各部に実行させることを特徴とするライブラリの最適化方法。
  27. 目的に応じて構成変更可能なプロセッサであって、
    解析部が、前記プロセッサで実行するプログラムを入力し、入力した前記プログラムの内容を解析する段階と、
    ハードウェア拡張部が、前記解析部による解析結果に基づいて、前記プログラムのうちハードウェア拡張化する部分を求め、求めたハードウェア拡張化部分のハードウェア拡張情報を生成する段階と、拡張命令定義部が、前記解析部による解析結果に基づいて、前記プログラムのうち拡張命令化する部分を求め、求めた拡張命令化部分の拡張命令定義を生成する段階と、性能見積部が、前記ハードウェア拡張部が生成した前記ハードウェア拡張情報と前記拡張命令定義部が生成した前記拡張命令定義のいずれか一方もしくは両方によって、前記プロセッサの性能が目標性能を満足するか否かを見積もる段階とを含み、前記プロセッサの性能が前記目標性能を満足するまで前記各段階の処理を前記コンピュータの前記各部に実行させる設計方法によって設計されることを特徴とするプロセッサ。
  28. 請求項22に記載の設計方法により設計されたプロセッサであって、
    前記複数の部分命令セット定義を同一のハードウェアに実装し、実装した前記複数の部分命令セット定義を、プロセッサを実行中に切り替えて実行すること
    を特徴とするプロセッサ。
  29. 請求項22に記載の設計方法において前記コンピュータの前記各部で実行された前記各段階の処理で得られた結果を基に、マスクデータを作成する段階と、
    作成された前記マスクデータを基にマスクを作成する段階と、
    作成された前記マスクを用いて、前記プロセッサを含む半導体回路の回路パターンを、半導体基板内及び半導体基板上に形成する段階とを有すること
    を特徴とするプロセッサを備えた半導体装置の製造方法。

JP2004024499A 2004-01-30 2004-01-30 コンフィグラブル・プロセッサの設計装置、設計方法、ライブラリの最適化方法、プロセッサ、及びプロセッサを備えた半導体装置の製造方法 Pending JP2005216177A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2004024499A JP2005216177A (ja) 2004-01-30 2004-01-30 コンフィグラブル・プロセッサの設計装置、設計方法、ライブラリの最適化方法、プロセッサ、及びプロセッサを備えた半導体装置の製造方法
US11/044,085 US7337301B2 (en) 2004-01-30 2005-01-28 Designing configurable processor with hardware extension for instruction extension to replace searched slow block of instructions
US11/957,781 US7707386B2 (en) 2004-01-30 2007-12-17 Program segment searching for extension instruction determination to design a processor that meets performance goal

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004024499A JP2005216177A (ja) 2004-01-30 2004-01-30 コンフィグラブル・プロセッサの設計装置、設計方法、ライブラリの最適化方法、プロセッサ、及びプロセッサを備えた半導体装置の製造方法

Publications (1)

Publication Number Publication Date
JP2005216177A true JP2005216177A (ja) 2005-08-11

Family

ID=34879127

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004024499A Pending JP2005216177A (ja) 2004-01-30 2004-01-30 コンフィグラブル・プロセッサの設計装置、設計方法、ライブラリの最適化方法、プロセッサ、及びプロセッサを備えた半導体装置の製造方法

Country Status (2)

Country Link
US (2) US7337301B2 (ja)
JP (1) JP2005216177A (ja)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008015963A (ja) * 2006-07-10 2008-01-24 Oki Electric Ind Co Ltd コンパイラ
JP2008130078A (ja) * 2006-11-17 2008-06-05 Samsung Electronics Co Ltd プロセッサ構造および応用の最適化のためのプロファイラ
JP2013532857A (ja) * 2010-07-13 2013-08-19 アルゴトゥチップ コーポレーション アルゴリズムおよび仕様に基づく自動最適集積回路ジェネレータ
CN103270512A (zh) * 2010-10-18 2013-08-28 艾尔葛托奇普股份有限公司 智能架构创建器
JP2013540295A (ja) * 2010-07-13 2013-10-31 アルゴトゥチップ コーポレーション アーキテクチャ・レベルの省電力指向の最適化およびリスク軽減
JP2014507715A (ja) * 2011-01-19 2014-03-27 アルゴトゥチップ コーポレーション アーキテクチャ・オプティマイザ
JP2015035033A (ja) * 2013-08-07 2015-02-19 富士通セミコンダクター株式会社 設計支援方法、設計支援プログラム、および設計支援装置
WO2021015182A1 (ja) * 2019-07-22 2021-01-28 コネクトフリー株式会社 コンピューティングシステムおよび情報処理方法

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6986128B2 (en) * 2000-01-07 2006-01-10 Sony Computer Entertainment Inc. Multiple stage program recompiler and method
JP2006243839A (ja) * 2005-02-28 2006-09-14 Toshiba Corp 命令生成装置及び命令生成方法
US7689735B2 (en) * 2005-10-03 2010-03-30 Arm Limited Instruction stream control
US9064076B1 (en) * 2006-03-23 2015-06-23 Synopsys, Inc. User interface for facilitation of high level generation of processor extensions
US9015399B2 (en) 2007-08-20 2015-04-21 Convey Computer Multiple data channel memory module architecture
US8561037B2 (en) * 2007-08-29 2013-10-15 Convey Computer Compiler for generating an executable comprising instructions for a plurality of different instruction sets
US8095735B2 (en) 2008-08-05 2012-01-10 Convey Computer Memory interleave for heterogeneous computing
US9710384B2 (en) 2008-01-04 2017-07-18 Micron Technology, Inc. Microprocessor architecture having alternative memory access paths
US8671418B2 (en) * 2009-02-10 2014-03-11 International Business Machines Corporation Environment modification in a hybrid node computing environment
US8543907B1 (en) * 2009-10-16 2013-09-24 Google Inc. Context-sensitive optimization level selection
US8423745B1 (en) 2009-11-16 2013-04-16 Convey Computer Systems and methods for mapping a neighborhood of data to general registers of a processing element
US9032375B2 (en) * 2011-04-27 2015-05-12 International Business Machines Corporation Performance bottleneck identification tool
US9003379B2 (en) * 2011-12-12 2015-04-07 Zynga Inc. Methods and systems for generating test information from a source code
KR20130088285A (ko) * 2012-01-31 2013-08-08 삼성전자주식회사 데이터 처리 시스템 및 그 시스템에서 데이터 시뮬레이션 방법
US10430190B2 (en) 2012-06-07 2019-10-01 Micron Technology, Inc. Systems and methods for selectively controlling multithreaded execution of executable code segments
US9292419B1 (en) * 2013-06-04 2016-03-22 The Mathworks, Inc. Code coverage and confidence determination
US10095886B2 (en) 2013-09-20 2018-10-09 Schneider Electric USA, Inc. Systems and methods for verification and deployment of applications to programmable devices
IN2014CH00532A (ja) * 2014-02-05 2015-08-07 Infosys Ltd
US10296351B1 (en) 2017-03-15 2019-05-21 Ambarella, Inc. Computer vision processing in hardware data paths
US20200104228A1 (en) * 2018-09-27 2020-04-02 Ripple Labs Inc. Asynchronous self-proving transactions
CN110210046B (zh) * 2019-02-20 2023-04-07 芯易荟(上海)芯片科技有限公司 应用程序及专用指令集处理器一体化敏捷设计方法

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04175974A (ja) 1990-11-09 1992-06-23 Hitachi Ltd コプロセッサ論理回路自動生成方法
US6477683B1 (en) * 1999-02-05 2002-11-05 Tensilica, Inc. Automated processor generation system for designing a configurable processor and method for the same
JP2002230065A (ja) * 2001-02-02 2002-08-16 Toshiba Corp システムlsi開発装置およびシステムlsi開発方法
US6941548B2 (en) * 2001-10-16 2005-09-06 Tensilica, Inc. Automatic instruction set architecture generation
JP2003196333A (ja) * 2001-12-28 2003-07-11 Nec Electronics Corp システムlsiの設計方法及びこれを記憶した記録媒体
JP2003241975A (ja) 2002-02-21 2003-08-29 Matsushita Electric Ind Co Ltd コンパイラ装置および半導体集積回路
JP2003288203A (ja) 2002-03-27 2003-10-10 Asahi Kasei Corp プロセッサの開発支援装置
JP2003316838A (ja) 2002-04-19 2003-11-07 Nec Electronics Corp システムlsiの設計方法及びこれを記憶した記録媒体
US7346881B2 (en) * 2002-05-13 2008-03-18 Tensilica, Inc. Method and apparatus for adding advanced instructions in an extensible processor architecture
JP2005063136A (ja) 2003-08-12 2005-03-10 Toshiba Corp 半導体集積回路の設計装置、設計方法、及び設計プログラム
JP2006243839A (ja) 2005-02-28 2006-09-14 Toshiba Corp 命令生成装置及び命令生成方法

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008015963A (ja) * 2006-07-10 2008-01-24 Oki Electric Ind Co Ltd コンパイラ
JP2008130078A (ja) * 2006-11-17 2008-06-05 Samsung Electronics Co Ltd プロセッサ構造および応用の最適化のためのプロファイラ
JP4489102B2 (ja) * 2006-11-17 2010-06-23 三星電子株式会社 プロセッサ構造および応用の最適化のためのプロファイラ
US8490066B2 (en) 2006-11-17 2013-07-16 Samsung Electronics Co., Ltd. Profiler for optimizing processor architecture and application
JP2013540295A (ja) * 2010-07-13 2013-10-31 アルゴトゥチップ コーポレーション アーキテクチャ・レベルの省電力指向の最適化およびリスク軽減
JP2013532857A (ja) * 2010-07-13 2013-08-19 アルゴトゥチップ コーポレーション アルゴリズムおよび仕様に基づく自動最適集積回路ジェネレータ
CN103270512A (zh) * 2010-10-18 2013-08-28 艾尔葛托奇普股份有限公司 智能架构创建器
JP2013541778A (ja) * 2010-10-18 2013-11-14 アルゴトゥチップ コーポレーション インテリジェント・アーキテクチャ・クリエータ
KR101503620B1 (ko) * 2010-10-18 2015-03-18 알고토칩 코포레이션 지능형 아키텍처 생성기
JP2014507715A (ja) * 2011-01-19 2014-03-27 アルゴトゥチップ コーポレーション アーキテクチャ・オプティマイザ
JP2015035033A (ja) * 2013-08-07 2015-02-19 富士通セミコンダクター株式会社 設計支援方法、設計支援プログラム、および設計支援装置
WO2021015182A1 (ja) * 2019-07-22 2021-01-28 コネクトフリー株式会社 コンピューティングシステムおよび情報処理方法
JP2021018650A (ja) * 2019-07-22 2021-02-15 コネクトフリー株式会社 コンピューティングシステムおよび情報処理方法
JP7335591B2 (ja) 2019-07-22 2023-08-30 コネクトフリー株式会社 コンピューティングシステムおよび情報処理方法

Also Published As

Publication number Publication date
US20050193184A1 (en) 2005-09-01
US7707386B2 (en) 2010-04-27
US20080104365A1 (en) 2008-05-01
US7337301B2 (en) 2008-02-26

Similar Documents

Publication Publication Date Title
JP2005216177A (ja) コンフィグラブル・プロセッサの設計装置、設計方法、ライブラリの最適化方法、プロセッサ、及びプロセッサを備えた半導体装置の製造方法
US7340692B2 (en) System LSI development apparatus and the method thereof for developing a system optimal to an application
US5457799A (en) Optimizer for program loops
US6023583A (en) Optimized variable allocation method, optimized variable allocation system and computer-readable memory containing an optimized variable allocation program
US5966539A (en) Link time optimization with translation to intermediate program and following optimization techniques including program analysis code motion live variable set generation order analysis, dead code elimination and load invariant analysis
Leupers Retargetable code generation for digital signal processors
US6487715B1 (en) Dynamic code motion optimization and path tracing
US6286135B1 (en) Cost-sensitive SSA-based strength reduction algorithm for a machine with predication support and segmented addresses
US6772106B1 (en) Retargetable computer design system
US20090113404A1 (en) Optimum code generation method and compiler device for multiprocessor
JP3650649B2 (ja) 最適化装置
JP2007141173A (ja) コンパイルシステム、デバッグシステムおよびプログラム開発システム
US20060200796A1 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
JP2014510960A (ja) ツール・ジェネレータ
US6360360B1 (en) Object-oriented compiler mechanism for automatically selecting among multiple implementations of objects
Wang et al. Accurate source-level simulation of embedded software with respect to compiler optimizations
KR101503620B1 (ko) 지능형 아키텍처 생성기
KR20080089575A (ko) 스테이트먼트를 재구성하는 방법 및 그 기능을 구비한컴퓨터 시스템
JP5038760B2 (ja) ソースコード変換装置及びソースコード変換方法
US6973645B2 (en) Compiler, operation processing system and operation processing method
Saraiva et al. Data structure free compilation
Platzer et al. A processor extension for time-predictable code execution
Proebstring Code generation techniques
dos Santos Acceleration of applications with fpga-based computing machines: Code restructuring
Leupers et al. Retargetable compilers and architecture exploration for embedded processors

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20080111

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080122

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080321

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20080520