(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-10-03
(45)【発行日】2024-10-11
(54)【発明の名称】専用低レイテンシリンクを使用した複数のハードウェアアクセラレータのための統合されたアドレス空間
(51)【国際特許分類】
G06F 9/38 20180101AFI20241004BHJP
G06F 13/36 20060101ALI20241004BHJP
G06F 15/167 20060101ALI20241004BHJP
【FI】
G06F9/38 370C
G06F13/36 310Z
G06F15/167 615A
(21)【出願番号】P 2021503580
(86)(22)【出願日】2019-07-25
(86)【国際出願番号】 US2019043521
(87)【国際公開番号】W WO2020023797
(87)【国際公開日】2020-01-30
【審査請求日】2022-07-12
(32)【優先日】2018-07-26
(33)【優先権主張国・地域又は機関】US
【前置審査】
(73)【特許権者】
【識別番号】591025439
【氏名又は名称】ザイリンクス インコーポレイテッド
【氏名又は名称原語表記】XILINX INCORPORATED
(74)【代理人】
【識別番号】110002077
【氏名又は名称】園田・小林弁理士法人
(72)【発明者】
【氏名】シン, サラブジート
(72)【発明者】
【氏名】ニーマ, ヘム シー.
(72)【発明者】
【氏名】サンタン, ソナル
(72)【発明者】
【氏名】ダオ, カン ケイ.
(72)【発明者】
【氏名】コーベット, カイル
(72)【発明者】
【氏名】ワン, イー
(72)【発明者】
【氏名】ケース, クリストファー ジェイ.
【審査官】坂庭 剛史
(56)【参考文献】
【文献】国際公開第2018/075131(WO,A1)
【文献】米国特許出願公開第2009/0273603(US,A1)
【文献】国際公開第2018/064418(WO,A1)
【文献】特開平11-085963(JP,A)
【文献】特表2017-507405(JP,A)
【文献】特表2013-504130(JP,A)
【文献】特開平03-156558(JP,A)
【文献】米国特許出願公開第2017/0212724(US,A1)
【文献】米国特許出願公開第2011/0289279(US,A1)
【文献】米国特許出願公開第2009/0070553(US,A1)
【文献】米国特許第05940086(US,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
G06F 13/36
G06F 15/167
(57)【特許請求の範囲】
【請求項1】
通信バスに接続されたホストプロセッサと、
前記通信バスを通して前記ホストプロセッサに通信可能にリンクされた第1のハードウェアアクセラレータと、
前記通信バスを通して前記ホストプロセッサに通信可能にリンクされた第2のハードウェアアクセラレータと
を備える、システムであって、
前記第1のハードウェアアクセラレータと前記第2のハードウェアアクセラレータとが、前記通信バスから独立したアクセラレータリンクを通して直接接続され、
前記ホストプロセッサが、前記アクセラレータリンクを直接通した、前記第1のハードウェアアクセラレータと前記第2のハードウェアアクセラレータとの間のデータ転送を開始するように設定され、
前記データ転送を開始する際、前記ホストプロセッサが、前記第1のハードウェアアクセラレータに対応する第1のバッファオブジェクトと、前記第2のハードウェアアクセラレータに対応する第2のバッファオブジェクトとを作成し、
前記ホストプロセッサは、前記データ転送のためのターゲットアドレスが、前記第1のハードウェアアクセラレータに対してリモートであることを指示するリモートフラグを前記第2のバッファオブジェクトにセットし、
データは、前記アクセラレータリンクを通して、前記第1のハードウェアアクセラレータから前記第2のハードウェアアクセラレータへ一方向に直接転送される、システム。
【請求項2】
前記データ転送は、前記第1のハードウェアアクセラレータが、前記アクセラレータリンクを通して前記第2のハードウェアアクセラレータのメモリにアクセスすることを含む、請求項1に記載のシステム。
【請求項3】
前記ホストプロセッサが、前記ターゲットアドレスを含むデータを前記第1のハードウェアアクセラレータに送ることによって前記第2のハードウェアアクセラレータの前記メモリにアクセスするように設定され、前記ターゲットアドレスが、前記第2のハードウェアアクセラレータに対応するように前記ホストプロセッサによって変換され、前記第1のハードウェアアクセラレータが、前記ターゲットアドレスに基づいて、前記アクセラレータリンクを介して前記第2のハードウェアアクセラレータの前記メモリにアクセスするためのトランザクションを開始する、請求項2に記載のシステム。
【請求項4】
前記第2のハードウェアアクセラレータは、前記アクセラレータリンクを介してトランザクションを受信したことに応答して、前記第2のハードウェアアクセラレータについてのアドレス範囲の上限だけ、前記データ転送についてのターゲットアドレスを減分することと
、減分されたターゲットアドレスがローカルであるかどうかを決定することとを行うように設定された、請求項1に記載のシステム。
【請求項5】
前記ホストプロセッサが、前記通信バスに接続された前記第2のハードウェアアクセラレータの直接メモリアクセス回路がアクティビティのしきい値量を上回って動作していると決定したことに応答して、前記通信バスを介して前記第2のハードウェアアクセラレータにデータを送る代わりに、前記第1のハードウェアアクセラレータと前記第2のハードウェアアクセラレータとの間の前記データ転送を開始するように設定された、請求項1に記載のシステム。
【請求項6】
前記ホストプロセッサが、リングトポロジーにおいて前記第1のハードウェアアクセラレータおよび前記第2のハードウェアアクセラレータのシーケンスを自動的に決定するように設定された、請求項1に記載のシステム。
【請求項7】
前記ホストプロセッサが、リモートバッファフラグを使用して、前記第1のハードウェアアクセラレータおよび前記第2のハードウェアアクセラレータに対応するバッファを追跡するように設定された、請求項1に記載のシステム。
【請求項8】
集積回路であって、
通信バスを介してホストプロセッサと通信するように設定されたエンドポイントと、
前記集積回路にローカルなメモリに接続されたメモリコントローラと、
前記エンドポイントと前記メモリコントローラとに接続されたリンク回路と
を備え、前記リンク回路が、前記通信バスにも接続されたターゲットハードウェアアクセラレータとのアクセラレータリンクを確立するように設定され、前記アクセラレータリンクが、前記通信バスから独立した、前記集積回路と前記ターゲットハードウェアアクセラレータとの間の直接接続であり、
ホストプロセッサがセットしたデータ転送のためのターゲットアドレスが、前記ターゲットハードウェアアクセラレータ以外の他のハードウェアアクセラレータに対してリモートであることを指示するリモートフラグに基づいて、データ
が、前記アクセラレータリンクを通して、前記集積回路から前記ターゲットハードウェアアクセラレータへ一方向に直接転送される、集積回路。
【請求項9】
前記リンク回路が、前記アクセラレータリンクを介した前記ターゲットハードウェアアクセラレータとのデータ転送を開始するように設定され、前記データ転送が、前記通信バスを介して前記集積回路によって受信された前記ホストプロセッサからの命令に応答して行われる、請求項8に記載の集積回路。
【請求項10】
前記ターゲットハードウェアアクセラレータが、前記集積回路のアドレス範囲の上限だけ、前記集積回路から受信されたトランザクションにおいてターゲットアドレスを減分するように設定された、請求項8に記載の集積回路。
【請求項11】
第1のハードウェアアクセラレータ内で、通信バスを介してホストプロセッサから送られた命令とデータ転送についてのターゲットアドレスとを受信することと、
前記第1のハードウェアアクセラレータが、前記ターゲットアドレスを、前記第1のハードウェアアクセラレータに対応するアドレス範囲の上限と比較することと、
前記比較することに基づいて前記ターゲットアドレスが前記アドレス範囲を超えると決定したことに応答して、前記第1のハードウェアアクセラレータが、前記第1のハードウェアアクセラレータと第2のハードウェアアクセラレータとを直接接続するアクセラレータリンクを使用してデータ転送を実施するために、前記第2のハードウェアアクセラレータとのトランザクションを開始することと
を含み、
前記データ転送を開始する際、前記ホストプロセッサが、前記第1のハードウェアアクセラレータに対応する第1のバッファオブジェクトと、前記第2のハードウェアアクセラレータに対応する第2のバッファオブジェクトとを作成し、
前記ホストプロセッサは、前記データ転送のためのターゲットアドレスが、前記第1のハードウェアアクセラレータに対してリモートであることを指示するリモートフラグを前記第2のバッファオブジェクトにセットし、
データは、前記アクセラレータリンクを通して、前記第1のハードウェアアクセラレータから前記第2のハードウェアアクセラレータへ一方向に直接転送される、方法。
【請求項12】
前記アクセラレータリンクが前記通信バスから独立している、請求項11に記載の方法。
【請求項13】
前記第2のハードウェアアクセラレータにおいて前記トランザクションを受信したことに応答して、前記第2のハードウェアアクセラレータが、前記ターゲットアドレスから前記第2のハードウェアアクセラレータのアドレス範囲の上限を減算することと、前記減算することの結果が、前記第2のハードウェアアクセラレータの前記アドレス範囲内にあるかどうかを決定することと
をさらに含む、請求項11に記載の方法。
【請求項14】
前記通信バスに接続された前記第2のハードウェアアクセラレータの直接メモリアクセス回路がアクティビティのしきい値量を上回って動作していると決定することと、
前記決定することに応答して、前記通信バスを介して前記第2のハードウェアアクセラレータにデータを送る代わりに、前記第1のハードウェアアクセラレータと前記第2のハードウェアアクセラレータとの間の前記データ転送を開始することと
をさらに含む、請求項11に記載の方法。
【請求項15】
前記データ転送は、前記第1のハードウェアアクセラレータが、前記アクセラレータリンクを通して前記第2のハードウェアアクセラレータのメモリにアクセスすることを含む、請求項11に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ハードウェアアクセラレーションに関し、より詳細には、統合されたアドレス空間および低レイテンシ通信リンクを通した複数のハードウェアアクセラレータの使用を可能にすることに関する。
【背景技術】
【0002】
異種コンピューティングプラットフォーム(HCP:heterogeneous computing platform)は、インターフェース回路を通して1つまたは複数の他のデバイスに接続されたホストプロセッサを含むデータ処理システムを指す。デバイスは、一般に、アーキテクチャ上、ホストプロセッサとは異なる。ホストプロセッサは、デバイスにタスクをオフロードすることが可能である。デバイスは、そのタスクを実施し、ホストプロセッサにとって利用可能な結果を作ることが可能である。例示的な例として、ホストプロセッサは、一般に、中央処理ユニットとして実装され、デバイスは、グラフィックス処理ユニット(GPU)および/またはデジタル信号プロセッサ(DSP)として実装される。
【0003】
他のHCPでは、ホストプロセッサからオフロードされたタスクを実施するデバイスのうちの1つまたは複数が、(「ハードウェアアクセラレータ」と呼ばれる)ハードウェアアクセラレーションのために適応されたデバイスを含む。ハードウェアアクセラレータは、タスクを実施するためにソフトウェアまたはプログラムコードを実行することとは対照的に、ホストからオフロードされたタスクを実施することが可能である回路を含む。ハードウェアアクセラレータの回路は、ソフトウェアを実行することと機能的に等価であるが、一般に、より少ない時間においてタスクを完了することが可能である。
【0004】
ハードウェアアクセラレータの例は、フィールドプログラマブルゲートアレイ(FPGA)、部分的にプログラム可能な集積回路(IC)、特定用途向けIC(ASIC)など、プログラマブルICを含む。明らかに、HCPは、1つまたは複数がプログラムコードを実行するように適応され、1つまたは複数の他のものがハードウェアアクセラレーションのために適応された、異なるデバイスの組合せを含み得る。
【発明の概要】
【0005】
1つまたは複数の実施形態では、システムが、通信バスに接続されたホストプロセッサと、通信バスを通してホストプロセッサに通信可能にリンクされた第1のハードウェアアクセラレータと、通信バスを通してホストプロセッサに通信可能にリンクされた第2のハードウェアアクセラレータとを含み得る。第1のハードウェアアクセラレータと第2のハードウェアアクセラレータとは、通信バスから独立したアクセラレータリンクを通して直接接続される。ホストプロセッサは、アクセラレータリンクを直接通した、第1のハードウェアアクセラレータと第2のハードウェアアクセラレータとの間のデータ転送を開始するように設定される。
【0006】
1つまたは複数の実施形態では、ハードウェアアクセラレータは、通信バスを介してホストプロセッサと通信するように設定されたエンドポイントと、ハードウェアアクセラレータにローカルなメモリに接続されたメモリコントローラと、エンドポイントとメモリコントローラとに接続されたリンク回路とを含み得る。リンク回路は、通信バスにも接続されたターゲットハードウェアアクセラレータとのアクセラレータリンクを確立するように設定される。アクセラレータリンクは、通信バスから独立した、ハードウェアアクセラレータとターゲットハードウェアアクセラレータとの間の直接接続である。
【0007】
1つまたは複数の実施形態では、方法が、第1のハードウェアアクセラレータ内で、通信バスを介してホストプロセッサから送られた命令とデータ転送についてのターゲットアドレスとを受信することと、第1のハードウェアアクセラレータが、ターゲットアドレスを、第1のハードウェアアクセラレータに対応するアドレス範囲の上限と比較することと、比較することに基づいてターゲットアドレスがアドレス範囲を超えると決定したことに応答して、第1のハードウェアアクセラレータが、第1のハードウェアアクセラレータと第2のハードウェアアクセラレータとを直接接続するアクセラレータリンクを使用してデータ転送を実施するために、第2のハードウェアアクセラレータとのトランザクションを開始することとを含み得る。
【0008】
本発明の概要セクションは、いくつかの概念を導入するために提供されるにすぎず、請求される主題の重要な、または本質的な特徴を識別するために提供されるものではない。本発明の構成の他の特徴は、添付の図面および以下の発明を実施するための形態から明らかになろう。
【0009】
本発明の構成は、添付の図面において例として示される。しかしながら、図面は、本発明の構成を、図示される特定の実装形態のみに限定するものと解釈されるべきではない。様々な態様および利点が、以下の発明を実施するための形態を検討し、図面を参照すると明らかになろう。
【図面の簡単な説明】
【0010】
【
図1】複数のハードウェアアクセラレータをもつシステムの一例を示す図である。
【
図2】ハードウェアアクセラレータの例示的な一実装形態を示す図である。
【
図3】再送信エンジン(RTE:retransmit engine)の一例を示す図である。
【
図4】複数のハードウェアアクセラレータをもつシステムのための動作の例示的な方法を示す図である。
【
図5】複数のハードウェアアクセラレータと1つまたは複数の追加のデバイスとをもつシステムの一例を示す図である。
【
図6】集積回路(IC)のための例示的なアーキテクチャを示す図である。
【発明を実施するための形態】
【0011】
本開示は、新規の特徴を定義する特許請求の範囲で締めくくるが、本開示内で説明される様々な特徴は、図面とともにその説明を考慮することにより、より良く理解されると考えられる。本明細書で説明される(1つまたは複数の)プロセス、(1つまたは複数の)機械、(1つまたは複数の)製造物およびその任意の変形形態は、例示のために提供される。本開示内で説明される特定の構造的および機能的詳細は、限定するものとして解釈されるべきではなく、単に、特許請求の範囲のための基礎として、およびほぼすべての適切に詳細な構造において説明される特徴を様々に採用するように当業者に教示するための代表的基礎として解釈されるべきである。さらに、本開示内で使用される用語および句は、限定するものではなく、むしろ、説明される特徴の理解可能な説明を提供するものである。
【0012】
本開示は、ハードウェアアクセラレーションに関し、より詳細には、統合されたアドレス空間および低レイテンシ通信リンクを通した複数のハードウェアアクセラレータの使用を可能にすることに関する。データ処理システムとともにハードウェアアクセラレータを使用することが、ホストプロセッサからタスクをオフロードするための有効な技法になっており、それにより、ホストプロセッサ上の作業負荷を低減する。ハードウェアアクセラレータは、一般に、バスを通してホストプロセッサに取り付けられる。たとえば、ハードウェアアクセラレータは、ホストシステムの利用可能なバススロットに挿入された回路板に取り付けられ得る。一般に、各ハードウェアアクセラレータは、対応する回路板に取り付けられる。システムに追加のハードウェアアクセラレータを追加することは、通常、利用可能なバススロットにハードウェアアクセラレータをもつ追加の回路板を挿入することを伴う。
【0013】
従来のシステム内では、特に(たとえば、ハードウェアアドレスによって)任意の新たに追加されたハードウェアアクセラレータにアクセスするために、ホストプロセッサによって実行されるアプリケーションが、更新され、および/または書き直されなければならない。さらに、あるハードウェアアクセラレータから別のハードウェアアクセラレータにデータを転送するために、データは、ソースハードウェアアクセラレータからホストプロセッサに移動され、次いで、ホストプロセッサからターゲットハードウェアアクセラレータまで移動される。データは、バスを介してホストプロセッサを通して各ハードウェアアクセラレータにおよび各ハードウェアアクセラレータから移動する。したがって、システムに追加される各追加のハードウェアアクセラレータが、バス上のデバイスの数を増加させ、それにより、バス上の帯域幅についての競合を生じる。ハードウェアアクセラレータ(または他のデバイス)によって実施されるタスクの複雑さ、数、および/またはサイズが増加するにつれて、バス上の利用可能帯域幅がさらに制約される。
【0014】
本開示内で説明される本発明の構成によれば、デバイスのための統合されたアドレス空間が提供される。さらに、本明細書では「アクセラレータリンク」と呼ばれる、バスから独立して動作することが可能であるハードウェアアクセラレータ間の直接通信リンクが提供される。ホストプロセッサによって実行されるアプリケーションが、システムにおける特定のハードウェアアクセラレータを直接参照する(たとえば、アドレス指定する)ことなしに動作し得るように、ホストによって実行されるランタイムライブラリおよびドライバが、統合されたアドレス空間を活用することが可能である。ランタイムライブラリは、ハードウェアアクセラレータの間のデータ転送を実現するために使用するための適切なアドレスを決定することが可能である。したがって、アプリケーションは、システムに追加され得る追加のハードウェアアクセラレータにアクセスするために修正される必要がない。さらに、データ転送がアクセラレータリンクを介して実施され得、アクセラレータリンクは、データが、ホストプロセッサを通過することなしに、あるハードウェアアクセラレータから別のハードウェアアクセラレータに直接転送されることを可能にし、バスを効果的にバイパスする。したがって、バス上のハードウェアアクセラレータによって使用される帯域幅が著しく低減され、それにより、全体的なシステム性能を増加させ得る。
【0015】
述べられたように、ホストプロセッサによって実行されるプログラムコード(たとえば、アプリケーション)に対する対応する変更または修正を必要とすることなしに、既存のアドレス空間を使用して追加のハードウェアアクセラレータがシステムに追加され得る。これは、少なくとも部分的に、ハードウェアアクセラレータボードについての自動発見プロセスの実装、およびそのようなボードをシステムに追加することの実装、リモートバッファフラグ対ローカルバッファフラグの使用、少なくともいくつかの場合におけるデータ転送のためのアクセラレータリンクへの自動切替え、ならびにリモートバッファのための自動アドレス変換を通してサポートされる。
【0016】
図を参照しながら、本発明の構成のさらなる態様が以下でより詳細に説明される。例示を単純および明快にするために、図に示されている要素は、必ずしも一定の縮尺で描かれているとは限らない。たとえば、要素のうちのいくつかの寸法は、明快のために、他の要素に対して誇張され得る。さらに、適切と見なされる場合、対応する、類似する、または同様の特徴を指示するために、参照番号が図の間で繰り返される。
【0017】
図1は、複数のハードウェアアクセラレータをもつシステム100の一例を示す。システム100は、コンピュータ、サーバ、または他のデータ処理システムを実装するために使用され得るコンピュータハードウェアの一例である。システム100は、異種コンピューティングシステムの一例でもある。描かれているように、システム100は、インターフェース回路115を通してホストメモリ110に接続された少なくとも1つのホストプロセッサ105を含む。
【0018】
システム100は、複数のハードウェアアクセラレータ135をも含む。
図1の例では、システム100は、3つのハードウェアアクセラレータ135-1、135-2、および135-3を含む。
図1の例は、3つのハードウェアアクセラレータを示しているが、システム100は、3つよりも少ないハードウェアアクセラレータまたは4つ以上のハードウェアアクセラレータを含み得ることを諒解されたい。さらに、システム100は、グラフィックス処理ユニット(GPU)またはデジタル信号プロセッサ(DSP)など、1つまたは複数の他のデバイスを含み得る。
【0019】
システム100は、ホストメモリ110内に(「プログラムコード」とも呼ばれる)コンピュータ可読命令を記憶することが可能である。ホストメモリ110は、コンピュータ可読記憶媒体の一例である。ホストプロセッサ105は、インターフェース回路115を介してホストメモリ110からアクセスされるプログラムコードを実行することが可能である。1つまたは複数の実施形態では、ホストプロセッサ105は、メモリコントローラ(図示せず)を通してホストメモリ110と通信する。
【0020】
ホストメモリ110は、たとえば、ローカルメモリおよびバルク記憶デバイス(bulk storage device)など、1つまたは複数の物理メモリデバイスを含み得る。ローカルメモリは、概してプログラムコードの実際の実行中に使用される(1つまたは複数の)非永続的メモリデバイスを指す。ローカルメモリの例は、ランダムアクセスメモリ(RAM)、および/または、DRAM、SRAM、DDR SDRAMなど、プログラムコードの実行中のプロセッサによる使用のために好適である様々なタイプのRAMのいずれかを含む。バルク記憶デバイスは、永続的データ記憶デバイスを指す。バルク記憶デバイスの例は、限定はしないが、ハードディスクドライブ(HDD)、ソリッドステートドライブ(SSD)、フラッシュメモリ、読取り専用メモリ(ROM)、消去可能プログラマブル読取り専用メモリ(EPROM)、電気的消去可能プログラマブル読取り専用メモリ(EEPROM)、または他の好適なメモリを含む。システム100は、プログラムコードが実行中にバルク記憶デバイスから取り出されなければならない回数を低減するために少なくともあるプログラムコードの一時的記憶を行う1つまたは複数のキャッシュメモリ(図示せず)をも含み得る。
【0021】
ホストメモリ110は、プログラムコードおよび/またはデータを記憶することが可能である。たとえば、ホストメモリ110は、オペレーティングシステム120と、命令125と、データ130とを記憶し得る。
図1の例では、命令125は、1つまたは複数のアプリケーション170と、(本明細書では「ランタイム」と呼ばれる)ランタイムライブラリ172と、ハードウェアアクセラレータ135と通信することが可能であるドライバ174とを含み得る。ランタイム172は、完了イベントをハンドリングすることと、コマンド待ち行列を管理することと、(1つまたは複数の)アプリケーション170に通知を提供することとが可能である。データ130は、他のタイプのデータ項目のうち、ハードウェアアクセラレータ135間の直接データ転送を可能にする、バッファオブジェクト176および178などのバッファオブジェクトを含み得る。バッファオブジェクト176は、リモートフラグ180を含み、バッファオブジェクト178は、リモートフラグ182を含む。例示の目的で、リモートフラグ180はセットされておらず、リモートフラグ182はセットされている。システム100、たとえば、ホストプロセッサ105は、本開示内で説明される動作を実施するために、オペレーティングシステム120と命令125とを実行することが可能である。
【0022】
インターフェース回路115の例は、限定はしないが、システムバスと入出力(I/O)バスとを含む。インターフェース回路115は、様々なバスアーキテクチャのいずれかを使用して実装され得る。バスアーキテクチャの例は、限定はしないが、拡張業界標準アーキテクチャ(EISA)バス、アクセラレーテッドグラフィックスポート(AGP)、ビデオエレクトロニクス規格協会(VESA)ローカルバス、ユニバーサルシリアルバス(USB)、および周辺構成要素相互接続エクスプレス(PCIe)バスを含み得る。ホストプロセッサ105は、ハードウェアアクセラレータ135に結合するために使用されるものとは異なるインターフェース回路を通してホストメモリ110に接続され得る。例示の目的で、ホストプロセッサ105がそれを通して他のデバイスと通信するインターフェース回路115のためのエンドポイントは示されていない。
【0023】
システム100は、インターフェース回路115に接続された1つまたは複数の他のI/Oデバイス(図示せず)をさらに含み得る。I/Oデバイスは、直接、または介在するI/Oコントローラを通してのいずれかで、システム100、たとえば、インターフェース回路115に接続され得る。I/Oデバイスの例は、限定はしないが、キーボード、ディスプレイデバイス、ポインティングデバイス、1つまたは複数の通信ポート、およびネットワークアダプタを含む。ネットワークアダプタは、システム100が、介在するプライベートまたは公衆ネットワークを通して他のシステム、コンピュータシステム、リモートプリンタ、および/またはリモート記憶デバイスに接続されるようになることを可能にする回路を指す。モデム、ケーブルモデム、イーサネットカード、およびワイヤレストランシーバが、システム100とともに使用され得る異なるタイプのネットワークアダプタの例である。
【0024】
図1の例では、ハードウェアアクセラレータ135-1、135-2、および135-3の各々は、それぞれ、メモリ140-1、140-2、および140-3に接続される。メモリ140-1、140-2、および140-3は、概してホストメモリ110に関して説明されるようなRAMとして実装される。1つまたは複数の実施形態では、各ハードウェアアクセラレータ135は、ICとして実装される。ICはプログラマブルICであり得る。プログラマブルICの一例は、フィールドプログラマブルゲートアレイ(FPGA)である。
【0025】
図1の例では、ハードウェアアクセラレータ135の各々は、エンドポイント145と、リンク回路150と、(
図1では「MC」と省略される)メモリコントローラ155と、相互接続回路168とを含む。各ハードウェアアクセラレータ135は、(
図1では「CU」と省略される)1つまたは複数の算出ユニットをも含む。算出ユニットは、ホストプロセッサ105からオフロードされたタスクを実施することが可能である回路である。例示の目的で、ハードウェアアクセラレータ135の各々は、算出ユニット160と、算出ユニット165とを含むように示されている。ハードウェアアクセラレータ135は、図示されているよりも少ないまたは多い算出ユニットを含み得ることを諒解されたい。
【0026】
一例では、エンドポイント145の各々は、PCIeエンドポイントとして実装される。エンドポイント145は、システム100によって使用されるインターフェース回路115の特定のタイプまたは実装を介して通信するために好適な任意のタイプのエンドポイントとして実装され得ることを諒解されたい。メモリコントローラ155の各々は、ハードウェアアクセラレータ135によるメモリ140のアクセス(たとえば、読取りおよび書込み)を可能にするために、それぞれのメモリ140に接続される。
【0027】
1つまたは複数の実施形態では、ハードウェアアクセラレータ135-1とメモリ140-1とが、第1の回路板(図示せず)に取り付けられ、ハードウェアアクセラレータ135-2とメモリ140-2とが、第2の回路板(図示せず)に取り付けられ、ハードウェアアクセラレータ135-3とメモリ140-3とが、第3の回路板(図示せず)に取り付けられる。これらの回路板の各々は、バスポートまたはスロットに結合するための好適なコネクタを含み得る。たとえば、回路板の各々は、システム100の利用可能なPCIeスロット(または他のバス/インターフェースコネクタ)への挿入のために設定されたコネクタを有し得る。
【0028】
リンク回路150の各々は、少なくとも1つの他の、たとえば、隣接する、リンク回路150とのアクセラレータリンクを確立することが可能である。本明細書で使用される「アクセラレータリンク」は、2つのハードウェアアクセラレータを直接接続する通信リンクを指す。たとえば、ハードウェアアクセラレータ135を有する回路板の各々が、リンク回路150に接続するワイヤを通して接続され得る。リンク回路150は、ワイヤを介してアクセラレータリンクを確立し得る。
【0029】
特定の実施形態では、リンク回路150は、リングトポロジーを使用して通信可能にリンクされる。リンク回路150によって確立された(1つまたは複数の)アクセラレータリンクを介して送られるデータが、方向矢印によって指示されるように左から右にマスタする。たとえば、
図1の例を参照すると、左側のリンク回路(たとえば、リンク回路150-1)がマスタとして動作し得、右側の隣接するリンク回路(たとえば、リンク回路150-2)がスレーブとして動作し得る。同様に、リンク回路150-2が、リンク回路150-3に関してマスタとして動作し得る。リンク回路150-3が、リンク回路150-1に関してマスタとして動作し得る。
【0030】
1つまたは複数の実施形態では、各リンク回路150は、(たとえば、各ボード上の)各ハードウェアアクセラレータのためのメモリ140の量(またはサイズ)を指定するテーブルまたはレジスタを含む。テーブルを使用して、各リンク回路150は、アクセラレータリンクを使用して情報を交換する目的で、トランザクションにおいて指定されたアドレスを修正することが可能である。特定の実施形態では、テーブルまたはレジスタは、静的である。1つまたは複数の他の実施形態では、ドライバは、動的に、たとえば、ランタイムにおいて、テーブルまたはレジスタに記憶された情報を読み取り、および/または更新することが可能である。
【0031】
例示の目的で、ハードウェアアクセラレータ135-2の動作が説明される。各それぞれのハードウェアアクセラレータにおける同様の番号の構成要素が、同じまたは同様の様式で動作することが可能であることを諒解されたい。したがって、ハードウェアアクセラレータ135-2を参照すると、リンク回路150-2は、様々な異なるソースまたはイニシエータのいずれかからトランザクションを受信することと、様々なターゲットのいずれかにトランザクションをルーティングすることとが可能である。たとえば、リンク回路150-2は、(たとえば、ホストプロセッサ105から発信した)エンドポイント145-2からのトランザクション、算出ユニット160-2からのトランザクション、算出ユニット165-2からのトランザクション、ハードウェアアクセラレータ135-1からのリンク回路150-1を介したトランザクション、またはハードウェアアクセラレータ135-3からのリンク回路150-3を介してリンク回路150-1に流れ、次いでリンク回路150-2上に至るトランザクションを受信することが可能である。リンク回路150-2は、(たとえば、ホストプロセッサ105への)エンドポイント145-2へのトランザクション、算出ユニット160-2へのトランザクション、算出ユニット165-2へのトランザクション、メモリコントローラ155-2へのトランザクション、リンク回路150-3を介してリンク回路150-1上に至る、ハードウェアアクセラレータ135-1へのトランザクション、またはリンク回路150-3を介したハードウェアアクセラレータ135-3へのトランザクションなど、任意のターゲットへのトランザクションをルーティングすることが可能であり、ここで、ターゲットは、ソースまたはイニシエータとは異なる。
【0032】
たとえば、ホストプロセッサ105は、統合されたアドレス空間の一部として、メモリ140-1、メモリ140-2、および/またはメモリ140-3における任意のロケーションにアクセスすることが可能である。しかしながら、そのようなメモリにアクセスする際に、ホストプロセッサ105は、選択されたハードウェアアクセラレータ、たとえば、ハードウェアアクセラレータ135-2にアクセスすることと、次いで、アクセラレータリンクを使用して、選択されたハードウェアアクセラレータを通してメモリ140-1、メモリ140-2、またはメモリ140-3など、任意のターゲットに達することとによって、そのようなメモリにアクセスし得る。
【0033】
例示的なおよび非限定的な例として、ホストプロセッサ105は、ハードウェアアクセラレータ135-2および135-3に関与するデータ転送を開始し得る。ハードウェアアクセラレータ135-2はイニシエータであり得る。この例では、ホストプロセッサ105、たとえば、ランタイム172および/またはドライバ174は、ハードウェアアクセラレータ135-2に対応するバッファオブジェクト176と、ハードウェアアクセラレータ135-3に対応するバッファオブジェクト178とを作成する。ホストプロセッサ105は、(ハードウェアアクセラレータ135-3中にある)データ転送のためのターゲットアドレスが、開始ハードウェアアクセラレータ(ハードウェアアクセラレータ135-2)に対してリモートであることを指示するリモートフラグ182をセットする。
【0034】
エンドポイント145-2は、インターフェース回路115を介してホストプロセッサ105からオフロードされたタスクを受信することが可能である。1つまたは複数の実施形態では、ホストプロセッサ105は、ランタイム172およびドライバ174を実行することを介して、ハードウェアアクセラレータ135を統合されたアドレス空間と見なすことが可能である。エンドポイント145-2は、算出ユニット160-2にタスク(たとえば、データ)を提供し得る。タスクは、算出ユニット160-2が、オフロードされたタスクを実施するためのデータをそこから取り出すべきであるメモリ140-3内のターゲットアドレスを指定し得る。ハードウェアアクセラレータ135-2は、リンク回路150-2を使用して、リンク回路150-2とリンク回路150-3との間で確立されたアクセラレータリンクを介して、ハードウェアアクセラレータ135-3と直接、データ転送を開始および実施することが可能である。
【0035】
データ転送はホストプロセッサ105によって開始されるが、データ転送は、リンク回路150を使用して実施され、ホストプロセッサ105、ホストメモリ110、またはインターフェース回路115に関与することなしに行われる。データ転送は、ハードウェアアクセラレータ間で直接行われる。従来のシステムでは、データ転送は、ホストプロセッサ105が、インターフェース回路115を介してハードウェアアクセラレータ135-3からデータを取り出すことと、次いで、インターフェース回路115を介してハードウェアアクセラレータ135-2にデータを提供することとによって行われることになる。
【0036】
ハードウェアアクセラレータ135自体の間のデータの読取りおよび書込みを、ホストプロセッサ105を通してそのデータを移動させることなしに行う、ハードウェアアクセラレータ135の能力は、インターフェース回路115(たとえば、PCIeバス)を介して受け渡されるデータの量を著しく低減する。これは、ホストプロセッサ105と他のハードウェアアクセラレータ135との間のデータを伝達する際に使用するためのインターフェース回路115のかなりの帯域幅を節約する。さらに、システム100の動作の速度が、ハードウェアアクセラレータ135がデータを共有するために必要とされる時間の低減により増加され得る。
【0037】
システム100は、実装されるデバイスおよび/またはシステムの特定のタイプに応じて、図示された構成要素よりも少数の構成要素、または
図1に示されていない追加の構成要素を含み得る。さらに、含まれる特定のオペレーティングシステム、(1つまたは複数の)アプリケーション、および/またはI/Oデバイスは、システムタイプに基づいて変動し得る。さらに、例示的な構成要素のうちの1つまたは複数は、別の構成要素に組み込まれるか、またはさもなければ、別の構成要素の一部分を形成し得る。たとえば、プロセッサが、少なくともあるメモリを含み得る。システム100は、
図1のアーキテクチャまたはそれと同様のアーキテクチャを使用して各々実装される単一のコンピュータあるいは複数のネットワーク化されたまたは相互接続されたコンピュータを実装するために使用され得る。
【0038】
図2は、
図1のハードウェアアクセラレータ135-2の例示的な実装形態を示す。
図2内に、リンク回路150-2の例示的な実装形態が提供される。
図2中のリンク回路150-2のために示されているアーキテクチャは、
図1に示されているリンク回路150のいずれかを実装するために使用され得ることを諒解されたい。
【0039】
1つまたは複数の実施形態では、リンク回路150-2は、他のハードウェアアクセラレータに送られるべきであるトランザクションをデータストリームベースのパケットにコンバートし、リンク回路150の間で確立されたアクセラレータリンクを介してパケットをルーティングすることが可能である。特定の実施形態では、リンク回路150-2は、送信のためにAMBA拡張可能インターフェース(AXI)準拠メモリマッピングされたトランザクションをAXIデータストリームにコンバートすることが可能である。本開示内では、AXIは、例示的な通信プロトコルとして使用される。他の通信プロトコルが使用され得ることを諒解されたい。この点について、AXIの使用は、限定ではなく、例示のためのものである。リンク回路150-2は、他のハードウェアアクセラレータ(たとえば、ハードウェアアクセラレータ135-1および135-3)からの着信パケットをハンドリングし、そのパケットをメモリマッピングされたトランザクションにコンバートし、そのデータをハードウェアアクセラレータ135-2内でローカルにルーティングすることも可能である。さらに、リンク回路150-2は、受信されたパケットをメモリマッピングされたトランザクションにコンバートし、トランザクションを修正し、メモリマッピングされたトランザクションをパケットにコンバートし、パケットを次のハードウェアアクセラレータに受け渡すことが可能である。アクセラレータリンクを介して受信されたデータは、メモリマッピングされたトランザクションとしてハードウェアアクセラレータ135-2内で内部的にルーティングされ得る。
【0040】
図2の例では、リンク回路150-2は、トランシーバ202および204と、再送信エンジン(RTE)206および208と、メモリマップ-ストリーム(MM-ストリーム)マッパ210および212とを含む。MM-ストリームマッパ210および212は、相互接続回路214に接続される。
【0041】
描かれているように、トランシーバ202は、ハードウェアアクセラレータ135-1における対応するトランシーバに接続され得、トランシーバ204は、ハードウェアアクセラレータ135-3における対応するトランシーバに接続される。トランシーバ202および204は、他のハードウェアアクセラレータと確立されたアクセラレータリンクの物理レイヤを実装する。トランシーバ202および204の各々は、マルチギガビット通信リンクのための軽量のシリアル通信プロトコルを実装することが可能である。1つまたは複数の実施形態では、トランシーバ202および204の各々は、隣接するICにおけるトランシーバへの双方向インターフェースを実装することが可能である。トランシーバ202および204は、他のハードウェアアクセラレータとのアクセラレータリンクを自動的に初期化することが可能である。概して、トランシーバ202および204は、フロー制御に関係する低レベルシグナリングおよび低PHYレベルプロトコルを実装するための双方向通信が可能である。しかしながら、前に説明されたようにリングトポロジーおよび(たとえば、リングの周りの単一の方向における)マスタからスレーブへの流れを使用して、データフローが実装され得る。
【0042】
たとえば、トランシーバ202は、ハードウェアアクセラレータ135-1のリンク回路150-1内の対応するトランシーバと双方向に通信することが可能である。トランシーバ204は、ハードウェアアクセラレータ135-3のリンク回路150-3内の対応するトランシーバと双方向に通信することが可能である。トランシーバ202および204の各々は、データストリーム、たとえば、AXIデータストリームを使用して、隣接するトランシーバと通信することが可能である。
【0043】
特定の実施形態では、トランシーバ202および204は、8B/10Bコーディングルールを使用して、隣接するハードウェアアクセラレータにデータを送るおよび受信することが可能である。トランシーバ202および204の各々は、8B/10Bコーディングルールを使用して、シングルビットエラーおよびたいていのマルチビットエラーを検出することが可能である。
【0044】
1つまたは複数の実施形態では、トランシーバ202および204の各々は、Aurora 8B/10B IPコアとして実装され、これは、カリフォルニア州サンノゼのXilinx,Inc.から入手可能である。しかしながら、言及される特定のコアは、例示の目的で提供され、限定として意図されないことを諒解されたい。本明細書で説明されるように動作することが可能である他のトランシーバが使用され得る。
【0045】
トランシーバ202は、RTE206に接続される。トランシーバ202とRTE206とは、双方向通信をサポートする各方向において動く複数のデータストリームを通して通信することが可能である。トランシーバ204は、RTE208に接続される。トランシーバ204とRTE208とは、双方向通信をサポートする各方向において動く複数のデータストリームを通して通信することが可能である。
【0046】
RTE206および208は、トランザクションを管理することが可能である。1つまたは複数の実施形態では、RTE206およびRTE208は、各々、通信プロトコルの追加のレイヤを、それぞれ、トランシーバ202および204によって実装されたものの上に実装する。たとえば、RTE206およびRTE208は、各々、トランザクションレイヤ(TL)/リンクレイヤ(LL)およびユーザレイヤを実装する。これらの追加のレイヤは、データの完全性に関するさらなる保証を提供する。初期化の後に、アプリケーションは、データのストリームとしてアクセラレータリンクにわたってデータを受け渡すことが可能である。追加のデータの完全性対策は、メモリマッピングされたトランザクションをストリームデータにコンバートするとき、制御信号がデータとマージされるので、特に有益である。データの完全性問題が、破損した制御信号を生じ得る。オンチップ相互接続および/またはバスは、制御信号に関するデータ損失に耐えられない。
【0047】
TL/LLは、ロスレスデータ通信を保証するために、トークンベースのフロー制御を実装する。1つまたは複数の実施形態では、隣接するトランシーバ間の通信チャネルおよびトランシーバとRTEとの間の通信チャネルは、幅が128ビットである。データを送るとき、各RTEは、ターゲットハードウェアアクセラレータにおける受信リンク回路が、トランシーバによって実装された物理レイヤに、送られるべきトランザクションを実際に送る前に、トランザクション全体を受信するための十分なバッファリングリソース(たとえば、トークン)を有することを検査することが可能である。たとえば、RTE206は、ハードウェアアクセラレータ135-1における受信リンク回路150-1が、送るために(リンク回路150-2内で)トランシーバ202にデータを提供するより前に、データを受信するための十分なバッファリソースを有することを検査し得る。
【0048】
RTE206および208は、データ破損を検出することが可能である。たとえば、RTE206および208の各々は、受信された各パケットについての、パケット長情報、パケットシーケンス情報、および/または巡回冗長検査(CRC)チェックサムを検証することが可能である。RTEスレーブ(たとえば、受信するRTE)がパケットエラーを検出したとき、RTEは、エラーアボートモードに入り得る。エラーアボートモードでは、RTEは、エラーをもつパケットを失敗したパケットとしてドロップする。RTEは、トランザクションのすべての後続のパケットをさらにドロップする。特定の実施形態では、エラーアボートモードの開始が、RTEにリンク再試行シーケンスを起動させる。リンク再試行シーケンスが成功すると、リンクマスタ(たとえば、送るRTE)は、失敗したポイントから開始することによって、送信を復元することが可能である。
【0049】
RTE206は、MMストリームマッパ210に接続される。RTE206は、双方向通信をサポートする各方向において動く複数のデータストリームを介してMMストリームマッパ210と通信することが可能である。RTE208は、MMストリームマッパ212に接続される。RTE208は、双方向通信をサポートする各方向において動く複数のデータストリームを介してMMストリームマッパ212と通信することが可能である。
【0050】
MMストリームマッパ210およびMMストリームマッパ212の各々は、相互接続回路214に接続される。相互接続回路214は、MMストリームマッパ210および212ならびにそれらに接続されたハードウェアアクセラレータ135-2の他のマスタおよび/またはスレーブ回路の間で、データをルーティングすることが可能である。相互接続回路214は、1つまたは複数のオンチップ相互接続として実装され得る。オンチップ相互接続の一例は、AXIバスである。AXIバスは、回路ブロックおよび/またはシステムの間にオンチップ接続を確立する際に使用するための埋込みマイクロコントローラバスインターフェースである。相互接続回路の他の例示的な実装形態は、限定はしないが、他のバス、クロスバー、ネットワークオンチップ(NoC)などを含み得る。
【0051】
MMストリームマッパ210および212は、それぞれ、RTE206および208からの受信されたデータストリームを、相互接続回路ブロック214に提供され得るメモリマッピングされたトランザクションにコンバートすることが可能である。この点について、データストリームは、メモリマッピングされたトランザクションをサポートする複数のチャネルに多重化解除され得る。MMストリームマッパ210および212は、相互接続回路ブロック214からの受信されたメモリマッピングされたトランザクションを、それぞれ、RTE206および208に提供され得るストリームデータにコンバートすることも可能である。MMストリームマッパ210および212は、(たとえば、説明される制御信号を含む)メモリマッピングされたトランザクションをサポートする複数のチャネルを、それぞれ、RTE206および208に送るための単一のデータストリームに多重化することが可能である。
【0052】
1つまたは複数の実施形態では、MMストリームマッパ210および212の各々は、トランザクションにおいて受信されたターゲットアドレスを調整することが可能である。MMストリームマッパ210は、たとえば、アクセラレータリンクを介してハードウェアアクセラレータ135-1からトランザクションを受信する際に、トランザクションのターゲットアドレスから、ハードウェアアクセラレータ135-2のためのアドレス範囲(たとえば、メモリ140-2のアドレス範囲)の上限を減算し得る。トランザクションがリンク回路150を通過するとき、ターゲットアドレスを調整することによって、トランザクションが、アクセラレータリンクを介してあるハードウェアアクセラレータから別のハードウェアアクセラレータに向けられ得る。アクセラレータリンクを使用する際のアドレスの動作に関係するさらなる詳細が、
図4に関してより詳細に説明される。
【0053】
例示の目的で、ハードウェアアクセラレータ135-2の他の部分が、リンク回路150-2に関して説明される。
図2の例では、相互接続回路214は、直接メモリアクセス(DMA)マスタ回路216に接続される。DMAマスタ回路216は、たとえば、相互接続回路ブロック214と通信するためのメモリマッピングされたインターフェースを含む。DMAマスタ回路216は、PCIeエンドポイント218に接続される。
図1のエンドポイント145-2の例示的な実装形態であるPCIeエンドポイント218は、ホストプロセッサ105に通信可能にリンクされる。
【0054】
図2の例では、相互接続回路214は、1つまたは複数の算出ユニットマスタ220-1~220-Nにも接続される。各算出ユニットマスタ220は、ハードウェアアクセラレータ135-2内に実装された算出ユニットと、相互接続回路ブロック214との間の双方向インターフェースを提供する。各算出ユニットマスタ220は、相互接続回路ブロック214と通信するためのメモリマッピングされたインターフェースをさらに含む。算出ユニット160-2および算出ユニット165-2の各々は、スレーブインターフェース(図示せず)を介して相互接続回路214に接続され得る。
【0055】
図2の例では、相互接続回路214は、1つまたは複数のメモリコントローラスレーブ回路225-1~225-Nにも接続される。各メモリコントローラスレーブ回路225は、メモリ140-2のための読取りおよび書込み動作を可能にする。メモリ140-2は、ハードウェアアクセラレータ135-2によってアクセス可能な1つまたは複数のオフチップメモリとして実装され得る。メモリコントローラ225-1~225-Nの各々は、相互接続回路ブロック214と通信するためのメモリマッピングされたインターフェースをさらに含む。
【0056】
図3は、RTE206の例示的な一実装形態を示す。
図3に関して説明される例示的なアーキテクチャは、フロー制御ユニット(FLIT)を使用するクレジットベースのフロー制御/再送信制御方式を実装する。RTE206は、アプリケーションによって使用され得るプロトコルおよび/またはインターフェースに対して内部的に使用されるFLITベースのプロトコルおよび/またはインターフェースの間で変換することが可能である。
【0057】
RTE206は、送信チャネル330を含む。送信チャネル330は、データ(たとえば、AXI)ストリームをFLITベースのトランザクションにカプセル化解除することが可能である。
図3の例では、送信チャネル330は、送信(TX)パケット巡回冗長検査(CRC)生成器302と、再試行ポインタ復帰コマンド(PRET)パケット/初期再試行コマンド(IRTRY)パケット生成器および復帰再試行ポインタ(RRP)埋込み器304と、トークン復帰(TRET)パケット生成器およびシーケンス(SEQ)番号/前方再試行ポインタ(FRP)/復帰トークンカウント(RTC)埋込み器306と、フロー制御回路308と、出力バッファ310とを含む。TRET生成器およびSEQ/FRP/RTC埋込み器306は、再試行バッファ312にも接続される。
【0058】
RTE206は、受信チャネル340を含む。受信チャネル340は、FLITベースのインターフェースをカプセル化することと、そのインターフェースをデータ(たとえば、AXI)ストリームにコンバートすることとが可能である。
図3の例では、受信チャネル340は、パケット境界検出器316と、受信(RX)パケットCRC回路318と、RXパケットプロセッサ320と、入力バッファ322とを含む。Rxパケットプロセッサ320は、エラーハンドラ324および再試行シーケンス回路314に接続される。
【0059】
RTE206は、限定ではなく、例示の目的で提供される。クレジットベースのフロー制御/再送信制御方式を実装するために好適な他のアーキテクチャが使用され得ることを諒解されたい。
図3に関して説明されるアーキテクチャは、データフローに関して反転したまたは逆の配向をもつ
図2のRTE208を実装するためにも使用され得る。
【0060】
図4は、複数のハードウェアアクセラレータをもつシステムのための動作の例示的な方法400を示す。方法400は、ハードウェアアクセラレータの間の直接的なデータ転送の一例を示す。方法400は、
図1に関して説明されたシステム100と同じまたは同様のシステムによって実施され得る。方法400は、ホストプロセッサとハードウェアアクセラレータとを結合するバス上の不十分な帯域幅がどのように緩和され得るかを示す。通常ならばバス上で行われるデータ転送が、アクセラレータリンクに向けられ、それにより、他の動作のためにバス上の帯域幅を解放し得る。
【0061】
ブロック405において、システムは、ハードウェアアクセラレータシーケンスを自動的に発見することが可能である。1つまたは複数の実施形態では、ハードウェアアクセラレータ、たとえば、ハードウェアアクセラレータのボードは、システム内のリングトポロジーにおいて構成される。ホストプロセッサは、既存のPCIeトポロジー、したがって、PCIeバスに接続されたシステム内に存在するハードウェアアクセラレータの数に気づいている。さらに、ホストプロセッサは、たとえば、ランタイムを介して、各ハードウェアアクセラレータにロードされた特定の回路(たとえば、イメージまたは設定ビットストリーム)に気づいている。したがって、ホストプロセッサは、ハードウェアアクセラレータが、本明細書で説明されるようなアクセラレータリンクをサポートすることに気づいている。ホストプロセッサは、依然として、ハードウェアアクセラレータのシーケンスを決定しなければならない。ドライバは、たとえば、説明されるハードウェアアクセラレータシーケンスの自動発見を実施することが可能である。この自動発見能力は、ホストプロセッサによって実行されるアプリケーションを修正する必要なしに、システムへの新しいおよび/または追加のハードウェアアクセラレータの追加をサポートする。
【0062】
各ハードウェアアクセラレータは、知られているおよび同じアドレス範囲を有し得る。たとえば、各ハードウェアアクセラレータは、メモリ140の16GBに対応する16GBのアドレス範囲を有すると仮定され得る。1つまたは複数の実施形態では、ホストプロセッサは、16GB間隔においてメモリアドレスに一意の値を書き込むことが可能である。ホストプロセッサは、次いで、書込み値および読取り値に基づいて、リングトポロジー内でハードウェアアクセラレータのシーケンスを決定するために、値を再び読み取り得る。
【0063】
ブロック410において、ホストプロセッサは、スタートアップ時に各ハードウェアアクセラレータ上にバッファを作成することが可能である。たとえば、ホストプロセッサによって実行されるランタイムは、各それぞれのハードウェアアクセラレータのメモリ内にバッファを作成するために、各ハードウェアアクセラレータと通信することが可能である。
図1を参照すると、ハードウェアアクセラレータ135-1は、メモリ140-1内にバッファを作成する。ハードウェアアクセラレータ135-2は、メモリ140-2内にバッファを作成する。ハードウェアアクセラレータ135-3は、メモリ140-3内にバッファを作成する。
【0064】
ブロック415において、ホストプロセッサは、ハードウェアアクセラレータ間のデータ転送を開始する。データ転送は、たとえば、ホストプロセッサからハードウェアアクセラレータにオフロードされるべきであるタスクの一部であり得る。例示的なおよび非限定的な例として、ホストプロセッサ105は、アプリケーションについてのタスクをハードウェアアクセラレータ135-1の算出ユニット160-1にオフロードし得る。タスクは、命令と、算出ユニット160-1がタスクのためのデータをそこから取得するべきであるターゲットアドレスとを含み得る。この例におけるターゲットアドレスは、ハードウェアアクセラレータ135-2中に(たとえば、メモリ140-2中に)ある。したがって、ホストプロセッサからオフロードされたタスクを実施するために、算出ユニット160-1は、メモリ140-2中のターゲットアドレスからデータを取り出さなければならない。
【0065】
ブロック420において、ランタイムは、ハードウェアアクセラレータ135-1とハードウェアアクセラレータ135-2との間のデータ転送を要求し得る。たとえば、ランタイムは、ハードウェアアクセラレータ135-1による、またはハードウェアアクセラレータ135-1からのハードウェアアクセラレータ135-2の読取りを要求し得る。
【0066】
ブロック425において、ドライバは、ハードウェアアクセラレータ135-2に対応するホストメモリ中のバッファオブジェクトと、ハードウェアアクセラレータ135-1に対応するホストメモリ中のバッファオブジェクトとを作成することが可能である。バッファオブジェクトは、ホストメモリ中で実装されるシャドーデータ構造である。各バッファオブジェクトは、システムにおけるデバイスに対応するか、またはそのデバイスを表し得る。バッファオブジェクトは、ホストプロセッサによって実行されるランタイムによって実施される管理機能をサポートするデータを含み得る。
【0067】
1つまたは複数の実施形態では、ホストメモリ中で作成されたバッファオブジェクトは、リモートフラグを含み得る。リモートフラグは、バッファオブジェクトが、トランザクションを開始しているハードウェアアクセラレータの観点からリモートであることを指示するためにセットされ得る。この例では、ハードウェアアクセラレータ135-1は、ハードウェアアクセラレータ135-2からデータを読み取っている。したがって、ハードウェアアクセラレータ135-1は、トランザクションを開始している。ドライバは、作成時にハードウェアアクセラレータ135-2に対応するバッファオブジェクト中のリモートフラグをセットする。
【0068】
ブロック430において、ランタイムライブラリは、開始ハードウェアアクセラレータによるバッファオブジェクト(たとえば、リモートバッファオブジェクト)へのアクセスを開始する。ランタイムライブラリは、ハードウェアアクセラレータ135-1からのハードウェアアクセラレータ135-2に対応するバッファオブジェクトのアクセスを開始する。たとえば、ランタイムは、リモートフラグが、ハードウェアアクセラレータ135-2についてのバッファオブジェクト内にセットされると決定する。リモートフラグがセットされると決定したことに応答して、ランタイムライブラリは、リンク回路によって確立されたアクセラレータリンクを使用して転送をスケジュールする。ハードウェアアクセラレータ間のアクセラレータリンクを使用して転送をスケジュールする際に、ランタイムは、ハードウェアアクセラレータ135-2からのデータにアクセスするためにハードウェアアクセラレータ135-1によって使用されるべきアドレスを決定する。
【0069】
例示の目的で、ハードウェアアクセラレータ135の各々が1~1000のアドレス範囲を有する一例について考える。そのような例では、ランタイムは、ハードウェアアクセラレータ135-1によってハードウェアアクセラレータ135-2から取り出されるべきデータが、ハードウェアアクセラレータ135-2に対応するアドレス500における(たとえば、メモリ140-2に対応するアドレス500における)バッファ中にあると決定し得る。この例では、ランタイムは、ターゲットアドレスに1000を加算し、1500のアドレスを生じ、そのアドレスは、オフロードされたタスクのために動作するためのデータを読み出すためのターゲットアドレスとして、ハードウェアアクセラレータ135-1に提供される。
【0070】
別の例として、データがメモリ140-3内のアドレス500において記憶された場合、ランタイムは、トランザクションがハードウェアアクセラレータ135-3に達するために、ハードウェアアクセラレータ135の各々が1~1000のアドレス範囲を有すると仮定して、2000を加算することになる。概して、知られているように、使用されるオンチップバス相互接続(たとえば、AXI相互接続)を通して戻り経路データが追跡され得る。マスタからの読取り要求が発行されたとき、たとえば、読取り要求は、読取り要求が各ハードウェアアクセラレータにわたって横断するとき、(mmストリームマッパによって実施される)一連のアドレス復号および/またはアドレスシフトとともに相互接続を通してスレーブにルーティングされる。各個々の相互接続は、どのマスタが各スレーブへの未解決のトランザクションを有するかを追跡することが可能である。読取りデータが返されると、読取りデータは、(1つまたは複数の)正しいインターフェースを介して返送され得る。いくつかの場合には、特定の読取りデータを返すために、その読取りデータを特定のマスタに関連付けるために、識別子(ID)ビットが使用され得る。
【0071】
ブロック435において、開始ハードウェアアクセラレータ(たとえば、第1のハードウェアアクセラレータ)は、ホストプロセッサからタスクを受信する。エンドポイント145-1は、たとえば、タスクを受信し、算出ユニット160-1にタスクを提供し得る。タスクは、算出ユニット160-1によれる動作の対象となるべきデータがターゲットアドレスに位置することを指定し、ターゲットアドレスは、この例では1500である。算出ユニット160-1は、たとえば、ターゲットアドレスが記憶され得る制御ポートを有し得る。アドレス1500に位置するデータにアクセスすることを試みる際に、算出ユニット160-1は、アドレスがハードウェアアクセラレータ135-1の範囲内にないことを認識する。たとえば、算出ユニット160-1は、アドレスを1000のアドレス範囲の上限と比較することと、アドレスが上限を超えると決定することとが可能である。この例では、算出ユニット160-1は、アドレス1500からの読取りトランザクションを開始することが可能である。たとえば、算出ユニット160-1は、相互接続214を介して送られたメモリマッピングされたトランザクションとして読取りトランザクションを開始し得る。
【0072】
ブロック440において、開始ハードウェアアクセラレータは、アクセラレータリンクを介してターゲットハードウェアアクセラレータ(たとえば、第2のハードウェアアクセラレータ)にアクセスする。たとえば、リンク回路150-1は、(たとえば、MMストリームマッパを使用して)算出ユニット160-1によって開始されたメモリマッピングされたトランザクションをストリームベースのパケットにコンバートすることが可能である。リンク回路150-1は、さらに、(たとえば、RPEを使用して)データの完全性検査、再送信、初期化、およびエラー報告をサポートする追加のデータをもつパケットを符号化することが可能である。リングトポロジーは、左から右にマスタし得る。したがって、パケットは、リンク回路150-1のトランシーバによってリンク回路150-2に出力され得る。
【0073】
リンク回路150-2は、トランシーバ202においてデータストリームを受信し、RTE206においてトランザクションを処理する。MMストリームマッパ210は、ストリームデータベースのパケットを受信したことに応答して、様々な動作を実施することが可能である。MMストリームマッパ210は、たとえば、ストリームベースのパケットを、メモリマッピングされたトランザクションにコンバートすることが可能である。さらに、MMストリームマッパ210は、1500のターゲットアドレスをハードウェアアクセラレータ135-2のアドレス範囲の上限だけ減分することが可能である。述べられたように、上限は、リンク回路150-2内の、たとえば、MMストリームマッパ210中のテーブルまたはレジスタに記憶され得る。この例では、MMストリームマッパ210は、1500のターゲットアドレスを1000だけ減分し、500のターゲットアドレスを生じる。ターゲットアドレスがハードウェアアクセラレータ135-2にローカルであるので、ハードウェアアクセラレータ135-2は、受信されたトランザクションに作用することが可能である。この例では、MMストリームマッパ210は、メモリマッピングされたトランザクションを相互接続214に提供する。メモリマッピングされたトランザクションは、読取りトランザクションを実施するために、(たとえば、メモリコントローラスレーブを通して)メモリコントローラ155-2に提供され得る。このようにして、ハードウェアアクセラレータ135-1は、ハードウェアアクセラレータ135-2からデータを読み出すこと(またはハードウェアアクセラレータ135-2にデータを書き込むこと)が可能である。要求されたデータは、読取り要求を送るために使用される同じ経路を使用して、メモリ140-2から要求側に提供され得る。たとえば、メモリ140-2から読み取られたデータは、リングトポロジーを通って前方にハードウェアアクセラレータ135-3に横断し、次いで、ハードウェアアクセラレータ135-1に横断する必要なしに、ハードウェアアクセラレータ135-2からハードウェアアクセラレータ135-1に送られる。
【0074】
たとえば、ターゲットアドレスが2500であった場合、減分した結果は1500になる。その場合、MMストリームマッパ210は、ターゲットアドレスがハードウェアアクセラレータ135-2についてのアドレス範囲の上限(たとえば、1000)よりも大きいので、ターゲットアドレスがハードウェアアクセラレータ135-2中にないと決定する。その場合、MMストリームマッパ210は、次のハードウェアアクセラレータ上にフォワーディングするために、トランザクションを、相互接続回路を通してMMストリームマッパ212に送り得る。
【0075】
ブロック445において、ハードウェアアクセラレータ135-1中の算出ユニット160-1は、ハードウェアアクセラレータ間のデータ転送が完了したことをホストプロセッサに知らせる、ホストプロセッサへの割込みを生成することが可能である。ブロック450において、ランタイムは、アプリケーションに必要な、データ転送が完了したという通知を提供することが可能である。ランタイムは、たとえば、アプリケーションへの、完了イベント、コマンド待ち行列、および通知をハンドリングすることが可能である。
【0076】
1つまたは複数の実施形態では、PCIeエンドポイントおよびDMAマスタは、異なるハードウェアアクセラレータ中にあるターゲットアドレスに書き込むことが可能である。例示的なおよび非限定的な例として、ホストプロセッサは、ハードウェアアクセラレータ135-2中にあるターゲットアドレスとともにデータをハードウェアアクセラレータ135-1に送り得る。その場合、DMAマスタは、ターゲットアドレスが、異なるハードウェアアクセラレータ中にあることを認識することと、アクセラレータリンクを介したデータ転送をスケジュールすることとが可能である。たとえば、DMAマスタは、ターゲットアドレスを、ハードウェアアクセラレータ135-1についてのアドレス範囲の上限と比較し得る。ターゲットアドレスが上限を超えると決定したことに応答して、DMAマスタは、アクセラレータリンクを介してハードウェアアクセラレータ135-2に送るために、相互接続回路を介した、リンク回路150-1中のMMストリームマッパ212へのメモリマッピングされたトランザクションを開始することが可能である。
【0077】
1つまたは複数の実施形態では、ホストプロセッサは、ロードバランシングの目的でアクセラレータリンクを使用することが可能である。たとえば、ホストプロセッサは、データが提供されるべきであるか、またはタスクがオフロードされるべきである、選択されたハードウェアアクセラレータ中のDMAチャネル(たとえば、DMAマスタ)のステータスを決定するために、ランタイムを使用することが可能である。DMAマスタが、ビジーであるかまたはアクティビティのしきい値量を上回って動作していると決定したことに応答して、ホストプロセッサは、バスを介して異なるハードウェアアクセラレータにデータを送り得る。データは、選択されたハードウェアアクセラレータ内のターゲットアドレスを指定し得る。受信ハードウェアアクセラレータ内のDMAマスタは、ホストプロセッサからデータを受信すると、(1つまたは複数の)アクセラレータリンクを介して、選択されたハードウェアアクセラレータにデータをフォワーディングすることが可能である。特定の実施形態では、ホストプロセッサは、受信ハードウェアアクセラレータ中のDMAマスタが、ビジーでないかまたはアクティビティのしきい値量を下回って動作しているという決定に基づいて、受信ハードウェアアクセラレータを選定することが可能である。
【0078】
例示の目的で、ハードウェアアクセラレータ135-1からハードウェアアクセラレータ135-3への書込みトランザクションの一例が、概して、ホストプロセッサによって開始されるものとして説明される。ホストプロセッサは、ランタイムおよびドライバを介して、ターゲットハードウェアアクセラレータについてのリモートフラグをセットし、(所望のアドレスがハードウェアアクセラレータ135-3中のアドレス500に位置する、前の例を使用して)2500のアドレスを決定する。ホストプロセッサは、アドレス2500に書き込むために、ハードウェアアクセラレータ135-1に命令を提供する。ハードウェアアクセラレータ135-1内で、2500のアドレスをもつトランザクションが相互接続214に提示される。アドレスがハードウェアアクセラレータ135-1の上限を超えるので、相互接続214は、リンク回路150-1にトランザクションを送る。リンク回路150-1は、リンク回路150-2にトランザクションを送る。ハードウェアアクセラレータ135-2中のMMストリームマッパは、アドレスを1000だけ減分し、1500の新しいアドレスを生じる。新しいアドレスは、1500がハードウェアアクセラレータ135-2の上側アドレス限界を超えるので、依然としてリモートである。したがって、トランザクションは、ハードウェアアクセラレータ135-3にフォワーディングされる。
【0079】
ハードウェアアクセラレータ135-3中のMMストリームマッパは、アドレスを減分し、500の新しいアドレスを生じる。トランザクションは、次いで、ハードウェアアクセラレータ135-3中で相互接続214を介してメモリコントローラに提供され、データがメモリ140-3に書き込まれる。説明される例では、アドレスは、トランザクションが、ハードウェアアクセラレータによってサービスされ得るのか、および、トランザクションがハードウェアアクセラレータによってサービスされ得る場合、トランザクションを内部的にどこに(たとえば、メモリコントローラまたは他の回路ブロックに)ルーティングすべきか、または次のハードウェアアクセラレータにフォワーディングされるべきであるのかを決定するために、各ハードウェアアクセラレータによって使用される。特定の実施形態では、アドレスは、データがメモリ中に書き込まれる実際のアドレスとは異なる。書込み肯定応答は、説明されるように、ハードウェアアクセラレータ135-3からハードウェアアクセラレータ135-2を通してハードウェアアクセラレータ135-1に送られる。
【0080】
例示の目的で、ハードウェアアクセラレータ135-1によって開始された、ハードウェアアクセラレータ135-3への読取りトランザクションの別の例が、概して、ホストプロセッサによって開始されるものとして説明される。ホストプロセッサは、ランタイムおよびドライバを介して、ターゲットハードウェアアクセラレータについてのリモートフラグをセットし、(所望のアドレスがハードウェアアクセラレータ135-3中のアドレス500に位置する、前の例を使用して)2500のアドレスを決定する。ホストプロセッサは、アドレス2500から読み出すために、ハードウェアアクセラレータ135-1に命令を提供する。ハードウェアアクセラレータ135-1内で、2500のアドレスをもつトランザクションが相互接続214に提示される。アドレスがハードウェアアクセラレータ135-1の上限を超えるので、相互接続214は、リンク回路150-1にトランザクションを送る。リンク回路150-1は、リンク回路150-2にトランザクションを送る。ハードウェアアクセラレータ135-2中のMMストリームマッパは、アドレスを1000だけ減分し、1500の新しいアドレスを生じる。新しいアドレスは、1500がハードウェアアクセラレータ135-2の上側アドレス限界を超えるので、依然としてリモートである。したがって、トランザクションは、ハードウェアアクセラレータ135-3にフォワーディングされる。
【0081】
ハードウェアアクセラレータ135-3中のMMストリームマッパは、アドレスを減分し、500の新しいアドレスを生じる。トランザクションは、次いで、ハードウェアアクセラレータ135-3中で相互接続214を介してメモリコントローラに提供され、データがメモリ140-3から読み出される。説明される例では、アドレスは、トランザクションが、ハードウェアアクセラレータによってサービスされ得るのか、および、トランザクションがハードウェアアクセラレータによってサービスされ得る場合、トランザクションを内部的にどこにルーティングすべきか、または次のハードウェアアクセラレータにフォワーディングされるべきであるのかを決定するために、各ハードウェアアクセラレータによって使用される。特定の実施形態では、アドレスは、データがメモリから読み取られる実際のアドレスとは異なる。読み取られたデータは、説明されるように、ハードウェアアクセラレータ135-3からハードウェアアクセラレータ135-2を通してハードウェアアクセラレータ135-1に送られる。
【0082】
図5は、ハードウェアアクセラレータと1つまたは複数の追加のデバイスとを含むシステムの一例を示す。
図5の例では、ハードウェアアクセラレータ135-1および135-2が示されており、各それぞれのハードウェアアクセラレータ中のリンク回路を使用して、アクセラレータリンクによって接続される。例示の目的で、ハードウェアアクセラレータ135-3は示されていない。システムはGPU515をも含み、GPU515は、メモリ520とI/Oデバイス525とに接続される。
【0083】
図5の例では、GPU515は、ハードウェアアクセラレータ135-2にデータを書き込むか、またはハードウェアアクセラレータ135-2からデータを読み取り得る。この例では、ホストプロセッサ(図示せず)は、GPU515にハンドル505-Nを提供する。特定の実施形態では、ハンドルは、ファイル記述子として実装され得る。ハンドル505-Nは、バッファオブジェクト510-Nを指し得、バッファオブジェクト510-Nは、ハードウェアアクセラレータ135-2に対応する。GPU515が、読取りまたは書込み動作のためにハンドル505-Nを使用することによって、ホストプロセッサは、ハンドル505-Nに対応するバッファオブジェクト、たとえば、バッファオブジェクト510-N上でアクションを開始する。ホストプロセッサは、バッファオブジェクト510-Nがローカルであるのか、リモートであるのかを決定する。ホストプロセッサは、バッファオブジェクト510-N中のリモートフラグがセットされていないので、PCIeを介してメモリ140-2からデータを取り出し、PCIeを介してGPU515にデータを提供し得る。
【0084】
1つまたは複数の他の実施形態では、ホストプロセッサは、異なるハードウェアアクセラレータにアクセスすることによって、メモリ140-2からのデータの取出しを開始し得る。たとえば、ホストプロセッサは、メモリ140-2からデータを取り出すために、PCIeを介してハードウェアアクセラレータ135-1との通信を開始し得る。その場合、ハードウェアアクセラレータ135-1は、メモリ140-2からデータを取り出すために、リンク回路を使用してハードウェアアクセラレータ135-2と直接通信し得る。ハードウェアアクセラレータ135-1は、次いで、ホストプロセッサにデータを提供し得、ホストプロセッサは、PCIeを介してGPU515にデータを提供する。
【0085】
別の例では、I/Oデバイス525、たとえば、カメラが、ハードウェアアクセラレータ135-1にデータを書き込み得る。その場合、ホストプロセッサは、I/Oデバイス525にハンドル505-1を提供することが可能である。ハンドル505-1は、バッファオブジェクト510-1を指し得、バッファオブジェクト510-1は、ハードウェアアクセラレータ135-1に対応する。I/Oデバイス525が、書込み動作のためにハンドル505-1を使用することによって、ホストプロセッサは、ハンドル505-1に対応するバッファオブジェクト、たとえば、バッファオブジェクト510-1上でアクションを開始する。ホストプロセッサは、バッファオブジェクト510-1がローカルであるのか、リモートであるのかを決定する。ホストプロセッサは、バッファオブジェクト510-1中のリモートフラグがセットされていないので、I/Oデバイス525からデータを受信し、メモリ140-1中への書込みおよび/またはさらなる処理のために、PCIeを介してハードウェアアクセラレータ135-1にそのようなデータを提供し得る。
【0086】
1つまたは複数の実施形態では、ドライバは、説明されるようにアクセラレータリンクを使用することが可能であるハードウェアアクセラレータ間のデータ転送の場合にのみ、バッファオブジェクト内のリモートフラグをセットすることが可能である。
図5は、他のタイプのデバイスが、ハードウェアアクセラレータとともに使用され得るが、そのような他のデバイスとハードウェアアクセラレータとの間のデータ転送が、バスを介して行われ、ホストプロセッサを伴うことを示す。
【0087】
図6は、ICのための例示的なアーキテクチャ600を示す。一態様では、アーキテクチャ600は、プログラマブルIC内に実装され得る。たとえば、アーキテクチャ600は、フィールドプログラマブルゲートアレイ(FPGA)を実装するために使用され得る。アーキテクチャ600はまた、ICのシステムオンチップ(SOC)タイプを表し得る。SOCは、プログラムコードを実行するプロセッサと、1つまたは複数の他の回路とを含むICである。他の回路は、ハードワイヤード回路、プログラマブル回路、および/またはそれらの組合せとして実装され得る。回路は、互いと、および/またはプロセッサと協働して動作し得る。
【0088】
図示のように、アーキテクチャ600は、いくつかの異なるタイプのプログラマブル回路、たとえば、論理、ブロックを含む。たとえば、アーキテクチャ600は、マルチギガビットトランシーバ(MGT:multi-gigabit transceiver)601、設定可能論理ブロック(CLB)602、ランダムアクセスメモリブロック(BRAM)603、入出力ブロック(IOB)604、設定およびクロッキング論理(CONFIG/CLOCKS)605、デジタル信号処理ブロック(DSP)606、特殊なI/Oブロック607(たとえば、設定ポートおよびクロックポート)、ならびにデジタルクロックマネージャ、アナログデジタル変換器、システム監視論理などの他のプログラマブル論理608を含む、多数の異なるプログラマブルタイルを含み得る。
【0089】
いくつかのICでは、各プログラマブルタイルは、プログラマブル相互接続要素(INT)611を含み、INT611は、各隣接するタイル中の対応するINT611との間の規格化された接続を有する。したがって、INT611は、まとめると、示されているICのためのプログラマブル相互接続構造を実装する。各INT611は、
図6の上部に含まれる例によって示されているように、同じタイル内のプログラマブル論理要素との間の接続をも含む。
【0090】
たとえば、CLB602は、ユーザ論理を実装するようにプログラムされ得る設定可能論理要素(CLE)612と、単一のINT611とを含み得る。BRAM603は、1つまたは複数のINT611に加えてBRAM論理要素(BRL)613を含み得る。一般的に、タイル中に含まれるINT611の数は、タイルの高さに依存する。描かれているように、BRAMタイルは、5つのCLBと同じ高さを有するが、他の数(たとえば、4つ)も使用され得る。DSPタイル606は、適切な数のINT611に加えてDSP論理要素(DSPL)614を含み得る。IOB604は、たとえば、INT611の1つのインスタンスに加えてI/O論理要素(IOL)615の2つのインスタンスを含み得る。IOL615に接続された実際のI/Oパッドは、IOL615のエリアに制限されないことがある。
【0091】
図6に描かれている例では、ダイの中心の近くの、たとえば、領域605、607、および608から形成された、列状エリアが、設定、クロック、および他の制御論理のために使用され得る。この列から延びる水平エリア609が、プログラマブルICの幅にわたってクロックおよび設定信号を分散させるために使用され得る。
【0092】
図6に示されているアーキテクチャを利用するいくつかのICは、ICの大部分を作り上げる規則的な列状構造を損なう追加の論理ブロックを含む。追加の論理ブロックは、プログラマブルブロックおよび/または専用回路であり得る。たとえば、PROC610として示されているプロセッサブロックが、CLBおよびBRAMのいくつかの列にまたがる。
【0093】
一態様では、PROC610は、ICのプログラマブル回路を実装するダイの一部として作製される専用回路として、たとえば、ハードワイヤードプロセッサとして実装され得る。PROC610は、個々のプロセッサ、たとえば、プログラムコードを実行することが可能な単一のコアから、1つまたは複数のコア、モジュール、コプロセッサ、インターフェースなどを有するプロセッサシステム全体まで、複雑さに幅がある様々な異なるプロセッサタイプおよび/またはシステムのいずれかを表し得る。
【0094】
別の態様では、PROC610は、アーキテクチャ600から省略され、説明されるプログラマブルブロックの他の種類のうちの1つまたは複数と置き換えられ得る。さらに、そのようなブロックは、PROC610の場合のようにプログラムコードを実行することができるプロセッサを形成するためにプログラマブル回路の様々なブロックが使用され得るという点で、「ソフトプロセッサ」を形成するために利用され得る。
【0095】
「プログラマブル回路」という句は、IC内のプログラマブル回路要素、たとえば、本明細書で説明される様々なプログラマブルまたは設定可能回路ブロックまたはタイル、ならびに、ICにロードされた設定データに従って様々な回路ブロック、タイル、および/または要素を選択的に結合する相互接続回路を指す。たとえば、CLB602およびBRAM603など、PROC610の外部にある、
図6に示されている回路ブロックは、ICのプログラマブル回路と見なされる。
【0096】
概して、プログラマブル回路の機能性は、設定データがICにロードされるまで確立されない。FPGAなど、ICのプログラマブル回路をプログラムするために、設定ビットのセットが使用され得る。(1つまたは複数の)設定ビットは、一般に、「設定ビットストリーム」と呼ばれる。概して、プログラマブル回路は、設定ビットストリームをICに最初にロードしなければ、動作可能でないか、または機能可能でない。設定ビットストリームは、プログラマブル回路内に特定の回路設計を効果的に実装する。回路設計は、たとえば、プログラマブル回路ブロックの機能的態様と、様々なプログラマブル回路ブロックの間の物理的接続性とを指定する。
【0097】
「ハードワイヤード」または「ハード化(harden)」される、すなわち、プログラマブルでない回路が、ICの一部として製造される。プログラマブル回路とは異なり、ハードワイヤード回路または回路ブロックは、設定ビットストリームのローディングを通してICの製造後に実装されない。ハードワイヤード回路は、概して、たとえば、設定ビットストリームを、IC、たとえば、PROC610に最初にロードすることなしに機能可能である、専用回路ブロックおよび相互接続を有すると見なされる。
【0098】
いくつかの事例では、ハードワイヤード回路は、IC内の1つまたは複数のメモリ要素に記憶されたレジスタセッティングまたは値に従ってセットまたは選択され得る1つまたは複数の動作モードを有し得る。動作モードは、たとえば、ICへの設定ビットストリームのローディングを通してセットされ得る。この能力にもかかわらず、ハードワイヤード回路が、ICの一部として製造されたとき、動作可能であり、特定の機能を有するので、ハードワイヤード回路はプログラマブル回路と見なされない。
【0099】
SOCの場合、設定ビットストリームは、プログラマブル回路内に実装されるべきである回路と、PROC610またはソフトプロセッサによって実行されるべきであるプログラムコードとを指定し得る。いくつかの場合には、アーキテクチャ600は、適切な設定メモリおよび/またはプロセッサメモリに設定ビットストリームをロードする専用設定プロセッサを含む。専用設定プロセッサは、ユーザ指定のプログラムコードを実行しない。他の場合には、アーキテクチャ600は、設定ビットストリームを受信し、設定ビットストリームを適切な設定メモリにロードし、および/または実行のためのプログラムコードを抽出するために、PROC610を利用し得る。
【0100】
図6は、プログラマブル回路、たとえば、プログラマブルファブリックを含むICを実装するために使用され得る例示的なアーキテクチャを示すことを意図される。たとえば、1つの列中の論理ブロックの数、列の相対幅、列の数および順序、列中に含まれる論理ブロックのタイプ、論理ブロックの相対サイズ、および
図6の上部に含まれる相互接続/論理実装形態は、例示にすぎない。実際のICでは、たとえば、CLBの2つ以上の隣接する列は、一般に、ユーザ回路設計の効率的な実装を容易にするために、CLBが現れるところならどこでも含まれる。しかしながら、隣接するCLB列の数は、ICの全体的サイズとともに変動し得る。さらに、IC内のPROC610などのブロックのサイズおよび/または配置は、例示のためのものにすぎず、限定として意図されていない。
【0101】
アーキテクチャ600は、本明細書で説明されるようなハードウェアアクセラレータを実装するために使用され得る。特定の実施形態では、エンドポイント、リンク回路、およびメモリコントローラのうちの1つまたは複数または各々が、ハードワイヤード回路ブロックとして実装され得る。特定の実施形態では、エンドポイント、リンク回路、およびメモリコントローラのうちの1つまたは複数または各々が、プログラマブル回路を使用して実装され得る。さらに他の実施形態では、言及される回路ブロックのうちの1つまたは複数は、ハードワイヤード回路ブロックとして実装され得、他のものは、プログラマブル回路を使用して実装される。
【0102】
本開示内で説明される実施形態は、たとえば、データベースアクセラレーション、複数のビデオストリームを処理すること、リアルタイムネットワークトラフィック監視、機械学習、または複数のハードウェアアクセラレータを伴い得る任意の他の適用例など、様々な適用例のいずれかにおいて使用され得る。
【0103】
説明のために、特定の名称が、本明細書で開示される様々な発明概念の完全な理解を提供するために記載される。しかしながら、本明細書で使用される専門用語は、本発明の構成の特定の態様を説明するためのものにすぎず、限定するものではない。
【0104】
本明細書で定義される単数形「a」、「an」および「the」は、文脈が別段に明確に指示するのでなければ、複数形をも含むものとする。
【0105】
本明細書で定義される「約」という用語は、正確ではないが、ほぼ正しいまたは厳密である、値または量が近い、を意味する。たとえば、「約」という用語は、具陳された特性、パラメータ、または値が、厳密な特性、パラメータ、または値の所定の量内にあることを意味し得る。
【0106】
本明細書で定義される「少なくとも1つ」、「1つまたは複数」、および「および/または」という用語は、別段に明記されていない限り、運用において連言的と選言的の両方である、オープンエンド表現である。たとえば、「A、B、およびCのうちの少なくとも1つ」、「A、B、またはCのうちの少なくとも1つ」、「A、B、およびCのうちの1つまたは複数」、「A、B、またはCのうちの1つまたは複数」、および「A、B、および/またはC」という表現の各々は、Aのみ、Bのみ、Cのみ、AとBを一緒に、AとCを一緒に、BとCを一緒に、またはAとBとCを一緒に、を意味する。
【0107】
本明細書で定義される「自動的に」という用語は、ユーザ介入なしに、を意味する。本明細書で定義される「ユーザ」という用語は、人間を意味する。
【0108】
本明細書で定義される「コンピュータ可読記憶媒体」という用語は、命令実行システム、装置、またはデバイスが使用するための、あるいはそれとともに使用するためのプログラムコードを含んでいるかまたは記憶する記憶媒体を意味する。本明細書で定義される「コンピュータ可読記憶媒体」は、それ自体は、一時的な伝搬信号でない。コンピュータ可読記憶媒体は、限定はしないが、電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、または上記の任意の好適な組合せであり得る。本明細書で説明される、様々な形態のメモリが、コンピュータ可読記憶媒体の例である。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、ポータブルコンピュータディスケット、ハードディスク、RAM、読取り専用メモリ(ROM)、消去可能プログラマブル読取り専用メモリ(EPROMまたはフラッシュメモリ)、電子的消去可能プログラマブル読取り専用メモリ(EEPROM)、スタティックランダムアクセスメモリ(SRAM)、ポータブルコンパクトディスク読取り専用メモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリスティック、フロッピーディスクなどを含み得る。
【0109】
本明細書で定義される「する場合(if)」という用語は、文脈に応じて、「するとき(when)」または「すると(upon)」または「に応答して(in response to)」または「に反応して(responsive to)」を意味する。したがって、「それが決定された場合」または「[述べられた条件またはイベント]が検出された場合」という句は、文脈に応じて、「決定すると」または「決定したことに応答して」あるいは「[述べられた条件またはイベント]を検出すると」または「[述べられた条件またはイベント]を検出したことに応答して」または「[述べられた条件またはイベント]を検出したことに反応して」を意味すると解釈され得る。
【0110】
本明細書で定義される「に反応して」という用語および上記で説明されたような同様の言い回し、たとえば、「する場合」、「するとき」、または「すると」は、アクションまたはイベントに容易に応答または反応することを意味する。応答または反応は、自動的に実施される。したがって、第2のアクションが第1のアクション「に反応して」実施される場合、第1のアクションの発生と第2のアクションの発生との間に因果関係がある。「に反応して」という用語は、因果関係を指示する。
【0111】
本明細書で定義される「一実施形態(one embodiment)」、「一実施形態(an embodiment)」、「1つまたは複数の実施形態」、「特定の実施形態」という用語、または同様の言い回しは、実施形態に関して説明される特定の特徴、構造、または特性が、本開示内で説明される少なくとも1つの実施形態に含まれることを意味する。したがって、本開示全体にわたる、「一実施形態では(in one embodiment)」、「一実施形態では(in an embodiment)」、「1つまたは複数の実施形態では」、「特定の実施形態では」という句、および同様の言い回しの出現は、必ずしもそうとは限らないが、すべて、同じ実施形態を指し得る。「実施形態」および「構成」という用語は、本開示内では互換的に使用される。
【0112】
本明細書で定義される「プロセッサ」という用語は、少なくとも1つのハードウェア回路を意味する。ハードウェア回路は、プログラムコード中に含まれている命令を行うように設定され得る。ハードウェア回路は集積回路であり得る。プロセッサの例は、限定はしないが、中央処理ユニット(CPU)、アレイプロセッサ、ベクトルプロセッサ、デジタル信号プロセッサ(DSP)、FPGA、プログラマブル論理アレイ(PLA)、ASIC、プログラマブル論理回路、およびコントローラを含む。
【0113】
本明細書で定義される「出力」という用語は、物理メモリ要素、たとえば、デバイスに記憶すること、ディスプレイまたは他の周辺出力デバイスに書き込むこと、別のシステムに送ることまたは送信すること、エクスポートすることなどを意味する。
【0114】
本明細書で定義される「リアルタイム」という用語は、ユーザまたはシステムが、特定のプロセスまたは決定が行われるのに十分に即時であると感じる、あるいは、プロセッサが、何らかの外部プロセスについていくことを可能にする、処理応答性のレベルを意味する。
【0115】
本明細書で定義される「実質的に」という用語は、具陳された特性、パラメータ、または値が正確に達成される必要がないこと、ただし、たとえば、当業者に知られている許容差、測定誤差、測定精度限界、および他のファクタを含む、偏差または変動が、特性が提供することを意図された効果を妨げない量で生じ得ることを意味する。
【0116】
第1の、第2のなどの用語は、様々な要素を説明するために本明細書で使用され得る。これらの用語は、別段に述べられていない限り、または文脈が別段に明確に指示しない限り、ある要素を別の要素と区別するために使用されるにすぎないので、これらの要素はこれらの用語によって限定されるべきでない。
【0117】
コンピュータプログラム製品は、プロセッサに本明細書で説明される本発明の構成の態様を行わせるためのコンピュータ可読プログラム命令をその上に有する(1つまたは複数の)コンピュータ可読記憶媒体を含み得る。本開示内では、「プログラムコード」という用語は、「コンピュータ可読プログラム命令」という用語と互換的に使用される。本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、あるいはネットワーク、たとえば、インターネット、LAN、WANおよび/またはワイヤレスネットワークを介して外部コンピュータまたは外部記憶デバイスにダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバー、ワイヤレス送信、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ、および/またはエッジサーバを含むエッジデバイスを含み得る。各コンピューティング/処理デバイス中のネットワークアダプタカードまたはネットワークインターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、そのコンピュータ可読プログラム命令を、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体に記憶するためにフォワーディングする。
【0118】
本明細書で説明される本発明の構成のための動作を行うためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、あるいは、オブジェクト指向プログラミング言語および/または手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組合せで書き込まれたソースコードまたはオブジェクトコードのいずれかであり得る。コンピュータ可読プログラム命令は、状態セッティングデータを含み得る。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロンソフトウェアパッケージとして、部分的にユーザのコンピュータ上でおよび部分的にリモートコンピュータ上で、あるいは完全にリモートコンピュータまたはサーバ上で実行し得る。後者のシナリオでは、リモートコンピュータは、LANまたはWANを含む任意のタイプのネットワークを通してユーザのコンピュータに接続され得るか、あるいは接続は、(たとえば、インターネットサービスプロバイダを使用してインターネットを通して)外部コンピュータに対して行われ得る。いくつかの場合には、たとえば、プログラマブル論理回路、FPGA、またはPLAを含む電子回路が、本明細書で説明される本発明の構成の態様を実施するために、電子回路を個人化するためにコンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行し得る。
【0119】
本発明の構成のいくつかの態様が、方法、装置(システム)、およびコンピュータプログラム製品のフローチャート例示図および/またはブロック図を参照しながら本明細書で説明された。フローチャート例示図および/またはブロック図の各ブロック、ならびにフローチャートの例示図および/またはブロック図中のブロックの組合せが、コンピュータ可読プログラム命令、たとえば、プログラムコードによって実装され得ることを理解されよう。
【0120】
これらのコンピュータ可読プログラム命令は、汎用コンピュータ、専用コンピュータ、または機械を製造するための他のプログラマブルデータ処理装置のプロセッサに与えられ得、その結果、コンピュータまたは他のプログラマブルデータ処理装置のプロセッサを介して実行する命令は、フローチャートおよび/またはブロック図の1つまたは複数のブロックにおいて指定された関数/行為を実装するための手段を作成する。これらのコンピュータ可読プログラム命令はまた、コンピュータ、プログラマブルデータ処理装置、および/または他のデバイスに特定の様式で機能するように指示することができるコンピュータ可読記憶媒体に記憶され得、その結果、命令が記憶されたコンピュータ可読記憶媒体は、フローチャートおよび/またはブロック図の1つまたは複数のブロックにおいて指定された動作の態様を実装する命令を含む製造品を備える。
【0121】
コンピュータ可読プログラム命令はまた、コンピュータ実装プロセスを作り出すために、一連の動作をコンピュータ、他のプログラマブルデータ処理装置または他のデバイス上で実施させるように、コンピュータ、他のプログラマブル装置、または他のデバイスにロードされ得、その結果、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する命令は、フローチャートおよび/またはブロック図の1つまたは複数のブロックにおいて指定された機能/行為を実装する。
【0122】
図中のフローチャートおよびブロック図は、本発明の構成の様々な態様によるシステム、方法、およびコンピュータプログラム製品の可能な実装形態のアーキテクチャ、機能性、および動作を示す。この点について、フローチャートまたはブロック図中の各ブロックは、指定された動作を実装するための1つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表し得る。
【0123】
いくつかの代替実装形態では、ブロック中で言及される動作は、図中で言及される順序から外れて行われ得る。たとえば、関与する機能性に応じて、連続して示されている2つのブロックが、実質的に同時に実行され得るか、またはブロックが、時々、逆の順序で実行され得る。他の例では、ブロックは、概して小さい数字から順に実施され得、さらに他の例では、1つまたは複数のブロックは、変動順で実施され得、結果は、記憶され、後続の、または直後にこない他のブロックにおいて利用される。また、ブロック図および/またはフローチャート例示図の各ブロック、ならびにブロック図および/またはフローチャート例示図中のブロックの組合せが、指定された機能または行為を実施するかあるいは専用ハードウェアとコンピュータ命令との組合せを行う専用ハードウェアベースシステムによって実装され得ることに留意されたい。
【0124】
以下の特許請求の範囲において見られ得るすべての手段またはステップおよび機能要素の対応する構造、材料、行為、および等価物は、機能を実施するための任意の構造、材料、または行為を一体となって含むことを意図される。
【0125】
1つまたは複数の実施形態では、システムが、通信バスに接続されたホストプロセッサと、通信バスを通してホストプロセッサに通信可能にリンクされた第1のハードウェアアクセラレータと、通信バスを通してホストプロセッサに通信可能にリンクされた第2のハードウェアアクセラレータとを含み得る。第1のハードウェアアクセラレータと第2のハードウェアアクセラレータとは、通信バスから独立したアクセラレータリンクを通して直接接続される。ホストプロセッサは、アクセラレータリンクを直接通した、第1のハードウェアアクセラレータと第2のハードウェアアクセラレータとの間のデータ転送を開始するように設定される。
【0126】
一態様では、ホストプロセッサは、通信バスを介して第1のハードウェアアクセラレータおよび第2のハードウェアアクセラレータと通信するように設定される。
【0127】
別の態様では、データ転送は、第1のハードウェアアクセラレータが、アクセラレータリンクを通して第2のハードウェアアクセラレータのメモリにアクセスすることを含む。
【0128】
別の態様では、ホストプロセッサは、ターゲットアドレスを含むデータを第1のハードウェアアクセラレータに送ることによって第2のハードウェアアクセラレータのメモリにアクセスするように設定され、ターゲットアドレスは、第2のハードウェアアクセラレータに対応するようにホストプロセッサによって変換され、第1のハードウェアアクセラレータは、ターゲットアドレスに基づいて、アクセラレータリンクを介して第2のハードウェアアクセラレータのメモリにアクセスするためのトランザクションを開始する。
【0129】
別の態様では、第2のハードウェアアクセラレータは、アクセラレータリンクを介してトランザクションを受信したことに応答して、第2のハードウェアアクセラレータについてのアドレス範囲の上限だけ、データ転送についてのターゲットアドレスを減分することと、減分されたターゲットアドレスがローカルであるかどうかを決定することとを行うように設定される。
【0130】
別の態様では、ホストプロセッサは、通信バスに接続された第2のハードウェアアクセラレータの直接メモリアクセス回路のステータスに基づいて、第1のハードウェアアクセラレータと第2のハードウェアアクセラレータとの間のデータ転送を開始するように設定される。
【0131】
別の態様では、ホストプロセッサは、リングトポロジーにおいて第1のハードウェアアクセラレータおよび第2のハードウェアアクセラレータのシーケンスを自動的に決定するように設定される。
【0132】
別の態様では、ホストプロセッサは、リモートバッファフラグを使用して、第1のハードウェアアクセラレータおよび第2のハードウェアアクセラレータに対応するバッファを追跡するように設定される。
【0133】
1つまたは複数の実施形態では、ハードウェアアクセラレータは、通信バスを介してホストプロセッサと通信するように設定されたエンドポイントと、ハードウェアアクセラレータにローカルなメモリに接続されたメモリコントローラと、エンドポイントとメモリコントローラとに接続されたリンク回路とを含み得る。リンク回路は、通信バスにも接続されたターゲットハードウェアアクセラレータとのアクセラレータリンクを確立するように設定される。アクセラレータリンクは、通信バスから独立した、ハードウェアアクセラレータとターゲットハードウェアアクセラレータとの間の直接接続である。
【0134】
リンク回路は、アクセラレータリンクを介したターゲットハードウェアアクセラレータとのデータ転送を開始するように設定され、データ転送は、通信バスを介してハードウェアアクセラレータによって受信されたホストプロセッサからの命令に応答して行われる。
【0135】
別の態様では、リンク回路は、第1のメモリマップ-ストリームマッパ回路と、第2のメモリマップ-ストリームマッパ回路とを含み、各々は、データストリームをメモリをマッピングされたトランザクションに、およびメモリマッピングされたトランザクションをデータストリームにコンバートするように設定される。
【0136】
別の態様では、各メモリマップ-ストリームマッパ回路は、ハードウェアアクセラレータのアドレス範囲の上限だけ、受信されたトランザクションにおいてターゲットアドレスを減分するように設定される。
【0137】
別の態様では、リンク回路は、ストリームデータを送るおよび受信するように設定された第1のトランシーバと、第1のトランシーバと第1のメモリマップ-ストリームマッパ回路とに接続された第1の再送信エンジンとを含む。
【0138】
別の態様では、リンク回路は、ストリームデータを送るおよび受信するように設定された第2のトランシーバと、第2のトランシーバと第2のメモリマップ-ストリームマッパ回路とに接続された第2の再送信エンジンとをさらに含む。
【0139】
1つまたは複数の実施形態では、方法が、第1のハードウェアアクセラレータ内で、通信バスを介してホストプロセッサから送られた命令とデータ転送についてのターゲットアドレスとを受信することと、第1のハードウェアアクセラレータが、ターゲットアドレスを、第1のハードウェアアクセラレータに対応するアドレス範囲の上限と比較することと、比較することに基づいてターゲットアドレスがアドレス範囲を超えると決定したことに応答して、第1のハードウェアアクセラレータが、第1のハードウェアアクセラレータと第2のハードウェアアクセラレータとを直接接続するアクセラレータリンクを使用してデータ転送を実施するために、第2のハードウェアアクセラレータとのトランザクションを開始することとを含み得る。
【0140】
別の態様では、アクセラレータリンクは通信バスから独立している。
【0141】
別の態様では、トランザクションを開始することは、メモリマッピングされたトランザクションを開始することと、メモリマッピングされたトランザクションをアクセラレータリンクを介して送られるべきデータストリームにコンバートすることとを含む。
【0142】
別の態様では、方法は、第2のハードウェアアクセラレータにおいてトランザクションを受信したことに応答して、第2のハードウェアアクセラレータは、ターゲットアドレスから第2のハードウェアアクセラレータのアドレス範囲の上限を減算することと、減算することの結果が、第2のハードウェアアクセラレータのアドレス範囲内にあるかどうかを決定することとを含む。
【0143】
別の態様では、第2のハードウェアアクセラレータは、データストリームとしてトランザクションを受信し、データストリームをメモリマッピングされたトランザクションにコンバートする。
【0144】
別の態様では、方法は、第2のハードウェアアクセラレータのダイレクトメモリアクセス回路のステータスを決定することと、第2のハードウェアアクセラレータのダイレクトメモリアクセス回路のステータスに応答してデータ転送を開始することとを含む。
【0145】
本明細書で提供される本発明の構成の説明は、例示のためであり、網羅的なものでも、開示される形式および例に限定されるものでもない。本明細書で使用される専門用語は、本発明の構成の原理、実際的適用例、または市場で見られる技術に対する技術的改善を説明するために、および/あるいは、他の当業者が本明細書で開示される本発明の構成を理解することを可能にするために選定された。説明される本発明の構成の範囲および趣旨から逸脱することなく、修正および変形が当業者に明らかになり得る。したがって、そのような特徴および実装形態の範囲を指示するものとして、上記の開示に対してではなく、以下の特許請求の範囲に対して参照が行われるべきである。