JP2009533785A - Vliwプロセッサのための分岐および行動分割 - Google Patents
Vliwプロセッサのための分岐および行動分割 Download PDFInfo
- Publication number
- JP2009533785A JP2009533785A JP2009506731A JP2009506731A JP2009533785A JP 2009533785 A JP2009533785 A JP 2009533785A JP 2009506731 A JP2009506731 A JP 2009506731A JP 2009506731 A JP2009506731 A JP 2009506731A JP 2009533785 A JP2009533785 A JP 2009533785A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- vliw
- simulation
- instructions
- processor
- 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.)
- Withdrawn
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/33—Design verification, e.g. functional simulation or model checking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/26—Functional testing
- G06F11/261—Functional testing by simulating additional hardware, e.g. fault simulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/33—Design verification, e.g. functional simulation or model checking
- G06F30/3308—Design verification, e.g. functional simulation or model checking using simulation
- G06F30/331—Design verification, e.g. functional simulation or model checking using simulation with hardware acceleration, e.g. by using field programmable gate array [FPGA] or emulation
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)
- Quality & Reliability (AREA)
- Advance Control (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
- Debugging And Monitoring (AREA)
- Executing Machine-Instructions (AREA)
Abstract
ある側面では、本発明は、合成可能タスクのシミュレーションを加速する多くの並列プロセッサ要素を有するVLIWシミュレーションプロセッサを使用するだけでなく、また、合成不可能タスクおよび/または分岐もサポートする論理シミュレーションシステムを提供することによって、従来技術の制限を克服する。あるアプローチでは、VLIWシミュレーションプロセッサは、オンチップ命令キャッシュを有さないアーキテクチャに基づく。代わりに、VLIW命令ワードは、プログラムメモリから直接ストリームし、個々のプロセッサ要素は、命令ワードに基づいて、連続的にプログラムされる。これは、また、割り込みジャンプの効率的実装を可能にし、コード領域は、常に最初からの侵入を必要とせず、領域の中間に侵入可能である。別の側面では、合成不可能タスクは、例外ハンドラによって効率的に処理可能である。
Description
(関連出願の参照)
本出願は、(a)米国特許出願第11/292,712号(2005年12月1日出願、名称「Hardware Acceleration System for Simulation of Logic and Memory」、出願人:Henry T.VsrheyenおよびWilliam Watt)、および(b)米国特許出願第11/296,007号(2005年12月6日出願、名称「Partitioning of Tasks for Execution by a VLIW Hardware Acceleration System」、出願人:Henry T.VsrheyenおよびWilliam Watt)の一部継続出願であり、そして、(c)米国仮特許出願第60/744,991号(2006年4月17日出願、名称「Branching and Behavioral Partitioning for a VLIW Processor」、出願人:Henry T.Vsrheyen、他)、および米国特許出願第11/735,865号(2007年4月16日出願、名称「Branching and Behavioral Partitioning For a VLIW Processor」、出願人:Henry T.Vsrheyen、他)に対し、米国特許法第119条(e)に基づく優先権を主張する。これら出願の主題は、その全体が本明細書に参照として援用される。
本出願は、(a)米国特許出願第11/292,712号(2005年12月1日出願、名称「Hardware Acceleration System for Simulation of Logic and Memory」、出願人:Henry T.VsrheyenおよびWilliam Watt)、および(b)米国特許出願第11/296,007号(2005年12月6日出願、名称「Partitioning of Tasks for Execution by a VLIW Hardware Acceleration System」、出願人:Henry T.VsrheyenおよびWilliam Watt)の一部継続出願であり、そして、(c)米国仮特許出願第60/744,991号(2006年4月17日出願、名称「Branching and Behavioral Partitioning for a VLIW Processor」、出願人:Henry T.Vsrheyen、他)、および米国特許出願第11/735,865号(2007年4月16日出願、名称「Branching and Behavioral Partitioning For a VLIW Processor」、出願人:Henry T.Vsrheyen、他)に対し、米国特許法第119条(e)に基づく優先権を主張する。これら出願の主題は、その全体が本明細書に参照として援用される。
(発明の分野)
本発明は、概して、VLIW(very long instruction word;超長命令ワード)プロセッサに関し、例えば、半導体集積回路(また、半導体チップとしても知られる)の設計のシミュレーションのためのハードウェア加速システム内で使用され得るシミュレーションプロセッサを含む。本発明のある側面は、分岐の実装および/またはVLIWプロセッサのためのタスクの分割のための種々のアプローチに関し、具体的には、ある特定の場合には、オンチップ命令キャッシュを有さないVLIWプロセッサに関する。
本発明は、概して、VLIW(very long instruction word;超長命令ワード)プロセッサに関し、例えば、半導体集積回路(また、半導体チップとしても知られる)の設計のシミュレーションのためのハードウェア加速システム内で使用され得るシミュレーションプロセッサを含む。本発明のある側面は、分岐の実装および/またはVLIWプロセッサのためのタスクの分割のための種々のアプローチに関し、具体的には、ある特定の場合には、オンチップ命令キャッシュを有さないVLIWプロセッサに関する。
半導体チップの設計シミュレーションは、典型的には、設計内の大量の論理、大量のオンチップおよびオフチップメモリのため、高速処理および多数の実行ステップを必要とし、高速演算が、典型的には、最新の半導体チップのための設計において存在する。シミュレーションのための典型的アプローチは、ソフトウェアベースのシミュレーション(すなわち、ソフトウェアシミュレータ)である。このアプローチでは、チップの論理およびメモリ(便宜上、ユーザ論理およびユーザメモリと称する)は、汎用ハードウェア上で実行するコンピュータソフトウェアによってシミュレートされる。ユーザ論理は、論理機能を模倣するソフトウェア命令の実行によってシミュレートされる。ユーザメモリは、汎用ハードウェア内のメインメモリを配分し、次いで、シミュレーションによる必要に応じて、これらの記憶場所からデータを転送したりされたりすることによって、シミュレートされる。残念ながら、ソフトウェアシミュレータは、典型的には、非常に低速である。チップ上の大量の論理のシミュレーションは、多数のオペランド、結果、および対応するソフトウェア命令が、メインメモリから実行のための汎用プロセッサへ転送されることを必要とする。チップ上の大量のメモリのシミュレーションは、多数のデータ転送、およびチップ記述内で使用されるアドレスと、汎用ハードウェアのメインメモリ内で使用される対応するアドレスとの間の対応するアドレス変換を必要とする。
チップシミュレーションのための別のアプローチは、ハードウェアベースのシミュレーション(すなわち、ハードウェアエミュレータ)である。このアプローチでは、ユーザ論理およびユーザメモリは、専用基準に基づいて、エミュレータ内のハードウェア回路にマッピングされ、次いで、ハードウェア回路は、シミュレーションを行う。ユーザ論理は、エミュレータ内の特定のハードウェアゲートにマッピングされ、ユーザメモリは、エミュレータ内の特定の物理的メモリにマッピングされる。残念ながら、エミュレータ内で必要とされるハードウェア回路の数は、シミュレートされるチップ設計のサイズに応じて増加するため、ハードウェアエミュレータは、典型的には、コストが高くなる。例えば、オンチップ論理は、専用基準に基づいて、エミュレータ内の物理的論理にマッピングされるため、ハードウェアエミュレータは、典型的には、チップ上に存在するものと同一量の論理を必要とする。大量のユーザ論理が存在する場合、同等に、大量の物理的論理がエミュレータ内に存在しなければならない。さらに、ユーザメモリもまた、エミュレータ上にマッピングされなければならず、また、ユーザメモリからハードウェアエミュレータ内の物理的メモリへの専用マッピングも必要とする。典型的には、エミュレータメモリは、ユーザメモリを模倣するようにインスタンス化および分割される。これは、各メモリが物理的アドレスおよびデータポートを使用するため、非常に非効率となり得る。典型的には、マッピング可能なユーザ論理およびユーザメモリの量は、エミュレータのアーキテクチャ特性に依存するが、ユーザ論理およびユーザメモリの両方が、物理的リソースをエミュレータ内に含め、設計サイズに伴って拡大することを必要とする。これは、エミュレータのコストを跳ね上がらせる。また、性能を減退させ、エミュレータの設計を複雑にする。エミュレータメモリは、典型的には、高速であるが小型である。大型ユーザメモリは、多くのエミュレータメモリに分割しなければならい場合がある。これは、したがって、異なるエミュレータメモリ間の同期化を必要とする。
論理シミュレーションのためのさらに別のアプローチは、ハードウェア加速シミュレーションである。ハードウェア加速シミュレーションは、典型的には、論理設計をエミュレートまたはシミュレートするように構成可能なプロセッサ要素を含む、特殊ハードウェアシミュレーションシステムを利用する。コンパイラは、典型的には、論理設計(例えば、ネットリストまたはRTL(レジスタ転送言語;Register Transfer Language)の形式)を、論理設計をシミュレートするプロセッサ要素にロードされる命令を含むプログラムに変換するために提供される。ハードウェア加速シミュレーションは、種々の技術を利用して、論理設計を小区分(または、ドメイン)に分割し、これらのドメインをシミュレーションプロセッサにロードし得るため、論理設計のサイズに比例して拡大する必要はない。その結果、ハードウェア加速シミュレータは、典型的には、ハードウェアエミュレータよりも大幅に安価となる。加えて、ハードウェア加速シミュレータは、シミュレーションプロセッサによって生成されるハードウェア加速のため、典型的には、ソフトウェアシミュレータよりも高速である。
しかしながら、ハードウェア加速シミュレータは、典型的には、全体シミュレーション制御と、加速されるハードウェアシミュレータ内に生じる特定のドメインのシミュレーションとの間の連携を必要とする。例えば、ユーザ設計が、一度に1つのドメインでシミュレートされる場合、ドメインの現在の状態をハードウェアシミュレータ内にロードし、ハードウェアシミュレータにそのドメインのシミュレーションを行わせ、次いで、シミュレートされる次のドメインの状態をロードする代わりに、ドメインの修正された状態を(恐らくは、結果またはエラーメッセージ等の追加データも)スワップアウトするために、いくつかの制御が必要とされる。別の例として、ハードウェアシミュレータによって実行されない機能のためのコマンド(例えば、ホストコンピュータによって実行されるコマンド)は、典型的には、また、ハードウェアシミュレータと連携される必要がある。シミュレーション内のレポーティング、インタラプトおよびエラー、および分岐は、一部の例である。
これらの機能は、好ましくは、リソース効率的方法および低オーバーヘッドで実装される。例えば、異なるドメインの状態空間をスワップすることは、好ましくは、過度にシミュレーションを遅延させることなく生じる。したがって、上述の欠点の一部または全部を克服する、チップ設計のハードウェア加速機能シミュレーションに対するアプローチの必要性がある。
ある側面では、本発明は、合成可能タスクのシミュレーションを加速する多くの並列プロセッサ要素を有するVLIWシミュレーションプロセッサを使用するだけでなく、また、合成不可能タスクおよび/または分岐もサポートする論理シミュレーションシステムを提供することによって、従来技術の制限を克服する。
あるアプローチでは、VLIWシミュレーションプロセッサは、オンチップ命令キャッシュを有さないアーキテクチャに基づく。代わりに、VLIW命令ワードは、プログラムメモリから直接ストリームし、個々のプロセッサ要素は、命令ワードに基づいて、連続的にプログラムされる。その結果、コード分岐は、命令キャッシュを使用する従来のVLIWプロセッサアーキテクチャと異なり、命令キャッシュの同期化が必要でないため、ほぼ実行ペナルティなく実装可能である。これは、また、割り込みジャンプの効率的実装を可能にし、コード領域は、常に最初からの侵入を必要とせず、領域の中間に侵入されることが可能である。言い換えると、割り込みジャンプの可用性によって、より大きな領域の形成が可能になり、概して、スケジューリング効率および命令レベル並列度を増加させる。これは、対応するキャッシュの同期化要件のため、概して、割り込みジャンプが可能ではない従来のVLIWプロセッサアーキテクチャと正反対である。
別の側面では、合成不可能タスク(すなわち、VLIWプロセッサ要素による効率的実行に好適ではないタスク)は、例外ハンドラを介して、効率的に達成される。例外ハンドラのコールおよび実行の待機時間が相対的に長い場合でも、待機時間が予測可能である場合、全体の高実行効率は、その待機時間を考慮するように例外ハンドラをスケジューリングすることによって、依然として維持可能であって、他の並列演算がVLIWシミュレーションプロセッサ内で同時に実行することを可能にする。
論理シミュレーションとの関連において、ユーザ論理の論理演算は、合成可能タスクの主要実施例である。これらは、回路内で作動することが意図され、通常、合成される。VLIWプロセッサ要素は、これらの論理演算を効率的にシミュレートするように設計される。一方、合成不可能タスクの実施例は、多くの行動モデル(ユーザメモリモデル等)、多くのテストベンチ機能(初期化、繰り返し、非終、無限ループ、イベント、リアル、時間、フォーク、結合、手続き指定、特定の演算子等)、およびシミュレーションの全体制御(#遅延、不完全感度リスト、非局所参照、行動制御等)を含む。典型的には、合成可能および合成不可能タスクの両方が、チップ設計をシミュレートするために必要とされる。その結果、VLIWプロセッサ要素を使用して、合成可能タスクの実行を加速する一方、同時に、合成不可能タスクの効率的実行をサポートする(例えば、例外ハンドラによって)上述のアプローチは、全体論理シミュレーションを大幅に加速することが可能である。
ある特定の実装では、論理シミュレーションシステムは、ホストコンピュータにプラグインされる、プリント基板(Printed Circuit Board;PCB)上に実装される専用ハードウェアシミュレータとして実装される。専用ハードウェアシミュレータは、VLIW命令ワードを格納するためのプログラムメモリと、他の情報間のデータを格納するための記憶メモリと、VLIWシミュレーションプロセッサとを含む。VLIWシミュレーションプロセッサは、1つのチップとして実装される一方、プログラムメモリおよび記憶メモリは、PCB上に別個の(メモリ)チップとして実装される。このアーキテクチャ内では、例外ハンドラは、概して、行動プリミティブ(VLIWシミュレーションプロセッサとともにチップ上に、またはPCB上に実装される)、あるいは内蔵行動(ホストCPUベースまたはホストプログラムベースである)として分類可能である。ある実装では、例外ハンドラは、VLIWシミュレーションプロセッサのための特別なオペコードによってトリガされる。例えば、特定のフィールドオーバーロードは、種々の例外ハンドラをトリガするように定義されてもよい。
加えて、より複雑なシミュレーションは、典型的には、分岐を通して実現される、より複雑な種類の動的またはランタイム制御を必要とする場合が多い。ドメインは、分岐を実装するために使用される。実行される全体タスクは、ドメインと称される命令またはタスクのグループに細分される。ドメインは、1つのドメインから次のドメインに分岐することによって、ランタイムで互いに接続可能であって、次のドメインは、特定の条件(条件付き分岐)に依存し得る。また、ループ、if−then、およびケースステートメントも実装可能である。上述のVLIWアーキテクチャでは、プログラムカウンタ(Program Counter;PC)レジスタは、VLIWプロセッサにストリームされる次の命令のプログラムメモリ内のアドレスをポイントする。分岐は、プログラムメモリのための新しいアドレスを有するPCレジスタを単にロードすることによって実装可能である(自動的に、PCレジスタをインクリメントせずに)。条件付き分岐(多重分岐も同様)は、PCレジスタのための新しいアドレスを条件の評価に依存させることによって、実装可能である。
分岐コマンドは、特別なオペコード、例えば、フィールドオーバーロードとしてエンコード可能である。VLIWシミュレーションプロセッサがこの特別なオペコードを受信すると、これによって、新しいアドレスのPCレジスタへのロードがトリガされる。多くの種類の分岐が実装可能である。例えば、JUMPコマンドは、グローバル(提供されるアドレスが、PCレジスタ内にロードされるグローバルアドレスである場合)または相対(提供されるアドレスが、現在のPCレジスタをインクリメントまたはデクリメントする量である場合)であることが可能である。また、JUMPコマンドは、条件付きまたは無条件であることが可能である。無条件JUMPでは、新しいアドレスは、常に、PCレジスタ内にロードされる。条件付きJUMPでは、アドレスのロードは、条件の評価に依存する。その条件は、前サイクルにおいて評価され得る。代替として、同一サイクルにおいて、同一プロセッサ要素または異なるプロセッサ要素(VLIWシミュレーションプロセッサは、典型的には、多数の並列プロセッサ要素を有することを想起されたい)によって評価され得る。実際、多重JUMP(例えば、CASEステートメント)は、ケースのそれぞれを複数の処理要素に同時に評価させることによって、TRUEであるケースにJUMPを実行させるように、単一サイクルで実装され得る。
この概念は、実行をさらに最適化するために拡張可能である。特定のコードセクションは、異なるバリアントにコンパイル可能であり得、それぞれ、特定のケースにおいてより効率的に実行し得る。例えば、コードのピースが、その中にループを有する場合、ループの反復数Nが小さい場合、ループを展開し、ループ本体をN回再現するだけでより効率的となり得る。一方、Nが大きい場合、ループをコールとして実装し、「サブルーチン」(ループ本体)からリターンし、その後、条件付きテストを行うことがより効率的となり得る。コンパイラは、両方のバリアントを生成し、次いで、Nが小さい場合、展開バリアントを、Nが大きい場合、サブルーチン起動バリアントを選択する分岐命令を含むことが可能である。
また、上述の命令キャッシュレスVLIWアーキテクチャは、割り込みジャンプをサポート可能である。割り込みジャンプは、ドメインの中間へのジャンプである(常に、最初からドメインに侵入する場合と対照的である)。リターンは、割り込みジャンプの特別なケースであって、呼び出しドメインから起動されたドメインを呼び出しドメインにリターンさせる。割り込みジャンプは高価であるため、割り込みジャンプ(および概して、反復)は、概して、従来のVLIWアーキテクチャに回避される。実際、多くの技術は、割り込みジャンプを回避するように開発されてきており、静的にスケジュールされたVLIWアーキテクチャでは、可能ですらない。従来のVLIWでは、一時変数の状態を考慮しなければならないため、割り込みジャンプは、命令キャッシュ同期化問題によりコストがかかる。
しかしながら、上述のアーキテクチャでは、割り込みジャンプは、相対的に、効率的に実装可能である。上述のように、キャッシュ同期化は、命令キャッシュレスアーキテクチャに対し重要な問題ではない。一時変数に関し、あるアプローチでは、スケジューラは、単に一時データを無効にし、親ドメインのための一時データの再ロードを行い、既にスケジュールされている並列演算を再計算する。これは、実際、単一プロセッサがスタックを有していない場合の動作に類似する。代替アプローチでは、被起動ドメインは、一時データを削除することはできない。保存しなければならない。既に使用されているスクラッチパッドの再使用もできない。利用可能な空のスロット内で動作しなければならない。第3のアプローチでは、分岐命令は、分岐が生じない場合になり得る同一状態に一時データを同期化する条件に基づいて、自由に動作可能である。本VLIWアーキテクチャでは、正しくあるために過度の記録アルゴリズムを必要とする第1の前述のアプローチと対照的に、これは、アーキテクチャ現象であるため、この同期化は、プログラムおよび一時的コンテンツを配慮せずに、行うことが可能である。追加の利点は、これらの後者の2つのアプローチのいずれも、VLIWシミュレーションプロセッサへのハードウェア変更を伴わずに実装可能であって、コンパイラは、任意の所与の状況に対しより優れたアプローチを選択可能であることである。
合成不可能タスクおよび分岐の効率的サポートの利点の1つは、コンパイラが、より大きな領域を生成可能であって、概して、より効率的スケジューリングとなることである。VLIWスケジューリングは、概して、領域形成およびスケジュール構成を含む。従来、領域は、最初からのみ侵入可能なドメインのグループである。領域形成は、プログラム/設計を領域に分割するステップと、領域内の命令の実行を並列化するステップとを含む。スケジュール構成は、領域のためのスケジューリングを圧縮するステップ(すなわち、プログラム/設計をスケジューリング)と、プログラム/設計内の領域を接続するステップ(すなわち、制御論理の追加)とを含む。
従来のVLIWアーキテクチャは、割り込みジャンプに関し困難点を有しており、同期化問題のため、典型的には、領域(または、論理シミュレーション加速の用語では、合成不可能タスクの実行のための基本ブロック)内への割り込みジャンプをサポートしない。多くの技術が提案されているが、本発明者らが知る限り、いずれも、領域内への任意の割り込みを可能としない。その結果、割り込みジャンプまたは合成不可能タスクに遭遇する場合、従来のVLIWスケジューラは、典型的には、プログラムを別個の領域に分割しなければならない。しかしながら、上述のVLIWアプローチは、これらの両方を処理可能であって、その結果、対応するスケジューラは、より大きな領域を生成することが可能でとなり、より優れたスケジューリング効率(すなわち、より優れた命令レベル並列度)となる。実際、領域は、複数の割り込み点によって有効化される任意の境界を形成可能であって、コンパイラ最適化は、さらなる効率のために適用可能である。これは、従来のVLIWスケジューリングから大きく逸脱するものであって、静的または動的に実行されるかにかかわらず、より高レベルのILP(instruction level parallelism;命令レベル並列度)をもたらす。
領域形成は、スケジュール命令と制御命令との間のトレードオフの生成としてみなされ得る。スケジュール命令は、異なるドメイン(実行ドメインと称される)として考えられ、制御命令は、種々のジャンプ命令として考えられ得る。従来のVLIWスケジューリングでは、制御命令は、領域を複数の小領域に分割させる(例えば、キャッシュコヒーレンス問題を回避するため)。しかしながら、概して、VLIWスケジューリングのための計算効率を増加させるために、領域のサイズを拡大することが望ましい。対照的に、本アーキテクチャ下では、VLIWプロセッサは、各命令を直接オフチップメモリから読み出す。オンチップ命令キャッシュが削除されているため(したがって、また、キャッシュコヒーレンス問題)、これによって、ほぼコストをかけずに、1つの実行ドメインから別の実行ドメインへのジャンプのスケジューリングを可能にする。言い換えると、VLIW効率は、実行ドメインのサイズにそれほど依存しない。領域は、多くの実行ドメインから成ることが可能である。このケースでは、実行ドメインを通過するパスであるトレースは、動的制御下、偶然作動されるトレースのみ実行するために動的に調節可能である。すべての他のトレースは、実行されない。
従来のVLIW領域拡張技術が、領域のサイズを拡大するために適用可能である。しかしながら、他の領域拡張技術(従来のVLIWスケジューリングに必ずしも適用可能ではない)を、この特定のVLIWプロセッサアーキテクチャ内の処理要素の数の増加に伴ってさらに使用可能である。概して、拡張技術は、ループ展開等のより高いVLIW効率を可能にする。しかしながら、多数のプロセッサによって、ifまたはelseの実行ドメインにジャンプ(制御フローマッピング)するよりも、時として、if−then−else構文の両式を計算すること(if変換)が良い場合がある。あるケースでは、基本ブロックジャンプおよび分岐がスケジュールされた場合、VLIWプロセッサの完全効率が達成されない場合がある。
上述の説明では、全プロセッサ要素は、プログラムメモリ内の同一アドレスからストリームされた命令を受信すると仮定された。これは、説明を明確にするためになされたものであるが、必要ではない。別の側面では、マルチスレッディングをサポート可能である。ある実装では、プログラムメモリへのアクセスは、並列に作用する複数のメモリコントローラによって実装され、各メモリコントローラは、プロセッサ要素の特定のグループのための命令ワードを抽出する。各メモリコントローラは、プログラムメモリ内の異なる場所から命令ワードを抽出可能であって、したがって、マルチスレッド演算を可能にする。
本発明の他の側面は、上述のアプローチに対応する方法、装置、システム、およびアプリケーションを含む。本発明のさらなる側面は、上述のVLIW技術を含むが、論理シミュレーション以外のアプリケーションにも適用される。
本発明は、付随の図面に関連してなされる、発明を実施するための最良の形態および添付の請求項からより容易に明白となる、他の利点および特性を有する。
図面は、説明のみを目的として、本発明の実施形態を図示する。当業者は、本願に記載の本発明の原理から逸脱することなく、本願に示される構造および方法の代替実施形態が採用され得ることを本議論から容易に理解されるであろう。
(概要)
1.システムアーキテクチャ
1.A.概要
1.B.シミュレーションプロセッサ
1.C.PEオプコード
1.D.イベント駆動およびサイクルベースシミュレータ
1.E.クロックドメイン
2.合成不可能タスク
3.例外ハンドラ
3.A.拡張アーキテクチャ
3.B.ループバック例外ハンドラ
3.C.例外ハンドラ起動のためのオプコード
3.D.オンチップベース、オンPCBベース、ホストCPUベース、およびホストプログラムベース例外ハンドラ
3.E.行動プリミティブおよび内蔵行動
4.分岐
4.A.JUMPオプコード
4.B.待機時間
4.C.スタックレスおよびスタック演算
4.D.分岐を使用するドメイン実装
4.E.一部の実施例
4.F.多重分岐および制御変数解析
5.複合実行ドメイン
5.A.合成不可能タスクおよび分岐
5.B.例示的実行ドメイン
5.C.例示的クロックドメイン構成
6.VLIWコンパイルおよびスケジューリング
6.A.概要
6.B.領域拡大
6.C.動的条件を含む、インライン展開、起動、または展開
6.D.行動マッピングのための合成拡張
6.E.並列化
6.F.スケジュール構成:コンパクション、制御、および構成
6.G.要約
7.マルチスレッディング
7.A.アーキテクチャ拡張
7.B.分岐のためのマルチスレッドサポート
8.従来のVLIW命令との比較による差異
8.A.アーキテクチャ特性
8.B.利点
9.さらなる実施例
(詳細な開示)
(1.システムアーキテクチャ)
(1.A.概要)
図1は、本発明の一実施形態による、ハードウェア加速論理シミュレーションシステムを示すブロック図である。論理シミュレーションシステムは、専用ハードウェア(Hardware;HW)シミュレータ130と、コンパイラ108とAPI(Application Programming Interface;アプリケーションプログラミングインターフェース)116とを含む。ホストコンピュータ110は、CPU114と、メインメモリ112とを含む。API116は、それによってホストコンピュータ110がハードウェアシミュレータ130を制御する、ソフトウェアインターフェースである。専用HWシミュレータ130は、プログラムメモリ121と、記憶メモリ122と、シミュレーションプロセッサ100(プロセッサ要素102、内蔵ローカルメモリ104と、ハードウェア(HW)メモリインターフェースA142と、ハードウェア(HW)メモリインターフェースB144とを含む)とを含む。
1.システムアーキテクチャ
1.A.概要
1.B.シミュレーションプロセッサ
1.C.PEオプコード
1.D.イベント駆動およびサイクルベースシミュレータ
1.E.クロックドメイン
2.合成不可能タスク
3.例外ハンドラ
3.A.拡張アーキテクチャ
3.B.ループバック例外ハンドラ
3.C.例外ハンドラ起動のためのオプコード
3.D.オンチップベース、オンPCBベース、ホストCPUベース、およびホストプログラムベース例外ハンドラ
3.E.行動プリミティブおよび内蔵行動
4.分岐
4.A.JUMPオプコード
4.B.待機時間
4.C.スタックレスおよびスタック演算
4.D.分岐を使用するドメイン実装
4.E.一部の実施例
4.F.多重分岐および制御変数解析
5.複合実行ドメイン
5.A.合成不可能タスクおよび分岐
5.B.例示的実行ドメイン
5.C.例示的クロックドメイン構成
6.VLIWコンパイルおよびスケジューリング
6.A.概要
6.B.領域拡大
6.C.動的条件を含む、インライン展開、起動、または展開
6.D.行動マッピングのための合成拡張
6.E.並列化
6.F.スケジュール構成:コンパクション、制御、および構成
6.G.要約
7.マルチスレッディング
7.A.アーキテクチャ拡張
7.B.分岐のためのマルチスレッドサポート
8.従来のVLIW命令との比較による差異
8.A.アーキテクチャ特性
8.B.利点
9.さらなる実施例
(詳細な開示)
(1.システムアーキテクチャ)
(1.A.概要)
図1は、本発明の一実施形態による、ハードウェア加速論理シミュレーションシステムを示すブロック図である。論理シミュレーションシステムは、専用ハードウェア(Hardware;HW)シミュレータ130と、コンパイラ108とAPI(Application Programming Interface;アプリケーションプログラミングインターフェース)116とを含む。ホストコンピュータ110は、CPU114と、メインメモリ112とを含む。API116は、それによってホストコンピュータ110がハードウェアシミュレータ130を制御する、ソフトウェアインターフェースである。専用HWシミュレータ130は、プログラムメモリ121と、記憶メモリ122と、シミュレーションプロセッサ100(プロセッサ要素102、内蔵ローカルメモリ104と、ハードウェア(HW)メモリインターフェースA142と、ハードウェア(HW)メモリインターフェースB144とを含む)とを含む。
図1に示されるシステムは、以下のように動作する。コンパイラ108は、ユーザチップまたは設計の記述106、例えば、RTL(レジスタ転送言語;Register Transfer Language)記述または設計のネットリスト記述を受信する。記述106は、典型的には、チップ内の論理機能(すなわち、ユーザ論理)およびオンチップメモリ(すなわち、ユーザメモリ)の両方の記述を含む。記述106は、典型的には、有向グラフとしてユーザ論理設計を表し、グラフのノードは、設計内のハードウェアブロックに対応し、典型的には、行動または機能(すなわち、合成不可能)記述(合成可能記述もまた処理可能であるが)によって、ユーザメモリを表す。コンパイラ108は、設計の記述106をプログラム109にコンパイルする。プログラムは、ユーザ論理をシミュレートする命令と、ユーザメモリをシミュレートする命令とを含む。命令は、典型的には、ユーザ論理の機能をシミュレートするために、設計106内のユーザ論理をシミュレーションプロセッサ100内のプロセッサ要素102に対しマッピングする。命令は、典型的には、設計106内のユーザメモリを記憶メモリ122内の場所に対しマッピングする。コンパイラ108によって受信される記述106は、典型的には、チップまたは設計自体のみ以上のものを表す。また、多くの場合、シミュレーション目的のための設計をシミュレートするために使用されるテスト環境(すなわち、テストベンチ)を表す。システムは、チップ設計およびテストベンチの両方をシミュレートするように設計可能である(テストベンチが、ユーザメモリのブロックを必要とするケースを含む)。
例示的コンパイラ108のさらなる説明は、2003年6月5日公開の米国特許出願公開第2003/0105617Al号「Hardware Acceleration System for Simulation」を参照されたい(参照することによって本願に援用される)。特に、段落191−252および対応する図を参照されたい。プログラム109内の命令は、最初、メモリ112内に格納される。
シミュレーションプロセッサ100は、ユーザ論理の論理ゲートをシミュレートするための複数のプロセッサ要素102と、プロセッサ要素102のための命令および/またはデータを格納するためのローカルメモリ104とを含む。ある実施形態では、HWシミュレータ130は、HWシミュレータ130が、自然に、任意の一般的計算システム、ホストコンピュータ110に接続されるように、PCI(周辺装置相互接続;Peripheral Component Interconnect)とDMA(ダイレクトメモリアクセス;Direct Memory Access)コントローラとを有するFPGA(フィールドプログラマブルゲートアレイ;Field−Programmable Gate Array)を使用して、一般的PCI基板上に実装される。シミュレーションプロセッサ100は、HWシミュレータ130の一部を形成する。シミュレーションプロセッサ100は、ホストコンピュータ110のメインメモリ112への直接アクセスを有し、その演算は、API116を介してホストコンピュータ110によって制御される。ホストコンピュータ110は、メインメモリ112とHWシミュレータ130上のメモリ121、122との間のダイレクトなDMA転送が可能であるが、メインメモリ112とメモリ122との間のDMAはオプションであってもよい。
ホストコンピュータ110は、ユーザと、コンパイラ108によって生成されるプログラム109とによって指定されるシミュレーションベクタ(図示せず)を入力として受け取り、シミュレーションプロセッサ100のための広範なレベルの命令118を生成する。シミュレーションベクタ(図示せず)は、シミュレートされるネットリスト106の入力値を含む。広範なレベルの命令118は、DMAによって、メインメモリ112からHWシミュレータ130のプログラムメモリ121に転送される。記憶メモリ122は、ユーザメモリデータを格納する。シミュレーションベクタ(図示せず)および結果120は、ホストコンピュータ110による転送のために、プログラムメモリ121または記憶メモリ122内に格納可能である。
メモリインターフェース142、144は、プロセッサ要素102のためのインターフェースを提供し、それぞれメモリ121、122にアクセスする。プロセッサ要素102は、命令118を実行し、ある時点で、またDMAによって、シミュレーション結果120をホストコンピュータ110にリターンする。中間結果は、次の命令による使用のために、コンピュータ上に保持されてもよい。全命令118の実行によって、1つのシミュレーションベクタに対するネットリスト106全体をシミュレートする。
(1.B.シミュレーションプロセッサ)
図2は、本発明の一実施形態による、ハードウェア加速シミュレーションシステム内のシミュレーションプロセッサ100を示すブロック図である。シミュレーションプロセッサ100は、相互接続システム101を介して互いに通信する、n個のプロセッサユニット103A〜103K(同様に、U1、U2、…UKとラベル表示される)を含む。この実施例では、相互接続システムは、非ブロッキングクロスバーである。各プロセッサユニットは、クロスバーから最大2つの入力を受け取り、したがって、n個のプロセッサユニットに対し、2n入力信号が利用可能となり、2n信号(スラッシュを有する内向き矢印によって示される)から入力信号を選択可能である。各プロセッサユニットは、クロスバー(外向き矢印によって示される)に対し最大2つの出力を生成可能である。n個のプロセッサユニットに対し、これは、2n出力信号を生成する。したがって、クロスバーは、2n(プロセッサユニットからの出力)×2n(プロセッサユニットへの入力)クロスバーとなり、各プロセッサユニット103のそれぞれの入力を任意のプロセッサユニット103の真意の出力に結合可能とする。このように、1つのプロセッサユニットによって計算される中間値は、任意の他のプロセッサユニットによる計算のための入力としての使用に利用可能となる。
図2は、本発明の一実施形態による、ハードウェア加速シミュレーションシステム内のシミュレーションプロセッサ100を示すブロック図である。シミュレーションプロセッサ100は、相互接続システム101を介して互いに通信する、n個のプロセッサユニット103A〜103K(同様に、U1、U2、…UKとラベル表示される)を含む。この実施例では、相互接続システムは、非ブロッキングクロスバーである。各プロセッサユニットは、クロスバーから最大2つの入力を受け取り、したがって、n個のプロセッサユニットに対し、2n入力信号が利用可能となり、2n信号(スラッシュを有する内向き矢印によって示される)から入力信号を選択可能である。各プロセッサユニットは、クロスバー(外向き矢印によって示される)に対し最大2つの出力を生成可能である。n個のプロセッサユニットに対し、これは、2n出力信号を生成する。したがって、クロスバーは、2n(プロセッサユニットからの出力)×2n(プロセッサユニットへの入力)クロスバーとなり、各プロセッサユニット103のそれぞれの入力を任意のプロセッサユニット103の真意の出力に結合可能とする。このように、1つのプロセッサユニットによって計算される中間値は、任意の他のプロセッサユニットによる計算のための入力としての使用に利用可能となる。
それぞれ2つの入力を有する、n個のプロセッサユニットを含むシミュレーションプロセッサ100に対し、2n信号は、非ブロッキングアーキテクチャのためのクロスバーにおいて選択可能でなければならない。各プロセッサユニットが同一の場合、それぞれ、好ましくは、2つの変数をクロスバーに供給するであろう。これは、2n×2n非ブロッキングクロスバーをもたらす。しかしながら、このアーキテクチャは、必須ではない。ブロッキングアーキテクチャ、不均質アーキテクチャ、最適化アーキテクチャ(特定の設計スタイルのため)、共有アーキテクチャ(プロセッサユニットは、アドレスビットを共有するか、あるいはクロスバーへの入力または出力行を共有する)は、非ブロッキング2n×2nクロスバー以外の相互接続システム101が好ましい一部の実施例である。
プロセッサユニット103のそれぞれは、プロセッサ要素(PE)302と、ローカルキャッシュ308(一部の実装においてシフトレジスタとして実装される)と、その専用ローカルメモリとして、ローカルメモリ104の対応する部分326とを含む。各プロセッサユニット103は、ユーザ論理の少なくとも1つの論理ゲートをシミュレートし、シミュレーションの際の中間または最終のシミュレーション値を格納するように構成可能である。また、プロセッサユニット103は、マルチプレクサ304、306、310、312、314、316、320と、フリップフロップ318、322とを含む。プロセッサユニット103は、VLIW命令118によって制御される。この実施例では、VLIW命令118は、各プロセッサユニット103に対し1つの個々のPE命令218A〜218Kを含む。
PE302は、2つまたはそれ以下の入力(例えば、NOT、AND、NAND、OR、NOR、XOR、定数1、定数0等)によって、任意の論理ゲートをシミュレートするように構成可能である、設定可能なALU(算術論理演算;Arithmetic Logic Unit)である。PE302がシミュレートする論理ゲートの種類は、PE302を特定の種類の論理ゲートをシミュレートするようにプログラムするPE命令218に依存する。
マルチプレクサ304および306は、PE命令218内の選択信号に応じて、クロスバー101の2nバスラインの1つから入力データを選択する。図2の実施例では、各プロセッサユニット103のためのマルチプレクサ304、306のそれぞれは、2nバスラインのうちのいずれかを選択可能である。データがクロスバー101ではなく記憶メモリ122から読み出される場合、マルチプレクサ304、306は、記憶メモリ122(図2に図示せず)から(直接または間接的に)もたらされる入力行を選択するように作動される。このように、記憶メモリ122からのデータは、プロセッサユニットに提供可能である。
PE302の出力は、クロスバー101(マルチプレクサ316およびフリップフロップ318を介して)、ローカルキャッシュ308、または専用ローカルメモリ326にルーティング可能である。ローカルキャッシュ308は、シフトレジスタとして実装され、生成される中間値を格納する一方、シミュレーションプロセッサ100内のPE302は、複数のサイクル内の論理設計106の多数のゲートをシミュレートする。
ローカルキャッシュ308の出力側において、マルチプレクサ312および314は、PE命令218の関連フィールド内に指定されるローカルキャッシュ308のメモリセルのうちの1つを選択する。マルチプレクサ316および320の状態に応じて、選択された出力は、プロセッサユニット103のデータ入力による消費のために、クロスバー101にルーティング可能である。
専用ローカルメモリ326は、ローカルキャッシュ308だけで処理できるものよりも非常に大きな設計の処理が可能である。ローカルメモリ326は、その制限サイズのためにローカルキャッシュ308が溢れることを許すために、データを格納するため、入力ポートDIと出力ポートDOとを有する。言い換えると、ローカルキャッシュ308内のデータは、メモリ326からロードし、および/またはそこへ格納されてもよい。格納される中間信号値の数は、メモリ326の総合サイズによって制限される。メモリ326は、相対的に安価かつ高速であるため、このスキームは、論理シミュレーションのためのスケーラブル、高速、かつ安価なソリューションを提供する。メモリ326は、PE命令218内のフィールドによってアドレス指定される。
入力ポートDIは、PE302の出力を受信するように結合される。別個のデータパスでは、ローカルキャッシュ308に転送される値は、続いて、ローカルキャッシュ308からクロスバー101に出力し、次いで、PE302を介してメモリ326に再入力することによって、メモリ326に移動可能である。出力ポートDOは、クロスバー101への可能性のある表示のため、マルチプレクサ320に結合される。
また、専用ローカルメモリ326は、第2の出力ポート327を有し、記憶メモリ122およびプログラムメモリ121の両方にアクセス可能である。本願は、ポート327とプログラムメモリ121との間のデータワード540の読み込みおよび書き込みにより焦点を当てる。記憶メモリ122へのデータワード540の読み込みおよび書き込みの詳細は、例えば、VerheyenおよびWattによる2005年12月1日出願の米国特許出願第11/292,712号「Hardware Acceleration System for Simulation of Logic and Memory」を参照されたい(参照することによって本願に援用される)。
プロセッサユニット103の種々の側面のさらなる詳細および実施例は、例えば、2005年9月28日出願の米国特許出願第11/238,505号「Hardware Acceleration System for Logic Simulation Using Shift Register as Local Cache」、2005年11月30日出願の米国特許出願第11/291,164号「Hardware Acceleration System for Logic Simulation Using Shift Register as Local Cache with Path for Bypassing Shift Register」、2005年12月1日出願の米国特許出願第11/292,712号「Hardware Acceleration System for Simulation of Logic and Memory」、および2006年10月23日出願の米国特許出願第11/552,141号「VLIW Acceleration System Using Multi−State Logic」を参照されたい。上述のすべての教示は、参照することによって本願に援用される。
(1.C.PEオプコード)
この例示的実装では、PEオペコード218は、以下の形式を有する。
この例示的実装では、PEオペコード218は、以下の形式を有する。
P0|Pl|EN|ブール関数|XB0|XB1|XM
P0およびPlは、クロスバー101からのどの入力が、それぞれマルチプレクサ304および306によって選択され、そして、PE302へ入力するかを決定しフィールドである。ブール関数は、PE302によって実装される論理ゲートを決定する。ENは、どの入力がマルチプレクサ310、316、および320によって選択されるかを決定する。XB0、XB1、およびXM(Xtra Mem)は、アドレスである。マルチプレクサ316および320が、シフトレジスタ(マルチプレクサ312および314を介して)からデータを受信している場合、XB0およびXB1は、マルチプレクサ312および314への選択入力として使用される。データが、ローカルメモリ326からロードされる、またはそこに格納されている場合、メモリ326内の関連アドレスは、フィールドXB0、XB1、およびXMによって決定される。
P0およびPlは、クロスバー101からのどの入力が、それぞれマルチプレクサ304および306によって選択され、そして、PE302へ入力するかを決定しフィールドである。ブール関数は、PE302によって実装される論理ゲートを決定する。ENは、どの入力がマルチプレクサ310、316、および320によって選択されるかを決定する。XB0、XB1、およびXM(Xtra Mem)は、アドレスである。マルチプレクサ316および320が、シフトレジスタ(マルチプレクサ312および314を介して)からデータを受信している場合、XB0およびXB1は、マルチプレクサ312および314への選択入力として使用される。データが、ローカルメモリ326からロードされる、またはそこに格納されている場合、メモリ326内の関連アドレスは、フィールドXB0、XB1、およびXMによって決定される。
あるアプローチでは、ENフィールドは、PE302の4つの動作モード(Evaluation、No−op、Load、またはStore)のうちの1つを決定する。Evaluationモードの主要機能は、PE302が論理ゲートをシミュレートすることである(すなわち、2つの入力を受信し、2つの入力上の特定の論理機能を行い、出力を生成する)。故に、このモードでは、マルチプレクサ310は、PE302の出力を選択し、マルチプレクサ316は、マルチプレクサ312の出力を選択し、マルチプレクサ320は、マルチプレクサ314の出力を選択し、XB0およびXB1は、マルチプレクサ312および314への入力として使用される(シフトレジスタ308へのアドレスとして)。その結果、PE302は、マルチプレクサ304および306によって出力される入力オペランドに基づいて論理ゲートをシミュレートし、中間値をシフトレジスタ308内に格納し、この中間値は、最終的に、他のプロセッサユニット103による使用のために、クロスバー101に出力される。同時に、マルチプレクサ312および314は、次のサイクルにおけるプロセッサユニットへの入力として使用するためのシフトレジスタ308からエントリを選択可能である。
No−opモードでは、PE302は、演算を行わない。例えば、他のプロセッサユニットが、このシフトレジスタ308からのデータに基づいて機能を評価しているが、このPEがアイドリング状態の場合、このモードは、有用である場合がある。このモードでは、マルチプレクサ310は、シフトレジスタ308の最終エントリを選択し、マルチプレクサ316、320およびXB0、XB1は、Evaluationモードの場合と同じく使用される(すなわち、マルチプレクサ312および314への入力として)。No−opモードの際、PE302は、いずれのゲートもシミュレートしない一方、シフトレジスタ308の最終エントリがシフトレジスタ308の第1のエントリに再循環されるように、シフトレジスタ308は、リフレッシュされる。同時に、データは、マルチプレクサ312および314を介して、シフトレジスタ308から読み出し可能である。
Loadモードの主要機能は、ローカルメモリ326からデータをロードすることである。ここで、マルチプレクサは、フィールドXB0、XB1、およびXMによって決定されるアドレスにおけるローカルメモリ326内のデータが、マルチプレクサ320を介してロード可能であって、PE302が、同時に、マルチプレクサ304および306からの出力に基づいてシミュレーションを行うように設定される。このモードの際、データは、プロセッサユニットによる使用のために、メモリ326からクロスバー101へロード可能であって、同時に、PE302は、論理機能の評価を行い、シフトレジスタ308内に結果を格納可能であることに留意されたい。多くの代替アプローチでは、PEによる評価およびメモリからのロードは、本願におけるケースのように、同時に行うことは不可能である。この実施例では、ローカルメモリ326からのデータのロードは、PE302の演算をブロックしない。
Storeモードの主要機能は、ローカルメモリ326へのデータの格納である。このモードでは、ローカルメモリ326は、フィールドXB0、XB1、およびXMによってアドレス指定される。したがって、Storeモードの際、PE302の出力は、ローカルメモリ326内に格納可能である。また、Storeモードも、PE302の演算をブロックしない。PE302は、論理機能を評価可能であって、結果値は、ローカルメモリ326に直ぐに格納可能である。また、マルチプレクサ316を介して、クロスバー101にも利用可能である。
図2に示されるアーキテクチャの利点の1つは、LoadおよびStoreモードが、PE302の演算をブロックしないことである。つまり、Loadモードは、より適切には、LoadおよびEvaluationモードとして称され、Storeモードは、より適切には、StoreおよびEvaluationモードとして称され得る。これは、論理シミュレーションにとって重要である。論理シミュレーションは、特定の数のゲートのシミュレーションを必要とする。したがって、より迅速に評価を行うことが可能であれば、より早く論理シミュレーションを完了することが可能である。単一サイクル内におけるロード/格納および評価をサポートすることは、ロード/格納が1つのサイクルを必要とし、評価が別個のサイクルを必要とするアプローチと比較して、大幅な速度アップとなる。
(1.D.イベント駆動およびサイクルベースシミュレータ)
シミュレータは、イベント駆動またはサイクルベースであることが可能である。イベント駆動シミュレータは、シミュレーションの状態が、論理ゲートの評価に影響を及ぼし得るように変化する場合、例えば、論理ゲートへの入力が値を変える場合、または別様に論理ゲートに影響を及ぼし得る変数(例えば、トライステートイネーブル)が値を変える場合、論理ゲート(または、ステートメントのブロック)を評価する。この値の変化は、イベント呼ばれる。サイクルベースのシミュレータは、クロックドメインに従って回路を分割し、クロックの各トリガエッジにおいて一度、クロックドメイン内のサブ回路を評価する。したがって、イベント数は、シミュレータの稼働速度に影響する。低イベント数の回路は、イベント駆動シミュレータ上でより高速に稼働するが、高イベント数の回路は、サイクルベースのシミュレータ上でより高速に稼働する。実際は、ほとんどの回路は、サイクルベースのシミュレータが、イベント駆動のシミュレータよりも稼動で優るだけの十分なイベント数を有している。以下の説明は、最初に、現在のアーキテクチャのサイクルベースのシミュレータをマッピングするための使用方法を説明し、次いで、イベント駆動シミュレータを処理するための制御フローの実装方法を説明する。
シミュレータは、イベント駆動またはサイクルベースであることが可能である。イベント駆動シミュレータは、シミュレーションの状態が、論理ゲートの評価に影響を及ぼし得るように変化する場合、例えば、論理ゲートへの入力が値を変える場合、または別様に論理ゲートに影響を及ぼし得る変数(例えば、トライステートイネーブル)が値を変える場合、論理ゲート(または、ステートメントのブロック)を評価する。この値の変化は、イベント呼ばれる。サイクルベースのシミュレータは、クロックドメインに従って回路を分割し、クロックの各トリガエッジにおいて一度、クロックドメイン内のサブ回路を評価する。したがって、イベント数は、シミュレータの稼働速度に影響する。低イベント数の回路は、イベント駆動シミュレータ上でより高速に稼働するが、高イベント数の回路は、サイクルベースのシミュレータ上でより高速に稼働する。実際は、ほとんどの回路は、サイクルベースのシミュレータが、イベント駆動のシミュレータよりも稼動で優るだけの十分なイベント数を有している。以下の説明は、最初に、現在のアーキテクチャのサイクルベースのシミュレータをマッピングするための使用方法を説明し、次いで、イベント駆動シミュレータを処理するための制御フローの実装方法を説明する。
典型的には、ホストCPU114上で稼働するソフトウェアシミュレータは、どの論理回路の部分がハードウェアアクセラレータ130によってシミュレートされるかを制御する。ハードウェアアクセラレータ130上にマッピングされる論理は、ソフトウェアシミュレータ内のブラックボックスとしてみなされ得る。ハードウェアアクセラレータ上にマッピングされた論理への接続性は、このブラックボックスを介して接続する入力および出力信号を通してモデル化することが可能である。これは、同様に、内部および外部信号の両方に対しモデル化される。すなわち、全内部信号(例えば、「プローブ」)はまた、ブラックボックスのための入力および出力信号として抽出される。便宜上、これらの信号は、ブラックボックスのための主要入力(Primary Input;PI)および主要出力(Primary Output;PO)と称される。これは、ブラックボックスがチップ設計全体を表す場合、特定のチップ設計の主要入力および主要出力の上位集合である可能性があることに留意されたい。通常、システムタスクおよび他の論理(例えば、アサーション)もまた、含まれ、多くの場合、テストベンチの一部もまた、ブラックボックスに含まれる。
主要入力信号のいずれかがソフトウェアシミュレータにおいて変化する場合、これによって、ブラックボックスに直接影響を及ぼすイベントを生じさせる。ソフトウェアシミュレータは、ブラックボックスインターフェース(この実施例では、ソフトウェアドライバである)に刺激を送信する。ドライバは、このイベントを直接ハードウェアアクセラレータに送信するか、または刺激を蓄積させることが可能である。ハードウェアアクセラレータがサイクルベースの原理で動作する場合、蓄積が生じる。同期クロックドメインに対しては、クロック信号上のイベントだけが、PO値を計算するためにハードウェアアクセラレータを必要とする。しかしながら、設計内の組み合わせパスに対しては、入力上の任意のイベントが、典型的には、PO値を計算するためにハードウェアアクセラレータを必要とするであろう。このケースでは、ソフトウェアドライバは、PI変化をアップデートし、どのクロック信号がイベントを有するかを記録する。現在の時間ステップの評価終了時、シミュレータが次の時間ステップへ移動する前に、ソフトウェアドライバは、再び呼び出されるが、今回は、ブラックボックスのPO値を計算するためである。これは、シミュレーションイベントと称される。典型的には、時点毎に1つのシミュレーションイベントのみ存在するが、組み合わせフィードバックパスが存在する場合、ソフトウェアシミュレータがブラックボックスを再評価することが可能であることに留意されたい。この時点で、ソフトウェアドライバは、変化したクロック信号のリストを分析しており、ハードウェアアクセラレータにそれらのドメインの新しいPO値を計算させる。クロックが変化しない他のドメインは、典型的には、アップデートされる必要はない。これによって、より優れた効率がもたらされる。組み合わせ論理およびクロックドメイン相互作用をサポートするため、クロックイベントにかかわらず評価される、組み合わせクロックドメインが導入される。
各シミュレーションイベントでは、蓄積された変化は、DMA法を使用して、メインメモリ112からプログラムメモリ121にコピーされる。DMA完了後、クロックドメインおよびそれらを実行するシーケンスのリストが、ソフトウェアドライバ内に存在する。このリストは、ハードウェアアクセラレータ130を起動し、各クロックドメイン(一度に1つのドメイン)のPOをアップデートするために使用可能であるか、またはこのリストは、ハードウェアアクセラレータに全体として送信され、所与のシーケンスで一度にすべて、選択されたクロックドメインをハードウェア制御ルーチンに実行させることが可能である。また、それらの組み合わせも可能である。
(1.E.クロックドメイン)
ある実施形態では、プログラムメモリ121は、図3に示されるように配列される。図3は、本発明の一実施形態による、シミュレーションプロセッサ100による異なるドメインのメモリ配列を示す略図である。上述のように、全命令118を実行することによって、1つのシミュレーションベクタに対するネットリスト106全体をシミュレートする。しかしながら、ネットリスト106全体は、典型的には、ローカルメモリ104にロードされず、一度にすべてシミュレートされる。代わりに、シミュレーションは、典型的には、異なるドメインに分割される。次いで、ドメインは、順序通りローカルメモリ104にロードされ、ネットリスト全体が、区分的基準(一度に1つのドメイン)に基づいてシミュレートされる。
ある実施形態では、プログラムメモリ121は、図3に示されるように配列される。図3は、本発明の一実施形態による、シミュレーションプロセッサ100による異なるドメインのメモリ配列を示す略図である。上述のように、全命令118を実行することによって、1つのシミュレーションベクタに対するネットリスト106全体をシミュレートする。しかしながら、ネットリスト106全体は、典型的には、ローカルメモリ104にロードされず、一度にすべてシミュレートされる。代わりに、シミュレーションは、典型的には、異なるドメインに分割される。次いで、ドメインは、順序通りローカルメモリ104にロードされ、ネットリスト全体が、区分的基準(一度に1つのドメイン)に基づいてシミュレートされる。
図3は、チップ設計がクロックドメインに分割され、シミュレーションがサイクルベース(一度に1つのクロックドメイン)で実行される実施例を示す。単一チップは、多くのクロック(外部ソースから受信したクロック、内部で生成されたクロック、および/またはこれらのいずれかから派生したローカルクロック)を使用してもよい。チップ設計内の回路は、回路内のイベントが、同一クロックによって決定される場合、同一クロックドメイン内にある。クロックドメインへの入力は、そのドメインのクロックに同期化されるが、その入力は、ゲートクロックドメインにおいて一般的であるように、他のドメインから供給されることも可能である。図3の実施例では、チップ設計は、CK1、CK2等によって示されるいくつかの「ローカル」クロックドメインと、GCLKによって示されるグローバルドメインとに分割される。ローカルクロックドメインは、シミュレーションイベント、またはそのクロックドメインのクロックエッジに応じて評価されるチップ設計の一部、である。CK1ドメインは、CK1によって時間調節され、CK1ドメイン内の回路のシミュレーションは、クロックCK1にのみ依存する論理に関連する。したがって、これらのドメインは、「ローカル」である。グローバルドメインGCLKは、例えば、時間調節が、1つのクロックから異なるクロックへ移行する回路、または例えば、非同期リセット信号等の設計の主要入力から主要出力への組み合わせパス等、2つ以上のクロックドメインにオーバラップするチップ設計の一部を含む。CK1によって影響を受ける回路のシミュレーションは、典型的には、CK1ドメインおよびGCLKドメインのシミュレーションを必要とする。CK2に対し、CK2ドメインおよびGCLKドメイン等のシミュレーションが、典型的には、必要とされる。CK2がCK1のゲートクロックドメインである場合、クロックCK1がイベントを有し、ゲート論理がCK2をイネーブルし、したがって、CK2がまた、イベントを有すると、CK2は評価される必要がある。CK1およびCK2が同期ドメインである場合、それぞれ、そのイベントが生じると評価される。グローバルGCLKドメインは、各イベントに応じて評価される。
異なるドメインに関する情報は、プログラムメモリ121内に格納される。各ドメインは、命令セット(Instruction Set;IS)と、状態空間(State Space;SS)とを有する。命令セットは、そのドメインをシミュレートするために使用される命令118のグループである。状態空間は、そのクロックドメイン内の変数の現在の状態である。便宜上、ローカルドメインの状態空間、CK1SS、CK2SS等は、図3に示されるように、共に格納される。同様に、ローカルドメインの命令セット、CK1IS、CK2IS等もまた、共に格納される。ISセットは、各ドメインに対する命令であって、典型的には、実行の際に変化しない。典型的には、各SSに対し1つのISセットのみ必要とされるが、複数のセットが、ハードウェア制御ルーチンによって格納および選択されてもよい。例えば、1つのSSは、クロック評価、主要出力評価、非同期セット評価、非同期リセット評価、アサーション評価、またはテストコード評価のためのいくつかのISセットによってアクセスされてもよい。SSセットは、各ドメインのためのデータであって、典型的には、ドメインが評価される度に変化する。SSセットの複数のインスタンス(そのドメインのためのシミュレーションにおける各時間ステップに対し1つ)が存在可能であるため、SSセットは、ISセットから別個に格納され、履歴を格納可能にする。この実施例では、プログラムメモリ121はまた、主要入力(PI)と、主要出力(PO)と、ヘッダとを含む。主要入力は、刺激ベクタを含む。主要出力は、刺激ベクタに対する応答を含む。ヘッダは、各ドメインに適用する別個のヘッダと、メモリ配列に適用するグローバルヘッダとにさらに細分可能である。
特定のクロックドメインのシミュレーションの際、クロックドメインのための状態空間は、ローカルメモリ104内に格納され、クロックドメインをシミュレートする命令118は、フェッチおよび実行される。図3に示されるように、ローカルメモリ104は、典型的には、シミュレートされるローカルクロックドメインの状態空間(CKn SS)と、グローバルクロックドメインの状態空間(GCLK SS)とを含む。また、ローカルメモリ104は、POと、PIと、(随意に)ヘッダと、一時変数、またはチップ設計内のユーザメモリのシミュレーションのために割り当てられるローカルメモリ等の追加データとを含んでもよい。
シミュレーションの際、クロックドメインCKn(グローバルクロックドメインGCLKのための命令を含む)をシミュレートするために使用される命令は、PE102によってフェッチおよび実行される。図3は、プログラムメモリ121からPE102への命令CKnISnのフェッチ(410−420−422)を示す。命令の実行は、状態空間を変化させる。クロックドメインのための全命令118が実行されると、その時間ステップのクロックドメインのシミュレーションは完了し、修正された状態空間CKnSSは、プログラムメモリ121に戻され、格納される(432−430−410)。シミュレートされる次のクロックドメインのための状態空間は、シミュレーションに備え、ローカルメモリ104内にロードされる(410−430−432)。このプロセスは、チップのシミュレーションが完了するまで繰り返される。同一クロックドメインは、通常、異なる時刻をシミュレートするために、2回以上ローカルメモリ104内にロードされるであろう。
(2.合成不可能タスク)
この実装では、プログラムカウンタ(PC)レジスタが、プログラムメモリ121内のアドレスをポイントし、読み込み命令に基づいて、データは、プログラムメモリ121から、プログラムメモリデータバス410を介して、PE命令レジスタアレイ118に流れる。次のクロックサイクルのそれぞれにおいて、PE命令レジスタアレイはリフレッシュされる。PE命令レジスタアレイは、命令キャッシュの代わりに動作する。命令は、プログラムメモリからサイクル毎にフェッチされ、したがって、VLIWシミュレーションプロセッサは、事実上、オンチップ命令キャッシュを有さない、または別様に、非常に大きなオフチップ命令キャッシュを有する。
この実装では、プログラムカウンタ(PC)レジスタが、プログラムメモリ121内のアドレスをポイントし、読み込み命令に基づいて、データは、プログラムメモリ121から、プログラムメモリデータバス410を介して、PE命令レジスタアレイ118に流れる。次のクロックサイクルのそれぞれにおいて、PE命令レジスタアレイはリフレッシュされる。PE命令レジスタアレイは、命令キャッシュの代わりに動作する。命令は、プログラムメモリからサイクル毎にフェッチされ、したがって、VLIWシミュレーションプロセッサは、事実上、オンチップ命令キャッシュを有さない、または別様に、非常に大きなオフチップ命令キャッシュを有する。
プロセッサ要素102だけに基づくVLIWアーキテクチャは、タスクがプロセッサ要素によってシミュレート可能な場合であって、プログラム109内の命令が、コンパイル時において、効率的に所定の方法でスケジュール可能である場合(例えば、動的JUMP命令を伴わない)には、プログラム109(および、記述106内のタスク)を実行することに対し効率的なアプローチである。しかしながら、より複雑な記述106に対し、そうではない場合が多い。むしろ、記述106で表されるタスクは、通常、合成可能または合成不可能かに分類可能である。概して、合成可能タスクは、プロセッサ要素102に効率的にマッピング可能なタスクである。
図1の論理シミュレーション実施例では、ユーザ論理は、回路内で作動するよう意図され、通常、合成される論理を反映するので、それは、典型的には、合成可能タスクである。プロセッサ要素102は、具体的には、そのようなユーザ論理の論理演算をシミュレートするように設計される。一方、ユーザメモリモデル、多くのテストベンチ機能(初期化、繰り返し、非終、無限ループ、イベント、リアル、時間、フォーク、結合、手続き指定、特定の演算子等)、およびシミュレーションの全体制御(#遅延、不完全感度リスト、非局所参照、行動制御)等の多くの行動モデルは、典型的には、合成不可能タスクであって、回路内で作動するように意図されていない。これらは、典型的には、プロセッサ要素102以外のシミュレーションシステム部分(例えば、ホストコンピュータ110によって、記憶メモリ122によって、またはシステム内の例外ハンドラによって)によって、より効率的に処理される。例えば、IEEE1364および1076「Synthesis Interoperability Standards for Verilog and VHDL」を参照されたい(それぞれは、さらなる議論および実施例のため、参照することによって本願に援用される)。加えて、より複雑なプログラム109は、多くの場合、分岐を通して実現される、より複雑な種類の動的またはランタイムの制御を必要とするであろう。
合成不可能タスクの実行は、例外ハンドラを介して、効率的に達成可能である。例外ハンドラは、プロセッサ要素102によって直接行われることが不可能な、あるいはより便利にまたは外部からより高速に行われることが可能な、タスクを処理するために使用可能な技術である。例外ハンドラは、入力データを受け取り、記述プロトコルまたはアルゴリズムに基づいて出力データを計算し、この出力データは、再入可能(内部状態を保存)である。従来のCPUアーキテクチャでは、浮動小数点コプロセッサは、オンチップ例外ハンドラとしてみなされ得る。Henry T. VerheyenおよびWilliam Wattによる2005年12月1日出願の米国特許出願第11/292,712号「Hardware Acceleration System for Simulation of Logic and Memory」は、例外ハンドラを使用した、行動ユーザメモリ記述のハードウェア内での処理方法を説明している。また、多サイクル評価の単一サイクルVLIWプロセッサへの追加方法も説明している。
ドメインは、分岐の実装を補助するために使用可能である。ドメインでは、実行されるタスクまたは命令は、共にドメインにグループ化される。これらのドメインは、2つの種類(制御ドメインおよび実行ドメイン)に大まかに分類可能である。制御ドメインは、種々の他のドメインを順序付ける(スケジュールする)ドメインである。例えば、米国特許出願第11/296,007号「Partitioning of Tasks for Execution by a VLIW Hardware Acceleration System」では、ハードウェア制御ルーチンが、クロックドメインを動的にスケジュールするために適用される。制御ドメインは、制御ドメインを接続する場合、コンテクストスイッチングが、典型的には、必要となる(すなわち、状態空間は、典型的には、スワップインおよびアウトする)が、実行ドメインを接続する場合には、これは、典型的には、必要ではなく、ドメインは、単一状態空間内で動作するという点において実行ドメインとは異なる。米国特許出願第11/296,007号に記載のクロックドメイン命令セット(CK IS)は、実行ドメインの実施例である。
本開示は、実行ドメインの複数のグループの命令セット(IS)からの構成方法を説明する。実行ドメイン自体は、次のISグループを選択するために制御ドメインに戻るのではなく、その実行ドメイン自体の中でISグループの動的順序付けを可能にするように、VLIWアーキテクチャ内に構成可能である。実行ドメインは、計算が行われるドメインの一部である。実行ドメインは、シーケンス(次のドメイン)または子ドメインとして、他の実行ドメインを起動可能である。実行ドメインは、より大きなドメインをより小さなグループに細分可能である。これによって、分岐の実装を簡素化することが可能である。また、ドメインは、階層的にも構成可能である。
(3.例外ハンドラ)
(3.A.拡張アーキテクチャ)
図4〜5は、例外ハンドラを実装するためのアーキテクチャを示す。図4は、シミュレーションプロセッサ100と、プログラムメモリ121と、記憶メモリ122との間のインターフェースの特定の実装のブロック図である。この特定の実施例は、プロセッサ410とコプロセッサ420とに分割され、それぞれその独自の読み込みFIFOと、書き込みFIFOと、制御とを有する。2つの部分410および420は、中間インターフェース450を介して互いに通信する。この分割は必要ではないが、このアプローチの利点の1つは、設計がモジュール化されることである。例えば、コプロセッサ420上の追加回路は、さらに多くの機能性を導入するために追加可能である。同一のことが、プロセッサ410に対し行うことが可能である。
(3.A.拡張アーキテクチャ)
図4〜5は、例外ハンドラを実装するためのアーキテクチャを示す。図4は、シミュレーションプロセッサ100と、プログラムメモリ121と、記憶メモリ122との間のインターフェースの特定の実装のブロック図である。この特定の実施例は、プロセッサ410とコプロセッサ420とに分割され、それぞれその独自の読み込みFIFOと、書き込みFIFOと、制御とを有する。2つの部分410および420は、中間インターフェース450を介して互いに通信する。この分割は必要ではないが、このアプローチの利点の1つは、設計がモジュール化されることである。例えば、コプロセッサ420上の追加回路は、さらに多くの機能性を導入するために追加可能である。同一のことが、プロセッサ410に対し行うことが可能である。
図4におけるインターフェースは、以下のように動作する。プログラムメモリ121からの命令フェッチは、パス411−432−421を介して、シミュレーションプロセッサ100内の命令レジスタに生じる。プログラムメモリ121からシミュレーションプロセッサ100へのデータ読み込み(例えば、新しい状態空間のロード)は、パス411−432−431を介して生じる。シミュレーションプロセッサ100からプログラムメモリ121へのデータ書き込み(例えば、修正状態空間のライトバック)は、逆パス431−432−411を介して生じる。
記憶メモリ122からおよびそこへの読み込みおよび書き込みは、プロセッサ410およびコプロセッサ420を介して生じる。記憶メモリへの書き込みに対し、記憶メモリアドレスは、読み込みレジスタ425から、書き込みFIFO412、インターフェース450、読み込みFIFO424、メモリコントローラ428へ流れる。データは、同一パスに沿って流れ、最終的に、記憶メモリ122に書き込まれる。記憶メモリからの読み込みに対し、記憶メモリアドレスは、上述のように同一パスに沿って流れる。しかしながら、記憶メモリ122からのデータは、メモリコントローラ428から、書き込みFIFO427、インターフェース450、読み込みFIFO414、書き込みレジスタ415、シミュレーションプロセッサ100へ流れる。
シミュレーションプロセッサ100上の命令を実行するための動作周波数と、記憶メモリ122へのアクセスのためのデータ転送周波数(帯域幅)とは、概して、異なる。実際は、命令がプログラムメモリ121からフェッチされるため、命令実行のための動作周波数は、典型的には、プログラムメモリ121への帯域幅によって制限される。記憶メモリ122へ/からのデータ転送周波数は、典型的には、記憶メモリ122への帯域幅(例えば、コントローラ428と記憶メモリ122との間)、シミュレーションプロセッサ100(読み込みレジスタ415および書き込みレジスタ425を介して)へのアクセス、またはインターフェース450全体の帯域幅によって制限される。
論理シミュレーションのために設計されたある実装では、プログラムメモリ121および記憶メモリ122は、異なる帯域幅およびアクセス方法を有する。プログラムメモリ121は、メインプロセッサ410に直接接続し、2,000億ビット/秒を超える帯域幅で実現される。記憶メモリ122は、コプロセッサ420に接続し、200億ビット/秒を超える帯域幅で実現される。記憶メモリ122は、メインプロセッサ410に直接接続されないため、待機時間(インターフェース450を含む)が要因となる。ある特定の設計では、プログラムメモリ121は、reg[2,560]mem[8M]として物理的に実現され、記憶メモリ122は、reg[256]mem[125M]として物理的に実現されるが、ハードウェアおよびソフトウェア論理によって、reg[64]mem[500M]にさらに分割される。相対的に言って、プログラムメモリ121は、広く(2,560ビット/ワード)浅い(8百万ワード)が、記憶メモリ122は、狭く(64ビット/ワード)深い(5億ワード)。これは、あるデータ転送の量および周波数にどのDMA転送(プログラムメモリ121と記憶メモリ122のいずれに対しても)を使用するかを決定する際に考慮すべきである。
インターフェース442(この実施例では、PCIインターフェースとして図示される)は、パス425−412−450−424−442を介して、データをホストコンピュータ110に返送するために使用可能である。インターフェース452は、別のカードに拡張可能である。状態空間履歴を含むデータは、追加の処理または記憶のために、他のカードに転送可能である。ある実装では、この第2のカードは、データを圧縮する。類似アプローチは、他のカードからコプロセッサ420にデータを返送するために使用可能である。
(3.B.ループバック例外ハンドラ)
図5Aおよび5Bは、例外ハンドラを示すブロック図である。図5Aでは、例外ハンドラ510は、読み込みレジスタ425から書き込みレジスタ415へのループバックパスに挿入される。直接ループバックに対し、データは、読み込みレジスタ425から、直接書き込みレジスタ415に移転する。代替パスでは、データは、読み込みレジスタ425から、例外ハンドラ510、書き込みレジスタ415へ移転する。例外ハンドラは、多くの異なる機能を処理可能であって、他のポート(例えば、他の回路、プロセッサ、またはデータソース/シンクに接続する)を有してもよい。図5Bは、代替アーキテクチャを示し、読み込みレジスタ425および書き込みレジスタ415との相互作用は、例外ハンドラ510によって処理される。読み込みレジスタ425から書き込みレジスタ415への直接ループバックパス、記憶メモリ122との相互作用等は、例外ハンドラ510を介してすべて処理される。
図5Aおよび5Bは、例外ハンドラを示すブロック図である。図5Aでは、例外ハンドラ510は、読み込みレジスタ425から書き込みレジスタ415へのループバックパスに挿入される。直接ループバックに対し、データは、読み込みレジスタ425から、直接書き込みレジスタ415に移転する。代替パスでは、データは、読み込みレジスタ425から、例外ハンドラ510、書き込みレジスタ415へ移転する。例外ハンドラは、多くの異なる機能を処理可能であって、他のポート(例えば、他の回路、プロセッサ、またはデータソース/シンクに接続する)を有してもよい。図5Bは、代替アーキテクチャを示し、読み込みレジスタ425および書き込みレジスタ415との相互作用は、例外ハンドラ510によって処理される。読み込みレジスタ425から書き込みレジスタ415への直接ループバックパス、記憶メモリ122との相互作用等は、例外ハンドラ510を介してすべて処理される。
例外ハンドラ510は、典型的には、マルチビットイン、マルチビットアウト装置である。ある設計では、例外ハンドラ510は、PowerPCコア(あるいは、他のマイクロプロセッサまたはマイクロコントローラコア)を使用して実装される。他の設計では、例外ハンドラ510は、(汎用)算術ユニットとして実装可能である。設計に応じて、例外ハンドラ510は、様々な場所に実装可能である。例えば、例外ハンドラ510がVLIWシミュレーションプロセッサ100の一部として実装される場合、その演算は、VLIW命令118によって制御可能である。図2を参照すると、ある実装では、プロセッサユニット103の一部は、PE302が、単一ビット入力ではなく、マルチプレクサ304、306からマルチビット入力を受信するように修正される。次いで、PE302は、受信したベクタデータについての算術機能を行うことが可能である。
代替アプローチでは、例外ハンドラ510は、VLIWシミュレーションプロセッサ100の外部の回路(および/またはソフトウェア)によって実装可能である。例えば、図4を参照すると、例外ハンドラ510は、410上に位置するが、シミュレーションプロセッサ100の外部の回路上に実装可能である。このアプローチの利点の1つは、例外ハンドラ510がVLIW命令118によって駆動されず、したがって、シミュレーションプロセッサ100の残りの部分と横並びに動作する必要がないことである。加えて、例外ハンドラ510は、シミュレーションプロセッサのアーキテクチャによって直接制約されないため、大きなデータ演算を処理するようにより容易に設計可能である。
(3.C.例外ハンドラ起動のためのオプコード)
シミュレーションプロセッサ100のための命令セットは、特定のオペコードが例外ハンドラを起動するように設計可能である。セクション1.Cを参照すると、1つの可能性のあるオペコード形式は、以下である。
シミュレーションプロセッサ100のための命令セットは、特定のオペコードが例外ハンドラを起動するように設計可能である。セクション1.Cを参照すると、1つの可能性のあるオペコード形式は、以下である。
P0|Pl|EN|ブール関数|XB0|XB1|XM
例外ハンドラは、PE0上にオーバーロードされた特別なP0/P1フィールドによってトリガされ得る。ある実装では、PE0がNo−opモードおよびP0=Pl=0を示すENを有する命令を受信する場合、例外ハンドラがトリガされる。また、他の命令も、例外ハンドラをトリガするために使用可能である。例外ハンドラがトリガされると、オペコード内の残りのフィールドは、より具体的に例外ハンドラを識別するように、異なって解釈され得る。また、命令セットは、例外ハンドラのトリガに応じて、他のPEからのオペコードもまた、例外ハンドラを識別するために使用されるように設計され得る。別の実装では、フィールドXB0、XB1、XMは、ローカルメモリ326内の場所をポイントするように解釈可能であって、その場所は、例外ハンドラに関する追加情報を含むか、または例外ハンドラに関する追加情報を含むより長いアドレス(例えば、記憶メモリ122内)を含む。例外ハンドラを起動および特定する他のアプローチは、明白であるだろう。
例外ハンドラは、PE0上にオーバーロードされた特別なP0/P1フィールドによってトリガされ得る。ある実装では、PE0がNo−opモードおよびP0=Pl=0を示すENを有する命令を受信する場合、例外ハンドラがトリガされる。また、他の命令も、例外ハンドラをトリガするために使用可能である。例外ハンドラがトリガされると、オペコード内の残りのフィールドは、より具体的に例外ハンドラを識別するように、異なって解釈され得る。また、命令セットは、例外ハンドラのトリガに応じて、他のPEからのオペコードもまた、例外ハンドラを識別するために使用されるように設計され得る。別の実装では、フィールドXB0、XB1、XMは、ローカルメモリ326内の場所をポイントするように解釈可能であって、その場所は、例外ハンドラに関する追加情報を含むか、または例外ハンドラに関する追加情報を含むより長いアドレス(例えば、記憶メモリ122内)を含む。例外ハンドラを起動および特定する他のアプローチは、明白であるだろう。
(3.D.オンチップベース、オンPCBベース、ホストCPUベース、およびホストプログラムベース例外ハンドラ)
以下の説明に対し、例外ハンドラは、4つの異なるグループ(オンチップベース、オンPCBベース、ホストCPUベース、およびホストプログラムベース)に分類される。「オンチップベース」は、VLIWプロセッサ100集積回路(チップ)内のプロセッササイクルと一致して実行する例外ハンドラを意味する。典型的には、例外ハンドラは、単一プロセッササイクル内でその計算を完了せず、処理要素102と比較して、データにアクセスするための様々な方法を使用し得る。一例は、処理要素102が浮動小数点算術を処理しない場合の浮動小数点計算である。別の実施例は、例外ハンドラとして、VLIWプロセッサ100と同一チップ内に内蔵可能なPowerPCコア等のプロセッサコアである。また、単一VLIWプロセッササイクル内で完了するが、ハードウェア補助(すなわち、処理要素のグリッド外で実行される)を必要とする特別機能は、この種類の一部であるとみなされる。最終グループの実施例は、条件付き分岐[“if(式)”]およびハードウェア補助アサーション[“has_x_or_z(式)”]の実装を含むことが可能である。また、以下に導入される条件付き、無条件、および多重分岐命令も、この種類の例外ハンドラを使用して実装可能である。
以下の説明に対し、例外ハンドラは、4つの異なるグループ(オンチップベース、オンPCBベース、ホストCPUベース、およびホストプログラムベース)に分類される。「オンチップベース」は、VLIWプロセッサ100集積回路(チップ)内のプロセッササイクルと一致して実行する例外ハンドラを意味する。典型的には、例外ハンドラは、単一プロセッササイクル内でその計算を完了せず、処理要素102と比較して、データにアクセスするための様々な方法を使用し得る。一例は、処理要素102が浮動小数点算術を処理しない場合の浮動小数点計算である。別の実施例は、例外ハンドラとして、VLIWプロセッサ100と同一チップ内に内蔵可能なPowerPCコア等のプロセッサコアである。また、単一VLIWプロセッササイクル内で完了するが、ハードウェア補助(すなわち、処理要素のグリッド外で実行される)を必要とする特別機能は、この種類の一部であるとみなされる。最終グループの実施例は、条件付き分岐[“if(式)”]およびハードウェア補助アサーション[“has_x_or_z(式)”]の実装を含むことが可能である。また、以下に導入される条件付き、無条件、および多重分岐命令も、この種類の例外ハンドラを使用して実装可能である。
「オンPCBベース」は、VLIWシミュレーションプロセッサ100に対しオフチップであるが、同一プリント基板(PCB)カードのいずれかの場所、またはVLIWプロセッサをホストするPCBカードの娘カード上で実行される例外ハンドラを意味する。PowerPCコアベースの例外ハンドラは、VLIWプロセッサ100と離れた半導体チップ内に実装される場合、オンPCBベースであることが可能である。
「ホストCPUベース」は、ホストコンピュータ110上で行われる例外ハンドラアクティビティを示す。この実施例は、典型的には、(シミュレーションにおける)メッセージング($display)、あるいは入力データ($readmemh)または出力データ(VCD/FSDBダンプ)等のファイルI/Oに関する。ファイルは、オペレーティング・システムを介してアクセス可能であって、したがって、ホストコンピュータ上で実行される。典型的には、これらのアクセス方法は、VLIWシミュレーションプロセッサ100をホストCPU114に接続するドライバソフトウェア内で行うことが可能である。
「ホストプログラムベース」は、ドライバソフトウェア以外のソフトウェアプログラムとして実装される例外ハンドラを示し、このドライバソフトウェアは、ホストCPU上で実行し、そのプログラムに対しVLIWプロセッサ100が子プロセスである(特定のアーキテクチャにおいて)。例えば、VLIWプロセッサ100がホストCPU110から直接実行される場合等、そのようなプロセスがない場合もある。半導体集積回路の設計のシミュレーションでは、ホストプログラムは、典型的には、ソフトウェアシミュレータを示し、このプログラムは、シミュレーションプログラムの範囲内でのみ定義される$time、$realtime、外部PLI機能、ライブラリ方法等の特定の状態機械要素を維持可能である。これらの変数へまたはそこからのアクセスを使用する例外ハンドラは、典型的には、ソフトウェアシミュレータ内で実行される。一般的に、プログラムは、一部がホスト110(シミュレータプログラム等)上で、一部がVLIWプロセッサカード130上で実行するように分割されてもよい。
(3.E.行動プリミティブおよび内蔵行動)
特定のアプリケーションに対し、VLIWプロセッサ100は、主に、合成可能タスクを処理するように設計されるため、例外ハンドラは、大抵の場合、合成不可能タスクを処理するために使用され得る。集積回路のシミュレーションとの関連で、合成不可能タスクは、行動または機能タスク(行動または機能に関して記述可能であるが、同等の論理回路に統合が困難なタスクを示す)と称される場合が多い。行動タスクは、概して、2つのグループ(行動プリミティブおよび内蔵行動)に分類可能である。行動プリミティブ(Behavioral Primitive;BP)は、オンチップベース例外ハンドラまたはオンPCBベース例外ハンドラによって実装される行動タスクである。内蔵行動(Embedded Behavior;EB)は、ホストCPUベース例外ハンドラまたはホストプログラムベース例外ハンドラによって実装される行動タスクである。
特定のアプリケーションに対し、VLIWプロセッサ100は、主に、合成可能タスクを処理するように設計されるため、例外ハンドラは、大抵の場合、合成不可能タスクを処理するために使用され得る。集積回路のシミュレーションとの関連で、合成不可能タスクは、行動または機能タスク(行動または機能に関して記述可能であるが、同等の論理回路に統合が困難なタスクを示す)と称される場合が多い。行動タスクは、概して、2つのグループ(行動プリミティブおよび内蔵行動)に分類可能である。行動プリミティブ(Behavioral Primitive;BP)は、オンチップベース例外ハンドラまたはオンPCBベース例外ハンドラによって実装される行動タスクである。内蔵行動(Embedded Behavior;EB)は、ホストCPUベース例外ハンドラまたはホストプログラムベース例外ハンドラによって実装される行動タスクである。
行動待機時間は、行動タスクの1つの属性である。例外ハンドラがモデル化される方法に応じて、所望の応答を計算する時間(すなわち、行動待機時間)が大きく変り得る。例えば、オンチップベース例外ハンドラは、非常に高速に応答可能である。基本条件付き分岐[“if(式)”]テスト条件では、単一VLIW命令サイクル内で応答する。内部ループバック例外ハンドラ(図5に図示されるような)によって実装される同じ分岐は、10VLIW命令サイクルで応答し得る。オンPCBベース例外ハンドラは、典型的には、データが生成可能となるまでより長い待機時間を必要とする(例えば、ユーザメモリ演算に対し100VLIW命令サイクル)。オンチップベースおよびオンPCBベースマイクロプロセッサ(例えば、PowerPCコア)ベース例外ハンドラは、VLIW命令サイクルの数l00倍に対応するミリ秒で応答し得る。ホストCPUベースおよびホストプログラムベース例外ハンドラは、さらに長く、1,000VLIW命令サイクル以上を要し得る。
(4.分岐)
(4.A.JUMPオプコード)
図3を参照すると、プログラムカウンタ(PC)レジスタは、プログラムメモリ121内のアドレスをポイントし、読み込み命令に応じて、データは、プログラムメモリ121から、プログラムメモリデータバス410を介して、PE命令レジスタアレイ118へストリームする。次のクロックサイクルのそれぞれにおいて、PE命令レジスタアレイがリフレッシュされる。したがって、JUMPは、VLIW命令に、次の命令ワードフェッチに応じて、この新しいアドレスから継続して読み込みを行わせる、プログラムメモリ121の新しいアドレスを有するPCレジスタをロードすることによって実装可能である。これは、命令ストリームの中断なく行うことが可能であって、実装において効率的である。
(4.A.JUMPオプコード)
図3を参照すると、プログラムカウンタ(PC)レジスタは、プログラムメモリ121内のアドレスをポイントし、読み込み命令に応じて、データは、プログラムメモリ121から、プログラムメモリデータバス410を介して、PE命令レジスタアレイ118へストリームする。次のクロックサイクルのそれぞれにおいて、PE命令レジスタアレイがリフレッシュされる。したがって、JUMPは、VLIW命令に、次の命令ワードフェッチに応じて、この新しいアドレスから継続して読み込みを行わせる、プログラムメモリ121の新しいアドレスを有するPCレジスタをロードすることによって実装可能である。これは、命令ストリームの中断なく行うことが可能であって、実装において効率的である。
上述のセクション1.C.を参照すると、そこで導入されたVLIWシミュレーションプロセッサ100のためのオペコード形式は、以下である。
P0|Pl|EN|ブール関数|XB0|XB1|XM
JUMP命令は、以下のようにエンコード可能である。フィールドP0およびP1は、PE302に対し2つの入力を決定し、ブール関数というフィールドは、PE302によってシミュレートされる機能を決定する。この実施例では、BUF(バッファ)は、可能性のあるブール関数のうちの1つとして選択される。しかしながら、BUFは、1つの入力(例えば、P0入力)のみを必要とする。これによって、「オーバーロード」と称される特別値をエンコードするためにPlを利用可能なままとする。ある実装では、JUMPコマンドは、オーバーロード演算のこのセットの一部として含められる(例外ハンドラは、このようにも実装可能であることに留意されたい)。したがって、PE302がブール関数=BUFおよびP1=JUMPオーバーロード値に遭遇する場合、命令をJUMPコマンドとして解釈する。
JUMP命令は、以下のようにエンコード可能である。フィールドP0およびP1は、PE302に対し2つの入力を決定し、ブール関数というフィールドは、PE302によってシミュレートされる機能を決定する。この実施例では、BUF(バッファ)は、可能性のあるブール関数のうちの1つとして選択される。しかしながら、BUFは、1つの入力(例えば、P0入力)のみを必要とする。これによって、「オーバーロード」と称される特別値をエンコードするためにPlを利用可能なままとする。ある実装では、JUMPコマンドは、オーバーロード演算のこのセットの一部として含められる(例外ハンドラは、このようにも実装可能であることに留意されたい)。したがって、PE302がブール関数=BUFおよびP1=JUMPオーバーロード値に遭遇する場合、命令をJUMPコマンドとして解釈する。
2つ以上のJUMPコマンドを、命令セットの一部として含むことが可能である。以下は、6つのJUMPコマンドの例示的セットであって、それぞれ、Plに対する異なるオーバーロード値に対応する。
無条件JUMPG
条件付きJUMPG
無条件前方JUMPR(インクリメント)
条件付き前方JUMPR(インクリメント)
無条件後方JUMPR(デクリメント)
条件付き後方JUMPR(デクリメント)
ここで、JUMPGは、グローバルジャンプ(すなわち、絶対アドレスへのジャンプ)であって、JUMPRは、相対ジャンプ(すなわち、現在のPCレジスタを指示量分インクリメントまたはデクリメント)である。無条件ジャンプは、常に生じる。条件付きジャンプは、条件が満たされる場合に生じる。条件付きジャンプは、例えば、条件を事前計算し、P0フィールドを使用して、条件がTRUEまたはFALSEであるかを示すことによって、実装可能である。
条件付きJUMPG
無条件前方JUMPR(インクリメント)
条件付き前方JUMPR(インクリメント)
無条件後方JUMPR(デクリメント)
条件付き後方JUMPR(デクリメント)
ここで、JUMPGは、グローバルジャンプ(すなわち、絶対アドレスへのジャンプ)であって、JUMPRは、相対ジャンプ(すなわち、現在のPCレジスタを指示量分インクリメントまたはデクリメント)である。無条件ジャンプは、常に生じる。条件付きジャンプは、条件が満たされる場合に生じる。条件付きジャンプは、例えば、条件を事前計算し、P0フィールドを使用して、条件がTRUEまたはFALSEであるかを示すことによって、実装可能である。
JUMPGの場合、アドレスフィールドは、PEオペコードよりも長くてもよい。その場合、オペコードを完了するために必要とされる追加ビットは、いくつかの方法で得ることが可能である。あるアプローチでは、アドレスフィールドは、他のPEからのオペコードを使用して完了してもよい。例えば、XB0、XB1、およびXMは合わせて16ビットを有するが、PCレジスタは24ビットを有する場合、追加8ビットは、隣接するPEのXB0、XB1、および/またはXMフィールドから受け取ることが可能である。また、間接化も使用可能である。例えば、XB0、XB1、およびXMは、24ビットアドレスを含む場所をポイント(または、それ自体が、24ビットアドレスをポイント)してもよいが、間接化は、通常、JUMP命令の実行に待機時間を追加する。
JUMPRの場合、最大インクリメントは、現在のオペコード内で利用可能なものに制限可能である。このアプローチは、他からの余剰ビットをロードする複雑性を回避する。上述の実施例を継続すると、JUMPRは、16ビットに制限されてもよい。つまり、PCレジスタは、24ビットの全スパンではなく、最大16ビットインクリメントまたはデクリメントすることが可能である。
上述のアプローチは、PEオペコードに基づく、VLIWプロセッサのための効率的分岐機構である。分岐は、単一PE(適切に制限されたJUMPRのため)、またはその隣接するPEのビットフィールドと結合された単一PE(JUMPGのため)のみを必要とする。加えて、分岐は、動的な式(すなわち、ランタイムで計算された)に基づく条件付きにすることが可能であって、この動的な式は、任意の式を条件付き分岐のテスト条件に対し生成されることが可能である。VLIWシミュレーションプロセッサは、命令キャッシュレスであるため、分岐は、ほぼペナルティなして行うことが可能である。対照的に、命令キャッシュを有するVLIWプロセッサでは、分岐は、命令キャッシュが消去および再ロードされる必要があって、非効率的である。
加えて、この実施例では、VLIWプロセッサ100は、単一集積回路として実装され、全PE302は、オンチップメモリへのアクセスを有する。その結果、任意の式が、チップ内の任意の場所に格納され、条件付き分岐内のテスト条件として使用可能である。評価は、既に、VLIWプロセッサの通常演算の一部であるように設計されているため、テストは、効果的に、ペナルティなしで評価可能である。
(4.B.待機時間)
上述のVLIWアーキテクチャでは、命令ワードは、オフチップメモリ121から連続的にストリームされ、ジャンプ後、全処理要素302は、新しいJUMPアドレスに位置する命令ワードから新しい命令データを受信する。したがって、JUMP命令による分岐は、全処理要素に対し、同時に行われる(これは、以下に詳述されるように、例えば、並列スレッディングによって精緻化可能である)。JUMP命令は、単一VLIW命令サイクルで行われるが、メモリアーキテクチャに応じて、待機時間(通常、数命令サイクルのみ)があり得る。その場合、VLIWプロセッサは、命令がJUMPアドレスからのストリーミングを開始するまで、非アクティブのままであり得る。さらなる最適化は、遅延分岐の使用、すなわち、分岐遅延スロットを可能にすることである(余剰命令サイクルの間、VLIWプロセッサに計算させ、本質的に、待機時間を吸収し、したがって、VLIW命令サイクルは失われない)。
上述のVLIWアーキテクチャでは、命令ワードは、オフチップメモリ121から連続的にストリームされ、ジャンプ後、全処理要素302は、新しいJUMPアドレスに位置する命令ワードから新しい命令データを受信する。したがって、JUMP命令による分岐は、全処理要素に対し、同時に行われる(これは、以下に詳述されるように、例えば、並列スレッディングによって精緻化可能である)。JUMP命令は、単一VLIW命令サイクルで行われるが、メモリアーキテクチャに応じて、待機時間(通常、数命令サイクルのみ)があり得る。その場合、VLIWプロセッサは、命令がJUMPアドレスからのストリーミングを開始するまで、非アクティブのままであり得る。さらなる最適化は、遅延分岐の使用、すなわち、分岐遅延スロットを可能にすることである(余剰命令サイクルの間、VLIWプロセッサに計算させ、本質的に、待機時間を吸収し、したがって、VLIW命令サイクルは失われない)。
例えば、メモリ待機時間が4命令である場合、ジャンプは、後述されるように、その中にJUMP命令を有するVLIW命令ワードの後、4命令サイクルで実行される(遅延分岐)。これらの4命令の際、VLIWは、実行サイクルを継続可能であるが、好ましくは、既に始動されたJUMP命令に干渉する可能性があるため、他のJUMP命令は、これらの4命令サイクル内ではスケジュールされないことがあり得る。また、最初の有効リターンアドレスは、技術的に、JUMP命令を有するVLIW命令のすぐ次のアドレスではなく、このアドレス+4(待機時間が4つである場合)である。
010001:JUMP020000//t=0で実行
010002:・・・ //t=1で実行
010003:・・・ //t=2で実行
010004:・・・ //t=3で実行
010005:・・・ //最初の有効リターン場所
010006:・・・ //コードが継続
020000:・・・ //t=4で実行
別の言い方をすると、VLIWプロセッサへストリームするVLIW命令ワードは、時刻順に以下となる。|010001|010002|010003|010004|020000|020001|020002。ストリームは、継続的であって、中断はない。待機時間は、先験的に知られており、スケジューリングに考慮可能である。本開示では、議論および実施例を明確にするため、メモリ待機時間はゼロであると仮定される。
010002:・・・ //t=1で実行
010003:・・・ //t=2で実行
010004:・・・ //t=3で実行
010005:・・・ //最初の有効リターン場所
010006:・・・ //コードが継続
020000:・・・ //t=4で実行
別の言い方をすると、VLIWプロセッサへストリームするVLIW命令ワードは、時刻順に以下となる。|010001|010002|010003|010004|020000|020001|020002。ストリームは、継続的であって、中断はない。待機時間は、先験的に知られており、スケジューリングに考慮可能である。本開示では、議論および実施例を明確にするため、メモリ待機時間はゼロであると仮定される。
(4.C.スタックレスおよびスタック演算)
簡素化された実施形態では、反復は許されない。したがって、実行ドメインは、一度アクティブになると、再起動は不可能である。これは、記録を大幅に簡素化する。スタック機構および一時データの処理の必要性はない。全変数は、グローバルに(クロックドメイン内で)アクセス可能であって、ジャンプは、自由に行うことが可能である。
簡素化された実施形態では、反復は許されない。したがって、実行ドメインは、一度アクティブになると、再起動は不可能である。これは、記録を大幅に簡素化する。スタック機構および一時データの処理の必要性はない。全変数は、グローバルに(クロックドメイン内で)アクセス可能であって、ジャンプは、自由に行うことが可能である。
また、このアプローチは、ハードコーディングリターンアドレスによって簡素化される。動的にジャンプし、予測されるリターンアドレスを事前ロードせずに、特定の演算(後述される)を除き、全ジャンプアドレスが静的に計算される。これによって、プログラムメモリ121からの「読み込み」モードの維持が可能になり、特定のアプリケーションのために好ましい。
また、所望のリターンアドレスを動的にプッシュする分岐命令も実装可能である。各リターンアドレスは、プログラムカウンタレジスタ内のビット数のみ必要とするため、分岐によって形成されるスタックは、ローカルメモリ内に維持可能である。このメモリは、小さく、例えば、VLIWワードロード420を処理する状態機械内のFIFOとして実装され、PEグリッド外に維持可能である。スタック演算は、さらに後述される。
(4.D.分岐を使用するドメイン実装)
上述のように、より大きなプログラムは、ドメインに分割可能である。ドメインは、分岐を介して、より大きなプログラムに共に「組み立て」可能である。ドメインに侵入する3つの方法は、前方ジャンプ、割り込みジャンプ(side−entrance jump)、およびリターンである。前方ジャンプは、ドメインの最初へのジャンプである。割り込みジャンプは、ドメインの中間へのジャンプである。リターン命令は、割り込みジャンプの特別なケースであって、呼び出しドメインから起動された実行ドメインをこのドメインの起動地点の前(ルーピングの間)または後(分岐の場合)にリターンさせる。
上述のように、より大きなプログラムは、ドメインに分割可能である。ドメインは、分岐を介して、より大きなプログラムに共に「組み立て」可能である。ドメインに侵入する3つの方法は、前方ジャンプ、割り込みジャンプ(side−entrance jump)、およびリターンである。前方ジャンプは、ドメインの最初へのジャンプである。割り込みジャンプは、ドメインの中間へのジャンプである。リターン命令は、割り込みジャンプの特別なケースであって、呼び出しドメインから起動された実行ドメインをこのドメインの起動地点の前(ルーピングの間)または後(分岐の場合)にリターンさせる。
割り込みジャンプは、前方ジャンプよりも幾分複雑である。この特定のアプリケーションでは、スケジューラは、演算を並列にスケジュールしているため、ジャンプ時点で未だ完了していない開始計算(シミュレーションにおける論理コーン)が既にある場合がある。前方ジャンプでは、全一時データ(シフトレジスタ308およびローカルメモリ326の両方内)の状態が既知であるため、計算は継続可能である。実際、複数の前方ジャンプが存在する場合、各前方ジャンプは、これらの並列演算の計算を簡単に継続可能である。
しかしながら、スケジューラが、割り込みジャンプ(または、リターン)をスケジュールする場合、被起動ドメインは、一時データ空間を使用しており、シフトレジスタは、現在、未知の状態にある可能性がある。親ドメインは、いくつのクロックサイクルが経過したか、一時データが有効のままかどうかも分からない場合がある。
あるアプローチでは、スケジューラは、単に一時データを無効にすることによって、親ドメインのための一時データを再ロードし、既にスケジュールされていた並列演算を再計算することになる。ほとんどの変数は、必要な場合のみ、一時ストレージにロードされるため(依存性駆動遅延ローティング)、これは、典型的には、大幅なコストはかからない。これは、実際、スタックがない場合のプロセッサの動作方法に類似する。その事前ロードされたレジスタは、唯一利用可能なものであって、起動される子機能の処理の間、再利用されなければならず、したがって、レジスタのコンテンツは、リターンに応じて無効となり、子機能が完了すると、プロセッサにレジスタの再ロードを要求する。
代替アプローチでは、被起動ドメインは、シフトレジスタからの一時データの除去を許可されない。それらを保存しなければならない。既に使用中のスクラッチパッドの再使用も許可されない。空のスロットを使用しなければならない。これは、通常、被起動ドメインを非制限ドメインよりも若干非効率的にし、より大きなドメインよりも、より小さなドメインに対しより実行可能である。その場合、被起動ドメインは、親ドメインの一時データ空間を妨害しない。単に、被起動ドメインが完了すると、シフトレジスタが残される場所に影響するだけである。次いで、完了後、親ドメインは、子ドメインが起動された時の状態に等しく戻すために必要とされるサイクルだけ、シフトレジスタを回転する。ここで伴う空のサイクルの数は、最大でもシフトレジスタの深度に等しく、無効化ステップよりも効率的であるかもしれないし、またはそうでないかもしれない。
マッピングされるプログラムまたは設計(ネットリスト)に応じて、一方または両方のアプローチが使用可能である。通常、無効化アプローチは、より大きな被起動ドメインに対しより効率的であって、保存アプローチは、より小さな被起動ドメインに対しより効率的である。
第3のアプローチでは、シフトレジスタは、静的レジスタに代替可能である。これは、追加プログラミングビットを必要とするため(PEオペコード218において)、静的レジスタの量は、類似のPEオペコードサイズのためのシフトレジスタの量未満となるであろう。このアプローチは、リターン命令が、より少ない記憶レジスタを代償として、最初の2つのアプローチが必要とする特別な処理を必要としないという利点を有する。
シフトレジスタを使用するアプローチに戻ると、一時変数が保存される場合、スタック機構を実装可能である。VLIWアーキテクチャでは、スタックは、リターンアドレスおよび全ローカル(一時的)変数の両方を維持しなければならないため、多くの一時的値が存在可能であって、したがって、スタックサイズは、かなり大きくなり得る。シフトレジスタ308およびローカルメモリ326を使用して実現可能であるが、これは、特に、起動(または、反復)のより深いレベルに利用可能な空間を制限する。より単純なアプローチでは、スタックプッシュポップ機構を使用して起動されるドメインは、シフトレジスタ308の使用を制限されるであろう。代わりに、それは、スケジューリング効率を制限するだけでなく、スタックのサイズも制限する、メモリ326からロードおよび格納される実際かつ一時変数に直接基づいて動作する。次いで、メモリ326は、新しいデータ空間が、反復の各レベルにおけるローカル(一時的)変数に利用可能となり、スタックに付随するプッシュおよびポップ機構を効果的にサポートするように配列可能である。
実行ドメインの最後は、典型的には、無条件分岐を有するであろう。無条件分岐に先立って、条件付き分岐が使用可能であって、テスト条件に応じて、実行ドメインを2つ以上の異なる場所で継続可能である。実施例が、以下に与えられる(ゼロ待機時間と仮定)。
010122:・・・ // 実行ドメインの最終コード
010123:if(COND1)JUMP020000;//条件付き分岐
010124:if(COND2)JUMP030000;//第2の条件付き分岐
010125:JUMP040000; //無条件分岐
020000:・・・ //COND1の場合、ここへジャンプ
030000:・・・ //COND2かつ!COND1の場合、ここへジャンプ
040000:・・・ //無条件(!COND1かつ!COND2)
(4.E.一部の実施例)
便宜上、反復はなく、グローバル変数のみと仮定する。実施例として、起動される子実行ドメインを使用して、単純なif−then−else構文を検討する。
010123:if(COND1)JUMP020000;//条件付き分岐
010124:if(COND2)JUMP030000;//第2の条件付き分岐
010125:JUMP040000; //無条件分岐
020000:・・・ //COND1の場合、ここへジャンプ
030000:・・・ //COND2かつ!COND1の場合、ここへジャンプ
040000:・・・ //無条件(!COND1かつ!COND2)
(4.E.一部の実施例)
便宜上、反復はなく、グローバル変数のみと仮定する。実施例として、起動される子実行ドメインを使用して、単純なif−then−else構文を検討する。
親実行ドメイン:
010001:if(COND)JUMP020000;//子 実行ドメインへ
010002:・・・ //コード継続、これは、else分岐である
010010:・・・ //else分岐命令の最後
010011:・・・ //割り込み(リターン)アドレス
子実行ドメイン:
020000:・・・ //コード継続、これは、if分岐である
020009:・・・ //if分岐命令の最後
020010:JUMP010011://(すなわち、リターンジャンプ)
任意のアドレス(親または子において、子は、別の子に対する親である)をリターン可能に(すなわち、割り込み指示を提供)するために、ハードウェアサポートは必要ではない。その唯一の含意は、ソフトウェアスケジューラが、このアドレスにおける一時変数のその使用をリセットする、または被起動ドメイン内の一時使用を制限する(または、スタックを使用する)ということである。
010001:if(COND)JUMP020000;//子 実行ドメインへ
010002:・・・ //コード継続、これは、else分岐である
010010:・・・ //else分岐命令の最後
010011:・・・ //割り込み(リターン)アドレス
子実行ドメイン:
020000:・・・ //コード継続、これは、if分岐である
020009:・・・ //if分岐命令の最後
020010:JUMP010011://(すなわち、リターンジャンプ)
任意のアドレス(親または子において、子は、別の子に対する親である)をリターン可能に(すなわち、割り込み指示を提供)するために、ハードウェアサポートは必要ではない。その唯一の含意は、ソフトウェアスケジューラが、このアドレスにおける一時変数のその使用をリセットする、または被起動ドメイン内の一時使用を制限する(または、スタックを使用する)ということである。
以下の代替実施例は、親ドメイン内にマッピングされた同一if−then−elseコードを示し、単一プロセッサスケジューリングに類似するが、VLIWのためのこのケースでは、インライン展開実行ドメインを使用する。
010001:if(COND)JUMP 010040;//if分岐へ条件付きジャンプ
010002:・・・ //コード継続、これは、else分岐である
010038:・・・ //else分岐命令の最後
010039: JUMP010060;//if分岐を越えて、無条件ジャンプ
010040:・・・ //コード継続、これは、if分岐である
010059:・・・ //if分岐命令の最後
010060:・・・ //割り込み場所
類似構文を使用して、ループを実装可能である。
010002:・・・ //コード継続、これは、else分岐である
010038:・・・ //else分岐命令の最後
010039: JUMP010060;//if分岐を越えて、無条件ジャンプ
010040:・・・ //コード継続、これは、if分岐である
010059:・・・ //if分岐命令の最後
010060:・・・ //割り込み場所
類似構文を使用して、ループを実装可能である。
010001:・・・ //ループの最初
010002:if(!COND)JUMP010040;//CONDの場合、ループを抜ける
010003:・・・ //コード継続、これは、ループ本体である
010038:・・・ //ループ本体の最後
010039: JUMP010001;//ループを反復
010040:・・・ //コード継続
(4.F.多重分岐および制御変数解析)
VLIWシミュレーションプロセッサの利点の1つは、VLIW命令ワードが大きいため、多重分岐が単一命令(または、分岐の数よりも少ないいくつかの命令)としてエンコード可能であることである。例えば、一連の条件付き分岐とみなされ得る、ケースステートメントを検討する。
010002:if(!COND)JUMP010040;//CONDの場合、ループを抜ける
010003:・・・ //コード継続、これは、ループ本体である
010038:・・・ //ループ本体の最後
010039: JUMP010001;//ループを反復
010040:・・・ //コード継続
(4.F.多重分岐および制御変数解析)
VLIWシミュレーションプロセッサの利点の1つは、VLIW命令ワードが大きいため、多重分岐が単一命令(または、分岐の数よりも少ないいくつかの命令)としてエンコード可能であることである。例えば、一連の条件付き分岐とみなされ得る、ケースステートメントを検討する。
ケース(a){
0:JUMP ADDR0;//(0)?の場合、ADDR0へ
1:JUMP ADDR1;//(l)?の場合、ADDR1へ
2:JUMP ADDR2;//(2)?の場合、ADDR2へ
3:JUMP ADDR3;//(3)?の場合、ADDR3へ
N:JUMP ADDRN;
}
これは、N個の条件付き分岐命令を必要とする。
0:JUMP ADDR0;//(0)?の場合、ADDR0へ
1:JUMP ADDR1;//(l)?の場合、ADDR1へ
2:JUMP ADDR2;//(2)?の場合、ADDR2へ
3:JUMP ADDR3;//(3)?の場合、ADDR3へ
N:JUMP ADDRN;
}
これは、N個の条件付き分岐命令を必要とする。
多重分岐命令によって、これは、単一命令として実装可能である。
010001:ケース(a):0?ADDR0;1?ADDR1;2?ADDR2;・・・;N?ADDRN;
010002:・・・://次の命令アドレス、例えば、リターンまたは割り込み
各PE302は、オペコードを受信することを想起されたい。条件付き分岐命令のそれぞれは、異なるPE302によって評価可能であるが、評価のすべては、同時に生じ得(すなわち、同一クロックサイクルにおいて)、k個のプロセッサ要素がある場合、k個の並列分岐を可能にする。別様に、並列デコーダは、分岐命令全体をデコードするために使用され、1つのPEだけ除いて全部に対するオペコードを削除することによって、さらに高い効率のビットパッキングを可能にする。
010002:・・・://次の命令アドレス、例えば、リターンまたは割り込み
各PE302は、オペコードを受信することを想起されたい。条件付き分岐命令のそれぞれは、異なるPE302によって評価可能であるが、評価のすべては、同時に生じ得(すなわち、同一クロックサイクルにおいて)、k個のプロセッサ要素がある場合、k個の並列分岐を可能にする。別様に、並列デコーダは、分岐命令全体をデコードするために使用され、1つのPEだけ除いて全部に対するオペコードを削除することによって、さらに高い効率のビットパッキングを可能にする。
多重分岐は、コンパイラに複雑な制御フローグラフを処理させるだけの技術ではなく、実行速度を最適化するために使用可能な技術でもある。つまり、機能は、複数回コンパイル可能であって、各回、異なる仮定を有する。論理シミュレーションでは、変数が低頻度で変化する場合、その関連論理は、毎回計算される必要はない。静的にスケジュールされたVLIW実行では、システムは、サイクルシミュレータとして機能し、自動的に、各サイクルにおいて、全変数を計算する。実行ドメインが、変数は1または0であると仮定可能である場合、ドメイン実行は、この知識に基づいてトリミング可能である。これは、計算ステップの量を低減し、その関連する節約は、膨大となり得る。典型的には、コンパイルの際、その値が一定であることが既知である場合、if−then−elseまたはcaseステートメントを制御する制御変数は、大きな論理計算(論理コーン)を削除可能である。例示的技術は、定数伝搬(Constant Propagation;CP)およびデッドコード削除(Dead Code Elimination;DCE)を含む。特定の変数が一定である場合、50,000サイクルを必要とし得るドメインは、25,000サイクルに低下し得る。
シミュレーションでは、この仮定は成り立たないが、コンパイラは、複数のドメインをスケジュール可能である。例えば、以下の表の3つの変数A、B、およびCを仮定する。
識別番号 A B C サイクル数
0 − − − 65,000
1 FALSE FALSE FALSE 15,000
2 FALSE FALSE TRUE 25,000
3 FALSE TRUE FALSE 50,000
4 FALSE TRUE TRUE 45,000
5 TRUE FALSE FALSE 55,000
6 TRUE FALSE TRUE 42,000
7 TRUE TRUE FALSE 60,000
8 TRUE TRUE TRUE 12,000
さらに、制御変数のための特別な配慮を必要としないドメインは、65,000サイクル(表内の識別番号0)を必要とすると仮定する。
0 − − − 65,000
1 FALSE FALSE FALSE 15,000
2 FALSE FALSE TRUE 25,000
3 FALSE TRUE FALSE 50,000
4 FALSE TRUE TRUE 45,000
5 TRUE FALSE FALSE 55,000
6 TRUE FALSE TRUE 42,000
7 TRUE TRUE FALSE 60,000
8 TRUE TRUE TRUE 12,000
さらに、制御変数のための特別な配慮を必要としないドメインは、65,000サイクル(表内の識別番号0)を必要とすると仮定する。
識別番号1、2、および8が、大幅な節約をもたらすことに留意されたい。実行ドメインを単一65,000サイクルドメインとしてコンパイルするよりも、かつこれを8つの別個のドメイン(各識別番号に対し1つ)としてコンパイルするよりも、コンパイラは、4つの実行ドメイン(0、1、2、および8)を生成し得る。シミュレーション実行の際、表に識別番号1、2、または8としてリストアップされている制御変数の組み合わせが生じる場合、代替実行ドメインを使用して、加速が達成される。すべての他のケースでは、識別番号0(すなわち、非最適化実行ドメイン)は、正確な評価を保証する。
これらのドメインの別の見方は、これらのドメインが、異なる目的のため(かつ動的制御下で)最適化されてもよいことである。例えば、制御は、自己チェックドメイン(アサーション)、またはデバッグドメイン(可視性を生成)をトリガするために使用可能である。制御は、ランタイムでユーザ選択可能であるか、または実行される論理自体内から生成されてもよい。このケースでは、複数のドメイン生成は、加速目的のためではなく、デバッグまたは可視性目的のためである。他の変形例も明白であるだろう。
この技術は、複数の制御変数のために最適化可能である。例えば、16制御変数が分析される場合、65,536の可能性のある代替実行ドメインバリアントが存在することになる。例として、24ビットを必要とするJUMPG(16M VLIWワードのためのPCアドレスを仮定)または16ビットを必要とするJUMPR(上述のように仮定)と結合された、4ビット長の条件評価を使用する最大16制御変数を可能にする。これは、分岐ターゲット当たり4+24=28または4+16=20ビットとなる。特別オーバーロードオペコードは、第1のPE−PE0オーバーロード内の(ハードウェアベース−並列エンジン)条件付き分岐ジャンプ命令をトリガするために使用される。これは、7ビットを使用する。PE命令118当たり40ビットを有する64個のPEを仮定すると、VLIW命令118に対し2560ビットとなる。これは、(2560−7)/28=91のJUMPGまたは(2560−7)/20=127のJUMPRが、単一VLIW命令118にビットパックされることを可能にする。他の変形例も明白であろう。
したがって、65,536の可能性のある代替グループの中、最大91ドメインは、グローバルジャンプを使用して、単一VLIW命令サイクル内で選択可能である(および、相対ジャンプを使用して最大127)。91の実行ドメインに対するプログラムコードは、単一実行ドメインに対するプログラムコードよりも大幅に大きく、したがって、これは、考慮されるべきである。プログラムメモリ121は、かなり大きく、命令ドメインは、プログラムサイズにかかわらず、その全体が利用可能である(コンパイラは、プログラムメモリ121が利用可能な空間を有する限り、より多くの実行ドメインバリアントを生成することによって、実行時間を最適化することが可能である)。これは、ディレーティング対加速のトレードオフを可能にする。所与の速度における容量がより大きいほど、速度が増えると容量がより小さくなる。
(5.複合実行ドメイン)
(5.A.合成不可能タスクおよび分岐)
上述の例外処理および分岐技術は、論理シミュレーションシステムに効率的方法で合成不可能タスクを処理することを可能にする。従来のVLIWプロセッサは、所定の順番で合成可能タスクを計算する際に効率的である。タスクが独立している場合、並列に実行可能である。実行の順番が、コンパイル時に決定可能である(例えば、動的分岐条件に依存しない)場合、タスクは、VLIW計算リソースを最も効率的に使用するために、連続的にスケジュール可能である。
(5.A.合成不可能タスクおよび分岐)
上述の例外処理および分岐技術は、論理シミュレーションシステムに効率的方法で合成不可能タスクを処理することを可能にする。従来のVLIWプロセッサは、所定の順番で合成可能タスクを計算する際に効率的である。タスクが独立している場合、並列に実行可能である。実行の順番が、コンパイル時に決定可能である(例えば、動的分岐条件に依存しない)場合、タスクは、VLIW計算リソースを最も効率的に使用するために、連続的にスケジュール可能である。
しかしながら、従来のVLIWプロセッサは、典型的には、実行の順番がコンパイル時に決定可能でない場合、効率を損なう。ランタイムでの分岐の選択は、命令キャッシュおよび/またはデータキャッシュの消去を必要とし得る。キャッシュが大きい場合、この消去および正確な分岐のための再ロードは、VLIW計算リソースがアイドリングし得る間、相当数のサイクルを要する場合がある。さらに、合成不可能タスクの導入は、さらに効率を低下させる。あるケースでは、従来のVLIWアーキテクチャは、単に、合成不可能タスクを処理しない。他のケースでは、合成不可能タスクは、VLIWプロセッサ要素以外のリソースによって完了される。しかしながら、合成可能タスクおよび合成不可能タスクの混合は、VLIWプロセッサ要素と非VLIWプロセッサリソースとの間の通信および連携を必要とし、これは、大幅な待機時間を有する可能性がある。さらに、VLIWプロセッサが、合成不可能タスクからの結果を待機する間、アイドリング状態でなければならない場合、さらなる非効率性が導入され得る。
対照的に、上述のVLIW実装では、分岐および合成不可能タスクの両方が、効率的に処理可能である。分岐に対し、プログラム全体は、ドメインに分割可能であり、上述のように、ドメイン内の効率的VLIW計算と、ドメイン間(または、同一ドメイン内の異なる場所間でも)の効率的分岐とを有する。このケースでは、命令キャッシュがないため、命令キャッシュの消去等、従来の非効率性は回避される。ドメイン内では、合成不可能タスクは、上述のように、非効率的方法での合成不可能タスクの処理をVLIWプロセッサ要素に強制するか、または合成不可能タスクの実行を単にサポートしないのとは対照的に、例外ハンドラによって効率的に実装可能である。例外ハンドラは、実行にある程度の時間を要する(例えば、メモリ待機時間に応じて)が、この時間は、先験的に(すなわち、コンパイル時間において)計算可能である場合が多く、したがって、VLIWプロセッサのアイドリングが低減または削減されるように、タスクのスケジューリングに考慮される。加えて、上述のアーキテクチャおよびアプローチは、VLIWプロセッサ要素と非VLIWプロセッサリソースとの間の連携に必要とされるオーバーヘッドも低減する。
(5.B.例示的実行ドメイン)
図6は、実行ドメインの例示的構成を示す略図である。この実施例は、種々の特性を示すために選択されている。トップレベルのドメインは、制御ドメイン600である。制御ドメイン600は、START COUNTへの前方ジャンプ(割り込みジャンプではなく)を有する親実行ドメイン610を起動602する。次いで、親実行ドメイン610での分岐(条件付きまたは無条件)は、実行ドメイン620への前方ジャンプであるアドレスJUMP1へジャンプ612する。同様に、別の分岐は、アドレスJUMP2(実行ドメイン630)への別の前方ジャンプ622を行う。
図6は、実行ドメインの例示的構成を示す略図である。この実施例は、種々の特性を示すために選択されている。トップレベルのドメインは、制御ドメイン600である。制御ドメイン600は、START COUNTへの前方ジャンプ(割り込みジャンプではなく)を有する親実行ドメイン610を起動602する。次いで、親実行ドメイン610での分岐(条件付きまたは無条件)は、実行ドメイン620への前方ジャンプであるアドレスJUMP1へジャンプ612する。同様に、別の分岐は、アドレスJUMP2(実行ドメイン630)への別の前方ジャンプ622を行う。
例外ハンドラ640は、実行ドメイン630内で始動632される。例外ハンドラ640は、行動プリミティブまたは内蔵行動のいずれかであることが可能である。いずれのケースでも、例外ハンドラ640は、例外ハンドラの行動待機時間である実行633のための一定の時間を要する。この待機時間は、典型的には、リターン634の最早時間もまた、推測および適切にスケジュール可能なように、コンパイル時間で推測可能である。その間、計算リソースが効率的に使用されるように、実行ドメイン630は、VLIWプロセッサにタスクの実行635を継続させることが可能である(場合によって、他の例外ハンドラの始動を含む)。VLIWシミュレーションプロセッサは、例外ハンドラの実行633と並列で実行635可能であることに留意されたい。
この実施例では、実行ドメイン630は、実行ドメイン620内のADDR3にリターン624することによって終了する。実行ドメイン630のデフォルト終了は、JUMP4(実行ドメイン650B)への無条件分岐626である。実行ドメイン620は、実行ドメイン610のADDR1へリターン614する。
実行ドメイン610内に示される別の特性は、コード複製として知られる代替実行ドメインである。このケースでは、親610は、2つの条件付きジャンプを有し、1つはバリアント650Aへ、1つはバリアント650Bへである。2つの実行ドメイン650Aおよび650Bは、プログラムまたは設計(ネットリスト)の同一領域をマッピングしているが、異なる行動(例えば、上述のセクション4.F.参照)のために最適化される。例えば、1つのドメイン650は、デバッグルーチン($display active)を有する、または他のドメインがこれを回避し得る間、アサーションを使用してもよい。この特性の別の使用は、上述のように、状態依存最適化を有効にすることである。別の実施例は、バス信号上での大幅な多重化である。バリアント650Aは、特定の条件を考慮して、マルチプレクサを除去(デッドコード削除;DCE)するように最適化され得る。条件が一致しない場合、バリアントBは、実行される正確なドメインである。スイッチングが、動的に生じ、追加性能改良を可能にする。いずれのドメインが実行されるかの制御は、「if(式)」を使用して行われることが可能であって、式は、データが動的に取得可能な任意の方法であることが可能である。この実施例では、バリアント650Aおよび650Bの両方が、ドメイン610内のADDR2へリターンする。
ドメイン650B内に示される別の特性は、前方スキップ652である。これは、ジャンプしなければ実行される必要があるコードをスキップするドメイン内のジャンプである(例えば、「if(!cond)jump SKIP;」、これは「if(cond)execute if−body;」に等しい)。これは、コードのインライニングと称される場合が多い。VLIWアーキテクチャは、JUMP命令を使用する単一プロセッサのために存在するものと類似する機構をサポート可能である。これは、使用方法が制限されないことを強調する、割り込みジャンプの別の形式である。
図7A〜7Dは、種々の特性の追加実施例を提供する。図7Aは、高度な行動待機時間の例外ハンドラについて詳述する。例外ハンドラを始動した同じ実行ドメインが、データを抽出することは必要条件ではない。図7Aでは、ドメイン710は、例外ハンドラ712を始動し、ドメイン718が、結果を受信する。一部の例示的例外ハンドラは、例えば、$display()または$mem_write()演算等の抽出(GetData)構成要素を有していない。$mem_read()または$readmemh()等の他のものは、有している。有している場合、データ抽出は、準備ができるとスケジュール可能であって、まさに異なる実行ドメイン内にある場合がある。ソフトウェアスケジューラは、データ抽出構成要素を有する既に始動された全要求を記録し、その行動待機時間と一致させてスケジュールする。この特性は、より大きな実行ドメインを生成する際に強固な構成要素であって、VLIWスケジューリングの際のより高い効率命令レベル並列度のために好ましい。
図7Bは、割り込み/リターン機構について詳述する。分岐722は、ドメイン720から始動される。しかしながら、リターンは、直ぐ次のアドレスへではない。むしろ、リターン724は、後のアドレス(ADDRフィールド)へである。これは、スケジューラの柔軟性を強調し、さらに別のif−then−else構文を示す。if分岐は、アドレスJUMP1へジャンプ722し、例外ハンドラをスケジュールし、アドレスADDRへリターン724する。else分岐は、JUMP1へジャンプしない。むしろ、親ドメイン720内で計算726を継続する。この構造は、複数のコンピュータを使用して並列にスケジュール(コンパイル)可能である(階層的スケジューリング)より大きなドメインに対し有用である。
図7Cは、類似構文を示すが、次にルーピングに適用される。ループテストは、条件付き分岐である。!CONDの場合、実行は、JUMP1へジャンプ732する。そうでなければ、ループは完了し、実行は、ドメイン730の残りを継続する。
図7Dは、コード複製について詳述する。この実施例では、ドメイン740は、例外ハンドラ742を起動する。実行は、ドメイン740、次いで、ドメイン744、次いで、ドメインバリアント746Aまたは746B内で並列に継続される。このケースでは、バリアント746Aおよび746Bの両方が、例外ハンドラからのデータ抽出に依存する。両方とも抽出命令をスケジュールし、行動待機時間を観測する。このケースでは、746Aまたは746Bのいずれも、インライン展開ではない。例外ハンドラ742の使用は、このタスクを実行ドメイン746A/Bから分離させる。
(5.C.例示的クロックドメイン構成)
図3を参照すると、図3は、クロックドメインがプログラムメモリ121内で構成される方法を示す。図8は、実行ドメインがクロックドメイン内で構成される方法を示す。図3の右側に示されるクロックドメイン構成は、図8の中間に復元される。図8の右側は、クロックドメインCKNが実行ドメインに分割される方法を示す。ドメインTは、トップ実行ドメイン、すなわち、制御ドメインCDから起動される第1のドメインである。ドメインA〜Fは、他の実行ドメインである。制御ドメインは、複数の実行ドメインを起動し得ることに留意されたい。各実行ドメインが、単一トップドメインに制限される必要はない。
図3を参照すると、図3は、クロックドメインがプログラムメモリ121内で構成される方法を示す。図8は、実行ドメインがクロックドメイン内で構成される方法を示す。図3の右側に示されるクロックドメイン構成は、図8の中間に復元される。図8の右側は、クロックドメインCKNが実行ドメインに分割される方法を示す。ドメインTは、トップ実行ドメイン、すなわち、制御ドメインCDから起動される第1のドメインである。ドメインA〜Fは、他の実行ドメインである。制御ドメインは、複数の実行ドメインを起動し得ることに留意されたい。各実行ドメインが、単一トップドメインに制限される必要はない。
また、図8は、CKN命令ドメインが再配置され得る方法を示す。CKNドメイン内の全JUMP命令が相対的であって、調節が必要ないと仮定する。CKNドメイン外へのJUMP命令(JUMPG)のみ、再計算される必要がある。これは、コード再使用に対し有用である。回路設計のためのシミュレーションに関連し、これは、回路設計が複数回使用される場合、対応する実行ドメインもまた、再使用可能であるため有益である。さらに、実行ドメインは、再使用に応じて再コンパイルされる必要はなく、したがって、暗号化および保護可能である。
また、図8は、実行ドメインS1〜S8を有するグローバルな性質である共有ライブラリを示す。例えば、このライブラリは、実行ドメインとして実行可能な事前コンパイルされた例外ハンドラを含むことが可能である。通常、これらは、スケジューラ、または事前選択値およびアドレスをダンプするために使用可能であるため、ランタイムをデバッグする際に使用される。便宜上、NEXT_ADDRで示される単一アドレスは、共有機能のそれぞれのジャンプ先を反映する。クロックドメインCKN内の特定のアドレスへリターンするために、このアドレスNEXT_ADDRは、所望のリターンアドレスで上書きされる。この特定の実施例では、1つだけがアクティブであり得るため、この構造は、共有モジュールの各グループに対し繰り返されることに留意されたい。複数モジュールは、同時にアクティブである必要がある場合、構成可能である。
さらに、NEXT_ADDRフィールドは、オフチップメモリ(プログラムメモリ121)ではなく、オンチップメモリ内に格納可能である。これは、非効率的となり得る、実行の際のプログラムメモリ121内への書き込みの必要性を回避する。これは、間接ジャンプと称される。間接ジャンプの処理は、PE命令ではなく、VLIW状態機械コントローラを介して行われる。NEXT_ADDRフィールドは、状態機械をトリガし、オンチップメモリから実際の次のアドレスをルックアップする予約アドレスである。実際の次のアドレスは、自動的またはプログラムによって書き込まれる。自動的とは、S1〜S8ドメインを起動する際に、プログラムカウンタメモリ内の次のアドレスが自動的にオンチップメモリ内に格納されることを意味する。プログラムによってとは、プログラム命令下行われることを意味する。例えば、新しい特別な「オーバーロード」PE命令は、コンパイラ生成アドレス(グローバルまたは相対)をこのオンチップメモリ内に格納するように追加可能である。自動的方法は、自動的ジャンプ−リターンを可能にし、プログラム的方法は、ジャンプアドレスを継続のために選択可能にする。
(6.VLIWコンパイルおよびスケジューリング)
(6.A.概要)
VLIWスケジューリングは、周期的または非周期的に行うことが可能である。周期的スケジューラは、プログラム内のループ上で動作し、非周期的スケジューラは、ループフリー領域上で動作する。領域は、最初から侵入可能な実行ドメインのグループであって、従来のVLIWアーキテクチャと異なり、本アーキテクチャは、領域への割り込みも可能である。「リターン」ステートメント(すなわち、割り込みを使用した領域内のルーピング)もまた、VLIWアーキテクチャから生じ、スケジュールされたプログラム(または、ネットリスト)からは生じない特定の制限下において可能である。領域形成は、スケジューリングの効率に影響を及ぼす。コンパイラ技術は、領域を拡張するために使用可能であって、それは、概して、より効率的スケジューリングとなる。例えば、「ループ展開」と呼ばれる技術は、プログラム内のループをループフリー領域に変換するために適用可能であって、非周期的スケジューラのループ上での動作を可能にする。本アーキテクチャは、概して、任意の領域サイズを可能にし、これは、論理シミュレーションおよび一般的プログラミングアプリケーション(以下のセクション9参照)の両方に対し大きな利点である。
(6.A.概要)
VLIWスケジューリングは、周期的または非周期的に行うことが可能である。周期的スケジューラは、プログラム内のループ上で動作し、非周期的スケジューラは、ループフリー領域上で動作する。領域は、最初から侵入可能な実行ドメインのグループであって、従来のVLIWアーキテクチャと異なり、本アーキテクチャは、領域への割り込みも可能である。「リターン」ステートメント(すなわち、割り込みを使用した領域内のルーピング)もまた、VLIWアーキテクチャから生じ、スケジュールされたプログラム(または、ネットリスト)からは生じない特定の制限下において可能である。領域形成は、スケジューリングの効率に影響を及ぼす。コンパイラ技術は、領域を拡張するために使用可能であって、それは、概して、より効率的スケジューリングとなる。例えば、「ループ展開」と呼ばれる技術は、プログラム内のループをループフリー領域に変換するために適用可能であって、非周期的スケジューラのループ上での動作を可能にする。本アーキテクチャは、概して、任意の領域サイズを可能にし、これは、論理シミュレーションおよび一般的プログラミングアプリケーション(以下のセクション9参照)の両方に対し大きな利点である。
図9に示されるように、VLIWスケジューリングは、概して、領域形成910およびスケジュール構成920のステップを含む。領域形成910は、プログラム/設計を領域に分割912するステップと、領域内の命令の実行を並列化914するステップとを含む。スケジュール構成920は、領域のためのスケジューリングを圧縮922(すなわち、プログラム/設計をスケジューリング)するステップと、プログラム/設計内の領域を接続924(すなわち、制御論理を追加)するステップとを含む。
従来のVLIWスケジューリングでは、共通領域は、以下を含む。「基本ブロック」は、単一入口、単一出口、分岐のないブロックである。プログラムは、最初から侵入し、最後に終了し、分岐は許容されない。「トレース」は、可能な限り多くのコードを展開し、最も生じる可能性のある分岐をとることによって、形成される単一入口、単一出口ブロックである。「スーパーブロック」は、単一入口、複数出口、内部分岐のない(すなわち、ルーピング)ブロックである。プログラムは、最初から侵入し、ブロックの最後に最初にジャンプして戻ることが可能であって、スーパーブロック外の分岐を可能にする。「ハイパーブロック」は、単一入口、複数出口、内部分岐可能ブロックである。本質的に、内部分岐制御を有するスーパーブロックは、通常、if変換を使用する(論理マッピングでは、これは、マルチプレクサに供給するコーンが大きくない限り、ほとんどのマルチプレクサ論理がマッピングされる方法である)。「ツリー領域(treegion)」は、単一入口、複数出口、内部分岐可能ブロックである。各ツリー領域は、各基本ブロッが、領域内に正確に1つの先行オペレーションを有する特性を有する、基本ブロックの集合として識別される。これは、スーパーブロック内に形成するツリー領域を通る任意のパスとなる(割り込みなし)。「末尾複製」もまた、割り込みを回避するための一般的拡張技術である。
しかしながら、上述のVLIWアプローチに、2つの追加特性(領域内への割り込みジャンプおよび例外ハンドラ)が導入される。その結果、領域を生成する能力は、上述のVLIW領域の共通セットに制限されない。これらの2つの追加特性のため、効率は、従来のVLIW領域形成およびスケジューリング技術と比較して、大幅に向上可能である。
従来のVLIWでは、領域が形成されると、各領域は、ILP(命令レベル並列度)のためにスケジュールされる。複製領域が存在してもよく(末尾複製)、または領域は、if変換技術を使用して形成されてもよい。しかしながら、本アーキテクチャでは、領域フォーマッタは、従来のVLIWよりも優れた柔軟性を有し得る。本質的に、領域形成は、スケジュール命令と制御命令との間のトレードオフを生じさせている。図6〜7を参照すると、スケジュール命令は、実行ドメインとして視覚化可能であって、制御命令は、種々のジャンプ命令(if−then−else、case、for、while等)として視覚化可能である。
従来のVLIWスケジューリングでは、制御命令は、領域を複数のより小さな領域(例えば、キャッシュコヒーレンス問題を回避するため)に分割させる。しかしながら、概して、VLIWスケジューリングのための計算効率を向上させるために、領域のサイズを増加させることが望ましい。対照的に、本アーキテクチャ下では、VLIWプロセッサは、オフチップメモリから直接各命令を読み込む。命令キャッシュが(したがって、キャッシュコヒーレンス問題も)削除されているため、これは、ほとんどコストをかけずに、1つの実行ドメインから別の実行ドメインへのジャンプのスケジューリングを可能にする。言い換えると、VLIW効率は、実行ドメインのサイズにそれほど依存していない。領域は、多くの実行ドメインから成ることが可能である。このケースでは、実行ドメインを通過するパスであるトレースは、動的制御下、偶然作動されるトレースのみ実行するために動的に調節可能である。すべての他のトレースは、実行されない。
従来のトレースベースのVLIWスケジューリングは、予測されたトレースが実行される場合効率的であるが、予測されないトレースが使用される場合非効率的である。トレースが10個のif−then−else決定点を含み、各決定が、90%のyesの可能性および10%のnoの可能性を有する場合、連続して10個のyesトレースの統計的可能性は、(0.9)10のみ、すなわち35%である。発生の統計的可能性は低いが、他の可能性のあるトレースのそれぞれのためのトレースを複製するために、末尾複製が必要とされ、末尾複製の各レベルに対しほぼ2倍に命令コードを増加させ得、コードオーバーヘッドが大きくなる。対照的に、本VLIWアーキテクチャでは、各if−then−elseトレースは、結合され、コード複製および実行オーバーヘッドがなく、正確なシーケンスを提供可能である。ジャンプの効率的実装は、前述の従来の技術に制限された領域(トレース、スーパーブロック、ハイパーブロック、ツリー領域)を生成する必要性をなくす。
(6.B.領域拡大)
VLIW効率は、領域のサイズに関連するため、領域拡張技術は、好ましくは、領域のサイズを増加させるために使用される。そのような技術の1つは、ループ展開であって、本質的に、ループ本体をインライン展開する。別のそのような技術は、トレーススケジューリングであって、ほとんどの一般的トレースは、事前計算され、事前計算されたトレースのそれぞれのためのループフリー領域となる。これは、これらのトレースに対しより高速実行を可能にする。「一般的」領域は、(「他のトレースすべて」に対し)より低速で実行する可能性のある、より煩雑なループ起動スケジューリングを処理する。これは、小さなスケール基準およびより大きなスケール基準の両方に基づいて行われ得る。別のそのような技術は、末尾複製であって、領域は、類似の結末を共有するトレースを有する。このケースでは、エンドコードは共有され、末尾に必要とされるコードのみ要求される。If変換は、if−then−elseの両方の分岐が評価され、結果の1つだけが前へ進められる技術であるが、今や、静的にスケジュール可能である。これは、余剰(不必要)計算時間を代償にして、可能性のある分岐の数を低減する。
VLIW効率は、領域のサイズに関連するため、領域拡張技術は、好ましくは、領域のサイズを増加させるために使用される。そのような技術の1つは、ループ展開であって、本質的に、ループ本体をインライン展開する。別のそのような技術は、トレーススケジューリングであって、ほとんどの一般的トレースは、事前計算され、事前計算されたトレースのそれぞれのためのループフリー領域となる。これは、これらのトレースに対しより高速実行を可能にする。「一般的」領域は、(「他のトレースすべて」に対し)より低速で実行する可能性のある、より煩雑なループ起動スケジューリングを処理する。これは、小さなスケール基準およびより大きなスケール基準の両方に基づいて行われ得る。別のそのような技術は、末尾複製であって、領域は、類似の結末を共有するトレースを有する。このケースでは、エンドコードは共有され、末尾に必要とされるコードのみ要求される。If変換は、if−then−elseの両方の分岐が評価され、結果の1つだけが前へ進められる技術であるが、今や、静的にスケジュール可能である。これは、余剰(不必要)計算時間を代償にして、可能性のある分岐の数を低減する。
しかしながら、従来のVLIWスケジューリングに必ずしも適用可能ではない他の領域拡張技術が、VLIWプロセッサ内の処理要素の数の増加に応じて使用可能である。概して、拡張技術は、ループ展開等のより高いVLIW効率を可能にする。しかしながら、多数のプロセッサの場合、ifまたはelseの実行ドメインへジャンプ(制御フローマッピング)せず、if−then−else構文(If変換)の両式を計算する方が良い場合がある。あるケースでは、基本ブロックジャンプおよび分岐がスケジュールされた場合、VLIWプロセッサの完全効率は、達成されない場合がある。
拡張技術の3つの特定の実施例は、ループアンフォールディング、if−then−else変換、および例外ハンドラである。ループアンフォールディングは、ループ展開のより一般的ケースである。ループ展開は、直接的であるが、全変数が既知およびバインドされる場合のみ可能である。これが当てはまらない場合、ループは、依然として、より複雑なスキームを使用してアンフォールド可能である。実施例は、ループピーリング、ループアンフォールディング、準不変/指標変数、およびアンフォールディング因子を含む。
If−then−else変換は、両方の応答の実行と、その後の所望の1つの選択である。チップ論理では、これは、MUX演算子と称され、2つの入力は、if−およびelse−分岐として見られる。セレクタは、どの値をとるか選択する。
例外ハンドラに対し、実行ドメインは、その後処理される結果を生成する例外(BPまたはEB)を始動可能である。この技術では、そのようなデータは、異なる実行ドメイン内で抽出可能であって、これは、VLIWスケジュールを簡素化し、制御フローグラフ(Control Flow Graph;CFG)を低減するための強力な方法である。
多重ジャンプは、ケースステートメントを制御ステートメントに変換(逆もまた同様)するために使用可能なケースステートメントのための特定のBPである。合成可能構文内のケースステートメントは、合成(アンフォールド)され、単一実行ドメイン内で完全に実行され得る。ケースステートメントを制御ステートメントとして処理する利点は、コンパイラが、種々のケース評価実行ドメインを独立にスケジュールすることを可能にし、したがって、評価が必要な実行ドメインのみアクティブとなる。したがって、性能が向上する。ケースステートメントをアンフォールドされた実行ドメインとして処理する利点は、ケースステートメント論理が、他の論理と重ねてスケジュール可能であって、特別な処理を必要としないことである。当然ながら、このソリューションでは、アクティブなものだけではなく、可能性のある全ケースが評価される。アクティブなものは、受信論理内へと前方へ伝搬される。コンパイラは、ケースのそれぞれのサイズを分析し、大きい場合、多重ジャンプを支持し、小さい場合、展開アプローチを支持する。
この説明は、コンパイラが恣意的な領域を生成可能であることを示す。コンパイラは、好ましくは、制御挿入(JUMP)および削除(アンフォールディング)を可能にし、サイドからのドメインへの侵入(NEXT ADDR、SKIP ADDR)を可能にし、オーバーヘッドがゼロまたはほとんどない、条件付き分岐(単一サイクル「if(式)」評価)を可能にし、可変待機時間演算子をスケジュール、低速インターフェース(例えば、ファイルI/O)にアクセスするため、またはそうでなければ展開できないコードを簡単に処理するために使用可能な可変種の例外ハンドラを可能にする選択肢を有する。
(6.C.動的条件を含む、インライン展開、起動、または展開)
典型的には、大きい並列演算が起動されるのに対し、小さい演算は展開される。展開された演算は、全体VLIW効率を向上(ループ展開)し得るし、低減(If変換:余剰な不必要演算がスケジュールされ得る)もし得るが、これは、より大きな領域を生成することによって、VLIWパッキングが増加するという点において補償される。以下は、共通コード構造の実施例である。
典型的には、大きい並列演算が起動されるのに対し、小さい演算は展開される。展開された演算は、全体VLIW効率を向上(ループ展開)し得るし、低減(If変換:余剰な不必要演算がスケジュールされ得る)もし得るが、これは、より大きな領域を生成することによって、VLIWパッキングが増加するという点において補償される。以下は、共通コード構造の実施例である。
関数A(var,i){
for(;i<10;i++) //iは動的、静的に未知
var=関数B(var); //サブルーチンコール
}
関数B(b){ //サブルーチン関数
b=b*2;
return b; //関数Bの本体
}
言語およびアプリケーションに応じて、サブルーチンの本体は、例えば、長い論理(64ビット、128ビット)および複素演算のための大きい実行ブロックを生成可能である。
for(;i<10;i++) //iは動的、静的に未知
var=関数B(var); //サブルーチンコール
}
関数B(b){ //サブルーチン関数
b=b*2;
return b; //関数Bの本体
}
言語およびアプリケーションに応じて、サブルーチンの本体は、例えば、長い論理(64ビット、128ビット)および複素演算のための大きい実行ブロックを生成可能である。
ルーピングを起動するインライン展開コードは、実行ドメイン内でジャンプを使用するが、サブルーチンジャンプは、回避可能である。上述の実施例は、以下のようにインライン展開可能である。
関数A(var,i){
for(;i<10;i++)
var=var*2; //機能Bのコンテンツ(本体)
}
インライン展開は、ジャンピング(ルーピング)を解決しないが、関数呼び出しをサブルーチンの本体に代えることによって、サブルーチンコールを回避する。そうすることによって、コードを拡大するが、関数スタックコールを回避する。コードおよびアプリケーションに応じて、これは、好ましいトレードオフを有し得る。以下は、別のインライン展開実施例である。左側の数は、PC(プログラムカウンタ)レジスタのメモリアドレスであると仮定される。コメントは、右側に提供される。
for(;i<10;i++)
var=var*2; //機能Bのコンテンツ(本体)
}
インライン展開は、ジャンピング(ルーピング)を解決しないが、関数呼び出しをサブルーチンの本体に代えることによって、サブルーチンコールを回避する。そうすることによって、コードを拡大するが、関数スタックコールを回避する。コードおよびアプリケーションに応じて、これは、好ましいトレードオフを有し得る。以下は、別のインライン展開実施例である。左側の数は、PC(プログラムカウンタ)レジスタのメモリアドレスであると仮定される。コメントは、右側に提供される。
010000: //前のコードブロック
010001:if(i>=10)JUMP010005; //割り込みアドレス、エンドループのためのテスト
010002:var=var*2; //関数B実行ドメインコード
010003:i=i+1; //変数iをアップデート
010004:JUMP010001; //終了:割り込み場所へのジャンプ
010005:・・・ //コード継続、ループ完了
このアプローチは、関数Bへのコールを完全に削除するが、分岐を削除しない。forループ実行は、依然として、分岐命令を必要とする。変数iがコンパイル時間において未知である(動的変数)という事実は、制限ではなく、アドレス010001および010004の両方におけるJUMPを必要とし、iが既知である場合、JUMPはアドレス010004においてだけ必要とされ得るということに留意されたい。同様に、終了条件(このケースでは10)もまた、動的である場合、コード実施例は、終了条件が、本体の実行の際に変化を受ける場合でも、依然として、適合するであろう。
010001:if(i>=10)JUMP010005; //割り込みアドレス、エンドループのためのテスト
010002:var=var*2; //関数B実行ドメインコード
010003:i=i+1; //変数iをアップデート
010004:JUMP010001; //終了:割り込み場所へのジャンプ
010005:・・・ //コード継続、ループ完了
このアプローチは、関数Bへのコールを完全に削除するが、分岐を削除しない。forループ実行は、依然として、分岐命令を必要とする。変数iがコンパイル時間において未知である(動的変数)という事実は、制限ではなく、アドレス010001および010004の両方におけるJUMPを必要とし、iが既知である場合、JUMPはアドレス010004においてだけ必要とされ得るということに留意されたい。同様に、終了条件(このケースでは10)もまた、動的である場合、コード実施例は、終了条件が、本体の実行の際に変化を受ける場合でも、依然として、適合するであろう。
展開コードは、完全に拡張されるコードである。ループの展開は、いくつの反復が存在するか静的に(すなわち、コンパイル時において)判断可能な場合のみ可能である。提供される実施例では(iは動的である)、ループは、展開不可能である。しかしながら、iが関数A内で代入される、例えば、
i=0;
である場合、有界ループが存在する。for(i=0;i<10;i++)は、正確に10回実行される(静的に判断される)。コードは、展開可能であって、これは、関数の本体は、正確に10回インスタンスが作成されることになる。以下に示されるように、代入var=var*2の10のインスタンスがある。これは、典型的には、合成またはソフトウェアコンパイラ技術である。
i=0;
である場合、有界ループが存在する。for(i=0;i<10;i++)は、正確に10回実行される(静的に判断される)。コードは、展開可能であって、これは、関数の本体は、正確に10回インスタンスが作成されることになる。以下に示されるように、代入var=var*2の10のインスタンスがある。これは、典型的には、合成またはソフトウェアコンパイラ技術である。
200000:var=var*2;//i=0
200001:var=var*2;//i=1
200002:var=var*2;//i=2
200003:var=var*2;//i=3
200004:var=var*2;//i=4
200005:var=var*2;//i=5
200006:var=var*2;//i=6
200007:var=var*2;//i=7
200008:var=var*2;//i=8
200010:var=var*2;//i=9
200011: … //ここでコードは継続:JUMPはない
概して、展開されたコードは、被起動コードよりも高速実行時間をもたらす。増加した命令サイズを代償にして、制御評価を回避する。コンパイラは、好ましくは、命令サイズと制御評価時間との比率を分析する。典型的には、命令サイズが大きくなるほど、起動はより有利に働き、逆もまた同様であって、小命令コードセグメントは、制御演算を回避するように単に展開可され得る。
200001:var=var*2;//i=1
200002:var=var*2;//i=2
200003:var=var*2;//i=3
200004:var=var*2;//i=4
200005:var=var*2;//i=5
200006:var=var*2;//i=6
200007:var=var*2;//i=7
200008:var=var*2;//i=8
200010:var=var*2;//i=9
200011: … //ここでコードは継続:JUMPはない
概して、展開されたコードは、被起動コードよりも高速実行時間をもたらす。増加した命令サイズを代償にして、制御評価を回避する。コンパイラは、好ましくは、命令サイズと制御評価時間との比率を分析する。典型的には、命令サイズが大きくなるほど、起動はより有利に働き、逆もまた同様であって、小命令コードセグメントは、制御演算を回避するように単に展開可され得る。
展開されたコードは、特定の動的条件を処理するための条件チェックと組み合わせ可能である。これは、典型的には、合成を使用する際に、シミュレーション加速において行われる。すべての展開された分岐が実行されるが、動的制御が、結果を分解するために使用される。上述の実施例は、以下のように実装され得る。
if(i<0)
ERROR−i<0のケースに対応できない;//本実施例の場合
if(i<l) //i=0;
var=var*2
if(i<2) //i=l;
var=var*2
if(i<3) //i=2;
var=var*2
if(i<4) //i=3;
var=var*2
if(i<5) //i=4;
var=var2
if(i<6) //i=5;
var=var*2
if(i<7) //i=6;
var=var*2
if(i<8) //i=7;
var=var*2
if(i<9) //i=8;
var=var*2
if(i<10) //i=9;
var=var*2
本実施例は、0以上であるiの動的値に対し正しい。シミュレーション加速では、合成は、すべての本体を合成し、これらは、常に実行される。フローは、所望の結果を得るために、順に多重化することによって処理される。全分岐が常に実行されるため、分岐内に含まれる状態機械情報が維持不可能であることは明白であるはずである。状態機械は、本体が実行される場合のみアップデートされるはずである。これは、行動コードを効率的に処理できないため、合成されたアプローチの別の制限となる。合成は、理論的には、論理をさらに追加することによって、行動状態機械を処理可能であるが、これは、典型的には、論理の過量を代償にすることになる。
ERROR−i<0のケースに対応できない;//本実施例の場合
if(i<l) //i=0;
var=var*2
if(i<2) //i=l;
var=var*2
if(i<3) //i=2;
var=var*2
if(i<4) //i=3;
var=var*2
if(i<5) //i=4;
var=var2
if(i<6) //i=5;
var=var*2
if(i<7) //i=6;
var=var*2
if(i<8) //i=7;
var=var*2
if(i<9) //i=8;
var=var*2
if(i<10) //i=9;
var=var*2
本実施例は、0以上であるiの動的値に対し正しい。シミュレーション加速では、合成は、すべての本体を合成し、これらは、常に実行される。フローは、所望の結果を得るために、順に多重化することによって処理される。全分岐が常に実行されるため、分岐内に含まれる状態機械情報が維持不可能であることは明白であるはずである。状態機械は、本体が実行される場合のみアップデートされるはずである。これは、行動コードを効率的に処理できないため、合成されたアプローチの別の制限となる。合成は、理論的には、論理をさらに追加することによって、行動状態機械を処理可能であるが、これは、典型的には、論理の過量を代償にすることになる。
概して、展開は、以下の条件下において好ましい。1)ループパラメータ(開始および終了)が、静的に判断可能である(コンパイル時において)、2)ループの本体は、現在の関数(範囲)内で拡張可能である、3)スケジュールされたコード量は、スケジューリング制限内にある。合成技術は、典型的には、展開技術をループに適用し、したがって、これらの制限を受けることに留意されたい。
被起動コードは、別の実行ドメインへのジャンプを使用して実行されるコードである。呼び出しサブルーチン関数Bを呼び出す関数Aの我々の実施例では、通常プログラミングにおける関数Bのコールは、通常、スタック(プッシュ/ポップ)を使用して実装される。本アーキテクチャでは、これは、ジャンプとして処理可能であって、スタック演算は、典型的には、回避される(小関数に対し不必要オーバーヘッドとみなされ、より大きな関数に対しては、スタック機構が利用可能である)。if−then−elseおよびルーピング構文の両方が、インライン展開または起動可能である。好ましい実施形態におけるその区別は、スケジューラに大幅に依存する。構文が、単一プログラムによってスケジュールされる場合、割り込み命令が回避可能であるため、インライン展開が、通常、好ましい。子実行ドメインが、別個のプログラム(例えば、階層的コンパイルアプローチを使用する第2のCPU)によってスケジュールされる場合、起動が好ましい。単に、メモリ121におけるコード配列である。起動は、通常、コードの本体がスタックされることを必要とし、インライン展開は、通常、オンザフライで行うことが可能である。インライン展開されたコードおよび被起動コードの実施例は、上述のセクション4.E.で提供された。インライン展開または起動のいずれも、展開コードの制限を受けないことに留意されたい。したがって、「合成不可能」とみなされるシミュレーションにおける構文に適用可能である。
次に、以下の一般的実施例を検討する。
for(i=START;i<END;i++)body(i);
N_ITER=反復数(N_ITER=END−START、END>=STARTと仮定)およびSIZE_OF_BODY=本体のサイズとする。
N_ITER=反復数(N_ITER=END−START、END>=STARTと仮定)およびSIZE_OF_BODY=本体のサイズとする。
N_ITERが、静的(すなわち、コンパイル時において判断可能)である場合、したがって、反復数は、あらかじめ既知である。このケースでは、本体は、展開されたものとして実装可能であって、展開されたコードのサイズは、SIZE_UNROLLED=N_ITER*SIZE_OF_BODYとして計算可能である。加えて、N_ITERが静的または動的であるかにかかわらず、本体もまた、インライン展開されたものとして(実行ドメイン内のジャンプを使用して、本体をN_ITER回繰り返すことによって)、または被起動として(本体を含む別個の実行ドメインへN_ITER回ジャンプすることによって)実装可能である。
SIZE_UNROLLEDが相対的に小さい場合、展開アプローチが、概して、好ましい(合成可能)。そうでなければ、SIZE_OF_BODYが、コンパイルの際に使用される。インライン展開アプローチは、概して、相対的に小さいSIZE_OF_BODYに対し好ましく、被起動アプローチは、概して、相対的に大きいSIZE_OF_BODYに対し好ましい。
また、コードは、展開されたコードおよびインライン展開/被起動コードの両方の組み合わせとして実装可能である。この実施例に対し、STARTおよびENDは動的であってもよいが、以下のコードの実行の際には変化しないと仮定する。
test=END−START;
if(test>MAX){
CodeBlock1//インライン展開または被起動コードをここに置く、すなわち、MAX反復制限はない
}else{
CodeBlock2//展開コードをここに置く、すなわち、MAX反復制限
}
このアプローチでは、コードは、MAX反復までに対し静的に実行(展開)され、MAX反復以上に対し動的に実行(起動)される。これは、より大きな命令コード、すなわち、命令コードのためのより多くのストレージを必要とするが、概して、性能のさらなる最適化を可能にする。セクション4.Fで上述のように、このアプローチは、動的に選択可能な(「test」という変数に基づいて)ドメインCodeBlock1およびCodeBlock2をもたらす。つまり、静的アプローチを使用するか、または動的アプローチを使用するかの決定は、実行の際に動的に判断される。つまり、コンパイラは、論理を阻害することなく、性能およびサイズの両方を最適化可能である。ドメインCodeBlock1は、テストの全値に対し作用するように保証されるが、概して、低速である。ドメインCodeBlock2は、高速であるが、テストの特定の値のみに作用する。2つのコードバリアントCodeBlock1とCodeBlock2との間の選択は、上述のように、動的になされ得る。
if(test>MAX){
CodeBlock1//インライン展開または被起動コードをここに置く、すなわち、MAX反復制限はない
}else{
CodeBlock2//展開コードをここに置く、すなわち、MAX反復制限
}
このアプローチでは、コードは、MAX反復までに対し静的に実行(展開)され、MAX反復以上に対し動的に実行(起動)される。これは、より大きな命令コード、すなわち、命令コードのためのより多くのストレージを必要とするが、概して、性能のさらなる最適化を可能にする。セクション4.Fで上述のように、このアプローチは、動的に選択可能な(「test」という変数に基づいて)ドメインCodeBlock1およびCodeBlock2をもたらす。つまり、静的アプローチを使用するか、または動的アプローチを使用するかの決定は、実行の際に動的に判断される。つまり、コンパイラは、論理を阻害することなく、性能およびサイズの両方を最適化可能である。ドメインCodeBlock1は、テストの全値に対し作用するように保証されるが、概して、低速である。ドメインCodeBlock2は、高速であるが、テストの特定の値のみに作用する。2つのコードバリアントCodeBlock1とCodeBlock2との間の選択は、上述のように、動的になされ得る。
好ましい実施形態では、最適化は、コード最小化および実行速度の両方に対しなされる。コードの爆発的な増大は、通常、オフチップ(非常に大きい)命令キャッシュによって問題ではないため、実行速度最適化は、典型的には、好ましい。ループピーリングおよびバリアントコード移動におけるループ等のより複雑なマッピング技術もまた、適用可能である。
(6.D.行動マッピングのための合成拡張)
論理シミュレーションに関連して、上述の議論は、動的変数を処理する際の合成の制限を指摘する。典型的には、合成は、展開技術だけに限られ、動的制御を処理するために、複合状態機械を生成することを必要とされる。複合状態機械は、行動がマッピングされる場合、指数関数的に増加する(状態変数が生じ得るすべての可能性のある組み合わせに対して生成される必要があるため)。行動実行は、これを回避し、行動コードに対し非常に効率的である。加えて、記載のVLIWアーキテクチャは、マッピングにおいてさらなる効率を可能にする。
論理シミュレーションに関連して、上述の議論は、動的変数を処理する際の合成の制限を指摘する。典型的には、合成は、展開技術だけに限られ、動的制御を処理するために、複合状態機械を生成することを必要とされる。複合状態機械は、行動がマッピングされる場合、指数関数的に増加する(状態変数が生じ得るすべての可能性のある組み合わせに対して生成される必要があるため)。行動実行は、これを回避し、行動コードに対し非常に効率的である。加えて、記載のVLIWアーキテクチャは、マッピングにおいてさらなる効率を可能にする。
具体的には、合成不可能論理の処理を可能にするために適用される技術の一部は、条件付きおよび無条件分岐、恣意的感度、複数のプロセスから書き込み可能な行動レジスタ、および非ブロッキング代入である。この開示のほとんどは、非有界ループのマッピングを可能にする条件付きおよび無条件分岐に対処する。分岐およびルーピングの実施例は、以下である。
.if<cond>,.else,.endif
.while<cond>,.endwhile
.label<label_name>
.goto<label_name>
.cgoto<cond><label_name>
恣意的感度は、合成が、典型的には、混合エッジおよびレベル感度を拒絶するため、合成に対し好ましい。実施例は、以下である。
.while<cond>,.endwhile
.label<label_name>
.goto<label_name>
.cgoto<cond><label_name>
恣意的感度は、合成が、典型的には、混合エッジおよびレベル感度を拒絶するため、合成に対し好ましい。実施例は、以下である。
.posedge<signal>
.negedge<signal>
.anyedge<signal>
行動レジスタは、クロックドメインマッピングから独立して、名前によってアドレス指定可能なレジスタである。これらは、一時レジスタ空間を使用して実装可能である。これは、複数のプロセスにレジスタを共有可能にし、それもまた、以下の合成を通して実行可能ではない。
.negedge<signal>
.anyedge<signal>
行動レジスタは、クロックドメインマッピングから独立して、名前によってアドレス指定可能なレジスタである。これらは、一時レジスタ空間を使用して実装可能である。これは、複数のプロセスにレジスタを共有可能にし、それもまた、以下の合成を通して実行可能ではない。
.reg<reg_name>
これは、以下の種類の合成されたレジスタと対照的である。
これは、以下の種類の合成されたレジスタと対照的である。
.ff<ff_name><clk><options>
行動モデルにおける非ブロッキング代入は、ブロッキング代入と混合される場合が多い。合成は、これを拒絶する。
行動モデルにおける非ブロッキング代入は、ブロッキング代入と混合される場合が多い。合成は、これを拒絶する。
.nba<rhs><lhs> //rhs=右側、lhs=左側
前述の技術の包含は、概して、全プロセッサにすべての一時データへのアクセスを任意のときに提供するローカルメモリ104と連結され、クロックドメインスケジューリングおよびクロックドメインアーキテクチャと連結され、合成不可能タスクを処理可能な効率的VLIWアーキテクチャを可能にする種々の種類の例外ハンドラと結合された、条件付きおよび無条件分岐オペランドの両方の可用性を必要とする。これは、ハードウェア記述言語(Hardware Description Language;HDL)およびより一般的行動言語の両方のための完全言語マッピングを可能にする。HDL言語は、合成プロセスを通して利用される内蔵並列性を有する。より一般的行動言語は、典型的には、加速目的のための並列性の摘出を必要とし、その加速の成功は、アプリケーションおよびコード構造に依存する。
前述の技術の包含は、概して、全プロセッサにすべての一時データへのアクセスを任意のときに提供するローカルメモリ104と連結され、クロックドメインスケジューリングおよびクロックドメインアーキテクチャと連結され、合成不可能タスクを処理可能な効率的VLIWアーキテクチャを可能にする種々の種類の例外ハンドラと結合された、条件付きおよび無条件分岐オペランドの両方の可用性を必要とする。これは、ハードウェア記述言語(Hardware Description Language;HDL)およびより一般的行動言語の両方のための完全言語マッピングを可能にする。HDL言語は、合成プロセスを通して利用される内蔵並列性を有する。より一般的行動言語は、典型的には、加速目的のための並列性の摘出を必要とし、その加速の成功は、アプリケーションおよびコード構造に依存する。
(6.E.並列化)
上述のように、コンパイラは、サイズ、VLIWスケジューリングおよびパッキング効率に基づいて、任意に領域を生成可能である。次に、VLIWアーキテクチャ内の別の要素(並列化)を検討する。プログラムおよび設計(ネットリスト)の両方を検討する。
上述のように、コンパイラは、サイズ、VLIWスケジューリングおよびパッキング効率に基づいて、任意に領域を生成可能である。次に、VLIWアーキテクチャ内の別の要素(並列化)を検討する。プログラムおよび設計(ネットリスト)の両方を検討する。
並列言語(VerilogまたはVHDL等)の観点から既に定義されている設計(例えば、ネットリスト)では、並列化は、合成を適用することによって実現される。また、これは、論理をスカラー化し、効率的パッキング(すなわち、単一実行ドメイン内の多くのVLIW演算)を可能にする。代償として、多重分岐セクションで説明されたように、多くの並列パスが必要でなく、VLIWは、その最大潜在性を実現しない。コンパイラは、好ましくは、領域(プログラムコードサイズ)ではなく、性能に対し最適化するため、トレードオフは、概して、実行時間に有利に働く。実行ドメインが小さ過ぎると、分岐は、非効率となり、拡張技術は、より優れた性能をもたらすだろう。拡張技術が大きい実行ドメインで使用される場合、結果として生じる冗長並列パス評価は、過剰なVLIW演算を生じさせ、実行速度を減速する場合がある。
慎重に領域を生成し、代替バリアントを分析し、多重分岐し、領域拡張技術および例外ハンドラを適用することによって、コンパイラは、特定のプログラムメモリ121制限サイズを考慮して、その実行が最大化されるように、結果として生じるプログラムマッピングを最適化可能である。本明細書に記載の技術を使用することによって、コンパイラは、CFG(制御フローグラフ)を変換し、設計(ネットリスト)および(並列化)プログラムの両方のための効率的VLIW実行を可能にする。
領域へのユーザプログラムコードのマッピングでは、ユーザプログラムコードは、通常、最初に並列化される。多くの既知の技術が存在する。非常に特異種の並列化は、NC問題のマッピングである(以下のNick’s Classセクションを参照)。この技術の使用は、個々のプロセッサソリューションと比較して、より優れた線形加速を達成可能である。
(6.F.スケジュール構成:コンパクション、制御、および構成)
制御フローグラフが決定されると、コードの特定の部分は、例外ハンドラを通して起動、展開、または処理されるであろう。スケジューラは、各実行ドメインを分析し、VLIWスケジュールされたコードを生成する。このプロセスは、コンパクションと称される。割り込みリターン構文およびデータをリターン(抽出)する例外ハンドラに対し配慮すべきである。
制御フローグラフが決定されると、コードの特定の部分は、例外ハンドラを通して起動、展開、または処理されるであろう。スケジューラは、各実行ドメインを分析し、VLIWスケジュールされたコードを生成する。このプロセスは、コンパクションと称される。割り込みリターン構文およびデータをリターン(抽出)する例外ハンドラに対し配慮すべきである。
コンパイラでは、スケジューリングの際に記号アドレスが使用される。全実行ドメインを接続する制御グラフは、各ドメイン内でスケジュールされる。このプロセスは、追加制御と称される。
次に、スケジューラは、ドメインを構成する。本質的に、これは、全ジャンプアドレスを接続するメモリ配列である。これらのアドレスは、図3および8に示されるように、メモリ配列を実現するための相対および絶対の両方の、プログラムメモリ121内の物理的メモリアドレスに変換される。
(6.G.要約)
大きい設計/プログラムをマッピングする場合、領域は、好ましくは、高レベルの命令レベル並列度(ILP)が生成可能なように形成される。上述の領域形成技術を使用して、領域は、上述のスケジューリング構成技術を使用して最適化可能なように形成可能である。
大きい設計/プログラムをマッピングする場合、領域は、好ましくは、高レベルの命令レベル並列度(ILP)が生成可能なように形成される。上述の領域形成技術を使用して、領域は、上述のスケジューリング構成技術を使用して最適化可能なように形成可能である。
大きなプログラムに適用されるか、または大きな設計(ネットリスト)に適用されるかにかかわらず、アプローチは、概して、同一である。分割される各領域は、最も大きい効率のためにスケジュールされる。領域は、制御命令(条件付き分岐、多重分岐、無条件分岐、ジャンプ、NEXT_ADDR)を使用して、共に接続される。領域は、既知の拡張技術および例外ハンドラ等の技術を使用して拡大される。インフライトである例外ハンドラ(行動モジュール:RetrieveData等)が尊重されるべきであるため、領域が末尾複製を有する場合配慮される。ハードウェア実装に応じて、これを最適化するために利用可能なソフトウェアおよびハードウェアの両方のソリューションがある。
再び図9を参照すると、この図は、プログラムまたは設計(ネットリスト)のVLIWプログラムへの変換可能な方法を示す。領域形成910では、プログラム/設計は、分析911され、領域は、余剰プログラムコードを代償にして、実行がより効率的となり得るように、構築912される。典型的技術は、末尾複製、ループ展開、ループピーリング、ターゲット拡張等である。次いで、各コード領域は、典型的には、パラレライザプログラム、すなわち、プログラムのためのNC→PRAMスケジュールコンバータおよび/または設計(ネットリスト)のための合成ステップを通してマッピングすることによって、並列化914される。典型的には、領域は、真のNC→PRAMまたは合成ステップに適格ではないことに留意されたい。これは、例外ハンドラが、これらの制限を克服するために利用可能な場合である(例えば、合成ステップでは、「合成不可能」構文は、これらの行動モジュールにマッピングされ、残りの論理のための合成が行われることを可能にする)。
スケジュール構成920では、スケジュールは、コンパクションステップ922において各領域に対し構成される。割り込み/リターン命令および行動モジュールに対し配慮すべきである。典型的には、スケジューリングは、サイクルベース、線形、およびグラフベースの技術の組み合わせを使用して行われる。領域形成に基づいて、条件付き分岐、無条件分岐、多重分岐、および行動モジュールを通して実装される制御924は、プログラムインテグリティが保証されるように接続される。各スケジュール構成の出力は、各(クロック)ドメインに対する命令ドメイン(実行ドメインの集合体)を形成する。
構成ステップ930は、メモリ内にスケジュールされた命令を配置する。スケジュール構成920は、生成されたコードが再配置可能であるため、典型的には、各独立ドメインに対し並列に生じることが可能である。構成930は、全ドメインのためのグローバルステップである。このステップでは、トップレベル制御ドメインは、他のドメインのすべてを接続(スケジュール)するように生成される。
(7.マルチスレッディング)
(7.A.アーキテクチャ拡張)
便宜上、今まで、本開示は、全PE302が、プログラムメモリ121内の同一アドレスから命令を受信すると仮定してきた。これは必要ではなく、マルチスレッディングが、サポートされ得る。図10Aおよび10Bは、マルチスレッディングに好適なプログラムメモリ121のためのアーキテクチャを示すブロック図である。この実施例では、プログラムメモリ121は、単一メモリインスタンスとして実装されない。むしろ、N個の別個のインスタンス1021A〜1021Nとして実装される。プログラムメモリ121に対する総帯域幅が200Gb/sである場合、各メモリインスタンス1021に対するメモリ帯域幅は、200/N Gb/sである。ある実装では、各メモリインスタンス1021は、同一コントローラによって制御されるメモリチップのグループである。メモリチップの各グループは、典型的には、コントローラの最大動作頻度に対する制御信号の必要ファンアウトのために、5乃至7のメモリチップを含む。
(7.A.アーキテクチャ拡張)
便宜上、今まで、本開示は、全PE302が、プログラムメモリ121内の同一アドレスから命令を受信すると仮定してきた。これは必要ではなく、マルチスレッディングが、サポートされ得る。図10Aおよび10Bは、マルチスレッディングに好適なプログラムメモリ121のためのアーキテクチャを示すブロック図である。この実施例では、プログラムメモリ121は、単一メモリインスタンスとして実装されない。むしろ、N個の別個のインスタンス1021A〜1021Nとして実装される。プログラムメモリ121に対する総帯域幅が200Gb/sである場合、各メモリインスタンス1021に対するメモリ帯域幅は、200/N Gb/sである。ある実装では、各メモリインスタンス1021は、同一コントローラによって制御されるメモリチップのグループである。メモリチップの各グループは、典型的には、コントローラの最大動作頻度に対する制御信号の必要ファンアウトのために、5乃至7のメモリチップを含む。
さらに、図10Bに示されるように、全体プログラムメモリ121は、メモリスライス1021A〜1021Nに構成され、各スライスは、メモリインスタンス1021A〜1021Nの1つによって実装される。各メモリインスタンス1021(または、メモリスライス)は、別個のメモリコントローラ1032A〜1032Nによってアクセスされ、それらは、アドレス、制御、およびデータビットによって図10Bに表される。ある特定の実装では、プログラムメモリ121は、reg[2,560]mem[8M]として、物理的に実現される。言い換えると、プログラムメモリ121のデータ幅は、D=2560ビットであって、これらの8Mの2560ビットワードが存在する。同等幅のN個のメモリスライスがある場合、各スライス102IA〜Nは、8Mの幅2560/Nのサブワードを含む。より一般的には、メモリスライス1021Aは、D1ビット幅であって、スライス1021Bは、D2ビット幅、Dl+D2+…+DN=Dである。図10Bでは、メモリスライス1021Aは、最左の高く細い矩形のプログラムメモリ121によって表される。それは、メモリコントローラ1032Aによってアクセスされる。メモリスライス1021Bは、次の高く細い矩形によって表され、メモリコントローラ1032Bによってアクセスされ、以下同様である。
このアーキテクチャによって、各メモリスライス1021は、別個にアクセスおよび制御可能である。コントローラ1010Aは、Address1、Control1、およびData1を使用する。Control1は、データが、メモリスライス1021A内のAddress1から読み込まれるべきであることを示す。Control2は、データが、メモリスライス1021B内のAddress2に書き込まれるべきであることを示し得る。Control3は、メモリスライス1021C内のAddress3からの命令フェッチ(データ読み込みの種類)を示し得、以下同様である。このように、各メモリスライス1021は、他から独立して動作可能である。また、メモリスライス1021は、共に動作可能である。全メモリスライス1021のためのアドレスおよび制御が同一である場合、Dビットの全体ワードは、プログラムメモリ121内の単一アドレスに書き込まれる(または、そこから読み込まれる)だろう。
図11および12は、この柔軟性能力を利用するシミュレーションプロセッサ100およびプログラムメモリ121の例示的構成を示すブロック図である。図11では、シミュレーションプロセッサ100は、K個のプロセッサユニットU1〜UKを含む。プロセッサユニットは、メモリコントローラ1032A〜1032Nおよびメモリスライス1021A〜1021Nに対応する、クラスタ1003A〜1003Nにグループ化される。プロセッサクラスタ1003Aは、5つのプロセッサユニットU1〜U5を含む。各プロセッサユニットは、PE命令218A〜218Eを実行可能である。PE命令218A〜218Eは、Dlビット幅であるクラスタ命令1018Aを共に形成する。クラスタ命令1018Bは、D2ビット幅であって、クラスタ命令1018Cは、D3ビット幅であって、以下同様である。クラスタ命令1018A〜1018Nはすべて、Dビット幅であるVLIW命令118を共に形成する。各プロセッサクラスタ1003が、異なるメモリコントローラ1032に対応するため、対応するクラスタ命令1018は、各クラスタ1003に対し独立してフェッチおよび実行可能である。したがって、マルチスレッド実行は、図10Bにおいて示されるように、サポート可能である。他の命令形式も可能である。例えば、全D1ビットは、5つの別個のPE命令(それぞれ、D1/5ビット幅)をエンコードせずに、全体としてクラスタに行動を命令するクラスタレベル命令をエンコード可能であり、単一PEに行動を命令可能である。
典型的には、各プロセッサクラスタ、例えば、D1のための命令ワード幅は、物理的実現によって制限され、PE当たりの命令ビット数およびストレージのためのデータビット数は、アーキテクチャ選択によって決定される。その結果、D1は、PEレベル命令幅×プロセッサクラスタ内のPEの数に正確に対応しない場合がある。さらに、追加ビットは、典型的には、種々のクラスタレベル行動をプログラムするために使用される。PEの少なくとも1つが、各クラスタにおいてアイドリング状態であると仮定される場合、それらのPEレベル命令ビットは、クラスタレベル行動をプログラムするために利用可能である。クラスタレベル命令の幅は、このマッピングを最適化するために、意図的に設計可能である。その結果、異なるプロセッサクラスタのためのクラスタレベル命令は、異なる幅を有してもよい。
図12は、マルチスレッド実行をサポートするためのメモリ構成を示す。ここでは、プログラムメモリアドレスA〜Hは、スレッド命令専用である。最大Nスレッドまで、同時にアクティブであり得る。アドレスH〜Kは、スレッドストレージ専用である。最大Nの独立読み込み/書き込みが、サポート可能である。アドレスK〜NおよびN〜Rは、それぞれ結合命令および結合ストレージをサポートする。共通アドレスは、完全VLIW命令(アドレスK〜N)または完全VLIWデータワード(アドレスN〜R)である、VLIWワード全体にアクセスするために使用される。アドレスR〜VおよびV〜Xは、それぞれ混合命令および混合ストレージをサポートする。
(7.B.分岐のためのマルチスレッドサポート)
図13A〜13Bは、分岐のためのマルチスレッドサポートを示す略図である。これらの図では、縦にハッチされた矩形は、分岐命令であって、実線矢印は、ジャンプの開始を示し、点線矢印は、リターンを示す。CDは、制御ドメインであって、Tは、トップレベル実行ドメインであって、Bn〜Dnは、低レベル実行ドメインである。したがって、ドメインT内の縦にハッチされた領域は、B1、B2およびB3に対する3つの可能性のある分岐を示す。この実施例では、各分岐は、条件付きであってもまたはそうでなくてもよく、すべてが考慮され得る。同様に、ドメインC1は、条件付き分岐が、ドメインC1の末端においてドメインD2に対しなされ、無条件分岐が、ドメインD1に対しなされ得ることを示す。便宜上、Bnドメインの1つによって始動されるシーケンスは、同一Bnドメインにリターンしなければならないと仮定する。したがって、シーケンスB1→C1→D1→E1→B1は、有効シーケンスであるが、B1→C1→D1→E2→B2は、B1で開始するが、B2にリターンするため、有効なシーケンスではない。
図13A〜13Bは、分岐のためのマルチスレッドサポートを示す略図である。これらの図では、縦にハッチされた矩形は、分岐命令であって、実線矢印は、ジャンプの開始を示し、点線矢印は、リターンを示す。CDは、制御ドメインであって、Tは、トップレベル実行ドメインであって、Bn〜Dnは、低レベル実行ドメインである。したがって、ドメインT内の縦にハッチされた領域は、B1、B2およびB3に対する3つの可能性のある分岐を示す。この実施例では、各分岐は、条件付きであってもまたはそうでなくてもよく、すべてが考慮され得る。同様に、ドメインC1は、条件付き分岐が、ドメインC1の末端においてドメインD2に対しなされ、無条件分岐が、ドメインD1に対しなされ得ることを示す。便宜上、Bnドメインの1つによって始動されるシーケンスは、同一Bnドメインにリターンしなければならないと仮定する。したがって、シーケンスB1→C1→D1→E1→B1は、有効シーケンスであるが、B1→C1→D1→E2→B2は、B1で開始するが、B2にリターンするため、有効なシーケンスではない。
Cnドメインの1つから生じる有効シーケンスは、以下である。
C111:C1→D1→El
C121:C1→D2→E1
C122:C1→D2→E2
C211:C2→D1→E1
C221:C2→D2→E1
C222:C2→D2→E2
上述の表記法を使用して、Bnドメインの1つから生じる有効 シーケンスは、以下である。
C121:C1→D2→E1
C122:C1→D2→E2
C211:C2→D1→E1
C221:C2→D2→E1
C222:C2→D2→E2
上述の表記法を使用して、Bnドメインの1つから生じる有効 シーケンスは、以下である。
B1l:B1→C111→B1
B12:B1→C121→B1
B13:B1→C122→B1
B21:B2→C211→B2
B22:B2→C212→B2
B23:B2→C222→B2
B31:B3
但し:B1→C1xx→B2ではなく
B2→C2xx→B1でもない。
B12:B1→C121→B1
B13:B1→C122→B1
B21:B2→C211→B2
B22:B2→C212→B2
B23:B2→C222→B2
B31:B3
但し:B1→C1xx→B2ではなく
B2→C2xx→B1でもない。
トップモジュールから、以下となる。
T→Bxx→T
図13Bは、VLIWアーキテクチャがマルチスレッディングを有効にするために利用可能な方法を示し、ジャンプは、メモリコントローラ境界上で生じる。このケースでは、3つのスレッドが、3つのドメインT→B1x→T、T→B2x→T、およびT→B3x→Tに対応して形成される。3つすべてのドメインは、別個のスレッド上で同時および独立して、アクティブであり得る。つまり、3つすべてのスレッドは、プログラムメモリ内の同一アドレスからの命令を使用する必要はない。あるアプローチでは、NEXT_ADDRリターン機構(制御ドメインに戻る)は、JOINまたはBARRIER技術によって向上される。これは、親ドメインTにおける継続に先立って、すべての並列実行スレッド(同時にアクティブ可能なB1x、B2x、およびB3x)が完了することを保証する。例えば、ドメインTは、シンプルなカウンタがゼロにリターンするまで待機可能であって、カウンタは、いくつのスレッドが、依然としてアクティブであるかをカウントする。
図13Bは、VLIWアーキテクチャがマルチスレッディングを有効にするために利用可能な方法を示し、ジャンプは、メモリコントローラ境界上で生じる。このケースでは、3つのスレッドが、3つのドメインT→B1x→T、T→B2x→T、およびT→B3x→Tに対応して形成される。3つすべてのドメインは、別個のスレッド上で同時および独立して、アクティブであり得る。つまり、3つすべてのスレッドは、プログラムメモリ内の同一アドレスからの命令を使用する必要はない。あるアプローチでは、NEXT_ADDRリターン機構(制御ドメインに戻る)は、JOINまたはBARRIER技術によって向上される。これは、親ドメインTにおける継続に先立って、すべての並列実行スレッド(同時にアクティブ可能なB1x、B2x、およびB3x)が完了することを保証する。例えば、ドメインTは、シンプルなカウンタがゼロにリターンするまで待機可能であって、カウンタは、いくつのスレッドが、依然としてアクティブであるかをカウントする。
(8.従来のVLIW命令との比較による差異)
(8.A.アーキテクチャ特性)
この種類のアプローチを実行可能にする補助をする、VLIWシミュレーションプロセッサに関するいくつかの(オプション)アーキテクチャ側面が存在する。以下に提供される数は、上述の例示的実装に特有であるが、それに制限されることを意味していない。
(8.A.アーキテクチャ特性)
この種類のアプローチを実行可能にする補助をする、VLIWシミュレーションプロセッサに関するいくつかの(オプション)アーキテクチャ側面が存在する。以下に提供される数は、上述の例示的実装に特有であるが、それに制限されることを意味していない。
(命令キャッシュレス) ほとんどのVLIWプロセッサアーキテクチャと異なり、本アーキテクチャは、命令をキャッシュしない。命令は、プログラムメモリ121からストリームし、プロセッサ要素302は、命令ワードに基づいて、連続的にプログラムされる。したがって、VLIWプロセッサアーキテクチャに基づく命令キャッシュと異なり、コード分岐は、ほぼ実行ペナルティなしで生じる。メモリアドレスポインタがXにあって、次のアドレスが、X+1ではなくYである場合、唯一の代償は、数クロックサイクルとして測定され、遅延分岐技術を使用して実装される、メモリ待機時間である。大きいプログラム/設計の実行は、数100,000サイクルと予測される。割り込みに対する分岐(または、リターン分岐)の代償は、一時データおよびグローバル変数への依存性の除去、または、一時データの保存およびシフトレジスタの既知の状態への回転である。これは、典型的には、数百サイクルまで影響を及ぼし得るスケジューリング制約となる。影響は、それらのサイクルの損失ではなく、むしろ、非効率な実行にあり、例えば、処理のために既に利用可能であった一時データ(シフトレジスタ)がジャンプに先立って格納され、ジャンプ後に検索されることである。
(共有オンチップメモリ) 別のアーキテクチャ特性は、全プロセッサ要素302が、スケジューリング制御下、利用可能なすべてのオンチップメモリ104へのアクセスを有していることである。オンチップメモリ104は、メインメモリからロードされる非常に大きなデータキャッシュである。完全なデータキャッシュリフレッシュ(フェッチ)は、全体計算時間に対し重要ではないほんの数1,000サイクルを必要とし、通常、非常に小量が必要とされる。
(PRAM(並列ランダムアクセス機械;Parallel random access machine)) このアーキテクチャもまた、スケジューリングに対し柔軟である。基本VLIWプロセッサ幅は、64に設定されるが、これは可変である。これは、64のプロセッサ要素302が命令サイクル当たり1回実行することを意味する。アルゴリズムが64並列演算未満を必要とする場合、アルゴリズムは、他の並列実行アルゴリズムと対となり得る。しかしながら、アルゴリズムが、64並列演算よりも多く必要とする場合、より多くの数の演算が、連続した命令サイクルを通して行われる。全プロセッサ要素は、同時にメモリへのアクセスを有することが可能である。言い換えると、PRAM様アーキテクチャが実現可能であって、柔軟な数のプロセッサスケーリングを可能にする。nが、必要なプロセッサ要素の数である場合、PRAMサイクルは、nから最大64に対し1つのVLIW命令サイクルで完了する。1つのPRAMサイクルは、65乃至128の間のn等に対し、2つのVLIW命令サイクルをとる。アルゴリズムが、メモリを通る全交換データに対し1,000プロセッサを必要とする場合、PRAMサイクルは、10VLIWサイクルを構成する。
共有メモリは、分散型メモリとして実装されるが、スケジュールされたアプローチ下で全プロセッサ要素に対し利用可能である。コンパイラは、各プロセッサ要素が、スケジュールされる場合に、メモリデータへのアクセスを有することを保証する。
(Nick’s Class) PRAMアーキテクチャと連結される柔軟な数のプロセッサ要素は、一般的にNick’s ClassまたはNCと称される特定の種類のアルゴリズムの効率的スケジューリングを可能にする。NC問題は、多項式個のプロセッサを有する並列コンピュータ上で対数多項式時間で解決可能な問題として定義される。言い換えると、問題は、O(n**k)並列プロセッサを使用して、時間O((log n)**c)で解くことができるような、定数cおよびkが存在する場合、NCにある。同等に、NCは、対数多項式深度および多項式個のゲートを有する均一ブール回路によって決定可能なそれらの決定問題として定義可能である。これは、アルゴリズムを並列化するために使用可能な既知の技術に転換し、アルゴリズムには、最適性能のためのネットリストコンパイルプロセスと同様にコンパイル可能である。
固有の並列性を有するアプリケーションは、このプロセッサアーキテクチャのための適切な候補である。科学計算の領域では、例は、気候モデリング、石油およびガス探査のための地球物理学および地震解析、核シミュレーション、計算流体力学、素粒子物理学、財務モデリングおよび材料科学、有限要素モデリング、MRI等のコンピュータ断層撮影法を含む。生命科学および生命工学では、計算化学および生物学、タンパク質折り畳みおよび生体系のシミュレーション、DNA塩基配列決定法、薬理ゲノム学、インシリコ創薬は、一部の実施例である。ナノテクノロジーアプリケーションは、分子モデリングおよびシミュレーション、密度汎関数理論、原子動力学、量子力学的解析を含み得る。デジタルコンテンツ製作の例は、アニメーション、合成およびレンダリング、映像処理および編集、画像処理を含む。
(出力および速度) VLIWプロセッサ性能は、メモリ帯域幅(ある実装では200Gb/s)と結び付いている。64プロセッサ要素のそれぞれが、浮動小数点ベースのプロセッサとして実現される場合、持続計算率は、5GFLOPSを大幅に上回り得る。これは、最大の達成可能性能ではなく、むしろ安定的達成可能状態である。アルゴリズムスケジューリングの効率によって低下させられる必要があるだけである。これは、現在の単一プロセッサCPUによって達成可能なものよりも非常に大きい(典型的には、特定の種類の問題に対し100MFLOPS)。2005年12月23日出願のVerheyen、Mathur、およびWattによる米国特許出願第11/318,042号「Processor」(参照することによって本願に援用される)に記載のある実装では、VLIWシミュレーションプロセッサは、この計算性能を実現する一方、平均5W未満の出力を消費する。
(8.B.利点)
上述のアーキテクチャ特徴の一部の結果として、種々の実装は、以下の利点および/または従来のVLIWシステムとの比較による差異の一部または全部を有得る。
上述のアーキテクチャ特徴の一部の結果として、種々の実装は、以下の利点および/または従来のVLIWシステムとの比較による差異の一部または全部を有得る。
(無スタック(ジャンプ時)) VLIWシステムは、サブルーチンが、グローバル変数に基づき、条件付きおよび/または無条件リターンアドレスを有するように、実装可能である。反復は、概して、このアプローチでは必要ではない。複数反復は、現在実行中のドメインではなく、起動ドメインによって処理される。所望に応じて、スタック機構を実行し、反復を可能にする。この機構では、被起動ドメインは、プッシュおよびポップのオーバーヘッドのほとんどを削除する制御されたスケジュールを有している。
(キャッシュコヒーレンス問題の回避) VLIWアーキテクチャでは、オンチップ命令キャッシュはない。プログラムメモリは、非常に大きい(効果的に、無限)オフチップ命令キャッシュとしてみなされ得る。各命令は、直接、プログラムメモリ121からフェッチされる。このため、領域ベースまたはトレースベースアルゴリズム等の高度なスケジューリング方法は必要ない。むしろ、実行ドメインは、継続のため、メモリ空間内の任意の他のアドレスへ自由にジャンプ可能である。
(簡素化領域形成) 上述のように、領域形成は、単一サイクル分岐構文、例外ハンドラ、および領域拡張技術によって、大幅に簡素化可能である。従来の記録コストを必要とせず、領域への割り込みを可能にすることによって、より複雑な言語構文をマッピングするコンパイラ能力およびVLIW実行の効率を大幅に向上させる。領域形成に適用される典型的VLIWスケジューリング制限は排除され、コンパイラは、非常に優れたマッピングの柔軟性を有する。
(簡素化ILPスケジューリング) 命令レベルの並列が、最も効率的方法を選択し、プロセッサ要素の数全体にわたる全命令をパッキングするグラフベース変換アルゴリズムによって、各実行ドメインにおいてなされ得る。目標は、通常、このドメインを実行するために必要とされるステップの数を最小化することである。
(合成不可能タスクの処理) シミュレーション加速アプリケーションでは、このVLIWアーキテクチャは、多数のソリューションを通して合成不可能タスクのマッピングを可能にし、この多数のソリューションは、「全体言語」マッピングを可能にし、これは、典型的には、従来の合成ベースのシミュレーション加速方法では達成不可能である。一般言語アプリケーションでは、同一効果を得ることができる。
(9.さらなる実施例)
本発明は、いくつかの実施形態に対し上述されてきたが、種々の修正が、本発明の範囲内でなされ得る。例えば、本発明は、同一であるPEに関連して記載されるが、代替実施形態は、異なる種類のPEおよび異なる数のPEを使用可能である。また、PEは、同一の接続性を有することを必要としない。また、PEは、リソースを共有してもよい。例えば、2つ以上のPEは、同一シフトレジスタおよび/またはローカルメモリに書き込まれてもよい。また、逆も同様であって、単一PEが、2つ以上のシフトレジスタおよび/またはローカルメモリに書き込まれてもよい。
本発明は、いくつかの実施形態に対し上述されてきたが、種々の修正が、本発明の範囲内でなされ得る。例えば、本発明は、同一であるPEに関連して記載されるが、代替実施形態は、異なる種類のPEおよび異なる数のPEを使用可能である。また、PEは、同一の接続性を有することを必要としない。また、PEは、リソースを共有してもよい。例えば、2つ以上のPEは、同一シフトレジスタおよび/またはローカルメモリに書き込まれてもよい。また、逆も同様であって、単一PEが、2つ以上のシフトレジスタおよび/またはローカルメモリに書き込まれてもよい。
別の側面では、本発明のシミュレーションプロセッサ100は、ASIC(特定アプリケーション向け集積回路;Application−Specific Integrated Circuit)または FPGA(フィールド・プログラマブル・ゲート・アレイ;Field−Programmable Gate Array)、あるいは他の種類の集積回路において実現可能である。また、別個の回路基板上に実装される必要も、ホストコンピュータ110に接続される必要もない。別個のホストコンピュータ110が存在しない場合もある。例えば、図1を参照すると、CPU114およびシミュレーションプロセッサ100は、より緊密に集積されてもよく、または単一集積計算装置として実装されてもよい。
本発明は、半導体チップのための論理シミュレーションに関連して記載されるが、本明細書で提示されるVLIWプロセッサアーキテクチャは、他のアプリケーションのためにも使用可能である。条件付き分岐を有するVLIWアーキテクチャの柔軟性を示す際に、CまたはC++等の一般的シーケンシャルプログラミング言語は、非常に容易にサポート可能であることに留意されたい(単一プロセッサソリューション上の標準コンパイルに類似)。それらは、VerilogまたはVHDL等のハードウェア記述言語の固有の並列行動を欠くが、多くのアプリケーションに対し、並列アルゴリズムが識別されており、そのようなシーケンシャルプログラミング言語の加速を可能にするために使用可能である。例としては、マトリックス乗算および相関関数がある。記載のVLIWアーキテクチャは、論理シミュレーションおよびハードウェア記述言語を超えて容易に拡張し、その加速は、プログラムの並列化およびアルゴリズム内のデータアクセスに応じて、多くの他のアプリケーションのために達成可能である。
例えば、プロセッサアーキテクチャは、単一ビット2状態論理シミュレーションから2ビット4状態論理シミュレーション、固定幅計算(例えば、DSPプログラミング)、浮動小数点計算(例えば、IEEE−754)まで拡張可能である。固有の並列性を有するアプリケーションは、このプロセッサアーキテクチャのための適切な候補である。科学計算の領域では、例は、気候モデリング、石油およびガス探査のための地球物理学および地震解析、核シミュレーション、計算流体力学、素粒子物理学、財務モデリングおよび材料科学、有限要素モデリング、MRI等のコンピュータ断層撮影法を含む。生命科学および生命工学では、計算化学および生物学、タンパク質折り畳みおよび生体系のシミュレーション、DNA塩基配列決定法、薬理ゲノム学、インシリコ創薬は、一部の実施例である。ナノテクノロジーアプリケーションは、分子モデリングおよびシミュレーション、密度汎関数理論、原子動力学、量子力学的解析を含み得る。デジタルコンテンツ製作の実施例は、アニメーション、合成およびレンダリング、映像処理および編集、画像処理を含む。
特定の実施例として、PEが整数または浮動小数点算術可能である場合(2006年10月23日出願の米国特許出願第11/552,141号「VLIW Acceleration System Using Multi−State Logic」に記載され、参照することによって全体として本願に援用される)、上述のVLIWアーキテクチャは、汎用データ駆動コンピュータを生成可能にする。例えば、刺激データは、コンピュータ断層撮影法によって得られる生データである場合がある。ハードウェアアクセラレータ130は、出力データ(このケースでは、計算される必要のある3D画像)を生成する整数または浮動小数点アクセラレータである。
アプリケーションの仕様に応じて、ハードウェアアクセラレータは、イベント駆動またはサイクルベースの(あるいは、より一般的に、ドメインベース)であることが可能である。ドメインベースのアプローチでは、必要な3D画像の計算の問題は、「下位問題」(例えば、恐らく、ローカルFFT)に細分される。これらの「下位問題」は、上述のドメインに類似し、これらのドメインに対する上述の技術もまた、この状況に適用可能である。
また、図10〜13に記載のマルチスレッディングおよびクラスタリング技術も、論理シミュレーション以外のアプリケーションにおいて使用可能である。例えば、PEは、特定の算術タスクを行うためにクラスタ化可能である。別の実施例として、異なるスレッドは、異なる問題ドメインを同時に評価するために使用可能である。
種々の他の修正、変更、および変形例は、添付の請求項に定義される本発明の精神および範囲から逸脱することなく、本願に開示される本発明の方法および装置の配列、演算、および詳細において成され得ることは、当業者には明白であろう。したがって、本発明の範囲は、添付の請求項およびその法的均等物によって決定されるべきである。
Claims (44)
- 回路設計の論理シミュレーションのためのハードウェア加速論理シミュレーションシステムであって、
複数の並列処理要素を含むVLIWシミュレーションプロセッサであって、該処理要素は、サポートされた命令セット内に含まれる命令を実行するように作動可能であり、該命令は、該論理シミュレーションのための合成可能タスク、合成不可能タスク、および分岐を実装する、VLIWシミュレーションプロセッサと、
該命令を含むプログラムメモリであって、該命令は、オンチップ命令キャッシュを使用せずに、該プログラムメモリから該処理要素へ直接ストリームされる、プログラムメモリと
を備える、システム。 - 前記合成可能タスクは、前記回路設計内のユーザ論理のシミュレーションを含む、請求項1に記載のシステム。
- 前記合成不可能タスクは、前記回路設計の行動モデルのシミュレーションを含む、請求項1に記載のシステム。
- 前記合成不可能タスクは、前記論理シミュレーションのためのテストベンチ機能を含む、請求項1に記載のシステム。
- 前記合成不可能タスクは、前記論理シミュレーションの全体制御を含む、請求項1に記載のシステム。
- 前記処理要素へストリームされる前記命令のプログラムメモリ内のアドレスをポイントするプログラムカウンタレジスタをさらに備え、分岐に対する命令の実行は、新しいアドレスを該プログラムカウンタレジスタ内にロードする、請求項1に記載のシステム。
- 分岐を実装する前記命令は、グローバルジャンプ命令を含む、請求項6に記載のシステム。
- 分岐を実装する前記命令は、相対ジャンプ命令を含む、請求項6に記載のシステム。
- 分岐を実装する前記命令は、条件付きジャンプ命令を含む、請求項6に記載のシステム。
- 分岐を実装する前記命令は、無条件ジャンプ命令を含む、請求項6に記載のシステム。
- 分岐を実装する前記命令は、多重分岐命令を含む、請求項6に記載のシステム。
- 前記多重分岐命令は、一式の条件付き分岐命令として実装され、該条件付き分岐命令はそれぞれ、異なる処理要素によって、同時に実行される、請求項11に記載のシステム。
- 分岐を実装する前記命令の少なくとも1つは、フィールドオーバーロードとしてエンコードされる、請求項6に記載のシステム。
- 前記命令は、領域に分割され、分岐を実装する該命令の少なくとも1つは、起動領域から被起動領域への割り込みジャンプである、請求項6に記載のシステム。
- 前記被起動領域への前記割り込みジャンプ後、前記起動領域へのリターンの際に、該起動領域の一時変数は、該割り込みジャンプ前と同じ場所に保存されている、請求項14に記載のシステム。
- 前記被起動領域への前記割り込みジャンプ後、前記起動領域へのリターンの際に、該起動領域の一時変数は、異なる場所に保存され、該割り込みジャンプ前のもとの場所に復元される、請求項14に記載のシステム。
- 前記被起動領域への前記割り込みジャンプ後、前記起動領域へのリターンの際に、該起動領域の一時変数は、保存されず、再ロードおよび/または再計算される、請求項14に記載のシステム。
- 前記被起動領域への前記割り込みジャンプ後、前記起動領域へのリターンの際に、該起動領域の一時変数は、マッピング/スケジュールされた該プログラムではなく、前記VLIWプロセッサのアーキテクチャに基づいて、確定的に復元可能である、請求項14に記載のシステム。
- 前記プログラムメモリは、異なる動的条件に対して最適化された代替バリアント実行ドメインを含み、前記VLIWシミュレーションプロセッサは、該動的条件に対する制御変数の評価に基づいて、該代替バリアント実行ドメインのうちの1つに分岐する、請求項6に記載のシステム。
- 前記代替バリアント実行ドメインのうちの1つは、コードの展開バージョンを含み、別の該代替バリアント実行ドメインは、同じコードのインライン展開または被起動のバージョンを含む、請求項19に記載のシステム。
- 前記代替バリアント実行ドメインのうちの1つは、前記動的条件の特定の状態を仮定して、デッドコード削除を実装する、請求項19に記載のシステム。
- 前記代替バリアント実行ドメインのうちの1つは、前記動的条件の特定の状態を仮定して、定数伝播を実装する、請求項19に記載のシステム。
- 合成不可能タスクに対する命令の実行は、例外ハンドラを起動する、請求項1に記載のシステム。
- 前記例外ハンドラおよび前記VLIWシミュレーションプロセッサは、同一チップ上に実装される、請求項23に記載のシステム。
- 前記例外ハンドラ、前記VLIWシミュレーションプロセッサ、および前記プログラムメモリは、同一プリント基板上に実装される、請求項23に記載のシステム。
- 前記例外ハンドラは、前記ハードウェア加速論理シミュレーションシステムのためのホストコンピュータ内のハードウェアによって実行される、請求項23に記載のシステム。
- 前記例外ハンドラは、前記ハードウェア加速論理シミュレーションシステムのためのホストソフトウェアによって実行される、請求項23に記載のシステム。
- 前記例外ハンドラは、前記VLIWシミュレーションプロセッサの前記処理要素と並列して実行する、請求項23に記載のシステム。
- ホストコンピュータと、
該ホストコンピュータにプラグインされたプリント基板であって、
単一チップとして実装された前記VLIWシミュレーションプロセッサと、
前記プログラムメモリと
をさらに含む、プリント基板と、
をさらに備える、請求項1に記載のシステム。 - 前記処理要素にストリームされる前記命令のプログラムメモリ内のアドレスをポイントするプログラムカウンタレジスタをさらに備え、異なる処理要素は、プログラムメモリ内の異なるアドレスからストリームされる命令を同時に受信可能である、請求項1に記載のシステム。
- 回路設計の論理シミュレーションの方法であって、
サポートされた命令セットからの命令をプログラムメモリ内に格納するステップと、
オンチップ命令キャッシュを使用せずに、該プログラムメモリからVLIWシミュレーションプロセッサの処理要素へ直接該命令をストリームするステップと、
該処理要素が、該命令を実行するステップであって、該命令は、該論理シミュレーションのための合成可能タスク、合成不可能タスク、および分岐を実装する、ステップと
を包含する、方法。 - 回路設計を、該回路設計の論理シミュレーションのためにサポートされた命令セットからの命令を含むプログラムにコンパイルする方法であって、
該回路設計を領域に分割するステップと、
命令を各領域内で並列化するステップと、
該領域のためのスケジュールを構成するステップと、
を包含し、
該領域内の該命令は、オンチップ命令キャッシュを使用せずに、プログラムメモリからVLIWシミュレーションプロセッサの処理要素へ直接ストリームされ、該命令は、該論理シミュレーションのための合成可能タスク、合成不可能タスク、および分岐を実装し、少なくとも1つの領域は、該領域内への割り込みジャンプを含む、方法。 - 少なくとも1つの領域は、該領域内への2つ以上の割り込みジャンプを含む、請求項32に記載の方法。
- 少なくとも1つの領域は、合成不可能タスクを実装するために、例外ハンドラを起動するステップを含む、請求項32に記載の方法。
- 各領域内の命令を並列化する前記ステップは、前記領域内のループを、展開バージョン、インライン展開バージョンおよび/または被起動バージョンとして実装するかどうかを判断するステップを包含する、請求項32に記載の方法。
- 前記判断ステップに従って、
前記ループの反復数が静的であって、該ループの展開サイズが相対的に小さい場合、該ループは、展開バージョンとして実装され、
該ループの反復数が動的であって、該ループのサイズが相対的に小さい場合、該ループは、インライン展開バージョンとして実装され、
該ループの反復数が動的であって、該ループのサイズが相対的に大きい場合、該ループは、被起動バージョンとして実装される、
請求項35に記載の方法。 - 前記判断ステップに従って、前記ループは、前記展開、インライン展開、および被起動バージョンのうちの2つ以上として実装され、前記領域は、制御変数の動的評価に基づいて、該展開、インライン展開、および被起動バージョンの中から選択する条件付き分岐命令をさらに含む、請求項35に記載の方法。
- 各領域内で命令を並列化する前記ステップは、
異なる動的条件に対し最適化された代替バリアント実行ドメインを実装するステップと、
該動的条件に対する制御変数の動的評価に基づいて、該代替バリアント実行ドメインの中から選択する条件付き分岐命令を含むステップと
を包含する、請求項32に記載の方法。 - 前記回路設計を領域に分割する前記ステップは、
タスクの完全合成可能ブロックから別個の領域を形成するステップと、
領域拡張技術を使用して、該別個の領域をより大きな領域に結合するステップと
を備える、請求項32に記載の方法。 - 領域拡張技術を使用する前記ステップは、例外ハンドラを起動し、領域を分離する合成不可能タスクを実装し、それによって、前記別個の領域の組み合わせをより大きな領域にするステップを包含する、請求項39に記載の方法。
- 領域拡張技術を使用する前記ステップは、分岐を使用して、別個の領域を接続し、それによって、該別個の領域の組み合わせをより大きな領域にするステップを包含する、請求項39に記載の方法。
- 領域拡張技術を使用する前記ステップは、割り込み分岐を使用して、別個の領域を接続し、それによって、該別個の領域の組み合わせをより大きな領域にするステップを備える、請求項39に記載の方法。
- プロセッサに、回路設計を該回路設計の論理シミュレーションのためにサポートされた命令セットからの命令を含むプログラムにコンパイルするための方法を実行させる、ソフトウェア命令を含むコンピュータ可読記憶媒体であって、該方法は、
該回路設計を領域に分割するステップと、
命令を各領域内で並列化するステップと、
該領域のためのスケジュールを構成するステップと、
を包含し、
該領域内の該命令は、オンチップ命令キャッシュを使用せずに、プログラムメモリからVLIWシミュレーションプロセッサの処理要素へ直接ストリームされ、該命令は、該論理シミュレーションのための合成可能タスク、合成不可能タスク、および分岐を実装し、少なくとも1つの領域は、該領域内への割り込みジャンプを含む、コンピュータ可読記憶媒体。 - 複数の並列処理要素を含むVLIWプロセッサであって、
該処理要素は、サポートされた命令セット内に含まれる命令を実行するように作動可能であり、
該命令は、合成可能タスク、合成不可能タスク、および分岐を実装し、
該命令は、オンチップ命令キャッシュを使用せずに、プログラムメモリから該処理要素に直接ストリームされる、
VLIWプロセッサ。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US74499106P | 2006-04-17 | 2006-04-17 | |
US11/735,865 US20070219771A1 (en) | 2005-12-01 | 2007-04-16 | Branching and Behavioral Partitioning for a VLIW Processor |
PCT/US2007/066813 WO2007121452A2 (en) | 2006-04-17 | 2007-04-17 | Branching and behavioral partitioning for a vliw processor |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009533785A true JP2009533785A (ja) | 2009-09-17 |
Family
ID=38610450
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009506731A Withdrawn JP2009533785A (ja) | 2006-04-17 | 2007-04-17 | Vliwプロセッサのための分岐および行動分割 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20070219771A1 (ja) |
EP (1) | EP2016516A4 (ja) |
JP (1) | JP2009533785A (ja) |
WO (1) | WO2007121452A2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014523569A (ja) * | 2011-06-14 | 2014-09-11 | モンタナ・システムズ・インコーポレーテッド | 拡張可能な並列プロセッサのためのシステム、方法、および、装置 |
Families Citing this family (38)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
ATE376691T1 (de) * | 2002-02-22 | 2007-11-15 | Neosera Systems Ltd | Verfahren und prozessor zur parallelen verarbeitung einer logikereignis-simulation |
EP1806847B1 (en) * | 2004-10-28 | 2010-02-17 | IP Flex Inc. | Data processing device having reconfigurable logic circuit |
US7840914B1 (en) | 2005-05-13 | 2010-11-23 | Massachusetts Institute Of Technology | Distributing computations in a parallel processing environment |
WO2007098804A1 (en) * | 2006-02-28 | 2007-09-07 | Mentor Graphics Corp. | Memory-based trigger generation scheme in an emulation environment |
US8250556B1 (en) | 2007-02-07 | 2012-08-21 | Tilera Corporation | Distributing parallelism for parallel processing architectures |
US8751211B2 (en) * | 2008-03-27 | 2014-06-10 | Rocketick Technologies Ltd. | Simulation using parallel processors |
US9678775B1 (en) * | 2008-04-09 | 2017-06-13 | Nvidia Corporation | Allocating memory for local variables of a multi-threaded program for execution in a single-threaded environment |
KR101607495B1 (ko) * | 2008-07-10 | 2016-03-30 | 로케틱 테크놀로지즈 리미티드 | 디펜던시 문제의 효율적인 병렬 계산 |
US9032377B2 (en) | 2008-07-10 | 2015-05-12 | Rocketick Technologies Ltd. | Efficient parallel computation of dependency problems |
US8201126B1 (en) * | 2009-11-12 | 2012-06-12 | Altera Corporation | Method and apparatus for performing hardware assisted placement |
US9128748B2 (en) * | 2011-04-12 | 2015-09-08 | Rocketick Technologies Ltd. | Parallel simulation using multiple co-simulators |
US20120330637A1 (en) * | 2011-06-21 | 2012-12-27 | International Business Machines Corporation | Method for providing debugging tool for a hardware design and debugging tool for a hardware design |
US9081925B1 (en) * | 2012-02-16 | 2015-07-14 | Xilinx, Inc. | Estimating system performance using an integrated circuit |
CN102945164B (zh) * | 2012-10-26 | 2016-06-08 | 无锡江南计算技术研究所 | 数据处理方法 |
US9015643B2 (en) | 2013-03-15 | 2015-04-21 | Nvidia Corporation | System, method, and computer program product for applying a callback function to data values |
US20140278328A1 (en) | 2013-03-15 | 2014-09-18 | Nvidia Corporation | System, method, and computer program product for constructing a data flow and identifying a construct |
US9323502B2 (en) | 2013-03-15 | 2016-04-26 | Nvidia Corporation | System, method, and computer program product for altering a line of code |
US9015646B2 (en) | 2013-04-10 | 2015-04-21 | Nvidia Corporation | System, method, and computer program product for translating a hardware language into a source database |
US9171115B2 (en) * | 2013-04-10 | 2015-10-27 | Nvidia Corporation | System, method, and computer program product for translating a common hardware database into a logic code model |
US9021408B2 (en) | 2013-04-10 | 2015-04-28 | Nvidia Corporation | System, method, and computer program product for translating a source database into a common hardware database |
GB2524063B (en) | 2014-03-13 | 2020-07-01 | Advanced Risc Mach Ltd | Data processing apparatus for executing an access instruction for N threads |
US9846587B1 (en) | 2014-05-15 | 2017-12-19 | Xilinx, Inc. | Performance analysis using configurable hardware emulation within an integrated circuit |
US9608871B1 (en) | 2014-05-16 | 2017-03-28 | Xilinx, Inc. | Intellectual property cores with traffic scenario data |
US9760663B2 (en) * | 2014-10-30 | 2017-09-12 | Synopsys, Inc. | Automatic generation of properties to assist hardware emulation |
US9411569B1 (en) * | 2015-05-12 | 2016-08-09 | The United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration | System and method for providing a climate data analytic services application programming interface distribution package |
US10133683B1 (en) * | 2016-09-28 | 2018-11-20 | Cadence Design Systems, Inc. | Seamless interface for hardware and software data transfer |
US10990394B2 (en) * | 2017-09-28 | 2021-04-27 | Intel Corporation | Systems and methods for mixed instruction multiple data (xIMD) computing |
US10474822B2 (en) * | 2017-10-08 | 2019-11-12 | Qsigma, Inc. | Simultaneous multi-processor (SiMulPro) apparatus, simultaneous transmit and receive (STAR) apparatus, DRAM interface apparatus, and associated methods |
US11003471B2 (en) * | 2018-01-26 | 2021-05-11 | Vmware, Inc. | Just-in-time hardware for field programmable gate arrays |
US11003472B2 (en) * | 2018-01-26 | 2021-05-11 | Vmware, Inc. | Just-in-time hardware for field programmable gate arrays |
US10997338B2 (en) * | 2018-01-26 | 2021-05-04 | Vmware, Inc. | Just-in-time hardware for field programmable gate arrays |
US10990730B2 (en) * | 2018-01-26 | 2021-04-27 | Vmware, Inc. | Just-in-time hardware for field programmable gate arrays |
US11087001B2 (en) * | 2018-04-04 | 2021-08-10 | Red Hat, Inc. | Determining location of speculation denial instructions for memory access vulnerabilities |
US10922088B2 (en) * | 2018-06-29 | 2021-02-16 | Intel Corporation | Processor instruction support to defeat side-channel attacks |
US11900135B1 (en) * | 2018-12-06 | 2024-02-13 | Cadence Design Systems, Inc. | Emulation system supporting representation of four-state signals |
DE102020203113A1 (de) | 2020-03-11 | 2021-09-16 | Siemens Healthcare Gmbh | Paketbasiertes Multicast-Kommunikationssystem |
US11776425B1 (en) * | 2022-11-25 | 2023-10-03 | Asim Dajoh | Hardware simulation logic circuit bench |
CN117310458B (zh) * | 2023-11-29 | 2024-01-30 | 北京飘石科技有限公司 | 一种fpga芯片的最终测试方法及装置 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5872963A (en) * | 1997-02-18 | 1999-02-16 | Silicon Graphics, Inc. | Resumption of preempted non-privileged threads with no kernel intervention |
US6879341B1 (en) * | 1997-07-15 | 2005-04-12 | Silverbrook Research Pty Ltd | Digital camera system containing a VLIW vector processor |
US20030105617A1 (en) * | 2001-12-05 | 2003-06-05 | Nec Usa, Inc. | Hardware acceleration system for logic simulation |
US20060007318A1 (en) * | 2004-07-09 | 2006-01-12 | Omron Corporation | Monitoring system center apparatus, monitoring-system-center program, and recording medium having recorded monitoring-system-center program |
US20070073999A1 (en) * | 2005-09-28 | 2007-03-29 | Verheyen Henry T | Hardware acceleration system for logic simulation using shift register as local cache with path for bypassing shift register |
US20070074000A1 (en) * | 2005-09-28 | 2007-03-29 | Liga Systems, Inc. | VLIW Acceleration System Using Multi-state Logic |
US7444276B2 (en) * | 2005-09-28 | 2008-10-28 | Liga Systems, Inc. | Hardware acceleration system for logic simulation using shift register as local cache |
US20070129926A1 (en) * | 2005-12-01 | 2007-06-07 | Verheyen Henry T | Hardware acceleration system for simulation of logic and memory |
US20070129924A1 (en) * | 2005-12-06 | 2007-06-07 | Verheyen Henry T | Partitioning of tasks for execution by a VLIW hardware acceleration system |
-
2007
- 2007-04-16 US US11/735,865 patent/US20070219771A1/en not_active Abandoned
- 2007-04-17 WO PCT/US2007/066813 patent/WO2007121452A2/en active Application Filing
- 2007-04-17 JP JP2009506731A patent/JP2009533785A/ja not_active Withdrawn
- 2007-04-17 EP EP07760791A patent/EP2016516A4/en not_active Withdrawn
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014523569A (ja) * | 2011-06-14 | 2014-09-11 | モンタナ・システムズ・インコーポレーテッド | 拡張可能な並列プロセッサのためのシステム、方法、および、装置 |
Also Published As
Publication number | Publication date |
---|---|
EP2016516A4 (en) | 2010-07-14 |
US20070219771A1 (en) | 2007-09-20 |
WO2007121452A3 (en) | 2008-05-02 |
WO2007121452A2 (en) | 2007-10-25 |
EP2016516A2 (en) | 2009-01-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2009533785A (ja) | Vliwプロセッサのための分岐および行動分割 | |
Coussy et al. | GAUT: A High-Level Synthesis Tool for DSP Applications: From C Algorithm to RTL Architecture | |
CN107347253B (zh) | 用于专用处理器的硬件指令生成单元 | |
Panda et al. | Memory issues in embedded systems-on-chip: optimizations and exploration | |
US20070129926A1 (en) | Hardware acceleration system for simulation of logic and memory | |
US10733343B2 (en) | System and method for the design of digital hardware | |
US20070129924A1 (en) | Partitioning of tasks for execution by a VLIW hardware acceleration system | |
Papakonstantinou et al. | Efficient compilation of CUDA kernels for high-performance computing on FPGAs | |
JP2014523569A (ja) | 拡張可能な並列プロセッサのためのシステム、方法、および、装置 | |
Lanzagorta et al. | Introduction to reconfigurable supercomputing | |
US20080120497A1 (en) | Automated configuration of a processing system using decoupled memory access and computation | |
Bezati et al. | High-level synthesis of dynamic dataflow programs on heterogeneous MPSoC platforms | |
Wunderlich et al. | In-system FPGA prototyping of an Itanium microarchitecture | |
JP2006268873A (ja) | 機能シミュレーションのためのハードウェア・アクセラレーション・システム | |
O'Donnell | Overview of hydra: a concurrent language for synchronous digital circuit design | |
Sotiriou-Xanthopoulos et al. | OpenCL-based virtual prototyping and simulation of many-accelerator architectures | |
Fanni | Power and Energy Management in Coarse-Grained Reconfigurable Systems: methodologies, automation and assessments | |
Nanjundappa | Accelerating Hardware Simulation on Multi-cores | |
Bailey et al. | Codesign experiences based on a virtual platform | |
Kim | Exploiting Reconfiguration and Co-Design for Domain-Agnostic Hardware Acceleration | |
Du | Exploring High-Level Synthesis to FPGA-based Highly Efficient Stencil Computation | |
Srivastava et al. | FPGA-Specific Compilers | |
Aboulhamid et al. | Simulation at Cycle Accurate and Transaction Accurate Levels Fre´ de´ ric Pe´ trot and Patrice Gerin | |
TW200813767A (en) | Branching and behavioral partitioning for a VLIW processor | |
Hjort Blindell | Synthesizing software from a ForSyDe model targeting GPGPUs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Application deemed to be withdrawn because no request for examination was validly filed |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20100706 |