JP3711206B2 - コンパイル方法 - Google Patents
コンパイル方法 Download PDFInfo
- Publication number
- JP3711206B2 JP3711206B2 JP34968698A JP34968698A JP3711206B2 JP 3711206 B2 JP3711206 B2 JP 3711206B2 JP 34968698 A JP34968698 A JP 34968698A JP 34968698 A JP34968698 A JP 34968698A JP 3711206 B2 JP3711206 B2 JP 3711206B2
- Authority
- JP
- Japan
- Prior art keywords
- tree
- data flow
- secondary processor
- source code
- computer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Description
【発明の属する技術分野】
本発明は、主プロセッサおよび2次プロセッサからなるプロセッサ・アーキテクチャに対する原始コードのコンパイルおよび実行に関するものであり、特に再構成可能な2次プロセッサを用いるアーキテクチャに関するものである。
【0002】
【従来の技術】
従来のPCにおけるペンティアム・プロセッサのような主プロセッサは、特定の計算タスクに最適化されることなく広範囲にわたる計算作業を取り扱うように適応されているという意味において、幅広い用途に対応している。従って、そのようなプロセッサは、並列サブワード・タスクのような計算処理集約的演算を効率的に取り扱うように最適化されていない。そのようなタスクが、コードの実行において重大なボトルネックとなる可能性がある。
【0003】
この問題を解決する1つの手法は、特定のアプリケーションに特に適応される集積回路の開発である。それらはASICとして知られている(ASICはapplication-specific integrated circuitを省略したもので、特定アプリケーション専用集積回路を意味する)。ASICに応用されているタスクに関する限り、処理性能は一般的に高いが、その構成対象となっていないタスクに関してはASICの性能は一般的に悪い。特定のICは、明らかに、特定のアプリケーションに対して構築することができるが、 コンピュータの演算に対して中心にないあるいはそのコンピュータの製作時に確立されていないようなアプリケーションに対して、それは望ましい解決策ではない。
【0004】
従って、必要に応じて異なるアプリケーションに関して最適化することができるようにするため、ASICが再構成可能であれば非常に役立つ。そのような装置に対するアーキテクチャの最も共通の形式は、設置場所でのプログラム可能なゲートアレイ(すなわちfield programmable gate arrayであり略してFPGA)あって、いかなる所与のアプリケーションに対しても適切な構造を持つように構成することができる洗練されたプロセッサ構造である。そのような構造は、適切な文脈で独立プロセッサとして使用することができるが、特にコプロセッサとしての使用に適している。
【0005】
そのような構成可能なコプロセッサは、主プロセッサの性能を向上させる潜在力を持つ。特定のタスクに関して、主プロセッサでの実行効率の悪いコードを抽出して、そのアプリケーションに関して最適化されたコプロセッサで一層効率的に動かすことができる。そのような「アプリケーション特有」2次プロセッサの継続的開発を通して、カスタムメイドのコプロセッサにとって困難なコードを抽出することによって性能を向上させる可能性が一層魅力的となる。一般的計算処理における特に重要な例は、画像処理におけるループ部分の抽出である。
【0006】
所望の効率利得を得るため、主プロセッサおよび2次プロセッサの間でコードをどのように分けるべきか可能な限り効率的に決定し、割り当てられたコード部分の最適な実行のため2次プロセッサを構成することが必要である。1つの手法は、コプロセッサ構造に対応付けるため、作成の際コードに目印をつけることである。IEEE Symposium on FPGAs for Custom Computing Machines, Napa, California, April 1995におけるChristian IseliおよびEduardo Sanchez両氏の"A C++ Compiler for FPGA custom execution units synthesis"には、プログラマによる初期コードの適切なタグ付けの後VLIW(すなわち非常に長い命令ワード)構造のFPGAに対するC++の対応付けを伴う手法が利用されている。この手法は、初期的に抽出すべきコードをプログラマが適切に選択することに依存している。
【0007】
別の手法は、初期コードを評価して2次プロセッサに向ける最も適切なエレメントを決定するものである。Int. IEEE Symposium on Engineering of Computer Based Systems (ECBS), Friedrichshafen, Germany, March 1996における"Two-Level Hardware/Software Partitioning Using CoDe-X"の中でReiner W. Hartenstein、Jurgen BeckerおよびRainer Kressの3氏は、初期コードのどの部分がコプロセッサに対する割り当てにふさわしく、どの部分が主プロセッサのため残されるべきかを評価するプロファイラを組み込むコードサイン・ツールを提唱している。この手法では、抽出されたコードが、後続の反復的プロシージャによってコプロセッサに対して対応付けされることができるように再構成可能コプロセッサ・アーキテクチャに対するCコードのサブセットのコンパイルが行われる。この手法は、2次プロセッサの使用を拡張するが再構成可能な論理の潜在性を十分に実現してはいない。
【0008】
別の手法が、バークレー大学のBRASS研究プロジェクトで提案されている。FCCM'97, Symposium on Field-Programmable Custom Computing Machines, April 16-18 1997, Napa Valleyにおける"Datapath-Oriented FPGA Mapping and Placement"においてTim CallahanおよびJohn Wawrzynek両氏が提唱した手法は、FPGA構造への原始コードの対応付けを援助するFPGAアーキテクチャを表すテンプレート構造を使用する(この手法は、現在、http://www.cs.berkeley.edu/projects/brass/tjc_fccm_poster_thumb.psによってWWWで参照できる)。原始コード・サンプルは、有向非巡回グラフ(すなわちdirected acyclic graphで以下DAGと略称される)として提示され、次にツリーに縮減される。他のものを含めてこのような基本的グラフ概念は、例えば、Michael Wolfe氏著"High Performance Compilers for Parallel Computing", pages 49 to 56, Addison-Wesley, Redwood City, 1996に記載されているが、DAGおよびツリーの定義の要点を以下に記述する。
【0009】
グラフは、ノード・セットおよび稜線セットから構成される。各稜線は、一対のノードによって定義される(またそれらのノードを接続する線として視覚的にみなすることもできる)。グラフは、有向または無向のいずれかである。有向グラフにおいては、各稜線は方向を持つ。グラフの範囲内である1つのノードからそれ自体へ戻る経路を定義することが可能であれば、グラフは循環的であり、そうでなければ、グラフは非循環的である。DAGは、有向かつ非循環的なグラフである。従って、DAGは階層的構造である。ツリーは、特別な種類のDAGである。ツリーは「ルート」と呼ばれる1つのソース・ノードを持つ。ツリーにおいてはルートからすべてのその他のノードへユニークな経路が存在する。ツリーにおいて稜線X−Yが存在すれば、ノードXはYの親と呼ばれ、YはXの子と呼ばれる。ツリーにおいては、「親ノード」は1つまたは複数の「子ノード」を持つが、子ノードは1つの親だけを持つことができる。一方、一般的DAGにおいては、子は1つ以上の親を持つことができる。子を持たないツリーのノードは葉ノードと呼ばれる。
【0010】
Christopher W.Fraser and David R. Hanson, Benjamin/Cummings Publishing Co., Inc., Redwood City, 1995, especially at pp 373407出版の"A Retargetable C Compiler Design and Implementation"において、Tim CallahanおよびJohu Wawrzynek両氏は、Iburgと呼ばれる一般に利用可能なソフトウェア・ツールである"ツリー・カバー"プログラムの使用によって上記のようなツリーをFPGA構造に合致させるアプリケーションを紹介している。Iburgは、原始コード・ツリーを入力として取り、この入力を目標プロセッサ上の命令に対応する部分に細分する。この細分化部分はツリー・カバーと呼ばれる。この手法は、細分化部分に関して許容され得るユーザ定義パターンによって本質的に左右されるもので、比較的複雑である。すなわち、この手法は、ツリーの最下部からパターンとの合致を分析し、すべての可能な合致を記録し、次に、どの合致が最低コストを提供するかを判断するため最上部から逐次下降するパスを実行する。この手法は、やはり、あらかじめ定義された許容可能なパターン・セットという形式の大きな初期的制約を必要とし、再構成可能なアーキテクチャの潜在性を完全に実現していない。
【0011】
【発明が解決しようとする課題】
このように、入力コードの実行において主プロセッサおよび2次プロセッサからなるシステムの性能効率を最大にする観点から、2次プロセッサへのコードの割り当ての最適な選択が可能で、抽出されたコードを実行させるため可能な限り効率的に再構成することができるような、主プロセッサおよび2次プロセッサを含むシステムの計算処理効率を一層向上させる技術および手法の開発が必要とされている。
【0012】
【課題を解決するための手段】
本発明は、主プロセッサおよび2次プロセッサに対する原始コードをコンパイルする方法を提供する。該方法は、原始コードからのデータフローの選択的抽出、抽出したデータフローのツリーへの変換、1つのツリーを別のツリーへ変換させるための最低編集コスト関係を決定するためのツリー相互の合致の分析、上記最低編集コスト関係に基づくデータフローの1つまたは複数グループの決定ならびに各グループ毎にそのグループにおける各データフローをサポートすることができる包括データフローの作成、該包括データフローの使用による2次プロセッサのハードウェア構成の決定、2次プロセッサに対する原始コード呼び出しへの上記データフロー・グループの置き換え、および、残りの原始コードの主プロセッサに対するコンパイルを含む。
【0013】
この手法によって、2次プロセッサ・アーキテクチャの必要条件を十分考慮しながら、(あらかじめ定められたテンプレートへの対応付けのような)適合性の事前判断を必要とせずに、2次プロセッサへの割り当てのための原始コード・データフローの最適な選択が可能となる。上記最低編集コスト関係を2次プロセッサのアーキテクチャに従って決定し、2次プロセッサの対応する再構成のハードウェア・コストを表すことも可能である。最低編集コスト関係がツリーの分類のため最低編集距離分類法で表現されるとすれば、上記方法は特に効果的である。
【0014】
包括データフローによってサポートされるグループにおける各データフローをサポートするため原始コードの実行の間二次プロセッサの再構成が必要とされるので、二次プロセッサのハードウェア構成は原始コードの実行の間二次プロセッサの再構成を可能にする。このようにして、該方法はその最も役立つアプリケーションを見出す。従って、二次プロセッサはアプリケーション特定の命令プロセッサであることも、また、プロセッサ・ハードウェアが(本明細書の末尾の補足説明に記載のCHESSアーキテクチャのような)FPGAであることもできる。
【0015】
本発明の一つの側面において、1つのグループの包括データフローは、そのグループにおけるすべてのデータフローを相互に近似対応させ、次にマージさせることによって計算される。
【0016】
包括データフロー構築の別の手法は、有向非循環グラフとしてデータフローを作成し、有向非循環グラフの葉ノードとルートの間のクリティカル・パスに存在しないリンクの除去によってそれらをツリーに縮減するものである。ここで、クリティカル・パスとは、最も多い数の中間ノードを通過する2つのノード間の経路である。二次プロセッサ・ハードウェアにとって一層適切であれば(例えば、二次プロセッサの演算のタイミングに対してより敏感な基準が見出されるならば)別のクリティカル・パスの基準を適用することもできる。
【0017】
包括データフローの作成の後更に別のステップを上記方法に含めることができる。このステップでは、包括データフローが原始コードから抽出された更なるデータフローと比較され、包括データフローと十分近似していれば、それらは包括データフローに加えられる。このことにより、二次プロセッへの割り当てにふさわしい原始コードにおけるコードの一層大きい部分またはすべてを二次プロセッサに割り当てることができる。
【0018】
上述の手法において、有向非循環グラフがツリーに縮減された後、削除されたリンクは保管され、グループのツリーの包括データフローへのマージの後包括データフローに元通り差し込まれる。
【0019】
【発明の実施の形態】
本発明は、主および二次プロセッサを含むアーキテクチャに対する原始コードのコンパイルに適応される。そのようなアーキテクチャの例が図1に示されている。主プロセッサ1は、パーソナル・コンピュータのペンティアムIIプロセッサのような従来技術の汎用プロセッサである。二次プロセッサ2および(オプションとして)4は主プロセッサから呼び出しを受け取りそれへ応答を返す。各二次プロセッサ2、4は、主プロセッサによって効率的に取り扱われない原始コードの部分を取り扱うことによってこのアーキテクチャの計算処理能力および効率を増加させるため備えられる。ここでオプションとされている二次プロセッサ4は、(JPEG、DSPなどのような)特定の機能を取り扱うように構成されている。すなわち、このコプロセッサ4の構造は、特定の頻繁に使われる機能を取り扱うように製造業者によって決定される。そのようなコプロセッサ4は、本発明の特定の主題ではない。
【0020】
対照的に、二次プロセッサ2は、特定の機能のためあらかじめ最適化されてはいないが、その代わり、主プロセッサによって効率的に取り扱われない原始コードの部分の取り扱いを改善することができるように再構成可能なものとされている。二次プロセッサ2はアプリケーション特定構造という利点を持つ。従って、二次プロセッサ2は、Xilinx4013またはXilinx4000シリーズの他のメンバのような従来技術のFPGAでよい。フィールド・プログラム可能な算術アレイと呼ばれる代替的クラスの再構成可能な装置が本明細書の末尾の補足説明に記述されている。そのような二次プロセッサは、当該アーキテクチャによって実行されるべきアプリケーションに関する原始コードの所望の部分を取り扱う際計算処理効率を向上させるように構成することができるものである。
【0021】
当該コンピュータ・アーキテクチャには、主プロセッサ1によってアクセスされ、特定タイプの二次プロセッサ2については二次プロセッサ2によってアクセスされるメモリ3、および入出力経路5が含まれる。入出力経路5は、(例えばプログラミングによって)ユーザがプロセッサと対話することを可能にし、また、プロセッサがすべての他のコンピュータ装置6と対話することができるようにするために必要なすべての更なる入出力経路およびハードウェアを表している。
【0022】
本発明は、主プロセッサ1と二次プロセッサ2の間の原始コードの最適化された分割に特に適していて、この分割によって、二次プロセッサの最適構成が原始コードに埋め込まれたアプリケーションの当該アーキテクチャによる取り扱いを最適化することを可能にする。本発明は、二次プロセッサにおいて使用されるコードの選択および抽出に極めて役立つ。
【0023】
本発明の1つの実施形態に従ってとられる手法が図2に示されている。プロセスへの初期入力は原始コード部分である。これは原理上いかなる言語でもよい。本例はC言語で実施されているが、本明細書に記述される技術を他の言語で適合する方法は当業者に容易に理解されることであろう。例えば、原始コードはJavaバイト・コードでも可能である。Javaバイト・コードがそのように取り扱われることができるならば、図1のアーキテクチャは、インターネットから原始コードを直接受け取りそれを実行するように特に適応することができるであろう。
【0024】
図2に示されるように、プロセスの第1のステップは、二次プロセッサ2によって実行される適切なる候補コードの識別である。典型的には、原始コードに対するデータフロー分析を実行し、選択されたコード行によって提示されるデータフローの適切な代表表現を構築することによって、このステップは実行される(ほとんどのプロセスにおいてこのステップの前にコードの手動プロファイル設定が行われる)。これは、一般にコンパイルする際の標準的技術であり、二次プロセッサへの応用は、例えば、Athanas氏ら著の"An Adaptive Hardware Machine Architecture and Compiler for Dynamic Processor Reconfiguration"(IEEE International Conference on Computer Design, 1991, pages 397400)に記載されている。
【0025】
本発明において採用する手法は、選択されたコードのデータフローを表現するDAG(すなわち有向非循環グラフ)を構築するものである。この方法の利点は、データフローの抽出のために適切に構成されたコンパイラ下部構造を使用することである。適切なコンパイラ下部構造の1つは、スタンフォード大学によって開発されたSUIFである(SUIFに関する文書はhttp://suif. stanford.edu/によってWWWで参照できる)。SUIFは、特に1つ以上のプロセッサからなるシステムを含む高性能システムに対するコンパイラ研究のため案出されたものである。標準的SUIFユーティリティを使用してCコードをSUIFに変換することができる。当業者がSUIFを使用してDAGを構築する簡単なプロセスは、SUIFのセクションに対してデータフロー分析を実行し、次に分析の結果を記録することである。
【0026】
原始コードからのDAGの抽出は従来技術のステップである。当該プロセスにおける次のステップは、図2に示されるように、これらDAGのツリーへの変換である。このステップは、二次プロセッサ2による実行のためのコードの最適な選択を行う際の重要な因子である。DAGは複雑な構造であり、効果的に分析するのが難しい。DAGのツリーへの縮減によって、ハードウェアへの対応付けを決定する際に重要なデータフローの諸局面を保持しながら、分析的アプローチの効率を大幅に向上させるように構造を十分単純化することが可能とされる。
【0027】
DAGのツリーへの縮減は、上記引用の"High Performance Compilers for Parallel Computing"の特に56から60ページに記述されている。引用文献で使用されているものとは異なる用語が本明細書において使用されるが、以下に示すように用語は同等である。本発明で構築されるツリーのタイプは、引用文献で言及されている「スパニング・ツリー」に匹敵する。
【0028】
DAGのツリーへの縮減において採用される好ましい手法は、葉ノードとルートの間のクリティカル・パスにないリンクの除去である。この点は図3に示されている。ノードAとノードBの間のクリティカル・パスは、本発明の第1の実施形態において、最大数のノードを通過する経路として定義される。DAGは定義によって非循環的であるので、この基準に合致するように明確な経路を定義することができる。同じ最大数のノードを持つノードの間の異なる経路が存在する可能性があるが、それらの経路はすべてツリー構築の目的を満たすものであろう。これらの経路の間で任意の選択を行うことは有効なアプローチであるが、原始コードの対応付けの成功の鍵は、タイミング情報に依存するスケジューリングである。従って、代替的「クリティカル・パス」の間の選択を行う必要がある場合は、(経路におけるノードによって表される演算の各々を実行するためにかかる時間という観点から)最も長い時間がかかるものを選択することが望ましい。後述されるように、タイミング情報に一層直接基づく代替アプローチを採用することができる。また、そのような選択を行う際一貫したアプローチを採用することが望ましい。そうしない場合、本質的に類似したDAGから形態的に異なるツリーが派生する可能性がある。
【0029】
クリティカル・パス基準というこの第1の実施形態を適用する際に取られるプロセスは次の通りである。第一に、あらゆる葉ノードに関して、ルート方向のあらゆる可能な経路が追跡される。DAGは有向グラフであるので、これは簡単明瞭である。上述のように、各葉ノードに関して、最も大きい数のノードを持つ経路が選択され、同じ最大数のノードが検出されれば、そのうちの1つが選択される。これが当該葉ノードに関するクリティカル・パスである。選択されなかったすべての他の経路は、出発点に最も近いそれらの稜線において削除される。この削除される稜線は、副次的リンクと呼ばれる(これは参照Wolfe氏文献における"交差リンク(cross link)"と同じ意味である)。ツリーは、クリティカル・パスの集合から成り、副次的リンクを含まない。副次的リンクは別に記憶される。副次的リンクは抽出された原始コードが二次プロセッサ2に対応付けされる時必要となるが、どの原始コードが二次プロセッサにマップされるべきかを決定する際には使用されない。
【0030】
当然のことであるが、クリティカル・パス基準を使用することなくDAGからツリーを構築することは可能である。クリティカル・パスの使用には特別の利点がある。特に、副次的リンクとしてクリティカル・パスにない交差リンクの除去は、スケジューリングに対する影響をほとんど及ぼさないが、別のアプローチを取る場合、削除される交差リンクは、タイミング従ってスケジューリングにかなりの影響を及ぼす可能性がある。クリティカル・パス基準の使用は、ハードウェアへの対応付けという文脈においてDAGの臨界的特性を可能な限り表現するツリーの構築を可能にする。
【0031】
図3は、上述のプロセスの適用を示している。原始コード11は、二次プロセッサ2による実行について考慮される3行を示している。DAG12は、有向非循環グラフとしてこれら3行のコードを示していて、ルート126(変数e)および入力としての葉ルート121、129および130が含まれている。
【0032】
所与の葉ノードからルートへの各経路を評価し各経路におけるノードの数を比較することは簡単明瞭である。ノード129(整数値2)からは、ノード122、123、124および125を通過するただ1つの経路がある。これは葉ノード129からルート・ノード126へのクリティカル・パスであり、ツリーに残される。ノード121(現在のケースでは以前の演算の結果でありcと指定されている)からは2つの経路がある。第1の経路はノード122、123、124および125を通過し、第2の経路はノード127、128および125を通過する。第2の経路より多くのノードを通過するので、第1の経路がクリティカル・パスであり、第2の経路は上述のように削除される。
【0033】
残りの葉ノード130(変数b)にも2つの経路が存在する。1つの経路はノード123、124および125を通過し、もう一方はノード127、128および125を通過する。いずれもノードの数は同じであり、クリティカル・パスとして選択することができる。しかしながら、上述のようにタイミングおよび形態上の一貫性の観点から、最善の選択を行う更なる規則を設けることが望ましい。そのような更なる規則は、例えば、関連するハードウェアに基づいて決定されるものである。ここでは、第2の経路が選択される。
【0034】
とるべき次のステップは、DAG12から選択されたクリティカル・パスに基づいてツリー14を構築することである。これは、すべての非クリティカル・パスを、出発点に最も近いそれら稜線において(すなわちクリティカル・パスに含まれない出発点に最も近い稜線において)切断することによって実行される。考慮すべき第1の非クリティカル・パスは、ノード121からノード127、128および125を通過してルート126へ達する経路である。これは、ノード121および127の間の稜線上で切断することができる。すなわち、ツリーにおいて、これは、(121に対応する)ノード141と(127に対応する)ノード147の間の稜線151の除去によって表現されている。この部分は副次的リンクとして別に保管される。考慮すべき他の非クリティカル・パスは、ノード130からノード123、124および125を通過してルート126へ到達する経路であり、これは、ノード130とノード123の間の稜線上で切断することができる。この切断された稜線もまた副次的リンクとして記憶される。
【0035】
単純な式と同様にDAGにおいてツリーに縮減できるように条件文を表すこともできる。図8にその1つの例が示されている。これは、
If(X < 2)
a=b
else
a=1
という行のデータフローを表現するDAGであり、変数および整数ノード181、182、183および184に加えたマルチプレクサ・ノード185および"less than"演算ノード186を示す。DAGとして表現され得る原始コードに関して本明細書に示される手法を使用することが可能である点は当業者に認められるであろう。
【0036】
残されるツリー構造(このケースではツリー14)は、後述されるように、どの原始コードが二次プロセッサ2に対応付けされるべきかを決定する際に使用できる非常に簡単な構造である。上述の技術が、実施が簡単であるので、DAGをツリーに変換するため特に適した技術であり、アプリケーションの観点から汎用的であり、クリティカル・パスの使用を通して(各ノードが単一計算処理エレメントを表現すると仮定して)最大数のノードをもつ経路を包含するので統合されるべき計算処理エンジンの最大「深度」を維持する。当業者に認めらように、DAGをツリーに変換する際にどの稜線が削除されるべきかを決定する代替的手法を採用することも可能である。DAGからツリーへの縮減プロセスの1つの代替実施形態は、あらゆるノードにタイミング基準の加重(例えば対応する計算処理エレメントを実行するために必要な時間の長さに基づく加重)を割り当て、 次に、各経路の累積加重値を比較し、例えば最大累積加重値に基づいて経路を選択してツリーを定義する。二次プロセッサ2のタイミング・パラメータが実用上臨界的因子である場合、特にタイミング依存性が数えらるモードにほとんど関係しない場合(例えば加算より時間のかかる乗算が何度か行われるような構造の場合)、この手法は一層適しているかもしれない。
【0037】
コンパイル・プロセスにおける次のステップは、図2に示されるように、入力としてツリーを取得し、二次プロセッサ2のための原始コードの選択を決定することである。図2に示されるように、このステップは一連のサブステップから成る。第1のサブステップは、候補データフローから作成されるツリーの分析および分類である。これは重要な独創的ステップであり、以下に詳細に記述する。
【0038】
この段階でのコンパイル・プロセスの目的は、原始コードに基づいた候補データフローのどれが二次プロセッサによる実行のために最善の選択であるかを可能な限り効果的に決定することである。これは、二次プロセッサのハードウェア特性に非常に依存する。各データフローに対して同じハードウェア代表を使用できるほどすべてのデータフローが類似している場合、二次プロセッサ2への原始コードの対応付けは極度に効率的に行うことができる。従って、二次プロセッサへの対応付けのための候補データフローの効果的選択は、相互に十分類似しているデータフローのセットを見出すことによって実施することができる。これは、候補データフローから作成されるツリーを分析し分類することによって達成される。
【0039】
本発明のこの実施形態において使用される強力なツリー合致技術は、カナダ西オンタリオ大学のKaizhong Zhang氏によって提唱されたツリー合致アルゴリズムである。これは同氏著"A Constrained Edit Distance Between Unordered Labelled Trees"(Algorithmica (1996) 15:205-222, Springer Verlag)に記載されていて、カナダ西オンタリオ大学によってツール・キットとして提供されている(このツール・キットは、インターネットを通じてftp://ftp.csd.uwo.ca/pub/kzhang/TREEtool.tar.gzから入手することができる)。複数ツリー間の類似性を決定するその他の代替ツリー合致手法を利用することができる点は認められることであろう。本発明のこの実施形態において使用されるツリー合致手法を以下に記述する。
【0040】
Zhangアルゴリズムの動作原理は以下の通りである。2つのツリーは、動的プログラミング技術を通してノード毎に比較される。この技術は、ある1つのツリーを他のツリーへ変換するために必要な編集演算を最小限にとどめるものである。このような変換のコストを編集コストと呼ぶ。連続的に大きくなるサブツリーの編集コストが相互比較され、検出される最小コストの記録が保持される。計算処理構造は、再帰的動的プログラムの構造として特徴づけられる。再帰的動的プログラムは、作業用動的プログラミング格子を使用してコンポーネント・サブツリーの距離を計算し、中心格子のその結果を記録する。
【0041】
利用できる編集演算は、挿入、削除および置き換えである。これら演算は、図4に示されている。図4の(a)には、5つのノードを持つツリー151および6つのノードを持つツリー152が示されている。2つのツリーの構造は、ツリー151のノード3およびノード5の間に1つのノードを追加しても同一である。この新しいノードはツリー152の構造を形成する。従って、ツリー151のツリー152への変換はこのノードの挿入によって達成され、ツリー152のツリー151への変換はこのノードの削除によって達成される(補足説明で記述されるCHESSアーキテクチャでは、ハードウェアにおいて"削除"は1単位のアレイの"バイパス"によって表され、これは、アーキテクチャ上設計された極端に低いコストの1例である)。図4の(b)においては、2つのツリー151および152は同じ構造を持つが、2つのノード3は各ツリーにおいて異なるタイプの演算を表している。従って、一方から他方へツリーを変換させる際ノード3の置き換えが必要である。あらゆるノードは"ラベル"を必要とする。ラベルは、可能な種々のタイプのノードの間のノード・タイプを識別するためノードに付けられたタグである。
【0042】
前述のように、これらの編集演算の各々はコストを持つ。コストによって代替的選択が可能にされる。例えば、いくつかのアーキテクチャにおいては、挿入および削除、あるいは置き換えによって同一の結果が達成される可能性がある。これらの異なる選択肢のコストは比較することができる。
【0043】
このアルゴリズムによる2つのツリーの比較の結果、ノード・ペア(t1,t2)というリストが作成される。ここで、t1は第1のツリーに属し、t2は第2のツリーに属する。形成されるペアの各々は、2つのツリーにおける類似したポイントの識別を構成し、t1およびt2が相互に対応することを示唆する。これらペアのリストは、比較されるツリーのいずれかを含むことができるツリーの骨格を定義する。この骨格において、第1のツリーを第2のツリーに変換するため、各ノードt1は、それぞれのt2と置き換えられなければならない。対応のないノードは、それらが属するツリーに従って挿入または削除されなければならない。このようなペアのリストに関して、編集距離が定義される。これは、一方から他方へツリーを変換させるために必要な複数ペアについて累積される編集コストの最小値である。このアルゴリズムは、2つのツリーの間の編集距離、および、その編集距離を達成する変換セットを決定するために考案されている。代替的変換法も可能であるが、それらはより高い累積編集コストを持つであろう。
【0044】
編集コストに基づいて編集距離を計算する価値は、1つのツリーを表現している構成から対応関係にある別のツリーを表現している構成に二次プロセッサを再構成する際の"ハードウェア・コスト"を表す編集コストを選択することが可能であることである。この"ハードウェア・コスト"は、典型的には、第1の構成を所与として第2の構成を達成するために必要とされる二次プロセッサ資源の測定量である。 この点は、例えば、使用される装置の追加領域という観点から考慮されることがある。これらのコストは、二次プロセッサ・ハードウェアの特性によって決定されるであろう。異なるタイプのハードウェアに関しては、挿入、削除および置換演算の物理的実現は異なるであろう。補足説明に記述される再構成可能なCHESSアレイに関しては、"バイパス"演算が最小コストを含み、加算(add)と減算(sub)の間の置換が低コストを持ち、乗算(mul)と除算(div)の間の置換が高価である。
【0045】
上述のように、2つのツリーの間の編集距離を構築することができる。しかしながら、そのためには更に以下のステップを必要とする。Zhangアルゴリズムまたは同等の手法を使用して、一組のツリーのそれぞれの間の編集距離を示すための分類法を確立することができる。このような分類法の1例が図5に示されている。ツリーの各葉ノード161は、DAGから抽出される候補ツリーを表現し、各中間ノード162は編集コストを表現する。ツリーは、葉ノードの各ペアの間のユニークな経路を提供する。ある1つのペアの2つの葉ノードの間の編集距離は、この経路上の各中間ノードで提供されるコストの合計によって把握される。例えば、ツリー#4、ツリー#5またはツリ#6を表現している葉ノードのどのペアの間の編集距離も6である。しかし、ツリー#1とツリー#4の間の編集距離は、12、221、107、50および6という値をもつ中間ノードの合計の496である。
【0046】
この分類法は、ツリーの間の変換を行うために必要とされる編集演算の数を示してしる。このような分類法は、候補ツリーの間の変位の度合いに関する測定基準として使用することができるので、価値あるツールである。このように、このような分類の作成によって、以下に記述するように、どのツリーが一緒にまとめることができるほど類似しているかあるいはあまりにも離れているかを容易に決定することができる。これは、編集距離しきい値の設定によって行われる。複数ツリーのグループ内のあらゆる可能なツリーのペアの各々の間の距離が編集距離しきい値より小さい場合、それらツリーは統合のため選択される。編集距離しきい値の値は任意であり、システムの性能を最適化するため特定の主および二次プロセッサの文脈の観点から相応の技術者によって選択されることができるものである。
【0047】
複数ツリー・グループの統一の利点は、グループ全体について共通のハードウェア構成を使用することができ、各ツリーの機能をサポートする点である。 小待ち時間部分的再構成メカニズムが二次プロセッサに対して利用できるCHESSのようなアーキテクチャについては、統一は特に適切である。一つのツリーの機能をサポートする構成から別のツリーの機能をサポートする構成に変更するため再構成が必要とされるが、これらのツリーの間の編集距離が編集しきい値より決して大きくないので、必要とされる再構成の程度が共用可能な範囲内にあることは既知となっている。複数ツリーのグループは、すべてのコンポーネント・ツリーの表現を含む"スーパーツリー(上位ツリー)"の構築によって統一される。スーパーツリーは、作成された後、以前に削除された副次的リンクの再挿入によって、原始コードから抽出された対応DAGの各々の表現に変換されることができる。次に、完全なスーパーツリーからハードウェア構成が決定される。スーパアーツリーの構築を以下詳細に記述する。
【0048】
図6は、指定された編集コストしきい値の範囲に入るツリー・グループ(このようなツリー・グループを以下クラスと呼ぶ)からスーパーツリーを構築するステップを示している。ツリー171、172および173は、すべて一緒にスパーツリー170に対応付けされることができる。例えばツリー171をサポートする構成からツリー171をサポートする構成へハードウェア構成を変更するために必要な再構成は、2つのツリーの間の編集距離が編集しきい値より小さいので、実際に実現するに十分な範囲にある。
【0049】
スーパーツリー構築アルゴリズムのC言語プログラムは本明細書の参考資料として提供される。以下、図9および図10を参照しながら、このアルゴリズムの関数を記述する。
merge:
最大数のノードを持つクラスの中のツリーが、最初のマージ・ツリーとして選択される。等しい数のノードを持つ複数のツリーがある場合、任意の選択を行うことができる。残りのツリーは、ソース・ツリーと呼ばれる。
【0050】
各ソース・ツリーに対して、以下の演算が適用される。
(本実施形態においてZhangアルゴリズムおよび二次プロセッサ・アーキテクチャから決定される編集コストに基づいて)計算されたマージ・ツリーとソース・ツリーの間の対応関係から、スーパーツリーが次のように構築される。
1. 最初に、対応付けされたノードのうちルートに最も近いノードが考察される。
2. ソース・ツリー演算(source演算)が、対応するマージ・ツリー演算(merge演算)に連結される。
3. ソース演算の子演算の各々に関して、
a. 子が対応付けされていれば、ソースの子に関してステップ2に戻る。
b. 子が対応付けされていなければ、その子がルートであるサブツリー(ソース・サブツリー)になんらかの対応関係あるか否か検討する。
i. 更なる対応関係がない場合、対応するマージ・ツリー・ノードの下でマージ・ツリーにマージするためそのソース・サブツリーを採用する。
ii. ソース・サブツリーの内部に更なる対応関係がある場合、次のようにサブツリーを接続する。
a. この下位の対応関係のマージ演算が既に対応付けされたサブツリーの外側にあるならば、対応付けされたソース演算をソース・ツリーから削除する。この段階には再帰動作が存在する。すなわち、対応付けされた子が既に処理されている場合、さもなければクロス・ツリー・リンクであるものを削除することが、なすべきことのすべてである。
b. これは図9および図10に示されている。この下位対応関係のマージ演算が既に対応付けされたサブツリーの範囲にあるならば、すべての内包された下位対応関係に関して最も小さい共通の先祖が検出されるまでマージ・ツリーをさかのぼる。最も小さい共通の先祖は、ソース・マッピングのすべてを含む最初のノードである。次に、最小共通先祖親の子として未対応ソース・サブツリーのソース演算を連結することによって、また、現在時サブツリーにおいて最も近い対応付けされたソース演算のすぐ上の未対応ソース演算の子として最小共通先祖を連結することによって、未対応ソース・セグメントがマージ・ツリーに対応付けされる(この場合、"最も近い対応付けされたソース演算"はソース・ツリーの未対応付けセグメントの下方終端を区切るもので、現在時対応関係のサブツリーの範囲内にある対応付けされたノードである。すなわち、対応付けされていないソース・ノードの親はマージ・ツリーの最小共通先祖を子として採用する−この逆も真である)。
【0051】
混ぜ合わされたツリーのペアは、新しいマージ・ツリーを形成する単一ツリーに正規化される。クラスの中のすべてのソース・ツリーがマージ・ツリーの範囲内に含まれるまでプロシージャは継続する。この結果がスーパーツリーである。
【0052】
このプロセスが図9および図10に示されている。図9の(a)は、マージ・ツリー201およびソース・ツリー202という2つのデータフロー・ツリーを示す。比較アルゴリズムによって作成されたノード間の3つの対応関係が存在する。残りのノードは適切に挿入される必要がある。上述のように、最初のステップは、ルートに最も近い対応付け済み演算を検討することである。このケースではルートである。これらの演算Aは連結される。
【0053】
この後、ソース・ツリーにおけるAの子ノードが検討される。ノードBは、対応関係を持たないし、対応関係のあるノードのいずれの先祖でもない。従って、A:Aの子としてマージされる(図9の(b)参照)。その他の子ノードA、Cは(マージ・ツリーのDおよびEに対応するDおよびEという)子孫の対応関係を持つ。両方の関連マージ演算は、(両者はAの子孫であるので)既に対応付けされたサブツリーの範囲にある。従って、上記3(b)(ii)(b)に記述のステップに従う必要がある。対応付けされたマージ演算DおよびEの両方を含む最小共通先祖はXである。かくして、図9の(b)に示されるように、ソース・ツリーのCは、(Xの親である)A:Aの子およびXの親としてマージ・ツリーに連結される。マージ(合併)は、ソース・ツリーの残りのノードの連結またはマージによって完結するが、これらすべてのステップは簡単明瞭である。
【0054】
結果として生成されるスーパーツリー203が図10の(a)に示されている。このサウーパーツリーは、図10の(b)に示されるように、更なる候補ソース・ツリー204とのマージのためのマージ・ツリーの役目を果たす。このケースでは、ソース・ツリーの各ノードはスーパーツリーのノードに対応付けされている。従って、マージは全く簡単明瞭であり、連結(すなわち置換)からのみ構成される。このようなプロセスがすべての候補ツリーがスーパーツリーにマージされるまで続く。
【0055】
この段階で、原始コードの比較的多い部分が二次プロセッサに割り当てられることを可能にするステップを進めることができる。原始コードは、スーパーツリーの包含のため選択されるその他のDAG(例えばコードの最も計算処理集約的場所の1つに位置していないため考慮されなかったDAG)を含む。しかしながら、このようなDAGは、適切に適合された二次プロセッサ上で実行されるならば、主プロセッサ上より迅速に実行できるかもしれない。従って、そのような残存DAGを後方対応付けプロセスによってスーパアーツリーと比較することには利点がある。Iburgのような従来型後方対応付け技術から導出されるプロセスをこの目的のため利用することができる。
【0056】
しかし、最も利点のある手法は、再びZhangのアルゴリズムの使用に戻り、原始コードの更なる候補ツリーをスーパーツリーと比較するものであるが、但し今回は一層低い編集コストしきい値を使用する。そのようなDAGから抽出されたツリーが直接スーパーツリーに対応付けされる場合、または、そのような対応関係に関する編集コストが一定の最小限の水準以下になる場合、必要に応じて、これらのDAGのコードを二次プロセッサに割り当て、スーパーツリーを修正することができる。この後方対応付けプロセスによって付加されるそのようなデータフローに関連する制御情報もまた記憶される必要がある。
【0057】
次に、このスーパーツリーに基づいて、DAGからツリーへの変換の際に削除された副次的リンクを挿入することは簡単である(後方対応付けによって付加されたDAGもここで挿入される)。 結果として生成される構造は、クラス・データフローであり、そのクラスのDAGに存在するすべての情報を表す。(例えば、発生すべきいかなる再構成をも決定するための)スーパーツリー制御情報も存在しなければならない。
【0058】
このクラス・データフローは、二次プロセッサのハードウェア構成を決定する目的で使用することができるし、 二次プロセッサに対する適切な呼び出しを原始コードに縫い込むことを可能にする構造を提供するためにも使用することができる。これらのステップの詳細は以下に記述される。
【0059】
二次プロセッサへの呼び出しの原始コードへの縫い込みは、スーパーツリーがデータフローの周辺層を規定するので、実際には、クラス・データフローではなくスーパーツリーだけを必要とする。原始コードにおける置き換えられるデータフローに関して必要とされる措置は、データフローの入力(すなわちそのデータフローから縮減されたツリーの葉)をロード・プリミティブと置き換え、データフローの出力(当該ツリーのルート)を読み取りと置き換えることである。当該ツリーの葉およびルートはスーパーツリーに含まれるので、この目的のためにはスーパーツリーだけが必要とされる。データフローに包含されたすべての残りのコードは、二次プロセッサ構成によって取り替えられるので、単に削除すればよい。
【0060】
図7は、原始コードへの必要な置き換えを達成するための論理インタフェースを示す。入力ツリー#3がスーパーツリーと共に図示されている。入力ツリー#3における各ノードは、コンパイラ内部形式表現から得られるそれ自身のユニークな演算IDを持つ。スーパーツリーに関しては、レジスタまたは他のI/O資源が葉およびルートに割り当てられている。このように、入力ツリー#3とスーパーツリの間の暗黙の対応関係が、入力ツリー・ノードの演算IDと仕様の形式でスーパーツリーに割り当てられたI/O資源の間の対応関係を作成する。図7において"merge"と識別されるステップにおけるこの仕様の適用は、スーパーツリーによって包含されるコードの除去およびコードにおける必要なI/Oプリミティブの置き換えを可能にする。
【0061】
クラス・データフローから、二次プロセッサを構成することが可能である。このステップは既知の手法に従って実施することができる。このステップは、(挿入、削除および置換演算を使用し、適切な形式で動的再構成命令を含むことによって)クラス・データフローをネットリストへ縮減し、次に、コンポーネント・データフローの間の再構成の必要条件を考慮しながら、そのネットリストを特定の二次プロセッサ・ハードウェアに対応付ける。従来技術のFPGAアーキテクチャに関しては、これらのステップは、基本的には、適当な既知のツールの使用によって実行することができる。例えば、XC4013のような標準Xilinx FPGAの場合、適切なXilinxツールを使用することができる。最初に、ネットリストがXilinxネットリスト形式(XNF)に翻訳される。次に、Xilinx細分化置き換えおよびルート・プログラム(Xilinx Partition Place and RoutプログラムすなわちPPR)によってこのネットリストを構成可能な論理ブロックおよび入出力ブロックに細分化し、その結果を、Xilinx MakeBitsプログラムによって構成ビットストリームに変換する。この手法は、あらかじめ定められた再構成解決手段と共に、Steve Casselman氏による"Run-Time Programming Method for Reconfigurable Computer"に記載されている(この文献は、SB Associates , Inc .of 504 Nino Avenue, Los Gatos, CA 95032, USAが運用する再構成可能コンピューティングに関する円卓WWWへの貢献として、http://www .reconfig .com/specrept/ 101596/session1/library/cassel.htmで公開されている)。 補足説明に記載のCHESS装置のような再構成可能なプロセッサに関して、そのプロセッサにとって適切なツールを使用して、本質的に同様なプロシジャを実施することができる。
【0062】
二次プロセッサに対する適切な呼び出しを含む原始コードが実行可能な形式で生成されたならば、また、二次プロセッサ構成が決定されたならば、原始コードはロードされ、実行されることができる。コプロセッサおよび二次プロセッサに対する呼び出しを持つ原始コードが、主プロセッサで実行される。二次プロセッサは、それに抽出されるデータフローを処理するように特に構成されているので、コードの実行速度は顕著に増加する。例えば、本発明のこの実施形態の方法のJPEGツールキットからiDCTアルゴリズムへの適用において、これは実際にはI/Oの制約のためそのような二次プロセッサへの対応付けに関する貧弱な問題ではあるが、25%の改善が観察された。
【0063】
このように、上述の方法は、主プロセッサおよび再構成可能な二次プロセッサを含むアーキテクチャにおいて二次プロセッサの最適の使用を可能にする上で特に効果的である。
【0064】
本発明には、例として次のような実施様態が含まれる。
(1)主プロセッサおよび2次プロセッサに対する原始コードをコンパイルする方法であって、原始コードからデータフローを選択的に抽出するステップと、抽出したデータフローを複数のツリーへ変換するステップと、1つのツリーを別のツリーへ変換させるため、ツリー相互の合致を分析して、最低編集コスト関係を決定するステップと、上記最低編集コスト関係に基づいてデータフローの1つまたは複数グループを決定し、各グループ毎にそのグループにおける各データフローをサポートすることができる包括データフローを作成するステップと、該包括データフローを使用して2次プロセッサのハードウェア構成を決定するステップと、上記データフロー・グループを2次プロセッサに対する原始コード呼び出しに置き換えるステップと、残りの原始コードを主プロセッサに対してコンパイルするステップと、を含むコンパイル方法。
【0065】
(2)上記最低編集コスト関係が、ツリーの分類に関する最低編集距離分類法によって実施される、上記(1)に記載のコンパイル方法。
(3)上記最低編集コスト関係が二次プロセッサのアーキテクチャに従って決定され、二次プロセッサの対応する構成のハードウェア・コストを表す、上記(1)に記載のコンパイル方法。
(4)二次プロセッサのハードウェア構成が原始コードの実行中に二次プロセッサの再構成を許容するものである、上記(1)に記載のコンパイル方法。
(5)二次プロセッサがアプリケーション特定命令プロセッサである、上記(4)に記載のコンパイル方法。
(6)二次プロセッサがFPGAすなわち設置場所でプログラム可能なゲート・アレイである、上記(4)に記載のコンパイル方法。
(7)二次プロセッサが設置場所でプログラム可能な算術アレイである、上記(4)に記載のコンパイル方法。
(8)包括データフローによってサポートされるグループ内の各データフローをサポートするため原始コードの実行の間に二次プロセッサの再構成が必要とされる、上記(4)に記載のコンパイル方法。
【0066】
(9)1つのグループの包括データフローが、そのグループにおけるすべてのデータフローを相互に近似対応させ、次にマージさせることによって計算される、上記(1)に記載のコンパイル方法。
(10)データフローが有向非循環グラフとして作成され、有向非循環グラフの葉ノードとルートの間のクリティカル・パスに存在しないリンクの除去によってそれらグラフがツリーに縮減される、上記(9)に記載のコンパイル方法。
(11)上記クリティカル・パスが、最も多い数の中間ノードを通過する2つのノード間の経路である、上記(10)に記載のコンパイル方法。
(12)上記クリティカル・パスが、最大累積実行時間を持つ2つのノード間の経路である、上記(10)に記載のコンパイル方法。
(13)包括データフローの作成の後、包括データフローが、原始コードから抽出された更なるデータフローと比較され、包括データフローと十分近似しているデータフローが包括データフローに加えられる、上記(10)に記載のコンパイル方法。
(14)有向非循環グラフがツリーに縮減された後、削除されたリンクが保管され、グループのツリーの包括データフローへのマージの後包括データフローに再挿入される、上記(10)に記載のコンパイル方法。
【0067】
(15)主プロセッサおよび2次プロセッサに対する原始コードをコンパイルするように構成されたコンピュータであって、原始コードからデータフローを選択的に抽出する手段と、抽出したデータフローを複数のツリーへ変換する手段と、1つのツリーを別のツリーへ変換させるため、ツリー相互の合致を分析して、最低編集コスト関係を決定する手段と、上記最低編集コスト関係に基づいてデータフローの1つまたは複数グループを決定し、各グループ毎にそのグループにおける各データフローをサポートすることができる包括データフローを作成する手段と、該包括データフローを使用して2次プロセッサのハードウェア構成を決定する手段と、上記データフロー・グループを2次プロセッサに対する原始コード呼び出しに置き換え、残りの原始コードを主プロセッサに対してコンパイルする手段と、を備えるコンピュータ。
【0068】
(16)上記最低編集コスト関係が、ツリーの分類に関する最低編集距離分類法によって実施される、上記(15)に記載のコンピュータ。
(17)上記最低編集コスト関係が二次プロセッサのアーキテクチャに従って決定され、二次プロセッサの対応する構成のハードウェア・コストを表す、上記(15)に記載のコンピュータ。
(18)二次プロセッサのハードウェア構成が原始コードの実行中に二次プロセッサの再構成を許容するものである、上記(15)に記載のコンピュータ。
【0069】
(19)主プロセッサおよび2次プロセッサに対する原始コードをコンパイルする方法を実行するためコンピュータによって実行可能な命令からなるプログラムを格納する該コンピュータによって読み取り可能なプログラム記憶媒体であって、該方法が、原始コードからデータフローを選択的に抽出するステップと、抽出したデータフローを複数のツリーへ変換するステップと、1つのツリーを別のツリーへ変換させるため、ツリー相互の合致を分析して、最低編集コスト関係を決定するステップと、上記最低編集コスト関係に基づいてデータフローの1つまたは複数グループを決定し、各グループ毎にそのグループにおける各データフローをサポートすることができる包括データフローを作成するステップと、該包括データフローを使用して2次プロセッサのハードウェア構成を決定するステップと、上記データフロー・グループを2次プロセッサに対する原始コード呼び出しに置き換えるステップと、残りの原始コードを主プロセッサに対してコンパイルするステップと、を含む、プログラム記憶媒体。
【0070】
補足説明
CHESS アレイ
CHESSアレイは、FPGAにおける場合のようにプログラム可能なエレメントがゲートではなく4ビットの演算論理ユニット(ALU)であるような種々のフィールド・プログラム可能アレイである。このアレイ構成はヨーロッパ特許出願第97300563.O号に記述されている。
【0071】
CHESSアレイは、ALUおよび切り替えボックス構造をそれぞれ含む交互正方形を持つチェス盤レイアウトから成る。隣接する切り替えボックスのための構成メモリがALUの中に保持される。個々のALUは処理パイプラインの形態で使用することが可能であり、好ましい実施形態において、後続ALUの機能を決定するため先行ALUから命令が動的に提供されるように構成される。ALUは4ビットであり、4ビット入力AおよびBが拡張相互接続ネットワークから直接取り出され、選択的にラッチ可能な出力レジスタを経由して4ビット出力Uが上記ネットワークに提供される。1ビットのキャリー入力および出力がまた提供され、それら自身の相互接続を持つ。
【0072】
1つのALUの出力Uから別のALUの4ビット命令入力Iへ動的命令を提供することができる。ALUの命令を変更するため、1つのALUのキャリー出力カウントを別のALUのCin(キャリ入力)として使用することができる。
【0073】
CHESS ALUは、入力AおよびBの多重化をサポートするように構成され、また、関連した命令(例えばOR/NOR, AND/NAND)の間の多重化をサポートする。そのような命令の間の再構成は、ハードウェアの増加を必要とすることなく、キャリ入力および出力の適切な使用を通して達成されることができる。より複雑な再構成(例えばAND/XOR, Add/Sub)を次のような2つのALUを使用することによって達成することができる。すなわち、第1のALUは2つの代替的命令の間のマルチプレックスを行うもので、第2のALUはオペランドに関して選択された命令を実行するものである。乗算は、1以上のALUを取り上げるので、乗算演算を含む再構成を一層複雑にする。演算をバイパスするため、所与の入力の演算または伝播性能に結びつく適切な制御を用いて、CHESS ALUのマルチプレクサ機能を使用することは簡単である。命令入力から取得できる関数セットの例を下記表1に示す。ALUへの命令入力の接続の適切な論理機構に関して利用可能な広範囲にわたる可能性が存在する。それらの関数を表2に記載する。
【0074】
【表1】
【0075】
【表2】
名前 U 関数 C out 関数
ADD A+B
SUBA A-B
A AND B Ui = Ai AND Bi Cout=Cin
A OR B Ui = Ai OR Bi Cout=Cin
A NOR B Ui = NOT(Ai OR Bi) Cout=Cin
A XOR B Ui = Ai XOR Bi Cout=Cin
A NXOR B Ui = NOT(Ai XOR Bi) Cout=Cin
A AND NOT B Ui = Ai AND (NOT Bi) Cout=Cin
A AND NOT A Ui = (NOT Ai) AND Bi Cout=Cin
NOT A OR B Ui = (NOT Ai) OR Bi Cout=Cin
NOT B OR A Ui = Ai OR (NOT Bi) Cout=Cin
A Ui = Ai Cout=Cin
B Ui = Bi Cout=Cin
NOT A Ui = NOT Ai Cout=Cin
NOT B Ui = NOT Bi Cout=Cin
A=B N/A iF A==B then 0,else 1
MATCH1 N/A ワード幅にわたりA AND BおよびOR
MATCH0 N/A ワード幅にわたりA OR BおよびAND
注:N/Aは該当しないことを意味する。
【0076】
2の補数算術が使用され、この算術と整合するように算術キャリが提供される。MATCH 1の場合、AおよびBの両者において1である少なくとも1つの位置が存在すれば1という値だけが返され、一方MATCH 2の場合AおよびBの両者において0である少なくとも1つの位置が存在すれば0という値だけが返されるので、MATCH関数はそのように(match一致と)呼ばれる。
【0077】
【発明の効果】
本発明は、主プロセッサ1と二次プロセッサ2の間の原始コードの最適化された分割に特に適していて、この分割によって、二次プロセッサの最適構成が原始コードに埋め込まれたアプリケーションの当該アーキテクチャによる取り扱いを最適化することを可能にする。本発明は、二次プロセッサにおいて使用されるコードの選択および抽出に極めて有効である。
【図面の簡単な説明】
【図1】本発明の実施に適用されることができる汎用コンピュータ・アーキテクチャを示すブロック図である。
【図2】本発明の実施形態に従って主および二次プロセッサに対して原始コードをコンパイルする方法を示す概略流れ図である。
【図3】本発明の1つの実施形態に従ってDAGをツリーに変換させるステップを示す概略流れ図である。
【図4】本発明の実施形態に従ったツリー合致プロセスにおけるノード置換を示す概略流れ図である。
【図5】本発明の実施形態に従った編集距離分類法を示すブロック図である。
【図6】本発明の1つの実施形態に従って提供される包括データフローを示すブロック図である。
【図7】本発明の1つの実施形態に従った包括データフローに関する二次プロセッサ資源の割当てのための論理インタフェースを示すブロック図である。
【図8】条件付きステートメントを取り扱うためマルチプレクサを含むデータフローへのDAGの適用を示すブロック図である。
【図9】図10と共に、本発明の1つの実施形態に従って候補データフローをマージして包括データフローを形成するステップを示すブロック図である。
【図10】図9と共に、本発明の1つの実施形態に従って候補データフローをマージして包括データフローを形成するステップを示すブロック図である。
【符号の説明】
1 主プロセッサ
2 二次プロセッサ
11 原始コード
12 DAG(有向非循環グラフ)
14 ツリー
Claims (15)
- 主プロセッサおよび2次プロセッサに対する原始コードをコンピュータによってコンパイルする方法であって、
コンピュータが、原始コードからデータフローを選択的に抽出するステップと、
コンピュータが、抽出したデータフローを複数のツリーへ変換するステップと、
コンピュータが、1つのツリーを別のツリーへ変換させるため、ツリー相互の合致を分析して、最低編集コスト関係を決定するステップと、
コンピュータが、上記最低編集コスト関係に基づいてデータフローの1つまたは複数グループを決定し、各グループ毎にそのグループにおける各データフローをサポートすることができる包括データフローを作成するステップと、
コンピュータが、該包括データフローを使用して2次プロセッサのハードウェア構成を決定するステップと、
コンピュータが、データフローの上記1つまたは複数グループに対して、原始コードを2次プロセッサへの呼び出しに置き換えるステップと、
コンピュータが、残りの原始コードを主プロセッサに対してコンパイルするステップと、を含むコンパイル方法。 - 上記最低編集コスト関係が、ツリーの分類に関する最低編集距離分類法によって実施される、請求項1に記載のコンパイル方法。
- 上記最低編集コスト関係が二次プロセッサのアーキテクチャに従って決定され、二次プロセッサの対応する構成のハードウェア・コストを表す、請求項1に記載のコンパイル方法。
- 二次プロセッサのハードウェア構成が原始コードの実行中に二次プロセッサの再構成を許容するものである、請求項1に記載のコンパイル方法。
- 二次プロセッサがアプリケーション特定命令プロセッサである、請求項4に記載のコンパイル方法。
- 二次プロセッサがFPGAすなわち設置場所でプログラム可能なゲート・アレイである、請求項4に記載のコンパイル方法。
- 二次プロセッサが設置場所でプログラム可能な算術アレイである、請求項4に記載のコンパイル方法。
- 包括データフローによってサポートされるグループ内の各データフローをサポートするため原始コードの実行の間に二次プロセッサの再構成が必要とされる、請求項4に記載のコンパイル方法。
- 1つのグループの包括データフローが、そのグループにおけるすべてのデータフローを相互に近似対応させ、次にマージさせることによって計算される、請求項1に記載のコンパイル方法。
- データフローが有向非循環グラフとして作成され、有向非循環グラフの葉ノードとルートの間のクリティカル・パスに存在しないリンクの除去によってそれらグラフがツリーに縮減される、請求項9に記載のコンパイル方法。
- 上記クリティカル・パスが、最も多い数の中間ノードを通過する2つのノード間の経路である、請求項10に記載のコンパイル方法。
- 上記クリティカル・パスが、最大累積実行時間を持つ2つのノード間の経路である、請求項10に記載のコンパイル方法。
- 包括データフローの作成の後、包括データフローが、原始コードから抽出された更なるデータフローと比較され、包括データフローと十分近似している更なるデータフローが包括データフローに加えられる、請求項10に記載のコンパイル方法。
- 有向非循環グラフがツリーに縮減された後、削除されたリンクが保管され、グループのツリーの包括データフローへのマージの後包括データフローに再挿入される、請求項10に記載のコンパイル方法。
- 主プロセッサおよび2次プロセッサに対する原始コードをコンパイルする方法を実行するためコンピュータによって実行可能な命令からなるプログラムを格納する該コンピュータによって読み取り可能なプログラム記憶媒体であって、該方法が、
コンピュータが、原始コードからデータフローを選択的に抽出するステップと、
コンピュータが、抽出したデータフローを複数のツリーへ変換するステップと、
コンピュータが、1つのツリーを別のツリーへ変換させるため、ツリー相互の合致を分析して、最低編集コスト関係を決定するステップと、
コンピュータが、上記最低編集コスト関係に基づいてデータフローの1つまたは複数グループを決定し、各グループ毎にそのグループにおける各データフローをサポートすることができる包括データフローを作成するステップと、
コンピュータが、該包括データフローを使用して2次プロセッサのハードウェア構成を決定するステップと、
コンピュータが、データフローの上記1つまたは複数グループに対して、原始コードを2次プロセッサへの呼び出しに置き換えるステップと、
コンピュータが、残りの原始コードを主プロセッサに対してコンパイルするステップと、を含む、プログラム記憶媒体。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| EP97310249A EP0926594B1 (en) | 1997-12-17 | 1997-12-17 | Method of using primary and secondary processors |
| EP97310249.4 | 1997-12-17 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH11249904A JPH11249904A (ja) | 1999-09-17 |
| JP3711206B2 true JP3711206B2 (ja) | 2005-11-02 |
Family
ID=8229674
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP34968698A Expired - Fee Related JP3711206B2 (ja) | 1997-12-17 | 1998-12-09 | コンパイル方法 |
Country Status (4)
| Country | Link |
|---|---|
| US (1) | US6219833B1 (ja) |
| EP (1) | EP0926594B1 (ja) |
| JP (1) | JP3711206B2 (ja) |
| DE (1) | DE69737750T2 (ja) |
Families Citing this family (96)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| DE69430018T2 (de) * | 1993-11-05 | 2002-11-21 | Intergraph Corp., Huntsville | Befehlscachespeicher mit assoziativem Kreuzschienenschalter |
| US7266725B2 (en) | 2001-09-03 | 2007-09-04 | Pact Xpp Technologies Ag | Method for debugging reconfigurable architectures |
| DE19651075A1 (de) | 1996-12-09 | 1998-06-10 | Pact Inf Tech Gmbh | Einheit zur Verarbeitung von numerischen und logischen Operationen, zum Einsatz in Prozessoren (CPU's), Mehrrechnersystemen, Datenflußprozessoren (DFP's), digitalen Signal Prozessoren (DSP's) oder dergleichen |
| DE19654595A1 (de) | 1996-12-20 | 1998-07-02 | Pact Inf Tech Gmbh | I0- und Speicherbussystem für DFPs sowie Bausteinen mit zwei- oder mehrdimensionaler programmierbaren Zellstrukturen |
| DE19654593A1 (de) | 1996-12-20 | 1998-07-02 | Pact Inf Tech Gmbh | Umkonfigurierungs-Verfahren für programmierbare Bausteine zur Laufzeit |
| ATE243390T1 (de) | 1996-12-27 | 2003-07-15 | Pact Inf Tech Gmbh | Verfahren zum selbständigen dynamischen umladen von datenflussprozessoren (dfps) sowie bausteinen mit zwei- oder mehrdimensionalen programmierbaren zellstrukturen (fpgas, dpgas, o.dgl.) |
| DE19654846A1 (de) | 1996-12-27 | 1998-07-09 | Pact Inf Tech Gmbh | Verfahren zum selbständigen dynamischen Umladen von Datenflußprozessoren (DFPs) sowie Bausteinen mit zwei- oder mehrdimensionalen programmierbaren Zellstrukturen (FPGAs, DPGAs, o. dgl.) |
| US6542998B1 (en) | 1997-02-08 | 2003-04-01 | Pact Gmbh | Method of self-synchronization of configurable elements of a programmable module |
| DE19704728A1 (de) | 1997-02-08 | 1998-08-13 | Pact Inf Tech Gmbh | Verfahren zur Selbstsynchronisation von konfigurierbaren Elementen eines programmierbaren Bausteines |
| DE19704742A1 (de) | 1997-02-11 | 1998-09-24 | Pact Inf Tech Gmbh | Internes Bussystem für DFPs, sowie Bausteinen mit zwei- oder mehrdimensionalen programmierbaren Zellstrukturen, zur Bewältigung großer Datenmengen mit hohem Vernetzungsaufwand |
| US8686549B2 (en) | 2001-09-03 | 2014-04-01 | Martin Vorbach | Reconfigurable elements |
| US6434687B1 (en) * | 1997-12-17 | 2002-08-13 | Src Computers, Inc. | System and method for accelerating web site access and processing utilizing a computer system incorporating reconfigurable processors operating under a single operating system image |
| DE69737750T2 (de) * | 1997-12-17 | 2008-03-06 | Hewlett-Packard Development Co., L.P., Houston | Erst- und Zweitprozessoren verwendetes Verfahren |
| DE19861088A1 (de) | 1997-12-22 | 2000-02-10 | Pact Inf Tech Gmbh | Verfahren zur Reparatur von integrierten Schaltkreisen |
| JP4158239B2 (ja) * | 1998-09-08 | 2008-10-01 | ソニー株式会社 | 情報処理装置および方法、並びに記録媒体 |
| US7003660B2 (en) | 2000-06-13 | 2006-02-21 | Pact Xpp Technologies Ag | Pipeline configuration unit protocols and communication |
| DE10081643D2 (de) | 1999-06-10 | 2002-05-29 | Pact Inf Tech Gmbh | Sequenz-Partitionierung auf Zellstrukturen |
| US6757892B1 (en) * | 1999-06-24 | 2004-06-29 | Sarnoff Corporation | Method for determining an optimal partitioning of data among several memories |
| US6922830B1 (en) * | 2000-03-10 | 2005-07-26 | International Business Machines Corporation | Skip list data storage during compilation |
| US7080073B1 (en) | 2000-08-18 | 2006-07-18 | Firstrain, Inc. | Method and apparatus for focused crawling |
| US6915294B1 (en) * | 2000-08-18 | 2005-07-05 | Firstrain, Inc. | Method and apparatus for searching network resources |
| US7103838B1 (en) * | 2000-08-18 | 2006-09-05 | Firstrain, Inc. | Method and apparatus for extracting relevant data |
| US6829697B1 (en) * | 2000-09-06 | 2004-12-07 | International Business Machines Corporation | Multiple logical interfaces to a shared coprocessor resource |
| US8058899B2 (en) | 2000-10-06 | 2011-11-15 | Martin Vorbach | Logic cell array and bus system |
| AU2002220600A1 (en) | 2000-10-06 | 2002-04-15 | Pact Informationstechnologie Gmbh | Cell system with segmented intermediate cell structure |
| US6990555B2 (en) | 2001-01-09 | 2006-01-24 | Pact Xpp Technologies Ag | Method of hierarchical caching of configuration data having dataflow processors and modules having two- or multidimensional programmable cell structure (FPGAs, DPGAs, etc.) |
| US7174536B1 (en) * | 2001-02-12 | 2007-02-06 | Iowa State University Research Foundation, Inc. | Integrated interactive software visualization environment |
| US9037807B2 (en) | 2001-03-05 | 2015-05-19 | Pact Xpp Technologies Ag | Processor arrangement on a chip including data processing, memory, and interface elements |
| US7444531B2 (en) | 2001-03-05 | 2008-10-28 | Pact Xpp Technologies Ag | Methods and devices for treating and processing data |
| US9411532B2 (en) | 2001-09-07 | 2016-08-09 | Pact Xpp Technologies Ag | Methods and systems for transferring data between a processing device and external devices |
| US9141390B2 (en) | 2001-03-05 | 2015-09-22 | Pact Xpp Technologies Ag | Method of processing data with an array of data processors according to application ID |
| US7844796B2 (en) | 2001-03-05 | 2010-11-30 | Martin Vorbach | Data processing device and method |
| US7210129B2 (en) | 2001-08-16 | 2007-04-24 | Pact Xpp Technologies Ag | Method for translating programs for reconfigurable architectures |
| US9552047B2 (en) | 2001-03-05 | 2017-01-24 | Pact Xpp Technologies Ag | Multiprocessor having runtime adjustable clock and clock dependent power supply |
| US20070299993A1 (en) * | 2001-03-05 | 2007-12-27 | Pact Xpp Technologies Ag | Method and Device for Treating and Processing Data |
| US9250908B2 (en) | 2001-03-05 | 2016-02-02 | Pact Xpp Technologies Ag | Multi-processor bus and cache interconnection system |
| US7581076B2 (en) | 2001-03-05 | 2009-08-25 | Pact Xpp Technologies Ag | Methods and devices for treating and/or processing data |
| US9436631B2 (en) | 2001-03-05 | 2016-09-06 | Pact Xpp Technologies Ag | Chip including memory element storing higher level memory data on a page by page basis |
| WO2002103532A2 (de) * | 2001-06-20 | 2002-12-27 | Pact Xpp Technologies Ag | Verfahren zur bearbeitung von daten |
| US10031733B2 (en) * | 2001-06-20 | 2018-07-24 | Scientia Sol Mentis Ag | Method for processing data |
| US7996827B2 (en) | 2001-08-16 | 2011-08-09 | Martin Vorbach | Method for the translation of programs for reconfigurable architectures |
| US7434191B2 (en) | 2001-09-03 | 2008-10-07 | Pact Xpp Technologies Ag | Router |
| US8686475B2 (en) | 2001-09-19 | 2014-04-01 | Pact Xpp Technologies Ag | Reconfigurable elements |
| US7493470B1 (en) * | 2001-12-07 | 2009-02-17 | Arc International, Plc | Processor apparatus and methods optimized for control applications |
| US6754881B2 (en) | 2001-12-10 | 2004-06-22 | International Business Machines Corporation | Field programmable network processor and method for customizing a network processor |
| US7047464B2 (en) * | 2001-12-10 | 2006-05-16 | International Business Machines Corporation | Method and system for use of a field programmable function within an application specific integrated circuit (ASIC) to access internal signals for external observation and control |
| US6668361B2 (en) | 2001-12-10 | 2003-12-23 | International Business Machines Corporation | Method and system for use of a field programmable function within a chip to enable configurable I/O signal timing characteristics |
| US6545501B1 (en) | 2001-12-10 | 2003-04-08 | International Business Machines Corporation | Method and system for use of a field programmable function within a standard cell chip for repair of logic circuits |
| US7577822B2 (en) | 2001-12-14 | 2009-08-18 | Pact Xpp Technologies Ag | Parallel task operation in processor and reconfigurable coprocessor configured based on information in link list including termination information for synchronization |
| AU2003208266A1 (en) | 2002-01-19 | 2003-07-30 | Pact Xpp Technologies Ag | Reconfigurable processor |
| WO2003071432A2 (de) | 2002-02-18 | 2003-08-28 | Pact Xpp Technologies Ag | Bussysteme und rekonfigurationsverfahren |
| US8914590B2 (en) | 2002-08-07 | 2014-12-16 | Pact Xpp Technologies Ag | Data processing method and device |
| US9170812B2 (en) | 2002-03-21 | 2015-10-27 | Pact Xpp Technologies Ag | Data processing system having integrated pipelined array data processor |
| US7287026B2 (en) * | 2002-04-05 | 2007-10-23 | Oommen John B | Method of comparing the closeness of a target tree to other trees using noisy sub-sequence tree processing |
| US6836821B2 (en) * | 2002-04-23 | 2004-12-28 | Lsi Logic Corporation | System and method for providing graph structuring for layered virtual volumes |
| AU2003286131A1 (en) | 2002-08-07 | 2004-03-19 | Pact Xpp Technologies Ag | Method and device for processing data |
| US7657861B2 (en) | 2002-08-07 | 2010-02-02 | Pact Xpp Technologies Ag | Method and device for processing data |
| WO2004038599A1 (de) | 2002-09-06 | 2004-05-06 | Pact Xpp Technologies Ag | Rekonfigurierbare sequenzerstruktur |
| US7103881B2 (en) * | 2002-12-10 | 2006-09-05 | Intel Corporation | Virtual machine to provide compiled code to processing elements embodied on a processor device |
| JP4700611B2 (ja) | 2003-08-28 | 2011-06-15 | ペーアーツェーテー イクスペーペー テクノロジーズ アクチエンゲゼルシャフト | データ処理装置およびデータ処理方法 |
| JP2005181404A (ja) * | 2003-12-16 | 2005-07-07 | Nec Viewtechnology Ltd | 複数画像表示可能な画像投射制御装置 |
| JP4537391B2 (ja) * | 2004-03-16 | 2010-09-01 | 株式会社ターボデータラボラトリー | ツリー型データ構造を取り扱う方法、情報処理装置、及び、プログラム |
| US8006071B2 (en) | 2004-03-31 | 2011-08-23 | Altera Corporation | Processors operable to allow flexible instruction alignment |
| US7167971B2 (en) * | 2004-06-30 | 2007-01-23 | International Business Machines Corporation | System and method for adaptive run-time reconfiguration for a reconfigurable instruction set co-processor architecture |
| US7954083B2 (en) * | 2004-08-26 | 2011-05-31 | Siemens Corporation | System and method for specifying functional and non-functional requirements for a project |
| US7509633B2 (en) * | 2004-12-16 | 2009-03-24 | International Business Machines Corporation | System and method for grid-based distribution of Java project compilation |
| US7716250B1 (en) * | 2005-05-27 | 2010-05-11 | Microsoft Corporation | Erasure coding and group computations using rooted binary and ternary trees |
| US7281942B2 (en) * | 2005-11-18 | 2007-10-16 | Ideal Industries, Inc. | Releasable wire connector |
| US7634496B1 (en) * | 2006-01-03 | 2009-12-15 | Emc Corporation | Techniques for managing state changes of a data storage system utilizing the object oriented paradigm |
| WO2007082730A1 (de) | 2006-01-18 | 2007-07-26 | Pact Xpp Technologies Ag | Hardwaredefinitionsverfahren |
| US7533244B2 (en) * | 2006-05-09 | 2009-05-12 | Le Nguyen Tran | Network-on-chip dataflow architecture |
| US8584046B2 (en) * | 2007-04-09 | 2013-11-12 | Microsoft Corporation | Visualizing differences in similarity metrics of hierarchies |
| US9785700B2 (en) * | 2008-02-11 | 2017-10-10 | Nuix Pty Ltd | Systems and methods for load-balancing by secondary processors in parallelized indexing |
| US9928260B2 (en) | 2008-02-11 | 2018-03-27 | Nuix Pty Ltd | Systems and methods for scalable delocalized information governance |
| US8359365B2 (en) | 2008-02-11 | 2013-01-22 | Nuix Pty Ltd | Systems and methods for load-balancing by secondary processors in parallel document indexing |
| 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 |
| US10621092B2 (en) | 2008-11-24 | 2020-04-14 | Intel Corporation | Merging level cache and data cache units having indicator bits related to speculative execution |
| NZ584534A (en) * | 2010-04-09 | 2013-02-22 | Tait Ltd | Creating an edit script for conversion of an old data table to a new data table by creating data trees and first and second partial scripts then combining the partial scripts |
| US8458584B1 (en) | 2010-06-28 | 2013-06-04 | Google Inc. | Extraction and analysis of user-generated content |
| US8713518B2 (en) * | 2010-11-10 | 2014-04-29 | SRC Computers, LLC | System and method for computational unification of heterogeneous implicit and explicit processing elements |
| US9116751B2 (en) | 2011-02-08 | 2015-08-25 | Canon Kabushiki Kaisha | Reconfigurable device, processing assignment method, processing arrangement method, information processing apparatus, and control method therefor |
| JP5907607B2 (ja) * | 2011-02-16 | 2016-04-26 | キヤノン株式会社 | 処理配置方法及びプログラム |
| JP5798378B2 (ja) * | 2011-05-30 | 2015-10-21 | キヤノン株式会社 | 装置、処理方法、およびプログラム |
| WO2013048468A1 (en) | 2011-09-30 | 2013-04-04 | Intel Corporation | Instruction and logic to perform dynamic binary translation |
| US9880842B2 (en) | 2013-03-15 | 2018-01-30 | Intel Corporation | Using control flow data structures to direct and track instruction execution |
| US9201659B2 (en) * | 2013-08-19 | 2015-12-01 | Qualcomm Incorporated | Efficient directed acyclic graph pattern matching to enable code partitioning and execution on heterogeneous processor cores |
| US9891936B2 (en) | 2013-09-27 | 2018-02-13 | Intel Corporation | Method and apparatus for page-level monitoring |
| US10826930B2 (en) | 2014-07-22 | 2020-11-03 | Nuix Pty Ltd | Systems and methods for parallelized custom data-processing and search |
| US11200249B2 (en) | 2015-04-16 | 2021-12-14 | Nuix Limited | Systems and methods for data indexing with user-side scripting |
| CN106933609B (zh) * | 2015-12-29 | 2021-01-15 | 北京五八信息技术有限公司 | Android应用程序安装包的生成方法及装置 |
| US10530661B2 (en) | 2016-06-30 | 2020-01-07 | At&T Intellectual Property I, L.P. | Systems and methods for modeling networks |
| US10223475B2 (en) | 2016-08-31 | 2019-03-05 | At&T Intellectual Property I, L.P. | Database evaluation of anchored length-limited path expressions |
| US10685063B2 (en) | 2016-09-16 | 2020-06-16 | At&T Intellectual Property I, L.P. | Time-based querying of graph databases |
| US10621236B2 (en) | 2016-09-16 | 2020-04-14 | At&T Intellectual Property I, L.P. | Concept based querying of graph databases |
| IT201700064752A1 (it) * | 2017-06-12 | 2018-12-12 | Duel S R L | Metodo di elaborazione dati per sintetizzare in tempo reale informazioni di traffico personalizzate |
| US11669613B2 (en) | 2020-05-29 | 2023-06-06 | EnSoft Corp. | Method for analyzing and verifying software for safety and security |
Family Cites Families (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5802290A (en) * | 1992-07-29 | 1998-09-01 | Virtual Computer Corporation | Computer network of distributed virtual computers which are EAC reconfigurable in response to instruction to be executed |
| US5600845A (en) * | 1994-07-27 | 1997-02-04 | Metalithic Systems Incorporated | Integrated circuit computing device comprising a dynamically configurable gate array having a microprocessor and reconfigurable instruction execution means and method therefor |
| US5752035A (en) * | 1995-04-05 | 1998-05-12 | Xilinx, Inc. | Method for compiling and executing programs for reprogrammable instruction set accelerator |
| US6077315A (en) * | 1995-04-17 | 2000-06-20 | Ricoh Company Ltd. | Compiling system and method for partially reconfigurable computing |
| US6009273A (en) * | 1997-05-29 | 1999-12-28 | Hewlett-Packard Company | Method for conversion of a variable argument routine to a fixed argument routine |
| DE69737750T2 (de) * | 1997-12-17 | 2008-03-06 | Hewlett-Packard Development Co., L.P., Houston | Erst- und Zweitprozessoren verwendetes Verfahren |
-
1997
- 1997-12-17 DE DE69737750T patent/DE69737750T2/de not_active Expired - Lifetime
- 1997-12-17 EP EP97310249A patent/EP0926594B1/en not_active Expired - Lifetime
-
1998
- 1998-12-09 JP JP34968698A patent/JP3711206B2/ja not_active Expired - Fee Related
- 1998-12-11 US US09/209,778 patent/US6219833B1/en not_active Expired - Lifetime
Also Published As
| Publication number | Publication date |
|---|---|
| US6219833B1 (en) | 2001-04-17 |
| JPH11249904A (ja) | 1999-09-17 |
| DE69737750T2 (de) | 2008-03-06 |
| DE69737750D1 (de) | 2007-07-05 |
| EP0926594A1 (en) | 1999-06-30 |
| EP0926594B1 (en) | 2007-05-23 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP3711206B2 (ja) | コンパイル方法 | |
| Leupers | Retargetable code generation for digital signal processors | |
| de Fine Licht et al. | StencilFlow: Mapping large stencil programs to distributed spatial computing systems | |
| Peymandoust et al. | Automatic instruction set extension and utilization for embedded processors | |
| Cardoso et al. | Compilation for FPGA-based reconfigurable hardware | |
| US8225276B1 (en) | Shared code management | |
| JPH06507990A (ja) | コンピュータのための最適化コンパイラ | |
| Atasu et al. | FISH: Fast instruction synthesis for custom processors | |
| JP2001166946A (ja) | 階層の平坦化によりソースコードをコンパイルする方法及び装置 | |
| Bruneel et al. | Dynamic data folding with parameterizable FPGA configurations | |
| Gokhale et al. | Co-synthesis to a hybrid RISC/FPGA architecture | |
| Buyukkurt et al. | Impact of high-level transformations within the ROCCC framework | |
| Stitt et al. | Techniques for synthesizing binaries to an advanced register/memory structure | |
| L'Hours | Generating efficient custom FPGA soft-cores for control-dominated applications | |
| Bajaj | Exploiting DSP block capabilities in FPGA high level design flows | |
| McKeever et al. | Compiling hardware descriptions with relative placement information for parametrised libraries | |
| Kennaway et al. | Novel architectures for declarative languages | |
| Xu | An approach to generating customized load-store architectures | |
| JP2022508296A (ja) | フィールド・プログラマブル・ゲート・アレイのためのコードを最適化する方法および装置 | |
| Sahin | A compilation tool for automated mapping of algorithms onto FPGA-based custom computing machines | |
| JP2004021425A (ja) | コンパイラにおけるメモリ配置方式 | |
| Ramasubramanian et al. | Automatic compilation of loops to exploit operator parallelism on configurable arithmetic logic units | |
| Maurer et al. | The use of combinators in translating a purely functional language to low-level data-flow graphs | |
| Shaout et al. | On the classification of computer architecture | |
| Hudson | Architecture-independent design for run-time reconfigurable custom computing machines |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050222 |
|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050520 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050712 |
|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050713 |
|
| 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: 20050809 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050812 |
|
| 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: 20090819 Year of fee payment: 4 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100819 Year of fee payment: 5 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110819 Year of fee payment: 6 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110819 Year of fee payment: 6 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120819 Year of fee payment: 7 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120819 Year of fee payment: 7 |
|
| S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120819 Year of fee payment: 7 |
|
| R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120819 Year of fee payment: 7 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130819 Year of fee payment: 8 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| LAPS | Cancellation because of no payment of annual fees |