(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-11-25
(45)【発行日】2022-12-05
(54)【発明の名称】高スループットプロセッサ
(51)【国際特許分類】
G06F 15/80 20060101AFI20221128BHJP
G06F 9/38 20060101ALI20221128BHJP
G06F 8/41 20180101ALI20221128BHJP
【FI】
G06F15/80
G06F9/38 310J
G06F8/41 130
(21)【出願番号】P 2019570963
(86)(22)【出願日】2018-06-22
(86)【国際出願番号】 US2018039167
(87)【国際公開番号】W WO2018237361
(87)【国際公開日】2018-12-27
【審査請求日】2021-06-22
(32)【優先日】2017-06-22
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】518264491
【氏名又は名称】アイキャット・エルエルシー
(74)【代理人】
【識別番号】100108453
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100110364
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】ロバート・ディー・キャティラー
(72)【発明者】
【氏名】ダニエル・ロイク
(72)【発明者】
【氏名】ガナナシャンムガム・エルマライ
【審査官】坂庭 剛史
(56)【参考文献】
【文献】特開2013-165490(JP,A)
【文献】特開2013-128278(JP,A)
【文献】特表2005-503680(JP,A)
【文献】特開2003-029969(JP,A)
【文献】特開2002-123563(JP,A)
【文献】米国特許出願公開第2007/0277161(US,A1)
【文献】佐野健太郎、伊藤 涼、菅原啓介、山本 悟,階層的モジュール設計を可能とするストリーム計算コア高位合成コンパイラ,電子情報通信学会技術研究報告,日本,一般社団法人電子情報通信学会,2015年06月12日,Vol.115, No.109,pp.159-164(RECONF2015-29),ISSN0913-5685
【文献】宮島敬明,高位合成の使いどころと最適化の勘所,FPGAマガジン,日本,CQ出版株式会社,2013年05月01日,No.1,pp.127-133
【文献】三好健文、寺田祐太、川島英之、吉永 努,ストリーム処理エンジン向け動的再構成可能プロセッサアーキテクチャの設計,情報処理学会論文誌 データベース[CD-ROM],日本,一般社団法人情報処理学会,2011年10月15日,Vol.4, No.2,pp.35-51,ISSN1882-7772
(58)【調査した分野】(Int.Cl.,DB名)
G06F 15/80
G06F 9/38
G06F 8/41
(57)【特許請求の範囲】
【請求項1】
高スループットプロセッサであって、
アルゴリズムマッチングパイプラインコンパイラと、
再構成可能タイルのアレイとを備え、再構成可能タイルの前記アレイの中の前記再構成可能タイルの各々がRAPCであるように、再構成可能タイルの前記アレイが前記アルゴリズムマッチングパイプラインコンパイラによってプログラムされ、初期入力データをロードするための初期レイテンシ期間の後、各クロックにおいて再構成可能タイルの前記アレイの中の前記再構成可能タイルのうちの1つから再構成可能タイルの前記アレイの中の前記タイルのうちの別のタイルに結果が渡るように、再構成可能タイルの前記アレイが配置され、再構成可能タイルの前記アレイが、伝搬遅延を伴わずに1クロック当り1つの結果のスループットレートでコンピュータプロセッサとしてアルゴリズム計算を実行するように、前記アルゴリズムマッチングパイプラインコンパイラが再構成可能タイルの前記アレイを構成する、高スループットプロセッサ。
【請求項2】
各RAPCが8ビットRAPCである、請求項1に記載の高スループットプロセッサ。
【請求項3】
プリコンパイラをさらに備え、前記プリコンパイラが、前記高スループットプロセッサ用ではなく、あるタイプの従来型非再構成可能プロセッサ用に書かれた、ハイレベル標準ソフトウェア言語を処理し、前記プリコンパイラが、再構成可能タイルの前記アレイをプログラムするための前記アルゴリズムマッチングパイプラインコンパイラ用の命令を提供する、請求項2に記載の高スループットプロセッサ。
【請求項4】
再構成可能タイルの前記アレイ内の前記再構成可能タイルの各々が、少なくとも1つのLUTを備える、請求項1に記載の高スループットプロセッサ。
【請求項5】
前記少なくとも1つのLUTが論理モジュールを実装する、請求項4に記載の高スループットプロセッサ。
【請求項6】
データが、8ビットデータ、16ビットデータ、32ビットデータ、64ビットデータ、および任意の他の8の倍数ビットデータとして再構成可能タイルの前記アレイによって処理され得るように、再構成可能タイルの前記アレイ内の前記再構成可能タイルの各々が、再構成可能タイルの前記アレイ内の1つまたは複数の隣接する再構成可能タイルに再構成可能に結合される、請求項5に記載の高スループットプロセッサ。
【請求項7】
再構成可能タイルの前記アレイが、処理ユニットからのさらなるオーバーヘッドなしにタスクを完了するように構成される、請求項1に記載の高スループットプロセッサ。
【請求項8】
任意の通信チャネルまたはバスを任意の他の論理モジュールと共有する必要なくポイントツーポイント接続性がもたらされるように、再構成可能タイルの前記アレイ内の前記再構成可能タイルの各々が、再構成可能タイルの前記アレイ内の1つまたは複数の隣接する再構成可能タイルに再構成可能に結合される、請求項1に記載の高スループットプロセッサ。
【請求項9】
請求項1に記載の高スループットプロセッサを備えるシステムであって、
前記高スループットプロセッサが、
レイテンシ期間中にデータを最初に入力し、
前記レイテンシ期間の後に各クロックにおいて結果を計算
するように構成される、
システム。
【請求項10】
1ビットRAPCを用いて構成された前記高スループットプロセッサ用のクロックレートが、8ビットRAPCを用いて構成された前記高スループットプロセッサ用のクロックレートよりも8倍速い、請求項9に記載のシステム。
【請求項11】
複数の1ビットRAPCまたは複数の4ビットRAPCを用いて構成された前記高スループットプロセッサに対する出力データ精度が、8ビットRAPCを用いて構成された前記高スループットプロセッサに対する出力データ精度と同じである、請求項10に記載のシステム。
【請求項12】
複数の
請求項1に記載の高スループットプロセッサ
が、単一のASICチップパッケージ内に、再構成可能に配設
される、請求項11に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
相互関連出願
本出願は、その明細書全体が参照によりここに組み込まれる、2017年6月22日に出願された米国仮出願第62,523,528号の利益を主張する。
【0002】
分野は、コンピュータプログラミングならびにマイクロプロセッサの設計およびプログラミング、特に汎用ソフトウェア命令の再構成可能パイプライン並列処理に関する。
【背景技術】
【0003】
図1Aは、従来型プロセッサのコンパイラを示す。IntelマイクロプロセッサやARMマイクロプロセッサなどの従来型プロセッサがよく知られている。たとえば、従来型プロセッサの概念図が
図1Bに示される。これらのプロセッサは、現代のコンピュータおよびデバイスにとって中央処理ユニットの中心部であり、アルゴリズムを処理するために使用される。従来型プロセッサに関する問題は、これらのタイプのプロセッサが汎用であり、それらの性能が特定の適用例のために拡張されることを可能にする、いかなる実用的な方法でも再構成可能でないことである。別の問題は、プログラム実行制御が、数学演算、および処理の流れを変更する論理決定などのアルゴリズム関数(algorithmic function)の処理に大幅なオーバーヘッドを加えることである。従来型プロセッサをプログラムするためにハイレベルプログラミング言語が使用されてよく、コンパイラが、ハイレベルプログラミング言語における命令を特定のプロセッサアーキテクチャ用の機械コードに変換する。この機械コードは、プロセッサによってアクセス可能なメモリロケーションに提供され、システムアーキテクチャによって提供される任意のBIOSまたは他の呼出しと一緒にプロセッサハードウェアの動作用の命令を提供する。たいていの場合、数学的および論理的な処理指令は算術論理ユニット(ALU)に導かれ、算術論理ユニット(ALU)はプロセッサのプログラム実行制御部分に解を戻し、プロセッサは、数学アルゴリズムを解く正しい順序を通じてプロセッサを案内すること、論理決定、データの処理などのオーバーヘッドを管理する。データの処理を制御するために、機械コード命令がプログラム記憶域から連続的にフェッチされる。このオーバーヘッドは、機械性能を著しく制限する。
【0004】
たとえば、以下のことは、従来のコンパイラが"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を共有することができる。
【0005】
特定の関数のための計算を迅速に実行することが可能なハードウェア電子回路の中に構築される、特定用途向け集積回路(ASIC)が知られている。これらは、特定の関数をハードウェアの中に配線接続することによってオーバーヘッドを低減する。
【0006】
多数の論理ゲートおよびランダムアクセスメモリ(RAM)ブロックを有する、いくつかのフィールドプログラマブルゲートアレイ(FPGA)が知られている。これらのFPGAは、複雑なデジタル計算を実施するために使用される。そのようなFPGA設計は、極めて速い入力/出力データバスおよび双方向データバスを採用してよいが、セットアップ時間内およびホールド時間内での有効データの正しいタイミングを検証することは困難である。フロアプランニングにより、FPGA内でのリソース割振りがこれらの時間制約を満たすことが可能になる。FPGAは、ASICチップが実行できる任意の論理関数を実施するために使用することができる。出荷後に関数を更新するための能力、設計の一部分の部分的な再構成、およびASIC設計に比べて低い非反復エンジニアリングコストは、一般にもっと高いユニットコストが考慮に入れられるときでも適用例によっては優位性を与える。
【0007】
しかしながら、FPGAアーキテクチャの普及は、狭いニッチ製品に限定されている。プログラム命令に応答してFPGAのグループを連続的に再構成することによってそれらの命令のシーケンスを実行するためのFPGA仮想コンピュータは、米国特許第5,684,980号において特許権が得られた。
図2は、このFPGAアーキテクチャ用の構造を示す。この発行済み特許は、逐次アルゴリズムまたは逐次命令の実行中に構成を連続的に変更する、FPGAのアレイを含む。FPGAのアレイの構成により、全体のアルゴリズムまたは命令のセットが、各計算ステップを実行する際に各命令がダウンロードされるのを待つことなく実行されることが可能になる。
【0008】
FPGAの開発およびプロセッサとの統合は、「ランタイム」で再プログラムされるための能力の将来性を与えるが、実際には、当面のタスクに適合すべき再構成可能なコンピューティングまたは再構成可能なシステムは、これらのアーキテクチャをこの目的のためにプログラムおよび構成する際の難しさに起因して、実際の適用例において実施されることからほど遠い。
【0009】
図2は、米国特許第5,684,980号において開示されるような、フィールドプログラマブルゲートアレイのアレイ、およびフィールドプログラマブルインターコネクトデバイス(FPIN:field programmable interconnection device)、すなわち、フィールドプログラマブルゲートアレイの内部リソースを任意の外部接続タスクから解放するクロスバースイッチを含む、仮想コンピュータのブロック図を示し、本開示およびその図面は、FPGAに精通する当業者の知識を開示する目的で、本明細書によってその全体が本明細書に組み込まれる。
【0010】
図2は、逐次アルゴリズムを実行するために、ホストコンピュータの性能を拡張するためのコプロセッサとして、または仮想コンピュータプロセッサ内に構成および採用される、フィールドプログラマブルゲートアレイのアレイおよびフィールドプログラマブルインターコネクトデバイスを示す。逐次アルゴリズムは、普通は従来型マイクロプロセッサにおいて実行されることになる一連の従来型の命令に対応するようにプログラムされなければならない。その時、FPGA/FPINアレイによって逐次アルゴリズムの特定の計算タスクを実行するレートは、従来型マイクロプロセッサによって実行される対応する命令のレートよりもはるかに小さい。
図2の仮想コンピュータは、FPGA/FPINアレイの再構成を統率する再構成可能制御セクションを含まなければならない。その目的のために設計されたソフトウェアパッケージを使用して、再構成可能制御セクションのために構成ビットファイルが生成されなければならない。次いで、構成ビットファイルは、仮想コンピュータの中の対応するFPGA/FPINアレイに送信されなければならない。
図2は、アレイおよびデュアルポートランダムアクセスメモリ(RAM)が、ピンによって再構成可能制御セクション、バスインターフェース、およびコンピュータメインメモリにどのように接続されるのかを示す。バスインターフェースは、システムバスに接続される。
【0011】
米国特許第5,684,980号は、ピンが、クロックピン、および再構成可能制御セクションをFPGA/FPINアレイに接続するピンを、どのように提供するのかを示し、再構成可能制御セクションの一例を示す。
【0012】
米国特許第4,291,372号は、周辺デバイスとの間でのデータルーティングに対する特定の要件を処理する外部アプリケーション依存論理モジュールとともに動作する、専用命令フォーマッティングを伴うマイクロプロセッサシステムを開示する。マイクロプロセッサは、専用命令フォーマットを有するプログラムメモリを提供する。命令語フォーマットは、メモリアドレスのソースとしてプログラムカウンタまたはメモリ参照レジスタのいずれかを選択するための単一のビットフィールド、行われるべきデータルーティングのルートを規定する関数フィールド、ならびにソースロケーションおよび宛先ロケーションをアドレス指定するためのソースフィールドおよび宛先フィールドを提供する。以前には、周辺コントローラユニットは、特定の要件を処理するためのベースモジュールの中のプロセッサおよび制御回路でシステムに負担をかけた。
【0013】
デジタル信号処理(DSP:Digital Signal Processing)ユニット、またはDSPプロセッサのアレイは、モニタやテレビなどの出力スクリーン上に画像を生成するためのピクセル処理などのいくつかのグラフィックス集約的タスクに対して性能を最適化する、並列アレイの中に配線接続されてよい。これらは特注であり、デジタル信号プロセッサがそれらのジョブを行うために作成されるグラフィカルアクセラレーション環境に固有のBIOSを含む。
【0014】
マトリックスバススイッチング(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の一例をプロセッサシステムアーキテクチャに統合するための方法およびハードウェアを教示する。
【0015】
このことのすべては当技術分野で知られているが、従来技術における例は、幅広いアルゴリズムを処理するフレキシビリティを維持するとともに処理システム用のソフトウェア開発のために"C"などのハイレベル標準プログラミング言語を使用する一方、従来の処理システムによって生成されるオーバーヘッドのほとんどすべてを除去しない。
【先行技術文献】
【特許文献】
【0016】
【文献】米国特許第5,684,980号
【文献】米国特許第4,291,372号
【非特許文献】
【0017】
【文献】「AMBA 4 AXI4、AXI4-Lite、およびAXI4-Streamプロトコルアサーション、改訂:r0p1、ユーザガイド」、ARM DUI 0534B、ID072312
【発明の概要】
【課題を解決するための手段】
【0018】
チップ上のパイプライン並列プロセッサは、処理ユニットと、アルゴリズムマッチングパイプラインコンパイラによってプログラムされる再構成可能なフィールドプログラマブルゲートのアレイとを備え、アルゴリズムマッチングパイプラインコンパイラは、プリコンパイラであってよく、その結果、アルゴリズムマッチングパイプラインコンパイラは、並列処理を有しない標準的なプロセッサ上での動作用に設計されたソースコードを、処理ユニットによって処理するためにプリコンパイルし、処理ユニットおよびアルゴリズムマッチングパイプラインコンパイラ(AMPCまたはASMLと呼ばれる)は、パイプライン並列プロセッサとして動作するようにフィールドプログラマブルゲートを構成する。たとえば、プロセッサは、再使用可能アルゴリズムによるパイプラインコア(RAPC:reusable algorithmic pipelined core)と呼ばれることがある。並列プロセッサは、算術処理ユニットを制御するためのオーバーヘッドなどの処理ユニットからのこれ以上のオーバーヘッドなしに、タスクを完了するように構成される。
【0019】
一例では、再使用可能アルゴリズムによるパイプラインプロセッサは、"C"、"C++"などのハイレベル標準ソフトウェア言語を使用してアルゴリズムを並行して処理するように構成される、コンピュータのプールを備える。たとえば、コンピュータのプールは、特定の計算にとって必要とされるような異なるアルゴリズムを実行するように、AMPCの出力に基づいて再プログラムされ、AMPCは、それにとって利用可能なRAPCリソースを用いてセットアップされる。
【0020】
たとえば、再使用可能アルゴリズムによるパイプラインコア(RAPC)は、3つのモジュール、すなわち、インテリジェントバスコントローラまたは論理決定プロセッサ(LDP:logical decision processor)、デジタル信号プロセッサ(DSP)、およびマトリックスバススイッチが備えられてよい。論理決定プロセッサ(LDP)は、マスタバススイッチ(MBS)の制御のために必要に応じて再プログラム可能な、再構成可能な論理関数を備える。DSPは、数学演算を実行するための再構成可能な数理プロセッサを備える。一例では、RAPCによって処理される数学演算のすべては、DSPによって処理される。一例では、RAPCによって処理される論理関数のすべては、LDPによって処理される。マトリックスバスルータまたはマトリックスバススイッチ(MBRまたはMBS)は、アルゴリズムの処理中に中央プロセッサまたは周辺プロセッサからのこれ以上の介入なしにアルゴリズムを完了するために、必要に応じて、あるRAPCから別のRAPCに、かつ入力/出力コントローラおよび/または割込み生成器との間でデータおよび結果をルーティングする、再構成可能なプログラマブル回路として定義される。したがって、算術処理ユニットの内および外へデータおよび結果を導くための中央プロセッサまたは周辺プロセッサによる介入を必要とする静的な非再構成可能ハードウェアと比較して、パイプライン化することによってオーバーヘッドがはるかに低減される。一例では、LDPが論理決定および反復ループを処理し、アルゴリズムを学習するために結果メモリがLDPによって提供される。
【0021】
一例では、RAPCによって処理される数学演算のすべてはDSPによって処理され、論理関数のすべてはLDPによって処理される。一例では、複数のRAPCがコアのプールとして構成され、コアのプールの各々は、ハードウェアのいかなる変更も伴わずプログラミングによって単独で再構成可能である。たとえば、RAPCのすべてが、並行してアルゴリズムを処理するように構成されてよい。一例では、LDPは、定数または学習値のためのルックアップテーブル(LUT:Look Up Table)およびレジスタとして、メモリブロックを使用する。LDPによってセットアップされるLUTを使用する真理値表として任意のn入力ブール論理関数を符号化するために、nビットのLUTが使用されてよい。
【0022】
一例では、アルゴリズムマッチングパイプラインコンパイラ(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プロセッサであるように見える。
【0023】
代替例では、ICATチップは、AMDプロセッサを組み込むことができ、外部の世界に対してAMDプロセッサであるように見えることができる。
【0024】
また別の例では、ICATチップは、Intelプロセッサを組み込むことができ、外部の世界に対してIntelプロセッサとして見える。
【0025】
驚くべきことに、外部の世界に対して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がなくなるまで、別の目的に対して再構成されない。このようにして、最も使用されるアルゴリズムは構成される必要がなく、以前の使用によってすでに事前構成されている。
【0026】
RAPCは、中央処理ユニットによって構成されると、オーバーヘッドなしに動作して、RAPCがそのために構成されている数学命令、論理命令、および反復命令が完了するまで命令を実行する。
【0027】
一例では、ICATチップはセットアップレジスタを備え、AMPCは、ICATチップのセットアップレジスタをセットアップするための命令を生成し、ICATチップは、特定の命令を完了するようにRAPCを構成する。RAPCは、初期化されると、中央処理ユニットによるさらなる監督なしに継続的に動作する。一例では、AMPCは、VerilogまたはVivadoハードウェアコンパイラなどのハードウェアコンパイラからRAPCハードウェアデータを受信する。ハードウェアファイルは、ハードウェアコンパイラによって生成されてよく、ICATチップのセットアップレジスタ(または、一例では、複数のICATチップのセットアップレジスタ)用の構成データを書き込むコードを生成するために、AMPCによって使用されてよい。
【0028】
一例では、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プロセッサ上で実行されるべきコードに固有の異なる構造を有してよい。
【0029】
一例では、ICATアーキテクチャおよびAMPCは、AMPCによって再構成されることが可能なハードウェア用の他のアーキテクチャに依存するアーキテクチャである。たとえば、AMPCは、宛先RAPCが近くにあるか、またはDSPからLDPにもしくはその逆にデータがルーティング中である場合、結果またはデータを宛先に直接接続することによってICATアーキテクチャ内での宛先の分岐または呼出しを実施してよく、たとえばいかなるオーバーヘッドも伴わずに直ちに結果またはデータを命令の実行にとって利用可能にする。代替として、AMPCは、MBSを使用して宛先の分岐または呼出しを実施してよく、結果およびデータは、高速ストリーミングインターフェース上で宛先にトランスポートされ、宛先は、別のRAPCまたは他の宛先であってよく、宛先への高速ストリーミングインターフェースを介して、命令のさらなる実行のためにデータを利用可能にする。
【0030】
一例では、AMPCは、ハイレベルプログラミング言語で書かれたコードをプリコンパイルする間にAMPCによって割り当てられるRAPCリソースに気づいている。したがって、ICATアーキテクチャは、複数のRAPCによって実行される命令の間のインターコネクト長を最小限に抑えることなどによって、RAPCリソースの使用を最適化するようにAMPCによって構成されてよい。この最適化は、反復手法または試行錯誤手法によって完了してよい。一例では、AMPCは、共通の命令セットのための宛先の分岐または呼出しに対してMBSの使用を最小限に抑えることなどによって、数学アルゴリズム、論理アルゴリズム、または数学アルゴリズムと論理アルゴリズムとの組合せに関わらず、いくつかの命令の使用の履歴パターンに基づいて最適化を改善する学習アルゴリズムを備える。MBS実装形態の一例については、背景技術におけるARM MBS例を参照されたい。
【0031】
一例では、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チップであってよい。
【0032】
一例では、AMPCは、複数のRAPCの数および複数のRAPCのロケーションを規定するための入力アーキテクチャを有するコンパイラを備える。AMPCは、ハイレベルソースコードをフィルタ処理し、複数のRAPCのうちの1つまたは複数の構成によって最適化されることが可能な数学アルゴリズムおよび論理アルゴリズムを識別する。たとえば、ビデオ処理、数学アルゴリズム、または論理アルゴリズムが識別される場合、AMPCは、ビデオ処理、数学アルゴリズム、および/または論理アルゴリズムを実行するように、RAPCのうちの1つまたは複数のDSP、LDP、およびMBSをセットアップする。たとえば、AMPCは、ARMプロセッサなどの従来型プロセッサの動作用の"C"言語ソースコードから機械コードを作成し、ARMプロセッサは、プロセッサに入力されるデータを処理するとともにプロセッサからデータを出力する際に使用されるRAPCの各々の、DSP、LDP、およびMBS部分の各々をセットアップする。
【0033】
プロセッサの外部にあるシステムに対して、ICATプロセッサは、異常に速い従来型プロセッサであるように見える。プロセッサ内では、RAPCのDSP、LDP、およびMBSは、従来のシングルコアプロセッサよりも数十倍、数百倍、さらには数千倍速いレートでデータを処理中である。RAPCごとに、DSPは第1のクロックにおいてその動作を実行し、LDPは第2のクロックにおいて結果をテストするとともに制御決定および結果データを出力し、MBSは第3のクロックにおいて制御データに基づいて2つの宛先のうちの一方に結果データをルーティングする。したがって、各RAPCは、DSPからMBSまで3クロックのレイテンシを有する。ストリーミングデータの場合、開始されると、MBSは、レイテンシ期間の後の後続の各クロックにおいてデータを出力してよい。
【0034】
一例では、再構成可能プロセッサを構成するためのシステムは、非再構成可能プロセッサ、複数の再構成可能コア、および非再構成可能プロセッサ用のハイレベルプログラミング言語で書かれたコードを受け入れることが可能なアルゴリズムマッチングパイプラインコンパイラを備え、コンパイラは、複数の再構成可能コアのうちの1つまたは複数において利用可能なパイプライン化から利益を受けることができる、ハイレベルプログラミング言語で書かれたコードを識別し、複数の非再構成可能プロセッサのうちの1つまたは複数をセットアップするための、非再構成可能プロセッサ用のコードを出力する。
【0035】
一例では、プロセッサは、アルゴリズムマッチングパイプラインコンパイラから命令が受信された結果として、非再構成可能プロセッサコアが複数の再使用可能アルゴリズムによるパイプラインコアの各々を構成および再構成することが可能であるような、非再構成可能プロセッサコア、および非再構成可能プロセッサコアに結合された複数の再使用可能アルゴリズムによるパイプラインコアを備える。たとえば、プロセッサは、単一のチップの中に含まれる。一例では、各再使用可能アルゴリズムによるパイプラインコアは、DSP、LDP、およびMBSを備え、DSPはLDPに対してパイプライン化され、LDPはMBSに対してパイプライン化され、その結果、非再構成可能プロセッサは、各再使用可能アルゴリズムによるパイプラインコア内で行われる処理のいずれも制御しない。
【0036】
定義
アルゴリズムマッチングパイプラインコンパイラすなわちAMPCとは、従来の非再構成可能プロセッサ用のハイレベルプログラミング言語で書かれたコードを受け入れることが可能なコンパイラであり、AMPCは、RAPCまたはフィールドプログラマブルゲートアレイなどの再構成可能なコアまたはプロセッサにおいて利用可能なパイプライン化から利益を受けることができるハイレベルプログラミング言語で書かれたコードを識別し、再構成可能なコアまたはプロセッサを使用するための命令を提供する前に、再構成可能なコアまたはプロセッサを構成するように非再構成可能プロセッサに命令する、非再構成可能プロセッサ用のコードを出力する。再使用可能(または、再構成可能)アルゴリズムによるパイプラインコア(または、コンピュータ)すなわちRAPCとは、セットアップデータによって決定されるような数学関数の様々な組合せとともに連結または動作することができるオペランドデータ用の4つの入力を有する、整数計算および浮動小数点計算などの複数の演算のいずれかをプログラムするためのセットアップインターフェースと、ステータスデータとともに結果データとして出力される48ビットのアキュムレータとを含むDSP、関数を実行するために使用できるルックアップテーブル、ループカウンタ、および定数レジスタをプログラムするためのセットアップインターフェースと、メモリのブロックとを有するLDP、ならびにMBSを備える、パイプライン構造を有する再構成可能な処理コアとして定義される。MBSとは、アルゴリズムの処理中に中央プロセッサまたは周辺プロセッサからのこれ以上の介入なしにアルゴリズムを完了するために、必要に応じて、あるRAPCから別のRAPCに、かつ入力/出力コントローラおよび/または割込み生成器との間で、データおよび結果をルーティングする、再構成可能なプログラマブル回路として定義される。
【0037】
別の例は、スループットにおいて必然的にボトルネックを引き起こす、従来型フォンノイマンプロセッサに固有のキャリーチェーン伝搬遅延の問題を解決する。フォンノイマンという用語は、ジョン・フォンノイマン、すなわち、現代のコンピュータのアーキテクチャの背後の理論の開発者にちなんで名付けられている。初期のコンピュータは、それらが動作している間、処理のためにプログラムおよびデータが供給された。フォンノイマンは、プログラムが記憶されたコンピュータの背後のアイデア、すなわち、フォンノイマンアーキテクチャとも呼ばれる我々の標準的なモデルとともに立ち上がった。フォンノイマンアーキテクチャでは、プログラムおよびデータはメモリの中に保持され、プロセッサおよびメモリは別個であり、データはその2つの間を移動する。その構成では、特にプロセッサ速度が高まりコンピュータメモリにアクセスする際の遅延が伝搬するとき、レイテンシが不可避である。このことは、現代のコンピュータの速度および/または精度を制限する。この問題に対する手法は、データキャッシュを追加すること、マルチスレッディング、およびメモリからプロセッサへの、また逆にプロセッサからメモリへの、ルーティングのレートを改善することによって、固有のボトルネックを包み隠す。他の解決策は、専用の算術プロセッサおよび浮動小数点プロセッサを利用して、コンピュータの中央処理ユニットを遅延させることなく十分な精度をもたらす別個の専用プロセッサに計算を押し付ける。これらの解決策のいずれも実際には問題を解決せず、これらの解決策は、許容できないエラー、ならびにそのようなエラーを検出および訂正するためのオーバーヘッドなどの、追加の問題を持ち込む。
【0038】
一例では、プロセッサは、チェーン伝搬遅延の問題がない、データルーティングのためのアーキテクチャを導入することによって、フォンノイマン処理に固有の問題を解決する。データパイプラインを準備するための短いレイテンシの後、時間共有多重化により、過度のキャリーチェーン遅延について懸念する必要なく任意の幅のデータ値が計算されることが可能になり、任意のデータ幅に対して結果当り1クロックでのデータのストリーミングを可能にする。たとえば、データ幅の増大に起因する追加のキャリーチェーン遅延を引き起こすことなくデータ幅が無制限であるので、必要とされる精度にかかわらず任意の値に対して整数数理が使用されてよい。RAPCプロセッサの速度は、データパイプラインを時間共有多重化することから利益を受け、そのことは、パイプラインの初期充填のための短時間のレイテンシ遅延しか伴わずに、深刻なキャリーチェーン遅延を伴わず無制限の数理精度を有する、そのようなプロセッサとの間のデータの一定のフローをもたらす。
【0039】
高スループットプロセッサの一例は、アルゴリズムマッチングパイプラインコンパイラと、再構成可能タイルのアレイとを備え、再構成可能タイルのアレイの中の再構成可能タイルの各々がRAPCであるように、再構成可能タイルのアレイがアルゴリズムマッチングパイプラインコンパイラによってプログラムされ、初期入力データをロードするための初期レイテンシ期間の後、各クロックにおいて再構成可能タイルのアレイの中の再構成可能タイルのうちの1つから再構成可能タイルのアレイの中のタイルのうちの別のタイルに結果が渡るように、再構成可能タイルのアレイが配置され、再構成可能タイルのアレイが、伝搬遅延を伴わずに1クロック当り1つの結果のスループットレートでコンピュータプロセッサとしてアルゴリズム計算を実行するように、アルゴリズムマッチングパイプラインコンパイラが再構成可能タイルのアレイを構成する。各RAPCは、たとえば、8ビットRAPCである。プリコンパイラは、高スループットプロセッサ用ではなく、あるタイプの従来型非再構成可能プロセッサ用に書かれた、ハイレベル標準ソフトウェア言語を処理し得、プリコンパイラは、たとえば、複数のRAPCを備える再構成可能タイルのアレイをプログラムするための、アルゴリズムマッチングパイプラインコンパイラ用の命令を提供する。再構成可能タイルのアレイ内の再構成可能タイルの各々は、少なくとも1つのLUTを備えてよい。少なくとも1つのLUTは、たとえば、論理モジュールを実装する。データが、8ビットデータ、16ビットデータ、32ビットデータ、64ビットデータ、および任意の他の8の倍数ビットデータとして再構成可能タイルのアレイによって処理され得るように、再構成可能タイルのアレイ内の再構成可能タイルの各々が、再構成可能タイルのアレイ内の1つまたは複数の隣接する再構成可能タイルに再構成可能に結合されてよい。再構成可能タイルのアレイは、処理ユニットからのさらなるオーバーヘッドなしにタスクを完了するように構成されてよい。たとえば、任意の通信チャネルまたはバスを任意の他の論理モジュールと共有する必要なくポイントツーポイント接続性がもたらされるように、再構成可能タイルのアレイ内の再構成可能タイルの各々が、再構成可能タイルのアレイ内の1つまたは複数の隣接する再構成可能タイルに再構成可能に結合される。
【0040】
最初にデータを入力するステップが、高スループットプロセッサのレイテンシ期間中に行われてよい。プロセスは、レイテンシ期間の後に各クロックにおいて結果を計算することによって進む。高スループットプロセッサ用のクロックレートは、8ビットRAPCを用いて構成された同じ高スループットプロセッサ用のクロックレートよりも8倍速い1ビットRAPCを用いて構成されてよく、驚くべきことに、1ビットRAPCを用いて構成された高スループットプロセッサに対する出力データ精度は、8ビットRAPCを用いて構成された高スループットプロセッサに対する出力データ精度と同じであり得る。単一のASICチップパッケージが、単一のASICチップパッケージ内に、複数の、請求項1に記載の高スループットプロセッサを再構成可能に配設してよい。
【0041】
以下の図面は例示的な例であり、最後に出され得る請求項をさらに限定しない。
【図面の簡単な説明】
【0042】
【
図1A】従来のコンパイラ用の従来技術フローチャートである。
【
図1B】従来のコンピュータ用の従来技術プロセッサを示す図である。
【
図2】米国特許第5,684,980号からのブロック図である。
【
図3】
図1Aにおけるフローチャートとの比較のためにAMPCコンパイラの一例を示すフローチャートである。
【
図4】ICATアーキテクチャの一例を示す図である。
【
図5】プログラマがAMPCをどのように使用してよいかという一例のフロー図である。
【
図6】再使用可能アルゴリズムによるパイプラインコンピュータの概略図の例である。
【
図7】AMPCコンパイラを用いたコード例1のコンパイルから得られるハードウェア構成の図の概略図である。
【
図8】コンシューマ電子デバイスにおけるリアルタイムロスレスデータ圧縮による、
図7の例の生の処理能力からの劇的な利益を示す図である。
【
図9】高スループットプロセッサのためのRAPCを構成するために使用される単一ビットLUTの一例を概略的に示す図である。
【
図10】RAPCの中の8つの単一ビットLUTを使用する一例を概略的に示す図である。
【
図11】高スループットプロセッサのための再構成可能タイルアーキテクチャの概略図の例である。
【
図12】再構成可能タイルのアレイを使用するアーキテクチャの一例を示す図である。
【
図13】データ処理のための適用例において使用される高スループットプロセッサの一例を示す図である。
【
図14】単一のRAPCおよびRAPCスイッチの一例を示す図である。
【発明を実施するための形態】
【0043】
同じ参照符号が使用されるとき、これらのラベルは図面に示す例において類似の部分を指す。
【0044】
たとえば、ICATアーキテクチャは、任意の標準的なマイクロプロセッサユニットアーキテクチャを模倣する。そのアーキテクチャは、同じクロック速度を有する単一の標準マイクロプロセッサアーキテクチャと1:1比較が行われるときに、ミップス(MIPS)単位で100:1の優位性を達成すべき1つまたは複数のフィールドプログラマブルゲートアレイ(FPGA)のような、製造後に顧客または設計者によって構成されるように設計された集積回路におけるパイプライン化およびはるかに豊富なゲート密度を利用する。FPGAは、異なる構成で相互配線(inter-wired)することができる多くの論理ゲートのような、プログラマブル論理ブロックのアレイ、およびブロックが「互いに配線される」ことを可能にする再構成可能なインターコネクトの階層を含む。論理ブロックは、複雑な組合せ関数を実行するように構成することができるか、またはANDおよびXORのような単に単純な論理ゲートであってよい。ほとんどのFPGAでは、論理ブロックはまた、単純なフリップフロップ、またはメモリのより完全なブロックであってよい、メモリ要素を含む。
【0045】
極めて大きい性能の飛躍により、プロセッサが、たとえばマシンビジョン、ビデオ処理、オーディオ処理、ロボット制御システム、多軸制御システム、モバイル通信、仮想現実、人工知能、ライブストリーミング、生体監視、モノのインターネット、スーパーコンピューティング、量子コンピューティング、航空宇宙制御システム、複雑なシステムのシミュレーションおよびモデリング、ならびに信号処理用途などのデータ集約的な適用例のために使用されることが可能になる。
【0046】
一例では、アルゴリズムの計算集約的な処理のために低電力が使用される。たとえば、ICATアーキテクチャは、標準的なマイクロ処理ユニット上で実施される同じ計算に対して、エネルギー使用量の低減をもたらし、熱および電力消費を低減する。エネルギー使用量の低減は、従来型プロセッサの100~1000倍であり得る。
【0047】
一例では、ICATは、適用例にとって必要とされるような多くの並列プロセッサとしての構成で実行されてよく、標準的なマイクロプロセッサと比較して、なお一層性能を高める。たとえば、複数のプロセッサアーキテクチャが同時に実行されてよい。たとえば、新たな仮想機械が特に新たなアーキテクチャ用に書かれたコードを実行しながら、レガシーコードと互換性のある仮想機械上でレガシーコードが実行されてよい。一例では、このことは、レガシーコードを新たなシステムアーキテクチャに適応させるために必要とされることになるような、大規模な回帰テストに対する必要性を低減する。
【0048】
ある適用例では、ICATアーキテクチャの速度および拡張性は、そのコードおよび/またはハードウェアが限界まで動作している顧客のために、生の速度および拡張性にとって、必要とされる量のデータを処理することが不可能なレガシーシステムに適用される。
【0049】
一例では、電源投入時またはその前に再構成がコンパイルされ、最終製品性能に対する影響をほとんど伴わずにプランニングを大幅に簡略化する。たとえば、FPGAは、このアーキテクチャのためのホストハードウェアである。既存のコードの大きい書直しを伴わずに、毎秒数百万個の命令(MIPS)が容易に加えられてよい。既存のコードは、既存のコードの再コンパイルを除いてほとんど無修正で実行されてよい。たとえば、多数の共通入力の並列処理を必要とするアルゴリズムは、このICATアーキテクチャにとって理想的な候補である。
【0050】
一例では、古いプロセッサおよび新たなプロセッサが並行して動作する。既存のコードは、再コンパイルされてよく、変更が行われていないことを保証するための最低限の回帰テストとともに、ほぼ手つかずで動作してよい。例外は、タイミングがアーキテクチャの動作に影響を及ぼす場合、およびハードウェア周辺装置が変更される場合である。たとえば、ICATアーキテクチャは、生の計算速度を高めるために使用されてよく、コードのアクセラレーションは、必要とされるときにハードウェアを変換することによって実施されてよい。
【0051】
一例では、ICATアーキテクチャは、任意の潜在的なコード非互換性問題を捕らえるフロントエンドプリコンパイラを備える。このフロントエンドプリコンパイラは、これらの潜在的なコード非互換性問題を自動的に解決する。たとえば、ICATアーキテクチャは、異なる開発者が精通している様々なプロセッサアーキテクチャをエミュレートしてよい。たとえば、ICATアーキテクチャは、2つ以上のプロセッサをエミュレートしてよく、複数の開発者に好感をもたれているプロセッサに対してプロジェクトがコーディングされること、および複数の異なる仮想プロセッサ上で同時にコードを実行することを可能にする。一例では、複数の異なるプロセッサが、多重処理環境において異なるコードセットを実行することになり、プログラム開発者は、コードと互換性のある複数の領域のうちの1つに対してコードをコンパイルする。
【0052】
一例では、プリコンパイラは、様々な処理アルゴリズムにとって必要とされるハードウェア構成コードを生成するアルゴリズムマッチングパイプラインコンパイラである。ICATアーキテクチャを構成するためのファームウェアは、複数の処理タスク用の論理式および数式から生成されてよい。たとえば、複数のプロセッサは、低性能タスクと高性能タスクとの混合を実行するために、マトリックスアレイにおいて構成されてよい。
【0053】
ICATアーキテクチャが、1つの特定の多重処理環境にしか適用可能でない機械言語でプログラムすることによって得られるいかなる速度優位性も圧倒する、生の速度優位性をもたらすので、ICATアーキテクチャは、より高いレベルの言語を使用して開発された処理コードを含み、開発プロジェクトを完了するための時間を実質的に短縮する。
【0054】
ICATアーキテクチャは、CまたはC++などのハイレベルプログラミング言語を用いた使用に対して最適化されているハードウェア固有コマンドに対してレガシーコードをチェックする、コンパイラまたはプリコンパイラを含む。
図1と
図3との比較は、たとえばアルゴリズムマッチングパイプライン化コンパイラ(AMPC)に含まれる、追加のステップを示す。
【0055】
一例では、インビルト協調(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はオープンソースであり、いくつかの異なるプロセッサアーキテクチャに適応可能である。
【0056】
既存の設計がICATアーキテクチャに変換されることを可能にするために、ICATアーキテクチャのためにPCBAレイアウトソフトウェアおよびエンジニアリングツールが提供される。
【0057】
一例では、標準的なVerilogまたはVHDLコードを使用してパイプラインアーキテクチャが達成される。たとえば、1024ワードの命令キャッシュ、データキャッシュ、および多重レベルメモリキャッシュアーキテクチャが、ICATアーキテクチャにおいて提供されてよい。ICATアーキテクチャのパイプライン化は、決定処理における分岐がどの進路に発生する傾向があるのかを検出する学習アルゴリズムを含んでよく、その経路を将来におけるデフォルト経路にすることが学習アルゴリズムを進ませる。別の例では、割込みコードが分離され、割込みハンドラはプライベートコードロケーションを有する特定の入力にとって専用である。一例では、ICATアーキテクチャは、マルチプロセッサデバッガを含む。たとえば、関数が分離されるように既存のコードが良好に区分されることを保証するために、既存のコードが前処理デバッガによって処理されてよい。次いで、単一のデバッガが、動作の独立した各スレッドにおいて実行されてよい。
【0058】
たとえば、再構成可能アルゴリズムによるパイプラインコア(RAPC)は、1000個を超えるIntel i7マイクロプロセッサと、より好ましくは、10,000個を超えるIntel i7マイクロプロセッサと均等な、ミップスおよびメガフロップスを提供する、2インチチップパッケージの中に設けられてよい。
【0059】
一例では、ICATアーキテクチャは、既存のデバッグツールと互換性がある。別の例では、ICATアーキテクチャは、プロセッサ間通信を含まない既存のレガシーコードを実行するように実装される。ICAT固有ハードウェアは、すべてのレガシーコードに共通の、良好にデバッグされた単一のブロックとして統合される。たとえば、共通多重処理ユニットのメイン関数を厳密に模倣する周辺装置が、ICATアーキテクチャとそっくりに作られる。たとえば、スーパーセット周辺装置により、ハードウェア構成が顧客によって容易に構成されることが可能になる。
【0060】
一例では、ICATアーキテクチャコンパイラまたはプリコンパイラは、クロックサイクルを計数する低レベルコードタイミングループ、命令フェッチを可能にする遅延、および他の非互換タイミングコードを検出し、修復、またはICATアーキテクチャ内で提供される互換性のあるハイレベルプログラミングとの交換のために、手作業または自動のいずれかでこれらにフラグをつける。
【0061】
一例では、ICATアーキテクチャは、旧来のアーキテクチャにまさる4:1のミップス優位性をもたらす。別の例では、優位性は少なくとも100:1である。
【0062】
一例では、ICATアーキテクチャは、標準的なソースコードフォーマットにおける処理アルゴリズムを受け入れるコンパイラである、アルゴリズムマッチングパイプラインコンパイラ(AMPC)を備える。AMPCは、ICATアーキテクチャとともに動作可能な従来型処理システム用のファームウェアを生成する。コンパイラは、ICATハードウェアを構成する命令を生成し、その結果、アーキテクチャは、AMPCによって再構成可能でない旧来のマイクロプロセッサと比較して、改善された性能でアルゴリズムを処理する。詳細には、AMPCは、アルゴリズムによる集約的な計算処理を必要とする適用例に対してプロセッサ性能を最適化するために、パイプライン化を使用する。たとえば、このファームウェアは、最適性能を伴ってアルゴリズムを処理するICATハードウェアアーキテクチャを構成するために、従来型処理システム上で実行されてよい。
【0063】
一例では、AMPCは、アルゴリズムを直接処理するようにICATアーキテクチャのプロセッサリソースを構成する、ICATハードウェアを動作させるためのコードを生成することが可能な従来のコンパイラソースコードをコンパイルする、コンパイラを提供する。たとえば、AMPCは、C、C#、C++、Matlab、または他の従来型コンパイラなどの従来型コンパイラと互換性のあるソースコードを利用する。
【0064】
一例では、AMPCによって生成されるファームウェアは、ICATアーキテクチャのメイン処理システム上で動作する。たとえば、メイン処理システムは、ICATアーキテクチャの残部と同じチップ上の従来型プロセッサであり、ICATアーキテクチャとともにシームレスに動作する。この例では、AMPCは、C、C#、C++などのソースコード用のハイレベルプログラミング言語で書かれたコードを受け入れ、AMPCは、メイン処理システム上で動作するICATアーキテクチャ用のファームウェアを出力する。このことは、ICATアーキテクチャ用のファームウェアが、開発者が精通しているハイレベルプログラミング言語でプログラムされることを可能にすることによって、ICATアーキテクチャの動作用のコーディングを簡略化する。ICATアーキテクチャの生の速度は不利益をなくし、速度を最適化するために機械レベルコードをプログラムすべき、いかなる必要性も低減する。代わりに、ハイレベルプログラミング言語が、特定の適用例に対して解かれるべきアルゴリズムに基づいて性能を最適化するために、ファームウェアを最適化する。たとえば、ICATアーキテクチャは、一例として、ロボットビジョンシステムのために、ファームウェアにおいて規定される少なくとも1つの仮想機械上で、最適性能を可能にするように再構成可能である。
【0065】
旧来のマイクロプロセッサとは異なり、一例では、ICATアーキテクチャのAMPCは、if-then-elseプロセスなどのソフトウェアシンタックスをコンパイルして、たとえばパイプライン化を使用してもっと少数のクロックサイクルの中でプロセスを最適に実行するように、ICATアーキテクチャのハードウェアを再構成するファームウェアにしてよい。ファームウェアを実行することによって、ICATアーキテクチャが構成される。対照的に、従来のコンパイラは、すべての従来型プロセッサが使用するファームウェアを構築するが、従来型プロセッサは、ファームウェアによって再構成されない。AMPCは、たとえば特定の適用例における最適な動作のためにICATアーキテクチャを構成する、ICATアーキテクチャ用のファームウェアを構築する。一例では、AMPCは、ICATアーキテクチャのプロセッサハードウェア用の入力構造としてのアルゴリズムを使用して、ICATハードウェアの構成を選択および構造化する。
【0066】
たとえば、ICATアーキテクチャのハードウェアアーキテクチャは、AMPCが生成したファームウェアによって構成されると、特定の適用例に対する速度性能を処理するためにAMPCによって最適化される。AMPCは、ICATアーキテクチャのハードウェアを再構成することができ、ここで、従来のコンパイラは、ICATまたはいかなるマイクロプロセッサのハードウェアも再構成することができない。
【0067】
標準的なシステムコンパイラは、従来のプロセッサシステムにおいて、ハードウェアのアーキテクチャを変更することができない。しかしながら、一例では、AMPCは、ハードウェアにおける以前の結果に基づいて、パイプライン処理およびデータのルーティングを直接実行するようにICATアーキテクチャプロセッサを構成するファームウェアを生成する。たとえば、AMPCに入力されるif-then-else論理ステートメントは、データ結果を次のICATにルーティングするようにICATアーキテクチャのハードウェアを構造化することになる。この例では、AMPCは、同じif-then-else論理のためのコードフェッチ、データロード、データ記憶、分岐、およびサブルーチンなどの従来の処理システムのオーバーヘッドを除去するハードウェア構成を生成する。
【0068】
図4は、ICATアーキテクチャの一例を示す。一例では、メイン処理システム101上で動作するICAT構成プログラムを生成するために、Visual Studioなどの従来型コンパイラが使用されてよい。このことは、チップの中で様々なタイプの処理アルゴリズムを実行および処理するように再構成可能であるハードウェアの、再プログラム可能なプールを構成および再構成するための方法を提供する。従来の処理システムではハードウェアでなくソフトウェアだけが変更できるので、従来の処理システム(たとえば、Intel、ARM、IBM、AMDマイクロプロセッサ)は、様々なアルゴリズムを実行するように再構成することができない。ICATアーキテクチャを使用することによって、従来の処理システムのフェッチおよび実行コード命令オーバーヘッドのすべてが除去される。
図4のICATアーキテクチャは、システムオンチップ(SOC)デバイス100の中に実装された並列プロセッサリソースのプールを利用してデータの効率的な処理を実行するために構成可能な、再構成可能なハードウェアを提供する。
【0069】
たとえば、数理プロセッサ107のプールとそれに続く論理プロセッサ108および構成可能なマトリックスルーティング109は、並列処理リソース102のプールを実装する。このアーキテクチャは、特定の適用例に対して処理性能を最適化するために、リソースをパイプライン処理することが可能である。一例では、プロセッサ102のプールは、メインプロセッサからさらなる命令を受信することなく、メインプロセッサ101とは独立に複数の処理タスクを実行する。各ICATは、スタンドアロンプロセッサシステムとして全体のアルゴリズムを処理するように構成されてよい。したがって、ICATは、アルゴリズムを実行するように構成されると、アルゴリズムの処理を完了するためのオーバーヘッドを必要としない、それ自体の中のシステムと見なすことができる。たとえば、ICATは、if-then-else命令セットを実行するように構成されてよく、高速フーリエ変換または他の数学的アルゴリズム解法などの完全に異なる命令セットを実行するように、後で再構成されてよい。
【0070】
アクティビティの不必要なサイクルを減らすことによって、ICATアーキテクチャは、従来型プロセッサと比較したとき、電力消費を低減し、より少ない熱しか発生させず、データを処理する速度を高める。ICATリソース102は、データがそれらの入力部において処理される準備ができているとき、それらが構成されるまでアイドルである。プロセッサのすべては、必要とされないときにはアイドル状態に保たれ、いかなる不必要なオーバーヘッドから発生する熱も低減する。ICATがコードをフェッチおよび実行しないので、ICATリソースのプールの中の各プロセッサは従来型プロセッサよりもオーバーヘッドが小さい。代わりに、ハードウェアは特定の動作を実行するように構成され、ICATアーキテクチャによって提供された構成済みのアルゴリズムを用いて処理される必要があるデータが提供されるときのみアクティブである。一例では、単一のICATプロセッサが、数理プロセッサ107、論理プロセッサ108、および構成可能なマトリックスルーティング109によって導かれる出力部のプールを使用する。
【0071】
この同じICATプロセッサが、if-then-elseなどの単純な処理タスクのために、または顔認識において使用されるアルゴリズムなどの極めて高度かつ複雑なアルゴリズムのために使用されてよい。ICATリソース102の複数のグループまたはプール、すなわち、数理プロセッサ107、論理プロセッサ108、および構成可能なマトリックスルーティング109によって導かれる出力部のプールを使用することによって、ICATアーキテクチャは、たとえば動き検出、形状検出、または識別検出などのパイプラインアーキテクチャにおける複数の計算を必要とする処理タスクのために使用されてよい。
【0072】
一例では、アルゴリズムは、ICATプロセッサのインターコネクトバス構造を制御し、ICATアーキテクチャは、ビデオ、センサなどの入力デバイス112からの入力データストリーム、または以前のプロセスステップからのデータを処理する。たとえば、以前の結果は、データメモリバッファ、ライブ入力データ、または他の処理済みのステップ110、111からの任意のデータからストリーミングされてよい。処理結果は、たとえば制御出力またはビデオ出力のように、デバイス113に直接出力されてよい。
【0073】
ICATリソースのプールは、たとえば数理モジュール、論理モジュール、および結果ルーティングモジュールなどの3つのタイプのプロセッサモジュールを含んでよい。数理モジュールは、数学関数を実行する。論理モジュールは、論理関数を実行する。結果ルーティングモジュールは、分岐およびデータルーティング関数を実行する。たとえば、
図6において、再使用可能アルゴリズムによるパイプラインコンピュータ(RAPC)が概略的に図示される。AMPCによるICATアーキテクチャのセットアップレジスタの構成によって、セットアップバス109が確立される。オペランドが、デジタル信号プロセッサ(DSP)110上のメモリロケーションA、B、C、およびDに導かれる。DSPは、数学アルゴリズムを実行するように構成される。アルゴリズムの結果は、論理決定プロセッサ(LDP)111に導かれる。LDPは、論理命令を実行する。論理命令の結果は、直接またはマトリックスバススイッチ(MBS)を介して次のRAPCに配送される。MBSは、結果を次のRAPCに導き、すなわち、高速ストリーミングインターフェース上での結果の配送のための入力および出力ならびに割込みを制御する。
【0074】
ハードウェアリソースが、最適性能を得るためにパイプライン構造でインターコネクトされているICATコプロセッサシステムの中に構成されてよい。一例では、再構成可能であるハードウェアリソースの再プログラム可能なプールを設計するための方法は、チップの中の複数の処理アルゴリズムを実行および処理する。ICATプロセッサを構成するためのハードウェアリソースは、チップの中に設計されてよく、チップの中のハードウェアリソースは、AMPCを介して再構成可能である。ICAT処理システムのアーキテクチャは、たとえばアルゴリズムを処理するためのソースコードから構成される。したがって、ICATプロセッサのハードウェアが、たとえばAMPCを使用するプロセッサとは独立にアルゴリズムを実行するようにソースコードによって構成されるので、従来型プロセッサのために生成されるコードは、ICATアーキテクチャにおいてはるかに効率的に実行されてよい。したがって、ICATアーキテクチャは、従来型マイクロプロセッサのために作成されたソースコードからICATハードウェアアーキテクチャを構成することが可能であり、そのことは当技術分野で知られていない。一例では、プロセッサによってアルゴリズム的マトリックス構造の中に構成可能かつ再構成可能であるハードウェアリソースのプールが作成され、ハードウェアリソースのプールは、次いで、実際にチップの中で複数の処理アルゴリズムを処理する。一例では、ハードウェアリソースは、パイプライン化を使用する他のプロセッサとは独立に、複数のコマンドを通じてデータを処理する。
【0075】
一例では、ICATアーキテクチャおよびアルゴリズムマッチングパイプライン化コンパイラは、当技術分野で未知の成果を達成するように結合し、計算の速度と効率の両方を達成する。たとえば、AMPCは、複数の処理アルゴリズムを実行するためのハードウェアリソースを構成する。AMPCは、ICATチップの中でICATリソースのプールから処理アルゴリズムを構成するために使用される、構成セットアップファームウェアを生成する。このことは、ICATアーキテクチャ内でアルゴリズムを処理する個々のハードウェアを作成するために、従来型プロセッサ用に設計された既存のアプリケーションソースコード、およびICATハードウェアリソースを整合させ割り当てるために設計された新たなソースコードを受け入れるツールを、プログラマに提供する。AMPCは、特定の目的のためのSOCの動作中、メインプロセッサに依存しない複数のアルゴリズムを実行するようにICATハードウェアを構成するように、メインプロセッサを動作させるファームウェアを生成する。
【0076】
従来型プロセッサは、プログラム命令の段階的な実行のために使用されるプログラムメモリ、フェッチハードウェア、および実行ハードウェア、バルク(ヒープ)データおよびプログラムスタック構造の記憶のために必要とされるデータメモリ、ならびにそのすべてが従来のプロセッサアーキテクチャにおいて相当なオーバーヘッドを生み出す、命令フェッチおよび実行サイクルと、プログラムスタックの管理と、データヒープ記憶域の管理とを備える類似のアーキテクチャを使用する。
【0077】
対照的に、一例では、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上で動作するコードを出力する。
【0078】
たとえば、メインプロセッサ101からの入力に応答するコプロセッサシステム構造が、ICATリソース102のプールから構成されてよい。代替として、ICATリソース102のプールは、メインプロセッサ101への、またはメインプロセッサアーキテクチャがメインプロセッサとは別個の入力/出力デバイスを含む場合にはメインプロセッサ101の入力/出力デバイスへの、割込みおよび出力データを生成してよい。一例では、ICATリソース102のプールは、従来型プロセッサ101によって構成されてよく、次いで、ICATリソース102は、再構成されるまでそれら自体において動作する。
【0079】
ICATプロセッサがファームウェアによって構成されると、ICATアーキテクチャのプロセッサは、それら自体において並行してデータストリームを継続的に処理する。対照的に、従来のシステムは、各処理ステップにおいてプロセスフローを決定するために、終わりなくメモリに進むとともに命令をフェッチすることを必要とする。AMPCは、たとえば特定のアルゴリズムの処理のための処理ステップを実行するために、たとえばICATアーキテクチャの特定のICATプロセッサ構造に数学論理およびルーティングなどのリソースのハードウェアグループを割り当ててよい。従来のコンパイラは、マイクロプロセッサのハードウェア構造を選択および構成しない。たとえば、AMPCがICATアーキテクチャのハードウェア構造を構築すると、AMPCは、処理性能を速めるパイプラインアーキテクチャにおいてICATアーキテクチャ用のハードウェアリソースを構成してよい。従来のコンパイラはこれができない。
【0080】
図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は、メモリおよびメモリ論理演算を制御するために使用されてよい。
【0081】
一例では、動き検出アルゴリズムが、汎用コンピュータ上での使用のためにC言語で書かれる。
【0082】
コード例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はビデオストリームの中の信号である
【0083】
図7は、AMPCコンパイラを用いたコード例1のコンパイルから得られるハードウェア構成の図の概略図を示す。ビデオデバイス111は、2つの出力部、すなわち、ライブビデオピクセルのストリーム113、およびフレーム遅延バッファストリーム112を有する。RGB出力の場合、各ピクセルは赤色、緑色、および青色を備える。DSP115はライブフィードと遅延フィードとの比較を実行し、結果はLDP116にパイプライン化され(117)、LDP116は動きが検出されるかどうかを決定する。結果は、RAPC114のMBSによって出力される。単一のRAPCが、クロックサイクルごとに並行して実行する3つの処理ブロックを実装するように構成される。比較において、従来の処理システムは、ビデオの各ピクセルを処理して動きを検出するために、37個の命令の実行を必要とする。これらの命令のほとんどは、従来の非再構成可能かつ非パイプラインのプロセッサ上で実行されたとき、3クロックサイクルよりも多くかかる。平均的な命令が3クロックサイクルの中で実行されても、そのことは最適化されていない汎用プロセッサにとって寛大であるとはいえ、各ピクセルを処理するために111個のCPUクロックサイクルを要することになる。現代のカメラにおいてピクセルの数が増大するので、現代のシングルコアプロセッサおよびマルチコアプロセッサから利用可能なサイクル時間が、ジョブにとって不十分であることは明らかである。
【0084】
対照的に、コード例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と一緒に、パイプラインとして再構成することができる。
【0085】
コード例1および
図7のポイントは、RAPCを追加することが単にチップの密度およびサイズの問題であり、オーバーヘッドを加えることなく数千個がASICに追加されてよいということである。各RAPCは、パイプラインの並列プロセッサである。したがって、従来型プロセッサでコアの追加、キャッシュメモリの追加、およびオーバークロッキングを行っても、数十個(couple dozen)のRAPCを有する単一のICATチップの性能付近のどこにも従来型プロセッサを決して持ってくることができない。その上、従来型プロセッサに強要する取組みのすべては、従来の非再構成可能かつ非パイプラインのプロセッサに対して、過度の熱、コスト、およびサイズをもたらす。これらの同じ方法がやはりICATアーキテクチャのRAPCの性能を高めるために使用できることは言うまでもない。ともかく、ICATアーキテクチャにRAPCを追加することは、プログラマがICATアーキテクチャのために固有のプログラムする必要なしに、同等の従来型プロセッサアーキテクチャにまさって、常に性能を劇的に改善する。このことは、驚くべき予想外の結果である。従来型プロセッサからより多くを得ることに注意のすべてが目を向けるが、プログラマブルかつ再構成可能なアーキテクチャを従来型プロセッサに追加して汎用プロセッサの性能を向上させることにはほとんど注意が与えられて来なかった。
【0086】
また、標準的なFPGA上でコード例1に対して同じ解決策を実施することは、この例で与えられるようにハイレベル標準プログラミング言語を単に再コンパイルすることよりも多くを必要とすることになる。マトリックス乗算器を首尾よく開発するために、たとえばXilinx FPGAの中のPIDまたは任意の複雑なアルゴリズムは、以下のスキル、すなわち、RTLおよびVerilog言語を用いて回路構成を設計する際の実際上の知識、高度なアーキテクチャスキル(並列処理、パイプライン化、データストリーミング、リソース/性能トレードオフなど)、算術、論理決定実行、メモリデバイス、コントローラデバイス、周辺インターフェースなどの多種多様なハードウェアビルディングブロックを伴う設計経験、ソフトウェア設計、様々なバージョンのハイレベルプログラミング言語を伴う実際上の知識、アプリケーションを監視および制御する際に使用される数学アルゴリズムを伴う実際上の知識、ならびに"C"コードをXilinxハードウェアへコンパイルすること、ハードウェア設計を検証するとともに性能目標を満たすのに必要な場合にアーキテクチャ修正を加えること、"C"コードテストベンチを構築すること、テストベンチ結果に対してハードウェアシミュレーション結果を検証すること、およびハードウェアの中に設計を実装するとともにそれをテストすることなどのXilinxソフトウェアツールをどのように使用すべきかという知識を必要とする。このことのすべては、典型的なFPGAプロジェクトを、時間的およびコスト的に、一般のハイレベル言語プログラミングスキルを持つ人物の能力をはるかに超えたものにする。当技術分野の現在の状態は、性能が最も重要であり特注設計およびプログラミングの遅延およびコストが許容できる、ニッチ処理のためにFPGAを指定する。
【0087】
対照的に、フロントエンド、マイクロプロセッサアーキテクチャが、よく知られている汎用アーキテクチャであるので、いかなる有能なハイレベル言語プログラマもICAT技術をプログラムすることができる。RAPCは、汎用プロセッサおよびAMPCによって構成され、AMPCは、たとえば
図7の図に示すように、フロントエンドプロセッサ用の標準コードに基づいて1つまたは複数のRAPCを再構成するために、各RAPCの標準的な構造を使用する。したがって、複数のRAPC、ならびに世界に対面する標準的なプロセッサアーキテクチャを使用するRAPCを構成および再構成するためのAMPCを含む、ICAT技術は、従来型プロセッサおよび知られている任意のFPGAプロセッサにまさる、驚くべき予想外の進歩である。
【0088】
図8は、再使用可能アルゴリズムによるパイプラインコアをアルゴリズムマッチングパイプラインコンパイラと組み合わせる、マイクロプロセッサの適用例を示す。従来型マイクロプロセッサのビデオ処理速度の不足は、専用かつ高価なチップセットまたは後処理のいずれかを必要とする。図面に示すように、RAPCおよびAMPCを有する汎用プロセッサは、数百万ピクセルをリアルタイムで処理する解決策を生み出し、たとえばコンシューマ電子デバイスに搭載された汎用ICATからのビデオのための、動き感知、ビデオ圧縮、ならびにより速いアップロードおよびダウンロード速度を提供する。
【0089】
各RAPCは、DSP、LDP、およびMBSを備えてよい。DSPは、必要とされるタイプの動作(すなわち、整数および浮動小数点の、乗算、除算、加算、減算など)をプログラムするための、セットアップインターフェースを有してよい。DSPは、
図8に示すような、セットアップデータによって決定されるような数学関数の様々な組合せとともに連結または動作できるオペランドデータ用の4つの入力部を有してよい。DSPは、ステータスデータとともに結果データとして出力される48ビットのアキュムレータを有してよい。ステータスデータは、たとえばキャリーアウト、等しい、より大きい、およびより小さいを含む。
【0090】
LDPは、たとえばルックアップテーブル、ループカウンタ、および定数レジスタをプログラムするための、セットアップインターフェースを有してよい。LDPは、反復アルゴリズムがいつ完了するのかを検出するためのループカウンタを有してよい。LDPは、ルックアップテーブルへの入力用の定数データを保持できるレジスタを有してよい。LDPは、関数を実行するために使用できるメモリのブロックを有してよい。LUT関数は、実装することが可能でありループカウンタを使用して連続的にアクセスできるルックアップテーブル、実装することが可能であり制御目的のためにDSPステータス、定数レジスタ、またはDSP結果データによってアクセスできるルックアップテーブル、および実装することが可能であり制御目的のために種々の論理信号を出力できる論理ルックアップテーブルを含んでよい。LDPは、その入力部からその出力部に結果データを渡してよい。LDPは、たとえばその出力部において結果データ用の1つのパイプラインレジスタを有してよい。代替として、LDPは、その出力部において結果データ用の同期クリアイネーブルを有する2つのパイプラインレジスタを有してもよい。
【0091】
この発明を実施するための形態は、特許請求の範囲に記載される本発明を当業者が作成および使用することを可能にする目的で、特許請求の範囲の特徴および要素を含む例を提供する。ただし、これらの例は、特許請求の範囲を直接限定することを意図しない。代わりに、例は、これらの説明、特許請求の範囲、および図面において開示されており、当技術分野で知られている方法で改変されてよく、また組み合わせられてよい、特許請求の範囲の特徴および要素を提供する。
【0092】
一例では、時間共有多重化により、キャリーチェーン遅延について懸念する必要なく任意の幅のデータ値が計算されることが可能になる。このことは、フォンノイマン伝搬遅延を伴わずにプロセッサの内および外でデータのストリーミングを達成する。結果はクロックごとに出力される。伝搬遅延を伴わずに1クロックサイクルに対して1つの結果を出力するプロセッサは、驚くべきであり予想外である。通常、結果が伝搬するとき、計算の制御およびタイミングのために多くの遅延サイクルが必要とされる。これらの伝搬遅延は、コプロセッサ、グラフィックスカード、メモリ、およびおそらくはいくつかのコアを含む、現代のプロセッサでは不可避であり、そのことは、適切な時間においてかつ適切なシーケンスの中でデータまたは計算を提供するための制御に対する、関連するオーバーヘッドを必要とする。幅が固定されたデータを有する現代のコンピュータアーキテクチャでは、パイプライン化および並列処理でさえこれらの遅延を受けやすい。したがって、現代のコンピュータアーキテクチャは、単一の結果を達成するために多くのクロックサイクルがかかる。オーバークロッキングは、サイクルのレートを増大させるために使用されてよいが、結果当りのサイクル数を増やすためには何もしない。時間共有多重化により、任意のデータ幅に対して結果当り1クロックが可能になり、そのことは別の驚くべき結果である。この結果は、データがキューの中にロードされる間、任意の特定のデータ幅に対して短時間のレイテンシ期間を構成することによって達成される。その後、1クロックが時間共有多重化システムの中に結果入力を与える。本明細書では、クロックは、単位サイクルまたは信号としてエレクトロニクスにおいて理解されるものとして規定される。たとえば、信号が、ハイ状態とロー状態との間で往復し得、デジタル回路のアクションを協調させるためにメトロノームと同様に使用され得る。より高い性能を達成するために、半サイクルがクロックと見なされてよい。現代のエレクトロニクスでは、クロックレートは、安定な結果を達成するように周波数および電圧を変えることによって調整可能であり、そのことは過度の熱を除去するためのハードウェアの能力に依存し得る。いくつかのアーキテクチャでは、プロセッサまたはグラフィックスカードは、電圧および周波数を調整することによって、保証されたクロック速度からオーバークロックまたはアンダークロックされ得る。このことはまた、RAPCプロセッサにおいて行われてよい。したがって、最良の比較はフロップスではなく、クロック当りの結果である。フロップスは、類似のクロック周波数で動作するプロセッサに対する比較として使用され得る。RAPCプロセッサは、3つのプロセスモジュール、すなわち、加算、減算、乗算、および除算の能力を実装する数学モジュール、論理決定、すなわち、他のデータ、定数、またはしきい値とのデータの比較を処理するための論理モジュール、および計算またはプロセスにおいてデータを次のステップにルーティングするルーティングモジュールが備えられてよい。たとえば、数学モジュールおよび論理モジュールのいずれかまたはその両方は、LUTすなわちルックアップテーブルとして実装されてよい。一例では、各RAPCは1つまたは複数のLUTを備えてよい。たとえば、論理モジュールは、ルーティングモジュールの中にデータを導いてよい。一例では、ルーティングモジュールは、その出力の各々においてパイプラインレジスタを有するマルチプレクサスイッチであってよい。一例では、RAPCは、あるRAPCから隣接する別のRAPCへのデータフローを提供するためにタイル型であってよい。
【0093】
論理ゲートを実装するために、ルックアップテーブル(LUT)構造が使用され得る。LUTはメモリデバイスと考えられてよい。入力論理端子は、必要とされる出力端子を選択し得る。LUTデバイスは、組合せ論理ゲート構造を置き換えるための組合せ真理値表を実装するために使用され得る。LUTへのアドレス入力は、ゲート構造への論理入力と同様である。出力データの各ビットは、たとえば、ゲート構造からの出力端子と同様である。LUTは、論理関数が実行されることから独立した、入力から出力までの予測可能な伝搬時間を有してよく、中央処理ユニットとの通信を伴わずに動作できる構造を提供する。論理ゲート構造は、入力端子が変化するにつれて変化する伝搬時間を有することがある。LUTは、たとえば、FPGA(フィールドプログラマブルゲートアレイ)の中に論理構造を実装するために使用され得る。代替として、LUTは、ASICの中に再構成可能な論理ゲート構造を構築するために使用され得る。たとえば、LUTメモリ構造は、入力端子(アドレスビット)が追加されると指数関数的に大きくなる。したがって、LUTは、多くの入力端子を必要とする論理構造を実装するのに実用的であるものとは見なされていない。たとえば、8ビットRAPCが65,536個のアドレスを必要とすることがあり、単一のLUTの中に実装されるなら27ビットのデータワード(1,769,472ビット)を含む。しかしながら、この欠点は以下の例において克服される。
図9は、RAPCプロセッサを構成するために使用される単一ビットLUTを示し、たとえば、
図10は、RAPCプロセッサのための8つの単一ビットLUTを概略的に示す。
図10は、たとえば、3つの論理チェーン入力を示す。これらの3つの入力は、複数のRAPC間のPSP(パイプラインストリーミングプロセッサ)アーキテクチャなどの、RAPC間のタイル型アーキテクチャを生成するために使用され得る。RAPCがスタンドアロンプロセッサとして構成される場合、これらの入力は無視されてよい。図示の例では、双方向3ビット論理チェーンが、複数のRAPCを組み込む高スループットプロセッサのすべての8つのLUTにわたって実装される。LUTは、AMPCによって構成されたLUTメモリデバイスの論理チェーン信号出力ドライバ上のトライステートドライバを制御することに
よって、論理チェーンの双方向制御を行う。この例は、左シフトおよび/もしくは右シフト、乗算、ならびに/または除算などの、プログラムされた処理関数を実行するために必要とされる方向で論理信号をルーティングするために、AMPCコンパイラがどのように論理チェーンを構成するのかを示す。3つの論理チェーン出力はまた、たとえば、RAPCをPSP処理構成の中にチェーン結合させるために提供される。
【0094】
RAPCは、1~8ビットのプロセッサとして構成されてよい。8ビットよりも小型のRAPCは、非同期論理チェーン遅延がより短いのでオーバークロックされ得る。
1ビットRAPCは、8ビットRAPCの8倍のクロック速度で動作してよい。
2ビットRAPCは、8ビットRAPCの4倍のクロック速度で動作してよい。
4ビットRAPCは、8ビットRAPCの2倍のクロック速度で動作してよい。
これらのRAPCのいずれもPSPプロセッサを実装するために使用されてよい。これらのRAPCをオーバークロックすることは性能の増強をもたらし、ビットがより少ないもっと小型のRAPCが、やはり精度がより高いデータワードを処理するためのPSPプロセッサとして構成されてよい。一例では、4つの4ビットRAPCがPSPプロセッサとして構成され、これらの4つは、たとえば、16ビットRAPCよりも速くてよい4ビットRAPCのクロックレートで結果としてストリーミングが生じながら、16ビットデータワードを処理することができる。4ビットRAPCによって利用される、より速いクロック速度は、ちょうどそれらが従来型処理システムにおいて行うように、より多くの熱を発生させる。
【0095】
RAPCは、1~8ビットのプロセッサとして構成され得る。8ビットよりも小型のRAPCは、非同期論理チェーン遅延がより短いのでオーバークロックされ得る。1ビットRAPCは、8ビットRAPCの8倍のクロック速度で動作することができる。2ビットRAPCは、8ビットRAPCの4倍のクロック速度で動作することができる。4ビットRAPCは、8ビットRAPCの2倍のクロック速度で動作することができる。これらのRAPCのいずれもPSPプロセッサを実装するために使用され得る。
【0096】
これらのRAPCをオーバークロックすることは性能の増強をもたらすが、もっと小型のRAPCが、やはり精度がより高いデータワードを処理するためのPSPプロセッサとして構成され得る(すなわち、PSPプロセッサとして構成された4つの4ビットRAPCは16ビットデータワードを処理することができ、4ビットRAPCプロセッサによってもたらされるもっと高い性能で結果としてストリームが生じる)。より速いクロック速度が、ちょうどそれらが従来型処理システムにおいて行うように、より多くの熱を発生させる。
【0097】
図10において、8つの1ビットLUTが8ビットRAPC高スループットプロセッサを備える。8つのLUTはステートマシンとして構成され、たとえば、3ビットの論理チェーンを使用してインターコネクトされている。これらの論理チェーンは、各ビットの1ビットLUTから次に上位および/または次に下位のビットのLUTまで、状態情報を伝達する。その結果、チェーン結合されたこれらのLUTは、オーバーヘッドなしに8ビットRAPCとして一緒に機能する。8ビットRAPCは、1,769,472ビットのデータではなく1,536ビットのデータでしかない、256個のLUTアドレスおよび6ビットデータワードを備える。代替例では、高スループットプロセッサは、たとえば、1~8ビットなどの任意のサイズのRAPCを備えてよい。ビットサイズがより小さいRAPCは、より速いクロック速度で動作し得る。たとえば、4ビットRAPCは、8ビットRAPCの2倍速く動作する。2倍の速度での2倍のプロセッサは4倍の性能に等しい。高スループットプロセッサの例は、データ確度に対する速度(すなわち、プロセッサ性能)、もしくは電力に対するプロセッサ性能、または再構成可能RAPCの入力/出力に対するカスタムの入力/出力の、トレードオフを図り得る。RAPCアーキテクチャが再構成可能であってよいので、構成は適用例に依存する。アルゴリズム処理関数は、高スループットプロセッサの中のRAPCおよびデータルーティングステートマシン(DTSM:Data Transfer State Machine)の中にLUTをロードすることによって構成され得る。アルゴリズムは、AMPCによってビットレベルで構成され得る。たとえば、a+b=cは、ビットa+ビットb、ビットキャリーイン、等しいビット(equals bit)c、ビットキャリーアウトとして実装され得る。したがって、RAPCによって利用されるメモリの量は、従来型プロセッサおよび従来型ルックアップテーブルアーキテクチャと比較して著しく限定される。この例に対する8ビットRAPCは、8つの8×2ビットのメモリロケーション、すなわち、合計で128ビットしか必要としない。8ビットRAPCに対する単一の従来型LUTは、8ビットのa、8ビットのb、およびキャリーインを必要とすることになり、比較において、それは17ビットアドレス×24ビットデータワード、すなわち、合計で3,145,728ビットに等しい。従来型LUTの全メモリビットサイズは、専用の構成バス上にRAPC LUTのすべてを構成するデータルーティングステートマシン(DTSM)に対して提供される例よりも、指数関数的に大きい。再構成可能なDTSMはRAPCプロセッサと類似であり、たとえば、LUTによって関数的に構成される。DTSMは、RAPCを構成するとともにRAPC、記憶メモリ、および外部データインターフェースの間のデータルーティングを管理するために、使用され得る。データルーティングおよびデータ処理の構成可能なマトリックスは、再構成可能な処理性能を改善し、コードフェッチおよび実行オーバーヘッドをなくし、かつ"C"などのもっとハイレベルのプログラミング言語から、数理、論理、分岐などのアルゴリズムのためにDTSMおよびRAPC LUTの中で直接構成可能な関数に実装可能な、DTSMおよびRAPC高スループットプロセッサを備えてよい。RAPCおよびDTSMは、パイプラインであり初期入力レイテンシ期間の後にすべてのクロックにおいてデータをストリーミングし得る、マトリックス構造を備える。ASICデバイスはいつでも再構成されてよく、高スループットプロセッサは、通常実行される様々なアプリケーションまたはアルゴリズムに対して、結果をメモリレジスタまたはキャッシュの中に記憶し得る。たとえば、訂正および学習のためのアルゴリズムは、必要に応じて、反復される使用のために記憶され得る。図示の例では、RAPCプロセッサの中のLUTは、外部のプロセッサまたはデバイスからいつでも再構成されてよく、複数のASICまたはFPGAを占有し得る自己修正アルゴリズムを実施する。たとえば、RAPC間のインターコネクトを変更することによって、ニューラルネットワークの特定のノード上でアルゴリズムの最適化を用いて高スループットプロセッサをインターコネクトすることによって、ニューラルネットワークが容易に規定され得る。
【0098】
たとえば、
図11は、4つのRAPC1101、1102、1103、1104を備える再構成可能タイルを概略的に示し、どのようにRAPCの中のデータがタイルとして構成され得るのかを示す。タイリング設計により、任意の通信チャネルまたはバスを任意の他の論理モジュールと共有する必要なく、RAPC1112の間およびタイル1111の間のポイントツーポイント接続性が可能になる。タイリング設計はまた、物理接続の局所性、ならびに物理接続ごとの全帯域幅に起因して、コンパクトさをもたらし得る。タイリングは、たとえば、AMPCなどのコンパイラによるタイリング設計および構成に応じて、線形の処理スケーラビリティを与えるために静的なスイッチング接続性または中継RAPCを使用し得る。
図12は、各RAPCがRAPCスイッチによって他のRAPCに再構成可能に接続された、タイルアーキテクチャの中の別の複数のRAPC U1~U16の間の信号インターコネクトを概略的に示す。
図14は、
図12に示すRAPC U1~U16のうちの1つを示す。この例では、
図14におけるRAPCは、PSPアーキテクチャなどのタイル型アーキテクチャ内の他のRAPCの間のインターコネクトをセットアップするために、スイッチング回路を用いて結合される。
【0099】
図13において、タイルアーキテクチャを有するRAPC高スループットプロセッサは、高データスループット適用例において実装される。RAPC高スループットプロセッサ内に複数のRAPCを構成するように、ホストCPUが40本の信号チャネルによって結合されている。高スループットプロセッサは、入力データおよび/または信号に結合されており、デバイスは、出力データおよび/または信号を利用する。たとえば、メモリデバイスは、RAPC高スループットプロセッサに結合されており、AMPCコンパイラ、および1つまたは複数のデータ処理アプリケーションに対するRAPCの構成のための記憶された他のアルゴリズムを備えてよい。
図13は、たとえば、任意の所望の幅に集約されている複数の8ビットデータチャネルの中に組み込まれたASICであってよい。各データチャネルは、10本のピン、すなわち、8本のデータピン、CLKピン、およびデータ/制御ピンを備えてよい。データフロー構造およびプロセスは、乗算器への入力値の配信中の初期データ入力遅延のための単位遅延スタックを実装する入力段を備えてよい。係数は、たとえば、RAPCの中に記憶され得る。
【0100】
たとえば、高スループットシステムはデータ処理のために使用され得る。この例では、単位遅延はクロックサイクルである。初期入力遅延の後、クロックサイクルごとに結果が提供される。乗算演算は、ビット幅が増えるにつれて2次的に大きくなる演算である。64ビット入力データを使用する極端な例として、整数64ビット乗算の各々は、128ビットの結果を生み出す1024×8ビットのRAPCのマトリックスを必要とする。加算はすべて、128ビットのストリーミング出力を生み出す128ビットの加算である。この128ビットの出力は、所望される場合、シフト動作を使用して64ビットに正規化され得る。256サンプルの有限インパルス応答(FIR:finite impulse response)フィルタの場合、乗算器の個数は256個である。乗算のために、必要とされる8ビットRAPCの総数は、256*1024=262,144個の8ビットRAPCであり、加算器として256×16=4,096個の8ビットRAPCが必要とされる。単位遅延入力配信スタックは、256×8=2,048個の8ビットRAPCである。係数はRAPCの中に記憶されてよく、64ビット乗算に対して256×8=2,048個の8ビットRAPCが必要とされる。任意のダイサイズの中で利用可能なRAPCの個数を、必要とされるRAPCの個数で除算することによって、各ダイの中に何個のFIRフィルタが収まるのかを決定することができる。この例では、初期データをロードする初期遅延の後、FIRはハードリアルタイムで動作し、結果としてすべての1クロックサイクルに対して1つの出力が生じる。最初のデータが出力されると、入力データクロック周波数は、伝搬遅延を伴わずに出力データ周波数に等しい。初期データが高スループットプロセッサの中に入力されながら、4GHzの入力信号は、いくつかの少数のクロックサイクルのレイテンシの後に4GHzの出力信号を計算および生成する。出力データは、データ圧縮などの必要なしにリアルタイムでストリーミングする。データ幅およびチップサイズに応じて、複数のFIRフィルタが単一のチップ上で同時に動作させられてよい。所望される場合、各FIRフィルタは、別個のクロックに接続されてよく、選択されたクロック周波数で動作し得る。下の表は、いかなる外部の中央処理ユニットからも独立し伝搬遅延のオーバーヘッドなしにデータを処理するタイルアーキテクチャにおいて、RAPCを使用する高スループットプロセッサの利点を要約する。FIRおよびIIRのデジタル信号処理は、いかなる他のアーキテクチャを用いても可能ではない周波数で、リアルタイムで行われ得るか、または場合によっては再構成可能であり得る。以前から知られている従来のCPUもFPGAも、このマイルストーンを達成していない。加えて、乗算器が完全精度であるので、精度が失われることはない。リアルタイムで信号を処理するために、圧縮またはデータ損失は必要でない。一例では、動的なランタイム再構成とは、いつでも任意のタイプのフィルタを作成するように係数およびデータフロー構造が変更され得ることを意味する。一例では、FIRまたはIIRフィルタは適応型であり、性能は時間とともに改善する。典型的なASICは、ASICのアーキテクチャの中に構築された固定されたアルゴリズムを使用するが、RAPCを使用する高スループットプロセッサは必要に応じて変更されてよい。
【0101】
【0102】
【0103】
たとえば、RAPCのタイリングは、タイルエリアの中の任意およびすべてのバッファの使用をなくし、そのことは、RAPCにとって利用可能なもっと大きい空間を作る。直接接続されるRAPCタイル間のバッファの除去は、タイルからのすべてのクロックサイクルにおいて結果を保証し、タイルは、複数のRAPCを組み合わせることによって任意の所望の精度のデータを提供するようにサイズ決定されてよい。データ入力のための開始レイテンシの後、RAPCはいかなるハードウェア伝搬遅延もなくす。「バブル」はない。代わりに、タイル型RAPCは完全な同時性で動作する。
【0104】
たとえば、タイルアーキテクチャは、最終結果に対して望まれる精度に関わらず、単一のクロックサイクルの中でストリーミング乗算結果を提供する乗算器を構成するために使用され得る。精度がもっと高い結果は、従来型プロセッサにおいて達成するにはもっと長い処理時間および多くのクロックサイクルがかかると従来より考えられているので、この結果は驚くべきであるとともに予想外である。代わりに、この例は、プロセッサが結果を出力すると、クロックサイクル当り1つの乗算結果を保証し、後続の乗算演算および加算演算のためのビットをルーティングするという動作は、これらの例に固有である。
【0105】
一例では、ピンレベルのアプリケーションデータインターフェースにより、複数のASICの間のフレキシブルな接続性が可能になり、ASICの各々は複数のRAPCを備える。たとえば、チャネルAPIシステムにより、複数のRAPCを備える任意の数のASICが、ASICハードウェアの各々を再構成することなく、基板設計者によって望まれる任意のトポロジーで接続されることが可能になる。
【0106】
一例では、電力はクロックルーティングによって管理される。たとえば、各RAPCは結果と一緒に入力クロックをルーティングする。入力クロックと得られたデータとの組合せが、電力の管理を可能にし、全体のチップにわたってクロックツリーを作成するためのいかなる要件もなくす。1つの利点は、たとえば、チップの設計において追加のオーバーヘッドを持ち込むことなく、異なるストリームが異なるクロック周波数を使用してよいということである。
【0107】
一例では、RAPCは、後で使用できるように定数および変数を記憶するように構成される。定数とローカル変数の両方を必要とするプログラムでは、各RAPCは、値を記憶するために専用のメモリを用いて定数および変数を記憶するように構成され得る。図は、少なくとも1つの定数および少なくとも1つの変数のローカルな専用の記憶のために設計された、RAPCの簡単な概略図を示す。
【0108】
一例では、データは、マークされるとともにメタデータを使用して追跡される。複数のRAPCを備えるプロセッサを通じてストリーミングされるデータのボリュームおよびレートは、知られているいかなるプロセッサも凌駕する。「ストリームの冒頭」、「ストリームの末尾」、「パリティ」、「0による除算」などのメタデータを使用することによって、例外が、リアルタイムで追跡されてよく、クロックサイクルごとに特定の結果出力に関連付けられてよい。すでにデータ精度が無制限であるので、このことはアーキテクチャ上の変更を必要としない。この例においてこの追加の例外追跡を行うために、データパスとともに動作しデータパスと一緒に追従するビットのセットが構成され得る。メタデータに専用のビットの数は、必要とされる精度のレベルおよび/またはプロセッサのターゲットアプリケーションによって決定され得る。たとえば、RAPCプロセッサ構成におけるデータは、実世界を反映するいかなる任意の幅のものであってもよい。たとえば、データは、スループットを最大にするために、その完全な幅でシステムの中にクロッキングされてよい。一例では、データは単一のビットであってよい。別の例では、データは4096ビットであってよい(または、これはRAPCのアーキテクチャによって制限されないので、4096ビットよりも大きくてさえよい)。とにかく、データはクロック当り1ビットで配送されてよく、選択される幅がRAPC ASICなどの単一のチップ上のピンアウトの幅よりも広い場合、データは、追加のオーバーヘッドを持ち込むことなく並列の複数のチップに広がり得る。
【0109】
一例では、ビットストリームは、暗号化されるとともにルーティング可能である。たとえば、複数のRAPCを構成するために使用されるビットストリームが暗号化され得る。ビットストリームを暗号化することは、リバースエンジニアリングまたはビットストリームの傍受を防止する。たとえば、ビットストリームは、コンパイル時間中にルーティングデータをビットストリームとともに組み込んでよい。たとえば、RAPC ASIC内の、かつ複数のRAPC ASICにわたる、ビットストリームデータの内部的な復号およびルーティングは、各ASIC内で符号化されたサポート論理によって処理され得る。
【0110】
一例では、キャリーチェーン時間共有多重化がRAPC ASICに適用される。代替の解決策では、キャリーチェーン時間共有多重化は、フォンノイマンアーキテクチャを有するチップに適用される。
【0111】
一例では、複数のRAPCがスマートバッファとして使用され得る。各RAPCは、前方に+2のパススルー出力を有してよく、したがって、チップの1つのエリアの中の複数のRAPCが、時間領域共有動作の目的でデータを適切な位置に移動させるために、他のRAPCと一緒に使用され得る。このことは、RAPC ASIC上に別個のスマートバッファを含める必要をなくし、任意のチップ上により多くのRAPCを含めることを可能にさせ、無制限のスケーラビリティをもたらす。高スループットプロセッサの利点のうちの1つは、データの確度が特定のビット数で維持され得ることである。64ビットRAPCプロセッサは64ビットの確度を有する。当技術分野で知られている従来のプロセッサおよびFPGAでは、加算のために使用されるキャリーチェーンなどの論理チェーンがデータ精度を制限する。長い計算の最終結果における有効なビットの数は、計算中に減少することがある。この理由で、浮動小数点ハードウェアが、しばしば、計算の確度および精度を維持するために使用される。長いテーブルが導出する計算でさえ最終結果の精度を低減することがあり、それは6~12ビットに低減されることがある。したがって、これらの知られているプロセッサは、可能な伝搬エラーに対して結果をダブルチェックすることが必要とされる。
【0112】
一例では、以下に示すようなBITFILEは、RAPC ASICの全体のシステムを構成するための暗号化された情報を含む。BITFILEは、セクションに分割されてよい。各セクションは、たとえば、現在のデバイスによって使用されることを意図するか、または特定のポート上で別のデバイスへ再送信されることを意図するかのいずれかである、構成バイトの不明瞭なシーケンスを含むことがある。各チップは、BITFILEストリームの、その特定のチップに属する部分のみを処理してよく、指定されたポートを介して任意の他のセクションを再送信する。一例では、PORTNUM、DEVICENUM、FIRST、NEXTなどのフィールドがデバイスによって処理される。別のフィールドCONFIGURATIONは、このセクションが現在のデバイスを対象とする場合のみデバイスによって処理される。ビットファイルのフォーマットは、たとえば、使用事例に関わらず汎用となるように規定されてよく、この1つのファイルが、トポロジーに関わらずシステムの中のすべてのデバイス用のビットストリームを含んでよく、たとえば、これらが利用可能になるとき、このフォーマットを新たなソフトウェアリリースと前方互換にさせる。ビットの中にシリアル化されるとき、最上位ビットが最初に送信されるべきである。マルチバイトフィールドはビッグエンディアンフォーマットをなしてよく、ここで、最初のバイトが最上位バイトである。文字列フィールドは、たとえば、NULL(0)で終端されてよく、末尾においてNULLを使用してパディングされてよい。たとえば、二重線の下のすべてのものが暗号化されてよい。
【0113】
実施例1。たとえば、いかなる形でも限定的でなく、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を選択し、フォンノイマンアーキテクチャ用に書かれたソースコードから非フォンノイマンプロセッサを生成する。
【0114】
任意の従来型フォンノイマンプロセッサと比較したとき、特にチップに対していかなる特別な冷却要件もなくこのことが取得されることが理解されると、332ギガフロップスは相当なものである(ただし、ギガフロップスは毎秒10億回の浮動小数点演算として定義される)。比較において、従来型フォンノイマン処理システムは、数学演算、論理演算、および分岐動作ごとに別個のフェッチおよび実行サイクルを必要とするが、RAPCは、数学演算、論理演算、および分岐動作ごとに別個のフェッチおよび実行サイクルを必要としない。
【0115】
一例では、計算は、741MHzのクロック速度を有するXilinx(登録商標) Virtex ZU13チップ(ただし、XilinxおよびVirtexはXilinx, Inc.の商標である)が236,250個のRAPCとともに構成することができて、175,000ギガフロップスよりも速く実行する能力をこのチップに与えることを示し、そのことは、当業者にとって予想外であるとともに驚くべき、素晴らしい結果である。RAPCが、実行される数学演算、論理演算、および分岐動作ごとに別個のフェッチおよび実行サイクルを必要としないので、この結果が可能である。RAPCアーキテクチャは伝搬遅延をなくす。汎用コンピュータプロセッサのフォンノイマンアーキテクチャによって引き起こされる、このおよび他の問題は、RAPCおよびICATアーキテクチャを使用して解決される。フォンノイマンアーキテクチャを有するプロセッサ(すなわち、すべての知られている現代の汎用コンピュータプロセッサ)用に書かれたプログラムは、ICATアーキテクチャにおいて動作するように書き直される必要がなく、当業者および本技術分野における専門家にとってさえも極めて驚くべき予想外の結果である。
【0116】
一例では、8つの入力ビット、すなわち、オペランドA入力データの2つの入力ビット、オペランドB入力データの2つの入力ビット、キャリーインビット、等しい入力ビット(equal in bit)、より大きい入力ビット(greater in bit)、および合計>定数値ビットが、RAPCの中に入力されてよい。これらのビットは、無制限の精度を得るために、LUTデバイスの間のアルゴリズムチェーンを実装するために提供される。AMPCコンパイラは、ハイレベルプログラミング言語ソースコードを調べ、動作が実行されるたびにLUTテーブルを選択する。RAPCは、コードのセクションの中で動作が実行されるたびに選択およびインターコネクトされる。互いに独立しているコードセクションが識別され、これらはAMPCによって並列プロセスの中で動作するようにセットアップされる。一例では、十分なRAPCが利用可能である場合、追加のプログラムが同時に並行して動作させられてよい。利用可能なICATリソースに複数のプログラムを割り当てるようにAMPCが構成され得るので、複数のアプリケーションプログラムを並行して動作させるためにマスタ制御プログラムは必要とされない。他のソースコードプロセスからの結果に依存するソースコードプロセスが、必要とされる結果を生成するプロセスに、自動的にAMPCによって直接接続されるので、ICATアーキテクチャは簡略化される。一例では、RAPCの中で使用されるLUTは、同じサイズとなるように選択されてよく、任意のハイレベル標準プログラミング言語関数用に構成されてよい。たとえば、AMPCは、選択されたロケーションにおけるRAPCの各々に対してLUTデータのテーブルを出力してよい。たとえば、LUTデータは、AMPCによって再構成されるまでICATアーキテクチャの動作中にメモリの中にとどまってよいので、LUTデータは、組込みプロセッサによって、または外部のプロセッサから外部インターフェースを使用して、メモリの中にロードされ得る。一例では、AMPCは、ASICデバイスとして実装されたICATアーキテクチャ用のプログラムをロードする。代替として、FPGAは暗号化されたHDLファイルを使用して構成され得る。
【0117】
平文でのBITFILE CONFIGURATIONフィールドフォーマット
構成データは暗号化される。それはデバイスが受信時に解読するためのものである。この構成は、サブセクションに分割され得るバイトのストリームである。これらのサブセクションは順次に実行される。任意の非RAPC論理の随意の構成を配置するために、事前構成が使用され得る。このサブセクションは、デバイス論理のための電力制御、ポート構成管理、ローカルメモリ初期化などを含むことができる。RAPC論理の構成は、たとえば、16バイトのLUTテーブルエントリという大きいアレイであってよい。RAPCごとに1つのLUTテーブルがあってよい。任意の非RAPC論理の随意の事後構成が、RAPC論理が初期化される後まで初期化され得ない任意の論理の構成を完了させ得る。このサブセクションに対する別の使用は、たとえば、この特定のデバイスが構成されていることをシステムの残りに通知するためのものであってよい。
【0118】
BITFILEロードアルゴリズム
ビットファイルは、基板設計においてOEMが実装している、いかなる任意のトポロジーをロードするためにも使用され得る。たとえば、N個のポートを有するデバイスに電源が投入されると、すべてのポートは入力ポートにデフォルト設定され、ビットファイルロード、またはストリームリセットなどのいくつかの他のコマンドを求めてリッスンしている。電源が投入される際の通常の使用とは、たとえば、システムの中でいくつかの任意のポートを介してビットファイルをロードすることである。
【0119】
【0120】
【符号の説明】
【0121】
100 システムオンチップ(SOC)デバイス
101 メイン処理システム
102 並列処理リソース
103~106 制御レジスタ
107 数理プロセッサ
108 論理プロセッサ
109 マトリックスルーティング
110 デジタル信号プロセッサ(DSP)
111 論理決定プロセッサ(LDP)
112 出力デバイス
113 デバイス