IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ザイリンクス インコーポレイテッドの特許一覧

特許7523464割り当て可能なI/Oドメインおよびコヒーレントドメインを有する周辺I/Oデバイス
<>
  • 特許-割り当て可能なI/Oドメインおよびコヒーレントドメインを有する周辺I/Oデバイス 図1
  • 特許-割り当て可能なI/Oドメインおよびコヒーレントドメインを有する周辺I/Oデバイス 図2
  • 特許-割り当て可能なI/Oドメインおよびコヒーレントドメインを有する周辺I/Oデバイス 図3
  • 特許-割り当て可能なI/Oドメインおよびコヒーレントドメインを有する周辺I/Oデバイス 図4
  • 特許-割り当て可能なI/Oドメインおよびコヒーレントドメインを有する周辺I/Oデバイス 図5
  • 特許-割り当て可能なI/Oドメインおよびコヒーレントドメインを有する周辺I/Oデバイス 図6
  • 特許-割り当て可能なI/Oドメインおよびコヒーレントドメインを有する周辺I/Oデバイス 図7
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-07-18
(45)【発行日】2024-07-26
(54)【発明の名称】割り当て可能なI/Oドメインおよびコヒーレントドメインを有する周辺I/Oデバイス
(51)【国際特許分類】
   G06F 13/12 20060101AFI20240719BHJP
   G06F 13/10 20060101ALI20240719BHJP
【FI】
G06F13/12 340D
G06F13/10 310B
G06F13/10 330C
【請求項の数】 15
(21)【出願番号】P 2021559882
(86)(22)【出願日】2020-04-08
(65)【公表番号】
(43)【公表日】2022-05-30
(86)【国際出願番号】 US2020027229
(87)【国際公開番号】W WO2020210330
(87)【国際公開日】2020-10-15
【審査請求日】2023-03-08
(31)【優先権主張番号】16/380,860
(32)【優先日】2019-04-10
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591025439
【氏名又は名称】ザイリンクス インコーポレイテッド
【氏名又は名称原語表記】XILINX INCORPORATED
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ダスティダール,ジャディブ
(72)【発明者】
【氏名】アーマド,サグヒーア
(72)【発明者】
【氏名】スウォーブリック,イアン・エイ
【審査官】田中 啓介
(56)【参考文献】
【文献】米国特許出願公開第2010/0228943(US,A1)
【文献】国際公開第2009/025381(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F9/38
G06F9/455-9/54
G06F12/08-12/128
G06F13/10-13/14
G06F13/38-13/42
(57)【特許請求の範囲】
【請求項1】
周辺I/Oデバイスであって、
複数の計算リソースと、
当該周辺I/Oデバイスをホストに通信可能に結合させるように構成されたハイブリッドゲートウェイと
を備えており、
前記ハイブリッドゲートウェイは、
前記ホストが前記複数の計算リソースのうちのI/Oドメインに割り当てられた第1のサブセットと通信することを可能にするように構成されたI/Oハードウェアと、
前記ホストが前記複数の計算リソースのうちのコヒーレントドメインに割り当てられた第2のサブセットと通信することを可能にするように構成されたコヒーレントハードウェアと
を備え、
前記第2のサブセットは、前記ホスト内の計算リソースと前記コヒーレントドメインを共有する、周辺I/Oデバイス。
【請求項2】
前記複数の計算リソースは、プログラマブル論理(PL)アレイを含み、前記PLアレイ内の第1の複数のPLブロックが、前記I/Oドメインに割り当てられ、前記PLアレイ内の第2の複数のPLブロックが、前記コヒーレントドメインに割り当てられる、請求項1に記載の周辺I/Oデバイス。
【請求項3】
前記複数の計算リソースは、複数のメモリブロックを含み、前記複数のメモリブロックのうちの第1のサブセットが、前記I/Oドメインに割り当てられ、前記複数のメモリブロックのうちの第2のサブセットが、前記コヒーレントドメインに割り当てられ、前記複数のメモリブロックのうちの前記第1のサブセットは、前記第1の複数のPLブロックと通信できるが、前記第2の複数のPLブロックとは通信できず、前記複数のメモリブロックのうちの前記第2のサブセットは、前記第2の複数のPLブロックと通信できるが、前記第1の複数のPLブロックとは通信できない、請求項2に記載の周辺I/Oデバイス。
【請求項4】
前記I/Oハードウェアは、前記ホストから受信したデータ内のI/Oデータトラフィックを識別するように構成されたI/O相互接続層を備え、
前記コヒーレントハードウェアは、
前記ホストから受信したデータ内のコヒーレントデータトラフィックを識別し、前記コヒーレントデータトラフィックをPCIプロトコルからコヒーレント相互接続プロトコルに変換するように構成されたコヒーレント相互接続層と、
前記コヒーレント相互接続層に結合し、前記コヒーレントデータトラフィックを前記コヒーレント相互接続プロトコルから命令セットアーキテクチャ(ISA)固有相互接続プロトコルへと変換するように構成されたコヒーレンシ処理エンジンと
を備える、請求項1に記載の周辺I/Oデバイス。
【請求項5】
前記コヒーレンシ処理エンジンは、
複数のコヒーレント相互接続層に結合し、前記コヒーレントデータトラフィックを前記コヒーレント相互接続プロトコルから前記ISA固有相互接続プロトコルへと変換する複数のブリッジと、
前記複数のブリッジおよび前記複数の計算リソースのうちの前記第2のサブセットに結合したメッシュと
を備える、請求項4に記載の周辺I/Oデバイス。
【請求項6】
前記I/Oハードウェアは、前記I/O相互接続層に結合したダイレクトメモリアクセス(DMA)エンジンを備える、請求項4に記載の周辺I/Oデバイス。
【請求項7】
前記ハイブリッドゲートウェイは、前記I/Oハードウェアおよび前記コヒーレントハードウェアに通信可能に結合したゲートウェイネットワークオンチップ(NoC)を備える、請求項1に記載の周辺I/Oデバイス。
【請求項8】
前記複数の計算リソースのうちの前記第1および第2のサブセットに結合したNoC
をさらに備え、
前記NoCは、前記NoCを通って流れるI/Oデータトラフィックが前記NoCを通って流れるコヒーレントデータトラフィックとは異なって取り扱われるように構成可能である、請求項1に記載の周辺I/Oデバイス。
【請求項9】
前記NoCは、前記I/Oデータトラフィックについて前記コヒーレントデータトラフィックと比べて(i)異なるサービス品質(QoS)、(ii)レイテンシ、および(iii)帯域幅のうちの少なくとも1つを提供するように構成可能である、請求項8に記載の周辺I/Oデバイス。
【請求項10】
周辺I/Oデバイス内の第1の量の計算リソースをI/Oドメインに割り当てる指示を受信するステップと、
前記周辺I/Oデバイス内の第2の量の計算リソースをコヒーレントドメインに割り当てる指示を受信するステップと、
前記I/Oドメインおよび前記コヒーレントドメインを含むように前記周辺I/Oデバイスを構成するステップと、
前記I/Oドメインおよび前記コヒーレントドメインを並行して使用して前記周辺I/Oデバイスを動作させるステップと
を含んでおり、
前記周辺I/Oデバイスは、ホストが前記I/Oドメイン内および前記コヒーレントドメイン内の前記計算リソースと通信することを可能にするハイブリッドゲートウェイを含み、前記第2の量の計算リソースは、前記ホスト内の計算リソースと前記コヒーレントドメインを共有する、方法。
【請求項11】
前記周辺I/Oデバイスは、プログラマブル論理(PL)アレイおよび複数のメモリブロックを備え、
前記周辺I/Oデバイスを構成するステップは、
前記PLアレイ内の第1の複数のPLブロックを前記I/Oドメインに割り当て、前記PLアレイ内の第2の複数のPLブロックを前記コヒーレントドメインに割り当てるステップと、
前記複数のメモリブロックのうちの第1のサブセットを前記I/Oドメインに割り当て、前記複数のメモリブロックのうちの第2のサブセットを前記コヒーレントドメインに割り当てるステップと
を含み、
前記複数のメモリブロックのうちの前記第1のサブセットは、前記第1の複数のPLブロックと通信できるが、前記第2の複数のPLブロックとは通信できず、前記複数のメモリブロックのうちの前記第2のサブセットは、前記第2の複数のPLブロックと通信できるが、前記第1の複数のPLブロックとは通信できない、請求項10に記載の方法。
【請求項12】
前記周辺I/Oデバイスを動作させるステップは、
I/Oデータトラフィックおよびコヒーレントデータトラフィックの両方を含むデータをホストから受信するステップと、
前記ハイブリッドゲートウェイを使用して、前記ホストから受信した前記データ内の前記コヒーレントデータトラフィックを識別するステップと、
前記コヒーレントデータトラフィックをPCIプロトコルからコヒーレント相互接続プロトコルへと変換するステップと、
前記コヒーレントデータトラフィックを前記コヒーレント相互接続プロトコルから命令セットアーキテクチャ(ISA)固有相互接続プロトコルへと変換するステップと、
前記コヒーレントデータトラフィックを前記第2の量の計算リソースに転送するステップと、
前記ハイブリッドゲートウェイを使用して、前記ホストから受信した前記データ内の前記I/Oデータトラフィックを識別するステップと、
前記I/OデータトラフィックをDMAエンジンに転送するステップと
を含む、請求項10に記載の方法。
【請求項13】
前記周辺I/Oデバイスを構成するステップは、
NoCに対応するパラメータを、前記NoCを横切るときにI/Oデータトラフィックがコヒーレントデータトラフィックとは異なって取り扱われるように設定するステップ
を含む、請求項10に記載の方法。
【請求項14】
前記I/Oドメインおよび前記コヒーレントドメインを並行して使用して前記周辺I/Oデバイスを動作させるステップの後に、
前記周辺I/Oデバイス内の前記第1の量とは異なる第3の量の計算リソースを前記I/Oドメインに割り当てる指示を受信するステップと、
前記周辺I/Oデバイス内の前記第2の量とは異なる第4の量の計算リソースを前記コヒーレントドメインに割り当てる指示を受信するステップと、
前記I/Oドメインが前記第3の量を有し、前記コヒーレントドメインが前記第4の量を有するように、前記周辺I/Oデバイスを構成変更するステップと
をさらに含む、請求項10に記載の方法。
【請求項15】
システムオンチップ(SoC)であって、
複数のPLブロックを備えるPLアレイと、
当該SoCをホストに通信可能に結合させるように構成されたハイブリッドゲートウェイと
を備えており、
前記ハイブリッドゲートウェイは、
前記ホストが前記複数のPLブロックのうちのI/Oドメインに割り当てられた第1のサブセットへとI/Oデータトラフィックを送信することを可能にするように構成されたI/Oハードウェアと、
前記ホストが前記複数のPLブロックのうちのコヒーレントドメインに割り当てられた第2のサブセットへとコヒーレントデータトラフィックを送信することを可能にするように構成されたコヒーレントハードウェアと
を備え、
前記第1および第2のサブセットは、相互に排他的であり、
前記第2のサブセットは、前記ホスト内の計算リソースと前記コヒーレントドメインを共有する、システムオンチップ(SoC)。
【発明の詳細な説明】
【技術分野】
【0001】
技術分野
本開示の例は、一般に、I/Oドメインとコヒーレントドメインの両方をサポートするためのハイブリッドゲートウェイを有する周辺デバイスに関する。
【背景技術】
【0002】
背景技術
従来のI/Oモデルにおいて、ホストコンピューティングシステムは、周辺I/Oデバイスに固有のカスタムI/Oデバイスドライバを使用して、アクセラレータタスクまたは機能を実行するときに周辺I/Oデバイスとインターフェースする。複数のI/Oデバイスまたは同じI/Oデバイスの複数のインスタンスを有することは、ホストが複数のI/Oデバイスドライバまたは同じI/Oデバイスドライバの複数の実行コピーとインターフェースすることを意味する。これは、I/Oデバイスドライバが通常は周辺I/Oデバイスを供給するベンダによって開発されるが、ホストコンピューティングシステム内のすべてのソフトウェアおよびハードウェアと統合されなければならないがゆえに、セキュリティおよび信頼性の問題をもたらす可能性がある。
【0003】
一方で、ハードウェアキャッシュコヒーレント共有メモリマルチプロセッサパラダイムは、マルチプロセッサCPU上の実行タスクまたは機能におけるインターフェースの一般的な命令セットアーキテクチャ(ISA)に依存しないモデルを活用する。インターフェースの一般的なISA非依存(例えば、Cコード)モデルは、処理ユニットの数およびそれらの処理ユニットにとって利用可能な共有メモリの量の両方に関してスケーリングされる。従来において、周辺I/Oデバイスは、ホストコンピューティングシステム上で実行されるCPUによって使用されるコヒーレントパラダイムの恩恵を受けることが不可能であった。
【発明の概要】
【課題を解決するための手段】
【0004】
発明の概要
周辺デバイスにおいてI/Oドメインおよびコヒーレントドメインを確立するための技術が説明される。一例は、複数の計算リソースを含んでいる周辺I/Oデバイスであって、周辺I/Oデバイスをホストに通信可能に結合させるように構成されたハイブリッドゲートウェイを含む周辺I/Oデバイスである。このゲートウェイは、ホストが複数の計算リソースのうちのI/Oドメインに割り当てられた第1のサブセットと通信することを可能にするように構成されたI/Oハードウェアと、ホストが複数の計算リソースのうちのコヒーレントドメインに割り当てられた第2のサブセットと通信することを可能にするように構成されたコヒーレントハードウェアとを含み、第2のサブセットは、ホスト内の計算リソースとコヒーレントドメインを共有する。
【0005】
いくつかの実施形態において、複数の計算リソースは、プログラマブル論理(PL)アレイを含み、PLアレイ内の第1の複数のPLブロックが、I/Oドメインに割り当てられ、PLアレイ内の第2の複数のPLブロックが、コヒーレントドメインに割り当てられる。
【0006】
いくつかの実施形態において、複数の計算リソースは、複数のメモリブロックを含み、複数のメモリブロックのうちの第1のサブセットが、I/Oドメインに割り当てられ、複数のメモリブロックのうちの第2のサブセットが、コヒーレントドメインに割り当てられ、複数のメモリブロックのうちの第1のサブセットは、第1の複数のPLブロックと通信できるが、第2の複数のPLブロックとは通信できず、複数のメモリブロックのうちの第2のサブセットは、第2の複数のPLブロックと通信できるが、第1の複数のPLブロックとは通信できない。
【0007】
いくつかの実施形態において、I/Oハードウェアは、ホストから受信したデータ内のI/Oデータトラフィックを識別するように構成されたI/O相互接続層を含む。さらに、コヒーレントハードウェアは、ホストから受信したデータ内のコヒーレントデータトラフィックを識別し、コヒーレントデータトラフィックをPCIプロトコルからコヒーレント相互接続プロトコルに変換するように構成されたコヒーレント相互接続層と、コヒーレント相互接続層に結合し、コヒーレントデータトラフィックをコヒーレント相互接続プロトコルから命令セットアーキテクチャ(ISA)固有相互接続プロトコルへと変換するように構成されたコヒーレンシ処理エンジンとを含む。
【0008】
いくつかの実施形態において、コヒーレンシ処理エンジンは、複数のコヒーレント相互接続層に結合し、コヒーレントデータトラフィックをコヒーレント相互接続プロトコルからISA固有相互接続プロトコルへと変換する複数のブリッジと、複数のブリッジおよび複数の計算リソースのうちの第2のサブセットに結合したメッシュとを含む。
【0009】
いくつかの実施形態において、I/Oハードウェアは、I/O相互接続層に結合したダイレクトメモリアクセス(DMA)エンジンを含む。
【0010】
いくつかの実施形態において、ハイブリッドゲートウェイは、I/Oハードウェアおよびコヒーレントハードウェアに通信可能に結合したゲートウェイネットワークオンチップ(NoC)を備える。
【0011】
いくつかの実施形態において、周辺I/Oデバイスは、複数の計算リソースのうちの第1および第2のサブセットに結合したNoCを含み、NoCは、NoCを通って流れるI/OデータトラフィックがNoCを通って流れるコヒーレントデータトラフィックとは異なって取り扱われるように構成可能である。
【0012】
いくつかの実施形態において、NoCは、I/Oデータトラフィックについてコヒーレントデータトラフィックと比べて(i)異なるサービス品質(QoS)、(ii)レイテンシ、および(iii)帯域幅のうちの少なくとも1つを提供するように構成可能である。
【0013】
本明細書で説明される一例は、周辺I/Oデバイス内の第1の量の計算リソースをI/Oドメインに割り当てる指示を受信するステップと、周辺I/Oデバイス内の第2の量の計算リソースをコヒーレントドメインに割り当てる指示を受信するステップと、I/Oドメインおよびコヒーレントドメインを含むように周辺I/Oデバイスを構成するステップと、I/Oドメインおよびコヒーレントドメインを並行して使用して周辺I/Oデバイスを動作させるステップとを含む方法である。周辺I/Oデバイスは、ホストがI/Oドメイン内およびコヒーレントドメイン内の計算リソースと通信することを可能にするハイブリッドゲートウェイを含み、第2の量の計算リソースは、ホスト内の計算リソースとコヒーレントドメインを共有する。
【0014】
いくつかの実施形態において、周辺I/Oデバイスは、PLアレイおよび複数のメモリブロックを含み、周辺I/Oデバイスを構成するステップは、PLアレイ内の第1の複数のPLブロックをI/Oドメインに割り当て、PLアレイ内の第2の複数のPLブロックをコヒーレントドメインに割り当てるステップと、複数のメモリブロックのうちの第1のサブセットをI/Oドメインに割り当て、複数のメモリブロックのうちの第2のサブセットをコヒーレントドメインに割り当てるステップとを含み、複数のメモリブロックのうちの第1のサブセットは、第1の複数のPLブロックと通信できるが、第2の複数のPLブロックとは通信できず、複数のメモリブロックのうちの第2のサブセットは、第2の複数のPLブロックと通信できるが、第1の複数のPLブロックとは通信できない。
【0015】
いくつかの実施形態において、周辺I/Oデバイスを動作させるステップは、I/Oデータトラフィックおよびコヒーレントデータトラフィックの両方を含むデータをホストから受信するステップと、ハイブリッドゲートウェイを使用して、ホストから受信したデータ内のコヒーレントデータトラフィックを識別するステップと、コヒーレントデータトラフィックをPCIプロトコルからコヒーレント相互接続プロトコルへと変換するステップと、コヒーレントデータトラフィックをコヒーレント相互接続プロトコルからISA固有相互接続プロトコルへと変換するステップと、コヒーレントデータトラフィックを第2の量の計算リソースに転送するステップと、ハイブリッドゲートウェイを使用して、ホストから受信したデータ内のI/Oデータトラフィックを識別するステップと、I/OデータトラフィックをDMAエンジンに転送するステップとを含む。
【0016】
いくつかの実施形態において、周辺I/Oデバイスを構成するステップは、NoCに対応するパラメータを、NoCを横切るときにI/Oデータトラフィックがコヒーレントデータトラフィックとは異なって取り扱われるように設定するステップを含む。
【0017】
いくつかの実施形態において、本方法は、I/Oドメインおよびコヒーレントドメインを並行して使用して周辺I/Oデバイスを動作させるステップの後に、周辺I/Oデバイス内の第1の量とは異なる第3の量の計算リソースをI/Oドメインに割り当てる指示を受信するステップと、周辺I/Oデバイス内の第2の量とは異なる第4の量の計算リソースをコヒーレントドメインに割り当てる指示を受信するステップと、I/Oドメインが第3の量を有し、コヒーレントドメインが第4の量を有するように、周辺I/Oデバイスを構成変更するステップとを含む。
【0018】
本明細書で説明される1つの例は、複数のPLブロックを備えるPLアレイを含んでいるシステムオンチップ(SoC)であり、このSoCは、SoCをホストに通信可能に結合させるように構成されたハイブリッドゲートウェイを含む。このゲートウェイは、ホストが複数のPLブロックのうちのI/Oドメインに割り当てられた第1のサブセットへとI/Oデータトラフィックを送信することを可能にするように構成されたI/Oハードウェアと、ホストが複数のPLブロック計算リソースのうちのコヒーレントドメインに割り当てられた第2のサブセットへとコヒーレントデータトラフィックを送信することを可能にするように構成されたコヒーレントハードウェアとを含み、第1および第2のサブセットは、相互に排他的である。
【0019】
図面の簡単な説明
上記の特徴を詳細に理解することができるように、上記で簡単に要約したさらに具体的な説明を、一部が添付の図面に示されているいくつかの例示的な実装形態を参照することによって得ることができる。しかしながら、添付の図面は、典型的な例示の実装形態を示しているにすぎず、したがってその範囲を限定するものと見なされるべきではないことに留意されたい。
【図面の簡単な説明】
【0020】
図1】一例によるI/Oドメインおよびコヒーレントドメインを有する周辺I/Oデバイスに結合したホストのブロック図である。
図2】一例によるI/Oドメインおよびコヒーレントドメインに論理的に分割されたプログラマブル論理回路、メモリ、およびネットワークオンチップを有する周辺I/Oデバイスのブロック図である。
図3】周辺デバイス内の計算リソースをI/Oドメインおよびコヒーレントドメインに論理的に分割するための一例によるフローチャートである。
図4】周辺デバイスにおいてハイブリッドゲートウェイを使用してI/Oデータトラフィックおよびコヒーレントデータトラフィックを処理するための一例によるフローチャートである。
図5】一例による周辺デバイスにおけるハイブリッドゲートウェイのブロック図である。
図6】一例によるI/Oドメインおよびコヒーレントドメインに論理的に分割された計算リソースを有するコンピューティングシステムを示している。
図7】一例によるプログラマブルICのフィールドプログラマブルゲートアレイの実装形態を示している。
【発明を実施するための形態】
【0021】
発明を実施するための形態
さまざまな特徴が、図面を参照して以下に説明される。図面は、縮尺どおりに描かれていても、縮尺どおりに描かれていなくてもよく、同様の構造または機能の要素は、図面全体を通して同様の参照番号で表されていることに、留意されたい。図面は、特徴の説明を容易にすることのみを意図していることに留意されたい。それらは、本明細書の網羅的な説明として意図されているわけでも、特許請求の範囲の技術的範囲に対する限定として意図されているわけでもない。さらに、図示された例は、必ずしも示されたすべての態様または利点を有する必要はない。特定の例に関連して説明される態様または利点は、必ずしもその例に限定されず、任意の他の例において実施することが、たとえそのように示されていなくても、あるいはそのように明示的に説明されていなくても、可能である。
【0022】
本明細書における例は、デバイスがI/Oドメインおよびコヒーレントドメインの両方を有することを可能にするハイブリッドゲートウェイを備える周辺I/Oデバイスを説明する。すなわち、I/Oデバイスは、I/OデバイスドライバがI/Oデバイス内の計算リソースの一部を管理する従来のI/Oモデルの利点、ならびにI/Oデバイス内の他の計算リソースをホストコンピューティングシステム内のプロセッサ(例えば、中央演算処理装置(CPU))によって使用されるコヒーレントドメインと同じコヒーレントドメインに追加する利点を、享受することができる。結果として、周辺I/Oデバイスのコヒーレントドメイン内の計算リソースは、ホスト内のCPU間通信と同様のやり方でホストと通信することができる。これは、計算リソースが、(アドレス変換のない)直接通信、より効率的なメモリ使用、非均一メモリアクセス(NUMA)認識、などのコヒーレンシ型機能を利用できることを意味する。同時に、I/Oドメイン内の計算リソースは、ホストとI/Oデバイスとの間で大規模なメモリ転送を行うときに効率を提供する従来のI/Oデバイスモデルの利点から利益を得ることができる(例えば、ダイレクトメモリアクセス(DMA))。
【0023】
同じ周辺I/OデバイスにおいてI/Oドメインおよびコヒーレントドメインを同時にサポートするために、デバイスは、ホストとI/Oデバイスとの間の仲介者として機能するハイブリッドゲートウェイを含む。一実施形態において、ハイブリッドゲートウェイは、ホストからデータトラフィック(例えば、PCIeデータトラフィック)を受信し、次いで、これをI/Oデータトラフィックおよびコヒーレントデータトラフィックに分離する。I/Oデータトラフィックが、I/Oドメイン内の計算リソースへと転送される一方で、コヒーレントデータトラフィックは、コヒーレントドメイン内の計算リソースへと転送される。例えば、周辺I/Oデバイスは、プログラマブル論理(PL)アレイを含むことができ、アレイ内のPLブロックのいくつかが、I/Oドメインに割り当てられる一方で、残りのPLブロックは、コヒーレントドメインに割り当てられる。
【0024】
さらに、I/Oドメインおよびコヒーレントドメインへの計算リソースの割り当ては、動的であってよい。例えば、システム管理者は、I/Oドメインに充分なリソースがないと判断して、それまではコヒーレントドメインに割り当てられていた計算リソースが今やI/Oドメインに割り当てられるように、周辺I/Oデバイスを再構成することができる。I/Oデバイスを新たな割り当てで再構成することができ、ハイブリッドゲートウェイは、I/Oドメインおよびコヒーレントドメインの動作を同時にサポートすることができる。
【0025】
図1は、一例によるI/Oドメインおよびコヒーレントドメインを有する周辺I/Oデバイス135に結合したホスト105のブロック図である。図1のコンピューティングシステム100は、PCIe接続130を使用して周辺I/Oデバイス135に通信可能に結合したホスト105を含む。ホスト105は、単一のコンピュータ(例えば、サーバ)または相互接続された複数の物理的なコンピューティングシステムを表すことができる。いずれの場合も、ホスト105は、オペレーティングシステム110と、複数のCPU 115と、メモリ120とを含む。OS 110は、本明細書に記載の機能を実行することができる任意のOSであってよい。一実施形態において、OS 110(あるいは、ハイパーバイザまたはカーネル)は、CPU 115およびメモリ120のためのキャッシュコヒーレント共有メモリマルチプロセッサパラダイムを確立する。一実施形態において、CPU 115およびメモリ120は、キャッシュコヒーレント共有メモリマルチプロセッサパラダイムに従うコヒーレントドメインを形成するようにOSによって管理される(または、カーネル/ハイパーバイザによって管理される)。しかしながら、上述したように、従来のI/Oモデルは、周辺I/Oデバイス135(および、そのすべての計算リソース150)が、ホスト105において確立されるコヒーレントドメインから除外されることを意味する。代わりに、ホスト105は、自身のメモリ120に格納されたI/Oデバイスドライバ125に頼り、I/Oデバイス135内の計算リソース150を管理する。すなわち、周辺I/Oデバイス135は、I/Oデバイスドライバ125によって制御され、I/Oデバイスドライバ125を介してアクセス可能である。
【0026】
本明細書の実施形態においては、共有メモリマルチプロセッサパラダイムが、このパラダイムのすべての性能上の利点、ソフトウェアの柔軟性、および少ないオーバーヘッドと共に、周辺I/Oデバイス135にとって利用可能である。さらに、I/Oデバイス135内の計算リソースをCPU 115およびメモリ120と同じコヒーレントドメインに追加することにより、汎用のISA非依存の開発環境が可能になる。図1に示されるように、周辺I/Oデバイス135内の計算リソース150の一部が、例えばCPU 115およびメモリ120などのホスト105内の計算リソースによって使用されるコヒーレントドメインと同じコヒーレントドメイン160であるコヒーレントドメイン160に割り当てられる。
【0027】
計算リソース150Cおよび150Dがコヒーレントドメイン160に論理的に割り当てられる一方で、計算リソース150Aおよび150BはI/Oドメイン145に割り当てられる。したがって、I/Oデバイス135は、両方のドメイン145、160に割り当てられた計算リソース150を有することによる利益を得る。I/Oドメイン145が、ホスト105とI/Oデバイス135との間で大規模なメモリ転送を行うときに効率を提供する一方で、コヒーレントドメイン160は、上述した性能上の利点、ソフトウェアの柔軟性、およびオーバーヘッドの低減を提供する。ハードウェア計算リソース150(例えば、プログラマブル論理回路、ネットワークオンチップ(NoC)、データ処理エンジン、および/またはメモリ)をI/Oドメイン145およびコヒーレントドメイン160に論理的に分割することによって、I/Oデバイス135は、両方のタイプのパラダイムからの利益を得ることができる。
【0028】
ホスト105がI/Oデータトラフィックおよびコヒーレントデータトラフィックの両方を送信および受信できるように、周辺I/Oデバイス135は、PCIe接続130上で受信したデータをI/Oデータトラフィックおよびコヒーレントデータトラフィックに分離するハイブリッドゲートウェイ140を含む。I/Oデータトラフィックが、I/Oドメイン145内の計算リソース150Aおよび150Bに転送される一方で、コヒーレントデータトラフィックは、コヒーレントドメイン160内の計算リソース150Cおよび150Dに転送される。一実施形態において、ハイブリッドゲートウェイ140は、I/Oドメイン145内の計算リソース150がコヒーレントドメイン160内の計算リソース150と並列に動作できるように、I/Oデータトラフィックおよびコヒーレントデータトラフィックを並列に処理することができる。すなわち、ホスト105は、I/Oドメイン145およびコヒーレントドメイン160の両方の計算リソース150にタスクを割り当てることができ、I/Oドメイン145およびコヒーレントドメイン160の両方の計算リソース150が、それらのタスクを並列に実行することができる。
【0029】
周辺I/Oデバイス135は、(ホスト105の拡張スロットに差し込まれる)差込式カード、システムオンチップ(SoC)、グラフィックス処理ユニット(GPU)、フィールドプログラマブルゲートアレイ(FPGA)、などの多数のさまざまなタイプのI/Oデバイスであってよい。したがって、残りの実施形態は、プログラマブル論理回路(例えば、プログラマブル論理アレイ)を含むI/Oデバイス135について論じるが、それらの実施形態は、プログラマブル論理回路を有さず、硬化回路(ソフトウェアプログラマブルであってよい)のみを含むI/Oデバイス135にも適用可能である。さらに、本明細書の実施形態は、計算リソース150を2つのドメインに分割することを論じるが、他の実施形態において、ハイブリッドゲートウェイ140を、さらなるドメインあるいはI/Oドメイン145およびコヒーレントドメイン160内の複数のサブドメインをサポートするように変更することが可能である。
【0030】
図2が、I/Oドメイン145およびコヒーレントドメイン160に論理的に分割されたプログラマブル論理(PL)アレイ205、メモリブロック220、およびNoC 230を有する一例による周辺I/Oデバイス135のブロック図である。この例において、PLアレイ205は、複数のPLブロック210から形成されている。これらのブロックを、I/Oドメイン145またはコヒーレントドメイン160に個別に割り当てることができる。すなわち、PLブロック210Aおよび210BがI/Oドメイン145に割り当てられる一方で、PLブロック210Cおよび210Dはコヒーレントドメイン160に割り当てられる。一実施形態においては、ブロック間に重複がない(例えば、いかなるPLブロック210も、I/Oドメインおよびコヒーレントドメインの両方に割り当てられることがない)ように、I/Oドメインに割り当てられたPLブロック210のセットは、コヒーレントドメインに割り当てられたPLブロック210のセットと相互に排他的である。
【0031】
一実施形態において、I/Oドメイン145またはコヒーレントドメイン160のいずれかへのハードウェアリソースの割り当ては、I/Oデバイス135内のハードウェアリソースの物理的な位置に影響を及ぼさない(または、I/Oデバイス135内のハードウェアリソースの物理的な位置を指示しない)。例えば、PLブロック210Aおよび210Cは、たとえこれらのブロックがPLアレイ205内で互いに隣接している場合でも、異なるドメインに割り当てられてよい。したがって、I/Oデバイス135内のハードウェアリソースの物理的な位置は、それらをI/Oドメイン145およびコヒーレントドメイン160に論理的に割り当てるときに考慮されてよいが、これは必ずしも必須ではない。
【0032】
さらに、I/Oデバイス135は、I/Oドメイン145およびコヒーレントドメイン160に割り当てられたメモリコントローラ215を含む。一実施形態においては、メモリコントローラ215と対応するメモリブロック220との間の物理的な相互接続ゆえに、メモリコントローラ215のうちの1つをI/Oドメイン145またはコヒーレントドメイン160のいずれかに割り当てることは、そのメモリコントローラ215に接続されたすべてのメモリブロック220も同じドメインに割り当てられることを意味する。例えば、メモリコントローラ215を、(他のいずれのメモリコントローラ215にも結合していない)メモリブロック220の固定のセットに結合させることができる。したがって、メモリブロック220を、それらの結合先のメモリコントローラ215と同じドメインに割り当てることができる。しかしながら、他の実施形態においては、同じメモリコントローラ215に結合したメモリブロック220を異なるドメインに割り当てることが可能であってよい。
【0033】
一実施形態において、NoCは、I/Oデバイス135内のハードウェア要素(例えば、構成可能データ処理エンジン、メモリブロック220、PLブロック210、など)がNoC 230を使用してデータを送信および受信することを可能にするインターフェース要素を含む。一実施形態においては、NoC 230を形成するためにプログラマブル論理回路を使用するのではなく、NoCを形成する構成要素の一部または全部が硬化される。いずれの場合も、NoC 230を、I/Oドメイン145とコヒーレントドメイン160との間で論理的に分割することができる。一実施形態においては、NoC 230の異なる部分を2つのドメインに割り当てる代わりに、NoCのパラメータが、I/Oドメイン145およびコヒーレントドメイン160に対応するデータトラフィックに異なるサービスレベルを提供するように構成される。すなわち、NoC 230を流れる両方のドメインのデータトラフィックが、同じハードウェア要素(例えば、スイッチおよび通信リンク)を使用できるが、ハードウェア要素による取り扱いが異なってよい。例えば、NoC 230は、2つの異なるドメインについて、異なるサービス品質(QoS)、レイテンシ、帯域幅を提供することができる。さらに、NoC 230は、セキュリティ上の理由で、I/Oドメイン145のトラフィックをコヒーレントドメイン160のトラフィックから分離することもできる。
【0034】
別の実施形態において、NoC 230は、I/Oドメイン145内の計算リソースがコヒーレントドメイン160内の計算リソースと通信することを防ぐことができる。しかしながら、一実施形態においては、I/Oドメイン145に割り当てられた計算リソースがコヒーレントドメイン160に割り当てられた計算リソースと通信することを可能にすることが、有利であり得る。これまでは、この通信は、I/Oデバイスドライバ125とホスト105内のOSとの間で行われていた。代わりに、NoC 230(計算リソースがデバイス135内で遠く離れている場合)またはPLアレイ205内のファブリックツーファブリック接続(2つの異なるドメインに割り当てられた2つのPLブロック210が互いに近く、かつ通信を必要とする場合)を使用して、I/Oデバイス135内でドメイン間通信を行うことができる。
【0035】
図3が、周辺デバイス内の計算リソースをI/Oドメインおよびコヒーレントドメインに論理的に分割するための一例による方法300のフローチャートである。方法300は、ホストがI/Oドメインのための周辺デバイス内の計算リソースの量の指示を受信するブロック305で開始する。一実施形態において、ホストは、I/Oドメインに割り当てられるべき周辺デバイス内の計算リソースの量を選択するユーザのためのグラフィカルユーザインターフェース(GUI)を提供することができる。例えば、GUIは、ユーザがI/Oドメインに割り当てるPLブロックまたはメモリコントローラ/ブロックの割合を入力することができるテキストボックスを含むことができる。別の実施形態において、GUIは、ユーザがI/Oドメインに割り当てられるべき特定のリソース(例えば、256 kBのメモリ)を挙げることを可能にする。
【0036】
ブロック310において、ホストは、コヒーレントドメインのための周辺デバイス内の計算リソースの量のインジケータを受信する。上述のように、ホストは、コヒーレントドメインに割り当てる計算リソースの割合または量をユーザが選択することを可能にする別個のGUIを表示することができる。別の実施形態において、ホストは、ユーザがI/Oドメインとコヒーレントドメインとの間で計算リソースを分割することを可能にする単一のGUIを表示するウィザードツールを含むことができる。例えば、GUIは、ユーザが2つのドメイン間でPLブロック、メモリコントローラ、およびメモリブロックなどの計算リソースを分割することを可能にするスライディングバーを含むことができる。ウィザードは、ユーザがNoCのパラメータを選択すること(例えば、その帯域幅を2つのドメインに割り振り、QoSを確立し、セキュリティ/分離を確立する、など)を可能にする別のGUIを含むことができる。
【0037】
ブロック315において、ホストは、I/Oデバイスがブロック305およびブロック310において行われた要求を満たすための充分なリソースを有するかどうかを判定する。例えば、ユーザが、500 MBのメモリをI/Oドメインに割り当て、600 MBのメモリをコヒーレントドメインに割り当てることを要求している可能性があるが、I/Oデバイスは、1 GBのメモリしか有していない可能性がある。あるいは、ユーザが、I/Oドメインおよびコヒーレントドメインの両方にPLアレイ内のPLブロックの50%超を割り当てることを要求している可能性がある。これらの状況において、方法300はブロック320に進み、ホストがユーザにエラーを出力する。方法300は、ユーザがI/Oデバイス内のハードウェアの制約を満たす計算リソースを選択できるように、ブロック305および310を繰り返すことができる。さらに、方法300は、ブロック305およびブロック310の各々において割り当てられたリソースをさらに細分化することができる。例えば、PLブロック210Aおよび210Bがブロック305においてI/Oドメイン145に割り当てられる一方で、PLブロック210Cおよび210Dがブロック310においてコヒーレントドメイン160に割り当てられる。
【0038】
他方で、ユーザによって提示された割り当てがI/Oデバイスのハードウェア制約を満たす場合、方法300はブロック325に進み、ホストはI/Oドメインおよびコヒーレントドメインを有するように周辺デバイスを構成する。一実施形態において、コヒーレントドメインは、ホスト内の計算リソースとの共有ドメインである。例えば、ブロック310において選択された計算リソースは、ホスト内のCPU、メモリ、および他のハードウェア要素とキャッシュコヒーレント共有メモリマルチプロセッサパラダイムに従うコヒーレントドメインを形成する。同時に、ブロック305において指示された計算リソースは、I/Oドメインを形成する。一実施形態において、コヒーレントドメイン内の計算リソースとは異なり、ホスト内の計算リソースは、I/Oドメインとは別個のドメイン内にある。結果として、ホストは、I/Oドメイン内の計算リソースと通信するために、インストールされたデバイスドライバに依然として依存し得る(ただし、コヒーレントドメインとI/Oドメインとの間の通信を、上述したように、PLアレイ内のNoCまたはファブリックを使用して容易にすることもできる)。
【0039】
一実施形態において、ホストは、ビットストリームおよび/またはバイナリコードを使用して周辺デバイスを構成する。ビットストリームおよびバイナリコードが、周辺デバイス内の計算リソースを構成し、したがって、これらのリソースが2つの異なるドメインにおいて機能することができる。例えば、コヒーレントドメイン用に選択されたPLブロックを、PLアレイ内のファブリックを使用して互いに相互接続できる一方で、I/Oドメインに割り当てられたPLブロックから分離することができる。さらに、メモリコントローラは、同じドメイン内の他のハードウェア要素から受信される読み出しおよび書き込み要求のみを実行することができる。また、NoCは、I/Oデータトラフィックがコヒーレンシデータトラフィックとは別に管理されることを保証するためにデータ分離技術を使用することができる。すなわち、NoCは、2つのドメインのデータトラフィックの間の差を識別することができる。結果として、NoCは、データトラフィックに異なる帯域幅およびQoSレベルを提供することができる。
【0040】
ブロック330において、周辺デバイスは、I/Oドメインおよびコヒーレントドメインを並列に使用して動作する。周辺デバイスは、I/Oドメインおよびコヒーレントドメインの計算リソースを使用して並列にタスク(ホストによって割り当てられたタスクであってよい)を実行することができる。換言すると、周辺デバイスは、並列に動作する2つの異なるドメインをサポートすることができる。したがって、ホストは、ドメインに、それぞれの構成を活用する異なるタスクを割り当てることができる。例えば、大規模なデータ転送を必要とするタスクを、I/Oドメイン内の計算リソースに割り当てることができる一方で、ホスト内の計算リソースとの密接な統合または通信が有利となるタスクを、周辺デバイスのコヒーレントドメイン内の計算リソースに割り当てることができる。
【0041】
ブロック335において、ホストは、ドメインの構成変更の要求を受信したか否かを判定する。この例において、周辺デバイス内のドメインは、I/Oドメインに最初に割り当てられた計算リソースをコヒーレントドメインに割り当て直すこと、またはその逆が可能であるように、構成変更可能である。例えば、周辺デバイスを動作させた後に、ユーザ(または、ホスト上の監視ソフトウェア)は、一方のドメイン内の計算リソースが、他方のドメイン内の計算リソースよりもはるかに働いていないと判定することができる。例えば、ホストが、或るドメインに別のドメインよりもはるかに頻繁にタスクを割り当てる可能性がある。これに応答して、ユーザまたは監視ソフトウェアは、方法300を繰り返すことによって、あまり利用されていないドメイン内の計算リソースの一部を、過度に利用されているドメインに割り当て直すように要求することができる。これにより、ホストによって割り当てられるタスクを実行するための周辺デバイスの全体としての能力を改善することができる。
【0042】
図4が、周辺デバイスにおいてハイブリッドゲートウェイを使用してI/Oデータトラフィックおよびコヒーレントデータトラフィックを処理するための一例による方法400のフローチャートである。一実施形態において、方法400は、例えば図3の方法300を使用して確立された周辺デバイス内の複数のドメインをサポートするようにハイブリッドゲートウェイを動作させるための技術を記載する。明確にするために、方法400の各ブロックを、一例による周辺デバイス内のハイブリッドゲートウェイのブロック図である図5と並行して説明する。
【0043】
ブロック405において、ハイブリッドゲートウェイ140は、I/Oデータトラフィックおよびコヒーレントデータトラフィックを含むデータトラフィックをホスト105から受信する。すなわち、ハイブリッドゲートウェイ140は、同じ接続を使用してI/Oドメインおよびコヒーレントドメインの両方を宛先とするデータトラフィックを受信することができる。例えば、ホスト105を、1つ以上のPCIe接続130を使用して周辺I/Oデバイス135に結合させることができる。
【0044】
ブロック410において、ハイブリッドゲートウェイ140は、I/Oデータトラフィックとコヒーレントデータトラフィックとを分離する。例えば、コヒーレントデータトラフィックが、対応するデータがコヒーレントドメインの一部であることをハイブリッドゲートウェイ140に対して示す特別なヘッダまたはヘッダ値を有することができる一方で、これらのヘッダまたはヘッダ値を有さないトラフィックは、I/Oデータトラフィックとして識別される。この例において、I/Oデータトラフィックおよびコヒーレントデータトラフィックを、同じプロトコル(例えば、PCIe)を使用して送信し、その後にハイブリッドゲートウェイ140によって互いに分離することができる。
【0045】
そのようにするために、ハイブリッドゲートウェイ140は、ホスト105からのデータの受信およびホスト105へのデータの送信が可能な1つ以上のハイブリッドPCIコントローラ505を含む。各々のハイブリッドPCIコントローラ505は、物理層510、リンク層515、I/O相互接続層520、およびコヒーレント相互接続層525を含む。一実施形態において、PCIデータ(I/Oデータトラフィックを含むか、あるいはコヒーレントデータトラフィックを含むかにかかわらず)は、物理層510およびリンク層515によって処理される。しかしながら、その後に、ハイブリッドPCIコントローラ505は、I/OデータトラフィックがI/O相互接続層520によって処理され、コヒーレントデータトラフィックがコヒーレント相互接続層525によって処理されるように、データを分離する。このように、ハイブリッドPCIコントローラ505は、コントローラ505をI/Oドメインに適合させるI/Oハードウェア構成要素、およびコントローラ505をコヒーレントドメインに適合させるコヒーレンシハードウェア構成要素の両方を有する。
【0046】
ブロック415において、ハイブリッドゲートウェイ140は、コヒーレンシ処理エンジン540を使用してコヒーレントデータを処理する。図5に示されるように、コヒーレント相互接続層525は、ハイブリッドPCIコントローラ505とコヒーレントドメインに割り当てられた周辺I/Oデバイス135内の計算リソースとの間の媒介者として機能するコヒーレンシ処理エンジン540に接続される。コヒーレンシ処理エンジン540を、周辺I/Oデバイス上の計算リソースを、ホスト上の計算リソースを含むコヒーレントドメインに追加することを可能にする種々の異なるプロトコルのいずれかを使用して実装することができる。例えば、コヒーレンシ処理エンジン540は、コヒーレントドメインを形成するために、アクセラレータ用キャッシュコヒーレント相互接続(CCIX)を使用することができる。CCIXは、異種混合システムアーキテクチャのためのキャッシュコヒーレントフレームワークを提供する高性能チップ間相互接続アーキテクチャである。CCIXは、カーネルによって管理されたセマンティクスを周辺機器にもたらす。キャッシュコヒーレンシが、ホスト105上のCPUと、任意の数の周辺I/Oデバイス上に配置されてよいシステム内の他のさまざまなアクセラレータとの間で、常に自動的に維持される。
【0047】
しかしながら、ホスト105内のコヒーレントドメインを周辺I/Oデバイス135内の計算リソースを含むように拡張するために、QuickPath Interconnect(QPI)またはOmni-PathなどのCCIX以外のコヒーレント相互接続プロトコルが使用されてもよい。すなわち、コヒーレンシ処理エンジン540を、I/Oデバイス135内の計算リソースを含むコヒーレントドメインの形成を容易にする任意のタイプのコヒーレント相互接続プロトコルをサポートするようにカスタマイズすることができる。
【0048】
一実施形態において、コヒーレンシ処理エンジン540内の構成要素は硬化(例えば、プログラマブル論理回路を使用して形成されるのではない)であり、これは、エンジン540が、そのドメインに関するコヒーレンシ動作を担当できるだけでなく、マルチプロセッサシステムにおいてコヒーレンシが維持されることを確実にするための要求にも対処することができるため、性能向上を可能にする。図5に示される実施形態において、コヒーレンシ処理エンジン540は、ハイブリッドPCIコントローラ505のうちの1つにそれぞれ結合したブリッジ545と、メッシュ550と、キャッシュ555とを含む。ブリッジは、コヒーレント相互接続プロトコル(例えば、CCIX、QPI、Omni-Path、など)からISA固有相互接続プロトコル(例えば、x86、ARM、PowerPC(登録商標))へとデータを変換することができる。換言すると、ブリッジ545は、インターフェース上のプロトコルセマンティクスを管理し、コヒーレント動作に関連するメモリ動作を管理する。
【0049】
メッシュ550は、データを適切なキャッシュ555(または、I/Oデバイス135内の計算リソースからホスト105にコヒーレントデータを送信する場合には、ブリッジ545)へとルーティングするマルチプロセッサ相互接続である。
【0050】
ブロック420において、コヒーレンシ処理エンジン540は、ISA固有相互接続プロトコルを使用して、I/Oデバイス内のコヒーレントドメイン内の計算リソースへとコヒーレントデータトラフィックを送信する。上述したように、ブリッジ545が、コヒーレントデータトラフィックをコヒーレント相互接続プロトコルからISA固有相互接続プロトコルに変換し、次いでこれが、コヒーレンシ処理エンジン540から図5のPLアレイ205に転送される。すなわち、キャッシュ555が、PLアレイ205内のローカルキャッシュ560に結合し、ローカルキャッシュ560は、メモリアドレスをローカルメモリアドレスに変換するためのアドレス変換キャッシュ(ATC)565に結合する。次いで、コヒーレントデータトラフィックを、コヒーレントドメインに割り当てられたアレイ205内のPLブロックによって処理することができる。
【0051】
ブロック425において、ハイブリッドゲートウェイ140は、非コヒーレント相互接続プロトコル(例えば、Advanced eXtensible Interface(AXI)プロトコル)を使用してデータトラフィックを送信する。そのようにするために、ゲートウェイ140内のハイブリッドPCIコントローラ505は、I/O相互接続層520を使用して、受信したI/OデータトラフィックをPCIプロトコルから非コヒーレント相互接続プロトコルに変換する。次いで、このデータを、I/Oドメインに割り当てられたPLブロックによる処理のためにDMAエンジン530に転送することができる。データがDMAエンジン530に転送される場合、エンジン530は、ゲートウェイNoC 535(ハイブリッドゲートウェイ140内にあり、NoC 230とは別個であってよい)を使用して、データをメモリコントローラ215のうちの1つに転送することができる。すなわち、ゲートウェイNoC 535は、メモリコントローラ215および対応するメモリブロック(図5には図示せず)を使用してDMA読み出しおよび書き込み要求を実行することができるように、NoC 230に通信可能に結合する。
【0052】
したがって、方法400を使用して、ハイブリッドゲートウェイ140は、ホスト105からI/Oデータトラフィックおよびコヒーレントデータトラフィックを受信し、異なるハードウェア構成要素を使用してデータトラフィックを分離および処理し、処理のために適切な計算要素にデータを転送することができる。さらに、このプロセスは逆にも機能し、その場合、PL、メモリ、などにおける計算リソースによって処理されたデータが、ハイブリッドゲートウェイ140へと送信され、次いでPCIe接続130を使用してホスト105に送信される。
【0053】
一実施形態において、データは、ホスト105からハイブリッドゲートウェイ140へと流れ、相互接続層(I/O相互接続層520およびコヒーレント相互接続層525の両方)へと流れ、PLアレイ205(I/Oドメインに割り当てられたPLブロックおよびコヒーレントドメインに割り当てられたPLブロックの両方)へと流れ、次いでメモリブロック(I/Oドメインに割り当てられたメモリブロックおよびコヒーレントドメインに割り当てられたメモリブロックの両方)へと流れる。しかしながら、別の実施形態において、データは、ホスト105からハイブリッドゲートウェイ140へと流れ、相互接続層(I/Oおよびコヒーレントの両方)へと流れ、メモリブロック(I/Oメモリブロックおよびコヒーレントメモリブロックの両方)へと流れ、次いでPLアレイ205(I/O PLブロックおよびコヒーレントPLブロックの両方)へと流れる。一実施形態において、PLアレイ205からメモリブロック、またはメモリブロックからPLアレイ205へのデータの転送は、メモリコントローラ215、NoC 230、およびPLアレイ205の間の接続によって可能にされる。
【0054】
図6が、一例によるI/Oドメインおよびコヒーレントドメインに論理的に分割された計算リソースを有するコンピューティングシステム600を示している。システム600は、プロトコル、ディスカバリ、および構成に関して周辺デバイスとして関与するSoC 620を含む。一方で、コヒーレントドメイン670の一部であるハードウェア要素は、ホスト135のプロセッサ-メモリ複合体に対するプロセッサ-メモリピアとして、ホスト135内のOS/カーネル(図示せず)によって管理される。SoC 620内のプログラマブル論理回路およびNoCは、I/O PL 640、コヒーレントPL 645、論理回路655、およびアクセラレータ論理回路650を使用する異種アクセラレーション機能の実行において、I/Oドメイン675とコヒーレントドメイン670との間のデバイス上通信、トラフィックフロー、およびインターフェースを提供する。
【0055】
さらに、システム600は、I/Oドメイン675またはコヒーレントドメイン670のいずれかにおいて、計算データセット、計算結果、または制御プロセッサと異種デバイスとの間の任意の通信ハンドシェイク(ドアベル、I/O割り込み、DMAディスクリプタ、セマフォ、など)を見つける柔軟性を提供する。
【0056】
CPU、I/Oデバイス、アクセラレータ、PL要素、およびメモリなどのシステム構成要素は、本明細書に記載の実施形態を使用して、いずれかのドメインで機能を実行することができる。システム600においても、PL要素、NoC構成および帯域幅、ならびにオンダイメモリ(例えば、I/O管理メモリ660およびコヒーレントメモリ665)およびホスト付属メモリ605などの構成要素を、両方のドメインのためのサーバ/ホストに対する共通ゲートウェイとして機能するハイブリッドゲートウェイ140によって、特定のシステムおよび/または用途の要件に対応するために、I/Oドメイン675とコヒーレントドメイン670との間で論理的に分割することができる。
【0057】
ハイブリッドゲートウェイ140内のハードウェアリソースを、I/Oハードウェア630(例えば、図5のI/O相互接続層520およびDMAエンジン530)およびコヒーレントハードウェア635(例えば、コヒーレント相互接続層525およびコヒーレンシ処理エンジン540)に分割することができる。さらに、I/O管理メモリ660およびI/Oデバイスドライバ管理メモリ610が、I/Oドメイン675に割り当てられる一方で、コヒーレントメモリ615およびホスト付属メモリ605ならびにSoC 620内のコヒーレントメモリ665は、コヒーレントドメイン670に割り当てられる。
【0058】
本明細書における実施形態の1つの利点は、周辺デバイスの制御および通信を実行するようにカスタマイズされ、ホストCPU-メモリ複合体上で動作するI/OデバイスドライバをオフロードするPL(ホストCPU-メモリ複合体上で動作するI/Oデバイスドライバではなく)によって、周辺I/Oデバイスを制御および通信できることである。次いで、PLは、コヒーレントドメインを介してピアとしてホストCPU-メモリ複合体と通信/協調する。
【0059】
本明細書における実施形態の別の利点は、コプロセッサ/アクセラレータモデルならびにそのモデルによって提供されるすべてのソフトウェアおよび性能効率を、異機種デバイスがCPU-メモリ複合体との同一ISA同一メモリピアを含むことを必要とせずに、活用できることである。代わりに、周辺付属コヒーレントアクセラレーションおよび通信を有することにより、マルチプロセッサシステムが使用される同じプロセッサ間共有メモリモデルを、CPU-デバイスアクセラレータ通信にも使用することが可能になる。
【0060】
本明細書における実施形態の別の利点は、I/O周辺デバイス機能およびコヒーレントアクセラレータ/メモリ機能の各々の部分へとユーザのニーズによって分割することができるQoS属性を有する共有NoC、QOS制御共有リソース/バッファ、およびメモリを有する統合ソリューションを提供することである。
【0061】
図7が、I/O周辺デバイス135、より具体的には図2のPLアレイ205を有するI/O周辺デバイスについて、多数の異なるプログラマブルタイルを含むFPGA 700による実装形態を示しており、これらのプログラマブルタイルは、トランシーバ37、CLB 33、BRAM 34、入力/出力ブロック(「IOB」)36、構成およびクロッキング論理回路(「CONFIG/CLOCKS」)42、DSPブロック35、専用入力/出力ブロック(「IO」)41(例えば、構成ポートおよびクロックポート)、ならびにデジタルクロックマネージャ、アナログデジタル変換器、システム監視論理回路、などのその他のプログラマブル論理回路39を含む。FPGAは、PCIeインターフェース40、アナログ-デジタル変換器(ADC)38、などをさらに含むことができる。
【0062】
いくつかのFPGAにおいて、各々のプログラマブルタイルは、図7の上部に含まれる例によって示されるように、同じタイル内のプログラマブル論理要素の入力および出力端子48への接続を有する少なくとも1つのプログラマブル相互接続要素(「INT」)43を含むことができる。各々のプログラマブル相互接続要素43は、同じタイルまたは他のタイル内の隣接するプログラマブル相互接続要素の相互接続セグメント49への接続をさらに含むことができる。各々のプログラマブル相互接続要素43は、論理ブロック(図示せず)間の汎用ルーティングリソースの相互接続セグメント50への接続をさらに含むことができる。汎用ルーティングリソースは、相互接続セグメント(例えば、相互接続セグメント50)のトラックを含む論理ブロック(図示せず)と、相互接続セグメントを接続するためのスイッチブロック(図示せず)との間のルーティングチャネルを含むことができる。汎用ルーティングリソースの相互接続セグメント(例えば、相互接続セグメント50)は、1つ以上の論理ブロックにまたがることができる。プログラマブル相互接続要素43は、汎用ルーティングリソースと共に、図示のFPGAのためのプログラマブル相互接続構造(「プログラマブル相互接続」)を実装する。
【0063】
例示的な実装形態において、CLB 33は、ユーザ論理回路を実装するようにプログラムすることができる構成可能論理要素(「CLE」)44と、単一のプログラマブル相互接続要素(「INT」)43とを含むことができる。BRAM 34は、1つ以上のプログラマブル相互接続要素に加えて、BRAM論理要素(「BRL」)45を含むことができる。一実施形態において、BRAM 34は、上述のように再構成の際に格納済みのデータを保持することができるメモリ140の一部である。典型的には、タイルに含まれる相互接続要素の数は、タイルの高さに依存する。図示の例において、BRAMタイルは、5つのCLBと同じ高さを有するが、他の数(例えば、4)を使用することも可能である。DSPブロック35は、適切な数のプログラマブル相互接続要素に加えて、DSP論理要素(「DSPL」)46を含むことができる。IOB 36は、例えば、プログラマブル相互接続要素43の1つのインスタンスに加えて、入力/出力論理要素(「IOL」)47の2つのインスタンスを含むことができる。当業者にとって明らかであるとおり、例えばIO論理要素47に接続される実際のIOパッドは、通常は、入力/出力論理要素47の領域に限定されない。
【0064】
図示の例では、(図7に示される)ダイの中心付近の水平領域は、構成、クロック、および他の制御論理回路に使用される。この水平領域または列から延びる垂直列51は、FPGAの広がりを横切ってクロックおよび構成信号を分配するために使用される。
【0065】
図7に示されるアーキテクチャを利用するいくつかのFPGAは、FPGAの大部分を構成する規則的な列構造を乱す追加の論理ブロックを含む。追加の論理ブロックは、プログラマブルブロックおよび/または専用論理回路であってよい。
【0066】
図7が、例示的なFPGAアーキテクチャのみを示すことを意図していることに、留意されたい。例えば、行における論理ブロックの数、行の相対幅、行の数および順序、行に含まれる論理ブロックの種類、論理ブロックの相対サイズ、ならびに図7の上部に含まれる相互接続/論理回路の実装形態は、例示にすぎない。例えば、実際のFPGAにおいては、ユーザ論理の効率的な実装形態を容易にするために、通常は、CLBが現れるあらゆる場所に2つ以上の隣接するCLB行が含まれるが、隣接するCLB行の数は、FPGAの全体サイズにつれて変化する。
【0067】
上記では、本開示に提示された実施形態が参照されている。しかしながら、本開示の範囲は、特定の記載された実施形態に限定されない。代わりに、記載された特徴および要素の任意の組み合わせが、異なる実施形態に関係していても、あるいはそのようでなくても、想定される実施形態を実装および実施するために想定される。さらに、本明細書に開示された実施形態は、他の可能な解決策または先行技術を超える利点を達成することができるが、所与の実施形態によって特定の利点が達成されるか否かは、本開示の範囲を限定するものではない。したがって、前述の態様、特徴、実施形態および利点は、あくまでも例示であり、特許請求の範囲に明示的に記載されている場合を除いて、添付の特許請求の範囲の要素または限定とは見なされない。
【0068】
当業者であれば理解できるとおり、本明細書に開示される実施形態は、システム、方法、またはコンピュータプログラム製品として具現化可能である。したがって、いくつかの態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコード、などを含む)、あるいはソフトウェアおよびハードウェアの態様を組み合わせた実施形態の形態をとることができ、これらはすべて、本明細書において「回路」、「モジュール」、または「システム」と一般的に呼ばれ得る。さらに、いくつかの態様は、コンピュータ可読プログラムコードが具現化された1つ以上のコンピュータ可読媒体に具現化されたコンピュータプログラム製品の形態をとることができる。
【0069】
1つ以上のコンピュータ可読媒体の任意の組み合わせを利用することができる。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体であってよい。コンピュータ可読記憶媒体は、例えば、電子、磁気、光学、電磁気、赤外線、または半導体のシステム、装置、またはデバイス、あるいはこれらの任意の適切な組み合わせであってよいが、これらに限られるわけではない。コンピュータ可読記憶媒体のより具体的な例(これですべてではないリスト)は、下記、すなわち1つ以上の配線を有する電気的接続、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)、消去可能プログラマブル読み出し専用メモリ(EPROMまたはフラッシュメモリ)、光ファイバ、ポータブルコンパクトディスク読み出し専用メモリ(CD-ROM)、光記憶装置、磁気記憶装置、またはこれらの任意の適切な組み合わせを含むと考えられる。本明細書の文脈において、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによって使用され、あるいはこれらに関連して使用されるプログラムを含み、あるいは格納することができる任意の有形の媒体である。
【0070】
コンピュータ可読信号媒体は、例えばベースバンドにおいて、または搬送波の一部として、コンピュータ可読プログラムコードが具現化された伝搬データ信号を含むことができる。そのような伝搬信号は、これらに限られるわけではないが電磁気、光学、またはそれらの任意の適切な組み合わせを含むさまざまな形態のいずれかをとることができる。コンピュータ可読信号媒体は、コンピュータ可読記憶媒体ではなく、命令実行システム、装置、またはデバイスによって使用され、あるいはこれらに関連して使用されるプログラムを伝達し、伝播させ、あるいは運ぶことができる任意のコンピュータ可読媒体であってよい。
【0071】
コンピュータ可読媒体上に具現化されたプログラムコードを、これらに限られるわけではないが無線、有線、光ファイバケーブル、RFなど、またはこれらの任意の適切な組み合わせを含む任意の適切な媒体を使用して伝送することができる。
【0072】
本開示の態様のための動作を実行するためのコンピュータプログラムコードを、Java(登録商標)、Smalltalk、C++、などのオブジェクト指向プログラミング言語、ならびに「C」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む1つ以上のプログラミング言語の任意の組み合わせで記述することができる。プログラムコードを、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロンソフトウェアパッケージとして、部分的にユーザのコンピュータ上で、部分的にリモートコンピュータ上で、または完全にリモートコンピュータもしくはサーバ上で実行することができる。後者の状況において、リモートコンピュータは、ローカルエリアネットワーク(LAN)またはワイドエリアネットワーク(WAN)を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、あるいは接続は外部コンピュータへと(例えば、インターネットサービスプロバイダを使用してインターネットを介して)行われてもよい。
【0073】
本開示の態様は、本開示に提示された実施形態による方法、装置(システム)、およびコンピュータプログラム製品のフローチャート図および/またはブロック図を参照して以下で説明される。フローチャート図および/またはブロック図の各ブロック、ならびにフローチャート図および/またはブロック図のブロックの組み合わせを、コンピュータプログラム命令によって実現できることを、理解できるであろう。これらのコンピュータプログラム命令を、汎用コンピュータ、専用コンピュータ、または他のプログラマブルデータ処理装置のプロセッサに提供して、これらの命令がコンピュータまたは他のプログラマブルデータ処理装置のプロセッサによって実行されることで、フローチャートおよび/またはブロック図の1つ以上のブロックに指定された機能/動作を実現するための手段が生み出されるように、マシンを生成することができる。
【0074】
さらに、これらのコンピュータプログラム命令は、これらの命令がコンピュータ可読媒体に格納されることで、フローチャートおよび/またはブロック図の1つ以上のブロックに指定された機能/動作を実現する命令を含む製造物が生み出されるように、コンピュータ、他のプログラマブルデータ処理装置、または他のデバイスに特定のやり方で機能するように指示することができるコンピュータ可読媒体に格納されてよい。
【0075】
さらに、コンピュータプログラム命令を、これらの命令がコンピュータまたは他のプログラマブル装置上で実行されることで、フローチャートおよび/またはブロック図の1つ以上のブロックに指定された機能/動作を実現するためのプロセスがもたらされるように、コンピュータ、他のプログラマブルデータ処理装置、または他のデバイスにロードして、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させ、コンピュータによって実現されるプロセスを生み出すことができる。
【0076】
図面におけるフローチャートおよびブロック図は、本発明のさまざまな例によるシステム、方法、およびコンピュータプログラム製品の可能な実装形態のアーキテクチャ、機能、および動作を示している。これに関して、フローチャートまたはブロック図の各ブロックは、指定された論理機能を実現するための1つ以上の実行可能命令を含むモジュール、セグメント、または命令の一部を表すことができる。いくつかの代替の実装形態において、ブロックに記載された機能は、図面に記載された順序以外の順序で行われてもよい。例えば、連続して示されている2つのブロックは、実際には、実質的に同時に実行されてもよく、あるいはブロックは、場合によっては、関連する機能に応じて、逆の順序で実行されてもよい。また、ブロック図および/またはフローチャート図の各ブロック、ならびにブロック図および/またはフローチャート図のブロックの組み合わせを、指定された機能または動作を実行し、あるいは専用ハードウェアとコンピュータ命令の組み合わせを実行する専用ハードウェアに基づくシステムによって実装できることに留意されたい。
【0077】
上記は特定の例を対象としているが、その基本的な範囲から逸脱することなく、他のさらなる例を考案することができ、その範囲は、以下の特許請求の範囲によって決定される。
図1
図2
図3
図4
図5
図6
図7