(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-28
(45)【発行日】2024-12-06
(54)【発明の名称】異種マルチコアアーキテクチャのコンパイルフロー
(51)【国際特許分類】
G06F 30/34 20200101AFI20241129BHJP
G06F 15/78 20060101ALI20241129BHJP
G06F 15/80 20060101ALI20241129BHJP
G06F 15/173 20060101ALI20241129BHJP
G06F 30/347 20200101ALI20241129BHJP
G06F 115/02 20200101ALN20241129BHJP
【FI】
G06F30/34
G06F15/78 530
G06F15/78 560
G06F15/80
G06F15/173 681
G06F15/173 665D
G06F30/347
G06F115:02
(21)【出願番号】P 2021569551
(86)(22)【出願日】2020-05-07
(86)【国際出願番号】 US2020031951
(87)【国際公開番号】W WO2020236436
(87)【国際公開日】2020-11-26
【審査請求日】2023-04-14
(32)【優先日】2019-05-23
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591025439
【氏名又は名称】ザイリンクス インコーポレイテッド
【氏名又は名称原語表記】XILINX INCORPORATED
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】シバラマン,ムクンド
(72)【発明者】
【氏名】グプタ,シャイル・アディティア
(72)【発明者】
【氏名】サストリー,アケッラ
(72)【発明者】
【氏名】スレンダラン,リシ
(72)【発明者】
【氏名】ジェイムズ-ロックスビー,フィリップ・ビィ
(72)【発明者】
【氏名】ベイリス,サミュエル・アール
(72)【発明者】
【氏名】カタイル,ビノッド・ケイ
(72)【発明者】
【氏名】アグラワル,アジト・ケイ
(72)【発明者】
【氏名】ウィッティヒ,ラルフ・デー
【審査官】松浦 功
(56)【参考文献】
【文献】国際公開第2019/065302(WO,A1)
【文献】特表2005-516432(JP,A)
【文献】特表2016-536692(JP,A)
【文献】特表2002-508102(JP,A)
【文献】米国特許出願公開第2007/0157166(US,A1)
【文献】米国特許出願公開第2017/0262567(US,A1)
【文献】米国特許第07394288(US,B1)
【文献】国際公開第2013/063486(WO,A1)
【文献】BRILLU, Romain et al.,FlexTiles: a globally homogeneous but locally heterogeneous manycore architecture,RAPIDO '14: Proceedings of the 6th Workshop on Rapid Simulation and Performance Evaluation: Methods and Tools [online],ACM,2014年01月22日,[検索日 2024.05.14],インターネット,URL:https://dl.acm.org/doi/abs/10.1145/2555486.2555489
(58)【調査した分野】(Int.Cl.,DB名)
G06F 30/30 -30/398
G06F 15/78
G06F 15/80
G06F 15/173
Google Scholar
(57)【特許請求の範囲】
【請求項1】
コンピュータが、データ処理エンジン(DPE)アレイを有するシステムオンチップ(SOC)のアプリケーションを実装する
ために実行する方法であって、
前記コンピュータが、
前記アプリケーションのグラフ表現を決定するステップであって、前記グラフ表現は、前記アプリケーションのカーネルを表すノード、および、前記カーネル間の通信を表すエッジを含む、グラフ表現を決定するステップと、
前記グラフ
表現に基づいて、前記カーネルを前記DPEアレイのDPEにマッピングし、前記カーネルのデータ構造を前記DPEアレイ内のメモリにマッピングするステップと、
DPEと前記SOCのプログラマブルロジック内に構成された前記アプリケーションの回路との間の通信チャネルをルーティングするステップと、
前記マッピングおよび前記ルーティングの結果に基づいて前記アプリケーションを実装するために前記SOCをプログラミングするための実装データを生成するステップと
、
前記マッピングするステップの前に、グラフ表現を決定してカーネルをグループにクラスタ化するステップと、
を実行することを含
み、
前記マッピングするステップは、カーネルの少なくとも1つのクラスタを前記DPEアレイ内の1つのDPEにマッピングするステップを含む、方法。
【請求項2】
前記マッピングするステップの前に、前記カーネルのうちの1つまたは複数のコードを最適化するステップと、
前記DPEアレイにおけるDPE-DPE間通信のためにロックを配分するステップと
を含む、請求項1に記載の方法。
【請求項3】
前記マッピングするステップは、
前記データ構造を、前記DPE内のメモリバンクおよびDPE間のダイレクトメモリアクセス(DMA)ストリームのうちの少なくとも1つにマッピングするステップを含む、請求項1に記載の方法。
【請求項4】
プロセッサによって実行されると、データ処理エンジン(DPE)アレイを有するシステムオンチップ(SOC)のアプリケーションを実装する方法を前記プロセッサに実行させる命令を格納している非一時的コンピュータ可読媒体であって、前記方法は、
前記アプリケーションのグラフ表現を決定するステップであって、前記グラフ表現は、前記アプリケーションのカーネルを表すノード、および、前記カーネル間の通信を表すエッジを含む、ステップと、
前記グラフ
表現に基づいて、前記カーネルを前記DPEアレイのDPEにマッピングし、前記カーネルのデータ構造を前記DPEアレイ内のメモリにマッピングするステップと、
DPEと前記SOCのプログラマブルロジック内に構成された前記アプリケーションの回路との間の通信チャネルをルーティングするステップと、
前記マッピングおよび前記ルーティングの結果に基づいて前記アプリケーションを実装するために前記SOCをプログラミングするための実装データを生成するステップと
を含
み、
前記マッピングするステップの前に、グラフ表現を決定してカーネルをグループにクラスタ化するステップをさらに含み、
前記マッピングするステップは、カーネルの少なくとも1つのクラスタを前記DPEアレイ内の1つのDPEにマッピングするステップを含む、非一時的コンピュータ可読媒体。
【請求項5】
前記マッピングするステップの前に、前記カーネルのうちの1つまたは複数のコードを最適化するステップをさらに含む、請求
項4に記載の非一時的コンピュータ可読媒体。
【請求項6】
前記マッピングするステップは、
前記データ構造を、前記DPE内のメモリバンクおよびDPE間のダイレクトメモリアクセス(DMA)ストリームのうちの少なくとも1つにマッピングするステップを含む、請求
項4に記載の非一時的コンピュータ可読媒体。
【請求項7】
前記DPEアレイにおけるDPE-DPE間通信のためにロックを配分するステップをさらに含む、請求
項4に記載の非一時的コンピュータ可読媒体。
【請求項8】
前記実装データを生成する前記ステップは、
前記カーネルのうちの1つまたは複数を実装するための各DPEのためのコードを生成するステップを含む、請求
項4に記載の非一時的コンピュータ可読媒体。
【請求項9】
前記実装データを生成する前記ステップは、
前記DPEアレイ内のダイレクトメモリアクセス(DMA)およびスイッチ回路を構成するための制御コードを生成するステップを含む、請求
項4に記載の非一時的コンピュータ可読媒体。
【請求項10】
コンピュータシステムであって、
プログラムコードを格納するように構成されたメモリと、
データ処理エンジン(DPE)アレイを有するシステムオンチップ(SOC)のアプリケーションを実装するために、前記プログラムコードを実行するように構成されたプロセッサとを備え、前記プロセッサは、
前記アプリケーションのグラフ表現を決定するステップであって、前記グラフ表現は、前記アプリケーションのカーネルを表すノード、および、前記カーネル間の通信を表すエッジを含む、ステップと、
前記グラフ
表現に基づいて、前記カーネルを前記DPEアレイのDPEにマッピングし、前記カーネルのデータ構造を前記DPEアレイ内のメモリにマッピングするステップと、
DPEと前記SOCのプログラマブルロジック内に構成された前記アプリケーションの回路との間の通信チャネルをルーティングするステップと、
前記マッピングおよび前記ルーティングの結果に基づいて前記アプリケーションを実装するために前記SOCをプログラミングするための実装データを生成するステップと、
を実行
し、
前記マッピングするステップの前に、グラフ表現を決定してカーネルをグループにクラスタ化するステップをさらに含み、
前記マッピングするステップは、カーネルの少なくとも1つのクラスタを前記DPEアレイ内の1つのDPEにマッピングするステップを含む、コンピュータシステム。
【請求項11】
前記マッピングするステップは
、前記データ構造を前記DPE内のメモリバンクおよびDPE間のダイレクトメモリアクセス(DMA)ストリームのうちの少なくとも1つにマッピングするステッ
プを含む、請求
項10に記載のコンピュータシステム。
【請求項12】
前記マッピングするステップの前に、前記カーネルのうちの1つまたは複数のコードを最適化するステップをさらに含む、請求
項10に記載のコンピュータシステム。
【請求項13】
前記データを生成する前記ステップは、
各DPEが前記カーネルのうちの1つまたは複数を内部に実装するためのコードを生成するステップと、
前記DPEアレイ内のダイレクトメモリアクセス(DMA)およびスイッチ回路を構成するための制御コードを生成するステップと
を含む、請求
項10に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【0001】
技術分野
本開示の例は、一般に、電子回路設計に関し、特に、異種マルチコアアーキテクチャのコンパイルフローに関する。
【背景技術】
【0002】
背景
プロセッサ、システムオンチップ(SoC)、および特定用途向け集積回路(ASIC)は、デジタル信号の処理、暗号化の実行、ソフトウェアアプリケーションの実行、グラフィックスのレンダリングなどの計算作業を実行するための複数のコアを含むことができる。多くのマルチコアアーキテクチャがあるが、これらのアーキテクチャのコンパイラはいずれも、異種アーキテクチャ、特に再構成可能/プログラマブルロジックに結合されたマルチコアプロセッサ(フィールドプログラマブルゲートアレイ(FPGA)ファブリックなど)に直接対応していない。さらに、既存のコンパイラは、計算カーネルのプロセッサコアへのマッピング、データ構造のメモリバンクへのマッピング、ならびに、プロセッサコア間、および、プロセッサコアとプログラマブルロジックとの間のストリームデータおよびダイレクトメモリアクセス(DMA)データのルーティングを解決しない。
【発明の概要】
【課題を解決するための手段】
【0003】
概要
異種マルチコアアーキテクチャのコンパイルフローに関連する技法について説明する。一例では、データ処理エンジン(DPE)アレイを有するシステムオンチップ(SOC)のアプリケーションを実装する方法は、アプリケーションのグラフ表現を決定することであって、グラフ表現は、アプリケーションのカーネルを表すノード、および、カーネル間の通信を表すエッジを含む、グラフ表現を決定することと、グラフに基づいて、カーネルをDPEアレイのDPEにマッピングし、カーネルのデータ構造をDPEアレイ内のメモリにマッピングすることと、DPEとSOCのプログラマブルロジック内に構成されたアプリケーションの回路との間の通信チャネルをルーティングすることと、マッピングおよびルーティングの結果に基づいてアプリケーションを実装するためにSOCをプログラミングするための実装データを生成することとを含む。
【0004】
別の例では、プロセッサによって実行されると、データ処理エンジン(DPE)アレイを有するシステムオンチップ(SOC)のアプリケーションを実装する方法をプロセッサに実行させる命令を格納されている非一時的コンピュータ可読媒体であって、方法は、アプリケーションのグラフ表現を決定することであって、グラフ表現は、アプリケーションのカーネルを表すノード、および、カーネル間の通信を表すエッジを含む、グラフ表現を決定することと、グラフに基づいて、カーネルをDPEアレイのDPEにマッピングし、カーネルのデータ構造をDPEアレイ内のメモリにマッピングすることと、DPEとSOCのプログラマブルロジック内に構成されたアプリケーションの回路との間の通信チャネルをルーティングすることと、マッピングおよびルーティングの結果に基づいてアプリケーションを実装するためにSOCをプログラミングするための実装データを生成することとを含む。
【0005】
別の例では、コンピュータシステムは、プログラムコードを格納するように構成されたメモリと、プログラムコードを実行するように構成されたプロセッサであって、プログラムコードは、アプリケーションのグラフ表現を決定することであって、グラフ表現は、アプリケーションのカーネルを表すノード、および、カーネル間の通信を表すエッジを含む、グラフ表現を決定することと、グラフに基づいて、カーネルをDPEアレイのDPEにマッピングし、カーネルのデータ構造をDPEアレイ内のメモリにマッピングすることと、DPEとSOCのプログラマブルロジック内に構成されたアプリケーションの回路との間の通信チャネルをルーティングすることと、マッピングおよびルーティングの結果に基づいてアプリケーションを実装するためにSOCをプログラミングするための実装データを生成することとによって、データ処理エンジン(DPE)アレイを有するシステムオンチップ(SOC)のアプリケーションを実装するためのものである、プロセッサとを備える。
【0006】
これらおよび他の態様は、以下の詳細な説明を参照して理解することができる。
図面の簡単な説明
上に列挙された特徴を詳細に理解することができるように、上で簡単に要約されたより詳細な説明は、例示的な実施態様を参照することによって得ることができ、そのいくつかは添付の図面に示されている。ただし、添付の図面は典型的な実施態様例のみを示しており、そのため、その範囲を限定するものとは考えられないことに留意されたい。
【図面の簡単な説明】
【0007】
【
図1】一例によるシステムオンチップ(SoC)のブロック図である。
【
図2】一例によるタイル回路を示すブロック図である。
【
図3】一例による
図2のタイル回路をより詳細に示すブロック図である。
【
図4】一例による相互接続回路を示すブロック図である。
【
図5】一例による回路設計システムの一例を示すブロック図である。
【
図6】一例によるターゲットプラットフォームのアプリケーションの実装を示すブロック図である。
【
図7】一例によるアプリケーションを示すブロック図である。
【
図8】一例によるデータ処理エンジン(DPE)アレイコンパイラを示すブロック図である。
【
図9A】一例による、DPEアレイを標的とするアプリケーションの一部分の例示的な有向グラフ表現を示すブロック図である。
【
図9B】一例による、DPEアレイを標的とするアプリケーションの一部分の例示的な有向グラフ表現を示すブロック図である。
【
図9C】一例による、DPEアレイを標的とするアプリケーションの一部分の例示的な有向グラフ表現を示すブロック図である。
【
図9D】一例による、DPEアレイを標的とするアプリケーションの一部分の例示的な有向グラフ表現を示すブロック図である。
【
図10】一例による、DPEアレイ内の有向グラフの配置およびルーティングを示すブロック図である。
【
図11】一例による、SOCのデータ処理エンジンアレイのコードおよび構成データを生成する方法を示す流れ図である。
【
図12】一例による、データ処理エンジン間でアプリケーション内のカーネルをパーティショニングする方法を示す流れ図である。
【
図13】一例による、カーネルをパーティションに割り当てる方法を示す流れ図である。
【
図14】一例による、カーネルおよびカーネルクラスタをDPEにマッピングする方法を示す流れ図である。
【
図15】異種マルチコアアーキテクチャのアプリケーションを実装する際のFIFO挿入の方法を示す流れ図である。
【
図16】一例による処理システムを示すブロック図である。
【
図17A】一例による
図16の処理システムの実施態様を示すブロック図である。
【
図17B】別の例による
図16の処理システムの実施態様を示すブロック図である。
【
図18】一例による、FIFOを配置する方法を示す流れ図である。
【
図19】一例による、DPEアレイにマッピングされたアプリケーションをルーティングする方法を示す流れ図である。
【
図20】
図1に示されるSoCの一実施態様として使用することができる、一例によるプログラム可能なICを示すブロック図である。
【
図21】一例による、
図20のプログラマブルICのフィールドプログラマブルゲートアレイ(FPGA)実施態様を示す図である。
【発明を実施するための形態】
【0008】
理解を容易にするために、可能な場合は、図に共通する同一の要素を示すために同一の参照符号が使用されている。一例の要素は、他の例に有益に組み込まれ得ることが企図される。
【0009】
詳細な説明
以下、図を参照して様々な特徴を説明する。図は原寸に比例して描かれている場合と描かれていない場合があり、同様の構造または機能の要素は、図全体を通して同様の参照符号によって表されていることに留意すべきである。これらの図は、機能の説明を容易にすることのみを目的としていることに留意すべきである。これらの図は、クレームされた発明の網羅的な説明として、または特許請求されている発明の範囲の限定として意図されたものではない。さらに、図示された例は、示されたすべての態様または利点を有する必要はない。特定の例に関連して説明される態様または利点は、必ずしもその例に限定されるものではなく、そのように図示されていないか、またはそのように明示的に説明されていない場合でも、他の任意の例において実施することができる。
【0010】
本明細書において記載されている技法は、システムオンチップ(SOC)のマルチコアアーキテクチャのアプリケーションのグラフベースのプログラム記述を取得し、アプリケーションをマルチコアアーキテクチャにコンパイルして、各コアの実行バイナリおよびプログラム可能な構成要素の構成コードを生成するプロセスを提供する。コンパイルステップは、入力グラフ記述を内部表現に変換することと、コード分析および最適化を実行することと、グループ化すべき計算カーネルを識別すること(クラスタリングなど)と、これらのグループを特定のデータ処理エンジン(コアなど)にマッピングし、カーネルによって使用されるデータ構造をローカルメモリにマッピングすることとを含む。コンパイルステップは、ストリームスイッチを介してデータ処理エンジン間で、ならびに、プログラマブルロジックへと、および、プログラマブルロジックから、ストリームおよびダイレクトメモリアクセス(DMA)データをルーティングすることをさらに含む。コンパイルステップは、各データ処理エンジンの実行を調整するラッパーコードを生成することと、DMAおよびストリームスイッチの構成コードを生成することと、アプリケーションを制御するために処理システムによって実行するためのプログラムを生成することとをさらに含む。これらおよびさらなる態様は、図面に関して下記に説明される。
【0011】
図1は、一例によるデータ処理エンジン(DPE)アレイ105を含むデバイス100のブロック図である。例では、デバイス100は、システムオンチップ(SoC)タイプのデバイスである。一般に、SoCとは、互いに相互作用することが可能な2つ以上のサブシステムを含むICを指す。一例として、SoCは、プログラムコードを実行するプロセッサと、1つまたは複数の他の回路とを含み得る。他の回路は、ハードワイヤード回路、プログラム可能な回路、他のサブシステム、および/またはそれらの任意の組み合わせとして実装され得る。回路は、互いに、および/またはプロセッサと協調して動作することができる。DPEアレイ105は、デバイス100内の格子、クラスタ、または格子縞パターンに配置構成され得る複数のデータ処理エンジン(DPE)110を含む。
図1は、行および列を有する2DアレイにDPE110を配置構成することを示しているが、例は、この配置構成に限定されない。さらに、アレイ105は、任意のサイズであり得、DPE110によって形成された任意の数の行および列を有することができる。
【0012】
一実施形態では、DPE110は同一である。すなわち、各DPE110(タイルまたはブロックとも呼ばれる)は、同じハードウェア構成要素または回路を有し得る。さらに、本明細書の例は、DPE110に限定されない。代わりに、デバイス100は、任意の種類の処理要素またはデータ処理エンジンのアレイを含むことができる。さらに、DPE110は、1つまたは複数の特殊なタスクを実行するための暗号化エンジンまたは他の特殊なハードウェアであり得る。したがって、DPE110は、一般に、データ処理エンジンと呼ぶことができる。
【0013】
図1では、アレイ105は、すべて同じタイプであるDPE110を含む(例えば、同種アレイ)。しかしながら、別の実施形態では、アレイ105は、異なるタイプのエンジンを含み得る。例えば、アレイ105は、DPE110、暗号化エンジン、前進型誤り訂正(FEC)エンジンなどを含み得る。アレイ105が同種であるかまたは異種であるかに関係なく、DPE110は、下記により詳細に説明するように、DPE110がメモリモジュールを共有することを可能にする、隣接DPE110内のメモリモジュールへの接続を含むことができる。
【0014】
一実施形態では、DPE110は、非プログラマブルロジックから形成されている、すなわち、ハード化されている。そうすることの1つの利点は、DPE110内にハードウェア要素を形成するためにプログラマブルロジックを使用することと比較して、DPE110がデバイス100内で占めるスペースをより少なくすることができることである。すなわち、ハード化または非プログラマブルロジックを使用して、プログラムメモリ、命令フェッチ/復号ユニット、固定小数点ベクトルユニット、浮動小数点ベクトルユニット、算術論理演算ユニット(ALU)、乗加算器(MAC)などのDPE110内のハードウェア要素を形成することによって、デバイス100内のアレイ105のフットプリントを大幅に削減することができる。DPE110はハード化され得るが、これは、DPE110がプログラム可能でないことを意味するものではない。すなわち、DPE110は、デバイス100の電源がオンにされたとき、または再起動されたときに、異なる機能またはタスクを実行するように構成することができる。
【0015】
DPEアレイ105はまた、DPE110とデバイス100内の他のハードウェア構成要素との間の通信インターフェースとして機能するSOCインターフェースブロック115を含む。この例では、デバイス100は、SoCインターフェースブロック115に通信可能に結合されたネットワークオンチップ(NoC)120を含む。図示されていないが、NoC120は、デバイス100内の様々な構成要素が互いに通信することを可能にするために、デバイス100全体を通じて延在することができる。例えば、物理的な実装では、DPEアレイ105は、デバイス100を形成する集積回路の右上部分に配置され得る。しかしながら、それにもかかわらず、NoC120を使用して、アレイ105は、デバイス100全体を通じた異なるロケーションに配置され得る、例えば、プログラマブルロジック(PL)120、プロセッササブシステム(PS)130、または入力/出力(I/O)135などの様々なサブシステムと通信することができる。
【0016】
DPE110とNoC120との間のインターフェースを提供することに加えて、SoCインターフェースブロック115はまた、PL122内の通信ファブリックへの直接接続を提供することができる。一実施形態では、SoCインターフェースブロック115は、DPE110をNoC120およびデバイス100内のアレイ105の近くに配置されたPL122に通信可能に結合するための別個のハードウェア構成要素を含む。
【0017】
図1は、PL122の1つのブロックを示しているが、デバイス100は、デバイス100内の異なるロケーションに配置することができるPL122の複数のブロック(構成論理ブロックとも呼ばれる)を含み得る。例えば、デバイス100は、フィールドプログラマブルゲートアレイ(FPGA)を形成するハードウェア要素を含み得る。しかしながら、他の実施形態では、デバイス100は、PL122を一切含まなくてもよく、例えば、デバイス100は、ASICである。
【0018】
図2は、一例によるDPE110を示すブロック図である。DPE110は、上で説明され、
図1に示されているように、DPEアレイ内のDPEを実装するために使用することができる。DPE110は、コア202、メモリ204、DPE相互接続209、およびサポート回路214を含む。DPE相互接続209は、ストリーミング相互接続210およびメモリマップ(MM)相互接続212を含む。一例では、サポート回路214は、デバッグ/トレース/プロファイル回路216、ハードウェア(HW)同期回路(「HWロック218」)、およびダイレクトメモリアクセス(DMA)回路(「DMA220」)を含む。メモリ204は、プログラムメモリ(「PM206」)およびデータメモリ(「DM208」)を含む。
【0019】
コア202は、PM206に格納された命令(複数可)に従ってデータを処理するための1つまたは複数の計算ユニットを含む。一例では、コア202は、超長命令語(VLIW)プロセッサ、単一命令複数データ(SIMD)もしくはベクトルプロセッサ、またはVLIW SIMD/ベクトルプロセッサを含む。一例では、PM206はコア202にプライベートである(例えば、PM206は、DPE200内のコア202によって使用するためにのみ命令(複数可)を格納する)。一例では、PM206は、シングルポートランダムアクセスメモリ(RAM)を含む。PM206は、命令の構成およびロードのために、MM相互接続212に結合することができる。一例では、PM206は、パリティ、誤り訂正符号(ECC)保護および報告、またはパリティとECCの両方をサポートする。例えば、PM206は、9ビットECCをサポートすることができ、プログラム命令(例えば、128ビット)における1ビットエラーまたは2ビットエラーを訂正することができる。
【0020】
コア202は、ストリーミング相互接続210に直接結合されて、入力ストリーム(複数可)を受信し、および/または出力ストリーム(複数可)を提供することができる。さらに、コア202は、DPE200内のDM208に対してデータを読み書きすることができる。下記にさらに説明するように、DPE200のコア202は、1つまたは複数の隣接するタイル回路(例えば、北側、南側、東側、および西側の隣接するタイル回路)のDMにアクセスすることもできる。一例では、下記にさらに説明するように、コア202はまた、アキュムレータ出力を転送するための、1つまたは複数の隣接タイル内のデータ処理エンジンとの直接接続部(例えば、入力および出力カスケード接続部(複数可))を含むことができる。一例では、コア202は、DPE200内のDM208および隣接するタイル(複数可)内の他のDM(複数可)を、メモリの1つの連続したブロックとして見る。コア202はまた、HWロック218へのインターフェースおよびデバッグ/トレース/プロファイル回路216へのインターフェースを含むことができる。デバッグ/トレース/プロファイル回路216は、トレース、デバッグ、および/またはプロファイル回路を含むことができる。
【0021】
MM相互接続212は、構成要素間のアドレストランザクションを使用してデータを送信するように構成されたAXIメモリマップ相互接続などであり得る。一例では、MM相互接続212は、DPE200の構成、制御、およびデバッグ機能のために使用される。MM相互接続212は、アドレスに基づいてトランザクションをルーティングする1つまたは複数のスイッチを含む。回路は、MM相互接続212を使用して、メモリ204、コア202、DMA220、およびDPE200内の構成レジスタにアクセスすることができる。
【0022】
ストリーミング相互接続210は、構成要素間でストリーミングデータを送信するように構成された高度拡張可能相互接続(Advanced eXtensible interconnect:AXI)ストリーミング相互接続などであり得る。ストリーミング相互接続210は、DPE200と外部回路との間でデータを転送するために使用される。ストリーミング相互接続210は、データおよび制御の両方のための回路交換メカニズムおよびパケット交換メカニズムの両方をサポートすることができる。
【0023】
一例では、下記にさらに説明するように、DM208は、1つまたは複数のメモリバンク(例えば、ランダムアクセスメモリ(RAM)バンク)を含み得る。DMA220は、ストリーミング相互接続210とDM208との間に結合される。DMA220は、データをストリーミング相互接続210からDM208に移動させ、データをDM208からストリーミング相互接続210に移動させるように構成される。このようにして、外部回路(例えば、プログラマブル論理内に構成された回路またはICの埋め込み処理システム内の回路)は、DMAを使用してストリーミング相互接続210を介してDM208に対してデータを読み書きすることができる。DMA220は、MM相互接続212および/またはストリーミング相互接続210を介して制御され得る。一例では、DM208は、パリティ、誤り訂正符号(ECC)保護および報告、またはパリティとECCの両方をサポートする。例えば、DM208は、9ビットECC(例えば、128ビットデータ)をサポートすることができる。
【0024】
HWロック218は、コア202、別のタイル内の別のデータ処理エンジン、またはDMA220によるアクセスのためにDM208の特定のメモリバンクをロックするために使用されてもよい。HWロック218は、隣接し合うタイル内の隣接し合うデータ処理エンジン間、コア202とDMA220との間、およびコア202と外部回路(例えば、外部プロセッサ)との間に同期をもたらす。HWロック218はまた、1つまたは複数のメモリバンクに格納され得るかまたは単一のメモリバンクの一部分に格納され得る、DM208内の特定のバッファをロックするために使用することもできる。デバッグ/トレース/プロファイル回路216は、デバッグ機能、トレース機能およびプロファイル機能を提供するように構成される。デバッグ/トレース/プロファイル回路216は、DPE200内の回路によって生成されるイベントをトレースすることができる。デバッグ/トレース/プロファイル回路216は、プロファイル機能、例えば、構成可能な実施カウンタを提供することができる。
【0025】
図3は、一例によるDPE200をより詳細に示すブロック図である。この例では、DPE200は、コア202、メモリモジュール351、およびDPE相互接続209を含む。コア202は、計算回路203およびPM206を含む。メモリモジュール351は、メモリインターフェース302N、302S、302Eおよび302W(総称してメモリインターフェースまたは個々に「メモリIF」)、RAMバンク318、HWロック218、レジスタ(「レジスタ304」)、DMAインターフェース204A、およびDMAインターフェース220Bを含む。計算回路203は、レジスタ(「レジスタ306」)を含む。DPE相互接続209は、MM相互接続212およびストリーミング相互接続210(
図2に示す)を含む。MM相互接続212およびストリーミング相互接続210はともに、RAMバンク318にアクセスすることができる。RAMバンク318は、バンクごとにアービトレーション論理319を含む。アービトレーション論理319は、どのインターフェース(N,S,E,W,DMA,外部PSなど)がどのバンクにアクセスするかを制御するように構成される。DPE相互接続209のさらなる詳細は、
図4の例に関して下記に議論される。
【0026】
DPE相互接続209は、西側タイルへのストリーミング接続314Wと、東側タイルへのストリーミング接続314Eと、北側タイルへのストリーミング接続314Nと、南側タイルへのストリーミング接続314Sとを含む。各ストリーミング接続314は、1つまたは複数の独立したストリーミングインターフェース(例えばバス)を含んでおり、これらストリーミングインターフェースの各々は特定のビット幅を有する。DPE相互接続209はまた、南側タイルからのメモリマップ接続312Sと、北側タイルへのメモリマップ接続312Nとを含む。北側および南側のMM接続のみが図示されているが、DPE相互接続209が、MM相互接続のための他の構成(例えば、東側から西側、西側から東側、北側から南側など)を含み得ることは理解されたい。DPE相互接続209が、
図3の例に示される以外のストリーミング接続およびメモリマップ接続の他の配置構成を含み得ることは理解されたい。概して、DPE相互接続209は、少なくとも1つのストリーミング接続314と、少なくとも1つのメモリマップ接続312とを含む。
【0027】
計算回路203は、西側タイル内のメモリ回路への接続308Wと、南側タイル内のメモリ回路への接続308Sと、北側タイル内のメモリ回路への接続308Nと、メモリモジュール351への接続308Eとを含む。計算回路203は、DPE相互接続209へのストリーミングインターフェースを含む。計算回路203はまた、西側タイル内のコアからの接続310Aと、東側タイル内のコアへの接続310B(例えば、カスケード接続)とを含む。DPEが、
図3の例に示されるメモリおよびカスケード接続の他の配置構成を含み得ることは理解されたい。概して、計算回路203は、少なくとも1つのメモリ接続を含み、少なくとも1つのカスケード接続を含み得る。
【0028】
メモリIF302Wは、計算回路203のメモリ接続308Eに結合される。メモリIF302Nは、北側タイル内のデータ処理エンジンのメモリ接続に結合される。メモリIF302Eは、東側タイル内のデータ処理エンジンのメモリ接続に結合される。メモリIF302Sは、南側タイル内のデータ処理エンジンのメモリ接続に結合される。メモリIF302W、302N、302E、および302SはRAMバンク318に結合される。DMA220Aは、相互接続ストリームへのメモリを処理するためにDPE相互接続209に結合された出力を含む。DMA220Bは、メモリストリームへの相互接続を処理するためにDPE相互接続209に結合された入力を含む。レジスタ304およびレジスタ306は、DPE相互接続209に結合されて、(例えば、メモリマップ相互接続を使用して)そこから構成データを受信する。
【0029】
図4は、一例によるDPE相互接続209を示すブロック図である。DPE相互接続209は、ストリームスイッチ402およびMMスイッチ404を含む。ストリームスイッチ402は、西側ストリームインターフェース406W、北側ストリームインターフェース406N、東側ストリームインターフェース406E、および南側ストリームインターフェース406Sに結合される。西側ストリームインターフェース406Wは、ストリームを受信して西側タイルのDPE相互接続に供給する。北側ストリームインターフェース406Nは、ストリームを受信して北側タイルのDPE相互接続に供給する。西側ストリームインターフェース406Wは、ストリームを受信して西側タイルのDPE相互接続に供給する。南側ストリームインターフェース406Sは、ストリームを受信して南側タイルのDPE相互接続に供給する。MMスイッチ404は、北側MMインターフェース408Nおよび南側MMインターフェース408Sに結合される。北側MMインターフェース408Nは、北側タイル内のDPE相互接続に結合される。南側MMインターフェース408Sは、南側タイル内のDPE相互接続に結合される。
【0030】
ストリームスイッチ402は、先入れ先出し(FIFO)回路(FIFO412)およびレジスタ(レジスタ410)を含む。FIFO412は、ストリームスイッチ402を通過するストリームをバッファするように構成される。レジスタ410は、ストリームスイッチを通るストリームのルーティングを制御するストリームスイッチ402のための構成データを格納する。レジスタ410は、MMスイッチ404から構成データを受信し得る。ストリームスイッチ402は、計算回路203への付加的インターフェースと、DMA回路220への付加的インターフェースとを含み得る。ストリームスイッチ402は、制御ストリームを送受信し、(例えば、デバッグ/トレース/プロファイル回路216から)トレースストリームを受信することができる。
【0031】
図5は、一例による回路設計システム500の一例を示すブロック図である。回路設計システム500は、入出力(IO)デバイス512、ディスプレイ514、およびSOC100に結合されたコンピュータ501を含む。コンピュータ501は、中央処理装置(CPU)502、システムメモリ508、様々なサポート回路504、ストレージ520、およびIOインターフェース506などのコンピューティングデバイスの従来の構成要素を含むことができるハードウェアプラットフォーム518を含む。CPU502は、1つまたは複数のマイクロプロセッサを含むことができる。CPU502は、本明細書で説明される1つまたは複数の動作を実行する命令を実行するように構成される。命令は、システムメモリ508、ストレージ520、またはハードウェアプラットフォーム518内の他の任意のメモリ(例えば、キャッシュメモリ)に格納することができる。システムメモリ508は、情報を記憶するデバイスを含み、例えば、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)、またはそれらの組み合わせを含むことができる。ストレージ520は、ハードディスク、フラッシュメモリモジュール、ソリッドステートディスク、光ディスクなどのようなローカルストレージデバイスを含む。ストレージ520はまた、1つまたは複数のネットワークデータストレージシステムとの通信するように構成されたインターフェースを含むことができる。サポート回路504は、従来のキャッシュ、電源、クロック回路、データレジスタ、IOインターフェースなどを含むことができる。IOインターフェース506は、当該技術分野で知られているコンピュータ501への従来のインターフェースを含む。IOインターフェース506は、従来のキーボード、マウスなどを含むことができるIOデバイス512に結合することができる。IOインターフェース506はまた、GUI516をユーザに提示することができるディスプレイ514に結合することができる。
【0032】
コンピュータ501は、オペレーティングシステム(OS)522および設計ツール510を含むソフトウェアプラットフォームをさらに含む。OS522および設計ツール510は、CPU502によって実行される命令を含む。OS 522は、Linux(登録商標)、Microsoft Windows(登録商標)、Mac OS(登録商標)などの既知のオペレーティングシステムを含んでもよい。設計ツール510は、ハードウェアプラットフォーム518へのインターフェースを提供するOS522内で実行されるアプリケーションである。設計ツール510の動作は、下記に説明される。本明細書に記載の技術を含むように適合させることができる例示的な設計ツールは、カリフォルニア州サンノゼ所在のXilinx,Inc.から入手可能なVivado(登録商標)設計スイートであるが、他の回路設計ツールも同様に適合させることができる。
【0033】
異種マルチコアアーキテクチャのコンパイラフロー
図6は、一例によるターゲットプラットフォームのアプリケーションの実装を示すブロック図である。設計ツール510は、ソフトウェアコンパイラ(「SWコンパイラ602」)、DPEアレイコンパイラ604、およびハードウェア設計ツール(「HW設計ツール606」)を含む。設計ツール510は、アプリケーション608、ユーザ制約610、およびハードウェアベースプラットフォーム(「HWベースプラットフォーム612」)を受信する。ユーザは、SoC100向けに実装されるアプリケーション608を定義する。アプリケーション608は、PL122、PS130、およびDPEアレイ105にマッピングされる部分を含む。SWコンパイラ602は、任意のプログラミング言語(例えば、C、C++など)を使用して定義されたソースコードを含むことができる、PS130にマッピングされるアプリケーション608の部分をコンパイルするように構成される。HW設計ツール606は、任意のハードウェア記述言語(HDL)、レジスタ転送言語(RTL)、高位合成(HLS)モデル、並列プログラミング言語(例えば、SystemC)などを使用して定義された回路記述を含むことができる、PL122にマッピングされるアプリケーション608の部分を実装するように構成される。DPEアレイコンパイラ604は、下記にさらに定義されるDPEアレイ105を標的とするアプリケーション608の部分をコンパイルするように構成される。
【0034】
図7は、一例によるアプリケーション608を示すブロック図である。ユーザは、設計ツール510と相互作用して、SOC100を標的とするアプリケーション608を定義する。この例では、アプリケーション608は、入力回路702、カーネル704、カーネル706、出力回路708、および制御ソフトウェア710を含む。入力回路702は、カーネル704に結合され、カーネル704にデータを提供する。カーネル704は、カーネル706に結合され、カーネル706にデータを提供する。カーネル706は、出力回路708に結合され、出力回路708にデータを提供する。制御ソフトウェア710は、カーネル704およびカーネル706を制御し、それらにデータを提供する。一般に、アプリケーション608は、設計に応じて特定の方法で互いに接続された1つまたは複数の回路、1つまたは複数のカーネル、および制御ソフトウェアを含む。
【0035】
この例では、入力回路702は、外部システム/回路と通信し、かつ処理のためにカーネル704にデータを提供する構成されたデジタルロジック(および任意選択的にアナログロジック)を含む。入力回路702は、PL122にマッピングされる。同様に、出力回路708は、外部システム/回路と通信し、かつ処理されたカーネル706からのデータを受信するように構成されたデジタルロジック(および任意選択的にアナログロジック)を含む。出力回路708は、PL122にマッピングされる。一例では、カーネル704および706は、データプロセッサのプログラム記述を含む。カーネル704および706は、DPEアレイ105にマッピングされる。制御ソフトウェア710は、カーネル704および706のためのコントローラのプログラム記述である。一例では、制御ソフトウェア710は、PS130にマッピングされる。
【0036】
図6に戻ると、実装データ614は、ストリームスイッチ構成コード616、DMAエンジン構成コード618、PSバイナリ624、DPEバイナリ620、およびPLビットストリーム622を含む。SWコンパイラ602は、PS130(例えば、制御ソフトウェア710)を標的とするアプリケーション608のソースコードからPSバイナリ624を生成する。PSバイナリ624は、特定のマイクロプロセッサアーキテクチャ(例えば、x86、ARM(登録商標)など)を標的とするように構成される。HW設計ツール606は、PL122(例えば、入力回路702および出力回路708)を標的とするアプリケーション608の部分からPLビットストリーム622を生成する。PLビットストリーム622は、特定のSOCデバイスを標的とする。DPEアレイコンパイラ604は、DPEアレイ105(例えば、カーネル704および706)を標的とするアプリケーション608の部分に基づいて、ストリームスイッチ構成コード616、DMAエンジン構成コード618、およびDPEバイナリ620を生成する。ストリームスイッチ構成コード616は、DPE相互接続209においてストリームスイッチ402をプログラミングするためのデータを含む。DMAエンジン構成コード618は、DPE110のメモリモジュール351においてDMA回路220をプログラミングするためのデータを含む。DPEバイナリ620は、DPE110のコア202内の計算回路203によって実行するためのコードを含む。
【0037】
実装出力614は、ターゲットプラットフォーム626上での実装のために構成されている。ターゲットプラットフォーム626は、シミュレーションプラットフォーム(「シミュレーション628」)、エミュレーションプラットフォーム(「エミュレーション630」)、およびハードウェアプラットフォーム(「ハードウェア632」)を含む。ハードウェア632は、SOC100を含む。シミュレーションプラットフォーム628およびエミュレーションプラットフォーム630は、ハードウェア632をシミュレート/エミュレートする。
【0038】
図8は、一例によるDPEアレイコンパイラ604を示すブロック図である。DPEアレイコンパイラ604は、フロントエンド806、マッパ808、バックエンド810、およびシングルコアコンパイラ812を含む。DPEアレイコンパイラ604は、個別の構成要素を有するものとして説明されているが、これらの構成要素の機能は、
図8に示される例とは異なる構造においてより多いまたは少ない構成要素を使用して実装することができることを理解されたい。DPEアレイ105を標的とするアプリケーション608の部分は、ユーザ定義のグラフ記述802およびカーネルソースコード804を含む。ユーザ定義のグラフ記述802は、構成要素およびそれらの接続性(例えば、入力回路702、カーネル704および706、出力回路708、ならびに制御ソフトウェア710)を記述する。カーネルソースコード804は、DPEアレイ105のDPE110において実装される機能のプログラム記述を提供する。
【0039】
ユーザ定義のグラフ記述802は、様々なプログラミング言語(例えば、C、C++など)またはデータ構造言語(例えば、XML、JSONなど)を使用して指定することができる。C++で指定されたユーザ定義のグラフ記述802の一例を下記に示す。
【0040】
【0041】
上記の例では、無線クラスはグラフ作成プリミティブを有するクラスライブラリ(cardano)から導出される。これらのプリミティブを使用して、ユーザ定義のグラフ記述802は、計算ノードa、b、c、d、e、およびfを定義する。計算ノードaおよびfは、PL122にマッピングされた回路である。計算ノードb、c、d、およびeは、DPEアレイ105にマッピングされたカーネルである。回路aは、DMAストリーミング接続を使用してカーネルbに接続される。カーネルbはカーネルcに接続されており、カーネルcはカーネルdに接続されており、カーネルdはカーネルeに接続されており、カーネルeはカーネルbに接続されており、そのような各接続はDPE105内のメモリブロックを介して行われる。カーネルdは、DMAストリーミング接続を介して回路Fに接続されている。
【0042】
ユーザ定義のグラフ記述802はまた、プラットフォームのトップレベルの記述を含むことができる。例えば、記述は以下のとおりである。
【0043】
【0044】
上記の例では、ユーザは無線クラス(mygraph)をインスタンス化し、シミュレーションターゲットを設定する。ユーザは、PS130上で実行される制御プログラムを次のように指定することもできる。
【0045】
【0046】
上記の例では、ユーザはシミュレーションプラットフォームでのシミュレーションのために、mygraphを初期化し、mygraphを実行し、mygraphを終了する。
【0047】
カーネルソースコード804は、DPE110を標的とする各計算ノード(例えば、上記の例の計算ノードb、c、d、およびe)のソースコード記述を提供する。カーネルソースコード804は、任意のプログラミング言語(例えば、C、C++など)を使用して定義することができる。計算ノードc(イコライザ)を定義するためのC++ソースコードの例を下記に示す。
【0048】
【0049】
この例では、計算ノードc(イコライザ)は、計算ノードの入力を定義する入力パラメータを有するC/C++関数を使用して実装されている。コードは、実施のスケジューリングを支援するプラグマを含む。コードは、ベクトル化された計算を実行するための組み込み関数と、データにアクセスするためのアプリケーションプログラミングインターフェース(API)とを含む。
【0050】
フロントエンド806は、ユーザ定義のグラフ記述802を処理し、内部表現として有向グラフを生成するように構成される。有向グラフでは、ノードは計算ノードを表し、エッジは計算ノード間の接続を表す。マッパ808は、デバイス記述814に基づいて、ターゲットデバイス内のDPEアレイ105の有向グラフを実装するように構成される。マッパ808は、計算ノードをグループにパーティショニングし、パーティショニングされた計算ノードをDPE110にマッピングする。バックエンド810は、DPE110とPL122内の回路との間の接続をルーティングし、次にシングルコアコンパイラ812を呼び出してDPEバイナリを生成し、また、マッパ808の出力に基づいてストリームスイッチおよびDMA構成コードを生成するように構成される。
【0051】
図9A~
図9Dは、一例による、DPEアレイ105を標的とするアプリケーション608の一部分の例示的な有向グラフ表現を示すブロック図である。
図10は、DPEアレイ105内の有向グラフの配置およびルーティングを示すブロック図である。
図9A~
図9Dの有向グラフは、計算ノードa、b、c、d、e、およびfを有するユーザ定義のグラフ記述802について上で説明した例を表し、ここで、計算ノードaおよびfは、PL122にマッピングされ、計算ノードb、c、d、およびeは、DPEアレイ105にマッピングされる。
図9Aに示されるように、有向グラフは、ノードA 902、B 904、C 906、D 908、E 910、およびF 912を含む。ノードAはノードBに接続されており、ノードBはノードCに接続されており、ノードCはノードDに接続されており、ノードDはノードFおよびノードEに接続されている。
図9B~
図9Dは、下記にさらに説明するように、マッパ808が様々なステップを通じて有向グラフを処理する方法を示している。
【0052】
図11は、一例による、SOC100のDPEアレイ105のコードおよび構成を生成する方法1100を示す流れ図である。方法1100は、コンピュータシステム501上で実行される設計ツール510によって実行される。上記のように、設計ツール510は、アプリケーション608を処理して、SOC100のコードおよび構成データを生成するように構成される。方法1100は、DPEアレイコンパイラ604によって実行される。
【0053】
方法1100は、ステップ1102において始まり、ここで、DPEアレイコンパイラ604は、アプリケーション608を解析し、設計のユーザ定義のグラフ記述に基づいて有向グラフを生成する。一例では、DPEアレイコンパイラ604は、計算ノード902~912およびそれらの間の接続を識別する。次に、DPEアレイコンパイラ604は、
図9Aに示されるように、ノードがカーネルであり、エッジが接続であるグラフを形成する。
【0054】
ステップ1104において、DPEアレイコンパイラ604は、有向グラフを処理して、データ処理エンジンのコア上で実行することができるグループにカーネルをクラスタ化する。この例では、カーネルは、計算ノードB 904、C 906、D 908、およびE 910から選択される。すなわち、各DPE110は、1つまたは複数のカーネルを実行することができ、DPEアレイコンパイラ604は、どのカーネルを組み合わせてグループとして実行することができるかを決定する。
図9Bに示すように、DPEアレイコンパイラ604は、ノードB904およびノードC906を組み合わせてグループ905にし、ノードD908およびノードE910を組み合わせてグループ907にすることができる。
【0055】
ステップ1106において、DPEアレイコンパイラ604は、パフォーマンスを改善し、カーネルクラスタのメモリフットプリントを削減するために、最適化のために各カーネルを定義するコードを処理する。ステップ1108において、DPEアレイコンパイラ604は、カーネル(または存在する場合はカーネルクラスタ)をDPEアレイ105内のDPE110にマッピングする。
図10に示されるように、ノードB904およびC906によって表されるカーネルは、1つのDPEのコア202-1にマッピングされ、ノードD908およびE910によって表されるカーネルは、別のDPEのコア202-3にマッピングされる。
【0056】
ステップ1110において、DPEアレイコンパイラ604は、カーネルコードにおいて定義されているデータ構造を、対応するDPE110内のローカルメモリバンクに、または非ローカル通信のためのDMAにマッピングする。上記のように、互いに近接しているDPEはメモリバンクを共有することができる。共有メモリを介した通信は、本明細書でさらに説明するように、単一バッファまたは二重バッファにすることができる。ただし、場合によっては、DPEが別のDPEから十分に離れており、結果、DPE上で実行されているカーネルがDMA通信を必要とすることがある。
図9Cに示されるように、ノードA902とB904との間の通信は、二重バッファ914を介して行われる。ノードB904とノードC906との間の通信は、単一バッファ916を介して行われる。ノードC906とノードD908との間の通信は、二重バッファ918を介して行われる。ノードD908とノードE910との間の通信は、単一バッファ920を介して行われる。ノードE910とノードB904との間の通信は、二重バッファ922を介して行われる。そして、ノードD908とノードF912との間の通信は、二重バッファ924を介して行われる。
図10に示されるように、バッファ914は、メモリモジュール351-1内のRAMバンク318にマッピングされる。バッファ918は、メモリモジュール351-2内のRAMバンク318にマッピングされる。バッファ924は、メモリモジュール351-4のRAMバンク318にマッピングされる。メモリバッファ916、920、および922は、メモリモジュール351-3のRAMバンク318にマッピングされる。
【0057】
ステップ1112において、DPEアレイコンパイラ604は、DPEアレイ105とPL122との間で通信チャネルを配分することができる。これは例えば、PL122(例えば、計算ノードaおよびf)内で構成された入出力回路への通信チャネルである。例えば、
図10に示されるように、ノードA902は、メモリモジュール351-1内のDMA220とのDMA通信向けに構成されている。ノードF912は、メモリモジュール351-4内のDMA220とのDMA通信向けに構成されている。
【0058】
ステップ1114において、DPEアレイコンパイラ604は、カーネル間でコア対コアおよびコア対DMA(必要な場合)同期のためにロックを配分する。
図9Dに示されるように、DPEアレイコンパイラ604は、ノードA902とB904との間でロック924を配分し、ノードC906とD908との間でロック928を配分し、ノードE910とB904との間でロック926を配分し、ノードD908とF912との間でロック930を配分する。ロック924、926、928、および930は、ノード間の二重バッファの同期を提供する。
【0059】
ステップ1116において、DPEアレイコンパイラ604は、コア間で、およびストリームスイッチ(例えば、回線および/またはパケット交換)を介してPL122から/へのストリームデータ通信をルーティングする。ステップ1118において、DPEアレイコンパイラ604は、各DPE110のラッパーコードを生成し、ラッパーコードをコンパイルして、DPEバイナリを生成する。ステップ1120において、DPEアレイコンパイラ604は、DMAストリームスイッチを構成するための制御コードを生成する。ステップ1122において、DPEアレイコンパイラ604は、データ処理エンジンアレイ内で実行されているカーネルにアクセスして制御するために処理システム上で実行されている制御ソフトウェアのためのアプリケーションプログラミングインターフェース(API)を生成する。
【0060】
ヒューリスティックパーティショナ
上記の方法1100において、DPEアレイコンパイラ604は、カーネルを、DPE110上で実行できるグループにクラスタ化する(ステップ1104)。計算上、パーティショニング問題は非多項式(NP)ハードである。これは、競合を伴うビンパッキングの古典的な問題がパーティショニング問題に還元されることに起因する。本明細書における例では、扱いやすさのために、貪欲なヒューリスティックがパーティショニングアルゴリズムにおいて使用される。グラフベースのプログラミングモデルでは、各カーネルは関連する実行時間比を有し、これは、サイクルバジェットと比較した実行時間の上限を示す。ともにクラスタ化されたカーネルの実行時間比の合計は、1を超えてはならない。さらに、ユーザは、カーネル間のコロケーション制約、またはカーネルの絶対ロケーション制約を指定することもできる。これは、パーティションへのカーネルの配分、および、データ処理エンジンへのカーネル/パーティションのマッピングに影響を与える。以前の取り組みと比較して、本明細書において説明するパーティショニングスキームは、絶対制約、相対制約、および派生制約を含む様々な制約を処理するという点で独特である。また、これらの技法は、パーティションの作成中にいくつかの制約を動的に推測し、結果、実行可能なパーティションからコアへのマッピングを見つけることができる。さらに、これらの技法は、ユーザが、各々が多基準の目的関数を有する種々のパーティショニングヒューリスティックから選択することを可能にする。
【0061】
図12は、一例による、DPE間でアプリケーション内のカーネルをパーティショニングする方法1200を示す流れ図である。方法1200は、上記のステップ1104の一部として実行することができる。方法1200は、ステップ1202において始まり、ここで、DPEアレイコンパイラ604は、有向グラフ(例えば、上記のステップ1102で形成された)を受信する。有向グラフでは、ノードはカーネルであり、エッジはカーネル間のデータフローを表す。ユーザは、特定のカーネルを特定のデータ処理エンジンに配置する必要があるなど、絶対制約を定義することができる。ユーザはまた、特定のカーネルセットを同じデータ処理エンジンに配置する必要があるなど、相対制約を定義することもできる。ステップ1204において、DPEアレイコンパイラ604は、ユーザ定義の制約(「ユーザ制約」)に基づいて、いくつかのカーネルを「マクロノード」にグループ化する。この時点で、グラフはノードおよびマクロノードを含み、ノードは単一のカーネルを含み、マクロノードは2つ以上のカーネルを含む。以降、この説明ではノードとマクロノードとを区別せず、ノードおよびカーネルを交換可能に使用する。
【0062】
ステップ1206において、DPEアレイコンパイラ604は、それらの実行時間比および重要度に基づいてグラフ内のノードをソートする。これは2つのステップにおいて行われる。まず、DPEアレイコンパイラ604は、静的レベルに基づいてノードをソートして、リストL1を作成する。ノードnの静的レベルは、nからグラフ内の任意のシンクへの最大累積実行時間比として計算される。次に、DPEアレイコンパイラ604は、L1をスキャンして、未探索のノードmを見つける。mをルートとして、深さ優先の探索を優先しながら、逆後行順(RPO)トラバーサルを実行する。この説明では、このトラバーサルを深さ優先RPOと呼ぶ。RPOトラバーサルにおいて探索されたすべてのノードは、新しいリストL2に追加される。次に、新しい未探索ノードがL1から選択され、L1内のすべてのノードが探索されるまでステップ1206が繰り返される。RPOトラバーサルは局所性を活用し、プロデューサ-コンシューマカーネルを同じパーティションに配置する可能性を高め、クリティカルパスが悪化しない可能性を高める。
【0063】
ステップ1208において、DPEアレイコンパイラ604は、ソートされたノードを一度に1つずつ処理し、それらを最終的なパーティションに配置する。各ノードは、既存のパーティションまたは新しいパーティションに配置することができる。割り当ては、選択したカーネルと各パーティションの既存のカーネルとの間の制約を決定することによって実行される。例えば、DPEアレイコンパイラ604は、各パーティションの実行時間比を1以下に維持する(例えば、所与のデータ処理エンジンがオーバーコミットにならないようにする)(ステップ1210)。したがって、b_a内のカーネルの実行時間比とカーネルk_aの実行時間比との合計が1を超える場合、カーネルk_aをパーティションb_aに割り当てることはできない。
【0064】
別の例では、絶対制約のあるカーネルを有するパーティションは絶対制約を継承する(ステップ1212)。したがって、カーネルk_aが、カーネルを特定のデータ処理エンジンに固定する絶対制約を有し、パーティショニングアルゴリズムがk_aをパーティションb_aにマッピングする場合、k_aの絶対制約はパーティションb_aに拡張される。その後、DPEアレイコンパイラ604は、異なるカーネルk_bをパーティションb_aに追加しない。ここで、k_bは、それをk_aとは異なるデータ処理エンジンにマッピングする絶対制約を有する。
【0065】
別の例では、DPEアレイコンパイラ604は、パーティションがデータ処理エンジンアレイの物理的制約を満たすことを保証する(ステップ1214)。例えば、パーティションには、所与のアーキテクチャに対して定義された数を超える入出力ストリームポートを含めることはできない。同じパーティション内の2つのカーネルは、それらの間にストリーム接続、カスケード接続、非同期接続など、特定のタイプの接続を有することはできない。
【0066】
別の例では、DPEアレイコンパイラ604は、パーティショニングプロセス(ステップ1216)から生じる任意の動的なロケーション制約をすべて満たす。パーティショニングが進むにつれて、いくつかのロケーション制約が、交差する二重バッファデータエッジを有する2つのパーティション間で動的に発生する可能性がある。このようなパーティションは、アレイ内の隣接するデータ処理エンジンにマッピングされる必要がある場合がある。
【0067】
ステップ1208において、パーティショニングアルゴリズムは、すべての制約を追跡し、カーネルをパーティションに割り当てる間、それらを尊重する。制約の競合のためにカーネルを任意の既存のパーティションに追加することができない場合、DPEアレイコンパイラ604は新しいパーティションを作成する。ただし、カーネルを追加することができるパーティションが複数ある場合は、次の2つの可能性がある。(1)DPEアレイコンパイラ604は、既存のパーティションの1つにカーネルを追加することができる、または(2)DPEアレイコンパイラ604は、カーネルを新しいパーティションに追加することができる。第1のオプションは、開かれるパーティションの数を最小限に抑え、これは、消費電力に直接影響する。第2のオプションは、全体的な実行待ち時間を短縮するのに役立つ。ユーザは、異なるアプリケーションに対して異なる目的を有する可能性がある(例えば、電力使用量の削減対実行時間の削減)ため、DPEアレイコンパイラ604は、ユーザに2つの実施態様を提供することができる。(1)可能な場合はいつでも、パーティションの数を最小限に抑える、すなわち、競合のない既存のパーティションの1つにカーネルを追加する。(2)クリティカルパス長を悪化させない場合にのみカーネルを競合のないパーティションに追加する、それ以外の場合は、新しいパーティションが作成される。どちらの場合も、カーネルを複数のパーティションに追加することができるとアルゴリズムが判断した場合、パーティションにまたがる二重バッファエッジの数を最小限に抑えるパーティションが優先される。
【0068】
ステップ1218において、設計ツールは、重要度に基づいて、各パーティション内のカーネルの実行順序を決定する。パーティショニング後、各パーティション内のカーネルは順番に実行される。実行待ち時間の増加を回避するために、所与のパーティション内のカーネルは、その重要度に基づいて実行される。
【0069】
パーティショニング問題のいくつかの制約は、整数線形計画(ILP)問題として定式化することもできる。これは、ILPソルバを使用して解決することができる。ただし、すべての制約/目的関数をILPで効果的に表すことができるわけではなく、解は経時的に指数関数的になる可能性がある。ここで説明するヒューリスティックベースのパーティショナは貪欲であり、したがって、経時的に線形である。パーティショニングは、マッピングと並行して行われる。代替的に、パーティショニングとマッピングとを同時に実行することもできる。
【0070】
図13は、一例による、カーネルをパーティションに割り当てる方法1300を示す流れ図である。方法1300は、上記の方法1200のステップ1208の一部として実行することができる。方法1300は、ステップ1302において開始し、ここで、DPEアレイコンパイラ604は、(例えば、ステップ1206から)深さ優先の逆後行順でソートされたノードのセットPを取得する。ステップ1304において、DPEアレイコンパイラ604は、セットPが空であるか否か(例えば、すべてのカーネルがパーティションに割り当てられているか否か)を決定する。そうである場合、方法1300は、ステップ1306に進み、通信最小化のためにパーティショニング後の最適化を実行する。そうでなければ、方法1300はステップ1308に進む。ステップ1308において、DPEアレイコンパイラ604は、ノードnをセットPから削除する。ステップ1310において、DPEアレイコンパイラ604は、ノードnを既存のまたは新しいパーティションに割り当てる。
【0071】
特に、DPEアレイコンパイラ604は、nを追加することができる既存のパーティションのセットRを決定する。ステップ1312において、DPEアレイコンパイラ604は、nと共有されるバッファの降順でパーティションRをソートする。上記のように、一部のカーネルは他のカーネルとメモリバッファを共有することができる。ステップ1314において、DPEアレイコンパイラ604は、nとrのマージが(1)クリティカルパスの悪化、または(2)実行不可能なトポロジ配置をもたらさないように、ソートされたRの最初のパーティションrを選択する。
【0072】
ステップ1316において、DPEアレイコンパイラ604は、rが空であるかどうか(すなわち、nのための既存のパーティションがないか)を決定する。そうでない場合、方法1300は、ステップ1318に進み、ここで、DPEアレイコンパイラ604は、ノードnをパーティションrとマージし、ノードnに基づいてパーティションrのロケーション制約(例えば、nに対して定義された任意の絶対制約および/または相対制約)を更新する。rが空の場合、方法1300は、代わりにステップ1320に進み、そこで、DPEアレイコンパイラ604は、新しいパーティションを作成し、nを新しいパーティションに追加し、nに基づいて新しいパーティションのロケーション制約を更新する。方法1300は、ステップ1318またはステップ1320のいずれかからステップ1304に進み、すべてのノードが処理されるまで繰り返される。
【0073】
マッピング
上記のステップ1108で説明したように、DPEアレイコンパイラ604は、カーネルおよびカーネルクラスタをDPE110にマッピングする。マッピングアルゴリズムへの入力は、静的有向グラフ(
図9Bなど)およびデバイス記述である。マッピングアルゴリズムは、出力として、各カーネルが配置され、カーネル間のバッファが配置され、IOノードがマッピングされるDPEアレイ105内の物理的位置を提供する。
【0074】
図14は、一例による、カーネルおよびカーネルクラスタをDPE110にマッピングする方法1400を示す流れ図である。方法1400は、上記の方法1100のステップ1108の一部として実行することができる。方法1400は、ステップ1402において開始し、ここで、DPEアレイコンパイラ604は、カーネル間のブロックベースのデータ移動(例えば、DPEアレイ105内のデータ移動)のためのDMA通信を導入することなく、カーネル、バッファ、およびIOノードをマッピングする第1のパスを実行する。ステップ1404において、DPEアレイコンパイラ604は、任意のDMAが必要か否かを決定する。必要でない場合、方法1400は、ステップ1410に進み、終了する。必要である場合、方法1400はステップ1406に進む。
【0075】
ステップ1406において、DPEアレイコンパイラ604は、DPEアレイ105内のカーネル間のDMA通信を提供するために、有向グラフに追加のバッファを挿入する。ステップ1408において、DPEアレイコンパイラ604は、DMA通信リンクを有するマッピングの第2のパスを実行する。マッピングの第2のパスは、第1のマッピングパスからの解を開始点として使用することができるため、第1のパスよりも高速に実行することができる。したがって、DPEアレイコンパイラ604は、DMA通信のために新しく挿入されたバッファを配置するだけでよい。次いで、方法1400は、ステップ1410において終了する。
【0076】
両方のマッピングパス(1402および1408)は、ヒューリスティックな費用目標を使用してILPベースの最適化問題を解決する。最適化問題の目標は、(1)データ移動の数を最小限に抑えること、2)メモリの競合を最小限に抑えること、および、3)待ち時間を最小限に抑えることである。
【0077】
データ移動の最適化:DPE 110の各コア202は、
図3に示すように、すべての基本方位側(北、南、東、西)のメモリモジュール351にアクセスすることができる。カーネルをコア202にマッピングするとき、DPEアレイコンパイラ604は、カーネルによってアクセスされるすべてのバッファが、特定のコア202から直接アクセスされ得るメモリモジュール351の1つに配置されることを保証する。異なるコア202にマッピングされた2つのカーネルは、2つの異なる方法、すなわち、非DMAおよびDMAでメモリを介して通信することができる。非DMAの場合、カーネルはデータをメモリに書き込んでおり、これは別のカーネルによって読み出される。2つのカーネルが、同じメモリモジュール351にアクセスすることができるコア202にマッピングされる場合、コア202間のDMA通信は必要とされない。DMAの場合、2つのカーネルは、同じメモリモジュール351にアクセスすることができないコア202にマッピングされる。そのような場合、カーネル間のバッファは、2つの異なるメモリモジュール351に複製され、そのうちの1つは、第1のコア202によってアクセスされ得、他方は、第2のコア202によってアクセスされ得る。第1のメモリモジュール351からのデータは、DMAを使用してDPE相互接続209を介して第2のメモリモジュール351に転送される。非DMAと比較して、DMAは、DPE相互接続209内のルーティングリソースに加えて、2倍のメモリフットプリント、2倍の数のロック、および2つのDMAチャネルを必要とする。
【0078】
DPEアレイコンパイラ604は、各コアの隣接するメモリモジュールのアクセスコストがゼロであり、残りのメモリモジュールのコストがより高いコストモデルを使用して、DPEアレイ105を格子縞アーキテクチャとしてモデル化する。このとき、最適化問題は、最小限のコストでカーネルをコアに、バッファをメモリモジュールにマッピングすることである。この問題は、二次最適化問題として自然に表現可能である。DPEアレイコンパイラ604は、二次問題をILP問題に縮小するように機能する。
【0079】
メモリ競合最適化:各メモリモジュール351は、RAMバンク318(例えば、RAMの8つのバンク)を含む。同じサイクルで同じRAMバンクに複数のアクセスがある場合、メモリアクセス競合が発生する。メモリアクセス競合は、以下の種々のタイプ、すなわち、(1)コア内メモリアクセス競合、(2)コア間メモリアクセス競合、(3)コア-DMAメモリアクセス競合、(4)DMA-DMAメモリアクセス競合に分類することができる。コア内メモリアクセス競合の場合、コアは超長命令語(VLIW)命令を実行する。各VLIW命令は、複数のメモリアクセス命令を有することができる(例えば、最大2つのロードおよび1つのストア)。単一の命令における2つ以上のメモリ動作が同じメモリバンクにアクセスすると、メモリストールが発生し、次にコアストールが発生する。同じサイクルで同じメモリバンクにアクセスする2つ以上の異なるコアは、コア間メモリアクセス競合を引き起こす。コアおよびDMAチャネルが同じサイクルで同じメモリバンクにアクセスすると、コア-DMAメモリアクセス競合が発生する。複数のDMAチャネルが同じサイクルで同じメモリバンクにアクセスすると、DMA-DMAメモリアクセス競合が発生する。
【0080】
競合を完全に回避することはすべてのアプリケーションで可能であるとは限らないため、DPEアレイコンパイラ604は、ユーザが競合回避および競合最小化設定のセットから選択することを可能にする。DPEアレイコンパイラ604は、ローカルバッファ(例えば、単一のカーネルによってアクセスされるバッファ)と共有バッファ(例えば、複数のカーネルによってアクセスされるバッファ)とを区別し、異なる最適化を実行する。DPEアレイコンパイラ604は、メモリ競合に対処するために二面アプローチ、すなわち、1)競合回避および2)競合最小化をとる。競合回避の場合、データブロックのプロデューサとコンシューマとの間のアクセス競合を回避するために、DPEアレイコンパイラ604は、二重バッファ(例えば、pingバッファおよびpongバッファ)が異なるRAMバンクにマッピングされることを保証する。同様に、DPEアレイコンパイラ604は、異なるカーネルからのローカルバッファのアクセス間に競合がないことを、それらを異なるバンクに配置することによって保証する。コア内メモリ競合は、単一のカーネルによってアクセスされるすべてのバッファを異なるRAMバンク318に配置することによって回避される。
【0081】
競合最小化の場合、問題は、所与のメモリバンクにアクセスしている独立したアクタ(コア、DMAチャネル)の数を最小化するという問題に還元される。これをILP問題としてモデル化すると、コアおよびDMAチャネルの数はc×rに比例するため、大規模なデバイスではコストがかかる可能性がある。ここで、cはデバイスのDPEアレイ105の列の数であり、rは行の数である。DPEアレイコンパイラ604は、すべてのDMAチャネルを、c x r x 4の異なるエンティティではなく、2つの個別のアクタ(リーダおよびライタ)としてモデル化することによって、ILP変数の数を低減する技法を採用する。
【0082】
待ち時間最小化:FPGA配置アルゴリズムと同様に、DPEアレイコンパイラ604は、ソースとシンクとの間の距離を最小化することによって、ストリームベースの通信の待ち時間を最小化する。
【0083】
異種マルチコアアーキテクチャにおけるストリームFIFO挿入
デッドロック回避およびパフォーマンスのためのFIFOの決定および挿入は過去に研究されてきたが、主に計算の理論モデル(同期データフロー、カーンプロセスネットワークなど)および高位合成のコンテキストにおいてであった。この問題はマルチプロセッサシステムでは解決されていない。これは主に、弾性ハンドシェイクストリームを使用して互いに通信するようなシステムがほとんどないためである(例えば、ほとんどのマルチプロセッサシステムは、データ通信に共有メモリを使用するか、またはロックステップにおいて作動するシストリックアレイである)。
【0084】
図15は、異種マルチコアアーキテクチャのアプリケーションを実装する際のFIFO挿入の方法1500を示す流れ図である。方法1500は、上記の方法1100のステップ1108、1110、1112、1114、および1116のいずれかの最中に実行することができる。方法1500は、ステップ1502において開始し、ここで、DPEアレイコンパイラ604は、再収束計算および通信パスに沿ったストリームデータ待ち時間の不一致に起因して、アプリケーションがデッドロックであるかまたはパフォーマンス基準を満たさないかを決定する。障害が発生した場合(ステップ1504)、方法1500はステップ1506に進む。障害が発生しなかった場合、方法1500はステップ1516において終了する。ステップ1506において、DPEアレイコンパイラ604は、計算および通信パスで識別されたデッドロックおよび/またはパフォーマンス障害を回避するための最小FIFOサイズを決定する。一例では、1つまたは複数の最小FIFOサイズを事前定義する(例えば、ユーザによって指定する)ことができる。
【0085】
一般的なケースでこれを理論的に分析することは難しく、保守的であり、これによって、FIFOが非常に大きくなる可能性がある。したがって、一例では、DPEアレイコンパイラ604は、シミュレーションベースのアプローチを実施する。DPEアレイコンパイラ604は、デッドロック/パフォーマンス障害が回避されるまで、選択されたFIFOサイズでシステムをシミュレートする(ステップ1508)。シミュレーションは、様々な抽象化レベルで行うことができる、すなわち、計算カーネルコードは非時限であり得るが、カーネルは同時に実行され(「カーネルの非時限および同時実行」)、または、カーネルはサイクルが正確にモデル化され得る(「カーネルのサイクルが正確な同時実行」)。
【0086】
ステップ1506においてFIFOサイズが決定されると、FIFOは、プロデューサ計算カーネルとコンシューマ計算カーネルとの間のストリームルートに沿って挿入される必要がある(ステップ1510)。DPEアレイ105には、2つのオプションがある、すなわち、各ストリームスイッチが、制限されたサイズ(例えば、各々16語)の2つのFIFOを有するか、または、ローカルデータメモリがタイルDMAエンジンを介してFIFOとして使用され得る。FIFOサイズが非常に大きい場合は、後者のオプションが必要である。前者のオプションには、プロデューサからコンシューマへのルートに沿ったストリームスイッチの数によって、使用することができるサイズ制限付きのFIFOの総数が制限されるという1つの問題がある。したがって、指定または決定されたFIFOサイズの合計を満たすために、ルート自体を人為的に長くする必要がある場合がある。もう1つの問題は、複数のルートがストリームスイッチを共有する可能性があることである。したがって、ルートのストリームスイッチに沿って指定または決定されたFIFOの長さを分散するヒューリスティックは、そのような共有を考慮する。したがって、ステップ1512において、DPEアレイコンパイラ604は、DPE相互接続内のFIFOを選択することができる。加えて、または代替的に、ステップ1514において、DPEアレイコンパイラ604は、ローカルメモリにおいてFIFOをj実装することができる。次いで、方法1500は、ステップ1516において終了する。
【0087】
図16は、一例による処理システム1600を示すブロック図である。処理システム1600は、上述のステップ1506の結果とすることができる。この例では、処理システム1600は、データソース1602と、複数のDPE 1604A~1604D)とを含む。データソース1602は、各DPE 1604によって処理されるデータを提供する。DPE 1604は直列に結合される(例えば、DPE 1604A、DPE 1604B、DPE 1604C、DPE 1604Dによってこの順で形成されたパイプライン)。ステップ1506において、DPEアレイコンパイラ604は、データソース1602とDPE 1604Aとの間のパスがFIFOを必要としないこと、データソース1602とDPE 1604Bとの間のパスが深さ10のFIFOを必要とすること、データソース1602とDPE 1604Cとの間のパスが深さ20のFIFOを必要とすること、および、データソース1602とDPE 1604Dとの間のパスが深さ30のFIFOを必要とすることを決定することができる。
【0088】
図17Aは、一例による処理システム1600の実施態様1700を示すブロック図である。この例では、実施態様1700は、ノード1702、1704、および1706を含み、それらの各々がDPE相互接続209内のスイッチを表す。実施態様1700は、最も多いFIFOリソース(例えば、深さ10、20、および30、合計60の深さのFIFO)を必要とするため、処理システム1600の最悪の場合の実施態様である。したがって、ステップ1510において、DPEアレイコンパイラ604は、下記のアルゴリズムにおいて説明するように、FIFOのより効率的な配置を実行することができる。
【0089】
図17Bは、別の例による処理システム1600の実施態様1701を示すブロック図である。
図17Bの例では、実施態様1701は、深さ10、10、および20、合計深さ40のFIFOを含む。実施態様1701は、実施態様1700よりも少ないリソースを使用して処理システム1600の必要なFIFOを達成する。
【0090】
図18は、一例による、FIFOを配置する方法1800を示す流れ図である。方法1800は、方法1500のステップ1510においてDPEアレイコンパイラ604によって実行することができる。方法1800は、ステップ1802において開始し、DPEアレイコンパイラ604がパス順序を決定する。パスは、データソース1602とDPE 1604との間の1つまたは複数のノードの集合である。一例では、DPEアレイコンパイラ604は、任意の順序において(例えば、左から右へ)パスを処理する。別の例を下記にさらに説明する。ステップ1804において、DPEアレイコンパイラ604は、各パスに沿ったノード順序を決定する。一例では、DPEアレイコンパイラ604は、ノード順序をDPE 1604からデータソース1602に向かうように決定する。別の例を下記にさらに説明する。
【0091】
ステップ1810において、DPEアレイコンパイラ604は、処理すべきパスを選択する。ステップ1812において、DPEアレイコンパイラ604は、実行可能なFIFO配置に達するまで、ノード順序に沿ってFIFO要件でエッジに注釈を付ける。場合によっては、DPEアレイコンパイラ604は、FIFO要件を依然として満たしながら実現可能性に達するために可能な限り多くの共通FIFOを「リタイム」する(ステップ1814)。例えば、データソース1602とDPE 1604Cとの間のパスを考える。このパスを処理するとき、DPEアレイコンパイラ604は、ノード1704と1706との間に深さ10のFIFOを割り当て、ノード1706とDPE 1604Cとの間に深さ10のFIFOを割り当てることができる。これは、DPE 1604Bおよび1604Cの両方のFIFO要件を満たす。しかしながら、データソース1602とDPE 1604Dとの間のパスを処理するとき、DPEアレイコンパイラ604は、データソース1602とノード1704との間のFIFOを0の深さから10の深さまでリタイムし、ノード1704と1706との間のFIFOを10の深さから0の深さまでリタイムすることができる。結果を
図17Bに示す。DPEアレイコンパイラ604は、FIFO要件を満たすようにノード1704とDPE 1704Dとの間の深さ20のFIFOを決定する。
【0092】
一例では、ステップ1802において、DPEアレイコンパイラ604は、処理されるパスの順序を決定するために全グラフ解析を実行する。FIFOを割り当てるために一度に1つのパスを調べる代わりに、DPEアレイコンパイラ604は、FIFO挿入を必要とするすべてのパスを調べることができる。次に、DPEアレイコンパイラ604は、パスに沿ったノードの数に関して、パスのサイズの昇順でパスをソートすることができる(ステップ1804)。パスが等しい数のノードを有する場合、DPEアレイコンパイラ604は、パスのFIFO深度に基づいて、最小深度から最大深度の順にソートすることができる。
【0093】
一例では、ステップ1806において、DPEアレイコンパイラ604は、ステップ1804において識別された各パスに沿ってノードを並べ替える。ノードの次数は、ノードがすべてのパスにわたって使用された合計回数として定義される。DPEアレイコンパイラ604は、ノードを次数の昇順にソートすることができる。FIFO判定の前に全グラフ解析およびノード順序付けを実行することによって、方法1800は、DPEの近くの深さを更新することが可能であると同時に、共通FIFO深さをデータソースに向かって移動させることができる。さらに、方法1800は、FIFOポートからのブロードキャストを処理することができる。
【0094】
図17Aの例では、FIFOを必要とする最短パスは、データソース1602とDPE 1604Dとの間である。データソース1602とDPE 1604Bとの間のパスおよびデータソース1602と1604Cとの間のパスは、同じ長さ(例えば、3つのノード)である。しかしながら、データソース1602とDPE 1604Bとの間のパスは、データソース1602とDPE 1604Cとの間のパス(例えば、20)に対してより浅いFIFO深さ(例えば、10)を有する。したがって、DPEアレイコンパイラ604は、データソース1602とDPE 1604Dとの間のパスを処理し、続いてまずデータソース1602とDPE 1604Bとの間のパスを処理し、最後にデータソース1602とDPE 1604Cとの間のパスを処理することができる。
【0095】
図17Aの例では、ノード1702は3つのパスの一部であり、ノード1704は3つのパスの一部であり、ノード1706は2つのパスの一部である。したがって、データソースとDPE1604Bおよび1604Cとの間のパスについて、ノード順序は1706、1704、および1702である。データソース1602とDPE 1604Dとの間のパスについて、ノード順序は1704および1702である。
【0096】
次に、DPEアレイコンパイラ604は、決定された順序で、各パスについて決定されたノード順序でパスを処理することによってステップ1810~1816を実行する。結果は
図17Bに示されており、これはこの例における前の例(パスソートおよびノード並べ替えなし)からの結果と同じである。しかしながら、実際の例では、得られる解は異なり得る。
【0097】
DPEアレイ内のコア間の接続のルーティング
DPEアレイ内のコア間のルーティングは、PL 122との通信を必要とするルートにチャネルを貪欲に配分することによって達成することができる。貪欲型ヒューリスティックであるため、この手法は、より大きなグラフをルーティングするとき、または特別な制約を処理する必要があるときに制限を明らかにする。従来の手法は、プログラミングモデルにおける明示的なパケット交換のためのアップサイズ/ダウンサイズ変換およびルーティングを必要とするアーキテクチャ上の制約、パケット交換、およびチャネルの処理をサポートしていない。本明細書では、これらの要件を処理するルーティングのための技法について説明する。
【0098】
以下の用語は、DPEアレイ105にマッピングされたアプリケーションをルーティングするための本明細書に記載のルーティング技法を説明する際に使用するために導入される。ルーティングノード:データのソースもしくは宛先または中間スイッチを表すルーティンググラフ内のノード。ノード容量:ノードを通る最大許容データフローを表す整数。ルーティングエッジ:ルーティングエッジは、ソースから宛先への可能なデータの流れを表す。ルーティンググラフ:ルーティンググラフは、すべての可能なルーティング選択肢を表す。これらの選択肢は、アーキテクチャ切り替え制約、ユーザ定義のシム制約によって課されるルーティング制約、チャネルのアップサイジング/ダウンサイジングの制約、ならびに、明示的なパケット分割およびマージ動作によるプログラマ定義の制約をモデル化する。ネット:ネットは、ルーティンググラフ内のソースノードおよびルーティンググラフ内の複数の宛先を用いた所望のルーティングを表す。ネット利用率:ネットによって必要とされる帯域幅をモデル化する整数。低帯域幅のネットは、スイッチングリソースを共有することによってともにルーティングされ得る。
【0099】
図19は、一例による、DPEアレイ105にマッピングされたアプリケーションをルーティングする方法1900を示す流れ図である。方法1900は、上述の方法1100のステップ1116中に実行することができる。方法1900は、ステップ1902において開始し、DPEアレイコンパイラ604がルーティンググラフを構築する。DPEアレイコンパイラ604は、DPEアレイ105アーキテクチャの記述に基づいてルーティンググラフを構築する。各ストリームスイッチポートは、単一のルーティングノードとしてモデル化される。各DMA、制御ポート、およびコアストリームポートは、ルーティングノードとしてモデル化される。スイッチングのための可能な選択は、ノード間のエッジとして表される。アーキテクチャにおいて許容されるすべての可能なスイッチングオプションが、ルーティンググラフにおいてモデル化される。ルーティンググラフを構築するには、DPEアレイ105のアーキテクチャの記述のみが必要である。
【0100】
ステップ1904において、DPEアレイコンパイラ604は、PL接続をモデル化する。PLノードの出力はいずれのシムポートにも接続することができるため、DPEアレイコンパイラ604は、各PL接続をPLソースからシム内のすべてのチャネルへのクロスバー接続としてモデル化する。ユーザがシムチャネルに対して特定の制約を指定する場合、クロスバー接続は、所与のシム制約のセットに特化することができる。
【0101】
ステップ1906において、DPEアレイコンパイラ604は、アップサイザ/ダウンサイザ接続をモデル化する。シムアーキテクチャは、より低い周波数で実行されるより高いビット幅のチャネルが、より高い周波数で実行されるより低いビット幅のチャネルに接続されることを可能にする。シムチャネルは固定ビット幅を有し、そのため、いくつかのより高いビット幅のチャネルを実装するには、複数の隣接するシムチャネルを使用する必要がある。このアーキテクチャは、シムチャネルのグループを偶数境界に配分しなければならないという制限をさらに課す。これらの制約は、新しいノードおよびエッジでルーティンググラフを修正することによって組み込まれる。制約は、クロスバー接続を、接続性が制限されたすべてのシムチャネルに置き換えることによって表される。
【0102】
ステップ1908において、DPEアレイコンパイラ604は、他の制約をモデル化する。いくつかの制約は、ルーティンググラフにおける接続として容易に表現可能でない。これらは、ネットおよびリソースルートに対する追加のグローバル制約として表される。例えば、アーキテクチャ制約は、4つのパケットスイッチネットがすべてのスイッチポートを通過することを可能にすることであり得る。別の例は、帯域幅利用率が低い場合でも、1つのネットのみがシムチャネルを通過できるようにすることである。早期または後期の明示的なパケット交換ノードのマージは、制約メカニズムを使用して処理される。
【0103】
ステップ1910において、DPEアレイコンパイラ604は、充足可能性ソルバ(SATソルバ)を呼び出して、アプリケーションをDPEアレイ105内でルーティングする。入力仕様グラフが、ルーティングを必要とするネットについて検査される。ネットのソースおよび宛先が識別される。ソースまたは宛先ネットは、ルーティンググラフ内のノードでなければならない。パケット交換を可能にするために、ネット利用率がユーザによって提供される。入力仕様内のすべてのネットが、制約に沿ってSATソルバに共に渡される。SATソルバによって提供される解は、DPEアレイ105のストリームスイッチ(例えば、ストリームスイッチ構成コード616)をプログラムするために使用される。
【0104】
図20は、
図1に示されるデバイス100の一実施態様として使用することができる、一例によるプログラム可能なIC1を示すブロック図である。プログラマブルIC 1は、プログラマブルロジック3と、構成ロジック25と、構成メモリ26とを含む。プログラマブルIC 1は、不揮発性メモリ27、DRAM 28、および他の回路29などの外部回路に結合され得る。プログラマブルロジック3は、論理セル30と、サポート回路31と、プログラマブル相互接続32とを含む。論理セル30は、複数の入力の一般的な論理機能を実装するように構成することができる回路を含む。サポート回路31は、トランシーバ、入出力ブロック、デジタル信号プロセッサ、メモリなどの専用回路を含む。論理セルおよびサポート回路31は、プログラマブル相互接続32を使用して相互接続することができる。論理セル30をプログラムし、サポート回路31のパラメータを設定し、プログラマブル相互接続32をプログラムするための情報は、構成ロジック25によって構成メモリ26に記憶される。構成ロジック25は、不揮発性メモリ27または任意の他のソース(例えば、DRAM 28、または他の回路29から)から構成データを取得することができる。いくつかの例では、プログラマブルIC 1は処理システム2を含む。処理システム2は、マイクロプロセッサ(複数可)、メモリ、サポート回路、IO回路などを含むことができる。
【0105】
図21は、トランシーバ37、構成可能論理ブロック(「CLB」)33、ランダムアクセスメモリブロック(「BRAM」)34、入出力ブロック(「IOB」)36、構成・クロッキングロジック(「CONFIG/CLOCKS」)42、デジタル信号処理ブロック(「DSP」)35、特殊入出力ブロック(「I/O」)41(例えば、構成ポートおよびクロックポート)、および、デジタルクロックマネージャ、アナログ/デジタル変換器、システム監視ロジックなどの他のプログラマブルロジック39を含む、多数の異なるプログラマブルタイルを含むプログラマブルIC1のフィールドプログラマブルゲートアレイ(FPGA)実施態様を示す。FPGAはまた、PCIeインターフェース40、アナログ-デジタル変換器(ADC)38などを含むことができる。
【0106】
いくつかのFPGAでは、各プログラマブルタイルは、
図21の上部に含まれる例によって示されるように、同じタイル内のプログラマブル論理要素の入力および出力端子48への接続を有する少なくとも1つのプログラマブル相互接続要素(「INT」)43を含むことができる。各プログラマブル相互接続要素43はまた、同じタイルまたは他のタイル(複数可)内の隣接するプログラマブル相互接続要素(複数可)の相互接続セグメント49への接続を含むことができる。各プログラマブル相互接続要素43はまた、論理ブロック(図示せず)間の一般的なルーティングリソースの相互接続セグメント50への接続を含むことができる。一般的なルーティングリソースは、相互接続セグメント(例えば、相互接続セグメント50)のトラックを備える論理ブロック(図示せず)と、相互接続セグメントを接続するためのスイッチブロック(図示せず)との間のルーティングチャネルを含むことができる。一般的なルーティングリソースの相互接続セグメント(例えば、相互接続セグメント50)は、1つまたは複数の論理ブロックにまたがることができる。プログラマブル相互接続要素43は、一般的なルーティングリソースと共に、図示のFPGAのプログラマブル相互接続構造(「プログラマブル相互接続」)を実装する。
【0107】
例示的な実施態様において、CLB33は、ユーザ論理と単一のプログラマブル相互接続要素(「INT」)43とを実装するようにプログラムすることができる構成可能論理素子(「CLE」)44を含むことができる。BRAM34は、1つまたは複数のプログラム可能な相互接続要素に加えて、BRAM論理要素(「BRL」)45を含むことができる。典型的には、タイルに含まれる相互接続要素の数は、タイルの高さに依存する。図示の例は、BRAMタイルは5つのCLBと同じ高さを有するが、他の数(例えば4つ)も使用することができる。DSPタイル35は、適切な数のプログラマブル相互接続要素に加えて、DSP論理要素(「DSPL」)46を含むことができる。IOB36は、例えば、プログラマブル相互接続要素43の1つのインスタンスに加えて、入出力論理素子(「IOL」)47の2つのインスタンスを含むことができる。当業者には明らかなように、例えばI/O論理素子47に接続される実際のI/Oパッドは、典型的には、入出力論理素子47の領域に限定されない。
【0108】
図示された例では、ダイの中心付近の水平領域(
図12に示す)が、構成、クロック、および他の制御ロジックに使用される。この水平領域または列から延伸する垂直列51は、FPGAの幅全体にわたってクロックおよび構成信号を分配するために使用される。
【0109】
図21に示されるアーキテクチャを利用するいくつかのFPGAは、FPGAの大部分を構成する規則的な柱状構造を乱す付加的な論理ブロックを含む。追加の論理ブロックは、プログラマブルブロックおよび/または専用ロジックとすることができる。
【0110】
図21は、例示的なFPGAアーキテクチャのみを示すことを意図していることに留意されたい。例えば、
図21の上部に含まれる行内の論理ブロックの数、行の相対幅、行の数および順序、行に含まれる論理ブロックのタイプ、論理ブロックの相対サイズ、ならびに、相互接続/論理実施態様は純粋に例示的なものである。例えば、実際のFPGAでは、ユーザ論理の効率的な実装を容易にするために、CLBが現れる場所にはどこでも、CLBの隣接する2つ以上の行が一般に含まれているが、隣接するCLB行の数はFPGAの全体サイズによって異なる。
【0111】
上記は特定の例を対象としているが、その基本的な範囲から逸脱することなく他のおよびさらなる例を考案することができ、その範囲は添付の特許請求の範囲によって決定される。