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

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

▶ グーグル インコーポレイテッドの特許一覧

特表2022-544796オンチップ動作の明示的なスケジューリング
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-10-21
(54)【発明の名称】オンチップ動作の明示的なスケジューリング
(51)【国際特許分類】
   G06F 9/48 20060101AFI20221014BHJP
   G06N 3/063 20060101ALI20221014BHJP
【FI】
G06F9/48 300Z
G06N3/063
G06F9/48 370
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2022509681
(86)(22)【出願日】2020-08-14
(85)【翻訳文提出日】2022-04-15
(86)【国際出願番号】 US2020046392
(87)【国際公開番号】W WO2021034675
(87)【国際公開日】2021-02-25
(31)【優先権主張番号】62/887,724
(32)【優先日】2019-08-16
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】100108453
【弁理士】
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100110364
【弁理士】
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【弁理士】
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】ミシャル・アレン・ギュンター
(72)【発明者】
【氏名】チャールズ・ヘンリー・リーチナー・ザ・フォース
(57)【要約】
集積回路デバイスの第1のハードウェアブロックについての第1のスケジュールを取得するための、方法、システム、装置、およびコンピュータ記憶媒体上に符号化されたコンピュータプログラムであって、第1のスケジュールが、第1のハードウェアブロックによって実行すべき動作の第1のセットを特定する方法、システム、装置、およびコンピュータプログラム。集積回路デバイスの第2のハードウェアブロックについて第2のスケジュールを取得すること。第2のスケジュールは、第2のハードウェアブロックによって実行すべき動作の第2のセットを特定し、第2のスケジュールの動作は、第1のスケジュールの動作に対して調整され、それによって、第1のスケジュールが第1のハードウェアブロックをトリガしてカウンタの第1の事前スケジュールされた値において第2のブロックにデータを送り、第2のスケジュールが第2のハードウェアブロックをトリガして、第1の事前スケジュールされた値の後に続くカウンタの第2の事前スケジュールされた値において入力でデータを受け入れる。第1のハードウェアブロックによって、第1のスケジュールに従って動作の第1のセットを実行し、第2のハードウェアブロックによって、第2のスケジュールに従って動作の第2のセットを実行すること。
【特許請求の範囲】
【請求項1】
集積回路デバイスであって、
カウンタと、
前記カウンタに通信可能に結合され、動作の第1のセットを含む第1のスケジュールに従って動作するように構成された第1のハードウェアブロックであって、前記各動作が、前記カウンタの第1のそれぞれの値において前記第1のハードウェアブロックによって実行されるようにスケジュールされる第1のハードウェアブロックと、
前記カウンタおよび前記第1のハードウェアブロックに通信可能に結合された第2のハードウェアブロックであって、動作の第2のセットを含む第2のスケジュールに従って動作するように構成され、前記各動作が、前記カウンタの第2のそれぞれの値において前記第2のハードウェアブロックによって実行されるようにスケジュールされる第2のハードウェアブロックとを備え、
前記第2のスケジュールの動作は、前記第1のスケジュールの動作に対して調整され、それによって、前記第1のスケジュールが前記第1のハードウェアブロックをトリガして前記カウンタの第1の事前スケジュールされた値において前記第2のハードウェアブロックにデータを送り、前記第2のスケジュールが前記第2のハードウェアブロックをトリガして、前記第1の事前スケジュールされた値の後に続く前記カウンタの第2の事前スケジュールされた値において入力で前記データを受け入れるデバイス。
【請求項2】
動作の前記第1のセットおよび動作の前記第2のセットの各々は、機械学習プログラムのそれぞれの部分を含む、請求項1に記載のデバイス。
【請求項3】
動作の前記第1のセットにおける各動作は、所定数のクロックサイクルで実行される、請求項1または2のいずれか一項に記載のデバイス。
【請求項4】
前記第1のスケジュールおよび前記第2のスケジュールの動作は、フロー制御信号とは無関係に前記第1のハードウェアブロックと前記第2のハードウェアブロックとの間におけるデータの交換を可能にするように調整される、請求項1から3のいずれか一項に記載のデバイス。
【請求項5】
複数の他のハードウェアブロックをさらに備え、前記第1のスケジュールの動作は、データフロー制御信号とは無関係に前記第1のハードウェアブロックと前記他のハードウェアブロックのうちの1つまたは複数との間におけるデータの交換を可能にするように前記他のハードウェアブロックのそれぞれの動作スケジュールに対して調整される、請求項1から4のいずれか一項に記載のデバイス。
【請求項6】
前記第1のハードウェアブロックは、
前記第1のスケジュールを記憶するように構成されたローカルメモリと、
前記ローカルメモリに結合され、前記第1のスケジュールの動作の前記第1のセットを実行するように構成された制御回路とを備える、請求項1から5のいずれか一項に記載のデバイス。
【請求項7】
前記制御回路は、前記第1のスケジュールの一部に含まれる動作を実行する前に前記一部を展開するように構成される、請求項6に記載のデバイス。
【請求項8】
前記集積回路デバイスは、特定用途向け集積回路である、請求項1から7のいずれか一項に記載のデバイス。
【請求項9】
前記第1のハードウェアブロックおよび前記第2のハードウェアブロックは、ニューラルネットワーク動作を実行するように構成された専用回路を含むハードウェアタイルである、請求項1から8のいずれか一項に記載のデバイス。
【請求項10】
前記第1のハードウェアブロックは、
セルの計算アレイと、
セルの前記計算アレイに結合されたローカルメモリとを備える、請求項9に記載のデバイス。
【請求項11】
前記第1のスケジュールおよび前記第2のスケジュールの各々は、前記集積回路デバイスによって実行されるプログラムの一部を含む、請求項1から10のいずれか一項に記載のデバイス。
【請求項12】
集積回路動作方法であって、
集積回路デバイスの第1のハードウェアブロックについて、前記第1のハードウェアブロックによって実行すべき動作の第1のセットを特定する第1のスケジュールを取得するステップと、
前記集積回路デバイスの第2のハードウェアブロックについて、前記第2のハードウェアブロックによって実行すべき動作の第2のセットを特定する第2のスケジュールを取得するステップであって、前記第2のスケジュールの動作が、前記第1のスケジュールの動作に対して調整され、それによって、前記第1のスケジュールが前記第1のハードウェアブロックをトリガしてカウンタの第1の事前スケジュールされた値において前記第2のブロックにデータを送り、前記第2のスケジュールが前記第2のハードウェアブロックをトリガして、前記第1の事前スケジュールされた値の後に続く前記カウンタの第2の事前スケジュールされた値において入力で前記データを受け入れる、ステップと、
前記第1のハードウェアブロックによって、前記第1のスケジュールに従って動作の前記第1のセットを実行するステップと、
前記第2のハードウェアブロックによって、前記第2のスケジュールに従って動作の前記第2のセットを実行するステップとを含む方法。
【請求項13】
前記第1のスケジュールおよび前記第2のスケジュールの各々は、前記集積回路デバイスによって実行されるプログラムの一部を含む、請求項12に記載の方法。
【請求項14】
動作の前記第1のセットおよび動作の前記第2のセットの各々は、機械学習プログラムのそれぞれの部分を含む、請求項12または13のいずれか一項に記載の方法。
【請求項15】
動作の前記第1のセットにおける各動作は、所定数のクロックサイクルで実行される、請求項12から14のいずれか一項に記載の方法。
【請求項16】
前記第1のスケジュールおよび前記第2のスケジュールの動作は、フロー制御信号とは無関係に前記第1のハードウェアブロックと前記第2のハードウェアブロックとの間におけるデータの交換を可能にするように調整される、請求項12から15のいずれか一項に記載の方法。
【請求項17】
前記第1のハードウェアブロックによって、前記第1のスケジュールの一部に含まれる動作を実行する前に前記一部を展開するステップをさらに含む、請求項12から16のいずれか一項に記載の方法。
【請求項18】
前記第1のスケジュールは、動作の前記第1のセットにおける動作ごとに、スケジュールされたカウンタ値と、前記スケジュールされたカウンタ値において前記第1のハードウェアブロックによって実行すべき特定の動作を示すデータとを含む、請求項12から17のいずれか一項に記載の方法。
【請求項19】
前記第1のハードウェアブロックによって、前記第1のスケジュールに従って動作の前記第1のセットを実行するステップは、
動作の前記第1のセットにおける第1の動作の第1のスケジュールされたカウンタ値と等しい第1のカウンタ値をカウンタから受信するステップと、
前記第1のカウンタ値を受信したことに応じて、前記第1のハードウェアブロックの1つまたは複数の計算ユニットの第1のセットに前記第1の動作を実行させるステップと、
動作の前記第1のセットにおける第2の動作の第2のスケジュールされたカウンタ値と等しい第2のカウンタ値を前記カウンタから受信するステップと、
前記第2のカウンタ値を受信したことに応じて、前記第1のハードウェアブロックの1つまたは複数の計算ユニットの第2のセットに前記第2の動作を実行させるステップとを含む、請求項12から18のいずれか一項に記載の方法。
【請求項20】
前記第1のハードウェアブロックおよび前記第2のハードウェアブロックは、ニューラルネットワーク動作を実行するように構成された専用回路を含むハードウェアタイルである、請求項12から19のいずれか一項に記載の方法。
【請求項21】
集積回路デバイスであって、
動作の第1のセットを含む第1のスケジュールに従って動作するように構成された第1のハードウェアブロックであって、前記各動作が、それぞれの事前スケジュールされた時間において前記第1のハードウェアブロックによって実行されるようにスケジュールされ、前記第1のハードウェアブロックが複数のセルを備える計算アレイを備え、前記複数のセルの各セルが、積和演算を実行するように構成される第1のハードウェアブロックと、
前記第1のハードウェアブロックに通信可能に結合された第2のハードウェアブロックであって、動作の第2のセットを含む第2のスケジュールに従って動作するように構成され、前記各動作が、それぞれの事前スケジュールされた時間において前記第2のハードウェアブロックによって実行されるようにスケジュールされる第2のハードウェアブロックと、
前記第1のスケジュールおよび前記第2のスケジュールを生成するように構成されたコンパイラとを備え、
前記第1のスケジュールの動作の前記第1のセットは、前記第1のハードウェアブロックと前記第2のハードウェアブロックとの間におけるデータ転送を可能にするように前記第2のスケジュールの動作の前記第2のセットに対して調整され、
前記第1のスケジュールおよび前記第2のスケジュールの各々はそれぞれ、前記集積回路デバイス全体によって実行すべきニューラルネットワークプログラムの一部を表す集積回路デバイス。
【請求項22】
動作の前記第1のセットおよび動作の前記第2のセットは、機械学習プログラムのそれぞれの部分を含む、請求項21に記載の集積回路デバイス。
【請求項23】
動作の前記第1のセットにおける各動作は、所定数のクロックサイクルで実行される、請求項21または22のいずれか一項に記載の集積回路デバイス。
【請求項24】
少なくとも1つの他のハードウェアブロックをさらに備え、前記第1のスケジュールの動作は、前記第1のハードウェアブロックと前記少なくとも1つの他のハードウェアブロックとの間におけるデータ転送を可能にするように前記少なくとも1つの他のハードウェアブロックのそれぞれの動作スケジュールに対して調整される、請求項21から23のいずれか一項に記載の集積回路デバイス。
【請求項25】
前記少なくとも1つの他のハードウェアブロックは、スカラ演算を実行するように構成された回路を備える、請求項24に記載の集積回路デバイス。
【請求項26】
前記少なくとも1つの他のハードウェアブロックは、ベクトル演算を実行するように構成された回路を備える、請求項24に記載の集積回路デバイス。
【請求項27】
前記第1のハードウェアブロックの前記計算アレイは、行列演算を実行するように構成された回路を備え、前記第2のハードウェアブロックは、メモリアクセス動作を実行するように構成された回路を備える、請求項21から26のいずれか一項に記載の集積回路デバイス。
【請求項28】
前記第2のハードウェアブロックは、動作の前記第1のスケジュールを記憶する、請求項27に記載の集積回路デバイス。
【請求項29】
前記第1のハードウェアブロックは、前記計算アレイの出力を前記第2のハードウェアブロックに転送するように構成される、請求項27に記載の集積回路デバイス。
【請求項30】
前記第1のハードウェアブロックおよび前記第2のハードウェアブロックは、ニューラルネットワーク動作を実行するように構成された専用回路を含むハードウェアタイルである、請求項21から29のいずれか一項に記載の集積回路デバイス。
【請求項31】
集積回路動作方法であって、
集積回路デバイスのコンパイラによって、動作の第1のセットを含む第1のスケジュールを生成するステップであって、前記各動作が、第1のハードウェアブロックによってそれぞれの事前スケジュールされた時間に実行されるようにスケジュールされる、ステップと、
前記コンパイラによって、動作の第2のセットを含む第2のスケジュールを生成するステップであって、前記各動作が、第2のハードウェアブロックによってそれぞれの事前スケジュールされた時間に実行されるようにスケジュールされる、ステップと、
前記第1のハードウェアブロックによって、前記第1のスケジュールに従って動作の前記第1のセットを実行するステップであって、前記第1のハードウェアブロックが、複数のセルを備える計算アレイを備え、前記複数のセルの各セルが、積和演算を実行するように構成される、ステップと、
前記集積回路デバイスの前記第2のハードウェアブロックによって、前記第2のスケジュールに従って動作の前記第2のセットを実行するステップとを含み、
前記第1のスケジュールおよび前記第2のスケジュールの各々はそれぞれ、前記集積回路デバイスによって全体として実行すべきニューラルネットワークプログラムの一部を表す方法。
【請求項32】
動作の前記第1のセットおよび動作の前記第2のセットは、機械学習プログラムのそれぞれの部分を含む、請求項31に記載の方法。
【請求項33】
動作の前記第1のセットにおける各動作は、所定数のクロックサイクルで実行される、請求項31または32のいずれか一項に記載の方法。
【請求項34】
前記集積回路は、少なくとも1つの他のハードウェアブロックを備え、前記第1のスケジュールの動作は、前記第1のハードウェアブロックと前記少なくとも1つの他のハードウェアブロックとの間におけるデータ転送を可能にするように前記少なくとも1つの他のハードウェアブロックのそれぞれの動作スケジュールに対して調整される、請求項31から33のいずれか一項に記載の方法。
【請求項35】
前記少なくとも1つの他のハードウェアブロックは、スカラ演算を実行するように構成された回路を備える、請求項34に記載の方法。
【請求項36】
前記少なくとも1つの他のハードウェアブロックは、ベクトル演算を実行するように構成された回路を備える、請求項34に記載の方法。
【請求項37】
前記第1のハードウェアブロックの前記計算アレイは、行列演算を実行するように構成された回路を備え、前記第2のハードウェアブロックは、メモリアクセス動作を実行するように構成された回路を備える、請求項31から36のいずれか一項に記載の方法。
【請求項38】
前記第2のハードウェアブロックによって、動作の前記第1のスケジュールを記憶するステップを含む、請求項37に記載の方法。
【請求項39】
前記第1のハードウェアブロックによって、前記第1のハードウェアブロックの前記計算アレイの出力を前記第2のハードウェアブロックに転送するステップを含む、請求項37に記載の方法。
【請求項40】
前記第1のハードウェアブロックおよび前記第2のハードウェアブロックは、ニューラルネットワーク動作を実行するように構成された専用回路を含むハードウェアタイルである、請求項31から39のいずれか一項に記載の方法。
【請求項41】
第1のハードウェアブロックと第2のハードウェアブロックとを備える集積回路デバイスによって実行されたときに、前記集積回路に請求項12から20または31から40のいずれか一項に記載の方法を実行させるコンピュータ可読コードを含むコンピュータプログラム製品。
【請求項42】
先入れ先出し(FIFO)バッファを備える通信インターフェースであって、1つまたは複数の外部デバイスから入力データを受信し、前記1つまたは複数の外部デバイスからの通信の限界遅延に基づく時間間隔で前記FIFOバッファから入力データにアクセスするための指示を含む第3のスケジュールに従って動作するように構成された通信インターフェースをさらに備える、請求項1から11または21から30のいずれか一項に記載の集積回路デバイス。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、集積回路動作と、様々な集積回路ハードウェアブロックの個別の動作の明示的なスケジューリングに関する。
【背景技術】
【0002】
プロセッサおよびマイクロコントローラチップは、ソフトウェアプログラムによって制御されることが多い。これらのプログラムは、反復ループにおいて順次実行される動作のリストを含む。いくつかのソフトウェアサブルーチンは、入力値の変更または外部もしくは内部割込み信号のトリガに応じて開始される。ソフトウェアプログラムおよびサブルーチンは一般に、データをルーティングし、チップ上の他の機能ユニットを制御してプログラムされた動作の一部を実行する中央制御回路によって実行される。
【発明の概要】
【課題を解決するための手段】
【0003】
一般に、いくつかの態様では、本開示の主題は、集積回路デバイスの第1のハードウェアブロックについての第1のスケジュールを取得するアクションを含む方法において実施することができ、第1のスケジュールは、第1のハードウェアブロックによって実行すべき動作の第1のセットを特定する。アクションには、集積回路デバイスの第2のハードウェアブロックについて第2のスケジュールを取得するアクションが含まれ、第2のスケジュールは、第2のハードウェアブロックによって実行すべき動作の第2のセットを特定し、第2のスケジュールの動作は、第1のスケジュールの動作に対して調整され、それによって、第1のスケジュールが第1のハードウェアブロックをトリガしてカウンタの第1の事前スケジュールされた値において第2のブロックにデータを送り、第2のスケジュールが第2のハードウェアブロックをトリガして、第1の事前スケジュールされた値の後に続くカウンタの第2の事前スケジュールされた値において入力でデータを受け入れる。アクションには、第1のハードウェアブロックによって、第1のスケジュールに従って動作の第1のセットを実行するアクションと、第2のハードウェアブロックによって、第2のスケジュールに従って動作の第2のセットを実行するアクションとが含まれる。この態様の他の実装形態は、コンピュータストレージデバイス上に符号化された方法のアクションを実行するように構成された対応するシステム、装置、およびコンピュータプログラムを含む。これらおよび他の実装形態の各々は、場合によっては、以下の特徴のうちの1つまたは複数を含むことができる。
【0004】
いくつかの実装形態では、第1のスケジュールおよび第2のスケジュールの各々は、集積回路デバイスによって実行されるプログラムの一部を含む。
【0005】
いくつかの実装形態では、動作の第1のセットおよび動作の第2のセットの各々は、機械学習プログラムのそれぞれの部分を含む。
【0006】
いくつかの実装形態では、動作の第1のセットにおける各動作は、所定数のクロックサイクルで実行される。
【0007】
いくつかの実装形態では、第1のスケジュールおよび第2のスケジュールの動作は、フロー制御信号とは無関係に第1のハードウェアブロックと第2のハードウェアブロックとの間におけるデータの交換を可能にするように調整される。
【0008】
いくつかの実装形態では、アクションには、第1のハードウェアブロックによって、第1のスケジュールの一部に含まれる動作を実行する前にその部分を展開するアクションが含まれる。
【0009】
いくつかの実装形態では、第1のスケジュールは、動作の第1のセットにおける動作ごとに、スケジュールされたカウンタ値と、スケジュールされたカウンタ値において第1のハードウェアブロックによって実行すべき特定の動作を示すデータとを含む。
【0010】
いくつかの実装形態では、第1のハードウェアブロックによって、第1のスケジュールに従って動作の第1のセットを実行するアクションには、動作の第1のセットにおける第1の動作の第1のスケジュールされたカウンタ値と等しい第1のカウンタ値をカウンタから受信するアクションと、第1のカウンタ値を受信したことに応答して、第1のハードウェアブロックの1つまたは複数の計算ユニットの第1のセットに第1の動作を実行させるアクションと、動作の第1のセットにおける第2の動作の第2のスケジュールされたカウンタ値と等しい第2のカウンタ値をカウンタから受信するアクションと、第2のカウンタ値を受信したことに応答して、第1のハードウェアブロックの1つまたは複数の計算ユニットの第2のセットに第2の動作を実行させるアクションとが含まれる。
【0011】
いくつかの実装形態では、第1のハードウェアブロックおよび第2のハードウェアブロックは、ニューラルネットワーク動作を実行するように構成された専用回路を含むハードウェアタイルである。
【0012】
別の一般的な態様は、カウンタと、カウンタに通信可能に結合された第1のハードウェアブロックと、カウンタおよび第1のハードウェアブロックに通信可能に結合された第2のハードウェアブロックとを含む集積回路デバイスにおいて具体化することができる。第1のハードウェアブロックは、各動作が、カウンタの第2のそれぞれの値において第1のハードウェアブロックによって実行されるようにスケジュールされた動作の第1のセットを含む第1のスケジュールに従って動作するように構成される。第2のハードウェアブロックは、各動作が、カウンタの第1のそれぞれの値において第2のハードウェアブロックによって実行されるようにスケジュールされた動作の第2のセットを含む第2のスケジュールに従って動作するように構成される。第2のスケジュールの動作は、第1のスケジュールの動作に対して調整され、それによって、第1のスケジュールが第1のハードウェアブロックをトリガしてカウンタの第1の事前スケジュールされた値において第2のハードウェアブロックにデータを送り、第2のスケジュールが第2のハードウェアブロックをトリガして、第1の事前スケジュールされた値の後に続くカウンタの第2の事前スケジュールされた値において入力でデータを受け入れる。このおよび他の実装形態の各々は、場合によっては、以下の特徴のうちの1つまたは複数を含むことができる。
【0013】
いくつかの実装形態では、動作の第1のセットおよび動作の第2のセットの各々は、機械学習プログラムのそれぞれの部分を含む。
【0014】
いくつかの実装形態では、動作の第1のセットにおける各動作は、所定数のクロックサイクルで実行される。
【0015】
いくつかの実装形態では、第1のスケジュールおよび第2のスケジュールの動作は、フロー制御信号とは無関係に第1のハードウェアブロックと第2のハードウェアブロックとの間におけるデータの交換を可能にするように調整される。
【0016】
いくつかの実装形態では、集積回路デバイスは、複数の他のハードウェアブロックを含み、第1のスケジュールの動作は、他のハードウェアブロックのそれぞれの動作スケジュールに対して調整され、それによって、データフロー制御信号とは無関係に第1のハードウェアブロックと他のハードウェアブロックのうちの1つまたは複数との間におけるデータの交換を可能にする。
【0017】
いくつかの実装形態では、第1のハードウェアブロックは、第1のスケジュールを記憶するように構成されたローカルメモリと、ローカルメモリに結合され、第1のスケジュールの動作の第1のセットを実行するように構成された制御回路とを含む。いくつかの実装形態では、制御回路は、第1のスケジュールの一部に含まれる動作を実行する前にその部分を展開するように構成される。
【0018】
いくつかの実装形態では、集積回路デバイスは、特定用途向け集積回路である。
【0019】
いくつかの実装形態では、第1のハードウェアブロックおよび第2のハードウェアブロックは、ニューラルネットワーク動作を実行するように構成された専用回路を含むハードウェアタイルである。いくつかの実装形態では、第1のハードウェアブロックは、セルの計算アレイと、セルの計算アレイに結合されたローカルメモリとを含む。
【0020】
いくつかの実装形態では、第1のスケジュールおよび第2のスケジュールの各々は、集積回路デバイスによって実行されるプログラムの一部を含む。
【0021】
第3の一般的な態様は、第1のハードウェアブロックと、第2のハードウェアブロックと、コンパイラとを含む集積回路デバイスにおいて具体化することができる。第1のハードウェアブロックは、各動作が、第1のハードウェアブロックによってそれぞれの事前スケジュールされた時間において実行されるようにスケジュールされた動作の第1のセットを含む第1のスケジュールに従って動作するように構成される。第1のハードウェアブロックは、複数のセルを備える計算アレイを含み、複数のセルの各セルは、積和演算を実行するように構成される。第2のハードウェアブロックは、第1のハードウェアブロックに通信可能に結合される。第2のハードウェアブロックは、各動作が、第2のハードウェアブロックによってそれぞれの事前スケジュールされた時間において実行されるようにスケジュールされた動作の第2のセットを含む第2のスケジュールに従って動作するように構成される。コンパイラは、第1のスケジュールおよび第2のスケジュールを生成するように構成され、第1のスケジュールの動作の第1のセットは、第2のスケジュールの動作の第2のセットに対して調整され、それによって、第1のハードウェアブロックと第2のハードウェアブロックとの間におけるデータ転送が可能になり、第1のスケジュールおよび第2のスケジュールの各々はそれぞれ、集積回路デバイス全体によって実行すべきニューラルネットワークプログラムの一部を表す。
【0022】
いくつかの実装形態では、動作の第1のセットおよび動作の第2のセットは、機械学習プログラムのそれぞれの部分を含む。
【0023】
いくつかの実装形態では、動作の第1のセットにおける各動作は、所定数のクロックサイクルで実行される。
【0024】
いくつかの実装形態は、少なくとも1つの他のハードウェアブロックを含み、第1のスケジュールの動作は、第1のハードウェアブロックと少なくとも1つの他のハードウェアブロックとの間におけるデータ転送を可能にするように少なくとも1つの他のハードウェアブロックのそれぞれの動作スケジュールに対して調整される。いくつかの実装形態では、少なくとも1つの他のハードウェアブロックは、スカラ演算を実行するように構成された回路を含む。いくつかの実装形態では、少なくとも1つの他のハードウェアブロックは、ベクトル演算を実行するように構成された回路を含む。
【0025】
いくつかの実装形態では、第1のハードウェアブロックの計算アレイは、行列演算を実行するように構成された回路を含み、第2のハードウェアブロックは、メモリアクセス動作を実行するように構成された回路を含む。いくつかの実装形態では、第2のハードウェアブロックは、動作の第1のスケジュールを記憶する。いくつかの実装形態では、第1のハードウェアブロックは、計算アレイの出力を第2のハードウェアブロックに転送するように構成される。
【0026】
いくつかの実装形態では、第1のハードウェアブロックおよび第2のハードウェアブロックは、ニューラルネットワーク動作を実行するように構成された専用回路を含むハードウェアタイルである。
【0027】
第4の一般的な態様は、集積回路デバイスのコンパイラによって、各動作が、第1のハードウェアブロックによってそれぞれの事前スケジュールされた時間に実行されるようにスケジュールされた動作の第1のセットを含む第1のスケジュールを生成するアクションを含む方法において具体化することができる。アクションは、各動作が、第2のハードウェアブロックによってそれぞれの事前スケジュールされた時間に実行されるようにスケジュールされた動作の第2のセットを含む第2のスケジュールをコンパイラによって生成するアクションを含む。アクションは、第1のハードウェアブロックによって、第1のスケジュールに従って動作の第1のセットを実行するアクションを含み、第1のハードウェアブロックは、複数のセルを備える計算アレイを含み、複数のセルの各セルは、積和演算を実行するように構成される。アクションには、集積回路デバイスの第2のハードウェアブロックによって、第2のスケジュールに従って動作の第2のセットを実行するアクションが含まれ、第1のスケジュールおよび第2のスケジュールの各々はそれぞれ、集積回路デバイス全体によって実行すべきニューラルネットワークプログラムの一部を表す。
【0028】
いくつかの実装形態では、動作の第1のセットおよび動作の第2のセットは、機械学習プログラムのそれぞれの部分を含む。
【0029】
いくつかの実装形態では、動作の第1のセットにおける各動作は、所定数のクロックサイクルで実行される。
【0030】
いくつかの実装形態では、集積回路は、少なくとも1つの他のハードウェアブロックを含み、第1のスケジュールの動作は、第1のハードウェアブロックと少なくとも1つの他のハードウェアブロックとの間におけるデータ転送を可能にするように少なくとも1つの他のハードウェアブロックのそれぞれの動作スケジュールに対して調整される。いくつかの実装形態では、少なくとも1つの他のハードウェアブロックは、スカラ演算を実行するように構成された回路を含む。いくつかの実装形態では、少なくとも1つの他のハードウェアブロックは、ベクトル演算を実行するように構成された回路を含む。
【0031】
いくつかの実装形態では、第1のハードウェアブロックの計算アレイは、行列演算を実行するように構成された回路を含み、第2のハードウェアブロックは、メモリアクセス動作を実行するように構成された回路を含む。
【0032】
いくつかの実装形態では、アクションには、第2のハードウェアブロックによって、動作の第1のスケジュールを記憶するアクションが含まれる。
【0033】
いくつかの実装形態では、アクションには、第1のハードウェアブロックによって、第1のハードウェアブロックの計算アレイの出力を第2のハードウェアブロックに転送するアクションが含まれる。
【0034】
いくつかの実装形態では、第1のハードウェアブロックおよび第2のハードウェアブロックは、ニューラルネットワーク動作を実行するように構成された専用回路を含むハードウェアタイルである。
【0035】
様々な実装形態は、以下の利点のうちの1つまたは複数を含む。たとえば、いくつかの実装形態では、明示的にスケジュールされたチップ動作が、チップ制御論理を書き込む場合の効率および精度を向上させることができる。たとえば、明示的にスケジュールされたチップ動作は、機械学習動作などの計算量の多い動作に対するチップ動作をより明確に決定する。動作がより明確に決定されると、ハードウェア制御試験およびデバッギングをより正確に実行することができる。
【0036】
別の例として、確定的スケジューリングを使用すると、ハードウェアの計算量が低減することがある。たとえば、あらゆる動作のタイミングがスケジューリングによって事前にわかっているので、動作をソフトウェアにおいて正確にかつ大域的に調整することができる。大域的な知識は、ハードウェアでは実現不能であり、したがって、スケジューリングの質はソフトウェアにおいて実現され、ハードウェアにおいてスケジューリング動作を実施する必要が低下すると、ハードウェアがより単純になる。
【0037】
確定的スケジューリングはまた、デバッギングプロセスを向上させることがある。たとえば、確定的スケジューリングを使用することは、実際のハードウェアが同様に作動することを認識するシミュレータ上のハードウェアのプログラミングをデバッグできることを意味する。
【0038】
本発明の1つまたは複数の実施形態の詳細は、添付の図面および以下の説明に示されている。他の特徴および利点は、説明、図面、および特許請求の範囲から明らかになろう。
【図面の簡単な説明】
【0039】
図1】スケジュールされた動作に従って動作するように構成された例示的な集積回路デバイスを示す概略図である。
図2A図1の集積回路デバイスのハードウェアブロックについての動作スケジュール間の例示的な調整済み動作を示すタイミング図である。
図2B】動作スケジュールの実行時における図1の集積回路デバイス内の例示的なデータフローを示す一連の図である。
図3】スケジュールされた動作に従って動作するように構成できる専用論理回路の例を示す概略図である。
図4図3のASICチップにおいて使用されるタイルの例を示す概略図である。
図5A】ASICによって実施される例示的なプロセスのそれぞれに異なる時間におけるASICによるデータフローの概要を示す概略図である。
図6A】ASICによって実施される例示的なプロセスのそれぞれに異なる時間におけるASICによるデータフローの概要を示す概略図である。
図7A】ASICによって実施される例示的なプロセスのそれぞれに異なる時間におけるASICによるデータフローの概要を示す概略図である。
図8A】ASICによって実施される例示的なプロセスのそれぞれに異なる時間におけるASICによるデータフローの概要を示す概略図である。
図9】ASICによって実施される例示的なプロセスのそれぞれに異なる時間におけるASICによるデータフローの概要を示す概略図である。
図10A】ASICによって実施される例示的なプロセスのそれぞれに異なる時間におけるASICによるデータフローの概要を示す概略図である。
図11A】ASICによって実施される例示的なプロセスのそれぞれに異なる時間におけるASICによるデータフローの概要を示す概略図である。
図5B図5Aに関連する時間におけるASICの単一のタイル内のデータフローの詳細を示す概略図である。
図6B図6Aに関連する時間におけるASICの単一のタイル内のデータフローの詳細を示す概略図である。
図7B図7Aに関連する時間におけるASICの単一のタイル内のデータフローの詳細を示す概略図である。
図8B図8Aに関連する時間におけるASICの単一のタイル内のデータフローの詳細を示す概略図である。
図10B図10Aに関連する時間におけるASICの単一のタイル内のデータフローの詳細を示す概略図である。
図11B図11Aに関連する時間におけるASICの単一のタイル内のデータフローの詳細を示す概略図である。
【発明を実施するための形態】
【0040】
概して、本開示は、時間スケジュールされた動作に従って半導体デバイスによって動作を実行することに関する。より具体的には、本開示は、半導体チップによって実行される調整済みプログラムを全体として実行するように個別化された動作スケジュールに従って動作する個別のハードウェアブロックを含む半導体チップに関する。言い換えると、個別のハードウェアブロックは、たとえば、制御信号に応答してまたはプロセス命令のスケジュールされない連番リストに従って動作を実行するのではなく、共通のクロック(たとえば、カウンタ)に従ってスケジュールされた時間においてそれぞれの動作を実行する。たとえば、チップは、いくつかのハードウェアブロックを含む。各ハードウェアブロックは、他のハードウェアブロックによって実行されるタスクとは無関係にタスクの特定のセットを実行するように設計されたチップ上の電気回路(たとえば、論理回路)のサブセットなどの複製された論理の関連するセットを表す。ハードウェアブロックは、限定はしないが、行列演算、ベクトル演算、スカラ演算、論理演算、メモリアクセス動作、外部通信動作、またはそれらの組合せを含む動作を実行するように構成することができる。
【0041】
各ハードウェアブロックは、ハードウェアブロック固有の動作の個別のスケジュールを実行する。各ハードウェアブロックについての個別のスケジュールは合わせて、チップ全体によって実行される完全なプログラム(たとえば、ニューラルネットワーク動作)を表す。各スケジュールは、個別のハードウェアブロックによって特定のカウンタ時間において実行されるようにスケジュールされる一連の動作を含む。たとえば、ハードウェアブロックの各々は、チップ上の共通のクロックの現在のカウンタ値に基づいてそれぞれのスケジュールにおける動作を実行することができる。
【0042】
さらに、スケジュールは、フロー制御論理の必要なしに様々なハードウェアブロック間のデータ転送を調整するように構成される。たとえば、第1のハードウェアブロックについての第1のスケジュールの動作は、第1のハードウェアブロックが第2のハードウェアブロックにデータを送るための第1のスケジュールにおける動作が、第2のハードウェアブロックが入力バッファからデータを読み取り、そのデータに対して作用することを必要とする第2のスケジュールにおける動作に対応するようにタイミングを調整されるように第2のハードウェアブロックについての第2のスケジュールの動作に対して調整される。言い換えれば、個別のスケジュールの動作は、ハードウェアブロック間のデータ転送を従来のフロー制御論理とは無関係に実行できるように調整される。すなわち、調整済みスケジュール自体が、内部バス上のデータ衝突および/またはデータバッファオーバフローなどの通信エラーを妨げる働きをする。いくつかの実施形態では、ハードウェアブロック動作の確定的調整およびハードウェアブロック動作の事前スケジューリングが、ある動作がチップ上でいつ行われるかを正確に知るのを可能にする。確定的スケジューリングプロセスは、たとえば、デバッギング動作を実行できる場合の容易さおよび効率を向上させることがあるので、非確定的チップ動作に対して有利である場合がある。
【0043】
いくつかの実装形態では、半導体チップは、機械学習動作を実行するように設計された特定用途向け集積回路(ASIC)である。ASICは、たとえば、特定の用途向けにカスタマイズされた集積回路(IC)を含む。たとえば、ASICは、たとえば、画像内の物体をディープニューラルネットワーク、機械翻訳、音声認識、または他の機械学習アルゴリズムの一部として認識することを含む、機械学習モデルの動作を実行するように設計されてもよい。ASICは、たとえば、ニューラルネットワーク用のアクセラレータとして使用されるとき、ニューラルネットワークへの入力を受信し、入力用のニューラルネットワーク推論を算出することができる。ニューラルネットワーク層へのデータ入力、たとえば、ニューラルネットワークへの入力またはニューラルネットワークの別の層の出力のいずれかを作動入力と呼ぶことができる。推論は、ニューラルネットワークの層に関連する重み入力のそれぞれのセットに従って算出することができる。たとえば、いくつかまたはすべての層は、作動入力のセットを受信し、層についての重み入力のセットに従って作動入力を処理して出力を生成してもよい。さらに、ニューラルネットワーク推論を算出するように実行される演算動作の反復性が、明示的にスケジュールされたチップ動作を促進する。
【0044】
図1は、スケジュールされた動作に従って動作するように構成された集積回路チップ10の簡略化された例を示す概略図である。チップ10は、汎用集積回路または専用集積回路とすることができる。たとえば、チップ10は、ASIC、フィールドプログラマブルゲートアレイ(FPGA)、グラフィックス処理ユニット(GPU)、または任意の他の適切な集積回路とすることができる。チップ10は、複数のハードウェアブロック12と、カウンタ14と、共有データバス16とを含む。チップ10は、図示および説明のために簡略的に示されているが、実装時には、チップ10は、通信インターフェース、メモリ、およびチップ10の目的に適切な他の回路などの追加の構成要素を含む。
【0045】
ハードウェアブロック12は、他のハードウェアブロック12によって実行されるタスクとは無関係にタスクの特定のセットを実行するように設計されたチップ10上の電気回路(たとえば、論理回路)のサブセットなどの複製された論理の関連するセットを表す。さらに、各ハードウェアブロック12は、様々な種類の回路を表すことができ、たとえば、ハードウェアブロックAは、チップ10とチップ10の外部の他の半導体構成要素との間でデータを転送するように構成された通信インターフェースを表すことができる。ハードウェアブロックBおよびハードウェアブロックCは、機械学習機能(以下でより詳しく説明する)を実行するように設計された専用チップの「タイル」を表すことができる。たとえば、ハードウェアブロックBおよびハードウェアブロックCは、行列演算を実行するように構成されたニューラルネットワークの計算ノードを表すことができる。
【0046】
カウンタ14は、チップ10上の共通クロック信号に従って増分する。カウンタ14は、たとえば、24ビット、32ビット、または他のサイズの同期カウンタとすることができる。カウンタ14は、各々の個別のハードウェアブロック12の明示的にスケジュールされた動作を同期させるためにチップカウンタ値、たとえば、「チップ時間」をハードウェアブロック12に出力する。いくつかの実装形態では、各ハードウェアブロック12は、チップ10用の単一のカウンタ14ではなく個別のカウンタ14を有する。個別のカウンタは、チップ10上の共通クロックによって同期させることができる。さらに、個別のカウンタのカウンタ値を、たとえばチップ上の共通リセット信号によって同期させることができる。
【0047】
各ハードウェアブロック12は、それ自体の個別化された動作スケジュール18に従って動作する。動作スケジュール18の各々は、チップ10全体によって実行すべきプログラムの一部を表し、各動作スケジュール18は、個別のハードウェアブロック12によって実行すべきプログラムのその部分を個別に表す。動作スケジュール18は、ハードウェアブロックによって所定のカウンタ値において実行すべき動作のセットを含む。言い換えれば、動作スケジュール18は、特定のハードウェアブロック12によって事前スケジュールされた「チップ時間」において実行すべき特定の動作をトリガするリストタイマと見なすことができる。たとえば、各スケジュール18は、カウンタ値において実行すべき関連する動作を含む実行カウンタ値(たとえば、実行時間)のリストを含むことができる。いくつかの例では、動作スケジュール18における各動作は、スケジュールされたカウンタ値、および特定のハードウェアブロック12によってスケジュールされたカウンタ値において実行すべき動作を特定する命令コードなどのデータによって表される。
【0048】
各スケジュール18の動作は、共有リソース(たとえば、データバス16)のダブルブッキングなどのエラーを回避するようにすべての他のスケジュールと調整される。各スケジュール18の動作はまた、フロー制御論理(たとえば、割込み信号など)とは無関係にハードウェアブロック12間のデータ転送を可能にするように調整される。たとえば、2つのハードウェアブロック12間のデータ転送は、受信側ハードウェアブロック12が、1)送信側ハードウェアブロック10のスケジュールされた送信カウンタ値に基づいて正しいデータを確実に読取り時間に存在させ、2)受信側ハードウェアブロック12がバッファオーバフローよりも前にデータを読み取るようにスケジュールする(たとえば、読取りは、追加のデータが受信側ハードウェアブロック12に送られるようにスケジュールされる前にスケジュールされる)ことによって入力バッファオーバフローを防止するカウンタ値においてデータバスまたは入力バッファからデータを読み取るようにスケジュールされるようにスケジュールされる。
【0049】
個別化された動作スケジュール18は、ニューラルネットワークおよびグラフィック処理計算などの、計算量が多いか、反復が多いか、またはその両方である適用例に特に有用である。たとえば、チップ10上の個別のハードウェアブロック12について明示的に定義されたスケジュールを使用すると、スケジュールされた動作の各々が所定数のクロックサイクルで実行される確定的動作が促進され得る。
【0050】
チップ10のハードウェアブロック12についての動作スケジュール18は、プログラムコンパイラによって生成することができる。たとえば、コンパイラは、チップについてのプログラム全体を処理し、ハードウェア機能を特定することができる。このことは、プログラムを実行するためにチップ10上の時間増分ごとに行われる。コンパイラは、チップ10上のハードウェアブロック12ごとに機能を動作スケジュール18にパースすることができる。動作スケジュール18は次いで、チップ10上にロードされ、共通チップ10メモリに記憶することができ、または動作スケジュール18をそれぞれのハードウェアブロック12に関連するローカルメモリに分散させることができる。
【0051】
より詳細には、各ハードウェアブロック12は、制御回路20と、ローカルメモリ22と、1つまたは複数の計算ユニット24とを含むことができる。実装形態では、動作スケジュール18をハードウェアブロック12のローカルメモリ22に記憶することができる。演算ユニット24は、特定の計算、たとえば、加算、減算、乗算、論理演算などを実行するように構成された電気回路を表す。制御回路20は、動作スケジュール18の動作を読み取って実行するように構成することができる。たとえば、制御回路20は、スケジュールされた動作を実行するためにメモリ22、入力バッファ、またはバス16と適切な計算ユニット24との間でデータをルーティングするマルチプレクサおよびフリップフロップなどの制御要素を含むことができる。上述のように、動作スケジュール18は、制御回路20をトリガして特定のカウンタ値において特定の機能の実行を開始する一連のタイマとして働くことができる。したがって、動作スケジュール18は、制御回路20の制御要素をトリガしてハードウェアブロック12内のデータを適切な計算ユニット24にルーティングし、スケジュールされた時間にスケジュールされた動作を実行することができる。たとえば、「スケジュールC」を参照するとわかるように、カウンタ時間030において、動作スケジュール18は、制御回路20をトリガしてデータをメモリ22から適切な計算ユニット24にルーティングし、動作3(「Op. 3」)、たとえば、加算演算を実行してもよい。カウンタ時間043において、動作スケジュール18は、制御回路をトリガして加算演算の出力データをバス16にルーティングし、出力データを別のハードウェアブロック12に送信する。
【0052】
いくつかの実装形態では、動作スケジュール18は圧縮されてメモリリソースが節約される。そのような実装形態では、ハードウェアブロック12またはチップ上の他の回路は、動作スケジュール18の一部を、動作スケジュールのその部分が実行される前に展開することができる。たとえば、動作スケジュール18を圧縮してスケジュールにおける優先順位を利用することができる。たとえば、特定のスケジュールは、6サイクル期間のそれぞれに異なる位相上にスケジュールされた動作のセットを含んでもよい。次いで、スケジュールを周期的カウンタと(たとえば、位相に対する)遅延の組合せとして実施することができる。
【0053】
図2Aは、図1の集積回路チップ10のハードウェアブロック12についての動作スケジュール間の例示的な調整済み動作を示すタイミング図である。具体的には、このタイミング図は、データ転送動作が送信側ハードウェアブロックと受信側ハードウェアブロックとの間で同期されるようにハードウェアブロックA、B、およびCについての動作スケジュールがどのように調整されるかを示す。たとえば、カウンタ時間001~015を参照するとわかるように、ハードウェアブロックBは、所定数のクロックサイクル内にハードウェアブロックAからデータを受信するようにスケジュールされ、ハードウェアブロックAは、このクロックサイクルからデータを送信する。具体的には、カウンタ時間001において、ハードウェアブロックAは、ハードウェアブロックAの動作スケジュールに従って、ハードウェアブロックBへのデータ30の送信を開始する(図2B)。カウンタ時間001とカウンタ時間006の間に、ハードウェアブロックAは、データ30の送信を準備し開始する。時間006において、データがハードウェアブロックBに到着し始め、これは、ハードウェアブロックBの動作スケジュール上での、ハードウェアブロックBがデータへのアクセスを開始する事前スケジュールカウンタ時間である。時間006から時間015まで、データがハードウェアブロックAからハードウェアブロックBに伝播される。さらに、ハードウェアブロックAおよびハードウェアブロックBの動作スケジュールは、カウンタ時間001~0015の間にハードウェアブロックBによって受信されたデータが、ハードウェアブロックBがカウンタ時間016~062の間に実行するように事前スケジュールされた以後の動作(たとえば、Op. 1~Op 3)のうちの1つまたは複数の間にハードウェアブロックBが使用するデータになるように調整することができる。
【0054】
いくつかの実装形態では、ハードウェアブロックAとハードウェアブロックBとの間のデータ伝送経路は、ハードウェアブロックAがデータを送信する時間とハードウェアブロックBがデータを受信する時間との間に無視できない量のレイテンシ変動(たとえば、データ送信時間の変動)を含む場合がある。そのような遅延を相殺するために、ハードウェアブロックAが送信を開始する時間とハードウェアブロックBがデータへのアクセスを開始する時間との間の時間の一部は、ハードウェアブロックBがデータへのアクセスを開始したときまたはそれよりも前にデータがハードウェアブロックBに到着するように所定の遅延期間を含んでもよい。ハードウェアブロックB(およびハードウェアブロックのいずれかまたはすべて)は、データが(たとえば、レイテンシ変動に起因して)ハードウェアブロックBに1カウンタサイクル以上早く到着した場合に、データが失われず、ハードウェアブロックBが事前スケジュールされた受信動作を開始してバッファからデータにアクセスするときに直ちに利用可能になるように、データが受信されたときにデータを収集するための入力バッファを含むことができる。
【0055】
事前スケジュールされたデータ送信動作は、ハードウェアブロックBとハードウェアブロックCとの間およびハードウェアブロックCとハードウェアブロックAとの間でも同様に実行される。たとえば、カウンタ時間063-082を参照するとわかるように、ハードウェアブロックCは、所定数のクロックサイクルによってハードウェアブロックBからデータを受信するようにスケジュールされ、ハードウェアブロックBは、このクロックサイクルからデータを送信する。同様に、カウンタ時間131~148を参照するとわかるように、ハードウェアブロックAは、所定数のクロックサイクルによってハードウェアブロックCからデータを受信するようにスケジュールされ、ハードウェアブロックCは、このクロックサイクルからデータを送信する。
【0056】
図2Bは、動作スケジュール18を実行する間における図1の集積回路チップ10内の例示的なデータフローを示す一連の図を示す。この一連の動作は、ニューラルネットワークのアクティブ化データ30の簡略化されたフローを表すことができる。アクティブ化データ30は、通信インターフェース(たとえば、ハードウェアブロックA)によって受信される。通信インターフェース(ハードウェアブロックA)は、カウンタ時間001~015においてニューラルネットワークの入力層(たとえば、ハードウェアブロックB)にアクティブ化データ30を転送する。カウンタ時間015とカウンタ時間062の間に、入力層(ハードウェアブロックB)は、データに対して3回のスケジュールされた動作を実行する。次いで、入力層(ハードウェアブロックB)は、カウンタ時間063から入力層の出力データ32を出力層(たとえば、ハードウェアブロックC)に送信する。出力層(ハードウェアブロックC)は、カウンタ時間83からカウンタ時間130の間に入力層(ハードウェアブロックB)からの出力データ32に対して3回のスケジュールされた動作を実行する。最後に、出力層(ハードウェアブロックC)は、カウンタ時間131から、出力層の出力34を通信インターフェース(ハードウェアブロックA)に送り返し、出力34はたとえば、別のチップまたは他の外部リソースに送信される。さらに、図2Bにおける一連の図は、データバス16などの共有リソースへのアクセスを管理するうえで3つのハードウェアブロック12の調整済み動作スケジュール18をどのように使用することができるかを示す。データバス16を使用する各データ転送は、既知の利用可能な時間について事前スケジュールされる。さらに、データブロックの動作が事前スケジュールされ、確定的な動作であるので、共有リソースを伴うエラーは最小限に抑えられるはずである。
【0057】
動作スケジュールの使用について単一チップの動作の制御を参照して説明したが、同様のプロセスを個別のチップのシステムに適用することができる。すなわち、個別の動作スケジュールを同様に生成して、互いに同期させたチップのセットの同時動作を制御することができる。たとえば、互いに同期させたカウンタを有するチップのシステムの場合、各チップは、動作の明示的なスケジュールに従って動作を実行することができる。
【0058】
図3は、スケジュールされた動作に従って動作するように構成できる専用論理回路、具体的には、ASIC100の例を示す概略図である。ASIC100は、個別の動作スケジュールに従ってASIC100の動作全体を実行するように構成できる様々な異なる種類のハードウェアブロックを含む。個別の動作スケジュールに従って動作することができる例示的なハードウェアブロックには、タイル102と、ベクトル処理ユニット104と、通信インターフェース108とが含まれる。
【0059】
より詳細には、ASIC100は、タイル102のうちの1つまたは複数が、たとえば乗算演算および加算演算などの演算を実行するように構成された専用回路を含む。具体的には、各タイル102は、(たとえば、図1の計算ユニット24と同様の)セルの計算アレイを含むことができ、この計算アレイにおいて、各セルは、数学演算を実行するように構成される(たとえば、図4に示し、本明細書で説明する例示的なタイル200を参照されたい)。いくつかの実装形態では、タイル102は、格子パターンとして配置され、第1の次元101(たとえば、行)および第2の次元103(たとえば、列)に沿って配置される。たとえば、図3に示す例では、タイル102は4つの異なる部分(110a、110b、110c、110d)に分割され、各部分は、18x16個のタイルの格子状に配置された288個のタイルを含む。いくつかの実装形態では、図3に示すASIC100は、別個のタイルとして分割/配置されたセルの単一のシストリックアレイを含むとして理解されてもよく、この場合、各タイルは、セルのサブセット/サブアレイと、ローカルメモリと、バス線とを含む(たとえば、図4を参照されたい)。
【0060】
ASIC100はまた、ベクトル処理ユニット104を含んでもよい。ベクトル処理ユニット104は、タイル102から出力を受信し、タイル102から受信された出力に基づいてベクトル計算出力値を算出するように構成された回路を含む。たとえば、いくつかの実装形態では、ベクトル処理ユニット104は、タイル102から受信された出力に対して積和演算を実行するように構成された回路(たとえば、乗算器回路、加算器回路、シフタ、および/またはメモリ)を含む。代替的に、または追加として、ベクトル処理ユニット104は、タイル102の出力に非線形関数を適用するように構成された回路を含む。代替的に、または追加として、ベクトル処理ユニット104は、正規化値、併合値、またはその両方を生成する。ベクトル処理ユニットのベクトル計算出力は、1つまたは複数のタイルに記憶することができる。たとえば、ベクトル計算出力は、一意にタイル102に関連するメモリに記憶することができる。代替的に、または追加として、ベクトル処理ユニット104のベクトル計算出力は、たとえば、計算の出力として、ASIC100の外部の回路に転送することができる。さらに、タイル102およびベクトル処理ユニット104についての個別の動作スケジュールの動作は、ベクトル処理ユニット104へのタイル出力の転送を調整する。
【0061】
いくつかの実装形態では、ベクトル処理ユニット104はセグメント化され、それによって、各セグメントは、タイル102の対応する集合から出力を受信するように構成された回路を含み、受信された出力に基づいてベクトル計算出力を算出する。たとえば、図3に示す例では、ベクトル処理ユニット104は、第1の次元101に沿って広がる2つの行を含み、各行は、32個の列として配置された32個のセグメント106を含む。各セグメント106は、タイル102の対応する列からの出力(たとえば、積和)に基づいて、本明細書で説明するように、ベクトル計算を実行するように構成された回路(たとえば、乗算器回路、加算器回路、シフタ、および/またはメモリ)を含む。ベクトル処理ユニット104は、図3に示すようにタイル102の格子の中央に配置することができる。ベクトル処理ユニット104の他の配置も可能である。
【0062】
ASIC100は、通信インターフェース108(たとえば、インターフェース1010A、1010B)も含む。通信インターフェース108は、シリアライザ/デシリアライザ(SerDes)インターフェースの1つまたは複数のセットと汎用入出力(GPIO)インターフェースとを含む。SerDesインターフェースは、ASIC100に対する命令(たとえば、ASIC100の個別のハードウェアブロックに対する動作スケジュール)および/または入力データを受信し、データをASIC100から外部回路に出力するように構成される。たとえば、SerDesインターフェースは、通信インターフェース108内に含まれるSerDesインターフェースのセットを介して32Gbps、56Gbps、または任意の適切なデータレートでデータ(たとえば、動作スケジュールおよび/または入出力データ)を送受信するように構成することができる。たとえば、ASIC100は、オンにされたときにブートプログラムを実行してもよい。GPIOインターフェースは、特定の種類の機械学習モデルを実行するためにASIC100上に動作スケジュールをロードするために使用されてもよい。
【0063】
ASIC100は、ASICのように特定の動作スケジュールに従って動作しない外部回路またはシステムと通信してもよい。たとえば、外部システムの動作は、ASIC100の動作と完全に同期しなくてもよい。代替的にまたは追加として、外部の回路およびシステムとのデータ通信は、不規則な遅延を受けることがある。したがって、入力データは、不規則な間隔で通信インターフェース108に到着することがある。実装形態は、ASIC100内の先入れ先出し(FIFO)バッファ、限界データ到着遅延に基づいて通信インターフェース108のスケジューリング動作を実施すること、条件ベースの交代演算を実施すること、入力データパディングを実施すること、またはそれらの任意の組合せを含む、以下の特徴のうちの任意の1つまたは複数を組み込むことによって、そのような場合によっては不規則な通信に対応することができる。
【0064】
通信インターフェース108は、外部回路/システムから入力データを受信するためのFIFOバッファを含むことができる。たとえば、FIFOバッファは、ASIC100の指定された数の動作サイクル、たとえば、100サイクル、500サイクル、1000サイクル、または10000サイクルに十分な入力データを一時的に記憶するのに十分な大きさを有することができる。たとえば、ASIC100の各動作サイクルが1kBの入力データに依存する場合、500サイクルのFIFOバッファは名目上500kBになる。
【0065】
さらに、通信インターフェース108についての動作スケジュールは、ASIC100が現在または将来入力データを受信する予想される外部システムまたは特定の外部システムの限界到着遅延に基づくことができる。たとえば、外部システムについての予想される通信レイテンシを外部システムの動作変動などの追加の情報に基づいて推定し、次いで限界を定めることができる。通信インターフェース108は、外部システムについての最新予想到着遅延でFIFOバッファから入力データにアクセスするようにスケジュールすることができる。たとえば、通信インターフェース108は、通信インターフェース108に、外部システムについての最新予想到着遅延に対応する時間間隔でFIFOバッファからデータにアクセスするよう指示する動作スケジュールに従って動作することができる。外部システムが入力データを定期的な間隔または比較的定期的な時間間隔で送ると仮定すると、外部システムについて最新予想到着遅延でFIFOバッファを検査すると、ASIC100の各サイクルの間、たとえば、少なくとも通常動作の間入力データを処理に利用できることが合理的に保証される。
【0066】
いくつかの実装形態では、通信インターフェース108は、外部システムについての最新予想到着遅延でFIFOバッファにおいて入力データを検査し、データが存在しない場合にスケジュールされた代替動作を実行するようにスケジュールすることができる。たとえば、FIFOバッファに入力データが存在しない場合、通信インターフェース108は、ASIC100についての中断モードをトリガすることができる。通信インターフェース108は、他のハードウェアブロック、たとえばタイル102に代替遅延スケジュールを実行するよう通知することができる。遅延スケジュールは、指定された遅延期間についての一連のノーオペレーション命令を含むことができる。各ハードウェアブロックの遅延期間は、中断モードが終了し通常動作が再開するときにハードウェアブロック間の動作を適切に調整するように異なってもよい(たとえば、異なる数のノーオペレーション命令を含んでもよい)。いくつかの実装形態では、FIFOバッファ内の入力データがしきい値よりも少なくなった場合に中断モードをトリガすることができる。たとえば、しきい値は、FIFOバッファ容量の割合、たとえば、5%、10%、20%などとすることができる。
【0067】
いくつかの実装形態では、バッファが空であるかまたはしきい値よりも低下した場合にFIFOバッファ内のデータをパディングすることができる。たとえば、デフォルトデータ値を任意の受信された入力データに追加して、FIFOバッファにおける入力データが不十分であるときにASIC100が1サイクルまたは数サイクルにわたって動作を継続するのを可能にすることができる。たとえば、デフォルトデータは、ASIC100が初期設定期間である場合、たとえば、通常動作を開始する前にヌル値を含むことができる。初期設定期間の間、ヌルデータがASIC100によって算出された出力値に悪影響を与える可能性は低くなる場合がある。
【0068】
代替的に、たとえば、通常動作の間にパディングが必要とされる場合、前のASIC出力に基づくかまたは前の入力の補間に基づいてデフォルト値を算出することができる。たとえば、通信インターフェース108は、FIFOバッファが空になる前にFIFOバッファからの入力データをパディングデータとして記憶するか、またはFIFOバッファ内の入力データからパディングデータを補間するように構成することができる。別の例として、通信インターフェース108は、他のハードウェアブロックのサブセットに、FIFOバッファ内の入力データがしきい値よりも少なくなった場合に代替動作スケジュールを実行してデフォルトパディング値を与えるように通知するように構成することができる。たとえば、通信インターフェース108は、ASIC出力データを含むハードウェアブロックに、パディングデータとして使用すべき出力データを通信インターフェース108に送るように通知することができる。
【0069】
ASIC100は、通信インターフェース108、ベクトル処理ユニット104、および複数のタイル102間でデータを搬送するように構成された複数の制御可能バス線(たとえば、図4を参照されたい)をさらに含む。制御可能バス線は、たとえば、格子の第1の次元101(たとえば、行)と格子の第2の次元103(たとえば、列)の両方に沿って延びるワイヤを含む。第1の次元101に沿って延びる制御可能バス線の第1のサブセットは、第1の方向(たとえば、図3の右側)にデータを転送するように構成することができる。第1の次元101に沿って延びる制御可能バス線の第2のサブセットは、第2の方向(たとえば、図3の左側)にデータを転送するように構成することができる。第2の次元103に沿って延びる制御可能バス線の第1のサブセットは、第3の方向(たとえば、図3の上側)にデータを転送するように構成することができる。第2の次元103に沿って延びる制御可能バス線の第2のサブセットは、第4の方向(たとえば、図3の下側)にデータを転送するように構成することができる。上述のように、それぞれに異なるハードウェアブロックの個別の動作スケジュールは、ASIC100内の通信エラーを防止するために制御可能バス線などの共有リソースへのアクセスを調整することができる。
【0070】
各々の制御可能バス線は、クロック信号に従って各線に沿ってデータを搬送するために使用されるフリップフロップなどの複数のコンベア要素を含む。制御可能バス線を介してデータを転送することは、各クロックサイクルにおいて、制御可能バス線の第1のコンベア要素から制御可能バス線の第2の隣接するコンベア要素にデータをシフトすることを含むことができる。いくつかの実装形態では、データは、クロックサイクルの立上りまたは立下り時に制御可能なバス線を介して搬送される。たとえば、第1のクロックサイクルにおいて制御可能バス線の第1のコンベア要素(たとえば、フリップフロップ)上に存在するデータを第2のクロックサイクルにおいて制御可能バス線の第2のコンベア要素(たとえば、フリップフロップ)に転送することができる。いくつかの実装形態では、コンベア要素同士を周期的に互いに一定距離離間することができる。たとえば、場合によっては、各々の制御可能バス線は、複数のコンベア要素を含み、各コンベア要素は、対応するタイル102内に配置されるかまたは対応するタイル102に近接して配置される。
【0071】
各々の制御可能バス線はまた、複数のマルチプレクサおよび/またはデマルチプレクサを含む。制御可能バス線のマルチプレクサ/デマルチプレクサは、ASICチップ100のバス線と構成要素との間でデータを転送するように構成される。たとえば、制御可能バス線のマルチプレクサ/デマルチプレクサは、タイル102との間、ベクトル処理ユニット104との間、または通信インターフェース108との間でデータを転送するように構成することができる。タイル102、ベクトル処理ユニット104、および通信インターフェース間でデータを転送することは、動作スケジュールによって調整することができる。動作スケジュールは、各カウンタにおいて、どのASIC100ハードウェアブロックが制御可能バス線に送信しているか、または制御可能バス線からデータを受信しているかを調整することができる。任意の所与のカウンタ時間においてスケジュールされる動作は、たとえば、どんなデータがソース(たとえば、タイル102内のメモリもしくはベクトル処理ユニット104)から制御可能バス線に転送されるか、または代替的に、どんなデータが制御可能バス線からシンク(たとえば、タイル102内のメモリ102もしくはベクトル処理ユニット104)に転送されるかを決定してもよい。
【0072】
制御可能バス線は、各タイル、ベクトル処理ユニット、および/または通信インターフェースが、そのタイル、ベクトル処理ユニット、および/または通信インターフェースを通過する制御可能バス線を操作するための制御要素のそれ自体のセットを含むようにローカルレベルで制御されるように構成される。たとえば、各タイル、1Dベクトル処理ユニット、および通信インターフェースは、そのタイル、1Dベクトル処理ユニット、および通信インターフェースとの間のデータ転送を制御するためのコンベア要素、マルチプレクサおよび/またはデマルチプレクサの対応するセットを含んでもよい。したがって、各タイル、1Dベクトル処理ユニット、および通信インターフェースについての動作スケジュールは、それぞれのハードウェアブロックをトリガして、そのコンベア要素に適切な制御信号を与え、スケジュールされた動作に従ってデータをルーティングすることができる。
【0073】
ASICチップ100の動作に関連するレイテンシを最小限に抑えるために、様々な構成要素間をデータが移動する距離を短縮するようにタイル102およびベクトル処理ユニット104を配置することができる。特定の実装形態では、タイル102と通信インターフェース108の両方を複数の部分に分離することができ、タイル部分と通信インターフェース部分の両方が、タイルと通信インターフェースの間をデータが移動する最大距離が短縮されるように配置される。たとえば、いくつかの実装形態では、タイル102の第1のグループを通信インターフェース108の第1の側の第1の部分に配置することができ、タイル102の第2のグループを通信インターフェースの第2の側の第2の部分に配置することができる。その結果、すべてのタイル102が通信インターフェースの一方の側の単一の部分に配置される構成と比較して、通信インターフェースから最も遠いタイルまでの距離が2分の1になることもある。
【0074】
代替的に、タイルは、4つの部分などの異なる数の部分として配置されてもよい。たとえば、図3に示す例では、ASIC100の複数のタイル102が複数の部分110として配置される(110a、110b、110c、110d)。各部分110は、格子パターンとして配置された同様の数のタイル102を含む(たとえば、各部分110は、16行および16列に配置された256個のタイルを含むことができる)。通信インターフェース108も複数の部分、すなわち、タイル102の各部分110のいずれかの側に配置された第1の通信インターフェース1010Aおよび第2の通信インターフェース1010Bに分割される。第1の通信インターフェース1010Aは、制御可能バス線を通してASICチップ100の左側の2つのタイル部分110a、110cに結合することができる。第2の通信インターフェース1010Bは、制御可能バス線を通してASICチップ100の右側の2つのタイル部分110b、110dに結合することができる。その結果、通信インターフェース108との間でデータが移動する最大距離(したがって、データ伝播に関連するレイテンシ)を単一の通信インターフェースのみが利用可能な構成と比較して2分の1にすることができる。データレイテンシを低減させるためにタイル102および通信インターフェース108の他の結合配置も可能である。制御可能バス線のコンベア要素およびマルチプレクサに制御信号を与えることによって、タイル102および通信インターフェース108の結合配置をプログラムすることができる。
【0075】
いくつかの実装形態では、1つまたは複数のタイル102は、制御可能バス線および/またはASIC100内の他のタイル(本明細書では「制御タイル」と呼ぶ)に対して読取りおよび書込み動作を開始するように構成される。ASIC100内の残りのタイルは、(たとえば、層推論を算出するために)入力データに基づいて計算を実行するように構成することができる。いくつかの実装形態では、制御タイルは、ASIC100内の他のタイルと同じ構成要素および構成を含む。制御タイルは、ASIC100の追加のタイル、追加の行、または追加の列として追加することができる。たとえば、タイル102の対称格子では、各タイル102が入力データに対して計算を実行するように構成され、入力データに対して計算を実行するタイル102のための読取りおよび書込み動作に対処するために制御タイルの1つまたは複数の追加の行を含めることができる。たとえば、各部分110は、18行のタイルを含み、タイルの最後の2つの行は、制御タイルを含んでもよい。別個の制御タイルを設けると、いくつかの実装形態では、計算を実行するために使用される他のタイルで利用可能なメモリの量が増大する。別個の制御タイルを設けると、動作スケジュール間のデータ送信動作の調整の助けになることもある。たとえば、制御タイルを使用して制御可能バス線および/またはASIC100内の他のタイルに対する読取りおよび書込み動作を制御すると、スケジューリング競合について検査する必要がある個別のスケジュールの数が減ることがある。言い換えれば、制御タイルについての動作スケジュールが「ダブルブッキング」、すなわち、同じカウンタ時間での特定の制御可能バス線の使用を回避するように調整された場合、制御可能バス線上で通信エラーが生じないことが合理的に保証される。しかし、本明細書で説明する制御の実行専用の別個のタイルは必要ではなく、場合によっては、別個の制御タイルは設けられない。その代わりに、各タイルは、そのタイルについての読取りおよび書込み動作を開始するための命令をタイルのローカルメモリに記憶してもよい。
【0076】
さらに、図3に示す各部分110は、18行x16列に配置されたタイルを含むが、タイル102の数およびある部分におけるタイルの配置は異なってもよい。たとえば、場合によっては、各部分110は、等しい数の行および列を含んでもよい。
【0077】
さらに、タイル102は、図3には4つの部分に分割されるように示されているが、他の異なるグループに分割することができる。たとえば、いくつかの実装形態では、タイル102は、ベクトル処理ユニット104の上方の(たとえば、図3に示すページの上部により近い)第1の部分およびベクトル処理ユニット104の下方の(たとえば、図3に示すページの下部により近い)第2の部分などの、2つの異なる部分としてグループ分けされる。そのような配置では、各部分は、たとえば、(方向103に沿った)18個のタイル×(方向101に沿った)32個のタイルの格子として配置された596個のタイルを含んでもよい。各部分は、他の総数のタイルを含んでもよく、異なるサイズのアレイとして配置されてもよい。場合によっては、各部分間の区画は、ASIC100のハードウェア要素によって定められる。たとえば、図3に示すように、部分110a、110bは、ベクトル処理ユニット104によって部分110c、110dから分離されてもよい。
【0078】
本明細書で説明するように、いくつかの実装形態では、タイル102のうちの1つまたは複数を動作スケジュール18の記憶専用に使用することができる。すなわち、動作スケジュールの記憶専用のタイル102は、重み入力およびアクティブ化入力などの入力データに対する計算の実行に関与しない。たとえば、動作スケジュールの記憶専用のタイル102は、複数のタイル102(たとえば、近傍のタイル102)についての個別の動作スケジュールを記憶することができる。動作スケジュールの記憶専用のタイル102は、ASIC100によるプログラムの実行時に様々な間隔で各タイルの動作スケジュールの関連部分を展開し提供することができる。たとえば、動作スケジュールの記憶専用のタイル102は、プログラムの開始時における第1の動作時間フレームを対象とするタイルの動作スケジュールのそれぞれの第1の部分(たとえば、カウンタ時間000000_hex~000FFF_hex)および以後の動作時間フレームを対象とするタイルの動作スケジュールの以後の部分を、カウンタが以後の時間フレームに達する前に反復的に展開し提供することができる。代替的に、本明細書で開示するように、専用制御タイルは使用されない。その代わり、そのような場合、各タイルのローカルメモリは、その特定のタイルについての動作スケジュールを記憶する。
【0079】
ASICチップ100内で使用されるタイル200の一例を示す概略図が、図4に示されている。各タイル200は、ローカルメモリ202と、メモリ202に結合された計算アレイ204とを含む。ローカルメモリ202は、計算アレイ204に近接して配置された物理メモリを含む。計算アレイ204は、複数のセル206を含む。計算アレイ204の各セル206は、セル206への、アクティブ化入力および重み入力などのデータ入力に基づいて計算(たとえば、積和演算)を実行するように構成された回路を含む。各セルは、クロック信号のサイクルに対して計算(たとえば、積和演算)を実行することができる。計算アレイ204は、列よりも多くの行を有するか、または行よりも多くの列を有するか、または等しい数の列と行を有することができる。たとえば、図4に示す例では、計算アレイ204は、8行および8列に配置された64個のセルを含む。特に、16個、32個、128個、または256個のセルを有する計算アレイなどの他の計算アレイサイズも可能である。各タイルは、同じ数のセルおよび/または同サイズ計算アレイを含むことができる。ASICチップについて並列に実行できる動作の総数は、チップ内の同サイズ計算アレイを有するタイルの総数に依存する。たとえば、約1150個のタイルを含む、図3に示すASICチップ100では、このことは、サイクルごとに約92000回の計算を並列に実行できることを意味する。使用される場合があるクロック速度の例には、限定はしないが、225MHz、500MHz、950MHz、1GHz、1.25GHz、1.5GHz、1.95GHz、または2GHzが含まれる。各々の個々のタイルの計算アレイ204は、図3に示すように、タイルのより大きいシストリックアレイのサブセットである。
【0080】
タイル200に含まれるメモリ202は、たとえば、SRAMなどのランダムアクセスメモリ(RAM)を含むことができる。その代わりに他のメモリを使用することができる。各メモリ202は、ASICチップのn個のタイル102に関連する全メモリのうちの(1/n)を記憶するように構成することができる。メモリ202は、単一のチップまたは複数のチップとして設けることができる。たとえば、図4に示すメモリ202は、4つの単一ポートSRAMとして設けられ、各SRAMは、計算アレイ204に結合される。代替的に、メモリ202は、数ある構成の中で、2つの単一ポートSRAMまたは8つの単一ポートSRAMとして設けることができる。メモリの結合容量は、限定はしないが、たとえば、誤り訂正コーディング後に16kB、32kB、64kB、または128kBとすることができる。物理メモリ202を計算アレイに対してローカルに設けることによって、いくつかの実装形態では、ASIC100についての配線の密度を大幅に低下させることができる。メモリがASIC100内の中央に配置される代替構成では、本明細書で説明するようにローカルに設けられる構成とは異なり、メモリ帯域幅のビットごとに配線が必要になることがある。ASIC100の各タイルに対応するのに必要な配線の総数は、ASIC100内の利用可能な空間をかなり上回る。これに対して、タイルごとに専用メモリを設ける場合、ASIC100の面積に対応するのに必要な配線の総数を実質的に減らすことができる。
【0081】
タイル200はまた、制御可能バス線を含む。制御可能バス線は、複数の異なるグループに分類されてもよい。たとえば、制御可能バス線は、データを各カーディナル方向においてタイル間で転送するように構成された汎用制御可能バス線210の第1のグループを含むことができる。すなわち、制御可能バス線210の第1のグループは、タイルの格子の第1の次元101に沿った第1の方向(図4では「東」と呼ばれる)に向かってデータを転送するように構成されたバス線210aと、タイルの格子の第1の次元101に沿った第2の方向(図4では「西」と呼ばれる)に向かってデータを転送するように構成されたバス線210bであって、第2の方向が第1の方向と逆方向であるバス線210bと、タイルの格子の第2の次元103に沿った第3の方向(図4では「北」と呼ばれる)に向かってデータを転送するように構成されたバス線210cと、タイルの格子の第2の次元103に沿った第4の方向(図4では「南」と呼ばれる)に向かってデータを転送するように構成されたバス線210dであって、第4の方向が第3の方向と逆方向であるバス線210dとを含むことができる。汎用バス線210は、制御データ、アクティブ化入力データを搬送し、通信インターフェースとの間でデータを搬送し、ベクトル処理ユニットとの間でデータを搬送し、タイル200によって記憶ならびに/または使用されるデータ(たとえば、重み入力)を搬送するように構成することができる。タイル200は、制御可能バス線を制御し、したがって、タイル200との間およびメモリ202との間でデータをルーティングするための1つまたは複数の制御要素221(たとえば、フリップフロップおよびマルチプレクサ)を含んでもよい。
【0082】
制御可能バス線は、制御可能バス線の第2のグループを含むこともでき、制御可能バス線の第2のグループは、本明細書では計算アレイ部分和バス線220とも呼ばれる。計算アレイ部分和バス線220は、計算アレイ204によって実行される計算からのデータ出力を搬送するように構成することができる。たとえば、バス線220は、図4に示すように、計算アレイ204における行から得られた部分和データを搬送するように構成することができる。そのような場合、バス線220の数は、アレイ204内の行の数と一致する。たとえば、8×8計算アレイでは、8本の部分和バス線220があり、各部分和バス線220は、計算アレイ204内の対応する行の出力に結合される。計算アレイ出力バス線220は、たとえば、ASICチップ内の別のタイルの計算アレイへの入力として、ASICチップ内の別のタイルに結合するようにさらに構成することができる。たとえば、タイル200のアレイ部分和バス線220は、タイル200から少なくとも1タイル離れて位置する第2のタイルの計算アレイの入力(たとえば、部分和220a)を受信するように構成することができる。その場合、計算アレイ204の出力は、部分和線220に加算され、新しい部分和220bが作成され、部分和220bはタイル200から出力されてもよい。部分和220bは次いで、別のタイルに渡されるか、または代替的に、ベクトル処理ユニットに渡されてもよい。たとえば、各バス線220は、ベクトル処理ユニットの対応するセグメント(図3におけるセグメント106など)に結合されてもよい。
【0083】
図3に関して説明するように、制御可能バス線は、データをバス線に沿って伝達するのを可能にするように構成されたコンベア要素(たとえば、フリップフロップ)などの回路を含むことができる。いくつかの実装形態では、各制御可能バス線は、タイルごとに対応するコンベア要素を含む。図3に関してさらに説明するように、制御可能バス線は、データをASICチップの様々なタイル、ベクトル処理ユニット、および通信インターフェースの間で転送するのを可能にするように構成されたマルチプレクサ、などの回路を含むことができる。マルチプレクサは、データのソースまたはシンクがあるところならどこでも位置させることができる。たとえば、いくつかの実装形態では、図4に示すように、マルチプレクサなどの制御回路221は、制御可能バス線の交差点に位置させる(たとえば、汎用バス線210aと汎用バス線210dの交差点、汎用バス線210aと汎用バス線210cの交差点、汎用バス線210bと汎用バス線210dの交差点、および/または汎用バス線210bと汎用バス線210cの交差点に位置させる)ことができる。バス線交差点に位置するマルチプレクサは、交差点に位置するバス線間でデータを転送するように構成することができる。さらに、図1を参照して説明するように、制御回路221は、タイルの個別の動作スケジュールを実行するように構成することができる。たとえば、制御回路221は、タイル102内の適切な構成要素にデータをルーティングする(たとえば、アクティブ化データまたは層重みをSRAM202との間でルーティングして計算アレイ204内の適切なセル206に送る)か、または制御可能バス線との間で出力データおよび入力データをルーティングすることによって動作スケジュールの動作を実行することができる。
【0084】
図5A図11Bは、ASIC100がニューラルネットワーク推論を算出するためのハードウェアアクセラレータとして使用される例示的なプロセスを示す概略図である。図5A図6A図7A図8A図9図10A、および図11Aは、プロセスのそれぞれに異なる時間におけるASIC100によるデータフローの概要を示す概略図である。図5B図6B図7B図8B図10B、および図11Bは、それぞれ図5A図6A図7A図8A図10A、および図11Aに関連する時間におけるASIC100の単一のタイル(たとえば、制御タイルまたは他のタイル102)内のデータフローを示す概略図である。図5A図11Bにおける楕円形は、図示されていない繰り返し要素の存在を示す。図5A図11Bの各々には、データフローの向きを与えるためにコンパス300が設けられる。ラベル「N」、「W」、「S」、および「E」は、実際の地理的方向には対応せず、その代わり、データが格子内を流れることができるそれぞれに異なる相対方向を示すために使用される。ラベル「N」、「W」、「S」、および「E」によって示される方向にデータを伝達する制御可能バス線は、本明細書では北フローバス線、西フローバス線、南フローバス線、および東フローバス線と呼ばれる。
【0085】
図5A図11Aにおけるタイル102およびベクトル処理ユニット104の配置は、図3に示す配置と同様である。たとえば、タイル102の半分は、ベクトル処理ユニット104の第1の側に配置することができ、タイル102の他方の半分は、ベクトル処理ユニット104の第2の反対側に配置することができる。通信インターフェース108は、図5A図11Aでは、全体的にタイル格子の右側に配置されるように示されているが、図3に概略的に示すようにタイル格子のいずれの側に配置することもできる。
【0086】
第1のステップでは、図5Aに示すように、モデル(たとえば、ニューラルネットワークモデル)の第1の層についての入力値(たとえば、アクティブ化入力および/または重み入力)が、通信インターフェース108からASIC100内の1つまたは複数のタイル102(たとえば、すべてのタイル102)上にロードされる。すなわち、それぞれの動作スケジュール18に従って、通信インターフェース108は、外部入力データ(たとえば、アクティブ化入力および/または層重み)を読み取り、データを制御可能バス線に送信する。入力値は、通信インターフェース108から、制御可能バス線(たとえば、本明細書で説明する汎用制御可能バス線など)に沿ってデータ経路を辿り、1つまたは複数の制御タイルに達する。データは、それぞれに異なるバス線が交差する位置にマルチプレクサを使用することによって(たとえば、図4におけるルーティング要素221を参照されたい)それぞれに異なるバス線間を転送することができる。たとえば、図5Aに示すように、入力データは、西フロー汎用制御可能バス線上の移動、次いで南フロー汎用制御可能バス線上の移動を伴うデータ経路に沿って流れる。西フローバス線と南フローバス線が交差する位置にマルチプレクサを使用することによって、入力データをフローバス線から南フローバス線に転送することができる。いくつかの実装形態では、前の第1の推論がASIC100によって実行されている間に、第2の推論についての重み入力を1つまたは複数の制御タイルにロードすることができる。言い換えれば、制御タイルの動作スケジュールが、推論を算出している他のタイル102の動作スケジュールと調整され、それによって、他のタイル102が第1の推論を算出しているのと同じカウンタ時間に、制御タイル102が、次の推論を算出するために他のタイル102に送られるように次の推論についての新しいアクティブ化データおよび/または重みを準備する。
【0087】
図5Bは、ASIC100からタイル102の一例の詳細図を示す概略図である。図5Bに示すように、タイル102は、入力値が記憶されるメモリ302を含むことができる。メモリ302は、本明細書で図4に関して説明するように任意の適切なメモリを含むことができる。上述のように、メモリ302は、タイルの個別の動作スケジュール18(または動作スケジュールを記憶するための専用タイル102を使用する実装形態における動作スケジュールの部分)を記憶するために使用することができる。入力値は、タイル102の隣を通過するかまたはタイル102自体を通過する1本または複数の南フロー汎用制御可能バス線310dから得られる。南フロー制御可能バス線310dからのデータは、マルチプレクサを使用することによってメモリ302に転送することができる。他の汎用制御可能バス線(310a、310b、310c)はこのステップの間は使用されない。
【0088】
タイル102はまた、メモリ302に直接結合されたセル306の計算アレイを含む。本明細書で説明するように、セル306の計算アレイは、ASICのタイルを構成するセルのより大きいシストリックアレイのサブセットであってもよい。セル306は、アレイ状に配置され、単一のセル306が、図5Bにおいて(i, j) = (0, 0)に示されており、この場合、パラメータiは、アレイ内のセル行位置を表し、jは、アレイ内のセル列位置を表す。図5Bに示す例では、計算アレイは8行および8列を有する。ただし、他のサイズも可能である。計算アレイの各セル306は、タイルで受信されたデータに基づいて計算を実行するように構成された回路を含むことができる。たとえば、各セル306は、乗算器回路と、加算器回路と、1つまたは複数のレジスタとを含むことができる。各セル306の出力は、計算アレイ内の隣接するセルまたはASIC100内の別のタイルの計算アレイ内のセルに部分和として渡すことができる。セル306の計算アレイは以後のステップにおいて使用される。
【0089】
タイル102はまた、前のタイルからデータを提供するための制御可能バス線320を含む。たとえば、制御可能バス線320は、ASIC100内の前のタイルの計算アレイから得られた部分和出力データを搬送し、部分和出力データをタイル102内の計算アレイのセルへの入力として与えることができる。このステップでは、制御可能バス線320は使用されない。
【0090】
タイル102はまた、アクティブ化入力値を計算アレイのセル306への入力として与えるための制御可能バス線330を含む。たとえば、アクティブ化入力値は、セル306内の乗算器回路に与えることができる。アクティブ化入力値は、通信インターフェース108またはASIC100における別のタイル内のセルから得ることができる。制御可能バス線330からのデータは、マルチプレクサを使用することによってセル306に転送することができる。制御可能バス線330は、図5Aおよび図5Bに示す例示的なステップでは使用されない。
【0091】
本明細書で説明するように、いくつかの実装形態では、1つまたは複数のタイル102は、動作スケジュール18および/またはベクトル処理ユニット104からの出力情報の記憶専用に使用される。いくつかの実装形態では、1つまたは複数の制御タイル内の計算アレイは、計算を実行するために使用されなくてもよい。代替的に、1つまたは複数の制御タイルは、受信された重み入力およびアクティブ化値などの入力データに対して計算を実行することに加えて動作スケジュール18を記憶するように構成することができる。いくつかの実装形態では、重み入力は、最初に1つまたは複数の制御タイルのサブセットに重み入力を記憶することなく、重み入力が使用される各タイル102のメモリにロードされる。
【0092】
第2のステップでは、図6Aに示すように、スケジュールされたカウンタ値において、重み入力301がタイル102内の計算アレイの個別のセル306にロードされる。重み入力301を個別のセル306にロードすることは、1つまたは複数の制御タイルのメモリから、重み入力301が属する対応するタイル102に転送することを含むことができる。重み入力301は、汎用制御可能バス線に沿ってタイル102に伝達し、バス線およびメモリに結合されたマルチプレクサを介してメモリに転送することができる。図6Bは、タイル102の一例の詳細図である。重み入力301は、モデル実行の持続時間の間メモリ302に記憶することができ、モデル実行は、複数の推論の計算を含んでもよい。重み入力301を1つまたは複数の制御タイルからロードすることの代替として、重み入力301は、通信インターフェース108からタイル102のメモリに直接プリロードされてもよい。モデルを実行できるように準備するには、タイル102ごとの重み入力301をタイル102のメモリ302からそのタイル102内の計算アレイの各セル306にロードすることができる。たとえば、重み入力301は、セル306内のレジスタ400(「バックレジスタ」とも呼ばれる)にロードすることができる。バックレジスタを使用すると、次の重み入力がバックレジスタにロードされる間、セル306によって現在の重み入力に対して計算を実行することが可能になる。図6Bでは、重みレジスタをロードすることが1つのセル306のみについて示されているが、このステップの間に、計算アレイ内の他のセルの重みレジスタをロードすることもできる。
【0093】
第3のステップでは、図7Aに示すように、スケジュールされたカウンタ値において、アクティブ化値500が、タイル102に導入され、メモリ302内に記憶されてもよい。アクティブ化値500は、複数のクロックサイクルにわたって転送することができる。その場合、計算は、各タイル102の計算アレイによって、受信されたアクティブ化値500およびタイル102内のメモリ302からの重み入力301を用いて実行される。たとえば、計算は、アクティブ化値に重み入力を掛けることと、次いでその結果に、異なる重み入力とアクティブ化値の積を加算することとを含むことができる。いくつかの実装形態では、アクティブ化値500は、制御可能バス線330上でタイル102に伝達され、タイル102間で伝達される。制御可能バス線330の各々は同じ方向に沿って延びることができる。たとえば、図7Bに示すように、制御可能バス線330は、制御可能バス線320が延びる格子次元に直交する格子次元に沿って横方向に延びる。さらに、図7Aにおける矢印501および図7Bにおける制御可能バス線330上の矢印501によって示されるように、アクティブ化入力データ500は、バス線330上を同じ(たとえば、東フロー)方向に移動する。代替的に、いくつかの実装形態では、いくつかのアクティブ化入力値500は、いくつかの制御可能バス線330上を第1の方向(たとえば、東フロー方向)に移動し、いくつかの他のアクティブ化入力値500は、いくつかの他の制御可能バス線330上を第2の逆方向(たとえば、西フロー方向)に移動する。
【0094】
いくつかの実装形態では、各タイル102を通って延びる制御可能バス線330の数は、計算アレイのサイズによって決定される。たとえば、各タイル102を通って延びる制御可能バス線330の数は、計算アレイ内のセルの行の数に少なくとも等しくてもよい。図7Bに示す例では、タイル102の計算アレイ内にセル306の8つの行があるとすれば、タイル102を通過する8本の制御可能バス線330がある。いくつかの実装形態では、各々の別個の制御可能バス線330が、計算アレイの対応する行内のセル306にアクティブ化入力値500を転送する。たとえば、タイル102内のセル306の8×8計算アレイでは、第1の制御可能バス線330が、アレイの第1の行内のセル306にアクティブ化入力値500を転送し、第2の制御可能バス線330が、アレイの第2の行内のセル306にアクティブ化入力値500を転送し、他の制御可能バス線330についても同様であり、最後の制御可能バス線330は、アレイの最後の行内のセル306にアクティブ化入力値500を転送する。追加の制御可能バス線(たとえば、部分和バス線)は、各タイルを通過して別のタイルからの部分和を提供し、タイル内の計算の結果を受信して提供された部分和と組み合わせ、新しい部分和を新しいタイルまたはベクトル処理ユニットに出力してもよい。
【0095】
いくつかの実装形態では、制御可能バス線330は、セル306内で計算を実行するように構成された回路にアクティブ化入力値500を転送する。たとえば、図7Bに示すように、制御可能バス線330は、アクティブ化入力値500をセル306内の乗算器回路502に転送するように構成される。アクティブ化入力値500は、制御可能バス線330上でマルチプレクサを使用することによって乗算器回路502に転送することができる。
【0096】
いくつかの実装形態では、アクティブ化入力値500および重み入力値301が所定の位置にあると判定された後(たとえば、ローディング動作を実行するのに必要な所定数のカウンタサイクルの後)、タイル102内の計算アレイのセル306は、受信されたアクティブ化入力値500およびタイル102内のメモリ302からの重み入力値301を使用して計算を実行する。たとえば、図7Bに示すように、すでにレジスタ400に記憶された重み入力値301がレジスタ504(「フロントレジスタ」とも呼ばれる)に転送される。次いで、乗算器回路502を使用して重み入力値301に受信されたアクティブ化入力値500が掛けられる。
【0097】
本明細書で説明するように、アクティブ化入力値500は制御可能バス線330上で伝達される。いくつかの実装形態では、制御可能バス線330は、汎用制御可能バス線である。いくつかの実装形態では、制御可能バス線330は、アクティブ化入力の提供専用に使用することができる。たとえば、図7Bに示すように、アクティブ化入力値を線330によってタイル102に(たとえば、タイル102内の計算アレイのセル306に)与えることができ、一方、他の汎用制御可能バス線310bを使用して他のデータおよび/または指示をタイル102に与えることができる。
【0098】
第4のステップでは、図8Bに示すように、スケジュールされたカウンタ値において、各セル306内の、重み入力値301とアクティブ化入力値500との計算の結果が、セル306内の回路602に渡されて、出力値600が生成される。図8Bの例では、回路602は、加算回路を含む。各セル306内の加算回路602は、乗算器回路502の積にASIC100内の別のタイル102または計算アレイ内の別のセル306から得られる別の値を加算するように構成される。別のタイル102または別のセル306から得られる値は、たとえば累積値を含むことができる。したがって、加算回路602の出力値600は新しい累積値である。その場合、加算回路602は、タイル102内の計算アレイの下部の(たとえば、南フロー方向における)隣接するセル内に位置する別のセルに新しい累積値600を送ることができる。新しい累積値600は、下部の隣接するセルにおける加算についてのオペランドとして使用することができる。計算アレイ内のセルの内側に最後の行では、図8Aに示すように、新しい累積値600をASIC100内の別のタイル102に転送することができる。別の例では、新しい累積値600は、新しい累積600が生成されたタイル102から少なくとも1タイル離れた別のタイル102に転送することができる。代替的に、図8Aにも示すように、計算アレイ内のセルの最後の行からの新しい累積値600がベクトル処理ユニット104に転送される。
【0099】
タイル102内に転送されるかまたはタイル102から外部に転送された累積値600は、制御可能バス線320に沿って伝達することができる。制御可能バス線320の各々は同じ方向に沿って延びている。たとえば、図8Bに示すように、制御可能バス線320は、制御可能バス線330が延びる格子次元に直交する格子次元に沿って垂直に延びる。さらに、図8Aにおける矢印604および図8Bにおける矢印604によって示されるように、累積値600は、累積値600が生成されたタイル102に対するベクトル処理ユニット104の位置に応じて制御可能バス線320上を北フロー方向または南フロー方向のいずれかに移動する。たとえば、図8Aにおいてベクトル処理ユニット104の上方に位置するタイル102では、累積値600は、制御可能バス線320上をベクトル処理ユニット104に向かって南フロー方向に移動し、一方、ベクトル処理ユニット104の下方に位置するタイル102では、累積値600は、ベクトル処理ユニット104に向かって北フロー方向に移動する。
【0100】
図9に示すような第5のステップでは、スケジュールされたカウンタ値において、ベクトル処理ユニット104によって受信されたデータ(たとえば、累積値)は、ベクトル処理ユニット104によって処理され、処理後の値900が与えられる。ベクトル処理ユニット104におけるデータの処理は、ベクトル処理ユニット104において受信されたデータにバイアスを加えること、追加の累積演算を実行すること、および/または受信されたデータに非線形関数(たとえば、ニューラルネットワークシステムにおいて知られる正規化関数またはシグモイド関数)を加えることを含むことができる。ベクトル処理ユニット104によって他の演算を適用することもできる。ベクトル処理ユニット104は、複数のセグメント106に配置された回路を含むことができ、各セグメント106は、タイル102の対応する列から受信されたデータを処理し、対応する処理後の値900を生成するように構成される。
【0101】
第6のステップでは、図10Aに示すように、スケジュールされたカウンタ値において、ベクトル処理ユニット104からの処理後の値900が、ASIC100の1つまたは複数のタイル、たとえば、ASIC100のタイルのサブセットに転送され記憶される。たとえば、処理後の値900は、制御タイル103に送ることができ、制御タイル103は、ベクトル処理ユニット104のすぐ隣に位置する。代替的に、または追加として、処理後の値900は、ASIC100内の他のタイル102のうちの1つまたは複数に送ることができる。処理後の値900は、制御可能バス線310cなどの汎用制御可能バス線を介して1つまたは複数のタイルに転送することができる。処理後の値900は、タイル(たとえば、制御タイルまたは他のタイル102)に到達後、タイルのメモリ202に記憶することができる。たとえば、処理後の値900は、制御可能バス線310cに関連するマルチプレクサを使用してメモリ902に転送することができる。処理後の値900を記憶するステップは、各モデル層の推論が得られた後に実施することができる。いくつかの実装形態では、処理後の値900をモデルの次の層への入力値として与えることができる。
【0102】
第7のステップでは、図11Aおよび図11Bに示すように、スケジュールされたカウンタ値において、処理後の値900をASIC100にエクスポートすることができる。たとえば、処理後の値900は、1つまたは複数の制御タイルのメモリ202から通信インターフェース108に転送することができる。処理後の値900は、制御可能バス線(たとえば、制御可能バス線310cおよび/または310d)上で通信インターフェース108に伝達することができる。処理後の値900は、制御可能バス線に関連するマルチプレクサを介して制御可能バス線に転送することができる。
【0103】
処理後の値900は、たとえば、モデルの最終層についての推論が得られた場合、またはモデルが複数のASIC間で区分され、ASIC100に関連する最終層についての推論が得られた場合にASIC100にエクスポートされてもよい。処理後の値900は、通信インターフェース108のSerDesインターフェースによって受信し、限定はしないが、たとえば、別のASIC100またはフィールドプログラマブルゲートアレイチップを含む別の宛先にエクスポートすることができる。
【0104】
図5A図11Bに関して説明した例示的なプロセスでは、セル計算が実行される前にアクティブ化値および重み入力が各タイルの計算アレイ全体にわたって完全に伝播されることが必要になる場合があるか、またはすべての値が完全に伝播される前にセルが計算を実行することがある。いずれの場合も、計算が適正なタイミングで行われるように個別のタイルの動作スケジュールを調整することができる。たとえば、特定の機械学習プログラムにおいて、セル計算が実行される前にアクティブ化値および重み入力を各タイルの計算アレイを介して完全に伝播する必要がある場合、動作指示では、アクティブ化値および重みが完全に伝播されるのを保証する時間において計算が実行されるようにスケジュールすることができる。さらに、ASIC100について、重み入力が計算アレイの列に送られ、アクティブ化入力が計算アレイの行に送られるように説明したが、いくつかの実装形態では、重み入力がアレイの行に送られ、アクティブ化入力がアレイの列に送られる。
【0105】
さらに、計算アレイについて、本明細書では各セル内で個別の加算回路を使用するように説明したが、計算アレイ内のセルのグループ(たとえば、列内のすべてのセル)が直接単一の加算回路に結合されてもよく、この加算回路は、グループ内のセルから受信された出力を加算し、したがって、出力を記憶するのに必要な加算回路の数を減らす。
【0106】
本明細書で説明する主題および機能的動作の実施形態は、デジタル電子回路、本明細書で開示した構造およびその構造上の均等物を含むコンピュータハードウェア、またはそれらのうちの1つまたは複数の組合せとして実施することができる。本明細書で説明した主題の実施形態は、1つまたは複数のコンピュータプログラムとして、すなわち、データ処理装置による実行のための、またはデータ処理装置の動作を制御するための、有形非一時プログラムキャリア上で符号化されたコンピュータプログラム命令の1つまたは複数のモジュールとして実施することができる。代替的にまたは追加として、プログラム命令は、人為的に生成される伝播信号、たとえば、データ処理装置によって実行されるように適切なレシーバ装置に送信される情報を符号化するために生成される機械生成の電気信号、光信号、または電磁信号上に符号化することができる。コンピュータ記憶媒体は、機械可読ストレージデバイス、機械可読ストレージ基板、ランダムもしくはシリアルアクセスメモリデバイス、またはそれらのうちの1つもしくは複数の組合せとすることができる。
【0107】
「データ処理装置」という用語は、一例としてプログラム可能プロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む、データを処理するためのすべての種類の装置、デバイス、および機械を包含する。この装置は、専用論理回路、たとえば、FPGA(フィールドプログラマブルゲートアレイ)またはASICを含むことができる。この装置は、ハードウェアに加えて、当該のコンピュータプログラム用の実行環境を作成するコード、たとえば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらのうちの1つもしくは複数の組合せを構成するコードを含むこともできる。
【0108】
本明細書で説明するプロセスおよび論理フローは、1つまたは複数のプログラム可能コンピュータが、1つまたは複数のコンピュータプログラムを実行して、入力データの処理および出力の生成を行うことによって機能を実行することによって実行することができる。プロセスおよび論理フローを専用論理回路、たとえば、FPGA、ASIC、またはGPGPU(汎用グラフィックス処理ユニット)によって実行することもでき、装置をそのような専用論理回路として実装することもできる。
【0109】
本明細書には多数の特定の実装上の詳細が記載されているが、これらは任意の発明または請求され得るものの範囲に対する制限として解釈すべきではなく、特定の発明の特定の実施形態に固有である場合がある特徴の説明として解釈すべきである。本明細書において別個の実装形態の文脈で説明されるいくつかの特徴はまた、組み合わせて単一の実施形態として実装することができる。反対に、単一の実施形態の文脈で説明した様々な特徴はまた、複数の実施形態において別々に実装することができ、または任意の好適な部分組合せとして実装することができる。さらに、各特徴について、上記ではいくつかの組合せとして働くように説明することがあり、最初からそのようなものとして請求することがあるが、特許請求される組合せからの1つまたは複数の特徴は、場合によっては、その組合せから削除することができ、請求される組合せが、部分組合せまたは部分組合せの変形形態を対象としてもよい。
【0110】
同様に、動作は特定の順序で図面に示されるが、このことは、望ましい結果を達成するために、そのような動作が、示された特定の順序でもしくは順次に実行されること、またはすべての図示された動作が実行されることを必要とするものとして理解されるべきでない。いくつかの状況では、マルチタスキングおよび並列処理が有利な場合がある。さらに、上記で説明した実施形態における様々なシステムモジュールおよびコンポーネントの分離は、すべての実装形態においてそのような分離が必要になるものとして理解されるべきではなく、説明したプログラムコンポーネントおよびシステムが一般に、単一のソフトウェア製品として統合するか、または複数のソフトウェア製品としてパッケージ化することができることを理解されたい。
【0111】
主題の特定の実施形態について説明した。他の実装形態も以下の特許請求の範囲内である。たとえば、バス線について「制御可能」として説明したが、すべてのバス線が同じレベルの制御を有する必要があるとは限らない。たとえば、様々な制御可能度があり得、いくつかのバス線は、いくつかのバス線が、データを得ることができるタイルの数またはデータを送ることができるタイルの数に関して制限される場合にのみ制御することができる。別の例では、いくつかのバス線は、本明細書で説明するように北、東、西、または南などの単一の方向に沿ったデータの提供専用に使用されてもよい。場合によっては、特許請求の範囲に記載されているアクションは、異なる順序で実行することができ、その場合も望ましい結果を達成することができる。一例として、添付の図面に示すプロセスは、所望の結果を達成するうえで、図示の特定の順序または順番を必ずしも必要としない。いくつかの状況では、マルチタスキングおよび並列処理が有利である場合がある。
【符号の説明】
【0112】
10 チップ
12 ハードウェアブロック
14 カウンタ
16 バス
18 動作スケジュール
20 制御回路
22 ローカルメモリ
24 計算ユニット
30 アクティブ化データ
32 出力データ
100 ASIC
101 第1の次元
102 タイル
103 第2の次元
104 ベクトル処理ユニット
106 セグメント
108 通信インターフェース
110、110a、110b、110c、110d 部分
200 タイル
202 ローカルメモリ
204 計算アレイ
206 セル
210、210a、210b、210c、210d 制御可能バス線
220 バス線
220a、220b 部分和
221 制御回路
300 コンパス
301 重み入力
302 メモリ
306 セル
310a、310b、310c、310d 制御可能バス線
320、330 制御可能バス線
500 アクティブ化値
501 矢印
502 乗算器回路
504 レジスタ
602 回路
604 矢印
900 処理後の値
902 メモリ
1010A、1010B インターフェース
図1
図2A
図2B
図3
図4
図5A
図5B
図6A
図6B
図7A
図7B
図8A
図8B
図9
図10A
図10B
図11A
図11B
【手続補正書】
【提出日】2022-04-15
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
集積回路デバイスであって、
カウンタと、
前記カウンタに通信可能に結合され、動作の第1のセットを含む第1のスケジュールに従って動作するように構成された第1のハードウェアブロックであって、前記各動作が、前記カウンタの第1のそれぞれの値において前記第1のハードウェアブロックによって実行されるようにスケジュールされる第1のハードウェアブロックと、
前記カウンタおよび前記第1のハードウェアブロックに通信可能に結合された第2のハードウェアブロックであって、動作の第2のセットを含む第2のスケジュールに従って動作するように構成され、前記各動作が、前記カウンタの第2のそれぞれの値において前記第2のハードウェアブロックによって実行されるようにスケジュールされる第2のハードウェアブロックとを備え、
前記第2のスケジュールの動作は、前記第1のスケジュールの動作に対して調整され、それによって、前記第1のスケジュールが前記第1のハードウェアブロックをトリガして前記カウンタの第1の事前スケジュールされた値において前記第2のハードウェアブロックにデータを送り、前記第2のスケジュールが前記第2のハードウェアブロックをトリガして、前記第1の事前スケジュールされた値の後に続く前記カウンタの第2の事前スケジュールされた値において入力で前記データを受け入れるデバイス。
【請求項2】
動作の前記第1のセットおよび動作の前記第2のセットの各々は、機械学習プログラムのそれぞれの部分を含む、請求項1に記載のデバイス。
【請求項3】
動作の前記第1のセットにおける各動作は、所定数のクロックサイクルで実行される、請求項1または2のいずれか一項に記載のデバイス。
【請求項4】
前記第1のスケジュールおよび前記第2のスケジュールの動作は、フロー制御信号とは無関係に前記第1のハードウェアブロックと前記第2のハードウェアブロックとの間におけるデータの交換を可能にするように調整される、請求項1から3のいずれか一項に記載のデバイス。
【請求項5】
複数の他のハードウェアブロックをさらに備え、前記第1のスケジュールの動作は、データフロー制御信号とは無関係に前記第1のハードウェアブロックと前記他のハードウェアブロックのうちの1つまたは複数との間におけるデータの交換を可能にするように前記他のハードウェアブロックのそれぞれの動作スケジュールに対して調整される、請求項1から4のいずれか一項に記載のデバイス。
【請求項6】
前記第1のハードウェアブロックは、
前記第1のスケジュールを記憶するように構成されたローカルメモリと、
前記ローカルメモリに結合され、前記第1のスケジュールの動作の前記第1のセットを実行するように構成された制御回路とを備える、請求項1から5のいずれか一項に記載のデバイス。
【請求項7】
前記制御回路は、前記第1のスケジュールの一部に含まれる動作を実行する前に前記一部を展開するように構成される、請求項6に記載のデバイス。
【請求項8】
前記集積回路デバイスは、特定用途向け集積回路である、請求項1から7のいずれか一項に記載のデバイス。
【請求項9】
前記第1のハードウェアブロックおよび前記第2のハードウェアブロックは、ニューラルネットワーク動作を実行するように構成された専用回路を含むハードウェアタイルである、請求項1から8のいずれか一項に記載のデバイス。
【請求項10】
前記第1のハードウェアブロックは、
セルの計算アレイと、
セルの前記計算アレイに結合されたローカルメモリとを備える、請求項9に記載のデバイス。
【請求項11】
前記第1のスケジュールおよび前記第2のスケジュールの各々は、前記集積回路デバイスによって実行されるプログラムの一部を含む、請求項1から10のいずれか一項に記載のデバイス。
【請求項12】
集積回路動作方法であって、
集積回路デバイスの第1のハードウェアブロックについて、前記第1のハードウェアブロックによって実行すべき動作の第1のセットを特定する第1のスケジュールを取得するステップと、
前記集積回路デバイスの第2のハードウェアブロックについて、前記第2のハードウェアブロックによって実行すべき動作の第2のセットを特定する第2のスケジュールを取得するステップであって、前記第2のスケジュールの動作が、前記第1のスケジュールの動作に対して調整され、それによって、前記第1のスケジュールが前記第1のハードウェアブロックをトリガしてカウンタの第1の事前スケジュールされた値において前記第2のハードウェアブロックにデータを送り、前記第2のスケジュールが前記第2のハードウェアブロックをトリガして、前記第1の事前スケジュールされた値の後に続く前記カウンタの第2の事前スケジュールされた値において入力で前記データを受け入れる、ステップと、
前記第1のハードウェアブロックによって、前記第1のスケジュールに従って動作の前記第1のセットを実行するステップと、
前記第2のハードウェアブロックによって、前記第2のスケジュールに従って動作の前記第2のセットを実行するステップとを含む方法。
【請求項13】
前記第1のスケジュールおよび前記第2のスケジュールの各々は、前記集積回路デバイスによって実行されるプログラムの一部を含む、請求項12に記載の方法。
【請求項14】
動作の前記第1のセットおよび動作の前記第2のセットの各々は、機械学習プログラムのそれぞれの部分を含む、請求項12または13のいずれか一項に記載の方法。
【請求項15】
動作の前記第1のセットにおける各動作は、所定数のクロックサイクルで実行される、請求項12から14のいずれか一項に記載の方法。
【請求項16】
前記第1のスケジュールおよび前記第2のスケジュールの動作は、フロー制御信号とは無関係に前記第1のハードウェアブロックと前記第2のハードウェアブロックとの間におけるデータの交換を可能にするように調整される、請求項12から15のいずれか一項に記載の方法。
【請求項17】
前記第1のハードウェアブロックによって、前記第1のスケジュールの一部に含まれる動作を実行する前に前記一部を展開するステップをさらに含む、請求項12から16のいずれか一項に記載の方法。
【請求項18】
前記第1のスケジュールは、動作の前記第1のセットにおける動作ごとに、スケジュールされたカウンタ値と、前記スケジュールされたカウンタ値において前記第1のハードウェアブロックによって実行すべき特定の動作を示すデータとを含む、請求項12から17のいずれか一項に記載の方法。
【請求項19】
前記第1のハードウェアブロックによって、前記第1のスケジュールに従って動作の前記第1のセットを実行するステップは、
動作の前記第1のセットにおける第1の動作の第1のスケジュールされたカウンタ値と等しい第1のカウンタ値をカウンタから受信するステップと、
前記第1のカウンタ値を受信したことに応じて、前記第1のハードウェアブロックの1つまたは複数の計算ユニットの第1のセットに前記第1の動作を実行させるステップと、
動作の前記第1のセットにおける第2の動作の第2のスケジュールされたカウンタ値と等しい第2のカウンタ値を前記カウンタから受信するステップと、
前記第2のカウンタ値を受信したことに応じて、前記第1のハードウェアブロックの1つまたは複数の計算ユニットの第2のセットに前記第2の動作を実行させるステップとを含む、請求項12から18のいずれか一項に記載の方法。
【請求項20】
前記第1のハードウェアブロックおよび前記第2のハードウェアブロックは、ニューラルネットワーク動作を実行するように構成された専用回路を含むハードウェアタイルである、請求項12から19のいずれか一項に記載の方法。
【請求項21】
集積回路デバイスであって、
動作の第1のセットを含む第1のスケジュールに従って動作するように構成された第1のハードウェアブロックであって、前記各動作が、それぞれの事前スケジュールされた時間において前記第1のハードウェアブロックによって実行されるようにスケジュールされ、前記第1のハードウェアブロックが複数のセルを備える計算アレイを備え、前記複数のセルの各セルが、積和演算を実行するように構成される第1のハードウェアブロックと、
前記第1のハードウェアブロックに通信可能に結合された第2のハードウェアブロックであって、動作の第2のセットを含む第2のスケジュールに従って動作するように構成され、前記各動作が、それぞれの事前スケジュールされた時間において前記第2のハードウェアブロックによって実行されるようにスケジュールされる第2のハードウェアブロックと、
前記第1のスケジュールおよび前記第2のスケジュールを生成するように構成されたコンパイラとを備え、
前記第1のスケジュールの動作の前記第1のセットは、前記第1のハードウェアブロックと前記第2のハードウェアブロックとの間におけるデータ転送を可能にするように前記第2のスケジュールの動作の前記第2のセットに対して調整され、
前記第1のスケジュールおよび前記第2のスケジュールの各々はそれぞれ、前記集積回路デバイス全体によって実行すべきニューラルネットワークプログラムの一部を表す集積回路デバイス。
【請求項22】
動作の前記第1のセットおよび動作の前記第2のセットは、機械学習プログラムのそれぞれの部分を含む、請求項21に記載の集積回路デバイス。
【請求項23】
動作の前記第1のセットにおける各動作は、所定数のクロックサイクルで実行される、請求項21または22のいずれか一項に記載の集積回路デバイス。
【請求項24】
少なくとも1つの他のハードウェアブロックをさらに備え、前記第1のスケジュールの動作は、前記第1のハードウェアブロックと前記少なくとも1つの他のハードウェアブロックとの間におけるデータ転送を可能にするように前記少なくとも1つの他のハードウェアブロックのそれぞれの動作スケジュールに対して調整される、請求項21から23のいずれか一項に記載の集積回路デバイス。
【請求項25】
前記少なくとも1つの他のハードウェアブロックは、スカラ演算を実行するように構成された回路を備える、請求項24に記載の集積回路デバイス。
【請求項26】
前記少なくとも1つの他のハードウェアブロックは、ベクトル演算を実行するように構成された回路を備える、請求項24に記載の集積回路デバイス。
【請求項27】
前記第1のハードウェアブロックの前記計算アレイは、行列演算を実行するように構成された回路を備え、前記第2のハードウェアブロックは、メモリアクセス動作を実行するように構成された回路を備える、請求項21から26のいずれか一項に記載の集積回路デバイス。
【請求項28】
前記第2のハードウェアブロックは、動作の前記第1のスケジュールを記憶する、請求項27に記載の集積回路デバイス。
【請求項29】
前記第1のハードウェアブロックは、前記計算アレイの出力を前記第2のハードウェアブロックに転送するように構成される、請求項27に記載の集積回路デバイス。
【請求項30】
前記第1のハードウェアブロックおよび前記第2のハードウェアブロックは、ニューラルネットワーク動作を実行するように構成された専用回路を含むハードウェアタイルである、請求項21から29のいずれか一項に記載の集積回路デバイス。
【請求項31】
集積回路動作方法であって、
集積回路デバイスのコンパイラによって、動作の第1のセットを含む第1のスケジュールを生成するステップであって、前記各動作が、第1のハードウェアブロックによってそれぞれの事前スケジュールされた時間に実行されるようにスケジュールされる、ステップと、
前記コンパイラによって、動作の第2のセットを含む第2のスケジュールを生成するステップであって、前記各動作が、第2のハードウェアブロックによってそれぞれの事前スケジュールされた時間に実行されるようにスケジュールされる、ステップと、
前記第1のハードウェアブロックによって、前記第1のスケジュールに従って動作の前記第1のセットを実行するステップであって、前記第1のハードウェアブロックが、複数のセルを備える計算アレイを備え、前記複数のセルの各セルが、積和演算を実行するように構成される、ステップと、
前記集積回路デバイスの前記第2のハードウェアブロックによって、前記第2のスケジュールに従って動作の前記第2のセットを実行するステップとを含み、
前記第1のスケジュールおよび前記第2のスケジュールの各々はそれぞれ、前記集積回路デバイスによって全体として実行すべきニューラルネットワークプログラムの一部を表す方法。
【請求項32】
動作の前記第1のセットおよび動作の前記第2のセットは、機械学習プログラムのそれぞれの部分を含む、請求項31に記載の方法。
【請求項33】
動作の前記第1のセットにおける各動作は、所定数のクロックサイクルで実行される、請求項31または32のいずれか一項に記載の方法。
【請求項34】
前記集積回路デバイスは、少なくとも1つの他のハードウェアブロックを備え、前記第1のスケジュールの動作は、前記第1のハードウェアブロックと前記少なくとも1つの他のハードウェアブロックとの間におけるデータ転送を可能にするように前記少なくとも1つの他のハードウェアブロックのそれぞれの動作スケジュールに対して調整される、請求項31から33のいずれか一項に記載の方法。
【請求項35】
前記少なくとも1つの他のハードウェアブロックは、スカラ演算を実行するように構成された回路を備える、請求項34に記載の方法。
【請求項36】
前記少なくとも1つの他のハードウェアブロックは、ベクトル演算を実行するように構成された回路を備える、請求項34に記載の方法。
【請求項37】
前記第1のハードウェアブロックの前記計算アレイは、行列演算を実行するように構成された回路を備え、前記第2のハードウェアブロックは、メモリアクセス動作を実行するように構成された回路を備える、請求項31から36のいずれか一項に記載の方法。
【請求項38】
前記第2のハードウェアブロックによって、動作の前記第1のスケジュールを記憶するステップを含む、請求項37に記載の方法。
【請求項39】
前記第1のハードウェアブロックによって、前記第1のハードウェアブロックの前記計算アレイの出力を前記第2のハードウェアブロックに転送するステップを含む、請求項37に記載の方法。
【請求項40】
前記第1のハードウェアブロックおよび前記第2のハードウェアブロックは、ニューラルネットワーク動作を実行するように構成された専用回路を含むハードウェアタイルである、請求項31から39のいずれか一項に記載の方法。
【請求項41】
第1のハードウェアブロックと第2のハードウェアブロックとを備える集積回路デバイスによって実行されたときに、前記集積回路に請求項12から20または31から40のいずれか一項に記載の方法を実行させるコンピュータ可読コードを含むコンピュータプログラム。
【請求項42】
先入れ先出し(FIFO)バッファを備える通信インターフェースであって、1つまたは複数の外部デバイスから入力データを受信し、前記1つまたは複数の外部デバイスからの通信の限界遅延に基づく時間間隔で前記FIFOバッファから入力データにアクセスするための指示を含む第3のスケジュールに従って動作するように構成された通信インターフェースをさらに備える、請求項1から11または21から30のいずれか一項に記載のデバイス。
【国際調査報告】