上記および他の実装形態は、各々、随意に、単独でまたは組み合わせて、以下の特徴のうちの1つまたは複数を含むか、あるいは以下の特徴のすべてを含むことができる。
1つまたは複数の実施形態では、システムが、ホストシステムと、通信インターフェースを通してホストシステムに結合されたICとを含む。ICは、ハードウェアアクセラレーションのために設定される。ICは、通信インターフェースに結合された直接メモリアクセス回路と、カーネル回路と、直接メモリアクセス回路とカーネル回路とに結合されたストリームトラフィックマネージャ回路(stream traffic manager circuit)とを含む。ストリームトラフィックマネージャ回路は、ホストシステムとカーネル回路との間で交換されるデータストリームを制御するように設定される。
一態様では、ホストシステムとICとは、パケット化されたデータを交換することによって通信する。
別の態様では、ICは、ストリームトラフィックマネージャ回路とカーネル回路とを接続する相互接続回路を含む。
別の態様では、カーネル回路は、複数のカーネル回路のうちの1つであり、ストリームトラフィックマネージャ回路は、複数のカーネル回路に提供されるデータストリームをインターリーブするように設定される。
別の態様では、ICは、相互接続回路とカーネル回路とに結合された入力バッファを含み、入力バッファは、ストリームトラフィックマネージャ回路からのパケット化されたデータを一時的に保持し、パケット化されたデータを、カーネル回路に提供されるデータストリームに変換するように設定される。ICは、相互接続回路とカーネル回路とに結合された出力バッファをさらに含み、出力バッファは、カーネル回路から出力されたデータストリームを一時的に保持し、データストリームを、パケット化されたデータに変換するように設定される。
別の態様では、ホストシステムは、メモリに結合されたプロセッサを含み、プロセッサは、メモリにおいて、入力バッファに対応する書込みキューと出力バッファに対応する読取りキューとを実装するように設定される。書込みキューは、入力バッファにストリーミングされるべきデータを指定する記述子を記憶する。読取りキューは、出力バッファからホストシステムのメモリにストリーミングされるべきデータを指定する記述子を記憶する。
別の態様では、ホストシステムは、カーネル回路に、帯域内命令をもつパケット化されたデータを送出するように設定される。
1つまたは複数の実施形態では、方法が、コンピュータハードウェアを使用して、カーネル回路を指定する設定ビットストリームと、カーネル回路についてのメタデータとを含むコンテナファイルを選択することと、コンピュータハードウェアを使用して、コンテナファイルから設定ビットストリームを抽出し、IC内にカーネル回路を実装するために、IC内に設定ビットストリームをロードすることと、コンピュータハードウェアを使用して、メタデータからパイププロパティを決定することであって、パイププロパティが、ホストシステムからカーネル回路にデータをストリーミングするためのセッティングを指定する、パイププロパティを決定することとを含む。方法は、データストリームに変換され、パイププロパティによって指定されたセッティングを使用してカーネル回路に提供される、パケット化されたデータとしての、ホストシステムからカーネル回路への直接のデータ転送を実装することをも含むことができる。
一態様では、方法は、結果を指定するさらなるデータストリームとしての、カーネル回路から直接ホストシステムへのさらなるデータ転送を実装することを含む。
別の態様では、さらなるデータ転送を実装することは、ホストシステムに位置する、カーネル回路に対応する書込みキューが、データの完全なパケットを受信するためのスペースを有するかどうかを決定することと、書込みキューがスペースを有すると決定したことに応答して、カーネル回路からホストシステムへのデータ転送を始動することとを含む。
別の態様では、方法は、IC内のストリームトラフィックマネージャ回路にセッティングを送出することを含み、ストリームトラフィックマネージャ回路は、ホストシステムとカーネル回路との間でデータをストリーミングするためにセッティングを実装する。
別の態様では、方法は、データストリーム内の帯域内にカーネル回路についての命令を含めることを含む。
別の態様では、方法は、データ転送が、データ転送を要求するユーザアプリケーションによって使用されるデータタイプに基づいてデータストリームとして実装されるべきであると決定することを含む。
別の態様では、データ転送を実装することは、IC内のカーネル回路に結合された入力バッファが、データを受信するためのスペースを有するかどうかを決定することと、入力バッファがスペースを有すると決定したことに応答して、カーネル回路へのデータ転送を始動することとを含む。
1つまたは複数の実施形態では、ICが、ホストシステムに結合された通信インターフェースと、通信インターフェースに結合された直接メモリアクセス回路と、プログラマブル回路を使用して実装されるカーネル回路と、直接メモリアクセス回路とカーネル回路とに結合されたストリームトラフィックマネージャ回路とを含む。ストリームトラフィックマネージャ回路は、ホストシステムとカーネル回路との間で交換されるデータストリームを制御するように設定される。
一態様では、ICは、ストリームトラフィックマネージャ回路から、パケット化されたデータを受信し、パケット化されたデータをカーネル回路に配信するように設定された第1の相互接続と、カーネル回路からデータを受信し、データをストリームトラフィックマネージャ回路に提供するように設定された第2の相互接続とを含む。
別の態様では、ICは、第1の相互接続の出力ポートとカーネル回路の入力ポートとに結合された入力バッファであって、入力バッファが、パケット化されたデータを一時的に記憶し、パケット化されたデータをデータストリームに変換し、データストリームをカーネル回路に提供するように設定された、入力バッファを含む。ストリームトラフィックマネージャ回路は、入力バッファが、利用可能なスペースを有すると決定したことに応答して、カーネル回路へのデータ転送を始動する。
別の態様では、ICは、カーネル回路の出力ポートとストリームトラフィックマネージャ回路の入力ポートとに結合された出力バッファであって、出力バッファが、カーネル回路から出力されたデータストリームを一時的に記憶し、データストリームを、パケット化されたデータに変換し、パケット化されたデータを第2の相互接続に提供するように設定された、出力バッファを含む。ストリームトラフィックマネージャ回路は、出力バッファに対応する、ホストシステムにおけるバッファが、利用可能なスペースを有し、出力バッファが少なくとも1つの完全なパケットを含むと決定したことに応答して、カーネル回路からホストシステムへのデータ転送を始動する。
別の態様では、カーネル回路は、プログラマブル回路において実装される複数のカーネル回路のうちの1つである。ストリームトラフィックマネージャ回路は、複数のカーネル回路の各々に結合され、複数のカーネル回路と交換されるデータストリームをインターリーブするように設定される。
別の態様では、複数のカーネル回路の各カーネル回路は、バッファおよび相互接続を通してストリームトラフィックマネージャ回路に結合される。ストリームトラフィックマネージャ回路は、各それぞれのカーネル回路に対応するバッファのスペース利用可能性に基づいて、複数のカーネル回路の各々にデータをストリーミングするためのラウンドロビンアービトレーション方式を実装する。
1つまたは複数の実施形態では、ICが、プログラマブル回路において実装される第1のカーネル回路と、プログラマブル回路において実装される第2のカーネル回路と、第1のカーネル回路と第2のカーネル回路とに結合されたストリームトラフィックマネージャ回路とを含む。ストリームトラフィックマネージャ回路は、第1のカーネル回路と第2のカーネル回路との間で交換されるデータストリームを制御するように設定される。
一態様では、第1のカーネル回路から第2のカーネル回路に送出される選択されたデータストリームが、第2のカーネル回路についての帯域内命令を含む。
別の態様では、第1のカーネル回路は、第1の入力バッファと第1の出力バッファとを通して第1の相互接続に結合され、第2のカーネル回路は、第2の入力バッファと第2の出力バッファとを通して第2の相互接続に結合され、第1の相互接続と第2の相互接続とはストリームトラフィックマネージャに結合される。
別の態様では、ストリームトラフィックマネージャ回路は、選択されたデータストリームを、集積回路に結合されたホストシステムから第1のカーネル回路にまたは第2のカーネル回路に直接提供し、結果データストリームを、第1のカーネル回路または第2のカーネル回路からホストシステムに提供するように設定される。
別の態様では、選択されたデータストリームは、第1のカーネル回路または第2のカーネル回路についての帯域内命令を含む。
別の態様では、第1のカーネル回路は集積回路の第1のダイに位置し、第2のカーネル回路は集積回路の第2のダイに位置する。
別の態様では、ストリームトラフィックマネージャ回路は第1のダイに位置する。
別の態様では、ICは、第2のダイ内の第2のカーネル回路の入力ポートに結合され、第2のカーネル回路にストリーミングされるデータを一時的に記憶するように設定された入力バッファと、第1のダイ内の第1のカーネル回路の出力ポートに結合され、第1のカーネル回路から出力されたデータを一時的に記憶するように設定された出力バッファとを含む。ストリームトラフィックマネージャ回路は、入力バッファが、利用可能なスペースを有し、出力バッファがデータを記憶していると決定したことに応答して、第1のカーネル回路から第2のカーネル回路へのデータ転送を始動するように設定される。
別の態様では、ICは、第1のダイ内の第1のカーネル回路の入力ポートに結合され、第1のカーネル回路にストリーミングされるデータを一時的に記憶するように設定された入力バッファと、第2のダイ内の第2のカーネル回路の出力ポートに結合され、第2のカーネル回路から出力されたデータを一時的に記憶するように設定された出力バッファとを含む。ストリームトラフィックマネージャ回路は、入力バッファが、利用可能なスペースを有し、出力バッファがデータを記憶していると決定したことに応答して、第2のカーネル回路から第1のカーネル回路へのデータ転送を始動するように設定される。
1つまたは複数の実施形態では、システムが、第1の複数のカーネル回路と、第1の複数のカーネル回路のうちの異なるカーネル回路間で交換されるデータストリームを制御するように設定されたストリームトラフィックマネージャ回路と、第1のトランシーバとを有する第1のICと、第2の複数のカーネル回路と、第2の複数のカーネル回路のうちの異なるカーネル回路間で交換されるデータストリームを制御するように設定された衛星ストリームトラフィックマネージャ回路と、第1のトランシーバに結合された第2のトランシーバとを有する第2のICとを含む。ストリームトラフィックマネージャ回路と衛星ストリームトラフィックマネージャ回路とは、第1の複数のカーネル回路のうちの選択されたカーネル回路と第2の複数のカーネル回路のうちの選択されたカーネル回路との間で渡されるデータストリームを交換するように設定される。
一態様では、第1の複数のカーネル回路は第1のICの異なるダイに位置し、第2の複数のカーネル回路は第2のICの異なるダイに位置する。
別の態様では、第1の複数のカーネル回路のうちの選択されたカーネル回路と第2の複数のカーネル回路のうちの選択されたカーネル回路との間で交換されるデータストリームは、第2のカーネル回路についての帯域内命令を含む。
別の態様では、ストリームトラフィックマネージャ回路は、選択されたデータストリームを、第1のICに結合されたホストシステムから、第1の複数のカーネル回路のうちの選択されたカーネル回路または第2の複数のカーネル回路のうちの選択されたカーネル回路に直接提供し、結果データストリームを、第1の複数のカーネル回路のうちの選択されたカーネル回路または第2の複数のカーネル回路のうちの選択されたカーネル回路からホストシステムに提供するように設定される。
別の態様では、選択されたデータストリームは、第1のカーネル回路または第2のカーネル回路についての帯域内命令を含む。
別の態様では、第1のICは、ストリームトラフィックマネージャと第1の複数のカーネル回路とに結合された相互接続を含み、第2のICは、衛星ストリームトラフィックマネージャと第2の複数のカーネル回路とに結合された相互接続を含む。
別の態様では、ストリームトラフィックマネージャ回路と衛星ストリームトラフィックマネージャ回路とは、受信カーネル回路の入力バッファが、利用可能なスペースを有すると決定したことに応答して、データストリームを交換するように設定される。
別の態様では、第1のICは、第1の複数のダイを含み、第1の複数のカーネル回路が第1の複数のダイにわたって分散される。各ダイは、ストリームトラフィックマネージャと、ダイ内の第1の複数のカーネル回路のうちの特定のカーネル回路とに結合された相互接続を含む。
1つまたは複数の実施形態では、方法が、ストリームトラフィックマネージャ回路(stream traffic manager circuitry)によって、パケットについて、カーネル回路の出力バッファを監視することであって、カーネル回路が少なくとも1つのICのプログラマブル回路において実装される、出力バッファを監視することと、送出カーネル回路の出力バッファがパケットを記憶していることを検出したことに応答して、ストリームトラフィックマネージャ回路によって、パケットについて、受信カーネル回路を決定することと、ストリームトラフィックマネージャ回路によって、受信カーネル回路の入力バッファが、パケットを記憶するために利用可能なスペースを有するかどうかを決定することと、入力バッファが、パケットを記憶するために利用可能なスペースを有すると決定したことに応答して、ストリームトラフィックマネージャ回路によって、送出カーネル回路の出力バッファから受信カーネル回路の入力バッファへのストリームデータ転送を始動することとを含む。
一態様では、ストリームデータ転送は、ホストシステムの関与なしに実施される。
別の態様では、ストリームデータ転送は、受信カーネル回路の動作を制御する帯域内命令を含む。
本発明の概要セクションは、いくつかの概念を導入するために提供されるにすぎず、請求される主題の重要な、または本質的な特徴を識別するために提供されるものではない。本発明の構成の他の特徴は、添付の図面および以下の発明を実施するための形態から明らかになろう。
本発明の構成は、添付の図面において例として示される。しかしながら、図面は、本発明の構成を、図示される特定の実装形態のみに限定するものと解釈されるべきではない。様々な態様および利点が、以下の発明を実施するための形態を検討し、図面を参照すると明らかになろう。
本開示は、新規の特徴を定義する特許請求の範囲で締めくくるが、本開示内で説明される様々な特徴は、図面とともにその説明を考慮することにより、より良く理解されると考えられる。本明細書で説明される(1つまたは複数の)プロセス、(1つまたは複数の)機械、(1つまたは複数の)製造物およびその任意の変形形態は、例示のために提供される。本開示内で説明される特定の構造的および機能的詳細は、限定するものとして解釈されるべきではなく、単に、特許請求の範囲のための基礎として、およびほぼすべての適切に詳細な構造において説明される特徴を様々に採用するように当業者に教示するための代表的基礎として解釈されるべきである。さらに、本開示内で使用される用語および句は、限定するものではなく、むしろ、説明される特徴の理解可能な説明を提供するものである。
本開示はICに関し、より詳細には、ホストシステムとハードウェアアクセラレーテッド回路との間の通信のためにおよびハードウェアアクセラレーテッド回路のカーネル回路間の通信のためにデータストリームを使用することに関する。ICは、ハードウェアアクセラレーテッド回路を1つまたは複数のカーネル回路として実装する。たとえば、各カーネル回路は、ハードウェアアクセラレーテッドプログラムコードを表す。ホストシステムは、IC内に実装されるカーネル回路に1つまたは複数のタスクをオフロードすることが可能である。カーネル回路に1つまたは複数のタスクをオフロードする際に、ホストシステムは、データストリームをサポートするアーキテクチャを使用して、カーネル回路による動作の対象となるべきデータを転送する。カーネル回路は、データストリーム対応アーキテクチャを使用して互いとデータを交換することが可能である。カーネル回路はまた、データ、たとえば、結果を、ホストシステムに送出するより前にパケット化されたデータストリームとして、ホストシステムに転送する。
従来のシステムでは、カーネル回路にタスクをオフロードするとき、ホストシステムは、カーネル回路を実装するICに結合されたランダムアクセスメモリ(RAM)を介した、カーネル回路へのデータ転送を始動する。しかしながら、RAMは、カーネル回路と、同じ回路板(たとえば、アクセラレータカード)上に位置するが、同じIC中にない。データがRAMに転送されると、ホストシステムは、カーネル回路に、データが、使用するための準備ができていることを通知する。これは、RAMへのデータ転送が完了するまで、カーネル回路がデータに対して動作することを始めることができないことを意味する。ホストシステムからカーネル回路に提供される命令は、データに対して、別個に、たとえば、帯域外で提供される。たとえば、コマンドが、データを伝達するために使用されるものとは異なる物理インターフェース上で、カーネル回路に提供される。
従来のシステムでは、カーネル回路は、データの利用可能性を通知されると、RAMからデータを読み取り、データを処理し、RAMに結果を書き込む。カーネル回路がRAMに結果を書き込み終えたとき、カーネル回路は、ホストシステムに、結果の利用可能性を通知する。次いで、ホストシステムは、RAMから結果を取り出す。
本開示内で説明される本発明の構成によれば、データが、データストリームおよびパケット化を使用してホストシステムとカーネル回路との間で交換される。ホストシステムによって発信されるデータがカーネル回路に直接送出される。同様に、カーネル回路によって発信されるデータがホストシステムに直接送出される。例示的なおよび非限定的な例として、ホストシステムからカーネル回路へのデータ転送がホストシステムからカーネル回路に直接流れる。ホストシステムから転送されるデータは、最初にオフチップRAMに記憶および累積されず、次いでカーネル回路によって読み取られる。同様に、カーネル回路からホストシステムに転送される結果は、ホストシステムに提供される前に、最初にオフチップRAMに記憶および累積されない。代わりに、データは、カーネル回路からホストシステムに直接流れる。1つまたは複数のより小さい内部メモリバッファを利用するIC内のデータ経路上で、ストリーミングが実施される。メモリバッファは、たとえば、ホストシステムとカーネル回路との間で交換されるデータの量よりもサイズが小さい。
本開示内で説明されるストリーミングアーキテクチャは、従来のシステムと比較して、より速いデータ転送、より少ないレイテンシ、およびメモリのより効率的な使用を容易にする。たとえば、カーネル回路は、データの全体が最初にオフチップRAMに転送され、次いでカーネル回路にロードされるのを待つのではなく、データの全体よりも少ないデータを受信した後直ちにそのデータに対する動作を始めることができる。これは、システム全体の速度およびレイテンシを改善する。速度およびレイテンシにおける同様の利得が、カーネル回路からホストシステムにデータをストリーミングすることによって取得される。ストリーミングアーキテクチャを使用すると、ホストシステムからカーネル回路へのコマンドが、データストリーム自体の中に含まれ、たとえば、帯域内に入れ(in-band)られ、これはシステムレイテンシをさらに低減する。ICの内部メモリをより効率的に利用することによって、より少ないオフチップRAMが必要とされ、これは、システムおよび/またはハードウェアアクセラレータの電力要件を低減する。
特定の実施形態では、カーネル回路はまた、データストリームを使用して互いと通信することが可能である。また、ホストシステム-カーネル回路通信に関係して説明される利益は、カーネル回路の間の通信のためにデータストリームを使用することによって達成される。さらに、(1つまたは複数の)プログラマブルIC内にストリーミングインフラストラクチャを含めることによって、カーネル回路は、あまり複雑でないインフラストラクチャ、たとえば、互いと通信することが意図されたカーネル回路の間の直接ポイントツーポイント通信リンクを必要としないインフラストラクチャを使用して、互いとデータを交換することが可能である。
図を参照しながら、本発明の構成のさらなる態様が以下でより詳細に説明される。例示を単純および明快にするために、図に示されている要素は、必ずしも一定の縮尺で描かれているとは限らない。たとえば、要素のうちのいくつかの寸法は、明快のために、他の要素に対して誇張され得る。さらに、適切と見なされる場合、対応する、類似する、または同様の特徴を示すために、参照番号が図の間で繰り返される。
図1は、ハードウェアアクセラレーションのための例示的なアーキテクチャ100を示す。アーキテクチャ100は、ホストシステム102とハードウェアアクセラレータ103とを含む。ホストシステム102は、サーバまたは他のデータ処理システムなど、コンピュータシステムとして実装される。ハードウェアアクセラレータ103は、IC104とIC104にアタッチされたメモリ106とを有する回路板として実装される。たとえば、ハードウェアアクセラレータ103は、ホストシステム102の利用可能な周辺スロットに挿入され得るエッジコネクタを有するアクセラレータカードとして、実装され得る。
図1の例は、IC104の外部にあるメモリ(たとえば、RAM)を使用して説明されるが、ストリーミングデータに関係して本明細書で説明される実施形態は、IC104が、メモリ106が必要とされないような十分なオンチップメモリを含む場合も、有効および適用可能である。IC104が、十分なオンチップメモリまたは同じダイメモリを含む場合、外部メモリに関与する問題と同様の問題が、カーネル回路がデータに対して動作することを許可される前に、データ全体がメモリに転送されなければならないとき、起こる。内部メモリを使用することは、外部メモリを使用することよりも高速であるが、レイテンシの増加、記憶容量(メモリ)の増加の必要、および同期など、問題が生じ、これらは、本明細書で説明されるストリーミング対応実施形態によって克服される。
1つまたは複数の実施形態では、IC104は、プログラマブルICとして実装される。特定の実施形態では、IC104は、図7に関して説明されるものと同じまたは同様のアーキテクチャを使用して実装される。図1の例では、IC104は、エンドポイント108と、直接メモリアクセス回路(DMA)110と、カーネル回路112と、メモリコントローラ114とを含む。エンドポイント108は、通信バス上でホストシステム102と通信することが可能であるインターフェースである。例示的および非限定的な例として、通信バスは、周辺構成要素相互接続エクスプレス(PCIe)バスとして実装され得る。したがって、エンドポイント108は、PCIeエンドポイントとして実装され得る。ただし、他の通信バスが使用され得ることと、提供された例は限定するものではないこととを諒解されたい。したがって、エンドポイント108は、通信バス上で通信するための様々な好適なインターフェースのいずれかとして実装され得る。
エンドポイント108は、DMA110に結合される。また、DMA110は、カーネル回路112と(図1で「MC」と略される)メモリコントローラ114とに結合される。特定の実施形態では、DMA110は、エンドポイント108とのおよびカーネル回路112との双方向通信をサポートする2つの独立チャネルを含む。図1の例では、DMA110は、1つまたは複数のインターフェース116を通してカーネル回路112に結合される。したがって、ホストシステム102は、カーネル回路112に提供される前に1つまたは複数のデータストリームに変換されたパケット化されたデータとして、エンドポイント108およびDMA110を介してカーネル回路112にデータを転送することが可能である。同様に、カーネル回路112は、DMA110およびエンドポイント108を介してホストシステム102に提供されるより前にパケット化されるデータストリームを出力することによって、ホストシステム102にデータを転送することが可能である。データの転送に関係するさらなる詳細が、図2に関してより詳細に説明される。概して、1つのデータストリームは、ホストシステム102において発信するのか、カーネル回路112から発信するのかにかかわらず、複数のパケットに変換されるが、データストリームのサイズに応じて(たとえば、データストリームがより少ない量のデータを伝達する場合)、データストリームが単一のパケットに変換される場合があり得る。
インターフェース116の一例は、アドバンストマイクロコントローラバスアーキテクチャ(AMBA(登録商標):Advanced Microcontroller Bus Architecture)アドバンスト拡張可能インターフェース(AXI:Advanced Extensible Interface)など、ストリーム対応オンチップ相互接続である。AXIストリーム相互接続は、異種マスタ/スレーブAMBA(登録商標)AXIストリームプロトコル準拠回路ブロックの接続を可能にする。インターフェース116は、1つまたは複数のマスタから1つまたは複数のスレーブに、パケット化されたデータを伝達する接続をルーティングすることが可能である。AXIは、限定するものではなく、例示の目的で提供される。インターフェース116は、様々な相互接続のいずれかとして実装され得ることを諒解されたい。たとえば、インターフェース116は、バス、ネットワークオンチップ(NoC)、クロスバー、スイッチ、または他のタイプの相互接続として実装され得る。
1つまたは複数の実施形態では、メモリコントローラ114はメモリ106に結合される。メモリ106はRAMとして実装される。メモリコントローラ114は、マルチポートであり得、DMA110とカーネル回路112とに結合される。メモリコントローラ114は、DMA110および/またはカーネル回路112の制御下でメモリ106にアクセスする(たとえば、読み取るおよび/または書き込む)ことが可能である。たとえば、DMA110は、メモリマッピングされたインターフェース118を通してメモリコントローラ114に結合される。同様に、カーネル回路112は、メモリマッピングされたインターフェース120を通してメモリコントローラ114に結合される。DMA110は、制御インターフェース122を介してカーネル回路112に結合される。1つまたは複数の実施形態では、制御インターフェース122は、回路ブロックとのポイントツーポイント双方向通信を提供するように設定されたAXI-Liteインターフェースとして実装される。AXI-Liteは、カーネル回路112のための制御インターフェースとして使用され得る。説明されたように、AXIは、限定ではなく、例示の目的で提供される。
メモリマッピングされたインターフェース118および120と制御インターフェース122とを使用すると、図1に示されているアーキテクチャは、メモリ106を通した、ホストシステム102とカーネル回路112との間のデータ転送をサポートすることも可能である。たとえば、ホストシステム102はメモリ106にデータを送出する。データは、DMA110に提供され得、DMA110は、メモリコントローラ114を使用してメモリ106内にデータを記憶する。データは、前に説明されたように、データ転送が完了するまで、メモリ106に累積および記憶される。ホストシステム102は、制御インターフェース122を通してカーネル回路112に、メモリ106中のデータの利用可能性を通知し得る。カーネル回路112は、メモリコントローラ114にアクセスしてメモリ106からデータを読み取ることが可能である。カーネル回路112は、結果を生成し、その結果をメモリ106内に記憶する。カーネル回路112は、制御インターフェース122を通してホストシステム102に、メモリ106中の結果の利用可能性を通知する。
データが、メモリ106を使用して、IC104において実装されるカーネル回路112または複数のカーネル回路に転送される例では、ホストシステム102は、様々なカーネル回路間でメモリ106を割り振り、共有する責任を有する。ホストシステム102は、制御インターフェース122を通して、カーネル回路を設定し、開始する。しかしながら、制御インターフェース122は、かなりのレイテンシを伴うより遅いインターフェースである傾向がある。制御インターフェース122を通してカーネル回路と通信しなければならないことのほかに、ホストシステム102は、また、カーネル回路動作を管理し、同期させなければならず、ホストシステム102にかなりのオーバーヘッドを追加する。ホストシステム102は、たとえば、(1つまたは複数の)適切な時間においてカーネル回路を開始および/または停止するために、データ転送を制御信号と同期させなければならない。
説明されたように、他の実施形態では、IC104は、メモリ106がIC104内の内部メモリとして実装されるような十分なメモリリソースを含む。その場合、IC104において記述される回路ブロックが、IC104内のインターフェース回路を使用して内部メモリにアクセスすることが可能であり、したがって、メモリコントローラ114は除外され得る。
1つまたは複数の実施形態では、アーキテクチャ100は、パケット化されたデータとデータストリームとを介した、ホストシステム102とカーネル回路112との間の直接通信をサポートするために実装される。その場合、メモリマッピングされた通信能力が省略され得る。たとえば、(メモリ106が省略され得るように)制御インターフェース122と、メモリマッピングされたインターフェース118および120と、メモリコントローラ114とが省略され得る。しかしながら、1つまたは複数の他の実施形態では、アーキテクチャ100は、メモリ106を伴うメモリマッピングされた通信と、パケット化されたデータとデータストリームとを使用する直接通信の両方をサポートするために実装される。たとえば、DMA110は、両方のタイプのデータ転送をサポートし得る。さらに、図1の例において、単一のカーネル回路が示されているが、複数のカーネル回路が実装され得、いくつかのカーネル回路は、データストリームを介したホストシステム102との直接通信を利用し、他のカーネル回路は、ホストシステム102とのデータ転送のためにメモリ106を利用する。さらに他の実施形態では、カーネル回路を呼び出している、ホストシステム102によって実行される特定のアプリケーション、またはカーネル回路と通信するためにアプリケーションによって呼び出される特定の機能に応じて、データストリームを介した直接通信またはデータ転送のためのメモリ106のいずれかを利用するために、カーネル回路が実装され得る。
アーキテクチャ100および本明細書で説明される他のストリーミングアーキテクチャが、カーネル回路を設定し、管理するためのより効率的なやり方を提供する。特定の実施形態では、命令が、データストリームのデータペイロードとともに帯域内でカーネル回路に提供され得る。データとともに命令を含めること、たとえば、「命令を帯域内に入れること」は、データストリームが使用されるときの、制御インターフェース122の必要を除去し、より効率的なホストシステム-カーネル回路通信を提供する。
ホストシステム102は、メモリマッピングされたユーザアプリケーション124および/またはストリームユーザアプリケーション126など、1つまたは複数のユーザアプリケーションを含むソフトウェアフレームワークを実行することが可能である。メモリマッピングされたユーザアプリケーション124は、カーネル回路112などのカーネル回路を呼び出し、メモリマッピングされたインターフェース118および120と、制御インターフェース122と、メモリ106とを使用してカーネル回路112とデータを交換するように設定された、ホストシステム102によって実行されるアプリケーションである。ストリームユーザアプリケーション126は、カーネル回路112などのカーネル回路を呼び出し、ストリーミングインターフェース116を使用してカーネル回路112とデータを交換するように設定された、ホストシステム102によって実行されるアプリケーションである。
ソフトウェアフレームワークはランタイム128をも含む。ランタイム128は、IC104と通信するための機能、たとえば、アプリケーションプログラミングインターフェース(API)を提供する。たとえば、ランタイム128は、PCIe上でのDMA転送を実装するための機能を提供することが可能である。1つまたは複数の実施形態では、ランタイム128は、インターフェース116を使用してカーネル回路112とホストシステム102との間でデータをストリーミングするためのサポートを提供することが可能である。1つまたは複数の他の実施形態では、ランタイム128は、メモリ106と、メモリマッピングされたインターフェース118および120と、制御インターフェース122とを使用してカーネル回路112とホストシステム102との間でデータを転送するためのサポートを提供することが可能である。例示的な例として、ランタイム128は、メモリマッピングされたユーザアプリケーション124の実行と、メモリ106を介した、カーネル回路112とのデータの転送とをサポートすること、および/またはストリームユーザアプリケーション126の実行と、インターフェース116を介した、カーネル回路112とのデータの転送とをサポートすることが可能である。
ドライバ130が、ホストシステム102内のエンドポイント(図示せず)を制御することが可能である。PCIe接続の場合、たとえば、ホストシステム102内のエンドポイントは、ルートコンプレックスとして実装される。したがって、ドライバ130は、ホストシステム102とIC104との間のデータ転送を制御する記述子を記憶するための複数の読取りキューおよび書込みキューを実装し、管理することが可能である。
1つまたは複数の実施形態では、ドライバ130は、カーネル回路への大きいデータの転送(たとえば、ストリーミングされるデータの転送)についての要求を、パケットと呼ばれるデータのより小さいチャンクの複数のストリーム転送に分割することが可能である。ドライバ130によって実施される、データのこの分割、または「パケットへのデータのパケット化」は、大部分は、カーネル回路112から隠される。パケット化は、異なるカーネル回路に宛てられるおよび/または異なるカーネル回路から宛てられるパケットをインターリーブすることによって、複数のカーネル回路をコンカレントにサービスするためにIC104において実装される相互接続ファブリックを可能にする。ドライバ130はパケットサイズを、パケット化オーバーヘッドを効率的にならす(amortize)のに十分に大きいが、ストリーミングされるデータを他のカーネル回路が転送している間、ストリーミングされるデータを送出および/または受信する順番を待ちながらカーネル回路がストールすることをパケットが引き起こすほど大きくならないように、決定することが可能である。
概して説明されるように、制御インターフェース122は、カーネル回路112に伝達される制御信号とカーネル回路112に配信されるデータとの間の同期を必要とする遅い接続である傾向がある。たとえば、制御インターフェース122が、データストリームを用いる帯域外シグナリングのために使用される場合、速度要件および/または同期要件が、しばしば、(1つまたは複数の)データストリームを再開するより前に制御信号を変更するために、カーネル回路への(1つまたは複数の)データストリームを停止することをもたらす。
例示的なおよび非限定的な例として、カーネル回路112が暗号化動作を実装する場合を考慮する。カーネル回路112に提供される異なるデータペイロードが、一般に、暗号化のための異なる鍵を必要とする。制御インターフェース122が使用されるべきである場合、カーネル回路112へのデータストリームが停止され、鍵は、制御インターフェース112を介して更新され、次いで(1つまたは複数の)データストリームが再開されることになる。そのような動作はホストシステム102によって協調されることになり、これは、ホストシステム102のオーバーヘッドを増やす。本明細書で説明される1つまたは複数の実施形態では、カーネル回路112への1つまたは複数の命令が帯域内で提供される。したがって、新しいおよび/または更新された鍵は、カーネル回路112に提供される、帯域内のデータストリーム中に含まれ得る。命令は、ペイロードとともにまたはペイロードの直前に含まれ得る。特定の実施形態では、命令は、各パケットについてのカスタム定義されたヘッダにおいて指定され得る。本例では、ホストシステム102は、カーネル回路112が動作するべきである対象の1つまたは複数のパケットの(1つまたは複数の)平文ペイロードのためのパケットヘッダの一部として、暗号化鍵を送出することが可能である。したがって、カーネル回路112は、効率的に動作し、この場合、カーネル回路112が停止されおよび/または制御インターフェース122と同期される必要がないので、ホストシステム102が同期オーバーヘッドを招くことなしに、およびデータ転送のための従来の技法と比較して、低減されたレイテンシで、異なるペイロードのために暗号化鍵を切り替えることが可能である。
図2は、図1のアーキテクチャ100の別の例示的な実装形態を示す。図2は、図1に関して説明されたより高いレベルのビューに示されていないアーキテクチャ100のさらなる態様を示す。ただし、例示の目的で、ホストシステム102によって実行されるソフトウェアフレームワークの選択された要素、IC104内のエンドポイント108およびメモリコントローラ114、ならびにメモリ106など、図1に示されているいくつかの要素が図2に示されていない。
図2の例では、ホストシステム102によって実行されるソフトウェアフレームワークのドライバ130が示されている。ドライバ130は、複数のキュー202-1~202-8を実装することが可能である。ドライバ130は、IC104内に実装される各カーネル回路について、読取りキューおよび書込みキューを作成することが可能である。例示の目的で、書込みキューとして設定されたキュー202は陰影を付けられており、読取りキューとして設定されたキュー202は陰影を付けられていない。IC104は、4つのカーネル回路234-1、234-2、234-3、および234-4を実装するので、ドライバ130は、4つの書込みキュー(たとえば、202-1、202-3、202-5、および202-7)と4つの読取りキュー(たとえば、202-2、202-4、202-6、および202-8)とを実装する。キュー202の各々が、1つまたは複数の記述子を記憶することが可能であり、各記述子は、実施されるべきデータ転送を記述する。書込みキューに記憶される各記述子は、ホストシステム102からカーネル回路234へのデータ転送を記述し、読取りキューに記憶される各記述子は、カーネル回路234からホストシステム102へのデータ転送を記述する。
DMA110は、述べられたように、2つのチャネルを含む。書込みチャネルが、ホストシステム102からカーネル回路234へのデータの転送をサポートする。書込みチャネルは、書込み回路204とアービトレーション回路206とを含む。書込み回路204は、カーネル回路234にコマンドおよび/またはデータをフォワーディングするより前に、ホストシステム102から受信されたコマンドおよび/またはデータを記憶することが可能である。読取りチャネルが、カーネル回路234からホストシステム102へのデータの転送をサポートする。読取りチャネルは、読取り回路208とアービトレーション回路210とを含む。読取り回路208は、ホストシステム102にデータをフォワーディングするより前に、カーネル回路234から受信されたデータを記憶することが可能である。
DMA110は、ホストシステム102のホストメモリ(図示せず)とバッファ218、220、222、224、226、228、230、および232との間でデータを移動する。DMA110は、転送されるべきあらゆるパケットについてのアドレス、たとえば、記述子のリストをフェッチおよび維持し、エンドポイント108のためにコマンドおよびアドレスのシーケンスを形成する。1つまたは複数の実施形態では、DMA110は高度に設定可能である。したがって、ストリームトラフィックマネージャ212を通して、DMA110のためのトラフィック管理およびフロー制御が実施される。ストリームトラフィックマネージャ212は、すべてのカーネル回路234が、ホストシステム102との間でのデータ転送のための、DMA110へのフェアなアクセスを有することを効果的に確実にする。
ストリームトラフィックマネージャ212は、DMA110と相互接続214および216とに結合される。ストリームトラフィックマネージャ212は、ホストシステム102とカーネル回路234との間のデータストリーム/パケットのフローを調節することが可能である。図2の例では、ストリームトラフィックマネージャ212は、コントローラ236と、1つまたは複数のバッファ238と、1つまたは複数のデータムーバエンジン240と、フロー対パイプマップ(マップ)242と、パイプ対ルートマップ(マップ)244とを含む。
特定の実施形態では、相互接続214および相互接続216は、図1のインターフェース116を実装する。図2の例では、相互接続214は、ストリームトラフィックマネージャ212から、パケット化されたデータを受信し、パケット化されたデータを適切なカーネル回路234にルーティングするように設定される。相互接続216は、カーネル回路234から、パケット化されたデータを受信し、パケット化されたデータをストリームトラフィックマネージャ212に提供するように設定される。
図2の例では、カーネル回路234は、バッファを通して相互接続214と相互接続216とに接続される。カーネル回路234の各々が、対応する入力バッファを通してデータストリームを受信するように設定された入力ポートと、対応する出力バッファを通してデータストリームを送出するように設定された出力ポートとを有する。例示の目的で、入力バッファ(たとえば、バッファ218、222、226、および230)は陰影を付けられている。出力バッファ(たとえば、バッファ220、224、228、および232)は陰影を付けられていない。
カーネル回路234-1は、バッファ218を通して相互接続214に接続され、バッファ220を通して相互接続216に接続される。カーネル回路234-2は、バッファ222を通して相互接続214に接続され、バッファ224を通して相互接続216に接続される。カーネル回路234-3は、バッファ226を通して相互接続214に接続され、バッファ228を通して相互接続216に接続される。カーネル回路234-4は、バッファ230を通して相互接続214に接続され、バッファ232を通して相互接続216に接続される。
述べられたように、相互接続214および216はAXIストリーム相互接続として実装され得るが、本発明の構成は、そのように限定されるものではない。パケット化されたデータを配信するための様々な回路アーキテクチャのいずれかが使用され得る。相互接続214および216を実装するために使用され得る他の例示的な回路アーキテクチャが、限定はしないが、クロスバー、多重化されたバス、メッシュネットワーク、および/またはネットワークオンチップ(NoC)を含む。
入力バッファ218、222、226、および230の各々が、相互接続214と、それぞれ、カーネル回路234-1、234-2、234-3、および234-4の入力ポートとに結合される。各入力バッファは、カーネル回路が受信されたデータを直ちに受け入れることまたは処理することが可能でない場合、対応するカーネル回路234に向けられた、ホストシステム102からのパケット化されたデータを一時的に記憶することが可能である。さらに、各入力バッファは、ホストシステム102から受信されたパケット化されたデータを、対応するカーネル回路234に提供されるデータストリームに変換することも可能である。たとえば、各入力バッファは、対応するカーネル回路に提供され得るデータストリームを生成するために、1つまたは複数のパケットのシーケンスを組み合わせることが可能である。
出力バッファ220、224、228、および232の各々が、相互接続216と、それぞれ、カーネル回路234-1、234-2、234-3、および234-4の出力ポートとに結合される。各出力バッファは、対応するカーネル回路234から出力されたデータストリームを一時的に保持し、データストリームを、パケット化されたデータに変換し、パケット化されたデータを、相互接続216を介してホストシステム102に送出することが可能である。各出力バッファは、カーネル回路がストリーミングインフラストラクチャと歩調を合わせることができない場合、データを記憶することが可能である。各出力バッファは、たとえば、対応するカーネル回路から出力されたデータストリームを1つまたは複数のパケットに分離することが可能である。
1つまたは複数の実施形態では、出力バッファ220、224、228、および232は、ソースカーネル回路および/または宛先カーネル回路を識別するためのカーネルタグ付け情報を提供することが可能である。たとえば、出力バッファは、プリペンドされた(pre-pended)ヘッダとしてタグ付け情報を追加することが可能である。出力バッファによって実施されるタグ付けは、パケット内のデータが、ホストメモリ中の正しい場所にまたは適切なカーネル回路に配置またはルーティングされることを可能にする。たとえば、カーネル回路234に対応する各出力バッファは、各パケットにソースカーネル識別子をタグ付けし、それらのパケットを相互接続216に送出することが可能である。相互接続216は、ストリームトラフィックマネージャ212およびDMAエンジン110にパケットを配信する。DMAエンジン110は、パケット化されたデータをホストメモリに移動する。
例示の目的で、カーネル回路234-1が説明される。カーネル回路234-2、234-3、および234-4は、同じまたは同様の様式で動作し得ることを諒解されたい。図2の例では、カーネル回路234-1の入力ポートが、バッファ218を通して相互接続214に接続される。カーネル回路234-1の出力ポートが、バッファ220を通して相互接続216に接続される。例示の目的で、書込みキュー202-1が入力バッファ218にマッピングされ、読取りキュー202-2が出力バッファ220にマッピングされる。概して、キュー202の各々が、バッファ218~232のうちの1つにマッピングされる。しかしながら、バッファ218~232は、キュー202のうちの2つ以上にマッピングされ得る。例示の目的で、キュー202-1および202-2はバッファ218および220に対応し、キュー202-3および202-4はバッファ222および224に対応し、キュー202-5および202-6はバッファ226および228に対応し、キュー202-7および202-8はバッファ230および232に対応する。
図2の例では、ホストシステム102は、データストリーミングのために設定されたユーザアプリケーションを実行する。カーネル回路234への接続を確立するために、ホストシステム102は、キュー202のペアを作成する。例示的な例として、ユーザアプリケーションは、ドライバ130に、それぞれ、バッファ218および220に対応するキュー202-1および202-2のペアを作成させる、ランタイム128によって提供される機能を呼び出し得る。キュー202のペアが作成されると、この例では、データがホストシステム102とカーネル回路234-1との間でストリーミングされ得るように、ホストプロセッサが、DMA110内の制御レジスタ(図示せず)とストリームトラフィックマネージャ212のマップ242および244とを設定するためのさらなる機能を呼び出すことが可能である。
ユーザアプリケーションを実行する際に、ホストシステム102は、カーネル回路234-1にデータを送出する(たとえば、書き込む)ための命令を指定する記述子をキュー202-1内に配置し、適宜に、カーネル回路234-1からデータを受信する(たとえば、読み取る)ための命令を指定する記述子を読取りキュー202-2内に配置する。特定の実施形態では、ドライバ130は、IC104に送出されるべきデータをパケット化し、DMA110に、フェッチされるべき、キュー202において利用可能な記述子の数を通知することが可能である。DMA110は、その情報をストリームトラフィックマネージャ212に伝達する。
ストリームトラフィックマネージャ212は、マップ242およびマップ244を使用して、バッファ218~232へのキュー202のマッピングを維持する。記憶されたマッピングを使用して、ストリームトラフィックマネージャ212は、キュー202-1がバッファ218に対応し、キュー202-2がバッファ220に対応すると決定する。キュー202-1において利用可能な記述子に気づいているコントローラ236は、カーネル回路234-1の入力ポートのためのバッファ218にアクセスすることが可能である。コントローラ236は、バッファ218が、データを受信するために利用可能なスペースを有するかどうかを決定し、データを受信するために利用可能なスペースを有する場合、バッファ218において受信し、記憶され得るデータの量を決定する。
1つまたは複数の実施形態では、DMA110は、キュー202の各々がどのくらいいっぱいであるかを決定し、コントローラ236に知らせることが可能である。書込み回路204は、たとえば、キュー202-1、202-3、202-5、および202-7の各々中の記述子の数を決定することが可能である。読取り回路208は、キュー202-2、202-4、202-6、および202-8の各々中の記述子の数を決定することが可能である。読取り回路204および書込み回路208は、ストリームトラフィックマネージャ212に、それぞれのキュー202中の記述子の数を知らせることが可能である。さらに、書込み回路204および読取り回路208は、ストリームトラフィックマネージャ212の制御下でキュー202から記述子を取り出すことが可能である。
ストリームトラフィックマネージャ212内で、(1つまたは複数の)バッファ238は、DMA110を介してキュー202から取り出された記述子を記憶する。たとえば、コントローラ236は、DMA110が、(1つまたは複数の)バッファ238内で利用可能なスペース量に応じて、特定の数の記述子を取り出すことを要求することが可能である。DMA110は、取り出された記述子をストリームトラフィックマネージャ212に提供する。したがって、ストリームトラフィックマネージャ212は、キュー202の各々に記憶された記述子のサブセットを(1つまたは複数の)バッファ238内に内部的に記憶することが可能である。
1つまたは複数の実施形態では、記述子のフォーマットまたはシンタックスが、パケットを形成するためにいくつの記述子が必要とされるか、およびパケット中のバイト数を示す。コントローラ236は、バッファ218が、データを受信するために利用可能なスペースを有すると決定したことに応答して、(たとえば、記述子がキュー202-1から取り出された場合)カーネル回路234-1に対応する、(1つまたは複数の)バッファ238内に記憶された記述子を評価し、(1つまたは複数の)記述子自体内のデータに基づいて、バッファ218に記憶すべき、バッファ218の利用可能なスペースを越えない、十分な量のデータ(たとえば、(1つまたは複数の)パケット)を取り出すために実行すべき記述子の数を決定する。
1つまたは複数の実施形態では、データムーバエンジン240の各々が、ホストシステム102からデータを取り出すことと、DMA110を介してホストシステム102にデータを送出することとが可能である。データムーバエンジン240は、コンカレントに動作することが可能である。コントローラ236は、(1つまたは複数の)バッファ238からデータムーバエンジン240のうちの利用可能なデータムーバエンジンに、実行されるべき記述子を割り当てることが可能である。各データムーバエンジン240は、それぞれの記述子の各々によって指定されたデータをフェッチすることによって、割り当てられた記述子を処理する。たとえば、データムーバエンジン240は、(1つまたは複数の)記述子によって指定された取り出されたパケット化されたデータを、相互接続214を介してバッファ218に送出することが可能である。述べられたように、入力バッファ218は、パケット化されたデータを記憶し、パケット化されたデータをデータストリームに変換し、データストリームをカーネル回路234-1に提供することが可能である。
ストリームトラフィックマネージャ212のパケットハンドリング能力は、異なるデータストリームに対応し得るパケットが、インターリーブされた様式で取り出されることを可能にする。パケットは、N個の異なるデータストリームについて、インターリーブされた様式でホストシステム102から取り出され(またはホストシステム102に送出され)得る。
ストリームトラフィックマネージャ212は、カーネル回路234の各々について記述される動作を実施することが可能である。したがって、ストリームトラフィックマネージャ212は、各カーネル回路234について入力バッファを継続的に監視し、入力バッファが、データを受信し、記憶するためのスペースを有すると最初に決定したことに応答してのみ、バッファへのデータ転送を始動することが可能である。言い換えれば、コントローラ236は、キュー202中のどの記述子が、利用可能な十分なスペースを有する、IC104中の対応するバッファを有するかを継続的に決定し、次いで、そのような記述子を実行することが可能である。
所与の時間において、IC104とホストシステム102とを接続する通信バスは、フェッチされている複数の記述子および/またはデータを同時に搬送することが可能である。相互接続214および216の各々が、一度に単一のパケットを伝達することが可能である。特定の実施形態では、アービトレーション回路206は、異なるカーネル回路に対応して一度に1つのパケットを渡すためのラウンドロビンアービトレーション方式を実装することが可能である。他の実施形態では、アービトレーション回路206は、異なるアービトレーション方式を使用し得る。ストリームトラフィックマネージャ212は、入力バッファ中に利用可能なスペースを有するカーネル回路234についてのみ記述子を実行する(読取り要求を始動する)ので、ストリームアービトレーション206から受信されたパケットは、ターゲットカーネル回路234の意図された入力バッファ上に渡され、バックプレッシャーを有しないことが保証される。入力バッファ中のスペースが事前に割り振られたので、パケット化されたデータを受信するためのスペースが保証される。
ストリームトラフィックマネージャ212は、さらに、DMA110に、インターリーブされた様式でデータをフェッチするように命令することが可能である。例示的な例として、コントローラ236は、どのカーネル回路がビジーであるか、および入力バッファ中の利用可能なスペースに基づいて、DMA110に、カーネル回路234-1のための1つまたは複数のパケットを取り出し、次いで、カーネル回路234-2のための1つまたは複数のパケットなどを取り出すように要求する。ストリームトラフィックマネージャ212は、カーネル回路234の各々がどのくらいビジーであるか、および、各カーネル回路234の各それぞれの入力バッファ内で、どれくらいのデータストレージが利用可能であるかを知ると、カーネル回路234の間でアービトレーションを実施する。特定の実施形態では、コントローラ236は、(1つまたは複数の)バッファ238に、書込みキュー202の各々についての最初の「N個の」記述子をローカルに記憶し、利用可能なスペースについて各カーネル回路の各入力バッファを検査するラウンドロビンアービトレーション方式を実施する。
アーキテクチャ100は、カーネル回路234からホストシステム102にデータを転送するとき、同様の様式で動作することが可能である。たとえば、ストリームトラフィックマネージャ212は、読取りキュー202-2、202-4、202-6、および202-8の各々の最初の「N個の」記述子を記憶することが可能である。ストリームトラフィックマネージャ212は、結果データがカーネル回路234についての出力キューにおいていつ利用可能であるかを決定することが可能である。出力バッファに対応する記述子が利用可能である、すなわち、記憶された結果を含んでいる、と決定したことに応答して、コントローラ236は、利用可能なデータムーバエンジン240を使用して出力バッファからホストシステム102へのデータ転送を始動する。記述子の利用可能性は、ホストシステム102が、カーネル回路から結果を受信するための利用可能なスペースを有することを示す。
例示の目的で、カーネル回路234-1は、入力バッファ218からのデータに対して動作することが可能である。カーネル回路234-1は、結果データを、データストリームとして出力バッファ220に出力する。ストリームトラフィックマネージャ212、たとえば、コントローラ236は、いつデータが利用可能であるか、たとえば、いつ、データの少なくとも完全なパケットが出力バッファにおいて利用可能であり、対応する読取りキューが、そのデータ(たとえば、少なくとも完全なパケット)を記憶するために利用可能な十分なスペースを有するかを決定するために、出力バッファを監視することが可能である。出力バッファ220が利用可能なデータを有すると決定したことと、(ストリームトラフィックマネージャ212中のバッファ238において取り出され、キャッシュされ得る)記述子が、対応する読取りキュー202-2において利用可能であると決定したこととに応答して、コントローラ236は、出力バッファ220から相互接続216を通したDMA110とホストシステム102とへのデータ転送を始動する。出力バッファ216は、相互接続216に、およびホストシステム102上にデータを送出する前に、データストリームを、パケット化されたデータに変換する。1つまたは複数の実施形態では、アービトレーション210はラウンドロビンアービトレーションを実装することが可能である。他の実施形態では、アービトレーション210は、他のアービトレーション技法を実装することが可能である。アービトレーション技法は、ラウンドロビンなのか、それ以外なのかにかかわらず、カーネル回路234からのデータストリームおよび/またはパケットのインターリービングまたは交代を実装する。
複数のストリーミング対応カーネル回路がIC内に実装される実施形態では、各アクティブカーネル回路が、ICのデータ転送帯域幅の一部分を受信する。複数のストリーミング対応カーネル回路のコンカレント動作は、一般に、算出が始まる前に、そのようなカーネル回路が、完了されたデータ転送全体に対して動作するのではなく、データフラグメントが各それぞれのカーネル回路に到着するとき、データのフラグメントに対して動作するように設計されることを意味する。データのより小さいフラグメントに対して動作するこの能力は、本明細書で説明されるストリーミング対応カーネル回路にデータへのより迅速なアクセスを与え、これは、より低いレイテンシ、より高い性能、より低いデータストレージ要件、より低い全体的コスト、およびより低い電力消費を容易にする。
DMA110にデータを送出するおよび/またはDMA110からデータを受信する異なるカーネル回路の間でインターリーブ(または交代)するとき、ストリームトラフィックマネージャ212は、相互接続ファブリック、たとえば、相互接続214、216が、遅いカーネル回路によってブロックされないことを確実にすることが可能である。これは、少なくとも部分的に、バッファ218~232を使用することによって達成される。一実施形態では、バッファ218~232の各々が、データの少なくとも1つの完全なパケットを記憶するようにサイズ決定される。説明されたように、カーネル回路に向けられたデータは、カーネル回路の入力バッファにおいてバッファスペースが利用可能でない限り、送出されない。パケットのバーストが入力バッファに到着すると、カーネル回路は、相互接続214上のトラフィックに悪影響を及ぼすことなしにカーネル回路自体のタイムテーブル上のバッファを空にし、それにより、「ヘッドオブラインブロッキング」として知られる輻輳状態を防ぐことが可能である。同様に、カーネル回路からホストシステム102に向けられたデータは、全パケットが出力バッファに転送されるまで、カーネル回路から相互接続216にわたって送出されない。
カーネル回路の出力バッファは、データ転送が始まると、相互接続216を独占的に使用する。カーネル回路が、パケットの途中で、データを送出することに遅れるかまたはデータを送出することを停止した場合、相互接続216は、相互接続216がパケット全体を受信するまで、別のカーネル回路をサービスすることに切り替えることができず、それにより、相互接続216をロックし、他のカーネル回路がホストシステムにデータを送出するのを妨げる。出力バッファが省略されるべきである場合、あるカーネル回路が他のカーネル回路の性能に悪影響を及ぼすことがある。本明細書で説明される本発明の構成によれば、各出力バッファは、相互接続216にデータを送出することを試みる前に、パケット全体の最小限を受信し、記憶することが可能である。この特徴は、パケットの送信が始まると、カーネル回路挙動またはカーネル回路出力データレートとは無関係に相互接続216およびアップストリームインフラストラクチャが転送を受け入れることができるほど迅速に、その送信が完了することを確実にする。
1つまたは複数の実施形態では、カーネル回路およびバッファは、プログラマブル回路を使用して実装される。したがって、バッファは、IC104において実際に実装されるカーネル回路についてのみ作成される。IC104の回路リソースは、少数のカーネル回路が展開されるとき、入力バッファおよび/または出力バッファに関して浪費されない。リソース使用量は、IC104において実装されるカーネル回路の数とともにスケーリングする。特定の実施形態では、相互接続214、216にわたるデータ転送は、ストリームトラフィックマネージャ212によって管理されるバッファクレジットのシステムを通して調節される。
1つまたは複数の実施形態では、ランタイム128は、データストリームを使用する、カーネル回路との直接の通信をサポートするために、ユーザアプリケーションによって呼び出され得る様々なアプリケーションプログラミングインターフェース(API)を提供することが可能である。以下は、ランタイム128によって提供される例示的なAPIのリストである。
clCreateHostPipe-「ストリーミングパイプ」とも呼ばれる、データをストリーミングするための読取りタイプまたは書込みタイプのデータバッファを作成するOpenCL API。
clEnqueueWritePipeBuffer-書込み(カーネル回路へのデータ転送)のためのストリーミングパイプに直接パケットをキューイングする。
clEnqueueReadPipeBuffer-読取り(カーネル回路からのデータ転送)のためのストリーミングパイプに直接パケットをキューイングする。
ランタイム128は、読取りキューペアおよび/または書込みキューペアを作成、破棄、開始、停止、および修正するためのAPIをさらに提供し得る。
struct xclQueueContext
xclCreateWriteQueue-ホストシステムにおいて書込みキューを作成する。ホストシステムにおいてリソースを割り振り、DMA110のための書込みキューを初期化して、デバイス要求を発行する。作成された書込みキューについてのキューハンドルが将来のアクセスのために返される。
xclCreateReadQueue-ホストシステムにおいて読取りキューを作成する。ホストシステムにおいてリソースを割り振り、DMA110のための読取りキューを初期化して、「デバイスからの」要求を発行する。作成された読取りキューについてのキューハンドルが将来のアクセスのために返される。
xclDestroyQueue-指定された読取りキュー/書込みキューを破棄し、破棄された読取りキュー/書込みキューを実装するために使用されたリソースを回収する。
xclModifyQueue-指定された読取りキュー/書込みキューのパラメータを修正する。
xclStartQueue-指定された読取りキュー/書込みキューを、キューがDMA要求を受け付け、処理することを開始することが可能である稼働状態にする。
xclStopQueue-指定された読取りキュー/書込みキューを、初期化された状態にする。すべての保留中のDMA要求がフラッシュされる。
ランタイム128は、以下のものなど、カーネル回路への書込みおよびカーネル回路からの読取りを発行するためのAPIをさらに提供し得る。
struct xclQueueRequest
struct xclWRBuffer
xclWriteQueue-指定されたキューに書き込む。
xclReadQueue-指定されたキューから読み取る。
ドライバ130は、以下のものなど、DMA110の動作をサポートするAPIをさらに提供し得る。
streamq_create()
streamq_destroy()
streamq_write()/streamq_read
1つまたは複数の実施形態では、ランタイム128は、読取り要求および/または書込み要求を作成、破棄、開始、停止、および修正するために呼び出され得る、IC104に関係する入出力動作のための入出力制御(IOCTL)システム呼を提供する。特定の実施形態では、これらのシステム呼は、ホストシステム102において実行するユーザスペースアプリケーションにとって利用可能でない。ランタイム128は、ホストシステム102内で実行されるユーザスペースアプリケーションにとって利用可能であるポータブルオペレーティングシステムインターフェース(POSIX)読取り/書込み機能と非同期I/O(AIO)読取り/書込み機能とをさらに提供し得る。
ハードウェアコンパイラ/システムリンカを含む電子設計オートメーション(EDA)アプリケーションを実行するシステムが、カーネルを実装する設計フロー(たとえば、高レベル合成、合成、配置、ルーティング、および/または設定ビットストリーム生成)中にカーネル引数をキューにマッピングすることが可能である。マッピング情報が、生成され、コンテナファイル内に、カーネル回路を指定する設定ビットストリーム(たとえば、部分設定ビットストリーム)とともに記憶される。コンテナファイルは、IC104内での使用および実装のために、ホストシステム102に記憶される。
ホストシステム102は、コンテナファイルを取り出して、IC104とともにコンテナファイルからの設定ビットストリームを実装するとき、ホストシステム102は、さらに、コンパイル中に生成されたマッピング情報を含むメタデータを抽出することが可能である。マッピング情報は、IC104内に実装されると、ホストシステム102とカーネル回路との間のデータストリームをルーティングするために通信経路をセットアップする際に使用するために、ランタイム128に提供される。
カーネルのためのプログラムコード内の「パイプ」データ構築物の利用に基づいて、EDAアプリケーションは、データ転送のために、オフチップRAMまたは内部RAMのいずれかを伴うメモリマッピングされたトランザクションの代わりにデータストリームを使用するように設定されたカーネル回路を生成する(たとえば、設定ビットストリームがカーネル回路を指定する)ことが可能である。たとえば、パイプデータ構造を検出したことに応答して、EDAアプリケーションは、図1および/または図2に関して説明された、データストリームを使用するデータ転送をサポートする必要なハードウェアインフラストラクチャおよび/または回路を生成することが可能である。OpenCLにおいて指定されているカーネルの一例が例1として以下で提供される。
上記の例示的なカーネルをコンパイルするとき、EDAアプリケーションは、p1およびp2についてのマッピング情報を生成する。マッピング情報は、IC104内に実装されると、ホストシステム102と、カーネル回路234-1などの特定のカーネル回路との間でデータストリームを正しくルーティングするように、(たとえば、マップ242および244にレジスタセッティングを記憶することによって)ストリームトラフィックマネージャ212を設定し、(DMA110中の制御レジスタに記憶することによって)DMA110を設定するための、レジスタセッティングを含む。一例では、マッピング情報は、各パイプがバインドされる特定のroute_idおよびflow_id、ならびに/または、パイプp1およびパイプp2に関係する静的情報を指定する。このマッピングデータは、カーネルから生成されたカーネル回路を指定する設定ビットストリームについてのメタデータ(たとえば、プログラムコード)としてコンテナファイル内に記憶される。
たとえば、ホストシステム102のメモリからカーネル回路234-1にデータを送出するために、ランタイム128および/またはドライバ130は、その動作をp1に割り当て、p1をキュー構造202-1にバインドする。ホストシステム102は、内部テーブルからカーネル回路234-1のためのroute_idをルックアップする。route_idは、カーネル回路234-1のロケーションを指定する。ホストシステム102は、パイプp1および関連するキュー202-1でDMA110の制御レジスタを設定する。ホストシステム102は、カーネル回路234-1のためのroute_idをキュー202-1およびパイプp1と相関させるエントリを作成する。1つまたは複数の実施形態では、ストリームトラフィックマネージャ212は、パイプp1に対応するデータを受信したことに応答して、p1に属するカーネル回路バウンドデータ(kernel circuit bound data)に正しいroute_idをタグ付けすることが可能である。このroute_idをタグ付けされたデータが与えられると、ストリームトラフィックマネージャ212および相互接続214は、バッファ218を介してカーネル回路234-1にデータを配信することが可能である。
同様に、カーネル回路234-1からホストシステム102内のメモリにデータを転送するために、ランタイム128および/またはドライバ130は、その動作をp2に割り当て、p2をキュー202-1にバインドすることが可能である。ホストシステム102は、カーネル回路234-1からのホストバウンドデータ(host bound data)にタグ付けするために使用されるflow_idをルックアップする。1つまたは複数の実施形態では、カーネル回路234-1は、アウトバウンドデータ(outbound data)に適切なflow_idをタグ付けすることが可能である。1つまたは複数の他の実施形態では、バッファ220は、アウトバウンドデータに適切なflow_idをタグ付けすることが可能である回路を含む。ホストシステム102は、パイプp2でDMA110を設定し、パイプp2をキュー202-2に関連付ける。ホストシステム102は、さらに、データ転送のために、カーネル回路234-1のためのflow_id(たとえば、バッファ220)をキュー202-2およびパイプp2と相関させるエントリを作成する。ストリームトラフィックマネージャ212は、さらに、そのデータをDMA110にフォワーディングするとき、flow_idをタグ付けされたホストバウンドトラフィック(host-bound traffic)をパイプp2にバインドすることが可能である。
DMA110とストリームトラフィックマネージャ212の両方がデータ転送のために設定されると、DMA110は、上記の例1に従って動作を始めるように指令される。
図3は、データストリームを使用してホストシステムとハードウェアアクセラレータのカーネル回路との間でデータを転送する例示的な方法300を示す。方法300は、ホストシステムがメモリ内に1つまたは複数のコンテナファイルを記憶する状態において始まることができる。各コンテナファイルが、1つまたは複数の設定ビットストリームと、対応するメタデータとを含む。部分設定ビットストリームであり得る設定ビットストリームの各々が、1つまたは複数のカーネル回路を指定する。
ブロック305において、ホストシステムはコンテナファイルを選択する。例示の目的で、コンテナファイルは、設定ビットストリームと設定ビットストリームについてのメタデータとを含む。設定ビットストリームは、部分設定ビットストリームであり得る。1つまたは複数の実施形態では、ホストシステムは、ユーザアプリケーションが、コンテナファイル中の設定ビットストリームによって指定されたカーネル回路によって実装されるハードウェアアクセラレーテッド機能性を要求したことに応答して、コンテナファイルを選択する。ユーザアプリケーションは、メモリから選択されるかまたは取り出され、ハードウェアアクセラレータにおいて実装されるべき、特定のコンテナファイルを指定し得る。
ブロック310において、ホストシステムはコンテナファイルから設定ビットストリームを抽出する。ホストシステムは、ハードウェアアクセラレータのIC、たとえば、IC104に設定ビットストリームをロードする。ハードウェアアクセラレータのICに設定ビットストリームをロードすることによって、設定ビットストリームによって指定されたカーネル回路は、IC内に物理的に実装され、ホストシステムによって要求されるタスクを実施するために利用可能である。
ブロック315において、ホストシステムは、メタデータから1つまたは複数のパイププロパティを決定する。たとえば、ホストシステムは、選択されたコンテナファイルから設定ビットストリームについてのメタデータを抽出する。メタデータは、カーネルがコンパイルされたときに生成されたマッピング情報を含む。マッピングデータは、DMA110およびストリームトラフィックマネージャ212を設定するために使用され得る1つまたは複数のパイププロパティを含む。たとえば、パイププロパティは、セッティング、たとえば、ホストシステムと、選択されたコンテナファイルから抽出された設定ビットストリームによって実装された1つまたは複数のカーネル回路との間でデータを交換するためのルートを確立するために、DMA110および/またはストリームトラフィックマネージャにロードされ得るroute_idおよび/またはflow_idなど、レジスタセッティングを含み得る。
1つまたは複数の実施形態では、設定ビットストリームについてのメタデータは、ストリームトラフィックマネージャがより効率的に動作することを可能にする、設計フロー中に生成された追加情報を含む。たとえば、メタデータは、各カーネルに固有である情報、たとえば、セッティングを指定することができる。したがって、メタデータを使用して、ストリームトラフィックマネージャは、カーネル回路ごとに、データがどのようにカーネル回路にストリーミングされ、および/またはカーネル回路からホストシステムにストリーミングされるかを調整することが可能である。メタデータは、たとえば、(パケットサイズに対応する)カーネル回路のワーキングデータセットのサイズ、データセットごとにカーネル回路のために必要とされる算出時間、カーネル回路のために望まれるプリフェッチングの量などを指定することができる。ストリームトラフィックマネージャは、動作中に、その特定のカーネル回路についてのメタデータに従って、カーネルのために取り出されるデータの量とプリフェッチングの量とを調整することができる。
ブロック315の一部として、ホストシステムは、ストリームトラフィックマネージャおよび/またはDMAにセッティング(たとえば、説明されるパイププロパティおよび/または他の情報)を送出して、実装されたカーネル回路とホストシステムとの間でデータをストリーミングするためのデータ経路を設定することが可能である。たとえば、ホストシステムは、データ経路を設定するためにドライバおよび/またはランタイムにおいて利用可能な1つまたは複数の機能を呼び出す。その機能は、たとえば、DMAの制御レジスタへのセッティングとストリームトラフィックマネージャのマップとを書き込む。ストリームトラフィックマネージャは、本明細書で説明されるセッティングとともに書き込まれ得る追加の制御レジスタを含み得る。
ブロック320において、ホストシステムは、セッティングを使用して、データストリームとしての、ホストシステムからカーネル回路への直接のデータ転送を実装する。たとえば、ホストシステムは、ターゲットカーネル回路の入力バッファに対応する、ドライバ内の書込みキューに1つまたは複数の記述子を追加する。DMAは、記述子のうちの1つまたは複数を取り出し、取り出された記述子をストリームトラフィックマネージャに提供することが可能である。ストリームトラフィックマネージャは、記述子を内部バッファ内に一時的に記憶する。説明されたように、ストリームトラフィックマネージャは、ターゲットカーネル回路について入力バッファの状態を監視し、入力バッファ内でスペースが利用可能であるとき、ストリームトラフィックマネージャ中に含まれている利用可能なデータムーバエンジンを使用して、ターゲットカーネル回路の入力バッファに対応する記述子のうちの1つまたは複数を実行することが可能である。したがって、DMA110は、ホストメモリから、パケット化された形態のデータを取り出す。ストリームトラフィックマネージャは、ターゲットカーネル回路の入力バッファにそのデータをストリーミングする。述べられたように、入力バッファは、パケット化されたデータを、ストリーミングされるデータに変換することが可能である。
1つまたは複数の実施形態では、ターゲットカーネル回路に転送されるデータは、そのデータ中に埋め込まれた、カーネル回路のための1つまたは複数の命令を含む。この点について、コマンドは、データとともにまたはデータに対して「帯域内」にあると言われる。データストリーム内にカーネル回路のための命令を含めることによって、カーネル回路の動作を開始および/または停止するための、カーネル回路のための別個のシグナリングが提供される必要がない。そのような動作は、(1つまたは複数の)データストリーム中に含まれる帯域内命令によって始動され得る。特定の実施形態では、カーネル回路および/またはホストシステムは、連続データストリーム、または随意に、命令(たとえば、コマンドまたはステータス情報)が点在しているデータストリームを交換することが可能である。
1つまたは複数の実施形態では、ホストシステムは、データ転送が、データ転送を要求するユーザアプリケーションによって使用されるデータタイプ、および/またはユーザアプリケーションによって呼び出される特定のAPIに基づいて、データストリームとして実装されるべきであると決定することが可能である。
ブロック325において、ホストシステムは、パイププロパティを使用して、データストリームとしての、カーネル回路から直接ホストシステムへのさらなるデータ転送を実装する。たとえば、ホストシステムは、ターゲットカーネル回路の出力バッファに対応する、ドライバの読取りキューに1つまたは複数の記述子を追加する。述べられたように、DMAは、記述子のうちの1つまたは複数を取り出し、取り出された記述子をストリームトラフィックマネージャに提供することが可能である。ストリームトラフィックマネージャは、記述子を内部バッファ内に一時的に記憶する。ストリームトラフィックマネージャは、カーネル回路について出力バッファの状態を監視し、出力バッファ内でデータストリームが利用可能であるとき、ストリームトラフィックマネージャ中に含まれている利用可能なデータムーバエンジンを使用して、ターゲットカーネル回路の出力バッファに対応する記述子のうちの1つまたは複数を実行することが可能である。したがって、ストリームトラフィックマネージャのデータムーバエンジンは、ターゲットカーネル回路の出力バッファから、パケット化されたデータを取り出し、パケット化されたデータをDMAに提供する。述べられたように、出力バッファは、データストリームを、パケット化されたデータに変換する。DMAは、通信バス上で、パケット化されたデータをホストメモリに提供する。
図4は、データストリームを使用してカーネル回路間でデータを交換するための例示的なアーキテクチャ400を示す。アーキテクチャ400は、アプリケーションが複数の大きいおよび複雑なカーネル回路を必要とし、1次ICによって提供されたプログラマブル回路を増強するために、追加のICが使用される、使用事例をサポートする。1次ICは、エンドポイントおよびDMAを介した、ホストシステムとの通信をサポートするように設定される。1次ICはまた、ストリームトラフィックマネージャを含む。1つまたは複数の実施形態では、ストリームトラフィックマネージャは、カーネル回路のためのパケット化されたデータを、独立した相互接続に各々接続されたいくつかの異なるポートのうちの1つにルーティングすることが可能である。カーネル回路を異なる相互接続に区分することは、カーネル回路が、ICの異なる物理領域、たとえば、マルチダイICの場合の異なるダイに位置することを可能にする。さらに、異なる相互接続は、異なる領域のカーネル回路を、互いに干渉しないように隔離する。この区分は、マルチダイICが使用されることと、また、2次ICが使用されることとを可能にする。
アーキテクチャ400は、IC104とIC402とを含む。1つまたは複数の実施形態では、IC104および402は、RAM(図示せず)をも含み得る同じ回路板、たとえば、ハードウェアアクセラレータに結合される。図4の例では、IC104および402の各々がマルチダイICとして実装される。IC104は、ダイ404および406を含む。IC402は、ダイ408および410を含む。ダイ404、406、408、および410の各々が、図7に関して本明細書でより詳細に説明されるプログラマブル回路を含めるために実装される。特定の実施形態では、ダイ404、406、408、および410のうちの1つまたは複数が、1つまたは複数のハードワイヤード回路ブロックを含む。一例では、ダイ404、406、408、および410の各々はフィールドプログラマブルゲートアレイ(FPGA)として実装される。
図4の例では、ダイ404とダイ406とは同じパッケージ内に含まれるが、ダイ408とダイ410とは異なるパッケージ中に含まれる。IC104およびIC402は、様々な利用可能なマルチダイ技術のいずれかを使用して実装され得る。1つまたは複数の実施形態では、ダイ404および406は、ダイ404とダイ406との間で信号を伝達することが可能なワイヤを含むインターポーザ(interposer)上に取り付けられる。同様に、ダイ408および410は、ダイ408とダイ410との間で信号を伝達することが可能なワイヤを含むインターポーザ上に取り付けられる。それらのダイは、複数のはんだバンプまたは別の接続技術を使用して取り付けられ得る。インターポーザは、たとえば、選択された信号が、マルチダイICパッケージの外部に渡り、基板に渡ることを可能にする、複数のスルービアを含む。
例示の目的で、ダイ404および408は、各それぞれのダイ中に含まれる異なる回路ブロックをより良く示すために陰影を付けられている。図4の例では、ダイ404および408は、それぞれ、ダイ406および410中に含まれない追加の回路ブロックを含む。たとえば、ダイ404は、エンドポイント108と、DMA110と、ストリームトラフィックマネージャ212と、トランシーバ442とを含むが、ダイ406はそれらを含まない。1つまたは複数の実施形態では、エンドポイント108、DMA110、および/またはトランシーバ442のうちの1つまたは複数が、ハードワイヤード回路ブロックとして実装される。特定の実施形態では、エンドポイント108、DMA110、および/またはトランシーバ442はプログラマブル回路において実装される。これらの回路構造はダイ406内で繰り返されない。同様に、ダイ408は、トランシーバ444と衛星ストリームトラフィックマネージャ412とを含むが、ダイ410はそれらを含まない。これらの構造はダイ410において繰り返されない。
図4の例では、エンドポイント108、DMA110、およびストリームトラフィックマネージャ212は、実質的に、図1および図2に関して説明されたように実装される。しかしながら、図4の例では、ストリームトラフィックマネージャ212は追加のI/Oポートを含む。たとえば、ストリームトラフィックマネージャ212は、トランシーバ442に接続する追加のI/Oポートを含む。さらに、ストリームトラフィックマネージャ212の1つまたは複数のI/Oポートが、ダイ406に、詳細には、相互接続416に結合する。1つまたは複数の実施形態では、相互接続414および相互接続416は、各々、相互接続214のインスタンスおよび相互接続216のインスタンスを表す。したがって、ダイ404および406の各々が、相互接続214および相互接続216のインスタンスを含む。示されているように、カーネル回路234および対応するバッファが、ダイ404および406にわたって拡散される。
ダイ408は、トランシーバ444と、衛星ストリームトラフィックマネージャ412と、相互接続418と、バッファ422、424、426、および428と、カーネル回路440-1および440-2とを含む。特定の実施形態では、相互接続418は、相互接続214の別のインスタンスおよび相互接続216の別のインスタンスを表す。ダイ410は、相互接続420と、バッファ432、434、436、および438と、カーネル回路440-3および440-4とを含む。同様に、相互接続420は、相互接続214の別のインスタンスおよび相互接続216の別のインスタンスを表す。1つまたは複数の実施形態では、トランシーバ444はハードワイヤード回路ブロックとして実装される。特定の実施形態では、トランシーバ444はプログラマブル回路において実装される。
図4の例では、IC104は、ダイ404が、ホストシステム102と通信するためのエンドポイント108を含むという点で、マスタとして動作することが可能である。さらに、ストリームトラフィックマネージャ212は、トランシーバ442および444を介して衛星ストリームトラフィックマネージャ412と通信することが可能である。1つまたは複数の実施形態では、トランシーバ442および444は、複数のシリアルデータレーン(serial data lane)を含む高速ポイントツーポイント相互接続を実装する。トランシーバ442および444によって形成された接続が、ストリームトラフィックマネージャ212と衛星ストリームトラフィックマネージャ412との間でデータを交換する。さらに、トランシーバ442および444は、IC境界を横断することによる追加のレイテンシを隠すために、バッファリングの追加の層を提供することが可能である。図4の例では、ストリームトラフィックマネージャ212および衛星ストリームトラフィックマネージャ412は、パケット化されたデータを送出および受信する。1つまたは複数の実施形態では、トランシーバ442および444は、一方のトランシーバから他方のトランシーバに送信する目的で、ストリームトラフィックマネージャ212と衛星ストリームトラフィックマネージャ412との間で交換されるストリーミングパケットをシリアライズすることと、IC104および402内で送出および/またはハンドリングするために、送信されたデータをデシリアライズすることとが可能である。同様に、トランシーバ442および444は、一方のトランシーバから他方のトランシーバに送信する目的で、ストリームトラフィックマネージャ212と衛星ストリームトラフィックマネージャ412との間で交換されるクレジットメッセージをシリアライズすることと、IC104および/またはIC402内で送出および/またはハンドリングするためにそのようなメッセージをデシリアライズすることとが可能である。
アーキテクチャ400を使用して、ホストシステム102は、パケット化されたデータをルーティングするように、DMA110、ストリームトラフィックマネージャ212、および衛星ストリームトラフィックマネージャ412を設定することが可能である。たとえば、ストリームトラフィックマネージャ212は、必要なマッピングデータおよび/またはセッティングを衛星ストリームトラフィックマネージャ412上に渡すことが可能である。設定されると、ホストシステム102は、IC104および/またはIC402にタスクをオフロードすることが可能である。さらに、ホストシステム102は、カーネル回路234のうちの1つまたは複数および/またはカーネル回路440のうちの1つまたは複数にタスクを指示することが可能である。
カーネル回路234は、図2の例では単一のダイ中に含まれたが、図4の例では、カーネル回路234は、ダイ404および406にわたって分散される。同様に、カーネル回路440は、ダイ408および410にわたって分散される。ストリームトラフィックマネージャ212は、データがコンカレントに複数のカーネル回路に提供されることを可能にするが、ストリームトラフィックマネージャ212は、カーネル回路234間で(たとえば、234-1から234-2にまたはその逆、234-1または234-2から234-3または234-4に、234-3から234-4にまたはその逆、234-3または234-4から234-2または234-1に)接続を確立することも可能である。たとえば、カーネル回路が初期に、互いと直接通信するように設定されない場合、ストリームトラフィックマネージャ212は、カーネル回路が、別のカーネル回路に、同じダイ中にあるのか、同じICの異なるダイ中にあるのかにかかわらず、データをストリーミングすることを可能にすることが可能である。同様に、衛星ストリームトラフィックマネージャ418は、カーネル回路が、別のカーネル回路に、同じダイ中にあるのか、同じICの異なるダイ中にあるのかにかかわらず(たとえば、440-1または440-2から440-3または440-4に、440-1から440-2にまたはその逆、440-3から440-4にまたはその逆、440-3または440-4から440-1または440-2に)データをストリーミングすることを可能にすることが可能である。異なるダイおよび/または異なるICに位置するカーネル回路間で交換されるデータは、場合によっては、ストリームトラフィックマネージャ212および/または衛星ストリームトラフィックマネージャ412によって制御され、ストリームトラフィックマネージャ212および/または衛星ストリームトラフィックマネージャ412を通って流れなければならない。
別の実施形態では、データが、同じダイに位置するカーネル回路間で交換されるとき、データは、場合によっては、送出カーネル回路から相互接続に流れ、相互接続から受信カーネル回路に流れ、ストリームトラフィックマネージャ212および/または衛星ストリームトラフィックマネージャ412をバイパスするが、ストリームトラフィックマネージャ212および/または衛星ストリームトラフィックマネージャ412の制御下にあり得る。いずれの場合も、送出カーネル回路の出力バッファは、送出カーネル回路から出力されたデータストリームを、パケット化されたデータに変換し、受信カーネル回路の入力バッファは、パケット化されたデータを、受信カーネル回路による消費のためのデータストリームに変換する。
ストリームトラフィックマネージャ212は、衛星ストリームトラフィックマネージャ412と通信することも可能である。衛星ストリームトラフィックマネージャ412は、ストリームトラフィックマネージャ212と実質的に同様に実装される。トランシーバ442および444を介した、ストリームトラフィックマネージャ212と衛星ストリームトラフィックマネージャ412との間の通信は、あるIC中のカーネル回路が、異なるIC中のカーネル回路に(たとえば、234-1または234-2から440-1または440-2に、234-1または234-2から440-3または440-4に、234-3または234-4から440-1または440-2に、234-3または234-4から440-3または440-4に、440-1または440-2から234-1または234-2に、440-1または440-2から234-3または234-4に、440-3または440-4から234-1または234-2に、440-3または440-4から234-3または234-4に)データをストリーミングすることを可能にする。
それにもかかわらず、カーネル回路は、互いと直接通信するために実装され得る。その場合、カーネル回路は、プログラマブル回路内で作成および実装され、この能力が組み込まれる。そのような接続が図4に示されており、カーネル回路234-3が、カーネル234-4と直接通信して、ストリームトラフィックマネージャ212を使用することなしにカーネル234-4にデータ結果を提供することが可能である。カーネル回路が、異なるダイおよび/または異なるICに位置する場合、ストリームトラフィックマネージャ212および/または衛星ストリームトラフィックマネージャ412は必要とされる。
多くの場合、カーネル回路(たとえば、そのようなカーネル回路によって実施される動作)は一緒に直列に連結される。データは、各異なるカーネル回路が異なる動作を実施するようにカスタマイズされるステップにおいて、あるカーネル回路から別のカーネル回路に渡され得る。メモリがIC内でローカルであるのか、ICの外部にあるのかにかかわらず、メモリマッピングされたインターフェースを使用する他の実装形態では、たとえば、(1つまたは複数の)アップストリームカーネル回路の動作が検出されたとき、適時に(1つまたは複数の)ダウンストリームカーネル回路を開始するために、(1つまたは複数の)アップストリームカーネル回路の進捗がホストシステムによって追跡されなければならない。いくつかの場合には、ホストシステムはまた、ダウンストリームカーネル回路が、アップストリームカーネル回路と同じメモリへのアクセスを有しない場合、アップストリームカーネル回路からダウンストリームカーネルにデータをコピーしなければならない。このタイプのアーキテクチャは、ホストシステム102内のソフトウェアにおけるかなりのオーバーヘッドを生じ、しばしばハードウェア(カーネル回路)の過少利用を生じる。
カーネル回路からカーネル回路に渡されるデータストリーム内の帯域内命令を使用する、本開示内で説明されるストリーミングアーキテクチャは、あるカーネル回路が、データストリーム中に含まれる命令とともにデータを別のカーネル回路に直接渡すことを可能にし、それにより、ホストシステム102の関与なしの、複数のカーネル回路を通した、データの連結された処理を実装する。そのストリーミングアーキテクチャは、ホストシステムに課されるオーバーヘッドを低減し、ハードウェアリソースをより効率的に使用する。
ストリームトラフィックマネージャ回路は、ホストシステム102から、IC102またはIC402において実装されるカーネル回路のいずれかにデータを提供することが可能であることを諒解されたい。ホストシステム102からIC104中のカーネル回路に提供されたパケット化されたデータが、エンドポイント108、DMA110、およびストリームトラフィックマネージャ212を通過する。IC104中のカーネル回路から出力されたデータストリーム(たとえば、結果データストリーム)が、ストリームトラフィックマネージャ212、DMA110、およびエンドポイント108を介してホストシステム102に渡る。ホストシステム102からIC402中のカーネル回路に提供されたパケット化されたデータが、エンドポイント108、DMA110、ストリームトラフィックマネージャ212、トランシーバ442および444、ならびに衛星ストリームトラフィックマネージャ412を通過する。IC402中のカーネル回路から出力されたデータストリーム(たとえば、結果データストリーム)が、衛星ストリームトラフィックマネージャ412、トランシーバ444および442、ストリームトラフィックマネージャ212、DMA110、ならびにエンドポイント108を通過する。IC402中のカーネル回路への、パケット化されたデータを送出および/または受信する際に、ホストシステム102は、実質的に、図2に関して説明されたように動作し得、入力ドライバ130は、各カーネル回路について、IC102において実装されるのか、IC402において実装されるのかにかかわらず、読取りキューおよび書込みキューを生成する。
図1、図2、および図4に示されているアーキテクチャは、カーネル回路の各可能なペア間の直接接続をサポートする、より複雑な相互接続回路を必要とすることなしに、アップストリームカーネル回路が、任意の利用可能なダウンストリームカーネル回路にデータをストリーミングすることを可能にする。図1、図2、および図4のアーキテクチャは、アップストリームカーネル回路にストリームトラフィックマネージャ回路へのデータを出力させることによってこの能力を実装する(説明の目的で、「ストリームトラフィックマネージャ回路」は、ストリームトラフィックマネージャ、衛星ストリームトラフィックマネージャ、または協調様式で動作するその両方を指す)。ストリームトラフィックマネージャ回路はダウンストリームカーネルにデータをルーティングする。データは、クレジットを使用してストリームトラフィックマネージャ回路によって調節されるので、大きいストアアンドフォワードバッファ(store and forward buffer)が必要とされない。さらに、ホストシステム102はデータ転送に関与しない。例示的なおよび非限定的な例として、アップストリームカーネル回路、たとえば、送出カーネル回路が圧縮を実施し、ダウンストリームカーネル回路が暗号化を実施する。アップストリームカーネル回路は、得られた圧縮されたデータをストリームトラフィックマネージャ回路に送出し、ストリームトラフィックマネージャ回路は、送出カーネル回路の出力バッファによってパケット化されたデータを、ダウンストリームカーネル回路、たとえば、受信カーネル回路にルーティングする。受信カーネル回路の入力バッファは、パケット化されたデータをデータストリームに変換する。ダウンストリームカーネル回路は、得られた暗号化されたデータをストリームトラフィックマネージャ回路に提供し得、ストリームトラフィックマネージャ回路は、次いで、暗号化されたデータをまた別のカーネル回路にルーティングするか、または、暗号化されたデータをホストシステム102に提供し得る。
本開示内で説明されるストリーミングアーキテクチャは、配置ツールおよびルートツールがアップストリームカーネル回路とダウンストリームカーネル回路との相対配置を考慮する必要がないので、(データ処理システムによって実行される)EDAアプリケーションの配置機能およびルート機能が、より効率的に(完了するための時間をあまり必要とせずに)動作することをも可能にする。これは、データストリームを介してデータを交換する2つまたはそれ以上のカーネル回路が、異なるダイおよび/または異なるICに位置するとき、特に重要である。
本開示内で説明される例示的なストリーミングアーキテクチャがない場合、直接カーネル-カーネルルーティング(direct kernel-to-kernel routing)は、通信することが意図されたカーネル回路の各ペアの間で実装される必要があるであろう。このタイプの接続性は、タイミング要件を満たすためにカーネル回路の配置およびルーティングに対して著しい制限を課し、ダイ境界および/またはIC境界を横断するときにさらに困難になる。さらに、本明細書で説明されるアーキテクチャを使用することは、説明されるフレキシビリティを提供しながら、実装されるカーネル回路について、より大きいクロック速度をも達成する。カーネル回路の各可能なペア間のポイントツーポイント接続を使用するアーキテクチャは、プログラマブル回路の極めて多くのリソースを必要とすることになるので、得られた実装形態は、本明細書で説明される例示的なストリーミングアーキテクチャを使用して達成可能であるよりも遅いクロック周波数において動作することになる。
図4の例では、IC104およびIC402は両方ともマルチダイICとして実装される。1つまたは複数の他の実施形態では、IC104およびIC402のうちの一方または両方が、トランシーバを含む単一ダイICとして実装される。
図5は、データストリームを使用してカーネル回路間でデータを交換する例示的な方法500を示す。方法500は、ホストシステムがハードウェアアクセラレータ内のカーネル回路にタスクをオフロードした状態において始まることができる。1つまたは複数の実施形態では、方法500は、図3のブロック305~320を実施した後の状態においておよび/またはデータ転送に関与する各ICについて始まる。図5の例では、本明細書では送出カーネル回路と呼ばれるカーネル回路は、一連の動作の中のある動作を実施し、各動作が、異なるカーネル回路によって実施される。
ブロック505において、送出カーネル回路は、出力ポートにアタッチされた出力バッファにデータストリーミングを出力するか、または記憶する。ブロック510において、ストリームトラフィックマネージャ回路は、送出カーネル回路の出力バッファに記憶されたデータストリームを検出する。ストリームトラフィックマネージャ回路は、図2に関して説明されたように、バッファのステータスを監視することが可能である。1つまたは複数の実施形態では、データストリームは、データの宛先を指定する情報を含む。宛先は、この例では、ホストシステムではなく、むしろ、受信カーネル回路と呼ばれる別のカーネル回路である。1つまたは複数の他の実施形態では、ストリームトラフィックマネージャ回路は、たとえば、前に説明されたマッピングデータを使用して、送出カーネル回路から、受信カーネル回路および/またはホストシステムなどの別の宛先にデータをルーティングするように設定される。ブロック515において、ストリームトラフィックマネージャ回路は受信カーネル回路を決定する。ストリームトラフィックマネージャ回路は、たとえば、送出カーネル回路の出力バッファに記憶されたデータストリームを読み取り、指定された受信カーネル回路を決定することが可能である。別の例では、ストリームトラフィックマネージャは、ストリームトラフィックマネージャに記憶されたマッピングデータ(たとえば、宛先への、特定のカーネル回路出力のマッピング)に基づいて受信カーネル回路を決定する。
ブロック520において、ストリームトラフィックマネージャ回路は、受信カーネル回路の入力バッファが、送出カーネル回路からのデータストリームを記憶するために利用可能な十分なスペースを有するかどうかを決定する。ブロック525において、受信カーネル回路の入力バッファが十分なスペースを有すると決定したことに応答して、ストリームトラフィックマネージャ回路は、送出カーネル回路から受信カーネル回路へのデータ転送を始動する。ストリームトラフィックマネージャ回路は、(1つまたは複数の)相互接続を通して、および/または、IC横断(cross-IC)データ転送が実施される場合、トランシーバを通して、送出カーネル回路の出力バッファから受信カーネル回路の入力バッファにデータを転送する。1つまたは複数の実施形態では、同じダイ中のカーネル回路間でデータを転送するとき、データは、ストリームトラフィックマネージャ回路を通過することなしに、ストリームトラフィックマネージャ回路の制御下の関連する相互接続を通して送出され得る。
特定の実施形態では、送出カーネル回路からのデータストリームは、データストリーム内の帯域内に1つまたは複数の命令を含む。一例では、命令は、送出カーネル回路から受信カーネル回路へのデータストリーム(またはパケット化されたデータ)のペイロード部分中に含まれる。説明されたように、送出カーネル回路の出力バッファは、受信カーネル回路に送出するために、データストリームを、パケット化されたデータに変換する。受信カーネル回路の入力バッファは、受信されたパケット化されたデータを、受信カーネル回路に提供されるデータストリームに変換する。
図5の例では、データストリームは、ダイ404中のカーネル回路からダイ406中のカーネル回路に送出され得るか、またはダイ406中のカーネル回路からダイ404中のカーネル回路に送出され得ることを諒解されたい。同様に、データストリームは、ダイ408中のカーネル回路からダイ410中のカーネル回路に送出され得るか、またはダイ410中のカーネル回路からダイ408中のカーネル回路に送出され得る。
図5の例はストリームトラフィックマネージャ回路を参照する。この点について、方法500が実施され得、ストリームトラフィックマネージャが、説明される動作を実施する(たとえば、送出カーネル回路と受信カーネル回路の両方がIC104中にある)か、衛星ストリームトラフィックマネージャが、説明される動作を実施する(送出カーネル回路と受信カーネル回路の両方がIC402中にある)か、またはストリームトラフィックマネージャと衛星ストリームトラフィックマネージャの両方がそれらの動作を実施する(たとえば、送出カーネル回路と受信カーネル回路とが、異なるIC中にある)。後者の場合、ストリームトラフィックマネージャおよび衛星ストリームトラフィックマネージャの各々が、同じICに位置するカーネル回路と対話することを諒解されたい。
たとえば、送出カーネル回路と受信カーネル回路とが、異なるICに位置する場合、ストリームトラフィックマネージャと衛星ストリームトラフィックマネージャとは、カーネル回路の入力バッファおよび出力バッファのステータスを決定するために、トランシーバ442および444を介して通信することが可能である。たとえば、ストリームトラフィックマネージャは、IC104中のバッファのステータスを決定することが可能であり、衛星ストリームトラフィックマネージャは、IC402中のバッファのステータスを決定することが可能である。ストリームトラフィックマネージャは、IC402中の任意のバッファのステータスを衛星ストリームトラフィックマネージャに要求することが可能であり、衛星ストリームトラフィックマネージャは、(1つまたは複数の)要求されたステータスで応答する。同様に、衛星ストリームトラフィックマネージャは、IC104中の任意のバッファのステータスをストリームトラフィックマネージャに要求することが可能であり、ストリームトラフィックマネージャは、(1つまたは複数の)要求されたステータスで応答する。ストリームトラフィックマネージャと衛星ストリームトラフィックマネージャとの間の通信は、IC104の同じダイまたはIC104の異なるダイに位置するか、IC402の同じダイまたはIC402の異なるダイに位置するか、あるいは異なるICに位置する、送信カーネル回路と受信カーネル回路とをサポートする。
図6は、本明細書で説明される1つまたは複数の実施形態とともに使用するための例示的なシステム600を示す。システム600は、コンピュータ、サーバ、ラップトップまたはタブレットコンピュータなどのポータブルコンピュータ、あるいは他のデータ処理システムを実装するために使用され得るコンピュータハードウェアの一例である。たとえば、システム600は、ホストシステム102、および/または本明細書で説明されるコンテナファイルを生成するためのEDAアプリケーションを実行する別のシステムの例示的な一実装形態である。
図6の例では、システム600は、少なくとも1つのプロセッサ605を含む。プロセッサ605は、インターフェース回路615を通してメモリ610に結合される。システム600は、メモリ610内に(「プログラムコード」とも呼ばれる)コンピュータ可読命令を記憶することが可能である。メモリ610は、コンピュータ可読記憶媒体の一例である。プロセッサ605は、インターフェース回路615を介してメモリ610からアクセスされるプログラムコードを実行することが可能である。
メモリ610は、たとえば、ローカルメモリおよびバルク記憶デバイス(bulk storage device)など、1つまたは複数の物理メモリデバイスを含み得る。ローカルメモリは、概してプログラムコードの実際の実行中に使用される(1つまたは複数の)非永続的メモリデバイスを指す。ローカルメモリの例は、RAM、および/または、プログラムコードの実行中のプロセッサによる使用のために好適である様々なタイプのRAM(たとえば、ダイナミックRAMまたは「DRAM」あるいはスタティックRAMまたは「SRAM」)のいずれかを含む。バルク記憶デバイスは、永続的データ記憶デバイスを指す。バルク記憶デバイスの例は、限定はしないが、ハードディスクドライブ(HDD)、ソリッドステートドライブ(SSD)、フラッシュメモリ、読取り専用メモリ(ROM)、消去可能プログラマブル読取り専用メモリ(EPROM)、電気的消去可能プログラマブル読取り専用メモリ(EEPROM)、または他の好適なメモリを含む。システム600は、プログラムコードが実行中にバルク記憶デバイスから取り出されなければならない回数を低減するために少なくともあるプログラムコードの一時的記憶を行う1つまたは複数のキャッシュメモリ(図示せず)をも含み得る。
メモリ610は、プログラムコードおよび/またはデータを記憶することが可能である。1つまたは複数の実施形態では、システム600がホストシステム102などのシステムを実装するとき、メモリ610は、図1に関して説明されたものと同じまたは同様のフレームワークを記憶し、実行することが可能である。また、フレームワークはオペレーティングシステムを含み得る。インターフェース回路615を通してシステム600にアタッチされたハードウェアアクセラレータ625内での実装のために、1つまたは複数のコンテナもメモリ610に記憶され得る。ハードウェアアクセラレータ625は、図7に関して説明されるものと同じまたは同様のアーキテクチャを有する1つまたは複数のICを含む。
1つまたは複数の他の実施形態では、システム600は、EDAアプリケーションを実行するEDAシステムを実装する。したがって、システム600は、設定ビットストリームまたは場合によっては部分設定ビットストリームとして、指定されたカーネル回路を生成するために、カーネルを指定するプログラムコードを処理することが可能である。システム600は、コンテナファイル内に(1つまたは複数の)設定ビットストリームを含める。さらに、システム600は、マッピング情報を生成し、そのマッピング情報をメタデータとしてコンテナファイル内に含めることが可能である。システム600がEDAシステムを実装する実施形態では、ハードウェアアクセラレータ625は、含まれることも含まれないこともある。
システム600、たとえば、プロセッサ605は、本開示内で説明される動作を実施するために、本明細書で説明されるオペレーティングシステム、アプリケーション、および/またはフレームワークを実行することが可能である。したがって、メモリ610に記憶された命令および/またはデータは、システム600の一体部分と見なされ得る。さらに、システム600(たとえば、プロセッサ605)によって使用され、生成され、および/または作用されるデータは、システムの一部として採用されたときに機能性を与える機能的データ構造であることを諒解されたい。
インターフェース回路615の例は、限定はしないが、システムバスと入出力(I/O)バスとを含む。インターフェース回路615は、様々なバスアーキテクチャのいずれかを使用して実装され得る。バスアーキテクチャの例は、限定はしないが、拡張業界標準アーキテクチャ(EISA)バス、アクセラレーテッドグラフィックスポート(AGP)、ビデオエレクトロニクス規格協会(VESA)ローカルバス、ユニバーサルシリアルバス(USB)、およびPCIeバスを含み得る。
システム600は、インターフェース回路615に結合された1つまたは複数のI/Oデバイス620をさらに含み得る。I/Oデバイス620は、直接、または介在するI/Oコントローラを通してのいずれかで、システム600、たとえば、インターフェース回路615に結合され得る。I/Oデバイス620の例は、限定はしないが、キーボード、ディスプレイデバイス、ポインティングデバイス、1つまたは複数の通信ポート、およびネットワークアダプタを含む。ネットワークアダプタは、システム600が、介在するプライベートまたは公衆ネットワークを通して他のシステム、コンピュータシステム、リモートプリンタ、および/またはリモート記憶デバイスに結合されるようになることを可能にする回路を指す。モデム、ケーブルモデム、イーサネットカード、およびワイヤレストランシーバが、システム600とともに使用され得る異なるタイプのネットワークアダプタの例である。
システム600は、実装されるデバイスおよび/またはシステムの特定のタイプに応じて、図示された構成要素よりも少数の構成要素、または図6に示されていない追加の構成要素を含み得る。さらに、含まれる特定のオペレーティングシステム、(1つまたは複数の)アプリケーション、および/またはI/Oデバイスは、システムタイプに基づいて変動し得る。さらに、例示的な構成要素のうちの1つまたは複数は、別の構成要素に組み込まれるか、またはさもなければ、別の構成要素の一部分を形成し得る。たとえば、プロセッサが、少なくともあるメモリを含み得る。システム600は、図6のアーキテクチャまたはそれと同様のアーキテクチャを使用して各々実装される単一のコンピュータあるいは複数のネットワーク化されたまたは相互接続されたコンピュータを実装するために使用され得る。
プログラマブルICと呼ばれるいくつかのICは、指定された機能を実施するようにプログラムされ得る。プログラムされ得るICの一例がFPGAである。FPGAは、一般に、プログラマブルタイルのアレイを含む。これらのプログラマブルタイルは、たとえば、入出力ブロック(IOB)、設定可能論理ブロック(CLB)、専用RAMブロック(BRAM)、乗算器、デジタル信号処理ブロック(DSP)、プロセッサ、クロックマネージャ、遅延ロックループ(DLL)などを含み得る。
各プログラマブルタイルは、一般に、プログラマブル相互接続回路とプログラマブル論理回路の両方を含む。プログラマブル相互接続回路は、一般に、プログラマブル相互接続点(PIP)によって相互接続された変動する長さの多数の相互接続線を含む。プログラマブル論理回路は、たとえば、関数生成器、レジスタ、算術論理などを含み得る、プログラマブル要素を使用して、ユーザ設計の論理を実装する。
プログラマブル相互接続回路およびプログラマブル論理回路は、一般に、設定データのストリームを、プログラマブル要素がどのように設定されるかを定義する内部設定メモリセルにロードすることによってプログラムされる。設定データは、外部デバイスによって、メモリから(たとえば、外部PROMから)読み取られるかまたはFPGAに書き込まれ得る。その場合、個々のメモリセルの全体的な状態がFPGAの機能を決定する。
別のタイプのプログラマブルICは、複合プログラマブル論理デバイス、またはCPLDである。CPLDは、相互接続スイッチマトリックスによって一緒に接続されたおよび入出力(I/O)リソースに接続された2つまたはそれ以上の「機能ブロック」を含む。CPLDの各機能ブロックが、プログラマブル論理アレイ(PLA)、およびプログラマブルアレイ論理(PAL)デバイスにおいて使用されるものと同様の、2レベルAND/OR構造を含む。CPLDでは、設定データは、一般に、不揮発性メモリにオンチップで記憶される。いくつかのCPLDでは、設定データは、不揮発性メモリにオンチップで記憶され、次いで、初期設定(プログラミング)シーケンスの一部として揮発性メモリにダウンロードされる。
これらのプログラマブルICのすべてについて、デバイスの機能性は、その目的でデバイスに提供されたデータビットによって制御される。データビットは、揮発性メモリ(たとえば、FPGAおよびいくつかのCPLDの場合のような、スタティックメモリセル)、不揮発性メモリ(たとえば、いくつかのCPLDの場合のようなフラッシュメモリ)、または任意の他のタイプのメモリセルに記憶され得る。
他のプログラマブルICが、デバイス上の様々な要素をプログラム可能に相互接続する、金属層など、処理層を適用することによってプログラムされる。これらのプログラマブルICはマスクプログラマブルデバイスとして知られている。プログラマブルICはまた、他のやり方で、たとえば、ヒューズまたはアンチヒューズ技術を使用して実装され得る。「プログラマブルIC」という句は、限定はしないが、これらのデバイスを含み得、さらに、部分的にのみプログラム可能であるデバイスを包含し得る。たとえば、あるタイプのプログラマブルICは、ハードコーディングされたトランジスタ論理と、ハードコーディングされたトランジスタ論理をプログラム可能に相互接続するプログラマブルスイッチファブリックとの組合せを含む。
図7は、ICのための例示的なアーキテクチャ700を示す。一態様では、アーキテクチャ700は、プログラマブルIC内に実装され得る。たとえば、アーキテクチャ700は、FPGAを実装するために使用され得る。アーキテクチャ700はまた、ICのシステムオンチップ(SoC)タイプを表し得る。SoCは、プログラムコードを実行するプロセッサと、1つまたは複数の他の回路とを含むICである。他の回路は、ハードワイヤード回路、プログラマブル回路、および/またはそれらの組合せとして実装され得る。回路は、互いと、および/またはプロセッサと協働して動作し得る。
図示のように、アーキテクチャ700は、いくつかの異なるタイプのプログラマブル回路、たとえば、論理、ブロックを含む。たとえば、アーキテクチャ700は、マルチギガビットトランシーバ(MGT:multi-gigabit transceiver)701、設定可能論理ブロック(CLB)702、BRAM703、入出力ブロック(IOB)704、設定およびクロッキング論理(CONFIG/CLOCKS)705、デジタル信号処理ブロック(DSP)706、特殊なI/Oブロック707(たとえば、設定ポートおよびクロックポート)、ならびにデジタルクロックマネージャ、アナログデジタル変換器、システム監視論理などの他のプログラマブル論理708を含む、多数の異なるプログラマブルタイルを含み得る。
いくつかのICでは、各プログラマブルタイルは、プログラマブル相互接続要素(INT)711を含み、INT711は、各隣接するタイル中の対応するINT711との間の規格化された接続を有する。したがって、INT711は、まとめると、示されているICのためのプログラマブル相互接続構造を実装する。各INT711は、図7の上部に含まれる例によって示されているように、同じタイル内のプログラマブル論理要素との間の接続をも含む。
たとえば、CLB702は、ユーザ論理を実装するようにプログラムされ得る設定可能論理要素(CLE)712と、単一のINT711とを含み得る。BRAM703は、1つまたは複数のINT711に加えてBRAM論理要素(BRL)713を含み得る。一般に、タイル中に含まれるINT711の数は、タイルの高さに依存する。描かれているように、BRAMタイルは、5つのCLBと同じ高さを有するが、他の数(たとえば、4つ)も使用され得る。DSPタイル706は、適切な数のINT711に加えてDSP論理要素(DSPL)714を含み得る。IOB704は、たとえば、INT711の1つのインスタンスに加えてI/O論理要素(IOL)715の2つのインスタンスを含み得る。IOL715に接続された実際のI/Oパッドは、IOL715のエリアに制限されないことがある。
図7に描かれている例では、ダイの中心の近くの、たとえば、領域705、707、および708から形成された、列状エリアが、設定、クロック、および他の制御論理のために使用され得る。この列から延びる水平エリア709が、プログラマブルICの幅にわたってクロックおよび設定信号を分散させるために使用され得る。
図7に示されているアーキテクチャを利用するいくつかのICは、ICの大部分を作り上げる規則的な列状構造を損なう追加の論理ブロックを含む。追加の論理ブロックは、プログラマブルブロックおよび/または専用回路であり得る。たとえば、PROC710として示されているプロセッサブロックが、CLBおよびBRAMのいくつかの列にまたがる。
一態様では、PROC710は、ICのプログラマブル回路を実装するダイの一部として作製される専用回路として、たとえば、ハードワイヤードプロセッサとして実装され得る。PROC710は、個々のプロセッサ、たとえば、プログラムコードを実行することが可能な単一のコアから、1つまたは複数のコア、モジュール、コプロセッサ、インターフェースなどを有するプロセッサシステム全体まで、複雑さに幅がある様々な異なるプロセッサタイプおよび/またはシステムのいずれかを表し得る。
別の態様では、PROC710は、アーキテクチャ700から省略され、説明されるプログラマブルブロックの他の種類のうちの1つまたは複数と置き換えられ得る。さらに、そのようなブロックは、PROC710の場合のようにプログラムコードを実行することができるプロセッサを形成するためにプログラマブル回路の様々なブロックが使用され得るという点で、「ソフトプロセッサ」を形成するために利用され得る。
「プログラマブル回路」という句は、IC内のプログラマブル回路要素、たとえば、本明細書で説明される様々なプログラマブルまたは設定可能回路ブロックまたはタイル、ならびに、ICにロードされた設定データに従って様々な回路ブロック、タイル、および/または要素を選択的に結合する相互接続回路を指す。たとえば、CLB702など、PROC710の外部にある、図7に示されている回路ブロックは、ICのプログラマブル回路と見なされる。
概して、プログラマブル回路の機能性は、設定データがICにロードされるまで確立されない。FPGAなど、ICのプログラマブル回路をプログラムするために、設定ビットのセットが使用され得る。(1つまたは複数の)設定ビットは、一般に、「設定ビットストリーム」と呼ばれる。概して、プログラマブル回路は、設定ビットストリームをICに最初にロードしなければ、動作可能でないか、または機能可能でない。設定ビットストリームは、プログラマブル回路内に特定の回路設計を効果的に実装する。回路設計は、たとえば、プログラマブル回路ブロックの機能的態様と、様々なプログラマブル回路ブロックの間の物理的接続性とを指定する。
「ハードワイヤード」または「ハード化(harden)」される、すなわち、プログラマブルでない回路が、ICの一部として製造される。プログラマブル回路とは異なり、ハードワイヤード回路または回路ブロックは、設定ビットストリームのローディングを通してICの製造後に実装されない。ハードワイヤード回路は、概して、たとえば、設定ビットストリームを、IC、たとえば、PROC710に最初にロードすることなしに機能可能である、専用回路ブロックおよび相互接続を有すると見なされる。
いくつかの事例では、ハードワイヤード回路は、IC内の1つまたは複数のメモリ要素に記憶されたレジスタセッティングまたは値に従ってセットまたは選択され得る1つまたは複数の動作モードを有し得る。動作モードは、たとえば、ICへの設定ビットストリームのローディングを通してセットされ得る。この能力にもかかわらず、ハードワイヤード回路が、ICの一部として製造されたとき、動作可能であり、特定の機能を有するので、ハードワイヤード回路はプログラマブル回路と見なされない。
SoCの場合、設定ビットストリームは、プログラマブル回路内に実装されるべきである回路と、PROC710またはソフトプロセッサによって実行されるべきであるプログラムコードとを指定し得る。いくつかの場合には、アーキテクチャ700は、適切な設定メモリおよび/またはプロセッサメモリに設定ビットストリームをロードする専用設定プロセッサを含む。専用設定プロセッサは、ユーザ指定のプログラムコードを実行しない。他の場合には、アーキテクチャ700は、設定ビットストリームを受信し、設定ビットストリームを適切な設定メモリにロードし、および/または実行のためのプログラムコードを抽出するために、PROC710を利用し得る。
図7は、プログラマブル回路、たとえば、プログラマブルファブリックを含むICを実装するために使用され得る例示的なアーキテクチャを示すことを意図される。たとえば、1つの列中の論理ブロックの数、列の相対幅、列の数および順序、列中に含まれる論理ブロックのタイプ、論理ブロックの相対サイズ、および図7の上部に含まれる相互接続/論理実装形態は、例示にすぎない。実際のICでは、たとえば、CLBの2つ以上の隣接する列は、一般に、ユーザ回路設計の効率的な実装を容易にするために、CLBが現れるところならどこでも含まれる。しかしながら、隣接するCLB列の数は、ICの全体的サイズとともに変動し得る。さらに、IC内のPROC710などのブロックのサイズおよび/または位置決めは、例示のためのものにすぎず、限定として意図されていない。
説明されたように、アーキテクチャ700またはアーキテクチャ700と同様のアーキテクチャを使用して実装されるICは、本明細書で説明されるストリーミングアーキテクチャを実装するために使用され得る。1つまたは複数の実施形態では、エンドポイント108、DMA110、ストリームトラフィックマネージャ212、衛星ストリームトラフィックマネージャ412、相互接続214および216、バッファ218~232、ならびにカーネル回路234は、プログラマブル回路を使用して実装され得る。1つまたは複数の他の実施形態では、エンドポイント108、DMA110、および/または相互接続などの回路ブロックのうちの選択された回路ブロックが、ハード化されたまたはハードワイヤード回路ブロックとして実装され得る。1つまたは複数の実施形態では、入力バッファおよび/または出力バッファはAXI4-StreamデータFIFOとして実装され得る。
特定の実施形態では、IC104に位置するものとして説明される任意のバッファまたはキューが、より遅いオフチップRAMを使用することとは対照的に、利用可能なメモリリソース(たとえば、BRAM)、またはIC104内で利用可能な他の同様の回路ブロックを使用して実装され得る。たとえば、バッファ218~232、トラフィックストリームマネージャ212中のキュー、および/またはDMA110中のキューが、IC上で利用可能なメモリリソースを使用して実装され得る。
本明細書で説明されるアーキテクチャは、限定ではなく、例示の目的で提供される。たとえば、ICは、図に示されているカーネル回路よりも少ないまたは多いカーネル回路を含み得る。さらに、ICのプログラマブル回路を使用して実装されるカーネル回路の数に基づいて、ドライバ中のキューの数およびIC内に実装されるバッファ中のキューの数が変動することになる。
説明のために、特定の名称が、本明細書で開示される様々な発明概念の完全な理解を提供するために記載される。しかしながら、本明細書で使用される専門用語は、本発明の構成の特定の態様を説明するためのものにすぎず、限定するものではない。
本明細書で定義される単数形「a」、「an」および「the」は、文脈が別段に明確に示さない限り、複数形をも含むものとする。
本明細書で定義される「約」という用語は、正確ではないが、ほぼ正しいまたは厳密である、値または量が近い、を意味する。たとえば、「約」という用語は、具陳された特性、パラメータ、または値が、厳密な特性、パラメータ、または値の所定の量内にあることを意味し得る。
本明細書で定義される「少なくとも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を一緒に、を意味する。
本明細書で定義される「自動的に」という用語は、ユーザ介入なしに、を意味する。本明細書で定義される「ユーザ」という用語は、人間を意味する。
本明細書で定義される「コンピュータ可読記憶媒体」という用語は、命令実行システム、装置、またはデバイスが使用するための、あるいはそれとともに使用するためのプログラムコードを含んでいるかまたは記憶する記憶媒体を意味する。本明細書で定義される「コンピュータ可読記憶媒体」は、それ自体は、一時的な伝搬信号でない。コンピュータ可読記憶媒体は、限定はしないが、電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、または上記の任意の好適な組合せであり得る。本明細書で説明される、様々な形態のメモリが、コンピュータ可読記憶媒体の例である。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、ポータブルコンピュータディスケット、ハードディスク、RAM、読取り専用メモリ(ROM)、消去可能プログラマブル読取り専用メモリ(EPROMまたはフラッシュメモリ)、電子的消去可能プログラマブル読取り専用メモリ(EEPROM)、スタティックランダムアクセスメモリ(SRAM)、ポータブルコンパクトディスク読取り専用メモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリスティック、フロッピーディスクなどを含み得る。
本明細書で定義される「する場合(if)」という用語は、文脈に応じて、「するとき(when)」または「すると(upon)」または「に応答して(in response to)」または「に反応して(responsive to)」を意味する。したがって、「それが決定された場合」または「[述べられた条件またはイベント]が検出された場合」という句は、文脈に応じて、「決定すると」または「決定したことに応答して」あるいは「[述べられた条件またはイベント]を検出すると」または「[述べられた条件またはイベント]を検出したことに応答して」または「[述べられた条件またはイベント]を検出したことに反応して」を意味すると解釈され得る。
本明細書で定義される「に反応して」という用語および上記で説明されたような同様の言い回し、たとえば、「する場合」、「するとき」、または「すると」は、アクションまたはイベントに容易に応答または反応することを意味する。応答または反応は、自動的に実施される。したがって、第2のアクションが第1のアクション「に反応して」実施される場合、第1のアクションの発生と第2のアクションの発生との間に因果関係がある。「に反応して」という用語は、因果関係を示す。
本明細書で定義される「一実施形態(one embodiment)」、「一実施形態(an embodiment)」、「1つまたは複数の実施形態」、「特定の実施形態」という用語、または同様の言い回しは、実施形態に関して説明される特定の特徴、構造、または特性が、本開示内で説明される少なくとも1つの実施形態に含まれることを意味する。したがって、本開示全体にわたる、「一実施形態では(in one embodiment)」、「一実施形態では(in an embodiment)」、「1つまたは複数の実施形態では」、「特定の実施形態では」という句、および同様の言い回しの出現は、必ずしもそうとは限らないが、すべて、同じ実施形態を指し得る。「実施形態」および「構成」という用語は、本開示内では互換的に使用される。
本明細書で定義される「プロセッサ」という用語は、プログラムコード中に含まれている命令を行うことが可能な少なくとも1つのハードウェア回路を意味する。ハードウェア回路は集積回路であり得る。プロセッサの例は、限定はしないが、中央処理ユニット(CPU)、アレイプロセッサ、ベクトルプロセッサ、デジタル信号プロセッサ(DSP)、およびコントローラを含む。
本明細書で定義される「出力」という用語は、物理メモリ要素、たとえば、デバイスに記憶すること、ディスプレイまたは他の周辺出力デバイスに書き込むこと、別のシステムに送出することまたは送信すること、エクスポートすることなどを意味する。
本明細書で定義される「実質的に」という用語は、具陳された特性、パラメータ、または値が正確に達成される必要がないこと、ただし、たとえば、当業者に知られている許容差、測定誤差、測定精度限界、および他のファクタを含む、偏差または変動が、特性が提供することを意図された効果を妨げない量で生じ得ることを意味する。
第1の、第2のなどの用語は、様々な要素を説明するために本明細書で使用され得る。これらの用語は、別段に述べられていない限り、または文脈が別段に明確に示さない限り、ある要素を別の要素と区別するために使用されるにすぎないので、これらの要素はこれらの用語によって限定されるべきでない。
コンピュータプログラム製品は、プロセッサに本明細書で説明される本発明の構成の態様を行わせるためのコンピュータ可読プログラム命令をその上に有する(1つまたは複数の)コンピュータ可読記憶媒体を含み得る。本開示内では、「プログラムコード」という用語は、「コンピュータ可読プログラム命令」という用語と互換的に使用される。本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、あるいはネットワーク、たとえば、インターネット、LAN、WANおよび/またはワイヤレスネットワークを介して外部コンピュータまたは外部記憶デバイスにダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバー、ワイヤレス送信、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ、および/またはエッジサーバを含むエッジデバイスを含み得る。各コンピューティング/処理デバイス中のネットワークアダプタカードまたはネットワークインターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、そのコンピュータ可読プログラム命令を、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体に記憶するためにフォワーディングする。
本明細書で説明される本発明の構成のための動作を行うためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、あるいは、オブジェクト指向プログラミング言語および/または手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組合せで書き込まれたソースコードまたはオブジェクトコードのいずれかであり得る。コンピュータ可読プログラム命令は、状態セッティングデータを含み得る。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロンソフトウェアパッケージとして、部分的にユーザのコンピュータ上でおよび部分的にリモートコンピュータ上で、あるいは完全にリモートコンピュータまたはサーバ上で実行し得る。後者のシナリオでは、リモートコンピュータは、LANまたはWANを含む任意のタイプのネットワークを通してユーザのコンピュータに接続され得るか、あるいは接続は、(たとえば、インターネットサービスプロバイダを使用してインターネットを通して)外部コンピュータに対して行われ得る。いくつかの場合には、たとえば、プログラマブル論理回路、FPGA、またはPLAを含む電子回路が、本明細書で説明される本発明の構成の態様を実施するために、電子回路を個人化するためにコンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行し得る。
本発明の構成のいくつかの態様が、方法、装置(システム)、およびコンピュータプログラム製品のフローチャート例示図および/またはブロック図を参照しながら本明細書で説明された。フローチャート例示図および/またはブロック図の各ブロック、ならびにフローチャート例示図および/またはブロック図中のブロックの組合せが、コンピュータ可読プログラム命令、たとえば、プログラムコードによって実装され得ることを理解されよう。
これらのコンピュータ可読プログラム命令は、汎用コンピュータ、専用コンピュータ、または機械を製造するための他のプログラマブルデータ処理装置のプロセッサに提供され得、その結果、コンピュータまたは他のプログラマブルデータ処理装置のプロセッサを介して実行する命令は、フローチャートおよび/またはブロック図の1つまたは複数のブロックにおいて指定された機能/行為を実装するための手段を作成する。これらのコンピュータ可読プログラム命令はまた、コンピュータ、プログラマブルデータ処理装置、および/または他のデバイスに特定の様式で機能するように指示することができるコンピュータ可読記憶媒体に記憶され得、その結果、命令が記憶されたコンピュータ可読記憶媒体は、フローチャートおよび/またはブロック図の1つまたは複数のブロックにおいて指定された動作の態様を実装する命令を含む製造品を備える。
コンピュータ可読プログラム命令はまた、コンピュータ実装プロセスを作り出すために、一連の動作をコンピュータ、他のプログラマブルデータ処理装置または他のデバイス上で実施させるように、コンピュータ、他のプログラマブル装置、または他のデバイスにロードされ得、その結果、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する命令は、フローチャートおよび/またはブロック図の1つまたは複数のブロックにおいて指定された機能/行為を実装する。
図中のフローチャートおよびブロック図は、本発明の構成の様々な態様によるシステム、方法、およびコンピュータプログラム製品の可能な実装形態のアーキテクチャ、機能性、および動作を示す。この点について、フローチャートまたはブロック図中の各ブロックは、指定された動作を実装するための1つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表し得る。
いくつかの代替実装形態では、ブロック中で言及される動作は、図中で言及される順序から外れて行われ得る。たとえば、関与する機能性に応じて、連続して示されている2つのブロックが、実質的にコンカレントに実行され得るか、またはブロックが、時々、逆の順序で実行され得る。他の例では、ブロックは、概して小さい数字から順に実施され得、さらに他の例では、1つまたは複数のブロックは、変動順で実施され得、結果は、記憶され、後続の、または直後にこない他のブロックにおいて利用される。また、ブロック図および/またはフローチャート例示図の各ブロック、ならびにブロック図および/またはフローチャート例示図中のブロックの組合せが、指定された機能または行為を実施するかあるいは専用ハードウェアとコンピュータ命令との組合せを行う専用ハードウェアベースシステムによって実装され得ることに留意されたい。
以下の特許請求の範囲において見られ得るすべての手段またはステップおよび機能要素の対応する構造、材料、行為、および等価物は、特に主張されるように、他の請求される要素と組み合わせて機能を実施するための任意の構造、材料、または行為を含むことを意図される。
本明細書で提供される本発明の構成の説明は、例示のためであり、網羅的なものでも、開示される形式および例に限定されるものでもない。本明細書で使用される専門用語は、本発明の構成の原理、実際的適用例、または市場で見られる技術に対する技術的改善を説明するために、および/あるいは、他の当業者が本明細書で開示される本発明の構成を理解することを可能にするために選定された。説明される本発明の構成の範囲および趣旨から逸脱することなく、修正および変形が当業者に明らかになり得る。したがって、そのような特徴および実装形態の範囲を示すものとして、上記の開示に対してではなく、以下の特許請求の範囲に対して参照が行われるべきである。