JP2005503680A - 命令プロセッサシステムおよび方法 - Google Patents

命令プロセッサシステムおよび方法 Download PDF

Info

Publication number
JP2005503680A
JP2005503680A JP2002543290A JP2002543290A JP2005503680A JP 2005503680 A JP2005503680 A JP 2005503680A JP 2002543290 A JP2002543290 A JP 2002543290A JP 2002543290 A JP2002543290 A JP 2002543290A JP 2005503680 A JP2005503680 A JP 2005503680A
Authority
JP
Japan
Prior art keywords
optimization
instruction
information
implementation
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.)
Granted
Application number
JP2002543290A
Other languages
English (en)
Other versions
JP3903193B2 (ja
JP2005503680A5 (ja
Inventor
ウェイン ルーク,
ピーター ワイ. ケイ. チェウン,
シェイ ピン セン,
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Ip2ipo Innovations Ltd
Original Assignee
Ip2ipo Innovations Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Ip2ipo Innovations Ltd filed Critical Ip2ipo Innovations Ltd
Publication of JP2005503680A publication Critical patent/JP2005503680A/ja
Publication of JP2005503680A5 publication Critical patent/JP2005503680A5/ja
Application granted granted Critical
Publication of JP3903193B2 publication Critical patent/JP3903193B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Devices For Executing Special Programs (AREA)
  • Logic Circuits (AREA)
  • Programmable Controllers (AREA)
  • Stored Programmes (AREA)

Abstract

本発明は、再プログラミング可能なハードウェアにおいてインプリメントされた命令プロセスの設計タイムおよびランタイム環境に関する。一局面では、本発明は、カスタマイゼーション仕様に基づいて構成情報および関連する実行可能なコードを生成するための設計システムを提供する。これは、再プログラミング可能なハードウェアを用いて命令プロセッサをインプリメントするために、アプリケーションソースコードを含むアプリケーション情報および設計制約を含むカスタマイゼーション情報を含む。このシステムは、テンプレートジェネレータ、アナライザ、コンパイラ、インスタンチエータ、およびビルダを含む。別の局面では、本発明は、再プログラミング可能なハードウェアを用いてインプリメントされた命令プロセッサのランタイム再構成を管理するための管理システムを提供する。
【選択図】図1

Description

【技術分野】
【0001】
(命令プロセッサシステムおよび方法)
本発明は、本明細書においてフレキシブル命令(インストラクション)プロセッサ(FIP)と呼ばれるような再プログラム可能な命令プロセッサの設計時および実行時環境に関する。
【0002】
1局面において、本発明は、ユーザ指定のカスタマイゼーション仕様に基づくFIPインプリメンテーションのためのFIP構成情報、および関連する実行可能FIPコードを生成するFIP設計システム、ならびにユーザ指定カスタマイゼーション仕様に基づいて、FIPインプリメンテーションのためのFIP構成情報および関連する実行可能なFIPコードを生成する方法に関する。
【0003】
別の局面において、本発明は、FIPインプリメンテーションのFIP構成情報および関連する実行可能なFIPコードの実行時の適応度を管理するFIP管理システム、ならびに実行時間中のFIPインプリメンテーションのFIP構成情報および関連する実行FIPコードの適応度を管理する方法に関する。
【背景技術】
【0004】
AMD Corporation(米国)およびIntel Corporation(米国)製のもののような汎用命令プロセッサは、長い間の計算については他を圧している。しかしながら、このようなプロセッサは、固定されたアーキテクチャを有し、かつ命令セットフォーマット[1]によって支援されていない非標準オペレーションおよび非標準データを取り扱う場合、性能を低下させる傾向がある。
【0005】
特定のアプリケーションのための命令プロセッサのカスタマイズは、セルラー電話、医療用器具、デジタルカメラおよびプリンタといった組み込みシステムにおいては、特に、急を要する[2]。
【0006】
特定の言語で書かれたプログラムを実行するためにカスタマイズされた集積回路を開発することが可能である。一つの例は、Java(登録商標)言語で実行するようにカスタマイズされたGMJ30501SBプロセッサ(Helborn electronics、Segyung、韓国)である。しかしながら、このような集積回路の設計および製造は、依然として高価であり、かつ一旦設計されると、カスタマイズされた機能が固定されて、変更され得ない。
【0007】
Xilinx Inc.(San Jose、California、米国)製のField−Programmable Gate array(FPGA)、またはAltera Corporation(San Jose、California、米国)製のComplex Programmable Logic Devices(CPLD)といいた再プログラム可能なハードウェアは、標準的市販品コンポーネントを用いて命令プロセッサをインプリメントする手段を提供する。このようなデバイスの仕様は、集積回路の設計および製造と関連するリスクを排除するだけでなく、カスタマイズ可能なプロセッサを有する可能性もまた切り開く。
【0008】
カスタマイゼーションを支援する1つのルートは、カスタム命令をインプリメントするためのプログラム可能ロジックで、命令プロセッサを強化することである。複数の製造業社が、このようなインプリメンテーションのルートを提供している[3−5]。関連するプロセッサは、通常、ARM、IBM、MIPS製のもののような、既存のアーキテクチャに基づく。これらの固定された命令プロセッサのコアは、所与のアプリケーションのためのカスタム命令のセットをインプリメントするリソースを提供するプログラム可能なロジックとインターフェース接続される。1つのこのようなインプリメンテーションは、所定の実行ユニット[6]と組み合わされるプログラム可能な実行ユニットとして1つ以上のFPGAを利用する。このシステムは、命令の予め定義されたセットを実行するプロセッサの内部バスと結合され、プログラムされた命令を実行する内部バスと結合される1つ以上のプログラム可能実行ユニットと組み合わされる所定の実行ユニットを有するデータプロセッサを備える。しかしながら、このアプローチは、所定の実行ユニットおよびプログラム可能な実行ユニット、またはこのようなカスタマイゼーションを支援するツールのセットのアーキテクチャ全体をカスタマイズする工程を包含しない。
【0009】
命令プロセッサのカスタマイゼーションを支援する別のルートは、既存のFPGAを用いる命令プロセッサをインプリメントすることである[7]。このようなインプリメンテーションを用いて、コンパイル時[8]または実行時[9、10]に命令プロセッサ全体をカスタマイズすることが可能である。命令プロセッサの設計および並行プログラムとしての命令解釈プロセスのキャプチャに基づく最適化の自動化された方法が開発され[11]、多数の命令プロセッサがインプリメントされている[12〜14]が、これらのプロセッサの性能は報告されていない。
【0010】
さらなる従来技術のアプローチは、設計時に構成可能なプロセッサを自動的に生成する方法およびツールを含む[15]。しかしながら、このアプローチは、設計時および実行時の両方にカスタマイズ可能なプロセッサを自動的に生成する方法およびツールを含まない。
【0011】
コンパイル時間および実行時間のカスタマイズ可能なデータパスを製作する自動方法もまた開発された[16]が、これらの設計における命令セットアーキテクチャ(ISA)は、例えば、商用マイクロプロセッサ上でインプリメントされるように固定され、アーキテクチャはカスタマイズされ得ない。
【0012】
本発明の1つの目的は、再プログラム可能なハードウェアの現在および将来の世代の再プログラム可能性を開発するために、カスタマイゼーションおよび設計時の最適化をユーザに提供するフレキシブル命令プロセッサ(FIP)のための設計時および実行時環境を提供することである。
【0013】
従って、本発明は、カスタマイズ可能なプロセッサおよび実行可能なプロセサコードを自動的に生成するためのシステム、ならび方法を提供する。コードおよびプロセッサの両方は、ユーザによって提供されるカスタマイゼーション仕様により、設計時および実行時の両方でカスタマイズされ得る。
【0014】
FIPは、有利にも、特定のアプリケーション向けに合わせられ得るカスタマイズされたプロセッサを製作する手段を提供する。FIPは、スケルトンプロセッサテンプレートから組立てられ、これは通信チャネルによって相互接続されるモジュールと、パラメータのセットとを含む。テンプレートは、例えば、スタックベースまたはレジスタベーススタイルならびにそのテンプレートのパラメータを変更することによって、および既存のテンプレートを組み合わせ、かつ最適化することによって、例えば、スタックベースまたはレジスタベーススタイル等の異なったプロセッサスタイルといった異なったプロセッサインプリメンテーションを製作するために用いられ得る。テンプレートのパラメータは、スケルトンプロセッサを特定のアプリケーションのために適切なプロセッサに変換するために選択される。FIPが組立てられると、必要とされる命令が、種々のスタイルでのこれらの命令のインプリメンテーションを含むライブラリから取り出される。どの命令が含まれているかに依存して、スタック等のリソースおよび異なったデコードユニットがインスタンス化され、通信チャネルが、命令とリソースとの間の依存メカニズムを緩和させる。
【0015】
直接的なハードウェアインプリメンテーションと比較して、FIPには、命令をフェッチおよびデコードするオーバヘッドがさらにかかる。しかしながら、FIPは、複数の利点を有する。
【0016】
FIPは、カスタマイズされたハードウェアが新しい命令として対処されることを可能にする。これは、命令プロセッサと関連する効率的および構造化された制御パスと、手製のハードウェアの利益とを組み合わせる。プロセッサおよびこれと関連するオペコード(opcode)は、コンパイラを最適化することによって、制御パスを最適化する手段を提供する。
【0017】
クリティカルリソースは、アプリケーションドメインによって要求されると増加され得、用いられない場合は削除され得る。命令プロセッサは、これらのリソースが効率的に共有される構造を提供し、共有の程度が実行時に決定され得る。
【0018】
FIPは、高レベルデータ構造がハードウェア内で容易に支援されることを可能にし、さらに、現在のソフトウェア資産を維持することを支援し、実算術プログラミングおよび宣言型プログラミング用の抽象マシンといった新規のアーキテクチャのプロトタイプを容易にする[13]。
【0019】
特に、本発明のFIPアプローチは、異なった設計トレードオフを有する所与の命令セットの異なったインプリメンテーションを可能にする。これらのインプリメンテーションは、さらに、変換技術[11]によって関係付けられ得、これらの技術は、不明瞭であるが、効率的なインプリメンテーションを確認する手段を提供する。
【0020】
インプリメンテーションの効率は、多くの場合、選択されたプロセッサのスタイルに大きく依存する。Three Instruction Machine(TIM)等の専門的なプロセッサスタイル[13]は、具体的に、特定の言語を実行するように設計される。スタックベースのJava(登録商標) Virtual Machine(JVM)またはレジスタベースのMIPSといった、より一般的なアプリケーションのために設計されるプロセッサテンプレートであっても、異なったタスクに対してより効率的である。従って、所与のアプリケーションにとって、プロセッサスタイルの選択は重要な決定である。リソースの利用可能性、デバイスの大きさおよび所要速度条件等の問題は、この決定による影響を受ける。
【0021】
プロセッサの異なったスタイルは、カスタマイズ可能な異なった命令フォーマットを支援する。これらのプロセッサは、さらに、ハードウェアの再プログラム可能性のサイズ速度および容易さにおいて異なったトレードオフを有する。例えば、JVMのレジスタスタイルのインプリメンテーションは、高速であるが大型である一方で、JVMのスタックスタイルのインプリメンテーションは、低速および小型である。異なったスタイルのプロセッサを生成するための情報を含むプロセッサライブラリは、設計および実行時にカスタマイズされたプロセッサの生成に用いられる。
【0022】
異なったスタイルのプロセッサを組み合わせることによって、新しいプロセッサおよび対応するコードを生成することもまた可能である。これは、複合プロセッサおよび対応するコードが、より単純なプロセッサを組み合わせることによって体系的に発生させることを可能にする。
【0023】
コンパイラ、アセンブラ、リンカ、逆アセンブラ、デバッガー、命令セットシミュレータおよび他の機器を備える関連ツールは、性能を最適化し、大きさを低減し、消費電力を低減する等のために提供される。この最適化は、例えば、プログラム可能なハードウェア内の再構成の頻度を低減するか、またはワイヤの輻輳を低減することによって達成され得る。
【0024】
本発明は、実行時カスタマイゼーションによる最適化を支援する。実行時カスタマイゼーションは、(a)ハードウェアを再プログラミングすることによってリソースの使用を低減して、特定の時間に不可欠な素子のみがハードウェア内に存在するようにする工程と、(b)プログラム可能なハードウェアを、設計時には知られていない実行時間条件に適合することによって性能および使用を最適化する工程と、(c)インターネット等の外部ソースから新しいコードおよび/または新しいハードウェアを実行時に条件付きでダウンロードすることによって、性能および使用を最適化する工程とを包含する。
【0025】
所与のカスタマイゼーション仕様およびプロセッサライブラリについて、本発明の実施形態は、(a)カスタマイズ可能なプロセッサの複数のハードウェア記述であって、これらの記述の各々が特定の実行時条件に合わせられたプロセッサの可能なカスタマイズバージョンを表す、複数のハードウェア記述と、(b)ハードウェア記述上で実行可能なコードを発生および最適化するためのカスタマイズツール、およびこのようなコードを実行時に最適化して組み合わせることを可能にする情報と、(c)実行時の特定の瞬間に走行するようにハードウェアおよびコードを選択するためのハードウェアおよびソフトウェアメカニズムとを生成するための手段を提供する。この選択は、設計時にユーザによって決定され得るか、または実行時条件により影響が及ぼされ得る。
【0026】
直接的なハードウェアのインプリメンテーションと比較して、FIPは、命令をフェッチおよびデコードするオーバヘッドがさらにかかる。VLIWおよびEPICアーキテクチャは、実行の数に対するフェッチの数の比率を低減する試みを行っている。命令をカスタマイズすることは、さらに、フェッチと実行との比率を低減し、FIPの性能を向上させる技術である。FIPにカスタム命令を組み込みコンセプトが報告されている[4、10]。カスタム命令は、通常、手製であり、FIPのインスタンス作成中に組み込まれる。手製のカスタム命令は最良の性能を提供するが、これらの命令を作成することは困難であり、システムを熟知した熟練エンジニアを必要とする。本発明は、オペコードを連鎖させ、かつ改善するための他の最適化を行うことによってカスタム命令を自動的に作成する技術を提供する。この技術は、コンパイル時および実行時の両方で用いられ得る。
【0027】
好適な実施形態において、実行時に、かつ所与のアプリケーションデータについて、ハードウェアおよび/またはソフトウェアメカニズムは、ユーザおよび/または実行時条件に依存して、異なったカスタマイズプロセッサのうちの1つまたは両方を、またはアプリケーションデータを取り扱うという命令を含むコードの異なった部分を取り入れ得る。選択は、現在および再プログラムされたインプリメンテーションの速度、大きさおよび消費電力、ならびに再プログラミング時間もまた考慮に入れ得る。コンパイルコードは、対応するカスタマイズプロセッサの生成または取り出しを可能にする情報を含み得る。コンパイルコードの部分が、これを実行するためのカスタマイズプロセッサが存在しないところに出くわすと、このような情報は、例えば、ネットワークソースからこのプロセッサをロードすることによって、プロセッサが取り出されることを可能にする。
【0028】
本発明は、FIPの実行時の適合をさらに提供する。FIPシステムの実行時の適合性は、通常、命令使用パターンに基づいて、自動改良を実行することによって、システムがユーザの要求に適応するように進化することを可能にする。
【0029】
開発された技術およびツールは、(a)FIPの再構成を管理して、アプリケーションを可能な限り効率的に実行させる実行時環境と、(b)実行時メトリックを蓄積し、メトリックを解析して、実行時環境が自動改良をリクエストすることを可能にするメカニズムと、(c)FIPをアプリケーションに自動的にカスタマイズするためのカスタマイゼーション技術とを含む。
【0030】
本発明の実行時アプローチは、スタックベースまたはレジスタベーススタイルといった、種々の命令プロセッサスタイルをキャプチャするFIPテンプレートに基づくモジュラフレームワークのうちの一つ、スーパースカラーおよびハイブリッドオペレーションを提供するプロセサテンプレートといった機能性および性能を向上させるエンハンスメント、標準コンパイラおよびFIP専用コンパイラを含むコンパイル戦略、ならびにFPGAインプリメンテーションにおける効率的なリソースの共有のための技術等の技術依存性および技術専用最適化である。
【0031】
FIPシステムの実行時特性を一定期間にわたって予測することは、極めて困難である。例えば、Advanced Encryption Standard(AES)[17]は、異なった条件に対してブロックの大きさの範囲を利用し、従って、必要とされる処理は条件に依存する。通常、長い再構成時間が好ましくない場合、実行時再構成を必要とすることなく、異なったAESブロックの大きさをほどよく効率的に支援する一般的なFIPが用いられ得る。そうでない場合、必要に応じて、異なったAESモードを高度かつ効率的に実行し、かつFIPを再構成を行うようにカスタマイズされる異なったFIPインプリメンテーションを用い得る。
【0032】
1実施形態において、FIPシステムは、命令使用パターンに基づいて、自動的に再構成を行わせ得る。例えば、異なったウェブサイトは、異なった暗号化法を実施し、特定のウェブサイトに頻繁にアクセスするユーザは、特定のオペレーションのために最適化されたFIPを用い得る。
【0033】
本発明は、FIP実行時適合システムを提供し、このシステムは、(a)FIPの再構成を管理して、所与のアプリケーションを可能な限り効率的に実行させる実行時環境と、(b)実行時メトリックを蓄積し、メトリックを解析して、実行時環境が自動改良を要求することを可能にするメカニズムと、(c)FIPをアプリケーションに自動的にカスタマイズするためのカスタマイゼーションシステムとを含む。
【0034】
上述のように、FIPは、システムリソースを共有する程度を変更することを容易にする、明確に定義された制御構造を提供する。これは、クリティカルリソースが、アプリケーションドメインによって要求されると増加され、用いられない場合は削除されることを可能にする。FIPは、ユーザによって設計されたハードウェアが新しい命令として対処されることを可能にすることによって、カスタマイゼーションを支援する方法をさらに提供する。これらの設計時の最適化は、命令プロセッサを特定のアプリケーションか、またはイメージ処理等の特定のドメインのアプリケーションに合わせる手段を提供する。
【0035】
実行時適合は、FPGA等の再プログラム可能なハードウェアの拡張性を開発することによって、実行時間の変化に対するFIPの変化に対するさらなる微調整を行うことを可能にする。本発明は、FIPを改良する手段をコンパイル時および実行時の両方で提供することによって、再構成可能性を簡単にするFIPフレームワークを提供する。
【0036】
FIPシステムをアプリケーションの変化する挙動と適合させる能力は、強力な特性であるが、ワーキングシステムを提供するために相当な技術が要求される。これらの要求は、(a)コンパイル時または実行時に複数のFIP設計を生成する能力と、(b)FIPのライブラリを管理することと、(c)さらなるフレキシビリティを提供することによって、システムの性能が低下しないことを確実にすることとを含む。
【0037】
この点について、以下の構成要素、(i)カスタマイズされたFIPのコンパイル時の生成を容易にするデザインツールと、(ii)利用可能なFIP設計およびマシンコード追跡するためのスキームと、(iii)FIP状態および構成を管理するための実行時システムと、(iv)再構成が所与の時間にて適切なオプションであるか否かを決定するために用いられるメトリックと、(v)自動改良のために、どこの実行時統計が必要とされるかを決定する仕様と、(vi)実行時統計を蓄積するモニタと、(vii)蓄積された実行時統計に基づいてFIPを自動的にカスタマイズするためのツールとを含むアプローチが展開される。最適化解析および自動改良工程は、随意的であり、かつそのオーバヘッドが容認され得る場合に含まれることに留意されたい。
【発明の開示】
【課題を解決するための手段】
【0038】
一局面では、本発明は、再プログラミング可能なハードウェアを用いて命令プロセッサをインプリメントするために、カスタマイゼーション仕様であって、アプリケーションソースコードを含むアプリケーション情報および設計制約を含むカスタマイゼーション情報を含む、カスタマイゼーション仕様に基づいて構成情報および関連する実行可能コードを生成するための設計システムであって、インプリメンテーションの候補として識別された各プロセッサスタイルに対してテンプレートを生成するためのテンプレートジェネレータと、各テンプレートに対する命令情報を分析し、命令最適化を決定するためのアナライザと、該命令最適化を含めて、そして、実行可能なコードを生成するために該アプリケーションソースコードをコンパイルするためのコンパイラと、各テンプレートに対するアーキテクチャ情報を分析し、アーキテクチャ最適化を決定し、そして、各テンプレートに対する該パラメータをインスタンス生成するために、該アーキテクチャ最適化を含む構成情報(好適には、ドメイン固有の構成情報)を生成するためのインスタンチエータと、該アーキテクチャ最適化を含む該構成情報からデバイス固有の構成情報を生成するためのビルダーとを含む、システムを提供する。
【0039】
好適には、本システムは、各候補インプリメンテーションに対する前記構成情報および関連コードをプロファイルし、予定可能な基準に基づいて1以上の最適のインプリメンテーションを選択するためのセレクタをさらに含む。
【0040】
好適には、前記アプリケーション情報は、アプリケーションデータをさらに含む。
【0041】
より好適には、前記アプリケーションデータは、前記命令プロセッサによって動作されることになるデータを表すデータを含む。
【0042】
さらにより好適には、前記アプリケーションデータは、ランタイム状態の範囲を表すデータを含む。
【0043】
好適には、前記カスタマイゼーション情報は、少なくとも一つのカスタム命令をさらに含む。
【0044】
より好適には、各カスタム命令は、強制的にまたは任意的に規定され得る。
【0045】
好適には、前記カスタマイゼーション情報は、少なくとも一つのプロセッサスタイルを、インプリメンテーションのための候補としてさらに識別する。
【0046】
好適には、本システムは、カスタマイゼーション仕様の情報をプロファイルし、少なくとも一つのプロセッサスタイルを、インプリメンテーションのための候補として識別するためのプロファイラをさらに含む。
【0047】
より好適には、前記プロファイルされた情報は、前記アプリケーションソースコードを含む。
【0048】
好適には、前記プロファイラは、複数のプロセッサスタイルを、インプリメンテーションのための候補として識別するように構成される。
【0049】
一実施形態では、個々の前記プロセッサスタイルは、アプリケーションの部分を実行するために識別され、該アプリケーションは、組み合わされた個々のプロセッサスタイルによって実行されることになる。
【0050】
好適には、前記プロファイラは、最適化を可能にするためのプロファイリング情報を収集するようにさらに構成される。
【0051】
好適には、前記プロファイリング情報は、オペコードのグループの頻度を含む。
【0052】
好適には、前記プロファイリング情報は、オペレーション共有に関する情報を含む。
【0053】
好適には、前記プロファイリング情報は、オペレーション並行化(parallelisation)に関する情報を含む。
【0054】
一実施形態では、前記アナライザは、前記命令情報を分析する際に前記プロファイリング情報を利用し、そこから前記命令最適化を決定するように構成される。
【0055】
好適には、前記命令最適化は、オペレーション最適化を含む。
【0056】
より好適には、前記オペレーション最適化は、オペレーション共有最適化を含む。
【0057】
より好適には、前記オペレーション最適化は、オペレーション並行最適化を含む。
【0058】
好適には、前記命令最適化は、カスタム命令を含む。
【0059】
一実施形態では、前記アナライザは、候補命令最適化を識別し、前記インスタンチエータによって行われた推定に基づいて前記命令最適化のインプリメンテーションを決定するように構成される。
【0060】
好適には、前記インスタンチエータからの前記推定が、再プログラミング可能なハードウェアが、ランタイム中に全命令を共にインプリメントするようにプログラミングされることができないことを提供する場合には、前記アナライザは、組み合わされた個々の命令を、再プログラミング可能なハードウェアを再プログラミングすることによってインプリメントされ得る命令のセットにグループ化する。
【0061】
一実施形態では、前記アナライザは、異なるランタイム状態のために複数のインプリメンテーションを決定するように構成され、それぞれは該ランタイム状態に結び付けられた命令最適化を有し、各インプリメンテーションに結び付けられた決定状態情報を生成し、該決定状態情報は、実際のランタイム状態に応じたインプリメンテーション間の選択を可能にする。
【0062】
好適には、前記命令最適化は、設計制約を用いてコンパイルするインプリメンテーションを提供することができず、前記アナライザは、該アナライザによって提供された分析情報に基づいてプロファイラに前記プログラミング仕様を再プロファイルさせるように構成される。
【0063】
好適には、前記インスタンチエータによって行われた前記アーキテクチャ最適化は、パイプライン処理を含む。
【0064】
好適には、前記インスタンチエータによって行われた前記アーキテクチャ最適化は、リソース複製を含む。
【0065】
好適には、前記インスタンチエータによって行われた前記アーキテクチャ最適化は、最適化とは別の技術を含む。
【0066】
好適には、最適化とは別の前記技術は、未使用リソースの除去を含む。
【0067】
好適には、最適化とは別の前記技術は、オプコード割当を含む。
【0068】
好適には、最適化とは別の前記技術は、チャンネル通信最適化を含む。
【0069】
好適には、最適化とは別の前記技術は、データおよび命令パスをカスタマイズすることを含む。
【0070】
一実施形態では、複数の再プログラミング可能なハードウェアの構成が前記命令プロセッサをインプリメントすることが要求される場合、前記インスタンチエータは、個々の構成をグループに最適化し、該グループ化された構成のインプリメンテーションをスケジューリングするように構成される。
【0071】
好適には、本システムは、複数のプロセッサスタイルに対するプロセッサ定義および関連するパラメータを含むライブラリをさらに含み、前記テンプレートジェネレータは、該ライブラリから抽出されたプロセッサ定義および関連するパラメータからテンプレートを生成するように構成される。
【0072】
好適には、前記プロセッサスタイルは、スーパースケーラープロセッサを含む。
【0073】
好適には、前記プロセッサスタイルは、ハイブリッドプロセッサを含む。
【0074】
一実施形態では、前記コンパイラは、アナライザによって生成され、前記アプリケーションソースコードは、コンパイラによるコンパイルのためにカスタマイゼーション情報で注釈を付けられて、最適化された実行可能なコードを提供する。
【0075】
別の実施形態では、前記コンパイラは、前記アプリケーションソースコードをコンパイルし、最適化を取り込んで最適化された実行可能なコードを提供するために該コンパイルされたソースコードを再組織化するように構成される。
【0076】
好適には、前記構成情報および関連する実行可能なコード、および関連する場合の決定状態情報は、再プログラミング可能なハードウェアを用いてインプリメントされる命令プロセッサの適応および構成を管理するための少なくとも一つの管理システムに配備される。
【0077】
好適には、前記構成情報および関連する実行可能なコード、および関連する場合の決定状態情報は、再プログラミング可能なハードウェアの再プログラミングを可能にするための少なくとも一つのライブラリに配備される。
【0078】
一実施形態では、前記再プログラミング可能なハードウェアは、少なくとも一つのフィールドプログラマブルゲートアレイを含む。
【0079】
別の実施形態では、前記再プログラミング可能なハードウェアは、少なくとも一つのコンプレックスプログラマブルロジックデバイスを含む。
【0080】
好適には、前記命令プロセッサは、前記再プログラミング可能なハードウェアを用いて完全にインプリメントされる。
【0081】
別の局面では、本発明は、再プログラミング可能なハードウェアを用いて命令プロセッサをインプリメントするために、カスタマイゼーション仕様であって、アプリケーションソースコードを含むアプリケーション情報および設計制約を含むカスタマイゼーション情報を含む、カスタマイゼーション仕様に基づいて構成情報および関連する実行可能なコードを生成する方法であって、インプリメンテーションのための候補として識別された各プロセッサスタイルに対するテンプレートを生成するステップと、各テンプレートに対する命令情報を分析し、命令最適化を決定するステップと、該命令最適化を含め、そして、実行可能なコードを生成するために該アプリケーションソースコードをコンパイルするステップと、各テンプレートに対するアーキテクチャ情報を分析し、アーキテクチャ最適化を決定するステップと、各テンプレートに対するパラメータをインスタンス生成するために該アーキテクチャ最適化を含む構成情報(好適には、ドメイン固有の構成情報)を生成するステップと、該アーキテクチャ最適化を含む該構成情報からデバイス固有の構成情報を生成するステップと、を包含する、方法を提供する。
【0082】
好適には、本方法は、各候補インプリメンテーションに対して前記構成情報および関連するコードをプロファイルするステップと、それに応答して、予定可能な基準に基づいて1以上の最適なインプリメンテーションを選択するステップとをさらに包含する。
【0083】
好適には、前記アプリケーション情報は、アプリケーションデータをさらに含む。
【0084】
より好適には、前記アプリケーションデータは、前記命令プロセッサによって動作されることになるデータを表すデータを含む。
【0085】
さらにより好適には、前記アプリケーションデータは、ランタイム状態の範囲を表すデータを含む。
【0086】
好適には、前記カスタマイゼーション情報は、少なくとも一つのカスタム命令をさらに含む。
【0087】
より好適には、各カスタム命令は、強制的にまたは任意的に定義され得る。
【0088】
好適には、前記カスタマイゼーション情報は、少なくとも一つのプロセッサスタイルを、インプリメンテーションのための候補としてさらに識別する。
【0089】
好適には、前記カスタマイゼーション仕様の情報をプロファイルするステップと、少なくとも一つのプロセッサスタイルを、インプリメンテーションのための候補として識別するステップとをさらに包含する。
【0090】
より好適には、前記プロファイルされた情報は、前記アプリケーションソースコードを含む。
【0091】
好適には、複数のプロセッサスタイルは、前記カスタマイゼーション仕様プロファイルステップにおいて、インプリメンテーションのための候補として識別される。
【0092】
一実施形態では、個々のプロセッサスタイルは、アプリケーションの部分を実行するように識別され、これにより、該アプリケーションは、組み合わされた個々のプロセッサスタイルによって実行されることになる。
【0093】
好適には、最適化を可能にするためのプロファイリング情報は、カスタマイゼーション仕様プロファイリングステップにおいて集められる。
【0094】
好適には、前記プロファイリング情報は、オプコードのグループの頻度を含む。
【0095】
好適には、前記プロファイリング情報は、オペレーション共有に関する情報を含む。
【0096】
好適には、前記プロファイリング情報は、オペレーション並行化に関する情報を含む。
【0097】
一実施形態では、前記命令情報分析ステップは、前記命令情報を分析する際の前記プロファイリング情報を利用するステップと、前記命令最適化を決定するステップとを包含する。
【0098】
好適には、前記命令最適化は、オペレーション最適化を含む。
【0099】
より好適には、前記オペレーション最適化は、オペレーション共有最適化を含む。
【0100】
より好適には、前記オペレーション最適化は、オペレーション並行最適化を含む。
【0101】
好適には、前記命令最適化は、カスタム命令を含む。
【0102】
一実施形態では、前記命令情報分析ステップは、候補命令最適化を識別するステップと、前記候補命令最適化の命令に基づいて行われた推定に基づいて、前記命令最適化のインプリメンテーションを決定するステップとを包含する。
【0103】
好適には、前記推定が、前記再プログラミング可能なハードウェアがランタイム中に全命令を共にインプリメントするようにプログラミングされることができないことを提供する場合に、前記命令情報分析ステップは、個々の命令を、前記再プログラミング可能なハードウェアを再プログラミングすることによってインプリメントされ得る命令のセットに組み合わせてグルーピングするステップを包含する。
【0104】
一実施形態では、前記命令情報分析ステップは、異なるランタイム状態に対する複数のインプリメンテーションを決定するステップであって、それぞれは、該ランタイム状態に結び付けられる命令を有する、ステップと、各インプリメンテーションに結び付けられた決定状態情報を生成するステップであって、該決定状態情報は、実際のランタイム状態に応じて該インプリメンテーション間の選択を可能にする、ステップとを包含する。
【0105】
一実施形態では、前記命令最適化が、設計制約とともにコンパイルするインプリメンテーションを提供することができない場合に、前記命令情報分析ステップは、前記カスタマイゼーション仕様プロファイリングステップを呼び出し、該命令情報分析ステップによって提供された分析情報に基づいて該カスタマイゼーション仕様を再プロファイルするステップを包含する。
【0106】
好適には、前記アーキテクチャ最適化は、パイプライン処理を含む。
【0107】
好適には、前記アーキテクチャ最適化は、リソース複製を含む。
【0108】
好適には、前記アーキテクチャ最適化は、最適化とは別の技術を含む。
【0109】
より好適には、最適化とは別の前記技術は、未使用リソースの除去を含む。
【0110】
より好適には、最適化とは別の前記技術は、オプコード割当を含む。
【0111】
より好適には、最適化とは別の前記技術は、チャンネル通信最適化を含む。
【0112】
より好適には、最適化とは別の前記技術は、データおよび命令パスのカスタマイゼーションを含む。
【0113】
一実施形態では、再プログラミング可能なハードウェアの複数の構成が前記命令プロセッサをインプリメントすることが要求される場合に、前記命令ステップは、個々の構成をグループに最適化するステップと、該グループにされた構成のインプリメンテーションをスケジューリングするステップとを包含する。
【0114】
好適には、各テンプレートが、複数のプロセッサスタイルに対するプロセッサ定義および関連するパラメータを含むライブラリから抽出されたプロセッサ定義および関連するパラメータから生成される。
【0115】
好適には、前記プロセッサスタイルは、スーパースケーラープロセッサを含む。
【0116】
好適には、前記プロセッサスタイルは、ハイブリッドプロセッサを含む。
【0117】
一実施形態では、前記アプリケーションソースコードをコンパイルするステップにおいて利用された前記コンパイラは、前記命令情報分析ステップにおいて生成され、前記コンパイルするステップは、カスタマイゼーション情報とともに前記アプリケーションソースコードに注釈を付けるステップと、注釈が付けられたソースコードをコンパイルして、最適化された実行可能なコードを提供するステップとを包含する。
【0118】
別の実施形態では、前記コンパイルするステップは、前記アプリケーションソースコードをコンパイルするステップと、最適化を組み入れるために該コンパイルされたソースコードを再組織化して、最適化された実行可能なコードを提供するステップとを包含する。
【0119】
好適には、本方法は、前記構成情報および関連する実行可能なコード、および関連する場合には前記決定状態情報を、再プログラミング可能なハードウェアを用いてインプリメントされた命令プロセッサの適応および構成を管理するためにある少なくとも一つの管理システムに配備するステップをさらに包含する。
【0120】
好適には、本方法は、前記構成情報および関連する実行可能なコード、および、関連する場合には、前記決定状態情報を、再プログラミング可能なハードウェアを再プログラミングすることを可能にするための少なくとも一つのライブラリに配備するステップをさらに包含する。
【0121】
一実施形態では、前記再プログラミング可能なハードウェアは、少なくとも一つのフィールドプログラマブルゲートアレイを含む。
【0122】
別の実施形態では、前記再プログラミング可能なハードウェアは、少なくとも一つのコンプレックスプログラマブルロジックデバイスを含む。
【0123】
好適には、前記命令プロセッサは、前記再プログラミング可能なハードウェアを用いて完全にインプリメントされる。
【0124】
さらなる局面では、本発明は、再プログラミング可能なハードウェアを用いてインプリメントされた命令プロセッサのランタイム再構成を管理するための管理システムであって、複数の命令プロセッサインプリメンテーションに対する構成情報を含む構成ライブラリと、該インプリメンテーションに対する関連する実行可能なコードを含めるためのコードライブラリと、アプリケーションデータ、および必要に応じて構成情報および関連する実行可能なコードを、命令プロセッサのインプリメンテーションおよび実行のための再プログラミング可能なハードウェアにロードするためのローダーと、ローダーにアプリケーションデータ、および必要に応じて構成情報および関連する実行可能なコードをロードし、該実行可能なコードを実行するように信号を出すためのローダーコントローラと、実行中に該命令プロセッサのオペレーションに関するランタイム統計を取得するためのランタイムモニタと、該ランタイム統計を受け取り、該ローダに、新しいインプリメンテーションに対する新しい構成情報および関連する実行可能なコードを該再プログラミング可能なハードウェアにロードするように指示するようにオペレーション可能に構成された最適化デタミナと、最適化デタミナーを呼び出すための最適化インストラクタとを含む、管理システムを提供する。
【0125】
好適には、本システムは、前記ローダコントローラ、前記ランタイムモニタおよび前記最適化インストラクタを含む前記ランタイムマネジャーを含む。
【0126】
一実施形態では、前記最適化インストラクタは、前記最適化デタミナを予定可能なイベント上に自動的に呼び出すように構成される。
【0127】
好適には、前記イベントは、前記実行可能なコードの命令である。
【0128】
一実施形態では、前記最適化インストラクタは、外部エージェントによって呼び出されるように構成される。
【0129】
好適には、前記最適化インストラクタは、外部エージェントからの作動命令に応答して呼び出されるように構成される。
【0130】
好適には、前記最適化デタミナは、前記ローダコントローラに信号を出すことを指示し、新しい構成情報および関連する実行可能なコードを、前記外部エージェントによる前記最適化インストラクタの実施の際に前記再プログラミング可能なハードウェアにロードさせるように構成される
好適には、前記作動命令は、前記再プログラミング可能なハードウェアを用いてインプリメントされることになる前記インプリメンテーションを識別する。
【0131】
好適には、新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードは、外部エージェントによる前記最適化インストラクタの実施の前に、各個々の構成ライブラリおよび前記コードライブラリにロードされ、その結果、該当するインプリメンテーションに対する構成情報および関連する実行可能なコードは、該外部エージェントによる最適化インストラクタの実施の際に前記再プログラミング可能なハードウェアにロードされ得る。
【0132】
好適には、本システムは、前記インプリメンテーションの少なくとも一つに対する結び付けられた設計状態情報を含めるための決定状態ライブラリをさらに含み、前記ローダは、再プログラミング可能なハードウェアにロードされた該インプリメンテーションの種々のランタイム状態に対する複数の他のインプリメンテーションのための決定状態情報とともに前記最適化デタミナを提供するように構成され、該最適化デタミナは、該他のインプリメンテーションに対する該決定状態情報をプロファイルし、該他のインプリメンテーションのうちの任意に対する該決定状態情報が前記ランタイム統計をより緊密に適合させるかどうかを決定するように構成され、該他のインプリメンテーションの一つに対する該決定状態情報が該ランタイム統計をより緊密に適合させる場合に、前記ローダコントローラに信号を出すように指示して、該ローダに該当するインプリメンテーションに対する該構成情報および関連する実行可能なコードを該再プログラミング可能なハードウェアにロードさせる。
【0133】
好適には、本システムは、前記ランタイム統計に最適化された1以上の新しいインプリメンテーションを生成するためのアダプタをさらに含み、前記最適化デタミナは、該アダプタに1以上の新しいインプリメンテーションを生成することを指示するように構成される。
【0134】
一実施形態では、前記アダプタは、各新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードを各個々の構成ライブラリおよび前記コードライブラリにロードするように構成される。
【0135】
別の実施形態では、前記アダプタは、各新しいインプリメンテーションに対する前記構成情報、関連する実行可能なロードおよび関連する決定状態情報を、各個々の構成ライブラリ、前記コードライブラリおよび前記決定状態ライブラリにロードするように構成される。
【0136】
好適には、前記最適化デタミナは、前記ローダに、新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードを、予定可能な基準の統計に関して前記再プログラミング可能なハードウェアにロードすることを指示するように構成される。
【0137】
より好適には、前記最適化デタミナは、前記ローダに、新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードを前記再プログラミング可能なハードウェアにロードすることを指示するように構成され、ここで、再構成比R>1、該再構成比Rは、下式によって与えられ、
【0138】
【数5】
Figure 2005503680
ここで、Csw,jは、ソフトウェア関数f()をインプリメントするためのクロックサイクル数、
swは、該クロックサイクル数Csw,jにおける各クロックサイクルに対するサイクルタイム、
ci,jは、カスタム命令をインプリメントするためのクロックサイクル数、
ciは、該クロックサイクル数Cci,jにおける各クロックサイクルに対するサイクルタイム、
は、再プログラミング可能なハードウェアの再構成のために要求される時間である。
【0139】
一実施形態では、前記アダプタは、オンラインで動作するように構成される。
【0140】
別の実施形態では、前記アダプタは、オフラインで動作するように構成される。
【0141】
好適には、前記アダプタは、前記ランタイム統計に基づいて命令を分析し、命令最適化を決定するためのアナライザと、該命令最適化を含めるために前記アプリケーションソースコードをコンパイルし、実行可能なコードを生成するためのコンパイラと、前記ランタイム統計に基づいてアーキテクチャ情報を分析し、アーキテクチャ最適化を決定し、そして、該アーキテクチャ最適化を含む構成情報(好適には、ドメイン固有の構成情報)を生成するためのインスタンチエータと、該アーキテクチャ最適化を含む該構成情報からデバイス固有の構成情報を生成するためのビルダーとを含む。
【0142】
好適には、前記アダプタは、各候補インプリメンテーションに対する前記構成情報および関連するコードをプロファイルし、予定可能な基準に基づいて1以上の最適のインプリメンテーションを選択するするためのセレクタをさらに含む。
【0143】
好適には、前記アダプタは、カスタマイゼーション仕様の情報および前記ランタイム統計をプロファイルし、少なくとも一つのプロセッサスタイルをインプリメンテーションのための候補として識別するためのプロファイラと、インプリメンテーションのための候補として識別された各プロセッサスタイルに対するテンプレートを生成するためのテンプレートジェネレータとをさらに含む。
【0144】
好適には、前記プロファイルされた情報は、前記アプリケーションソースコードを含む。
【0145】
好適には、前記プロファイラは、複数のプロセッサスタイルをインプリメンテーションのための候補として識別するように構成される。
【0146】
より好適には、個々のプロセッサスタイルは、アプリケーションの部分を実行するように識別され、これにより、該アプリケーションは、組み合わされた個々のプロセッサスタイルによって実行されることになる。
【0147】
好適には、前記プロファイラは、最適化を可能にするためのプロファイリング情報を収集するようにさらに構成される。
【0148】
より好適には、前記プロファイリング情報は、オプコードのグループの頻度を含む。
【0149】
より好適には、前記プロファイリング情報は、オペレーション共有に関する情報を含む。
【0150】
より好適には、前記プロファイリング情報は、オペレーション並行化に関する情報を含む。
【0151】
好適には、前記アナライザは、前記命令情報を分析するステップにおいて前記プロファイリング情報を利用し、該命令最適化を決定するように構成される。
【0152】
好適には、前記命令最適化は、オペレーション最適化を含む。
【0153】
より好適には、前記オペレーション最適化は、オペレーション共有最適化を含む。
【0154】
より好適には、前記オペレーション最適化は、オペレーション並行最適化を含む。
【0155】
好適には、前記命令最適化は、カスタム命令を含む。
【0156】
一実施形態では、カスタム命令は、使用頻度に基づく最適化のための候補として識別される。
【0157】
別の実施形態では、前記カスタム命令は、決定関数Dに基づく最適化のための候補として識別され、ここで、関数Dは、下式によって与えられ、
【0158】
【数6】
Figure 2005503680
ここで、Csw,jは、ソフトウェア関数f()をインプリメントするためのクロックサイクル数、
swは、該クロックサイクル数Csw,jにおける各クロックサイクルに対するサイクルタイム、
ci,jは、カスタム命令をインプリメントするためのクロックサイクル数、
ciは、該クロックサイクル数Cci,jにおける各クロックサイクルに対するサイクルタイム、
は、手順が呼ばれる時間数、
は、該カスタム命令がインプリメントされたかどうかを示すバイナリ選択変数である。
【0159】
一実施形態では、前記アナライザは、候補命令最適化を識別し、前記インスタンチエータによって行われた推定に基づいて該命令最適化のインプリメンテーションを決定するように構成される。
【0160】
好適には、前記インスタンチエータからの前記推定が、前記再プログラミング可能なハードウェアがランタイム中に全命令を共にインプリメントするようにプログラミングされることができないことを提供する場合には、前記アナライザは、個々の命令を、再プログラミング可能なハードウェアを再プログラミングすることによってインプリメントされ得る命令のセットに組み合わせてグループ化する。
【0161】
一実施形態では、前記アナライザは、異なるランタイム状態に対する複数のインプリメンテーションであって、それぞれのインプリメンテーションは、該ランタイム状態に結び付けられた命令最適化を有する、インプリメンテーションを決定し、各インプリメンテーションに結び付けられた決定状態情報を生成するように構成され、該決定状態情報は、実際のランタイム状態に応じて該インプリメンテーション間の選択を可能にする。
【0162】
好適には、前記命令最適化が、設計制約とともにコンパイルするインプリメンテーションを提供することができない場合には、前記アナライザは、前記プロファイラを呼び出して、該アナライザによって提供された分析情報に基づいて前記カスタマイゼーション仕様を再プロファイルするように構成される。
【0163】
好適には、前記インスタンチエータによって行われた前記アーキテクチャ最適化は、パイプライン処理を含む。
【0164】
好適には、前記インスタンチエータによって行われた前記アーキテクチャ最適化は、リソース複製を含む。
【0165】
好適には、前記インスタンチエータによって行われた前記アーキテクチャ最適化は、最適化とは別の技術を含む。
【0166】
より好適には、最適化とは別の前記技術は、未使用リソースの除去を含む。
【0167】
より好適には、最適化とは別の前記技術は、オプコード割当を含む。
【0168】
より好適には、最適化とは別の前記技術は、チャンネル通信最適化を含む。
【0169】
より好適には、最適化とは別の前記技術は、データおよび命令パスのカスタマイゼーションを含む。
【0170】
好適には、前記再プログラミング可能なハードウェアの複数の構成が前記命令プロセッサをインプリメントすることが要求される場合には、前記インスタンチエータは、個々の構成をグループに最適化し、該グループ化された構成のインプリメンテーションをスケジューリングするように構成される。
【0171】
好適には、前記アダプタは、複数のプロセッサスタイルのためのプロセッサ定義および関連するパラメータを含むライブラリをさらに含み、前記テンプレートジェネレータは、該ライブラリから抽出されたプロセッサ定義および関連するパラメータからテンプレートを生成するように構成される。
【0172】
好適には、前記プロセッサスタイルは、スーパースケーラープロセッサを含む。
【0173】
好適には、前記プロセッサスタイルは、ハイブリッドプロセッサを含む。
【0174】
一実施形態では、前記コンパイラは、前記アナライザによって生成され、前記アプリケーションソースコードは、該コンパイラによる編集のためのカスタマイゼーション情報とともに注釈が付けられて最適化された実行可能なコードを提供する。
【0175】
別の実施形態では、前記コンパイラは、前記アプリケーションソースコードを編集し、最適化を組み入れるために前記編集されたソースコードを再組織化して最適化された実行可能なコードを提供するするように構成される。
【0176】
一実施形態では、前記再プログラミング可能なハードウェアは、少なくとも一つのフィールドプログラマブルゲートアレイを含む。
【0177】
別の実施形態では、前記再プログラミング可能なハードウェアは、少なくとも一つのコンプレックスプログラマブルロジックデバイスを含む。
【0178】
好適には、前記命令プロセッサは、前記再プログラミング可能なハードウェアを用いて完全にインプリメントされる。
【0179】
いっそうさらなる局面では、本発明は、再プログラミング可能なハードウェアにおいてインプリメントされる命令プロセッサのランタイム再構成を管理する方法であって、複数の命令プロセッサのインプリメンテーションに対する構成情報を含む構成ライブラリを提供するステップと、該インプリメンテーションのための関連する実行可能なコードを含ませるためのコードライブラリを提供するステップと、命令プロセッサのインプリメンテーションおよび実行のために、アプリケーションデータ、および必要に応じて構成情報および実行可能なコードを、再プログラミング可能なハードウェアにロードするステップと、該実行可能なコードを実行するステップと、該命令プロセッサのオペレーションに関するランタイム統計を取得するステップと、新しいインプリメンテーションに対する新しい構成情報および関連する実行可能なコードを該再プログラミング可能なハードウェアにロードするステップとを包含する、方法を提供する。
【0180】
一実施形態では、前記ロードするステップは、予定可能なイベント上で自動的に行われる。
【0181】
好適には、前記イベントは、前記実行可能なコードにおける命令である。
【0182】
一実施形態では、前記ロードするステップは、外部エージェントによって作動される。
【0183】
好適には、前記ロードするステップは、外部エージェントからの作動命令に応答して作動される。
【0184】
より好適には、前記作動命令は、前記再プログラミング可能なハードウェアを用いて、インプリメントされることになっているインプリメンテーションを識別する。
【0185】
一実施形態では、本方法は、前記ロードするステップの前に、新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードを、それぞれ個々の構成ライブラリおよび前記コードライブラリにロードするステップをさらに包含し、該ロードするステップは、外部エージェントにより作動する際に、該当するインプリメンテーションに対する前記構成情報および関連する実行可能なコードを、該再プログラミング可能なハードウェアにロードするステップを包含する。
【0186】
別の実施形態では、本方法は、前記インプリメンテーションの少なくとも一つに対する決定状態情報を含ませるための決定状態ライプラリを提供するステップと、該再プログラミング可能なハードウェアにおいてロードされた該インプリメンテーションのランタイム状態に対する複数の他のインプリメンテーションに対する該決定状態情報をプロファイルするステップと、他のインプリメンテーションのうちの任意に対する該決定状態情報が前記ランタイム統計により緊密に適合するかどうかを決定するステップとをさらに包含し、該他のインプリメンテーションの一つに対する該決定状態情報が該ランタイム統計により緊密に適合する場合に、該ロードするステップは、該当するインプリメンテーションに対する前記構成情報および関連する実行可能なコードを、前記再プログラミング可能なハードウェアにロードするステップを包含する。
【0187】
さらなる実施形態では、本方法は、前記ランタイム統計に最適化された1以上の新しいインプリメンテーションを生成するステップをさらに包含する。
【0188】
一実施形態では、本方法は、各新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードを、それぞれ個々の構成ライブラリおよび前記コードライブラリにロードするステップをさらに包含する。
【0189】
別の実施形態では、本方法は、各新しいインプリメンテーションに対する前記構成情報、関連する実行可能なコードおよび関連する決定状態情報を、それぞれ個々の構成ライブラリ、前記コードライブラリおよび前記決定状態ライブラリにロードするステップをさらに包含する。
【0190】
好適には、新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードは、予定可能な基準を満足する前記再プログラミング可能なハードウェアにロードされる。
【0191】
より好適には、新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードは、前記再プログラミング可能なハードウェアにロードされ、ここで、再構成比R>1、該再構成比Rは、下式により与えられ、
【0192】
【数7】
Figure 2005503680
ここで、Csw,jは、ソフトウェア関数f()をインプリメントするためのクロックサイクル数、
swは、該クロックサイクル数Csw,jにおける各クロックサイクルに対するサイクルタイム、
ci,jは、カスタム命令をインプリメントするためのクロックサイクル数、
ciは、該クロックサイクル数Cci,jにおける各クロックサイクルに対するサイクルタイム、
は、該再プログラミング可能なハードウェアの再構成のために要求される時間である。
【0193】
一実施形態では、前記インプリメンテーション生成ステップは、オンラインで行われる。
【0194】
別の実施形態では、前記インプリメンテーション生成ステップは、オフラインで行われる。
【0195】
好適には、前記インプリメンテーション生成ステップは、前記ランタイム統計に基づいて命令情報を分析し、命令最適化を決定するステップと、前記命令最適化を含ませるために前記アプリケーションソースコードをコンパイルし、実行可能なコードを生成するステップと、該ランタイム統計に基づいてアーキテクチャ情報を分析し、アーキテクチャ最適化を決定するステップと、該アーキテクチャ最適化を含む構成情報を生成するステップと、該アーキテクチャ最適化を含む該構成情報からデバイス固有の構成情報を生成するステップとを包含する。
【0196】
好適には、前記インプリメンテーションステップは、各候補インプリメンテーションに対する前記構成情報および関連するコードをプロファイルするステップと、それに応答して、予定可能な基準に基づいて1以上の最適のインプリメンテーションを選択するステップとをさらに包含する。
【0197】
一実施形態では、前記インプリメンテーション生成ステップは、カスタマイゼーション仕様および前記ランタイム統計内の情報をプロファイルするステップと、少なくとも一つのプロセッサスタイルをインプリメンテーションのための候補として識別するステップと、インプリメンテーションのための候補として識別された各プロセッサスタイルのためのテンプレートを生成するステップとをさらに包含する。
【0198】
好適には、前記プロファイルされた情報は、前記アプリケーションソースコードを含む。
【0199】
好適には、複数のプロセッサスタイルは、前記カスタマイゼーション仕様プロファイルステップにおいてインプリメンテーションのための候補として識別される。
【0200】
より好適には、個々の前記プロセッサスタイルは、アプリケーションの部分を実行するように識別され、これにより、該アプリケーションは、組み合わされた個々のプロセッサスタイルによって実行されることになる。
【0201】
好適には、最適化を可能にするためのプロファイリング情報は、前記カスタマイゼーション仕様プロファイルステップにおいて収集される。
【0202】
より好適には、前記プロファイリング情報は、オプコードのグループの頻度を含む。
【0203】
より好適には、前記プロファイリング情報は、オペレーション共有に関する情報を含む。
【0204】
より好適には、前記プロファイリング情報は、オペレーション並行化に関する情報を含む。
【0205】
一実施形態では、前記命令情報分析ステップは、該命令情報を分析する際に前記プロファイリング情報を利用するステップと、該命令最適化を決定するステップとを包含する。
【0206】
好適には、前記命令最適化は、オペレーション最適化を含む。
【0207】
より好適には、前記オペレーション最適化は、オペレーション共有最適化を含む。
【0208】
より好適には、前記オペレーション最適化は、オペレーション並行最適化を含む。
【0209】
好適には、前記命令最適化は、カスタム命令を含む。
【0210】
より好適には、カスタム情報は、使用頻度に基づく最適化のための候補として識別される。
【0211】
さらにより好適には、カスタム情報は、決定関数Dに基づく最適化のための候補として識別され、ここで、該決定関数Dは、
【0212】
【数8】
Figure 2005503680
により与えられ、
ここで、Csw,jは、ソフトウェア関数f()をインプリメントするためのクロックサイクル数、
swは、該クロックサイクル数Csw,jにおける各クロックサイクルに対するサイクルタイム、
ci,jは、カスタム命令をインプリメントするためのクロックサイクル数、
ciは、該クロックサイクル数Cci,jにおける各クロックサイクルに対するサイクルタイム、
は、手順が呼ばれる時間数、
は、該カスタム命令がインプリメントされるかどうかを示すバイナリ選択変数である。
【0213】
一実施形態では、前記命令情報分析ステップは、候補命令最適化を識別するステップと、該候補命令最適化の命令に基づいて行われた推定に基づいて前記命令最適化のインプリメンテーションを決定するステップとを包含する。
【0214】
好適には、前記推定が前記再プログラミング可能なハードウェアがランタイム中に全命令を共にインプリメントするためにプログラミングされることができないことを提供する場合に、前記命令情報分析ステップは、個々の命令を、前記再プログラミング可能なハードウェアを再プログラミングすることによってインプリメントされ得る命令のセットに組み合わせてグループ化するステップを包含する。
【0215】
別の実施形態では、前記命令情報分析ステップは、異なるランタイム状態に対する複数のインプリメンテーションを決定するステップとであって、それぞれは、前記ランタイム状態に結び付けられた命令最適化を有する、ステップと、各インプリメンテーションに結び付けられた決定状態情報を生成するステップであって、該決定状態情報は、実際のランタイム状態に応じて該インプリメンテーション間の選択を可能にする、ステップとを包含する。
【0216】
好適には、前記命令最適化が、設計制約とともにコンパイルするインプリメンテーションを提供できない場合に、前記命令情報分析ステップは、前記カスタマイゼーション仕様プロファイルステップを呼び出して、該命令情報分析ステップによって提供された分析情報に基づいて該カスタマイゼーション仕様を再プロファイルするステップとを包含する。
【0217】
好適には、前記アーキテクチャ最適化は、パイプライン処理を含む。
【0218】
好適には、前記アーキテクチャ最適化は、リソース複製を含む。
【0219】
好適には、前記アーキテクチャ最適化は、最適化とは別の技術を含む。
【0220】
より好適には、最適化とは別の前記技術は、未使用リソースの除去を含む。
【0221】
より好適には、最適化とは別の前記技術は、オプコード割当を含む。
【0222】
より好適には、最適化とは別の前記技術は、チャンネル通信最適化を含む。
【0223】
より好適には、最適化とは別の前記技術は、データおよび命令パスのカスタマイゼーションを含む。
【0224】
好適には、再プログラミング可能なハードウェアの複数の構成が前記命令プロセッサをインプリメントすることが要求される場合には、前記インスタンス生成ステップは、個々の構成をグループに最適化するステップと、
グループ化された構成のインプリメンテーションをスケジューリングするステップとを包含する。
【0225】
好適には、各テンプレートは、複数のプロセッサスタイルに対するプロセッサ定義および関連するパラメータを含むライブラリから抽出されたプロセッサ定義および関連するパラメータから生成される。
【0226】
好適には、前記プロセッサスタイルは、スーパースケーラープロセッサを含む。
【0227】
好適には、前記プロセッサスタイルは、ハイブリッドプロセッサを含む。
【0228】
一実施形態では、前記アプリケーションソースコードをコンパイルする際に利用された前記コンパイラは、前記命令情報分析ステップにおいて生成され、該コンパイルステップは、カスタマイゼーション情報とともに該アプリケーションソースコードに注釈を付けるステップと、該注釈が付けられたソースコードをコンパイルして最適化された実行可能なコードを提供するステップとを包含する。
【0229】
別の実施形態では、前記コンパイルするステップは、前記アプリケーションソースコードをコンパイルするステップと、最適化を組み入れるために該コンパイルされたソースコードを再組織化して最適化された実行可能なコードを提供するステップとを包含する。
【0230】
一実施形態では、前記再プログラミング可能なハードウェアは、少なくとも一つのフィールドプログラマブルゲートアレイを含む。
【0231】
別の実施形態では、前記再プログラミング可能なハードウェアは、少なくとも一つのコンプレックスプログラマブルロジックデバイスを含む。
【0232】
好適には、前記命令プロセッサは、前記再プログラミング可能なハードウェアを用いて完全にインプリメントされる。
【0233】
本発明の好適な実施形態が、添付図面のみを参照する例として以下に記載される。
【0234】
(I−設計−時間カスタマイゼーション)
図1は、本発明の好適な実施形態によるFIP設計システムを示す。
【0235】
(カスタマイゼーション仕様)
FPGA等の再プログラム可能なハードウェア上で展開するために、カスタマイズされたFIPインプリメンテーションを設計する際に、カスタマイゼーション仕様1が最初に提供される。
【0236】
このカスタマイゼーション仕様1は、C、JAVA(R)およびデータフローグラフといった、いくつかの形態のいずれかであり得るアプリケーションソースコードと、速度、領域および待ち時間といった、おそらく種々の実行時条件の下で設計の制約条件を含むカスタマイゼーション情報とを含むアプリケーション情報を含む。
【0237】
本実施形態において、アプリケーション情報は、開発されたFIPによって動作させられるべきデータを表すデータ、すなわち、実行時条件を示すデータを含み得るアプリケーションデータをさらに含む。好適な実施形態において、アプリケーションデータは、開発されたFIPにより動作させられるべきデータの範囲全体を示すデータを含む。本明細書中で後述されるように、このようなアプリケーションデータの提供は、実行時条件の範囲の解析を可能にする。
【0238】
本実施形態において、カスタマイゼーション情報は、ユーザ定義カスタム命令をさらに含む。これは、通常、構造の定義を例として、可能なカスタム命令を、随意的命令または強制的命令として定義する。
【0239】
(FIPプロファイル)
カスタマイゼーション仕様1には、その後、FIPプロファイラ2によってプロファイリング手続が行われる。
【0240】
プロファイリング手続において、アプリケーション情報、特に、アプリケーションソースコードがプロファイルされて、おそらく最適化されたインプリメンテーションを提供する1つ以上の候補FIPスタイルを識別する。特に、候補選択は、アプリケーションソースコードのスタイルに依存してなされ得る。通常、スタックベースのプロセッサは、多くの場合、オブジェクト指向のスタイルプログラミングにおいて多数の小型のプロセッサを有する記述のための効率的なプロセッサである。1つの好適な実施形態において、プロファイリング手続は、アプリケーションソースコードをFIPスタイルのオペコードにコンパイルする。代替的実施形態において、ユーザは、候補FIPスタイルを直接的に指定し得る。
【0241】
候補FIPスタイルを識別する場合、プロファイリング手続は、アプリケーションの異なった部分を実行するために可能な限り適切な、異なったFIPスタイルを識別し得る。従って、FIPプロファイラ2は、アプリケーション全体を実行するための単一のFIPスタイルか、またはアプリケーションを実行するための複数の異なったFIPスタイルが組み合わされたものを提示し得る。このFIPスタイルは、実行時間の間に再構成することによって達成され、ここで、再プログラム可能なハードウェアは、すべてのFIPスタイルが同時に構成されることを可能にしない。
【0242】
プロファイリング手続において、さらに、アプリケーションソースコードの構造、特に、FIPスタイルのためのオペコードおよびオペコードの群の使用頻度、ならびに共有および並行化の可能な程度についてのプロファイリング情報が収集される。
【0243】
識別された候補FIPスタイルに基づいて、プロセッサ定義、およびこれらのFIPスタイルの関連するパラメータが、レジスタおよびルックアップテーブルといった、任意のユーザ定義カスタム命令と関連するリソースと共にFIPライブラリ3から抽出される。
【0244】
(FIP テンプレートの生成)
次に、FIPテンプレートが、識別された候補FIPシステムの各々について、FIPテンプレートジェネレータ4によって、FIPライブラリ3から抽出されるプロセッサの定義および関連するパラメータから自動的に生成される。FIPテンプレートは、ユーザ定義カスタム命令等の、カスタマイゼーション仕様1からのカスタマイゼーション情報を組み込む。
【0245】
本実施形態Handel−C(バージョン2.1[18])において、C言語のようなシンタックスを用いるハードウェア記述言語が、命令プロセッサをインプリメントするために用いられる。しかしながら、本発明のFIP設計システムは、Handel−C記述に限定されず、他のハードウェア記述言語も同様に用いられ得ることが理解されるべきである。
【0246】
Handel−Cは、設計プロセス全体が高いレベルの抽象化を維持することを可能にする。これは、FIPインプリメンテーションの設計およびカスタム命令の包含の両方において有利である。Handel−Cは、設計の迅速なプロトタイプ化をさらに提供する。本発明は、特定のアプリケーション、特に、組み込まれたシステムの軽量のインプリメンテーションのためにカスタマイズされたFIPインプリメンテーションの提供に向けられる。Handel−C等の高レベル言語を用いて、単一の抽象記述を用いることによって設計プロセスを簡略化し、かつ設計されたFIPインプリメンテーションの完全性を提示するためのメカニズムを提供する[11、19]。
【0247】
図2は、基本命令プロセッサを示すスケルトンプロセッサテンプレート、スタックプロセッサへのスケルトンプロセッサのインスタンス化、およびスタックプロセッサのHandel−C記述を示す。
【0248】
プロセッサテンプレートにおいて、フェッチモジュールは、外部メモリから命令をフェッチして、これをExecuteモジュールに送信する。このフェッチモジュールは、その後、プログラムカウンタ等のExecuteモジュールが共有リソースの更新を完了したことを示す、Executeモジュールからの信号を待つ。可能なパラメータ表示は、カスタム命令の追加、不必要なリソースの除去、データおよび命令パスのカスタマイゼーション、オペコード割り当ての最適化、ならびにパイプライン化の程度の変更を包含する。
【0249】
例として、プロセッサのスケルトンテンプレートが以下のように
//Hardware resources
#include program_counter
chan fetchchan;
int ir_fetch,ir_exe;
par{
//−−Fetch module−−

//Fetch the instruction pointer to the program counter
ir_fetch=Fetch_from_memory(program_counter);
//Send previous instruction to the Execute module
fetchan!ir_fetch;
//Increment the program counter
program_counter++;

//−−Execute module−−

//Receives instruction from the Fetch module
fetchchan?ir_exe;
//Decodes and executes the relevant instruction
switch(decode(ir_exe));

//Instruction implementations



示され得る。
【0250】
Handel−Cにおいて、チャネル通信は、送信器および受信器の両方の準備が整うまで遮断される。命令!および?は、チャネルに送信およびチャネルから受信するために用いられる。例えば、fetchchan!ir_fetchは、ir_fetchに含まれる情報をfetchchanチャネルを介して送信する。
【0251】
上述のテンプレートは、基本的命令プロセッサを示す。最近の命令プロセッサは、効率的に強化する複数の機能を組み込み得る。これらの機能は、スーパースカラアーキテクチャ、パイプライン化、割り込みおよびメモリ管理を含む。
【0252】
図3は、スーパースカラプロセッサのスケルトンプロセッサテンプレートを示す。
【0253】
このプロセッサテンプレートは、共有リソースの一体性を維持するために、通信チャネルを介して相互に接続された複数のExecuteモジュールを含む。
【0254】
理解されるように、スーパースカラプロセッサは、複数のリソースの同時利用を提供する。スーパースカラアーキテクチャを支援するために、プロセッサテンプレートフレームワークは、必要なスケジューリングを提供する必要がある。命令のスケジューリングは、コンパイル時に生じるか、または実行時に動的に生じ得る。スケジューリングがコンパイル時に生じる場合、プロセッサの関連するコンパイラは、スケジューリングの責任を負う。そうでない場合、スケジューリングが実行時に動的に生じる場合、フェッチモジュールがスケジューリングアルゴリズムを組み込む。
【0255】
このプロセッサテンプレートは、ハイブリッドプロセッサを生成するためのプラットフォームをさらに提供する。理解されるように、ハイブリッドプロセッサは、1つより多い命令のスタイルを実行する能力を提供する。現在の複合プロセッサは、多くの場合、ハイブリッドプロセッサと考えられ得る。Intel(登録商標)x86プロセッサは、例えば、大抵の命令に対してレジスタベースのアプローチを用いるが、浮動小数点命令はスタックベースで動作される。本発明において、ハイブリッド化は、種々のプロセッサスタイルの利点とFIPインプリメンテーションとを組み合わせる手段を提供する。
【0256】
異なったプロセッサスタイルに対する命令は、異なった特性を有することが周知である。例えば、レジスタベースプロセッサは、スタックベースのプロセッサに対する命令よりも長い命令であり、より多くのプログラム命令を必要とする。さらに、レジスタベースの命令は、並行化がより容易に開発されることを可能にし、スタックベースの命令は、より大きい依存性を有し、かつ多くの場合、連続的に実行される傾向がある。
【0257】
複数の命令フォーマットと単一のハイブリッドFIPインプリメンテーションとの組み合わせの可能性は、速度とコードの大きさとの間にトレードオフを可能にし、これは、制限されたストレージを有する組み込まれたデバイスにとって重要であり得る。
【0258】
ハイブリッドFIPインプリメンテーションに付与されたバイナリ記述は、異なったプロセッサのスタイルでパッケージされた命令を含み得る。このようなハイブリッドFIPインプリメンテーションのフェッチモジュールは、適切なスタイルを決定するためにデコードのさらなるレベルを組み込み、命令を対応するExecuteモジュールに向ける。例えば、ハイブリッドプロセッサは、MIPS ExecuteモジュールおよびTIM Executeモジュールの両方を含み得、スーパースカラプロセッサと同じ態様で構成される。このハイブリッドFIPは、MIPコードを実行させるが、機能言語を支援する能力によって増強される。
【0259】
複数のプロセッサシステムを生成することもまた可能である。このようなシステムにおいて、異なった命令ストリームは、FIPがチャネルを介して互いに通信し得る各個別のFIPに供給される。
【0260】
本明細書中で上述のように、パイプライン化、割り込みハンドリングおよびメモリ管理のためのモジュールといった、他の最新式プロセッサモジュールは、さらに、同様の方法でFIPインプリメンテーションに組み込まれ得、モジュールがチャネルを用いて標準テンプレートとインターフェース接続される。パイプライン通信は、ハザードが生じないことが知られている場合は簡略化され得る。アプリケーションドメインのプロファイリングは、この情報を提供し得る。推論的実行は、さらに、ブランチの両方のパスをガード条件が決定されるまで同時に実行することによって支援され得る。
【0261】
設計時、最初、Executeモジュール内に命令は存在しない。命令がExecuteモジュールに追加されると、設計システムにおけるカウンタがインクリメントされて、追加された命令の数の追跡を維持する。オペコードと、そのオペコードのバイナリ表現との間にマッピングを提供するオペコードファイルがさらに生成される。単純な場合、命令のバイナリ表現はカウンタの数である。しかしながら、ワンホットエンコード等の他の数のスキームが用いられ得る。
【0262】
例として、オペコードファイルは、以下の形態
#define POP1
#define PUSH2
#define MUL3
をとり得る。
【0263】
命令は、#include宣言を用いてExecuteモジュールに容易に組み込まれる。例として、スタックベースの複数の命令は、Executeモジュールのスイッチブロック内に
#include stack_mul.hc
として含まれ得る。
【0264】
ここで、例として、stack_mul.hcの内容は、
//Read top of stack
iData1=readTOS0;
par{
//Multiply next item in stack to iData
iData1=readStack20;
//Adjust the stack pointer
sp−−;

par{
//Write data back into stack
writeStack(sp−1,iData1);
//Flag to denote that an instruction has completed execution
inst_done=1;

と書かれ得る。
カスタム命令は、さらに、このようにして、Executeモジュール内の命令を含むことによって、および別個のファイルにハードウェアインプリメンテーションを提供することによって含まれ得る。
【0265】
FIPテンプレートは、その後、各々以下のように処理される。各FIPインプリメンテーションの命令情報に、FIPアナライザ5によってFIP解析手続きが行われ、各FIPインプリメンテーションのアーキテクチャ情報に、FIPインスタンシエータ6によってFIPインスタンス化手続きが行われる。
【0266】
(FIP解析)
本実施形態において、FIPアナライザ5は、アプリケーションソースコードをプレコンパイルするためのプレコンパイラを含み、このプレコンパイル化は、次に続く命令の解析を簡略化する。プレコンパイル化の出力は、データフローグラフまたはオペコードといった、任意の中間表現であり得る。代替的実施形態において、プレコンパイラは省略され得る。
【0267】
各候補FIPテンプレートについて、FIPアナライザ5は、プロファイリング情報を解析する。プロファイリング情報がFIPプロファイラ2によって取得されると、候補命令の最適化、すなわち、オペレーションの候補の最適化(通常、共有および並行化の可能性)、および頻繁に用いられるオペコードの群を識別すること等によるカスタム命令の候補としてのオペレーションを識別する。
【0268】
結果として生じた候補命令の最適化は、その後、このような最適化について速度、大きさおよび待ち時間といった推定を行い、かつこの推定をFIPアナライザ5に戻すFIPインスタンシエータ6に転送される。
【0269】
FIPインスタンシエータ6から受信された推定に基づいて、FIPアナライザ5は、候補命令の最適化、すなわち、オペレーションの最適化およびカスタム命令のうちのどれが組み込まれるかを決定するためにこの推定を評価する。1実施形態において、FIPアナライザ5は、例えば、カスタマイゼーション仕様1に与えられるような設計の制約が満たされるかどうかを決定するために推定を評価する。
【0270】
1実施形態において、FIPアナライザ5による評価は、カスタマイゼーション仕様1におけるアプリケーションデータによって示されるような実行時条件で不安定性があり、従って、アプリケーションの最適な性能を提供するために、各々が異なった命令の最適化を有する複数のFIPインプリメンテーションが必要とされるか否かを決定する。すなわち、各々が特定の実行時条件と関連する複数のFIPインプリメンテーションが決定される。本実施形態において、FIPインプリメンテーションの各々が、関連する決定条件情報7を有する。この情報は、本明細書中で後述されるように、FIP管理システムが、続いて、実際の実行時条件に依存して、開発されたFIPインプリメンテーション間で選択することを可能にする。実行時条件が著しく安定している場合、例えば、非常に類似のフォーマットのデータセットに関する動作において、FIPアナライザ5は、おそらく、単一のFIPインプリメンテーションのみが必要であると決定する。
【0271】
速度または領域といった制約が、単一のFIP構成内のすべての命令をインプリメントすることを可能にする場合、FIPアナライザ5は、命令のうちのいくつかを群化して異なった群にし、従って、重要な命令群のみが、実行時間の間の特定の時間にインプリメントされ得る。本群化がインプリメントされ得るいくつかの方法がある。1つのインプリメンテーションにおいて、各FIPインプリメンテーションは同じ数の命令を有し、いくつかの命令が0命令であり、大きいハードウェア記述を含む代わりに、小さいハードウェア記述のみを含み得、別のFIPインプリメンテーションがロードされることを必要とするという点でのみ異なる。別のインプリメンテーションは、実行時ホストに再構成させることである。この場合、各FIPインプリメンテーションは、依然として、同じ数の命令を有するが、いくつかの命令は、例えば、ディジットシリアル形態で実行され得、領域がより小さく、待ち時間がより長い。実行時ホストは、その後、低速オペレーションを用いるよりも再構成時間が長い場合であっても、高速FIPインプリメンテーションを再構成することがより効率的であるかどうかを決定し得る。
【0272】
結果として生じたFIPインプリメンテーションが、カスタマイゼーション仕様1に規定されるような所定の制約と適合しない場合、FIPアナライザ5は、本実施形態におけるように、通常、場合によっては関連する別のFIPスタイルのための命令情報を提供することによって、改変された命令情報を提供するような、FIPアナライザ5によって提供される解析情報にさらに基づいて、FIPプロファイラ2を実行して、さらにカスタマイゼーション仕様1を再プロファイルする。
【0273】
(FIPインスタンス化)
各FIPインプリメンテーションに対して、FIP解析器5によって決定されたように、FIPインスタンス化器(instantiator)6は、アプリケーション命令を実行するように要求された1つ以上のFIPハードウエア構成を開発する。FIPインスタンス化器6はまた、プロセッサアーキテクチャを最適化するように構成される。
【0274】
上述のように、再プログラム可能ハードウエアは、特定の時間で要求されたFIPハードウエア構成の全てを、異なる時間でハードウエア上に再プログラムされる異なるFIPハードウエア構成に適応できない場合、複数のFIPハードウエア構成が発展される。複数のFIPハードウエア構成が必要とされる場合、FIPインスタンス化器6は、例えば、再構成を最小化するために、FIPハードウエア構成の構築およびスケジューリングの両方を最適化するように構成される。
【0275】
本実施形態では、最適化は輻輳軽減を含む。リソースが頻繁に使用される場合、再プログラム可能なハードウエア22におけるルーティング輻輳は、FIPをスローダウンさせ、より大きい領域を利用させる。FIPインスタンス化器6は、この条件を検出し、この問題を軽減する技術(例えば、ルーティングのパイプライン化、解読機構、および適切なリソースの複製)を呼び出すように構成される。リソースが複製される場合、FIP解析器5は、さらなるリソースにアクセスする新しい命令を生成するように命令される。
【0276】
本実施形態では、最適化はまた、最適化から独立した技術(未使用のリソースの除去、オペコード(opcode)割り当て、チャンネル通信最適化、ならびに特定のドメインに従うデータおよび命令パスのカスタマイズ)を含む。メモリキャッシュまたはガーベージコレクション戦略のためのサイズおよびキャッシング戦略もまたカスタマイズされ得る。
【0277】
次いで、インスタンス化器6は、各FIPインプリメンテーションのためのFIP構成情報8を生成する。FIP構成情報8は、画像処理等の所与のアプリケーションのドメインに特有であり得る。
【0278】
(FIP構築)
次いで、各FIPインプリメンテーションのためのドメイン専用FIP構成情報8は、例えば、デバイス専用FIP構成情報10(すなわち、専用FIPインプリメンテーションおよび専用の再プログラム可能なハードウエアと共に使用するための構成情報)を提供するように、FIPビルダ9によって、ベンダ専用のマクロのリソース構築、制約履行およびインスタンス化等の技術専用の最適化を受ける。特に、利用可能な任意の専用リソース(例えば、ファーストキャリー連鎖(first−carry chain)、埋め込みメモリ等)が展開される。
【0279】
FIPインスタンス化器6は、制約が満足され得ない場合、繰り返しおよび/または相互作用的に利用される。
【0280】
(FIP選択)
次いで、各FIPテンプレートについての1つ以上のFIPインプリメンテーションのために、FIP解析器5によって開発されたようなソースコードおよびFIPインスタンス化器6によって開発されたようなFIP構成情報10は、最適なFIPスタイルを選択するようにFIPセレクタ11によってプロファイルされる。最適なFIPスタイルは、通常、速度とサイズとの交換を含む所定の基準に基づく、上述のような1つ以上のFIPインプリメンテーションを有する。
【0281】
(FIPコンパイル)
FIPセレクタ11による1つ以上のFIPインプリメンテーションの選択に従って、次いで、これらのインプリメンテーションのためのソースコードは、実行可能なFIPコード13を提供するようにFIPコンパイラ12によってコンパイルされる。
【0282】
図4は、実行可能なFIPコード13のコンパイルのための2つの可能なコンパイルパスを示す。
【0283】
本実施形態では、図4の左側のコンパイルパスでは、ソースコードは、命令の最適化に関連する情報(例えば命令の使用の頻度、命令の群、および共有されたリソース等)を用いて注釈が付けられる。このステップは、標準的なソースコードを、コンパイルされたコードおよびFIPインプリメンテーションの両方の最適化において利用される特定の情報を含むソースコードに変換する。このコンパイル技術の利点は、設計フローの間に情報が失われず、これにより最適化プロセスができる限り効率的になることを可能にする。
【0284】
本実施形態では、FIPコンパイラ12および関連するツールがFIP解析器5によって生成され、それによりこれらはFIP専用である。このように、命令の最適化を用いて注釈が付けられた本実施形態では、FIP専用コンパイラ12によって利用されるべきソースコードは、実行可能なFIPコード13にコンパイルされ得、好適な実施形態では、このFIPインプリメンテーションに対する命令を実行時間で決定かつ委任するためのソフトウエア制御メカニズムは、実行時間で特定の持続時間で最適化した。関連されたツールは、アセンブリ、リンカー、ディスアセンブラー、デバッガ、命令セットシミュレータ、ならびに、適切な実行可能なFIPコード13を生成し、性能を最適化し、サイズを低減し、電力消費を低減する等のための他の設備を含む。本実施形態では、FIPコンパイラ12および関連するツールは、例えば、選択されたFIPテンプレートおよび関連付けられたパラメータの要求に基づいて、FIP解析器5によって自動的に生成されることに留意のこと。
【0285】
代替的実施形態では、図4の右側のコンパイルパスにおいて、利用可能なコンパイラはソースコードをコンパイルするために利用される。このコンパイラは標準的なコンパイラであってもよいし、以前のFIPインプリメンテーションから作成されたコンパイラであってもよい。このコンパイル技術では、コンパイルされたコードは、可能な最適化を決定するために評価され、命令レベルの並行性および他の最適化を開発するために再編成される。これは、JVMのためのジャストインタイム(just−in−time)コンパイル(JIT)の概念と同様である。この技術の利点は、既存のコンパイラが使用され得、予めコンパイルされたコードがFIP上で実行され得ることである。しかし、コンパイルされたコードで可能な最適化を識別することはしばしば困難であるため、このアプローチは、FIP専用コンパイラを用いるよりもあまり最適ではないソリューションを生み出し得る。
【0286】
(FIPインプリメンテーション)
実行時間再構成を可能にするように1つ以上のFIP構成を定義し得る、生じたFIP構成情報10および実行可能なFIPコード13は、必要とされたアプリケーションのための最適化されたFIPインプリメンテーションを提供する。複数のFIPインプリメンテーションは、実行時間条件を変更するための最適な性能を提供するように開発される場合、上述のように、実行時間条件に応じてFIPインプリメンテーション間の選択を可能にするように、各FIPインプリメンテーションは決定条件情報7に関連付けられた。あるカスタマイズされたハードウエアインプリメンテーションを別のハードウエアインプリメンテーションに得変換するインクリメント構成が、妥当な場合、作成され得る[16]。
【0287】
次いで開発されたFIPインプリメンテーションは、FIP管理システム14、あるいは代替的にまたはさらに、再プログラム可能なハードウエアへの以後のロードためのFIPライブラリに直接展開され得る。複数のFIPインプリメンテーションが開発される場合、FIPインプリメンテーションの内の1つが最初の展開(例えば平均的な性能を提供することに基づいて)のために選択される。実際には、開発されたFIPインプリメンテーションのための、FIP構成情報10および実行可能なFIPコード13、ならびに関連する場合、決定条件情報7は、以後のダウンロードのための中央化されたライブラリに、または同様のアプリケーションを実行するシステムに伝達され得、それによりこれらの他のシステムを更新するための手段を提供することが考えられる。
【0288】
あるいは、本実施形態では、FIPスタイルおよびそれぞれ開発されたFIPインプリメンテーションのためのFIP構成情報10のための関連付けられたパラメータがFIPライブラリ3にロードされ、それによりFIPライブラリ3に含まれたFIPスタイルの数を拡張する。
【0289】
(FIP最適化)
上述のように、FIPインプリメンテーションのための最適化は2つのレベルで発生し得る。すなわち、ソフトウエアおよびプロセッサの両方が最適化され得る。コンパイラおよび命令プロセッサ設計を最適化する場合の発展は、FIPアーキテクチャおよびコンパイラにおける使用に適応され得る。FIPシステムとの使用のためのこれらの技術の改変が以下に説明される。
【0290】
最適化は4つのグループに広く分類され得る。
独立的な技術
・未使用のリソースおよび命令の除去
・データパスおよび命令のカスタマイズ
・オペコード割り当ての最適化
・モジュール間のチャンネル通信の最適化
従属的な技術(典型的には、FPGAインプリメンテーション)
・ファーストキャリー連鎖、埋め込まれたメモリ等の利用可能な専用リソースの展開
・ルーティングによるルーティング遅延を低減するための輻輳管理の導入
特定のプロセッサスタイル
・JVM、MIPS、TIM等のプロセッサタイプ
・スーパスカラー(superscalar)アーキテクチャ、パイプライン等
特定のコンパイラ
・命令レベルの並列スケジューリング
・オペコード再順序付け
・ループ展開およびフォールディング
・パイプライン処理の実行
いくつかのこれらの最適化が既に開発された[11]。以下は、カスタム命令および技術依存最適化を説明する。特定のデータパスの直接的なハードウエアインプリメンテーションは、カスタム命令による始動のためにFIPハードウエア構成に組み込まれ得る。これは、フェッチおよびデコード命令の数を低減させると共に性能を改善する。しかし、カスタム命令が多くなればなるほど、FIPハードウエア構成も大きくなる。従って、速度の改善は、大きさの増加によって達成される。カスタム命令のタイプおよび数の選択は重要である。この選択はまた、どれくらいの頻度で特定のカスタム命令が使用されるかに依存すべきである。このトレードオフは以下により詳細に説明される。
【0291】
さらに、データパスのみ残して、フェッチおよびデコードステージを互いに離して最適化し、それにより効果的に直接的なハードウエアインプリメンテーション(図7に関して説明されたハードウエアインプリメンテーションに類似する)を与えることが可能である。この構成によって、メモリボトルネック(memory bottleneck)に関連した問題が明らかになり得る。
【0292】
所定のプロセッサスタイル特有の最適化もまた可能である。しばしばこれらは、デバイス依存リソースに関連付けられる。例えば、JVMでは、複数のメモリのバンクが存在する場合、スタックアクセスが強化され得、それによりスタック上部2つのエレメントが同時に読み出され得る。デバイス依存リソースは、技術専用ハードウエアライブラリ[20]、ベンダに提供されたマクロ(例えば、Xilinx Inc.によって提供されたようなRelationally Placed Macro[21]およびAltera Corporationによって提供されたようなMegafunction[22])を用いることによって展開され得る。
【0293】
ASICとは異なり、FPGAにおいてレジスタは放棄されるが、ルーティングは、大きい遅延ペナルティが課せられ、設計のサイズを増大させ得る。FPGAのこの特性は、テンプレート設計に制限を設ける。ルーティング輻輳は、リソースが多くの動作によって広範囲に使用される場合に発生する。リソースのサイズまたは隣接するモジュールのルーティング密度等の基準もまた、FIPハードウエア構成のルーティングに影響を与え得る。3つの設計ソリューションが本明細書中で提示される。第1および最も簡単な設計ソリューションは、ルーティングをパイプライン化することである。第2の設計ソリューションは、復号化ネットワークを構成することであり、復号化ネットワークは、パイプライン化ツリーとしてリソースの始動を制御する。これは、より短いサイクル時間およびより小さい論理ルーティング遅延比を生じるが、より大きい領域およびより複雑な回路を犠牲にする。第3の設計ソリューションは、リソースを複製することである。リソースは、共有されることが有益である場合に共有されるだけであるべきである。例えば、命令頻度は、中間結果のための一時的なレジスタを必要とし、そのためこれらのリソースを共有することは効率的ではない。共有された動作に対して、面積および速度は、遅延とトレードオフされ得る。例えば、共有されたリソースが単一サイクル乗算器である場合、パラレルシリアルコンバータがルーティング輻輳を低減する位置において配置されると、共有されたリソースはいくつかのディジットシリアル(digit−serial)乗算器によって置換され得る。しかし、複製されたリソースが共有されたストレージである場合、状態情報の一貫性を補償するように注意が払われなければならない。
【0294】
(FIP JVMおよびMIPSインプリメンテーション)
FIP設計システムの動作は、FIP JVMインプリメンテーション[23],ならびにソフトウエアおよびASICインプリメンテーションと比較されたこれらのインプリメンテーションの性能に関する例を用いて以下に説明される。MIPSスタイルプロセッサのFIPインプリメンテーションの性能もまた説明される。
【0295】
FIP JVMインプリメンテーションはJVM仕様に基づいて開発されてきた。不必要なリソースの除去、データおよび命令パスのカスタマイズ、オペコード割り当ての最適化、およびパイプライン化の程度の改変を含む多くのパラメータ化および最適化が研究されてきた。上述のカスタマイズされたJVMは、RC1000−PPデバイス(Celoxica Limited,UK)を用いてインプリメントされてきた。
【0296】
第1の実施形態では、共有され分離されたリソースを利用するFIP JVMが開発されてきた。本実施形態は、良好な面積利用を提供するが、ルーティング輻輳のために速度を犠牲にする。
【0297】
第2の実施形態では、パイプライン化の2つのステージを利用し、交換不可能なリソース(スタックおよびメインメモリ等)のみを共有するFIP JVMが開発されてきた。スタックベースのプロセッサは、本来順次的である。FIP JVMの速度最適化は、レジスタスタイルの命令インプリメンテーションとして明らかになる並列性を導入する。
【0298】
第3の実施形態では、所定の命令および「レジスタ」スタイル(例えばトップオブスタック(top−of−stack)レジスタ)の改良のためのより深いパイプライン化を組み込むFIP JVMが開発されてきた。そのトップオブスタックレジスタが複製される。命令が異なるトップオブスタックレジスタから読み出され得るが、命令は、スタックに直接再度書き込まれる。複製されたレジスタは、フェッチサイクルの間に更新される。ほとんどの命令は4つのパイプライン化ステージによって処理されるが、所定の命令(呼び出し機能のための命令等)は、より深い論理を必要とし、これらの命令のインプリメンテーションは5または6のパイプライン化ステージに分割されてきた。ルーティングもまた輻輳の効果を低減するようにパイプライン化されてきた。
【0299】
これらのFIP JVMの実施形態は、可能なパラメータ化の間のトレードオフを示す。
【0300】
従来のリソース共有化によって再プログラム可能なハードウエアのための共有化方法を最大化することは、著しいルーティングオーバーヘッドを導入し得る。輻輳管理は、インプリメンテーションメディアを支配するルーティングの量が開始する場合、最適な程度の共有化を識別するために必要である。
【0301】
パイプライン化はクロックサイクル時間を低減するために有用である。しかし、スタック等のリソースは、命令間の重なりの量を制限する動作依存性を有し得、そしてパイプライン化された場合に遅延をさらに誘導する。
【0302】
以下の評価に対して、FIP JVMの上述の第3の実施形態は、電流プログラムカウンタおよび32ビットのデータパスサイズと共に使用される。図5に示されたように、このインプリメンテーションの理論的な上限は、NOP命令のみが支援される場合、約80MHzであると予測される。これはフェッチデコーディング構造が合理的に有効であることを示す。クロック速度は、プログラムカウンタサイズを低減するかまたは加算器を改良することによってさらに増加され得る。
【0303】
FIP JVMの性能がIntel(R)プロセッサ(300MHzのPentium(R)II)およびASIC Java(R)プロセッサ(Helborn Electronics,Segyung, Koreaの200MHzのGMJ30501SB)上で動作するJVMと比較される。GMJ30501SBは、Sun MicrosystemsによるpicoJava(R)1 core[24]に基づく。CaffineMark 3.0[25]Java(R)benchmarkが性能を測定するために使用されてきた。CaffineMark 3.0benchmarkは、埋め込まれたデバイスのJVM性能をベンチマークテストするために使用されたテストのセットである。これらは、ブール動作の速度、機能呼び出し実行および素数(prime)の生成に関するテストを含む。
【0304】
図6は、Intel(R)プロセッサおよびASIC Java(R)プロセッサ上で動作するJVMソフトウエアを用いて達成されたベンチマークスコアと共にFIP JVMのベンチマークスコアを示す。FIP JVMインプリメンテーションはソフトウエアインプリメンテーションを有利に比較し、より深いパイプラインを有するバージョンが7倍速く実行するように評価される。ASIC Java(R)プロセッサが最大速度を達成すると、留意されるべき2つの重要なファクタがある。第1に、FIP JVMが33MHzで動作するのと比較して、ASSIC Java(R)プロセッサが200MHzで動作する。第2に、ASIC Java(R)プロセッサが固定された命令を有する一方で、FIP JVMは再構成によるカスタム命令の組み込みを可能にする。FIP JVMによって提供された速度上昇は、より多くのカスタム命令としてASIC Java(R)プロセッサによって示された速度上昇が付与された速度に向かって増大することが期待される。以下では、カスタム命令を提供することに関するトレードオフが示される。
【0305】
リンクリストが、埋め込まれたシステム(携帯電話等)における電子メールまたは電話番号を組織化するために使用され得る。直接的なハードウエアインプリメンテーション、すなわち、命令をフェッチおよび命令を復号化しないインプリメンテーションは、異なるアクセス手順(リンクを挿入し値を検索すること等)を支援する別々の回路を有するリンクリスト構造を操作するように開発されてきた。これらの直接的なインプリメンテーションは、40〜70MHzでクロック発振され、FIP JVMにおけるカスタム命令のためのデータパスとして組み込まれ得る。
【0306】
挿入ソートアルゴリズムが、比較のために直接的ハードウエアアプローチおよびFIP JVMアプローチの両方を用いて書き込まれてきた。直接的ハードウエアインプリメンテーションは、100個のリンクのリストをソートするのに2.3msかかる一方で、FIP JVMは、6.4msかかり、ASIC JVMは1msかかると推定される。リンクのこのリストへの挿入は22個のJava(R)命令を獲得する。
【0307】
リンクを挿入するためのカスタム命令を含むことによって、FIP JVMの実行時間は5msまで低減され得る。なぜなら、単一のカスタム命令は、終了するのに12サイクルかかる。1つの命令当たり10サイクル、ならびに10フェッチおよびデコードサイクルの節約となる。少しのサイクルの実行を要求するカスタム命令が利用されるが、サイクル時間はより長くなり得ることに留意のこと。2つのカスタム命令が追加される場合、実行時間は3.1msに低減される。しかし、カスタム命令の追加はアプリケーションを速度上昇させるだけでなく、FIPハードウエア構成のサイズを増加させる。別のFIPインプリメンテーションを用いるトレードオフは以下に考慮される。
【0308】
比較の目的のために、30MHzでクロック発振され得るMIPSスタイルFIPが開発された。2種類の比較が着手された。デバイス独立比較は、ゲート、レジスタ、およびラッチの数に着目する。デバイス依存比較は、使用されたXilinx Virtexスライスに着目する。
【0309】
図7は、十分に共有されたFIPインプリメンテーションと直接的ハードウエアインプリメンテーションとの間のトレードオフを示す。
【0310】
概して、直接的ハードウエアインプリメンテーションは少数のサイクルで実行し、FIPインプリメンテーションよりも高い周波数でクロック発振され得る。例えば、挿入命令は、FIPにおいて30MHzで22サイクルかかるものと比較して、直接的ハードウエア構成において39MHzで12サイクルかかる。直接的ハードウエア構成は、100個のリンクのリストをソートするのに2.3msかかるが、FIPは7.1msかかる。しかし、直接的なハードウエアインプリメンテーションによって使用された460のスライスと比較した場合、FIPは290のVirtexスライスのみを使用する。
【0311】
図7から留意されるように、FIPインプリメンテーションは、5つ以上のアクセス手順を含むアプリケーションのための直接的ハードウエアインプリメンテーションよりも小さい。クロスオーバーポイントは、より多くのカスタム命令を含むことがもはや有益でない場合、推定するための手段を提供する。より多くのカスタム命令がFIPインプリメンテーションに加えられ、クロスオーバーポイントは上方にシフトする。
【0312】
従って、本発明のFIPインプリメンテーションはリソース共有のための良好な機構を提供する。FIPの実行速度はカスタム命令を組み込むことによって改善され得るが、これは、サイズの犠牲を払い得る。さらにデバイス独立の結果は、FIPインプリメンテーションにおけるカスタム命令の数およびタイプを推定するために利用され得る。これは、リソース共有化の最適化の自動化の手段を提供する。共有化が増加すると、ルーティング輻輳の量もまた増加する。なぜなら、FIPインプリメンテーションにおける多数の命令がより多くの輻輳を生じ得るためである。カスタム命令は命令の数を低減し、それに従って、スループットを増加し、輻輳を低減する。
【0313】
要するに、本発明のFIP設計システムは、プログラム可能な命令プロセッサのシステマチックなカスタム化のための枠組みを提供する。このFIPアプローチは、プロセッサテンプレートを構成かつ最適化する、パラメータ化によって命令プロセッサの高速開発を可能にする。さらに、標準コンパイラまたはFIP専用コンパイラはインプリメンテーションプロセスにおいて使用され得る。
【0314】
(II 実行時間適応)
図8は、本発明の好適な実施形態によるFIP管理システムを示す。
【0315】
上述のように、本発明のFIP設計システムは、FIP構成情報10および関連付けられた実行可能FIPコード13、ならびにこれに関係する場合、FIPインプリメンテーションのための関連付けられた決定条件情報7、そして対応するFIP専用コンパイラ12をさらに提供する。この設計環境もまた初期実行時間環境を生成する。ユーザはコンパイル時間において実行時間環境の能力を決定し得る。例えば、ユーザは全体の再構成または自動調整が実行時間中に必要とされるかどうかを決定し得る。これは、実行時間環境の複雑さを決定する。
【0316】
FIP管理システムは、システムの中央ハブである実行時間マネージャ18を含む。
【0317】
(FIP実行)
実行時間マネージャ18は、FIPローダ20を制御するためのFIPローダコントローラ19を含む。アプリケーションを実行するように命令された場合、FIPローダコントローラ19は、FIPローダ20に信号を送信し、本実施形態のFPGAの再プログラム可能なハードウエア22にFIPによって動作されることになるロードアプリケーションデータ21、FIP、および必要とされた場合、FIP構成情報10、実行可能なFIPコード13、ならびにこれらに関連する場合、FIPインプリメンテーションのための決定条件情報7をロードし、次いで、このFIPコード13を実行し、アプリケーション結果24を提供する。必要とされたFIPインプリメンテーションが再プログラム可能なハードウエア22に既にロードされた場合、FIPローダ20はアプリケーションデータ21のみをロードする。
【0318】
FIP構成情報10、関連付けられた実行可能なFIPコード13、および関連付けられた決定情報7は、FIP構成情報ライブラリ25、実行可能なFIPコードライブラリ26、および決定条件情報ライブラリ27の内の対応するものから得られる。FIP構成情報ライブラリ25は、複数のFIP情報ファイルを含み、再プログラム可能なハードウエア22を構成するための各ファイルは、関連付けられたFIPコード13の実行においてカスタムアプリケーションを実現する。実行可能なFIPコードライブラリ26は、複数の実行可能なFIPコードファイルを含み、各ファイルは、FIP構成情報ファイルのそれぞれ1つに関連付けられる。この決定条件情報ライブラリ27は、複数の決定条件情報ファイルを含み、各ファイルは、FIP構成情報ファイルのそれぞれ1つに関連付けられる。本実施形態では、ライブラリ25、26、27は、システムのローカルコンポーネントであるが、代替的実施形態では、これらのライブラリは、必要とされた場合にダウンロードされるFIPインプリメンテーションのための、システムおよびFIP構成情報10、関連付けられた実行可能なFIP13、ならびに関連付けられた決定条件情報7からリモートに配置され得る。
【0319】
(実行時間モニタリング)
実行時間マネージャ18は、FIPコード13の実行の間、再プログラム可能なハードウエア22の動作に関係する実行時間統計29を獲得する実行時間モニタ28をさらに含む。すなわちこの統計は、各手続きが呼び出される回数、最も頻繁に使用されたオペコード、および実行の局在性を決定するためのプログラムカウンタ(PC)の値等の実行時間条件に関係する。
【0320】
本実施形態では、実行時間モニタ28は、実行時間データを収集し、FIPの性能に影響を与えないようにFIPの実行と同時に実行時間統計29を生成する。このような収集および解析は、ハードウエアにおいて(例えば、ASICによって)または例えばパーソナルコンピュータまたはプログラム可能なシステムオンチップデバイス[4]上のソフトウエアでインプリメントされ得る。
【0321】
このような統計が収集される頻度が適切である[26]。短いサンプリング期間は、アプリケーションの代替的な特性を正確に反映しない結果を生じ得るが、長いサンプリング期間は、大きい格納空間の量を必要とし得、アプリケーションの実行に対する影響を有する。
【0322】
本発明のFIPインプリメンテーションの設計に利用されたFIPテンプレートは、統計モニタリングモジュールの容易な組み込みを可能にする。本実施形態では、情報が手続き呼び出しの頻度に応じて収集され、所与のアプリケーションの実行時間にわたってサンプリングされる。
【0323】
(最適化決定I)
実行時間マネージャ18は、最適化決定器31に命令するための最適化インストラクタ30をさらに含む。最適化インストラクタ30は、例えば、実行可能なコードにおける命令に応答するか、またはユーザ等の外部エージェントからの駆動命令に応答して最適化決定器31を自動的に駆動させるように構成され得る。
【0324】
最適化決定器31は、実行時間モニタ28から実行時間統計29を受信し、再プログラム可能なハードウエア22への新しいFIPインプリメンテーションのためのFIP構成情報10および関連付けられた実行可能なFIPコード13をロードするためにFIPローダ20に信号を送るように、FIPローダコントローラ19に命令するために動作可能である。
【0325】
動作の1つのモードでは、最適化インストラクタ30は、外部エージェントからの駆動命令32によって動作され、駆動命令は、どのFIPインプリメンテーションがインプリメントされるべきかを識別し、最適化決定器31は、再プログラム可能なハードウエア22への新しいFIPインプリメンテーションのためのFIP構成情報10および関連付けられた実行可能なFIPコード13をロードするためにFIPローダ20に信号を送るように、FIPローダコントローラ19に直接命令する。典型的には、一実施形態では、FIP構成情報10、関連付けられた実行可能なFIPコード13、および関連する場合、1つ以上の新しいFIPインプリメンテーションのための関連付けられた決定条件情報7は、新しいカスタムアプリケーションを実行することが予測されるライブラリ25、26、27、および新しいFIPインプリメンテーションの1つにロードするように外部エージェントによって命令される最適化インストラクタ30にロードされ得る。
【0326】
最適化決定器31は、異なるFIPインプリメンテーションが、現在の実行時間条件下でインプリメントされたアプリケーションの改良された実行時間性能を提供するかどうかを決定するようにさらに構成され、新しい、最適化されたFIPインプリメンテーションが再プログラム可能なハードウエア22にロードされることを可能にする等のこれらの条件は、実行時間統計29によって提示される。
【0327】
動作の別のモードでは、ライブラリ25、26は、種々の実行時間条件下で、所与のアプリケーションのFIPインプリメンテーションのためのFIP構成情報10および関連付けられた実行可能なFIPコード13を既に含む場合、最適化決定器31は、これらのFIPインプリメンテーションのための決定条件情報7を、実行時間マネージャ18およびFIPローダ20を介して利用可能であるように簡単にプロファイルし、任意のこれらのFIPインプリメンテーションのための決定条件情報7が獲得された実行時間統計29により正確に適合するかどうかを決定する。これらのFIPインプリメンテーションの内の1つのための決定条件情報7が獲得された実行時間統計29により正確に適合する場合、最適化決定器31は、再プログラム可能なハードウエア22へのライブラリ25、26からそのFIPインプリメンテーションのためのFIP構成情報10および関連付けられた実行可能なFIPコード13をロードするためにFIPローダ20に信号を送信するように、FIPローダコントローラ19に命令する。ソースコードのコンパイルまたはインスタンス化およびアーキテクチャ情報の構築が必要とされず、FIPインプリメンテーションが同様の実行時間条件に対する最適化された性能を提供するように開発されたという事実のため、新しいFIPのインプリメンテーションは実質的に瞬間的であり、プログラム可能なハードウエア22の再プログラミングの利益に関する決定が実行される必要はない。
【0328】
動作のさらなるモードでは、最適化決定器31は、所与のアプリケーションに対して実行時間条件に対して最適に最適化される新しいFIPインプリメンテーションを生成するようにFIPアダプタ33に命令するように構成される。
【0329】
なおさらなる動作モードでは、図7に関して説明されたハードウエアインプリメンテーションと同様に、フェッチおよび復号化ステージを互いに離して、データパスのみを残し、それにより直接的なハードウエアインプリメンテーションを効率的に与えるように最適化することが可能である。この構成によって、メモリボトルネックに関連付けられた問題が明らかになり得る。
【0330】
(FIP適応)
一実施形態では、図9に示されたように、FIPアダプタ33は、アプリケーション情報としてFIPプロファイラ2に提供された実行時間統計29を有する、図1に示されたような上述のFIP設計システムのコンポーネントを含み、これによりカスタマイズ仕様1の最適化されたプロファイリングを可能にする。説明の不必要な重複を避けるために、FIP設計システムのより以前の記述についての参照がなされる。
【0331】
別の実施形態では、図10に示されたように、FIPアダプタ33は、図1に示されたような上述のFIP設計システムのコンポーネントを含む。説明の不必要な複製を避けるために、FIPアダプタ33と上述のFIP設計システムとの間の差異のみが詳細に説明され、FIP設計システムのより以前の記述についての参照がなされる。FIPアダプタ33は、FIPプロファイラ2、FIPライブラリ3、およびFIPテンプレート発生器4が省略され、実行時間統計29は、アプリケーション情報としてFIP解析器5に提供され、インプリメントされたFIPのための命令カスタマイズの識別を可能にする点で上述のFIP設計システムとは異なる。本実施形態のFIPアダプタ33は、上述の実施形態のFIPアダプタ33の簡略化されたバージョンを提示し、汎用として使用されないが、FIPインプリメンテーションの高速適応を提供する利点を提供する。
【0332】
適応化の戦略は多くのファクタ(例えば、どれくらい速く環境条件が変化するかに依存する)によって影響され得る。適応化は、オンラインであってもよいし、オフラインであってもよい。オンライン適応化は、即時再構成のためのFIPインプリメンテーションを適応すること、ならびに生じたFIP構成情報10、関連付けられた実行可能なFIPコード13、および関連する場合、決定条件情報7をライブラリ25、26、27にロードすることを含み、それにより非常に迅速に変化する環境条件に応答して再プログラム可能なハードウエア22の再プログラミングを可能にする。このシステムでは、FIPアダプタ33は、通常再プログラム可能なハードウエア22に厳密に適応される。オフライン適応化は、再プログラム可能なハードウエア22のあまり即時的ではない再プログラミングのためのFIPインプリメンテーションに適応することを含む。このような適応化は、典型的には、環境条件は、比較適長期間にわたって安定であるか、または変化されないままである。このシステムでは、FIPアダプタ33は、再プログラム可能なハードウエア22からリモートに配置され得る。
【0333】
上述のFIP設計システムに関して、FIPアダプタのFIP解析器5は、実行時間統計29(典型的には、所定のネイティブまたはカスタム命令の使用の頻度)を解析し、典型的には所与の状況のための最適なトレードオフを決定する場合(例えば、所与の実行速度で最小の利用可能なハードウエア領域を決定する場合)に、可能な最適化を決定する。実行時間統計29に基づいて、より多くのリソースは、最も頻繁に使用される機能に特化され得るか(例えば、所定のこれらの機能のためのカスタム命令を生成することによって)、またはより多くの頻繁に使用される命令に対してより高速の動作を用いてあるいはキャッシュサイズまたはスタック深さを変更する等の種々の他の最適化を実行する。例として、頻繁に使用された乗算器回路の性能が増大し得るが、より少ない頻度で使用された動作の領域および性能を低減させる。本発明は、ドメイン特性のために最適化解析のフレキシビリティのレベルを提供する。
【0334】
カスタム命令が上記解析の結果に従って生成される。一旦カスタム命令が生成されると、FIP解析器5は、生じた命令を解析する。この解析は必要である。なぜなら、例えばカスタム化リクエストは、非常に多い新しいカスタム命令を含み得、領域または遅延制限を満たし得ない。この場合、FIP解析器5は、カスタム命令を除去するかどうかを決定し、支援されたネイティブコードの数を低減し、またはあまり頻繁には使用されないオペコードの性能を低位化する。
【0335】
実行時間中に、新しいカスタム命令をオンラインでインプリメントする一つの方法は、ルックアップテーブルを使用するとによってなされる。例えば、ライブラリ25、26、27は、1、2、または3つの入力を受け取り、出力を与えるカスタム命令を有する予めコンパイルされたFIPを含み得る。実行時間において、Xilinx Inc.[27]からの「JBits」および「JRTR」ツール等の適切なツールを用いると、関連のルックアップテーブルコードは、部分的な実行時間再構成を用いて比較適効率的にアップロードされ得る。一実施形態では、このアプローチは、機能の所定のスタイルがより頻繁に使用されるが、必ずしも正確に機能するとは限らない情報を利用する。例えば、異なる三角関数がルックアップテーブルを再構成することによって支援され得る。
【0336】
カスタム命令の生成においてFIPアダプタ33によってなされる特定の最適化がオペコード連鎖、命令フォールディング、およびリソース複製を含む。これらの最適化は以下により詳細に説明される。
【0337】
(オペコード連鎖)
オペコード連鎖の概念は、手続きを構成するオペコードのシーケンスを接続することである。これは、RISCマシンのマイクロコードの概念と同様である。連鎖は、命令をフェッチし復号化する場合に消費される時間を低減する。さらに、手続きの呼び出しを単一の命令に変換することによって、手続きの呼び出しのオーバーヘッドが避けられ得る。このようなオーバーヘッドは、プリアンブルおよびポストアンブルハウスキーピングルーチン(プログラムカウンタを格納すること、共有レジスタ、およびプリフェッチバッファを満たすこと)を含む。
【0338】
(命令フォールディング)
命令フォールディングは、いくつかのオペコードがパラレルに実行されることを可能にする。例えば、4つまでのJava(R)コードが同時に処理され得る[28]。例として、スタッククベースのマシンでは、追加がスタックの上にプッシュ(push)される2つの値を必要とし、その結果は、命令の後に格納され得る。値がレジスタファイルにロードされた場合、レジスタベースのプロセッサが1つのサイクルで全ての4つの動作を実行し得る。動作が直接互いに連鎖されるために、値をレジスタファイルにロードする必要がない。動作のための値が、以前の動作の結果としてロードされる。
【0339】
(リソース複製)
リソースの複製は、以前に隠され得る並列性のいくつかのレベルの利用を可能にする。2つの可能なアプローチがある。これらは、データレベル並列性および命令レベル並列性[29]である。データレベル並列性は、1つの命令において可能である数と同じ数の動作を実行することによってデータ独立性を利用する。命令レベル並列性は、異なる実行ユニットによって処理された独立命令の同時動作を含む。カスタム命令が生成される場合、利用可能なリソースは、できる限り多くのデータレベルまたは命令レベルの並列性を利用することが必要とされる場合に拡張される。
【0340】
利用され得る他の最適化がある。これらは、ルックアップテーブルインプリメンテーションを用いるなどのデバイス特有の最適化を含む。これらの最適化は、Xilinx Virtex−E(Xilinx Inc.)におけるような高いブロックRAMコンテンツを利用する。あるいは、冗長レジスタの周りのレジスタを移動させることによって、および冗長レジスタを除去することによって、カスタム命令の全体のサイクル数が低減され得る。命令プロセッサは、硬いタイミング特性を有する。命令プロセッサのクロック周期は、臨界遅延パスによって決定され、これは、簡単なビット命令(ビット操作、ビットワイズ(bit−wise)ロジックおよびロード/格納動作等)が、実行するのに少なくとも1サイクルを要することを意味する。他の可能な最適化は、多重FIP設計を格納するのに要する構成ストレージの量およびこれらのFIP設計[16]間の再構成にかかる時間を低減することによって実行時間再構成のオーバーヘッドを低減させることに関係する。
【0341】
本実施形態では、最も頻繁に使用されたオペコードおよびオペコードの群は、最適化の候補として識別される。従って、可能な候補の多くの範囲は、カスタム命令を生成するために識別される可能性がある。
【0342】
一実施形態では、オンライン等の候補選択(候補の選択は迅速になされなければならない)に対して、簡単な決定ツリーが利用され、典型的には、いくつかのサイズ制約が残っているが、最も頻繁な使用パターンを有する候補のカスタム命令の所定の数を選択する。この技術は迅速な選択を可能にするが、最適な最適化を導き得ない。
【0343】
別の実施形態および特にオフライン候補選択では、最適化候補の選択は、目標決定関数Dを利用することによって決定される。この決定は、利用可能な面積および電力、現在のFIP構成およびカスタム命令に対する影響等の制約の影響を受ける。
【0344】
一実施形態では、決定関数Dは、以下の式である。
【0345】
【数9】
Figure 2005503680
ここで、Csw,jは、ソフトウエア関数f()を実現するためのクロックサイクルの数である。Tswは、クロックサイクル数Csw,jにおける各クロックに関するサイクル時間である。Cci,jは、カスタム命令を実現するためのクロックサイクルの数である。Tciは、クロックサイクル数Cci,jにおける各クロックサイクルについてのクロック時間である。Fは、手続きが呼び出される回数である。Sは、バイナリ選択変数であり、カスタム命令がインプリメントされるかどうかを表す。
【0346】
候補カスタム命令がFIPインスタンス化器6によって提供される、サイズおよび性能推定に基づいて、FIP解析器5は、カスタム命令の内の1つを認定し、FIPアダプタ33は、FIP構成情報10、関連付けられた実行可能なFIPコード13、および関係する場合、新しいFIPインプリメンテーションのための関連付けられた決定情報7を作成するように進み、そのFIP構成情報10、関連付けられた実行可能なFIPコード13、および関係する場合、関連付けられた決定情報7は、ライブラリ25、26、27にロードされる。次いで、FIP構成情報10、関連付けられた実行可能なFIPコード13、および関係する場合、関連付けられた決定情報7によって提供される、新しいFIPインプリメンテーションは、アプリケーションが次に実行される場合、再プログラム可能なハードウエア22にロードされ得る。
【0347】
(最適化決定II(再プログラミング))
再プログラム可能なハードウエア22の再プログラミングは、例えば、ユーザが再構成命令においてボタンを押すことによって、またはキー入力すること等によって、実行時間における実行可能なFIPコード13における明示的な命令またはシステムへの駆動命令32の結果として発生し得る。
【0348】
再プログラミングが実行時間において動的な再プログラミングであると、実行データがアプリケーション実行の前に利用可能である場合、再プログラミングは実行時間においてスケジューリングされ得る。他の場合では、FIPをホストする再プログラム可能なハードウエア22が満たされるようになる場合、少なくとも最近使用された(LRU)法等のスキームが使用されて、どのカスタム命令がインプリメントされたままであるかを決定し得る。これは、実行時間モニタ28から取られた実行時間統計29から取られた情報によって重み付けされ得、その結果、より頻繁に使用されたカスタム命令は、スワップアウト(swappedout)される可能性が最も低い。
【0349】
本実施形態では、簡単なメトリックが使用されて、新しいFIPインプリメンテーションを有する再プログラム可能なハードウエア22の再構成が有利であるかどうかを決定する。現在動作しているFIPが特定の速度で実行し、そして新しくかつより高速なFIPが置換するように提案されている場合、この新しいFIPは、実行時間の低減が再構成時間よりも大きい場合、取り入れられるべきである。
【0350】
ソフトウエア関数f()を考慮すると、「通常」命令によってインプリメントされる場合、ソフトウエア関数は、実行にCSWクロックサイクルを必要とし、各クロックサイクルは、各サイクル時間Tswを有し、そしてカスタム命令としてインプリメントされた場合、実行にCciクロックサイクルを必要とし、各Cciクロックサイクルは、サイクル時間Tciを有する。ソフトウエア関数f()は、本実施形態のアプリケーションの1つの実行において、研究のもとでその期間中にF回呼び出され、および再プログラム可能なハードウエア22のための再構成時間T(データを収集および解析するための時間を含む)とすると、ソフトウエア関数の実行時間tswおよびカスタム命令の実行時間tciは、以下のように与えられ得る。
【0351】
sw=CswswF (2)
ci=CciciF (3)
再構成比Rは、以下のように定義され得る。
【0352】
【数10】
Figure 2005503680
従って、
【0353】
【数11】
Figure 2005503680
より一般的には、n個のカスタム命令の場合、再構成比Rは、以下のようになる。
【0354】
【数12】
Figure 2005503680
再構成閾値Rは、R=1の場合に到達される。有益である再構成に対して、再構成比Rは、再構成閾値Rを越えなければならない。すなわち、再構成比の分子によって表されたように、ソフトウエアにおいてFIPコードを実行するためにかかった時間tswは、FIPのためのカスタム命令を含む、再構成されたFIPのFIPコードを実行するためにかかった時間tciに再構成時間Tを加えた時間よりも大きい。
【0355】
図11は、再構成比Rに関する種々の異なるパラメータの影響をグラフィカルに示す。水平軸は、アプリケーションが実行される数Fを表す。垂直軸は再構成比Rを表す。
【0356】
最低の曲線(曲線A)は、基本FIPを表す。ここで、Cswsw=Cciciである。基本FIPのための再構成比Rは、再構成時間Tが0以下である場合、再構成閾値Rを超えない。
【0357】
曲線Bおよび曲線Cは、1つおよび2つのカスタムをそれぞれ組み込むように再構成される基本FIPを表す。式(6)に与えられたような再構成比Rの一般式は、より多くのカスタム命令が含まれた場合、再構成閾値Rがアプリケーションのより少ない数の実行を用いて到達され得ることを示す。より多くのカスタム命令が追加され、一般的な命令が除去される場合、再構成曲線の形状は、直接的ハードウエアインプリメンテーションの曲線に向かう傾向がある。
【0358】
曲線Dは、2つのカスタム命令を組み込むが、基本FIPのクロック速度の半分(すなわち、2Tci=Tsw)で動作するFIPのための再構成比Rを表す。
【0359】
曲線Eは、2つのカスタム命令および基本FIPの再構成時間Tの半分を有するFIPを表す。再構成時間Tを半分だけ低減することは、再構成曲線の最初の勾配を増加させ、再構成閾値Rに到達するために必要とされるアプリケーション実行の数を低減する。全体の再構成が他の例証されたFIPにおいて利用されてきたが、部分的な再構成が利用され得る。再構成時間Tは、再構成サイクル時間tおよび再プログラム可能なハードウエア22を再構成するために必要な再構成サイクルnの積として書き換えられ得る。部分的再構成を利用することによって、必要とされる再構成サイクルnの数が低減され得[26,30]、従って、再構成比Rに関するその影響を低減させる。再構成サイクルnの数はまた、キャッシュまたはコンテクストスイッチ[6,31,32]による高速再構成を支援する技術およびアーキテクチャにおける改良によって低減され得る。
【0360】
(インプリメンテーション)
本発明の実行時間管理システムの動作は、情報の暗号化および解読のための高度な暗号化標準(AES−Rijndael)アルゴリズム[17]のインプリメンテーションに関する例によって以下に説明される。AESアルゴリズムは、変数のブロックおよびキー長を有する繰り返しブロック暗号である。本インプリメンテーションでは、FIPは100MHzで動作することが想定される。あるいは、データ収集および解析は、FIP実行とパラレルで実行され、それにより、任意の性能ペナルティを導入しない。
【0361】
AESインプリメンテーションでは、最も頻繁に実行された手続きは、AES標準によって定義された手続きFFmulxである。全ての手続き呼び出しの内、これらの呼び出しの74%がFFmulxに起因され得る。
【0362】
FFmulx手続きのJava(R)インプリメンテーションは以下に示される。
【0363】
【数13】
Figure 2005503680
図12は、Java(R)オペコードにおける手続きFFmulxの逐次的インプリメンテーションおよび基本オペコードの最適化として連鎖およびフォールディングオペコードを示す。
【0364】
左側の列は、手続きFFmulxをインプリメントするために必要とされたJava(R)オペコードを表す。本実施形態では、Java(R)オペコードインプリメンテーションは、平均で26.5クロックサイクルに、手続きプリアンブルおよびポストプリアンブルルーチンのためにさらに4クロックサイクルを加えたサイクルだけかかる。条件ブランチIFEQオペコードの結果に依存して、本インプリメンテーションは、実行するのに25〜28クロックサイクルかかる。
【0365】
右側の列は、連鎖および命令フォールディングする両方のオペコードによる最適化の結果を表す。オペコード連鎖は、一時的なレジスタに中間結果を格納することを含む。スタックから値をプッシュおよびポップする必要性を除去することによって、スタックによって課された逐次構造が除去される。次に、命令フォールディングが適用される。命令フォールディングは、いくつかのオペコードが結合されるか、または1つの命令にフォールディングされることを可能にする。このように、いくつかのスタックベースの命令が、1つのレジスタベースの命令に変換される。さらに、手続きFFmulxが単一の命令によって置換されるため、手続き呼び出しのために必要なプリアンブルおよびポストアンブルルーチンを実行する必要性はもはやない。この最適化は、各アプリケーション実行において平均で約30クロックサイクルから8.5クロックサイクルにクロックサイクルの数を低減する。
【0366】
図13は、手続きFFmulxのさらなる最適化を表す。本最適化では、カスタム命令は、データ依存性を利用することによってパラレルに実行される。図13では、同じレベルの命令は、データ依存性を表す矢印を用いて、同じクロックサイクルで実行される。本インプリメンテーションは、複数の発行および予測された実行等のVLIW/EPICアーキテクチャ[33]のアイデアに従い、直接的ハードウエアインプリメンテーションに類似する。この最適化では、サイクル数は、6サイクルに低減される。
【0367】
上述の最適化を用いて、手続きFFmulxのための元のソフトウエア機能は、30サイクルから6サイクルに最適化され、それにより5倍の速度増加を生成した。
【0368】
図14は、再構成比R対異なるキー幅を有するパラレルカスタム命令をインプリメントするFIPによって暗号化された128ビットのデータブロックの数のグラフを示す。再構成計算は、Xilinx XCV1000チップ(Xilinx Inc.)上のFIPインプリメンテーションの全体の再構成のための時間に基づく。
【0369】
再プログラム可能なハードウエア22の再構成は、再構成比Rが1より大きい場合に有益であるということを式(6)から思い出すこと。図14から、128ビット暗号キーの場合、128ビットのデータの約650ブロックは、再構成が有益である前に、処理されなければならないことが理解され得る。これは、約10Kバイトのデータに変換する。暗号キーのサイズが増加する場合、再構成が次第により有益になることが理解される。192ビットキーの場合、再構成が有益になる前に約8.6Kバイトが処理されなければならない。そして、256ビットキーの場合、再構成が有益になる前に約7Kバイトが処理されなければならない。
【0370】
AES仕様[17]は、いくつかのAES関数をルックアップテーブルに展開することによって加速され得ることを提案している。7Gビット/sまでの速度が、このような目的のためのXilinx Virtex−Eチップ(Xilinx Inc.)におけるブロックRAMを用いて報告されてきた[34]。FIPのために設計されたカスタム命令はまた、このような技術の使用を行い得る。
【0371】
この点では、種々のFIPインプリメンテーションがAESアルゴリズムを支援するように開発されてきた。キーのサイズおよびブロックのサイズが256ビットである場合、図15は、これらのFIPインプリメンテーションの相対的な性能をグラフィカルに示す。図16は、これらのFIPインプリメンテーションに対応する速度上昇を示す。
【0372】
AES1は、一般的FIPまたは基本的FIPにおいて未使用のオペコードに関連付けられたハードウエアを除去することによってカスタマイズされるが、任意のカスタム命令を含まないAESアルゴリズムの第1のFIPインプリメンテーションである。
【0373】
AES2は、暗号化および復号化の両方を速度上昇させる3つのカスタム命令を組み込むAESアルゴリズムの第2のFIPインプリメンテーションである。AES2は、上述のFFmulxカスタム化および2つのさらなるカスタム命令を含む。これら3つのカスタム命令は、暗号化および復号化の両方を速度上昇させる。この改良は、暗号化に対して1.3倍および復号化に対して3.6倍である。新しいカスタム命令は、除去されるべきいくつかのオペコードの機能性をもはや使用されないオペコードで置換して、カスタム命令のためのより多くの領域を提供する。従って、トレードオフは、AES2がAES1よりもあまりフレキシブルではないことである。なぜなら、AES1で実行可能であるいくつかのルーチンは、もはやAES2上で実行可能ではあり得ないためである。
【0374】
AES3は、AES暗号化におけるさらなる改良を提供するAESアルゴリズムの第3のFIPインプリメンテーションである。AES3は、暗号化のための内部ループを置換する新しいカスタム命令を組み込む。より多くのリソースは、ルックアップテーブルを用いることによって暗号化を速度上昇させるカスタム命令に与えられるが、AES2に追加された2つのさらなるカスタム命令は、この新しい命令のためのスペースを作成するために除去されなければならない。結果として、暗号化性能の改良は、AES1と比較した場合、5.2倍であるが、復号化性能はたった1.4倍である。しかし、このトレードオフは、AES2に導入された2つのさらなるカスタム命令がこの新しいカスタム命令のためのスペースを作成するために除去されなければならない。そのため、暗号化速度が改良されるが、これは、復号化速度を犠牲にする。
【0375】
AES4は、AES復号化の改良を提供するAESアルゴリズムの第4のFIPインプリメンテーションである。AES4は、AES2を超えて5倍の復号化速度増加を提供するが、AES3に関して同様のトレードオフを有する新しいカスタム命令を組み込む。
【0376】
これらの結果は、再構成に対する戦略を提示する。暗号化が復号化よりもより頻繁に使用される場合、AES3が利用されるべきである。他方、復号化がより頻繁に使用される場合、AES4が利用されるべきである。使用に関する情報が利用可能でない場合、AES2が利用されるべきである。同様な最適化戦略が、実行時間条件が異なる時間で異なるFIPインプリメンテーションを変化させ支援するアプリケーションに適用され得る。
【0377】
AESアルゴリズムのインプリメンテーションのために、最初に、JVM等の一般的なFIPがAESアルゴリズムを実行するために使用される。設計時間において、FIP設計者は、AESアルゴリズムを実行を加速するためにカスタム命令を導入し得る。システムを展開した後、実行時間マネージャ18における実行時間モニタ28は、ユーザの実行パターンを記録する。実行時間モニタ28は、AES復号化がAES暗号化よりもより頻繁にそして大きいブロックサイズで使用されることを示すことを考慮すること。このような状況は、例えば、ユーザがブラウジングのためのバンキング情報をダウンロードする場合に発生し、取引のための比較的より小さいサイズのデータを再送信する。最適化解析器30は、結果的にFIPインプリメンテーションの最適化を要求する。カスタム命令は、適応ユニット31によって作成され、FIPインプリメンテーションAES4が作成される。次いで、実行時間マネージャが新しいFIPインプリメンテーションに再構成することが有利であるかどうか決定する。
【0378】
(III−ツール)
(デバッグツール)
デバッグツールは、ユーザが、クラッシュ(crash)した場合、シミュレーションまたは実行中にコードを介してトレースする方法を提供する。いくつかの適応後、種々のFIP構成は、アプリケーションの実行の間の使用し得る。デバッグツールは、正確なFIP設計を介してトレースすることによってエラーを識別する場合に支援し、カスタム命令に拡張する能力を提供し、カスタム命令を生成するために使用される元のオペコードを明らかにする。図17は、デバッグツールを図解的に示す。左のボックス(ボックスA)は、元のコードを含む。中心ボックス(ボックスB)は、適応の後の新しいコードを含む。右のボックス(ボックスC)は、FIP構成情報10および関連付けられた実行可能なFIPコード13を示す。デバッグの間、ユーザは、どのFIPが実行しているか、そしてさらにどのオペコードがコードA等のカスタム命令を作成するために使用されるかを知る必要がある。
【0379】
(コンパイラツール)
図18は、コンパイラツールを示す。コンパイラツールは、ユーザがアプリケーションコードを入力することを可能にし、アプリケーションコードをマシンコードにコンパイルする。次いでコンパイルされたコードは、プロファイルされ得、かつ検査されて、この結果、FIPがアプリケーションを実行するように最適化され得る。コンパイラツールは、インプリメントべきカスタム命令を提案するか、またはユーザがカスタム命令を作成することを可能にさせる。右手のポップアップボックスは、この特徴を示し、これにより、ユーザは新しいカスタム命令を作成することが可能にされ、新しい命令もまたコンパイラツールによって提案される。この命令は、カスタム命令nextNumである。
【0380】
FIP設計が受け入れ可能である場合、FIP構成情報10および関連付けられた実行可能なFIPコード13がFIPインプリメンテーションに対して生成される。
【0381】
上述したように、コンパイラツールは、再構成を統計学的に決定するために使用され得る。本実施形態では、コンパイラツールはまた、ユーザがその再構成比Rおよび再構成が試みられる再構成閾値Rを特定する手段を提供する。このコンパイラツールはまた、ユーザがプリフェッチおよび再構成戦略の点で実行時間環境を調整することを可能させる。
【0382】
このコンパイラツールはまた、ユーザがFIPを最適化する場合の指標として働く情報を提供するための手段を提供する。例として、仕様基準は、(i)ロードバランシング(例えば、ユーザは、加算器がその時間の60%で使用され、乗算器がその時間のたった5%で使用される場合、より多くのリソースが加算器に集中されるべきであり、FIPの実行の速度を増加させる)、(ii)スループット(すなわち、単位時間当たりで生成された結果)、(iii)実行可能なFIPコードのサイズ、および(iv)FIP構成のサイズを含む。
【0383】
最後に、本発明は、その好適な実施形態において説明され、添付された特許請求の範囲によって規定されたような本発明の範囲から逸脱することなく多くの異なる方法で改変され得ることが理解される。
【0384】
さらに、本明細書中で引用された文書の全ての内容が参考として援用されることが理解される。
【0385】
(参考文献)
【0386】
【表1】
Figure 2005503680
【0387】
【表2】
Figure 2005503680
【0388】
【表3】
Figure 2005503680
【0389】
【表4】
Figure 2005503680

【図面の簡単な説明】
【0390】
【図1】図1は、本発明の好適な実施形態による、FIP設計システムを図で示す。
【図2】図2は、基本命令プロセッサを示すスケルトンプロセッサテンプレート、スタックプロセッサへのスケルトンプロセッサのインスタンス化、およびスタックプロセッサのHandel−C記述を示す。
【図3】図3は、スーパースカラプロセッサのスケルトンプロセッサテンプレートを示す。
【図4】図4は、本発明の実施形態による、FIPインプリメンテーションの実行可能なFIPコードをコンパイルするための2つの可能なコンパイルパスを示す。
【図5】図5は、Xilinx Virtex XCV 1000デバイス上でインプリメントされるJVMの種々の命令の性能を示す。
【図6】図6は、本発明の実施形態としてインプリメントされたFIP JVMのベンチマークスコアを含む、JVMのベンチマークスコアを示す。
【図7】図7は、本発明の実施形態による、FIPインプリメンテーションのために支援されたアクセス手続の数の関数として必要とされるvirtexスライスの数、およびXilinx Virtex XCV 1000デバイス上でインプリメントされる直接的なハードウェアインプリメンテーションを図で示す。
【図8】図8は、本発明の好適な実施形態による、FIP管理システムを図で示す。
【図9】図9は、図8のFIP管理システムの1実施形態のFIPアダプタを示す。
【図10】図10は、図8のFIP管理システムの別の実施形態のFIPアダプタを示す。
【図11】図11は、図8のFIP管理システムにより用いられるように、再構成比Rに種々のパラメータが及ぼす影響を図で示す。
【図12】図12は、最適化として、Java(登録商標)オペコードおよび連鎖オペコードにおけるAESアルゴリズムの手続FFmulxの連続的インプリメンテーションを示す。
【図13】図13は、手続FFmulxのさらなる最適化を示す。
【図14】図14は、異なったキー幅の並行カスタム命令をインプリメントする本発明の実施形態による、FIPにより暗号化された128ビットデータブロックの数の関数としての再構成比Rを図で示す。
【図15】図15は、AESアルゴリズムのFIPインプリメンテーションの相対的性能をグラフィカルに示す。
【図16】図16は、図15におけるFIPインプリメンテーションの相対的スピードアップを示す。
【図17】図17は、本発明の実施形態による、デバッグツールを示す。
【図18】図18は、本発明の実施形態による、コンパイラツールを示す。

Claims (192)

  1. 再プログラミング可能なハードウェアを用いて命令プロセッサをインプリメントするために、カスタマイゼーション仕様であって、アプリケーションソースコードを含むアプリケーション情報および設計制約を含むカスタマイゼーション情報を含む、カスタマイゼーション仕様に基づいて構成情報および関連する実行可能コードを生成するための設計システムであって、
    インプリメンテーションの候補として識別された各プロセッサスタイルに対してテンプレートを生成するためのテンプレートジェネレータと、
    各テンプレートに対する命令情報を分析し、命令最適化を決定するためのアナライザと、
    該命令最適化を含めて、そして、実行可能なコードを生成するために該アプリケーションソースコードをコンパイルするためのコンパイラと、
    各テンプレートに対するアーキテクチャ情報を分析し、アーキテクチャ最適化を決定し、そして、該アーキテクチャ最適化を含む構成情報を生成するためのインスタンチエータと、
    該アーキテクチャ最適化を含む該構成情報からデバイス固有の構成情報を生成するためのビルダーと
    を含む、システム。
  2. 各候補インプリメンテーションに対する前記構成情報および関連コードをプロファイルし、予定可能な基準に基づいて1以上の最適のインプリメンテーションを選択するためのセレクタをさらに含む、請求項1に記載のシステム。
  3. 前記アプリケーション情報は、アプリケーションデータをさらに含む、請求項1または2に記載のシステム。
  4. 前記アプリケーションデータは、前記命令プロセッサによって動作されることになるデータを表すデータを含む、請求項3に記載のシステム。
  5. 前記アプリケーションデータは、ランタイム状態の範囲を表すデータを含む、請求項4に記載のシステム。
  6. 前記カスタマイゼーション情報は、少なくとも一つのカスタム命令をさらに含む、請求項1〜5のいずれか1つに記載のシステム。
  7. 各カスタム命令は、強制的にまたは任意的に規定され得る、請求項6に記載のシステム。
  8. 前記カスタマイゼーション情報は、少なくとも一つのプロセッサスタイルを、インプリメンテーションのための候補としてさらに識別する、請求項1〜7のいずれか1つに記載のシステム。
  9. カスタマイゼーション仕様の情報をプロファイルし、少なくとも一つのプロセッサスタイルを、インプリメンテーションのための候補として識別するためのプロファイラをさらに含む、請求項1〜8のいずれか一つに記載のシステム。
  10. 前記プロファイルされた情報は、前記アプリケーションソースコードを含む、請求項9に記載のシステム。
  11. 前記プロファイラは、複数のプロセッサスタイルを、インプリメンテーションのための候補として識別するように構成される、請求項9または10に記載のシステム。
  12. 個々の前記プロセッサスタイルは、アプリケーションの部分を実行するために識別され、これにより、該アプリケーションは、組み合わされた個々の該プロセッサスタイルによって実行されることになる、請求項11に記載のシステム。
  13. 前記プロファイラは、最適化を可能にするためのプロファイリング情報を収集するようにさらに構成される、請求項9〜12のいずれか1つに記載のシステム。
  14. 前記プロファイリング情報は、オペコードのグループの頻度を含む、請求項13に記載のシステム。
  15. 前記プロファイリング情報は、オペレーション共有に関する情報を含む、請求項13または14に記載のシステム。
  16. 前記プロファイリング情報は、オペレーション並行化に関する情報を含む、請求項13〜15のいずれか1つに記載のシステム。
  17. 前記アナライザは、前記命令情報を分析する際に前記プロファイリング情報を利用し、前記命令最適化を決定するように構成される、請求項9〜16のいずれか1つに記載のシステム。
  18. 前記命令最適化は、オペレーション最適化を含む、請求項1〜17のいずれか1つに記載のシステム。
  19. 前記オペレーションは、オペレーション共有最適化を含む、請求項18に記載のシステム。
  20. 前記オペレーション最適化は、オペレーション並行最適化を含む、請求項18または19に記載のシステム。
  21. 前記命令最適化は、カスタム命令を含む、請求項1〜20のいずれか1つに記載のシステム。
  22. 前記アナライザは、候補命令最適化を識別し、前記インスタンチエータによって行われた推定に基づいて前記命令最適化のインプリメンテーションを決定するように構成される、請求項1〜21のいずれか1つに記載のシステム。
  23. 前記インスタンチエータからの前記推定は、再プログラミング可能なハードウェアがランタイム中に全命令を共にインプリメントするようにプログラミングされることができないことを提供する場合には、前記アナライザは、組み合わされた個々の命令を、再プログラミング可能なハードウェアを再プログラミングすることによってインプリメントされ得る命令のセットにグループ化する、請求項22に記載のシステム。
  24. 前記アナライザは、異なるランタイム状態のために複数のインプリメンテーションを決定するように構成され、それぞれは該ランタイム状態に結び付けられた命令最適化を有し、各インプリメンテーションに結び付けられた決定状態情報を生成し、該決定状態情報は、実際のランタイム状態に応じたインプリメンテーション間の選択を可能にする、請求項1〜23のいずれか1つに記載のシステム。
  25. 前記命令最適化が設計制約を用いてコンパイルするインプリメンテーションを提供することができない場合、前記アナライザは、該アナライザによって提供された分析情報に基づいてプロファイラに前記プログラミング仕様を再プロファイルさせるように構成される、請求項1〜24のいずれか1つに記載のシステム。
  26. 前記インスタンチエータによって行われた前記アーキテクチャ最適化は、パイプライン処理を含む、請求項1〜25のいずれか1つに記載のシステム。
  27. 前記インスタンチエータによって行われた前記アーキテクチャ最適化は、リソース複製を含む、請求項1〜26のいずれか1つに記載のシステム。
  28. 前記インスタンチエータによって行われた前記アーキテクチャ最適化は、最適化とは別の技術を含む、請求項1〜27のいずれか1つに記載のシステム。
  29. 最適化とは別の前記技術は、未使用リソースの除去を含む、請求項28に記載のシステム。
  30. 最適化とは別の前記技術は、オプコード割当を含む、請求項28または29に記載のシステム。
  31. 最適化とは別の前記技術は、チャンネル通信最適化を含む、請求項28または30に記載のシステム。
  32. 最適化とは別の前記技術は、データおよび命令パスをカスタマイズすることを含む、請求項28または31に記載のシステム。
  33. 複数の再プログラミング可能なハードウェアの構成が前記命令プロセッサをインプリメントすることが要求される場合、前記インスタンチエータは、個々の構成をグループに最適化し、該グループ化された構成のインプリメンテーションをスケジューリングするように構成される、請求項1〜32のいずれか1つに記載のシステム。
  34. 複数のプロセッサスタイルに対するプロセッサ定義および関連するパラメータを含むライブラリをさらに含み、
    前記テンプレートジェネレータは、該ライブラリから抽出されたプロセッサ定義および関連するパラメータからテンプレートを生成するように構成される、請求項1〜33のいずれか1つに記載のシステム。
  35. 前記プロセッサスタイルは、スーパースケーラープロセッサを含む、請求項1〜34のいずれか1つに記載のシステム。
  36. 前記プロセッサスタイルは、ハイブリッドプロセッサを含む、請求項1〜35のいずれか1つに記載のシステム。
  37. 前記コンパイラは、前記アナライザによって生成され、前記アプリケーションソースコードは、コンパイラによるコンパイルのためにカスタマイゼーション情報で注釈を付けられて、最適化された実行可能なコードを提供する、請求項1〜36のいずれか1つに記載のシステム。
  38. 前記コンパイラは、前記アプリケーションソースコードをコンパイルし、最適化を取り込んで最適化された実行可能なコードを提供するために該コンパイルされたソースコードを再組織化するように構成される、請求項1〜36のいずれか1つに記載のシステム。
  39. 前記構成情報および関連する実行可能なコード、および関連する場合の決定状態情報は、再プログラミング可能なハードウェアを用いてインプリメントされる命令プロセッサの適応および構成を管理するための少なくとも一つの管理システムに配備される、請求項1〜38のいずれか1つに記載のシステム。
  40. 前記構成情報および関連する実行可能なコード、および関連する場合の決定状態情報は、再プログラミング可能なハードウェアの再プログラミングを可能にするための少なくとも一つのライブラリに配備される、請求項1〜39のいずれか1つに記載のシステム。
  41. 前記再プログラミング可能なハードウェアは、少なくとも一つのフィールドプログラマブルゲートアレイを含む、請求項1〜40のいずれか1つに記載のシステム。
  42. 前記再プログラミング可能なハードウェアは、少なくとも一つのコンプレックスプログラマブルロジックデバイスを含む、請求項1〜41のいずれか1つに記載のシステム。
  43. 前記命令プロセッサは、前記再プログラミング可能なハードウェアを用いて完全にインプリメントされる、請求項1〜42のいずれか1つに記載のシステム。
  44. 再プログラミング可能なハードウェアを用いて命令プロセッサをインプリメントするために、カスタマイゼーション仕様であって、アプリケーションソースコードを含むアプリケーション情報および設計制約を含むカスタマイゼーション情報を含む、カスタマイゼーション仕様に基づいて構成情報および関連する実行可能なコードを生成する方法であって、
    インプリメンテーションのための候補として識別された各プロセッサスタイルに対するテンプレートを生成するステップと、
    各テンプレートに対する命令情報を分析し、命令最適化を決定するステップと、
    該命令最適化を含め、そして、実行可能なコードを生成するために該アプリケーションソースコードをコンパイルするステップと、
    各テンプレートに対するアーキテクチャ情報を分析し、アーキテクチャ最適化を決定するステップと、
    該アーキテクチャ最適化を含む構成情報を生成するステップと、
    該アーキテクチャ最適化を含む該構成情報からデバイス固有の構成情報を生成するステップと、
    を包含する、方法。
  45. 各候補インプリメンテーションに対して前記構成情報および関連するコードをプロファイルするステップと、
    それに応答して、予定可能な基準に基づいて1以上の最適なインプリメンテーションを選択するステップと
    をさらに包含する、請求項44に記載の方法。
  46. 前記アプリケーション情報は、アプリケーションデータをさらに含む、請求項44または45に記載の方法。
  47. 前記アプリケーションデータは、前記命令プロセッサによって動作されることになるデータを表すデータを含む、請求項46に記載の方法。
  48. 前記アプリケーションデータは、ランタイム状態の範囲を表すデータを含む、請求項47に記載の方法。
  49. 前記カスタマイゼーション情報は、少なくとも一つのカスタム命令をさらに含む、請求項44〜48のいずれか1つに記載の方法。
  50. 各カスタム命令は、強制的にまたは任意的に定義され得る、請求項49に記載の方法。
  51. 前記カスタマイゼーション情報は、少なくとも一つのプロセッサスタイルを、インプリメンテーションのための候補としてさらに識別する、請求項44〜50のいずれか1つに記載の方法。
  52. 前記カスタマイゼーション仕様の情報をプロファイルするステップと、
    少なくとも一つのプロセッサスタイルを、インプリメンテーションのための候補として識別するステップと
    をさらに包含する、請求項44〜51のいずれか1つに記載の方法。
  53. 前記プロファイルされた情報は、前記アプリケーションソースコードを含む、請求項52に記載の方法。
  54. 複数のプロセッサスタイルは、前記カスタマイゼーション仕様プロファイルステップにおいて、インプリメンテーションのための候補として識別される、請求項52または53に記載の方法。
  55. 個々のプロセッサスタイルは、アプリケーションの部分を実行するように識別され、これにより、該アプリケーションは、組み合わされた個々のプロセッサスタイルによって実行されることになる、請求項54に記載の方法。
  56. 最適化を可能にするためのプロファイリング情報は、カスタマイゼーション仕様プロファイリングステップにおいて集められる、請求項52〜55のいずれか1つに記載の方法。
  57. 前記プロファイリング情報は、オプコードのグループの頻度を含む、請求項56に記載の方法。
  58. 前記プロファイリング情報は、オペレーション共有に関する情報を含む、請求項56または57に記載の方法。
  59. 前記プロファイリング情報は、オペレーション並行化に関する情報を含む、請求項56〜58のいずれか1つに記載の方法。
  60. 前記命令情報分析ステップは、
    前記命令情報を分析する際の前記プロファイリング情報を利用するステップと、
    前記命令最適化をそこから決定するステップと
    を包含する、請求項56〜59のいずれか1つに記載の方法。
  61. 前記命令最適化は、オペレーション最適化を含む、請求項60に記載の方法。
  62. 前記オペレーション最適化は、オペレーション共有最適化を含む、請求項61に記載の方法。
  63. 前記オペレーション最適化は、オペレーション並行最適化を含む、請求項61または62に記載の方法。
  64. 前記命令最適化は、カスタム命令を含む、請求項60〜63のいずれか1つに記載の方法。
  65. 前記命令情報分析ステップは、
    候補命令最適化を識別するステップと、
    前記候補命令最適化の命令に基づいて行われた推定に基づいて、前記命令最適化のインプリメンテーションを決定するステップと
    を包含する、請求項44〜64のいずれか1つに記載の方法。
  66. 前記推定が、前記再プログラミング可能なハードウェアがランタイム中に全命令を共にインプリメントするようにプログラミングされることができないことを提供する場合に、前記命令情報分析ステップは、
    個々の命令を、前記再プログラミング可能なハードウェアを再プログラミングすることによってインプリメントされ得る命令のセットに組み合わせてグルーピングするステップを包含する、請求項65に記載の方法。
  67. 前記命令情報分析ステップは、
    異なるランタイム状態に対する複数のインプリメンテーションを決定するステップであって、それぞれは、該ランタイム状態に結び付けられる命令を有する、ステップと、
    各インプリメンテーションに結び付けられた決定状態情報を生成するステップであって、該決定状態情報は、実際のランタイム状態に応じて該インプリメンテーション間の選択を可能にする、ステップと
    を包含する、請求項44〜66のいずれか1つに記載の方法。
  68. 前記命令最適化が、設計制約とともにコンパイルするインプリメンテーションを提供することができない場合に、前記命令情報分析ステップは、
    前記カスタマイゼーション仕様プロファイリングステップを呼び出し、該命令情報分析ステップによって提供された分析情報に基づいて該カスタマイゼーション仕様を再プロファイルするステップを包含する、請求項52に従属する場合の請求項44〜67のいずれか1つに記載の方法。
  69. 前記アーキテクチャ最適化は、パイプライン処理を含む、請求項44〜68のいずれか1つに記載の方法。
  70. 前記アーキテクチャ最適化は、リソース複製を含む、請求項44〜69のいずれか1つに記載の方法。
  71. 前記アーキテクチャ最適化は、最適化とは別の技術を含む、請求項44〜70のいずれか1つに記載の方法。
  72. 最適化とは別の前記技術は、未使用リソースの除去を含む、請求項71に記載の方法。
  73. 最適化とは別の前記技術は、オプコード割当を含む、請求項71または72に記載の方法。
  74. 最適化とは別の前記技術は、チャンネル通信最適化を含む、請求項71〜73のいずれか1つに記載の方法。
  75. 最適化とは別の前記技術は、データおよび命令パスのカスタマイゼーションを含む、請求項71〜74のいずれか1つに記載の方法。
  76. 再プログラミング可能なハードウェアの複数の構成が前記命令プロセッサをインプリメントすることが要求される場合に、前記命令ステップは、
    個々の構成をグループに最適化するステップと、
    該グループにされた構成のインプリメンテーションをスケジューリングするステップと
    を包含する、請求項44〜75のいずれか1つに記載の方法。
  77. 各テンプレートが、複数のプロセッサスタイルに対するプロセッサ定義および関連するパラメータを含むライブラリから抽出されたプロセッサ定義および関連するパラメータから生成される、請求項44〜76のいずれか1つに記載の方法。
  78. 前記プロセッサスタイルは、スーパースケーラープロセッサを含む、請求項44〜77のいずれか1つに記載の方法。
  79. 前記プロセッサスタイルは、ハイブリッドプロセッサを含む、請求項44〜78のいずれか1つに記載の方法。
  80. 前記アプリケーションソースコードをコンパイルするステップにおいて利用された前記コンパイラは、前記命令情報分析ステップにおいて生成され、前記コンパイルするステップは、
    カスタマイゼーション情報とともに前記アプリケーションソースコードに注釈を付けるステップと、
    注釈が付けられたソースコードをコンパイルして、最適化された実行可能なコードを提供するステップと
    を包含する、請求項44〜79のいずれか1つに記載の方法。
  81. 前記コンパイルするステップは、
    前記アプリケーションソースコードをコンパイルするステップと、
    最適化を組み入れるために該コンパイルされたソースコードを再組織化して、最適化された実行可能なコードを提供するステップと
    を包含する、請求項44〜79のいずれか1つに記載の方法。
  82. 前記構成情報および関連する実行可能なコード、および関連する場合には前記決定状態情報を、再プログラミング可能なハードウェアを用いてインプリメントされた命令プロセッサの再構成を管理するためにある少なくとも一つの管理システムに配備するステップをさらに包含する、請求項44〜81のいずれか1つに記載の方法。
  83. 前記構成情報および関連する実行可能なコード、および、関連する場合には、前記決定状態情報を、再プログラミング可能なハードウェアを再プログラミングすることを可能にするための少なくとも一つのライブラリに配備するステップをさらに包含する、請求項44〜82のいずれか1つに記載の方法。
  84. 前記再プログラミング可能なハードウェアは、少なくとも一つのフィールドプログラマブルゲートアレイを含む、請求項44〜83のいずれか1つに記載の方法。
  85. 前記再プログラミング可能なハードウェアは、少なくとも一つのコンプレックスプログラマブルロジックデバイスを含む、請求項44〜83のいずれか1つに記載の方法。
  86. 前記命令プロセッサは、前記再プログラミング可能なハードウェアを用いて完全にインプリメントされる、請求項44〜85のいずれか1つに記載の方法。
  87. 再プログラミング可能なハードウェアを用いてインプリメントされた命令プロセッサのランタイム再構成を管理するための管理システムであって、
    複数の命令プロセッサインプリメンテーションに対する構成情報を含む構成ライブラリと、
    該インプリメンテーションに対する関連する実行可能なコードを含めるためのコードライブラリと、
    アプリケーションデータ、および必要に応じて構成情報および関連する実行可能なコードを、命令プロセッサのインプリメンテーションおよび実行のための再プログラミング可能なハードウェアにロードするためのローダーと、
    ローダーにアプリケーションデータ、および必要に応じて構成情報および関連する実行可能なコードをロードし、該実行可能なコードを実行するように信号を出すためのローダーコントローラと、
    該命令プロセッサのオペレーションに関するランタイム統計を取得するためのランタイムモニタと、
    該ランタイム統計を受け取り、該ローダに、新しいインプリメンテーションに対する新しい構成情報および関連する実行可能なコードを該再プログラミング可能なハードウェアにロードするように指示するようにオペレーション可能に構成された最適化デタミナと、
    最適化デタミナーを呼び出すための最適化インストラクタと
    を含む、システム。
  88. 前記ローダコントローラ、前記ランタイムモニタおよび前記最適化インストラクタを含む前記ランタイムマネジャーを含む、請求項87に記載のシステム。
  89. 前記最適化インストラクタは、前記最適化デタミナを予定可能なイベント上に自動的に呼び出すように構成される、請求項87または88に記載のシステム。
  90. 前記イベントは、前記実行可能なコードの命令である、請求項89に記載のシステム。
  91. 前記最適化インストラクタは、外部エージェントによって呼び出されるように構成される、請求項87〜90のいずれか1つに記載のシステム。
  92. 前記最適化インストラクタは、外部エージェントからの作動命令に応答して呼び出されるように構成される、請求項91に記載のシステム。
  93. 前記最適化デタミナは、前記ローダコントローラに信号を出すことを指示し、新しい構成情報および関連する実行可能なコードを、前記外部エージェントによる前記最適化インストラクタの実施の際に前記再プログラミング可能なハードウェアにロードさせるように構成される、請求項91または92に記載のシステム。
  94. 前記作動命令は、前記再プログラミング可能なハードウェアを用いてインプリメントされることになる前記インプリメンテーションを識別する、請求項92に従属される場合の請求項93に記載のシステム。
  95. 新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードは、外部エージェントによる前記最適化インストラクタの実施の前に、各個々の構成ライブラリおよび前記コードライブラリにロードされ、その結果、該当するインプリメンテーションに対する構成情報および関連する実行可能なコードは、該外部エージェントによる最適化インストラクタの実施の際に前記再プログラミング可能なハードウェアにロードされ得る、請求項91〜94のいずれか1つに記載のシステム。
  96. 前記インプリメンテーションの少なくとも一つに対する結び付けられた設計状態情報を含めるための決定状態ライブラリをさらに含み、
    前記ローダは、再プログラミング可能なハードウェアにロードされた該インプリメンテーションの種々のランタイム状態に対する複数の他のインプリメンテーションのための決定状態情報を前記最適化デタミナに提供するように構成され、該最適化デタミナは、該他のインプリメンテーションに対する該決定状態情報をプロファイルし、該他のインプリメンテーションのうちの任意に対する該決定状態情報が前記ランタイム統計をより緊密に適合させるかどうかを決定するように構成され、該他のインプリメンテーションの一つに対する該決定状態情報が該ランタイム統計をより緊密に適合させる場合に、前記ローダコントローラに信号を出すように指示して、該ローダに該当するインプリメンテーションに対する該構成情報および関連する実行可能なコードを該再プログラミング可能なハードウェアにロードさせる、請求項87〜95のいずれか1つに記載のシステム。
  97. 前記ランタイム統計に最適化された1以上の新しいインプリメンテーションを生成するためのアダプタをさらに含み、
    前記最適化デタミナは、該アダプタに1以上の新しいインプリメンテーションを生成することを指示するように構成される、請求項87〜96のいずれか1つに記載のシステム。
  98. 前記アダプタは、各新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードを各個々の構成ライブラリおよび前記コードライブラリにロードするように構成される、請求項87〜95のいずれか1つに従属される場合の請求項97に記載のシステム。
  99. 前記アダプタは、各新しいインプリメンテーションに対する前記構成情報、関連する実行可能なロードおよび関連する決定状態情報を、各個々の構成ライブラリ、前記コードライブラリおよび前記決定状態ライブラリにロードするように構成される、請求項96に従属される場合の請求項97に記載のシステム。
  100. 前記最適化デタミナは、前記ローダに、新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードを、予定可能な基準を満足すると前記再プログラミング可能なハードウェアにロードすることを指示するように構成される、請求項97〜99のいずれか1つに記載のシステム。
  101. 前記最適化デタミナは、前記ローダに、新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードを前記再プログラミング可能なハードウェアにロードすることを指示するように構成され、ここで、再構成比R>1、該再構成比Rは、下式によって与えられ、
    Figure 2005503680
    ここで、Csw,jは、ソフトウェア関数f()をインプリメントするためのクロックサイクル数、
    swは、該クロックサイクル数Csw,jにおける各クロックサイクルに対するサイクルタイム、
    ci,jは、カスタム命令をインプリメントするためのクロックサイクル数、
    ciは、該クロックサイクル数Cci,jにおける各クロックサイクルに対するサイクルタイム、
    は、再プログラミング可能なハードウェアの再構成のために要求される時間である、請求項100に記載のシステム。
  102. 前記アダプタは、オンラインで動作するように構成される、請求項97〜101のいずれか1つに記載のシステム。
  103. 前記アダプタは、オフラインで動作するように構成される、請求項97〜101のいずれか1つに記載のシステム。
  104. 前記アダプタは、
    前記ランタイム統計に基づいて命令を分析し、命令最適化を決定するためのアナライザと、
    該命令最適化を含めるために前記アプリケーションソースコードをコンパイルし、実行可能なコードを生成するためのコンパイラと、
    前記ランタイム統計に基づいてアーキテクチャ情報を分析し、アーキテクチャ最適化を決定し、そして、該アーキテクチャ最適化を含む構成情報を生成するためのインスタンチエータと、
    該アーキテクチャ最適化を含む該構成情報からデバイス固有の構成情報を生成するためのビルダーと
    を含む、請求項97〜103のいずれか1つに記載のシステム。
  105. 前記アダプタは、
    各候補インプリメンテーションに対する前記構成情報および関連するコードをプロファイルし、予定可能な基準に基づいて1以上の最適のインプリメンテーションを選択するするためのセレクタをさらに含む、請求項104に記載のシステム。
  106. 前記アダプタは、
    カスタマイゼーション仕様の情報および前記ランタイム統計をプロファイルし、少なくとも一つのプロセッサスタイルをインプリメンテーションのための候補として識別するためのプロファイラと、
    インプリメンテーションのための候補として識別された各プロセッサスタイルに対するテンプレートを生成するためのテンプレートジェネレータと
    をさらに含む、請求項104または105に記載のシステム。
  107. 前記プロファイルされた情報は、前記アプリケーションソースコードを含む、請求項106に記載のシステム。
  108. 前記プロファイラは、複数のプロセッサスタイルをインプリメンテーションのための候補として識別するように構成される、請求項106または107に記載のシステム。
  109. 個々のプロセッサスタイルは、アプリケーションの部分を実行するように識別され、これにより、該アプリケーションは、組み合わされた個々のプロセッサスタイルによって実行されることになる、請求項108に記載のシステム。
  110. 前記プロファイラは、最適化を可能にするためのプロファイリング情報を収集するようにさらに構成される、請求項106〜109のいずれか1つに記載のシステム。
  111. 前記プロファイリング情報は、オプコードのグループの頻度を含む、請求項110に記載のシステム。
  112. 前記プロファイリング情報は、オペレーション共有に関する情報を含む、請求項110または111に記載のシステム。
  113. 前記プロファイリング情報は、オペレーション並行化に関する情報を含む、請求項110〜112のいずれか1つに記載のシステム。
  114. 前記アナライザは、前記命令情報を分析するステップにおいて前記プロファイリング情報を利用し、該命令最適化をそこから決定するように構成される、請求項106〜113のいずれか1つに記載のシステム。
  115. 前記命令最適化は、オペレーション最適化を含む、請求項104〜114のいずれか1つに記載のシステム。
  116. 前記オペレーション最適化は、オペレーション共有最適化を含む、請求項115に記載のシステム。
  117. 前記オペレーション最適化は、オペレーション並行最適化を含む、請求項115または116に記載のシステム。
  118. 前記命令最適化は、カスタム命令を含む、請求項104〜117のいずれか1つに記載のシステム。
  119. カスタム命令は、使用頻度に基づく最適化のための候補として識別される、請求項118に記載のシステム。
  120. 前記カスタム命令は、決定関数Dに基づく最適化のための候補として識別され、
    ここで、関数Dは、下式によって与えられ、
    Figure 2005503680
    ここで、Csw,jは、ソフトウェア関数f()をインプリメントするためのクロックサイクル数、
    swは、該クロックサイクル数Csw,jにおける各クロックサイクルに対するサイクルタイム、
    ci,jは、カスタム命令をインプリメントするためのクロックサイクル数、
    ciは、該クロックサイクル数Cci,jにおける各クロックサイクルに対するサイクルタイム、
    は、手順が呼ばれる時間数、
    は、該カスタム命令がインプリメントされたかどうかを示すバイナリ選択変数である、請求項118に記載のシステム。
  121. 前記アナライザは、候補命令最適化を識別し、前記インスタンチエータによって行われた推定に基づいて該命令最適化のインプリメンテーションを決定するように構成される、請求項104〜120のいずれか1つに記載のシステム。
  122. 前記インスタンチエータからの前記推定が前記再プログラミング可能なハードウェアがランタイム中に全命令を共にインプリメントするようにプログラミングされることができないことを提供する場合には、前記アナライザは、個々の命令を、再プログラミング可能なハードウェアを再プログラミングすることによってインプリメントされ得る命令のセットに組み合わせてグループ化する、請求項121に記載のシステム。
  123. 前記アナライザは、異なるランタイム状態に対する複数のインプリメンテーションであって、それぞれのインプリメンテーションは、該ランタイム状態に結び付けられた命令最適化を有する、インプリメンテーションを決定し、各インプリメンテーションに結び付けられた決定状態情報を生成するように構成され、該決定状態情報は、実際のランタイム状態に応じて該インプリメンテーション間の選択を可能にする、請求項104〜122のいずれか1つに記載のシステム。
  124. 前記命令最適化が設計制約とともにコンパイルするインプリメンテーションを提供することができない場合には、前記アナライザは、前記プロファイラを呼び出して、該アナライザによって提供された分析情報に基づいて前記カスタマイゼーション仕様を再プロファイルするように構成される、請求項106に従属される場合の請求項104〜123のいずれか1つに記載のシステム。
  125. 前記インスタンチエータによって行われた前記アーキテクチャ最適化は、パイプライン処理を含む、請求項104〜124のいずれか1つに記載のシステム。
  126. 前記インスタンチエータによって行われた前記アーキテクチャ最適化は、リソース複製を含む、請求項104〜125のいずれか1つに記載のシステム。
  127. 前記インスタンチエータによって行われた前記アーキテクチャ最適化は、最適化とは別の技術を含む、請求項104〜126のいずれか1つに記載のシステム。
  128. 最適化とは別の前記技術は、未使用リソースの除去を含む、請求項127に記載のシステム。
  129. 最適化とは別の前記技術は、オプコード割当を含む、請求項127または128に記載のシステム。
  130. 最適化とは別の前記技術は、チャンネル通信最適化を含む、請求項127〜129のいずれか1つに記載のシステム。
  131. 最適化とは別の前記技術は、データおよび命令パスのカスタマイゼーションを含む、請求項127〜130のいずれか1つに記載のシステム。
  132. 前記再プログラミング可能なハードウェアの複数の構成が前記命令プロセッサをインプリメントすることが要求される場合には、前記インスタンチエータは、個々の構成をグループに最適化し、該グループ化された構成のインプリメンテーションをスケジューリングするように構成される、請求項104〜131のいずれか1つに記載のシステム。
  133. 前記アダプタは、複数のプロセッサスタイルのためのプロセッサ定義および関連するパラメータを含むライブラリをさらに含み、
    前記テンプレートジェネレータは、該ライブラリから抽出されたプロセッサ定義および関連するパラメータからテンプレートを生成するように構成される、請求項106〜132のいずれか1つに記載のシステム。
  134. 前記プロセッサスタイルは、スーパースケーラープロセッサを含む、請求項106〜133に記載のシステム。
  135. 前記プロセッサスタイルは、ハイブリッドプロセッサを含む、請求項106〜134のいずれか1つに記載のシステム。
  136. 前記コンパイラは、前記アナライザによって生成され、前記アプリケーションソースコードは、該コンパイラによる編集のためのカスタマイゼーション情報とともに注釈が付けられて最適化された実行可能なコードを提供する、請求項104〜135のいずれか1つに記載のシステム。
  137. 前記コンパイラは、前記アプリケーションソースコードを編集し、最適化を組み入れるために前記編集されたソースコードを再組織化して最適化された実行可能なコードを提供するするように構成される、請求項104〜135のいずれか1つに記載のシステム。
  138. 前記再プログラミング可能なハードウェアは、少なくとも一つのフィールドプログラマブルゲートアレイを含む、請求項87〜137のいずれか1つに記載のシステム。
  139. 前記再プログラミング可能なハードウェアは、少なくとも一つのコンプレックスプログラマブルロジックデバイスを含む、請求項87〜137のいずれか1つに記載のシステム。
  140. 前記命令プロセッサは、前記再プログラミング可能なハードウェアを用いて完全にインプリメントされる、請求項87〜139のいずれか1つに記載のシステム。
  141. 再プログラミング可能なハードウェアにおいてインプリメントされる命令プロセッサのランタイム再構成を管理する方法であって、
    複数の命令プロセッサのインプリメンテーションに対する構成情報を含む構成ライブラリを提供するステップと、
    該インプリメンテーションのための関連する実行可能なコードを含ませるためのコードライブラリを提供するステップと、
    命令プロセッサのインプリメンテーションおよび実行のために、アプリケーションデータ、および必要に応じて構成情報および実行可能なコードを、再プログラミング可能なハードウェアにロードするステップと、
    該実行可能なコードを実行するステップと、
    該命令プロセッサのオペレーションに関するランタイム統計を取得するステップと、
    新しいインプリメンテーションに対する新しい構成情報および関連する実行可能なコードを該再プログラミング可能なハードウェアにロードするステップと
    を包含する、方法。
  142. 前記ロードするステップは、予定可能なイベント上で自動的に行われる、請求項141に記載の方法。
  143. 前記イベントは、前記実行可能なコードにおける命令である、請求項142に記載の方法。
  144. 前記ロードするステップは、外部エージェントによって作動される、請求項141〜143のいずれか1つに記載の方法。
  145. 前記ロードするステップは、外部エージェントからの作動命令に応答して作動される、請求項144に記載の方法。
  146. 前記作動命令は、前記再プログラミング可能なハードウェアを用いて、インプリメントされることになっているインプリメンテーションを識別する、請求項145に記載の方法。
  147. 前記ロードするステップの前に、新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードを、それぞれ個々の構成ライブラリおよび前記コードライブラリにロードするステップをさらに包含し、
    該ロードするステップは、外部エージェントにより作動する際に、該当するインプリメンテーションに対する前記構成情報および関連する実行可能なコードを、該再プログラミング可能なハードウェアにロードするステップを包含する、請求項144〜146のいずれか1つに記載の方法。
  148. 前記インプリメンテーションの少なくとも一つに対する関連する決定状態情報を含ませるための決定状態ライプラリを提供するステップと、
    該再プログラミング可能なハードウェアにおいてロードされた該インプリメンテーションのランタイム状態に対する複数の他のインプリメンテーションに対する該決定状態情報をプロファイルするステップと、
    他のインプリメンテーションのうちの任意に対する該決定状態情報が前記ランタイム統計により緊密に適合するかどうかを決定するステップとをさらに包含し、
    該他のインプリメンテーションの一つに対する該決定状態情報が該ランタイム統計により緊密に適合する場合に、該ロードするステップは、
    該当するインプリメンテーションに対する前記構成情報および関連する実行可能なコードを、前記再プログラミング可能なハードウェアにロードするステップを包含する、請求項141〜147のいずれか1つに記載の方法。
  149. 前記ランタイム統計に最適化された1以上の新しいインプリメンテーションを生成するステップをさらに包含する、請求項141〜147のいずれか1つに記載の方法。
  150. 各新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードを、それぞれ個々の構成ライブラリおよび前記コードライブラリにロードするステップをさらに包含する、請求項141〜147のいずれか1つに従属される場合の請求項149に記載の方法。
  151. 各新しいインプリメンテーションに対する前記構成情報、関連する実行可能なコードおよび関連する決定状態情報を、それぞれ個々の構成ライブラリ、前記コードライブラリおよび前記決定状態ライブラリにロードするステップをさらに包含する、請求項148に従属される場合の請求項149に記載の方法。
  152. 新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードは、予定可能な基準を満足する前記再プログラミング可能なハードウェアにロードされる、請求項141〜151のいずれか1つに記載の方法。
  153. 新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードは、前記再プログラミング可能なハードウェアにロードされ、ここで、再構成比R>1、該再構成比Rは、下式により与えられる、
    Figure 2005503680
    ここで、Csw,jは、ソフトウェア関数f()をインプリメントするためのクロックサイクル数、
    swは、該クロックサイクル数Csw,jにおける各クロックサイクルに対するサイクルタイム、
    ci,jは、カスタム命令をインプリメントするためのクロックサイクル数、
    ciは、該クロックサイクル数Cci,jにおける各クロックサイクルに対するサイクルタイム、
    は、該再プログラミング可能なハードウェアの再構成のために要求される時間である、請求項152に記載の方法。
  154. 前記インプリメンテーション生成ステップは、オンラインで行われる、請求項149〜153のいずれか1つに記載の方法。
  155. 前記インプリメンテーション生成ステップは、オフラインで行われる、請求項149〜153のいずれか1つに記載の方法。
  156. 前記インプリメンテーション生成ステップは、
    前記ランタイム統計に基づいて命令情報を分析し、命令最適化を決定するステップと、
    前記命令最適化を含ませるために前記アプリケーションソースコードをコンパイルし、実行可能なコードを生成するステップと、
    該ランタイム統計に基づいてアーキテクチャ情報を分析し、アーキテクチャ最適化を決定するステップと、
    該アーキテクチャ最適化を含む構成情報を生成するステップと、
    該アーキテクチャ最適化を含む該構成情報からデバイス固有の構成情報を生成するステップと
    を包含する、請求項149〜155のいずれか1つに記載の方法。
  157. 前記インプリメンテーションステップは、
    各候補インプリメンテーションに対する前記構成情報および関連するコードをプロファイルするステップと、
    それに応答して、予定可能な基準に基づいて1以上の最適のインプリメンテーションを選択するステップと
    をさらに包含する、請求項156に記載の方法。
  158. 前記インプリメンテーション生成ステップは、
    カスタマイゼーション仕様および前記ランタイム統計内の情報をプロファイルするステップと、
    少なくとも一つのプロセッサスタイルをインプリメンテーションのための候補として識別するステップと、
    インプリメンテーションのための候補として識別された各プロセッサスタイルのためのテンプレートを生成するステップと
    をさらに包含する、請求項156または157に記載の方法。
  159. 前記プロファイルされた情報は、前記アプリケーションソースコードを含む、請求項158に記載の方法。
  160. 複数のプロセッサスタイルは、前記カスタマイゼーション仕様プロファイルステップにおいてインプリメンテーションのための候補として識別される、請求項158または159に記載の方法。
  161. 個々の前記プロセッサスタイルは、アプリケーションの部分を実行するように識別され、これにより、該アプリケーションは、組み合わされた個々のプロセッサスタイルによって実行されることになる、請求項160に記載の方法。
  162. 最適化を可能にするためのプロファイリング情報は、前記カスタマイゼーション仕様プロファイルステップにおいて収集される、請求項158〜161のいずれか1つに記載の方法。
  163. 前記プロファイリング情報は、オプコードのグループの頻度を含む、請求項162に記載の方法。
  164. 前記プロファイリング情報は、オペレーション共有に関する情報を含む、請求項162または163に記載の方法。
  165. 前記プロファイリング情報は、オペレーション並行化に関する情報を含む、請求項162〜164のいずれか1つに記載の方法。
  166. 前記命令情報分析ステップは、
    該命令情報を分析する際に前記プロファイリング情報を利用するステップと、
    該命令最適化を決定するステップと
    を包含する、請求項162〜165のいずれか1つに記載の方法。
  167. 前記命令最適化は、オペレーション最適化を含む、請求項166に記載の方法。
  168. 前記オペレーション最適化は、オペレーション共有最適化を含む、請求項167に記載の方法。
  169. 前記オペレーション最適化は、オペレーション並行最適化を含む、請求項167または168記載の方法。
  170. 前記命令最適化は、カスタム命令を含む、請求項166〜169のいずれか1つに記載の方法。
  171. カスタム情報は、使用頻度に基づく最適化のための候補として識別される、請求項170に記載の方法。
  172. カスタム情報は、決定関数Dに基づく最適化のための候補として識別され、ここで、該決定関数Dは、
    Figure 2005503680
    により与えられ、
    ここで、Csw,jは、ソフトウェア関数f()をインプリメントするためのクロックサイクル数、
    swは、該クロックサイクル数Csw,jにおける各クロックサイクルに対するサイクルタイム、
    ci,jは、カスタム命令をインプリメントするためのクロックサイクル数、
    ciは、該クロックサイクル数Cci,jにおける各クロックサイクルに対するサイクルタイム、
    は、手順が呼ばれる時間数、
    は、該カスタム命令がインプリメントされるかどうかを示すバイナリ選択変数である、請求項170に記載の方法。
  173. 前記命令情報分析ステップは、
    候補命令最適化を識別するステップと、
    該候補命令最適化の命令に基づいて行われた推定に基づいて前記命令最適化のインプリメンテーションを決定するステップと
    を包含する、請求項156〜172のいずれか1つに記載の方法。
  174. 前記推定が前記再プログラミング可能なハードウェアがランタイム中に全命令を共にインプリメントするためにプログラミングされることができないことを提供する場合に、前記命令情報分析ステップは、
    個々の命令を、前記再プログラミング可能なハードウェアを再プログラミングすることによってインプリメントされ得る命令のセットに組み合わせてグループ化するステップを包含する、請求項173に記載の方法。
  175. 前記命令情報分析ステップは、
    異なるランタイム状態に対する複数のインプリメンテーションを決定するステップとであって、それぞれは、前記ランタイム状態に結び付けられた命令最適化を有する、ステップと、
    各インプリメンテーションに結び付けられた決定状態情報を生成するステップであって、該決定状態情報は、実際のランタイム状態に応じて該インプリメンテーション間の選択を可能にする、ステップと
    を包含する、請求項156〜174のいずれか1つに記載の方法。
  176. 前記命令最適化が、設計制約とともにコンパイルするインプリメンテーションを提供できない場合に、前記命令情報分析ステップは、
    前記カスタマイゼーション仕様プロファイルステップを呼び出して、該命令情報分析ステップによって提供された分析情報に基づいて該カスタマイゼーション仕様を再プロファイルするステップと
    を包含する、請求項158に従属される場合の請求項156〜175のいずれか1つに記載の方法。
  177. 前記アーキテクチャ最適化は、パイプライン処理を含む、請求項156〜176に記載の方法。
  178. 前記アーキテクチャ最適化は、リソース複製を含む、請求項156〜177のいずれか1つに記載の方法。
  179. 前記アーキテクチャ最適化は、最適化とは別の技術を含む、請求項156〜178のいずれか1つに記載の方法。
  180. 最適化とは別の前記技術は、未使用リソースの除去を含む、請求項179に記載の方法。
  181. 最適化とは別の前記技術は、オプコード割当を含む、請求項179または180に記載の方法。
  182. 最適化とは別の前記技術は、チャンネル通信最適化を含む、請求項179〜181のいずれか1つに記載の方法。
  183. 最適化とは別の前記技術は、データおよび命令パスのカスタマイゼーションを含む、請求項179〜182のいずれか1つに記載の方法。
  184. 再プログラミング可能なハードウェアの複数の構成が前記命令プロセッサをインプリメントすることが要求される場合には、前記インスタンス生成ステップは、
    個々の構成をグループに最適化するステップと、
    グループ化された構成のインプリメンテーションをスケジューリングするステップと
    を包含する、請求項156〜183のいずれか1つに記載の方法。
  185. 各テンプレートは、複数のプロセッサスタイルに対するプロセッサ定義および関連するパラメータを含むライブラリから抽出されたプロセッサ定義および関連するパラメータから生成される、請求項158〜184のいずれか1つに記載の方法。
  186. 前記プロセッサスタイルは、スーパースケーラープロセッサを含む、請求項158〜185のいずれか1つに記載の方法。
  187. 前記プロセッサスタイルは、ハイブリッドプロセッサを含む、請求項158〜185のいずれか1つに記載の方法。
  188. 前記アプリケーションソースコードをコンパイルする際に利用された前記コンパイラは、前記命令情報分析ステップにおいて生成され、該コンパイルステップは、
    カスタマイゼーション情報とともに該アプリケーションソースコードに注釈を付けるステップと、
    該注釈が付けられたソースコードをコンパイルして最適化された実行可能なコードを提供するステップと
    を包含する、請求項156〜187のいずれか1つに記載の方法。
  189. 前記コンパイルするステップは、
    前記アプリケーションソースコードをコンパイルするステップと、
    最適化を組み入れるために該コンパイルされたソースコードを再組織化して最適化された実行可能なコードを提供するステップと
    を包含する、請求項156〜187のいずれか1つに記載の方法。
  190. 前記再プログラミング可能なハードウェアは、少なくとも一つのフィールドプログラマブルゲートアレイを含む、請求項141〜189のいずれか1つに記載の方法。
  191. 前記再プログラミング可能なハードウェアは、少なくとも一つのコンプレックスプログラマブルロジックデバイスを含む、請求項141〜189のいずれか1つに記載の方法。
  192. 前記命令プロセッサは、前記再プログラミング可能なハードウェアを用いて完全にインプリメントされる、請求項141〜191のいずれか1つに記載の方法。
JP2002543290A 2000-11-17 2001-11-19 命令プロセッサシステムおよび方法 Expired - Fee Related JP3903193B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GBGB0028079.2A GB0028079D0 (en) 2000-11-17 2000-11-17 System and method
PCT/GB2001/005080 WO2002041146A2 (en) 2000-11-17 2001-11-19 Instruction processor systems and methods

Publications (3)

Publication Number Publication Date
JP2005503680A true JP2005503680A (ja) 2005-02-03
JP2005503680A5 JP2005503680A5 (ja) 2005-05-26
JP3903193B2 JP3903193B2 (ja) 2007-04-11

Family

ID=9903363

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002543290A Expired - Fee Related JP3903193B2 (ja) 2000-11-17 2001-11-19 命令プロセッサシステムおよび方法

Country Status (6)

Country Link
US (2) US7543283B2 (ja)
EP (1) EP1374045A2 (ja)
JP (1) JP3903193B2 (ja)
AU (1) AU2002223824A1 (ja)
GB (1) GB0028079D0 (ja)
WO (1) WO2002041146A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020525907A (ja) * 2017-06-22 2020-08-27 アイキャット・エルエルシー 高スループットプロセッサ

Families Citing this family (83)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8352400B2 (en) 1991-12-23 2013-01-08 Hoffberg Steven M Adaptive pattern recognition based controller apparatus and method and human-factored interface therefore
US7966078B2 (en) 1999-02-01 2011-06-21 Steven Hoffberg Network media appliance system and method
GB0028079D0 (en) * 2000-11-17 2001-01-03 Imperial College System and method
US7143418B1 (en) * 2001-12-10 2006-11-28 Xilinx, Inc. Core template package for creating run-time reconfigurable cores
GB0215034D0 (en) * 2002-06-28 2002-08-07 Critical Blue Ltd Architecture generation method
JP3801545B2 (ja) * 2002-08-02 2006-07-26 松下電器産業株式会社 コンパイラ用プログラム、コンパイラ装置及びコンパイル方法
US7536674B2 (en) * 2003-08-13 2009-05-19 Intel Corporation Method and system for configuring network processing software to exploit packet flow data locality
US7546598B2 (en) * 2003-09-03 2009-06-09 Sap Aktiengesellschaft Measuring software system performance using benchmarks
US7730459B2 (en) * 2003-09-30 2010-06-01 Intel Corporation Generating executable code based on code performance data
US7739671B1 (en) 2003-12-22 2010-06-15 The United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration Systems, methods and apparatus for implementation of formal specifications derived from informal requirements
WO2005086746A2 (en) * 2004-03-04 2005-09-22 Trustees Of Boston University Programmable-logic acceleraton of data processing applications
US7493596B2 (en) * 2004-06-30 2009-02-17 International Business Machines Corporation Method, system and program product for determining java software code plagiarism and infringement
US7647581B2 (en) * 2004-06-30 2010-01-12 International Business Machines Corporation Evaluating java objects across different virtual machine vendors
US7975256B2 (en) * 2004-06-30 2011-07-05 International Business Machines Corporation Optimizing application performance through data mining
US7401329B2 (en) * 2005-04-25 2008-07-15 Arm Limited Compiling computer programs to exploit parallelism without exceeding available processing resources
US8255745B2 (en) * 2005-08-29 2012-08-28 The Invention Science Fund I, Llc Hardware-error tolerant computing
US7493516B2 (en) * 2005-08-29 2009-02-17 Searete Llc Hardware-error tolerant computing
US7647487B2 (en) * 2005-08-29 2010-01-12 Searete, Llc Instruction-associated processor resource optimization
US8214191B2 (en) * 2005-08-29 2012-07-03 The Invention Science Fund I, Llc Cross-architecture execution optimization
US7774558B2 (en) * 2005-08-29 2010-08-10 The Invention Science Fund I, Inc Multiprocessor resource optimization
US8209524B2 (en) * 2005-08-29 2012-06-26 The Invention Science Fund I, Llc Cross-architecture optimization
US7877584B2 (en) * 2005-08-29 2011-01-25 The Invention Science Fund I, Llc Predictive processor resource management
US8516300B2 (en) 2005-08-29 2013-08-20 The Invention Science Fund I, Llc Multi-votage synchronous systems
US8181004B2 (en) * 2005-08-29 2012-05-15 The Invention Science Fund I, Llc Selecting a resource management policy for a resource available to a processor
US7653834B2 (en) * 2005-08-29 2010-01-26 Searete, Llc Power sparing synchronous apparatus
US7725693B2 (en) * 2005-08-29 2010-05-25 Searete, Llc Execution optimization using a processor resource management policy saved in an association with an instruction group
US8402257B2 (en) * 2005-08-29 2013-03-19 The Invention Science Fund I, PLLC Alteration of execution of a program in response to an execution-optimization information
US8423824B2 (en) 2005-08-29 2013-04-16 The Invention Science Fund I, Llc Power sparing synchronous apparatus
US7779213B2 (en) * 2005-08-29 2010-08-17 The Invention Science Fund I, Inc Optimization of instruction group execution through hardware resource management policies
US7627739B2 (en) * 2005-08-29 2009-12-01 Searete, Llc Optimization of a hardware resource shared by a multiprocessor
US7739524B2 (en) * 2005-08-29 2010-06-15 The Invention Science Fund I, Inc Power consumption management
US20070168696A1 (en) * 2005-11-15 2007-07-19 Aternity Information Systems, Ltd. System for inventing computer systems and alerting users of faults
US8739143B2 (en) * 2007-01-31 2014-05-27 Hewlett-Packard Development Company, L.P. Profiling metrics for computer programs
US20070266372A1 (en) * 2006-05-10 2007-11-15 Gawor Helen L Generating documentation from task execution
US8510859B2 (en) * 2006-09-26 2013-08-13 Intel Corporation Methods and arrangements to launch trusted, co-existing environments
US9697019B1 (en) 2006-10-17 2017-07-04 Manageiq, Inc. Adapt a virtual machine to comply with system enforced policies and derive an optimized variant of the adapted virtual machine
US8612971B1 (en) 2006-10-17 2013-12-17 Manageiq, Inc. Automatic optimization for virtual systems
US8752045B2 (en) 2006-10-17 2014-06-10 Manageiq, Inc. Methods and apparatus for using tags to control and manage assets
US8949826B2 (en) * 2006-10-17 2015-02-03 Managelq, Inc. Control and management of virtual systems
US8234641B2 (en) 2006-10-17 2012-07-31 Managelq, Inc. Compliance-based adaptations in managed virtual systems
US8458695B2 (en) 2006-10-17 2013-06-04 Manageiq, Inc. Automatic optimization for virtual systems
US8234640B1 (en) 2006-10-17 2012-07-31 Manageiq, Inc. Compliance-based adaptations in managed virtual systems
US9038062B2 (en) * 2006-10-17 2015-05-19 Manageiq, Inc. Registering and accessing virtual systems for use in a managed system
US9015703B2 (en) 2006-10-17 2015-04-21 Manageiq, Inc. Enforcement of compliance policies in managed virtual systems
US9086917B1 (en) 2006-10-17 2015-07-21 Manageiq, Inc. Registering and accessing virtual systems for use in a managed system
US8949825B1 (en) 2006-10-17 2015-02-03 Manageiq, Inc. Enforcement of compliance policies in managed virtual systems
US8214813B2 (en) 2007-01-12 2012-07-03 Microsoft Corporation Code optimization across interfaces
US7521961B1 (en) * 2007-01-23 2009-04-21 Xilinx, Inc. Method and system for partially reconfigurable switch
US20080222581A1 (en) 2007-03-09 2008-09-11 Mips Technologies, Inc. Remote Interface for Managing the Design and Configuration of an Integrated Circuit Semiconductor Design
US8103987B2 (en) * 2007-03-09 2012-01-24 Mips Technologies, Inc. System and method for managing the design and configuration of an integrated circuit semiconductor design
US8341612B2 (en) * 2007-05-16 2012-12-25 International Business Machines Corporation Method and apparatus for run-time statistics dependent program execution using source-coding
US8156484B2 (en) * 2007-08-22 2012-04-10 International Business Machines Corporation LDAP server performance object creation and use thereof
US8146098B2 (en) * 2007-09-07 2012-03-27 Manageiq, Inc. Method and apparatus for interfacing with a computer user via virtual thumbnails
US8196126B2 (en) * 2007-10-29 2012-06-05 Sap Ag Methods and systems for dynamically generating and optimizing code for business rules
US8418173B2 (en) 2007-11-27 2013-04-09 Manageiq, Inc. Locating an unauthorized virtual machine and bypassing locator code by adjusting a boot pointer of a managed virtual machine in authorized environment
US8407688B2 (en) 2007-11-27 2013-03-26 Managelq, Inc. Methods and apparatus for storing and transmitting historical configuration data associated with information technology assets
US8402449B1 (en) * 2008-01-10 2013-03-19 The Mathworks, Inc. Technique for automatically assigning placement for pipeline registers within code generated from a program specification
WO2009127254A1 (en) * 2008-04-16 2009-10-22 Telecom Italia S.P.A. Method and system for dynamically configuring a telecommunications network
US20090293051A1 (en) * 2008-05-22 2009-11-26 Fortinet, Inc., A Delaware Corporation Monitoring and dynamic tuning of target system performance
JP2010026851A (ja) * 2008-07-22 2010-02-04 Panasonic Corp コンパイラによる最適化方法
US7930661B1 (en) * 2008-08-04 2011-04-19 Xilinx, Inc. Software model for a hybrid stacked field programmable gate array
US10621092B2 (en) 2008-11-24 2020-04-14 Intel Corporation Merging level cache and data cache units having indicator bits related to speculative execution
US9672019B2 (en) * 2008-11-24 2017-06-06 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US8271958B2 (en) * 2008-12-12 2012-09-18 Microsoft Corporation Remapping debuggable code
US8438549B1 (en) * 2009-09-15 2013-05-07 Sandia Corporation Data processing with microcode designed with source coding
US8972961B2 (en) 2010-05-19 2015-03-03 International Business Machines Corporation Instruction scheduling approach to improve processor performance
KR101754203B1 (ko) 2011-01-19 2017-07-07 삼성전자주식회사 파워 게이팅 기반의 재구성가능 프로세서, 이를 위한 컴파일 장치 및 방법
US10089277B2 (en) 2011-06-24 2018-10-02 Robert Keith Mykland Configurable circuit array
US9417855B2 (en) 2011-09-30 2016-08-16 Intel Corporation Instruction and logic to perform dynamic binary translation
US9633160B2 (en) 2012-06-11 2017-04-25 Robert Keith Mykland Method of placement and routing in a reconfiguration of a dynamically reconfigurable processor
US9304770B2 (en) * 2011-11-21 2016-04-05 Robert Keith Mykland Method and system adapted for converting software constructs into resources for implementation by a dynamically reconfigurable processor
US8566767B1 (en) * 2011-11-23 2013-10-22 Cadence Design Systems, Inc. System and method for parametric intercoupling of static and dynamic analyses for synergistic integration in electronic design automation
US8874893B2 (en) 2012-03-26 2014-10-28 International Business Machines Corporation Effect translation and assessment among microarchitecture components
US9094299B1 (en) * 2013-01-08 2015-07-28 Juniper Networks, Inc. Auto-generation of platform-independent interface and operational scripts for configuring network devices
US9880842B2 (en) 2013-03-15 2018-01-30 Intel Corporation Using control flow data structures to direct and track instruction execution
US9471211B2 (en) 2013-03-18 2016-10-18 International Business Machines Corporation Chaining applications
US9891936B2 (en) 2013-09-27 2018-02-13 Intel Corporation Method and apparatus for page-level monitoring
US9740529B1 (en) * 2013-12-05 2017-08-22 The Mathworks, Inc. High throughput synchronous resource-constrained scheduling for model-based design
US9836283B2 (en) * 2014-11-14 2017-12-05 Cavium, Inc. Compiler architecture for programmable application specific integrated circuit based network devices
AU2016228166A1 (en) * 2016-09-13 2018-03-29 Canon Kabushiki Kaisha Visualisation for guided algorithm design to create hardware friendly algorithms
JP6433468B2 (ja) * 2016-09-28 2018-12-05 本田技研工業株式会社 プログラム作成支援方法
CN111966474B (zh) * 2020-08-11 2024-04-02 武汉遂意语联网络科技有限公司 控制定时任务的方法及装置
CN114816532B (zh) * 2022-04-20 2023-04-04 湖南卡姆派乐信息科技有限公司 一种提高risc-v二进制代码密度的寄存器分配方法

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4763242A (en) * 1985-10-23 1988-08-09 Hewlett-Packard Company Computer providing flexible processor extension, flexible instruction set extension, and implicit emulation for upward software compatibility
US5524268A (en) * 1992-06-26 1996-06-04 Cirrus Logic, Inc. Flexible processor-driven control of SCSI buses utilizing tags appended to data bytes to determine SCSI-protocol phases
US5752035A (en) * 1995-04-05 1998-05-12 Xilinx, Inc. Method for compiling and executing programs for reprogrammable instruction set accelerator
US6006318A (en) * 1995-08-16 1999-12-21 Microunity Systems Engineering, Inc. General purpose, dynamic partitioning, programmable media processor
US5742840A (en) * 1995-08-16 1998-04-21 Microunity Systems Engineering, Inc. General purpose, multiple precision parallel operation, programmable media processor
US5812425A (en) * 1996-09-16 1998-09-22 Advanced Micro Devices, Inc. Method for changing operation of circuitry in a CPU based on a statistic of performance of the CPU
US6138229A (en) * 1998-05-29 2000-10-24 Motorola, Inc. Customizable instruction set processor with non-configurable/configurable decoding units and non-configurable/configurable execution units
US6789135B1 (en) * 1998-09-09 2004-09-07 Matsushita Electric Industrial Co., Ltd. Apparatus function change system having an apparatus service center containing customer information and setting information for a reconfigurable chip
WO2000031652A2 (en) * 1998-11-20 2000-06-02 Altera Corporation Reconfigurable programmable logic device computer system
GB9828381D0 (en) * 1998-12-22 1999-02-17 Isis Innovation Hardware/software codesign system
KR100874738B1 (ko) * 1999-02-05 2008-12-22 텐실리카 인코포레이티드 구성가능한 프로세서를 설계하기 위한 프로세서 자동 생성시스템 및 방법
US6477697B1 (en) * 1999-02-05 2002-11-05 Tensilica, Inc. Adding complex instruction extensions defined in a standardized language to a microprocessor design to produce a configurable definition of a target instruction set, and hdl description of circuitry necessary to implement the instruction set, and development and verification tools for the instruction set
US6477683B1 (en) * 1999-02-05 2002-11-05 Tensilica, Inc. Automated processor generation system for designing a configurable processor and method for the same
US6664988B1 (en) * 1999-02-10 2003-12-16 Micron Technology, Inc. Graphical representation of system information on a remote computer
KR100731371B1 (ko) * 1999-02-15 2007-06-21 코닌클리즈케 필립스 일렉트로닉스 엔.브이. 구성가능 기능 유닛을 포함하는 프로세서를 사용해서 컴퓨터 프로그램을 실행하는 방법, 프로세서 및 컴퓨터 판독가능 기록 매체
US7036106B1 (en) * 2000-02-17 2006-04-25 Tensilica, Inc. Automated processor generation system for designing a configurable processor and method for the same
US6725317B1 (en) * 2000-04-29 2004-04-20 Hewlett-Packard Development Company, L.P. System and method for managing a computer system having a plurality of partitions
IL137296A (en) * 2000-07-13 2009-09-01 Nds Ltd Configurable hardware system
US20030041129A1 (en) * 2000-07-20 2003-02-27 John Applcby-Allis Voice-over-internet protocol telephone in reconfigurable logic
GB0028079D0 (en) * 2000-11-17 2001-01-03 Imperial College System and method

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020525907A (ja) * 2017-06-22 2020-08-27 アイキャット・エルエルシー 高スループットプロセッサ
JP7183197B2 (ja) 2017-06-22 2022-12-05 アイキャット・エルエルシー 高スループットプロセッサ

Also Published As

Publication number Publication date
US20090235241A1 (en) 2009-09-17
JP3903193B2 (ja) 2007-04-11
US7543283B2 (en) 2009-06-02
WO2002041146A3 (en) 2003-10-23
EP1374045A2 (en) 2004-01-02
AU2002223824A1 (en) 2002-05-27
US20040073899A1 (en) 2004-04-15
GB0028079D0 (en) 2001-01-03
WO2002041146A2 (en) 2002-05-23

Similar Documents

Publication Publication Date Title
JP3903193B2 (ja) 命令プロセッサシステムおよび方法
Clark et al. An architecture framework for transparent instruction set customization in embedded processors
Cardoso et al. Compilation techniques for reconfigurable architectures
Kastrup et al. ConCISe: A compiler-driven CPLD-based instruction set accelerator
Hammond et al. Hume: a domain-specific language for real-time embedded systems
JP5725583B2 (ja) アーキテクチャ・レベルの省電力指向の最適化およびリスク軽減
Cardoso et al. Compilation for FPGA-based reconfigurable hardware
Cardoso et al. XPP-VC: AC compiler with temporal partitioning for the PACT-XPP architecture
US7565631B1 (en) Method and system for translating software binaries and assembly code onto hardware
US6912706B1 (en) Instruction processor and programmable logic device cooperative computing arrangement and method
Vidal et al. UML design for dynamically reconfigurable multiprocessor embedded systems
Plessl et al. Virtualization of Hardware-Introduction and Survey.
Moreau et al. Leveraging the vta-tvm hardware-software stack for fpga acceleration of 8-bit resnet-18 inference
Beck et al. A transparent and adaptive reconfigurable system
JP4968478B2 (ja) ステートメントを再構成する方法およびその機能を備えたコンピュータシステム
Eikerling et al. A methodology for rapid analysis and optimization of embedded systems
JP3850531B2 (ja) 再構成可能な回路の設計装置、及び再構成可能な回路装置
Ping Seng et al. Flexible instruction processors
Huynh et al. Runtime Adaptive Extensible Embedded Processors—A Survey
Grad et al. Just-in-time instruction set extension-feasibility and limitations for an fpga-based reconfigurable asip architecture
WO2003071418A2 (en) Method and device for partitioning large computer programs
Hofmann et al. XBERT: Xilinx Logical-Level Bitstream Embedded RAM Transfusion
Balboni et al. Partitioning of hardware-software embedded systems: A metrics-based approach
Rakhmatov et al. Adaptive multiuser online reconfigurable engine
Luk Customising processors: design-time and run-time opportunities

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20041117

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20061114

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20061124

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20061215

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20110119

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20120119

Year of fee payment: 5

LAPS Cancellation because of no payment of annual fees