(57)【要約】  システムが、通信バスに接続されたホストプロセッサ（１０５）と、通信バスを通してホストプロセッサ（１０５）に通信可能にリンクされた第１のハードウェアアクセラレータ（１３５−１）と、通信バスを通してホストプロセッサ（１０５）に通信可能にリンクされた第２のハードウェアアクセラレータ（１３５−２）とを含み得る。第１のハードウェアアクセラレータ（１３５−１）と第２のハードウェアアクセラレータ（１３５−２）とは、通信バスから独立したアクセラレータリンクを通して直接接続される。ホストプロセッサ（１０５）は、アクセラレータリンクを直接通した、第１のハードウェアアクセラレータ（１３５−１）と第２のハードウェアアクセラレータ（１３５−２）との間のデータ転送を開始するように設定される。【選択図】図１
2021530813.tif 000002
【特許請求の範囲】
【請求項１】
通信バスに接続されたホストプロセッサと、
前記通信バスを通して前記ホストプロセッサに通信可能にリンクされた第１のハードウェアアクセラレータと、
前記通信バスを通して前記ホストプロセッサに通信可能にリンクされた第２のハードウェアアクセラレータと
を備える、システムであって、
前記第１のハードウェアアクセラレータと前記第２のハードウェアアクセラレータとが、前記通信バスから独立したアクセラレータリンクを通して直接接続され、
前記ホストプロセッサが、前記アクセラレータリンクを直接通した、前記第１のハードウェアアクセラレータと前記第２のハードウェアアクセラレータとの間のデータ転送を開始するように設定された、システム。
【請求項２】
前記データ転送は、前記第１のハードウェアアクセラレータが、前記アクセラレータリンクを通して前記第２のハードウェアアクセラレータのメモリにアクセスすることを含む、請求項１に記載のシステム。
【請求項３】
前記ホストプロセッサが、ターゲットアドレスを含むデータを前記第１のハードウェアアクセラレータに送ることによって前記第２のハードウェアアクセラレータの前記メモリにアクセスするように設定され、前記ターゲットアドレスが、前記第２のハードウェアアクセラレータに対応するように前記ホストプロセッサによって変換され、前記第１のハードウェアアクセラレータが、前記ターゲットアドレスに基づいて、前記アクセラレータリンクを介して前記第２のハードウェアアクセラレータの前記メモリにアクセスするためのトランザクションを開始する、請求項２に記載のシステム。
【請求項４】
前記第２のハードウェアアクセラレータは、前記アクセラレータリンクを介してトランザクションを受信したことに応答して、前記第２のハードウェアアクセラレータについてのアドレス範囲の上限だけ、前記データ転送についてのターゲットアドレスを減分することと、前記減分されたターゲットアドレスがローカルであるかどうかを決定することとを行うように設定された、請求項１に記載のシステム。
【請求項５】
前記ホストプロセッサが、前記通信バスに接続された前記第２のハードウェアアクセラレータの直接メモリアクセス回路のステータスに基づいて、前記第１のハードウェアアクセラレータと前記第２のハードウェアアクセラレータとの間の前記データ転送を開始するように設定された、請求項１に記載のシステム。
【請求項６】
前記ホストプロセッサが、リングトポロジーにおいて前記第１のハードウェアアクセラレータおよび前記第２のハードウェアアクセラレータのシーケンスを自動的に決定するように設定された、請求項１に記載のシステム。
【請求項７】
前記ホストプロセッサが、リモートバッファフラグを使用して、前記第１のハードウェアアクセラレータおよび前記第２のハードウェアアクセラレータに対応するバッファを追跡するように設定された、請求項１に記載のシステム。
【請求項８】
集積回路であって、
通信バスを介してホストプロセッサと通信するように設定されたエンドポイントと、
前記集積回路にローカルなメモリに接続されたメモリコントローラと、
前記エンドポイントと前記メモリコントローラとに接続されたリンク回路と
を備え、前記リンク回路が、前記通信バスにも接続されたターゲットハードウェアアクセラレータとのアクセラレータリンクを確立するように設定され、前記アクセラレータリンクが、前記通信バスから独立した、前記集積回路と前記ターゲットハードウェアアクセラレータとの間の直接接続である、集積回路。
【請求項９】
前記リンク回路が、前記アクセラレータリンクを介した前記ターゲットハードウェアアクセラレータとのデータ転送を開始するように設定され、前記データ転送が、前記通信バスを介して前記集積回路によって受信された前記ホストプロセッサからの命令に応答して行われる、請求項８に記載の集積回路。
【請求項１０】
前記ターゲットハードウェアアクセラレータが、前記集積回路のアドレス範囲の上限だけ、前記集積回路から受信されたトランザクションにおいてターゲットアドレスを減分するように設定された、請求項８に記載の集積回路。
【請求項１１】
第１のハードウェアアクセラレータ内で、通信バスを介してホストプロセッサから送られた命令とデータ転送についてのターゲットアドレスとを受信することと、
前記第１のハードウェアアクセラレータが、前記ターゲットアドレスを、前記第１のハードウェアアクセラレータに対応するアドレス範囲の上限と比較することと、
前記比較することに基づいて前記ターゲットアドレスが前記アドレス範囲を超えると決定したことに応答して、前記第１のハードウェアアクセラレータが、前記第１のハードウェアアクセラレータと第２のハードウェアアクセラレータとを直接接続するアクセラレータリンクを使用してデータ転送を実施するために、前記第２のハードウェアアクセラレータとのトランザクションを開始することと
を含む、方法。
【請求項１２】
前記アクセラレータリンクが前記通信バスから独立している、請求項１１に記載の方法。
【請求項１３】
前記第２のハードウェアアクセラレータにおいて前記トランザクションを受信したことに応答して、前記第２のハードウェアアクセラレータは、前記ターゲットアドレスから前記第２のハードウェアアクセラレータのアドレス範囲の上限を減算することと、前記減算することの結果が、前記第２のハードウェアアクセラレータの前記アドレス範囲内にあるかどうかを決定することと
をさらに含む、請求項１１に記載の方法。
【請求項１４】
前記第２のハードウェアアクセラレータの直接メモリアクセス回路のステータスを決定することと、
前記第２のハードウェアアクセラレータの前記直接メモリアクセス回路の前記ステータスに応答して前記データ転送を開始することと
をさらに含む、請求項１１に記載の方法。
【請求項１５】
前記データ転送は、前記第１のハードウェアアクセラレータが、前記アクセラレータリンクを通して前記第２のハードウェアアクセラレータのメモリにアクセスすることを含む、請求項１１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、ハードウェアアクセラレーションに関し、より詳細には、統合されたアドレス空間および低レイテンシ通信リンクを通した複数のハードウェアアクセラレータの使用を可能にすることに関する。
【背景技術】
【０００２】
異種コンピューティングプラットフォーム（ＨＣＰ：ｈｅｔｅｒｏｇｅｎｅｏｕｓ  ｃｏｍｐｕｔｉｎｇ  ｐｌａｔｆｏｒｍ）は、インターフェース回路を通して１つまたは複数の他のデバイスに接続されたホストプロセッサを含むデータ処理システムを指す。デバイスは、一般に、アーキテクチャ上、ホストプロセッサとは異なる。ホストプロセッサは、デバイスにタスクをオフロードすることが可能である。デバイスは、そのタスクを実施し、ホストプロセッサにとって利用可能な結果を作ることが可能である。例示的な例として、ホストプロセッサは、一般に、中央処理ユニットとして実装され、デバイスは、グラフィックス処理ユニット（ＧＰＵ）および／またはデジタル信号プロセッサ（ＤＳＰ）として実装される。
【０００３】
他のＨＣＰでは、ホストプロセッサからオフロードされたタスクを実施するデバイスのうちの１つまたは複数が、（「ハードウェアアクセラレータ」と呼ばれる）ハードウェアアクセラレーションのために適応されたデバイスを含む。ハードウェアアクセラレータは、タスクを実施するためにソフトウェアまたはプログラムコードを実行することとは対照的に、ホストからオフロードされたタスクを実施することが可能である回路を含む。ハードウェアアクセラレータの回路は、ソフトウェアを実行することと機能的に等価であるが、一般に、より少ない時間においてタスクを完了することが可能である。
【０００４】
ハードウェアアクセラレータの例は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、部分的にプログラム可能な集積回路（ＩＣ）、特定用途向けＩＣ（ＡＳＩＣ）など、プログラマブルＩＣを含む。明らかに、ＨＣＰは、１つまたは複数がプログラムコードを実行するように適応され、１つまたは複数の他のものがハードウェアアクセラレーションのために適応された、異なるデバイスの組合せを含み得る。
【発明の概要】
【０００５】
１つまたは複数の実施形態では、システムが、通信バスに接続されたホストプロセッサと、通信バスを通してホストプロセッサに通信可能にリンクされた第１のハードウェアアクセラレータと、通信バスを通してホストプロセッサに通信可能にリンクされた第２のハードウェアアクセラレータとを含み得る。第１のハードウェアアクセラレータと第２のハードウェアアクセラレータとは、通信バスから独立したアクセラレータリンクを通して直接接続される。ホストプロセッサは、アクセラレータリンクを直接通した、第１のハードウェアアクセラレータと第２のハードウェアアクセラレータとの間のデータ転送を開始するように設定される。
【０００６】
１つまたは複数の実施形態では、ハードウェアアクセラレータは、通信バスを介してホストプロセッサと通信するように設定されたエンドポイントと、ハードウェアアクセラレータにローカルなメモリに接続されたメモリコントローラと、エンドポイントとメモリコントローラとに接続されたリンク回路とを含み得る。リンク回路は、通信バスにも接続されたターゲットハードウェアアクセラレータとのアクセラレータリンクを確立するように設定される。アクセラレータリンクは、通信バスから独立した、ハードウェアアクセラレータとターゲットハードウェアアクセラレータとの間の直接接続である。
【０００７】
１つまたは複数の実施形態では、方法が、第１のハードウェアアクセラレータ内で、通信バスを介してホストプロセッサから送られた命令とデータ転送についてのターゲットアドレスとを受信することと、第１のハードウェアアクセラレータが、ターゲットアドレスを、第１のハードウェアアクセラレータに対応するアドレス範囲の上限と比較することと、比較することに基づいてターゲットアドレスがアドレス範囲を超えると決定したことに応答して、第１のハードウェアアクセラレータが、第１のハードウェアアクセラレータと第２のハードウェアアクセラレータとを直接接続するアクセラレータリンクを使用してデータ転送を実施するために、第２のハードウェアアクセラレータとのトランザクションを開始することとを含み得る。
【０００８】
本発明の概要セクションは、いくつかの概念を導入するために提供されるにすぎず、請求される主題の重要な、または本質的な特徴を識別するために提供されるものではない。本発明の構成の他の特徴は、添付の図面および以下の発明を実施するための形態から明らかになろう。
【０００９】
本発明の構成は、添付の図面において例として示される。しかしながら、図面は、本発明の構成を、図示される特定の実装形態のみに限定するものと解釈されるべきではない。様々な態様および利点が、以下の発明を実施するための形態を検討し、図面を参照すると明らかになろう。
【図面の簡単な説明】
【００１０】
【図１】複数のハードウェアアクセラレータをもつシステムの一例を示す図である。
【図２】ハードウェアアクセラレータの例示的な一実装形態を示す図である。
【図３】再送信エンジン（ＲＴＥ：ｒｅｔｒａｎｓｍｉｔ  ｅｎｇｉｎｅ）の一例を示す図である。
【図４】複数のハードウェアアクセラレータをもつシステムのための動作の例示的な方法を示す図である。
【図５】複数のハードウェアアクセラレータと１つまたは複数の追加のデバイスとをもつシステムの一例を示す図である。
【図６】集積回路（ＩＣ）のための例示的なアーキテクチャを示す図である。
【発明を実施するための形態】
【００１１】
本開示は、新規の特徴を定義する特許請求の範囲で締めくくるが、本開示内で説明される様々な特徴は、図面とともにその説明を考慮することにより、より良く理解されると考えられる。本明細書で説明される（１つまたは複数の）プロセス、（１つまたは複数の）機械、（１つまたは複数の）製造物およびその任意の変形形態は、例示のために提供される。本開示内で説明される特定の構造的および機能的詳細は、限定するものとして解釈されるべきではなく、単に、特許請求の範囲のための基礎として、およびほぼすべての適切に詳細な構造において説明される特徴を様々に採用するように当業者に教示するための代表的基礎として解釈されるべきである。さらに、本開示内で使用される用語および句は、限定するものではなく、むしろ、説明される特徴の理解可能な説明を提供するものである。
【００１２】
本開示は、ハードウェアアクセラレーションに関し、より詳細には、統合されたアドレス空間および低レイテンシ通信リンクを通した複数のハードウェアアクセラレータの使用を可能にすることに関する。データ処理システムとともにハードウェアアクセラレータを使用することが、ホストプロセッサからタスクをオフロードするための有効な技法になっており、それにより、ホストプロセッサ上の作業負荷を低減する。ハードウェアアクセラレータは、一般に、バスを通してホストプロセッサに取り付けられる。たとえば、ハードウェアアクセラレータは、ホストシステムの利用可能なバススロットに挿入された回路板に取り付けられ得る。一般に、各ハードウェアアクセラレータは、対応する回路板に取り付けられる。システムに追加のハードウェアアクセラレータを追加することは、通常、利用可能なバススロットにハードウェアアクセラレータをもつ追加の回路板を挿入することを伴う。
【００１３】
従来のシステム内では、特に（たとえば、ハードウェアアドレスによって）任意の新たに追加されたハードウェアアクセラレータにアクセスするために、ホストプロセッサによって実行されるアプリケーションが、更新され、および／または書き直されなければならない。さらに、あるハードウェアアクセラレータから別のハードウェアアクセラレータにデータを転送するために、データは、ソースハードウェアアクセラレータからホストプロセッサに移動され、次いで、ホストプロセッサからターゲットハードウェアアクセラレータまで移動される。データは、バスを介してホストプロセッサを通して各ハードウェアアクセラレータにおよび各ハードウェアアクセラレータから移動する。したがって、システムに追加される各追加のハードウェアアクセラレータが、バス上のデバイスの数を増加させ、それにより、バス上の帯域幅についての競合を生じる。ハードウェアアクセラレータ（または他のデバイス）によって実施されるタスクの複雑さ、数、および／またはサイズが増加するにつれて、バス上の利用可能帯域幅がさらに制約される。
【００１４】
本開示内で説明される本発明の構成によれば、デバイスのための統合されたアドレス空間が提供される。さらに、本明細書では「アクセラレータリンク」と呼ばれる、バスから独立して動作することが可能であるハードウェアアクセラレータ間の直接通信リンクが提供される。ホストプロセッサによって実行されるアプリケーションが、システムにおける特定のハードウェアアクセラレータを直接参照する（たとえば、アドレス指定する）ことなしに動作し得るように、ホストによって実行されるランタイムライブラリおよびドライバが、統合されたアドレス空間を活用することが可能である。ランタイムライブラリは、ハードウェアアクセラレータの間のデータ転送を実現するために使用するための適切なアドレスを決定することが可能である。したがって、アプリケーションは、システムに追加され得る追加のハードウェアアクセラレータにアクセスするために修正される必要がない。さらに、データ転送がアクセラレータリンクを介して実施され得、アクセラレータリンクは、データが、ホストプロセッサを通過することなしに、あるハードウェアアクセラレータから別のハードウェアアクセラレータに直接転送されることを可能にし、バスを効果的にバイパスする。したがって、バス上のハードウェアアクセラレータによって使用される帯域幅が著しく低減され、それにより、全体的なシステム性能を増加させ得る。
【００１５】
述べられたように、ホストプロセッサによって実行されるプログラムコード（たとえば、アプリケーション）に対する対応する変更または修正を必要とすることなしに、既存のアドレス空間を使用して追加のハードウェアアクセラレータがシステムに追加され得る。これは、少なくとも部分的に、ハードウェアアクセラレータボードについての自動発見プロセスの実装、およびそのようなボードをシステムに追加することの実装、リモートバッファフラグ対ローカルバッファフラグの使用、少なくともいくつかの場合におけるデータ転送のためのアクセラレータリンクへの自動切替え、ならびにリモートバッファのための自動アドレス変換を通してサポートされる。
【００１６】
図を参照しながら、本発明の構成のさらなる態様が以下でより詳細に説明される。例示を単純および明快にするために、図に示されている要素は、必ずしも一定の縮尺で描かれているとは限らない。たとえば、要素のうちのいくつかの寸法は、明快のために、他の要素に対して誇張され得る。さらに、適切と見なされる場合、対応する、類似する、または同様の特徴を指示するために、参照番号が図の間で繰り返される。
【００１７】
図１は、複数のハードウェアアクセラレータをもつシステム１００の一例を示す。システム１００は、コンピュータ、サーバ、または他のデータ処理システムを実装するために使用され得るコンピュータハードウェアの一例である。システム１００は、異種コンピューティングシステムの一例でもある。描かれているように、システム１００は、インターフェース回路１１５を通してホストメモリ１１０に接続された少なくとも１つのホストプロセッサ１０５を含む。
【００１８】
システム１００は、複数のハードウェアアクセラレータ１３５をも含む。図１の例では、システム１００は、３つのハードウェアアクセラレータ１３５−１、１３５−２、および１３５−３を含む。図１の例は、３つのハードウェアアクセラレータを示しているが、システム１００は、３つよりも少ないハードウェアアクセラレータまたは４つ以上のハードウェアアクセラレータを含み得ることを諒解されたい。さらに、システム１００は、グラフィックス処理ユニット（ＧＰＵ）またはデジタル信号プロセッサ（ＤＳＰ）など、１つまたは複数の他のデバイスを含み得る。
【００１９】
システム１００は、ホストメモリ１１０内に（「プログラムコード」とも呼ばれる）コンピュータ可読命令を記憶することが可能である。ホストメモリ１１０は、コンピュータ可読記憶媒体の一例である。ホストプロセッサ１０５は、インターフェース回路１１５を介してホストメモリ１１０からアクセスされるプログラムコードを実行することが可能である。１つまたは複数の実施形態では、ホストプロセッサ１０５は、メモリコントローラ（図示せず）を通してホストメモリ１１０と通信する。
【００２０】
ホストメモリ１１０は、たとえば、ローカルメモリおよびバルク記憶デバイス（ｂｕｌｋ  ｓｔｏｒａｇｅ  ｄｅｖｉｃｅ）など、１つまたは複数の物理メモリデバイスを含み得る。ローカルメモリは、概してプログラムコードの実際の実行中に使用される（１つまたは複数の）非永続的メモリデバイスを指す。ローカルメモリの例は、ランダムアクセスメモリ（ＲＡＭ）、および／または、ＤＲＡＭ、ＳＲＡＭ、ＤＤＲ  ＳＤＲＡＭなど、プログラムコードの実行中のプロセッサによる使用のために好適である様々なタイプのＲＡＭのいずれかを含む。バルク記憶デバイスは、永続的データ記憶デバイスを指す。バルク記憶デバイスの例は、限定はしないが、ハードディスクドライブ（ＨＤＤ）、ソリッドステートドライブ（ＳＳＤ）、フラッシュメモリ、読取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読取り専用メモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブル読取り専用メモリ（ＥＥＰＲＯＭ）、または他の好適なメモリを含む。システム１００は、プログラムコードが実行中にバルク記憶デバイスから取り出されなければならない回数を低減するために少なくともあるプログラムコードの一時的記憶を行う１つまたは複数のキャッシュメモリ（図示せず）をも含み得る。
【００２１】
ホストメモリ１１０は、プログラムコードおよび／またはデータを記憶することが可能である。たとえば、ホストメモリ１１０は、オペレーティングシステム１２０と、命令１２５と、データ１３０とを記憶し得る。図１の例では、命令１２５は、１つまたは複数のアプリケーション１７０と、（本明細書では「ランタイム」と呼ばれる）ランタイムライブラリ１７２と、ハードウェアアクセラレータ１３５と通信することが可能であるドライバ１７４とを含み得る。ランタイム１７２は、完了イベントをハンドリングすることと、コマンド待ち行列を管理することと、（１つまたは複数の）アプリケーション１７０に通知を提供することとが可能である。データ１３０は、他のタイプのデータ項目のうち、ハードウェアアクセラレータ１３５間の直接データ転送を可能にする、バッファオブジェクト１７６および１７８などのバッファオブジェクトを含み得る。バッファオブジェクト１７６は、リモートフラグ１８０を含み、バッファオブジェクト１７８は、リモートフラグ１８２を含む。例示の目的で、リモートフラグ１８０はセットされておらず、リモートフラグ１８２はセットされている。システム１００、たとえば、ホストプロセッサ１０５は、本開示内で説明される動作を実施するために、オペレーティングシステム１２０と命令１２５とを実行することが可能である。
【００２２】
インターフェース回路１１５の例は、限定はしないが、システムバスと入出力（Ｉ／Ｏ）バスとを含む。インターフェース回路１１５は、様々なバスアーキテクチャのいずれかを使用して実装され得る。バスアーキテクチャの例は、限定はしないが、拡張業界標準アーキテクチャ（ＥＩＳＡ）バス、アクセラレーテッドグラフィックスポート（ＡＧＰ）、ビデオエレクトロニクス規格協会（ＶＥＳＡ）ローカルバス、ユニバーサルシリアルバス（ＵＳＢ）、および周辺構成要素相互接続エクスプレス（ＰＣＩｅ）バスを含み得る。ホストプロセッサ１０５は、ハードウェアアクセラレータ１３５に結合するために使用されるものとは異なるインターフェース回路を通してホストメモリ１１０に接続され得る。例示の目的で、ホストプロセッサ１０５がそれを通して他のデバイスと通信するインターフェース回路１１５のためのエンドポイントは示されていない。
【００２３】
システム１００は、インターフェース回路１１５に接続された１つまたは複数の他のＩ／Ｏデバイス（図示せず）をさらに含み得る。Ｉ／Ｏデバイスは、直接、または介在するＩ／Ｏコントローラを通してのいずれかで、システム１００、たとえば、インターフェース回路１１５に接続され得る。Ｉ／Ｏデバイスの例は、限定はしないが、キーボード、ディスプレイデバイス、ポインティングデバイス、１つまたは複数の通信ポート、およびネットワークアダプタを含む。ネットワークアダプタは、システム１００が、介在するプライベートまたは公衆ネットワークを通して他のシステム、コンピュータシステム、リモートプリンタ、および／またはリモート記憶デバイスに接続されるようになることを可能にする回路を指す。モデム、ケーブルモデム、イーサネットカード、およびワイヤレストランシーバが、システム１００とともに使用され得る異なるタイプのネットワークアダプタの例である。
【００２４】
図１の例では、ハードウェアアクセラレータ１３５−１、１３５−２、および１３５−３の各々は、それぞれ、メモリ１４０−１、１４０−２、および１４０−３に接続される。メモリ１４０−１、１４０−２、および１４０−３は、概してホストメモリ１１０に関して説明されるようなＲＡＭとして実装される。１つまたは複数の実施形態では、各ハードウェアアクセラレータ１３５は、ＩＣとして実装される。ＩＣはプログラマブルＩＣであり得る。プログラマブルＩＣの一例は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）である。
【００２５】
図１の例では、ハードウェアアクセラレータ１３５の各々は、エンドポイント１４５と、リンク回路１５０と、（図１では「ＭＣ」と省略される）メモリコントローラ１５５と、相互接続回路１６８とを含む。各ハードウェアアクセラレータ１３５は、（図１では「ＣＵ」と省略される）１つまたは複数の算出ユニットをも含む。算出ユニットは、ホストプロセッサ１０５からオフロードされたタスクを実施することが可能である回路である。例示の目的で、ハードウェアアクセラレータ１３５の各々は、算出ユニット１６０と、算出ユニット１６５とを含むように示されている。ハードウェアアクセラレータ１３５は、図示されているよりも少ないまたは多い算出ユニットを含み得ることを諒解されたい。
【００２６】
一例では、エンドポイント１４５の各々は、ＰＣＩｅエンドポイントとして実装される。エンドポイント１４５は、システム１００によって使用されるインターフェース回路１１５の特定のタイプまたは実装を介して通信するために好適な任意のタイプのエンドポイントとして実装され得ることを諒解されたい。メモリコントローラ１５５の各々は、ハードウェアアクセラレータ１３５によるメモリ１４０のアクセス（たとえば、読取りおよび書込み）を可能にするために、それぞれのメモリ１４０に接続される。
【００２７】
１つまたは複数の実施形態では、ハードウェアアクセラレータ１３５−１とメモリ１４０−１とが、第１の回路板（図示せず）に取り付けられ、ハードウェアアクセラレータ１３５−２とメモリ１４０−２とが、第２の回路板（図示せず）に取り付けられ、ハードウェアアクセラレータ１３５−３とメモリ１４０−３とが、第３の回路板（図示せず）に取り付けられる。これらの回路板の各々は、バスポートまたはスロットに結合するための好適なコネクタを含み得る。たとえば、回路板の各々は、システム１００の利用可能なＰＣＩｅスロット（または他のバス／インターフェースコネクタ）への挿入のために設定されたコネクタを有し得る。
【００２８】
リンク回路１５０の各々は、少なくとも１つの他の、たとえば、隣接する、リンク回路１５０とのアクセラレータリンクを確立することが可能である。本明細書で使用される「アクセラレータリンク」は、２つのハードウェアアクセラレータを直接接続する通信リンクを指す。たとえば、ハードウェアアクセラレータ１３５を有する回路板の各々が、リンク回路１５０に接続するワイヤを通して接続され得る。リンク回路１５０は、ワイヤを介してアクセラレータリンクを確立し得る。
【００２９】
特定の実施形態では、リンク回路１５０は、リングトポロジーを使用して通信可能にリンクされる。リンク回路１５０によって確立された（１つまたは複数の）アクセラレータリンクを介して送られるデータが、方向矢印によって指示されるように左から右にマスタする。たとえば、図１の例を参照すると、左側のリンク回路（たとえば、リンク回路１５０−１）がマスタとして動作し得、右側の隣接するリンク回路（たとえば、リンク回路１５０−２）がスレーブとして動作し得る。同様に、リンク回路１５０−２が、リンク回路１５０−３に関してマスタとして動作し得る。リンク回路１５０−３が、リンク回路１５０−１に関してマスタとして動作し得る。
【００３０】
１つまたは複数の実施形態では、各リンク回路１５０は、（たとえば、各ボード上の）各ハードウェアアクセラレータのためのメモリ１４０の量（またはサイズ）を指定するテーブルまたはレジスタを含む。テーブルを使用して、各リンク回路１５０は、アクセラレータリンクを使用して情報を交換する目的で、トランザクションにおいて指定されたアドレスを修正することが可能である。特定の実施形態では、テーブルまたはレジスタは、静的である。１つまたは複数の他の実施形態では、ドライバは、動的に、たとえば、ランタイムにおいて、テーブルまたはレジスタに記憶された情報を読み取り、および／または更新することが可能である。
【００３１】
例示の目的で、ハードウェアアクセラレータ１３５−２の動作が説明される。各それぞれのハードウェアアクセラレータにおける同様の番号の構成要素が、同じまたは同様の様式で動作することが可能であることを諒解されたい。したがって、ハードウェアアクセラレータ１３５−２を参照すると、リンク回路１５０−２は、様々な異なるソースまたはイニシエータのいずれかからトランザクションを受信することと、様々なターゲットのいずれかにトランザクションをルーティングすることとが可能である。たとえば、リンク回路１５０−２は、（たとえば、ホストプロセッサ１０５から発信した）エンドポイント１４５−２からのトランザクション、算出ユニット１６０−２からのトランザクション、算出ユニット１６５−２からのトランザクション、ハードウェアアクセラレータ１３５−１からのリンク回路１５０−１を介したトランザクション、またはハードウェアアクセラレータ１３５−３からのリンク回路１５０−３を介してリンク回路１５０−１に流れ、次いでリンク回路１５０−２上に至るトランザクションを受信することが可能である。リンク回路１５０−２は、（たとえば、ホストプロセッサ１０５への）エンドポイント１４５−２へのトランザクション、算出ユニット１６０−２へのトランザクション、算出ユニット１６５−２へのトランザクション、メモリコントローラ１５５−２へのトランザクション、リンク回路１５０−３を介してリンク回路１５０−１上に至る、ハードウェアアクセラレータ１３５−１へのトランザクション、またはリンク回路１５０−３を介したハードウェアアクセラレータ１３５−３へのトランザクションなど、任意のターゲットへのトランザクションをルーティングすることが可能であり、ここで、ターゲットは、ソースまたはイニシエータとは異なる。
【００３２】
たとえば、ホストプロセッサ１０５は、統合されたアドレス空間の一部として、メモリ１４０−１、メモリ１４０−２、および／またはメモリ１４０−３における任意のロケーションにアクセスすることが可能である。しかしながら、そのようなメモリにアクセスする際に、ホストプロセッサ１０５は、選択されたハードウェアアクセラレータ、たとえば、ハードウェアアクセラレータ１３５−２にアクセスすることと、次いで、アクセラレータリンクを使用して、選択されたハードウェアアクセラレータを通してメモリ１４０−１、メモリ１４０−２、またはメモリ１４０−３など、任意のターゲットに達することとによって、そのようなメモリにアクセスし得る。
【００３３】
例示的なおよび非限定的な例として、ホストプロセッサ１０５は、ハードウェアアクセラレータ１３５−２および１３５−３に関与するデータ転送を開始し得る。ハードウェアアクセラレータ１３５−２はイニシエータであり得る。この例では、ホストプロセッサ１０５、たとえば、ランタイム１７２および／またはドライバ１７４は、ハードウェアアクセラレータ１３５−２に対応するバッファオブジェクト１７６と、ハードウェアアクセラレータ１３５−３に対応するバッファオブジェクト１７８とを作成する。ホストプロセッサ１０５は、（ハードウェアアクセラレータ１３５−３中にある）データ転送のためのターゲットアドレスが、開始ハードウェアアクセラレータ（ハードウェアアクセラレータ１３５−２）に対してリモートであることを指示するリモートフラグ１８２をセットする。
【００３４】
エンドポイント１４５−２は、インターフェース回路１１５を介してホストプロセッサ１０５からオフロードされたタスクを受信することが可能である。１つまたは複数の実施形態では、ホストプロセッサ１０５は、ランタイム１７２およびドライバ１７４を実行することを介して、ハードウェアアクセラレータ１３５を統合されたアドレス空間と見なすことが可能である。エンドポイント１４５−２は、算出ユニット１６０−２にタスク（たとえば、データ）を提供し得る。タスクは、算出ユニット１６０−２が、オフロードされたタスクを実施するためのデータをそこから取り出すべきであるメモリ１４０−３内のターゲットアドレスを指定し得る。ハードウェアアクセラレータ１３５−２は、リンク回路１５０−２を使用して、リンク回路１５０−２とリンク回路１５０−３との間で確立されたアクセラレータリンクを介して、ハードウェアアクセラレータ１３５−３と直接、データ転送を開始および実施することが可能である。
【００３５】
データ転送はホストプロセッサ１０５によって開始されるが、データ転送は、リンク回路１５０を使用して実施され、ホストプロセッサ１０５、ホストメモリ１１０、またはインターフェース回路１１５に関与することなしに行われる。データ転送は、ハードウェアアクセラレータ間で直接行われる。従来のシステムでは、データ転送は、ホストプロセッサ１０５が、インターフェース回路１１５を介してハードウェアアクセラレータ１３５−３からデータを取り出すことと、次いで、インターフェース回路１１５を介してハードウェアアクセラレータ１３５−２にデータを提供することとによって行われることになる。
【００３６】
ハードウェアアクセラレータ１３５自体の間のデータの読取りおよび書込みを、ホストプロセッサ１０５を通してそのデータを移動させることなしに行う、ハードウェアアクセラレータ１３５の能力は、インターフェース回路１１５（たとえば、ＰＣＩｅバス）を介して受け渡されるデータの量を著しく低減する。これは、ホストプロセッサ１０５と他のハードウェアアクセラレータ１３５との間のデータを伝達する際に使用するためのインターフェース回路１１５のかなりの帯域幅を節約する。さらに、システム１００の動作の速度が、ハードウェアアクセラレータ１３５がデータを共有するために必要とされる時間の低減により増加され得る。
【００３７】
システム１００は、実装されるデバイスおよび／またはシステムの特定のタイプに応じて、図示された構成要素よりも少数の構成要素、または図１に示されていない追加の構成要素を含み得る。さらに、含まれる特定のオペレーティングシステム、（１つまたは複数の）アプリケーション、および／またはＩ／Ｏデバイスは、システムタイプに基づいて変動し得る。さらに、例示的な構成要素のうちの１つまたは複数は、別の構成要素に組み込まれるか、またはさもなければ、別の構成要素の一部分を形成し得る。たとえば、プロセッサが、少なくともあるメモリを含み得る。システム１００は、図１のアーキテクチャまたはそれと同様のアーキテクチャを使用して各々実装される単一のコンピュータあるいは複数のネットワーク化されたまたは相互接続されたコンピュータを実装するために使用され得る。
【００３８】
図２は、図１のハードウェアアクセラレータ１３５−２の例示的な実装形態を示す。図２内に、リンク回路１５０−２の例示的な実装形態が提供される。図２中のリンク回路１５０−２のために示されているアーキテクチャは、図１に示されているリンク回路１５０のいずれかを実装するために使用され得ることを諒解されたい。
【００３９】
１つまたは複数の実施形態では、リンク回路１５０−２は、他のハードウェアアクセラレータに送られるべきであるトランザクションをデータストリームベースのパケットにコンバートし、リンク回路１５０の間で確立されたアクセラレータリンクを介してパケットをルーティングすることが可能である。特定の実施形態では、リンク回路１５０−２は、送信のためにＡＭＢＡ拡張可能インターフェース（ＡＸＩ）準拠メモリマッピングされたトランザクションをＡＸＩデータストリームにコンバートすることが可能である。本開示内では、ＡＸＩは、例示的な通信プロトコルとして使用される。他の通信プロトコルが使用され得ることを諒解されたい。この点について、ＡＸＩの使用は、限定ではなく、例示のためのものである。リンク回路１５０−２は、他のハードウェアアクセラレータ（たとえば、ハードウェアアクセラレータ１３５−１および１３５−３）からの着信パケットをハンドリングし、そのパケットをメモリマッピングされたトランザクションにコンバートし、そのデータをハードウェアアクセラレータ１３５−２内でローカルにルーティングすることも可能である。さらに、リンク回路１５０−２は、受信されたパケットをメモリマッピングされたトランザクションにコンバートし、トランザクションを修正し、メモリマッピングされたトランザクションをパケットにコンバートし、パケットを次のハードウェアアクセラレータに受け渡すことが可能である。アクセラレータリンクを介して受信されたデータは、メモリマッピングされたトランザクションとしてハードウェアアクセラレータ１３５−２内で内部的にルーティングされ得る。
【００４０】
図２の例では、リンク回路１５０−２は、トランシーバ２０２および２０４と、再送信エンジン（ＲＴＥ）２０６および２０８と、メモリマップ−ストリーム（ＭＭ−ストリーム）マッパ２１０および２１２とを含む。ＭＭ−ストリームマッパ２１０および２１２は、相互接続回路２１４に接続される。
【００４１】
描かれているように、トランシーバ２０２は、ハードウェアアクセラレータ１３５−１における対応するトランシーバに接続され得、トランシーバ２０４は、ハードウェアアクセラレータ１３５−３における対応するトランシーバに接続される。トランシーバ２０２および２０４は、他のハードウェアアクセラレータと確立されたアクセラレータリンクの物理レイヤを実装する。トランシーバ２０２および２０４の各々は、マルチギガビット通信リンクのための軽量のシリアル通信プロトコルを実装することが可能である。１つまたは複数の実施形態では、トランシーバ２０２および２０４の各々は、隣接するＩＣにおけるトランシーバへの双方向インターフェースを実装することが可能である。トランシーバ２０２および２０４は、他のハードウェアアクセラレータとのアクセラレータリンクを自動的に初期化することが可能である。概して、トランシーバ２０２および２０４は、フロー制御に関係する低レベルシグナリングおよび低ＰＨＹレベルプロトコルを実装するための双方向通信が可能である。しかしながら、前に説明されたようにリングトポロジーおよび（たとえば、リングの周りの単一の方向における）マスタからスレーブへの流れを使用して、データフローが実装され得る。
【００４２】
たとえば、トランシーバ２０２は、ハードウェアアクセラレータ１３５−１のリンク回路１５０−１内の対応するトランシーバと双方向に通信することが可能である。トランシーバ２０４は、ハードウェアアクセラレータ１３５−３のリンク回路１５０−３内の対応するトランシーバと双方向に通信することが可能である。トランシーバ２０２および２０４の各々は、データストリーム、たとえば、ＡＸＩデータストリームを使用して、隣接するトランシーバと通信することが可能である。
【００４３】
特定の実施形態では、トランシーバ２０２および２０４は、８Ｂ／１０Ｂコーディングルールを使用して、隣接するハードウェアアクセラレータにデータを送るおよび受信することが可能である。トランシーバ２０２および２０４の各々は、８Ｂ／１０Ｂコーディングルールを使用して、シングルビットエラーおよびたいていのマルチビットエラーを検出することが可能である。
【００４４】
１つまたは複数の実施形態では、トランシーバ２０２および２０４の各々は、Ａｕｒｏｒａ  ８Ｂ／１０Ｂ  ＩＰコアとして実装され、これは、カリフォルニア州サンノゼのＸｉｌｉｎｘ，Ｉｎｃ．から入手可能である。しかしながら、言及される特定のコアは、例示の目的で提供され、限定として意図されないことを諒解されたい。本明細書で説明されるように動作することが可能である他のトランシーバが使用され得る。
【００４５】
トランシーバ２０２は、ＲＴＥ２０６に接続される。トランシーバ２０２とＲＴＥ２０６とは、双方向通信をサポートする各方向において動く複数のデータストリームを通して通信することが可能である。トランシーバ２０４は、ＲＴＥ２０８に接続される。トランシーバ２０４とＲＴＥ２０８とは、双方向通信をサポートする各方向において動く複数のデータストリームを通して通信することが可能である。
【００４６】
ＲＴＥ２０６および２０８は、トランザクションを管理することが可能である。１つまたは複数の実施形態では、ＲＴＥ２０６およびＲＴＥ２０８は、各々、通信プロトコルの追加のレイヤを、それぞれ、トランシーバ２０２および２０４によって実装されたものの上に実装する。たとえば、ＲＴＥ２０６およびＲＴＥ２０８は、各々、トランザクションレイヤ（ＴＬ）／リンクレイヤ（ＬＬ）およびユーザレイヤを実装する。これらの追加のレイヤは、データの完全性に関するさらなる保証を提供する。初期化の後に、アプリケーションは、データのストリームとしてアクセラレータリンクにわたってデータを受け渡すことが可能である。追加のデータの完全性対策は、メモリマッピングされたトランザクションをストリームデータにコンバートするとき、制御信号がデータとマージされるので、特に有益である。データの完全性問題が、破損した制御信号を生じ得る。オンチップ相互接続および／またはバスは、制御信号に関するデータ損失に耐えられない。
【００４７】
ＴＬ／ＬＬは、ロスレスデータ通信を保証するために、トークンベースのフロー制御を実装する。１つまたは複数の実施形態では、隣接するトランシーバ間の通信チャネルおよびトランシーバとＲＴＥとの間の通信チャネルは、幅が１２８ビットである。データを送るとき、各ＲＴＥは、ターゲットハードウェアアクセラレータにおける受信リンク回路が、トランシーバによって実装された物理レイヤに、送られるべきトランザクションを実際に送る前に、トランザクション全体を受信するための十分なバッファリングリソース（たとえば、トークン）を有することを検査することが可能である。たとえば、ＲＴＥ２０６は、ハードウェアアクセラレータ１３５−１における受信リンク回路１５０−１が、送るために（リンク回路１５０−２内で）トランシーバ２０２にデータを提供するより前に、データを受信するための十分なバッファリソースを有することを検査し得る。
【００４８】
ＲＴＥ２０６および２０８は、データ破損を検出することが可能である。たとえば、ＲＴＥ２０６および２０８の各々は、受信された各パケットについての、パケット長情報、パケットシーケンス情報、および／または巡回冗長検査（ＣＲＣ）チェックサムを検証することが可能である。ＲＴＥスレーブ（たとえば、受信するＲＴＥ）がパケットエラーを検出したとき、ＲＴＥは、エラーアボートモードに入り得る。エラーアボートモードでは、ＲＴＥは、エラーをもつパケットを失敗したパケットとしてドロップする。ＲＴＥは、トランザクションのすべての後続のパケットをさらにドロップする。特定の実施形態では、エラーアボートモードの開始が、ＲＴＥにリンク再試行シーケンスを起動させる。リンク再試行シーケンスが成功すると、リンクマスタ（たとえば、送るＲＴＥ）は、失敗したポイントから開始することによって、送信を復元することが可能である。
【００４９】
ＲＴＥ２０６は、ＭＭストリームマッパ２１０に接続される。ＲＴＥ２０６は、双方向通信をサポートする各方向において動く複数のデータストリームを介してＭＭストリームマッパ２１０と通信することが可能である。ＲＴＥ２０８は、ＭＭストリームマッパ２１２に接続される。ＲＴＥ２０８は、双方向通信をサポートする各方向において動く複数のデータストリームを介してＭＭストリームマッパ２１２と通信することが可能である。
【００５０】
ＭＭストリームマッパ２１０およびＭＭストリームマッパ２１２の各々は、相互接続回路２１４に接続される。相互接続回路２１４は、ＭＭストリームマッパ２１０および２１２ならびにそれらに接続されたハードウェアアクセラレータ１３５−２の他のマスタおよび／またはスレーブ回路の間で、データをルーティングすることが可能である。相互接続回路２１４は、１つまたは複数のオンチップ相互接続として実装され得る。オンチップ相互接続の一例は、ＡＸＩバスである。ＡＸＩバスは、回路ブロックおよび／またはシステムの間にオンチップ接続を確立する際に使用するための埋込みマイクロコントローラバスインターフェースである。相互接続回路の他の例示的な実装形態は、限定はしないが、他のバス、クロスバー、ネットワークオンチップ（ＮｏＣ）などを含み得る。
【００５１】
ＭＭストリームマッパ２１０および２１２は、それぞれ、ＲＴＥ２０６および２０８からの受信されたデータストリームを、相互接続回路ブロック２１４に提供され得るメモリマッピングされたトランザクションにコンバートすることが可能である。この点について、データストリームは、メモリマッピングされたトランザクションをサポートする複数のチャネルに多重化解除され得る。ＭＭストリームマッパ２１０および２１２は、相互接続回路ブロック２１４からの受信されたメモリマッピングされたトランザクションを、それぞれ、ＲＴＥ２０６および２０８に提供され得るストリームデータにコンバートすることも可能である。ＭＭストリームマッパ２１０および２１２は、（たとえば、説明される制御信号を含む）メモリマッピングされたトランザクションをサポートする複数のチャネルを、それぞれ、ＲＴＥ２０６および２０８に送るための単一のデータストリームに多重化することが可能である。
【００５２】
１つまたは複数の実施形態では、ＭＭストリームマッパ２１０および２１２の各々は、トランザクションにおいて受信されたターゲットアドレスを調整することが可能である。ＭＭストリームマッパ２１０は、たとえば、アクセラレータリンクを介してハードウェアアクセラレータ１３５−１からトランザクションを受信する際に、トランザクションのターゲットアドレスから、ハードウェアアクセラレータ１３５−２のためのアドレス範囲（たとえば、メモリ１４０−２のアドレス範囲）の上限を減算し得る。トランザクションがリンク回路１５０を通過するとき、ターゲットアドレスを調整することによって、トランザクションが、アクセラレータリンクを介してあるハードウェアアクセラレータから別のハードウェアアクセラレータに向けられ得る。アクセラレータリンクを使用する際のアドレスの動作に関係するさらなる詳細が、図４に関してより詳細に説明される。
【００５３】
例示の目的で、ハードウェアアクセラレータ１３５−２の他の部分が、リンク回路１５０−２に関して説明される。図２の例では、相互接続回路２１４は、直接メモリアクセス（ＤＭＡ）マスタ回路２１６に接続される。ＤＭＡマスタ回路２１６は、たとえば、相互接続回路ブロック２１４と通信するためのメモリマッピングされたインターフェースを含む。ＤＭＡマスタ回路２１６は、ＰＣＩｅエンドポイント２１８に接続される。図１のエンドポイント１４５−２の例示的な実装形態であるＰＣＩｅエンドポイント２１８は、ホストプロセッサ１０５に通信可能にリンクされる。
【００５４】
図２の例では、相互接続回路２１４は、１つまたは複数の算出ユニットマスタ２２０−１〜２２０−Ｎにも接続される。各算出ユニットマスタ２２０は、ハードウェアアクセラレータ１３５−２内に実装された算出ユニットと、相互接続回路ブロック２１４との間の双方向インターフェースを提供する。各算出ユニットマスタ２２０は、相互接続回路ブロック２１４と通信するためのメモリマッピングされたインターフェースをさらに含む。算出ユニット１６０−２および算出ユニット１６５−２の各々は、スレーブインターフェース（図示せず）を介して相互接続回路２１４に接続され得る。
【００５５】
図２の例では、相互接続回路２１４は、１つまたは複数のメモリコントローラスレーブ回路２２５−１〜２２５−Ｎにも接続される。各メモリコントローラスレーブ回路２２５は、メモリ１４０−２のための読取りおよび書込み動作を可能にする。メモリ１４０−２は、ハードウェアアクセラレータ１３５−２によってアクセス可能な１つまたは複数のオフチップメモリとして実装され得る。メモリコントローラ２２５−１〜２２５−Ｎの各々は、相互接続回路ブロック２１４と通信するためのメモリマッピングされたインターフェースをさらに含む。
【００５６】
図３は、ＲＴＥ２０６の例示的な一実装形態を示す。図３に関して説明される例示的なアーキテクチャは、フロー制御ユニット（ＦＬＩＴ）を使用するクレジットベースのフロー制御／再送信制御方式を実装する。ＲＴＥ２０６は、アプリケーションによって使用され得るプロトコルおよび／またはインターフェースに対して内部的に使用されるＦＬＩＴベースのプロトコルおよび／またはインターフェースの間で変換することが可能である。
【００５７】
ＲＴＥ２０６は、送信チャネル３３０を含む。送信チャネル３３０は、データ（たとえば、ＡＸＩ）ストリームをＦＬＩＴベースのトランザクションにカプセル化解除することが可能である。図３の例では、送信チャネル３３０は、送信（ＴＸ）パケット巡回冗長検査（ＣＲＣ）生成器３０２と、再試行ポインタ復帰コマンド（ＰＲＥＴ）パケット／初期再試行コマンド（ＩＲＴＲＹ）パケット生成器および復帰再試行ポインタ（ＲＲＰ）埋込み器３０４と、トークン復帰（ＴＲＥＴ）パケット生成器およびシーケンス（ＳＥＱ）番号／前方再試行ポインタ（ＦＲＰ）／復帰トークンカウント（ＲＴＣ）埋込み器３０６と、フロー制御回路３０８と、出力バッファ３１０とを含む。ＴＲＥＴ生成器およびＳＥＱ／ＦＲＰ／ＲＴＣ埋込み器３０６は、再試行バッファ３１２にも接続される。
【００５８】
ＲＴＥ２０６は、受信チャネル３４０を含む。受信チャネル３４０は、ＦＬＩＴベースのインターフェースをカプセル化することと、そのインターフェースをデータ（たとえば、ＡＸＩ）ストリームにコンバートすることとが可能である。図３の例では、受信チャネル３４０は、パケット境界検出器３１６と、受信（ＲＸ）パケットＣＲＣ回路３１８と、ＲＸパケットプロセッサ３２０と、入力バッファ３２２とを含む。Ｒｘパケットプロセッサ３２０は、エラーハンドラ３２４および再試行シーケンス回路３１４に接続される。
【００５９】
ＲＴＥ２０６は、限定ではなく、例示の目的で提供される。クレジットベースのフロー制御／再送信制御方式を実装するために好適な他のアーキテクチャが使用され得ることを諒解されたい。図３に関して説明されるアーキテクチャは、データフローに関して反転したまたは逆の配向をもつ図２のＲＴＥ２０８を実装するためにも使用され得る。
【００６０】
図４は、複数のハードウェアアクセラレータをもつシステムのための動作の例示的な方法４００を示す。方法４００は、ハードウェアアクセラレータの間の直接的なデータ転送の一例を示す。方法４００は、図１に関して説明されたシステム１００と同じまたは同様のシステムによって実施され得る。方法４００は、ホストプロセッサとハードウェアアクセラレータとを結合するバス上の不十分な帯域幅がどのように緩和され得るかを示す。通常ならばバス上で行われるデータ転送が、アクセラレータリンクに向けられ、それにより、他の動作のためにバス上の帯域幅を解放し得る。
【００６１】
ブロック４０５において、システムは、ハードウェアアクセラレータシーケンスを自動的に発見することが可能である。１つまたは複数の実施形態では、ハードウェアアクセラレータ、たとえば、ハードウェアアクセラレータのボードは、システム内のリングトポロジーにおいて構成される。ホストプロセッサは、既存のＰＣＩｅトポロジー、したがって、ＰＣＩｅバスに接続されたシステム内に存在するハードウェアアクセラレータの数に気づいている。さらに、ホストプロセッサは、たとえば、ランタイムを介して、各ハードウェアアクセラレータにロードされた特定の回路（たとえば、イメージまたは設定ビットストリーム）に気づいている。したがって、ホストプロセッサは、ハードウェアアクセラレータが、本明細書で説明されるようなアクセラレータリンクをサポートすることに気づいている。ホストプロセッサは、依然として、ハードウェアアクセラレータのシーケンスを決定しなければならない。ドライバは、たとえば、説明されるハードウェアアクセラレータシーケンスの自動発見を実施することが可能である。この自動発見能力は、ホストプロセッサによって実行されるアプリケーションを修正する必要なしに、システムへの新しいおよび／または追加のハードウェアアクセラレータの追加をサポートする。
【００６２】
各ハードウェアアクセラレータは、知られているおよび同じアドレス範囲を有し得る。たとえば、各ハードウェアアクセラレータは、メモリ１４０の１６ＧＢに対応する１６ＧＢのアドレス範囲を有すると仮定され得る。１つまたは複数の実施形態では、ホストプロセッサは、１６ＧＢ間隔においてメモリアドレスに一意の値を書き込むことが可能である。ホストプロセッサは、次いで、書込み値および読取り値に基づいて、リングトポロジー内でハードウェアアクセラレータのシーケンスを決定するために、値を再び読み取り得る。
【００６３】
ブロック４１０において、ホストプロセッサは、スタートアップ時に各ハードウェアアクセラレータ上にバッファを作成することが可能である。たとえば、ホストプロセッサによって実行されるランタイムは、各それぞれのハードウェアアクセラレータのメモリ内にバッファを作成するために、各ハードウェアアクセラレータと通信することが可能である。図１を参照すると、ハードウェアアクセラレータ１３５−１は、メモリ１４０−１内にバッファを作成する。ハードウェアアクセラレータ１３５−２は、メモリ１４０−２内にバッファを作成する。ハードウェアアクセラレータ１３５−３は、メモリ１４０−３内にバッファを作成する。
【００６４】
ブロック４１５において、ホストプロセッサは、ハードウェアアクセラレータ間のデータ転送を開始する。データ転送は、たとえば、ホストプロセッサからハードウェアアクセラレータにオフロードされるべきであるタスクの一部であり得る。例示的なおよび非限定的な例として、ホストプロセッサ１０５は、アプリケーションについてのタスクをハードウェアアクセラレータ１３５−１の算出ユニット１６０−１にオフロードし得る。タスクは、命令と、算出ユニット１６０−１がタスクのためのデータをそこから取得するべきであるターゲットアドレスとを含み得る。この例におけるターゲットアドレスは、ハードウェアアクセラレータ１３５−２中に（たとえば、メモリ１４０−２中に）ある。したがって、ホストプロセッサからオフロードされたタスクを実施するために、算出ユニット１６０−１は、メモリ１４０−２中のターゲットアドレスからデータを取り出さなければならない。
【００６５】
ブロック４２０において、ランタイムは、ハードウェアアクセラレータ１３５−１とハードウェアアクセラレータ１３５−２との間のデータ転送を要求し得る。たとえば、ランタイムは、ハードウェアアクセラレータ１３５−１による、またはハードウェアアクセラレータ１３５−１からのハードウェアアクセラレータ１３５−２の読取りを要求し得る。
【００６６】
ブロック４２５において、ドライバは、ハードウェアアクセラレータ１３５−２に対応するホストメモリ中のバッファオブジェクトと、ハードウェアアクセラレータ１３５−１に対応するホストメモリ中のバッファオブジェクトとを作成することが可能である。バッファオブジェクトは、ホストメモリ中で実装されるシャドーデータ構造である。各バッファオブジェクトは、システムにおけるデバイスに対応するか、またはそのデバイスを表し得る。バッファオブジェクトは、ホストプロセッサによって実行されるランタイムによって実施される管理機能をサポートするデータを含み得る。
【００６７】
１つまたは複数の実施形態では、ホストメモリ中で作成されたバッファオブジェクトは、リモートフラグを含み得る。リモートフラグは、バッファオブジェクトが、トランザクションを開始しているハードウェアアクセラレータの観点からリモートであることを指示するためにセットされ得る。この例では、ハードウェアアクセラレータ１３５−１は、ハードウェアアクセラレータ１３５−２からデータを読み取っている。したがって、ハードウェアアクセラレータ１３５−１は、トランザクションを開始している。ドライバは、作成時にハードウェアアクセラレータ１３５−２に対応するバッファオブジェクト中のリモートフラグをセットする。
【００６８】
ブロック４３０において、ランタイムライブラリは、開始ハードウェアアクセラレータによるバッファオブジェクト（たとえば、リモートバッファオブジェクト）へのアクセスを開始する。ランタイムライブラリは、ハードウェアアクセラレータ１３５−１からのハードウェアアクセラレータ１３５−２に対応するバッファオブジェクトのアクセスを開始する。たとえば、ランタイムは、リモートフラグが、ハードウェアアクセラレータ１３５−２についてのバッファオブジェクト内にセットされると決定する。リモートフラグがセットされると決定したことに応答して、ランタイムライブラリは、リンク回路によって確立されたアクセラレータリンクを使用して転送をスケジュールする。ハードウェアアクセラレータ間のアクセラレータリンクを使用して転送をスケジュールする際に、ランタイムは、ハードウェアアクセラレータ１３５−２からのデータにアクセスするためにハードウェアアクセラレータ１３５−１によって使用されるべきアドレスを決定する。
【００６９】
例示の目的で、ハードウェアアクセラレータ１３５の各々が１〜１０００のアドレス範囲を有する一例について考える。そのような例では、ランタイムは、ハードウェアアクセラレータ１３５−１によってハードウェアアクセラレータ１３５−２から取り出されるべきデータが、ハードウェアアクセラレータ１３５−２に対応するアドレス５００における（たとえば、メモリ１４０−２に対応するアドレス５００における）バッファ中にあると決定し得る。この例では、ランタイムは、ターゲットアドレスに１０００を加算し、１５００のアドレスを生じ、そのアドレスは、オフロードされたタスクのために動作するためのデータを読み出すためのターゲットアドレスとして、ハードウェアアクセラレータ１３５−１に提供される。
【００７０】
別の例として、データがメモリ１４０−３内のアドレス５００において記憶された場合、ランタイムは、トランザクションがハードウェアアクセラレータ１３５−３に達するために、ハードウェアアクセラレータ１３５の各々が１〜１０００のアドレス範囲を有すると仮定して、２０００を加算することになる。概して、知られているように、使用されるオンチップバス相互接続（たとえば、ＡＸＩ相互接続）を通して戻り経路データが追跡され得る。マスタからの読取り要求が発行されたとき、たとえば、読取り要求は、読取り要求が各ハードウェアアクセラレータにわたって横断するとき、（ｍｍストリームマッパによって実施される）一連のアドレス復号および／またはアドレスシフトとともに相互接続を通してスレーブにルーティングされる。各個々の相互接続は、どのマスタが各スレーブへの未解決のトランザクションを有するかを追跡することが可能である。読取りデータが返されると、読取りデータは、（１つまたは複数の）正しいインターフェースを介して返送され得る。いくつかの場合には、特定の読取りデータを返すために、その読取りデータを特定のマスタに関連付けるために、識別子（ＩＤ）ビットが使用され得る。
【００７１】
ブロック４３５において、開始ハードウェアアクセラレータ（たとえば、第１のハードウェアアクセラレータ）は、ホストプロセッサからタスクを受信する。エンドポイント１４５−１は、たとえば、タスクを受信し、算出ユニット１６０−１にタスクを提供し得る。タスクは、算出ユニット１６０−１によれる動作の対象となるべきデータがターゲットアドレスに位置することを指定し、ターゲットアドレスは、この例では１５００である。算出ユニット１６０−１は、たとえば、ターゲットアドレスが記憶され得る制御ポートを有し得る。アドレス１５００に位置するデータにアクセスすることを試みる際に、算出ユニット１６０−１は、アドレスがハードウェアアクセラレータ１３５−１の範囲内にないことを認識する。たとえば、算出ユニット１６０−１は、アドレスを１０００のアドレス範囲の上限と比較することと、アドレスが上限を超えると決定することとが可能である。この例では、算出ユニット１６０−１は、アドレス１５００からの読取りトランザクションを開始することが可能である。たとえば、算出ユニット１６０−１は、相互接続２１４を介して送られたメモリマッピングされたトランザクションとして読取りトランザクションを開始し得る。
【００７２】
ブロック４４０において、開始ハードウェアアクセラレータは、アクセラレータリンクを介してターゲットハードウェアアクセラレータ（たとえば、第２のハードウェアアクセラレータ）にアクセスする。たとえば、リンク回路１５０−１は、（たとえば、ＭＭストリームマッパを使用して）算出ユニット１６０−１によって開始されたメモリマッピングされたトランザクションをストリームベースのパケットにコンバートすることが可能である。リンク回路１５０−１は、さらに、（たとえば、ＲＰＥを使用して）データの完全性検査、再送信、初期化、およびエラー報告をサポートする追加のデータをもつパケットを符号化することが可能である。リングトポロジーは、左から右にマスタし得る。したがって、パケットは、リンク回路１５０−１のトランシーバによってリンク回路１５０−２に出力され得る。
【００７３】
リンク回路１５０−２は、トランシーバ２０２においてデータストリームを受信し、ＲＴＥ２０６においてトランザクションを処理する。ＭＭストリームマッパ２１０は、ストリームデータベースのパケットを受信したことに応答して、様々な動作を実施することが可能である。ＭＭストリームマッパ２１０は、たとえば、ストリームベースのパケットを、メモリマッピングされたトランザクションにコンバートすることが可能である。さらに、ＭＭストリームマッパ２１０は、１５００のターゲットアドレスをハードウェアアクセラレータ１３５−２のアドレス範囲の上限だけ減分することが可能である。述べられたように、上限は、リンク回路１５０−２内の、たとえば、ＭＭストリームマッパ２１０中のテーブルまたはレジスタに記憶され得る。この例では、ＭＭストリームマッパ２１０は、１５００のターゲットアドレスを１０００だけ減分し、５００のターゲットアドレスを生じる。ターゲットアドレスがハードウェアアクセラレータ１３５−２にローカルであるので、ハードウェアアクセラレータ１３５−２は、受信されたトランザクションに作用することが可能である。この例では、ＭＭストリームマッパ２１０は、メモリマッピングされたトランザクションを相互接続２１４に提供する。メモリマッピングされたトランザクションは、読取りトランザクションを実施するために、（たとえば、メモリコントローラスレーブを通して）メモリコントローラ１５５−２に提供され得る。このようにして、ハードウェアアクセラレータ１３５−１は、ハードウェアアクセラレータ１３５−２からデータを読み出すこと（またはハードウェアアクセラレータ１３５−２にデータを書き込むこと）が可能である。要求されたデータは、読取り要求を送るために使用される同じ経路を使用して、メモリ１４０−２から要求側に提供され得る。たとえば、メモリ１４０−２から読み取られたデータは、リングトポロジーを通って前方にハードウェアアクセラレータ１３５−３に横断し、次いで、ハードウェアアクセラレータ１３５−１に横断する必要なしに、ハードウェアアクセラレータ１３５−２からハードウェアアクセラレータ１３５−１に送られる。
【００７４】
たとえば、ターゲットアドレスが２５００であった場合、減分した結果は１５００になる。その場合、ＭＭストリームマッパ２１０は、ターゲットアドレスがハードウェアアクセラレータ１３５−２についてのアドレス範囲の上限（たとえば、１０００）よりも大きいので、ターゲットアドレスがハードウェアアクセラレータ１３５−２中にないと決定する。その場合、ＭＭストリームマッパ２１０は、次のハードウェアアクセラレータ上にフォワーディングするために、トランザクションを、相互接続回路を通してＭＭストリームマッパ２１２に送り得る。
【００７５】
ブロック４４５において、ハードウェアアクセラレータ１３５−１中の算出ユニット１６０−１は、ハードウェアアクセラレータ間のデータ転送が完了したことをホストプロセッサに知らせる、ホストプロセッサへの割込みを生成することが可能である。ブロック４５０において、ランタイムは、アプリケーションに必要な、データ転送が完了したという通知を提供することが可能である。ランタイムは、たとえば、アプリケーションへの、完了イベント、コマンド待ち行列、および通知をハンドリングすることが可能である。
【００７６】
１つまたは複数の実施形態では、ＰＣＩｅエンドポイントおよびＤＭＡマスタは、異なるハードウェアアクセラレータ中にあるターゲットアドレスに書き込むことが可能である。例示的なおよび非限定的な例として、ホストプロセッサは、ハードウェアアクセラレータ１３５−２中にあるターゲットアドレスとともにデータをハードウェアアクセラレータ１３５−１に送り得る。その場合、ＤＭＡマスタは、ターゲットアドレスが、異なるハードウェアアクセラレータ中にあることを認識することと、アクセラレータリンクを介したデータ転送をスケジュールすることとが可能である。たとえば、ＤＭＡマスタは、ターゲットアドレスを、ハードウェアアクセラレータ１３５−１についてのアドレス範囲の上限と比較し得る。ターゲットアドレスが上限を超えると決定したことに応答して、ＤＭＡマスタは、アクセラレータリンクを介してハードウェアアクセラレータ１３５−２に送るために、相互接続回路を介した、リンク回路１５０−１中のＭＭストリームマッパ２１２へのメモリマッピングされたトランザクションを開始することが可能である。
【００７７】
１つまたは複数の実施形態では、ホストプロセッサは、ロードバランシングの目的でアクセラレータリンクを使用することが可能である。たとえば、ホストプロセッサは、データが提供されるべきであるか、またはタスクがオフロードされるべきである、選択されたハードウェアアクセラレータ中のＤＭＡチャネル（たとえば、ＤＭＡマスタ）のステータスを決定するために、ランタイムを使用することが可能である。ＤＭＡマスタが、ビジーであるかまたはアクティビティのしきい値量を上回って動作していると決定したことに応答して、ホストプロセッサは、バスを介して異なるハードウェアアクセラレータにデータを送り得る。データは、選択されたハードウェアアクセラレータ内のターゲットアドレスを指定し得る。受信ハードウェアアクセラレータ内のＤＭＡマスタは、ホストプロセッサからデータを受信すると、（１つまたは複数の）アクセラレータリンクを介して、選択されたハードウェアアクセラレータにデータをフォワーディングすることが可能である。特定の実施形態では、ホストプロセッサは、受信ハードウェアアクセラレータ中のＤＭＡマスタが、ビジーでないかまたはアクティビティのしきい値量を下回って動作しているという決定に基づいて、受信ハードウェアアクセラレータを選定することが可能である。
【００７８】
例示の目的で、ハードウェアアクセラレータ１３５−１からハードウェアアクセラレータ１３５−３への書込みトランザクションの一例が、概して、ホストプロセッサによって開始されるものとして説明される。ホストプロセッサは、ランタイムおよびドライバを介して、ターゲットハードウェアアクセラレータについてのリモートフラグをセットし、（所望のアドレスがハードウェアアクセラレータ１３５−３中のアドレス５００に位置する、前の例を使用して）２５００のアドレスを決定する。ホストプロセッサは、アドレス２５００に書き込むために、ハードウェアアクセラレータ１３５−１に命令を提供する。ハードウェアアクセラレータ１３５−１内で、２５００のアドレスをもつトランザクションが相互接続２１４に提示される。アドレスがハードウェアアクセラレータ１３５−１の上限を超えるので、相互接続２１４は、リンク回路１５０−１にトランザクションを送る。リンク回路１５０−１は、リンク回路１５０−２にトランザクションを送る。ハードウェアアクセラレータ１３５−２中のＭＭストリームマッパは、アドレスを１０００だけ減分し、１５００の新しいアドレスを生じる。新しいアドレスは、１５００がハードウェアアクセラレータ１３５−２の上側アドレス限界を超えるので、依然としてリモートである。したがって、トランザクションは、ハードウェアアクセラレータ１３５−３にフォワーディングされる。
【００７９】
ハードウェアアクセラレータ１３５−３中のＭＭストリームマッパは、アドレスを減分し、５００の新しいアドレスを生じる。トランザクションは、次いで、ハードウェアアクセラレータ１３５−３中で相互接続２１４を介してメモリコントローラに提供され、データがメモリ１４０−３に書き込まれる。説明される例では、アドレスは、トランザクションが、ハードウェアアクセラレータによってサービスされ得るのか、および、トランザクションがハードウェアアクセラレータによってサービスされ得る場合、トランザクションを内部的にどこに（たとえば、メモリコントローラまたは他の回路ブロックに）ルーティングすべきか、または次のハードウェアアクセラレータにフォワーディングされるべきであるのかを決定するために、各ハードウェアアクセラレータによって使用される。特定の実施形態では、アドレスは、データがメモリ中に書き込まれる実際のアドレスとは異なる。書込み肯定応答は、説明されるように、ハードウェアアクセラレータ１３５−３からハードウェアアクセラレータ１３５−２を通してハードウェアアクセラレータ１３５−１に送られる。
【００８０】
例示の目的で、ハードウェアアクセラレータ１３５−１によって開始された、ハードウェアアクセラレータ１３５−３への読取りトランザクションの別の例が、概して、ホストプロセッサによって開始されるものとして説明される。ホストプロセッサは、ランタイムおよびドライバを介して、ターゲットハードウェアアクセラレータについてのリモートフラグをセットし、（所望のアドレスがハードウェアアクセラレータ１３５−３中のアドレス５００に位置する、前の例を使用して）２５００のアドレスを決定する。ホストプロセッサは、アドレス２５００から読み出すために、ハードウェアアクセラレータ１３５−１に命令を提供する。ハードウェアアクセラレータ１３５−１内で、２５００のアドレスをもつトランザクションが相互接続２１４に提示される。アドレスがハードウェアアクセラレータ１３５−１の上限を超えるので、相互接続２１４は、リンク回路１５０−１にトランザクションを送る。リンク回路１５０−１は、リンク回路１５０−２にトランザクションを送る。ハードウェアアクセラレータ１３５−２中のＭＭストリームマッパは、アドレスを１０００だけ減分し、１５００の新しいアドレスを生じる。新しいアドレスは、１５００がハードウェアアクセラレータ１３５−２の上側アドレス限界を超えるので、依然としてリモートである。したがって、トランザクションは、ハードウェアアクセラレータ１３５−３にフォワーディングされる。
【００８１】
ハードウェアアクセラレータ１３５−３中のＭＭストリームマッパは、アドレスを減分し、５００の新しいアドレスを生じる。トランザクションは、次いで、ハードウェアアクセラレータ１３５−３中で相互接続２１４を介してメモリコントローラに提供され、データがメモリ１４０−３から読み出される。説明される例では、アドレスは、トランザクションが、ハードウェアアクセラレータによってサービスされ得るのか、および、トランザクションがハードウェアアクセラレータによってサービスされ得る場合、トランザクションを内部的にどこにルーティングすべきか、または次のハードウェアアクセラレータにフォワーディングされるべきであるのかを決定するために、各ハードウェアアクセラレータによって使用される。特定の実施形態では、アドレスは、データがメモリから読み取られる実際のアドレスとは異なる。読み取られたデータは、説明されるように、ハードウェアアクセラレータ１３５−３からハードウェアアクセラレータ１３５−２を通してハードウェアアクセラレータ１３５−１に送られる。
【００８２】
図５は、ハードウェアアクセラレータと１つまたは複数の追加のデバイスとを含むシステムの一例を示す。図５の例では、ハードウェアアクセラレータ１３５−１および１３５−２が示されており、各それぞれのハードウェアアクセラレータ中のリンク回路を使用して、アクセラレータリンクによって接続される。例示の目的で、ハードウェアアクセラレータ１３５−３は示されていない。システムはＧＰＵ５１５をも含み、ＧＰＵ５１５は、メモリ５２０とＩ／Ｏデバイス５２５とに接続される。
【００８３】
図５の例では、ＧＰＵ５１５は、ハードウェアアクセラレータ１３５−２にデータを書き込むか、またはハードウェアアクセラレータ１３５−２からデータを読み取り得る。この例では、ホストプロセッサ（図示せず）は、ＧＰＵ５１５にハンドル５０５−Ｎを提供する。特定の実施形態では、ハンドルは、ファイル記述子として実装され得る。ハンドル５０５−Ｎは、バッファオブジェクト５１０−Ｎを指し得、バッファオブジェクト５１０−Ｎは、ハードウェアアクセラレータ１３５−２に対応する。ＧＰＵ５１５が、読取りまたは書込み動作のためにハンドル５０５−Ｎを使用することによって、ホストプロセッサは、ハンドル５０５−Ｎに対応するバッファオブジェクト、たとえば、バッファオブジェクト５１０−Ｎ上でアクションを開始する。ホストプロセッサは、バッファオブジェクト５１０−Ｎがローカルであるのか、リモートであるのかを決定する。ホストプロセッサは、バッファオブジェクト５１０−Ｎ中のリモートフラグがセットされていないので、ＰＣＩｅを介してメモリ１４０−２からデータを取り出し、ＰＣＩｅを介してＧＰＵ５１５にデータを提供し得る。
【００８４】
１つまたは複数の他の実施形態では、ホストプロセッサは、異なるハードウェアアクセラレータにアクセスすることによって、メモリ１４０−２からのデータの取出しを開始し得る。たとえば、ホストプロセッサは、メモリ１４０−２からデータを取り出すために、ＰＣＩｅを介してハードウェアアクセラレータ１３５−１との通信を開始し得る。その場合、ハードウェアアクセラレータ１３５−１は、メモリ１４０−２からデータを取り出すために、リンク回路を使用してハードウェアアクセラレータ１３５−２と直接通信し得る。ハードウェアアクセラレータ１３５−１は、次いで、ホストプロセッサにデータを提供し得、ホストプロセッサは、ＰＣＩｅを介してＧＰＵ５１５にデータを提供する。
【００８５】
別の例では、Ｉ／Ｏデバイス５２５、たとえば、カメラが、ハードウェアアクセラレータ１３５−１にデータを書き込み得る。その場合、ホストプロセッサは、Ｉ／Ｏデバイス５２５にハンドル５０５−１を提供することが可能である。ハンドル５０５−１は、バッファオブジェクト５１０−１を指し得、バッファオブジェクト５１０−１は、ハードウェアアクセラレータ１３５−１に対応する。Ｉ／Ｏデバイス５２５が、書込み動作のためにハンドル５０５−１を使用することによって、ホストプロセッサは、ハンドル５０５−１に対応するバッファオブジェクト、たとえば、バッファオブジェクト５１０−１上でアクションを開始する。ホストプロセッサは、バッファオブジェクト５１０−１がローカルであるのか、リモートであるのかを決定する。ホストプロセッサは、バッファオブジェクト５１０−１中のリモートフラグがセットされていないので、Ｉ／Ｏデバイス５２５からデータを受信し、メモリ１４０−１中への書込みおよび／またはさらなる処理のために、ＰＣＩｅを介してハードウェアアクセラレータ１３５−１にそのようなデータを提供し得る。
【００８６】
１つまたは複数の実施形態では、ドライバは、説明されるようにアクセラレータリンクを使用することが可能であるハードウェアアクセラレータ間のデータ転送の場合にのみ、バッファオブジェクト内のリモートフラグをセットすることが可能である。図５は、他のタイプのデバイスが、ハードウェアアクセラレータとともに使用され得るが、そのような他のデバイスとハードウェアアクセラレータとの間のデータ転送が、バスを介して行われ、ホストプロセッサを伴うことを示す。
【００８７】
図６は、ＩＣのための例示的なアーキテクチャ６００を示す。一態様では、アーキテクチャ６００は、プログラマブルＩＣ内に実装され得る。たとえば、アーキテクチャ６００は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）を実装するために使用され得る。アーキテクチャ６００はまた、ＩＣのシステムオンチップ（ＳＯＣ）タイプを表し得る。ＳＯＣは、プログラムコードを実行するプロセッサと、１つまたは複数の他の回路とを含むＩＣである。他の回路は、ハードワイヤード回路、プログラマブル回路、および／またはそれらの組合せとして実装され得る。回路は、互いと、および／またはプロセッサと協働して動作し得る。
【００８８】
図示のように、アーキテクチャ６００は、いくつかの異なるタイプのプログラマブル回路、たとえば、論理、ブロックを含む。たとえば、アーキテクチャ６００は、マルチギガビットトランシーバ（ＭＧＴ：ｍｕｌｔｉ−ｇｉｇａｂｉｔ  ｔｒａｎｓｃｅｉｖｅｒ）６０１、設定可能論理ブロック（ＣＬＢ）６０２、ランダムアクセスメモリブロック（ＢＲＡＭ）６０３、入出力ブロック（ＩＯＢ）６０４、設定およびクロッキング論理（ＣＯＮＦＩＧ／ＣＬＯＣＫＳ）６０５、デジタル信号処理ブロック（ＤＳＰ）６０６、特殊なＩ／Ｏブロック６０７（たとえば、設定ポートおよびクロックポート）、ならびにデジタルクロックマネージャ、アナログデジタル変換器、システム監視論理などの他のプログラマブル論理６０８を含む、多数の異なるプログラマブルタイルを含み得る。
【００８９】
いくつかのＩＣでは、各プログラマブルタイルは、プログラマブル相互接続要素（ＩＮＴ）６１１を含み、ＩＮＴ６１１は、各隣接するタイル中の対応するＩＮＴ６１１との間の規格化された接続を有する。したがって、ＩＮＴ６１１は、まとめると、示されているＩＣのためのプログラマブル相互接続構造を実装する。各ＩＮＴ６１１は、図６の上部に含まれる例によって示されているように、同じタイル内のプログラマブル論理要素との間の接続をも含む。
【００９０】
たとえば、ＣＬＢ６０２は、ユーザ論理を実装するようにプログラムされ得る設定可能論理要素（ＣＬＥ）６１２と、単一のＩＮＴ６１１とを含み得る。ＢＲＡＭ６０３は、１つまたは複数のＩＮＴ６１１に加えてＢＲＡＭ論理要素（ＢＲＬ）６１３を含み得る。一般的に、タイル中に含まれるＩＮＴ６１１の数は、タイルの高さに依存する。描かれているように、ＢＲＡＭタイルは、５つのＣＬＢと同じ高さを有するが、他の数（たとえば、４つ）も使用され得る。ＤＳＰタイル６０６は、適切な数のＩＮＴ６１１に加えてＤＳＰ論理要素（ＤＳＰＬ）６１４を含み得る。ＩＯＢ６０４は、たとえば、ＩＮＴ６１１の１つのインスタンスに加えてＩ／Ｏ論理要素（ＩＯＬ）６１５の２つのインスタンスを含み得る。ＩＯＬ６１５に接続された実際のＩ／Ｏパッドは、ＩＯＬ６１５のエリアに制限されないことがある。
【００９１】
図６に描かれている例では、ダイの中心の近くの、たとえば、領域６０５、６０７、および６０８から形成された、列状エリアが、設定、クロック、および他の制御論理のために使用され得る。この列から延びる水平エリア６０９が、プログラマブルＩＣの幅にわたってクロックおよび設定信号を分散させるために使用され得る。
【００９２】
図６に示されているアーキテクチャを利用するいくつかのＩＣは、ＩＣの大部分を作り上げる規則的な列状構造を損なう追加の論理ブロックを含む。追加の論理ブロックは、プログラマブルブロックおよび／または専用回路であり得る。たとえば、ＰＲＯＣ６１０として示されているプロセッサブロックが、ＣＬＢおよびＢＲＡＭのいくつかの列にまたがる。
【００９３】
一態様では、ＰＲＯＣ６１０は、ＩＣのプログラマブル回路を実装するダイの一部として作製される専用回路として、たとえば、ハードワイヤードプロセッサとして実装され得る。ＰＲＯＣ６１０は、個々のプロセッサ、たとえば、プログラムコードを実行することが可能な単一のコアから、１つまたは複数のコア、モジュール、コプロセッサ、インターフェースなどを有するプロセッサシステム全体まで、複雑さに幅がある様々な異なるプロセッサタイプおよび／またはシステムのいずれかを表し得る。
【００９４】
別の態様では、ＰＲＯＣ６１０は、アーキテクチャ６００から省略され、説明されるプログラマブルブロックの他の種類のうちの１つまたは複数と置き換えられ得る。さらに、そのようなブロックは、ＰＲＯＣ６１０の場合のようにプログラムコードを実行することができるプロセッサを形成するためにプログラマブル回路の様々なブロックが使用され得るという点で、「ソフトプロセッサ」を形成するために利用され得る。
【００９５】
「プログラマブル回路」という句は、ＩＣ内のプログラマブル回路要素、たとえば、本明細書で説明される様々なプログラマブルまたは設定可能回路ブロックまたはタイル、ならびに、ＩＣにロードされた設定データに従って様々な回路ブロック、タイル、および／または要素を選択的に結合する相互接続回路を指す。たとえば、ＣＬＢ６０２およびＢＲＡＭ６０３など、ＰＲＯＣ６１０の外部にある、図６に示されている回路ブロックは、ＩＣのプログラマブル回路と見なされる。
【００９６】
概して、プログラマブル回路の機能性は、設定データがＩＣにロードされるまで確立されない。ＦＰＧＡなど、ＩＣのプログラマブル回路をプログラムするために、設定ビットのセットが使用され得る。（１つまたは複数の）設定ビットは、一般に、「設定ビットストリーム」と呼ばれる。概して、プログラマブル回路は、設定ビットストリームをＩＣに最初にロードしなければ、動作可能でないか、または機能可能でない。設定ビットストリームは、プログラマブル回路内に特定の回路設計を効果的に実装する。回路設計は、たとえば、プログラマブル回路ブロックの機能的態様と、様々なプログラマブル回路ブロックの間の物理的接続性とを指定する。
【００９７】
「ハードワイヤード」または「ハード化（ｈａｒｄｅｎ）」される、すなわち、プログラマブルでない回路が、ＩＣの一部として製造される。プログラマブル回路とは異なり、ハードワイヤード回路または回路ブロックは、設定ビットストリームのローディングを通してＩＣの製造後に実装されない。ハードワイヤード回路は、概して、たとえば、設定ビットストリームを、ＩＣ、たとえば、ＰＲＯＣ６１０に最初にロードすることなしに機能可能である、専用回路ブロックおよび相互接続を有すると見なされる。
【００９８】
いくつかの事例では、ハードワイヤード回路は、ＩＣ内の１つまたは複数のメモリ要素に記憶されたレジスタセッティングまたは値に従ってセットまたは選択され得る１つまたは複数の動作モードを有し得る。動作モードは、たとえば、ＩＣへの設定ビットストリームのローディングを通してセットされ得る。この能力にもかかわらず、ハードワイヤード回路が、ＩＣの一部として製造されたとき、動作可能であり、特定の機能を有するので、ハードワイヤード回路はプログラマブル回路と見なされない。
【００９９】
ＳＯＣの場合、設定ビットストリームは、プログラマブル回路内に実装されるべきである回路と、ＰＲＯＣ６１０またはソフトプロセッサによって実行されるべきであるプログラムコードとを指定し得る。いくつかの場合には、アーキテクチャ６００は、適切な設定メモリおよび／またはプロセッサメモリに設定ビットストリームをロードする専用設定プロセッサを含む。専用設定プロセッサは、ユーザ指定のプログラムコードを実行しない。他の場合には、アーキテクチャ６００は、設定ビットストリームを受信し、設定ビットストリームを適切な設定メモリにロードし、および／または実行のためのプログラムコードを抽出するために、ＰＲＯＣ６１０を利用し得る。
【０１００】
図６は、プログラマブル回路、たとえば、プログラマブルファブリックを含むＩＣを実装するために使用され得る例示的なアーキテクチャを示すことを意図される。たとえば、１つの列中の論理ブロックの数、列の相対幅、列の数および順序、列中に含まれる論理ブロックのタイプ、論理ブロックの相対サイズ、および図６の上部に含まれる相互接続／論理実装形態は、例示にすぎない。実際のＩＣでは、たとえば、ＣＬＢの２つ以上の隣接する列は、一般に、ユーザ回路設計の効率的な実装を容易にするために、ＣＬＢが現れるところならどこでも含まれる。しかしながら、隣接するＣＬＢ列の数は、ＩＣの全体的サイズとともに変動し得る。さらに、ＩＣ内のＰＲＯＣ６１０などのブロックのサイズおよび／または配置は、例示のためのものにすぎず、限定として意図されていない。
【０１０１】
アーキテクチャ６００は、本明細書で説明されるようなハードウェアアクセラレータを実装するために使用され得る。特定の実施形態では、エンドポイント、リンク回路、およびメモリコントローラのうちの１つまたは複数または各々が、ハードワイヤード回路ブロックとして実装され得る。特定の実施形態では、エンドポイント、リンク回路、およびメモリコントローラのうちの１つまたは複数または各々が、プログラマブル回路を使用して実装され得る。さらに他の実施形態では、言及される回路ブロックのうちの１つまたは複数は、ハードワイヤード回路ブロックとして実装され得、他のものは、プログラマブル回路を使用して実装される。
【０１０２】
本開示内で説明される実施形態は、たとえば、データベースアクセラレーション、複数のビデオストリームを処理すること、リアルタイムネットワークトラフィック監視、機械学習、または複数のハードウェアアクセラレータを伴い得る任意の他の適用例など、様々な適用例のいずれかにおいて使用され得る。
【０１０３】
説明のために、特定の名称が、本明細書で開示される様々な発明概念の完全な理解を提供するために記載される。しかしながら、本明細書で使用される専門用語は、本発明の構成の特定の態様を説明するためのものにすぎず、限定するものではない。
【０１０４】
本明細書で定義される単数形「ａ」、「ａｎ」および「ｔｈｅ」は、文脈が別段に明確に指示するのでなければ、複数形をも含むものとする。
【０１０５】
本明細書で定義される「約」という用語は、正確ではないが、ほぼ正しいまたは厳密である、値または量が近い、を意味する。たとえば、「約」という用語は、具陳された特性、パラメータ、または値が、厳密な特性、パラメータ、または値の所定の量内にあることを意味し得る。
【０１０６】
本明細書で定義される「少なくとも１つ」、「１つまたは複数」、および「および／または」という用語は、別段に明記されていない限り、運用において連言的と選言的の両方である、オープンエンド表現である。たとえば、「Ａ、Ｂ、およびＣのうちの少なくとも１つ」、「Ａ、Ｂ、またはＣのうちの少なくとも１つ」、「Ａ、Ｂ、およびＣのうちの１つまたは複数」、「Ａ、Ｂ、またはＣのうちの１つまたは複数」、および「Ａ、Ｂ、および／またはＣ」という表現の各々は、Ａのみ、Ｂのみ、Ｃのみ、ＡとＢを一緒に、ＡとＣを一緒に、ＢとＣを一緒に、またはＡとＢとＣを一緒に、を意味する。
【０１０７】
本明細書で定義される「自動的に」という用語は、ユーザ介入なしに、を意味する。本明細書で定義される「ユーザ」という用語は、人間を意味する。
【０１０８】
本明細書で定義される「コンピュータ可読記憶媒体」という用語は、命令実行システム、装置、またはデバイスが使用するための、あるいはそれとともに使用するためのプログラムコードを含んでいるかまたは記憶する記憶媒体を意味する。本明細書で定義される「コンピュータ可読記憶媒体」は、それ自体は、一時的な伝搬信号でない。コンピュータ可読記憶媒体は、限定はしないが、電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、または上記の任意の好適な組合せであり得る。本明細書で説明される、様々な形態のメモリが、コンピュータ可読記憶媒体の例である。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、ポータブルコンピュータディスケット、ハードディスク、ＲＡＭ、読取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読取り専用メモリ（ＥＰＲＯＭまたはフラッシュメモリ）、電子的消去可能プログラマブル読取り専用メモリ（ＥＥＰＲＯＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ポータブルコンパクトディスク読取り専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリスティック、フロッピーディスクなどを含み得る。
【０１０９】
本明細書で定義される「する場合（ｉｆ）」という用語は、文脈に応じて、「するとき（ｗｈｅｎ）」または「すると（ｕｐｏｎ）」または「に応答して（ｉｎ  ｒｅｓｐｏｎｓｅ  ｔｏ）」または「に反応して（ｒｅｓｐｏｎｓｉｖｅ  ｔｏ）」を意味する。したがって、「それが決定された場合」または「［述べられた条件またはイベント］が検出された場合」という句は、文脈に応じて、「決定すると」または「決定したことに応答して」あるいは「［述べられた条件またはイベント］を検出すると」または「［述べられた条件またはイベント］を検出したことに応答して」または「［述べられた条件またはイベント］を検出したことに反応して」を意味すると解釈され得る。
【０１１０】
本明細書で定義される「に反応して」という用語および上記で説明されたような同様の言い回し、たとえば、「する場合」、「するとき」、または「すると」は、アクションまたはイベントに容易に応答または反応することを意味する。応答または反応は、自動的に実施される。したがって、第２のアクションが第１のアクション「に反応して」実施される場合、第１のアクションの発生と第２のアクションの発生との間に因果関係がある。「に反応して」という用語は、因果関係を指示する。
【０１１１】
本明細書で定義される「一実施形態（ｏｎｅ  ｅｍｂｏｄｉｍｅｎｔ）」、「一実施形態（ａｎ  ｅｍｂｏｄｉｍｅｎｔ）」、「１つまたは複数の実施形態」、「特定の実施形態」という用語、または同様の言い回しは、実施形態に関して説明される特定の特徴、構造、または特性が、本開示内で説明される少なくとも１つの実施形態に含まれることを意味する。したがって、本開示全体にわたる、「一実施形態では（ｉｎ  ｏｎｅ  ｅｍｂｏｄｉｍｅｎｔ）」、「一実施形態では（ｉｎ  ａｎ  ｅｍｂｏｄｉｍｅｎｔ）」、「１つまたは複数の実施形態では」、「特定の実施形態では」という句、および同様の言い回しの出現は、必ずしもそうとは限らないが、すべて、同じ実施形態を指し得る。「実施形態」および「構成」という用語は、本開示内では互換的に使用される。
【０１１２】
本明細書で定義される「プロセッサ」という用語は、少なくとも１つのハードウェア回路を意味する。ハードウェア回路は、プログラムコード中に含まれている命令を行うように設定され得る。ハードウェア回路は集積回路であり得る。プロセッサの例は、限定はしないが、中央処理ユニット（ＣＰＵ）、アレイプロセッサ、ベクトルプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、ＦＰＧＡ、プログラマブル論理アレイ（ＰＬＡ）、ＡＳＩＣ、プログラマブル論理回路、およびコントローラを含む。
【０１１３】
本明細書で定義される「出力」という用語は、物理メモリ要素、たとえば、デバイスに記憶すること、ディスプレイまたは他の周辺出力デバイスに書き込むこと、別のシステムに送ることまたは送信すること、エクスポートすることなどを意味する。
【０１１４】
本明細書で定義される「リアルタイム」という用語は、ユーザまたはシステムが、特定のプロセスまたは決定が行われるのに十分に即時であると感じる、あるいは、プロセッサが、何らかの外部プロセスについていくことを可能にする、処理応答性のレベルを意味する。
【０１１５】
本明細書で定義される「実質的に」という用語は、具陳された特性、パラメータ、または値が正確に達成される必要がないこと、ただし、たとえば、当業者に知られている許容差、測定誤差、測定精度限界、および他のファクタを含む、偏差または変動が、特性が提供することを意図された効果を妨げない量で生じ得ることを意味する。
【０１１６】
第１の、第２のなどの用語は、様々な要素を説明するために本明細書で使用され得る。これらの用語は、別段に述べられていない限り、または文脈が別段に明確に指示しない限り、ある要素を別の要素と区別するために使用されるにすぎないので、これらの要素はこれらの用語によって限定されるべきでない。
【０１１７】
コンピュータプログラム製品は、プロセッサに本明細書で説明される本発明の構成の態様を行わせるためのコンピュータ可読プログラム命令をその上に有する（１つまたは複数の）コンピュータ可読記憶媒体を含み得る。本開示内では、「プログラムコード」という用語は、「コンピュータ可読プログラム命令」という用語と互換的に使用される。本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング／処理デバイスに、あるいはネットワーク、たとえば、インターネット、ＬＡＮ、ＷＡＮおよび／またはワイヤレスネットワークを介して外部コンピュータまたは外部記憶デバイスにダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバー、ワイヤレス送信、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ、および／またはエッジサーバを含むエッジデバイスを含み得る。各コンピューティング／処理デバイス中のネットワークアダプタカードまたはネットワークインターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、そのコンピュータ可読プログラム命令を、それぞれのコンピューティング／処理デバイス内のコンピュータ可読記憶媒体に記憶するためにフォワーディングする。
【０１１８】
本明細書で説明される本発明の構成のための動作を行うためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ（ＩＳＡ）命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、あるいは、オブジェクト指向プログラミング言語および／または手続き型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組合せで書き込まれたソースコードまたはオブジェクトコードのいずれかであり得る。コンピュータ可読プログラム命令は、状態セッティングデータを含み得る。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロンソフトウェアパッケージとして、部分的にユーザのコンピュータ上でおよび部分的にリモートコンピュータ上で、あるいは完全にリモートコンピュータまたはサーバ上で実行し得る。後者のシナリオでは、リモートコンピュータは、ＬＡＮまたはＷＡＮを含む任意のタイプのネットワークを通してユーザのコンピュータに接続され得るか、あるいは接続は、（たとえば、インターネットサービスプロバイダを使用してインターネットを通して）外部コンピュータに対して行われ得る。いくつかの場合には、たとえば、プログラマブル論理回路、ＦＰＧＡ、またはＰＬＡを含む電子回路が、本明細書で説明される本発明の構成の態様を実施するために、電子回路を個人化するためにコンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行し得る。
【０１１９】
本発明の構成のいくつかの態様が、方法、装置（システム）、およびコンピュータプログラム製品のフローチャート例示図および／またはブロック図を参照しながら本明細書で説明された。フローチャート例示図および／またはブロック図の各ブロック、ならびにフローチャートの例示図および／またはブロック図中のブロックの組合せが、コンピュータ可読プログラム命令、たとえば、プログラムコードによって実装され得ることを理解されよう。
【０１２０】
これらのコンピュータ可読プログラム命令は、汎用コンピュータ、専用コンピュータ、または機械を製造するための他のプログラマブルデータ処理装置のプロセッサに与えられ得、その結果、コンピュータまたは他のプログラマブルデータ処理装置のプロセッサを介して実行する命令は、フローチャートおよび／またはブロック図の１つまたは複数のブロックにおいて指定された関数／行為を実装するための手段を作成する。これらのコンピュータ可読プログラム命令はまた、コンピュータ、プログラマブルデータ処理装置、および／または他のデバイスに特定の様式で機能するように指示することができるコンピュータ可読記憶媒体に記憶され得、その結果、命令が記憶されたコンピュータ可読記憶媒体は、フローチャートおよび／またはブロック図の１つまたは複数のブロックにおいて指定された動作の態様を実装する命令を含む製造品を備える。
【０１２１】
コンピュータ可読プログラム命令はまた、コンピュータ実装プロセスを作り出すために、一連の動作をコンピュータ、他のプログラマブルデータ処理装置または他のデバイス上で実施させるように、コンピュータ、他のプログラマブル装置、または他のデバイスにロードされ得、その結果、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する命令は、フローチャートおよび／またはブロック図の１つまたは複数のブロックにおいて指定された機能／行為を実装する。
【０１２２】
図中のフローチャートおよびブロック図は、本発明の構成の様々な態様によるシステム、方法、およびコンピュータプログラム製品の可能な実装形態のアーキテクチャ、機能性、および動作を示す。この点について、フローチャートまたはブロック図中の各ブロックは、指定された動作を実装するための１つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表し得る。
【０１２３】
いくつかの代替実装形態では、ブロック中で言及される動作は、図中で言及される順序から外れて行われ得る。たとえば、関与する機能性に応じて、連続して示されている２つのブロックが、実質的に同時に実行され得るか、またはブロックが、時々、逆の順序で実行され得る。他の例では、ブロックは、概して小さい数字から順に実施され得、さらに他の例では、１つまたは複数のブロックは、変動順で実施され得、結果は、記憶され、後続の、または直後にこない他のブロックにおいて利用される。また、ブロック図および／またはフローチャート例示図の各ブロック、ならびにブロック図および／またはフローチャート例示図中のブロックの組合せが、指定された機能または行為を実施するかあるいは専用ハードウェアとコンピュータ命令との組合せを行う専用ハードウェアベースシステムによって実装され得ることに留意されたい。
【０１２４】
以下の特許請求の範囲において見られ得るすべての手段またはステップおよび機能要素の対応する構造、材料、行為、および等価物は、機能を実施するための任意の構造、材料、または行為を一体となって含むことを意図される。
【０１２５】
１つまたは複数の実施形態では、システムが、通信バスに接続されたホストプロセッサと、通信バスを通してホストプロセッサに通信可能にリンクされた第１のハードウェアアクセラレータと、通信バスを通してホストプロセッサに通信可能にリンクされた第２のハードウェアアクセラレータとを含み得る。第１のハードウェアアクセラレータと第２のハードウェアアクセラレータとは、通信バスから独立したアクセラレータリンクを通して直接接続される。ホストプロセッサは、アクセラレータリンクを直接通した、第１のハードウェアアクセラレータと第２のハードウェアアクセラレータとの間のデータ転送を開始するように設定される。
【０１２６】
一態様では、ホストプロセッサは、通信バスを介して第１のハードウェアアクセラレータおよび第２のハードウェアアクセラレータと通信するように設定される。
【０１２７】
別の態様では、データ転送は、第１のハードウェアアクセラレータが、アクセラレータリンクを通して第２のハードウェアアクセラレータのメモリにアクセスすることを含む。
【０１２８】
別の態様では、ホストプロセッサは、ターゲットアドレスを含むデータを第１のハードウェアアクセラレータに送ることによって第２のハードウェアアクセラレータのメモリにアクセスするように設定され、ターゲットアドレスは、第２のハードウェアアクセラレータに対応するようにホストプロセッサによって変換され、第１のハードウェアアクセラレータは、ターゲットアドレスに基づいて、アクセラレータリンクを介して第２のハードウェアアクセラレータのメモリにアクセスするためのトランザクションを開始する。
【０１２９】
別の態様では、第２のハードウェアアクセラレータは、アクセラレータリンクを介してトランザクションを受信したことに応答して、第２のハードウェアアクセラレータについてのアドレス範囲の上限だけ、データ転送についてのターゲットアドレスを減分することと、減分されたターゲットアドレスがローカルであるかどうかを決定することとを行うように設定される。
【０１３０】
別の態様では、ホストプロセッサは、通信バスに接続された第２のハードウェアアクセラレータの直接メモリアクセス回路のステータスに基づいて、第１のハードウェアアクセラレータと第２のハードウェアアクセラレータとの間のデータ転送を開始するように設定される。
【０１３１】
別の態様では、ホストプロセッサは、リングトポロジーにおいて第１のハードウェアアクセラレータおよび第２のハードウェアアクセラレータのシーケンスを自動的に決定するように設定される。
【０１３２】
別の態様では、ホストプロセッサは、リモートバッファフラグを使用して、第１のハードウェアアクセラレータおよび第２のハードウェアアクセラレータに対応するバッファを追跡するように設定される。
【０１３３】
１つまたは複数の実施形態では、ハードウェアアクセラレータは、通信バスを介してホストプロセッサと通信するように設定されたエンドポイントと、ハードウェアアクセラレータにローカルなメモリに接続されたメモリコントローラと、エンドポイントとメモリコントローラとに接続されたリンク回路とを含み得る。リンク回路は、通信バスにも接続されたターゲットハードウェアアクセラレータとのアクセラレータリンクを確立するように設定される。アクセラレータリンクは、通信バスから独立した、ハードウェアアクセラレータとターゲットハードウェアアクセラレータとの間の直接接続である。
【０１３４】
リンク回路は、アクセラレータリンクを介したターゲットハードウェアアクセラレータとのデータ転送を開始するように設定され、データ転送は、通信バスを介してハードウェアアクセラレータによって受信されたホストプロセッサからの命令に応答して行われる。
【０１３５】
別の態様では、リンク回路は、第１のメモリマップ−ストリームマッパ回路と、第２のメモリマップ−ストリームマッパ回路とを含み、各々は、データストリームをメモリをマッピングされたトランザクションに、およびメモリマッピングされたトランザクションをデータストリームにコンバートするように設定される。
【０１３６】
別の態様では、各メモリマップ−ストリームマッパ回路は、ハードウェアアクセラレータのアドレス範囲の上限だけ、受信されたトランザクションにおいてターゲットアドレスを減分するように設定される。
【０１３７】
別の態様では、リンク回路は、ストリームデータを送るおよび受信するように設定された第１のトランシーバと、第１のトランシーバと第１のメモリマップ−ストリームマッパ回路とに接続された第１の再送信エンジンとを含む。
【０１３８】
別の態様では、リンク回路は、ストリームデータを送るおよび受信するように設定された第２のトランシーバと、第２のトランシーバと第２のメモリマップ−ストリームマッパ回路とに接続された第２の再送信エンジンとをさらに含む。
【０１３９】
１つまたは複数の実施形態では、方法が、第１のハードウェアアクセラレータ内で、通信バスを介してホストプロセッサから送られた命令とデータ転送についてのターゲットアドレスとを受信することと、第１のハードウェアアクセラレータが、ターゲットアドレスを、第１のハードウェアアクセラレータに対応するアドレス範囲の上限と比較することと、比較することに基づいてターゲットアドレスがアドレス範囲を超えると決定したことに応答して、第１のハードウェアアクセラレータが、第１のハードウェアアクセラレータと第２のハードウェアアクセラレータとを直接接続するアクセラレータリンクを使用してデータ転送を実施するために、第２のハードウェアアクセラレータとのトランザクションを開始することとを含み得る。
【０１４０】
別の態様では、アクセラレータリンクは通信バスから独立している。
【０１４１】
別の態様では、トランザクションを開始することは、メモリマッピングされたトランザクションを開始することと、メモリマッピングされたトランザクションをアクセラレータリンクを介して送られるべきデータストリームにコンバートすることとを含む。
【０１４２】
別の態様では、方法は、第２のハードウェアアクセラレータにおいてトランザクションを受信したことに応答して、第２のハードウェアアクセラレータは、ターゲットアドレスから第２のハードウェアアクセラレータのアドレス範囲の上限を減算することと、減算することの結果が、第２のハードウェアアクセラレータのアドレス範囲内にあるかどうかを決定することとを含む。
【０１４３】
別の態様では、第２のハードウェアアクセラレータは、データストリームとしてトランザクションを受信し、データストリームをメモリマッピングされたトランザクションにコンバートする。
【０１４４】
別の態様では、方法は、第２のハードウェアアクセラレータのダイレクトメモリアクセス回路のステータスを決定することと、第２のハードウェアアクセラレータのダイレクトメモリアクセス回路のステータスに応答してデータ転送を開始することとを含む。
【０１４５】
本明細書で提供される本発明の構成の説明は、例示のためであり、網羅的なものでも、開示される形式および例に限定されるものでもない。本明細書で使用される専門用語は、本発明の構成の原理、実際的適用例、または市場で見られる技術に対する技術的改善を説明するために、および／あるいは、他の当業者が本明細書で開示される本発明の構成を理解することを可能にするために選定された。説明される本発明の構成の範囲および趣旨から逸脱することなく、修正および変形が当業者に明らかになり得る。したがって、そのような特徴および実装形態の範囲を指示するものとして、上記の開示に対してではなく、以下の特許請求の範囲に対して参照が行われるべきである。
【図１】
2021530813.tif 000003
【図２】
2021530813.tif 000004
【図３】
2021530813.tif 000005
【図４】
2021530813.tif 000006
【図５】
2021530813.tif 000007
【図６】
2021530813.tif 000008
【国際調査報告】
2021530813.tif 000009
2021530813.tif 000010
2021530813.tif 000011