JP5682081B2 - インテリジェント・アーキテクチャ・クリエータ - Google Patents

インテリジェント・アーキテクチャ・クリエータ Download PDF

Info

Publication number
JP5682081B2
JP5682081B2 JP2013534912A JP2013534912A JP5682081B2 JP 5682081 B2 JP5682081 B2 JP 5682081B2 JP 2013534912 A JP2013534912 A JP 2013534912A JP 2013534912 A JP2013534912 A JP 2013534912A JP 5682081 B2 JP5682081 B2 JP 5682081B2
Authority
JP
Japan
Prior art keywords
computer
instructions
instruction
processor architecture
architecture
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
JP2013534912A
Other languages
English (en)
Other versions
JP2013541778A (ja
Inventor
アナン パンドゥランガン
アナン パンドゥランガン
パイアス ウン
パイアス ウン
シバ セルバラージ
シバ セルバラージ
サンジェイ バナージー
サンジェイ バナージー
アナン ダーバ
アナン ダーバ
スレッシュ カディヤラ
スレッシュ カディヤラ
サティシュ パドゥマナバン
サティシュ パドゥマナバン
Original Assignee
アルゴトゥチップ コーポレーション
アルゴトゥチップ コーポレーション
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 アルゴトゥチップ コーポレーション, アルゴトゥチップ コーポレーション filed Critical アルゴトゥチップ コーポレーション
Publication of JP2013541778A publication Critical patent/JP2013541778A/ja
Application granted granted Critical
Publication of JP5682081B2 publication Critical patent/JP5682081B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • 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/327Logic synthesis; Behaviour synthesis, e.g. mapping logic, HDL to netlist, high-level language to RTL or netlist
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2115/00Details relating to the type of the circuit
    • G06F2115/10Processors

Landscapes

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

Description

本発明は、カスタム集積回路(IC)または特定用途向け集積回路(ASIC)のための最適アーキテクチャを自動的に生成する方法に関する。
近代的な電子機器および産業製品は、標準およびカスタム集積回路(IC)といった電子デバイスに頼っている。特定の目的のために設計され、製造されるICは、ASICと呼ばれる。トランジスタの数に置き換えられる、ICのそれぞれに含まれる機能の数は、半導体テクノロジにおける進歩に起因して年を追って急速に増え続けている。
通常、チップ設計プロセスは、チップが実行しなければならないすべての機能をアルゴリズム設計者が指定するときから始まる。これは、一般に、CまたはMATLAB(マトラボ)等の言語においてなされる。その後チップ・スペシャリスト、ツール技術者、検証技術者、およびファームウエア技術者のチームが、多くのマン・イヤー(man-year)を費やしてアルゴリズムをハードウエア・チップおよび関連するファームウエアにマップする。チームは、既製のプロセッサを使用することが可能である。既製のプロセッサは、それは分かっていることではあるが、標準的なアーキテクチャがそのアルゴリズムと良好に適合しないことがあるため、パフォーマンスが制限されるおそれがある。
既製のプロセッサを用いる代替案は、所望のアルゴリズムのための高いパフォーマンスを達成することできる、カスタム・アーキテクチャおよびカスタム・ハードウエアを設計することである。コンピュータ・アーキテクチャは、コンピュータ・システムの演算、通信、およびデータ・ストレージの要素(ハードウエア)、それらの構成要素が相互作用する方法(マシンの組織化)、およびそれらがコントロールされる方法(インストラクション・セット)を定める詳細な仕様を規定するものである。マシンのアーキテクチャは、いずれの演算がもっとも効率的に実行可能か、かついずれの形式のデータの組織化およびプログラム設計が最適に動作するか、について決定する。
カスタム・チップ・アプローチは、非常に高価なプロセスであり、かつ予算超過から技術的問題までのリスクもはらんでいる。最先端カスタムIC設計の開発によって、解決されることを必要とする多くの問題が導かれる。より高い処理速度によって、多クロック領域、ますます複雑化するクロック乗算および同期テクニック、ノイズ・コントロール、および高速I/O等の、以前は本質的に純粋なデジタルであった条件がアナログ・ドメインに導入されることとなった。
ますます複雑になる設計による別の効果は、設計の成功を達成するために必要となり得る、追加される製造ターンの数に影響を及ぼす。さらに別の問題としては、有能な労働者を利用できるかどうかの点にある。ASIC回路設計における急速な成長は、有能なIC技術者の不足を同時に伴って生じている。
1つの態様においては、コンピュータ可読コードまたはモデルによって記述されるカスタム集積回路(IC)を自動的に生成するシステムおよび方法が開示される。ICは、1つまたは複数のタイミングおよびハードウエアの制約を有する。システムは、プロセッサ・アーキテクチャを定義するパラメータをコンピュータ可読コードの静的プロファイルおよび動的プロファイルから抽出する工程と、コスト関数として表現されるタイミングおよびハードウエアの制約がすべて満たされるまで1つまたは複数のパラメータを変更することによってプロセッサ・アーキテクチャを反復的に最適化する工程と、生成された前記プロセッサ・アーキテクチャを、半導体製造のためにカスタム集積回路のコンピュータ可読記述に合成する工程と、を有する。
上記の態様の実装には、次に示す内容のうちの1つまたは複数を含めることができる。システムは、プロセッサのスカラ度およびインストラクションのグループ化規則を最適化することが可能である。システムはまた、必要とされるコアの数を最適化し、それらのコアを効果的に使用するべくインストラクション・ストリームを自動的に分割することも可能である。プロセッサ・アーキテクチャの最適化は、インストラクション・セットの変更を含む。システムが行なうインストラクション・セットの変更には、必要とされるインストラクションの数を低減させること、およびインストラクションをエンコードしてインストラクションのアクセス、デコード速度およびインストラクションのメモリ・サイズ要件を向上させることを含む。プロセッサ・アーキテクチャの最適化は、レジスタ・ファイル・ポート、ポート幅、およびデータ・メモリへのポートの数のうちの1つの変更を含む。プロセッサ・アーキテクチャの最適化は、データ・メモリ・サイズ、データ・キャッシュのプリフェッチ・ポリシー、データ・キャッシュ・ポリシーのインストラクション・メモリ・サイズ、インストラクション・キャッシュのプリフェッチ・ポリシー、およびインストラクション・キャッシュ・ポリシーのうちの1つの変更を含む。プロセッサ・アーキテクチャ最適化は、コプロセッサの追加を含む。システムは、プロセッサ・アーキテクチャのパフォーマンスを向上させるべくコンピュータ可読コードに対して独特のカスタマイズがなされた新しいインストラクションを自動的に生成することが可能である。システムは、各ポインタ変数のためのメモリ・ロケーションを決定すること、および各行のためのインストルメンテーションを挿入することによるコンピュータ可読コードの前処理を含む。システムは、コンピュータ可読コードのパースを含み、さらにダミー代入の除去、冗長なループ演算の除去、必要とされるメモリ帯域幅の識別、1つまたは複数のハードウエア・フラグとしての1つまたは複数のソフトウエア実装されたフラグの置換、および期限切れの変数の再使用を含む。抽出するパラメータは、さらに、各行のための実行サイクル時間の決定、各行のための実行クロック・サイクル・カウントの決定、1つまたは複数のビンのためのクロック・サイクル・カウントの決定、演算子統計テーブルの生成、各関数のための統計の生成、および実行カウントの降順による行のソートを含む。システムは、共通使用されるインストラクションを1つまたは複数のグループにモールドし、各グループのためのカスタム・インストラクションを生成してパフォーマンスを向上させることが可能である(インストラクション・モールディング)。システムは、新しいインストラクション候補内におけるモールディング違反のチェックを含む。コスト関数を使用してインストラクション・モールディングの候補(IMC)を選択することが可能である。IMCは、統計的な依存に基づくことが可能である。システムは、アーキテクチャ・パラメータの変更のためのタイミングおよび面積のコストを決定することが可能である。IMCとの置換が可能なプログラム内のシーケンスが識別される。これは、シーケンス内のインストラクションをアレンジし直し、コードの機能を損なうことなく適合性を最大化する能力を含む。システムは、ポインタの進行を追跡し、ストライドおよびメモリ・アクセス・パターンおよびメモリ依存度に関する統計を構築してキャッシュのプリフェッチおよびキャッシュ・ポリシーを最適化することができる。
またシステムは、コンピュータ可読コードの静的プロファイリングおよび/またはコンピュータ可読コードの動的プロファイリングの実行も含む。システムのチップ仕様は、コンピュータ可読コードのプロファイルに基づいて設計される。さらにチップ仕様は、コンピュータ可読コードの静的および動的プロファイリングに基づいて漸進的に最適化することが可能である。コンピュータ可読コードは、最適アッセンブリ・コードにコンパイルされることが可能であり、それが選択されたアーキテクチャのためのファームウエアを生成するべくリンクされる。シミュレータが、ファームウエアのサイクル精度のシミュレーションを実行することが可能である。システムは、ファームウエアの動的プロファイリングを実行することができる。方法は、さらに、プロファイリングが行なわれたファームウエアに基づいて、またはアッセンブリ・コードに基づいてチップ仕様の最適化を行なうことを含む。システムは、設計されたチップ仕様のために、レジスタ・トランスファ・レベル(RTL)コードを自動的に生成することが可能である。またシステムは、RTLコードの合成を行なってシリコンを製造することも可能である。
好ましい実施態様の利点には、次に示す内容のうちの1つまたは複数を含めることができる。システムは、すべてのコストが考慮に入れられ、かつシステム設計者が評価するべき最良な数表現およびビット幅の候補を獲得するように評価プロセスを自動化する。方法は、与えられたアーキテクチャの面積、タイミング、および電力のコストを迅速かつ自動化された態様で評価することができる。この方法は、コスト計算エンジンとして使用される。方法は、最適態様でアルゴリズムに基づいてDSPを自動的に合成することを可能にする。システム設計者が、別のものではなくこの特定の表現を選ぶことに関連付けされるハードウエア面積、遅延、および電力のコストを意識する必要はない。システムは、ハードウエア面積、遅延、および電力が、アルゴリズム評価段階において可能な限り正確にモデリングされることを可能にする。
システムの好ましい実施態様のこのほかの利点には、次に示す内容のうちの1つまたは複数を含めることができる。このシステムは、チップ設計の問題を軽減し、それを単純なプロセスにする。これらの実施態様は、プロダクト開発プロセスの焦点を、ハードウエア実装プロセスからプロダクト仕様およびコンピュータ可読コードまたはアルゴリズム設計に戻すようにシフトさせる。特定のハードウエアを選択することに束縛される代わりに、コンピュータ可読コードまたはアルゴリズムが、それの適用のために特に最適化されたプロセッサ上において実装されることが可能となる。好ましい実施態様は、最適化されたプロセッサを自動的に、すべての関連付けされたソフトウエア・ツールおよびファームウエア・アプリケーションとともに生成する。このプロセスは、これまで数年の問題として対処されていた事項を、数日の問題として対処することを可能とする。このシステムは、ハードウエア・チップ・ソリューションが設計される方法におけるパラダイムを完全にシフトするものである。ここで述べている自動システムは、システムへのプライマリ入力が、ロー・レベルのプリミティブではなく、コンピュータ可読コード、モデル、またはアルゴリズム仕様であることから、チップ設計の知識をまったく伴うことなく、アルゴリズム設計者自身が直接ハードウエア・チップを作ることが可能となるように、リスクを取り除き、チップ設計を自動的なプロセスにする。
このシステムを使用するこのほかの恩典として、さらに次に示す内容を含めることができる。
(1)スピード:チップ設計サイクルが数年単位ではなく数週単位に落ち着くことになる場合には、このシステムを使用している会社が、自社の製品をすばやく市場に持ち込むことによって急速に変化する市場に浸透することが可能になる。
(2)コスト:一般にチップの実装に必要とされる多数の技術者が不要となる。このことは、このシステムを使用している会社に夥しいコストの節約をもたらす。
(3)最適性:このシステム・プロダクトを使用して設計されたチップは、優れたパフォーマンス、面積、および電力消費を有している。
このシステムは、デジタル・チップ構成要素に向けた、それを有するシステムの設計で使用される方法におけるパラダイムを完全にシフトするものである。このシステムは、C/MATLAB(マトラボ)で記述されたアルゴリズムからデジタル・ハードウエアを生成する完全に自動化されたソフトウエア・プロダクトである。このシステムは、CまたはMATLAB(マトラボ)等の高水準言語を採用してハードウエア・チップを実現するプロセスへの独特のアプローチを使用する。要約して言えば、これは、チップ設計を完全に自動化されたソフトウエア・プロセスにする。
図1は、プログラム、コード、またはコンピュータ・モデルによって機能が明細に指定されるカスタムICまたはASICデバイスのためのアーキテクチャを自動的に生成する一例のシステムを示した説明図である。 図2は、図1の中で使用されている一例のプリ‐プロセッサをより詳細に示した説明図である。 図3は、図1の中で使用されている一例のパーサーをより詳細に示した説明図である。 図4は、図1の一例のパラメータ抽出モジュールをより詳細に示した説明図である。 図5は、コンピュータ・プログラムからカスタム・ハードウエア・ソリューションのための最適アーキテクチャを反復的に生成する一例のプロセスを示した説明図である。 図6は、図5に定義されているアーキテクチャを伴うカスタムICを自動的に生成する一例のシステムを示した説明図である。
図1は、プログラム、コード、またはコンピュータ・モデルによって機能が仕様に規定されるカスタムICまたはASICデバイスのための最良のアーキテクチャを自動的に決定する一例のシステムを示している。入力として提供される所定のコンピュータ可読コードまたはプログラム(1)のためのアーキテクチャ定義を得るにあたっては、種々の段階が関与する。1つの実施態様においては、プログラムがC言語で記述されるが、MATLAB(マトラボ)、パイソン(Python)、またはジャバ(Java(登録商標))といったそのほかの言語も同様に使用可能である。プリ‐プロセッサ(2)においては、入力されるプログラム(1)が、パーサー(3)によってその種のプログラムが解析される前にフォーマットされる。フォーマット・プロセスにおいては、プログラム(1)の機能面が保存される。パーサー(3)は、最初に、基本アーキテクチャを使用してすべての情報を抽出し、データベースを作成する。その後システムは、プログラムの静的および動的プロファイルを収集する。パーサー(3)の出力からアーキテクチャ定義(5)に必要なパラメータがパラメータ抽出(4)によって抽出される。システムは、これらのパラメータ、およびプログラム(1)によって満たされるべきリアルタイムとハードウエア制約を入力として用いて、与えられたCプログラムのための所定の段階においてもっとも適するアーキテクチャを反復的に決定する。このアーキテクチャが、Cプログラムおよびパラメータ抽出のためのパースに使用される。新しいアーキテクチャが再び定義される。このループは、最良の時間、面積、および電力のパフォーマンスを与える最良のアーキテクチャが定義されるまで継続される。
図2は、図1の中で使用されている一例のプリ‐プロセッサをより詳細に示している。プリ‐プロセッサ(2)は、プログラム(1)を受け取り、そのプログラムを1行当たり演算子を1つだけ伴うコードに変換する(10)。プログラム内のループの『if..goto..else goto..』形式への変換も行なわれる(11)。次にシステムは、ディレクティブ『# define variable』の出現を、それらそれぞれの定数値で置き換える(12)。システムは、各ポインタ変数のためのメモリ・ロケーションを決定し(13)、各行のためのインストルメンテーションを挿入する(14)。次に、例示的なCプログラムに対する図2の動作の実例を考察する。
(10)においては、Cプログラム内の演算子が複数ある行が1行当たり1つの演算子を有する形にフォーマットされる(10)。したがって、例示的なコードは、次のようになる。
int a,b,c,d;
d=d+(a*b)/c;
は、次のように変更される。
int D1182;
int D1183;
int a;
int b;
int c
int d;
D1182=a*b;
D1183=D1182/c;
d=D1183+d;
(11)においては、『if goto else goto』変換によって例示的なコード
nt i,a;
for(i=1;i<10;i++)
a+=10;
が、次のとおりに変換される。
int i;
int a;
i=1;
goto D1181;
D1180:;
a=a+10;
i=i+1;
D1181:;
if(i<=9)

goto D1180;

else

goto D1182;

D1182:;
それぞれの定数値への『#define』変数の置換(12)においては、例示的なコード
#define data 10
main()

int i,a;
if(i<data)
i=i+data;
else
i=0;

が、次のとおりに変換される。
main()

int i;
int a;
if(i<=9)

i=i+10;

else

i=0;

(13)においては、各ポインタ変数のための、それのデータ型に応じた正確なメモリ・ロケーションが計算される。したがって、次に示す例示的なコード
int *a;
char *d;
*a=10;
a++;
d=a;
*d=’c’;
d++;
*d=’b’;
が、次のとおりに変換される。
int *a;
char *d;
*a=10;
a=a+4;
d=(char*)a;
*d=99;
d=d+1;
*=98;
(14)において、プロセスは行毎にインストルメンテーションを挿入してCプログラムの動的プロファイルを獲得する。たとえば、コード
D1458=*sig_out;
D1459=(int)D1458;
は、次に示すように”printf”関数挿入を用いてインストルメントされる。
D1458=*sig_out;
printf(”0\t”);
printf(”0x%x\n”,(unsigned int)D1458);
D1459=(int)D1458;
printf(”1\t”);
printf(”0x%x\n”,(unsigned int)D1459);
図3は、図1の中で使用されている一例のパーサーをより詳細に示している。1つの実施態様においては、プリ‐プロセッサ(2)からのフォーマット済みCプログラムが実行され、実行結果がログされる。この実行は、多様な使用ケース・シナリオをカバーする、完全なテスト・スートである。不完全なテスト・スートは、不適切なアーキテクチャ定義を導く可能性がある。フォーマット済みCプログラムおよびログされた結果が入力としてパーサー(3)に供給される。1つの実装においては、パーサー(3)が次に示す動作を実行する。
(20)においては、プロセスによって、プログラム(1)内で使用されるすべての変数のリストが構築される。各変数は、変数を一意的に識別する関連付けされたプロパティを有する。プロパティのうちのいくつかは、データ型、その変数が配列であるか否か、またはポインタであるか否かに関係する情報である。
(22)においては、プロセスによって、プログラム内で使用されるすべての演算子のリストが構築される。演算子の機能を記述するプロパティのセットも各演算子に与えられる。これらのプロパティは、基本アーキテクチャ(7)の中に定義されている単純な演算子の組み合わせとして複雑な演算子の定義が可能となるように定義される。
(24)においては、プログラム内の実行可能コードのそれぞれの行がデータ構造内にマップされる。それらの行についてのすべての情報がこのデータ構造内において利用できる。この構造は、変数リストおよび演算子リスト内へのリンクを有する。任意の行は、その行内で使用されている変数および演算子によって一意的に識別される。
(26)においては、関数が識別されて関数のリストが維持される。
(28)においては、ログされたCプログラムの実行からの結果がパースされ、関連のあるすべての動的情報が収集される。これは、コードの行のデータ構造および変数リストの更新に使用される。
(30)におけるCプログラムは、コンパイラによって最適化される可能性のある多くの行を含んでいることがあり得る。たとえば、不必要な代入は、コンパイラによって取り除かれることになる。その種のコンパイラによって潜在的に取り除かれる可能性のある行が識別されて『ダミー』行としてマークされる。これを実行するアルゴリズムについては、後述する別の段落の中で説明する。
(32)においては、システムが、2の累乗による乗算を左シフトによって最適化し、2の累乗による除算を右シフトによって最適化する(正の累乗のみ考慮している)。2の累乗による乗算または除算の演算子を有するすべての行が、右または左シフトと置き換えられる。この処理によって、プログラムの実行に関連付けされる、収集された統計値が正しく識別される。
(34)においては、ループ内の冗長な演算をプロセスによって最適化される。ループに関する何らかのほかの形式の最適化がコンパイラによって実装されることは可能である。その種のコードの行の追跡にアルゴリズムが使用されて、作成済みの行データ構造内において同一の最適化が繰り返される。このアルゴリズムについても後述の別の段落の中で説明する。
(36)においては、実行される行がこのとき、アーキテクチャ分類、すなわちデータ操作およびアドレス操作のための2つのプライマリ・ビンに分けられる。これは、それがいくつかの有意なアーキテクチャの決定を推し進めることから、達せられるべき非常に重要な区別である。多くのアドレス操作演算を有するプログラムは、独立したアドレス操作ユニットから恩典を受けることになるが、その一方でその種のハードウエアがほかのアプリケーションにとって過剰となることがある。これを行なうアルゴリズムは、後述する別の段落の中に定義されている。
(38)においては、必要なデータ・メモリ帯域幅がプロセスによって識別される。1つの重要なアーキテクチャの決定は、プログラムを走らせるために必要なデータ・メモリ帯域幅に関係する。メモリからロードされるデータに依存するすべての行は、この目的のための異なるビンの下にマークされる。メモリからロードされるデータ以外のデータに対して作用したすべての行(たとえば、メモリからロードされるデータに対して作用を及ぼした行の結果に対して作用を及ぼすことが可能である)が個別にマークされる。アルゴリズムが、このデータに適用され、最小限のストールを伴うCプログラムの行の実行を容易にするために必要とされるデータ・メモリに対するポートの数およびポートの幅が計算される。
(40)においては、ハードウエア・フラグが識別されて処理される。ネイティブのCプログラムは、ハードウエア・フラグのコンセプトを有していない。フラグは、通常、グローバル変数としてコードされる。しかしながらパフォーマンスの見地からは、プログラムに必要とされるすべてのハードウエア・フラグを識別することが必須である。これは、現在のところ一般に手作業で行なわれている。ハードウエア・フラグを利用する(かつ、結果としてもたらされるパフォーマンスを得る)べくCコードがアッセンブリ内で再び手作業でコードされるか、またはプラグマを伴ういくつかのタイプのコーディング構造が使用されてフラグを表わすことが可能となるようにコンパイラがマニュアル調整されるか、のいずれかである。これらのオプションは、いずれも容易ではなく、また拡張性のあるものでもない。発明者らのアプリケーションは、ネイティブのCコード内の潜在的ハードウエア・フラグを識別し、これらのグローバル変数をフラグとしてマークするアルゴリズムを有する。アーキテクチャ定義の一部として、これらのフラグを表現することを必要とするハードウエアもまた、自動的に記述され、合成される。フラグを識別するアルゴリズムについては、より詳細を後述する。
(42)においては、プロセスが再使用可能な期限切れ変数を探す。忠実なパラメータを抽出するためには、各行のために使用される変数の数およびレジスタ・ファイル内において利用可能な読み出しおよび書き込みポートの数を考慮することが重要である。整合しない場合には、ペナルティ・サイクルが追加されなければならない。しかしながらネイティブのCプログラムは、使用される変数の数を最適化するためには記述されない。そのためプログラムをそのまま使用することは、結果として非現実的な多数のペナルティ・サイクルがもたらされる可能性がある。したがって、行のデータ構造がパースされ、新しい変数の使用を最小化するべく修正されなければならない。このアルゴリズムについては後述の別の段落の中で説明する。
次にダミー行の識別を詳細に説明する。ダミー代入のチェックが、コンパイラによって最適化されて除かれそうな代入を含むCプログラム内の行を識別する。1つの実施態様においては、プロセスが次に示す内容を実行するコードを含む。
(1)代入ステートメントを伴う行を探しながら行のデータ構造を通って進む。
(2)代入ステートメントがヒットしたとき、左辺の変数および右辺の変数をマークする。
(3)さらに下の行を調査して、この代入は必要であるか否か、または代わりに右辺の変数を直接使用することが可能であったか否かを検証する。左辺の変数の参照が行なわれる最後の行に先行する任意の行内の右辺の変数の再代入は、この要件を直接破ることになる。
(4)しかしながら、要件3が充足される場合であっても代入がなおも必要となる場合(条件付きチェック等)が存在し得る。この決定には、分岐の条件および分岐の深度を理解しているロジックが使用される。
(5)これらのチェックがすべて行なわれた後、代入が行なわれる必要がなかったことが認定された場合には、その代入演算を含む行がダミー行としてマークされる。
次に、ダミー変数の再代入について説明する。代入行がダミーとしてマークされた後は、その行内における変数の代入が冗長になっている。そこで行のデータ構造との一貫性を確保するために次に示す擬似コードが変数の再代入を行なう。
(1)ダミー代入行の右辺の変数を識別する。
(2)これより以前にあり、左辺にこの変数が出現した行を識別する。
(3)その左辺の変数をダミー行の左辺の変数に置き換える。分岐の深度のチェックは、ダミー代入チェック・セクションの中ですでに実行済みである。したがって、この置換は一貫することになる。
次に、ループ最適化を説明する。プロセスは、コンパイラがループ内の配列アクセスおよび配列指数に対して実行しそうな可能性のある最適化を追跡する。一例を次に示す。
Cコードの行を考える(baseはint *)。
b=*(base+i);
このCコードの行がプリ‐プロセッサに通されると、結果の行が生成される:
temp1=i*4;
temp2=base+temp1;
b=*temp2;
この演算が詰まったループの内側で実行されるとき、第1行が冗長である。任意のループにおいて、直前のアドレスに4を加えることによってそれの次のアドレスが容易に計算可能である。プログラム内のその種の行は、追跡され、ダミーとしてマークされる。これが行なわれない場合には、実際にコードがマシンのためにコンパイルされるときには決して存在しない演算の理由を与えるためにアーキテクチャ定義が不当に歪められることになる。そのため、その種の冗長な演算をすべてアーキテクチャ定義段階へ進む前に識別できることが必要不可欠である。ループ最適化のための擬似コードを次に示す。
(1)実行の反復を通じてすべての変数値を追跡する。この情報は、14に挿入されるインストルメンテーションに起因してログされたCプログラムの結果のパースから利用可能である。
(2)変数の現在の値とその変数の以前の値を比較し、それを差の値としてストアする。
(3)実行の反復のすべてを通じてこの差の値が不変のまま残り、かつそのコードの行が実際は偶発的にループ内(ループは、すでに識別済み)に存在している場合には、これが最適化の候補になる。行内の演算子が乗算である場合には、この行がダミーとしてマークされる。
次に、データとアドレスの操作の識別について説明する。プロセスは、Cプログラムで実行される行をデータとアドレスの操作用のビンに分割する。プログラムの観点からは、これらは変数に対する演算に過ぎず、これらの演算の間にまったく相違が存在しないが、プロセッサ・アーキテクチャの観点からは有意の違いがある。データ操作演算は、メモリからデータをフェッチする以前のアドレス操作演算に頼りがちである。多様な理由から、この区別は非常に重要である。アドレスとデータの操作の演算を識別するために、システムは、次に示す擬似コードを実行する。
(1)ポインタ(Cプログラム内においてポインタまたは配列のいずれかとして宣言される)に対する演算を行なうすべての行を識別するコードの各行を検証する。
(2)アドレス操作演算として行をマークする。
(3)結果がメモリからデータをフェッチするためだけであることを確保する。
演算3は、マークされた行がコードの他の行に導く可能性があること、またはそれに依存する可能性があるため、行なわれる。これらの行は、メモリからデータをフェッチする目的だけがこれらの行の結果によって意味されることを確保するために、追跡される。これを実装するためにこれらの行内に含まれる変数が追跡され、プロセスは、これらの変数の値(別の独立した再代入を伴うことなく)がほかの目的のために使用されないことを確かめる。これが当て嵌まる場合には、これらの行もまたアドレス操作演算としてマークされる。アドレスおよびデータの操作の演算両方にデータを供給する行は、データ操作演算として分類される。
次に、フラグ識別について説明する。フラグ検出アルゴリズムは、次に示す擬似コードを使用してCプログラム内において宣言されているすべてのグローバル変数の検証を行なう。
(1)各グローバル変数が、実行の途中に取得される可能性のある値についてチェックされる。
(2)取得される値が0および1だけであれば、次のステップへ進む。
(3)それらの値がセットされるすべての行をチェックする。これらの値は、即時演算(言い換えると、x=1等の明示的な代入)を通じてのみセットされて次の段階に進むことが可能である。別の変数の代入の結果としてそれが導出される場合(x=y等)、右辺の変数がバックトラックされてその変数がこの規則を確立するか否かが調べられる。永続的なロックアップ状況を防止するために適切なところにロジックが存在する。ほかの演算(算術、論理、またはメモリ・フェッチ等)が存在しなければ、その変数はフラグであり得ない。
(4)実際の代入行をチェックする。この代入は、全体のフローの中で値(0または1)のうちの1つだけにしかなり得ない。他方の値の代入は、条件付きチェック・フロー内においてのみ起こり得る。
(5)上記の規則に適合する変数をフラグとしてマークする。
(6)この定義に対応するハードウエア・フラグがプロセッサ・アーキテクチャの中で指定され、自動的に合成されることになる。
(7)この変数の値をセットするすべての行は、フラグ操作行としてマークされる。
(8)アーキテクチャ定義はまた、これらの演算を可能にするインストラクションも作成する。
(9)フラグ操作行としてマークされたこれらすべての行は、標準的なインストラクションではなく、これらの新しく定義されたインストラクションを使用し、特定のハードウエア・フラグを参照する。
次に、変数の再使用について説明する。各行内において使用される変数の数を最小化するプロセスは以下のとおりである。
(1)各行(ダミーとしてマークされていない)において、左辺の変数および右辺の変数をマークする。
(2)右辺の変数が、その後に続く行のいずれにおいても参照されていない場合には、その変数は、既存の左辺の変数の置換に使用される。
(3)それより下にある行内の左辺の変数を参照するすべての行は、それを置換した変数を参照するべく変更される。
(4)上記のプロセスのすべてにおいて、アルゴリズムは、左辺の変数が再代入されないゾーンにサーチ範囲を制限する。
パーサー段階が完了すると、パラメータ抽出モジュールまたはパラメータ抽出(4)が行のデータ構造を再訪する。
図4は、一例のパラメータ抽出モジュール(4)をより詳細に示している。このデータ構造の検証によって多様な関連パラメータが抽出される。たとえば、所定のテスト・ケースのためにプログラムの実行に必要とされる合計サイクルが計算される。これは、任意の所定の行の実行に必要とされるクロック・サイクル数(その行内に使用される演算子のプロパティから導出される値)に注目し、それにデータの依存度またはそのほかの理由に起因してその行によって被るクロック・サイクル・ペナルティを加算し、この値にその行が実行された回数(ログされたCプログラムの実行の結果のパースによって明らかになる値)を乗ずることによって実行される。この演算がすべての行について反復されて、テスト・ケース全体の実行のために必要となる合計クロック・サイクルに到達する。同様に、アドレス計算、メモリ・ロード、メモリ・ストア、条件分岐、ループ、およびデータ操作に関連付けされるクロック・サイクルの数に到達する。上記の計算のすべてについての演算子の分布にタグを付けるリストが構築される。たとえば、合計サイクルの場合においては、それらのうちのいくつがどの演算子と関連付けされるかが計算される。それに加えて、各演算子について異なるデータ幅にわたる利用度の分布もまた計算される。このプロセスの終了時には、次に一例を示したテーブルが生成される。
Figure 0005682081
同様に、関数呼び出しについての統計値も構築される。各関数呼び出しについて、それが呼び出される回数およびその関数の実行に費やされるクロック・サイクルが計算される。その後、コードの行が実行カウントの降順でソートされる。
Cプログラムのニーズにもっともよく適応するアーキテクチャの定義が、反復プロセスの入力として与えられる。初回のパラメータ抽出が実行され、7において定義されたベース・アーキテクチャを使用してプロセスが統計値を計算する。パラメータ抽出の出力に加えて、Cプログラムに関連付けされるリアルタイム制約およびプロダクトに関連付けされるハードウエア制約もまたアーキテクチャ定義ブロックに対する入力として供給される。当該ブロックは、指定されたパフォーマンス要件を満たすことになるアーキテクチャを自動的に生成する。その後、最適アーキテクチャに到達するべくアーキテクチャ・オプティマイザを使用してこのアーキテクチャを精緻化することができる。この段階における最初のステップは、リアルタイム制約を満たすことである。このステップの目標は、合計の実行時間を低減し、プロセッサがリアルタイム制約を満たすことを可能にする新しいインストラクションおよび対応するプロセッサ・アーキテクチャを定義することである。1つの例示的な実装においては、次に示す演算が実行される。
1.手前のセクションから利用可能な実行カウントによってソートされた行のリストをプロセスが検索する。これらの行に沿って進行し、順に生じる行のグループを識別する。たとえば、ソートされたリストは、651、652、659、802、803、....といった形で現われるとすることができる。この場合において、行651から659までが、最初のグループのために識別される。単一グループの部分として行をマークする際は、それらが同一の実行カウント数を有している必要がある。この例においては、651、652、および659が同一の実行カウント数(ログされたCプログラムの実行の結果のパースにおいてこれらの行がカウントされた回数)を有していることが重要である。その後、このリストの最初から最後の行までの間のすべての行がグループとしてマークされる。
2.これらの行のグループは、高い実行カウントを有しており、したがって実行時間のかなりの量を消費する。これらの行が単一のインストラクションでならすことが可能であれば、実行時間の短縮に帰することができる。新しいインストラクションが、これらのインストラクションを1つにモールドすることによって作成される。その種のモールドのための候補は、インストラクション・モールディング候補(IMC)と呼ばれる。
3.インストラクションの各グループが、モールディング違反についてチェックされる。たとえば、このグループの最中の無条件GOTO(ジャンプ)または関数呼び出しは、シーケンスを無効にする。そのほかにも、レジスタ・ファイルからアクセス可能であるより多くのデータ変数を必要とする行のグループといった制約がある。たとえば、現在のアーキテクチャが2リード・ポート・レジスタ・ファイルを前提とし、インストラクションのグループが新しいインストラクションの形成に3つの変数を必要とする場合に、このグループを使用するIMCを形成することはできない。レジスタ・ファイルへの書き込みポートが1つしかなく、インストラクションのグループが2つの変数を書き込む場合にもこのグループからIMCを形成することができない。そのためシステムは、ハードウエア関連のアーキテクチャ制約をチェックし、これらの条件に従うサブグループ(存在する場合)として位置付ける。
4.このサブグループ内においては、複数のIMCを形成することが可能である。たとえば、下にリストしたサブグループを形成する行のシーケンスを有することができる。
a=b+c;
d=a*2;
e=d AND b;
この場合、3つの演算すべてからなる1つのIMC、最初の2つのインストラクションだけを含む別の1つ、および最後の2つのインストラクションを含む別の1つを有する。その種の可能性のあるすべてのIMCが形成される。
5.IMCが定義された行のグループは、これらのインストラクションが順に生じるプログラム内の1つの場所にある。その種のシーケンスがCプログラム内の別の場所に存在し得る。ここで、その状態が調べられる。注意すべき重要なことは、満たされる必要のある条件にインストラクションのシーケンスだけでなく相対的な演算子の依存度も含まれることである。ポイント4に記述した例を採用する。シーケンス
x=y+z;
r=x*2;
f=r AND x;
が見つかるコード内の別の場所に来たとしても、これをIMCが使用可能な場所としてカウントすることは可能でない。そこでアルゴリズムは、同一のインストラクションのシーケンスだけでなく、同一の変数依存度構造もチェックする。可能性としてIMCの使用が可能なその種のすべての場所が、IMCとともにタグ付けされる。
6.ポイント5の結果は、このIMCが新しいインストラクションとして実際に使用されることになったとしたら、プログラムの実行サイクル・カウントをる潜在的に低減するための計算に使用される。
7.この時点において、アルゴリズムがハードウエア・シンセサイザ・ブロックに対してクエリを行ない、インストラクションとしてこのIMCを実装するためのタイミングおよび面積を得る。
8.このプロセスがすべての行について反復される。
9.これらのIMCのうちのいくつかは、完全な関数を潜在的に置換する。その場合には、これらのIMCがインストラクションとして実装されるときにプログラム・フローが有意に変化する。そのためそれらが、特殊IMCとしてマークされる。
10.この時点において、現在の段階にとって可能なすべてのIMCのリストが達せられる。最適化コスト関数が使用されて、インストラクションとして実装される必要のあるIMCを拾い出す。アルゴリズムは、特定のコスト関数と結びつけられないが、コスト関数は、新しいインストラクションのタイミングおよびそれがCプログラムの実行時間にどのような影響を及ぼすかについて考慮に入れたものになることになり得る。実行時間への影響の計算は、瑣末なものではない。現在のクロック・サイクル時間より小さいタイミングを有するIMCは、アーキテクチャに対して有意な影響を与えない。しかしながら、現在のクロック・サイクルより大きいタイミングを有するIMCと遭遇することはありがちである。これらのIMCが受け入れられた場合には、クロック・サイクル時間がすべてのインストラクションについて増加することになり、クロック・サイクル数をより少なくできたとしても、可能性として実行時間が増加することがあり得る。したがって、この計算および決定は、瑣末なものでない。
11.この計算を実行するためにIMCが従属グループにまとめられてグループ化される。このグループ化を実行するために、完全に統計的に独立した原理が適用される。完全に統計的に独立していないIMCがまとめられてグループ化される。どちらかと言うとこれは保守的なアプローチであるが、それにもかかわらず必要とされる。グループ化は、二重カウントの防止を補助する。サイクル時間の増加に関係する決定が行なわれなければならないときは、常に、すべてのAMCグループが調査されて、このサイクル時間における増加から恩典を受けると見られるIMCが捜し出される(言い換えるとそれらはまた、現在のサイクル時間より大きいが、新しいサイクル時間より小さいサイクル時間を有する)。最良IMC(サイクル・カウントの低減を最大にするもの)が恩典を受ける各グループから抽出される。この情報を使用して新しい実行時間が計算され、これが現在の実行時間より小さい場合には、サイクル時間が増加される。
12.コスト関数がIMCを識別する都度、対応するインストラクションが定義され、この新しいインストラクションを含めるべくアーキテクチャ定義が変更される。ほかのIMCに対するこの新しいインストラクションの効果が調査され、そのIMCが合理化される。
13.コスト関数が、要件に適合するIMCを見つけ出すことが不可能になると、このプロセスが停止される。
14.このアーキテクチャが入力としてパーサーに渡される。パラメータが再び抽出されてアーキテクチャ定義が再考される。このループが、要件に適合する新しいIMCをコスト関数が見つけ出すことができなくなるまで走る。
15.リアルタイム制約がまだ満たされていない場合には、ほかのいくつかのアーキテクチャ変数が考察される。たとえば、レジスタ・ファイルに対する読み出しおよび書き込みポートの数、メモリに対する読み出しおよび書き込みポートの数、これらのポートの幅、プロセッサのスカラ度、ハードウエアを最適使用するインストラクションのグループ化規則などがある。これらは厳密に言えばインストラクションと関係しない変数であるが、実行時間の短縮をさらに補助し得る新しいIMCを見つけ出すには欠かせない。ループが再び反復される。例として述べるが、ここでスカラ度を考察する。アルゴリズムは、行のデータ構造を通って進み、そのコード内に内在するインストラクション・レベルのパラレリズムの量を識別する。これが使用されて、プロセッサの実行ユニットに利用可能なハードウエア・リソースが最適化され、プロセッサのスカラ度が定義される。実行ユニットのために利用可能なハードウエアは、インストラクションのグループ化規則の定義にも同じく使用される。注意すべき重要なことは、この場合に達せられるグループ化規則は、提示されたコードにとって最適であって、それが恣意的に選択されたものではないということである。アイドル・スロットを最小化するコスト関数が使用されてこれを定義する。
16.リアルタイム制約が、上記のアーキテクチャ変数のいずれかを増加することによってもまだ満たされていない場合には、アルゴリズムがマクロ・パラレリズムを識別し、識別済みパラレリズムに必要なコアの数を最適化する。アルゴリズムはまた、コアのそれぞれにおいて実行されるべくインストラクション・ストリームを分割する。
17.任意の時点において、リアルタイム・パフォーマンス制約が満たされると、アルゴリズムがループを出る。
18.すべての変数が調べられた後においてもなおパフォーマンス制約が満たされない場合には、アルゴリズムが、このアプリケーションはプログラマブル・ソリューションに適さないと認定し、機能のうちのいくつかがデータ・パス専用ハードウエアとして実装されるコプロセッサ・アーキテクチャを推奨する。合成されるIMCおよび(現在のサイクル時間よりタイミングが大きかったことから)除かれるIMCのリストが使用されて、このコプロセッサ・アーキテクチャが定義される。
別のアルゴリズムが、ポインタの進行を追跡し、ストライドおよびメモリ・アクセス・パターンに関する統計を構築する。これらの統計は、メモリ依存について獲得された情報に加えて、キャッシュのプリフェッチ・メカニズムおよびキャッシュ・ポリシーの最適化に使用される。
リアルタイム・パフォーマンス制約が満たされた後は、そのほかのハードウエア制約が考察される。ハードウエア制約は、面積、電力、および何らかのそのほかのパラメータにおいて表現することが可能である。その後アルゴリズムは、これらの制約を満たすべく、アーキテクチャを微調整して冗長なパスおよび重要でないセクションを減少させる。別のアルゴリズムが採用されて、利用可能なすべてのインストラクションをチェックし、これらのインストラクションによって提供される恩典を検証する。コスト関数が使用されてこのチェックが実行される。インストラクション・デコーディング時間が最小限のレベルまで低減されるように、リアルタイム・パフォーマンス制約に影響を及ぼさずに安全に取り除くことが可能なすべてのインストラクションがセットから取り除かれる。これらの制約が満たされることもあれば、満たされないこともある。これらは、与えられたアプリケーションにとって定義されたアーキテクチャが大きな過剰とならず、かつアーキテクチャの複雑性を低減する任意の範囲が調べられるように使用される。
図5は、アーキテクチャ定義を自動的に生成する例示的なシステムを示している。このプロセスにおいては、前述したとおり、パーサー(3)からの出力がパラメータ抽出モジュール(4)に提供される。次にプロセスは、あらかじめ決定済みの規則に基づいてプログラム行のセットを伴うグループを形成する(60)。続いて、モールディング規則のセットが検索される(61)。プロセスは、モールディング規則違反をチェックし、プログラム行をサブグループに分割する(62)。プロセスは、IMCを見つけ出し(63)、IMCの利用のための場所を識別する(64)。次にプロセスは、各IMCに関連付けされるサイクルを決定する(65)。IMCのためのタイミングおよび面積の決定もまた実行される(66)。その情報は、演算60および63にフィードバックされるとともに、完全な関数を置換することが可能なIMCの識別にも提供される(67)。次に、統計的依存に基づいてIMCがグループ化される(68)。プロセスは、コスト関数を使用して最良IMCを抽出し(69)、その最良IMCのための新しいインストラクションを実装する(70)。ほかのIMCに対する新しいインストラクションの効果の反復決定が行なわれ(71)、決定が最良IMCを抽出する演算69へ、そこから新しいインストラクションを実装する演算70へと提供される。スレッショルドに到達するまでこれが行なわれ、新しいインストラクションがアーキテクチャ定義に追加される(5)。プロセスは、ほかのアーキテクチャ変数に対するこの新しいインストラクションの影響をチェックし(72)、この新しいインストラクションを受け入れるか、または拒否する。プロセスは、その後、カスタムICに課せられた制約を満たすあらかじめ決定済みのスレッショルドに到達するまで反復される。
図6は、カスタムICを自動的に生成するシステムの一例を示している。図6のシステムは、選択された目標とするアプリケーションに対するカスタムハードウェアソリューションアーキテクチャを自動的に生成することをサポートする。目標とするアプリケーションの仕様は、一般に、C、MATLAB(マトラボ)、SystemC(システムC)、フォートラン、エイダ等の高水準言語またはそのほかのいずれかの言語によるコンピュータ可読コードとして表現されたアルゴリズムを通じてなされる。仕様は、目標とするアプリケーションの記述を含み、またそれには、望ましいコスト、面積、電力、速度、パフォーマンス、およびそのほかのハードウエア・ソリューションの属性といった1つまたは複数の制約も含まれる。
図6においては、ICカスタマがプロダクト仕様102を生成する。通常は、所望のプロダクトのすべての主要機能を取り込んだ初期プロダクト仕様が存在する。そのプロダクトから、アルゴリズムの専門家がそのプロダクトに必要とされるコンピュータ可読コードまたはアルゴリズムを識別する。それらのアルゴリズムのうちのいくつかは、サードパーティから、または標準開発委員会からのIPとして利用可能となることがある。それらのうちのいくつかは、製品開発の一部として開発されなければならない。この態様においては、さらにプロダクト仕様102が、とりわけCプログラム等のプログラムまたはMATLAB(マトラボ)モデル等の数学モデルとして表現することが可能なコンピュータ可読コードまたはアルゴリズム104で詳述される。プロダクト仕様102は、また、とりわけコスト、面積、電力、プロセス・タイプ、ライブラリ、およびメモリ・タイプ等の要件106も含んでいる。
コンピュータ可読コードまたはアルゴリズム104および要件106は、自動化されたICジェネレータ110に提供される。コードまたはアルゴリズム104およびチップ設計に課せられた制約だけに基づいて、ICジェネレータ110は、人間の掛かり合いを殆ど、またはまったく伴うことなく、GDSファイル112、ICを実行させるファームウエア114、ソフトウエア開発キット(SDK)116、および/またはテスト・スート118を含む出力を自動的に生成する。GDSファイル112およびファームウエア114は、カスタム・チップ121の製造に使用される。
このシステムは、チップ設計の問題を緩和し、それを単純なプロセスにする。このシステムは、プロダクト開発プロセスの焦点を、ハードウエア実装プロセスからプロダクト仕様およびアルゴリズム設計に戻すようにシフトさせる。特定のハードウエアを選択することに束縛される代わり、アルゴリズムが、そのアプリケーションのために特に最適化されたプロセッサ上において実装されることが常に可能となる。システムは、この最適化されたプロセッサを自動的に、すべての関連付けされたソフトウエア・ツールおよびファームウエア・アプリケーションとともに生成する。この全体的なプロセスは、現在数年の問題として対処されていた事項を、数日の問題として対処することを可能とする。要約して言えば、このシステムは、プロダクト開発のデジタル・チップ設計部分をブラック・ボックス化する。
1つの実施態様においては、このシステム・プロダクトが、次に示すものを入力として取ることが可能である。
C/MATLAB(マトラボ)で定義されたコンピュータ可読コードまたはアルゴリズム、
必要とされる周辺機器、
面積目標、
電力目標、
マージン目標(将来的なファームウエア更新のためにどの程度のオーバーヘッドを組み込むべきか、またどの程度複雑性が増加するか)、
プロセスの選択肢、
標準セル・ライブラリの選択肢、
テスト可能性スキャン
システムの出力は、関連付けされるファームウエアすべてを伴ったデジタル・ハード・マクロとすることができる。このデジタル・ハード・マクロのために最適化されたソフトウエア開発キット(SDK)もまた自動的に生成されて、ファームウエアに対する将来的なアップグレードがプロセッサの交換を強いることなく実装されるようにすることが可能である。
このシステムは、選択された目標とするアプリケーションに対して完全かつ最適なハードウエア・ソリューションを自動的に生成する。共通の目標とするアプリケーションは埋め込みアプリケーション空間内にあるが、それらは、必ずしもそれに限定されない。
次に、例として、自動化されたチップ設計システムをサポートするコンピュータについて考察する。コンピュータは、好ましくは、プロセッサ、ランダム・アクセス・メモリ(RAM)、プログラム・メモリ(好ましくは、フラッシュROM等の書き込み可能な読み出し専用メモリ(ROM))、および入力/出力(I/O)コントローラをCPUバスによって結合された形で含んでいる。このコンピュータは、ハードディスクおよびCPUバスに結合されるハード・ドライブ・コントローラをオプションとして含むことができる。ハードディスクは、本発明等のアプリケーション・プログラムおよびデータを記憶するために使用することができる。それに代えて、アプリケーション・プログラムをRAMまたはROM内に記憶することができる。I/Oコントローラは、I/Oバスを経由してI/Oインターフェースに結合される。I/Oインターフェースは、シリアル・リンク、ローカル・エリア・ネットワーク、無線リンク、およびパラレル・リンク等の通信リンクを介してアナログまたはデジタル形式でデータの受信および送信を行なう。オプションとして、表示器、キーボード、およびポインティング・デバイス(マウス)がI/Oバスに接続されることもある。それに代えて、I/Oインターフェース、表示器、キーボード、およびポインティング・デバイスのために別々の接続(別々のバス)が使用されることもある。プログラマブル処理システムは、あらかじめプログラムすること、または別のソース(たとえば、フロッピー(登録商標)ディスク、CD‐ROM、または別のコンピュータ)からプログラムをダウンロードすることによってそれをプログラムすること(および再プログラムすること)ができる。
各コンピュータ・プログラムは、目に見える形として、コンピュータによってストレージ媒体またはデバイスが読み出されたときに、ここで説明している手順を実行するべくそのコンピュータの構成および動作のコントロールを行なうために、汎用または専用プログラマブル・コンピュータによって読み出されることが可能なマシン可読ストレージ媒体またはデバイス(たとえば、プログラム・メモリまたは磁気ディスク)内に記憶される。また本発明のシステムは、コンピュータ・プログラムを用いて構成されるコンピュータ可読ストレージ媒体内において具体化されると考えてもよく、それにおいてストレージ媒体は、ここで述べている機能を実行するべく特定の、あらかじめ定義済みの態様でコンピュータを動作させるように構成される。
以上、ここでは、特許法に従うため、および当業者に、新しい原理の適用および必要とされる専用の構成要素の組み立ておよび使用に必要となる情報を提供するために、相当に詳細に本発明を説明してきた。しかしながら、本発明が明確に異なる装置およびデバイスによって実行可能であること、および装置の詳細および動作手順の両方に対する多様な修正が本発明自体の範囲からの逸脱なしに達成可能であることは理解されるものとする。

Claims (19)

  1. コンピュータが、コンピュータ可読コードによって記述されるカスタム集積回路(IC)のためのプロセッサ・アーキテクチャを自動的に生成する方法であって、少なくとも前記ICが1つまたは複数のタイミングおよびハードウエアの制約を有し、
    a.コンピュータが、前記プロセッサ・アーキテクチャを定義するパラメータを前記コンピュータ可読コードの静的プロファイルおよび動的プロファイルから抽出する工程と、
    b.コンピュータが、コスト関数として表現されるタイミングおよびハードウエアの制約がすべて満たされるまで1つまたは複数のパラメータを変更すること、および各プロセッサ・アーキテクチャに対し、カスタマイズされたアーキテクチャと特定用途向けインストラクション・セットに到達するまでコンパイル、アセンブル、コードのリンクを繰り返すコンパイラによって前記プロセッサ・アーキテクチャを反復的に最適化する工程であって、
    前記プロセッサ・アーキテクチャの最適化には、インストラクション・セットを変更する工程を含み、当該工程には、必要とされるインストラクションの数を低減させる工程と、前記インストラクションをエンコードしてインストラクションのアクセスおよびデコード速度を向上させ、かつインストラクションのメモリ・サイズ要件を向上させる工程とが含まれ、
    c.コンピュータが、生成された前記プロセッサ・アーキテクチャを半導体製造のためにカスタム集積回路のコンピュータ可読記述に合成する工程と、
    d.コンピュータが、前記カスタム集積回路を製造する工程と、
    を有する方法。
  2. コンピュータが、プロセッサのスカラ度およびインストラクションのグループ化規則を最適化する工程を有する請求項1に記載の方法。
  3. コンピュータが、必要とされるプロセッサ・コアの数を最適化する工程と、コンピュータが、前記プロセッサ・コアを効果的に使用するべくインストラクション・ストリームを自動的に分割する工程と、を有する請求項1に記載の方法。
  4. 前記プロセッサ・アーキテクチャの最適化の工程は、レジスタ・ファイル・ポート、ポート幅、およびデータ・メモリへのポートの数のうちの1つを変更する工程、を含む請求項1に記載の方法。
  5. 前記プロセッサ・アーキテクチャの最適化の工程は、データ・メモリ・サイズ、データ・キャッシュのプリフェッチ・ポリシー、データ・キャッシュ・ポリシーのインストラクション・メモリ・サイズ、インストラクション・キャッシュのプリフェッチ・ポリシー、およびインストラクション・キャッシュ・ポリシーのうちの1つを変更する工程、を含む請求項1に記載の方法。
  6. 前記プロセッサ・アーキテクチャの最適化の工程は、コプロセッサを追加する工程、を含む請求項1に記載の方法。
  7. コンピュータが、前記コンピュータ可読コードを、
    a.各ポインタ変数のためのメモリ・ロケーションを決定する工程と、
    b.各行のためのインストルメンテーションを挿入する工程と、
    によって前処理する請求項1に記載の方法。
  8. コンピュータが、前記プロセッサ・アーキテクチャのパフォーマンスを向上させるべく前記コンピュータ可読コードに対して固有のカスタマイズがなされた新しいインストラクションを自動的に生成することによってプロセッサのインストラクション・セットを変更する工程を有し、さらに、
    a.コンピュータが、ダミー代入を除去する工程と、
    b.コンピュータが、冗長なループ演算を除去する工程と、
    c.コンピュータが、必要とされるメモリ帯域幅を識別する工程と、
    d.コンピュータが、1つまたは複数のハードウエア・フラグとして1つまたは複数のソフトウエア実装されたフラグを置換する工程と、
    e.コンピュータが、期限切れの変数を再使用する工程と、
    有する請求項1に記載の方法。
  9. パラメータを抽出する工程は、さらに、
    a.コンピュータが、各行のための実行サイクル時間を決定する工程と、
    b.コンピュータが、各行のための実行クロック・サイクル・カウントを決定する工程と、
    c.コンピュータが、1つまたは複数のビンのためのクロック・サイクル・カウントを決定する工程と、
    d.コンピュータが、演算子統計テーブルを生成する工程と、
    e.コンピュータが、各関数のための統計を生成する工程と、
    f.コンピュータが、実行カウントの降順により行をソートする工程と、
    を有する請求項1に記載の方法。
  10. コンピュータが、共通使用されるインストラクションを1つまたは複数のグループにモールドし、各グループのためのカスタム・インストラクションを生成してパフォーマンスを向上させる(インストラクション・モールディング)工程を有する請求項1に記載の方法。
  11. コンピュータが、新しいインストラクション候補内におけるモールディング違反をチェックする工程を有する請求項10に記載の方法。
  12. コンピュータが、コスト関数を適用してインストラクション・モールディングの候補(IMC)を選択する工程を有する請求項10に記載の方法。
  13. コンピュータが、統計的依存に基づいてインストラクション・モールディングの候補(IMC)をグループ化する工程を有する請求項10に記載の方法。
  14. コンピュータが、前記プロセッサ・アーキテクチャを定義するパラメータの変更のためのタイミングおよび面積のコストを決定する工程を有する請求項1に記載の方法。
  15. コンピュータが、1つまたは複数のインストラクション・モールディングの候補(IMC)によって置換されることになるプログラム内のシーケンスを識別する工程と、コンピュータが、シーケンス内のインストラクションをアレンジし直し、コードの機能を保持しつつIMCの利用度を最大化する工程と、を有する請求項1に記載の方法。
  16. コンピュータが、新しく合成されるインストラクションに使用する候補コードに関係する情報をコンパイラに渡す工程を有する請求項1に記載の方法。
  17. コンピュータが、ポインタの進行を追跡し、ストライドおよびメモリ・アクセス・パターンおよびメモリ依存度に関する統計を構築してキャッシュのプリフェッチおよびキャッシュ・ポリシーを最適化する工程を有する請求項1に記載の方法。
  18. コンピュータ可読コードまたはモデルによって記述されるカスタム集積回路(IC)を自動的に生成するシステムであって、少なくとも前記ICが浮動小数点パラメータ、パフォーマンス制約、および入力信号のためのスタティック・レンジならびにダイナミック・レンジを有し、
    a.前記プロセッサ・アーキテクチャを定義するパラメータを前記コンピュータ可読コードの静的プロファイルおよび動的プロファイルから抽出するための手段と、
    b.タイミングおよびハードウエアの制約がすべて満たされるべく1つまたは複数のパラメータを変更し、各プロセッサ・アーキテクチャに対し、カスタマイズされたアーキテクチャと特定用途向けインストラクション・セットに到達するまでコンパイル、アセンブル、コードのリンクを繰り返すコンパイラによって前記プロセッサ・アーキテクチャを反復的に最適化するための手段であって、
    前記プロセッサ・アーキテクチャの最適化には、インストラクション・セットを変更することを含み、当該変更には、必要とされるインストラクションの数を低減させることと、前記インストラクションをエンコードしてインストラクションのアクセスおよびデコード速度を向上させ、かつインストラクションのメモリ・サイズ要件を向上させることが含まれる手段と、
    c.前記生成されたプロセッサ・アーキテクチャを、半導体製造のために、前記カスタム集積回路のコンピュータ可読記述に合成するための手段と、
    d.前記カスタム集積回路を製造するための装置と、
    を備えるシステム。
  19. a.共通使用されるインストラクションを1つまたは複数のグループにモールドし、各グループのためのカスタム・インストラクションを生成してパフォーマンスを向上させる(インストラクション・モールディング)ための手段と、
    b.新しいインストラクション候補内におけるモールディング違反をチェックするための手段と、
    c.コスト関数を適用してインストラクション・モールディングの候補(IMC)を選択するための手段と統計的依存に基づいてIMCをグループ化するための手段と、
    を備える請求項18に記載のシステム。
JP2013534912A 2010-10-18 2011-09-19 インテリジェント・アーキテクチャ・クリエータ Expired - Fee Related JP5682081B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/906,857 2010-10-18
US12/906,857 US8423929B2 (en) 2010-10-18 2010-10-18 Intelligent architecture creator
PCT/US2011/052215 WO2012054162A1 (en) 2010-10-18 2011-09-19 Intelligent architecture creator

Publications (2)

Publication Number Publication Date
JP2013541778A JP2013541778A (ja) 2013-11-14
JP5682081B2 true JP5682081B2 (ja) 2015-03-11

Family

ID=45935229

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013534912A Expired - Fee Related JP5682081B2 (ja) 2010-10-18 2011-09-19 インテリジェント・アーキテクチャ・クリエータ

Country Status (7)

Country Link
US (2) US8423929B2 (ja)
EP (1) EP2630598A1 (ja)
JP (1) JP5682081B2 (ja)
KR (1) KR101503620B1 (ja)
CN (1) CN103270512A (ja)
TW (1) TW201218008A (ja)
WO (1) WO2012054162A1 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9235670B2 (en) * 2014-02-18 2016-01-12 CODASIP, s.r.o. Method and an apparatus for automatic generation of verification environment for processor design and verification
DE102015102034A1 (de) * 2014-03-11 2015-09-17 Synopsys, Inc. Verfahren zum Analysieren von Ergebnissen in einem Entwurfsautomatisierungsablauf für elektronische Systeme, Computersystem und Computerprogrammprodukt
US10579053B2 (en) * 2016-09-08 2020-03-03 Ge Aviation Systems, Llc Aircraft control based on fuel, time, and deterioration costs
CN106844926A (zh) * 2017-01-11 2017-06-13 上海鲲云信息科技有限公司 动态可重构硬件电路的设计、执行方法及***
CN115048885B (zh) * 2022-08-12 2022-11-15 阿里巴巴(中国)有限公司 电路设计参数调整方法、装置、电子设备和存储介质

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6467075B1 (en) * 2000-03-24 2002-10-15 Nec Corporation Resolution of dynamic memory allocation/deallocation and pointers
US6553542B2 (en) * 2000-12-29 2003-04-22 Texas Instruments Incorporated Semiconductor device extractor for electrostatic discharge and latch-up applications
JP4202673B2 (ja) * 2002-04-26 2008-12-24 株式会社東芝 システムlsi開発環境生成方法及びそのプログラム
US7461116B2 (en) * 2003-09-17 2008-12-02 Agility Design Solutions Inc. Emulation of a fixed point operation using a corresponding floating point operation
US7725848B2 (en) * 2005-01-27 2010-05-25 Wolfgang Nebel Predictable design of low power systems by pre-implementation estimation and optimization
JP2005216177A (ja) * 2004-01-30 2005-08-11 Toshiba Corp コンフィグラブル・プロセッサの設計装置、設計方法、ライブラリの最適化方法、プロセッサ、及びプロセッサを備えた半導体装置の製造方法
JP2005293448A (ja) * 2004-04-05 2005-10-20 Renesas Technology Corp データ処理装置の開発方法、データプロセッサの開発支援プログラム、設計データの提供方法、及びデータ処理システムの開発方法
WO2007002799A1 (en) * 2005-06-29 2007-01-04 Lightspeed Logic, Inc. Methods and systems for placement
US8332793B2 (en) * 2006-05-18 2012-12-11 Otrsotech, Llc Methods and systems for placement and routing
JP2009021378A (ja) * 2007-07-11 2009-01-29 Nec Electronics Corp 半導体集積回路の生産方法、設計方法及び設計システム
US7984412B1 (en) * 2008-03-03 2011-07-19 Xilinx, Inc. IC design estimation using mid-level elements of IP cores

Also Published As

Publication number Publication date
EP2630598A1 (en) 2013-08-28
US20120096420A1 (en) 2012-04-19
KR20130070640A (ko) 2013-06-27
US20140082325A1 (en) 2014-03-20
CN103270512A (zh) 2013-08-28
US8423929B2 (en) 2013-04-16
JP2013541778A (ja) 2013-11-14
KR101503620B1 (ko) 2015-03-18
TW201218008A (en) 2012-05-01
WO2012054162A1 (en) 2012-04-26

Similar Documents

Publication Publication Date Title
JP5717015B2 (ja) アーキテクチャ・オプティマイザ
US7337301B2 (en) Designing configurable processor with hardware extension for instruction extension to replace searched slow block of instructions
US20120185820A1 (en) Tool generator
US7340692B2 (en) System LSI development apparatus and the method thereof for developing a system optimal to an application
Leupers et al. Retargetable generation of code selectors from HDL processor models
US6772106B1 (en) Retargetable computer design system
US8156457B2 (en) Concurrent simulation of hardware designs with behavioral characteristics
KR20020021081A (ko) 구성가능한 프로세서를 설계하기 위한 프로세서 자동 생성시스템 및 방법
JP5682081B2 (ja) インテリジェント・アーキテクチャ・クリエータ
Wehmeyer et al. Analysis of the influence of register file size on energy consumption, code size, and execution time
Yang et al. MetaCore: An application-specific programmable DSP development system
CN110210046B (zh) 应用程序及专用指令集处理器一体化敏捷设计方法
Frid et al. Elementary operations: a novel concept for source-level timing estimation
Bornebusch et al. Performance Aspects of Correctness-oriented Synthesis Flows.
Posadas et al. Accelerating host-compiled simulation by modifying ir code: Industrial application in the spatial domain
Brumar Early-Stage Non-Conventional Hardware Accelerator Discovery via Optimization Methods and Compiler Analysis
Posadas Cobo et al. Accelerating host-compiled simulation by modifying IR code: industrial application in the spatial domain
Beatty et al. An OpenMP-based circuit design tool: Customizable bit-width
Mehdipour et al. Rapid design space exploration of a reconfigurable instruction-set processor
Sartor et al. MInGLE: An Efficient Framework for Domain Acceleration using Low-Power Specialized Functional Units
van Kempen et al. Automated Generation of a RISC-V LLVM Toolchain for Custom MACs
Hohenauer et al. Retargetable code generation based on an architecture description language.
Leupers Application Code Profiling and ISA Synthesis on MIPS 32
Johnston Shared instruction-set extensions for soft multiprocessor systems implemented on field-programmable gate arrays

Legal Events

Date Code Title Description
RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20140210

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140424

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140603

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140829

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: 20141202

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20141225

R150 Certificate of patent or registration of utility model

Ref document number: 5682081

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees