(57)【要約】  ＦＰＧＡ  ＰａａＳは、企業開発者が、その市場コンポーネント、アプリケーション、およびストリームサービスを使用してアプリケーションを容易に構築することを可能にする。ＦＰＧＡ  ＰａａＳは、その機能をそのＦＰＧＡ  ＰａａＳ企業開発者に提供する。
2019537784.tif 000002
【特許請求の範囲】
【請求項１】
複数のコードブロックから生成される複数の回路へのデータの第１のデジタルビットストリームをプロセッサによって受信する段階と、
前記複数の回路を介してデータの前記第１のデジタルビットストリームを処理する段階と並行して、前記第１のデジタルビットストリームを消費する前記複数の回路のうちの少なくとも１つの実行を示す使用値を生成する段階と、
前記プロセッサによって、前記１つまたは複数の使用値を示す第２のデジタルビットストリームを送信する段階と
を備える、コンピュータ実施方法。
【請求項２】
前記プロセッサは、ＦＰＧＡである、請求項１に記載のコンピュータ実施方法。
【請求項３】
前記第１のデジタルビットストリームを前記複数の回路で処理する前記段階、および１つまたは複数の使用値を生成する前記段階は、決定論的に行われる、請求項１または２に記載のコンピュータ実施方法。
【請求項４】
複数の使用値を総計する段階をさらに備える、請求項１から３の何れか一項に記載のコンピュータ実施方法。
【請求項５】
使用値を生成する前記段階は、前記プロセッサ上の１つまたは複数のメータリング回路によって行われる、請求項１から４の何れか一項に記載のコンピュータ実施方法。
【請求項６】
前記使用値は、時間間隔を示す、請求項１から５の何れか一項に記載のコンピュータ実施方法。
【請求項７】
前記使用値は、前記複数の回路のうちの１つが実行された複数の回数を示す、請求項１から６の何れか一項に記載のコンピュータ実施方法。
【請求項８】
前記使用値は、前記複数の回路のうちの１つまたは複数の実行の総計を示す、請求項１から７の何れか一項に記載のコンピュータ実施方法。
【発明の詳細な説明】
【技術分野】
【０００１】
高性能コンピューティングソリューションは、アプリケーションをスピード、効率、信頼性を伴って動作させるために、企業規模のアプリケーションで使用されている。例えば、Ｇｏｏｇｌｅはテンソルプロセッシングユニット（ＴＰＵ）を提供しており、これは、機械学習アプリケーションに特に適合した、カスタムビルトの、特定用途向け集積回路である。ＴＰＵ（または複数のＴＰＵ）は、データセンタ内の機械学習負荷についての特定の処理タスクをアクセラレートするために他の汎用プロセッサと共に使用される。リコンフィギャラブルコンピューティングは、いくつかのフィールドプログラマブルゲートアレイ（ＦＰＧＡ）を含むネットワークなどの高速コンピューティングファブリックを利用して情報の高性能な処理を提供するための別の方法論である。上記で特定された手法と同様に、現在の１つのアーキテクチャは、アクセラレータとして汎用プロセッサおよびリコンフィギャラブルなハードウェアプロセッサのアレイを使用する。Ｍｉｃｒｏｓｏｆｔ社による現在の１つの手法は、当初、同社のＢｉｎｇ検索アルゴリズムを強化するＣａｔａｐｕｌｔプロジェクトとして始まった。汎用プロセッサをＦＰＧＡと共に使用することにより、Ｍｉｃｒｏｓｏｆｔ社はアルゴリズムの処理に関連して４０倍の性能向上と、２倍のシステム全体の性能向上を報告している。Ｍｉｃｒｏｓｏｆｔ社はこのＦＰＧＡアクセラレータの作業を前進させ、同社のＯｆｆｉｃｅ３６５（登録商標）内および同社のＡｚｕｒｅ（登録商標）クラウドプラットフォームにわたってネイティブに人工知能を可能にした。同様に、ＩＢＭ社とＸｉｌｉｎｘ社とは、ＦＰＧＡアクセラレータのデータセンタアーキテクチャでの使用を可能にするためのコラボレーションを発表した。
【背景技術】
【０００２】
上記で特定された現在の手法では、汎用プロセッサは、画像処理またはパターンマッチングのような特定のタスクを実行するようにプログラムされている、アクセラレータプロセッサの動作をコントロールする。特定のタスクが完了した時点で、次いで、汎用プロセッサは、後続のプロセスが完了できるようにさらなるタスクを調整する。したがって、処理タスクが特別にコンフィギュレーションされたハードウェアを用いて行われるので、速度に関するいくつかの利点が得られる。しかしながら、汎用プロセッサを使用しての、このシステムに必要なプロセッサ調整およびデータ移動は、オペレーティングシステムが、意図されたコード実行と悪意のあるコードとを区別することが本質的にできないことを考慮すると、汎用プロセッサ上でのこのシステムのオペレーティングシステムのブラインド実行に起因する遅延、レイテンシ、および固有のセキュリティ脆弱性をもたらす。他のコンフィギュレーションでは、カスタマイズされたプロセッサは、アクセラレータとして機能するか、またはコプロセッサと同様に動作するようにコンフィギュレーションされ、やはり汎用プロセッサおよび本質的にセキュアでないオペレーティングシステムと共に動作する。
【０００３】
歴代のデータ漏えいとなっているもので最新のものはＥｑｕｉｆａｘ社でのもので、１億４５００万を超える米国の消費者の金融データおよび主として不変の個人データが危険にさらされた。コンピュータシステムがサイバ攻撃に抵抗する能力を向上させる要望が高まっている一方で、政府の人事記録管理、小売取引処理およびソーシャルメディアを含む多くの分野で、こうした人目をひく攻撃が多い。これまで以上に複雑なパスワードおよびバイオメトリックアクセスなどの基本的なセキュリティ機能を向上させるために多くの試みがなされてきたが、これらは典型的なマイクロプロセッサベースのコンピュータシステムの攻撃面を著しく減少させるにはほとんど役立っていない。こうした攻撃の大部分は、基本となるソフトウェアオペレーティングシステム（ＯＳ）の機能またはホールを悪用し、マイクロプロセッサに望ましくない機能を実行させる。その結果、ＨＩＰＰ  Ａ、ＰＣＩまたはＦＥＤＲＡＭＰなどのほとんどのデータセンタコンプライアンス認証機関は、これらのデータセンタが、公開されているＯＳセキュリティ脆弱性のリストを毎日レビューし、特定された脆弱性に対するパッチを実施することを求めている。これらの努力は、ハッカより一歩先を行くことを試みているが、さらなる脆弱性が検出され続けている。
【０００４】
上述したセキュリティ上の課題に加えて、汎用プロセッサベースのコンピュータシステムはまた、アプリケーションを同時に実行すること、およびアプリケーションの連続的なモニタリングを実行することにおいて本質的に非効率的でもある。コンピュータアプリケーションでは、アプリケーションの実行中に発生し得るさまざまなイベントをモニタリングできることが多くの場合有益である。これらのイベントは、アプリケーションの性能またはシステム全体の健全性に関する洞察をユーザに提供し得る。残念ながら、今日の命令フローマイクロプロセッサベースのコンピュータシステムにおけるこのようなモニタリングイベントには、代償が伴う。所望のモニタリングをアプリケーションプログラムに追加するために、開発者は追加のソフトウェアステップを追加しなければならない。次いで、これらのステップはマイクロプロセッサによって実行されなければならず、したがって処理クロックサイクルを消費し、また元のアプリケーションの命令実行を変更もする。アプリケーションによって数百万のこれらのイベントが生成されることも珍しくないであろうことから、全体のアプリケーション性能が低下することを理解することが容易となる。その結果、命令プロセッサ内におけるイベントの一切のモニタリングはそのアプリケーション性能を低下させ、そのような所望のレベルでイベントをモニタリングすることは非現実的となる。
【発明の概要】
【０００５】
この発明の概要は、詳細な説明において以下でさらに説明する概念から選択したものを単純化した形で紹介するために提供されている。この発明の概要は、特許請求される主題事項の主要な機能または本質的な機能を特定することを意図されておらず、特許請求される主題事項の範囲を限定するために使用されることも意図されていない。
【０００６】
主な計算が１つまたは複数のリコンフィギャラブルプロセッサで実行される企業のスーパー計算プラットフォーム上で企業アプリケーションを遠隔で構築、操作、モニタリングおよび更新するためにいくつかの異なる機能を利用するＦＰＧＡプラットフォームアズアサービス（ＰａａＳ）が開示される。一実施形態では、計算プラットフォーム全体が、プロセッサに命令するオペレーティングシステムを使用せずに実行される。市場のメータリングされる処理エレメントを利用する企業アプリケーションを開発および動作させる機会は、トラステッドＦＰＧＡ  ＰａａＳを通じて可能になる。したがって、企業開発者は、さまざまな処理エレメントを１つのアプリケーションにアセンブルすることによってアプリケーションを構築することができる。ＰａａＳはまた、ＦＰＧＡ  ＰａａＳ企業開発者にその機能を提供する使いやすい統合開発環境も提供する。
【図面の簡単な説明】
【０００７】
【図１】ＦＰＧＡプラットフォームアズアサービス（ＰａａＳ）のブロック図である。
【０００８】
【図２】複数のノードを使用してメッセージを処理するＦＰＧＡアプリケーションのブロック図である。
【０００９】
【図３Ａ】ＦＰＧＡ計算ノード上のＦＰＧＡアプリケーションのブロック図である。
【００１０】
【図３Ｂ】コントロールＦＰＧＡと接続されたＦＰＧＡ計算ノード上のＦＰＧＡアプリケーションの代替的な実施形態のブロック図である。
【００１１】
【図４Ａ】ＦＰＧＡコンポーネントのブロック図である。
【００１２】
【図４Ｂ】ＦＰＧＡソースコードファイルのブロック図である。
【００１３】
【図５Ａ】直列に配置された複数のＦＰＧＡコンポーネントを有するＦＰＧＡレイアウトのブロック図である。
【００１４】
【図５Ｂ】並列に配置された複数のＦＰＧＡコンポーネントを有するＦＰＧＡレイアウトのブロック図である。
【００１５】
【図５Ｃ】通常のマイクロプロセッサの命令実行のブロック図である。
【００１６】
【図５Ｄ】イベントモニタリングを伴うマイクロプロセッサ実行のブロック図である。
【００１７】
【図５Ｅ】イベントモニタリングを伴うＦＰＧＡベースのプロセッサ実行時間のブロック図である。
【００１８】
【図６】ＦＰＧＡアプリケーション開発モジュールのブロック図である。
【００１９】
【図７】ＦＰＧＡコンパイルモジュールのブロック図である。
【００２０】
【図８】トラステッドデプロイメントモジュールのブロック図である。
【００２１】
【図９】複数の変更可能なプロトコル機能を使用するＦＰＧＡアプリケーション内のノード間通信のブロック図である。
【００２２】
【図１０】例示的ＦＰＧＡシステムのブロック図である。
【００２３】
【図１１】ＦＰＧＡシステムで使用するためのＩ／Ｏノードのブロック図である。
【００２４】
【図１２】ＦＰＧＡシステムで使用するためのリコンフィギャラブル計算ノードのブロック図である。
【００２５】
【図１３】ＦＰＧＡシステムで使用するためのコモンメモリノードのブロック図である。
【００２６】
【図１４】２つの４ノードシャーシを使用する例示的なＦＰＧＡアプリケーションのブロック図である。
【００２７】
【図１５】１つの３２ノードシャーシを使用する例示的なＦＰＧＡアプリケーションのブロック図である。
【００２８】
【図１６Ａ】ＦＰＧＡアプリケーション内で利用することができるプロトコルの概略ブロック図である。
【図１６Ｂ】ＦＰＧＡアプリケーション内で利用することができるプロトコルの概略ブロック図である。
【図１６Ｃ】ＦＰＧＡアプリケーション内で利用することができるプロトコルの概略ブロック図である。
【図１６Ｄ】ＦＰＧＡアプリケーション内で利用することができるプロトコルの概略ブロック図である。
【図１６Ｅ】ＦＰＧＡアプリケーション内で利用することができるプロトコルの概略ブロック図である。
【発明を実施するための形態】
【００２９】
ＦＰＧＡは、適切にコンフィギュレーションされた時点で、比較的高い柔軟性および処理速度を提供する。とはいえ、この処理を実行するためには、これらのデバイスのコンフィギュレーションを常に調整しなければならない。現在、ＦＰＧＡ上での回路開発のためのソースコードへの開発者アクセスは、開発者数ごとまたはアプリケーションごとに支払われる、オープンソースまたはより大きな前払いのライセンス費用のいずれかに限られている。同時に、企業アプリケーション開発者は、アプリケーションの製品化までの時間を短縮するため、および彼らが構築および保守しなければならないコードの総量を減少させるために、耐久性と性能の高いできるだけ多くのコンポーネントを利用しアプリケーションに組み込もうとする。ＦＰＧＡプロセッサはしばらく前から存在してきたが、開発コストが大きいことからＦＰＧＡは特殊コンピューティングまたは組み込みコンピューティングデバイスで一般的に使用されてきた。
【００３０】
図１は、ＦＰＧＡアプリケーション１０２の開発、コンパイルおよびデプロイメントに基づく対価を容易にすることができる、市場１０４内でデプロイされたＦＰＧＡアプリケーション１０２を構築およびデプロイするためのいくつかのモジュールを含むＦＰＧＡ  ＰａａＳ環境１００の概略図である。ＦＰＧＡアプリケーション１０２は、以下で論じるように開発者によって使用されるさまざまなツールを含むことができる適切なアプリケーション開発モジュール１０６を使用して構築される。開発モジュール１０６を使用してソースコードをアセンブルした後、ソースコードをコンパイルするためにＦＰＧＡコンパイルモジュール１０８を使用することができる。ＦＰＧＡアプリケーション１０２は、複数のＦＰＧＡ計算ノード、複数のメモリノード、ＦＰＧＡスイッチ、および複数のＩ／Ｏノードが、現在のシステムと比較して改善されたセキュリティおよび性能を提供するために企業のスーパー計算プラットフォーム内で互いに協調するように、企業アプリケーション用にスケーリングすることができる。一実施形態では、ＦＰＧＡアプリケーション１０２全体が、オペレーティングシステムを使用せずにコンピューティング、記憶、スイッチング、およびネットワーキングを実行する。
【００３１】
一実施形態では、デプロイメントの準備が整うと、ＦＰＧＡコンパイルモジュール１０８は、１つまたは複数のビットストリーム、およびＦＰＧＡアプリケーション１０２内のストリーム間の接続を指定するストリーム接続情報を含む、複数コンポーネントのアプリケーションパッケージを生成する。トラステッドデプロイメントモジュール１１０によってセキュアなデプロイメントを生成するために、アプリケーションパッケージを保護および暗号化することができる。トラステッドデプロイメントモジュール１１０は、開発モジュール１０６内で指定されたように、ＦＰＧＡアプリケーション１０２を１つまたは複数のサーバにデプロイするためにアプリケーションパッケージを使用する。一実施形態では、トラステッドデプロイメントモジュール１１０は、ＦＰＧＡアプリケーション１０２と通信、およびＦＰＧＡアプリケーション１０２をデプロイするために、１つまたは複数の管理ＦＰＧＡを利用することができる。１つまたは複数のサーバは、所望に応じて、単一のデータセンタ内に存在するか、または複数のデータセンタにわたってデプロイされることができる。
【００３２】
ＦＰＧＡアプリケーション１０２は、オペレーティングシステムなしでＦＰＧＡプロセッサを使用して実装することができる。それに応じて、ＦＰＧＡアプリケーション１０２についていかなるサイバ攻撃面も大幅に減少または排除することができる。その目的のために、開発者にとってなじみのある標準的な高級言語またはグラフィカルユーザインタフェース（ＧＵＩ）ベースのプログラミング技術を使用するコンパイラを使用することができる。
【００３３】
一実施形態では、ＦＰＧＡアプリケーション１０２はホストマイクロプロセッサを必要とせず、むしろＦＰＧＡを利用する。対照的に、Ｍｉｃｒｏｓｏｆｔ社のＣａｔａｐｕｌｔボードまたはＡｌｔｅｒａ社もしくはＸｉｌｉｎｘ社によって構築されたさまざまなカードなどの現在のＦＰＧＡベースの処理エレメントは、何らかの形でマイクロプロセッサに対するアクセラレータとして扱われ、従来の攻撃に対してシステムを依然として脆弱なままにしている。ＦＰＧＡアプリケーション１０２においてＦＰＧＡベースの計算エレメントを排他的に使用することは、ＦＰＧＡプロセッサ内のデータフロー回路内にインスタンス化されたコードのみを実行する。オペレーティングシステムのコード内に悪用される機能があるマイクロプロセッサとは対照的に、攻撃者が悪用することができる機能は、したがって減少または排除される。
【００３４】
ＦＰＧＡアプリケーション１０２を開発するのに適したコンパイラは、Ｃなどの標準の高級言語を受け入れ、その高級言語を、ＦＰＧＡアプリケーション１０２のいずれもマイクロプロセッサ上に常駐することを必要とせずに１つまたは複数のＦＰＧＡプロセッサで実装できるデータフローグラフに変換することができる。コンパイラへの高級言語入力も、ＧＵＩを使用して生成することができる。Ｉｍｐｕｌｓｅ  Ａｃｃｅｌｅｒａｔｅｄ  Ｔｅｃｈｎｏｌｏｇｉｅｓ社によって製造されているものなど、今日では多くの「Ｃ  ｔｏ  Ｇａｔｅｓ」タイプのＦＰＧＡコンパイラが存在するが、これらのコンパイラは、ＦＰＧＡプロセッサのみを使用することによっても、またはＦＰＧＡプロセッサの集まりだけを使用することによっても、ソフトウェアアプリケーション全体を実装することを可能にしない。むしろ、これらのアプリケーションは、ＦＰＧＡをコンフィギュレーションし、ＦＰＧＡがどのデータを受信するかを決定し、アプリケーションインタフェース管理を実行するために、マイクロプロセッサホストを使用する。計算用のＦＰＧＡプロセッサのみの使用と、ＦＰＧＡプロセッサ用のスタンドアロンアプリケーションを生成することができるコンパイラとを組み合わせることによって、アプリケーションについての攻撃面を減少させることができる。
【００３５】
本明細書で使用されるように、ＦＰＧＡアプリケーションは、データ処理の大部分または全部がＦＰＧＡプロセッサなどのリコンフィギャラブルハードウェア上で実行されるデータ処理を実行する任意のコンピュータプログラムを含む。一実施形態では、ランタイム環境は、リコンフィギャラブル計算ノード、リコンフィギャラブルスイッチ、リコンフィギャラブルコモンメモリノード、およびリコンフィギャラブルＩ／Ｏノードの組合せを利用するオペレーティングシステムなしで完全にＦＰＧＡベースである。別の実施形態では、ランタイム環境において、ＦＰＧＡアプリケーションは、オペレーティングシステムを有するかまたはオペレーティングシステムなしでマシンコードとしてコンパイルされたマイクロプロセッサ、リコンフィギャラブル計算ノード、プロセッサによってアクセス可能なリコンフィギャラブルコモンメモリ、およびスイッチモジュールの組合せを、指定どおりのさまざまな組合せで利用することができる。ＦＰＧＡアプリケーション１０２において、ストリームプロトコル、ストリームデータソース、Ｉ／Ｏコネクタ（内部ワイヤに沿って接続を提供する）、Ｉ／Ｏエージェント（外部システムへの接続を提供する）、コードブロックのコンポーネント、およびコードブロックの複数のコンポーネントで形成された複合コンポーネントなどの他のエレメントを使用することができる。
【００３６】
ＦＰＧＡアプリケーション内では、プロセッサは所望に応じて独立してまたは選択的に動作することができる。いくつかの実施形態では、ＦＰＧＡアプリケーション１０２は、１つまたは複数の進入ポイント（ＦＰＧＡアプリケーション外部の入力メッセージを受信するＦＰＧＡアプリケーションの部分）、１つまたは複数の退出ポイント（ＦＰＧＡアプリケーションから外部に出力メッセージを通信するＦＰＧＡアプリケーションの部分）、１つまたは複数のリコンフィギャラブル計算ノード（例えば、データを処理する物理ＦＰＧＡの）、それによって処理ノードがメモリノードにデータを読み書きする、処理ノードにアクセス可能な１つまたは複数のメモリノード（例えば永続的物理メモリ、非永続的物理メモリ）、および処理ノードとメモリノードとの間でルーティングおよび通信を行うためのエグゼキュータブルロジックを含む１つまたは複数のスイッチを含む。いくつかの実施形態では、計算ノードはマイクロプロセッサを含むことができる。
【００３７】
一実施形態では、ＦＰＧＡアプリケーション１０２は、イベントジェネレータおよびイベントコンシューマを含むイベント処理システムを利用する。ＦＰＧＡアプリケーション１０２のコンポーネントは、このイベント処理システム内にあって、ＦＰＧＡアプリケーション１０２内の複数のイベントストリームに提示される、イベントを生成または開始することができ、さらには、イベントは１つまたは複数のイベント記録として記録することができる。一実施形態では、イベント記録は、セキュアなハードウェアエレメント（例えば、トラステッドプラットフォームモジュール（ＴＰＭ））と共に、またはそれとは独立して、ゼロ知識ブロックチェーンアーキテクチャに基づいてイベント記録を生成することができる。したがって、イベント記録へのキーに関する知識を有する独立したパーティであれば、後に、特定のイベントが真か偽かをアテストすることができる。
【００３８】
動作中、モニタリングモジュール１１２を、デプロイされたＦＰＧＡアプリケーション１０２のさまざまなメトリクスをモニタリングするために、さらに使用することができる。これらのメトリクスには、応答時間、特定のコンポーネントの使用などを含むことができる。メトリクスは、ＦＰＧＡアプリケーション１０２の性能を分析し、その分析に基づいて、アプリケーション開発モジュール１０６を使用してＦＰＧＡアプリケーション１０２用のソースコードを更新するために使用することができる。以下により詳細に論じるように、モニタリングモジュール１１２は、ＦＰＧＡアプリケーション１０２にいかなる性能上のペナルティも生じることなく、ＦＰＧＡアプリケーション１０２によって行われる実際の処理と並行して、モニタリング回路から発せられた情報を収集する。全体として、モニタリングモジュール１１２は、ＦＰＧＡアプリケーション１０２のデプロイメントを最適化するために、負荷バランシング、ＦＰＧＡアプリケーション１０２と関連付けられたさまざまなコンポーネントの利用率計算、および他の発見的手段を実行するために使用することができる。
【００３９】
さらに、メータリングモジュール１１４は、デプロイされたＦＰＧＡアプリケーション１０２のメータリングを実施するために使用することができる。以下により詳細に論じるように、メータリングモジュール１１４は、ＦＰＧＡアプリケーション１０２にいかなる性能上のペナルティも生じることなく、ＦＰＧＡアプリケーション１０２によって行われる実際の処理と並行して、メータリング回路から発せられた情報を収集する。メータリングモジュール１１４によって生成されたメータリングイベントは、デプロイされた各ＦＰＧＡアプリケーション１０２と関連付けられており、特定の使用カウントを生成する。使用カウントは、所望に応じて出力を生成するためにメータリング回路を使用して処理され得る。一実施形態では、メータリングモジュール１１４は、同じＦＰＧＡ回路上でＦＰＧＡアプリケーション１０２の処理ブロックと並列に動作する。
【００４０】
一実施形態では、メータリングイベントは、ＦＰＧＡアプリケーション１０２内で指定された特定の退出ポイントへルーティングされ、適切な総計およびリアルタイムでの請求に使用するために（例えば、メータリングイベント記録を生成することによって）メータリングモジュール１１４によって収集される。別の実施形態では、メータリング記録をフォーマットし、請求システム（例えば、ＺｕｏｒａのようなＳａａＳ請求プロバイダ、Ａｍａｚｏｎ  Ｗｅｂ  ＳｅｒｖｉｃｅまたはＭｉｃｒｏｓｏｆｔ  Ａｚｕｒｅのようなクラウドプロバイダ）に通信し得る。別の実施形態では、メータリング記録を転送する他の方法（例えば、ＧＮＵプライバシーガード（ＧＰＧ）暗号化Ｅメールまたは同等物）を使用することができる。記録を転送することは、さまざまな理由（例えばセキュリティ、接続性）のために直接接続されていないシステムが遠隔でメータリングモジュール１１４へ送信されることを可能にする。一実施形態では、メータリングイベントは、ＰａａＳプラットフォームによって請求され、分担を割り当て、各固有の対価の義務について支払いを分配することができる。
【００４１】
図２は、一実施形態に係るＦＰＧＡアプリケーション１０２のコンポーネントのブロック図である。ＦＰＧＡアプリケーション１０２は、Ｉ／Ｏノード２００および１つまたは複数のＦＰＧＡ計算ノード２０２（別々のＦＰＧＡ計算ノード２０２（１〜Ｎ）として示されている）を含む。ＦＰＧＡ計算ノード２０２（１〜Ｎ）は、企業全体にわたって分散することができ、複数のデータセンタ、複数のシャーシ、およびシャーシ内の複数のノードを含む。一実施形態に係る動作では、入力メッセージ２１０は、ストリームをＦＰＧＡ計算ノード２０２に分配するためにメッセージ解釈、負荷バランシング、高可用性、耐久性およびストリームルーティングを実行することができるＩ／Ｏノード２００によって受信される。一実施形態では、Ｉ／Ｏノード２００は、ＦＰＧＡアプリケーション１０２への１つまたは複数の進入ポイント、およびＦＰＧＡアプリケーション１０２からの１つまたは複数の退出ポイントを備える。ＦＰＧＡ計算ノード２０２は、以下に論じるようにＦＰＧＡ計算ノードを使用して、受信した入力メッセージ２１０に対してストリーム処理を実行し、出力データをＩ／Ｏノード２００に提供する。次いで、Ｉ／Ｏノード２００は出力メッセージ２１６を送信する。ＦＰＧＡ計算ノード２０２（１−Ｎ）のそれぞれは、一実施形態では（例えば、高可用性ソリューションを提供するために）同一であるか、またはＦＰＧＡアプリケーションのための別々の処理タスクを含むことができる。
【００４２】
一実施形態では、ＦＰＧＡアプリケーション１０２はネットワーキング機能を実行するようにプログラムされ、Ｉ／Ｏノード２００を介して入力メッセージ２１０としてネットワークパケット（例えばイーサネット（登録商標）パケット）を直接受信し、ＦＰＧＡ計算ノード２０２（１−Ｎ）はビジネスルールを含むビジネスアプリケーションをハードウェア内で実施する。この実施形態の一形態では、ビジネスアプリケーションスタック全体は、Ｉ／Ｏノード２００およびＦＰＧＡ計算ノード２０２を含んで、通信（例えば、イーサネット（登録商標））層からＦＰＧＡアプリケーション１０２のビジネスアプリケーションまで、リコンフィギャラブル計算ノード内に実装される。すなわち、コンフィギャラブルプロセッサによって読み取り可能なフォーマットへの着信メッセージからのトランスレーションおよび発信メッセージフォーマットへのリコンフィギャラブルプロセッサによって読み取り可能なフォーマットからのトランスレーションを除いて、リコンフィギャラブルプロセッサは、リソースを管理するオペレーティングシステムなしでＦＰＧＡアプリケーション１０２内のすべての処理を実行する。具体的な一実施形態では、計算ノードは、ＦＰＧＡアプリケーション１０２のリコンフィギャラブルプロセッサまたは他のいかなるハードウェアリソースを管理するオペレーティングシステムも使用せずに、ＦＰＧＡアプリケーション１０２のための主な計算機能を形成する。すなわち、ＦＰＧＡアプリケーション１０２は、いかなるオペレーティングシステムからも独立して動作する。別の実施形態では、ネットワーキング機能およびビジネスアプリケーションは、複数のリコンフィギャラブル計算ノードおよび複数のカードにわたって任意の方法でデプロイされた別個の処理エレメントを含み得る。さらなる一実施形態では、Ｉ／Ｏノード２００は、ＦＰＧＡアプリケーション１０２用のネットワーキング機能および／またはビジネス機能の一部を含む。さらに別の実施形態では、計算ノード２０２は、単一のリコンフィギャラブル計算ノードを使用し得、またはリコンフィギャラブルプロセッサ以外のリコンフィギャラブルハードウェアを使用し得る。さらに別の実施形態では、計算ノード２０２は、リコンフィギャラブルハードウェアをマイクロプロセッサと協調して使用し得る。一実施形態では、Ｉ／Ｏノード２００は、ＦＰＧＡ計算ノード２０２がバイナリ情報を処理するために、ネットワークパケットからバイナリ情報へのトランスレータとして機能する。ＦＰＧＡ計算ノード２０２間の通信は、以下で論じるように（例えば、また、バイナリ情報を使用して）通信プロトコルによってつかさどることができる。Ｉ／Ｏノード２００は、所望に応じて、ネットワークパケットへの、ＦＰＧＡ計算ノード２０２によって処理されたバイナリ情報のトランスレータとして機能することができる。
【００４３】
一実施形態によれば、ＦＰＧＡアプリケーション１０２は、企業に高可用性ソリューションを提供する。例えば、ＦＰＧＡ計算ノード２０２は、ＦＰＧＡ計算ノード２０２のうちの１つまたは複数が故障した場合に、ＦＰＧＡアプリケーション１０２がＦＰＧＡアプリケーション１０２へ送信されたメッセージに対する回答または応答をなおも提供できるように、冗長な作業を実行することができる。一実施態様では、一実施形態に係るＩ／Ｏノード２００は、複数のＦＰＧＡ計算ノード２０２に入力ストリームを同時に提供し、ＦＰＧＡ計算ノード２０２の一部または全部は、受信した入力ストリームに対して同一の計算を実行する。次いで、これらのＦＰＧＡ計算ノード２０２のそれぞれは、Ｉ／Ｏノード２００に出力ストリームを提供する。Ｉ／Ｏノード２００は、出力ストリームを受信し、出力メッセージ２１６として提供するために（例えば、合意アルゴリズムを使用して）出力ストリームのうちの１つを特定する。このようにして、ＦＰＧＡアプリケーション１０２は、高可用性および応答の信頼性の向上を提供する。
【００４４】
ＦＰＧＡ計算ノード２０２は単一のシャーシ内に存在し得るか、または複数の別個の異なるシャーシに分散し得、シャーシのうちの任意の所与の１つは複数のＩ／Ｏノード２００および任意の数のＦＰＧＡ計算ノード２０２を含み得る。例えば、その結果、シャーシのＩ／Ｏノードが、入力ストリームをシャーシ内のＦＰＧＡ計算ノード２０２へ、およびＦＰＧＡアプリケーション１０２の処理の一部を実施する１つまたは複数の他のシャーシ内の他のＦＰＧＡ計算ノード２０２へルーティングすることを決定できるように、１つのシャーシは、Ｉ／Ｏノード２００および単一のＦＰＧＡ計算ノード２０２を実装し得る。図２の破線で示すように、ＦＰＧＡアプリケーション１０２は、異なる一式のＦＰＧＡ計算ノード２０２−２の処理を使用するために、互いに直接通信する第２のＩ／Ｏノード２００−２および第３のＩ／Ｏノード２００−３を含むようにスケーリングすることができる。
【００４５】
イーサネット（登録商標）またはＩｎｆｉｎｉＢａｎｄ  Ｉ／Ｏノード、別個のリコンフィギャラブルハードウェアノードからのバイナリデータのストリームを含む双方向データバス、シャーシ内通信接続（例えば、シャーシ内の別個のノードへの）、シャーシ間通信接続（例えば、光リンク）およびその他のものなどのさまざまな通信チャネルを、ＦＰＧＡアプリケーション１０２内で（例えば、別個のＦＰＧＡ計算ノード２０２内で、およびそれらの間で）通信するために使用することができる。一実施形態では、ＦＰＧＡアプリケーション１０２は、単一のリコンフィギャラブル集積回路チップ（例えばフィールドプログラマブルゲートアレイ（ＦＰＧＡ））上のＦＰＧＡ計算ノード２０２に制約される。さらなる実施形態では、ＦＰＧＡアプリケーション１０２は、複数の集積回路チップ、シャーシ内の複数のノード（例えば、１つまたは複数の回路を含むプリント回路基板）、および／またはイーサネット（登録商標）、ＩｎｆｉｎｉＢａｎｄ、または直接光リンクなどの通信チャネルを介して接続された複数のシャーシにわたって分散することができる。
【００４６】
図３Ａは、以下で論じるように適切な処理プラットフォーム上で具現化することができる例示的なＦＰＧＡ計算ノード２０２のブロック図である。一実施形態では、ＦＰＧＡ計算ノード２０２は、オペレーティングシステムなしで動作し、複数のロジックブロック、および１つまたは複数のＦＰＧＡ計算ノード上でアプリケーションを直接実行するようにコンフィギュレーションされたロジックブロック間の相互接続（例えばストリーム接続）から形成される。本明細書に示されるように、ＦＰＧＡ計算ノード２０２は、進入アセンブリ２５４（例えば、１つまたは複数の進入ポイントから形成される）からデータを受信し、そのデータを処理し、退出アセンブリ２５６（例えば、１つまたは複数の退出ポイントから形成される）にそのデータを出力または送信するために複数の回路を形成する複数のＦＰＧＡコンポーネント２５２（任意の番号１〜Ｎとして示される）から形成されるＦＰＧＡプロセッサ２５０を含む
【００４７】
一実施形態では、ＦＰＧＡプロセッサ２５０は、複数のリコンフィギャラブルハードウェアゲートを含む物理的にディスクリートな集積回路である。他の実施形態では、ＦＰＧＡプロセッサ２５０は、さまざまな通信リンクを介して互いに接続された複数の物理的にディスクリートな集積回路を含む。一実施形態では、ＦＰＧＡコンポーネント２５２はデータを決定論的に処理する。ＦＰＧＡコンポーネント２５２（１〜Ｎ）は、ＦＰＧＡプロセッサ２５０によって直接アクセスされる（例えば、メモリコンポーネント２６２、ディスク２６４）か、またはＦＰＧＡプロセッサ２５０内にネイティブに記憶される（例えば、記憶ループ２６６内に）データ記録２６０を使用してデータを処理する。進入アセンブリ２５４および退出アセンブリ２５６は、Ｉ／Ｏノード２００（図２）から受信したものなど、１つまたは複数の入力ストリーム２７０にアクセスする。詳細には、進入アセンブリ２５４は入力ストリーム２７０からデータを受け取り、退出アセンブリ２５６は１つまたは複数の出力ストリーム２７２にデータを提供する。次いで、出力ストリーム２７２はＩ／Ｏノード２００（図２）へ送信される。
【００４８】
一実施形態では、ＦＰＧＡコンポーネント２５２（１〜Ｎ）のうちの１つまたは複数は、ＦＰＧＡコンポーネント２５２と関連付けられた１つまたは複数のメトリクスを追跡するために、ＦＰＧＡコンポーネント２５２（１〜Ｎ）と並列に動作する１つまたは複数のモニタリング回路２８０と関連付けるようにコンパイルすることができる。モニタリング回路２８０は、ＦＰＧＡアプリケーション１０２のモニタリングデータ（例えば、総計された、および／またはリアルタイムの）を提供するために、ＦＰＧＡ計算ノード２０２のそれぞれにわたって総計することができるモニタリング出力２８２を提供する。
【００４９】
なおさらなる一実施形態では、次いでコンパイルしてＦＰＧＡプロセッサ２５０にデプロイされる、１つまたは複数のＦＰＧＡコンポーネントを別々に開発できるように、ＦＰＧＡコンポーネント２５２（１〜Ｎ）のそれぞれは、別個のソースからコンパイルすることができる。そのような場合、ＦＰＧＡコンパイルモジュール１０８（図１）は、ＦＰＧＡプロセッサ２５０に１つまたは複数のメータリング回路２９０を追加することができる。メータリング回路２９０は、所望に応じてＦＰＧＡコンポーネント２５２をメータリングするためのＦＰＧＡコンポーネント識別子と共にプログラムされる。一実施形態では、メータリング回路２９０は、ＦＰＧＡ計算ノード２０２内のＦＰＧＡコンポーネント２５２についての時間ベースのメータリングイベントを生成することができる時間イベントエミッタを含む。メータリング回路２９０は、メータリング記録を展開し、記録を集約し、ＦＰＧＡコンポーネント２５２についてのメータリング出力２９２を生成するための総計モジュールをさらに含むことができる。メータリング出力２９２は、ＦＰＧＡコンポーネント２５２の動作に基づいて対価を決定するためにメータリングモジュール１１４によって処理される。例えば、ＦＰＧＡコンポーネント２５２（２）は、１回の使用につき０．００００１ドル、１ＧＢ処理につきに１．００ドル、または１時間につき０．１０ドルの使用率を含み得る。このように、メータリング回路２９０は、ＦＰＧＡコンポーネント２５２（２）が使用された回数を決定する対応するカウンタを含むことができる。次いで、この数は、メータリング出力２９２へ出力することができる。メータリングは、ありとあらゆるＦＰＧＡコンポーネント２５２について、そして任意の測定単位を使用して実行することができる。
【００５０】
一実装態様では、モニタリング回路２８０およびメータリング回路２９０は、ピンと結合されたワイヤに沿って、モニタリング出力２８２およびメータリング出力２９２をそれぞれ直接提供するディスクリートのＦＰＧＡ集積回路のピンと直接インタフェースする。この目的のために、ＦＰＧＡアプリケーション１０２の他のコンポーネントの動作とは別にモニタリング出力２８２およびメータリング出力２９２を収集するために、ＦＰＧＡプロセッサ２５０との専用線を確立することができる。図３Ｂに示す、なおさらなる実施態様では、メータリング回路２９０はイベントを２次的なＦＰＧＡプロセッサ２５１へ直接ルーティングする。ＦＰＧＡプロセッサ２５１は、メータリング回路２９０用の回路を含む。一例では、メータリング回路２９０は、ＦＰＧＡコンポーネント２５２のうちの１つまたは複数の実行によるイベントを収集するためのバッファを含む。ＦＰＧＡプロセッサ２５１内のメータリング回路２９０から、上記で論じるメータリング出力２９２が生成される。
【００５１】
それに応じて、メータリング出力２９２を生成するためにメータリング回路２９０を使用するための一実施形態では、方法は、複数の回路へのデータの第１のデジタルビットストリームを受信する段階を含む。複数の回路は、複数のコードブロックから生成される。複数の回路を介してデータの第１のデジタルビットストリームを処理することと並行して、第１のデジタルビットストリームを消費する複数の回路のうちの少なくとも１つの実行を示す使用値が生成される。１つまたは複数の使用値を示す第２のデジタルビットストリームが送信される。
【００５２】
本明細書で使用され、図４Ａに概略的に示されるように、例示的なＦＰＧＡコンポーネント３００は、１つまたは複数の入力ストリーム３０２、その１つまたは複数の入力ストリームに対して実行されるべき動作を定義するコードブロック３０４（例えばソースコードによって定義され、リコンフィギャラブルハードウェアユニット上にコンパイルおよびコンフィギュレーションされる）、および１つまたは複数の出力ストリーム３０６、を定義するデータ処理である。ＦＰＧＡアプリケーション１０２内では、入力ストリーム３０２および出力ストリーム３０４は、ストリームの様相を特定するためのさまざまな形態の情報を含む。例えば、入力ストリーム３０２および出力ストリーム３０４は、タイプ（例えば、支払いストリーム、トークンストリーム、キーと値のペア）、ＦＰＧＡアプリケーション１０２内でストリームを区別するための固有の識別子、幅、およびストリームの処理に有用な他の情報を含むことができる。ＦＰＧＡコンポーネント２５２が別のＦＰＧＡコンポーネントに隣接して配置されるとき、当該のＦＰＧＡコンポーネント２５２は、１つのＦＰＧＡコンポーネントの出力ストリームを１つまたは複数の後続のＦＰＧＡコンポーネントの入力ストリームに伝達するリコンフィギャラブルハードウェアを含む。
【００５３】
一実施形態では、入力ストリーム３０２は、対応する出力ストリームから情報を受信するためのストリームプロトコル情報を含み、出力ストリーム３０４は、対応する入力ストリームへ通信するためのストリームプロトコル情報を含む。例えば、アプリケーション内の出力ストリームは、隣接する入力ストリームが同じＦＰＧＡプロセッサ内に位置することを示す情報を含むことができ、したがって、結果を隣接する入力ストリームへ送信するために特定のプロトコルが必要ないことを示すコントロールビットまたは他のインジケータを含むことができる。別の実施形態では、出力ストリームは、隣接する入力ストリームが同じシャーシ内の別のＦＰＧＡプロセッサ上に位置しており、シャーシ内のスイッチを介して通信されるという情報を含むことができる。そのような状況では、出力ストリームは、同じシャーシ内でストリーム間の通信をつかさどるシャーシ内プロトコルを利用することができる。なおさらなる一実施形態では、出力ストリームは、隣接する入力ストリームが別個のシャーシに位置していることを示す情報を含むことができる。それに応じて、出力ストリームは、指定されたストリームプロトコル情報、およびイーサネット（登録商標）を介してストリームを通信するための暗号化機能（例えば、ＩＰｓｅｃまたは暗号化暗号の配置を使用する）を含むことができる。一実施形態では、例えば、メモリアクセス動作においてシャーシ、ノード、および直接的なメモリアドレス、に関する情報と共にアドレスを示すことによる、複雑なアドレッシング技術を使用することができる。なおさらなる一実施形態では、企業レベルのストリームプロトコル層を、例えば別個の回路、ノード、シャーシ、データセンタなどに対して、企業システムにまたがる入力ストリームと出力ストリームとの間の通信のためのストリームプロトコル情報と共に利用することができる。企業ストリームプロトコル層は、セキュアな企業インフラストラクチャを確立するのに有用である。
【００５４】
図４Ｂは、ＦＰＧＡコンポーネント用のソースコードファイルの概略図である。ソースファイルは、最終的にコンパイルされてダイレクトエグゼキューションロジックに形成されるいくつかの情報エレメントを含む。一実施形態では、ダイレクトエグゼキューションロジックは、企業スーパー計算プラットフォームのノードにまたがるロジックを含む企業レベルのアプリケーションである。ソースコードファイル内の例示的なエレメントには、入力ストリーム識別子、出力ストリーム識別子、高級言語またはハードウェア記述言語コードブロック、データフロー記述言語、隣接するストリームを接続するための接続プロトコルに準拠するストリーム接続コード、ソースコードの開発者に対する対価要件およびその他の情報エレメントが含まれる。コンパイルの間、各ストリームについて（例えば企業にわたって）固有のストリーム識別子を有するように、アプリケーションにわたって名前付けの競合を回避するために入力ストリーム識別子および出力ストリーム識別子が利用される。例えば、特定のソースコードファイルがアプリケーションにわたって複数の位置で使用される場合、各ストリームに対する固有の識別子がアプリケーション開発中に（例えば、シャーシおよび／またはノードによって）割り当てられる。データフロー記述言語およびストリーム接続コードは、隣接するストリームを接続し、さらにはアプリケーションへ出力を提供しないストリームを回避するために使用される。例えば、特定のコードブロックが４つの出力ストリームを含む場合、ストリーム接続コードは、４つの出力ストリームに対して４つの対応する接続があることを確実にすることができる。データフロー記述言語は、ＦＰＧＡアプリケーションのコンパイル時にストリーム接続コードを生成するために使用することができる。対価要件は、コンパイルおよびデプロイメント時に開発者によって設定することができ、アプリケーションのロジックの使用量および対価を決定するためにアプリケーションのロジックと並列に動作するダイレクトエグゼキューションブロックを形成する。
【００５５】
ＦＰＧＡアプリケーション１０２内では、複数のＦＰＧＡコンポーネントを順番におよび／または並列に配置することができる。例えば、図５Ａは、進入Ｉ、退出Ｅ、および進入Ｉと退出Ｅとの間に順番に（すなわち直列に）配置された複数のＦＰＧＡコンポーネントＣ１〜Ｃ４を含む例示的なＦＰＧＡレイアウト３２０の概略ブロック図である。ＦＰＧＡレイアウト３２０は、隣接するマイクロ回路セグメント間の接続を提供するためにＦＰＧＡコンポーネントＣ１〜Ｃ４の間に配置された複数のストリームＳ１〜Ｓ５をさらに含む。詳細には、ストリームＳ１〜Ｓ５は、第１のＦＰＧＡコンポーネントの対応する出力ストリームから後続の第２のＦＰＧＡコンポーネントの入力ストリームへデータを伝達する。詳細には、ストリームＳ１は進入ＩからＦＰＧＡコンポーネントＣ１の入力へデータを伝達し、ストリームＳ２はＦＰＧＡコンポーネントＣ１の出力からＦＰＧＡコンポーネントＣ２の入力へデータを伝達し、ストリームＳ３はＦＰＧＡコンポーネントＣ２の出力からＦＰＧＡコンポーネントＣ３の入力へデータを伝達し、ストリームＳ４はＦＰＧＡコンポーネントＣ３の出力からＦＰＧＡコンポーネントＣ４の入力へデータを伝達し、ストリームＳ５はＦＰＧＡコンポーネントＣ４の出力から退出Ｅへデータを伝達する。ＦＰＧＡコンパイルモジュール１０８に関して本明細書で論じるように、ストリームＳ１〜Ｓ５用のコードは、指定されたＦＰＧＡコンポーネント用の入力ストリーム３０２および出力ストリーム３０６に基づいて自動的にコンパイルすることができる。さらに、ストリームＳ１〜Ｓ５は、同じＦＰＧＡ上、同じノード上、同じシャーシ内の異なるノード上、または完全に別個のシャーシ上に存在し得るコンポーネント間の通信のためのストリームプロトコル情報を含むことができる。ＦＰＧＡコンパイルモジュール１０８は、隣接するコンポーネントが入力ストリームと出力ストリームとの間に統一された変数を含むかどうかをさらに特定することができる。例えば、図５Ａに関して、ＦＰＧＡコンパイルモジュール１０８は、コンポーネントＣ１が４つの出力ストリームを含み、コンポーネントＣ２が４つの統一された数の入力ストリームを含むと決定することができる。ＦＰＧＡコンパイルモジュール１０８がＦＰＧＡアプリケーション１０２内の非統一性を決定した場合、エラーメッセージを生成することができる。
【００５６】
図５Ｂは、進入Ｉ、退出Ｅ、および複数のＦＰＧＡコンポーネントＣ１〜Ｃ４を含み、ＦＰＧＡコンポーネントＣ２〜Ｃ４が並列に配置された例示的なＦＰＧＡレイアウト３３０のブロック図である。詳細には、ストリームＳ１は、進入ＩからＦＰＧＡコンポーネントＣ１の入力へデータを伝達する。次いで、ストリームＳ２〜Ｓ４は、ＦＰＧＡコンポーネントＣ１の対応する出力からＦＰＧＡコンポーネントＣ２〜Ｃ４の入力へデータを伝達する。ＦＰＧＡコンポーネントＣ２〜Ｃ４は、それらのそれぞれの入力でデータを受信した時点で、そのデータを並列に（例えば、他のＦＰＧＡコンポーネントの同じクロックサイクル中に）処理するように動作する。次いで、ストリームＳ５〜Ｓ７は、ＦＰＧＡコンポーネントＣ２〜Ｃ４の対応する出力から退出Ｅ１〜Ｅ３へデータを伝達する。どのコンポーネントが外部ソースから通信を受け入れるようにコンフィギュレーションされているか、およびどのコンポーネントが外部のデスティネーションへ通信するようにコンフィギュレーションされているかに応じて、ＦＰＧＡアプリケーション全体に対して進入ポイントおよび退出ポイントが確立されるように、ＦＰＧＡアプリケーションのコンパイル中にレイアウト３２０および３３０内のコンポーネントを互いに接続できることは注目に値する。
【００５７】
図５Ａに関して上記で論じたようにＦＰＧＡコンポーネントＣ１〜Ｃ４のうちのいずれかの実行をメータリングするという観点では、イベントモニタリングは、動作命令と並行して実行することができる。図５Ｃでは、命令（または代替的に命令セット）１−７を含む例示的なアプリケーションが概略的に示されている。現在のマイクロプロセッサ手法では、命令は順番に実行され、こうした実行は実行時間内に実行される。開発者が、実行された各命令（または任意の数の命令）についての情報を収集したい場合、図５Ｄに示すように、開発者は命令シーケンス内に信号命令を挿入しなければならない。図示の例では、命令１、３および５が実行されたときに信号が生成される。この信号を生成する時間は実行時間に追加される。対照的に、図５Ｅに示されるように、信号１、３および５の命令生成のために生成された信号は命令１〜７の実行と並行して行われ、実行時間は図５Ｃのそれと同じになる。
【００５８】
ＦＰＧＡアプリケーションの上記の理解を念頭に置いて、図６は、ＦＰＧＡアプリケーション開発モジュール１０６のブロック図である。開発モジュール１０６は、例えばユーザインタフェース３４０（例えばコマンドライン、ＧＵＩ）を介してアクセスされる、ＦＰＧＡアプリケーションを開発するためのいくつかのツールを利用する。１つのツールはアプリケーション要件選択モジュール３５０であり、これは、可用性仕様、デプロイメント仕様、メモリ仕様、アテステーション仕様、サービスレベル合意仕様、Ｉ／Ｏノード仕様およびその他のものなど、ＦＰＧＡアプリケーションと関連付けられたさまざまなパラメータを選択するためのインタフェースを含むことができる。これらの仕様は、デプロイされたＦＰＧＡアプリケーションのノード数、ノードのタイプ、シャーシ、セキュリティ機能、およびその他のパラメータを決定するのに役立つ。例えば、ＦＰＧＡアプリケーションが、アプリケーションの通常動作のために負荷バランシングを有する２つのシャーシを、そして災害復旧のために１つのシャーシを使用することができると決定され得る。アプリケーション要件から、使用されるべきコンポーネントおよびコンポーネントのタイプを特定するリソースリストを生成することができる。リストには、シャーシのリスト、各シャーシ用の計算ノード、および各シャーシ用のメモリノードを含めることができる。アプリケーションパッケージは、ＦＰＧＡアプリケーション内の計算ノードのそれぞれについてのダイレクトエグゼキューションロジック（例えば、ビットストリームの形で）を含むことができる。
【００５９】
ＦＰＧＡコンポーネントモジュール３５２は、ＦＰＧＡアプリケーション１０２内で利用されることになるＦＰＧＡコンポーネント（内部で、またはサードパーティによって開発される）を開発者が選択することを可能にする。一実施形態では、サードパーティの開発者は、ＦＰＧＡコンポーネントの機能記述を公開し、ＦＰＧＡアプリケーションでＦＰＧＡコンポーネントを使用するためのライセンス料を指定することができる。料金は、デバッグ、ハードウェアシミュレーション、またはＦＰＧＡアプリケーションのデプロイメントを示す、デプロイメントのタイプに基づくことができる。別の実施形態では、開発者は、ＦＰＧＡコンポーネントの機能記述を公開し、処理カウントまたは期間あたりの使用または任意の測定単位に基づいてライセンス料を指定することができる。別の実施形態では、開発者数ごとにライセンス料を指定することができる。コンパイル時に、指定されたとおりに対価を計算するためにメータリング回路がＦＰＧＡアプリケーションに追加される。
【００６０】
データフロー視覚化モジュール３５４は、開発者がＦＰＧＡアプリケーション内のデータフローを視覚化することを可能にする。視覚化モジュール３５４を使用して、開発者は、ＦＰＧＡアプリケーションの全体的な範囲、およびその位置が特定のＦＰＧＡプロセッサ上か、特定のシャーシ内か、または他の位置であるかに関わらず、どの位置でどのコンポーネントが利用されているかについての理解を得ることができる。例えば、一実施形態では、視覚化モジュール３５４は、ＦＰＧＡアプリケーション１０２用のすべての進入ポイントを示すアプリケーションフローを表示することができる（例えば、進入ポイントをグラフィカルユーザインタフェースの左側の欄または上部で示すことによって）。例えば、開発者が、それらのそれぞれの進入ポイントへの外部接続ポイントを容易に特定できるように、進入ポイントを特定の名前で示すことができる。次いで、視覚化モジュール３５４は、進入ポイントへつながる読み取り動作のために、進入ポイントおよび／または管理メモリとつながるアプリケーションストリームをさらに示すことができる。別の実施形態では、視覚化モジュール３５４は、ＦＰＧＡアプリケーション１０２のテストランでキャプチャされたデータ記録を表示する。視覚化モジュール３５４は、ユーザが、実際のキャプチャされたデータフローを時系列にステップ実行し、テストデータを処理するＦＰＧＡアプリケーション１０２の動作の各段階でデータをやり取りして検査することを可能にする。ＦＰＧＡアプリケーション１０２の進入ポイントから受信したインバウンドメッセージを処理するさまざまなルールフレームワークをさらに示すことができる。視覚化モジュール３５４は、ＦＰＧＡアプリケーション１０２について、出力ストリーム、書き込み動作用の管理メモリ、およびアプリケーション退出ポイントをさらに表示することができる。ＦＰＧＡアプリケーションの動作中に、ＦＰＧＡアプリケーション１０２がどのように実行しているかに関する理解を提供するために視覚化モジュール３５４をリアルタイムで更新することができる。
【００６１】
さらなる実施形態では、アプリケーション開発モジュール１０６は、コンテキストメモリマネージャ３５８を含むことができ、開発者は、ＦＰＧＡアプリケーション１０２内でメモリがどのように管理されるかを示すことができる。例えば、コンテキストメモリマネージャ３５８は、ＦＰＧＡアプリケーション１０２によって使用されるメモリデバイス内に記憶されているデータ（例えば管理メモリのデータセット）へのアクセスを指定することができる。一実施形態では、特定のコンポーネント（またはノード）には、このデータへの読み取りアクセスのみを許可することができる。代替的な実施形態では、またはこれに加えて、ダイレクトエグゼキューションロジックのみがメモリにアクセスすることができるようにアプリケーションがコンパイルされるときに、ダイレクトエグゼキューションロジック内のメモリアクセスコントロールを示すためにコンテキストメモリマネージャ３５８を使用することができ、ＦＰＧＡアプリケーション内のセキュリティを大幅に向上させることができる。例えば、いくつかのコモンメモリのデータセットを伴う企業アプリケーションでは、単一のコンポーネントが単一の管理メモリのデータセットに書き込むことを可能にすることによって、アプリケーションのデータ保全性を可能にすることができる。一実施形態では、ダイレクトエグゼキューションロジックは、コモンメモリのデータセットへのアクセス権を行使する。
【００６２】
ここで図７をさらに参照すると、グローバルストリームマネージャ３７０、ビットストリームジェネレータ３７２、配置配線ツール３７４、およびモニタリングおよびメータリング回路ジェネレータ３７６などのいくつかのエレメントを使用する、ＦＰＧＡコンパイルモジュール１０８が示されている。グローバルストリームマネージャ３７０は、アプリケーション用のソースコードファイルからのストリーム識別子を使用し、各ストリームが固有の識別子を有するように各ストリーム用のネームスペースを生成する。したがって、アプリケーション内でのストリーム識別子の重複が避けられる。場合によっては、ＦＰＧＡコンパイルモジュール１０８は、指定されたＦＰＧＡ、またはＦＰＧＡアプリケーション内の特定のブロックと共に使用するためにビットストリームジェネレータ３７２を使用してビットストリームを生成する。
【００６３】
ＦＰＧＡアプリケーション１０２が複数の計算ノードを利用する場合、アプリケーションパッケージがアプリケーション内の各計算ノード用のビットストリームを特定するようにアプリケーションパッケージを生成することができる。この場合、ＦＰＧＡコンパイルモジュール１０８は、１つまたは複数のＦＰＧＡビットストリームを生成するために、開発モジュール１０６によって示されるようにソースファイルを受信し、ＦＰＧＡコンパイルモジュール１０８のビットストリームジェネレータ３７２と関連付けられたライブラリのハードウェアバージョンを使用し、ＦＰＧＡ配置配線ツール３７４を起動する。生成されたビットストリームは、コンパイルモジュール１０８によってオブジェクトファイルに含められる。ＦＰＧＡコンパイルモジュール１０８は、ＦＰＧＡアプリケーション内の計算ノードのそれぞれについて１つまたは複数のビットストリーム（ダイレクトエグゼキューションロジック）を含むことができる、アプリケーションパッケージを生成する。
【００６４】
ＦＰＧＡコンパイルモジュール１０８は、ＦＰＧＡアプリケーションの概要を開発者に提供するためにソースファイルおよびリソースリストファイルを受け入れる。ソースファイルは、サードパーティによって開発された、および／または内部で開発された標準ライブラリからのものとすることができる。コンパイルモジュール１０８は、Ｃおよび／またはＣ＋＋および他の低レベル仮想マシン（ＬＬＶＭ）サポート言語で書かれたソースファイルならびにＶｅｒｉｌｏｇを統合することができる。したがって、開発者は、高級プログラミング言語内から、低レベルのハードウェア機能、つまりプロセッサハードウェアの定義および生成にアクセスすることができる。計算およびメモリアクセスに対するこのレベルのコントロールは、高い計算性能の達成をきわめて容易にする。一実施形態では、コンパイルモジュール１０８は、低レベル仮想マシン（ＬＬＶＭ）言語、ＶＢ．ＮＥＴの中間言語（ＩＬ）およびその他のもの（例えば、Ｊａｖａ（登録商標）、Ｃ＃、Ｓｗｉｆｔ）などの異なる言語で書かれたコードをインポートすることができる。このコードをインポートすると、開発者は、コンポーネントを視覚的にまたはフロー言語で指定するグラフィカルユーザインタフェースを使用して、複合データフローアプリケーションを生成することができる。したがって、開発者は、ＦＰＧＡアプリケーション１０２のコンパイル時に、並列または直列に特定のセグメントを有するアプリケーションの実行を最適化することができる。
【００６５】
コンパイルモジュール１０８は、ソースファイル（例えば、Ｖｅｒｉｌｏｇ、Ｃ、Ｃ＋＋で書かれた）を解釈し、アプリケーション内のＦＰＧＡプロセッサ用のダイレクトエグゼキューションロジックを生成するソフトウェアを含むことができる。コンパイルモジュール１０８は、コードから最大の並列性を抽出し、ＦＰＧＡ計算ノード内にインスタンス化されたパイプラインハードウェアロジックを生成する。一実施形態では、コンパイルモジュール１０８は、アプリケーションパッケージを形成する１つまたは複数のビットストリーム内に形成されたダイレクトエグゼキューションロジックを生成するいくつかの異なるライブラリを含む。
【００６６】
コンパイルモジュール１０８は、「デバッグモード」またはシミュレーション（「シムモード」）で、コンパイルされたコードをエミュレーションおよびシミュレーションする能力もユーザに提供する。デバッグ／シムモードコンパイルは、ＦＰＧＡの配置配線ツール３７４を起動することなく、ＣＰＵ上で自身のコードのすべてをユーザがコンパイルおよびテストすることを可能にする。デバッグ／シムモードは、ループの性能情報も提供することができ、これによりＦＰＧＡの配置配線前の正確なプロセッサのコード性能見積りを可能にする。
【００６７】
モニタリングおよびメータリングジェネレータ３７６は、使用あたり、期間あたり、シミュレーション使用あたり、シミュレーション期間あたりなどについてなど、ソースファイル内での、対価を示す、サードパーティ開発者からの指定のソースファイルの使用を示すダイレクトエグゼキューションロジックを生成する。さらに、ジェネレータ３７６は、統計がテストデータに関して生成されたかアプリケーションの実際のデプロイメント中に生成されたかに関わらず、開発者にとって価値のあるさまざまなモニタリング統計を示すことができるダイレクトエグゼキューションロジックを生成する。いずれにせよ、コンパイルモジュール１０８は、いかなる性能上のペナルティも回避するために、アプリケーションロジックの実行と並行して、ダイレクトエグゼキューションロジックをモニタリングおよびメータリングすることを位置付けるように動作する。
【００６８】
図８は、コンパイルモジュール１０８からアプリケーションパッケージを受け入れる、トラステッドデプロイメントモジュール１１０のブロック図である。トラステッドデプロイメントモジュール１１０は、暗号エンジン３８０およびデプロイメントプロトコルマネージャ３８２を使用する。暗号エンジン３８０は、暗号化されたファイルをデプロイメントのために遠隔システムへ送信することができるようにアプリケーションパッケージを暗号化する。組み合わせて、デプロイメントプロトコルマネージャ３８２は、暗号エンジン３８０によって暗号化されたファイルがセキュアなままで、かつ、信頼されたデスティネーションへのみデプロイされることを確実にするために、キーおよび他のセキュアエレメントを管理することができる。最終的には、所望どおりの動作のために、１つまたは複数の暗号化されたビットストリームを遠隔システムへ送信することができる。複数の計算ノードが使用されるとき、デプロイメントプロトコルマネージャ３８２は、アプリケーションのどの部分がＦＰＧＡアプリケーション１０２を動作させるために使用される指定されたノードへデプロイされるかをつかさどることができる。
【００６９】
ＦＰＧＡアプリケーション１０２内のノード間で情報を効率的かつセキュアに処理するために、一方向の非同期通信プロトコルを利用することができる。図９は、ノード間の通信をつかさどる複数の変更可能なプロトコル機能（菱形として概略的に示されている）を使用した、ノード１とノード２との間の通信の概略ブロック図である。例示的なプロトコル機能は、エンコーディング、ラッパ、暗号、暗号パターン、キー、アルゴリズム、および並べ替え、ならびに送信側（例えば、ノード１）からのメッセージの送信を含み、プロトコル機能は、メッセージが、使用されてデスティネーションへ提供される、送信側識別子、署名、暗号化パターン、１つまたは複数のキー、デスティネーション識別子、セキュリティフレームワークの数およびタイプ、暗号、アルゴリズムなどを含むことを指示することができる。受信側でメッセージを受信しデコードする際に、受信側（例えば、ノード２）は、受信したメッセージの変更可能なプロトコル機能への準拠を検証するためにメッセージの内容を評価することができる。例えば、受信側は、メッセージが信頼できるソースからのものであり、メッセージ内の内容が処理するのに安全かどうかを決定するために、署名、暗号化、フォーマットなどを検証することができる。
【００７０】
特定のＦＰＧＡアプリケーションでは、さまざまなレベルのセキュリティを確立するために、任意の数の異なるプロトコル、暗号、キー、アルゴリズム、および永続化をさまざまな変更可能なプロトコル機能と共に使用することができる。例えば、ノード１がＦＰＧＡアプリケーションの外部にあり、ノード２がＦＰＧＡアプリケーションの一部である場合、第１のプロトコルを使用することができる。例えば、こうした通信は暗号化することができる。ノード１およびノード２がＦＰＧＡアプリケーションの別個のシャーシ内にある別の例では、第２の異なるプロトコルを利用することができる。ノード１およびノード２がＦＰＧＡアプリケーションの同じシャーシ内にあるさらに別の例では、第３の異なるプロトコルを利用することができる。さらに、ＦＰＧＡアプリケーション内のメモリへの書き込みには第４のプロトコルを使用することができ、ＦＰＧＡアプリケーション内のメモリからの読み取りには第５のプロトコルを使用することができる。
【００７１】
一実施形態では、セキュアストリームプログラマブルゲートアレイ機能を提供することができ、それによって、メッセージ内に含まれる情報を利用してコンフィギュレーションステップを迅速かつ容易に実行することを可能にする。例えば、コンフィギュレーションキー情報は、メッセージから抽出され、暗号化暗号、プロセスフロー、およびルールを含む適用可能なコンフィギュレーション情報を決定するために適用可能な状態を選択するために適切に利用される。受信側は、この処理にさらに対応するために、受信側によって直接アクセス可能なメモリに記憶されている、事前コンパイルされたコントロール情報を利用する。したがって、抽出されたコンフィギュレーションキー情報は、メモリと適切に協調するためにコントロールストリームまたはメッセージヘッダを利用し、したがって、関係する受信側に適切なコンフィギュレーションを提供することができる。再び、次いで、所望の出力ストリームを提供するために、同じ情報ストリームが受信側を通して処理される。
【００７２】
動作において、受信側は、着信データストリームをどのように処理するかを決定するために規則を適用し、したがって、この機能をハードウェア上に直接提供することによって上述のコンフィギュレーション情報の抽出を実行し、従来の汎用プロセッサの必要性が回避される。これの成果として、さまざまなノードを操作するためのオペレーティングシステムが存在しない。その結果、攻撃面を減少させることがセキュリティ強化をもたらし、性能を得ることができる。
【００７３】
本明細書に記載の一実施形態は、ＦＰＧＡ用のストリームトリガされた方法を対象とする。あるいは、これはストリームプログラマブルゲートアレイ（ＳＰＧＡ）と称される。利用される方法は、ネットワークから入力ストリームを直接受信する段階と、入力ストリームの受信に基づいてＦＰＧＡプロセッサのコンフィギュレーションをトリガする段階と、およびＦＰＧＡプロセッサ内のプログラムされたハードウェアゲートを介して受信入力ストリームを決定論的に処理する段階とを備える。この手法を使用して、すべてのコンポーネントはこのようにストリームトリガされ、入力ストリームに含まれる情報に基づいて排他的に動作する。代替的な実施形態では、ストリームルーティングを決定するために入力ストリーム内のデータがコンテキスト情報（例えば、メモリにローカルに記憶されている）と組み合わされる、追加の可能性が存在する。
【００７４】
一例では、コンポーネント１およびコンポーネント２はそれぞれ、ＦＰＧＡおよびＦＰＧＡをコントロールするためのロジックを含む。一実施形態では、ノード間通信プロトコルは、Ｉ／Ｏノード、ＰＣＩ  Ｅｘｐｒｅｓｓカード、ＩｏＴ埋め込み可能モジュール、または、ＦＰＧＡを含むハードウェアユニットを使用する他のデバイス上で実施される。例えば、デバイスは、モバイルデバイス、タブレット、電話、コンピュータ、サーバ、メインフレームなどとすることができる。別の実施形態では、ノードは、共通のシャーシ、ラック、またはハードウェアユニットの代替の容器内で互いに通信可能に接続することができる。いくつかの実施形態では、コンポーネントは、着用、持ち運び、グループでの使用、単独での使用、または疎結合ネットワークに属することができる装置から構成することができる。
【００７５】
一実施形態では、メッセージは受信側によって受信され、メッセージは受信機に直接接続されたいかなるメモリにも記憶されず、むしろ受信機を通してストリーミングされる。受信側はストリーム処理を実行し、これは要求および応答処理とは異なる。ストリーム処理によって、受信側は常に特定のトリガ情報について入力メッセージの内容を検査し、この情報が見つかったときにそれに応じて反応する。
【００７６】
所与のメッセージの内容に応じて、受信側は当該の入力メッセージを処理する場合もしない場合もあり、当該の入力メッセージに対応する出力メッセージを生成する場合もしない場合もある。一例として、受信側は、受信されたときに入力メッセージを処理せず、なお入力ストリームを別のノードへ転送する。別の例として、受信側は受信したときに入力メッセージを処理し、対応する出力メッセージを生成する。さらなる例として、受信側は、受信したときに入力メッセージを処理しないかまたはその一部だけを処理し、入力メッセージに対応する出力メッセージを生成しない（例えば、不正なメッセージに起因して）。さらに、受信側は、不正なメッセージが受信されたと決定された場合、通信のドロップ、ネットワーク帯域幅のキャンセル、およびその他のアクションなど、さまざまなアクションを取ることができる。
【００７７】
図１０は、本明細書に提示された概念を実施するための適切なコンピュータシステム１２００を示す。一例では、システム１２００用のシャーシは、以下に論じるさまざまなモジュールを利用して、４ノード、３２ノード、数百のノードを有する完全密閉型電磁パルス（ＥＭＰ）保護キャビネット、および頑丈なシグナルデータプロセッサ（ＳＤＰ）形状の要素に存在することができる。シャーシは、入出力（Ｉ／Ｏ）ノード、それぞれが１つまたは複数のＦＰＧＡプロセッサおよび任意選択のマイクロプロセッサを有するリコンフィギャラブルな計算ノード、およびコモンメモリノード、の組合せを含むことができる。図１０に示すように、システム１２００は、１つまたは複数の管理ＦＰＧＡプロセッサ１２０１、Ｉ／Ｏノード１２０２、リコンフィギャラブル計算ノード１２０４、およびコモンメモリノード１２０６を含む。３２ノードのシャーシの場合、所望に応じて複数のＩ／Ｏノードを利用することができる。
【００７８】
シャーシ内のユニット間相互接続は、スイッチ１２１０を介して確立される。スイッチは、商標ＨＩ−ＢＡＲ（登録商標）を有するコンポーネントとして具現化することができる。例えば上記で論じるように、選択されたモジュールのそれぞれは、ノード間通信を達成するためにＨＩ−ＢＡＲ（登録商標）スイッチ接続を有することができる。さらなる実施形態では、スイッチ１２１０は、シャーシ内または複数シャーシアプリケーションにわたって負荷バランシング動作を実行するためにＦＰＧＡまたはダイレクトエグゼキューションロジックを含むことができる。スイッチ１２１０は、図９に関して詳細に論じられるように、ノード間およびシャーシ間通信のためのセキュアなプロトコルを実施するためのロジックをさらに含むことができる。
【００７９】
１つまたは複数の管理ＦＰＧＡプロセッサ１２０１は、システム１２００用のマザーボード上に配置することができ、１つまたは複数のＦＰＧＡアプリケーション１０２のデプロイメントをコントロールするためにシステム１２００の他の部分と接続する働きをする。さらに、管理ＦＰＧＡプロセッサ１２０１は、所望に応じて他のコントロールタスクを実行することができる。
【００８０】
Ｉ／Ｏノード１２０２、リコンフィギャラブル計算ノード１２０４、およびコモンメモリノード１２０６は、コモンシャーシ内のスロット内に固定された別個のノード上に具現化することができる。一実施形態では、４ノードシャーシは４つのノードを収容するためのスロットを含むことができる。特定のアプリケーションの開発についての要件に応じて、選択されたコンフィギュレーションは、１つのＩ／Ｏノード１２０２、２つのリコンフィギャラブル計算ノード１２０４、および１つのコモンメモリノード１２０６を含むことができる。より多くのメモリを利用するＦＰＧＡアプリケーションの場合、選択されたコンフィギュレーションは、１つのＩ／Ｏノード１２０２、１つのリコンフィギャラブル計算ノード１２０４、および２つのコモンメモリノード１２０６を含むことができる。複数の４ノードシャーシを有するＦＰＧＡアプリケーションの場合、ＦＰＧＡコンパイルモジュール１０８がシャーシ間通信、およびノード間通信用の通信プロトコルを生成する、さまざまなコンフィギュレーションが利用可能である。
【００８１】
一実施形態では、ＦＰＧＡシステム１２００の使用は、セキュアな機器としてデプロイされる。代替的な実施形態では、ＦＰＧＡシステム１２００は、リコンフィギャラブルシステムのアテステーションを提供するために１つまたは複数のトラステッドプラットフォームモジュール（ＴＰＭ）と共に使用される。さらに別の実施形態では、ＦＰＧＡシステム１２００は、第２の信頼できるシステムによって暗号化署名され、ＴＰＭ内に封印されたキーによって有効であることが検証されたバイトコードを使用してプログラムされる。さらなる実施形態では、バイトコードの暗号化署名を検証するために使用されるキーは、ハードウェアセキュリティモジュール（ＨＳＭ）機器である場合もそうでない場合もある、第２の外部の信頼できるシステムによって提供される。さらなる実施形態では、ＴＰＭは、ＦＰＧＡアプリケーション内の複数の（またはそれぞれの）ハードウェアコンポーネントに使用される。さらに、ＦＰＧＡアプリケーション１０２の段階的ロック解除は、１つまたは複数のＴＰＭを使用して実行することができる。一実施形態では、ＦＰＧＡアプリケーション１０２の段階的ロック解除を実行するために、複数のノードで複数のＴＰＭを使用することができる。
【００８２】
一実施形態では、シャーシおよび／またはＦＰＧＡシステム１２００は、金融取引処理、支払い承認、データ保護、トークン化、およびその他に必要とされるセキュリティおよびコンプライアンスのためのＰＣＩ−ＤＳＳ、ＨＴＰＡＡおよびＮＩＳＴ規格などの、金融業界および健康業界の規格を満たすセキュアな暗号処理およびキー管理を使用する。１つの特定の例示的実施形態では、共通シャーシは、シャーシ内に埋め込まれた、またはシャーシ内に収容された単一のカードもしくはカートリッジ上に実装された耐タンパ性ＨＳＭも有することができる。別の実施形態では、シャーシが、自体が損なわれていることを検出した場合に、シャーシおよび／またはＨＳＭ全体について動作がホルトすることができるように、シャーシ自体をセキュアかつ耐タンパとして実装することができる。さらなる実施形態では、ＨＳＭはＦＰＧＡシステム１２００を使用して実装される。さらに別の実施形態では、ＴＰＭは、ＨＳＭと共に、またはシャーシ上のＨＳＭと協調して、またはＦＰＧＡシステム１２００上で独立して使用することができる。
【００８３】
スイッチ１２１０は、スケーラブル、高帯域幅、低レイテンシのスイッチである。各スイッチ１２１０は、６４ビットのアドレッシングならびにいくつかのノードに接続するための入力ポートおよび出力ポートをサポートすることができる。スイッチ１２１０は、メモリ内の特定の位置をアドレス指定することが［シャーシ］−［ノード］−［メモリ位置］の形式でアドレッシングされたメッセージであるように、複数のシャーシをアドレス指定するようにさらに拡張することができる。Ｉ／Ｏノード１２０２、リコンフィギャラブル計算ノード１２０４、およびコモンメモリノード１２０６はすべて、いかなるコンフィギュレーションにおいてもスイッチ１２１０に接続することができる。一実施形態では、総計の産出される２分割データ帯域幅１６ポートあたり５７．６ＧＢ／秒のために、各入力ポートまたは出力ポートは、産出されるデータペイロード３．６ＧＢ／秒を維持する。別の実施形態では、ポート間のレイテンシは、各ポートに実施される１ビットエラー訂正および２ビットエラー検出（ＳＥＣＤＥＤ）を伴って１８０ｎｓである。別の実施形態では、スイッチ１２１０は多層コンフィギュレーションにおいて相互接続することもでき、２つの層が２５６個のノードをサポートすることを可能にする。
【００８４】
図１１に示すように、Ｉ／Ｏノード１２０２は、イーサネット（登録商標）、Ｉｎｆｉｎｉｂａｎｄ、またはＩ／Ｏノード１２０２に接続された別のスイッチ１２１０を使用するネットワーク接続を介して、システム１２００に外部接続性を提供する。Ｉ／Ｏノード１２０２は、数千のソケット接続を扱うネットワークプロセッサ１２２０（例えば、カリフォルニア州Ｓａｎ  ＪｏｓｅのＣａｖｉｕｍ社製のＣａｖｉｕｍ（登録商標）Ｏｃｔｅｏｎ（登録商標）ＩＩＩ  Ｃ７８ＸＸプロセッサ）を含むことができる。Ｉ／Ｏノード１２０２は、例えば、イーサネット（登録商標）用に外部ネットワークからシステム１２００への２つの４０ＧｂＥ接続を提供することができる。ネットワークプロセッサ１２２０は、イーサネット（登録商標）から着信するネットワークトラフィックをコントロールＦＰＧＡインタフェース１２２２へのトラフィックに変換することができる。コントロールＦＰＧＡインタフェース１２２２は、ＦＰＧＡアプリケーション１０２のセキュアなエッジを提供する。コントロールＦＰＧＡインタフェース１２２２は、Ｉ／Ｏノード１２０２に対するすべてのインバウンドトラフィックおよびアウトバウンドトラフィックについて、スイッチ１２１０との通信を管理する。ネットワークプロセッサ１２２０は、ＳＳＤデバイス１２２４および別個のＳＤＲＡＭデバイス１２２６として示されるメモリユニットへもアクセスすることができる。別の実施形態では、Ｉ／Ｏノード１２０２は、ＦＰＧＡを含むことができるか、またはＦＰＧＡはネットワークプロセッサ１２２０を置き換えることができ、および本明細書で論じるようにプログラムされることができる。別の実施形態では、Ｉ／Ｏノード１２０２は、ネットワークプロセッサ１２２０とコントロールＦＰＧＡインタフェース１２２２とを単一のＦＰＧＡとして組み合わせることができ、および本明細書で論じるようにプログラムされることができる。
【００８５】
図１２に示すように、リコンフィギャラブル計算ノード１２０６は、任意選択の中央処理装置（ＣＰＵ）１２３０、コントロールＦＰＧＡ１２３２、ユーザロジックＦＰＧＡ１２３４、ならびにＳＤＲＡＭ、ＳＲＡＭおよび不揮発性メモリを含むメモリデバイスの集まり、を含む。一実施形態では、アプリケーションＦＰＧＡは、Ａｌｔｅｒａ（登録商標）Ａｒｒｉａ（登録商標）１０  １０ＡＸ１１５  ＦＰＧＡである。コントロールチップＦＰＧＡ１２３２は、ＣＰＵ１２３０およびユーザロジックＦＰＧＡ１２３４からアクセスも可能な、付属の共有メモリユニットを有する。コントロールチップＦＰＧＡ１２３２は、スイッチ１２１０とのモジュール間通信用に２つのスイッチポートをさらに有する。
【００８６】
図１３に示すように、コモンメモリノード１２０６はシステム１２００に大きなメモリ機能を提供する。図示されているコモンメモリノード１２０６は、ブロックアドレッシング方式を使用することができる２つのＤＭＡコントローラ１２５０および１２５２を含む。システム１２００内のコモンメモリノード１２０６へのアクセスは、シャーシ内のユニット間で共有され、異なるシャーシにわたってさらにコンフィギュレーションすることができる。一例では、コモンメモリノード１２０６は、６ポートＰＣＩｅスイッチを介して接続された１２個のソリッドステートドライブ（ＳＳＤ）デバイスを含み、コモンメモリとして機能する最大４８テラバイト（ＴＢ）の不揮発性記憶を提供する。各ＤＭＡコントローラ１２５０および１２５２は、システム１２００の効率的使用を最大にするために、データパッキング、ストライプ状アクセス、およびスキャッタ／ギャザなどの複雑なＤＭＡプリフェッチおよびデータアクセス機能を実行することができる。
【００８７】
同じ相互接続を使用するキャッシュベースのマイクロプロセッサよりも１０倍を超える高い相互接続効率が、これらの動作では一般的である。各入力ポートまたは出力ポートは、各ポートに実施される１ビットエラー訂正および２ビットエラー検出（ＳＥＣＤＥＤ）を伴って少なくとも３．６ＧＢ／秒の産出データペイロードを維持する。ＦＰＧＡコントローラ１２５０および１２５２は、複雑なダイレクトメモリアクセス（複雑なＤＭＡ）をサポートすることを含んで、メモリ動作をコントロールするためのものである。一実施形態では、コントローラは、メモリにアクセスするために複雑なダイレクトメモリアクセス（複雑なＤＭＡ）を使用するようにプログラムされる。複雑なＤＭＡを使用すると、メモリアクセスコマンドにロジックを含めることにより、書き込み時に、メモリに書き込まれるべきデータにロジックを適用することができる。スイッチ１２１０は、複雑なＤＭＡを使用することにより、あるノード上のコンポーネントが別のノード内のメモリに直接アクセスすることを可能にする。
【００８８】
図１４は、アプリケーションパッケージ１３００から、４ノードシャーシ１２００−１および４ノードシャーシ１２００−２として示される複数のシャーシ上にデプロイされた、例示的なＦＰＧＡアプリケーション１０２を概略的に示す。各シャーシは、シャーシ１２００−１および１２００−２から受信される通信および出て行く通信の両方のために、それぞれＩ／Ｏノード１２０２−１および１２０２−２を備えている。Ｉ／Ｏノード１２０２−１および１２０２−２のそれぞれは、ＦＰＧＡアプリケーション１０２全体にわたる通信のための指定されたプロトコルエグゼキューションロジックを含む。例えば、Ｉ／Ｏノード１２０２−１および１２０２−２は、外部メッセージ（すなわち、ＦＰＧＡアプリケーション１０２の進入ポイントに対して）を処理する特定のプロトコル検証エレメント（またはコンポーネント）を含むことができる。さらに、Ｉ／Ｏノード１２０２−１は、計算ノード１２０４−１および１２０４−２へ直接送信されるべきメッセージを生成するために使用されるロジックを含むことができる。これらのメッセージはシャーシ間通信なので、このタイプの通信に使用されるプロトコルは、外部メッセージの受信に使用されるものとは異なるものとすることができる。さらになお、Ｉ／Ｏノード１２０２−１は、メモリノード１２０６−１と通信するための異なるプロトコルを含むことができる。アプリケーションパッケージ１３００は、ＦＰＧＡアプリケーション１０２内の各ノードが、図９に詳述される方法で、ＦＰＧＡアプリケーション１０２へのおよびＦＰＧＡアプリケーション１０２内での通信の両方について最大の柔軟性およびセキュリティ選択を可能にするように実施される別個のプロトコルを含むことを可能にする、ダイレクトエグゼキューションロジックを含むことができる。
【００８９】
同様に、図１５は、アプリケーションパッケージ１３０２から形成され、さまざまなコンフィギュレーションのノード１３１０−１〜１３１０−３２およびＩ／Ｏノード１２０２−１〜１２０２−４として示される３２個のノードを有する単一のシャーシ上にデプロイされた、ＦＰＧＡアプリケーション１０２を概略的に示す。アプリケーションパッケージ１３０２は、上記に論じた方法でノード１３１０のそれぞれの上にデプロイされるべきダイレクトエグゼキューションロジックを含む。さらに、ノード間の通信は、図９に関して上記に論じたように実施することができる。
【００９０】
プロトコルのさまざまな使用例が、図１６Ａ〜図１６Ｅに概略的に示されている。プロトコルは、本明細書に記載されている技術、および特に図９に関して上記で論じた構造および手法、のいずれかを使用することができる。図１６Ａにおいて、シャーシ内プロトコルＰ１は、ストリーム接続コードＳＣ１を有するＦＰＧＡ計算ノード１８０１とストリーム接続コードＳ２を有するＦＰＧＡ計算ノード１８０２との間の通信のためにシャーシ１８００内で使用される。ＦＰＧＡ計算ノード１８０１および１８０２は同じシャーシ１８００内にあり、所望のプロトコルＰ１は、ノード間、詳細にはストリーム接続コードＳＣ１とストリーム接続コードＳＣ２との間で通信するのに使用される。いくつかの実施形態では、プロトコルＰ１への準拠を検証し、および正しいデスティネーションへルーティングするためにスイッチを利用することができる。さらなる実施形態では、シャーシ内通信において複数のプロトコルを使用することができる。
【００９１】
図１６Ｂは、第１のシャーシ１８１０と第２のシャーシ１８１１との間の通信にプロトコルＰ２を使用することの概略図である。詳細には、シャーシ１８１０内にストリーム接続コードＳＣ３を有するＩ／Ｏノード１８１２は、プロトコルＰ２を使用して、シャーシ１８１１内にストリーム接続コードＳＣ４を有するＩ／Ｏノード１８１３に通信する。一実施形態では、２つのシャーシ１８１０および１８１１はイーサネット（登録商標）または光リンクを介して接続され、プロトコルＰ２はシャーシ１８１０と１８１１との間の通信のために所望のセキュリティプロファイルを提供するように選択される。Ｉ／Ｏノード１８１２および１８１３の一方または両方は、所望に応じてＦＰＧＡプロセッサとすることができる。
【００９２】
図１６Ｃは、ストリーム接続コードＳＣ６を使用するメモリコントローラノード１８２２を介してメモリにアクセスするために、ストリーム接続コードＳＣ５を使用するＦＰＧＡ計算ノード１８２１のためにプロトコルＰ３が利用される、シャーシ１８２０の概略図である。一実施形態では、プロトコルＰ３は、要求元ＦＰＧＡ計算ノード１８２１が、メモリコントローラノード１８２２に接続されたメモリにアクセスすることを許可されることを保証することができる。メモリコントローラノード１８２２は、所望に応じてＦＰＧＡまたは他のプロセッサとして具現化することができる。さらなる実施形態では、読み取りおよび書き込み動作に異なるプロトコルを使用することができる。
【００９３】
図１６Ｄは、シャーシ１８３０内で使用されるプロトコルＰ４を概略的に示す。このシナリオでは、ストリーム接続コードＳＣ７を使用するネットワークプロセッサ１８３１は、プロトコルＰ４を使用して、ストリーム接続コードＳＣ８を使用するＦＰＧＡ計算ノード１８３２に通信する。ネットワークノード１８３１は、ＦＰＧＡ計算ノード１８３２およびストリーム接続コードＳＣ８に動作を送信するためにプロトコルＰ４を使用する。
【００９４】
図１６Ｅは、第１のシャーシ１８４０と第２のシャーシ１８４２との間の通信のために使用されるプロトコルＰ５を概略的に示す。詳細には、シャーシ１８４０内のストリーム接続コードＳＣ９を有するＨＩ−ＢＡＲ（登録商標）スイッチ１８４１は、プロトコルＰ５を使用して、シャーシ１８４２内のストリーム接続コードＳＣ１０を有するＨＩ−ＢＡＲ（登録商標）スイッチ１８４３へ通信する。一実施形態では、２つのシャーシ１８４０および１８４２は光リンクを介して接続され、プロトコルＰ５はシャーシ１８４０と１８４２との間の通信に所望のセキュリティおよびレイテンシプロファイルを提供するように選択される。ＨＩ−ＢＡＲ（登録商標）スイッチはどちらもＦＰＧＡプロセッサベースである。
【００９５】
プロトコルＰ１〜Ｐ５は、所望に応じていくつかの異なる方法で、そしていくつかの異なる場合に使用することができる。さらに、ＦＰＧＡアプリケーションについて、任意の異なる数のプロトコルを使用することができる。これらのプロトコルはさらに、所望に応じて周期的に変化させることができ、さまざまな組合せで使用することができる。したがって、特定のＦＰＧＡアプリケーションのセキュリティを強化することができる。
【００９６】
本発明を好ましい実施形態を参照しつつ説明してきたが、当業者であれば、本発明の精神および範囲から逸脱することなく形式および詳細において変更を加えることができることを理解するであろう。本発明のさまざまな実施形態は、その詳細を説明する目的で、および当業者が本発明を製造および使用することを可能にするために上記に記載されている。開示された実施形態の詳細および機能は、多くの変形および修正が当業者には容易に明らかになるので、限定することを意図していない。それに応じて、本開示の範囲は、広く解釈されるべきであり、添付の特許請求の範囲およびそれらの法的な均等物の範囲および趣旨の範囲内となるすべての変形形態および修正形態を含むことが意図されている。
【図１】
2019537784.tif 000003
【図２】
2019537784.tif 000004
【図３Ａ】
2019537784.tif 000005
【図３Ｂ】
2019537784.tif 000006
【図４Ａ】
2019537784.tif 000007
【図４Ｂ】
2019537784.tif 000008
【図５Ａ】
2019537784.tif 000009
【図５Ｂ】
2019537784.tif 000010
【図５Ｃ】
2019537784.tif 000011
【図５Ｄ】
2019537784.tif 000012
【図５Ｅ】
2019537784.tif 000013
【図６】
2019537784.tif 000014
【図７】
2019537784.tif 000015
【図８】
2019537784.tif 000016
【図９】
2019537784.tif 000017
【図１０】
2019537784.tif 000018
【図１１】
2019537784.tif 000019
【図１２】
2019537784.tif 000020
【図１３】
2019537784.tif 000021
【図１４】
2019537784.tif 000022
【図１５】
2019537784.tif 000023
【図１６Ａ】
2019537784.tif 000024
【図１６Ｂ】
2019537784.tif 000025
【図１６Ｃ】
2019537784.tif 000026
【図１６Ｄ】
2019537784.tif 000027
【図１６Ｅ】
2019537784.tif 000028
【国際調査報告】
2019537784.tif 000029