(57)【要約】本発明は、再プログラミング可能なハードウェアにおいてインプリメントされた命令プロセスの設計タイムおよびランタイム環境に関する。一局面では、本発明は、カスタマイゼーション仕様に基づいて構成情報および関連する実行可能なコードを生成するための設計システムを提供する。これは、再プログラミング可能なハードウェアを用いて命令プロセッサをインプリメントするために、アプリケーションソースコードを含むアプリケーション情報および設計制約を含むカスタマイゼーション情報を含む。このシステムは、テンプレートジェネレータ、アナライザ、コンパイラ、インスタンチエータ、およびビルダを含む。別の局面では、本発明は、再プログラミング可能なハードウェアを用いてインプリメントされた命令プロセッサのランタイム再構成を管理するための管理システムを提供する。【選択図】図１
2005503680.tif 000002
【特許請求の範囲】
【請求項１】
再プログラミング可能なハードウェアを用いて命令プロセッサをインプリメントするために、カスタマイゼーション仕様であって、アプリケーションソースコードを含むアプリケーション情報および設計制約を含むカスタマイゼーション情報を含む、カスタマイゼーション仕様に基づいて構成情報および関連する実行可能コードを生成するための設計システムであって、
インプリメンテーションの候補として識別された各プロセッサスタイルに対してテンプレートを生成するためのテンプレートジェネレータと、
各テンプレートに対する命令情報を分析し、命令最適化を決定するためのアナライザと、
該命令最適化を含めて、そして、実行可能なコードを生成するために該アプリケーションソースコードをコンパイルするためのコンパイラと、
各テンプレートに対するアーキテクチャ情報を分析し、アーキテクチャ最適化を決定し、そして、該アーキテクチャ最適化を含む構成情報を生成するためのインスタンチエータと、
該アーキテクチャ最適化を含む該構成情報からデバイス固有の構成情報を生成するためのビルダーと
を含む、システム。
【請求項２】
各候補インプリメンテーションに対する前記構成情報および関連コードをプロファイルし、予定可能な基準に基づいて１以上の最適のインプリメンテーションを選択するためのセレクタをさらに含む、請求項１に記載のシステム。
【請求項３】
前記アプリケーション情報は、アプリケーションデータをさらに含む、請求項１または２に記載のシステム。
【請求項４】
前記アプリケーションデータは、前記命令プロセッサによって動作されることになるデータを表すデータを含む、請求項３に記載のシステム。
【請求項５】
前記アプリケーションデータは、ランタイム状態の範囲を表すデータを含む、請求項４に記載のシステム。
【請求項６】
前記カスタマイゼーション情報は、少なくとも一つのカスタム命令をさらに含む、請求項１〜５のいずれか１つに記載のシステム。
【請求項７】
各カスタム命令は、強制的にまたは任意的に規定され得る、請求項６に記載のシステム。
【請求項８】
前記カスタマイゼーション情報は、少なくとも一つのプロセッサスタイルを、インプリメンテーションのための候補としてさらに識別する、請求項１〜７のいずれか１つに記載のシステム。
【請求項９】
カスタマイゼーション仕様の情報をプロファイルし、少なくとも一つのプロセッサスタイルを、インプリメンテーションのための候補として識別するためのプロファイラをさらに含む、請求項１〜８のいずれか一つに記載のシステム。
【請求項１０】
前記プロファイルされた情報は、前記アプリケーションソースコードを含む、請求項９に記載のシステム。
【請求項１１】
前記プロファイラは、複数のプロセッサスタイルを、インプリメンテーションのための候補として識別するように構成される、請求項９または１０に記載のシステム。
【請求項１２】
個々の前記プロセッサスタイルは、アプリケーションの部分を実行するために識別され、これにより、該アプリケーションは、組み合わされた個々の該プロセッサスタイルによって実行されることになる、請求項１１に記載のシステム。
【請求項１３】
前記プロファイラは、最適化を可能にするためのプロファイリング情報を収集するようにさらに構成される、請求項９〜１２のいずれか１つに記載のシステム。
【請求項１４】
前記プロファイリング情報は、オペコードのグループの頻度を含む、請求項１３に記載のシステム。
【請求項１５】
前記プロファイリング情報は、オペレーション共有に関する情報を含む、請求項１３または１４に記載のシステム。
【請求項１６】
前記プロファイリング情報は、オペレーション並行化に関する情報を含む、請求項１３〜１５のいずれか１つに記載のシステム。
【請求項１７】
前記アナライザは、前記命令情報を分析する際に前記プロファイリング情報を利用し、前記命令最適化を決定するように構成される、請求項９〜１６のいずれか１つに記載のシステム。
【請求項１８】
前記命令最適化は、オペレーション最適化を含む、請求項１〜１７のいずれか１つに記載のシステム。
【請求項１９】
前記オペレーションは、オペレーション共有最適化を含む、請求項１８に記載のシステム。
【請求項２０】
前記オペレーション最適化は、オペレーション並行最適化を含む、請求項１８または１９に記載のシステム。
【請求項２１】
前記命令最適化は、カスタム命令を含む、請求項１〜２０のいずれか１つに記載のシステム。
【請求項２２】
前記アナライザは、候補命令最適化を識別し、前記インスタンチエータによって行われた推定に基づいて前記命令最適化のインプリメンテーションを決定するように構成される、請求項１〜２１のいずれか１つに記載のシステム。
【請求項２３】
前記インスタンチエータからの前記推定は、再プログラミング可能なハードウェアがランタイム中に全命令を共にインプリメントするようにプログラミングされることができないことを提供する場合には、前記アナライザは、組み合わされた個々の命令を、再プログラミング可能なハードウェアを再プログラミングすることによってインプリメントされ得る命令のセットにグループ化する、請求項２２に記載のシステム。
【請求項２４】
前記アナライザは、異なるランタイム状態のために複数のインプリメンテーションを決定するように構成され、それぞれは該ランタイム状態に結び付けられた命令最適化を有し、各インプリメンテーションに結び付けられた決定状態情報を生成し、該決定状態情報は、実際のランタイム状態に応じたインプリメンテーション間の選択を可能にする、請求項１〜２３のいずれか１つに記載のシステム。
【請求項２５】
前記命令最適化が設計制約を用いてコンパイルするインプリメンテーションを提供することができない場合、前記アナライザは、該アナライザによって提供された分析情報に基づいてプロファイラに前記プログラミング仕様を再プロファイルさせるように構成される、請求項１〜２４のいずれか１つに記載のシステム。
【請求項２６】
前記インスタンチエータによって行われた前記アーキテクチャ最適化は、パイプライン処理を含む、請求項１〜２５のいずれか１つに記載のシステム。
【請求項２７】
前記インスタンチエータによって行われた前記アーキテクチャ最適化は、リソース複製を含む、請求項１〜２６のいずれか１つに記載のシステム。
【請求項２８】
前記インスタンチエータによって行われた前記アーキテクチャ最適化は、最適化とは別の技術を含む、請求項１〜２７のいずれか１つに記載のシステム。
【請求項２９】
最適化とは別の前記技術は、未使用リソースの除去を含む、請求項２８に記載のシステム。
【請求項３０】
最適化とは別の前記技術は、オプコード割当を含む、請求項２８または２９に記載のシステム。
【請求項３１】
最適化とは別の前記技術は、チャンネル通信最適化を含む、請求項２８または３０に記載のシステム。
【請求項３２】
最適化とは別の前記技術は、データおよび命令パスをカスタマイズすることを含む、請求項２８または３１に記載のシステム。
【請求項３３】
複数の再プログラミング可能なハードウェアの構成が前記命令プロセッサをインプリメントすることが要求される場合、前記インスタンチエータは、個々の構成をグループに最適化し、該グループ化された構成のインプリメンテーションをスケジューリングするように構成される、請求項１〜３２のいずれか１つに記載のシステム。
【請求項３４】
複数のプロセッサスタイルに対するプロセッサ定義および関連するパラメータを含むライブラリをさらに含み、
前記テンプレートジェネレータは、該ライブラリから抽出されたプロセッサ定義および関連するパラメータからテンプレートを生成するように構成される、請求項１〜３３のいずれか１つに記載のシステム。
【請求項３５】
前記プロセッサスタイルは、スーパースケーラープロセッサを含む、請求項１〜３４のいずれか１つに記載のシステム。
【請求項３６】
前記プロセッサスタイルは、ハイブリッドプロセッサを含む、請求項１〜３５のいずれか１つに記載のシステム。
【請求項３７】
前記コンパイラは、前記アナライザによって生成され、前記アプリケーションソースコードは、コンパイラによるコンパイルのためにカスタマイゼーション情報で注釈を付けられて、最適化された実行可能なコードを提供する、請求項１〜３６のいずれか１つに記載のシステム。
【請求項３８】
前記コンパイラは、前記アプリケーションソースコードをコンパイルし、最適化を取り込んで最適化された実行可能なコードを提供するために該コンパイルされたソースコードを再組織化するように構成される、請求項１〜３６のいずれか１つに記載のシステム。
【請求項３９】
前記構成情報および関連する実行可能なコード、および関連する場合の決定状態情報は、再プログラミング可能なハードウェアを用いてインプリメントされる命令プロセッサの適応および構成を管理するための少なくとも一つの管理システムに配備される、請求項１〜３８のいずれか１つに記載のシステム。
【請求項４０】
前記構成情報および関連する実行可能なコード、および関連する場合の決定状態情報は、再プログラミング可能なハードウェアの再プログラミングを可能にするための少なくとも一つのライブラリに配備される、請求項１〜３９のいずれか１つに記載のシステム。
【請求項４１】
前記再プログラミング可能なハードウェアは、少なくとも一つのフィールドプログラマブルゲートアレイを含む、請求項１〜４０のいずれか１つに記載のシステム。
【請求項４２】
前記再プログラミング可能なハードウェアは、少なくとも一つのコンプレックスプログラマブルロジックデバイスを含む、請求項１〜４１のいずれか１つに記載のシステム。
【請求項４３】
前記命令プロセッサは、前記再プログラミング可能なハードウェアを用いて完全にインプリメントされる、請求項１〜４２のいずれか１つに記載のシステム。
【請求項４４】
再プログラミング可能なハードウェアを用いて命令プロセッサをインプリメントするために、カスタマイゼーション仕様であって、アプリケーションソースコードを含むアプリケーション情報および設計制約を含むカスタマイゼーション情報を含む、カスタマイゼーション仕様に基づいて構成情報および関連する実行可能なコードを生成する方法であって、
インプリメンテーションのための候補として識別された各プロセッサスタイルに対するテンプレートを生成するステップと、
各テンプレートに対する命令情報を分析し、命令最適化を決定するステップと、
該命令最適化を含め、そして、実行可能なコードを生成するために該アプリケーションソースコードをコンパイルするステップと、
各テンプレートに対するアーキテクチャ情報を分析し、アーキテクチャ最適化を決定するステップと、
該アーキテクチャ最適化を含む構成情報を生成するステップと、
該アーキテクチャ最適化を含む該構成情報からデバイス固有の構成情報を生成するステップと、
を包含する、方法。
【請求項４５】
各候補インプリメンテーションに対して前記構成情報および関連するコードをプロファイルするステップと、
それに応答して、予定可能な基準に基づいて１以上の最適なインプリメンテーションを選択するステップと
をさらに包含する、請求項４４に記載の方法。
【請求項４６】
前記アプリケーション情報は、アプリケーションデータをさらに含む、請求項４４または４５に記載の方法。
【請求項４７】
前記アプリケーションデータは、前記命令プロセッサによって動作されることになるデータを表すデータを含む、請求項４６に記載の方法。
【請求項４８】
前記アプリケーションデータは、ランタイム状態の範囲を表すデータを含む、請求項４７に記載の方法。
【請求項４９】
前記カスタマイゼーション情報は、少なくとも一つのカスタム命令をさらに含む、請求項４４〜４８のいずれか１つに記載の方法。
【請求項５０】
各カスタム命令は、強制的にまたは任意的に定義され得る、請求項４９に記載の方法。
【請求項５１】
前記カスタマイゼーション情報は、少なくとも一つのプロセッサスタイルを、インプリメンテーションのための候補としてさらに識別する、請求項４４〜５０のいずれか１つに記載の方法。
【請求項５２】
前記カスタマイゼーション仕様の情報をプロファイルするステップと、
少なくとも一つのプロセッサスタイルを、インプリメンテーションのための候補として識別するステップと
をさらに包含する、請求項４４〜５１のいずれか１つに記載の方法。
【請求項５３】
前記プロファイルされた情報は、前記アプリケーションソースコードを含む、請求項５２に記載の方法。
【請求項５４】
複数のプロセッサスタイルは、前記カスタマイゼーション仕様プロファイルステップにおいて、インプリメンテーションのための候補として識別される、請求項５２または５３に記載の方法。
【請求項５５】
個々のプロセッサスタイルは、アプリケーションの部分を実行するように識別され、これにより、該アプリケーションは、組み合わされた個々のプロセッサスタイルによって実行されることになる、請求項５４に記載の方法。
【請求項５６】
最適化を可能にするためのプロファイリング情報は、カスタマイゼーション仕様プロファイリングステップにおいて集められる、請求項５２〜５５のいずれか１つに記載の方法。
【請求項５７】
前記プロファイリング情報は、オプコードのグループの頻度を含む、請求項５６に記載の方法。
【請求項５８】
前記プロファイリング情報は、オペレーション共有に関する情報を含む、請求項５６または５７に記載の方法。
【請求項５９】
前記プロファイリング情報は、オペレーション並行化に関する情報を含む、請求項５６〜５８のいずれか１つに記載の方法。
【請求項６０】
前記命令情報分析ステップは、
前記命令情報を分析する際の前記プロファイリング情報を利用するステップと、
前記命令最適化をそこから決定するステップと
を包含する、請求項５６〜５９のいずれか１つに記載の方法。
【請求項６１】
前記命令最適化は、オペレーション最適化を含む、請求項６０に記載の方法。
【請求項６２】
前記オペレーション最適化は、オペレーション共有最適化を含む、請求項６１に記載の方法。
【請求項６３】
前記オペレーション最適化は、オペレーション並行最適化を含む、請求項６１または６２に記載の方法。
【請求項６４】
前記命令最適化は、カスタム命令を含む、請求項６０〜６３のいずれか１つに記載の方法。
【請求項６５】
前記命令情報分析ステップは、
候補命令最適化を識別するステップと、
前記候補命令最適化の命令に基づいて行われた推定に基づいて、前記命令最適化のインプリメンテーションを決定するステップと
を包含する、請求項４４〜６４のいずれか１つに記載の方法。
【請求項６６】
前記推定が、前記再プログラミング可能なハードウェアがランタイム中に全命令を共にインプリメントするようにプログラミングされることができないことを提供する場合に、前記命令情報分析ステップは、
個々の命令を、前記再プログラミング可能なハードウェアを再プログラミングすることによってインプリメントされ得る命令のセットに組み合わせてグルーピングするステップを包含する、請求項６５に記載の方法。
【請求項６７】
前記命令情報分析ステップは、
異なるランタイム状態に対する複数のインプリメンテーションを決定するステップであって、それぞれは、該ランタイム状態に結び付けられる命令を有する、ステップと、
各インプリメンテーションに結び付けられた決定状態情報を生成するステップであって、該決定状態情報は、実際のランタイム状態に応じて該インプリメンテーション間の選択を可能にする、ステップと
を包含する、請求項４４〜６６のいずれか１つに記載の方法。
【請求項６８】
前記命令最適化が、設計制約とともにコンパイルするインプリメンテーションを提供することができない場合に、前記命令情報分析ステップは、
前記カスタマイゼーション仕様プロファイリングステップを呼び出し、該命令情報分析ステップによって提供された分析情報に基づいて該カスタマイゼーション仕様を再プロファイルするステップを包含する、請求項５２に従属する場合の請求項４４〜６７のいずれか１つに記載の方法。
【請求項６９】
前記アーキテクチャ最適化は、パイプライン処理を含む、請求項４４〜６８のいずれか１つに記載の方法。
【請求項７０】
前記アーキテクチャ最適化は、リソース複製を含む、請求項４４〜６９のいずれか１つに記載の方法。
【請求項７１】
前記アーキテクチャ最適化は、最適化とは別の技術を含む、請求項４４〜７０のいずれか１つに記載の方法。
【請求項７２】
最適化とは別の前記技術は、未使用リソースの除去を含む、請求項７１に記載の方法。
【請求項７３】
最適化とは別の前記技術は、オプコード割当を含む、請求項７１または７２に記載の方法。
【請求項７４】
最適化とは別の前記技術は、チャンネル通信最適化を含む、請求項７１〜７３のいずれか１つに記載の方法。
【請求項７５】
最適化とは別の前記技術は、データおよび命令パスのカスタマイゼーションを含む、請求項７１〜７４のいずれか１つに記載の方法。
【請求項７６】
再プログラミング可能なハードウェアの複数の構成が前記命令プロセッサをインプリメントすることが要求される場合に、前記命令ステップは、
個々の構成をグループに最適化するステップと、
該グループにされた構成のインプリメンテーションをスケジューリングするステップと
を包含する、請求項４４〜７５のいずれか１つに記載の方法。
【請求項７７】
各テンプレートが、複数のプロセッサスタイルに対するプロセッサ定義および関連するパラメータを含むライブラリから抽出されたプロセッサ定義および関連するパラメータから生成される、請求項４４〜７６のいずれか１つに記載の方法。
【請求項７８】
前記プロセッサスタイルは、スーパースケーラープロセッサを含む、請求項４４〜７７のいずれか１つに記載の方法。
【請求項７９】
前記プロセッサスタイルは、ハイブリッドプロセッサを含む、請求項４４〜７８のいずれか１つに記載の方法。
【請求項８０】
前記アプリケーションソースコードをコンパイルするステップにおいて利用された前記コンパイラは、前記命令情報分析ステップにおいて生成され、前記コンパイルするステップは、
カスタマイゼーション情報とともに前記アプリケーションソースコードに注釈を付けるステップと、
注釈が付けられたソースコードをコンパイルして、最適化された実行可能なコードを提供するステップと
を包含する、請求項４４〜７９のいずれか１つに記載の方法。
【請求項８１】
前記コンパイルするステップは、
前記アプリケーションソースコードをコンパイルするステップと、
最適化を組み入れるために該コンパイルされたソースコードを再組織化して、最適化された実行可能なコードを提供するステップと
を包含する、請求項４４〜７９のいずれか１つに記載の方法。
【請求項８２】
前記構成情報および関連する実行可能なコード、および関連する場合には前記決定状態情報を、再プログラミング可能なハードウェアを用いてインプリメントされた命令プロセッサの再構成を管理するためにある少なくとも一つの管理システムに配備するステップをさらに包含する、請求項４４〜８１のいずれか１つに記載の方法。
【請求項８３】
前記構成情報および関連する実行可能なコード、および、関連する場合には、前記決定状態情報を、再プログラミング可能なハードウェアを再プログラミングすることを可能にするための少なくとも一つのライブラリに配備するステップをさらに包含する、請求項４４〜８２のいずれか１つに記載の方法。
【請求項８４】
前記再プログラミング可能なハードウェアは、少なくとも一つのフィールドプログラマブルゲートアレイを含む、請求項４４〜８３のいずれか１つに記載の方法。
【請求項８５】
前記再プログラミング可能なハードウェアは、少なくとも一つのコンプレックスプログラマブルロジックデバイスを含む、請求項４４〜８３のいずれか１つに記載の方法。
【請求項８６】
前記命令プロセッサは、前記再プログラミング可能なハードウェアを用いて完全にインプリメントされる、請求項４４〜８５のいずれか１つに記載の方法。
【請求項８７】
再プログラミング可能なハードウェアを用いてインプリメントされた命令プロセッサのランタイム再構成を管理するための管理システムであって、
複数の命令プロセッサインプリメンテーションに対する構成情報を含む構成ライブラリと、
該インプリメンテーションに対する関連する実行可能なコードを含めるためのコードライブラリと、
アプリケーションデータ、および必要に応じて構成情報および関連する実行可能なコードを、命令プロセッサのインプリメンテーションおよび実行のための再プログラミング可能なハードウェアにロードするためのローダーと、
ローダーにアプリケーションデータ、および必要に応じて構成情報および関連する実行可能なコードをロードし、該実行可能なコードを実行するように信号を出すためのローダーコントローラと、
該命令プロセッサのオペレーションに関するランタイム統計を取得するためのランタイムモニタと、
該ランタイム統計を受け取り、該ローダに、新しいインプリメンテーションに対する新しい構成情報および関連する実行可能なコードを該再プログラミング可能なハードウェアにロードするように指示するようにオペレーション可能に構成された最適化デタミナと、
最適化デタミナーを呼び出すための最適化インストラクタと
を含む、システム。
【請求項８８】
前記ローダコントローラ、前記ランタイムモニタおよび前記最適化インストラクタを含む前記ランタイムマネジャーを含む、請求項８７に記載のシステム。
【請求項８９】
前記最適化インストラクタは、前記最適化デタミナを予定可能なイベント上に自動的に呼び出すように構成される、請求項８７または８８に記載のシステム。
【請求項９０】
前記イベントは、前記実行可能なコードの命令である、請求項８９に記載のシステム。
【請求項９１】
前記最適化インストラクタは、外部エージェントによって呼び出されるように構成される、請求項８７〜９０のいずれか１つに記載のシステム。
【請求項９２】
前記最適化インストラクタは、外部エージェントからの作動命令に応答して呼び出されるように構成される、請求項９１に記載のシステム。
【請求項９３】
前記最適化デタミナは、前記ローダコントローラに信号を出すことを指示し、新しい構成情報および関連する実行可能なコードを、前記外部エージェントによる前記最適化インストラクタの実施の際に前記再プログラミング可能なハードウェアにロードさせるように構成される、請求項９１または９２に記載のシステム。
【請求項９４】
前記作動命令は、前記再プログラミング可能なハードウェアを用いてインプリメントされることになる前記インプリメンテーションを識別する、請求項９２に従属される場合の請求項９３に記載のシステム。
【請求項９５】
新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードは、外部エージェントによる前記最適化インストラクタの実施の前に、各個々の構成ライブラリおよび前記コードライブラリにロードされ、その結果、該当するインプリメンテーションに対する構成情報および関連する実行可能なコードは、該外部エージェントによる最適化インストラクタの実施の際に前記再プログラミング可能なハードウェアにロードされ得る、請求項９１〜９４のいずれか１つに記載のシステム。
【請求項９６】
前記インプリメンテーションの少なくとも一つに対する結び付けられた設計状態情報を含めるための決定状態ライブラリをさらに含み、
前記ローダは、再プログラミング可能なハードウェアにロードされた該インプリメンテーションの種々のランタイム状態に対する複数の他のインプリメンテーションのための決定状態情報を前記最適化デタミナに提供するように構成され、該最適化デタミナは、該他のインプリメンテーションに対する該決定状態情報をプロファイルし、該他のインプリメンテーションのうちの任意に対する該決定状態情報が前記ランタイム統計をより緊密に適合させるかどうかを決定するように構成され、該他のインプリメンテーションの一つに対する該決定状態情報が該ランタイム統計をより緊密に適合させる場合に、前記ローダコントローラに信号を出すように指示して、該ローダに該当するインプリメンテーションに対する該構成情報および関連する実行可能なコードを該再プログラミング可能なハードウェアにロードさせる、請求項８７〜９５のいずれか１つに記載のシステム。
【請求項９７】
前記ランタイム統計に最適化された１以上の新しいインプリメンテーションを生成するためのアダプタをさらに含み、
前記最適化デタミナは、該アダプタに１以上の新しいインプリメンテーションを生成することを指示するように構成される、請求項８７〜９６のいずれか１つに記載のシステム。
【請求項９８】
前記アダプタは、各新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードを各個々の構成ライブラリおよび前記コードライブラリにロードするように構成される、請求項８７〜９５のいずれか１つに従属される場合の請求項９７に記載のシステム。
【請求項９９】
前記アダプタは、各新しいインプリメンテーションに対する前記構成情報、関連する実行可能なロードおよび関連する決定状態情報を、各個々の構成ライブラリ、前記コードライブラリおよび前記決定状態ライブラリにロードするように構成される、請求項９６に従属される場合の請求項９７に記載のシステム。
【請求項１００】
前記最適化デタミナは、前記ローダに、新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードを、予定可能な基準を満足すると前記再プログラミング可能なハードウェアにロードすることを指示するように構成される、請求項９７〜９９のいずれか１つに記載のシステム。
【請求項１０１】
前記最適化デタミナは、前記ローダに、新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードを前記再プログラミング可能なハードウェアにロードすることを指示するように構成され、ここで、再構成比Ｒ＞１、該再構成比Ｒは、下式によって与えられ、
【数１】
2005503680.tif 000016
ここで、Ｃｓｗ，ｊは、ソフトウェア関数ｆ（）をインプリメントするためのクロックサイクル数、
Ｔｓｗは、該クロックサイクル数Ｃｓｗ，ｊにおける各クロックサイクルに対するサイクルタイム、
Ｃｃｉ，ｊは、カスタム命令をインプリメントするためのクロックサイクル数、
Ｔｃｉは、該クロックサイクル数Ｃｃｉ，ｊにおける各クロックサイクルに対するサイクルタイム、
Ｔｒは、再プログラミング可能なハードウェアの再構成のために要求される時間である、請求項１００に記載のシステム。
【請求項１０２】
前記アダプタは、オンラインで動作するように構成される、請求項９７〜１０１のいずれか１つに記載のシステム。
【請求項１０３】
前記アダプタは、オフラインで動作するように構成される、請求項９７〜１０１のいずれか１つに記載のシステム。
【請求項１０４】
前記アダプタは、
前記ランタイム統計に基づいて命令を分析し、命令最適化を決定するためのアナライザと、
該命令最適化を含めるために前記アプリケーションソースコードをコンパイルし、実行可能なコードを生成するためのコンパイラと、
前記ランタイム統計に基づいてアーキテクチャ情報を分析し、アーキテクチャ最適化を決定し、そして、該アーキテクチャ最適化を含む構成情報を生成するためのインスタンチエータと、
該アーキテクチャ最適化を含む該構成情報からデバイス固有の構成情報を生成するためのビルダーと
を含む、請求項９７〜１０３のいずれか１つに記載のシステム。
【請求項１０５】
前記アダプタは、
各候補インプリメンテーションに対する前記構成情報および関連するコードをプロファイルし、予定可能な基準に基づいて１以上の最適のインプリメンテーションを選択するするためのセレクタをさらに含む、請求項１０４に記載のシステム。
【請求項１０６】
前記アダプタは、
カスタマイゼーション仕様の情報および前記ランタイム統計をプロファイルし、少なくとも一つのプロセッサスタイルをインプリメンテーションのための候補として識別するためのプロファイラと、
インプリメンテーションのための候補として識別された各プロセッサスタイルに対するテンプレートを生成するためのテンプレートジェネレータと
をさらに含む、請求項１０４または１０５に記載のシステム。
【請求項１０７】
前記プロファイルされた情報は、前記アプリケーションソースコードを含む、請求項１０６に記載のシステム。
【請求項１０８】
前記プロファイラは、複数のプロセッサスタイルをインプリメンテーションのための候補として識別するように構成される、請求項１０６または１０７に記載のシステム。
【請求項１０９】
個々のプロセッサスタイルは、アプリケーションの部分を実行するように識別され、これにより、該アプリケーションは、組み合わされた個々のプロセッサスタイルによって実行されることになる、請求項１０８に記載のシステム。
【請求項１１０】
前記プロファイラは、最適化を可能にするためのプロファイリング情報を収集するようにさらに構成される、請求項１０６〜１０９のいずれか１つに記載のシステム。
【請求項１１１】
前記プロファイリング情報は、オプコードのグループの頻度を含む、請求項１１０に記載のシステム。
【請求項１１２】
前記プロファイリング情報は、オペレーション共有に関する情報を含む、請求項１１０または１１１に記載のシステム。
【請求項１１３】
前記プロファイリング情報は、オペレーション並行化に関する情報を含む、請求項１１０〜１１２のいずれか１つに記載のシステム。
【請求項１１４】
前記アナライザは、前記命令情報を分析するステップにおいて前記プロファイリング情報を利用し、該命令最適化をそこから決定するように構成される、請求項１０６〜１１３のいずれか１つに記載のシステム。
【請求項１１５】
前記命令最適化は、オペレーション最適化を含む、請求項１０４〜１１４のいずれか１つに記載のシステム。
【請求項１１６】
前記オペレーション最適化は、オペレーション共有最適化を含む、請求項１１５に記載のシステム。
【請求項１１７】
前記オペレーション最適化は、オペレーション並行最適化を含む、請求項１１５または１１６に記載のシステム。
【請求項１１８】
前記命令最適化は、カスタム命令を含む、請求項１０４〜１１７のいずれか１つに記載のシステム。
【請求項１１９】
カスタム命令は、使用頻度に基づく最適化のための候補として識別される、請求項１１８に記載のシステム。
【請求項１２０】
前記カスタム命令は、決定関数Ｄに基づく最適化のための候補として識別され、
ここで、関数Ｄは、下式によって与えられ、
【数２】
2005503680.tif 000017
ここで、Ｃｓｗ，ｊは、ソフトウェア関数ｆ（）をインプリメントするためのクロックサイクル数、
Ｔｓｗは、該クロックサイクル数Ｃｓｗ，ｊにおける各クロックサイクルに対するサイクルタイム、
Ｃｃｉ，ｊは、カスタム命令をインプリメントするためのクロックサイクル数、
Ｔｃｉは、該クロックサイクル数Ｃｃｉ，ｊにおける各クロックサイクルに対するサイクルタイム、
Ｆｊは、手順が呼ばれる時間数、
Ｓｊは、該カスタム命令がインプリメントされたかどうかを示すバイナリ選択変数である、請求項１１８に記載のシステム。
【請求項１２１】
前記アナライザは、候補命令最適化を識別し、前記インスタンチエータによって行われた推定に基づいて該命令最適化のインプリメンテーションを決定するように構成される、請求項１０４〜１２０のいずれか１つに記載のシステム。
【請求項１２２】
前記インスタンチエータからの前記推定が前記再プログラミング可能なハードウェアがランタイム中に全命令を共にインプリメントするようにプログラミングされることができないことを提供する場合には、前記アナライザは、個々の命令を、再プログラミング可能なハードウェアを再プログラミングすることによってインプリメントされ得る命令のセットに組み合わせてグループ化する、請求項１２１に記載のシステム。
【請求項１２３】
前記アナライザは、異なるランタイム状態に対する複数のインプリメンテーションであって、それぞれのインプリメンテーションは、該ランタイム状態に結び付けられた命令最適化を有する、インプリメンテーションを決定し、各インプリメンテーションに結び付けられた決定状態情報を生成するように構成され、該決定状態情報は、実際のランタイム状態に応じて該インプリメンテーション間の選択を可能にする、請求項１０４〜１２２のいずれか１つに記載のシステム。
【請求項１２４】
前記命令最適化が設計制約とともにコンパイルするインプリメンテーションを提供することができない場合には、前記アナライザは、前記プロファイラを呼び出して、該アナライザによって提供された分析情報に基づいて前記カスタマイゼーション仕様を再プロファイルするように構成される、請求項１０６に従属される場合の請求項１０４〜１２３のいずれか１つに記載のシステム。
【請求項１２５】
前記インスタンチエータによって行われた前記アーキテクチャ最適化は、パイプライン処理を含む、請求項１０４〜１２４のいずれか１つに記載のシステム。
【請求項１２６】
前記インスタンチエータによって行われた前記アーキテクチャ最適化は、リソース複製を含む、請求項１０４〜１２５のいずれか１つに記載のシステム。
【請求項１２７】
前記インスタンチエータによって行われた前記アーキテクチャ最適化は、最適化とは別の技術を含む、請求項１０４〜１２６のいずれか１つに記載のシステム。
【請求項１２８】
最適化とは別の前記技術は、未使用リソースの除去を含む、請求項１２７に記載のシステム。
【請求項１２９】
最適化とは別の前記技術は、オプコード割当を含む、請求項１２７または１２８に記載のシステム。
【請求項１３０】
最適化とは別の前記技術は、チャンネル通信最適化を含む、請求項１２７〜１２９のいずれか１つに記載のシステム。
【請求項１３１】
最適化とは別の前記技術は、データおよび命令パスのカスタマイゼーションを含む、請求項１２７〜１３０のいずれか１つに記載のシステム。
【請求項１３２】
前記再プログラミング可能なハードウェアの複数の構成が前記命令プロセッサをインプリメントすることが要求される場合には、前記インスタンチエータは、個々の構成をグループに最適化し、該グループ化された構成のインプリメンテーションをスケジューリングするように構成される、請求項１０４〜１３１のいずれか１つに記載のシステム。
【請求項１３３】
前記アダプタは、複数のプロセッサスタイルのためのプロセッサ定義および関連するパラメータを含むライブラリをさらに含み、
前記テンプレートジェネレータは、該ライブラリから抽出されたプロセッサ定義および関連するパラメータからテンプレートを生成するように構成される、請求項１０６〜１３２のいずれか１つに記載のシステム。
【請求項１３４】
前記プロセッサスタイルは、スーパースケーラープロセッサを含む、請求項１０６〜１３３に記載のシステム。
【請求項１３５】
前記プロセッサスタイルは、ハイブリッドプロセッサを含む、請求項１０６〜１３４のいずれか１つに記載のシステム。
【請求項１３６】
前記コンパイラは、前記アナライザによって生成され、前記アプリケーションソースコードは、該コンパイラによる編集のためのカスタマイゼーション情報とともに注釈が付けられて最適化された実行可能なコードを提供する、請求項１０４〜１３５のいずれか１つに記載のシステム。
【請求項１３７】
前記コンパイラは、前記アプリケーションソースコードを編集し、最適化を組み入れるために前記編集されたソースコードを再組織化して最適化された実行可能なコードを提供するするように構成される、請求項１０４〜１３５のいずれか１つに記載のシステム。
【請求項１３８】
前記再プログラミング可能なハードウェアは、少なくとも一つのフィールドプログラマブルゲートアレイを含む、請求項８７〜１３７のいずれか１つに記載のシステム。
【請求項１３９】
前記再プログラミング可能なハードウェアは、少なくとも一つのコンプレックスプログラマブルロジックデバイスを含む、請求項８７〜１３７のいずれか１つに記載のシステム。
【請求項１４０】
前記命令プロセッサは、前記再プログラミング可能なハードウェアを用いて完全にインプリメントされる、請求項８７〜１３９のいずれか１つに記載のシステム。
【請求項１４１】
再プログラミング可能なハードウェアにおいてインプリメントされる命令プロセッサのランタイム再構成を管理する方法であって、
複数の命令プロセッサのインプリメンテーションに対する構成情報を含む構成ライブラリを提供するステップと、
該インプリメンテーションのための関連する実行可能なコードを含ませるためのコードライブラリを提供するステップと、
命令プロセッサのインプリメンテーションおよび実行のために、アプリケーションデータ、および必要に応じて構成情報および実行可能なコードを、再プログラミング可能なハードウェアにロードするステップと、
該実行可能なコードを実行するステップと、
該命令プロセッサのオペレーションに関するランタイム統計を取得するステップと、
新しいインプリメンテーションに対する新しい構成情報および関連する実行可能なコードを該再プログラミング可能なハードウェアにロードするステップと
を包含する、方法。
【請求項１４２】
前記ロードするステップは、予定可能なイベント上で自動的に行われる、請求項１４１に記載の方法。
【請求項１４３】
前記イベントは、前記実行可能なコードにおける命令である、請求項１４２に記載の方法。
【請求項１４４】
前記ロードするステップは、外部エージェントによって作動される、請求項１４１〜１４３のいずれか１つに記載の方法。
【請求項１４５】
前記ロードするステップは、外部エージェントからの作動命令に応答して作動される、請求項１４４に記載の方法。
【請求項１４６】
前記作動命令は、前記再プログラミング可能なハードウェアを用いて、インプリメントされることになっているインプリメンテーションを識別する、請求項１４５に記載の方法。
【請求項１４７】
前記ロードするステップの前に、新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードを、それぞれ個々の構成ライブラリおよび前記コードライブラリにロードするステップをさらに包含し、
該ロードするステップは、外部エージェントにより作動する際に、該当するインプリメンテーションに対する前記構成情報および関連する実行可能なコードを、該再プログラミング可能なハードウェアにロードするステップを包含する、請求項１４４〜１４６のいずれか１つに記載の方法。
【請求項１４８】
前記インプリメンテーションの少なくとも一つに対する関連する決定状態情報を含ませるための決定状態ライプラリを提供するステップと、
該再プログラミング可能なハードウェアにおいてロードされた該インプリメンテーションのランタイム状態に対する複数の他のインプリメンテーションに対する該決定状態情報をプロファイルするステップと、
他のインプリメンテーションのうちの任意に対する該決定状態情報が前記ランタイム統計により緊密に適合するかどうかを決定するステップとをさらに包含し、
該他のインプリメンテーションの一つに対する該決定状態情報が該ランタイム統計により緊密に適合する場合に、該ロードするステップは、
該当するインプリメンテーションに対する前記構成情報および関連する実行可能なコードを、前記再プログラミング可能なハードウェアにロードするステップを包含する、請求項１４１〜１４７のいずれか１つに記載の方法。
【請求項１４９】
前記ランタイム統計に最適化された１以上の新しいインプリメンテーションを生成するステップをさらに包含する、請求項１４１〜１４７のいずれか１つに記載の方法。
【請求項１５０】
各新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードを、それぞれ個々の構成ライブラリおよび前記コードライブラリにロードするステップをさらに包含する、請求項１４１〜１４７のいずれか１つに従属される場合の請求項１４９に記載の方法。
【請求項１５１】
各新しいインプリメンテーションに対する前記構成情報、関連する実行可能なコードおよび関連する決定状態情報を、それぞれ個々の構成ライブラリ、前記コードライブラリおよび前記決定状態ライブラリにロードするステップをさらに包含する、請求項１４８に従属される場合の請求項１４９に記載の方法。
【請求項１５２】
新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードは、予定可能な基準を満足する前記再プログラミング可能なハードウェアにロードされる、請求項１４１〜１５１のいずれか１つに記載の方法。
【請求項１５３】
新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードは、前記再プログラミング可能なハードウェアにロードされ、ここで、再構成比Ｒ＞１、該再構成比Ｒは、下式により与えられる、
【数３】
2005503680.tif 000018
ここで、Ｃｓｗ，ｊは、ソフトウェア関数ｆ（）をインプリメントするためのクロックサイクル数、
Ｔｓｗは、該クロックサイクル数Ｃｓｗ，ｊにおける各クロックサイクルに対するサイクルタイム、
Ｃｃｉ，ｊは、カスタム命令をインプリメントするためのクロックサイクル数、
Ｔｃｉは、該クロックサイクル数Ｃｃｉ，ｊにおける各クロックサイクルに対するサイクルタイム、
Ｔｒは、該再プログラミング可能なハードウェアの再構成のために要求される時間である、請求項１５２に記載の方法。
【請求項１５４】
前記インプリメンテーション生成ステップは、オンラインで行われる、請求項１４９〜１５３のいずれか１つに記載の方法。
【請求項１５５】
前記インプリメンテーション生成ステップは、オフラインで行われる、請求項１４９〜１５３のいずれか１つに記載の方法。
【請求項１５６】
前記インプリメンテーション生成ステップは、
前記ランタイム統計に基づいて命令情報を分析し、命令最適化を決定するステップと、
前記命令最適化を含ませるために前記アプリケーションソースコードをコンパイルし、実行可能なコードを生成するステップと、
該ランタイム統計に基づいてアーキテクチャ情報を分析し、アーキテクチャ最適化を決定するステップと、
該アーキテクチャ最適化を含む構成情報を生成するステップと、
該アーキテクチャ最適化を含む該構成情報からデバイス固有の構成情報を生成するステップと
を包含する、請求項１４９〜１５５のいずれか１つに記載の方法。
【請求項１５７】
前記インプリメンテーションステップは、
各候補インプリメンテーションに対する前記構成情報および関連するコードをプロファイルするステップと、
それに応答して、予定可能な基準に基づいて１以上の最適のインプリメンテーションを選択するステップと
をさらに包含する、請求項１５６に記載の方法。
【請求項１５８】
前記インプリメンテーション生成ステップは、
カスタマイゼーション仕様および前記ランタイム統計内の情報をプロファイルするステップと、
少なくとも一つのプロセッサスタイルをインプリメンテーションのための候補として識別するステップと、
インプリメンテーションのための候補として識別された各プロセッサスタイルのためのテンプレートを生成するステップと
をさらに包含する、請求項１５６または１５７に記載の方法。
【請求項１５９】
前記プロファイルされた情報は、前記アプリケーションソースコードを含む、請求項１５８に記載の方法。
【請求項１６０】
複数のプロセッサスタイルは、前記カスタマイゼーション仕様プロファイルステップにおいてインプリメンテーションのための候補として識別される、請求項１５８または１５９に記載の方法。
【請求項１６１】
個々の前記プロセッサスタイルは、アプリケーションの部分を実行するように識別され、これにより、該アプリケーションは、組み合わされた個々のプロセッサスタイルによって実行されることになる、請求項１６０に記載の方法。
【請求項１６２】
最適化を可能にするためのプロファイリング情報は、前記カスタマイゼーション仕様プロファイルステップにおいて収集される、請求項１５８〜１６１のいずれか１つに記載の方法。
【請求項１６３】
前記プロファイリング情報は、オプコードのグループの頻度を含む、請求項１６２に記載の方法。
【請求項１６４】
前記プロファイリング情報は、オペレーション共有に関する情報を含む、請求項１６２または１６３に記載の方法。
【請求項１６５】
前記プロファイリング情報は、オペレーション並行化に関する情報を含む、請求項１６２〜１６４のいずれか１つに記載の方法。
【請求項１６６】
前記命令情報分析ステップは、
該命令情報を分析する際に前記プロファイリング情報を利用するステップと、
該命令最適化を決定するステップと
を包含する、請求項１６２〜１６５のいずれか１つに記載の方法。
【請求項１６７】
前記命令最適化は、オペレーション最適化を含む、請求項１６６に記載の方法。
【請求項１６８】
前記オペレーション最適化は、オペレーション共有最適化を含む、請求項１６７に記載の方法。
【請求項１６９】
前記オペレーション最適化は、オペレーション並行最適化を含む、請求項１６７または１６８記載の方法。
【請求項１７０】
前記命令最適化は、カスタム命令を含む、請求項１６６〜１６９のいずれか１つに記載の方法。
【請求項１７１】
カスタム情報は、使用頻度に基づく最適化のための候補として識別される、請求項１７０に記載の方法。
【請求項１７２】
カスタム情報は、決定関数Ｄに基づく最適化のための候補として識別され、ここで、該決定関数Ｄは、
【数４】
2005503680.tif 000019
により与えられ、
ここで、Ｃｓｗ，ｊは、ソフトウェア関数ｆ（）をインプリメントするためのクロックサイクル数、
Ｔｓｗは、該クロックサイクル数Ｃｓｗ，ｊにおける各クロックサイクルに対するサイクルタイム、
Ｃｃｉ，ｊは、カスタム命令をインプリメントするためのクロックサイクル数、
Ｔｃｉは、該クロックサイクル数Ｃｃｉ，ｊにおける各クロックサイクルに対するサイクルタイム、
Ｆｊは、手順が呼ばれる時間数、
Ｓｊは、該カスタム命令がインプリメントされるかどうかを示すバイナリ選択変数である、請求項１７０に記載の方法。
【請求項１７３】
前記命令情報分析ステップは、
候補命令最適化を識別するステップと、
該候補命令最適化の命令に基づいて行われた推定に基づいて前記命令最適化のインプリメンテーションを決定するステップと
を包含する、請求項１５６〜１７２のいずれか１つに記載の方法。
【請求項１７４】
前記推定が前記再プログラミング可能なハードウェアがランタイム中に全命令を共にインプリメントするためにプログラミングされることができないことを提供する場合に、前記命令情報分析ステップは、
個々の命令を、前記再プログラミング可能なハードウェアを再プログラミングすることによってインプリメントされ得る命令のセットに組み合わせてグループ化するステップを包含する、請求項１７３に記載の方法。
【請求項１７５】
前記命令情報分析ステップは、
異なるランタイム状態に対する複数のインプリメンテーションを決定するステップとであって、それぞれは、前記ランタイム状態に結び付けられた命令最適化を有する、ステップと、
各インプリメンテーションに結び付けられた決定状態情報を生成するステップであって、該決定状態情報は、実際のランタイム状態に応じて該インプリメンテーション間の選択を可能にする、ステップと
を包含する、請求項１５６〜１７４のいずれか１つに記載の方法。
【請求項１７６】
前記命令最適化が、設計制約とともにコンパイルするインプリメンテーションを提供できない場合に、前記命令情報分析ステップは、
前記カスタマイゼーション仕様プロファイルステップを呼び出して、該命令情報分析ステップによって提供された分析情報に基づいて該カスタマイゼーション仕様を再プロファイルするステップと
を包含する、請求項１５８に従属される場合の請求項１５６〜１７５のいずれか１つに記載の方法。
【請求項１７７】
前記アーキテクチャ最適化は、パイプライン処理を含む、請求項１５６〜１７６に記載の方法。
【請求項１７８】
前記アーキテクチャ最適化は、リソース複製を含む、請求項１５６〜１７７のいずれか１つに記載の方法。
【請求項１７９】
前記アーキテクチャ最適化は、最適化とは別の技術を含む、請求項１５６〜１７８のいずれか１つに記載の方法。
【請求項１８０】
最適化とは別の前記技術は、未使用リソースの除去を含む、請求項１７９に記載の方法。
【請求項１８１】
最適化とは別の前記技術は、オプコード割当を含む、請求項１７９または１８０に記載の方法。
【請求項１８２】
最適化とは別の前記技術は、チャンネル通信最適化を含む、請求項１７９〜１８１のいずれか１つに記載の方法。
【請求項１８３】
最適化とは別の前記技術は、データおよび命令パスのカスタマイゼーションを含む、請求項１７９〜１８２のいずれか１つに記載の方法。
【請求項１８４】
再プログラミング可能なハードウェアの複数の構成が前記命令プロセッサをインプリメントすることが要求される場合には、前記インスタンス生成ステップは、
個々の構成をグループに最適化するステップと、
グループ化された構成のインプリメンテーションをスケジューリングするステップと
を包含する、請求項１５６〜１８３のいずれか１つに記載の方法。
【請求項１８５】
各テンプレートは、複数のプロセッサスタイルに対するプロセッサ定義および関連するパラメータを含むライブラリから抽出されたプロセッサ定義および関連するパラメータから生成される、請求項１５８〜１８４のいずれか１つに記載の方法。
【請求項１８６】
前記プロセッサスタイルは、スーパースケーラープロセッサを含む、請求項１５８〜１８５のいずれか１つに記載の方法。
【請求項１８７】
前記プロセッサスタイルは、ハイブリッドプロセッサを含む、請求項１５８〜１８５のいずれか１つに記載の方法。
【請求項１８８】
前記アプリケーションソースコードをコンパイルする際に利用された前記コンパイラは、前記命令情報分析ステップにおいて生成され、該コンパイルステップは、
カスタマイゼーション情報とともに該アプリケーションソースコードに注釈を付けるステップと、
該注釈が付けられたソースコードをコンパイルして最適化された実行可能なコードを提供するステップと
を包含する、請求項１５６〜１８７のいずれか１つに記載の方法。
【請求項１８９】
前記コンパイルするステップは、
前記アプリケーションソースコードをコンパイルするステップと、
最適化を組み入れるために該コンパイルされたソースコードを再組織化して最適化された実行可能なコードを提供するステップと
を包含する、請求項１５６〜１８７のいずれか１つに記載の方法。
【請求項１９０】
前記再プログラミング可能なハードウェアは、少なくとも一つのフィールドプログラマブルゲートアレイを含む、請求項１４１〜１８９のいずれか１つに記載の方法。
【請求項１９１】
前記再プログラミング可能なハードウェアは、少なくとも一つのコンプレックスプログラマブルロジックデバイスを含む、請求項１４１〜１８９のいずれか１つに記載の方法。
【請求項１９２】
前記命令プロセッサは、前記再プログラミング可能なハードウェアを用いて完全にインプリメントされる、請求項１４１〜１９１のいずれか１つに記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
（命令プロセッサシステムおよび方法）
本発明は、本明細書においてフレキシブル命令（インストラクション）プロセッサ（ＦＩＰ）と呼ばれるような再プログラム可能な命令プロセッサの設計時および実行時環境に関する。
【０００２】
１局面において、本発明は、ユーザ指定のカスタマイゼーション仕様に基づくＦＩＰインプリメンテーションのためのＦＩＰ構成情報、および関連する実行可能ＦＩＰコードを生成するＦＩＰ設計システム、ならびにユーザ指定カスタマイゼーション仕様に基づいて、ＦＩＰインプリメンテーションのためのＦＩＰ構成情報および関連する実行可能なＦＩＰコードを生成する方法に関する。
【０００３】
別の局面において、本発明は、ＦＩＰインプリメンテーションのＦＩＰ構成情報および関連する実行可能なＦＩＰコードの実行時の適応度を管理するＦＩＰ管理システム、ならびに実行時間中のＦＩＰインプリメンテーションのＦＩＰ構成情報および関連する実行ＦＩＰコードの適応度を管理する方法に関する。
【背景技術】
【０００４】
ＡＭＤ  Ｃｏｒｐｏｒａｔｉｏｎ（米国）およびＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ（米国）製のもののような汎用命令プロセッサは、長い間の計算については他を圧している。しかしながら、このようなプロセッサは、固定されたアーキテクチャを有し、かつ命令セットフォーマット［１］によって支援されていない非標準オペレーションおよび非標準データを取り扱う場合、性能を低下させる傾向がある。
【０００５】
特定のアプリケーションのための命令プロセッサのカスタマイズは、セルラー電話、医療用器具、デジタルカメラおよびプリンタといった組み込みシステムにおいては、特に、急を要する［２］。
【０００６】
特定の言語で書かれたプログラムを実行するためにカスタマイズされた集積回路を開発することが可能である。一つの例は、Ｊａｖａ（登録商標）言語で実行するようにカスタマイズされたＧＭＪ３０５０１ＳＢプロセッサ（Ｈｅｌｂｏｒｎ  ｅｌｅｃｔｒｏｎｉｃｓ、Ｓｅｇｙｕｎｇ、韓国）である。しかしながら、このような集積回路の設計および製造は、依然として高価であり、かつ一旦設計されると、カスタマイズされた機能が固定されて、変更され得ない。
【０００７】
Ｘｉｌｉｎｘ  Ｉｎｃ．（Ｓａｎ  Ｊｏｓｅ、Ｃａｌｉｆｏｒｎｉａ、米国）製のＦｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  ａｒｒａｙ（ＦＰＧＡ）、またはＡｌｔｅｒａ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｓａｎ  Ｊｏｓｅ、Ｃａｌｉｆｏｒｎｉａ、米国）製のＣｏｍｐｌｅｘ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅｓ（ＣＰＬＤ）といいた再プログラム可能なハードウェアは、標準的市販品コンポーネントを用いて命令プロセッサをインプリメントする手段を提供する。このようなデバイスの仕様は、集積回路の設計および製造と関連するリスクを排除するだけでなく、カスタマイズ可能なプロセッサを有する可能性もまた切り開く。
【０００８】
カスタマイゼーションを支援する１つのルートは、カスタム命令をインプリメントするためのプログラム可能ロジックで、命令プロセッサを強化することである。複数の製造業社が、このようなインプリメンテーションのルートを提供している［３−５］。関連するプロセッサは、通常、ＡＲＭ、ＩＢＭ、ＭＩＰＳ製のもののような、既存のアーキテクチャに基づく。これらの固定された命令プロセッサのコアは、所与のアプリケーションのためのカスタム命令のセットをインプリメントするリソースを提供するプログラム可能なロジックとインターフェース接続される。１つのこのようなインプリメンテーションは、所定の実行ユニット［６］と組み合わされるプログラム可能な実行ユニットとして１つ以上のＦＰＧＡを利用する。このシステムは、命令の予め定義されたセットを実行するプロセッサの内部バスと結合され、プログラムされた命令を実行する内部バスと結合される１つ以上のプログラム可能実行ユニットと組み合わされる所定の実行ユニットを有するデータプロセッサを備える。しかしながら、このアプローチは、所定の実行ユニットおよびプログラム可能な実行ユニット、またはこのようなカスタマイゼーションを支援するツールのセットのアーキテクチャ全体をカスタマイズする工程を包含しない。
【０００９】
命令プロセッサのカスタマイゼーションを支援する別のルートは、既存のＦＰＧＡを用いる命令プロセッサをインプリメントすることである［７］。このようなインプリメンテーションを用いて、コンパイル時［８］または実行時［９、１０］に命令プロセッサ全体をカスタマイズすることが可能である。命令プロセッサの設計および並行プログラムとしての命令解釈プロセスのキャプチャに基づく最適化の自動化された方法が開発され［１１］、多数の命令プロセッサがインプリメントされている［１２〜１４］が、これらのプロセッサの性能は報告されていない。
【００１０】
さらなる従来技術のアプローチは、設計時に構成可能なプロセッサを自動的に生成する方法およびツールを含む［１５］。しかしながら、このアプローチは、設計時および実行時の両方にカスタマイズ可能なプロセッサを自動的に生成する方法およびツールを含まない。
【００１１】
コンパイル時間および実行時間のカスタマイズ可能なデータパスを製作する自動方法もまた開発された［１６］が、これらの設計における命令セットアーキテクチャ（ＩＳＡ）は、例えば、商用マイクロプロセッサ上でインプリメントされるように固定され、アーキテクチャはカスタマイズされ得ない。
【００１２】
本発明の１つの目的は、再プログラム可能なハードウェアの現在および将来の世代の再プログラム可能性を開発するために、カスタマイゼーションおよび設計時の最適化をユーザに提供するフレキシブル命令プロセッサ（ＦＩＰ）のための設計時および実行時環境を提供することである。
【００１３】
従って、本発明は、カスタマイズ可能なプロセッサおよび実行可能なプロセサコードを自動的に生成するためのシステム、ならび方法を提供する。コードおよびプロセッサの両方は、ユーザによって提供されるカスタマイゼーション仕様により、設計時および実行時の両方でカスタマイズされ得る。
【００１４】
ＦＩＰは、有利にも、特定のアプリケーション向けに合わせられ得るカスタマイズされたプロセッサを製作する手段を提供する。ＦＩＰは、スケルトンプロセッサテンプレートから組立てられ、これは通信チャネルによって相互接続されるモジュールと、パラメータのセットとを含む。テンプレートは、例えば、スタックベースまたはレジスタベーススタイルならびにそのテンプレートのパラメータを変更することによって、および既存のテンプレートを組み合わせ、かつ最適化することによって、例えば、スタックベースまたはレジスタベーススタイル等の異なったプロセッサスタイルといった異なったプロセッサインプリメンテーションを製作するために用いられ得る。テンプレートのパラメータは、スケルトンプロセッサを特定のアプリケーションのために適切なプロセッサに変換するために選択される。ＦＩＰが組立てられると、必要とされる命令が、種々のスタイルでのこれらの命令のインプリメンテーションを含むライブラリから取り出される。どの命令が含まれているかに依存して、スタック等のリソースおよび異なったデコードユニットがインスタンス化され、通信チャネルが、命令とリソースとの間の依存メカニズムを緩和させる。
【００１５】
直接的なハードウェアインプリメンテーションと比較して、ＦＩＰには、命令をフェッチおよびデコードするオーバヘッドがさらにかかる。しかしながら、ＦＩＰは、複数の利点を有する。
【００１６】
ＦＩＰは、カスタマイズされたハードウェアが新しい命令として対処されることを可能にする。これは、命令プロセッサと関連する効率的および構造化された制御パスと、手製のハードウェアの利益とを組み合わせる。プロセッサおよびこれと関連するオペコード（ｏｐｃｏｄｅ）は、コンパイラを最適化することによって、制御パスを最適化する手段を提供する。
【００１７】
クリティカルリソースは、アプリケーションドメインによって要求されると増加され得、用いられない場合は削除され得る。命令プロセッサは、これらのリソースが効率的に共有される構造を提供し、共有の程度が実行時に決定され得る。
【００１８】
ＦＩＰは、高レベルデータ構造がハードウェア内で容易に支援されることを可能にし、さらに、現在のソフトウェア資産を維持することを支援し、実算術プログラミングおよび宣言型プログラミング用の抽象マシンといった新規のアーキテクチャのプロトタイプを容易にする［１３］。
【００１９】
特に、本発明のＦＩＰアプローチは、異なった設計トレードオフを有する所与の命令セットの異なったインプリメンテーションを可能にする。これらのインプリメンテーションは、さらに、変換技術［１１］によって関係付けられ得、これらの技術は、不明瞭であるが、効率的なインプリメンテーションを確認する手段を提供する。
【００２０】
インプリメンテーションの効率は、多くの場合、選択されたプロセッサのスタイルに大きく依存する。Ｔｈｒｅｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍａｃｈｉｎｅ（ＴＩＭ）等の専門的なプロセッサスタイル［１３］は、具体的に、特定の言語を実行するように設計される。スタックベースのＪａｖａ（登録商標）  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ（ＪＶＭ）またはレジスタベースのＭＩＰＳといった、より一般的なアプリケーションのために設計されるプロセッサテンプレートであっても、異なったタスクに対してより効率的である。従って、所与のアプリケーションにとって、プロセッサスタイルの選択は重要な決定である。リソースの利用可能性、デバイスの大きさおよび所要速度条件等の問題は、この決定による影響を受ける。
【００２１】
プロセッサの異なったスタイルは、カスタマイズ可能な異なった命令フォーマットを支援する。これらのプロセッサは、さらに、ハードウェアの再プログラム可能性のサイズ速度および容易さにおいて異なったトレードオフを有する。例えば、ＪＶＭのレジスタスタイルのインプリメンテーションは、高速であるが大型である一方で、ＪＶＭのスタックスタイルのインプリメンテーションは、低速および小型である。異なったスタイルのプロセッサを生成するための情報を含むプロセッサライブラリは、設計および実行時にカスタマイズされたプロセッサの生成に用いられる。
【００２２】
異なったスタイルのプロセッサを組み合わせることによって、新しいプロセッサおよび対応するコードを生成することもまた可能である。これは、複合プロセッサおよび対応するコードが、より単純なプロセッサを組み合わせることによって体系的に発生させることを可能にする。
【００２３】
コンパイラ、アセンブラ、リンカ、逆アセンブラ、デバッガー、命令セットシミュレータおよび他の機器を備える関連ツールは、性能を最適化し、大きさを低減し、消費電力を低減する等のために提供される。この最適化は、例えば、プログラム可能なハードウェア内の再構成の頻度を低減するか、またはワイヤの輻輳を低減することによって達成され得る。
【００２４】
本発明は、実行時カスタマイゼーションによる最適化を支援する。実行時カスタマイゼーションは、（ａ）ハードウェアを再プログラミングすることによってリソースの使用を低減して、特定の時間に不可欠な素子のみがハードウェア内に存在するようにする工程と、（ｂ）プログラム可能なハードウェアを、設計時には知られていない実行時間条件に適合することによって性能および使用を最適化する工程と、（ｃ）インターネット等の外部ソースから新しいコードおよび／または新しいハードウェアを実行時に条件付きでダウンロードすることによって、性能および使用を最適化する工程とを包含する。
【００２５】
所与のカスタマイゼーション仕様およびプロセッサライブラリについて、本発明の実施形態は、（ａ）カスタマイズ可能なプロセッサの複数のハードウェア記述であって、これらの記述の各々が特定の実行時条件に合わせられたプロセッサの可能なカスタマイズバージョンを表す、複数のハードウェア記述と、（ｂ）ハードウェア記述上で実行可能なコードを発生および最適化するためのカスタマイズツール、およびこのようなコードを実行時に最適化して組み合わせることを可能にする情報と、（ｃ）実行時の特定の瞬間に走行するようにハードウェアおよびコードを選択するためのハードウェアおよびソフトウェアメカニズムとを生成するための手段を提供する。この選択は、設計時にユーザによって決定され得るか、または実行時条件により影響が及ぼされ得る。
【００２６】
直接的なハードウェアのインプリメンテーションと比較して、ＦＩＰは、命令をフェッチおよびデコードするオーバヘッドがさらにかかる。ＶＬＩＷおよびＥＰＩＣアーキテクチャは、実行の数に対するフェッチの数の比率を低減する試みを行っている。命令をカスタマイズすることは、さらに、フェッチと実行との比率を低減し、ＦＩＰの性能を向上させる技術である。ＦＩＰにカスタム命令を組み込みコンセプトが報告されている［４、１０］。カスタム命令は、通常、手製であり、ＦＩＰのインスタンス作成中に組み込まれる。手製のカスタム命令は最良の性能を提供するが、これらの命令を作成することは困難であり、システムを熟知した熟練エンジニアを必要とする。本発明は、オペコードを連鎖させ、かつ改善するための他の最適化を行うことによってカスタム命令を自動的に作成する技術を提供する。この技術は、コンパイル時および実行時の両方で用いられ得る。
【００２７】
好適な実施形態において、実行時に、かつ所与のアプリケーションデータについて、ハードウェアおよび／またはソフトウェアメカニズムは、ユーザおよび／または実行時条件に依存して、異なったカスタマイズプロセッサのうちの１つまたは両方を、またはアプリケーションデータを取り扱うという命令を含むコードの異なった部分を取り入れ得る。選択は、現在および再プログラムされたインプリメンテーションの速度、大きさおよび消費電力、ならびに再プログラミング時間もまた考慮に入れ得る。コンパイルコードは、対応するカスタマイズプロセッサの生成または取り出しを可能にする情報を含み得る。コンパイルコードの部分が、これを実行するためのカスタマイズプロセッサが存在しないところに出くわすと、このような情報は、例えば、ネットワークソースからこのプロセッサをロードすることによって、プロセッサが取り出されることを可能にする。
【００２８】
本発明は、ＦＩＰの実行時の適合をさらに提供する。ＦＩＰシステムの実行時の適合性は、通常、命令使用パターンに基づいて、自動改良を実行することによって、システムがユーザの要求に適応するように進化することを可能にする。
【００２９】
開発された技術およびツールは、（ａ）ＦＩＰの再構成を管理して、アプリケーションを可能な限り効率的に実行させる実行時環境と、（ｂ）実行時メトリックを蓄積し、メトリックを解析して、実行時環境が自動改良をリクエストすることを可能にするメカニズムと、（ｃ）ＦＩＰをアプリケーションに自動的にカスタマイズするためのカスタマイゼーション技術とを含む。
【００３０】
本発明の実行時アプローチは、スタックベースまたはレジスタベーススタイルといった、種々の命令プロセッサスタイルをキャプチャするＦＩＰテンプレートに基づくモジュラフレームワークのうちの一つ、スーパースカラーおよびハイブリッドオペレーションを提供するプロセサテンプレートといった機能性および性能を向上させるエンハンスメント、標準コンパイラおよびＦＩＰ専用コンパイラを含むコンパイル戦略、ならびにＦＰＧＡインプリメンテーションにおける効率的なリソースの共有のための技術等の技術依存性および技術専用最適化である。
【００３１】
ＦＩＰシステムの実行時特性を一定期間にわたって予測することは、極めて困難である。例えば、Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ（ＡＥＳ）［１７］は、異なった条件に対してブロックの大きさの範囲を利用し、従って、必要とされる処理は条件に依存する。通常、長い再構成時間が好ましくない場合、実行時再構成を必要とすることなく、異なったＡＥＳブロックの大きさをほどよく効率的に支援する一般的なＦＩＰが用いられ得る。そうでない場合、必要に応じて、異なったＡＥＳモードを高度かつ効率的に実行し、かつＦＩＰを再構成を行うようにカスタマイズされる異なったＦＩＰインプリメンテーションを用い得る。
【００３２】
１実施形態において、ＦＩＰシステムは、命令使用パターンに基づいて、自動的に再構成を行わせ得る。例えば、異なったウェブサイトは、異なった暗号化法を実施し、特定のウェブサイトに頻繁にアクセスするユーザは、特定のオペレーションのために最適化されたＦＩＰを用い得る。
【００３３】
本発明は、ＦＩＰ実行時適合システムを提供し、このシステムは、（ａ）ＦＩＰの再構成を管理して、所与のアプリケーションを可能な限り効率的に実行させる実行時環境と、（ｂ）実行時メトリックを蓄積し、メトリックを解析して、実行時環境が自動改良を要求することを可能にするメカニズムと、（ｃ）ＦＩＰをアプリケーションに自動的にカスタマイズするためのカスタマイゼーションシステムとを含む。
【００３４】
上述のように、ＦＩＰは、システムリソースを共有する程度を変更することを容易にする、明確に定義された制御構造を提供する。これは、クリティカルリソースが、アプリケーションドメインによって要求されると増加され、用いられない場合は削除されることを可能にする。ＦＩＰは、ユーザによって設計されたハードウェアが新しい命令として対処されることを可能にすることによって、カスタマイゼーションを支援する方法をさらに提供する。これらの設計時の最適化は、命令プロセッサを特定のアプリケーションか、またはイメージ処理等の特定のドメインのアプリケーションに合わせる手段を提供する。
【００３５】
実行時適合は、ＦＰＧＡ等の再プログラム可能なハードウェアの拡張性を開発することによって、実行時間の変化に対するＦＩＰの変化に対するさらなる微調整を行うことを可能にする。本発明は、ＦＩＰを改良する手段をコンパイル時および実行時の両方で提供することによって、再構成可能性を簡単にするＦＩＰフレームワークを提供する。
【００３６】
ＦＩＰシステムをアプリケーションの変化する挙動と適合させる能力は、強力な特性であるが、ワーキングシステムを提供するために相当な技術が要求される。これらの要求は、（ａ）コンパイル時または実行時に複数のＦＩＰ設計を生成する能力と、（ｂ）ＦＩＰのライブラリを管理することと、（ｃ）さらなるフレキシビリティを提供することによって、システムの性能が低下しないことを確実にすることとを含む。
【００３７】
この点について、以下の構成要素、（ｉ）カスタマイズされたＦＩＰのコンパイル時の生成を容易にするデザインツールと、（ｉｉ）利用可能なＦＩＰ設計およびマシンコード追跡するためのスキームと、（ｉｉｉ）ＦＩＰ状態および構成を管理するための実行時システムと、（ｉｖ）再構成が所与の時間にて適切なオプションであるか否かを決定するために用いられるメトリックと、（ｖ）自動改良のために、どこの実行時統計が必要とされるかを決定する仕様と、（ｖｉ）実行時統計を蓄積するモニタと、（ｖｉｉ）蓄積された実行時統計に基づいてＦＩＰを自動的にカスタマイズするためのツールとを含むアプローチが展開される。最適化解析および自動改良工程は、随意的であり、かつそのオーバヘッドが容認され得る場合に含まれることに留意されたい。
【発明の開示】
【課題を解決するための手段】
【００３８】
一局面では、本発明は、再プログラミング可能なハードウェアを用いて命令プロセッサをインプリメントするために、カスタマイゼーション仕様であって、アプリケーションソースコードを含むアプリケーション情報および設計制約を含むカスタマイゼーション情報を含む、カスタマイゼーション仕様に基づいて構成情報および関連する実行可能コードを生成するための設計システムであって、インプリメンテーションの候補として識別された各プロセッサスタイルに対してテンプレートを生成するためのテンプレートジェネレータと、各テンプレートに対する命令情報を分析し、命令最適化を決定するためのアナライザと、該命令最適化を含めて、そして、実行可能なコードを生成するために該アプリケーションソースコードをコンパイルするためのコンパイラと、各テンプレートに対するアーキテクチャ情報を分析し、アーキテクチャ最適化を決定し、そして、各テンプレートに対する該パラメータをインスタンス生成するために、該アーキテクチャ最適化を含む構成情報（好適には、ドメイン固有の構成情報）を生成するためのインスタンチエータと、該アーキテクチャ最適化を含む該構成情報からデバイス固有の構成情報を生成するためのビルダーとを含む、システムを提供する。
【００３９】
好適には、本システムは、各候補インプリメンテーションに対する前記構成情報および関連コードをプロファイルし、予定可能な基準に基づいて１以上の最適のインプリメンテーションを選択するためのセレクタをさらに含む。
【００４０】
好適には、前記アプリケーション情報は、アプリケーションデータをさらに含む。
【００４１】
より好適には、前記アプリケーションデータは、前記命令プロセッサによって動作されることになるデータを表すデータを含む。
【００４２】
さらにより好適には、前記アプリケーションデータは、ランタイム状態の範囲を表すデータを含む。
【００４３】
好適には、前記カスタマイゼーション情報は、少なくとも一つのカスタム命令をさらに含む。
【００４４】
より好適には、各カスタム命令は、強制的にまたは任意的に規定され得る。
【００４５】
好適には、前記カスタマイゼーション情報は、少なくとも一つのプロセッサスタイルを、インプリメンテーションのための候補としてさらに識別する。
【００４６】
好適には、本システムは、カスタマイゼーション仕様の情報をプロファイルし、少なくとも一つのプロセッサスタイルを、インプリメンテーションのための候補として識別するためのプロファイラをさらに含む。
【００４７】
より好適には、前記プロファイルされた情報は、前記アプリケーションソースコードを含む。
【００４８】
好適には、前記プロファイラは、複数のプロセッサスタイルを、インプリメンテーションのための候補として識別するように構成される。
【００４９】
一実施形態では、個々の前記プロセッサスタイルは、アプリケーションの部分を実行するために識別され、該アプリケーションは、組み合わされた個々のプロセッサスタイルによって実行されることになる。
【００５０】
好適には、前記プロファイラは、最適化を可能にするためのプロファイリング情報を収集するようにさらに構成される。
【００５１】
好適には、前記プロファイリング情報は、オペコードのグループの頻度を含む。
【００５２】
好適には、前記プロファイリング情報は、オペレーション共有に関する情報を含む。
【００５３】
好適には、前記プロファイリング情報は、オペレーション並行化（ｐａｒａｌｌｅｌｉｓａｔｉｏｎ）に関する情報を含む。
【００５４】
一実施形態では、前記アナライザは、前記命令情報を分析する際に前記プロファイリング情報を利用し、そこから前記命令最適化を決定するように構成される。
【００５５】
好適には、前記命令最適化は、オペレーション最適化を含む。
【００５６】
より好適には、前記オペレーション最適化は、オペレーション共有最適化を含む。
【００５７】
より好適には、前記オペレーション最適化は、オペレーション並行最適化を含む。
【００５８】
好適には、前記命令最適化は、カスタム命令を含む。
【００５９】
一実施形態では、前記アナライザは、候補命令最適化を識別し、前記インスタンチエータによって行われた推定に基づいて前記命令最適化のインプリメンテーションを決定するように構成される。
【００６０】
好適には、前記インスタンチエータからの前記推定が、再プログラミング可能なハードウェアが、ランタイム中に全命令を共にインプリメントするようにプログラミングされることができないことを提供する場合には、前記アナライザは、組み合わされた個々の命令を、再プログラミング可能なハードウェアを再プログラミングすることによってインプリメントされ得る命令のセットにグループ化する。
【００６１】
一実施形態では、前記アナライザは、異なるランタイム状態のために複数のインプリメンテーションを決定するように構成され、それぞれは該ランタイム状態に結び付けられた命令最適化を有し、各インプリメンテーションに結び付けられた決定状態情報を生成し、該決定状態情報は、実際のランタイム状態に応じたインプリメンテーション間の選択を可能にする。
【００６２】
好適には、前記命令最適化は、設計制約を用いてコンパイルするインプリメンテーションを提供することができず、前記アナライザは、該アナライザによって提供された分析情報に基づいてプロファイラに前記プログラミング仕様を再プロファイルさせるように構成される。
【００６３】
好適には、前記インスタンチエータによって行われた前記アーキテクチャ最適化は、パイプライン処理を含む。
【００６４】
好適には、前記インスタンチエータによって行われた前記アーキテクチャ最適化は、リソース複製を含む。
【００６５】
好適には、前記インスタンチエータによって行われた前記アーキテクチャ最適化は、最適化とは別の技術を含む。
【００６６】
好適には、最適化とは別の前記技術は、未使用リソースの除去を含む。
【００６７】
好適には、最適化とは別の前記技術は、オプコード割当を含む。
【００６８】
好適には、最適化とは別の前記技術は、チャンネル通信最適化を含む。
【００６９】
好適には、最適化とは別の前記技術は、データおよび命令パスをカスタマイズすることを含む。
【００７０】
一実施形態では、複数の再プログラミング可能なハードウェアの構成が前記命令プロセッサをインプリメントすることが要求される場合、前記インスタンチエータは、個々の構成をグループに最適化し、該グループ化された構成のインプリメンテーションをスケジューリングするように構成される。
【００７１】
好適には、本システムは、複数のプロセッサスタイルに対するプロセッサ定義および関連するパラメータを含むライブラリをさらに含み、前記テンプレートジェネレータは、該ライブラリから抽出されたプロセッサ定義および関連するパラメータからテンプレートを生成するように構成される。
【００７２】
好適には、前記プロセッサスタイルは、スーパースケーラープロセッサを含む。
【００７３】
好適には、前記プロセッサスタイルは、ハイブリッドプロセッサを含む。
【００７４】
一実施形態では、前記コンパイラは、アナライザによって生成され、前記アプリケーションソースコードは、コンパイラによるコンパイルのためにカスタマイゼーション情報で注釈を付けられて、最適化された実行可能なコードを提供する。
【００７５】
別の実施形態では、前記コンパイラは、前記アプリケーションソースコードをコンパイルし、最適化を取り込んで最適化された実行可能なコードを提供するために該コンパイルされたソースコードを再組織化するように構成される。
【００７６】
好適には、前記構成情報および関連する実行可能なコード、および関連する場合の決定状態情報は、再プログラミング可能なハードウェアを用いてインプリメントされる命令プロセッサの適応および構成を管理するための少なくとも一つの管理システムに配備される。
【００７７】
好適には、前記構成情報および関連する実行可能なコード、および関連する場合の決定状態情報は、再プログラミング可能なハードウェアの再プログラミングを可能にするための少なくとも一つのライブラリに配備される。
【００７８】
一実施形態では、前記再プログラミング可能なハードウェアは、少なくとも一つのフィールドプログラマブルゲートアレイを含む。
【００７９】
別の実施形態では、前記再プログラミング可能なハードウェアは、少なくとも一つのコンプレックスプログラマブルロジックデバイスを含む。
【００８０】
好適には、前記命令プロセッサは、前記再プログラミング可能なハードウェアを用いて完全にインプリメントされる。
【００８１】
別の局面では、本発明は、再プログラミング可能なハードウェアを用いて命令プロセッサをインプリメントするために、カスタマイゼーション仕様であって、アプリケーションソースコードを含むアプリケーション情報および設計制約を含むカスタマイゼーション情報を含む、カスタマイゼーション仕様に基づいて構成情報および関連する実行可能なコードを生成する方法であって、インプリメンテーションのための候補として識別された各プロセッサスタイルに対するテンプレートを生成するステップと、各テンプレートに対する命令情報を分析し、命令最適化を決定するステップと、該命令最適化を含め、そして、実行可能なコードを生成するために該アプリケーションソースコードをコンパイルするステップと、各テンプレートに対するアーキテクチャ情報を分析し、アーキテクチャ最適化を決定するステップと、各テンプレートに対するパラメータをインスタンス生成するために該アーキテクチャ最適化を含む構成情報（好適には、ドメイン固有の構成情報）を生成するステップと、該アーキテクチャ最適化を含む該構成情報からデバイス固有の構成情報を生成するステップと、を包含する、方法を提供する。
【００８２】
好適には、本方法は、各候補インプリメンテーションに対して前記構成情報および関連するコードをプロファイルするステップと、それに応答して、予定可能な基準に基づいて１以上の最適なインプリメンテーションを選択するステップとをさらに包含する。
【００８３】
好適には、前記アプリケーション情報は、アプリケーションデータをさらに含む。
【００８４】
より好適には、前記アプリケーションデータは、前記命令プロセッサによって動作されることになるデータを表すデータを含む。
【００８５】
さらにより好適には、前記アプリケーションデータは、ランタイム状態の範囲を表すデータを含む。
【００８６】
好適には、前記カスタマイゼーション情報は、少なくとも一つのカスタム命令をさらに含む。
【００８７】
より好適には、各カスタム命令は、強制的にまたは任意的に定義され得る。
【００８８】
好適には、前記カスタマイゼーション情報は、少なくとも一つのプロセッサスタイルを、インプリメンテーションのための候補としてさらに識別する。
【００８９】
好適には、前記カスタマイゼーション仕様の情報をプロファイルするステップと、少なくとも一つのプロセッサスタイルを、インプリメンテーションのための候補として識別するステップとをさらに包含する。
【００９０】
より好適には、前記プロファイルされた情報は、前記アプリケーションソースコードを含む。
【００９１】
好適には、複数のプロセッサスタイルは、前記カスタマイゼーション仕様プロファイルステップにおいて、インプリメンテーションのための候補として識別される。
【００９２】
一実施形態では、個々のプロセッサスタイルは、アプリケーションの部分を実行するように識別され、これにより、該アプリケーションは、組み合わされた個々のプロセッサスタイルによって実行されることになる。
【００９３】
好適には、最適化を可能にするためのプロファイリング情報は、カスタマイゼーション仕様プロファイリングステップにおいて集められる。
【００９４】
好適には、前記プロファイリング情報は、オプコードのグループの頻度を含む。
【００９５】
好適には、前記プロファイリング情報は、オペレーション共有に関する情報を含む。
【００９６】
好適には、前記プロファイリング情報は、オペレーション並行化に関する情報を含む。
【００９７】
一実施形態では、前記命令情報分析ステップは、前記命令情報を分析する際の前記プロファイリング情報を利用するステップと、前記命令最適化を決定するステップとを包含する。
【００９８】
好適には、前記命令最適化は、オペレーション最適化を含む。
【００９９】
より好適には、前記オペレーション最適化は、オペレーション共有最適化を含む。
【０１００】
より好適には、前記オペレーション最適化は、オペレーション並行最適化を含む。
【０１０１】
好適には、前記命令最適化は、カスタム命令を含む。
【０１０２】
一実施形態では、前記命令情報分析ステップは、候補命令最適化を識別するステップと、前記候補命令最適化の命令に基づいて行われた推定に基づいて、前記命令最適化のインプリメンテーションを決定するステップとを包含する。
【０１０３】
好適には、前記推定が、前記再プログラミング可能なハードウェアがランタイム中に全命令を共にインプリメントするようにプログラミングされることができないことを提供する場合に、前記命令情報分析ステップは、個々の命令を、前記再プログラミング可能なハードウェアを再プログラミングすることによってインプリメントされ得る命令のセットに組み合わせてグルーピングするステップを包含する。
【０１０４】
一実施形態では、前記命令情報分析ステップは、異なるランタイム状態に対する複数のインプリメンテーションを決定するステップであって、それぞれは、該ランタイム状態に結び付けられる命令を有する、ステップと、各インプリメンテーションに結び付けられた決定状態情報を生成するステップであって、該決定状態情報は、実際のランタイム状態に応じて該インプリメンテーション間の選択を可能にする、ステップとを包含する。
【０１０５】
一実施形態では、前記命令最適化が、設計制約とともにコンパイルするインプリメンテーションを提供することができない場合に、前記命令情報分析ステップは、前記カスタマイゼーション仕様プロファイリングステップを呼び出し、該命令情報分析ステップによって提供された分析情報に基づいて該カスタマイゼーション仕様を再プロファイルするステップを包含する。
【０１０６】
好適には、前記アーキテクチャ最適化は、パイプライン処理を含む。
【０１０７】
好適には、前記アーキテクチャ最適化は、リソース複製を含む。
【０１０８】
好適には、前記アーキテクチャ最適化は、最適化とは別の技術を含む。
【０１０９】
より好適には、最適化とは別の前記技術は、未使用リソースの除去を含む。
【０１１０】
より好適には、最適化とは別の前記技術は、オプコード割当を含む。
【０１１１】
より好適には、最適化とは別の前記技術は、チャンネル通信最適化を含む。
【０１１２】
より好適には、最適化とは別の前記技術は、データおよび命令パスのカスタマイゼーションを含む。
【０１１３】
一実施形態では、再プログラミング可能なハードウェアの複数の構成が前記命令プロセッサをインプリメントすることが要求される場合に、前記命令ステップは、個々の構成をグループに最適化するステップと、該グループにされた構成のインプリメンテーションをスケジューリングするステップとを包含する。
【０１１４】
好適には、各テンプレートが、複数のプロセッサスタイルに対するプロセッサ定義および関連するパラメータを含むライブラリから抽出されたプロセッサ定義および関連するパラメータから生成される。
【０１１５】
好適には、前記プロセッサスタイルは、スーパースケーラープロセッサを含む。
【０１１６】
好適には、前記プロセッサスタイルは、ハイブリッドプロセッサを含む。
【０１１７】
一実施形態では、前記アプリケーションソースコードをコンパイルするステップにおいて利用された前記コンパイラは、前記命令情報分析ステップにおいて生成され、前記コンパイルするステップは、カスタマイゼーション情報とともに前記アプリケーションソースコードに注釈を付けるステップと、注釈が付けられたソースコードをコンパイルして、最適化された実行可能なコードを提供するステップとを包含する。
【０１１８】
別の実施形態では、前記コンパイルするステップは、前記アプリケーションソースコードをコンパイルするステップと、最適化を組み入れるために該コンパイルされたソースコードを再組織化して、最適化された実行可能なコードを提供するステップとを包含する。
【０１１９】
好適には、本方法は、前記構成情報および関連する実行可能なコード、および関連する場合には前記決定状態情報を、再プログラミング可能なハードウェアを用いてインプリメントされた命令プロセッサの適応および構成を管理するためにある少なくとも一つの管理システムに配備するステップをさらに包含する。
【０１２０】
好適には、本方法は、前記構成情報および関連する実行可能なコード、および、関連する場合には、前記決定状態情報を、再プログラミング可能なハードウェアを再プログラミングすることを可能にするための少なくとも一つのライブラリに配備するステップをさらに包含する。
【０１２１】
一実施形態では、前記再プログラミング可能なハードウェアは、少なくとも一つのフィールドプログラマブルゲートアレイを含む。
【０１２２】
別の実施形態では、前記再プログラミング可能なハードウェアは、少なくとも一つのコンプレックスプログラマブルロジックデバイスを含む。
【０１２３】
好適には、前記命令プロセッサは、前記再プログラミング可能なハードウェアを用いて完全にインプリメントされる。
【０１２４】
さらなる局面では、本発明は、再プログラミング可能なハードウェアを用いてインプリメントされた命令プロセッサのランタイム再構成を管理するための管理システムであって、複数の命令プロセッサインプリメンテーションに対する構成情報を含む構成ライブラリと、該インプリメンテーションに対する関連する実行可能なコードを含めるためのコードライブラリと、アプリケーションデータ、および必要に応じて構成情報および関連する実行可能なコードを、命令プロセッサのインプリメンテーションおよび実行のための再プログラミング可能なハードウェアにロードするためのローダーと、ローダーにアプリケーションデータ、および必要に応じて構成情報および関連する実行可能なコードをロードし、該実行可能なコードを実行するように信号を出すためのローダーコントローラと、実行中に該命令プロセッサのオペレーションに関するランタイム統計を取得するためのランタイムモニタと、該ランタイム統計を受け取り、該ローダに、新しいインプリメンテーションに対する新しい構成情報および関連する実行可能なコードを該再プログラミング可能なハードウェアにロードするように指示するようにオペレーション可能に構成された最適化デタミナと、最適化デタミナーを呼び出すための最適化インストラクタとを含む、管理システムを提供する。
【０１２５】
好適には、本システムは、前記ローダコントローラ、前記ランタイムモニタおよび前記最適化インストラクタを含む前記ランタイムマネジャーを含む。
【０１２６】
一実施形態では、前記最適化インストラクタは、前記最適化デタミナを予定可能なイベント上に自動的に呼び出すように構成される。
【０１２７】
好適には、前記イベントは、前記実行可能なコードの命令である。
【０１２８】
一実施形態では、前記最適化インストラクタは、外部エージェントによって呼び出されるように構成される。
【０１２９】
好適には、前記最適化インストラクタは、外部エージェントからの作動命令に応答して呼び出されるように構成される。
【０１３０】
好適には、前記最適化デタミナは、前記ローダコントローラに信号を出すことを指示し、新しい構成情報および関連する実行可能なコードを、前記外部エージェントによる前記最適化インストラクタの実施の際に前記再プログラミング可能なハードウェアにロードさせるように構成される
好適には、前記作動命令は、前記再プログラミング可能なハードウェアを用いてインプリメントされることになる前記インプリメンテーションを識別する。
【０１３１】
好適には、新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードは、外部エージェントによる前記最適化インストラクタの実施の前に、各個々の構成ライブラリおよび前記コードライブラリにロードされ、その結果、該当するインプリメンテーションに対する構成情報および関連する実行可能なコードは、該外部エージェントによる最適化インストラクタの実施の際に前記再プログラミング可能なハードウェアにロードされ得る。
【０１３２】
好適には、本システムは、前記インプリメンテーションの少なくとも一つに対する結び付けられた設計状態情報を含めるための決定状態ライブラリをさらに含み、前記ローダは、再プログラミング可能なハードウェアにロードされた該インプリメンテーションの種々のランタイム状態に対する複数の他のインプリメンテーションのための決定状態情報とともに前記最適化デタミナを提供するように構成され、該最適化デタミナは、該他のインプリメンテーションに対する該決定状態情報をプロファイルし、該他のインプリメンテーションのうちの任意に対する該決定状態情報が前記ランタイム統計をより緊密に適合させるかどうかを決定するように構成され、該他のインプリメンテーションの一つに対する該決定状態情報が該ランタイム統計をより緊密に適合させる場合に、前記ローダコントローラに信号を出すように指示して、該ローダに該当するインプリメンテーションに対する該構成情報および関連する実行可能なコードを該再プログラミング可能なハードウェアにロードさせる。
【０１３３】
好適には、本システムは、前記ランタイム統計に最適化された１以上の新しいインプリメンテーションを生成するためのアダプタをさらに含み、前記最適化デタミナは、該アダプタに１以上の新しいインプリメンテーションを生成することを指示するように構成される。
【０１３４】
一実施形態では、前記アダプタは、各新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードを各個々の構成ライブラリおよび前記コードライブラリにロードするように構成される。
【０１３５】
別の実施形態では、前記アダプタは、各新しいインプリメンテーションに対する前記構成情報、関連する実行可能なロードおよび関連する決定状態情報を、各個々の構成ライブラリ、前記コードライブラリおよび前記決定状態ライブラリにロードするように構成される。
【０１３６】
好適には、前記最適化デタミナは、前記ローダに、新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードを、予定可能な基準の統計に関して前記再プログラミング可能なハードウェアにロードすることを指示するように構成される。
【０１３７】
より好適には、前記最適化デタミナは、前記ローダに、新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードを前記再プログラミング可能なハードウェアにロードすることを指示するように構成され、ここで、再構成比Ｒ＞１、該再構成比Ｒは、下式によって与えられ、
【０１３８】
【数５】
2005503680.tif 000003
ここで、Ｃｓｗ，ｊは、ソフトウェア関数ｆ（）をインプリメントするためのクロックサイクル数、
Ｔｓｗは、該クロックサイクル数Ｃｓｗ，ｊにおける各クロックサイクルに対するサイクルタイム、
Ｃｃｉ，ｊは、カスタム命令をインプリメントするためのクロックサイクル数、
Ｔｃｉは、該クロックサイクル数Ｃｃｉ，ｊにおける各クロックサイクルに対するサイクルタイム、
Ｔｒは、再プログラミング可能なハードウェアの再構成のために要求される時間である。
【０１３９】
一実施形態では、前記アダプタは、オンラインで動作するように構成される。
【０１４０】
別の実施形態では、前記アダプタは、オフラインで動作するように構成される。
【０１４１】
好適には、前記アダプタは、前記ランタイム統計に基づいて命令を分析し、命令最適化を決定するためのアナライザと、該命令最適化を含めるために前記アプリケーションソースコードをコンパイルし、実行可能なコードを生成するためのコンパイラと、前記ランタイム統計に基づいてアーキテクチャ情報を分析し、アーキテクチャ最適化を決定し、そして、該アーキテクチャ最適化を含む構成情報（好適には、ドメイン固有の構成情報）を生成するためのインスタンチエータと、該アーキテクチャ最適化を含む該構成情報からデバイス固有の構成情報を生成するためのビルダーとを含む。
【０１４２】
好適には、前記アダプタは、各候補インプリメンテーションに対する前記構成情報および関連するコードをプロファイルし、予定可能な基準に基づいて１以上の最適のインプリメンテーションを選択するするためのセレクタをさらに含む。
【０１４３】
好適には、前記アダプタは、カスタマイゼーション仕様の情報および前記ランタイム統計をプロファイルし、少なくとも一つのプロセッサスタイルをインプリメンテーションのための候補として識別するためのプロファイラと、インプリメンテーションのための候補として識別された各プロセッサスタイルに対するテンプレートを生成するためのテンプレートジェネレータとをさらに含む。
【０１４４】
好適には、前記プロファイルされた情報は、前記アプリケーションソースコードを含む。
【０１４５】
好適には、前記プロファイラは、複数のプロセッサスタイルをインプリメンテーションのための候補として識別するように構成される。
【０１４６】
より好適には、個々のプロセッサスタイルは、アプリケーションの部分を実行するように識別され、これにより、該アプリケーションは、組み合わされた個々のプロセッサスタイルによって実行されることになる。
【０１４７】
好適には、前記プロファイラは、最適化を可能にするためのプロファイリング情報を収集するようにさらに構成される。
【０１４８】
より好適には、前記プロファイリング情報は、オプコードのグループの頻度を含む。
【０１４９】
より好適には、前記プロファイリング情報は、オペレーション共有に関する情報を含む。
【０１５０】
より好適には、前記プロファイリング情報は、オペレーション並行化に関する情報を含む。
【０１５１】
好適には、前記アナライザは、前記命令情報を分析するステップにおいて前記プロファイリング情報を利用し、該命令最適化を決定するように構成される。
【０１５２】
好適には、前記命令最適化は、オペレーション最適化を含む。
【０１５３】
より好適には、前記オペレーション最適化は、オペレーション共有最適化を含む。
【０１５４】
より好適には、前記オペレーション最適化は、オペレーション並行最適化を含む。
【０１５５】
好適には、前記命令最適化は、カスタム命令を含む。
【０１５６】
一実施形態では、カスタム命令は、使用頻度に基づく最適化のための候補として識別される。
【０１５７】
別の実施形態では、前記カスタム命令は、決定関数Ｄに基づく最適化のための候補として識別され、ここで、関数Ｄは、下式によって与えられ、
【０１５８】
【数６】
2005503680.tif 000004
ここで、Ｃｓｗ，ｊは、ソフトウェア関数ｆ（）をインプリメントするためのクロックサイクル数、
Ｔｓｗは、該クロックサイクル数Ｃｓｗ，ｊにおける各クロックサイクルに対するサイクルタイム、
Ｃｃｉ，ｊは、カスタム命令をインプリメントするためのクロックサイクル数、
Ｔｃｉは、該クロックサイクル数Ｃｃｉ，ｊにおける各クロックサイクルに対するサイクルタイム、
Ｆｊは、手順が呼ばれる時間数、
Ｓｊは、該カスタム命令がインプリメントされたかどうかを示すバイナリ選択変数である。
【０１５９】
一実施形態では、前記アナライザは、候補命令最適化を識別し、前記インスタンチエータによって行われた推定に基づいて該命令最適化のインプリメンテーションを決定するように構成される。
【０１６０】
好適には、前記インスタンチエータからの前記推定が、前記再プログラミング可能なハードウェアがランタイム中に全命令を共にインプリメントするようにプログラミングされることができないことを提供する場合には、前記アナライザは、個々の命令を、再プログラミング可能なハードウェアを再プログラミングすることによってインプリメントされ得る命令のセットに組み合わせてグループ化する。
【０１６１】
一実施形態では、前記アナライザは、異なるランタイム状態に対する複数のインプリメンテーションであって、それぞれのインプリメンテーションは、該ランタイム状態に結び付けられた命令最適化を有する、インプリメンテーションを決定し、各インプリメンテーションに結び付けられた決定状態情報を生成するように構成され、該決定状態情報は、実際のランタイム状態に応じて該インプリメンテーション間の選択を可能にする。
【０１６２】
好適には、前記命令最適化が、設計制約とともにコンパイルするインプリメンテーションを提供することができない場合には、前記アナライザは、前記プロファイラを呼び出して、該アナライザによって提供された分析情報に基づいて前記カスタマイゼーション仕様を再プロファイルするように構成される。
【０１６３】
好適には、前記インスタンチエータによって行われた前記アーキテクチャ最適化は、パイプライン処理を含む。
【０１６４】
好適には、前記インスタンチエータによって行われた前記アーキテクチャ最適化は、リソース複製を含む。
【０１６５】
好適には、前記インスタンチエータによって行われた前記アーキテクチャ最適化は、最適化とは別の技術を含む。
【０１６６】
より好適には、最適化とは別の前記技術は、未使用リソースの除去を含む。
【０１６７】
より好適には、最適化とは別の前記技術は、オプコード割当を含む。
【０１６８】
より好適には、最適化とは別の前記技術は、チャンネル通信最適化を含む。
【０１６９】
より好適には、最適化とは別の前記技術は、データおよび命令パスのカスタマイゼーションを含む。
【０１７０】
好適には、前記再プログラミング可能なハードウェアの複数の構成が前記命令プロセッサをインプリメントすることが要求される場合には、前記インスタンチエータは、個々の構成をグループに最適化し、該グループ化された構成のインプリメンテーションをスケジューリングするように構成される。
【０１７１】
好適には、前記アダプタは、複数のプロセッサスタイルのためのプロセッサ定義および関連するパラメータを含むライブラリをさらに含み、前記テンプレートジェネレータは、該ライブラリから抽出されたプロセッサ定義および関連するパラメータからテンプレートを生成するように構成される。
【０１７２】
好適には、前記プロセッサスタイルは、スーパースケーラープロセッサを含む。
【０１７３】
好適には、前記プロセッサスタイルは、ハイブリッドプロセッサを含む。
【０１７４】
一実施形態では、前記コンパイラは、前記アナライザによって生成され、前記アプリケーションソースコードは、該コンパイラによる編集のためのカスタマイゼーション情報とともに注釈が付けられて最適化された実行可能なコードを提供する。
【０１７５】
別の実施形態では、前記コンパイラは、前記アプリケーションソースコードを編集し、最適化を組み入れるために前記編集されたソースコードを再組織化して最適化された実行可能なコードを提供するするように構成される。
【０１７６】
一実施形態では、前記再プログラミング可能なハードウェアは、少なくとも一つのフィールドプログラマブルゲートアレイを含む。
【０１７７】
別の実施形態では、前記再プログラミング可能なハードウェアは、少なくとも一つのコンプレックスプログラマブルロジックデバイスを含む。
【０１７８】
好適には、前記命令プロセッサは、前記再プログラミング可能なハードウェアを用いて完全にインプリメントされる。
【０１７９】
いっそうさらなる局面では、本発明は、再プログラミング可能なハードウェアにおいてインプリメントされる命令プロセッサのランタイム再構成を管理する方法であって、複数の命令プロセッサのインプリメンテーションに対する構成情報を含む構成ライブラリを提供するステップと、該インプリメンテーションのための関連する実行可能なコードを含ませるためのコードライブラリを提供するステップと、命令プロセッサのインプリメンテーションおよび実行のために、アプリケーションデータ、および必要に応じて構成情報および実行可能なコードを、再プログラミング可能なハードウェアにロードするステップと、該実行可能なコードを実行するステップと、該命令プロセッサのオペレーションに関するランタイム統計を取得するステップと、新しいインプリメンテーションに対する新しい構成情報および関連する実行可能なコードを該再プログラミング可能なハードウェアにロードするステップとを包含する、方法を提供する。
【０１８０】
一実施形態では、前記ロードするステップは、予定可能なイベント上で自動的に行われる。
【０１８１】
好適には、前記イベントは、前記実行可能なコードにおける命令である。
【０１８２】
一実施形態では、前記ロードするステップは、外部エージェントによって作動される。
【０１８３】
好適には、前記ロードするステップは、外部エージェントからの作動命令に応答して作動される。
【０１８４】
より好適には、前記作動命令は、前記再プログラミング可能なハードウェアを用いて、インプリメントされることになっているインプリメンテーションを識別する。
【０１８５】
一実施形態では、本方法は、前記ロードするステップの前に、新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードを、それぞれ個々の構成ライブラリおよび前記コードライブラリにロードするステップをさらに包含し、該ロードするステップは、外部エージェントにより作動する際に、該当するインプリメンテーションに対する前記構成情報および関連する実行可能なコードを、該再プログラミング可能なハードウェアにロードするステップを包含する。
【０１８６】
別の実施形態では、本方法は、前記インプリメンテーションの少なくとも一つに対する決定状態情報を含ませるための決定状態ライプラリを提供するステップと、該再プログラミング可能なハードウェアにおいてロードされた該インプリメンテーションのランタイム状態に対する複数の他のインプリメンテーションに対する該決定状態情報をプロファイルするステップと、他のインプリメンテーションのうちの任意に対する該決定状態情報が前記ランタイム統計により緊密に適合するかどうかを決定するステップとをさらに包含し、該他のインプリメンテーションの一つに対する該決定状態情報が該ランタイム統計により緊密に適合する場合に、該ロードするステップは、該当するインプリメンテーションに対する前記構成情報および関連する実行可能なコードを、前記再プログラミング可能なハードウェアにロードするステップを包含する。
【０１８７】
さらなる実施形態では、本方法は、前記ランタイム統計に最適化された１以上の新しいインプリメンテーションを生成するステップをさらに包含する。
【０１８８】
一実施形態では、本方法は、各新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードを、それぞれ個々の構成ライブラリおよび前記コードライブラリにロードするステップをさらに包含する。
【０１８９】
別の実施形態では、本方法は、各新しいインプリメンテーションに対する前記構成情報、関連する実行可能なコードおよび関連する決定状態情報を、それぞれ個々の構成ライブラリ、前記コードライブラリおよび前記決定状態ライブラリにロードするステップをさらに包含する。
【０１９０】
好適には、新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードは、予定可能な基準を満足する前記再プログラミング可能なハードウェアにロードされる。
【０１９１】
より好適には、新しいインプリメンテーションに対する前記構成情報および関連する実行可能なコードは、前記再プログラミング可能なハードウェアにロードされ、ここで、再構成比Ｒ＞１、該再構成比Ｒは、下式により与えられ、
【０１９２】
【数７】
2005503680.tif 000005
ここで、Ｃｓｗ，ｊは、ソフトウェア関数ｆ（）をインプリメントするためのクロックサイクル数、
Ｔｓｗは、該クロックサイクル数Ｃｓｗ，ｊにおける各クロックサイクルに対するサイクルタイム、
Ｃｃｉ，ｊは、カスタム命令をインプリメントするためのクロックサイクル数、
Ｔｃｉは、該クロックサイクル数Ｃｃｉ，ｊにおける各クロックサイクルに対するサイクルタイム、
Ｔｒは、該再プログラミング可能なハードウェアの再構成のために要求される時間である。
【０１９３】
一実施形態では、前記インプリメンテーション生成ステップは、オンラインで行われる。
【０１９４】
別の実施形態では、前記インプリメンテーション生成ステップは、オフラインで行われる。
【０１９５】
好適には、前記インプリメンテーション生成ステップは、前記ランタイム統計に基づいて命令情報を分析し、命令最適化を決定するステップと、前記命令最適化を含ませるために前記アプリケーションソースコードをコンパイルし、実行可能なコードを生成するステップと、該ランタイム統計に基づいてアーキテクチャ情報を分析し、アーキテクチャ最適化を決定するステップと、該アーキテクチャ最適化を含む構成情報を生成するステップと、該アーキテクチャ最適化を含む該構成情報からデバイス固有の構成情報を生成するステップとを包含する。
【０１９６】
好適には、前記インプリメンテーションステップは、各候補インプリメンテーションに対する前記構成情報および関連するコードをプロファイルするステップと、それに応答して、予定可能な基準に基づいて１以上の最適のインプリメンテーションを選択するステップとをさらに包含する。
【０１９７】
一実施形態では、前記インプリメンテーション生成ステップは、カスタマイゼーション仕様および前記ランタイム統計内の情報をプロファイルするステップと、少なくとも一つのプロセッサスタイルをインプリメンテーションのための候補として識別するステップと、インプリメンテーションのための候補として識別された各プロセッサスタイルのためのテンプレートを生成するステップとをさらに包含する。
【０１９８】
好適には、前記プロファイルされた情報は、前記アプリケーションソースコードを含む。
【０１９９】
好適には、複数のプロセッサスタイルは、前記カスタマイゼーション仕様プロファイルステップにおいてインプリメンテーションのための候補として識別される。
【０２００】
より好適には、個々の前記プロセッサスタイルは、アプリケーションの部分を実行するように識別され、これにより、該アプリケーションは、組み合わされた個々のプロセッサスタイルによって実行されることになる。
【０２０１】
好適には、最適化を可能にするためのプロファイリング情報は、前記カスタマイゼーション仕様プロファイルステップにおいて収集される。
【０２０２】
より好適には、前記プロファイリング情報は、オプコードのグループの頻度を含む。
【０２０３】
より好適には、前記プロファイリング情報は、オペレーション共有に関する情報を含む。
【０２０４】
より好適には、前記プロファイリング情報は、オペレーション並行化に関する情報を含む。
【０２０５】
一実施形態では、前記命令情報分析ステップは、該命令情報を分析する際に前記プロファイリング情報を利用するステップと、該命令最適化を決定するステップとを包含する。
【０２０６】
好適には、前記命令最適化は、オペレーション最適化を含む。
【０２０７】
より好適には、前記オペレーション最適化は、オペレーション共有最適化を含む。
【０２０８】
より好適には、前記オペレーション最適化は、オペレーション並行最適化を含む。
【０２０９】
好適には、前記命令最適化は、カスタム命令を含む。
【０２１０】
より好適には、カスタム情報は、使用頻度に基づく最適化のための候補として識別される。
【０２１１】
さらにより好適には、カスタム情報は、決定関数Ｄに基づく最適化のための候補として識別され、ここで、該決定関数Ｄは、
【０２１２】
【数８】
2005503680.tif 000006
により与えられ、
ここで、Ｃｓｗ，ｊは、ソフトウェア関数ｆ（）をインプリメントするためのクロックサイクル数、
Ｔｓｗは、該クロックサイクル数Ｃｓｗ，ｊにおける各クロックサイクルに対するサイクルタイム、
Ｃｃｉ，ｊは、カスタム命令をインプリメントするためのクロックサイクル数、
Ｔｃｉは、該クロックサイクル数Ｃｃｉ，ｊにおける各クロックサイクルに対するサイクルタイム、
Ｆｊは、手順が呼ばれる時間数、
Ｓｊは、該カスタム命令がインプリメントされるかどうかを示すバイナリ選択変数である。
【０２１３】
一実施形態では、前記命令情報分析ステップは、候補命令最適化を識別するステップと、該候補命令最適化の命令に基づいて行われた推定に基づいて前記命令最適化のインプリメンテーションを決定するステップとを包含する。
【０２１４】
好適には、前記推定が前記再プログラミング可能なハードウェアがランタイム中に全命令を共にインプリメントするためにプログラミングされることができないことを提供する場合に、前記命令情報分析ステップは、個々の命令を、前記再プログラミング可能なハードウェアを再プログラミングすることによってインプリメントされ得る命令のセットに組み合わせてグループ化するステップを包含する。
【０２１５】
別の実施形態では、前記命令情報分析ステップは、異なるランタイム状態に対する複数のインプリメンテーションを決定するステップとであって、それぞれは、前記ランタイム状態に結び付けられた命令最適化を有する、ステップと、各インプリメンテーションに結び付けられた決定状態情報を生成するステップであって、該決定状態情報は、実際のランタイム状態に応じて該インプリメンテーション間の選択を可能にする、ステップとを包含する。
【０２１６】
好適には、前記命令最適化が、設計制約とともにコンパイルするインプリメンテーションを提供できない場合に、前記命令情報分析ステップは、前記カスタマイゼーション仕様プロファイルステップを呼び出して、該命令情報分析ステップによって提供された分析情報に基づいて該カスタマイゼーション仕様を再プロファイルするステップとを包含する。
【０２１７】
好適には、前記アーキテクチャ最適化は、パイプライン処理を含む。
【０２１８】
好適には、前記アーキテクチャ最適化は、リソース複製を含む。
【０２１９】
好適には、前記アーキテクチャ最適化は、最適化とは別の技術を含む。
【０２２０】
より好適には、最適化とは別の前記技術は、未使用リソースの除去を含む。
【０２２１】
より好適には、最適化とは別の前記技術は、オプコード割当を含む。
【０２２２】
より好適には、最適化とは別の前記技術は、チャンネル通信最適化を含む。
【０２２３】
より好適には、最適化とは別の前記技術は、データおよび命令パスのカスタマイゼーションを含む。
【０２２４】
好適には、再プログラミング可能なハードウェアの複数の構成が前記命令プロセッサをインプリメントすることが要求される場合には、前記インスタンス生成ステップは、個々の構成をグループに最適化するステップと、
グループ化された構成のインプリメンテーションをスケジューリングするステップとを包含する。
【０２２５】
好適には、各テンプレートは、複数のプロセッサスタイルに対するプロセッサ定義および関連するパラメータを含むライブラリから抽出されたプロセッサ定義および関連するパラメータから生成される。
【０２２６】
好適には、前記プロセッサスタイルは、スーパースケーラープロセッサを含む。
【０２２７】
好適には、前記プロセッサスタイルは、ハイブリッドプロセッサを含む。
【０２２８】
一実施形態では、前記アプリケーションソースコードをコンパイルする際に利用された前記コンパイラは、前記命令情報分析ステップにおいて生成され、該コンパイルステップは、カスタマイゼーション情報とともに該アプリケーションソースコードに注釈を付けるステップと、該注釈が付けられたソースコードをコンパイルして最適化された実行可能なコードを提供するステップとを包含する。
【０２２９】
別の実施形態では、前記コンパイルするステップは、前記アプリケーションソースコードをコンパイルするステップと、最適化を組み入れるために該コンパイルされたソースコードを再組織化して最適化された実行可能なコードを提供するステップとを包含する。
【０２３０】
一実施形態では、前記再プログラミング可能なハードウェアは、少なくとも一つのフィールドプログラマブルゲートアレイを含む。
【０２３１】
別の実施形態では、前記再プログラミング可能なハードウェアは、少なくとも一つのコンプレックスプログラマブルロジックデバイスを含む。
【０２３２】
好適には、前記命令プロセッサは、前記再プログラミング可能なハードウェアを用いて完全にインプリメントされる。
【０２３３】
本発明の好適な実施形態が、添付図面のみを参照する例として以下に記載される。
【０２３４】
（Ｉ−設計−時間カスタマイゼーション）
図１は、本発明の好適な実施形態によるＦＩＰ設計システムを示す。
【０２３５】
（カスタマイゼーション仕様）
ＦＰＧＡ等の再プログラム可能なハードウェア上で展開するために、カスタマイズされたＦＩＰインプリメンテーションを設計する際に、カスタマイゼーション仕様１が最初に提供される。
【０２３６】
このカスタマイゼーション仕様１は、Ｃ、ＪＡＶＡ（Ｒ）およびデータフローグラフといった、いくつかの形態のいずれかであり得るアプリケーションソースコードと、速度、領域および待ち時間といった、おそらく種々の実行時条件の下で設計の制約条件を含むカスタマイゼーション情報とを含むアプリケーション情報を含む。
【０２３７】
本実施形態において、アプリケーション情報は、開発されたＦＩＰによって動作させられるべきデータを表すデータ、すなわち、実行時条件を示すデータを含み得るアプリケーションデータをさらに含む。好適な実施形態において、アプリケーションデータは、開発されたＦＩＰにより動作させられるべきデータの範囲全体を示すデータを含む。本明細書中で後述されるように、このようなアプリケーションデータの提供は、実行時条件の範囲の解析を可能にする。
【０２３８】
本実施形態において、カスタマイゼーション情報は、ユーザ定義カスタム命令をさらに含む。これは、通常、構造の定義を例として、可能なカスタム命令を、随意的命令または強制的命令として定義する。
【０２３９】
（ＦＩＰプロファイル）
カスタマイゼーション仕様１には、その後、ＦＩＰプロファイラ２によってプロファイリング手続が行われる。
【０２４０】
プロファイリング手続において、アプリケーション情報、特に、アプリケーションソースコードがプロファイルされて、おそらく最適化されたインプリメンテーションを提供する１つ以上の候補ＦＩＰスタイルを識別する。特に、候補選択は、アプリケーションソースコードのスタイルに依存してなされ得る。通常、スタックベースのプロセッサは、多くの場合、オブジェクト指向のスタイルプログラミングにおいて多数の小型のプロセッサを有する記述のための効率的なプロセッサである。１つの好適な実施形態において、プロファイリング手続は、アプリケーションソースコードをＦＩＰスタイルのオペコードにコンパイルする。代替的実施形態において、ユーザは、候補ＦＩＰスタイルを直接的に指定し得る。
【０２４１】
候補ＦＩＰスタイルを識別する場合、プロファイリング手続は、アプリケーションの異なった部分を実行するために可能な限り適切な、異なったＦＩＰスタイルを識別し得る。従って、ＦＩＰプロファイラ２は、アプリケーション全体を実行するための単一のＦＩＰスタイルか、またはアプリケーションを実行するための複数の異なったＦＩＰスタイルが組み合わされたものを提示し得る。このＦＩＰスタイルは、実行時間の間に再構成することによって達成され、ここで、再プログラム可能なハードウェアは、すべてのＦＩＰスタイルが同時に構成されることを可能にしない。
【０２４２】
プロファイリング手続において、さらに、アプリケーションソースコードの構造、特に、ＦＩＰスタイルのためのオペコードおよびオペコードの群の使用頻度、ならびに共有および並行化の可能な程度についてのプロファイリング情報が収集される。
【０２４３】
識別された候補ＦＩＰスタイルに基づいて、プロセッサ定義、およびこれらのＦＩＰスタイルの関連するパラメータが、レジスタおよびルックアップテーブルといった、任意のユーザ定義カスタム命令と関連するリソースと共にＦＩＰライブラリ３から抽出される。
【０２４４】
（ＦＩＰ  テンプレートの生成）
次に、ＦＩＰテンプレートが、識別された候補ＦＩＰシステムの各々について、ＦＩＰテンプレートジェネレータ４によって、ＦＩＰライブラリ３から抽出されるプロセッサの定義および関連するパラメータから自動的に生成される。ＦＩＰテンプレートは、ユーザ定義カスタム命令等の、カスタマイゼーション仕様１からのカスタマイゼーション情報を組み込む。
【０２４５】
本実施形態Ｈａｎｄｅｌ−Ｃ（バージョン２．１［１８］）において、Ｃ言語のようなシンタックスを用いるハードウェア記述言語が、命令プロセッサをインプリメントするために用いられる。しかしながら、本発明のＦＩＰ設計システムは、Ｈａｎｄｅｌ−Ｃ記述に限定されず、他のハードウェア記述言語も同様に用いられ得ることが理解されるべきである。
【０２４６】
Ｈａｎｄｅｌ−Ｃは、設計プロセス全体が高いレベルの抽象化を維持することを可能にする。これは、ＦＩＰインプリメンテーションの設計およびカスタム命令の包含の両方において有利である。Ｈａｎｄｅｌ−Ｃは、設計の迅速なプロトタイプ化をさらに提供する。本発明は、特定のアプリケーション、特に、組み込まれたシステムの軽量のインプリメンテーションのためにカスタマイズされたＦＩＰインプリメンテーションの提供に向けられる。Ｈａｎｄｅｌ−Ｃ等の高レベル言語を用いて、単一の抽象記述を用いることによって設計プロセスを簡略化し、かつ設計されたＦＩＰインプリメンテーションの完全性を提示するためのメカニズムを提供する［１１、１９］。
【０２４７】
図２は、基本命令プロセッサを示すスケルトンプロセッサテンプレート、スタックプロセッサへのスケルトンプロセッサのインスタンス化、およびスタックプロセッサのＨａｎｄｅｌ−Ｃ記述を示す。
【０２４８】
プロセッサテンプレートにおいて、フェッチモジュールは、外部メモリから命令をフェッチして、これをＥｘｅｃｕｔｅモジュールに送信する。このフェッチモジュールは、その後、プログラムカウンタ等のＥｘｅｃｕｔｅモジュールが共有リソースの更新を完了したことを示す、Ｅｘｅｃｕｔｅモジュールからの信号を待つ。可能なパラメータ表示は、カスタム命令の追加、不必要なリソースの除去、データおよび命令パスのカスタマイゼーション、オペコード割り当ての最適化、ならびにパイプライン化の程度の変更を包含する。
【０２４９】
例として、プロセッサのスケルトンテンプレートが以下のように
／／Ｈａｒｄｗａｒｅ  ｒｅｓｏｕｒｃｅｓ
＃ｉｎｃｌｕｄｅ  ｐｒｏｇｒａｍ＿ｃｏｕｎｔｅｒ
ｃｈａｎ  ｆｅｔｃｈｃｈａｎ；
ｉｎｔ  ｉｒ＿ｆｅｔｃｈ，ｉｒ＿ｅｘｅ；
ｐａｒ｛
／／−−Ｆｅｔｃｈ  ｍｏｄｕｌｅ−−
｛
／／Ｆｅｔｃｈ  ｔｈｅ  ｉｎｓｔｒｕｃｔｉｏｎ  ｐｏｉｎｔｅｒ  ｔｏ  ｔｈｅ  ｐｒｏｇｒａｍ  ｃｏｕｎｔｅｒ
ｉｒ＿ｆｅｔｃｈ＝Ｆｅｔｃｈ＿ｆｒｏｍ＿ｍｅｍｏｒｙ（ｐｒｏｇｒａｍ＿ｃｏｕｎｔｅｒ）；
／／Ｓｅｎｄ  ｐｒｅｖｉｏｕｓ  ｉｎｓｔｒｕｃｔｉｏｎ  ｔｏ  ｔｈｅ  Ｅｘｅｃｕｔｅ  ｍｏｄｕｌｅ
ｆｅｔｃｈａｎ！ｉｒ＿ｆｅｔｃｈ；
／／Ｉｎｃｒｅｍｅｎｔ  ｔｈｅ  ｐｒｏｇｒａｍ  ｃｏｕｎｔｅｒ
ｐｒｏｇｒａｍ＿ｃｏｕｎｔｅｒ＋＋；
｝
／／−−Ｅｘｅｃｕｔｅ  ｍｏｄｕｌｅ−−
｛
／／Ｒｅｃｅｉｖｅｓ  ｉｎｓｔｒｕｃｔｉｏｎ  ｆｒｏｍ  ｔｈｅ  Ｆｅｔｃｈ  ｍｏｄｕｌｅ
ｆｅｔｃｈｃｈａｎ？ｉｒ＿ｅｘｅ；
／／Ｄｅｃｏｄｅｓ  ａｎｄ  ｅｘｅｃｕｔｅｓ  ｔｈｅ  ｒｅｌｅｖａｎｔ  ｉｎｓｔｒｕｃｔｉｏｎ
ｓｗｉｔｃｈ（ｄｅｃｏｄｅ（ｉｒ＿ｅｘｅ））；
｛
／／Ｉｎｓｔｒｕｃｔｉｏｎ  ｉｍｐｌｅｍｅｎｔａｔｉｏｎｓ
｝
｝
｝
示され得る。
【０２５０】
Ｈａｎｄｅｌ−Ｃにおいて、チャネル通信は、送信器および受信器の両方の準備が整うまで遮断される。命令！および？は、チャネルに送信およびチャネルから受信するために用いられる。例えば、ｆｅｔｃｈｃｈａｎ！ｉｒ＿ｆｅｔｃｈは、ｉｒ＿ｆｅｔｃｈに含まれる情報をｆｅｔｃｈｃｈａｎチャネルを介して送信する。
【０２５１】
上述のテンプレートは、基本的命令プロセッサを示す。最近の命令プロセッサは、効率的に強化する複数の機能を組み込み得る。これらの機能は、スーパースカラアーキテクチャ、パイプライン化、割り込みおよびメモリ管理を含む。
【０２５２】
図３は、スーパースカラプロセッサのスケルトンプロセッサテンプレートを示す。
【０２５３】
このプロセッサテンプレートは、共有リソースの一体性を維持するために、通信チャネルを介して相互に接続された複数のＥｘｅｃｕｔｅモジュールを含む。
【０２５４】
理解されるように、スーパースカラプロセッサは、複数のリソースの同時利用を提供する。スーパースカラアーキテクチャを支援するために、プロセッサテンプレートフレームワークは、必要なスケジューリングを提供する必要がある。命令のスケジューリングは、コンパイル時に生じるか、または実行時に動的に生じ得る。スケジューリングがコンパイル時に生じる場合、プロセッサの関連するコンパイラは、スケジューリングの責任を負う。そうでない場合、スケジューリングが実行時に動的に生じる場合、フェッチモジュールがスケジューリングアルゴリズムを組み込む。
【０２５５】
このプロセッサテンプレートは、ハイブリッドプロセッサを生成するためのプラットフォームをさらに提供する。理解されるように、ハイブリッドプロセッサは、１つより多い命令のスタイルを実行する能力を提供する。現在の複合プロセッサは、多くの場合、ハイブリッドプロセッサと考えられ得る。Ｉｎｔｅｌ（登録商標）ｘ８６プロセッサは、例えば、大抵の命令に対してレジスタベースのアプローチを用いるが、浮動小数点命令はスタックベースで動作される。本発明において、ハイブリッド化は、種々のプロセッサスタイルの利点とＦＩＰインプリメンテーションとを組み合わせる手段を提供する。
【０２５６】
異なったプロセッサスタイルに対する命令は、異なった特性を有することが周知である。例えば、レジスタベースプロセッサは、スタックベースのプロセッサに対する命令よりも長い命令であり、より多くのプログラム命令を必要とする。さらに、レジスタベースの命令は、並行化がより容易に開発されることを可能にし、スタックベースの命令は、より大きい依存性を有し、かつ多くの場合、連続的に実行される傾向がある。
【０２５７】
複数の命令フォーマットと単一のハイブリッドＦＩＰインプリメンテーションとの組み合わせの可能性は、速度とコードの大きさとの間にトレードオフを可能にし、これは、制限されたストレージを有する組み込まれたデバイスにとって重要であり得る。
【０２５８】
ハイブリッドＦＩＰインプリメンテーションに付与されたバイナリ記述は、異なったプロセッサのスタイルでパッケージされた命令を含み得る。このようなハイブリッドＦＩＰインプリメンテーションのフェッチモジュールは、適切なスタイルを決定するためにデコードのさらなるレベルを組み込み、命令を対応するＥｘｅｃｕｔｅモジュールに向ける。例えば、ハイブリッドプロセッサは、ＭＩＰＳ  ＥｘｅｃｕｔｅモジュールおよびＴＩＭ  Ｅｘｅｃｕｔｅモジュールの両方を含み得、スーパースカラプロセッサと同じ態様で構成される。このハイブリッドＦＩＰは、ＭＩＰコードを実行させるが、機能言語を支援する能力によって増強される。
【０２５９】
複数のプロセッサシステムを生成することもまた可能である。このようなシステムにおいて、異なった命令ストリームは、ＦＩＰがチャネルを介して互いに通信し得る各個別のＦＩＰに供給される。
【０２６０】
本明細書中で上述のように、パイプライン化、割り込みハンドリングおよびメモリ管理のためのモジュールといった、他の最新式プロセッサモジュールは、さらに、同様の方法でＦＩＰインプリメンテーションに組み込まれ得、モジュールがチャネルを用いて標準テンプレートとインターフェース接続される。パイプライン通信は、ハザードが生じないことが知られている場合は簡略化され得る。アプリケーションドメインのプロファイリングは、この情報を提供し得る。推論的実行は、さらに、ブランチの両方のパスをガード条件が決定されるまで同時に実行することによって支援され得る。
【０２６１】
設計時、最初、Ｅｘｅｃｕｔｅモジュール内に命令は存在しない。命令がＥｘｅｃｕｔｅモジュールに追加されると、設計システムにおけるカウンタがインクリメントされて、追加された命令の数の追跡を維持する。オペコードと、そのオペコードのバイナリ表現との間にマッピングを提供するオペコードファイルがさらに生成される。単純な場合、命令のバイナリ表現はカウンタの数である。しかしながら、ワンホットエンコード等の他の数のスキームが用いられ得る。
【０２６２】
例として、オペコードファイルは、以下の形態
＃ｄｅｆｉｎｅ  ＰＯＰ１
＃ｄｅｆｉｎｅ  ＰＵＳＨ２
＃ｄｅｆｉｎｅ  ＭＵＬ３
をとり得る。
【０２６３】
命令は、＃ｉｎｃｌｕｄｅ宣言を用いてＥｘｅｃｕｔｅモジュールに容易に組み込まれる。例として、スタックベースの複数の命令は、Ｅｘｅｃｕｔｅモジュールのスイッチブロック内に
＃ｉｎｃｌｕｄｅ  ｓｔａｃｋ＿ｍｕｌ．ｈｃ
として含まれ得る。
【０２６４】
ここで、例として、ｓｔａｃｋ＿ｍｕｌ．ｈｃの内容は、
／／Ｒｅａｄ  ｔｏｐ  ｏｆ  ｓｔａｃｋ
ｉＤａｔａ１＝ｒｅａｄＴＯＳ０；
ｐａｒ｛
／／Ｍｕｌｔｉｐｌｙ  ｎｅｘｔ  ｉｔｅｍ  ｉｎ  ｓｔａｃｋ  ｔｏ  ｉＤａｔａ
ｉＤａｔａ１＊＝ｒｅａｄＳｔａｃｋ２０；
／／Ａｄｊｕｓｔ  ｔｈｅ  ｓｔａｃｋ  ｐｏｉｎｔｅｒ
ｓｐ−−；
｝
ｐａｒ｛
／／Ｗｒｉｔｅ  ｄａｔａ  ｂａｃｋ  ｉｎｔｏ  ｓｔａｃｋ
ｗｒｉｔｅＳｔａｃｋ（ｓｐ−１，ｉＤａｔａ１）；
／／Ｆｌａｇ  ｔｏ  ｄｅｎｏｔｅ  ｔｈａｔ  ａｎ  ｉｎｓｔｒｕｃｔｉｏｎ  ｈａｓ  ｃｏｍｐｌｅｔｅｄ  ｅｘｅｃｕｔｉｏｎ
ｉｎｓｔ＿ｄｏｎｅ＝１；
｝
と書かれ得る。
カスタム命令は、さらに、このようにして、Ｅｘｅｃｕｔｅモジュール内の命令を含むことによって、および別個のファイルにハードウェアインプリメンテーションを提供することによって含まれ得る。
【０２６５】
ＦＩＰテンプレートは、その後、各々以下のように処理される。各ＦＩＰインプリメンテーションの命令情報に、ＦＩＰアナライザ５によってＦＩＰ解析手続きが行われ、各ＦＩＰインプリメンテーションのアーキテクチャ情報に、ＦＩＰインスタンシエータ６によってＦＩＰインスタンス化手続きが行われる。
【０２６６】
（ＦＩＰ解析）
本実施形態において、ＦＩＰアナライザ５は、アプリケーションソースコードをプレコンパイルするためのプレコンパイラを含み、このプレコンパイル化は、次に続く命令の解析を簡略化する。プレコンパイル化の出力は、データフローグラフまたはオペコードといった、任意の中間表現であり得る。代替的実施形態において、プレコンパイラは省略され得る。
【０２６７】
各候補ＦＩＰテンプレートについて、ＦＩＰアナライザ５は、プロファイリング情報を解析する。プロファイリング情報がＦＩＰプロファイラ２によって取得されると、候補命令の最適化、すなわち、オペレーションの候補の最適化（通常、共有および並行化の可能性）、および頻繁に用いられるオペコードの群を識別すること等によるカスタム命令の候補としてのオペレーションを識別する。
【０２６８】
結果として生じた候補命令の最適化は、その後、このような最適化について速度、大きさおよび待ち時間といった推定を行い、かつこの推定をＦＩＰアナライザ５に戻すＦＩＰインスタンシエータ６に転送される。
【０２６９】
ＦＩＰインスタンシエータ６から受信された推定に基づいて、ＦＩＰアナライザ５は、候補命令の最適化、すなわち、オペレーションの最適化およびカスタム命令のうちのどれが組み込まれるかを決定するためにこの推定を評価する。１実施形態において、ＦＩＰアナライザ５は、例えば、カスタマイゼーション仕様１に与えられるような設計の制約が満たされるかどうかを決定するために推定を評価する。
【０２７０】
１実施形態において、ＦＩＰアナライザ５による評価は、カスタマイゼーション仕様１におけるアプリケーションデータによって示されるような実行時条件で不安定性があり、従って、アプリケーションの最適な性能を提供するために、各々が異なった命令の最適化を有する複数のＦＩＰインプリメンテーションが必要とされるか否かを決定する。すなわち、各々が特定の実行時条件と関連する複数のＦＩＰインプリメンテーションが決定される。本実施形態において、ＦＩＰインプリメンテーションの各々が、関連する決定条件情報７を有する。この情報は、本明細書中で後述されるように、ＦＩＰ管理システムが、続いて、実際の実行時条件に依存して、開発されたＦＩＰインプリメンテーション間で選択することを可能にする。実行時条件が著しく安定している場合、例えば、非常に類似のフォーマットのデータセットに関する動作において、ＦＩＰアナライザ５は、おそらく、単一のＦＩＰインプリメンテーションのみが必要であると決定する。
【０２７１】
速度または領域といった制約が、単一のＦＩＰ構成内のすべての命令をインプリメントすることを可能にする場合、ＦＩＰアナライザ５は、命令のうちのいくつかを群化して異なった群にし、従って、重要な命令群のみが、実行時間の間の特定の時間にインプリメントされ得る。本群化がインプリメントされ得るいくつかの方法がある。１つのインプリメンテーションにおいて、各ＦＩＰインプリメンテーションは同じ数の命令を有し、いくつかの命令が０命令であり、大きいハードウェア記述を含む代わりに、小さいハードウェア記述のみを含み得、別のＦＩＰインプリメンテーションがロードされることを必要とするという点でのみ異なる。別のインプリメンテーションは、実行時ホストに再構成させることである。この場合、各ＦＩＰインプリメンテーションは、依然として、同じ数の命令を有するが、いくつかの命令は、例えば、ディジットシリアル形態で実行され得、領域がより小さく、待ち時間がより長い。実行時ホストは、その後、低速オペレーションを用いるよりも再構成時間が長い場合であっても、高速ＦＩＰインプリメンテーションを再構成することがより効率的であるかどうかを決定し得る。
【０２７２】
結果として生じたＦＩＰインプリメンテーションが、カスタマイゼーション仕様１に規定されるような所定の制約と適合しない場合、ＦＩＰアナライザ５は、本実施形態におけるように、通常、場合によっては関連する別のＦＩＰスタイルのための命令情報を提供することによって、改変された命令情報を提供するような、ＦＩＰアナライザ５によって提供される解析情報にさらに基づいて、ＦＩＰプロファイラ２を実行して、さらにカスタマイゼーション仕様１を再プロファイルする。
【０２７３】
（ＦＩＰインスタンス化）
各ＦＩＰインプリメンテーションに対して、ＦＩＰ解析器５によって決定されたように、ＦＩＰインスタンス化器（ｉｎｓｔａｎｔｉａｔｏｒ）６は、アプリケーション命令を実行するように要求された１つ以上のＦＩＰハードウエア構成を開発する。ＦＩＰインスタンス化器６はまた、プロセッサアーキテクチャを最適化するように構成される。
【０２７４】
上述のように、再プログラム可能ハードウエアは、特定の時間で要求されたＦＩＰハードウエア構成の全てを、異なる時間でハードウエア上に再プログラムされる異なるＦＩＰハードウエア構成に適応できない場合、複数のＦＩＰハードウエア構成が発展される。複数のＦＩＰハードウエア構成が必要とされる場合、ＦＩＰインスタンス化器６は、例えば、再構成を最小化するために、ＦＩＰハードウエア構成の構築およびスケジューリングの両方を最適化するように構成される。
【０２７５】
本実施形態では、最適化は輻輳軽減を含む。リソースが頻繁に使用される場合、再プログラム可能なハードウエア２２におけるルーティング輻輳は、ＦＩＰをスローダウンさせ、より大きい領域を利用させる。ＦＩＰインスタンス化器６は、この条件を検出し、この問題を軽減する技術（例えば、ルーティングのパイプライン化、解読機構、および適切なリソースの複製）を呼び出すように構成される。リソースが複製される場合、ＦＩＰ解析器５は、さらなるリソースにアクセスする新しい命令を生成するように命令される。
【０２７６】
本実施形態では、最適化はまた、最適化から独立した技術（未使用のリソースの除去、オペコード（ｏｐｃｏｄｅ）割り当て、チャンネル通信最適化、ならびに特定のドメインに従うデータおよび命令パスのカスタマイズ）を含む。メモリキャッシュまたはガーベージコレクション戦略のためのサイズおよびキャッシング戦略もまたカスタマイズされ得る。
【０２７７】
次いで、インスタンス化器６は、各ＦＩＰインプリメンテーションのためのＦＩＰ構成情報８を生成する。ＦＩＰ構成情報８は、画像処理等の所与のアプリケーションのドメインに特有であり得る。
【０２７８】
（ＦＩＰ構築）
次いで、各ＦＩＰインプリメンテーションのためのドメイン専用ＦＩＰ構成情報８は、例えば、デバイス専用ＦＩＰ構成情報１０（すなわち、専用ＦＩＰインプリメンテーションおよび専用の再プログラム可能なハードウエアと共に使用するための構成情報）を提供するように、ＦＩＰビルダ９によって、ベンダ専用のマクロのリソース構築、制約履行およびインスタンス化等の技術専用の最適化を受ける。特に、利用可能な任意の専用リソース（例えば、ファーストキャリー連鎖（ｆｉｒｓｔ−ｃａｒｒｙ  ｃｈａｉｎ）、埋め込みメモリ等）が展開される。
【０２７９】
ＦＩＰインスタンス化器６は、制約が満足され得ない場合、繰り返しおよび／または相互作用的に利用される。
【０２８０】
（ＦＩＰ選択）
次いで、各ＦＩＰテンプレートについての１つ以上のＦＩＰインプリメンテーションのために、ＦＩＰ解析器５によって開発されたようなソースコードおよびＦＩＰインスタンス化器６によって開発されたようなＦＩＰ構成情報１０は、最適なＦＩＰスタイルを選択するようにＦＩＰセレクタ１１によってプロファイルされる。最適なＦＩＰスタイルは、通常、速度とサイズとの交換を含む所定の基準に基づく、上述のような１つ以上のＦＩＰインプリメンテーションを有する。
【０２８１】
（ＦＩＰコンパイル）
ＦＩＰセレクタ１１による１つ以上のＦＩＰインプリメンテーションの選択に従って、次いで、これらのインプリメンテーションのためのソースコードは、実行可能なＦＩＰコード１３を提供するようにＦＩＰコンパイラ１２によってコンパイルされる。
【０２８２】
図４は、実行可能なＦＩＰコード１３のコンパイルのための２つの可能なコンパイルパスを示す。
【０２８３】
本実施形態では、図４の左側のコンパイルパスでは、ソースコードは、命令の最適化に関連する情報（例えば命令の使用の頻度、命令の群、および共有されたリソース等）を用いて注釈が付けられる。このステップは、標準的なソースコードを、コンパイルされたコードおよびＦＩＰインプリメンテーションの両方の最適化において利用される特定の情報を含むソースコードに変換する。このコンパイル技術の利点は、設計フローの間に情報が失われず、これにより最適化プロセスができる限り効率的になることを可能にする。
【０２８４】
本実施形態では、ＦＩＰコンパイラ１２および関連するツールがＦＩＰ解析器５によって生成され、それによりこれらはＦＩＰ専用である。このように、命令の最適化を用いて注釈が付けられた本実施形態では、ＦＩＰ専用コンパイラ１２によって利用されるべきソースコードは、実行可能なＦＩＰコード１３にコンパイルされ得、好適な実施形態では、このＦＩＰインプリメンテーションに対する命令を実行時間で決定かつ委任するためのソフトウエア制御メカニズムは、実行時間で特定の持続時間で最適化した。関連されたツールは、アセンブリ、リンカー、ディスアセンブラー、デバッガ、命令セットシミュレータ、ならびに、適切な実行可能なＦＩＰコード１３を生成し、性能を最適化し、サイズを低減し、電力消費を低減する等のための他の設備を含む。本実施形態では、ＦＩＰコンパイラ１２および関連するツールは、例えば、選択されたＦＩＰテンプレートおよび関連付けられたパラメータの要求に基づいて、ＦＩＰ解析器５によって自動的に生成されることに留意のこと。
【０２８５】
代替的実施形態では、図４の右側のコンパイルパスにおいて、利用可能なコンパイラはソースコードをコンパイルするために利用される。このコンパイラは標準的なコンパイラであってもよいし、以前のＦＩＰインプリメンテーションから作成されたコンパイラであってもよい。このコンパイル技術では、コンパイルされたコードは、可能な最適化を決定するために評価され、命令レベルの並行性および他の最適化を開発するために再編成される。これは、ＪＶＭのためのジャストインタイム（ｊｕｓｔ−ｉｎ−ｔｉｍｅ）コンパイル（ＪＩＴ）の概念と同様である。この技術の利点は、既存のコンパイラが使用され得、予めコンパイルされたコードがＦＩＰ上で実行され得ることである。しかし、コンパイルされたコードで可能な最適化を識別することはしばしば困難であるため、このアプローチは、ＦＩＰ専用コンパイラを用いるよりもあまり最適ではないソリューションを生み出し得る。
【０２８６】
（ＦＩＰインプリメンテーション）
実行時間再構成を可能にするように１つ以上のＦＩＰ構成を定義し得る、生じたＦＩＰ構成情報１０および実行可能なＦＩＰコード１３は、必要とされたアプリケーションのための最適化されたＦＩＰインプリメンテーションを提供する。複数のＦＩＰインプリメンテーションは、実行時間条件を変更するための最適な性能を提供するように開発される場合、上述のように、実行時間条件に応じてＦＩＰインプリメンテーション間の選択を可能にするように、各ＦＩＰインプリメンテーションは決定条件情報７に関連付けられた。あるカスタマイズされたハードウエアインプリメンテーションを別のハードウエアインプリメンテーションに得変換するインクリメント構成が、妥当な場合、作成され得る［１６］。
【０２８７】
次いで開発されたＦＩＰインプリメンテーションは、ＦＩＰ管理システム１４、あるいは代替的にまたはさらに、再プログラム可能なハードウエアへの以後のロードためのＦＩＰライブラリに直接展開され得る。複数のＦＩＰインプリメンテーションが開発される場合、ＦＩＰインプリメンテーションの内の１つが最初の展開（例えば平均的な性能を提供することに基づいて）のために選択される。実際には、開発されたＦＩＰインプリメンテーションのための、ＦＩＰ構成情報１０および実行可能なＦＩＰコード１３、ならびに関連する場合、決定条件情報７は、以後のダウンロードのための中央化されたライブラリに、または同様のアプリケーションを実行するシステムに伝達され得、それによりこれらの他のシステムを更新するための手段を提供することが考えられる。
【０２８８】
あるいは、本実施形態では、ＦＩＰスタイルおよびそれぞれ開発されたＦＩＰインプリメンテーションのためのＦＩＰ構成情報１０のための関連付けられたパラメータがＦＩＰライブラリ３にロードされ、それによりＦＩＰライブラリ３に含まれたＦＩＰスタイルの数を拡張する。
【０２８９】
（ＦＩＰ最適化）
上述のように、ＦＩＰインプリメンテーションのための最適化は２つのレベルで発生し得る。すなわち、ソフトウエアおよびプロセッサの両方が最適化され得る。コンパイラおよび命令プロセッサ設計を最適化する場合の発展は、ＦＩＰアーキテクチャおよびコンパイラにおける使用に適応され得る。ＦＩＰシステムとの使用のためのこれらの技術の改変が以下に説明される。
【０２９０】
最適化は４つのグループに広く分類され得る。
独立的な技術
・未使用のリソースおよび命令の除去
・データパスおよび命令のカスタマイズ
・オペコード割り当ての最適化
・モジュール間のチャンネル通信の最適化
従属的な技術（典型的には、ＦＰＧＡインプリメンテーション）
・ファーストキャリー連鎖、埋め込まれたメモリ等の利用可能な専用リソースの展開
・ルーティングによるルーティング遅延を低減するための輻輳管理の導入
特定のプロセッサスタイル
・ＪＶＭ、ＭＩＰＳ、ＴＩＭ等のプロセッサタイプ
・スーパスカラー（ｓｕｐｅｒｓｃａｌａｒ）アーキテクチャ、パイプライン等
特定のコンパイラ
・命令レベルの並列スケジューリング
・オペコード再順序付け
・ループ展開およびフォールディング
・パイプライン処理の実行
いくつかのこれらの最適化が既に開発された［１１］。以下は、カスタム命令および技術依存最適化を説明する。特定のデータパスの直接的なハードウエアインプリメンテーションは、カスタム命令による始動のためにＦＩＰハードウエア構成に組み込まれ得る。これは、フェッチおよびデコード命令の数を低減させると共に性能を改善する。しかし、カスタム命令が多くなればなるほど、ＦＩＰハードウエア構成も大きくなる。従って、速度の改善は、大きさの増加によって達成される。カスタム命令のタイプおよび数の選択は重要である。この選択はまた、どれくらいの頻度で特定のカスタム命令が使用されるかに依存すべきである。このトレードオフは以下により詳細に説明される。
【０２９１】
さらに、データパスのみ残して、フェッチおよびデコードステージを互いに離して最適化し、それにより効果的に直接的なハードウエアインプリメンテーション（図７に関して説明されたハードウエアインプリメンテーションに類似する）を与えることが可能である。この構成によって、メモリボトルネック（ｍｅｍｏｒｙ  ｂｏｔｔｌｅｎｅｃｋ）に関連した問題が明らかになり得る。
【０２９２】
所定のプロセッサスタイル特有の最適化もまた可能である。しばしばこれらは、デバイス依存リソースに関連付けられる。例えば、ＪＶＭでは、複数のメモリのバンクが存在する場合、スタックアクセスが強化され得、それによりスタック上部２つのエレメントが同時に読み出され得る。デバイス依存リソースは、技術専用ハードウエアライブラリ［２０］、ベンダに提供されたマクロ（例えば、Ｘｉｌｉｎｘ  Ｉｎｃ．によって提供されたようなＲｅｌａｔｉｏｎａｌｌｙ  Ｐｌａｃｅｄ  Ｍａｃｒｏ［２１］およびＡｌｔｅｒａ  Ｃｏｒｐｏｒａｔｉｏｎによって提供されたようなＭｅｇａｆｕｎｃｔｉｏｎ［２２］）を用いることによって展開され得る。
【０２９３】
ＡＳＩＣとは異なり、ＦＰＧＡにおいてレジスタは放棄されるが、ルーティングは、大きい遅延ペナルティが課せられ、設計のサイズを増大させ得る。ＦＰＧＡのこの特性は、テンプレート設計に制限を設ける。ルーティング輻輳は、リソースが多くの動作によって広範囲に使用される場合に発生する。リソースのサイズまたは隣接するモジュールのルーティング密度等の基準もまた、ＦＩＰハードウエア構成のルーティングに影響を与え得る。３つの設計ソリューションが本明細書中で提示される。第１および最も簡単な設計ソリューションは、ルーティングをパイプライン化することである。第２の設計ソリューションは、復号化ネットワークを構成することであり、復号化ネットワークは、パイプライン化ツリーとしてリソースの始動を制御する。これは、より短いサイクル時間およびより小さい論理ルーティング遅延比を生じるが、より大きい領域およびより複雑な回路を犠牲にする。第３の設計ソリューションは、リソースを複製することである。リソースは、共有されることが有益である場合に共有されるだけであるべきである。例えば、命令頻度は、中間結果のための一時的なレジスタを必要とし、そのためこれらのリソースを共有することは効率的ではない。共有された動作に対して、面積および速度は、遅延とトレードオフされ得る。例えば、共有されたリソースが単一サイクル乗算器である場合、パラレルシリアルコンバータがルーティング輻輳を低減する位置において配置されると、共有されたリソースはいくつかのディジットシリアル（ｄｉｇｉｔ−ｓｅｒｉａｌ）乗算器によって置換され得る。しかし、複製されたリソースが共有されたストレージである場合、状態情報の一貫性を補償するように注意が払われなければならない。
【０２９４】
（ＦＩＰ  ＪＶＭおよびＭＩＰＳインプリメンテーション）
ＦＩＰ設計システムの動作は、ＦＩＰ  ＪＶＭインプリメンテーション［２３］，ならびにソフトウエアおよびＡＳＩＣインプリメンテーションと比較されたこれらのインプリメンテーションの性能に関する例を用いて以下に説明される。ＭＩＰＳスタイルプロセッサのＦＩＰインプリメンテーションの性能もまた説明される。
【０２９５】
ＦＩＰ  ＪＶＭインプリメンテーションはＪＶＭ仕様に基づいて開発されてきた。不必要なリソースの除去、データおよび命令パスのカスタマイズ、オペコード割り当ての最適化、およびパイプライン化の程度の改変を含む多くのパラメータ化および最適化が研究されてきた。上述のカスタマイズされたＪＶＭは、ＲＣ１０００−ＰＰデバイス（Ｃｅｌｏｘｉｃａ  Ｌｉｍｉｔｅｄ，ＵＫ）を用いてインプリメントされてきた。
【０２９６】
第１の実施形態では、共有され分離されたリソースを利用するＦＩＰ  ＪＶＭが開発されてきた。本実施形態は、良好な面積利用を提供するが、ルーティング輻輳のために速度を犠牲にする。
【０２９７】
第２の実施形態では、パイプライン化の２つのステージを利用し、交換不可能なリソース（スタックおよびメインメモリ等）のみを共有するＦＩＰ  ＪＶＭが開発されてきた。スタックベースのプロセッサは、本来順次的である。ＦＩＰ  ＪＶＭの速度最適化は、レジスタスタイルの命令インプリメンテーションとして明らかになる並列性を導入する。
【０２９８】
第３の実施形態では、所定の命令および「レジスタ」スタイル（例えばトップオブスタック（ｔｏｐ−ｏｆ−ｓｔａｃｋ）レジスタ）の改良のためのより深いパイプライン化を組み込むＦＩＰ  ＪＶＭが開発されてきた。そのトップオブスタックレジスタが複製される。命令が異なるトップオブスタックレジスタから読み出され得るが、命令は、スタックに直接再度書き込まれる。複製されたレジスタは、フェッチサイクルの間に更新される。ほとんどの命令は４つのパイプライン化ステージによって処理されるが、所定の命令（呼び出し機能のための命令等）は、より深い論理を必要とし、これらの命令のインプリメンテーションは５または６のパイプライン化ステージに分割されてきた。ルーティングもまた輻輳の効果を低減するようにパイプライン化されてきた。
【０２９９】
これらのＦＩＰ  ＪＶＭの実施形態は、可能なパラメータ化の間のトレードオフを示す。
【０３００】
従来のリソース共有化によって再プログラム可能なハードウエアのための共有化方法を最大化することは、著しいルーティングオーバーヘッドを導入し得る。輻輳管理は、インプリメンテーションメディアを支配するルーティングの量が開始する場合、最適な程度の共有化を識別するために必要である。
【０３０１】
パイプライン化はクロックサイクル時間を低減するために有用である。しかし、スタック等のリソースは、命令間の重なりの量を制限する動作依存性を有し得、そしてパイプライン化された場合に遅延をさらに誘導する。
【０３０２】
以下の評価に対して、ＦＩＰ  ＪＶＭの上述の第３の実施形態は、電流プログラムカウンタおよび３２ビットのデータパスサイズと共に使用される。図５に示されたように、このインプリメンテーションの理論的な上限は、ＮＯＰ命令のみが支援される場合、約８０ＭＨｚであると予測される。これはフェッチデコーディング構造が合理的に有効であることを示す。クロック速度は、プログラムカウンタサイズを低減するかまたは加算器を改良することによってさらに増加され得る。
【０３０３】
ＦＩＰ  ＪＶＭの性能がＩｎｔｅｌ（Ｒ）プロセッサ（３００ＭＨｚのＰｅｎｔｉｕｍ（Ｒ）ＩＩ）およびＡＳＩＣ  Ｊａｖａ（Ｒ）プロセッサ（Ｈｅｌｂｏｒｎ  Ｅｌｅｃｔｒｏｎｉｃｓ，Ｓｅｇｙｕｎｇ，  Ｋｏｒｅａの２００ＭＨｚのＧＭＪ３０５０１ＳＢ）上で動作するＪＶＭと比較される。ＧＭＪ３０５０１ＳＢは、Ｓｕｎ  ＭｉｃｒｏｓｙｓｔｅｍｓによるｐｉｃｏＪａｖａ（Ｒ）１  ｃｏｒｅ［２４］に基づく。ＣａｆｆｉｎｅＭａｒｋ  ３．０［２５］Ｊａｖａ（Ｒ）ｂｅｎｃｈｍａｒｋが性能を測定するために使用されてきた。ＣａｆｆｉｎｅＭａｒｋ  ３．０ｂｅｎｃｈｍａｒｋは、埋め込まれたデバイスのＪＶＭ性能をベンチマークテストするために使用されたテストのセットである。これらは、ブール動作の速度、機能呼び出し実行および素数（ｐｒｉｍｅ）の生成に関するテストを含む。
【０３０４】
図６は、Ｉｎｔｅｌ（Ｒ）プロセッサおよびＡＳＩＣ  Ｊａｖａ（Ｒ）プロセッサ上で動作するＪＶＭソフトウエアを用いて達成されたベンチマークスコアと共にＦＩＰ  ＪＶＭのベンチマークスコアを示す。ＦＩＰ  ＪＶＭインプリメンテーションはソフトウエアインプリメンテーションを有利に比較し、より深いパイプラインを有するバージョンが７倍速く実行するように評価される。ＡＳＩＣ  Ｊａｖａ（Ｒ）プロセッサが最大速度を達成すると、留意されるべき２つの重要なファクタがある。第１に、ＦＩＰ  ＪＶＭが３３ＭＨｚで動作するのと比較して、ＡＳＳＩＣ  Ｊａｖａ（Ｒ）プロセッサが２００ＭＨｚで動作する。第２に、ＡＳＩＣ  Ｊａｖａ（Ｒ）プロセッサが固定された命令を有する一方で、ＦＩＰ  ＪＶＭは再構成によるカスタム命令の組み込みを可能にする。ＦＩＰ  ＪＶＭによって提供された速度上昇は、より多くのカスタム命令としてＡＳＩＣ  Ｊａｖａ（Ｒ）プロセッサによって示された速度上昇が付与された速度に向かって増大することが期待される。以下では、カスタム命令を提供することに関するトレードオフが示される。
【０３０５】
リンクリストが、埋め込まれたシステム（携帯電話等）における電子メールまたは電話番号を組織化するために使用され得る。直接的なハードウエアインプリメンテーション、すなわち、命令をフェッチおよび命令を復号化しないインプリメンテーションは、異なるアクセス手順（リンクを挿入し値を検索すること等）を支援する別々の回路を有するリンクリスト構造を操作するように開発されてきた。これらの直接的なインプリメンテーションは、４０〜７０ＭＨｚでクロック発振され、ＦＩＰ  ＪＶＭにおけるカスタム命令のためのデータパスとして組み込まれ得る。
【０３０６】
挿入ソートアルゴリズムが、比較のために直接的ハードウエアアプローチおよびＦＩＰ  ＪＶＭアプローチの両方を用いて書き込まれてきた。直接的ハードウエアインプリメンテーションは、１００個のリンクのリストをソートするのに２．３ｍｓかかる一方で、ＦＩＰ  ＪＶＭは、６．４ｍｓかかり、ＡＳＩＣ  ＪＶＭは１ｍｓかかると推定される。リンクのこのリストへの挿入は２２個のＪａｖａ（Ｒ）命令を獲得する。
【０３０７】
リンクを挿入するためのカスタム命令を含むことによって、ＦＩＰ  ＪＶＭの実行時間は５ｍｓまで低減され得る。なぜなら、単一のカスタム命令は、終了するのに１２サイクルかかる。１つの命令当たり１０サイクル、ならびに１０フェッチおよびデコードサイクルの節約となる。少しのサイクルの実行を要求するカスタム命令が利用されるが、サイクル時間はより長くなり得ることに留意のこと。２つのカスタム命令が追加される場合、実行時間は３．１ｍｓに低減される。しかし、カスタム命令の追加はアプリケーションを速度上昇させるだけでなく、ＦＩＰハードウエア構成のサイズを増加させる。別のＦＩＰインプリメンテーションを用いるトレードオフは以下に考慮される。
【０３０８】
比較の目的のために、３０ＭＨｚでクロック発振され得るＭＩＰＳスタイルＦＩＰが開発された。２種類の比較が着手された。デバイス独立比較は、ゲート、レジスタ、およびラッチの数に着目する。デバイス依存比較は、使用されたＸｉｌｉｎｘ  Ｖｉｒｔｅｘスライスに着目する。
【０３０９】
図７は、十分に共有されたＦＩＰインプリメンテーションと直接的ハードウエアインプリメンテーションとの間のトレードオフを示す。
【０３１０】
概して、直接的ハードウエアインプリメンテーションは少数のサイクルで実行し、ＦＩＰインプリメンテーションよりも高い周波数でクロック発振され得る。例えば、挿入命令は、ＦＩＰにおいて３０ＭＨｚで２２サイクルかかるものと比較して、直接的ハードウエア構成において３９ＭＨｚで１２サイクルかかる。直接的ハードウエア構成は、１００個のリンクのリストをソートするのに２．３ｍｓかかるが、ＦＩＰは７．１ｍｓかかる。しかし、直接的なハードウエアインプリメンテーションによって使用された４６０のスライスと比較した場合、ＦＩＰは２９０のＶｉｒｔｅｘスライスのみを使用する。
【０３１１】
図７から留意されるように、ＦＩＰインプリメンテーションは、５つ以上のアクセス手順を含むアプリケーションのための直接的ハードウエアインプリメンテーションよりも小さい。クロスオーバーポイントは、より多くのカスタム命令を含むことがもはや有益でない場合、推定するための手段を提供する。より多くのカスタム命令がＦＩＰインプリメンテーションに加えられ、クロスオーバーポイントは上方にシフトする。
【０３１２】
従って、本発明のＦＩＰインプリメンテーションはリソース共有のための良好な機構を提供する。ＦＩＰの実行速度はカスタム命令を組み込むことによって改善され得るが、これは、サイズの犠牲を払い得る。さらにデバイス独立の結果は、ＦＩＰインプリメンテーションにおけるカスタム命令の数およびタイプを推定するために利用され得る。これは、リソース共有化の最適化の自動化の手段を提供する。共有化が増加すると、ルーティング輻輳の量もまた増加する。なぜなら、ＦＩＰインプリメンテーションにおける多数の命令がより多くの輻輳を生じ得るためである。カスタム命令は命令の数を低減し、それに従って、スループットを増加し、輻輳を低減する。
【０３１３】
要するに、本発明のＦＩＰ設計システムは、プログラム可能な命令プロセッサのシステマチックなカスタム化のための枠組みを提供する。このＦＩＰアプローチは、プロセッサテンプレートを構成かつ最適化する、パラメータ化によって命令プロセッサの高速開発を可能にする。さらに、標準コンパイラまたはＦＩＰ専用コンパイラはインプリメンテーションプロセスにおいて使用され得る。
【０３１４】
（ＩＩ  実行時間適応）
図８は、本発明の好適な実施形態によるＦＩＰ管理システムを示す。
【０３１５】
上述のように、本発明のＦＩＰ設計システムは、ＦＩＰ構成情報１０および関連付けられた実行可能ＦＩＰコード１３、ならびにこれに関係する場合、ＦＩＰインプリメンテーションのための関連付けられた決定条件情報７、そして対応するＦＩＰ専用コンパイラ１２をさらに提供する。この設計環境もまた初期実行時間環境を生成する。ユーザはコンパイル時間において実行時間環境の能力を決定し得る。例えば、ユーザは全体の再構成または自動調整が実行時間中に必要とされるかどうかを決定し得る。これは、実行時間環境の複雑さを決定する。
【０３１６】
ＦＩＰ管理システムは、システムの中央ハブである実行時間マネージャ１８を含む。
【０３１７】
（ＦＩＰ実行）
実行時間マネージャ１８は、ＦＩＰローダ２０を制御するためのＦＩＰローダコントローラ１９を含む。アプリケーションを実行するように命令された場合、ＦＩＰローダコントローラ１９は、ＦＩＰローダ２０に信号を送信し、本実施形態のＦＰＧＡの再プログラム可能なハードウエア２２にＦＩＰによって動作されることになるロードアプリケーションデータ２１、ＦＩＰ、および必要とされた場合、ＦＩＰ構成情報１０、実行可能なＦＩＰコード１３、ならびにこれらに関連する場合、ＦＩＰインプリメンテーションのための決定条件情報７をロードし、次いで、このＦＩＰコード１３を実行し、アプリケーション結果２４を提供する。必要とされたＦＩＰインプリメンテーションが再プログラム可能なハードウエア２２に既にロードされた場合、ＦＩＰローダ２０はアプリケーションデータ２１のみをロードする。
【０３１８】
ＦＩＰ構成情報１０、関連付けられた実行可能なＦＩＰコード１３、および関連付けられた決定情報７は、ＦＩＰ構成情報ライブラリ２５、実行可能なＦＩＰコードライブラリ２６、および決定条件情報ライブラリ２７の内の対応するものから得られる。ＦＩＰ構成情報ライブラリ２５は、複数のＦＩＰ情報ファイルを含み、再プログラム可能なハードウエア２２を構成するための各ファイルは、関連付けられたＦＩＰコード１３の実行においてカスタムアプリケーションを実現する。実行可能なＦＩＰコードライブラリ２６は、複数の実行可能なＦＩＰコードファイルを含み、各ファイルは、ＦＩＰ構成情報ファイルのそれぞれ１つに関連付けられる。この決定条件情報ライブラリ２７は、複数の決定条件情報ファイルを含み、各ファイルは、ＦＩＰ構成情報ファイルのそれぞれ１つに関連付けられる。本実施形態では、ライブラリ２５、２６、２７は、システムのローカルコンポーネントであるが、代替的実施形態では、これらのライブラリは、必要とされた場合にダウンロードされるＦＩＰインプリメンテーションのための、システムおよびＦＩＰ構成情報１０、関連付けられた実行可能なＦＩＰ１３、ならびに関連付けられた決定条件情報７からリモートに配置され得る。
【０３１９】
（実行時間モニタリング）
実行時間マネージャ１８は、ＦＩＰコード１３の実行の間、再プログラム可能なハードウエア２２の動作に関係する実行時間統計２９を獲得する実行時間モニタ２８をさらに含む。すなわちこの統計は、各手続きが呼び出される回数、最も頻繁に使用されたオペコード、および実行の局在性を決定するためのプログラムカウンタ（ＰＣ）の値等の実行時間条件に関係する。
【０３２０】
本実施形態では、実行時間モニタ２８は、実行時間データを収集し、ＦＩＰの性能に影響を与えないようにＦＩＰの実行と同時に実行時間統計２９を生成する。このような収集および解析は、ハードウエアにおいて（例えば、ＡＳＩＣによって）または例えばパーソナルコンピュータまたはプログラム可能なシステムオンチップデバイス［４］上のソフトウエアでインプリメントされ得る。
【０３２１】
このような統計が収集される頻度が適切である［２６］。短いサンプリング期間は、アプリケーションの代替的な特性を正確に反映しない結果を生じ得るが、長いサンプリング期間は、大きい格納空間の量を必要とし得、アプリケーションの実行に対する影響を有する。
【０３２２】
本発明のＦＩＰインプリメンテーションの設計に利用されたＦＩＰテンプレートは、統計モニタリングモジュールの容易な組み込みを可能にする。本実施形態では、情報が手続き呼び出しの頻度に応じて収集され、所与のアプリケーションの実行時間にわたってサンプリングされる。
【０３２３】
（最適化決定Ｉ）
実行時間マネージャ１８は、最適化決定器３１に命令するための最適化インストラクタ３０をさらに含む。最適化インストラクタ３０は、例えば、実行可能なコードにおける命令に応答するか、またはユーザ等の外部エージェントからの駆動命令に応答して最適化決定器３１を自動的に駆動させるように構成され得る。
【０３２４】
最適化決定器３１は、実行時間モニタ２８から実行時間統計２９を受信し、再プログラム可能なハードウエア２２への新しいＦＩＰインプリメンテーションのためのＦＩＰ構成情報１０および関連付けられた実行可能なＦＩＰコード１３をロードするためにＦＩＰローダ２０に信号を送るように、ＦＩＰローダコントローラ１９に命令するために動作可能である。
【０３２５】
動作の１つのモードでは、最適化インストラクタ３０は、外部エージェントからの駆動命令３２によって動作され、駆動命令は、どのＦＩＰインプリメンテーションがインプリメントされるべきかを識別し、最適化決定器３１は、再プログラム可能なハードウエア２２への新しいＦＩＰインプリメンテーションのためのＦＩＰ構成情報１０および関連付けられた実行可能なＦＩＰコード１３をロードするためにＦＩＰローダ２０に信号を送るように、ＦＩＰローダコントローラ１９に直接命令する。典型的には、一実施形態では、ＦＩＰ構成情報１０、関連付けられた実行可能なＦＩＰコード１３、および関連する場合、１つ以上の新しいＦＩＰインプリメンテーションのための関連付けられた決定条件情報７は、新しいカスタムアプリケーションを実行することが予測されるライブラリ２５、２６、２７、および新しいＦＩＰインプリメンテーションの１つにロードするように外部エージェントによって命令される最適化インストラクタ３０にロードされ得る。
【０３２６】
最適化決定器３１は、異なるＦＩＰインプリメンテーションが、現在の実行時間条件下でインプリメントされたアプリケーションの改良された実行時間性能を提供するかどうかを決定するようにさらに構成され、新しい、最適化されたＦＩＰインプリメンテーションが再プログラム可能なハードウエア２２にロードされることを可能にする等のこれらの条件は、実行時間統計２９によって提示される。
【０３２７】
動作の別のモードでは、ライブラリ２５、２６は、種々の実行時間条件下で、所与のアプリケーションのＦＩＰインプリメンテーションのためのＦＩＰ構成情報１０および関連付けられた実行可能なＦＩＰコード１３を既に含む場合、最適化決定器３１は、これらのＦＩＰインプリメンテーションのための決定条件情報７を、実行時間マネージャ１８およびＦＩＰローダ２０を介して利用可能であるように簡単にプロファイルし、任意のこれらのＦＩＰインプリメンテーションのための決定条件情報７が獲得された実行時間統計２９により正確に適合するかどうかを決定する。これらのＦＩＰインプリメンテーションの内の１つのための決定条件情報７が獲得された実行時間統計２９により正確に適合する場合、最適化決定器３１は、再プログラム可能なハードウエア２２へのライブラリ２５、２６からそのＦＩＰインプリメンテーションのためのＦＩＰ構成情報１０および関連付けられた実行可能なＦＩＰコード１３をロードするためにＦＩＰローダ２０に信号を送信するように、ＦＩＰローダコントローラ１９に命令する。ソースコードのコンパイルまたはインスタンス化およびアーキテクチャ情報の構築が必要とされず、ＦＩＰインプリメンテーションが同様の実行時間条件に対する最適化された性能を提供するように開発されたという事実のため、新しいＦＩＰのインプリメンテーションは実質的に瞬間的であり、プログラム可能なハードウエア２２の再プログラミングの利益に関する決定が実行される必要はない。
【０３２８】
動作のさらなるモードでは、最適化決定器３１は、所与のアプリケーションに対して実行時間条件に対して最適に最適化される新しいＦＩＰインプリメンテーションを生成するようにＦＩＰアダプタ３３に命令するように構成される。
【０３２９】
なおさらなる動作モードでは、図７に関して説明されたハードウエアインプリメンテーションと同様に、フェッチおよび復号化ステージを互いに離して、データパスのみを残し、それにより直接的なハードウエアインプリメンテーションを効率的に与えるように最適化することが可能である。この構成によって、メモリボトルネックに関連付けられた問題が明らかになり得る。
【０３３０】
（ＦＩＰ適応）
一実施形態では、図９に示されたように、ＦＩＰアダプタ３３は、アプリケーション情報としてＦＩＰプロファイラ２に提供された実行時間統計２９を有する、図１に示されたような上述のＦＩＰ設計システムのコンポーネントを含み、これによりカスタマイズ仕様１の最適化されたプロファイリングを可能にする。説明の不必要な重複を避けるために、ＦＩＰ設計システムのより以前の記述についての参照がなされる。
【０３３１】
別の実施形態では、図１０に示されたように、ＦＩＰアダプタ３３は、図１に示されたような上述のＦＩＰ設計システムのコンポーネントを含む。説明の不必要な複製を避けるために、ＦＩＰアダプタ３３と上述のＦＩＰ設計システムとの間の差異のみが詳細に説明され、ＦＩＰ設計システムのより以前の記述についての参照がなされる。ＦＩＰアダプタ３３は、ＦＩＰプロファイラ２、ＦＩＰライブラリ３、およびＦＩＰテンプレート発生器４が省略され、実行時間統計２９は、アプリケーション情報としてＦＩＰ解析器５に提供され、インプリメントされたＦＩＰのための命令カスタマイズの識別を可能にする点で上述のＦＩＰ設計システムとは異なる。本実施形態のＦＩＰアダプタ３３は、上述の実施形態のＦＩＰアダプタ３３の簡略化されたバージョンを提示し、汎用として使用されないが、ＦＩＰインプリメンテーションの高速適応を提供する利点を提供する。
【０３３２】
適応化の戦略は多くのファクタ（例えば、どれくらい速く環境条件が変化するかに依存する）によって影響され得る。適応化は、オンラインであってもよいし、オフラインであってもよい。オンライン適応化は、即時再構成のためのＦＩＰインプリメンテーションを適応すること、ならびに生じたＦＩＰ構成情報１０、関連付けられた実行可能なＦＩＰコード１３、および関連する場合、決定条件情報７をライブラリ２５、２６、２７にロードすることを含み、それにより非常に迅速に変化する環境条件に応答して再プログラム可能なハードウエア２２の再プログラミングを可能にする。このシステムでは、ＦＩＰアダプタ３３は、通常再プログラム可能なハードウエア２２に厳密に適応される。オフライン適応化は、再プログラム可能なハードウエア２２のあまり即時的ではない再プログラミングのためのＦＩＰインプリメンテーションに適応することを含む。このような適応化は、典型的には、環境条件は、比較適長期間にわたって安定であるか、または変化されないままである。このシステムでは、ＦＩＰアダプタ３３は、再プログラム可能なハードウエア２２からリモートに配置され得る。
【０３３３】
上述のＦＩＰ設計システムに関して、ＦＩＰアダプタのＦＩＰ解析器５は、実行時間統計２９（典型的には、所定のネイティブまたはカスタム命令の使用の頻度）を解析し、典型的には所与の状況のための最適なトレードオフを決定する場合（例えば、所与の実行速度で最小の利用可能なハードウエア領域を決定する場合）に、可能な最適化を決定する。実行時間統計２９に基づいて、より多くのリソースは、最も頻繁に使用される機能に特化され得るか（例えば、所定のこれらの機能のためのカスタム命令を生成することによって）、またはより多くの頻繁に使用される命令に対してより高速の動作を用いてあるいはキャッシュサイズまたはスタック深さを変更する等の種々の他の最適化を実行する。例として、頻繁に使用された乗算器回路の性能が増大し得るが、より少ない頻度で使用された動作の領域および性能を低減させる。本発明は、ドメイン特性のために最適化解析のフレキシビリティのレベルを提供する。
【０３３４】
カスタム命令が上記解析の結果に従って生成される。一旦カスタム命令が生成されると、ＦＩＰ解析器５は、生じた命令を解析する。この解析は必要である。なぜなら、例えばカスタム化リクエストは、非常に多い新しいカスタム命令を含み得、領域または遅延制限を満たし得ない。この場合、ＦＩＰ解析器５は、カスタム命令を除去するかどうかを決定し、支援されたネイティブコードの数を低減し、またはあまり頻繁には使用されないオペコードの性能を低位化する。
【０３３５】
実行時間中に、新しいカスタム命令をオンラインでインプリメントする一つの方法は、ルックアップテーブルを使用するとによってなされる。例えば、ライブラリ２５、２６、２７は、１、２、または３つの入力を受け取り、出力を与えるカスタム命令を有する予めコンパイルされたＦＩＰを含み得る。実行時間において、Ｘｉｌｉｎｘ  Ｉｎｃ．［２７］からの「ＪＢｉｔｓ」および「ＪＲＴＲ」ツール等の適切なツールを用いると、関連のルックアップテーブルコードは、部分的な実行時間再構成を用いて比較適効率的にアップロードされ得る。一実施形態では、このアプローチは、機能の所定のスタイルがより頻繁に使用されるが、必ずしも正確に機能するとは限らない情報を利用する。例えば、異なる三角関数がルックアップテーブルを再構成することによって支援され得る。
【０３３６】
カスタム命令の生成においてＦＩＰアダプタ３３によってなされる特定の最適化がオペコード連鎖、命令フォールディング、およびリソース複製を含む。これらの最適化は以下により詳細に説明される。
【０３３７】
（オペコード連鎖）
オペコード連鎖の概念は、手続きを構成するオペコードのシーケンスを接続することである。これは、ＲＩＳＣマシンのマイクロコードの概念と同様である。連鎖は、命令をフェッチし復号化する場合に消費される時間を低減する。さらに、手続きの呼び出しを単一の命令に変換することによって、手続きの呼び出しのオーバーヘッドが避けられ得る。このようなオーバーヘッドは、プリアンブルおよびポストアンブルハウスキーピングルーチン（プログラムカウンタを格納すること、共有レジスタ、およびプリフェッチバッファを満たすこと）を含む。
【０３３８】
（命令フォールディング）
命令フォールディングは、いくつかのオペコードがパラレルに実行されることを可能にする。例えば、４つまでのＪａｖａ（Ｒ）コードが同時に処理され得る［２８］。例として、スタッククベースのマシンでは、追加がスタックの上にプッシュ（ｐｕｓｈ）される２つの値を必要とし、その結果は、命令の後に格納され得る。値がレジスタファイルにロードされた場合、レジスタベースのプロセッサが１つのサイクルで全ての４つの動作を実行し得る。動作が直接互いに連鎖されるために、値をレジスタファイルにロードする必要がない。動作のための値が、以前の動作の結果としてロードされる。
【０３３９】
（リソース複製）
リソースの複製は、以前に隠され得る並列性のいくつかのレベルの利用を可能にする。２つの可能なアプローチがある。これらは、データレベル並列性および命令レベル並列性［２９］である。データレベル並列性は、１つの命令において可能である数と同じ数の動作を実行することによってデータ独立性を利用する。命令レベル並列性は、異なる実行ユニットによって処理された独立命令の同時動作を含む。カスタム命令が生成される場合、利用可能なリソースは、できる限り多くのデータレベルまたは命令レベルの並列性を利用することが必要とされる場合に拡張される。
【０３４０】
利用され得る他の最適化がある。これらは、ルックアップテーブルインプリメンテーションを用いるなどのデバイス特有の最適化を含む。これらの最適化は、Ｘｉｌｉｎｘ  Ｖｉｒｔｅｘ−Ｅ（Ｘｉｌｉｎｘ  Ｉｎｃ．）におけるような高いブロックＲＡＭコンテンツを利用する。あるいは、冗長レジスタの周りのレジスタを移動させることによって、および冗長レジスタを除去することによって、カスタム命令の全体のサイクル数が低減され得る。命令プロセッサは、硬いタイミング特性を有する。命令プロセッサのクロック周期は、臨界遅延パスによって決定され、これは、簡単なビット命令（ビット操作、ビットワイズ（ｂｉｔ−ｗｉｓｅ）ロジックおよびロード／格納動作等）が、実行するのに少なくとも１サイクルを要することを意味する。他の可能な最適化は、多重ＦＩＰ設計を格納するのに要する構成ストレージの量およびこれらのＦＩＰ設計［１６］間の再構成にかかる時間を低減することによって実行時間再構成のオーバーヘッドを低減させることに関係する。
【０３４１】
本実施形態では、最も頻繁に使用されたオペコードおよびオペコードの群は、最適化の候補として識別される。従って、可能な候補の多くの範囲は、カスタム命令を生成するために識別される可能性がある。
【０３４２】
一実施形態では、オンライン等の候補選択（候補の選択は迅速になされなければならない）に対して、簡単な決定ツリーが利用され、典型的には、いくつかのサイズ制約が残っているが、最も頻繁な使用パターンを有する候補のカスタム命令の所定の数を選択する。この技術は迅速な選択を可能にするが、最適な最適化を導き得ない。
【０３４３】
別の実施形態および特にオフライン候補選択では、最適化候補の選択は、目標決定関数Ｄを利用することによって決定される。この決定は、利用可能な面積および電力、現在のＦＩＰ構成およびカスタム命令に対する影響等の制約の影響を受ける。
【０３４４】
一実施形態では、決定関数Ｄは、以下の式である。
【０３４５】
【数９】
2005503680.tif 000007
ここで、Ｃｓｗ，ｊは、ソフトウエア関数ｆ（）を実現するためのクロックサイクルの数である。Ｔｓｗは、クロックサイクル数Ｃｓｗ，ｊにおける各クロックに関するサイクル時間である。Ｃｃｉ，ｊは、カスタム命令を実現するためのクロックサイクルの数である。Ｔｃｉは、クロックサイクル数Ｃｃｉ，ｊにおける各クロックサイクルについてのクロック時間である。Ｆｊは、手続きが呼び出される回数である。Ｓｊは、バイナリ選択変数であり、カスタム命令がインプリメントされるかどうかを表す。
【０３４６】
候補カスタム命令がＦＩＰインスタンス化器６によって提供される、サイズおよび性能推定に基づいて、ＦＩＰ解析器５は、カスタム命令の内の１つを認定し、ＦＩＰアダプタ３３は、ＦＩＰ構成情報１０、関連付けられた実行可能なＦＩＰコード１３、および関係する場合、新しいＦＩＰインプリメンテーションのための関連付けられた決定情報７を作成するように進み、そのＦＩＰ構成情報１０、関連付けられた実行可能なＦＩＰコード１３、および関係する場合、関連付けられた決定情報７は、ライブラリ２５、２６、２７にロードされる。次いで、ＦＩＰ構成情報１０、関連付けられた実行可能なＦＩＰコード１３、および関係する場合、関連付けられた決定情報７によって提供される、新しいＦＩＰインプリメンテーションは、アプリケーションが次に実行される場合、再プログラム可能なハードウエア２２にロードされ得る。
【０３４７】
（最適化決定ＩＩ（再プログラミング））
再プログラム可能なハードウエア２２の再プログラミングは、例えば、ユーザが再構成命令においてボタンを押すことによって、またはキー入力すること等によって、実行時間における実行可能なＦＩＰコード１３における明示的な命令またはシステムへの駆動命令３２の結果として発生し得る。
【０３４８】
再プログラミングが実行時間において動的な再プログラミングであると、実行データがアプリケーション実行の前に利用可能である場合、再プログラミングは実行時間においてスケジューリングされ得る。他の場合では、ＦＩＰをホストする再プログラム可能なハードウエア２２が満たされるようになる場合、少なくとも最近使用された（ＬＲＵ）法等のスキームが使用されて、どのカスタム命令がインプリメントされたままであるかを決定し得る。これは、実行時間モニタ２８から取られた実行時間統計２９から取られた情報によって重み付けされ得、その結果、より頻繁に使用されたカスタム命令は、スワップアウト（ｓｗａｐｐｅｄｏｕｔ）される可能性が最も低い。
【０３４９】
本実施形態では、簡単なメトリックが使用されて、新しいＦＩＰインプリメンテーションを有する再プログラム可能なハードウエア２２の再構成が有利であるかどうかを決定する。現在動作しているＦＩＰが特定の速度で実行し、そして新しくかつより高速なＦＩＰが置換するように提案されている場合、この新しいＦＩＰは、実行時間の低減が再構成時間よりも大きい場合、取り入れられるべきである。
【０３５０】
ソフトウエア関数ｆ（）を考慮すると、「通常」命令によってインプリメントされる場合、ソフトウエア関数は、実行にＣＳＷクロックサイクルを必要とし、各クロックサイクルは、各サイクル時間Ｔｓｗを有し、そしてカスタム命令としてインプリメントされた場合、実行にＣｃｉクロックサイクルを必要とし、各Ｃｃｉクロックサイクルは、サイクル時間Ｔｃｉを有する。ソフトウエア関数ｆ（）は、本実施形態のアプリケーションの１つの実行において、研究のもとでその期間中にＦ回呼び出され、および再プログラム可能なハードウエア２２のための再構成時間Ｔｒ（データを収集および解析するための時間を含む）とすると、ソフトウエア関数の実行時間ｔｓｗおよびカスタム命令の実行時間ｔｃｉは、以下のように与えられ得る。
【０３５１】
ｔｓｗ＝ＣｓｗＴｓｗＦ                                      （２）
ｔｃｉ＝ＣｃｉＴｃｉＦ                                      （３）
再構成比Ｒは、以下のように定義され得る。
【０３５２】
【数１０】
2005503680.tif 000008
従って、
【０３５３】
【数１１】
2005503680.tif 000009
より一般的には、ｎ個のカスタム命令の場合、再構成比Ｒは、以下のようになる。
【０３５４】
【数１２】
2005503680.tif 000010
再構成閾値ＲＴは、Ｒ＝１の場合に到達される。有益である再構成に対して、再構成比Ｒは、再構成閾値ＲＴを越えなければならない。すなわち、再構成比の分子によって表されたように、ソフトウエアにおいてＦＩＰコードを実行するためにかかった時間ｔｓｗは、ＦＩＰのためのカスタム命令を含む、再構成されたＦＩＰのＦＩＰコードを実行するためにかかった時間ｔｃｉに再構成時間Ｔｒを加えた時間よりも大きい。
【０３５５】
図１１は、再構成比Ｒに関する種々の異なるパラメータの影響をグラフィカルに示す。水平軸は、アプリケーションが実行される数Ｆを表す。垂直軸は再構成比Ｒを表す。
【０３５６】
最低の曲線（曲線Ａ）は、基本ＦＩＰを表す。ここで、ＣｓｗＴｓｗ＝ＣｃｉＴｃｉである。基本ＦＩＰのための再構成比Ｒは、再構成時間Ｔｒが０以下である場合、再構成閾値ＲＴを超えない。
【０３５７】
曲線Ｂおよび曲線Ｃは、１つおよび２つのカスタムをそれぞれ組み込むように再構成される基本ＦＩＰを表す。式（６）に与えられたような再構成比Ｒの一般式は、より多くのカスタム命令が含まれた場合、再構成閾値ＲＴがアプリケーションのより少ない数の実行を用いて到達され得ることを示す。より多くのカスタム命令が追加され、一般的な命令が除去される場合、再構成曲線の形状は、直接的ハードウエアインプリメンテーションの曲線に向かう傾向がある。
【０３５８】
曲線Ｄは、２つのカスタム命令を組み込むが、基本ＦＩＰのクロック速度の半分（すなわち、２Ｔｃｉ＝Ｔｓｗ）で動作するＦＩＰのための再構成比Ｒを表す。
【０３５９】
曲線Ｅは、２つのカスタム命令および基本ＦＩＰの再構成時間Ｔｒの半分を有するＦＩＰを表す。再構成時間Ｔｒを半分だけ低減することは、再構成曲線の最初の勾配を増加させ、再構成閾値ＲＴに到達するために必要とされるアプリケーション実行の数を低減する。全体の再構成が他の例証されたＦＩＰにおいて利用されてきたが、部分的な再構成が利用され得る。再構成時間Ｔｒは、再構成サイクル時間ｔｒおよび再プログラム可能なハードウエア２２を再構成するために必要な再構成サイクルｎｒの積として書き換えられ得る。部分的再構成を利用することによって、必要とされる再構成サイクルｎｒの数が低減され得［２６，３０］、従って、再構成比Ｒに関するその影響を低減させる。再構成サイクルｎｒの数はまた、キャッシュまたはコンテクストスイッチ［６，３１，３２］による高速再構成を支援する技術およびアーキテクチャにおける改良によって低減され得る。
【０３６０】
（インプリメンテーション）
本発明の実行時間管理システムの動作は、情報の暗号化および解読のための高度な暗号化標準（ＡＥＳ−Ｒｉｊｎｄａｅｌ）アルゴリズム［１７］のインプリメンテーションに関する例によって以下に説明される。ＡＥＳアルゴリズムは、変数のブロックおよびキー長を有する繰り返しブロック暗号である。本インプリメンテーションでは、ＦＩＰは１００ＭＨｚで動作することが想定される。あるいは、データ収集および解析は、ＦＩＰ実行とパラレルで実行され、それにより、任意の性能ペナルティを導入しない。
【０３６１】
ＡＥＳインプリメンテーションでは、最も頻繁に実行された手続きは、ＡＥＳ標準によって定義された手続きＦＦｍｕｌｘである。全ての手続き呼び出しの内、これらの呼び出しの７４％がＦＦｍｕｌｘに起因され得る。
【０３６２】
ＦＦｍｕｌｘ手続きのＪａｖａ（Ｒ）インプリメンテーションは以下に示される。
【０３６３】
【数１３】
2005503680.tif 000011
図１２は、Ｊａｖａ（Ｒ）オペコードにおける手続きＦＦｍｕｌｘの逐次的インプリメンテーションおよび基本オペコードの最適化として連鎖およびフォールディングオペコードを示す。
【０３６４】
左側の列は、手続きＦＦｍｕｌｘをインプリメントするために必要とされたＪａｖａ（Ｒ）オペコードを表す。本実施形態では、Ｊａｖａ（Ｒ）オペコードインプリメンテーションは、平均で２６．５クロックサイクルに、手続きプリアンブルおよびポストプリアンブルルーチンのためにさらに４クロックサイクルを加えたサイクルだけかかる。条件ブランチＩＦＥＱオペコードの結果に依存して、本インプリメンテーションは、実行するのに２５〜２８クロックサイクルかかる。
【０３６５】
右側の列は、連鎖および命令フォールディングする両方のオペコードによる最適化の結果を表す。オペコード連鎖は、一時的なレジスタに中間結果を格納することを含む。スタックから値をプッシュおよびポップする必要性を除去することによって、スタックによって課された逐次構造が除去される。次に、命令フォールディングが適用される。命令フォールディングは、いくつかのオペコードが結合されるか、または１つの命令にフォールディングされることを可能にする。このように、いくつかのスタックベースの命令が、１つのレジスタベースの命令に変換される。さらに、手続きＦＦｍｕｌｘが単一の命令によって置換されるため、手続き呼び出しのために必要なプリアンブルおよびポストアンブルルーチンを実行する必要性はもはやない。この最適化は、各アプリケーション実行において平均で約３０クロックサイクルから８．５クロックサイクルにクロックサイクルの数を低減する。
【０３６６】
図１３は、手続きＦＦｍｕｌｘのさらなる最適化を表す。本最適化では、カスタム命令は、データ依存性を利用することによってパラレルに実行される。図１３では、同じレベルの命令は、データ依存性を表す矢印を用いて、同じクロックサイクルで実行される。本インプリメンテーションは、複数の発行および予測された実行等のＶＬＩＷ／ＥＰＩＣアーキテクチャ［３３］のアイデアに従い、直接的ハードウエアインプリメンテーションに類似する。この最適化では、サイクル数は、６サイクルに低減される。
【０３６７】
上述の最適化を用いて、手続きＦＦｍｕｌｘのための元のソフトウエア機能は、３０サイクルから６サイクルに最適化され、それにより５倍の速度増加を生成した。
【０３６８】
図１４は、再構成比Ｒ対異なるキー幅を有するパラレルカスタム命令をインプリメントするＦＩＰによって暗号化された１２８ビットのデータブロックの数のグラフを示す。再構成計算は、Ｘｉｌｉｎｘ  ＸＣＶ１０００チップ（Ｘｉｌｉｎｘ  Ｉｎｃ．）上のＦＩＰインプリメンテーションの全体の再構成のための時間に基づく。
【０３６９】
再プログラム可能なハードウエア２２の再構成は、再構成比Ｒが１より大きい場合に有益であるということを式（６）から思い出すこと。図１４から、１２８ビット暗号キーの場合、１２８ビットのデータの約６５０ブロックは、再構成が有益である前に、処理されなければならないことが理解され得る。これは、約１０Ｋバイトのデータに変換する。暗号キーのサイズが増加する場合、再構成が次第により有益になることが理解される。１９２ビットキーの場合、再構成が有益になる前に約８．６Ｋバイトが処理されなければならない。そして、２５６ビットキーの場合、再構成が有益になる前に約７Ｋバイトが処理されなければならない。
【０３７０】
ＡＥＳ仕様［１７］は、いくつかのＡＥＳ関数をルックアップテーブルに展開することによって加速され得ることを提案している。７Ｇビット／ｓまでの速度が、このような目的のためのＸｉｌｉｎｘ  Ｖｉｒｔｅｘ−Ｅチップ（Ｘｉｌｉｎｘ  Ｉｎｃ．）におけるブロックＲＡＭを用いて報告されてきた［３４］。ＦＩＰのために設計されたカスタム命令はまた、このような技術の使用を行い得る。
【０３７１】
この点では、種々のＦＩＰインプリメンテーションがＡＥＳアルゴリズムを支援するように開発されてきた。キーのサイズおよびブロックのサイズが２５６ビットである場合、図１５は、これらのＦＩＰインプリメンテーションの相対的な性能をグラフィカルに示す。図１６は、これらのＦＩＰインプリメンテーションに対応する速度上昇を示す。
【０３７２】
ＡＥＳ１は、一般的ＦＩＰまたは基本的ＦＩＰにおいて未使用のオペコードに関連付けられたハードウエアを除去することによってカスタマイズされるが、任意のカスタム命令を含まないＡＥＳアルゴリズムの第１のＦＩＰインプリメンテーションである。
【０３７３】
ＡＥＳ２は、暗号化および復号化の両方を速度上昇させる３つのカスタム命令を組み込むＡＥＳアルゴリズムの第２のＦＩＰインプリメンテーションである。ＡＥＳ２は、上述のＦＦｍｕｌｘカスタム化および２つのさらなるカスタム命令を含む。これら３つのカスタム命令は、暗号化および復号化の両方を速度上昇させる。この改良は、暗号化に対して１．３倍および復号化に対して３．６倍である。新しいカスタム命令は、除去されるべきいくつかのオペコードの機能性をもはや使用されないオペコードで置換して、カスタム命令のためのより多くの領域を提供する。従って、トレードオフは、ＡＥＳ２がＡＥＳ１よりもあまりフレキシブルではないことである。なぜなら、ＡＥＳ１で実行可能であるいくつかのルーチンは、もはやＡＥＳ２上で実行可能ではあり得ないためである。
【０３７４】
ＡＥＳ３は、ＡＥＳ暗号化におけるさらなる改良を提供するＡＥＳアルゴリズムの第３のＦＩＰインプリメンテーションである。ＡＥＳ３は、暗号化のための内部ループを置換する新しいカスタム命令を組み込む。より多くのリソースは、ルックアップテーブルを用いることによって暗号化を速度上昇させるカスタム命令に与えられるが、ＡＥＳ２に追加された２つのさらなるカスタム命令は、この新しい命令のためのスペースを作成するために除去されなければならない。結果として、暗号化性能の改良は、ＡＥＳ１と比較した場合、５．２倍であるが、復号化性能はたった１．４倍である。しかし、このトレードオフは、ＡＥＳ２に導入された２つのさらなるカスタム命令がこの新しいカスタム命令のためのスペースを作成するために除去されなければならない。そのため、暗号化速度が改良されるが、これは、復号化速度を犠牲にする。
【０３７５】
ＡＥＳ４は、ＡＥＳ復号化の改良を提供するＡＥＳアルゴリズムの第４のＦＩＰインプリメンテーションである。ＡＥＳ４は、ＡＥＳ２を超えて５倍の復号化速度増加を提供するが、ＡＥＳ３に関して同様のトレードオフを有する新しいカスタム命令を組み込む。
【０３７６】
これらの結果は、再構成に対する戦略を提示する。暗号化が復号化よりもより頻繁に使用される場合、ＡＥＳ３が利用されるべきである。他方、復号化がより頻繁に使用される場合、ＡＥＳ４が利用されるべきである。使用に関する情報が利用可能でない場合、ＡＥＳ２が利用されるべきである。同様な最適化戦略が、実行時間条件が異なる時間で異なるＦＩＰインプリメンテーションを変化させ支援するアプリケーションに適用され得る。
【０３７７】
ＡＥＳアルゴリズムのインプリメンテーションのために、最初に、ＪＶＭ等の一般的なＦＩＰがＡＥＳアルゴリズムを実行するために使用される。設計時間において、ＦＩＰ設計者は、ＡＥＳアルゴリズムを実行を加速するためにカスタム命令を導入し得る。システムを展開した後、実行時間マネージャ１８における実行時間モニタ２８は、ユーザの実行パターンを記録する。実行時間モニタ２８は、ＡＥＳ復号化がＡＥＳ暗号化よりもより頻繁にそして大きいブロックサイズで使用されることを示すことを考慮すること。このような状況は、例えば、ユーザがブラウジングのためのバンキング情報をダウンロードする場合に発生し、取引のための比較的より小さいサイズのデータを再送信する。最適化解析器３０は、結果的にＦＩＰインプリメンテーションの最適化を要求する。カスタム命令は、適応ユニット３１によって作成され、ＦＩＰインプリメンテーションＡＥＳ４が作成される。次いで、実行時間マネージャが新しいＦＩＰインプリメンテーションに再構成することが有利であるかどうか決定する。
【０３７８】
（ＩＩＩ−ツール）
（デバッグツール）
デバッグツールは、ユーザが、クラッシュ（ｃｒａｓｈ）した場合、シミュレーションまたは実行中にコードを介してトレースする方法を提供する。いくつかの適応後、種々のＦＩＰ構成は、アプリケーションの実行の間の使用し得る。デバッグツールは、正確なＦＩＰ設計を介してトレースすることによってエラーを識別する場合に支援し、カスタム命令に拡張する能力を提供し、カスタム命令を生成するために使用される元のオペコードを明らかにする。図１７は、デバッグツールを図解的に示す。左のボックス（ボックスＡ）は、元のコードを含む。中心ボックス（ボックスＢ）は、適応の後の新しいコードを含む。右のボックス（ボックスＣ）は、ＦＩＰ構成情報１０および関連付けられた実行可能なＦＩＰコード１３を示す。デバッグの間、ユーザは、どのＦＩＰが実行しているか、そしてさらにどのオペコードがコードＡ等のカスタム命令を作成するために使用されるかを知る必要がある。
【０３７９】
（コンパイラツール）
図１８は、コンパイラツールを示す。コンパイラツールは、ユーザがアプリケーションコードを入力することを可能にし、アプリケーションコードをマシンコードにコンパイルする。次いでコンパイルされたコードは、プロファイルされ得、かつ検査されて、この結果、ＦＩＰがアプリケーションを実行するように最適化され得る。コンパイラツールは、インプリメントべきカスタム命令を提案するか、またはユーザがカスタム命令を作成することを可能にさせる。右手のポップアップボックスは、この特徴を示し、これにより、ユーザは新しいカスタム命令を作成することが可能にされ、新しい命令もまたコンパイラツールによって提案される。この命令は、カスタム命令ｎｅｘｔＮｕｍである。
【０３８０】
ＦＩＰ設計が受け入れ可能である場合、ＦＩＰ構成情報１０および関連付けられた実行可能なＦＩＰコード１３がＦＩＰインプリメンテーションに対して生成される。
【０３８１】
上述したように、コンパイラツールは、再構成を統計学的に決定するために使用され得る。本実施形態では、コンパイラツールはまた、ユーザがその再構成比Ｒおよび再構成が試みられる再構成閾値ＲＴを特定する手段を提供する。このコンパイラツールはまた、ユーザがプリフェッチおよび再構成戦略の点で実行時間環境を調整することを可能させる。
【０３８２】
このコンパイラツールはまた、ユーザがＦＩＰを最適化する場合の指標として働く情報を提供するための手段を提供する。例として、仕様基準は、（ｉ）ロードバランシング（例えば、ユーザは、加算器がその時間の６０％で使用され、乗算器がその時間のたった５％で使用される場合、より多くのリソースが加算器に集中されるべきであり、ＦＩＰの実行の速度を増加させる）、（ｉｉ）スループット（すなわち、単位時間当たりで生成された結果）、（ｉｉｉ）実行可能なＦＩＰコードのサイズ、および（ｉｖ）ＦＩＰ構成のサイズを含む。
【０３８３】
最後に、本発明は、その好適な実施形態において説明され、添付された特許請求の範囲によって規定されたような本発明の範囲から逸脱することなく多くの異なる方法で改変され得ることが理解される。
【０３８４】
さらに、本明細書中で引用された文書の全ての内容が参考として援用されることが理解される。
【０３８５】
（参考文献）
【０３８６】
【表１】
2005503680.tif 000012
【０３８７】
【表２】
2005503680.tif 000013
【０３８８】
【表３】
2005503680.tif 000014
【０３８９】
【表４】
2005503680.tif 000015
【図面の簡単な説明】
【０３９０】
【図１】図１は、本発明の好適な実施形態による、ＦＩＰ設計システムを図で示す。
【図２】図２は、基本命令プロセッサを示すスケルトンプロセッサテンプレート、スタックプロセッサへのスケルトンプロセッサのインスタンス化、およびスタックプロセッサのＨａｎｄｅｌ−Ｃ記述を示す。
【図３】図３は、スーパースカラプロセッサのスケルトンプロセッサテンプレートを示す。
【図４】図４は、本発明の実施形態による、ＦＩＰインプリメンテーションの実行可能なＦＩＰコードをコンパイルするための２つの可能なコンパイルパスを示す。
【図５】図５は、Ｘｉｌｉｎｘ  Ｖｉｒｔｅｘ  ＸＣＶ  １０００デバイス上でインプリメントされるＪＶＭの種々の命令の性能を示す。
【図６】図６は、本発明の実施形態としてインプリメントされたＦＩＰ  ＪＶＭのベンチマークスコアを含む、ＪＶＭのベンチマークスコアを示す。
【図７】図７は、本発明の実施形態による、ＦＩＰインプリメンテーションのために支援されたアクセス手続の数の関数として必要とされるｖｉｒｔｅｘスライスの数、およびＸｉｌｉｎｘ  Ｖｉｒｔｅｘ  ＸＣＶ  １０００デバイス上でインプリメントされる直接的なハードウェアインプリメンテーションを図で示す。
【図８】図８は、本発明の好適な実施形態による、ＦＩＰ管理システムを図で示す。
【図９】図９は、図８のＦＩＰ管理システムの１実施形態のＦＩＰアダプタを示す。
【図１０】図１０は、図８のＦＩＰ管理システムの別の実施形態のＦＩＰアダプタを示す。
【図１１】図１１は、図８のＦＩＰ管理システムにより用いられるように、再構成比Ｒに種々のパラメータが及ぼす影響を図で示す。
【図１２】図１２は、最適化として、Ｊａｖａ（登録商標）オペコードおよび連鎖オペコードにおけるＡＥＳアルゴリズムの手続ＦＦｍｕｌｘの連続的インプリメンテーションを示す。
【図１３】図１３は、手続ＦＦｍｕｌｘのさらなる最適化を示す。
【図１４】図１４は、異なったキー幅の並行カスタム命令をインプリメントする本発明の実施形態による、ＦＩＰにより暗号化された１２８ビットデータブロックの数の関数としての再構成比Ｒを図で示す。
【図１５】図１５は、ＡＥＳアルゴリズムのＦＩＰインプリメンテーションの相対的性能をグラフィカルに示す。
【図１６】図１６は、図１５におけるＦＩＰインプリメンテーションの相対的スピードアップを示す。
【図１７】図１７は、本発明の実施形態による、デバッグツールを示す。
【図１８】図１８は、本発明の実施形態による、コンパイラツールを示す。
【図１】
2005503680.tif 000020
【図２】
2005503680.tif 000021
【図３】
2005503680.tif 000022
【図４】
2005503680.tif 000023
【図５】
2005503680.tif 000024
【図６】
2005503680.tif 000025
【図７】
2005503680.tif 000026
【図８】
2005503680.tif 000027
【図９】
2005503680.tif 000028
【図１０】
2005503680.tif 000029
【図１１】
2005503680.tif 000030
【図１２】
2005503680.tif 000031
【図１４】
2005503680.tif 000032
【図１５】
2005503680.tif 000033
【図１６】
2005503680.tif 000034
【図１７】
2005503680.tif 000035
【国際公開パンフレット】
2005503680.tif 000036
2005503680.tif 000037
2005503680.tif 000038
2005503680.tif 000039
2005503680.tif 000040
2005503680.tif 000041
2005503680.tif 000042
2005503680.tif 000043
2005503680.tif 000044
2005503680.tif 000045
2005503680.tif 000046
2005503680.tif 000047
2005503680.tif 000048
2005503680.tif 000049
2005503680.tif 000050
2005503680.tif 000051
2005503680.tif 000052
2005503680.tif 000053
2005503680.tif 000054
2005503680.tif 000055
2005503680.tif 000056
2005503680.tif 000057
2005503680.tif 000058
2005503680.tif 000059
2005503680.tif 000060
2005503680.tif 000061
2005503680.tif 000062
2005503680.tif 000063
2005503680.tif 000064
2005503680.tif 000065
2005503680.tif 000066
2005503680.tif 000067
2005503680.tif 000068
2005503680.tif 000069
2005503680.tif 000070
2005503680.tif 000071
2005503680.tif 000072
2005503680.tif 000073
2005503680.tif 000074
2005503680.tif 000075
2005503680.tif 000076
2005503680.tif 000077
2005503680.tif 000078
2005503680.tif 000079
2005503680.tif 000080
2005503680.tif 000081
2005503680.tif 000082
2005503680.tif 000083
2005503680.tif 000084
2005503680.tif 000085
2005503680.tif 000086
2005503680.tif 000087
2005503680.tif 000088
2005503680.tif 000089
2005503680.tif 000090
2005503680.tif 000091
2005503680.tif 000092
2005503680.tif 000093
2005503680.tif 000094
2005503680.tif 000095
2005503680.tif 000096
2005503680.tif 000097
2005503680.tif 000098
2005503680.tif 000099
2005503680.tif 000100
2005503680.tif 000101
2005503680.tif 000102
2005503680.tif 000103
2005503680.tif 000104
2005503680.tif 000105
2005503680.tif 000106
2005503680.tif 000107
2005503680.tif 000108
2005503680.tif 000109
2005503680.tif 000110
2005503680.tif 000111
2005503680.tif 000112
2005503680.tif 000113
2005503680.tif 000114
2005503680.tif 000115
2005503680.tif 000116
2005503680.tif 000117
2005503680.tif 000118
2005503680.tif 000119
2005503680.tif 000120
2005503680.tif 000121
2005503680.tif 000122
2005503680.tif 000123
2005503680.tif 000124
2005503680.tif 000125
2005503680.tif 000126
2005503680.tif 000127
2005503680.tif 000128
2005503680.tif 000129
2005503680.tif 000130
2005503680.tif 000131
2005503680.tif 000132
2005503680.tif 000133
2005503680.tif 000134
2005503680.tif 000135
2005503680.tif 000136
2005503680.tif 000137
2005503680.tif 000138
2005503680.tif 000139
2005503680.tif 000140
2005503680.tif 000141
2005503680.tif 000142
2005503680.tif 000143
2005503680.tif 000144
2005503680.tif 000145
2005503680.tif 000146
2005503680.tif 000147
2005503680.tif 000148
2005503680.tif 000149
2005503680.tif 000150
【国際公開パンフレット（コレクトバージョン）】
2005503680.tif 000151
2005503680.tif 000152
【国際調査報告】
2005503680.tif 000153
2005503680.tif 000154
2005503680.tif 000155