(57)【要約】  アルゴリズムマッチングパイプラインコンパイラおよび再使用可能アルゴリズムによるパイプラインコアがシステムを備える。再使用可能アルゴリズムによるパイプラインコアは、セットアップデータによって決定されるような複数の動作のいずれかをプログラムするためのセットアップインターフェースを有するプロセッサ、ルックアップテーブル、ループカウンタ、および定数レジスタをプログラムするための論理決定プロセッサ、ならびにメモリのブロックを備える、パイプライン構造を有する再構成可能な処理コアである。これは、関数を実行するために使用することができる。再構成可能なプログラマブル回路は、アルゴリズムの処理中に中央プロセッサまたは周辺プロセッサからのさらなる介入なしにアルゴリズムを完了するために必要とされるように、あるコアから別のコアならびに/またはIOコントローラおよび/もしくは割込み生成器に、データおよび結果をルーティングする。
2019506695.tif 000002
【特許請求の範囲】
【請求項１】
再使用可能アルゴリズムによるパイプラインコアであって、
処理ユニットと、
再構成可能なフィールドプログラマブルゲートのアレイであって、前記フィールドプログラマブルゲートが、アルゴリズムマッチングパイプラインコンパイラによってプログラムされ、その結果、前記アルゴリズムマッチングパイプラインコンパイラが、前記処理ユニットによって並列処理を有しない標準的なプロセッサ上での動作用に設計されたソースコードを処理するためにプリコンパイルし、前記処理ユニットおよび前記アルゴリズムマッチングパイプラインコンパイラが、前記フィールドプログラマブルゲートをパイプラインの並列プロセッサとして動作するように構成する、再構成可能なフィールドプログラマブルゲートのアレイと
を備える、コア。
【請求項２】
前記アルゴリズムマッチングパイプラインコンパイラがプリコンパイラである、請求項1に記載のコア。
【請求項３】
前記プリコンパイラが、前記コア用ではなくあるタイプの従来型非再構成可能プロセッサ用に書かれたハイレベル標準ソフトウェア言語をプリコンパイルするように構成され、前記プリコンパイラが、前記ハイレベル標準ソフトウェア言語がそのために書かれた前記タイプの従来型非再構成可能プロセッサを利用して、再構成可能なフィールドプログラマブルゲートの前記アレイを構成するための機械コードを生成することによって、前記コア用の機械コードを生成する、請求項2に記載のコア。
【請求項４】
前記ハイレベル標準ソフトウェア言語がCまたはC++である、請求項3に記載のコア。
【請求項５】
前記コアが、特定の計算のために必要とされるアルゴリズムを処理するように、前記プリコンパイラからの出力に基づいて構成されるコンピュータのプールを備え、前記フィールドプログラマブルゲートが、前記処理ユニットからのこれ以上のオーバーヘッドなしにタスクを完了するように構成される、請求項2に記載のコア。
【請求項６】
インテリジェントバスコントローラまたは論理プロセッサをさらに備え、前記インテリジェントバスコントローラまたは論理プロセッサが、前記コアによって処理される論理関数のすべてを実行する、請求項5に記載のコア。
【請求項７】
論理プロセッサおよびマスタバススイッチをさらに備え、前記論理プロセッサが、前記マスタバススイッチの制御のための再構成可能な論理関数を備える、請求項5に記載のコア。
【請求項８】
デジタル信号プロセッサをさらに備え、前記デジタル信号プロセッサが、数学計算を実行するための再構成可能な数理プロセッサを備える、請求項7に記載のコア。
【請求項９】
前記マスタバススイッチが、前記プリコンパイラおよび前記処理ユニットによって再構成可能にプログラマブルな回路を備えるマトリックスバスルータまたはマトリックスバススイッチであり、その結果、データおよび結果が、アルゴリズムの前記処理中に中央プロセッサまたは周辺プロセッサからのこれ以上の介入なしに、前記アルゴリズムを完了するために前記コアから別のコアにルーティングされ、算術処理ユニットの内および外へデータおよび結果を導くための中央プロセッサまたは周辺プロセッサによる介入を必要とする静的な非再構成可能ハードウェアと比較して、パイプライン化することによってオーバーヘッドを低減する、請求項8に記載のコア。
【請求項１０】
前記論理プロセッサが論理決定および反復ループを処理し、アルゴリズムを学習するために結果メモリが前記論理プロセッサによって提供される、請求項9に記載のコア。
【請求項１１】
請求項1に記載の複数の前記コアを備え、
前記複数のコアのうちの1つまたは複数のデジタル信号プロセッサを使用して数学演算のすべてを処理するステップと、
前記複数のコアのうちの1つまたは複数の前記論理プロセッサのうちの1つまたは複数を使用して前記論理関数のすべてを処理するステップと
を備える、システム。
【請求項１２】
コアのプールとして前記複数のコアを構成するステップをさらに備え、コアの前記プールの各々が、ハードウェアのいかなる変更も伴わずプログラミングによって単独で再構成可能である、請求項11に記載のシステム。
【請求項１３】
前記構成するステップが、算術処理ユニットの内および外へデータおよび結果を導くための中央プロセッサまたは周辺プロセッサからのこれ以上の介入なしに、アルゴリズムを並行して処理するように前記複数のコアのすべてを構成する、請求項12に記載のシステム。
【請求項１４】
前記アルゴリズムマッチングパイプラインコンパイラがプリコンパイラであり、前記複数のコアの各々の前記論理プロセッサが、定数または学習値のためのルックアップテーブルおよびレジスタとして前記プリコンパイラによって構成されるメモリブロックを使用する、請求項13に記載のシステム。
【請求項１５】
前記論理プロセッサによって前記ルックアップテーブルをセットアップするステップをさらに備え、前記ルックアップテーブルがnビットのルックアップテーブルであり、前記nビットのルックアップテーブルが、nビットのブール論理関数を真理値表として符号化するために使用される、請求項14に記載のシステム。
【請求項１６】
前記複数のコアのうちの1つまたは複数のための前記アルゴリズムマッチングパイプラインコンパイラを使用して、従来の非再構成可能かつ非パイプラインの汎用コンピュータプロセッサ用に書かれたハイレベル標準ソフトウェア言語から機械コードを生成するステップをさらに備える、請求項11に記載のシステム。
【請求項１７】
前記ハイレベル標準ソフトウェア言語が、あるタイプの従来型非再構成可能プロセッサ用に書かれ、機械コードを前記生成するステップは、前記アルゴリズムマッチングパイプラインコンパイラが、プリコンパイラとして、前記複数のコアの各々の再構成可能なフィールドプログラマブルゲートの前記アレイを構成するための機械コードを生成するために、前記タイプの従来型非再構成可能プロセッサを利用するステップを備える、請求項16に記載のシステム。
【請求項１８】
前記システムが、前記ハイレベル標準ソフトウェア言語がそのために書かれた前記タイプの従来型非再構成可能プロセッサとしての少なくとも1つのプロセッサを備え、前記ハイレベル標準ソフトウェア言語がそのために書かれた前記タイプの従来型非再構成可能プロセッサとしての前記少なくとも1つのプロセッサが、前記複数のコアの各々の再構成可能なフィールドプログラマブルゲートの前記アレイを構成するための前記機械コードを生成する、請求項17に記載のシステム。
【請求項１９】
前記複数のコアの各々が、前記ハイレベル標準ソフトウェア言語がそのために書かれた前記タイプの従来型非再構成可能プロセッサとしての前記少なくとも1つのプロセッサによるさらなる介入なしに、複雑な数理的および論理的なアルゴリズムを独立に解決するように構成される、請求項18に記載のシステム。
【請求項２０】
前記システムに値を入力することをさらに備え、前記システムが、さらなる介入なしに前記システムのマスタバススイッチに解を出力する、請求項19に記載のシステム。
【請求項２１】
前記複数のコアが2000個のコアを備える、請求項20に記載のシステム。
【請求項２２】
前記システムが500MHzのクロック速度を用いて毎秒360兆個の命令を動作させる、請求項21に記載のシステム。
【請求項２３】
前記システムがデータの入力に対するレイテンシを有するが、前記レイテンシが引き起こされた後、前記システムが各コアからの各クロックにおいて計算を実行するとともに結果を出力するように構成されるようにパイプラインがオーバーヘッドを低減する、請求項22に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
相互関連出願
本出願は、その全体が参照により本明細書に組み込まれる、2016年1月26日に出願されたProcessor With Reconfigurable Algorithmic Pipelined Core And Algorithmic Matching Pipelined Compilerと題する米国仮出願第62/287,265号の優先権を主張する。
【０００２】
分野は、コンピュータプログラミングならびにマイクロプロセッサの設計およびプログラミング、特に汎用ソフトウェア命令の再構成可能パイプライン並列処理に関する。
【背景技術】
【０００３】
図1Aは、従来型プロセッサのコンパイラを示す。IntelマイクロプロセッサやARMマイクロプロセッサなどの従来型プロセッサがよく知られている。たとえば、従来型プロセッサの概念図が図1Bに示される。これらのプロセッサは、現代のコンピュータおよびデバイスにとって中央処理ユニットの中心部であり、アルゴリズムを処理するために使用される。従来型プロセッサに関する問題は、これらのタイプのプロセッサが汎用であり、それらの性能が特定の適用例のために拡張されることを可能にする、いかなる実用的な方法でも再構成可能でないことである。別の問題は、プログラム実行制御が、数学演算、および処理の流れを変更する論理決定などのアルゴリズム関数(algorithmic function)の処理に大幅なオーバーヘッドを加えることである。従来型プロセッサをプログラムするためにハイレベルプログラミング言語が使用されてよく、コンパイラが、ハイレベルプログラミング言語における命令を特定のプロセッサアーキテクチャ用の機械コードに変換する。この機械コードは、プロセッサによってアクセス可能なメモリロケーションに提供され、システムアーキテクチャによって提供される任意のBIOSまたは他の呼出しと一緒にプロセッサハードウェアの動作用の命令を提供する。たいていの場合、数学的および論理的な処理指令は算術論理ユニット(ALU)に導かれ、算術論理ユニット(ALU)はプロセッサのプログラム実行制御部分に解を戻し、プロセッサは、数学アルゴリズムを解く正しい順序を通じてプロセッサを案内すること、論理決定、データの処理などのオーバーヘッドを管理する。データの処理を制御するために、機械コード命令がプログラム記憶域から連続的にフェッチされる。このオーバーヘッドは、機械性能を著しく制限する。
【０００４】
たとえば、以下のことは、従来のコンパイラが"C"プログラミング言語における数学演算をコンパイルするステップを示し、"C"プログラミング言語は、特定の従来型プロセッサ用の機械コードを作成するためにコンパイルされてよいハイレベルプログラミング言語の一例である。簡単な数学演算が、変数i1、i2、および結果sのためのデータ記憶ロケーションを定義するために、"var i1"、"var i2"、および"var s"を割り当てる。次いで、データロケーションi1およびi2において割り当てられた変数を合計するために、命令"s=i1+i2"が使用されてよい。コンパイラは、(a)最初にデータ(たとえば、i1、i2、およびs)のための記憶ロケーションを割り当て、(b)ソースコードを機械コードに生成する。従来型プロセッサは、コードが記憶されているメモリロケーションから機械コードの全部または一部分を取り出すことになる。次いで、従来型プロセッサは、機械コードを実行することになる。この例の場合、中央処理ユニット(CPU)は、メモリロケーションの中のi1データをロードするとともにそれをALUに送信することになり、メモリロケーションの中のi2データをロードするとともにそれをALUに送信することになり、i1およびi2に位置するデータを加算するようにALUに命令することになる。その時のみ、ALUは、i1およびi2のためのデータロケーションに位置する値の加算を実行することになる。このことは有用なワークステップであり、CPUによるセットアップがオーバーヘッドである。次いで、CPUは、"s"のためのデータロケーションからALU結果を得ることができ、それを入力および出力コントローラに送信することができる。結果が計算における中間ステップでない場合、このことは結果を提示するために必要なステップである。従来のプロセッサは、コンピュータプログラムの開発における時間を節約すべき要望から発展したが、中央処理ユニットおよび周辺設備の様々なアーキテクチャに対してハイレベルプログラミング言語がコンパイルされることが可能になった。また、CPUによって実行されるすべてのプロセスは、システム環境において動作する様々なプログラムの間でALUをタイムシェアリングすることによって、共通のALUを共有することができる。
【０００５】
特定の関数のための計算を迅速に実行することが可能なハードウェア電子回路の中に構築される、特定用途向け集積回路(ASIC)が知られている。これらは、特定の関数をハードウェアの中に配線接続することによってオーバーヘッドを低減する。
【０００６】
多数の論理ゲートおよびランダムアクセスメモリ(RAM)ブロックを有する、いくつかのフィールドプログラマブルゲートアレイ(FPGA)が知られている。これらのFPGAは、複雑なデジタル計算を実施するために使用される。そのようなFPGA設計は、極めて速い入力/出力データバスおよび双方向データバスを採用してよいが、セットアップ時間内およびホールド時間内での有効データの正しいタイミングを検証することは困難である。フロアプランニングにより、FPGA内でのリソース割振りがこれらの時間制約を満たすことが可能になる。FPGAは、ASICチップが実行できる任意の論理関数を実施するために使用することができる。出荷後に関数性を更新するための能力、設計の一部分の部分的な再構成、およびASIC設計に比べて低い非反復エンジニアリングコストは、一般にもっと高いユニットコストが考慮に入れられるときでも適用例によっては優位性を与える。
【０００７】
しかしながら、FPGAアーキテクチャの普及は、狭いニッチ製品に限定されている。プログラム命令に応答してFPGAのグループを連続的に再構成することによってそれらの命令のシーケンスを実行するためのFPGA仮想コンピュータは、米国特許第5,684,980号において特許権が得られた。図2は、このFPGAアーキテクチャ用の構造を示す。この発行済み特許は、逐次アルゴリズムまたは逐次命令の実行中に構成を連続的に変更する、FPGAのアレイを含む。FPGAのアレイの構成により、全体のアルゴリズムまたは命令のセットが、各計算ステップを実行する際に各命令がダウンロードされるのを待つことなく実行されることが可能になる。
【０００８】
FPGAの開発およびプロセッサとの統合は、「ランタイム」で再プログラムされるための能力の将来性を与えるが、実際には、当面のタスクに適合すべき再構成可能なコンピューティングまたは再構成可能なシステムは、これらのアーキテクチャをこの目的のためにプログラムおよび構成する際の難しさに起因して、実際の適用例において実施されることからほど遠い。
【０００９】
図2は、米国特許第5,684,980号において開示されるような、フィールドプログラマブルゲートアレイのアレイ、およびフィールドプログラマブルインターコネクトデバイス(FPIN:field programmable interconnection device)、すなわち、フィールドプログラマブルゲートアレイの内部リソースを任意の外部接続タスクから解放するクロスバースイッチを含む、仮想コンピュータのブロック図を示し、本開示およびその図面は、FPGAに精通する当業者の知識を開示する目的で、本明細書によってその全体が本明細書に組み込まれる。
【００１０】
図2は、逐次アルゴリズムを実行するために、ホストコンピュータの性能を拡張するためのコプロセッサとして、または仮想コンピュータプロセッサ内に構成および採用される、フィールドプログラマブルゲートアレイのアレイおよびフィールドプログラマブルインターコネクトデバイスを示す。逐次アルゴリズムは、普通は従来型マイクロプロセッサにおいて実行されることになる一連の従来型の命令に対応するようにプログラムされなければならない。その時、FPGA/FPINアレイによって逐次アルゴリズムの特定の計算タスクを実行するレートは、従来型マイクロプロセッサによって実行される対応する命令のレートよりもはるかに小さい。図2の仮想コンピュータは、FPGA/FPINアレイの再構成を統率する再構成可能制御セクションを含まなければならない。その目的のために設計されたソフトウェアパッケージを使用して、再構成可能制御セクションのために構成ビットファイルが生成されなければならない。次いで、構成ビットファイルは、仮想コンピュータの中の対応するFPGA/FPINアレイに送信されなければならない。図2は、アレイおよびデュアルポートランダムアクセスメモリ(RAM)が、ピンによって再構成可能制御セクション、バスインターフェース、およびコンピュータメインメモリにどのように接続されるのかを示す。バスインターフェースは、システムバスに接続される。
【００１１】
米国特許第5,684,980号は、ピンが、クロックピン、および再構成可能制御セクションをFPGA/FPINアレイに接続するピンを、どのように提供するのかを示し、再構成可能制御セクションの一例を示す。
【００１２】
米国特許第4,291,372号は、周辺デバイスとの間でのデータルーティングに対する特定の要件を処理する外部アプリケーション依存論理モジュールとともに動作する、専用命令フォーマッティングを伴うマイクロプロセッサシステムを開示する。マイクロプロセッサは、専用命令フォーマットを有するプログラムメモリを提供する。命令語フォーマットは、メモリアドレスのソースとしてプログラムカウンタまたはメモリ参照レジスタのいずれかを選択するための単一のビットフィールド、行われるべきデータルーティングのルートを規定する関数フィールド、ならびにソースロケーションおよび宛先ロケーションをアドレス指定するためのソースフィールドおよび宛先フィールドを提供する。以前には、周辺コントローラユニットは、特定の要件を処理するためのベースモジュールの中のプロセッサおよび制御回路でシステムに負担をかけた。
【００１３】
デジタル信号処理(DSP:Digital Signal Processing)ユニット、またはDSPプロセッサのアレイは、モニタやテレビなどの出力スクリーン上に画像を生成するためのピクセル処理などのいくつかのグラフィックス集約的タスクに対して性能を最適化する、並列アレイの中に配線接続されてよい。これらは特注であり、デジタル信号プロセッサがそれらのジョブを行うために作成されるグラフィカルアクセラレーション環境に固有のBIOSを含む。
【００１４】
マトリックスバススイッチング(MBS:Matrix bus switching)が知られている。たとえば、ARM DUI 0534B、ID072312として参照されるユーザガイド「AMBA(登録商標) 4 AXI4(商標)、AXI4-Lite(商標)、およびAXI4-Stream(商標)プロトコルアサーション、改訂:r0p1、ユーザガイド」著作権2010、2012は、高速であり当業者によって実施可能なマトリックスバススイッチングのためのシステムを教示する。そのユーザガイドは、システム設計者、システムインテグレータ、および関連するAMBA 4プロトコルに設計が準拠することを確認したい検証技術者のために書かれている。これは、たとえばAXI4、AXI4-Lite、またはAXI4-Streamであってよい。商標のすべては、EUおよび他の場所におけるARMの登録商標である。除外された場合、この参考文献は、参照によりその全体が本明細書に組み込まれる。MBSはデータ入力およびデータ出力のための高速バスであり、この参考文献は、システム技術者がMBSの一例をプロセッサシステムアーキテクチャに統合するための方法およびハードウェアを教示する。
【００１５】
このことのすべては当技術分野で知られているが、従来技術における例は、幅広いアルゴリズムを処理するフレキシビリティを維持するとともに処理システム用のソフトウェア開発のために"C"などのハイレベル標準プログラミング言語を使用する一方、従来の処理システムによって生成されるオーバーヘッドのほとんどすべてを除去しない。
【先行技術文献】
【特許文献】
【００１６】
【特許文献１】米国特許第5,684,980号
【特許文献２】米国特許第4,291,372号
【非特許文献】
【００１７】
【非特許文献１】「AMBA 4 AXI4、AXI4-Lite、およびAXI4-Streamプロトコルアサーション、改訂:r0p1、ユーザガイド」、ARM DUI 0534B、ID072312
【発明の概要】
【課題を解決するための手段】
【００１８】
チップ上のパイプライン並列プロセッサは、処理ユニットと、アルゴリズムマッチングパイプラインコンパイラによってプログラムされる再構成可能なフィールドプログラマブルゲートのアレイとを備え、アルゴリズムマッチングパイプラインコンパイラは、プリコンパイラであってよく、その結果、アルゴリズムマッチングパイプラインコンパイラは、並列処理を有しない標準的なプロセッサ上での動作用に設計されたソースコードを、処理ユニットによって処理するためにプリコンパイルし、処理ユニットおよびアルゴリズムマッチングパイプラインコンパイラ(AMPCまたはASMLと呼ばれる)は、パイプライン並列プロセッサとして動作するようにフィールドプログラマブルゲートを構成する。たとえば、プロセッサは、再使用可能アルゴリズムによるパイプラインコア(RAPC:reusable algorithmic pipelined core)と呼ばれることがある。並列プロセッサは、算術処理ユニットを制御するためのオーバーヘッドなどの処理ユニットからのこれ以上のオーバーヘッドなしに、タスクを完了するように構成される。
【００１９】
一例では、再使用可能アルゴリズムによるパイプラインプロセッサは、"C"、"C++"などのハイレベル標準ソフトウェア言語を使用してアルゴリズムを並行して処理するように構成される、コンピュータのプールを備える。たとえば、コンピュータのプールは、特定の計算にとって必要とされるような異なるアルゴリズムを実行するように、AMPCの出力に基づいて再プログラムされ、AMPCは、それにとって利用可能なRAPCリソースを用いてセットアップされる。
【００２０】
たとえば、再使用可能アルゴリズムによるパイプラインコア(RAPC)は、3つのモジュール、すなわち、インテリジェントバスコントローラまたは論理決定プロセッサ(LDP:logical decision processor)、デジタル信号プロセッサ(DSP)、およびマトリックスバススイッチが備えられてよい。論理決定プロセッサ(LDP)は、マスタバススイッチ(MBS)の制御のために必要に応じて再プログラム可能な、再構成可能な論理関数を備える。DSPは、数学演算を実行するための再構成可能な数理プロセッサを備える。一例では、RAPCによって処理される数学演算のすべては、DSPによって処理される。一例では、RAPCによって処理される論理関数のすべては、LDPによって処理される。マトリックスバスルータまたはマトリックスバススイッチ(MBRまたはMBS)は、アルゴリズムの処理中に中央プロセッサまたは周辺プロセッサからのこれ以上の介入なしにアルゴリズムを完了するために、必要に応じて、あるRAPCから別のRAPCに、かつ入力/出力コントローラおよび/または割込み生成器との間でデータおよび結果をルーティングする、再構成可能なプログラマブル回路として定義される。したがって、算術処理ユニットの内および外へデータおよび結果を導くための中央プロセッサまたは周辺プロセッサによる介入を必要とする静的な非再構成可能ハードウェアと比較して、パイプライン化することによってオーバーヘッドがはるかに低減される。一例では、LDPが論理決定および反復ループを処理し、アルゴリズムを学習するために結果メモリがLDPによって提供される。
【００２１】
一例では、RAPCによって処理される数学演算のすべてはDSPによって処理され、論理関数のすべてはLDPによって処理される。一例では、複数のRAPCがコアのプールとして構成され、コアのプールの各々は、ハードウェアのいかなる変更も伴わずプログラミングによって単独で再構成可能である。たとえば、RAPCのすべてが、並行してアルゴリズムを処理するように構成されてよい。一例では、LDPは、定数または学習値のためのルックアップテーブル(LUT:Look Up Table)およびレジスタとして、メモリブロックを使用する。LDPによってセットアップされるLUTを使用する真理値表として任意のn入力ブール論理関数を符号化するために、nビットのLUTが使用されてよい。
【００２２】
一例では、アルゴリズムマッチングパイプラインコンパイラ(AMPC:algorithmic matching pipelined compiler)は、"C"、"C++"、Pascal、Basicなどのより高いレベルのコンパイル可能ソフトウェア言語から機械コードを生成する。従来の非再構成可能かつ非パイプラインの汎用コンピュータプロセッサのために書かれた標準的なソースコードが、RAPCのうちの1つまたは複数を構成するための機械コードを生成するためにAMPCによって処理されてよい。たとえば、AMPCは、従来のARMプロセッサまたは従来のIntelプロセッサのための、先在する標準コードから機械コードを生成し、このAMPCプリコンパイラによって生成される機械コードは、ARMプロセッサまたはIntelプロセッサを使用してRAPCを構成する。したがって、新たなコンピュータシステムは、既存のARMプロセッサ、Intelプロセッサ、AMDプロセッサなどの従来型プロセッサ、および複数のRAPCを備え、各RAPCは、たとえばDSP、LDP、およびMBSを備える。しかしながら、既存のコプロセッサまたはアクセラレータとは異なり、RAPCは単に周辺コプロセッサではない。代わりに、プリコンパイラまたはAMPCがそれらのジョブを行うようにRAPCを構成した後、RAPCは、従来型プロセッサによるさらなる介入なしに複雑な数理的および論理的なアルゴリズムを解くように独立に再構成される。構成されるRAPCに値が入力され、MBSに解が出力される。一例では、複数のRAPCは、再構成可能なASICなどの単一のチップ上に配設される。再構成可能なASICとは、RAPCの各々が、AMPC、ならびにARMプロセッサ、AMDプロセッサ、およびIntelプロセッサなどの汎用の既存プロセッサアーキテクチャによって、特定の動作のために再プログラム可能であるような、RAPCを備えるように設計されたチップを意味する。このようにして、そのような再構成可能なASICは、2000個のRAPCを含んでよく、500MHzのクロック速度を用いて毎秒360兆個の命令を動作させてよい。したがって、2000個のRAPCを備える単一の再構成可能なASICは、いかなる今日の従来型汎用プロセッサよりも100倍速く動作することができる。RAPCのすべては、データが利用可能である間、パイプライン構成で並行して動作してよい。単一のRAPCは、標準的なプロセッサよりも100倍速く命令を実行してよい。500MHzのクロック速度で動作し20個のRAPCを備える再構成可能なASICは、毎秒300億個の命令を実行することができる。単一のチップは、従来のサイズのASICの中に最大2000個のRAPCを備えてよい。したがって、2000個のRAPCを備える従来のサイズのASICは、専用プログラミング言語に頼る必要なく、従来の処理システムよりも200,000倍速く命令を実行してよい。代わりに、既存のプログラムは、複数のRAPCを備える再構成可能なASICとともに動作するようにポートオーバー(port over)されてよく、既存のハイレベルプログラミングを実質的に書き直すことなく、並行した命令のパイプライン実行から利益を受けてよい。一例では、AMPCは、複数のRAPCを備える再構成可能なASIC上に組み込まれている、ARM汎用プロセッサアーキテクチャのための既存のコードをプリコンパイルする。この新たなプロセッサアーキテクチャ(ICAT)は、チップ上でARMプロセッサアーキテクチャと複数のRAPCとを組み合わせることによって、驚くべき予想外の性能を達成する。ICATチップ上の組込みARMプロセッサは、"C"などのハイレベルプログラミング言語で書かれた先在するプログラムからAMPCによって生成された機械コード命令を実行し、秒当りの命令の驚くほど迅速な実行を実行するようにICATチップ上の複数のRAPCを構成する。ARMプロセッサはまた、知的監視、診断、およびICATチップの外部にある周辺装置との通信を制御する。したがって、外部の世界に対して、ICATチップは、数理コプロセッサを必要としない、極めて速いARMプロセッサであるように見える。
【００２３】
代替例では、ICATチップは、AMDプロセッサを組み込むことができ、外部の世界に対してAMDプロセッサであるように見えることができる。
【００２４】
また別の例では、ICATチップは、Intelプロセッサを組み込むことができ、外部の世界に対してIntelプロセッサとして見える。
【００２５】
驚くべきことに、外部の世界に対してICATチップが単に標準プロセッサに均等なレートで命令を実行することが可能な標準的な非再構成可能かつ非パイプラインのプロセッサであるように見えても、ICATチップは、標準プロセッサのために書かれたプログラムを書き直すことなく、驚くべき予想外のレートで、すなわち、世界に対面する標準プロセッサよりも100〜200,000倍速く命令を実行する。FPGA上で関数するようにコードを書き直すという面倒な雑用にまさるこの簡略化は、一般のプログラマにとってアクセス可能なFPGAを最終的に利用する。AMPCは、一例では、ICATチップ用のランタイムコードを生成しない。代わりに、AMPCは、プログラムをプリコンパイルし、RAPCに最も適した命令を分離して取り出す。次いで、AMPCは、ICATチップ上(または、一例では、並行して動作する複数のICATチップを使用する他の場所)の複数のRAPCの各々をセットアップするためのコードを生成し、そのRAPCが、次いで、パイプラインにかつ並行して動作する。代替として、RAPCは、ICATによって受信された命令、またはICATチップによって前に受信された履歴的な命令に基づいて、リアルタイムで再構成されてよい。したがって、ICATチップが類似の目的のために一貫して使用される場合、ICATチップは、ますます高速で動作するように経時的に学習することができる。当然、たとえば先入れ先出し(first in first out)または後使用後再構成(last used last reconfigured)で論理的および数理的な古い構成を所定の位置に保ちながら、RAPCが新たな論理式および数式を解くようにリアルタイムで構成される場合に、このことは起こる。特定の目的のために再構成されるRAPCのセットは、頻繁に使用される場合、たとえば後使用後再構成アルゴリズムが採用される場合、RAPCを必要とする新たなアルゴリズムにとって利用可能な他のRAPCがなくなるまで、別の目的に対して再構成されない。このようにして、最も使用されるアルゴリズムは構成される必要がなく、以前の使用によってすでに事前構成されている。
【００２６】
RAPCは、中央処理ユニットによって構成されると、オーバーヘッドなしに動作して、RAPCがそのために構成されている数学命令、論理命令、および反復命令が完了するまで命令を実行する。
【００２７】
一例では、ICATチップはセットアップレジスタを備え、AMPCは、ICATチップのセットアップレジスタをセットアップするための命令を生成し、ICATチップは、特定の命令を完了するようにRAPCを構成する。RAPCは、初期化されると、中央処理ユニットによるさらなる監督なしに継続的に動作する。一例では、AMPCは、VerilogまたはVivadoハードウェアコンパイラなどのハードウェアコンパイラからRAPCハードウェアデータを受信する。ハードウェアファイルは、ハードウェアコンパイラによって生成されてよく、ICATチップのセットアップレジスタ(または、一例では、複数のICATチップのセットアップレジスタ)用の構成データを書き込むコードを生成するために、AMPCによって使用されてよい。
【００２８】
一例では、AMPCは、標準的な処理アーキテクチャのために"C"などのハイレベルプログラミング言語で書かれたプログラムから、ICATチップのセットアップレジスタ用の構成データを抽出する。たとえば、AMPCは、オーバーヘッド命令を無視し、1)算術命令および算術データ、2)論理決定および論理データ、ならびに3)分岐命令または呼出し/復帰命令および宛先、4)反復ループ、反復決定、および反復データ、5)DSPセットアップルーチンおよびDSPセットアップデータ、ならびに6)ループおよび分岐のためのコードエントリポイントラベルのために、プログラムからICATチップのセットアップレジスタ用のコードを生成する。たとえば、AMPCは、これらの命令を使用してICATのセットアップレジスタを構成し、数学アルゴリズムの完了のためのDSP、論理決定のためのLDPおよびLDPのルックアップテーブルに対する値、ならびに様々な処理アルゴリズムにおけるエントリポイントおよびICATハードウェアの中の割当て済みアドレスへの分岐、呼出し、および復帰の宛先ラベルマッピングのためのMBSを構成する。たとえば、RAPCハードウェアテーブルは、RAPCごとに構築され、DSP、LDP、およびMBS構成テーブルを含む。たとえば、DSP、LDP、およびMBSは、RAPCにおいて頻繁に使用されるものとして構成されるが、DSPまたはLDPが必要とされないとき、RAPCは、AMPCおよびICATアーキテクチャによるこの共通構造を省くようにさえ再構成されてよい。そのため、DSP、LDP、およびMBSがRAPCのうちのいくつかの中に存在する間、他のRAPCは、ICATプロセッサ上で実行されるべきコードに固有の異なる構造を有してよい。
【００２９】
一例では、ICATアーキテクチャおよびAMPCは、AMPCによって再構成されることが可能なハードウェア用の他のアーキテクチャに依存するアーキテクチャである。たとえば、AMPCは、宛先RAPCが近くにあるか、またはDSPからLDPにもしくはその逆にデータがルーティング中である場合、結果またはデータを宛先に直接接続することによってICATアーキテクチャ内での宛先の分岐または呼出しを実施してよく、たとえばいかなるオーバーヘッドも伴わずに直ちに結果またはデータを命令の実行にとって利用可能にする。代替として、AMPCは、MBSを使用して宛先の分岐または呼出しを実施してよく、結果およびデータは、高速ストリーミングインターフェース上で宛先にトランスポートされ、宛先は、別のRAPCまたは他の宛先であってよく、宛先への高速ストリーミングインターフェースを介して、命令のさらなる実行のためにデータを利用可能にする。
【００３０】
一例では、AMPCは、ハイレベルプログラミング言語で書かれたコードをプリコンパイルする間にAMPCによって割り当てられるRAPCリソースに気づいている。したがって、ICATアーキテクチャは、複数のRAPCによって実行される命令の間のインターコネクト長を最小限に抑えることなどによって、RAPCリソースの使用を最適化するようにAMPCによって構成されてよい。この最適化は、反復手法または試行錯誤手法によって完了してよい。一例では、AMPCは、共通の命令セットのための宛先の分岐または呼出しに対してMBSの使用を最小限に抑えることなどによって、数学アルゴリズム、論理アルゴリズム、または数学アルゴリズムと論理アルゴリズムとの組合せに関わらず、いくつかの命令の使用の履歴パターンに基づいて最適化を改善する学習アルゴリズムを備える。MBS実装形態の一例については、背景技術におけるARM MBS例を参照されたい。
【００３１】
一例では、RAPCを構成するための従来型プロセッサ、および従来のハイレベルソースコードをコンパイルして従来型プロセッサがRAPCをセットアップするための命令にするためのAMPCとともに、RAPCがチップの中に統合される。RAPCは、DSP、LDP、およびMBSを備える。この例では、各DSPは、乗算、除算、加算、減算、および他の数学関数などの整数計算および浮動小数点計算などの複数の演算のいずれかをプログラムするためのセットアップインターフェースを有する。DSPは、セットアップデータによって決定されるような数学関数の様々な組合せとともに連結または動作できるオペランドデータ用の4つの入力部を有してよい。この例では、各DSPは、ステータスデータとともに結果データとして出力される48ビットのアキュムレータを有する。ステータスデータは、たとえばキャリーアウト(carry out)、等しい(equal)、より大きい(greater than)、およびより小さい(less than)を含む。この例では、各LDPは、ルックアップテーブル、ループカウンタ、および定数レジスタをプログラムするための、セットアップインターフェースを有する。各LDPは、反復アルゴリズムがいつ完了するのかを検出するための「ループカウンタ」を有する。各LDPは、ルックアップテーブルへの入力用の定数データを保持できるレジスタを有する。各LDPは、関数を実行するために使用できるメモリのブロックを有する。ルックアップテーブル関数は、たとえば実装することが可能でありループカウンタを使用して連続的にアクセスできるルックアップテーブル、実装することが可能であり制御目的のためにDSPステータス、定数レジスタ、またはDSP結果データによってアクセスできるルックアップテーブル、および実装することが可能であり制御目的のために種々の論理信号を出力できる論理ルックアップテーブルを含んでよい。LDPは、その入力部からその出力部に結果データを渡してよい。LDPは、たとえばその出力部において結果データ用の1つのパイプラインレジスタを有してよい。代替として、LDPは、その出力部において結果データ用の同期クリアイネーブルを有する2つのパイプラインレジスタを有してもよい。たとえば、チップは、各々がDSP、LDP、およびMBSを備えるとともに各々がAMPCによって従来型プロセッサに提供されるコードによってセットアップされる複数のRAPCを備える、ICATチップであってよい。
【００３２】
一例では、AMPCは、複数のRAPCの数および複数のRAPCのロケーションを規定するための入力アーキテクチャを有するコンパイラを備える。AMPCは、ハイレベルソースコードをフィルタ処理し、複数のRAPCのうちの1つまたは複数の構成によって最適化されることが可能な数学アルゴリズムおよび論理アルゴリズムを識別する。たとえば、ビデオ処理、数学アルゴリズム、または論理アルゴリズムが識別される場合、AMPCは、ビデオ処理、数学アルゴリズム、および/または論理アルゴリズムを実行するように、RAPCのうちの1つまたは複数のDSP、LDP、およびMBSをセットアップする。たとえば、AMPCは、ARMプロセッサなどの従来型プロセッサの動作用の"C"言語ソースコードから機械コードを作成し、ARMプロセッサは、プロセッサに入力されるデータを処理するとともにプロセッサからデータを出力する際に使用されるRAPCの各々の、DSP、LDP、およびMBS部分の各々をセットアップする。
【００３３】
プロセッサの外部にあるシステムに対して、ICATプロセッサは、異常に速い従来型プロセッサであるように見える。プロセッサ内では、RAPCのDSP、LDP、およびMBSは、従来のシングルコアプロセッサよりも数十倍、数百倍、さらには数千倍速いレートでデータを処理中である。RAPCごとに、DSPは第1のクロックにおいてその動作を実行し、LDPは第2のクロックにおいて結果をテストするとともに制御決定および結果データを出力し、MBSは第3のクロックにおいて制御データに基づいて2つの宛先のうちの一方に結果データをルーティングする。したがって、各RAPCは、DSPからMBSまで3クロックのレイテンシを有する。ストリーミングデータの場合、開始されると、MBSは、レイテンシ期間の後の後続の各クロックにおいてデータを出力してよい。
【００３４】
一例では、再構成可能プロセッサを構成するためのシステムは、非再構成可能プロセッサ、複数の再構成可能コア、および非再構成可能プロセッサ用のハイレベルプログラミング言語で書かれたコードを受け入れることが可能なアルゴリズムマッチングパイプラインコンパイラを備え、コンパイラは、複数の再構成可能コアのうちの1つまたは複数において利用可能なパイプライン化から利益を受けることができる、ハイレベルプログラミング言語で書かれたコードを識別し、複数の非再構成可能プロセッサのうちの1つまたは複数をセットアップするための、非再構成可能プロセッサ用のコードを出力する。
【００３５】
一例では、プロセッサは、アルゴリズムマッチングパイプラインコンパイラから命令が受信された結果として、非再構成可能プロセッサコアが複数の再使用可能アルゴリズムによるパイプラインコアの各々を構成および再構成することが可能であるような、非再構成可能プロセッサコア、および非再構成可能プロセッサコアに結合された複数の再使用可能アルゴリズムによるパイプラインコアを備える。たとえば、プロセッサは、単一のチップの中に含まれる。一例では、各再使用可能アルゴリズムによるパイプラインコアは、DSP、LDP、およびMBSを備え、DSPはLDPに対してパイプライン化され、LDPはMBSに対してパイプライン化され、その結果、非再構成可能プロセッサは、各再使用可能アルゴリズムによるパイプラインコア内で行われる処理のいずれも制御しない。
【００３６】
定義
アルゴリズムマッチングパイプラインコンパイラすなわちAMPCとは、従来の非再構成可能プロセッサ用のハイレベルプログラミング言語で書かれたコードを受け入れることが可能なコンパイラであり、AMPCは、RAPCまたはフィールドプログラマブルゲートアレイなどの再構成可能なコアまたはプロセッサにおいて利用可能なパイプライン化から利益を受けることができるハイレベルプログラミング言語で書かれたコードを識別し、再構成可能なコアまたはプロセッサを使用するための命令を提供する前に、再構成可能なコアまたはプロセッサを構成するように非再構成可能プロセッサに命令する、非再構成可能プロセッサ用のコードを出力する。再使用可能(または、再構成可能)アルゴリズムによるパイプラインコア(または、コンピュータ)すなわちRAPCとは、セットアップデータによって決定されるような数学関数の様々な組合せとともに連結または動作することができるオペランドデータ用の4つの入力を有する、整数計算および浮動小数点計算などの複数の演算のいずれかをプログラムするためのセットアップインターフェースと、ステータスデータとともに結果データとして出力される48ビットのアキュムレータとを含むDSP、関数を実行するために使用できるルックアップテーブル、ループカウンタ、および定数レジスタをプログラムするためのセットアップインターフェースと、メモリのブロックとを有するLDP、ならびにMBSを備える、パイプライン構造を有する再構成可能な処理コアとして定義される。MBSとは、アルゴリズムの処理中に中央プロセッサまたは周辺プロセッサからのこれ以上の介入なしにアルゴリズムを完了するために、必要に応じて、あるRAPCから別のRAPCに、かつ入力/出力コントローラおよび/または割込み生成器との間で、データおよび結果をルーティングする、再構成可能なプログラマブル回路として定義される。
【００３７】
以下の図面は例示的な例であり、最後に発行してよいいかなる請求項もそれ以上に限定しない。
【図面の簡単な説明】
【００３８】
【図１Ａ】従来のコンパイラ用の従来技術フローチャートである。
【図１Ｂ】従来のコンピュータ用の従来技術プロセッサを示す図である。
【図２】米国特許第5,684,980号からのブロック図である。
【図３】図1Aにおけるフローチャートとの比較のためにAMPCコンパイラの一例を示すフローチャートである。
【図４】ICATアーキテクチャの一例を示す図である。
【図５】プログラマがAMPCをどのように使用してよいかという一例のフロー図である。
【図６】再使用可能アルゴリズムによるパイプラインコンピュータの概略図の例である。
【図７】AMPCコンパイラを用いたコード例1のコンパイルから得られるハードウェア構成の図の概略図である。
【図８】コンシューマ電子デバイスにおけるリアルタイムロスレスデータ圧縮による、図7の例の生の処理能力からの劇的な利益を示す図である。
【発明を実施するための形態】
【００３９】
同じ参照符号が使用されるとき、これらのラベルは図面に示す例において類似の部分を指す。
【００４０】
たとえば、ICATアーキテクチャは、任意の標準的なマイクロプロセッサユニットアーキテクチャを模倣する。そのアーキテクチャは、同じクロック速度を有する単一の標準マイクロプロセッサアーキテクチャと1:1比較が行われるときに、ミップス(MIPS)単位で100:1の優位性を達成すべき1つまたは複数のフィールドプログラマブルゲートアレイ(FPGA)のような、製造後に顧客または設計者によって構成されるように設計された集積回路におけるパイプライン化およびはるかに豊富なゲート密度を利用する。FPGAは、異なる構成で相互配線(inter-wired)することができる多くの論理ゲートのような、プログラマブル論理ブロックのアレイ、およびブロックが「互いに配線される」ことを可能にする再構成可能なインターコネクトの階層を含む。論理ブロックは、複雑な組合せ関数を実行するように構成することができるか、またはANDおよびXORのような単に単純な論理ゲートであってよい。ほとんどのFPGAでは、論理ブロックはまた、単純なフリップフロップ、またはメモリのより完全なブロックであってよい、メモリ要素を含む。
【００４１】
極めて大きい性能の飛躍により、プロセッサが、たとえばマシンビジョン、ビデオ処理、オーディオ処理、ロボット制御システム、多軸制御システム、モバイル通信、仮想現実、人工知能、ライブストリーミング、生体監視、モノのインターネット、スーパーコンピューティング、量子コンピューティング、航空宇宙制御システム、複雑なシステムのシミュレーションおよびモデリング、ならびに信号処理用途などのデータ集約的な適用例のために使用されることが可能になる。
【００４２】
一例では、アルゴリズムの計算集約的な処理のために低電力が使用される。たとえば、ICATアーキテクチャは、標準的なマイクロ処理ユニット上で実施される同じ計算に対して、エネルギー使用量の100から1への低減を、より好ましくは、1000:1の優位性をもたらし、熱および電力消費を低減する。
【００４３】
一例では、ICATは、適用例にとって必要とされるような多くの並列プロセッサとしての構成で実行されてよく、標準的なマイクロプロセッサと比較して、なお一層性能を高める。たとえば、複数のプロセッサアーキテクチャが同時に実行されてよい。たとえば、新たな仮想機械が特に新たなアーキテクチャ用に書かれたコードを実行しながら、レガシーコードと互換性のある仮想機械上でレガシーコードが実行されてよい。一例では、このことは、レガシーコードを新たなシステムアーキテクチャに適応させるために必要とされることになるような、大規模な回帰テストに対する必要性を低減する。
【００４４】
ある適用例では、ICATアーキテクチャの速度および拡張性は、そのコードおよび/またはハードウェアが限界まで動作している顧客のために、生の速度および拡張性にとって、必要とされる量のデータを処理することが不可能なレガシーシステムに適用される。
【００４５】
一例では、電源投入時またはその前に再構成がコンパイルされ、最終製品性能に対する影響をほとんど伴わずにプランニングを大幅に簡略化する。たとえば、FPGAは、このアーキテクチャのためのホストハードウェアである。既存のコードの大きい書直しを伴わずに、毎秒数百万個の命令(MIPS)が容易に加えられてよい。既存のコードは、既存のコードの再コンパイルを除いてほとんど無修正で実行されてよい。たとえば、多数の共通入力の並列処理を必要とするアルゴリズムは、このICATアーキテクチャにとって理想的な候補である。
【００４６】
一例では、古いプロセッサおよび新たなプロセッサが並行して動作する。既存のコードは、再コンパイルされてよく、変更が行われていないことを保証するための最低限の回帰テストとともに、ほぼ手つかずで動作してよい。例外は、タイミングがアーキテクチャの動作に影響を及ぼす場合、およびハードウェア周辺装置が変更される場合である。たとえば、ICATアーキテクチャは、生の計算速度を高めるために使用されてよく、コードのアクセラレーションは、必要とされるときにハードウェアを変換することによって実施されてよい。
【００４７】
一例では、ICATアーキテクチャは、任意の潜在的なコード非互換性問題を捕らえるフロントエンドプリコンパイラを備える。このフロントエンドプリコンパイラは、これらの潜在的なコード非互換性問題を自動的に解決する。たとえば、ICATアーキテクチャは、異なる開発者が精通している様々なプロセッサアーキテクチャをエミュレートしてよい。たとえば、ICATアーキテクチャは、2つ以上のプロセッサをエミュレートしてよく、複数の開発者に好感をもたれているプロセッサに対してプロジェクトがコーディングされること、および複数の異なる仮想プロセッサ上で同時にコードを実行することを可能にする。一例では、複数の異なるプロセッサが、多重処理環境において異なるコードセットを実行することになり、プログラム開発者は、コードと互換性のある複数の領域のうちの1つに対してコードをコンパイルする。
【００４８】
一例では、プリコンパイラは、様々な処理アルゴリズムにとって必要とされるハードウェア構成コードを生成するアルゴリズムマッチングパイプラインコンパイラである。ICATアーキテクチャを構成するためのファームウェアは、複数の処理タスク用の論理式および数式から生成されてよい。たとえば、複数のプロセッサは、低性能タスクと高性能タスクとの混合を実行するために、マトリックスアレイにおいて構成されてよい。
【００４９】
ICATアーキテクチャが、1つの特定の多重処理環境にしか適用可能でない機械言語でプログラムすることによって得られるいかなる速度優位性も圧倒する、生の速度優位性をもたらすので、ICATアーキテクチャは、より高いレベルの言語を使用して開発された処理コードを含み、開発プロジェクトを完了するための時間を実質的に短縮する。
【００５０】
ICATアーキテクチャは、CまたはC++などのハイレベルプログラミング言語を用いた使用に対して最適化されているハードウェア固有コマンドに対してレガシーコードをチェックする、コンパイラまたはプリコンパイラを含む。図1と図3との比較は、たとえばアルゴリズムマッチングパイプライン化コンパイラ(AMPC)に含まれる、追加のステップを示す。
【００５１】
一例では、インビルト協調(inbuilt coordination)を伴う標準的な多重処理/マルチタスク周辺装置のセットが、ICATアーキテクチャによって提供される。リアルタイムオペレーティングシステム(RTOS)が採用されてよい。たとえば、マルチタスクリアルタイムオペレーティングシステムが、ICATアーキテクチャの中に組み込まれる。たとえば、マイクロコントローラオペレーティングシステム(MicroC/OS)は、1991年に組込みソフトウェア開発者Jean J. Labrosseによって設計されたリアルタイムオペレーティングシステムである。それは、主にCプログラミング言語、すなわち、ハイレベルプログラミング言語で書かれた、マイクロプロセッサ用の優先度ベースプリエンプティブ(priority-based pre-emptive)リアルタイムオペレーティングシステムである。ICATアーキテクチャの生の速度により、たとえばそのようなRTOSの使用が可能になる。MicroC/OSは、C言語におけるいくつかの関数の定義を許容し、その各々は、独立したスレッドまたはタスクとして実行することができる。各タスクは異なる優先度で動作し、各タスクは、それがICATアーキテクチャの仮想プロセッサを所有すると考える。優先度が低いタスクは、優先度が高いタスクによっていつでもプリエンプト(preempt)されてよい。優先度が高いタスクは、遅延またはイベントなどのオペレーティングシステムサービスを使用して、優先度が低いタスクが実行するのを許容してよい。タスク管理、タスク間通信、メモリ管理のために、またMicroC/OSのタイミングをとるために提供される、オペレーティングシステムサービスがある。MicroC/OSはオープンソースであり、いくつかの異なるプロセッサアーキテクチャに適応可能である。
【００５２】
既存の設計がICATアーキテクチャに変換されることを可能にするために、ICATアーキテクチャのためにPCBAレイアウトソフトウェアおよびエンジニアリングツールが提供される。
【００５３】
一例では、標準的なVerilogまたはVHDLコードを使用してパイプラインアーキテクチャが達成される。たとえば、1024ワードの命令キャッシュ、データキャッシュ、および多重レベルメモリキャッシュアーキテクチャが、ICATアーキテクチャにおいて提供されてよい。ICATアーキテクチャのパイプライン化は、決定処理における分岐がどの進路に発生する傾向があるのかを検出する学習アルゴリズムを含んでよく、その経路を将来におけるデフォルト経路にすることが学習アルゴリズムを通過する。別の例では、割込みコードが分離され、割込みハンドラはプライベートコードロケーションを有する特定の入力にとって専用である。一例では、ICATアーキテクチャは、マルチプロセッサデバッガを含む。たとえば、関数が分離されるように既存のコードが良好に区分されることを保証するために、既存のコードが前処理デバッガによって処理されてよい。次いで、単一のデバッガが、動作の独立した各スレッドにおいて実行されてよい。
【００５４】
たとえば、再構成可能アルゴリズムによるパイプラインコア(RAPC)は、1000個を超えるIntel i7マイクロプロセッサと、より好ましくは、10,000個を超えるIntel i7マイクロプロセッサと均等な、ミップスおよびメガフロップスを提供する、2インチチップパッケージの中に設けられてよい。
【００５５】
一例では、ICATアーキテクチャは、既存のデバッグツールと互換性がある。別の例では、ICATアーキテクチャは、プロセッサ間通信を含まない既存のレガシーコードを実行するように実装される。ICAT固有ハードウェアは、すべてのレガシーコードに共通の、良好にデバッグされた単一のブロックとして統合される。たとえば、共通多重処理ユニットのメイン関数を厳密に模倣する周辺装置が、ICATアーキテクチャとそっくりに作られる。たとえば、スーパーセット周辺装置により、ハードウェア構成が顧客によって容易に構成されることが可能になる。
【００５６】
一例では、ICATアーキテクチャコンパイラまたはプリコンパイラは、クロックサイクルを計数する低レベルコードタイミングループ、命令フェッチを可能にする遅延、および他の非互換タイミングコードを検出し、修復、またはICATアーキテクチャ内で提供される互換性のあるハイレベルプログラミングとの交換のために、手作業または自動のいずれかでこれらにフラグをつける。
【００５７】
一例では、ICATアーキテクチャは、旧来のアーキテクチャにまさる4:1のミップス優位性をもたらす。別の例では、優位性は少なくとも100:1である。
【００５８】
一例では、ICATアーキテクチャは、標準的なソースコードフォーマットにおける処理アルゴリズムを受け入れるコンパイラである、アルゴリズムマッチングパイプラインコンパイラ(AMPC)を備える。AMPCは、ICATアーキテクチャとともに動作可能な従来型処理システム用のファームウェアを生成する。コンパイラは、ICATハードウェアを構成する命令を生成し、その結果、アーキテクチャは、AMPCによって再構成可能でない旧来のマイクロプロセッサと比較して、改善された性能でアルゴリズムを処理する。詳細には、AMPCは、アルゴリズムによる集約的な計算処理を必要とする適用例に対してプロセッサ性能を最適化するために、パイプライン化を使用する。たとえば、このファームウェアは、最適性能を伴ってアルゴリズムを処理するICATハードウェアアーキテクチャを構成するために、従来型処理システム上で実行されてよい。
【００５９】
一例では、AMPCは、アルゴリズムを直接処理するようにICATアーキテクチャのプロセッサリソースを構成する、ICATハードウェアを動作させるためのコードを生成することが可能な従来のコンパイラソースコードをコンパイルする、コンパイラを提供する。たとえば、AMPCは、C、C#、C++、Matlab、または他の従来型コンパイラなどの従来型コンパイラと互換性のあるソースコードを利用する。
【００６０】
一例では、AMPCによって生成されるファームウェアは、ICATアーキテクチャのメイン処理システム上で動作する。たとえば、メイン処理システムは、ICATアーキテクチャの残部と同じチップ上の従来型プロセッサであり、ICATアーキテクチャとともにシームレスに動作する。この例では、AMPCは、C、C#、C++などのソースコード用のハイレベルプログラミング言語で書かれたコードを受け入れ、AMPCは、メイン処理システム上で動作するICATアーキテクチャ用のファームウェアを出力する。このことは、ICATアーキテクチャ用のファームウェアが、開発者が精通しているハイレベルプログラミング言語でプログラムされることを可能にすることによって、ICATアーキテクチャの動作用のコーディングを簡略化する。ICATアーキテクチャの生の速度は不利益をなくし、速度を最適化するために機械レベルコードをプログラムすべき、いかなる必要性も低減する。代わりに、ハイレベルプログラミング言語が、特定の適用例に対して解かれるべきアルゴリズムに基づいて性能を最適化するために、ファームウェアを最適化する。たとえば、ICATアーキテクチャは、一例として、ロボットビジョンシステムのために、ファームウェアにおいて規定される少なくとも1つの仮想機械上で、最適性能を可能にするように再構成可能である。
【００６１】
旧来のマイクロプロセッサとは異なり、一例では、ICATアーキテクチャのAMPCは、if-then-elseプロセスなどのソフトウェアシンタックスをコンパイルして、たとえばパイプライン化を使用してもっと少数のクロックサイクルの中でプロセスを最適に実行するように、ICATアーキテクチャのハードウェアを再構成するファームウェアにしてよい。ファームウェアを実行することによって、ICATアーキテクチャが構成される。対照的に、従来のコンパイラは、すべての従来型プロセッサが使用するファームウェアを構築するが、従来型プロセッサは、ファームウェアによって再構成されない。AMPCは、たとえば特定の適用例における最適な動作のためにICATアーキテクチャを構成する、ICATアーキテクチャ用のファームウェアを構築する。一例では、AMPCは、ICATアーキテクチャのプロセッサハードウェア用の入力構造としてのアルゴリズムを使用して、ICATハードウェアの構成を選択および構造化する。
【００６２】
たとえば、ICATアーキテクチャのハードウェアアーキテクチャは、AMPCが生成したファームウェアによって構成されると、特定の適用例に対する速度性能を処理するためにAMPCによって最適化される。AMPCは、ICATアーキテクチャのハードウェアを再構成することができ、ここで、従来のコンパイラは、ICATまたはいかなるマイクロプロセッサのハードウェアも再構成することができない。
【００６３】
標準的なシステムコンパイラは、従来のプロセッサシステムにおいて、ハードウェアのアーキテクチャを変更することができない。しかしながら、一例では、AMPCは、ハードウェアにおける以前の結果に基づいて、パイプライン処理およびデータのルーティングを直接実行するようにICATアーキテクチャプロセッサを構成するファームウェアを生成する。たとえば、AMPCに入力されるif-then-else論理ステートメントは、データ結果を次のICATにルーティングするようにICATアーキテクチャのハードウェアを構造化することになる。この例では、AMPCは、同じif-then-else論理のためのコードフェッチ、データロード、データ記憶、分岐、およびサブルーチンなどの従来の処理システムのオーバーヘッドを除去するハードウェア構成を生成する。
【００６４】
図4は、ICATアーキテクチャの一例を示す。一例では、メイン処理システム101上で動作するICAT構成プログラムを生成するために、Visual Studioなどの従来型コンパイラが使用されてよい。このことは、チップの中で様々なタイプの処理アルゴリズムを実行および処理するように再構成可能であるハードウェアの、再プログラム可能なプールを構成および再構成するための方法を提供する。従来の処理システムではハードウェアでなくソフトウェアだけが変更できるので、従来の処理システム(たとえば、Intel、ARM、IBM、AMDマイクロプロセッサ)は、様々なアルゴリズムを実行するように再構成することができない。ICATアーキテクチャを使用することによって、従来の処理システムのフェッチおよび実行コード命令オーバーヘッドのすべてが除去される。図4のICATアーキテクチャは、システムオンチップ(SOC)デバイス100の中に実装された並列プロセッサリソースのプールを利用してデータの効率的な処理を実行するために構成可能な、再構成可能なハードウェアを提供する。
【００６５】
たとえば、数理プロセッサ107のプールとそれに続く論理プロセッサ108および構成可能なマトリックスルーティング109は、並列処理リソース102のプールを実装する。このアーキテクチャは、特定の適用例に対して処理性能を最適化するために、リソースをパイプライン処理することが可能である。一例では、プロセッサ102のプールは、メインプロセッサからさらなる命令を受信することなく、メインプロセッサ101とは独立に複数の処理タスクを実行する。各ICATは、スタンドアロンプロセッサシステムとして全体のアルゴリズムを処理するように構成されてよい。したがって、ICATは、アルゴリズムを実行するように構成されると、アルゴリズムの処理を完了するためのオーバーヘッドを必要としない、それ自体の中のシステムと見なすことができる。たとえば、ICATは、if-then-else命令セットを実行するように構成されてよく、高速フーリエ変換または他の数学的アルゴリズム解法などの完全に異なる命令セットを実行するように、後で再構成されてよい。
【００６６】
アクティビティの不必要なサイクルを減らすことによって、ICATアーキテクチャは、従来型プロセッサと比較したとき、電力消費を低減し、より少ない熱しか発生させず、データを処理する速度を高める。ICATリソース102は、データがそれらの入力部において処理される準備ができているとき、それらが構成されるまでアイドルである。プロセッサのすべては、必要とされないときにはアイドル状態に保たれ、いかなる不必要なオーバーヘッドから発生する熱も低減する。ICATがコードをフェッチおよび実行しないので、ICATリソースのプールの中の各プロセッサは従来型プロセッサよりもオーバーヘッドが小さい。代わりに、ハードウェアは特定の動作を実行するように構成され、ICATアーキテクチャによって提供された構成済みのアルゴリズムを用いて処理される必要があるデータが提供されるときのみアクティブである。一例では、単一のICATプロセッサが、数理プロセッサ107、論理プロセッサ108、および構成可能なマトリックスルーティング109によって導かれる出力部のプールを使用する。
【００６７】
この同じICATプロセッサが、if-then-elseなどの単純な処理タスクのために、または顔認識において使用されるアルゴリズムなどの極めて高度かつ複雑なアルゴリズムのために使用されてよい。ICATリソース102の複数のグループまたはプール、すなわち、数理プロセッサ107、論理プロセッサ108、および構成可能なマトリックスルーティング109によって導かれる出力部のプールを使用することによって、ICATアーキテクチャは、たとえば動き検出、形状検出、または識別検出などのパイプラインアーキテクチャにおける複数の計算を必要とする処理タスクのために使用されてよい。
【００６８】
一例では、アルゴリズムは、ICATプロセッサのインターコネクトバス構造を制御し、ICATアーキテクチャは、ビデオ、センサなどの入力デバイス112からの入力データストリーム、または以前のプロセスステップからのデータを処理する。たとえば、以前の結果は、データメモリバッファ、ライブ入力データ、または他の処理済みのステップ110、111からの任意のデータからストリーミングされてよい。処理結果は、たとえば制御出力またはビデオ出力のように、デバイス113に直接出力されてよい。
【００６９】
プログラマは、図5の例に図示するように、AMPCを利用して複数のRAPCを構成してよい。代替として、AMPCの使用は、たとえばチップ上のシステムによってオンボードで自動化および制御されてよい。図5は、プログラマのための6ステップフロー図を示し、プログラマは、最初に、元のハイレベルプログラミング言語ソースコードを第1のコンパイラに挿入する(AMPCはASMLと呼ばれる)。ASMLプリコンパイラは、ステップ2において元のソースからコードを抽出し、ステップ2は自動的に行われる。次いで、プリコンパイラは、新たなソースコードを第2のコンパイラに出力する。このステップは、新たなソースがデバッグおよび最適化されているとプログラマが納得した後、自動的に、またはプログラマによる別個のステップとしてのいずれかで行うことができる。この第2のコンパイラは、ICATアーキテクチャ用に構築されるファームウェアをコンパイルする。次いで、ファームウェアがICATアーキテクチャの中にロードされ、ファームウェアはICATアーキテクチャのRAPCを構成する。たとえば、ファームウェアがデバッグおよび最適化されているとプログラマが納得した後、プログラマは、このファームウェアをICATアーキテクチャの中にアップロードしてよい。
【００７０】
代替として、ステップの各々は自動化されてよく、元のソースコードをICATアーキテクチャの中にロードすることを除いて人間の介入なしに行われてよい。従来型プロセッサを複数のRAPCおよびAMPCと組み合わせることによって全体のプロセスが自動化されてよく、その結果、従来型プロセッサは、元のソースコードを再コンパイルするようにAMPCを動作させて、RAPCをセットアップするために従来型プロセッサによって使用されるファームウェアを元のソースコードの中に含まれる命令に基づいて生成する。
【００７１】
ICATリソースのプールは、たとえば数理モジュール、論理モジュール、および結果ルーティングモジュールなどの3つのタイプのプロセッサモジュールを含んでよい。数理モジュールは、数学関数を実行する。論理モジュールは、論理関数を実行する。結果ルーティングモジュールは、分岐およびデータルーティング関数を実行する。たとえば、図6において、再使用可能アルゴリズムによるパイプラインコンピュータ(RAPC)が概略的に図示される。AMPCによるICATアーキテクチャのセットアップレジスタの構成によって、セットアップバス109が確立される。オペランドが、デジタル信号プロセッサ(DSP)110上のメモリロケーションA、B、C、およびDに導かれる。DSPは、数学アルゴリズムを実行するように構成される。アルゴリズムの結果は、論理決定プロセッサ(LDP)111に導かれる。LDPは、論理命令を実行する。論理命令の結果は、直接またはマトリックスバススイッチ(MBS)を介して次のRAPCに配送される。MBSは、結果を次のRAPCに導き、すなわち、高速ストリーミングインターフェース上での結果の配送のための入力および出力ならびに割込みを制御する。
【００７２】
ハードウェアリソースが、最適性能を得るためにパイプライン構造でインターコネクトされているICATコプロセッサシステムの中に構成されてよい。一例では、再構成可能であるハードウェアリソースの再プログラム可能なプールを設計するための方法は、チップの中の複数の処理アルゴリズムを実行および処理する。ICATプロセッサを構成するためのハードウェアリソースは、チップの中に設計されてよく、チップの中のハードウェアリソースは、AMPCを介して再構成可能である。ICAT処理システムのアーキテクチャは、たとえばアルゴリズムを処理するためのソースコードから構成される。したがって、ICATプロセッサのハードウェアが、たとえばAMPCを使用するプロセッサとは独立にアルゴリズムを実行するようにソースコードによって構成されるので、従来型プロセッサのために生成されるコードは、ICATアーキテクチャにおいてはるかに効率的に実行されてよい。したがって、ICATアーキテクチャは、従来型マイクロプロセッサのために作成されたソースコードからICATハードウェアアーキテクチャを構成することが可能であり、そのことは当技術分野で知られていない。一例では、プロセッサによってアルゴリズム的マトリックス構造の中に構成可能かつ再構成可能であるハードウェアリソースのプールが作成され、ハードウェアリソースのプールは、次いで、実際にチップの中で複数の処理アルゴリズムを処理する。一例では、ハードウェアリソースは、パイプライン化を使用する他のプロセッサとは独立に、複数のコマンドを通じてデータを処理する。
【００７３】
一例では、ICATアーキテクチャおよびアルゴリズムマッチングパイプライン化コンパイラは、当技術分野で未知の成果を達成するように結合し、計算の速度と効率の両方を達成する。たとえば、AMPCは、複数の処理アルゴリズムを実行するためのハードウェアリソースを構成する。AMPCは、ICATチップの中でICATリソースのプールから処理アルゴリズムを構成するために使用される、構成セットアップファームウェアを生成する。このことは、ICATアーキテクチャ内でアルゴリズムを処理する個々のハードウェアを作成するために、従来型プロセッサ用に設計された既存のアプリケーションソースコード、およびICATハードウェアリソースを整合させ割り当てるために設計された新たなソースコードを受け入れるツールを、プログラマに提供する。AMPCは、特定の目的のためのSOCの動作中、メインプロセッサに依存しない複数のアルゴリズムを実行するようにICATハードウェアを構成するように、メインプロセッサを動作させるファームウェアを生成する。
【００７４】
従来型プロセッサは、プログラム命令の段階的な実行のために使用されるプログラムメモリ、フェッチハードウェア、および実行ハードウェア、バルク(ヒープ)データおよびプログラムスタック構造の記憶のために必要とされるデータメモリ、ならびにそのすべてが従来のプロセッサアーキテクチャにおいて相当なオーバーヘッドを生み出す、命令フェッチおよび実行サイクルと、プログラムスタックの管理と、データヒープ記憶域の管理とを備える類似のアーキテクチャを使用する。
【００７５】
対照的に、一例では、ICATアーキテクチャは、従来型プロセッサシステムのオーバーヘッドのほとんどすべてを除去する。ICATハードウェアプールは、AMPCによって構成され、パイプラインストリーミングデータ構造を有するICATコプロセッサアーキテクチャを使用してアルゴリズムを処理するために使用される。したがって、一例では、ICATアーキテクチャを使用する方法は、たとえばチップの中で利用可能なリソースを規定するICATハードウェアコンパイラテーブルにAMPCがアクセスすること、Verilogなどのハードウェア設計言語が使用されて所与のプロセッサに対してICATハードウェア102のプールをコンパイルすること、チップ内でのICATリソースプールの構造を規定するテーブルをハードウェアコンパイルが出力すること、AMPCがハードウェアコンパイラによって生成されたデータのこれらのテーブルを使用して、チップの中のICATリソースのロケーションおよび数量を決定すること、AMPCがハードウェアリソースを割り当て、数学演算および論理演算を構成し、かつ様々なアルゴリズムに対してインターコネクト部を作成することであって、AMPCのためのソース入力シンタックスがC#シンタックスまたはMatlabなどの標準的な数理シンタックスを備えてよいこと、利用可能なICATハードウェアリソースのプール103...111からアルゴリズムごとにパイプライン構造をAMPCが構成すること、ならびにこれらのパイプライン構造がアルゴリズムごとにICATコプロセッサを形成することを備える。たとえば、AMPCは、並列ICATコプロセッサ102上でアルゴリズムを実行するリソースの制御レジスタ103、104、105、106を構成する、メイン処理システム101上で動作するコードを出力する。
【００７６】
たとえば、メインプロセッサ101からの入力に応答するコプロセッサシステム構造が、ICATリソース102のプールから構成されてよい。代替として、ICATリソース102のプールは、メインプロセッサ101への、またはメインプロセッサアーキテクチャがメインプロセッサとは別個の入力/出力デバイスを含む場合にはメインプロセッサ101の入力/出力デバイスへの、割込みおよび出力データを生成してよい。一例では、ICATリソース102のプールは、従来型プロセッサ101によって構成されてよく、次いで、ICATリソース102は、再構成されるまでそれら自体において動作する。
【００７７】
ICATプロセッサがファームウェアによって構成されると、ICATアーキテクチャのプロセッサは、それら自体において並行してデータストリームを継続的に処理する。対照的に、従来のシステムは、各処理ステップにおいてプロセスフローを決定するために、終わりなくメモリに進むとともに命令をフェッチすることを必要とする。AMPCは、たとえば特定のアルゴリズムの処理のための処理ステップを実行するために、たとえばICATアーキテクチャの特定のICATプロセッサ構造に数学論理およびルーティングなどのリソースのハードウェアグループを割り当ててよい。従来のコンパイラは、マイクロプロセッサのハードウェア構造を選択および構成しない。たとえば、AMPCがICATアーキテクチャのハードウェア構造を構築すると、AMPCは、処理性能を速めるパイプラインアーキテクチャにおいてICATアーキテクチャ用のハードウェアリソースを構成してよい。従来のコンパイラはこれができない。
【００７８】
図4の例では、ICAT制御レジスタ104は、処理関数を制御するためのレジスタのセットである。たとえば、デジタル信号プロセッサ(DSP)入力モードレジスタは、分割入力ワード(Split Input Words)、事前加算器制御(Pre-Adder Control)、入力レジスタバンク選択(Input Register Bank Select)、および他のDSP入力関数を含んでよく、DSP ALUモードレジスタは、加算、減算、乗算、除算、右シフト、左シフト、回転、and、or、xor、nor、nand、および他の論理プロセスを制御してよく、DSPマルチプレクサ選択は、シフトおよび入力選択を制御してよい。DSPは、ICATごとに1つのDSP48E1を利用してよい。たとえば、DSP48E1デバイスは、Xilinx 7シリーズのフィールドプログラマブルゲートアレイの中に設けられてよい。たとえば、ICATメモリおよび論理演算105は、メモリおよびメモリ論理演算を制御するために使用されてよい。
【００７９】
一例では、動き検出アルゴリズムが、汎用コンピュータ上での使用のためにC言語で書かれる。
【００８０】
コード例1:C言語(ハイレベルプログラミング言語)で書かれた動き検出アルゴリズム
int noise_threshold = 3;
int live_video_pixel = 0;
int black_video_pixel = 0;
boolean motion_detected = false;
int live_red_pixel = 0;
int live_green_pixel = 0;
int live_blue_pixel = 0;
int frame_delayed_pixel;
int frame_delayed_red_pixel = 0;
int frame_delayed_green_pixel = 0;
int frarne_delayed_blue_pixel = 0;
int red_mask =255; // 16進数の0000FF、2進数の000000000000000011111111は、ビット0〜7を抽出する
int green_mask = 65,280; // 16進数の00FF00、2進数の000000001111111100000000は、ビット8〜15を抽出する
int green_divisor =256
int blue_mask =16,711,680; // 16進数のFF0000、2進数の111111110000000000000000は、ビット23〜16を抽出する
int blue_divisor =65,536
// live_video_pixelから赤色、緑色、および青色のピクセルを抽出するためのプロシージャ
void extract_live_red_green_blue(int live_video_pixel)
{
live_red_pixel = (live_video_pixel); // ライブビデオから赤色のピクセルを抽出する
live_red_pixel = live_red_pixel & red_mask
live_red_pixel = (live_red_pixel / red_divisor)
live green pixel = (live_video_pixel); // ライブビデオから緑色のピクセルを抽出する
live_green_pixel = live_green_pixel & green_mask
live_green_pixel = (live_green_pixel / green_divisor)
live blue pixel = (live_video_pixel); // ライブビデオから青色のピクセルを抽出する
live_blue_pixel = live_blue_pixel & blue_mask
live_blue_pixel = (live_blue_pixel / blue_divisor)
}
// delayed_frame_video_pixelから赤色、緑色、および青色のピクセルを抽出するためのプロシージャ
void extract_delayed_red_green_blue(int frame_delayed_video_pixel);
{
frame_delayed_red_pixel = (live_video_pixel); // 赤色のピクセルを抽出する
frame_delayed_red_pixel = (frame_delayed_red_pixel & red_mask);
frame_delayed_red_pixel = (frame_delayed_red_pixel / red_divisor);
frame_delayed_green_pixel = (live_video_pixel); // 緑色のピクセルを抽出する
frame_delayed_green_pixel = (frame_delayed_green_pixel & green_mask);
frame_delayed_green_pixel = (frame_delayed_green_pixel / green_divisor);
frame_delayed_blue_pixel = (frame_delayed_video_pixel); // 青色のピクセルを抽出する
frame_delayed_blue_pixel = (frame_delayed_blue_pixel & blue_mask)
frame_delayed_blue_pixel = (frame_delayed_blue_pixel / blue_divisor)
}
// 動き検出アルゴリズムのためのプロシージャ
boolean motion_detected detect_motion();
{
motion_detect = false; // 動きを検出するための準備をする
result_red_pixel = (frame_delayed_red_pixel - live_red_pixel); // 赤色のピクセルを減じる
if(result_red_pixel > noise_threshold) // red_resultが雑音しきい値よりも大きいかどうかをテストする
{
motion_detected = true; // 赤色のピクセル上で動きが検出された
} // if(result_red_pixel > noise_threshold)の終わり
result_green_pixel = frame_delayed_green_pixel - live_green_pixel; // 緑色のピクセルを減じる
if(result_green_pixel > noise_threshold) // green_resultが雑音しきい値よりも大きいかどうかをテストする
{
motion_detected = true; // 緑色のピクセル上で動きが検出された
} // if(result_green_pixel > noise_threshold)の終わり
result_blue_pixel = frame_delayed_green_pixel - live_green_pixel; // 緑色のピクセルを減じる
if(result_blue_pixel > noise_threshold) // blue_resultが雑音しきい値よりも大きいかどうかをテストする
{
motion_detected = true;
} // if(result_blue_pixel > noise_threshold)の終わり
return motion_detected; // 青色のピクセル上で動きが検出された
} // 動き検出アルゴリズムの終わり
// ビデオの1フレームのためのプロシージャ(ビデオのフレームごとに実行される)
do // フレームごとにすべてのピクセルを処理する(hd = フレーム当り777,600ピクセル)
// (ピクセルごとに31個の命令が実行される)
{
if(pixel_clock = true); // pixel_clockはライブビデオストリームに由来し、hd = 46.656MHzである
{ // ライブビデオおよび遅延したビデオピクセルから赤色、緑色、および青色のピクセルを抽出する
frame_delayed_pixel = delay_buffer_output_pixel; // フレーム遅延したビデオピクセルを得る
live_video_pixel = live_video_input_pixel; // ライブビデオピクセルを得る
extract_live_red_green_blue(int live_video_pixel); // ライブカラーピクセルを抽出する(9命令/ピクセル)
extract_delayed_red_green_blue(int frame_delayed_pixel); // 遅延したカラーピクセルを抽出する(9命令/ピクセル)
} // if(pixel_clock = true)の終わり
motion_detect = detect_motion(); // 動きを検出するための関数を呼び出す(11命令/ピクセル)
if(motion_detect = true); // motion_detectがビデオ出力1および2の処理をスワップする
{
output1; // 動いているビデオだけが表示される。動いていないビデオは黒色である。
output2; // 動いていないビデオだけが表示される。動いているビデオは黒色である。
} // if(motion_detect = true)の終わり
if(motion_detect = false); // motion_detectがビデオ出力1および2の処理をスワップする
{
output1; // 動いていないビデオだけが表示される。動いているビデオは黒色である。
output2; // 動いているビデオだけが表示される。動いていないビデオは黒色である。
} // if motion_detect = false)の終わり
until(end_of_frame = true); // end_of_frameはビデオストリームの中の信号である
【００８１】
図7は、AMPCコンパイラを用いたコード例1のコンパイルから得られるハードウェア構成の図の概略図を示す。ビデオデバイス111は、2つの出力部、すなわち、ライブビデオピクセルのストリーム113、およびフレーム遅延バッファストリーム112を有する。RGB出力の場合、各ピクセルは赤色、緑色、および青色を備える。DSP115はライブフィードと遅延フィードとの比較を実行し、結果はLDP116にパイプライン化され(117)、LDP116は動きが検出されるかどうかを決定する。結果は、RAPC114のMBSによって出力される。単一のRAPCが、クロックサイクルごとに並行して実行する3つの処理ブロックを実装するように構成される。比較において、従来の処理システムは、ビデオの各ピクセルを処理して動きを検出するために、37個の命令の実行を必要とする。これらの命令のほとんどは、従来の非再構成可能かつ非パイプラインのプロセッサ上で実行されたとき、3クロックサイクルよりも多くかかる。平均的な命令が3クロックサイクルの中で実行されても、そのことは最適化されていない汎用プロセッサにとって寛大であるとはいえ、各ピクセルを処理するために111個のCPUクロックサイクルを要することになる。現代のカメラにおいてピクセルの数が増大するので、現代のシングルコアプロセッサおよびマルチコアプロセッサから利用可能なサイクル時間が、ジョブにとって不十分であることは明らかである。
【００８２】
対照的に、コード例1からAMPCコンパイラによって構成される単一のRAPCプロセッサの例示的な構成は、ビデオのピクセルクロックを使用してピクセルの連続ストリームを処理する。3つの処理ブロック(DSP、LDP、およびMBS)は、3クロックサイクルのレイテンシを伴ってFPGAのパイプラインストリーミング構成で実装されるが、パイプラインがいっぱいになった後の(ビデオのピクセルクロックの最初の3クロックサイクルの後の)各クロックサイクルは、ピクセルの出力を処理し、これは111クロックサイクル当り1ピクセルと比較して、クロックサイクル当り1ピクセルである。その結果、単一のRAPCは、従来型処理システムの単一のコアよりも少なくとも111倍速く実行し、すなわち、従来型プロセッサの場合の37命令×命令当り3クロックサイクル、すなわち、ピクセル当り111クロックサイクルと比較して、ICAT上のクロックサイクルごとにピクセルが処理される。2000個の(または、それを超える)RAPCプロセッサが単一のICATチップ上に実装されてよいので、組み合わせられた処理能力は、シングルコアの従来型プロセッサよりも少なくとも222,000倍速くできる。現在の従来型プロセッサはクアッドコアなどに限定されるが、従来型プロセッサにコアを追加することが追加のオーバーヘッドを伴わないことはない。従来の処理コアよりもはるかに多くのRAPCが追加することができ、各々は、単独で、または他のRAPCと一緒に、パイプラインとして再構成することができる。
【００８３】
コード例1および図7のポイントは、RAPCを追加することが単にチップの密度およびサイズの問題であり、オーバーヘッドを加えることなく数千個がASICに追加されてよいということである。各RAPCは、パイプラインの並列プロセッサである。したがって、従来型プロセッサでコアの追加、キャッシュメモリの追加、およびオーバークロッキングを行っても、数十個(couple dozen)のRAPCを有する単一のICATチップの性能付近のどこにも従来型プロセッサを決して持ってくることができない。その上、従来型プロセッサに強要する取組みのすべては、従来の非再構成可能かつ非パイプラインのプロセッサに対して、過度の熱、コスト、およびサイズをもたらす。これらの同じ方法がやはりICATアーキテクチャのRAPCの性能を高めるために使用できることは言うまでもない。ともかく、ICATアーキテクチャにRAPCを追加することは、プログラマがICATアーキテクチャのために固有のプログラムする必要なしに、同等の従来型プロセッサアーキテクチャにまさって、常に性能を劇的に改善する。このことは、驚くべき予想外の結果である。従来型プロセッサからより多くを得ることに注意のすべてが目を向けるが、プログラマブルかつ再構成可能なアーキテクチャを従来型プロセッサに追加して汎用プロセッサの性能を向上させることにはほとんど注意が与えられて来なかった。
【００８４】
また、標準的なFPGA上でコード例1に対して同じ解決策を実施することは、この例で与えられるようにハイレベル標準プログラミング言語を単に再コンパイルすることよりも多くを必要とすることになる。マトリックス乗算器を首尾よく開発するために、たとえばXilinx FPGAの中のPIDまたは任意の複雑なアルゴリズムは、以下のスキル、すなわち、RTLおよびVerilog言語を用いて回路構成を設計する際の実際上の知識、高度なアーキテクチャスキル(並列処理、パイプライン化、データストリーミング、リソース/性能トレードオフなど)、算術、論理決定実行、メモリデバイス、コントローラデバイス、周辺インターフェースなどの多種多様なハードウェアビルディングブロックを伴う設計経験、ソフトウェア設計、様々なバージョンのハイレベルプログラミング言語を伴う実際上の知識、アプリケーションを監視および制御する際に使用される数学アルゴリズムを伴う実際上の知識、ならびに"C"コードをXilinxハードウェアへコンパイルすること、ハードウェア設計を検証するとともに性能目標を満たすのに必要な場合にアーキテクチャ修正を加えること、"C"コードテストベンチを構築すること、テストベンチ結果に対してハードウェアシミュレーション結果を検証すること、およびハードウェアの中に設計を実装するとともにそれをテストすることなどのXilinxソフトウェアツールをどのように使用すべきかという知識を必要とする。このことのすべては、典型的なFPGAプロジェクトを、時間的およびコスト的に、一般のハイレベル言語プログラミングスキルを持つ人物の能力をはるかに超えたものにする。当技術分野の現在の状態は、性能が最も重要であり特注設計およびプログラミングの遅延およびコストが許容できる、ニッチ処理のためにFPGAを指定する。
【００８５】
対照的に、フロントエンド、マイクロプロセッサアーキテクチャが、よく知られている汎用アーキテクチャであるので、いかなる有能なハイレベル言語プログラマもICAT技術をプログラムすることができる。RAPCは、汎用プロセッサおよびAMPCによって構成され、AMPCは、たとえば図7の図に示すように、フロントエンドプロセッサ用の標準コードに基づいて1つまたは複数のRAPCを再構成するために、各RAPCの標準的な構造を使用する。したがって、複数のRAPC、ならびに世界に対面する標準的なプロセッサアーキテクチャを使用するRAPCを構成および再構成するためのAMPCを含む、ICAT技術は、従来型プロセッサおよび知られている任意のFPGAプロセッサにまさる、驚くべき予想外の進歩である。
【００８６】
図8は、再使用可能アルゴリズムによるパイプラインコアをアルゴリズムマッチングパイプラインコンパイラと組み合わせる、マイクロプロセッサの適用例を示す。従来型マイクロプロセッサのビデオ処理速度の不足は、専用かつ高価なチップセットまたは後処理のいずれかを必要とする。図面に示すように、RAPCおよびAMPCを有する汎用プロセッサは、数百万ピクセルをリアルタイムで処理する解決策を生み出し、たとえばコンシューマ電子デバイスに搭載された汎用ICATからのビデオのための、動き感知、ビデオ圧縮、ならびにより速いアップロードおよびダウンロード速度を提供する。
【００８７】
各RAPCは、DSP、LDP、およびMBSを備えてよい。DSPは、必要とされるタイプの動作(すなわち、整数および浮動小数点の、乗算、除算、加算、減算など)をプログラムするための、セットアップインターフェースを有してよい。DSPは、図8に示すような、セットアップデータによって決定されるような数学関数の様々な組合せとともに連結または動作できるオペランドデータ用の4つの入力部を有してよい。DSPは、ステータスデータとともに結果データとして出力される48ビットのアキュムレータを有してよい。ステータスデータは、たとえばキャリーアウト、等しい、より大きい、およびより小さいを含む。
【００８８】
LDPは、たとえばルックアップテーブル、ループカウンタ、および定数レジスタをプログラムするための、セットアップインターフェースを有してよい。LDPは、反復アルゴリズムがいつ完了するのかを検出するためのループカウンタを有してよい。LDPは、ルックアップテーブルへの入力用の定数データを保持できるレジスタを有してよい。LDPは、関数を実行するために使用できるメモリのブロックを有してよい。LUT関数は、実装することが可能でありループカウンタを使用して連続的にアクセスできるルックアップテーブル、実装することが可能であり制御目的のためにDSPステータス、定数レジスタ、またはDSP結果データによってアクセスできるルックアップテーブル、および実装することが可能であり制御目的のために種々の論理信号を出力できる論理ルックアップテーブルを含んでよい。LDPは、その入力部からその出力部に結果データを渡してよい。LDPは、たとえばその出力部において結果データ用の1つのパイプラインレジスタを有してよい。代替として、LDPは、その出力部において結果データ用の同期クリアイネーブルを有する2つのパイプラインレジスタを有してもよい。
【００８９】
この発明を実施するための形態は、特許請求の範囲に記載される本発明を当業者が作成および使用することを可能にする目的で、特許請求の範囲の特徴および要素を含む例を提供する。ただし、これらの例は、特許請求の範囲を直接限定することを意図しない。代わりに、例は、これらの説明、特許請求の範囲、および図面において開示されており、当技術分野で知られている方法で改変されてよく、また組み合わせられてよい、特許請求の範囲の特徴および要素を提供する。
【００９０】
たとえば、いかなる形でも限定的でなく、3325個のRAPCが、100MHzとしての適度のクロックレートで動作する単一のXilinx(登録商標) Zynq(登録商標) FPGAチップ上に構成されてよい(ただし、Xilinx(登録商標)およびZynq(登録商標)はXilinx, Inc.の商標である)。各クロックにおいて、RAPCの各々は、1つまたは2つの論理演算および数学演算を処理することができる。したがって、この構成は332ギガフロップスを生み出す。たとえば、この構成は、4つの数学演算(たとえば、加算、減算、乗算、除算)および4つの論理演算(たとえば、より大きい、より小さい、等しい、等しくない)の各々に対して、ルックアップテーブル(LUT)を使用する。標準的なLUTメモリサイズは512バイトである。加えて、他の論理演算LUTに加えて「構成可能な一定値よりも多くの」LUTが設けられてよい。一例では、RAPC間で結果を導くためのバスマルチプレクサスイッチを制御するために、LUTの出力信号が使用される。AMPCコンパイラは、フォンノイマンアーキテクチャ用に書かれた、ハイレベルプログラム言語のソースコードをプリコンパイルし、AMPCコンパイラは、RAPCによって動作が実行されるごとにLUTを選択し、フォンノイマンアーキテクチャ用に書かれたソースコードから非フォンノイマンプロセッサを生成する。
【００９１】
任意の従来型フォンノイマンプロセッサと比較したとき、特にチップに対していかなる特別な冷却要件もなくこのことが取得されることが理解されると、332ギガフロップスは相当なものである(ただし、ギガフロップスは毎秒10億回の浮動小数点演算として定義される)。比較において、従来型フォンノイマン処理システムは、数学演算、論理演算、および分岐動作ごとに別個のフェッチおよび実行サイクルを必要とするが、RAPCは、数学演算、論理演算、および分岐動作ごとに別個のフェッチおよび実行サイクルを必要としない。
【００９２】
一例では、計算は、741MHzのクロック速度を有するXilinx(登録商標) Virtex ZU13チップ(ただし、XilinxおよびVirtexはXilinx, Inc.の商標である)が236,250個のRAPCとともに構成することができて、175,000ギガフロップスよりも速く実行する能力をこのチップに与えることを示し、そのことは、当業者にとって予想外であるとともに驚くべき、素晴らしい結果である。RAPCが、実行される数学演算、論理演算、および分岐動作ごとに別個のフェッチおよび実行サイクルを必要としないので、この結果が可能である。汎用コンピュータプロセッサのフォンノイマンアーキテクチャによって引き起こされる、このおよび他の問題は、RAPCおよび本明細書で説明するアーキテクチャを使用して解決される。フォンノイマンアーキテクチャを有するプロセッサ(すなわち、すべての知られている現代の汎用プロセッサ)用に書かれたプログラムは、説明したアーキテクチャにおいて動作するように書き直される必要がなく、当業者および本技術分野における専門家にとってさえも極めて驚くべき予想外の結果である。
【符号の説明】
【００９３】
100  システムオンチップ(SOC)デバイス
101  メイン処理システム
102  並列処理リソース
103〜106  制御レジスタ
107  数理プロセッサ
108  論理プロセッサ
109  マトリックスルーティング
110  デジタル信号プロセッサ(DSP)
111  論理決定プロセッサ(LDP)
112  出力デバイス
113  デバイス
【図１Ａ】
2019506695.tif 000003
【図１Ｂ】
2019506695.tif 000004
【図２】
2019506695.tif 000005
【図３】
2019506695.tif 000006
【図４】
2019506695.tif 000007
【図５】
2019506695.tif 000008
【図６】
2019506695.tif 000009
【図７】
2019506695.tif 000010
【図８】
2019506695.tif 000011
【国際調査報告】
2019506695.tif 000012