(58)【調査した分野】(Int.Cl.,DB名)
前記アプリケーション論理の前記仕様が、ソースコードを含み、前記構成可能なハードウェアの前記構成データを生成することが、前記ソースコードを合成して、前記アプリケーション論理のネットリストを生成することを含む、請求項2に記載のコンピュータ可読記憶媒体。
前記アプリケーション論理の前記仕様が、ネットリストを含み、前記構成可能なハードウェアの前記構成データを生成することが、前記アプリケーション論理の前記ネットリストをルーティングすることを含む、請求項2または3に記載のコンピュータ可読記憶媒体。
前記構成可能なハードウェアの前記構成データを生成することが、前記アプリケーション論理を前記構成可能なハードウェアのホスト論理と統合することを含み、前記ホスト論理が、前記アプリケーション論理の動作を抑制するように構成される、請求項2〜4のいずれかに記載のコンピュータ可読記憶媒体。
前記構成可能なハードウェアが、フィールドプログラマブルゲートアレイ(FPGA)を備え、前記構成データが、前記FPGAを構成するためのビットストリームを含む、請求項2〜7のいずれかに記載のコンピュータ可読記憶媒体。
【発明を実施するための形態】
【0007】
専門コンピューティングリソースを一組の再使用可能な一般的コンピューティングリソース内に提供するための1つの解決策は、(フィールドプログラマブルゲートアレイ(FPGA)を含むアドインカードをサーバコンピュータに提供することなどによって)一般的コンピューティングリソースの中の選択として構成可能な論理プラットフォームを備えるサーバコンピュータを提供することである。構成可能な論理は、構成可能な論理に適用される構成データによって指定される論理機能を行うようにプログラムまたは構成することができるハードウェアである。例えば、コンピューティングリソースのユーザは、構成可能な論理を構成するための仕様(ハードウェア記述言語または他の言語で書かれたソースコードなど)を提供することができ、構成可能な論理は、仕様に従って構成することができ、構成された論理は、ユーザのタスクを行うために使用することができる。しかしながら、コンピューティング設備の低レベルハードウェアへのユーザアクセスを可能にすることは、潜在的に、コンピューティング設備内のセキュリティおよびプライバシーの問題につながり得る。特定の一例として、あるユーザによる不良の、または悪意のある設計は、構成された論理がコンピューティング設備内の1つ以上のサーバコンピュータを故障(例えば、クラッシュ、ハング、もしくは再起動)させた場合、またはネットワークサービスが拒否された場合に、潜在的に、他のユーザに対するサービスの拒否を生じさせることがあり得る。別の具体的な例として、あるユーザによる不良の、または悪意のある設計は、構成された論理が、他のユーザのメモリ空間のメモリを読み出すおよび/またはそれに書き込むことができる場合に、潜在的に、別のユーザによるデータの破損または読み出しを生じさせ得る。別の具体的な例として、ユーザによる不良の、または悪意のある設計は、構成された論理がデバイスに構成可能な論理プラットフォームの電力消費または温度仕様を超えさせる(リング発振器などの)回路を含む場合、潜在的に、構成可能な論理プラットフォームを故障させ得る。
【0008】
本明細書で説明されるように、計算サービスの設備は、様々なコンピューティングリソースを含むことができ、あるタイプのコンピューティングリソースは、構成可能な論理プラットフォームを備えるサーバコンピュータを含むことができる。構成可能な論理プラットフォームは、コンピューティングリソースのハードウェア(例えば、構成可能な論理)がユーザによってカスタマイズされるように、コンピュータシステムのユーザによってプログラムまたは構成することができる。例えば、ユーザは、サーバコンピュータに密結合されたハードウェアアクセラレータとして機能するように、構成可能な論理をプログラムすることができる。例えば、ハードウェアアクセラレータは、サーバコンピュータの、周辺機器相互接続エクスプレス(PCI−Express、またはPCIe)などのローカル相互接続を介してアクセス可能であり得る。ユーザは、サーバコンピュータ上のアプリケーションを実行することができ、アプリケーションのタスクは、PCIeトランザクションを使用してハードウェアアクセラレータによって行うことができる。ハードウェアアクセラレータをサーバコンピュータに密結合することによって、アクセラレータとサーバコンピュータとの間の待ち時間を低減させることができ、これは、潜在的に、アプリケーションの処理速度を高めることができる。
【0009】
計算サービスプロバイダは、構成可能なハードウェアの構成および動作を管理するために、ソフトウェアサービスを使用してコンピューティングリソースを管理することができる。1つの例として、計算サービスプロバイダは、ユーザのハードウェアまたは論理設計を摂取し、ユーザの論理設計に基づいて構成可能な論理プラットフォームを構成するための有効な構成データを生成し、そして要求に応じて有効な構成データをダウンロードして構成可能な論理プラットフォームのインスタンスを構成するための、論理リポジトリサービスを実行することができる。ダウンロード要求は、論理設計を開発したユーザからのもの、または論理設計を使用するライセンスを獲得したユーザからのものであり得る。したがって、論理設計は、ユーザまたは計算サービスプロバイダとは別の、計算サービスプロバイダ、ユーザ、または第三者によって作成することができる。例えば、アクセラレータの知的財産(IP)のマーケットプレイスは、計算サービスプロバイダのユーザに提供することができ、ユーザは、マーケットプレイスからアクセラレータを選択することによって、潜在的に、それらのアプリケーションの速度を高めることができる。
【0010】
計算サービスプロバイダは、論理設計が計算サービスプロバイダの要件に従うことを検証するために論理リポジトリサービスを使用することによって、コンピューティングリソースのセキュリティおよび/または可用性を潜在的に高めることができる。例えば、論理リポジトリサービスは、ユーザが作成した論理設計(顧客論理またはアプリケーション論理)が計算サービスプロバイダによって提供されるホスト論理と互換性があることをチェックすることができる。構成可能な論理プラットフォームを構成するときに、ホスト論理およびアプリケーション論理の両方を、構成可能な論理プラットフォームにロードすることができる。ホスト論理は、アプリケーション論理がその中で機能する、フレームワークまたはサンドボックスを提供することができる。特に、ホスト論理は、コンピューティングリソースのセキュリティおよび/または可用性を潜在的に高めるために、アプリケーション論理と通信すること、およびアプリケーション論理の機能を抑制することができる。例えば、ホスト論理は、アプリケーション論理がローカル相互接続上のシグナリングを直接制御することができないように、ローカル相互接続(例えば、PCIe相互接続)とアプリケーション論理との間でブリッジ機能を行うことができる。ホスト論理は、ローカル相互接続上のパケットまたはバストランザクションを形成し、プロトコル要件を満たすことを確実にする役割を果たすことができる。ローカル相互接続上のトランザクションを制御することによって、ホスト論理は、潜在的に、不正な形式のトランザクションまたは境界外の場所に対するトランザクションを防止することができる。
【0011】
図1は、構成可能なリソースを計算リソース120内に構成するために使用することができる構成データを管理するための論理リポジトリサービス110を含む、システム100の一実施例を示すシステム図である。特に、論理リポジトリサービス110は、ホストおよびアプリケーション論理を計算サービスプロバイダのインフラストラクチャに摂取し(取り込み)、摂取した設計に基づいて構成データを生成し、摂取した設計および生成した構成データのリポジトリを維持し、そしてリソースが展開されるときに構成データを構成可能な計算リソースに提供するために使用することができる。
【0012】
論理リポジトリサービス110は、ウェブサービスなどのネットワークアクセス可能サービスとすることができる。ウェブサービスは、一般的に、クラウドコンピューティングにおいて使用される。ウェブサービスは、ウェブまたはクラウドを通じて、ネットワークアドレスで提供されるソフトウェア機能である。クライアントは、サーバに対するウェブサービス要求を開始し、サーバは、要求を処理して、適切な応答を返す。クライアントウェブサービス要求は、典型的に、例えばAPI要求を使用して開始される。簡潔さの目的で、ウェブサービス要求は、下では一般にAPI要求として記述されるが、他のウェブサービス要求を作製することができることを理解されたい。API要求は、典型的にJSONまたはXMLで表される、定義された要求応答メッセージシステムに対するプログラマチックインターフェースであり、これは、ウェブを介して、最も一般的にはHTTPベースのウェブサーバを介して公表される。したがって、特定の実装形態において、APIは、拡張マークアップ言語(XML)またはJavaScriptオブジェクト表記法(JSON)フォーマットとすることができるAPIを呼び出すために使用されるメッセージおよび応答メッセージの構造の定義と共に、一組のハイパーテキストトランスファープロトコル(HTTP)要求インターフェースとして定義することができる。APIは、固有のタスクを達成すること、またはソフトウェア構成要素との相互作用を可能にすることを含むアクションを行う、一組の機能またはルーチンを特定することができる。ウェブサービスがAPI要求をクライアントデバイスから受信すると、ウェブサービスは、要求に対する応答を生成し、要求内に識別されるエンドポイントに対する応答を送信することができる。追加的または代替的に、ウェブサービスは、要求内に識別されるエンドポイントに対する応答を生成することなく、API要求に応じてアクションを行うことができる。
【0013】
論理リポジトリサービス110は、API要求130を受信して、サーバコンピュータ140の構成可能なハードウェア142などの構成可能なハードウェアプラットフォームのための構成データを生成することができる。例えば、API要求130は、開発者、または計算サービスプロバイダのパートナーユーザによって考案され得る。要求130は、論理設計、構成可能なハードウェアプラットフォーム、ユーザ情報、アクセス特権、生産状況に関するデータおよび/またはメタデータを指定するためのフィールド、ならびに入力、出力、および論理リポジトリサービス110のユーザに関する情報を説明するための種々の追加的なフィールドを含むことができる。具体的な例として、要求は、設計の説明、生産状態(トライアルまたは生産など)、サービスの入力または出力の暗号化された状態、入力ファイル(ハードウェア設計ソースコードなど)を記憶するための場所の参照、入力ファイルのタイプ、構成可能なハードウェアのインスタンスタイプ、および出力ファイルまたはレポートを記憶するための場所の参照を含むことができる。特に、要求は、構成可能なハードウェアプラットフォーム上に実装するためのアプリケーション論理132(アプリケーション論理回路、アプリケーションロジック)を指定するハードウェア設計の参照を含むことができる。具体的には、アプリケーション論理132のおよび/またはホスト論理134の仕様(構成、構造)は、ソースコード、論理合成ツールによって生成されるネットリスト、ならびに/または配置およびルーティングツールによって生成される配置およびルーティングされた論理ゲートなどの、一群のファイルとすることができる。ソースコードは、ハードウェア記述言語(HDL)、レジスタ転送論理(RTL)言語、またはオープンコンピューティング言語(OpenCL)もしくはCなどの高レベル言語で記述されたコードを含むことができる。
【0014】
計算リソース120は、インスタンスタイプによって分類された数多くの異なるタイプのハードウェアおよびソフトウェアを含むことができる。特に、インスタンスタイプは、リソースのハードウェアおよびソフトウェアの少なくとも一部分を指定する。例えば、ハードウェアリソースとしては、様々なパフォーマンスレベル(例えば、異なるクロックスピード、アーキテクチャ、キャッシュサイズなど)の中央処理ユニット(CPU)を有するサーバ、コプロセッサ(グラフィックス処理ユニット(GPU)および構成可能な論理など)を有する、および有しないサーバ、メモリおよび/またはローカル記憶の様々な容量およびパフォーマンスを有するサーバ、ならびに異なるネットワークパフォーマンスレベルを有するサーバを挙げることができる。例示的なソフトウェアリソースとしては、異なるオペレーティングシステム、アプリケーションプログラム、およびドライバを挙げることができる。1つの例示的なインスタンスタイプは、構成可能なハードウェア142と通信する中央処理ユニット(CPU)144を含むサーバコンピュータ140を備えることができる。構成可能なハードウェア142は、例えば、FPGA、プログラマブル論理アレイ(PLA)、プログラマブルアレイ論理(PAL)、ジェネリックアレイ論理(GAL)、またはコンプレックスプログラマブル論理デバイス(CPLD)などの、プログラマブル論理(プログラム可能な論理回路)を含むことができる。具体的な例として、「F1.スモール」インスタンスタイプは、FPGAリソースの1つの容量単位を有する第1のタイプのサーバコンピュータを含むことができ、「F1.ミディアム」インスタンスタイプは、FPGAリソースの2つの容量単位を有する第1のタイプのサーバコンピュータを含むことができ、「F1.ラージ」インスタンスタイプは、FPGAリソースの8つの容量単位を有する第1のタイプのサーバコンピュータを含むことができ、「F2.ラージ」インスタンスタイプは、FPGAリソースの8つの容量単位を有する第2のタイプのサーバコンピュータを含むことができる。
【0015】
論理リポジトリサービス110は、API要求130を受信することに応じて、構成データ136を生成することができる。生成された構成データ136は、アプリケーション論理132およびホスト論理134(ホスト論理回路)に基づくことができる。具体的には、生成された構成データ136は、構成可能なハードウェア142がアプリケーション論理132およびホスト論理134によって指定された機能を行うように、該構成可能なハードウェアをプログラムまたは構成するために使用することができる情報を含むことができる。1つの例として、計算サービスプロバイダは、CPU144と構成可能なハードウェア142とをインターフェースするための論理を含むホスト論理134を生成することができる。具体的には、ホスト論理134は、全てのCPU−アプリケーション論理トランザクションがホスト論理134を通過するように、アプリケーション論理132がCPU144と直接通信することからマスキングまたはシールドするための論理を含むことができる。この様態で、ホスト論理134は、潜在的に、アプリケーション論理132によって導入することができるセキュリティおよび可用性リスクを低減させることができる。
【0016】
構成データ136を生成することは、アプリケーション論理132のチェックおよび/もしくは試験を行うこと、アプリケーション論理132をホスト論理134ラッパーに統合すること、アプリケーション論理132を合成すること、ならびに/またはアプリケーション論理132を配置およびルーティングすることを含むことができる。アプリケーション論理132をチェックすることは、アプリケーション論理132が計算サービスプロバイダの1つ以上の基準に従うことを検証することを含むことができる。例えば、アプリケーション論理132は、ホスト論理134にインターフェースするためのインターフェース信号および/または論理機能が存在するかどうかを判定するために分析することができる。特に、分析は、一連の検証試験に対して、ソースコードを分析すること、および/またはアプリケーション論理132を稼働させることを含むことができる。検証試験は、アプリケーション論理が、ホスト論理と互換性があることを確認するために使用することができる。別の例として、アプリケーション論理132は、アプリケーション論理132が、指定されたインスタンスタイプの設計された領域内にあるかどうかを判定するために分析することができる。別の例として、アプリケーション論理132は、アプリケーション論理132が、リング発振器または他の潜在的に有害な回路などの、任意の禁止された論理機能を含むかどうかを判定するために分析することができる。別の例として、アプリケーション論理132は、アプリケーション論理132が、ホスト論理134との任意の命名競合を有するかどうか、またはホスト論理134とインターフェースしない任意の外部からの出力を有するかどうかを判定するために分析することができる。別の例として、アプリケーション論理132は、アプリケーション論理132が、構成可能なハードウェア142の制限された入力、出力、またはハードマクロへのインターフェースを試みるかどうかを判定するために分析することができる。アプリケーション論理132が論理リポジトリサービス110のチェックに合格した場合は、構成データ136を生成することができる。チェックまたは試験のいずれかが不合格であった場合は、構成データ136の生成を中止することができる。
【0017】
構成データ136を生成することは、アプリケーション論理132およびホスト論理134のソースコードを、構成可能なハードウェア142をプログラムまたは構成するために使用することができるデータにコンパイルおよび/または変換することを含むことができる。例えば、論理リポジトリサービス110は、アプリケーション論理132をホスト論理134ラッパーに統合することができる。具体的には、アプリケーション論理132は、アプリケーション論理132およびホスト論理134を含むシステム設計にインスタンス化することができる。統合されたシステム設計は、論理合成プログラムを使用して、システム設計のためのネットリストを作成するように合成することができる。ネットリストは、システム設計のために指定されたインスタンスタイプのために、配置およびルーティングプログラムを使用して、配置およびルーティングすることができる。配置およびルーティングされた設計(構造、構成)は、構成可能なハードウェア142をプログラムするために使用することができる構成データ136に変換することができる。例えば、構成データ136は、配置およびルーティングプログラムから直接出力することができる。
【0018】
1つの例として、生成された構成データ136は、FPGAの構成可能な論理(論理回路)の全部または一部分を構成するための完全なまたは部分的なビットストリームを含むことができる。FPGAは、構成可能な論理および非構成可能な論理を含むことができる。構成可能な論理は、組み合わせ論理および/またはルックアップテーブル(LUT)、ならびに連続論理要素(フリップフロップおよび/またはラッチなど)を備えるプログラマブル論理ブロック、プログラマブルルーティングおよびクロッキングリソース、プログラマブル分散型およびブロックランダムアクセスメモリ(RAM)、デジタル信号処理(DSP)ビットスライス、ならびにプログラマブル入力/出力ピンを含むことができる。ビットストリームは、構成論理(例えば、構成アクセスポート)を使用して、構成可能な論理のオンチップメモリにロードすることができる。オンチップメモリ内にロードされた値を使用して、構成可能な論理がビットストリームによって指定される論理機能を行うように、構成可能な論理を制御することができる。加えて、構成可能な論理は、互いに独立して構成することができる異なる領域に分けることができる。1つの例として、フルビットストリームを使用して、構成可能な論理を領域全体にわたって構成することができ、部分ビットストリームを使用して、構成可能な論理領域の一部分だけを構成することができる。非構成可能な論理は、入力/出力ブロック(例えば、シリアライザおよびデシリアライザ(SERDES)ブロックおよびギガビットトランシーバ)などの、FPGA内で特定の機能を行うハードマクロと、アナログ−デジタル変換器と、メモリ制御ブロックと、試験アクセスポートと、構成データを構成可能な論理にロードするための構成論理と、を含むことができる。
【0019】
論理リポジトリサービス110は、生成された構成データ136を論理リポジトリデータベース150に記憶することができる。論理リポジトリデータベース150は、磁気ディスク、ダイレクトアタッチトストレージ、ネットワークアタッチトストレージ(NAS)、ストレージエリアネットワーク(SAN)、独立した複数のディスクからなる冗長配列(RAID)、磁気テープもしくはカセット、CD−ROM、DVD、または非一時的な方式で情報を記憶するために使用することができ、かつ論理リポジトリサービス110によってアクセスすることができる任意の他の媒体を含む、リムーバブルまたは非リムーバブル媒体に記憶することができる。加えて、論理リポジトリサービス110を使用して、(アプリケーション論理132およびホスト論理134の仕様などの)入力ファイル、ならびに論理設計および/または論理リポジトリサービス110のユーザに関するメタデータを記憶するために使用することができる。例えば、生成された構成データ136は、例えば、ユーザ識別子、1つまたは複数のインスタンスタイプ、マーケットプレイス識別子、マシンイメージ識別子、および構成可能なハードウェア識別子などの、1つ以上の特性によってインデックスを付けることができる。
【0020】
論理リポジトリサービス110は、構成データをダウンロードするためのAPI要求160を受信することができる。例えば、要求160は、計算リソース120のユーザが計算リソース120内の新しいインスタンス(例えば、「F1.スモール」インスタンス)を開始する、または展開するときに生成することができる。別の例として、要求160は、オペレーティングインスタンスで実行するアプリケーションからの要求に応じて生成することができる。要求160は、ソースおよび/または宛先インスタンスの参照、ダウンロードする構成データ(例えば、インスタンスタイプ、マーケットプレイス識別子、マシンイメージ識別子、または構成可能なハードウェア識別子)の参照、ユーザ識別子、認可トークン、ならびに/またはダウンロードする構成データを識別するための、および/もしくは構成データへのアクセスを許可するための他の情報、を含むことができる。構成データを要求するユーザが、構成データにアクセスする許可を与えられた場合は、論理リポジトリデータベース150から構成データを取り出すことができ、有効な構成データ162(例えば、フルまたは部分ビットストリーム)を要求元インスタンス(例えば、サーバコンピュータ140)にダウンロードすることができる。有効な構成データ162は、宛先インスタンスの構成可能な論理を構成するために使用することができる。
【0021】
論理リポジトリサービス110は、有効な構成データ162を要求元インスタンスにダウンロードすることができることを検証することができる。検証は、論理リポジトリサービス110によって複数の異なる位置で起こり得る。例えば、検証は、アプリケーション論理(アプリケーション論理回路)132がホスト論理(ホスト論理回路)134と互換性があることを検証することを含むことができる。特に、試験の回帰スイートは、シミュレータ上で実行して、アプリケーション論理132が設計(構成、構造)に加えられた後に、予想通りにホスト論理134を行うことを検証することができる。追加的または代替的に、アプリケーション論理132が、ホスト論理134の再構成可能な領域とは別の再構成可能な領域にだけ残留するように指定されることを検証することができる。別の例として、検証は、有効な構成データ162が、ダウンロードするインスタンスタイプと互換性があることを検証することを含むことができる。別の例として、検証は、要求元が、有効な構成データ162にアクセスする許可を与えられていることを検証することを含むことができる。検証チェックのいずれかが不合格であった場合、論理リポジトリサービス110は、有効な構成データ162をダウンロードする要求を拒絶することができる。したがって、論理リポジトリサービス110は、潜在的に、コンピューティングリソース120のセキュリティおよび可用性を保護することができ、一方で、ユーザがコンピューティングリソース120のハードウェアをカスタマイズすることを可能にする。
【0022】
図2は、論理リポジトリサービス205の例示的な構造200を示すシステム図である。論理リポジトリサービス205は、計算サービスプロバイダによって管理されるサーバコンピュータで実行するソフトウェアとすることができる。論理リポジトリサービス205は、1つ以上のウェブAPIを通してアクセスすることができる。
【0023】
論理リポジトリサービス205は、計算サービスプロバイダによってAPI要求をサービスするためのプロバイダインターフェース210を含むことができる。プロバイダインターフェース210を使用して、要求内に提供される証明書を使用して要求側の識別情報を認証することなどによって、要求が計算サービスプロバイダのエージェントからであることを認証することができる。プロバイダインターフェース210は、ホスト論理摂取機能215を提供することができる。特に、プロバイダインターフェース210は、ホスト論理設計を論理リポジトリサービス205にアップロードする要求を受信することができ、該要求は、ホスト論理摂取機能215によって処理することができる。上で説明されるように、ホスト論理は、アプリケーション論理をサンドボックス化して、コンピューティングリソースのセキュリティおよび可用性を維持するための論理を含むことができる。加えて、ホスト論理は、静的論理および再構成可能な論理にさらに分けることができる。静的論理は、初期化シーケンス中に(例えば、ブート時間に)構成することができ、一方で、再構成可能な論理は、構成可能な論理の動作中の異なる時間に構成することができる。1つの例として、PCI−Expressインターフェースは、リセット信号がデアサートされた後の約100ミリ秒以内にPCIエンドポイントがブートおよび列挙されるように指定することができる。ホスト論理は、割り当てられた時間ウインドウ以内にロードすることができる静的論理、および時間ウインドウが経過した後にロードすることができる再構成可能な論理に分けることができる。静的論理は、異なる再構成可能な領域間のインターフェースとして使用することができる。ホスト論理設計は、HDL、またはVerilogもしくはVHDLなどのレジスタ転送論理(RTL)ソースコードを使用して指定することができる。RTLは、暗号化すること、または非暗号化することができる。ホスト論理摂取モジュール215は、受信したホスト論理設計のチェック、ホスト論理設計の復号、および/またはホスト論理設計のためのバージョン情報の提供を行うために使用することができる。加えて、要求は、ホスト論理設計を1つ以上のインスタンスタイプと関連付けるための情報を含むことができる。例えば、いくつかのホスト論理設計は、インスタンスタイプのうちのあるサブセットだけによって機能することができ、他のホスト論理設計は、インスタンスタイプのうちの異なるサブセットだけによって機能することができる。
【0024】
論理リポジトリサービス205は、論理リポジトリサービス205のユーザからAPI要求をサービスするための顧客−開発者インターフェース220を含むことができる。顧客−開発者インターフェース220を使用して、要求内に提供される証明書を使用して要求側の識別情報を認証することなどによって、要求が計算サービスプロバイダのユーザからであることを認証するために使用することができる。例えば、ユーザの各々には、アクセス管理、請求、および使用状況追跡のためにユーザを識別するために使用することができるアカウントを提供することができる。ユーザは、ユーザがアクセスすることを許可された論理設計だけを閲覧および修正するように限定することができる。例えば、ユーザが、ホスト論理をアップロードおよび/または修正することを防止することができる。
【0025】
顧客−開発者インターフェース220は、アプリケーション論理設計を受信および/または処理するためのアプリケーション論理摂取機能225を含むことができる。アプリケーション論理設計は、ソースコード(例えば、HDLまたはRTLコード)、構成可能な論理ブロックのリストおよび構成可能な論理ブロック間の接続のリストを含むネットリスト、ならびに/または構成データを使用して指定することができる。例えば、構成データは、論理リポジトリサービスにアップロードされる前に予めコンパイルされた、フルまたは部分ビットストリームを含むことができる。アプリケーション論理は、(構成データ生成ブロック230などによって)ホスト論理と組み合わせて、構成可能なハードウェアプラットフォームにロードすることができる論理を作成する。アプリケーション論理設計を処理することは、ソースコードを下位レベルのフォーマットに翻訳および/またはコンパイルすること(例えば、OpenCLをコンパイルして、行動または構造Verilogを生成すること)と、必要とされる論理および/または(ホスト論理へのインターフェース信号などの)信号が存在することを検証することと、既知の制限された回路(リング発振器など)が存在しないことを検証することと、構成データの生成の準備における他の種々のタスクと、を含むことができる。
【0026】
顧客−開発者インターフェース220は、ユーザからの種々のタイプの要求を受け入れることができる。1つの例として、ユーザは、構成可能なハードウェアイメージ(CHI)を作成するように要求することができる。CHIは、構成可能なハードウェアのインスタンスをコンピューティング環境内に構成するための情報を提供することができる。例えば、CHIは、1つ以上の互換性があるインスタンスタイプと、構成可能なハードウェアを構成するための構成データと、CHIへのアクセスを制御するためのアクセス許可と、構成可能なハードウェアを構成することと関連付けられた任意の他の情報と、を含むことができる。CHIを作成する要求は、設計記述またはタイトルのためのフィールドと、設計の生産状態と、設計が暗号化されるかどうかと、設計のためのソースコードの参照と、ソースコードインジケータのタイプと、構成データと互換性がある1つまたは複数のインスタンスタイプと、レポート情報を記憶する場所の参照と、を含むことができる。
【0027】
別の例として、第2の要求タイプは、ユーザと関連付けられるCHIに関する情報を検索するために使用することができる。特に、要求は、CHI識別子、マシンイメージ(MI)識別子、製品コード、インスタンスタイプ、およびインスタンス識別子などのフィールドを含むことができる。要求に応じて、顧客−開発者インターフェース220は、要求内のフィールドの1つ以上にマッチするユーザと関連付けられるCHIに関する情報を提示することができる。例えば、検索フィールドにマッチする全てのCHIは、各CHIと関連付けられた状態と共に列記することができる。CHIは、トライアルもしくは生産状態であること、または完了もしくは進行状態であることを報告することができる。例えば、ソースコードからCHIを作成するために数時間かかることがあり得るので、この要求は、CHIの合成または実装の状態をチェックするために使用することができる。
【0028】
別の例として、第3の要求タイプは、CHIをMIに関連付けることであり得る。MIは、コンピューティング環境内でコンピューティングリソースのインスタンスを起動するための情報を提供することができる。1つの実施形態において、インスタンスは、コンピューティング環境内のサーバコンピュータで実行するハイパーバイザ内で実行する仮想マシンである。MIは、(アーキテクチャ、CPUの能力、コプロセッサ、周辺機器、および/または構成可能なハードウェア設計などを指定することによる)インスタンスのタイプと、(例えば、オペレーティングシステム、デバイスドライバ、および/またはアプリケーションを含む)インスタンスのためのルートボリュームのテンプレートと、MIのアクセス可能性を制御するためのアクセス許可(例えば、MIを使用することを許可されたアカウントのリスト)と、インスタンスが起動されるときに該インスタンスにアタッチするボリュームを指定するためのブロックデバイスマッピングと、を含むことができる。MIをCHIに関連付けることによって、MIに基づく仮想マシンを起動するときに、CHIと関連付けられた構成可能なデータをサーバコンピュータの構成可能な論理にダウンロードすることができる。
【0029】
別の例として、第4の要求タイプは、マーケットプレイスにCHIを公開することであり得る。例えば、製品コードをCHIと関連付けることができ、これは、CHIをマーケットプレイスに列記することを可能にすることができる。マーケットプレイスは、計算サービスプロバイダのユーザによって閲覧可能とすることができ、また、あるユーザによって開発されたものであり、また、別のユーザによってライセンスまたは購入するために利用可能であるハードウェアアクセラレータIPのリストを提供することができる。ユーザが、マーケットプレイスに公開されたCHIを購入またはライセンスするときに、ユーザのアカウント情報を、CHIにアクセスすることができるユーザのリストに加えることができる。
【0030】
構成データ生成ブロック230は、構成データを作成するために使用することができる。例えば、構成データは、アプリケーション論理設計およびホスト論理設計に基づくことができる。別の例として、構成データは、アプリケーション論理設計だけ、またはホスト論理設計だけに基づくことができる。特に、構成データ生成ブロック230は、ホスト論理設計だけに基づいて、静的論理を生成することができる。加えて、構成データ生成ブロック230は、構成可能な論理の1つ以上の再構成可能な領域のための再構成可能な論理(論理回路、ロジック)を生成することができる。例えば、構成データ生成ブロック230を使用して、ホスト機能に予約された領域のためのホストの再構成可能な論理を生成することができる。別の例として、構成データ生成ブロック230を使用して、主にアプリケーション機能に予約された領域のためのアプリケーションの再構成可能な論理を生成することができる。
【0031】
構成データ生成ブロック230への入力は、(アプリケーション論理摂取225などからの)アプリケーション論理設計(アプリケーション論理構造)、(ホスト論理摂取215などからの)ホスト論理設計、および/または(クロック周波数、分割情報、配置情報、ターゲット技術などといった)種々の実装形態の詳細を記述する制約、であり得る。論理設計は、HDL、ネットリスト、および/または構成データを使用して記述されたソースコードを含むことができる。構成データ生成ブロック230は、アプリケーションおよびホスト設計を1つの設計に組み合わせて、構成データを作成することができる。
図3を参照してより詳細に説明されるように、構成データ生成ブロック230は、論理合成ツールと、配置およびルーティングツールと、を含むことができる。これらのツールを使用することで、構成データ生成ブロック230は、構成可能なハードウェアプラットフォームにロードするための構成データを作成することができる。
【0032】
構成データ生成ブロック230からの出力は、論理ライブラリ管理ブロック240を使用して管理することができる。例えば、論理ライブラリ管理ブロック240は、ユーザ情報を構成データと関連付けること、および情報を論理リポジトリデータベース250に記憶することができる。論理ライブラリ管理ブロック240は、種々の論理構成要素およびソース入力ファイルの所有権およびバージョニングを維持するために使用することができる。論理ライブラリ管理ブロック240は、ファイルを暗号化して論理リポジトリデータベース250に記憶することができるように、設計ソースコードファイルおよびCHIファイルの暗号化および復号化を行うことができる。ファイルを暗号化することによって、異なるユーザの知的所有権を保護することができる。
【0033】
コンピューティングサービスインターフェース260は、論理リポジトリサービス205とコンピューティングリソースとの間のインターフェースとして使用することができる。例えば、インスタンスがコンピューティングリソースに作成されると、API要求をコンピューティングサービスインターフェース260に送信することができ、構成データを要求側リソースにダウンロードすることができる。第1の要求タイプは、計算リソースのサーバコンピュータで新しいインスタンスを開始または展開することに応じることであり得る。例えば、要求は、構成可能な論理がサーバコンピュータの相互接続に列挙される前に静的論理をロードおよびブートすることであり得る。特に、要求は、静的論理ダウンロードブロック265によってサービスすることができ、これは、論理ライブラリ管理ブロック240を介して、構成データを論理リポジトリデータベース250から検索することができる。静的論理ダウンロード構成要素265は、要求側インスタンスの構成可能なハードウェアプラットフォームに静的論理をダウンロードするために使用することができる。加えて、要求は、再構成可能な論理に関するものであり得、再構成可能な論理ダウンロード構成要素264を使用して、該要求をサービスすることができる。具体的には、再構成可能な論理ダウンロードは、論理ライブラリ管理ブロック240を介して、論理リポジトリデータベース250を通して構成データを検索することができる。要求は、再構成可能なホスト論理に関するもの、または再構成可能なアプリケーション論理に関するものであり得る。再構成可能な論理の要求は、計算リソースのサーバコンピュータで新しいインスタンスを開始または展開することに応じることであり得る。代替的に、再構成可能な論理の要求は、再構成可能な論理を要するサーバコンピュータで稼働するクライアントアプリケーションに応じることであり得る。例えば、サーバコンピュータで稼働するアプリケーションプログラムは、プログラムの異なるポイントで構成可能なハードウェアプラットフォームにダウンロードした異なるハードウェアアクセラレータを有するように要求することができる。コンピューティングサービスインターフェース260は、構成可能な論理データを検索するためのアクセス特権を有するユーザだけが構成データをダウンロードすることができるように、要求を認証することができる。例えば、要求は、認可トークンを含むことができ、認可トークンが予期される認可トークンにマッチした場合に、要求をサービスすることができる。そうでない場合は、要求を拒否することができる。
【0034】
コンピューティングサービスインターフェース260はまた、コンピューティングリソースから情報を受信するために使用することもできる。例えば、コンピューティングサービスインターフェース260は、コンピューティングリソースでインスタンスが作成、再構成、または使用されるときに、コンピューティングリソースから状態更新を受信することができる。具体的な一例として、コンピューティングサービスインターフェース260には、構成データがコンピューティングリソースに成功裏に展開されたかどうかを通知することができる。例えば、構成データは、ハードウェアの故障のため、または他の理由で、展開に失敗する場合がある。コンピューティングサービスインターフェース260は、論理ライブラリ管理ブロック240と併せて、論理リポジトリデータベース250に記憶された異なる設計に関する使用状況データ、失敗レポート、および/または統計を維持することができる。例えば、統計は、要求をプロバイダインターフェース210または顧客/開発者インターフェース220で受信したときに、プロバイダまたはユーザのオンデマンドで、計算サービス提供することができる。
【0035】
図3は、論理リポジトリサービスによって行うことができるような、論理設計を摂取し、構成データを生成する、例示的なフロー300を例示する。摂取310中に、アプリケーション論理設計および/またはホスト論理設計を、論理リポジトリサービスによって受信することができる。論理設計は、IEEE1735−2014暗号化標準などを使用することによって、暗号化することができる。論理設計は、フロー300の摂取310中に、または後のステップ中に復号することができる。
【0036】
1つの例として、アプリケーション論理およびホスト論理のソースコードは、摂取310中に受信することができ、アプリケーション論理およびホスト論理は、単一の設計に組み合わせて、論理合成320のソースコードを生成することができる。論理合成320は、標的技術に基づいて、行動および/または構造RTLで書かれた仕様をネットリストに変換するために使用することができる。例えば、論理合成320は、異なるアーキテクチャを有するFPGA、製造プロセス、容量、および/または製造業者などの、異なる構成可能な論理技術を標的にすることができる。ネットリストは、いくつかの、構成可能な論理ブロック、非構成可能なブロック(例えば、ハードマクロ)、および異なるブロック間の接続を含むことができる。ネットリストは、ネットリストのブロックが列挙されるが、標的技術内に未配置である、論理ネットリストとすることができる。ネットリストは、配置およびルーティング330への入力として使用することができる。配置およびルーティング330は、ネットリストからの構成可能なブロックのインスタンスおよびルーティング情報をとることができ、ブロックを物理デバイスにマッピングすることができる。配置およびルーティング設計は、ネットリストの論理構成要素の各々の物理的マッピングを含むことができる。追加的または代替的に、配置およびルーティング330は、ネットリストが設計のタイミング制約および物理デバイスの物理的制約に基づいて修正されるようにタイミング駆動することができる。配置およびルーティング330の出力は、ビットストリームイメージなどの構成データとすることができる。構成データは、異なる構成要素に分割すること、または分けることができる。例えば、構成データは、静的ホスト論理、再構成可能なホスト論理、および/または再構成可能なアプリケーション論理と関連付けられたデータを含むことができる。異なる構成要素は、オーバーラップまたは非オーバーラップとすることができる。例えば、静的ホスト論理は、再構成可能なアプリケーション論理によって使用される領域を通してルーティングすることができる。したがって、再構成可能なアプリケーション論理の部分的なビットストリームはまた、静的ホスト論理の一部分も含むことができる。
【0037】
別の例として、アプリケーション論理および/またはホスト論理のネットリストは、摂取310中に、受信することができる。具体的な一例として、ネットリストは、アプリケーション論理のために受信することができ、ソースコードは、ホスト論理のために受信することができる。この事例において、ホスト論理は、論理合成320と合成して、ホスト論理のネットリストを生成することができ、ホストおよびアプリケーション論理のネットリストは、単一の設計に組み合わせて、配置およびルーティング330のネットリストを生成することができる。別の例として、アプリケーション論理および/またはホスト論理の構成データは、摂取310中に受信することができる。例えば、アプリケーション論理設計の部分ビットストリームを受信することができ、またはホストおよびアプリケーション論理設計のフルビットストリームを受信することができる。
【0038】
論理リポジトリサービスはまた、ライブラリ管理および検証340機能も含むことができる。例えば、フロー300の各ステップは、データベースに記憶することができる中間データおよび/またはファイルを生成することができる。特に、データベースは、開発者が、開発者と関連付けられたソースコード、レポート、および構成データにアクセスすることができるように、開発者のアカウント識別子によってインデックスを付けることができる。1つの例として、アプリケーション論理のためのソースコードは、摂取310中に、開発者のアカウント識別子と関連付けることができる。ソースコードは、開発者によって提供される、または摂取310中に生成されるバージョン識別子と関連付けることができる。複数のソースコードバージョンを、アカウントのために維持し、データベース内に記憶することができる。アプリケーション論理の各バージョンは、ホスト論理のバージョンと関連付けることができる。構成データの各バージョンは、アプリケーション論理の特定のバージョンおよびホスト論理の特定のバージョンに対応することができる。ビットストリームまたはCHI識別子は、構成データが生成されるときに作成することができ、ソースコード、ネットリスト、およびレポートをCHI識別子によってラベル付けすることができる。論理設計に関する情報を提供するために、フロー300の種々のステップでレポートを生成することができる。例えば、論理合成320によって1つ以上の合成レポートを生成することができ、配置およびルーティング330によって1つ以上のレポートを生成することができる。1つの例として、論理設計の利用度に関する情報を提供するために、実装形態レポートを生成することができる。特に、設計を適切なインスタンスタイプで実施することができるように、設計によって使用されるハードウェアリソースのパーセンテージを提供することができる。
【0039】
別の例として、タイミングレポートは、設計が構成可能なハードウェアのタイミング仕様を満たすかどうかを示す、静的タイミング解析を提供することができる。論理合成320、ならびに配置およびルーティング330は、論理合成320、ならびに配置およびルーティング330の各稼働が異なる結果を提供することができるように、ツールの各稼働によって変動する、ランダムな非決定論的ステップを含むことができる。したがって、開発者が、(タイミングレポートによって示されるように)タイミングを満たさない設計を有する場合、開発者は、論理合成320、ならびに/または配置およびルーティング330を再稼働することを所望する場合がある。この様態において、開発者は、同じ設計に対して複数の合成を実行し、ルーティングを稼働させることによって、自分の設計を繰り返すことができる。合成ならびに配置およびルーティング稼働のうちの1つが、構成可能なハードウェア論理のタイミング仕様を満たす結果をもたらしたときに、開発者は、その稼働を生産稼働としてマークすることができる。例えば、開発者は、その稼働から生産まで生成されるCHIの状態を変更することができ、また、ビットストリーム識別子を、生成された構成データと関連付けることができる。
【0040】
ライブラリ管理および検証340機能は、開発および展開ステップ中の種々の時点で、構成可能な論理についてユーザ設計を有効にすることができる。1つの例として、検証340は、ホスト論理がアプリケーション論理の機能を限定することができるように、シミュレーションを行って、アプリケーション論理がホスト論理と互換性があるかどうかを検証することを含むことができる。検証340は、アプリケーション論理のネットリストを比較して、アプリケーション論理が、構成可能なハードウェアプラットフォームの容量および領域制限を満たすことを確認することを含むことができる。例えば、アプリケーション論理は、1つ以上の再構成可能な領域内でだけ論理を使用するように制限することができる。アプリケーション論理がそれらの領域外にある場合、アプリケーション論理を拒否することができる。加えて、アプリケーション論理は、ビットストリームとして摂取することができ、ビットストリームは、検証340によって有効にすることができる。ビットストリームの検証は、ホスト論理に対応する摂取されたビットストリームデータの一部分を、ホスト論理のベースラインバージョンと比較して、ホスト論理が壊されていないことを確認することを含むことができる。検証ブロック340からの出力は、有効な構成データとすることができる。
【0041】
図4は、本明細書で説明される実施形態を使用することができる1つの環境を例示する、ネットワークベースの計算サービスプロバイダ400のコンピューティングシステム図である。背景として、計算サービスプロバイダ400(すなわち、クラウドプロバイダ)は、エンドレシピエントのコミュニティへの貢献として、コンピューティングおよび記憶容量の送達が可能である。例示的な一実施形態において、計算サービスプロバイダは、組織によって、またはその組織に代わって編成するために確立することができる。すなわち、計算サービスプロバイダ400は、「プライベートなクラウド環境」を提供することができる。別の実施形態において、計算サービスプロバイダ400は、マルチテナント環境をサポートし、複数の顧客は、独立して動作する(すなわち、パブリッククラウド環境)。一般に言えば、計算サービスプロバイダ400は、次のモデル、すなわち、サービスとしてのインフラストラクチャ(「IaaS」)、サービスとしてのプラットフォーム(「PaaS」)、および/またはサービスとしてのソフトウェア(「SaaS」)を提供することができる。他のモデルを提供することができる。IaaSモデルの場合、計算サービスプロバイダ400は、物理または仮想マシン、および他のリソースとして、コンピュータを提供することができる。仮想マシンは、下でさらに説明するように、ハイパーバイザによって、ゲストとして稼働させることができる。PaaSモデルは、オペレーティングシステム、プログラミング言語実行環境、データベース、およびウェブサーバを含むことができる、コンピューティングプラットフォームを送達する。アプリケーション開発者らは、基礎をなすハードウェアおよびソフトウェアを購入および管理するためのコストを伴うことなく、計算サービスプロバイダプラットフォーム上で該開発者らのソフトウェアソリューションを開発し、稼働させることができる。加えて、アプリケーション開発者らは、計算サービスプロバイダプラットフォームの構成可能なハードウェア上で該開発者らのハードウェアソリューションを開発および稼働させることができる。SaaSモデルは、計算サービスプロバイダにおけるアプリケーションソフトウェアのインストールおよび動作を可能にする。いくつかの実施形態において、エンドユーザは、ウェブブラウザまたは他の軽量のクライアントアプリケーションを稼働させる、デスクトップコンピュータ、ラップトップ、タブレット、スマートフォンなどといったネットワーク化された顧客デバイスを使用して、計算サービスプロバイダ400にアクセスする。当業者は、計算サービスプロバイダ400を「クラウド」環境として説明することができることを認識するであろう。
【0042】
特定の例示される計算サービスプロバイダ400は、複数のサーバコンピュータ402A〜402Cを含む。3台のサーバコンピュータだけが示されるが、任意の数を使用することができ、大規模施設は、何千台ものサーバコンピュータを含むことができる。サーバコンピュータ402A〜402Cは、ソフトウェアインスタンス406A〜406Cを実行するためのコンピューティングリソースを提供することができる。1つの実施形態において、ソフトウェアインスタンス406A〜406Cは、仮想マシンである。当技術分野で知られているように、仮想マシンは、物理マシンのようにアプリケーションを実行するマシン(すなわち、コンピュータ)のソフトウェア実装のインスタンスである。仮想マシンの例において、サーバ402A〜402Cの各々は、ハイパーバイザ408、または単一のサーバ上で複数のソフトウェアインスタンス406の実行を可能にするように構成された別のタイプのプログラムを実行するように構成することができる。加えて、ソフトウェアインスタンス406の各々は、1つ以上のアプリケーションを実行するように構成することができる。
【0043】
本明細書に開示される実施形態は、主に仮想マシンの文脈で説明されるが、他のタイプのインスタンスを、本明細書に開示される概念および技術と共に利用することができることを理解されたい。例えば、本明細書に開示される技術は、記憶リソース、データ通信リソース、および他のタイプのコンピューティングリソースと共に利用することができる。本明細書に開示される実施形態はまた、仮想マシンインスタンスを利用することなく、コンピュータシステム上でアプリケーションの全てまたは一部分を直接実行することができる。
【0044】
サーバコンピュータ402A〜402Cは、異なるハードウェアリソースまたはインスタンスタイプの異種の集合体を含むことができる。ハードウェアインスタンスタイプのいくつかは、計算サービスプロバイダ400のユーザによって少なくとも部分的に構成可能である、構成可能なハードウェアを含むことができる。インスタンスタイプの1つの例は、構成可能なハードウェア404Aと通信するサーバコンピュータ402Aを含むことができる。具体的には、サーバコンピュータ402Aおよび構成可能なハードウェア404Aは、PCIeなどのローカル相互接続を通じて通信することができる。インスタンスタイプの別の例は、サーバコンピュータ402Bと、構成可能なハードウェア404Bと、を含むことができる。例えば、構成可能な論理404Bは、マルチチップモジュール内に、またはサーバコンピュータ402BのCPUと同じダイ上に集積することができる。インスタンスタイプのさらに別の例は、任意の構成可能なハードウェアを伴わないサーバコンピュータ402Cを含むことができる。したがって、構成可能な論理を伴う、および伴わないハードウェアインスタンスタイプは、計算サービスプロバイダ400のリソース内に存在させることができる。
【0045】
1つ以上のサーバコンピュータ420は、サーバコンピュータ402およびソフトウェアインスタンス406の動作を管理するためのソフトウェア構成要素を実行するために予約することができる。例えば、サーバコンピュータ420は、管理構成要素422を実行することができる。顧客は、管理構成要素422にアクセスして、顧客によって購入されたソフトウェアインスタンス406の動作の種々の態様を構成することができる。例えば、顧客は、インスタンスを購入、レンタル、またはリースして、ソフトウェアインスタンスの構成を変更することができる。ソフトウェアインスタンスの各々の構成情報は、ネットワークアタッチトストレージ440上のマシンイメージ(MI)442として記憶することができる。具体的には、MI442は、VMインスタンスを起動するために使用される情報を記述する。MIは、インスタンス(例えば、OSおよびアプリケーション)のルートボリュームのテンプレート、どの顧客アカウントがMIを使用することができるのかを制御するための起動許可、およびインスタンスが起動されたときにインスタンスにアタッチするボリュームを指定するブロックデバイスマッピングを含むことができる。MIはまた、インスタンスが起動されたときに構成可能なハードウェア404にロードされる構成可能なハードウェアイメージ(CHI)442の参照も含むことができる。CHIは、構成可能なハードウェア404の少なくとも一部分をプログラムまたは構成するための構成データを含む。
【0046】
顧客はまた、要望に応じて、購入したインスタンスをスケーリングする方法に関する設定も指定することができる。管理構成要素は、顧客ポリシーを実行するために、ポリシー文書をさらに含むことができる。自動スケーリング構成要素424は、顧客によって定義されたルールに基づいて、インスタンス406をスケーリングすることができる。1つの実施形態において、自動スケーリング構成要素424は、顧客が、いつ新しいインスタンスをインスタンス化するべきなのかを決定する際に使用するためのスケールアップルール、およびいつ既存のインスタンスを終了するべきなのかを決定する際に使用するためのスケールダウンルールを指定することを可能にする。自動スケーリング構成要素424は、異なるサーバコンピュータ402または他のコンピューティングデバイスで実行するいくつかの副構成要素で構成することができる。自動スケーリング構成要素424は、内部管理ネットワークを通じて、利用可能なコンピューティングリソースを監視すること、および必要に基づいて、利用可能なリソースを修正することができる。
【0047】
展開構成要素426は、コンピューティングリソースの新しいインスタンス406を展開する際に顧客を支援するために使用することができる。展開構成要素は、誰がアカウントの所有者であるのか、クレジットカード情報、所有者の国などといった、インスタンスと関連付けられたアカウント情報へのアクセスを有することができる。展開構成要素426は、顧客から、新しいインスタンス406を構成するべき方法を記述するデータを含む構成を受信することができる。例えば、構成は、新しいインスタンス406でインストールされる1つ以上のアプリケーションを指定すること、新しいインスタンス406を構成するために実行されるべきスクリプトおよび/または他のタイプのコードを提供すること、アプリケーションキャッシュが準備するべき方法を指定するキャッシュ論理を提供すること、ならびに他のタイプの情報を提供することができる。展開構成要素426は、顧客が提供する構成およびキャッシュ論理を利用して、新しいインスタンス406を構成、準備、および起動することができる。構成、キャッシュ論理、および他の情報は、管理構成要素422を使用する顧客によって、またはこの情報を展開構成要素426に直接提供することによって指定することができる。インスタンスマネージャは、展開構成要素の一部とみなすことができる。
【0048】
顧客アカウント情報428は、マルチテナント環境の顧客と関連付けられた任意の所望の情報を含むことができる。例えば、顧客アカウント情報としては、顧客の一意の識別子、顧客の住所、課金情報、ライセンス情報、インスタンスを起動するためのカスタム化パラメータ、スケジュール情報、自動スケーリングパラメータ、アカウントにアクセスするために使用した以前のIPアドレス、顧客がアクセス可能なMIおよびCHIのリストなどを挙げることができる。
【0049】
1つ以上のサーバコンピュータ430は、サーバコンピュータ402の構成可能なハードウェア404への構成データのダウンロードを管理するためのソフトウェア構成要素を実行するために予約することができる。例えば、サーバコンピュータ430は、摂取構成要素432と、ライブラリ管理構成要素434と、ダウンロード構成要素436と、を備える、論理リポジトリサービスを実行することができる。摂取構成要素432は、ホスト論理およびアプリケーション論理設計または仕様を受信すること、ならびに構成可能なハードウェア404を構成するために使用することができる構成データを生成することができる。ライブラリ管理構成要素434は、論理リポジトリサービスと関連付けられたソースコード、ユーザ情報、および構成データを管理するために使用することができる。例えば、ライブラリ管理構成要素434は、ユーザの設計によって生成された構成データを、ネットワークアタッチトストレージ440上のユーザによって指定された場所に記憶するために使用することができる。特に、構成データは、ネットワークアタッチトストレージ440上の構成可能なハードウェアイメージ442内に記憶することができる。加えて、ライブラリ管理構成要素434は、(アプリケーション論理およびホスト論理のための仕様のなどの)入力ファイル、ならびに論理設計および/または論理リポジトリサービスのユーザに関するメタデータのバージョニングおよび記憶を管理することができる。ライブラリ管理構成要素434は、例えば、ユーザ識別子、インスタンスタイプ、マーケットプレイス識別子、マシンイメージ識別子、および構成可能なハードウェア識別子などの1つ以上の特性によって、生成された構成データにインデックスを付けることができる。ダウンロード構成要素436は、構成データの要求を認証し、要求が認証されたときに構成データを要求者に伝送するために使用することができる。例えば、サーバコンピュータ402A〜B上のエージェントは、構成可能なハードウェア404を使用するインスタンス406を起動したときに、要求をダウンロード構成要素436に送信することができる。別の例として、サーバコンピュータ402A〜B上のエージェントは、構成可能なハードウェア404が動作している間に構成可能なハードウェア404を部分的に再構成するようにインスタンス406が要求したときに、要求をダウンロード構成要素436に送信することができる。
【0050】
ネットワークアタッチトストレージ(NAS)440は、記憶空間およびNAS440に記憶されるファイルへのアクセスを提供するために使用することができる。例えば、NAS440は、ネットワークファイルシステム(NFS)などのネットワークファイル共有プロトコルを使用して要求を処理するために使用される、1つ以上のサーバコンピュータを含むことができる。NAS440は、リムーバブル媒体または非リムーバブル媒体を含むことができ、該媒体としては、磁気ディスク、ストレージエリアネットワーク(SAN)、独立したディスクの冗長アレイ(RAID)、磁気テープもしくはカセット、CD−ROM、DVD、または情報を非一時的な方式で記憶するために使用することができ、また、ネットワーク450を通じてアクセスすることができる任意の他の媒体が挙げられる。
【0051】
ネットワーク450は、サーバコンピュータ402A〜402C、サーバコンピュータ420および430、ならびに記憶装置(ストレージ)440を相互接続するために利用することができる。ネットワーク450は、ローカルエリアネットワーク(LAN)とすることができ、また、エンドユーザが計算サービスプロバイダ400にアクセスすることができるように、ワイドエリアネットワーク(WAN)460に接続することができる。
図4に例示されるネットワークトポロジが簡略化されたものであること、およびはるかに多くのネットワークおよびネットワーキングデバイスを利用して、本明細書で開示される種々のコンピューティングシステムを相互接続することができることを認識されたい。
【0052】
図5は、構成可能なハードウェアプラットフォーム510を構成し、そこにインターフェースするための制御プレーンおよびデータプレーンの構成要素を含む、例示的なシステム500のさらなる詳細を示す。制御プレーンは、構成可能なハードウェアプラットフォーム510を初期化、監視、再構成、および分解するための機能を含む。データプレーンは、ユーザのアプリケーションと構成可能なハードウェアプラットフォーム510との間で通信するための機能を含む。制御プレーンは、より高い特権レベルを有するユーザまたはサービスによってアクセス可能とすることができ、データプレーンは、より低い特権レベルを有するユーザまたはサービスによってアクセス可能とすることができる。1つの実施形態において、構成可能なハードウェアプラットフォーム510は、PCIeなどのローカル相互接続を使用して、サーバコンピュータ520に接続される。代替の一実施形態において、構成可能なハードウェアプラットフォーム510は、サーバコンピュータ520のハードウェア内に統合することができる。1つの例として、サーバコンピュータ520は、
図4の計算サービスプロバイダ400の複数のサーバコンピュータ402A〜402Bのうちの1台とすることができる。
【0053】
サーバコンピュータ520は、1つ以上のCPU、メモリ、記憶デバイス、相互接続ハードウェアなどを含む、基礎をなすハードウェア522を有する。ハードウェア522の上側で稼働する層は、ハイパーバイザまたはカーネル層524である。ハイパーバイザまたはカーネル層は、タイプ1またはタイプ2ハイパーバイザとして分類することができる。タイプ1ハイパーバイザは、ホストハードウェア522上で直接稼働して、ハードウェアを制御し、また、ゲストオペレーティングシステムを管理する。タイプ2ハイパーバイザは、従来のオペレーティングシステム環境内で稼働する。したがって、タイプ2環境において、ハイパーバイザは、オペレーティングシステム上で稼働する別個の層とすることができ、オペレーティングシステムは、システムハードウェアと相互作用する。異なるタイプのハイパーバイザとしては、Xenベースのもの、Hyper−V、ESXi/ESX、Linux(登録商標)などが挙げられるが、他のハイパーバイザを使用することができる。管理パーティション530(Xenハイパーバイザのドメイン0など)は、ハイパーバイザの一部とすること、またはそこから分離することができ、また一般に、ハードウェア522にアクセスするために必要なデバイスドライバを含む。ホストパーティション540は、ハイパーバイザ内の隔離の論理ユニットである。各ユーザパーティション540には、ハードウェア層のメモリ、CPU割り当て、記憶装置、相互接続帯域幅などのそれ自体の部分を割り当てることができる。加えて、各ユーザパーティション540は、仮想マシンおよびそれ自体のゲストオペレーティングシステムを含むことができる。このように、各ユーザパーティション540は、他のパーティションから独立してそれ自体の仮想マシンをサポートするように設計された抽象的な容量部分である。
【0054】
管理パーティション530は、ユーザパーティション540および構成可能なハードウェアプラットフォーム510のための管理サービスを行うために使用することができる。管理パーティション530は、(展開サービス、論理リポジトリサービス550、およびヘルス管理サービスなどの)計算サービスプロバイダのウェブサービス、ユーザパーティション540、および構成可能なハードウェアプラットフォーム510と通信することができる。管理サービスは、ユーザパーティション540を起動および終了するための、ならびに構成可能なハードウェアプラットフォーム510の構成可能な論理の構成、再構成、および分解を行うためのサービスを含むことができる。具体的な一例として、管理パーティション530は、(
図4の展開構成要素426などの)展開サービスからの要求に応じて、新しいユーザパーティション540を起動することができる。要求は、MIおよび/またはCHIの参照を含むことができる。MIは、ユーザパーティション540にロードするプログラムおよびドライバを指定することができ、CHIは、構成可能なハードウェアプラットフォーム510にロードする構成データを指定することができる。管理パーティション530は、MIと関連付けられた情報に基づいて、ユーザパーティション540を初期化することができ、また、CHIと関連付けられた構成データを構成可能なハードウェアプラットフォーム510にロードさせることができる。ユーザパーティション540および構成可能なハードウェアプラットフォーム510の初期化は、インスタンスを動作可能にするまでの時間を低減させることができるように、同時に起こり得る。
【0055】
管理パーティション530は、構成可能なハードウェアプラットフォーム510のプログラミングおよび監視を管理するために使用することができる。この目的のために管理パーティション530を使用することによって、構成データおよび構成可能なハードウェアプラットフォーム510の構成ポートへのアクセスを制限することができる。具体的には、より低い特権レベルを有するユーザは、管理パーティション530に直接アクセスすることが制限され得る。したがって、計算サービスプロバイダのインフラストラクチャを使用することなく、構成可能な論理を修正することができず、構成可能な論理をプログラムするために使用されるいかなる第三者IPも、未許可のユーザによって閲覧されることから保護することができる。
【0056】
管理パーティション530は、構成可能なハードウェアプラットフォーム510を構成し、そこにインターフェースする制御プレーンのためのソフトウェアスタックを含むことができる。制御プレーンソフトウェアスタックは、(論理リポジトリサービス550およびヘルス監視サービスなどの)ウェブサービス、構成可能なハードウェアプラットフォーム510、およびユーザパーティション540と通信するための、構成可能な論理(CL)アプリケーション管理層532を含むことができる。例えば、CLアプリケーション管理層532は、ユーザパーティション540の起動に応じて、構成データをフェッチする要求を論理リポジトリサービス550に発行することができる。CLアプリケーション管理層532は、ハードウェア522の共有されたメモリを使用して、またはサーバコンピュータ520を構成可能なハードウェアプラットフォーム510に接続する相互接続を通じてパーティション間メッセージを送信および受信することによって、ユーザパーティション540と通信することができる。具体的には、CLアプリケーション管理層532は、構成可能なハードウェアプラットフォーム510のメールボックス論理511に対するメッセージの読み出しおよび書き込みを行うことができる。メッセージは、構成可能なハードウェアプラットフォーム510を再構成または分解する、エンドユーザアプリケーション541による要求を含むことができる。CLアプリケーション管理層532は、構成可能なハードウェアプラットフォーム510を再構成する要求に応じて、構成データをフェッチする要求を論理リポジトリサービス550に発行することができる。CLアプリケーション管理層532は、構成可能なハードウェアプラットフォーム510を分解する要求に応じて、分解シーケンスを開始することができる。CLアプリケーション管理層532は、ユーザパーティション540への通信パスが機能しているかどうかを判定するために、ウォッチドッグ関連のアクティビティを行うことができる。
【0057】
制御プレーンソフトウェアスタックは、構成データを構成可能なハードウェアプラットフォーム510にロードすることができるように、構成可能なハードウェアプラットフォーム510の構成ポート512(例えば、構成アクセスポート)にアクセスするためのCL構成層534を含むことができる。例えば、CL構成層534は、構成可能なハードウェアプラットフォーム510の完全なまたは部分的な構成を行うために、1つまたは複数のコマンドを構成ポート512に転送することができる。CL構成層534は、構成データに従って構成可能な論理をプログラムすることができるように、構成データ(例えば、ビットストリーム)を構成ポート512に送信することができる。構成データは、ホスト論理および/またはアプリケーション論理を指定することができる。
【0058】
制御プレーンソフトウェアスタックは、サーバコンピュータ520を構成可能なハードウェアプラットフォーム510に接続する物理的相互接続を通じて通信するための管理ドライバ536を含むことができる。管理ドライバ536は、物理的相互接続を通じて伝送するための管理パーティション530に由来するコマンド、要求、応答、メッセージ、およびデータをカプセル化することができる。加えて、管理ドライバ536は、物理的相互接続を通じて管理パーティション530に送信されたコマンド、要求、応答、メッセージおよびデータをカプセル化解除することができる。具体的には、管理ドライバ536は、構成可能なハードウェアプラットフォーム510の管理機能513と通信することができる。例えば、管理機能513は、物理的相互接続に接続されたデバイスの列挙中にアドレス範囲にマッピングされた、物理または仮想機能とすることができる。管理ドライバ536は、管理機能513に割り当てられたアドレス範囲にトランザクションをアドレッシングすることによって、管理機能513と通信することができる。
【0059】
制御プレーンソフトウェアスタックは、CL管理および監視層538を含むことができる。CL管理および監視層538は、物理的相互接続で起こるトランザクションを監視および分析して、構成可能なハードウェアプラットフォーム510のヘルスを決定すること、および/または構成可能なハードウェアプラットフォーム510の使用状況特性を決定することができる。例えば、CL管理および監視層538は、構成データが構成可能なハードウェアプラットフォーム510に成功裏に展開されて、展開の状態を示すレポートを論理リポジトリサービス550に伝送させることができるかどうかを監視することができる。
【0060】
構成可能なハードウェアプラットフォーム510は、非構成可能なハードマクロと、構成可能な論理と、を含むことができる。ハードマクロは、入力/出力ブロック(例えば、シリアライザおよびデシリアライザ(SERDES)ブロックおよびギガビットトランシーバ)、アナログ−デジタル変換器、メモリ制御ブロック、試験アクセスポート、および構成ポート512などの、構成可能なハードウェアプラットフォーム510内の特定の機能を行うことができる。構成可能な論理は、構成データを構成可能なハードウェアプラットフォーム510にロードすることによってプログラムすること、または構成することができる。例えば、構成ポート512は、構成データをロードするために使用することができる。1つの例として、構成データは、構成ポート512によってアクセス可能な(フラッシュメモリなどの)メモリに記憶することができ、構成データは、構成可能なハードウェアプラットフォーム510の(電源投入シーケンス中などの)初期化シーケンス中に自動的にロードすることができる。加えて、構成ポート512は、構成可能なハードウェアプラットフォーム510内のオフチッププロセッサまたはインターフェースを使用してアクセスすることができる。
【0061】
構成可能な論理は、ホスト論理およびアプリケーション論理を含むようにプログラムすることができる。ホスト論理は、エンドユーザがハードマクロへの、および物理的相互接続への限定されたアクセスを有するように、エンドユーザからハードマクロの少なくともいくつかのインターフェースをシールドすることができる。例えば、ホスト論理は、メールボックス論理511と、構成ポート512と、管理機能513と、ホストインターフェース514と、アプリケーション機能515と、を含むことができる。エンドユーザは、構成可能なアプリケーション論理516を、構成可能なハードウェアプラットフォーム510にロードさせることができ、また、(アプリケーション機能515を介して)ユーザパーティション540からの構成可能なアプリケーション論理516と通信することができる。
【0062】
ホストインターフェース論理514は、物理的相互接続にシグナリングし、通信プロトコルを実装するための回路(例えば、ハードマクロおよび/または構成可能な論理)を含むことができる。通信プロトコルは、相互接続を通じて通信するためのルールおよびメッセージフォーマットを指定する。アプリケーション機能515は、ユーザパーティション540のドライバと通信するために使用することができる。具体的には、アプリケーション機能515は、物理的相互接続に接続されたデバイスの列挙中に、アドレス範囲にマッピングされた、物理または仮想機能とすることができる。アプリケーションドライバは、アプリケーション機能515に割り当てられたアドレス範囲にトランザクションをアドレッシングすることによって、アプリケーション機能515と通信することができる。具体的には、アプリケーション機能515は、アプリケーション論理管理ドライバ542と通信して、制御プレーンを通じてコマンド、要求、応答、メッセージ、およびデータを交換することができる。アプリケーション機能515は、アプリケーション論理データプレーンドライバ543と通信して、データプレーンを通じてコマンド、要求、応答、メッセージ、およびデータを交換することができる。
【0063】
メールボックス論理511は、1つ以上のバッファと、1つ以上の制御レジスタと、を含むことができる。例えば、所与の制御レジスタは、特定のバッファと関連付けることができ、レジスタは、管理パーティション530とユーザパーティション540とを同期させるために、セマフォとして使用することができる。具体的な一例として、パーティションが制御レジスタの値を修正することができる場合は、パーティションをバッファに書き込むことができる。バッファおよび制御レジスタは、管理機能513およびアプリケーション機能515からアクセス可能とすることができる。メッセージがバッファに書き込まれるときに、メッセージが終了していることを示すために、別の制御レジスタ(例えば、メッセージ準備完了レジスタ)に書き込むことができる。メッセージ準備完了レジスタは、メッセージが存在するかどうかを判定するために、パーティションによってポーリングすることができ、またはメッセージ準備完了レジスタが書き込まれることに応じて、割り込みを生成し、パーティションに伝送することができる。
【0064】
ユーザパーティション540は、エンドユーザアプリケーション540を構成可能なハードウェアプラットフォーム510にインターフェースするためのソフトウェアスタックを含むことができる。アプリケーションソフトウェアスタックは、制御プレーンおよびデータプレーンと通信するための機能を含むことができる。具体的には、アプリケーションソフトウェアスタックは、構成可能なハードウェアプラットフォーム510へのアクセスをエンドユーザアプリケーション540に提供するためのCL−アプリケーションAPI544を含むことができる。CL−アプリケーションAPI544は、構成可能なハードウェアプラットフォーム510および管理パーティション530と通信するための方法または機能のライブラリを含むことができる。例えば、エンドユーザアプリケーション541は、CL−アプリケーションAPI544のAPIを使用して、コマンドまたはデータを構成可能なアプリケーション論理516に送信することができる。特に、CL−アプリケーションAPI544のAPIは、アプリケーション論理(AL)データプレーンドライバ543とインターフェースすることができ、これは、構成可能なアプリケーション論理516と通信することができるアプリケーション機能515を標的とするトランザクションを生成することができる。この様態で、エンドユーザアプリケーション541は、構成可能なアプリケーション論理516に、データを受信させ、処理させ、および/または該データで応答させて、潜在的に、エンドユーザアプリケーション541のタスクを加速することができる。別の例として、エンドユーザアプリケーション541は、CL−アプリケーションAPI544のAPIを使用することによって、コマンドまたはデータを管理パーティション530に送信することができる。特に、CL−アプリケーションAPI544のAPIは、AL管理ドライバ542とインターフェースすることができ、これは、メールボックス論理511と通信することができるアプリケーション機能515を標的とするトランザクションを生成することができる。この様態で、エンドユーザアプリケーション541は、管理パーティション530に、構成可能なハードウェアプラットフォーム510に関する動作可能またはメタデータを提供させること、および/または構成可能なアプリケーション論理516を再構成するように要求させることができる。
【0065】
アプリケーションソフトウェアスタックは、ハイパーバイザまたはカーネル524と併せて、エンドユーザアプリケーション541によって物理的相互接続を通じて行うことが可能な動作を制限するために使用することができる。例えば、計算サービスプロバイダは、(ファイルをマシンイメージと関連付けることなどによって)AL管理ドライバ542、ALデータプレーンドライバ543、およびCL−アプリケーションAPI544を提供することができる。これらの構成要素は、エンドユーザよりも高い特権レベルを有するユーザおよびサービスだけがファイルに書き込むことを許可することによって、改変から保護することができる。AL管理ドライバ542およびALデータプレーンドライバ543は、アプリケーション機能515のアドレス範囲内のアドレスだけを使用するように制限することができる。加えて、入力/出力メモリ管理ユニット(I/O MMU)は、相互接続トランザクションを、アプリケーション機能515または管理機能513のアドレス範囲内にあるように制限することができる。
【0066】
図6は、例えばマルチテナント環境において、構成可能なハードウェアを構成またはプログラムするために使用することができる、構成データを管理するための例示的な方法600のフロー図である。1つの例として、方法600は、
図1〜3を参照して説明されるような、論理リポジトリサービスを使用して実装することができる。
【0067】
610において、構成可能なハードウェアのアプリケーション論理の仕様を使用して、構成可能なハードウェアの構成データを生成する第1の要求を受信することができる。アプリケーション論理の仕様は、アプリケーション論理に対応するソースコード(例えば、HDLまたはRTLソースコード)、ネットリスト、および/または構成データを含むことができる。要求は、構成データと関連付けられたインスタンスタイプを指定することができる。要求は、構成データにアクセスすることができるユーザを示すアクセスリストを含むことができる。要求は、アプリケーション論理と共に使用するホスト論理のバージョンを含むことができる。
【0068】
620において、構成可能なハードウェアの構成データを生成することができる。構成データを生成することは、アプリケーション論理が計算サービスプロバイダの1つ以上の基準に従うことを検証すること、アプリケーション論理をホスト論理ラッパーに組み込むこと、アプリケーション論理を合成すること、ならびに/またはアプリケーション論理を配置およびルーティングすること、を含むことができる。構成データは、アプリケーション論理および/またはホスト論理を構成可能なハードウェアに実装するためのデータを含むことができる。構成データは、構成可能なハードウェアの動作中に1回以上構成要素を実装するためのデータを含むことができる。例えば、構成データは、(構成可能なハードウェアの初期化シーケンス中にロードされる)静的論理構成要素と、(構成可能なハードウェアの初期化シーケンスの後にロードされる)1つ以上の再構成可能な構成要素と、を含むことができる。異なる再構成可能な構成要素は、構成可能なハードウェアのオーバーラップまたは非オーバーラップ領域(重複しない領域)と関連付けることができる。構成データは、ホスト論理構成要素および/またはアプリケーション論理構成要素を含むことができる。構成データは、1つ以上のフォーマットで生成することができる。1つの例として、構成データは、フルまたは部分ビットストリームとすることができる。また、構成データと関連付けられた情報も生成することができる。例えば、ログファイル、実装レポート、およびタイミングレポートは、構成データを伴って生成することができる。実装およびタイミングレポートは、構成可能なハードウェアの設計を修正、再合成、または再配置およびルーティングするために、開発者または設計システムによって使用することができる。
【0069】
630において、構成可能なハードウェアを備えるホストサーバコンピュータに構成データをダウンロードする第2の要求を受信することができる。例えば、第2の要求は、新しい仮想マシンインスタンスが起動されたときに、(ホスト論理設計などの)静的論理を、構成可能なハードウェアにダウンロードすることであり得る。別の例として、要求は、構成可能なハードウェアプラットフォームを実行した後に、再構成可能な論理を、構成可能なハードウェアにダウンロードすることであり得る。特に、要求は、アプリケーション論理設計に対応する構成データに関するものであり得る。第2の要求は、構成データにアクセスする許可をユーザに与えるための情報を含むことができる。
【0070】
640において、構成可能なハードウェアがホスト論理およびアプリケーション論理を伴って構成されるように、第2の要求に応じて、構成データをホストサーバコンピュータに伝送することができる。特に、構成データは、ホストサーバコンピュータの管理パーティションに伝送することができ、管理パーティションは、構成データを、構成可能なハードウェアにロードさせることができる。1つの例として、構成データは、要求側が構成データへのアクセスを有することが検証された後に伝送することができる。
【0071】
650において、ハードウェア参照識別子を仮想マシン識別子と関連付けることができる。例えば、(630からの)第2の要求は、ダウンロードする構成データを識別するための仮想マシン識別子を含むことができる。この様態で、仮想マシンイメージ識別子を使用した仮想マシンの展開は、仮想マシンがインスタンス化されたときに、ハードウェア参照識別子と関連付けられた構成データをダウンロードするよう自動的に要求することができる。
【0072】
図7は、例えばマルチテナント環境において、構成可能なハードウェアを構成またはプログラムするために使用することができる、構成データを管理するための例示的な方法700のフロー図である。例えば、方法700は、
図1〜3を参照して上で説明されるような、論理リポジトリサービスによって実装することができる。
【0073】
710において、構成可能なハードウェアのアプリケーション論理の第1の仕様を摂取することができる。加えて、構成可能なハードウェアのホスト論理の第2の仕様を摂取することができる。第1および第2の仕様は、構成可能なハードウェアの構成データを生成するために使用することができる。例えば、仕様は、ホスト論理およびアプリケーション論理のHDLまたはRTLソースコード、ネットリスト、ならびに/または部分ビットストリームを含むことができる。仕様がソースコードを含むときに、ソースコードを合成して、ネットリストを生成することができる。ネットリストは、構成データを生成するために、配置およびルーティングすることができる。構成データは、構成可能なハードウェアの個々の構成要素をプログラミングまたは設定を識別するビットストリームなどの、様々なフォーマットでフォーマットすることができる。
【0074】
720において、構成データをデータベースに記憶することができる。例えば、構成データは、論理リポジトリデータベース150などの論理リポジトリデータベースに記憶することができる。構成データは、マシンイメージ、ユーザ、構成可能なハードウェアイメージ、製品コード、または情報データを検索するために使用することができる任意の他の情報と関連付けて記憶することができる。構成データは、第1および第2の仕様と、および/または一連の検証試験と関連付けて記憶することができる。構成データは、構成データの開発者および/またはエンドユーザによって、構成データにアクセスすることができるように、アクセスリストと関連付けて記憶することができる。
【0075】
730において、構成データの要求を受信することができる。例えば、要求は、計算サービスプロバイダによって提供される計算リソース内に新しいインスタンスを展開するときに受信することができる。別の例として、要求は、ユーザアプリケーションがアプリケーションの実行中に構成データをダウンロードするよう要求することに応じて検索することができる。別の例として、要求は、開発者または計算サービスプロバイダが構成データを更新、閲覧、または試験することに応じて検索することができる。
【0076】
740において、構成データを要求側に伝送することができる。例えば、構成データは、要求側のアクセス特権が検証された後に、要求側に伝送することができる。
【0077】
750において、構成データに従って、構成可能なハードウェアを構成することができる。構成されると、構成可能なハードウェアは、ホスト論理設計およびアプリケーション論理設計によって指定される機能を含むことができる。
【0078】
図8は、説明される技術革新を実行することができる適切なコンピューティング環境800の一般的な例を表す。コンピューティング環境800は、本技術革新を多様な汎用または専用コンピューティングシステムで実行することができるので、使用または機能の範囲に関していかなる限定も示唆することを意図しない。例えば、コンピューティング環境800は、様々なコンピューティングデバイス(例えば、デスクトップコンピュータ、ラップトップコンピュータ、サーバコンピュータ、タブレットコンピュータなど)のうちのいずれかとすることができる。
【0079】
図8を参照すると、コンピューティング環境800は、1つ以上の処理ユニット810、815と、メモリ820、825と、を含む。
図8において、この基本構成830は、破線内に含まれる。処理ユニット810、815は、コンピュータ実行可能命令を実行する。処理ユニットは、汎用中央処理ユニット(CPU)、特定用途向け集積回路(ASIC)内のプロセッサ、または任意の他のタイプのプロセッサとすることができる。マルチ処理システムでは、複数の処理ユニットがコンピュータ実行可能命令を実行して、処理能力を高める。例えば、
図8は、中央処理ユニット810、ならびにグラフィックス処理ユニットまたは共処理ユニット815を示す。有形メモリ820、825は、処理ユニット(複数可)によってアクセス可能である揮発性メモリ(例えば、レジスタ、キャッシュ、RAM)、不揮発メモリ(例えば、ROM、EEPROM、フラッシュメモリなど)、またはこれら2つのいくつかの組み合わせとすることができる。メモリ820、825は、処理ユニット(複数可)による実行に適したコンピュータ実行可能命令の形態で、本明細書で説明される1つ以上の技術革新を実装するソフトウェア880を記憶する。
【0080】
コンピューティングシステムは、追加的な特徴を有することができる。例えば、コンピューティング環境800は、記憶装置840と、1つ以上の入力デバイス850と、1つ以上の出力デバイス860と、および1つ以上の通信接続870とを含む。バス、コントローラ、またはネットワーク等の相互接続機構(図示せず)は、コンピューティング環境800の構成要素を相互接続する。典型的に、オペレーティングシステムソフトウェア(図示せず)は、コンピューティング環境800内で実行する他のソフトウェアのための動作環境を提供し、コンピューティング環境800の構成要素の動作を協調させる。
【0081】
有形記憶装置840は、リムーバブルまたは非リムーバブルとすることができ、該記憶装置としては、磁気ディスク、磁気テープもしくはカセット、CD−ROM、DVD、または情報を非一時的な方式で記憶するために使用することができ、また、コンピューティング環境800内でアクセスすることができる任意の他の媒体が挙げられる。記憶装置840は、本明細書で説明される1つ以上の技術革新を実装するソフトウェア880のための命令を記憶する。
【0082】
入力デバイス(複数可)850は、キーボード、マウス、ペン、またはトラックボール等のタッチ入力デバイス、音声入力デバイス、スキャンデバイス、または入力をコンピューティング環境800に提供する別のデバイスとすることができる。出力デバイス(複数可)860は、ディスプレイ、プリンタ、スピーカ、CDライタ、またはコンピューティング環境800からの出力を提供する別のデバイスとすることができる。
【0083】
通信接続(複数可)870は、通信媒体を通じた別のコンピューティングエンティティへの通信を可能にする。通信媒体は、コンピュータ実行可能命令、音声、または、ビデオ入力もしくは出力、または変調されたデータ信号内の他のデータ等の情報を伝達する。変調されたデータ信号は、信号内の情報をエンコードするような様態で設定または変更されたその特性のうちの1つ以上を有する信号である。一例として、また、限定されないが、通信媒体は、電気、光、RF、または他の搬送波を使用することができる。
【0084】
開示される方法のいくつかの動作は、提示の便宜のために特定の連続的な順序で説明されるが、下に記載される特定の言葉によって特定の順序が要求されない限り、この説明の様態は、再配列を含むことを理解されたい。例えば、連続的に説明される動作は、いくつかの事例において、再配列される場合があり、または同時に行われる場合がある。その上、簡潔にするために、添付図面は、開示される方法を他の方法と併せて使用することができる種々の方式を示さない場合がある。
【0085】
開示される方法のいずれかは、1つ以上のコンピュータ可読記憶媒体(例えば、1つ以上の光媒体ディスク、揮発性メモリ構成要素(DRAMまたはSRAM等)、または不揮発性メモリ(フラッシュメモリまたはハードドライブ等))に記憶され、また、コンピュータ(例えば、スマートフォン、またはコンピューティングハードウェアを含む他のモバイルデバイスを含む、任意の市販コンピュータ)上で実行される、コンピュータ実行可能命令のように実施することができる。コンピュータ可読記憶媒体という用語は、信号および搬送波等の通信接続を含まない。開示される技術を、ならびに開示される実施形態の実施中に作成され、使用される任意のデータを実装するためのコンピュータ実行可能命令のいずれかは、1つ以上のコンピュータ可読記憶媒体に記憶することができる。コンピュータ実行可能命令は、例えば、専用ソフトウェアアプリケーション、またはウェブブラウザもしくは他のソフトウェアアプリケーション(リモートコンピューティングアプリケーション等)を介してアクセスまたはダウンロードされるソフトウェアアプリケーションの一部とすることができる。そのようなソフトウェアは、例えば、単一のローカルコンピュータ(例えば、任意の適切な市販のコンピュータ)上で、または1つ以上のネットワークコンピュータを使用して(例えば、インターネット、ワイドエリアネットワーク、ローカルエリアネットワーク、クライアントサーバネットワーク(クラウドコンピューティングネットワーク等)、または他のそのようなネットワークを介して)ネットワーク環境内で実行することができる。
【0086】
明確にするため、ソフトウェアベースの実装形態の特定の選択された態様だけを説明する。当技術分野でよく知られている他の詳細は省略する。例えば、開示される技術は、任意の特定のコンピュータ言語またはプログラムに限定されないことを理解されたい。例えば、開示される技術は、C++、Java(登録商標)、Perl、JavaScript(登録商標)、Adobe Flash、または任意の他の適切なプログラミング言語で記述されたソフトウェアによって実施することができる。同様に、開示される技術は、任意の特定のコンピュータまたは特定のタイプのハードウェアに限定されない。適切なコンピュータおよびハードウェアの特定の詳細は、よく知られており、本開示で詳細に説明する必要はない。
【0087】
また、本明細書で説明される任意の機能は、ソフトウェアの代わりに1つ以上のハードウェア論理構成要素によって少なくとも部分的に行うことができることを理解されたい。例えば、限定されないが、使用することができるハードウェア論理コンポーネントの例示的なタイプとしては、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、特定用途向け標準製品(ASSP)、システムオンチップシステム(SOC)、コンプレックスプログラマブル論理デバイス(CPLD)などが挙げられる。
【0088】
さらに、(例えば、コンピュータに、開示される方法のうちのいずれかを実行させるためのコンピュータ実行可能命令を備える)ソフトウェアベースの実施形態のいずれかを、適切な通信手段を通してアップロード、ダウンロード、またはリモートアクセスすることができる。そのような適切な通信手段としては、例えば、インターネット、ワールドワイドウェブ、イントラネット、ソフトウェアアプリケーション、ケーブル(光ファイバーケーブルを含む)、磁気通信、電磁通信(RF、マイクロ波、および赤外線通信を含む)、電子通信、または他のそのような通信手段が挙げられる。
【0089】
本開示の種々の実施形態は、以下の付記を考慮して説明することができる。
1.構成可能なハードウェアを提供する方法であって、
フィールドプログラマブルゲートアレイ(FPGA)の構成データを生成する第1の要求を受信することであって、第1の要求が、FPGAに実装するためのアプリケーション論理を指定するハードウェア設計の参照を含み、FPGAが構成されるときに、FPGAがホスト論理およびアプリケーション論理を含む、ことと、
アプリケーション論理およびホスト論理に基づいて、検証したビットストリームを生成することであって、検証したビットストリームが、FPGAの構成データを指定する、ことと、
検証したビットストリームをコンピューティング環境のホストサーバコンピュータにダウンロードする第2の要求を受信することであって、ホストサーバコンピュータが、特定のFPGAを備える、ことと、
特定のFPGAがホスト論理およびアプリケーション論理を伴って構成されるように、第2の要求に応じて、検証したビットストリームをホストサーバコンピュータに伝送することと、を含む、方法。
【0090】
2.受信したハードウェア設計が、ソースコードを含み、検証したビットストリームを生成することが、受信したハードウェア設計を合成して、FPGAと互換性があるネットリストを生成することを含む、付記1に記載の方法。
【0091】
3.受信したハードウェア設計が、ネットリストを含み、検証したビットストリームを生成することが、受信したハードウェア設計をルーティングすることを含む、付記1または2のいずれかに記載の方法。
【0092】
4.第1の要求が、FPGAのインスタンスタイプをさらに含み、検証したビットストリームが、インスタンスタイプ、アプリケーション論理、およびホスト論理に基づいて生成される、付記1〜3のいずれかに記載の方法。
【0093】
5.FPGAが、複数の構成可能な領域を備え、構成データを指定する検証したビットストリームが、領域の一部分を構成するための部分ビットストリームである、付記1〜4のいずれかに記載の方法。
【0094】
6.構成データを指定する検証したビットストリームが、アプリケーション論理を再構成するためのデータと、静的ホスト論理を維持するためのデータと、を含む、付記5に記載の方法。
【0095】
7.第2の要求が、顧客からの、コンピューティング環境のホストサーバコンピュータのインスタンスを起動する要求に少なくとも部分的に基づく、付記1〜6のいずれかに記載の方法。
【0096】
8.コンピューティング環境のホストサーバコンピュータの仮想マシンのインスタンスを起動することと、
構成されたFPGAを、仮想マシンのインスタンスによって利用可能にすることと、をさらに含む、付記1〜7のいずれかに記載の方法。
【0097】
9.命令を含むコンピュータ可読記憶媒体であって、該命令が実行されると、コンピュータシステムに、
構成可能なハードウェアのアプリケーション論理の仕様を使用して、構成可能なハードウェアの構成データを生成する第1の要求を受信させることと、
構成可能なハードウェアの構成データを生成させることであって、構成データが、アプリケーション論理を実装するためのデータを含む、ことと、
構成可能なハードウェアのインスタンスを備えるホストサーバコンピュータに構成データを伝送する第2の要求を受信させることと、
第2の要求に応じて、構成データをホストサーバコンピュータに伝送させることと、を行わせる、コンピュータ可読記憶媒体。
【0098】
10.アプリケーション論理の仕様が、ソースコードを含み、構成可能なハードウェアの構成データを生成することが、ソースコードを合成して、アプリケーション論理のネットリストを生成することを含む、付記9に記載のコンピュータ可読記憶媒体。
【0099】
11.アプリケーション論理の仕様が、ネットリストを含み、および構成可能なハードウェアの構成データを生成することが、アプリケーション論理のネットリストをルーティングすることを含む、付記9または10に記載のコンピュータ可読記憶媒体。
【0100】
12.構成可能なハードウェアの構成データを生成することが、アプリケーション論理を構成可能なハードウェアのホスト論理と統合することを含み、ホスト論理が、アプリケーション論理の動作を抑制するように構成される、付記9〜11のいずれかに記載のコンピュータ可読記憶媒体。
【0101】
13.構成可能なハードウェアの構成データを生成することが、アプリケーション論理が、ホスト論理要件と互換性があることを検証することを含む、付記12に記載のコンピュータ可読記憶媒体。
【0102】
14.構成可能なハードウェアの構成データを生成することが、ハードウェア参照識別子を構成データに割り当てることを含み、第2の要求が、ハードウェア参照識別子を含む、付記9〜13のいずれかに記載のコンピュータ可読記憶媒体。
【0103】
15.第2の要求が、ダウンロードする構成データを識別するためのハードウェア参照識別子を含む、付記14に記載のコンピュータ可読記憶媒体。
【0104】
16.命令が、実行されると、コンピュータシステムに、
ハードウェア参照識別子を仮想マシンイメージ識別子に関連付けることをさらに行わせ、第2の要求が、ダウンロードする構成データを識別するための仮想マシンイメージ識別子を含む、付記14または15に記載のコンピュータ可読記憶媒体。
【0105】
17.第1の要求が、構成可能なハードウェアのアプリケーション論理の仕様の暗号化されたバージョンの参照を含む、付記9〜16のいずれかに記載のコンピュータ可読記憶媒体。
【0106】
18.構成可能なハードウェアが、フィールドプログラマブルゲートアレイ(FPGA)を備え、構成データが、FPGAを構成するためのビットストリームを含む、付記9〜17のいずれかに記載のコンピュータ可読記憶媒体。
【0107】
19.命令が、実行されると、コンピュータシステムに、
構成可能なハードウェアの構成データと関連付けられたタイミングレポートを生成させることと、
タイミングレポートを、第1の要求によって指定される場所に記憶することと、をさらに行わせる、付記9〜18のいずれかに記載のコンピュータ可読記憶媒体。
【0108】
20.コンピューティングシステムであって、
データベースと、
データベースに結合された第1のサーバコンピュータで稼働する論理リポジトリサービスであって、論理リポジトリサービスが、
アプリケーション論理の第1の仕様および構成可能なハードウェアのホスト論理の第2の仕様を摂取して、構成可能なハードウェアの構成データを生成することと、
構成データをデータベースに記憶することと、
第2のサーバコンピュータから構成データの要求を受信することと、
第2のサーバコンピュータに構成データを伝送することと、を行うように構成される、論理リポジトリサービスと、を備える、コンピューティングシステム。
【0109】
21.第1の仕様および第2の仕様を摂取することが、アプリケーション論理を合成およびルーティングすることを含む、付記20に記載のコンピューティングシステム。
【0110】
22.データベースが、構成可能なハードウェアイメージ識別子、仮想マシンイメージ識別子、または製品コード、のうちの1つ以上によってインデックスが付けられた構成可能なハードウェアのライブラリを備える、付記20または21に記載のコンピューティングシステム。
【0111】
開示される方法、装置、およびシステムは、いかなる形であれ、限定するものと解釈されるべきではない。代わりに、本開示は、単独で、および互いとの種々の組み合わせおよび副次的な組み合わせで、種々の開示された実施形態の全ての新規かつ非自明な特徴および態様を目的とする。開示される方法、装置、およびシステムは、任意の特定の態様または特徴またはそれらの組み合わせに限定されず、開示される実施形態は、任意の1つ以上の特定の利点が存在すること、または問題を解決することを必要としない。
【0112】
開示される発明の原理を適用することができる数多くの可能な実施形態を考慮して、例示される実施形態は、本発明の好適な例に過ぎないものであり、また、本発明の範囲を限定するものとみなすべきではないことを認識されるべきである。むしろ、本発明の範囲は、特許請求の範囲によって定義される。したがって、発明者らは、発明者らの発明として、これらの特許請求の範囲に該当する全てのものを主張する。