(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-10-31
(54)【発明の名称】ニューラルネットワークハードウェアアクセラレータデータ並列処理
(51)【国際特許分類】
G06N 3/063 20230101AFI20241024BHJP
【FI】
G06N3/063
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2024525511
(86)(22)【出願日】2022-06-22
(85)【翻訳文提出日】2024-06-24
(86)【国際出願番号】 US2022034428
(87)【国際公開番号】W WO2023075867
(87)【国際公開日】2023-05-04
(32)【優先日】2021-10-26
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】520043615
【氏名又は名称】EDGECORTIX株式会社
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】ネズ、ニコライ
(72)【発明者】
【氏名】ハビン、オレグ
(72)【発明者】
【氏名】アハメド、タンヴィル
(72)【発明者】
【氏名】フートマン、イエンス
(72)【発明者】
【氏名】ダスグプタ、サキャシンガ
(57)【要約】
ニューラルネットワークハードウェアアクセラレーションデータ並列処理は、複数のメモリバンク、複数のメモリバンクのうちの各メモリバンクは、値を記憶し、記憶された値を伝送するように構成されている、複数の計算ユニット、複数の計算ユニットのうちの各計算ユニットは、入力データ値及び重み値に対する数学演算を実行して、結果データ値を生成するように構成された回路を含むプロセッサ、及び、値の伝送を1つよりも多くの計算ユニット又はメモリバンクによって受信させるように構成された計算コントローラ、を有する、を備える集積回路によって実行される。
【特許請求の範囲】
【請求項1】
複数のメモリバンク、前記複数のメモリバンクのうちの各メモリバンクは、値を記憶し、記憶された値を伝送するように構成されている;
複数の計算ユニット
を備え、前記複数の計算ユニットのうちの各計算ユニットは:
入力データ値及び重み値に対する数学演算を実行して、結果データ値を生成するように構成された回路を含むプロセッサ;及び
計算コントローラであって:
前記複数のメモリバンクのうちのいずれかから前記入力データ値を受信する
前記複数のメモリバンクのうちのいずれかから前記重み値を受信する
前記プロセッサに前記数学演算を実行させる、及び
前記結果データ値の単一の伝送が前記複数のメモリバンクのうちの少なくとも2つのメモリバンクによって実質的に同様の時刻に受信されるよう、前記少なくとも2つのメモリバンクに前記結果データ値を伝送する
ように構成された計算コントローラ
を有する、集積回路。
【請求項2】
ニューラルネットワーク推論を実行するための命令を受信するように構成されたコントローラを更に備える、請求項1に記載の集積回路。
【請求項3】
前記計算コントローラは、前記少なくとも2つのメモリバンクの各々に対してロックを設定するように更に構成されている、請求項1又は2に記載の集積回路。
【請求項4】
前記計算コントローラは、前記少なくとも2つのメモリバンクのうちの1つ又は複数についてバンクオフセットを適用するように更に構成されている、請求項1又は2に記載の集積回路。
【請求項5】
前記計算コントローラは、前記少なくとも2つのメモリバンクの各々に対するロックを解除するように更に構成されている、請求項1又は2に記載の集積回路。
【請求項6】
前記複数の計算ユニットのうちの第1の計算ユニットの前記計算コントローラは、
前記複数の計算ユニットのうちの第2の計算ユニットを同期させて、前記入力データ値又は前記重み値のうちの一方を受信する、及び
前記入力データ値又は前記重み値のうちの前記一方を記憶する前記メモリバンクが、前記計算コントローラ及び前記第2の計算ユニットによって実質的に同様の時刻に読み出されることになる前記入力データ値又は前記重み値のうちの前記一方の単一の伝送を行うよう、前記複数のメモリバンクのうちの、前記入力データ値又は前記重み値のうちの前記一方を記憶する前記メモリバンクから、前記入力データ値又は前記重み値のうちの前記一方を読み出す
ように更に構成されている、請求項1又は2に記載の集積回路。
【請求項7】
前記プロセッサは、点単位畳み込み又は深さ単位畳み込みを実行するように構成されている、請求項1又は2に記載の集積回路。
【請求項8】
前記複数のメモリバンクのうちの各メモリバンクは、対応するバンクマルチプレクサを通じて受信された値を記憶するように構成されている、請求項1又は2に記載の集積回路。
【請求項9】
前記バンクマルチプレクサは、前記複数の計算ユニットのうちの計算ユニット又は外部メモリに接続するように構成可能である、請求項8に記載の集積回路。
【請求項10】
前記複数の計算ユニットのうちの各計算ユニットは、前記複数のメモリバンクのうちの1つに接続するように構成可能な計算マルチプレクサを更に有する、請求項1又は2に記載の集積回路。
【請求項11】
ニューラルネットワーク推論を実行するように構成された集積回路内に備えられた複数の計算ユニットのうちの第1の計算ユニットが、前記集積回路内に備えられた複数のメモリバンクのうちの、入力データ値を記憶するメモリバンクから、前記入力データ値を取り出す段階;
前記第1の計算ユニットが、前記複数のメモリバンクのうちの、重み値を記憶するメモリバンクから、前記重み値を取り出す段階;
前記第1の計算ユニットが、前記入力データ値及び前記重み値に対する数学演算を実行して、結果データ値を生成する段階;及び
前記第1の計算ユニットが前記結果データ値の単一の伝送を行い、これが前記複数のメモリバンクのうちの少なくとも2つのメモリバンクによって実質的に同様の時刻に受信されるよう、前記第1の計算ユニットが、前記少なくとも2つのメモリバンクに前記結果データ値を伝送する段階
を備える、方法。
【請求項12】
前記集積回路が、ニューラルネットワークの推論を実行するための命令を受信する段階を更に備える、請求項11に記載の方法。
【請求項13】
前記入力データ値を取り出す段階は、前記第1の計算ユニットに対応する第1のマルチプレクサを、前記入力データ値を記憶する前記メモリバンクに接続するように構成する段階を有し、前記重み値を取り出す段階は、前記第1のマルチプレクサを、前記重み値を記憶する前記メモリバンクに接続するように構成する段階を有する、請求項11又は12に記載の方法。
【請求項14】
前記結果データ値を伝送する段階は、前記少なくとも2つのメモリバンクの各々に対してロックを設定する段階を有する、請求項11又は12に記載の方法。
【請求項15】
前記結果データ値を伝送する段階は、前記少なくとも2つのメモリバンクのうちの1つ又は複数についてバンクオフセットを適用する段階を有する、請求項11又は12に記載の方法。
【請求項16】
前記結果データ値を伝送する段階は、前記少なくとも2つのメモリバンクのうちの各々に対するロックを解除する段階を有する、請求項11又は12に記載の方法。
【請求項17】
前記入力データ値又は前記重み値のうちの一方を取り出す段階は、
第2の計算ユニットを同期させて、前記入力データ値又は前記重み値のうちの前記一方を読み出す段階、及び
前記入力データ値又は前記重み値のうちの前記一方を記憶する前記メモリバンクが、前記第1の計算ユニット及び前記第2の計算ユニットによって実質的に同様の時刻に読み出される前記入力データ値又は前記重み値のうちの前記一方の単一の伝送を行うよう、前記第1の計算ユニットが、前記複数のメモリバンクのうちの、前記入力データ値又は前記重み値のうちの前記一方を記憶する前記メモリバンクから、前記入力データ値又は前記重み値のうちの前記一方を読み出す段階
を有する、請求項11又は12に記載の方法。
【請求項18】
複数のメモリバンク、前記複数のメモリバンクのうちの各メモリバンクは、値を記憶し、記憶された値を伝送するように構成されている;及び
複数の計算ユニット、前記複数の計算ユニットのうちの各計算ユニットは、
入力データ値及び重み値に対する数学演算を実行して、結果データ値を生成するように構成された回路を含むプロセッサ、及び、
計算コントローラ
を有し、ここで前記複数の計算ユニットのうちの第1の計算ユニットの前記計算コントローラは、
前記複数の計算ユニットのうちの第2の計算ユニットを同期させて、前記入力データ値又は前記重み値のうちの一方を受信する、及び
前記入力データ値又は前記重み値のうちの前記一方を記憶する前記メモリバンクが、前記計算コントローラ及び前記第2の計算ユニットによって実質的に同様の時刻に読み出されることになる前記入力データ値又は前記重み値のうちの前記一方の単一の伝送を行うよう、前記複数のメモリバンクのうちの、前記入力データ値又は前記重み値のうちの前記一方を記憶する前記メモリバンクから、前記入力データ値又は前記重み値のうちの前記一方を読み出す
ように構成されている
を備える、集積回路。
【請求項19】
前記計算コントローラは、
前記複数のメモリバンクのうちのいずれかから前記入力データ値を受信する
前記複数のメモリバンクのうちのいずれかから前記重み値を受信する
前記プロセッサに前記数学演算を実行させる、及び
前記結果データ値の単一の伝送が前記複数のメモリバンクのうちの少なくとも2つのメモリバンクによって実質的に同様の時刻に受信されるよう、前記少なくとも2つのメモリバンクに前記結果データ値を伝送する
ように更に構成されている、請求項18に記載の集積回路。
【請求項20】
前記計算コントローラは、前記複数のメモリバンクのうちの少なくとも2つのメモリバンクの各々に対してロックを設定するように更に構成されている、請求項18又は19に記載の集積回路。
【発明の詳細な説明】
【背景技術】
【0001】
関連出願の相互参照
本願は、2021年10月26日に出願された米国非仮出願第17/510,397号に対する優先権を主張するものであり、その全体が参照により本明細書に組み込まれる。
リアルタイムニューラルネットワーク(neural network:NN)推論は、自律車両、ロボット工学、スマートフォン、ポータブルヘルスケアデバイス、監視等のような応用についてのエッジデバイス上のコンピュータビジョン又は発話タスクのために広く普及しつつある。専用のNN推論ハードウェアは、電力効率の良い推論を提供する主流の方法となっている。
【図面の簡単な説明】
【0002】
本開示の態様は、添付の図と共に読まれる場合、以下の発明を実施するための形態から最も良く理解される。産業における標準的な慣行に従い、様々な特徴は縮尺通りに描かれていないことに留意されたい。実際には、様々な特徴の寸法は、論述を明確にするために、任意に増加又は減少し得る。
【0003】
【
図1】本発明の少なくとも1つの実施形態による、ニューラルネットワークハードウェアアクセラレーションデータ並列処理のための集積回路の概略図である。
【0004】
【
図2】本発明の少なくとも1つの実施形態による、ニューラルネットワークハードウェアアクセラレーションデータ並列処理のための集積回路における計算ユニット及びメモリバンク相互接続の概略図である。
【0005】
【
図3】本発明の少なくとも1つの実施形態による、ニューラルネットワークハードウェアアクセラレーテッド推論(neural network hardware accelerated inference)についての動作フローである。
【0006】
【
図4】本発明の少なくとも1つの実施形態による、結果値の伝送についての動作フローである。
【0007】
【
図5】本発明の少なくとも1つの実施形態による、データ並列記録中の計算ユニット及びメモリバンク相互接続の概略図である。
【0008】
【
図6】本発明の少なくとも1つの実施形態による、共通メモリバンクからの読み出しの間における計算ユニットの動作及び時刻のグラフである。
【0009】
【
図7】本発明の少なくとも1つの実施形態による、別個のメモリバンクからの読み出しの間における計算ユニットの動作及び時刻のグラフである。
【0010】
【
図8】本発明の少なくとも1つの実施形態による、値の取り出しについての動作フローである。
【0011】
【
図9】本発明の少なくとも1つの実施形態による、データ並列読み出し中の計算ユニット及びメモリバンク相互接続の概略図である。
【0012】
【
図10A】本発明の実施形態による、深さ単位畳み込みプロセッサの例示的な構成を示す。
【0013】
【
図10B】本発明の実施形態による、深さ単位畳み込みプロセッサについてのチャネル毎パイプラインの例示的な構成を示す。
【0014】
【
図11】本発明の実施形態による、点単位畳み込みプロセッサの例示的な構成を示す。
【発明を実施するための形態】
【0015】
以下の開示は、提供される主題の異なる特徴を実装するための、多くの異なる実施形態又は例を提供する。構成要素、値、動作、材料又は配列等の具体例が、本開示を簡潔にするために以下で説明される。当然ながら、これらは単なる例であって、限定を意図するものではない。他の構成要素、値、動作、材料又は配列等が企図される。加えて、本開示は、様々な例において参照番号及び/又は文字を繰り返し得る。この繰り返しは、簡略化及び明確さを目的としており、それ自体が、論述される様々な実施形態及び/又は構成の間の関係を規定するものではない。
【0016】
一部のニューラルネットワークハードウェアアクセラレータは、複数のプロセッサ間で推論動作を分散させることにより、そのような動作を実行する。そのようなニューラルネットワークハードウェアアクセラレータは、動作間で様々な値を保持するための複数のメモリバンクをも備える。各プロセッサは、計算のためにメモリバンクのうちのいずれか1つから値を読み出すが、単一のメモリバンクは、1度に1つのプロセッサによってのみ読み出される。メモリバンクを読み出すプロセッサは、他のプロセッサが当該メモリバンクと相互作用すること、及び、場合によってはデータを破壊することを防止するため、当該メモリバンク上にロックを配置する。同様に、各プロセッサは、計算の結果として得られる値をメモリバンクのうちのいずれかに記録するが、単一のメモリバンクは、データ破壊を防止するために、1度に1つのプロセッサからのみ値を受信する。
【0017】
一部のタイプのニューラルネットワークの推論は、単一の計算の結果として得られる値に対して1つよりも多くの後続の計算を実行することを含む。複数のプロセッサを有するニューラルネットワークハードウェアアクセラレータに対する推論を実行するとき、異なるプロセッサは、後続の動作を同時に実行することができる。しかしながら、1度に1つのプロセッサのみが単一の計算の結果として得られる値を読み出すことができるため、プロセッサのうちの一方は、他方のプロセッサが値を読み出すのを待機しなければならないことから、一方の後続のプロセスは、他方の後続のプロセスと比較して遅延する。
【0018】
本明細書の少なくとも幾つかの実施形態において、複数のプロセッサ及び複数のメモリバンクを備えるニューラルネットワークハードウェアアクセラレータは、各プロセッサが1つよりも多くのメモリバンクに結果値を記録できるように構成される。少なくとも幾つかの実施形態において、ニューラルネットワークハードウェアアクセラレータは、1つよりも多くのメモリバンクに値を記録するように構成された外部メモリインタフェースを備える。少なくとも幾つかの実施形態において、ニューラルネットワークハードウェアアクセラレータは、少なくとも幾つかの命令の結果として得られる値のデータ並列記録を実行するように構成される。少なくとも幾つかの実施形態において、ニューラルネットワーク推論を実行しながら、少なくとも幾つかの結果値の各々を2つのメモリバンクに記録することで、プロセッサがメモリから値を読み出すための待機時間が短縮されることに起因して、推論タスクを完了させるためにニューラルネットワークハードウェアアクセラレータが必要とする時間量が著しく減少する結果となる。
【0019】
本明細書の少なくとも幾つかの実施形態において、複数のプロセッサ及び複数のメモリバンクを備えるニューラルネットワークハードウェアアクセラレータは、各プロセッサがメモリバンクからの値を読み出すことができるように構成され、それにより、他のプロセッサは、値が読み出されるときにメモリバンクからの値の伝送を受信するように構成される。
少なくとも幾つかの実施形態において、メモリバンクからの値の読み出しから同じ伝送を受信するように複数のプロセッサを構成することで、複数のプロセッサが同じメモリバンクから個々に値を読み出すための時間が短縮される。
【0020】
図1は、本発明の少なくとも1つの実施形態による、ニューラルネットワークハードウェアアクセラレーションデータ並列処理のための集積回路100の概略図である。少なくとも幾つかの実施形態において、集積回路100は、
図1に示されるようにプログラミングされているフィールドプログラマブルゲートアレイ(Field Programmable Gate Array:FPGA)である。少なくとも幾つかの実施形態において、集積回路100は、
図1に示されるように専用回路を備える特定用途向け集積回路(Application Specific Integrated Circuit:ASIC)である。集積回路100は、データバス102、汎用コントローラ104、外部メモリインタフェース106、計算ユニット110などの複数の計算ユニット、及び、メモリバンク120などの複数のメモリバンクを備える。
【0021】
データバス102は、計算ユニット、メモリバンク、及び外部メモリインタフェース106を接続する複数のインターコネクトを有する。少なくとも幾つかの実施形態において、データバス102は、任意の計算ユニット又は外部メモリインタフェース106から任意のメモリバンクへの値の伝送を促進するように構成されている。少なくとも幾つかの実施形態において、データバス102は、任意のメモリバンクから任意の計算ユニット又は外部メモリインタフェース106への値の伝送を促進するように構成されている。少なくとも幾つかの実施形態において、データバス102は、パッシブインターコネクトを有する。
【0022】
少なくとも幾つかの実施形態において、集積回路100は、ニューラルネットワーク推論を実行するための命令を受信するように構成された、汎用コントローラ104などのコントローラを備える。汎用コントローラ104は、集積回路100にニューラルネットワーク推論を実行させるための命令を実行するように構成された回路を有する。少なくとも幾つかの実施形態において、汎用コントローラ104は、ホストプロセッサからコンパイルされた命令を受信するように構成されている。少なくとも幾つかの実施形態において、コンパイルされた命令は、動作のスケジュール、各動作を実行するための指定された計算ユニット、中間データを記憶するための指定されたメモリバンク及びアドレス、及び、集積回路がニューラルネットワーク推論を実行するために必要とされる任意の他の詳細を含む。
【0023】
外部メモリインタフェース106は、メモリバンク及び計算ユニットが外部メモリとデータを交換することを可能にするように構成された回路を含む。少なくとも幾つかの実施形態において、外部メモリは、ホストプロセッサと通信するDRAMメモリである。少なくとも幾つかの実施形態において、集積回路100がニューラルネットワーク推論用のデータの小さな作業部分を記憶する一方で、DRAMメモリは当該データの残りを記憶する。
【0024】
計算ユニット110などの計算ユニットは、メモリバンクに記憶された入力値及び記憶された重み値に対する数学演算を実行するように構成された回路を有する。少なくとも幾つかの実施形態において、計算ユニットは、部分和をメモリバンクに出力する。少なくとも幾つかの実施形態において、計算ユニットは、メモリバンクに記憶された既存の部分和を用いて累積を実行する。少なくとも幾つかの実施形態において、計算ユニットは、深さ単位畳み込み又は点単位畳み込みを実行するように構成された少なくとも1つのプロセッサを有する。少なくとも幾つかの実施形態において、計算ユニットは、MobileNetアーキテクチャにおける反転残差ブロック(Inverted Residual Blocks)などの、深さ単位畳み込み及び点単位畳み込み層の組み合わせをサポートする汎用畳み込みプロセッサを有する。少なくとも幾つかの実施形態において、計算ユニットは、ディープネットワーク又は任意の他のタイプのニューラルネットワークの推論のための他の動作を実行するように構成されたプロセッサを有する。少なくとも幾つかの実施形態において、集積回路100は複数の計算ユニットを備え、複数の計算ユニットのうちの各計算ユニットは、入力データ値及び重み値に対する数学演算を実行して、結果データ値を生成するように構成された回路を含むプロセッサ、及び、計算コントローラを有する。少なくとも幾つかの実施形態において、計算ユニットは
図2において示されるように構成され、これについては以下で説明される。
【0025】
メモリバンク120などのメモリバンクは、データを記憶するように構成された回路を有する。少なくとも幾つかの実施形態において、メモリバンクは、揮発性データストレージを有する。少なくとも幾つかの実施形態において、集積回路100は複数のメモリバンクを備え、複数のメモリバンクのうちの各メモリバンクは、値を記憶し、記憶された値を伝送するように構成されている。少なくとも幾つかの実施形態において、メモリバンクは
図2において示されるように構成され、これについては以下で説明される。
【0026】
図2は、本発明の少なくとも1つの実施形態による、ニューラルネットワークハードウェアアクセラレーションデータ並列処理のための集積回路における計算ユニット及びメモリバンク相互接続の概略図である。
図2は、データバス202を通じて接続された計算ユニット210及びメモリユニット222を示す。
【0027】
計算ユニット210は、プロセッサ212、マルチプレクサ214、及び計算コントローラ216を有する。少なくとも幾つかの実施形態において、プロセッサ212は、数学演算を実行するように構成された回路を含む。少なくとも幾つかの実施形態において、プロセッサ212は、点単位畳み込み又は深さ単位畳み込みなどの畳み込み演算を実行するように構成されている。少なくとも幾つかの実施形態において、プロセッサ212は、点単位畳み込み又は深さ単位畳み込みを実行するように構成されている。少なくとも幾つかの実施形態において、プロセッサ212は、高さ(KH)×幅(KW)のカーネルサイズ、鉛直及び水平ストライド、拡張、パディング等のような、数学演算の異なるパラメータについて直接のサポートを提供するように構成されている。プロセッサ212は、マルチプレクサ214を通じてデータバス202に接続されたデータ入力を含み、かつ、データバス202に接続されたデータ出力を含む。
【0028】
マルチプレクサ214は、データバス202からの複数の入力、及び、プロセッサ212からの単一の出力を含む。少なくとも幾つかの実施形態において、マルチプレクサ214は、データバス202からプロセッサ212へのデータ入力接続を選択するように構成されている。少なくとも幾つかの実施形態において、マルチプレクサ214は、計算コントローラ216からの、信号などの選択命令に応答するように構成されている。少なくとも幾つかの実施形態において、マルチプレクサ214は、集積回路内の各メモリバンクに対するデータバス202からの入力を含む。少なくとも幾つかの実施形態において、各計算ユニットは、複数のメモリバンクのうちの1つに接続するように構成可能な計算マルチプレクサを含む。少なくとも幾つかの実施形態において、複数のメモリバンクのうちの各メモリバンクは、対応するバンクマルチプレクサを通じて受信された値を記憶するように構成されている。
【0029】
計算コントローラ216は、計算ユニット210を動作させるように構成された回路を含む。少なくとも幾つかの実施形態において、計算コントローラ216は、集積回路の汎用コントローラから信号を受信し、受信された信号に従って計算ユニット210を動作させるように構成されている。少なくとも幾つかの実施形態において、計算コントローラ216は、マルチプレクサ214に、プロセッサ212を特定のメモリバンクに接続させ、プロセッサ212に、接続されたメモリバンクから1つ又は複数の値を読み出させ、プロセッサ212に、当該1つ又は複数の値に対する数学演算を実行させ、次に、プロセッサ212に、1つ又は複数のメモリバンクに結果値を記録させる。少なくとも幾つかの実施形態において、計算コントローラ216は、複数のメモリバンクのうちのいずれかから入力データ値を受信する、複数のメモリバンクのうちのいずれかから重み値を受信する、プロセッサに数学演算を実行させる、及び、結果データ値の単一の伝送が少なくとも2つのメモリバンクによって実質的に同様の時刻に受信されるよう、複数のメモリバンクのうちの少なくとも2つのメモリバンクに結果データ値を伝送する、ように構成されている。
少なくとも幾つかの実施形態において、計算コントローラ216は、少なくとも2つのメモリバンクの各々に対してロックを設定するように更に構成されている。少なくとも幾つかの実施形態において、計算コントローラ216は、少なくとも2つのメモリバンクのうちの1つ又は複数についてバンクオフセットを適用するように更に構成されている。少なくとも幾つかの実施形態において、計算コントローラ216は、少なくとも2つのメモリバンクのうちの1つ又は複数についてバンクオフセットを適用するように更に構成されている。少なくとも幾つかの実施形態において、計算コントローラ216は、少なくとも2つのメモリバンクの各々に対するロックを解除するように更に構成されている。少なくとも幾つかの実施形態において、計算コントローラ216は、複数の計算ユニットのうちの第2の計算ユニットを同期させて、入力データ値又は重み値のうちの一方を受信する、及び、入力データ値又は重み値のうちの一方を記憶するメモリバンクが、計算コントローラ及び第2の計算ユニットによって実質的に同様の時刻に読み出されることになる入力データ値又は重み値のうちの一方の単一の伝送を行うよう、複数のメモリバンクのうちの、入力データ値又は重み値のうちの一方を記憶するメモリバンクから、入力データ値又は重み値のうちの一方を読み出す、ように更に構成されている。
【0030】
メモリユニット222は、メモリバンク220、マルチプレクサ224、及びメモリコントローラ226を有する。少なくとも幾つかの実施形態において、メモリバンク220は、以下の説明が異なる場合を除き、
図1のメモリバンク120と実質的に同じ構造を有し、実質的に同じ機能を実行する。マルチプレクサ224は、データバス202からの複数の入力、及び、メモリバンク220への単一の出力を含む。少なくとも幾つかの実施形態において、マルチプレクサ224は、データバス202からメモリバンク220へのデータ入力接続を選択するように構成されている。少なくとも幾つかの実施形態において、マルチプレクサ224は、メモリコントローラ226からの、信号などの選択命令に応答するように構成されている。少なくとも幾つかの実施形態において、マルチプレクサ224は、外部メモリインタフェース、及び集積回路内の各計算ユニットに対するデータバス202からの入力を含む。少なくとも幾つかの実施形態において、各バンクマルチプレクサ224は、複数の計算ユニットのうちの計算ユニットのうちの1つ又は外部メモリに接続するように構成可能である。
【0031】
メモリコントローラ226は、メモリユニット222を動作させるように構成された回路を含む。少なくとも幾つかの実施形態において、メモリコントローラ226は、集積回路の汎用コントローラから信号を受信し、受信された信号に従ってメモリユニット222を動作させるように構成されている。少なくとも幾つかの実施形態において、メモリコントローラ226は、計算ユニットから受信された信号に応答してメモリバンク220をロックし、メモリバンク220に、記録された値を1つ又は複数の計算ユニットに伝送させる。少なくとも幾つかの実施形態において、メモリコントローラ226は、マルチプレクサ224に、メモリバンク220を特定の計算ユニットに接続させ、メモリバンク220に、当該接続された計算ユニットから伝送された1つ又は複数の値を記録させる。
【0032】
データバス202は、以下の説明が異なる場合を除き、
図1のデータバス102と実質的に同じ構造を有し、実質的に同じ機能を実行する。データバス202は、計算ユニット、メモリバンク、及び外部メモリインタフェースを接続する、インターコネクト203などの複数のインターコネクトを有する。インターコネクト203は、メモリバンク220をマルチプレクサ214に接続する。少なくとも幾つかの実施形態において、インターコネクト203は、メモリバンク220を集積回路内の全ての他の計算ユニットのマルチプレクサに接続する線の一部である。
【0033】
図3は、本発明の少なくとも1つの実施形態による、ニューラルネットワークハードウェアアクセラレーテッド推論についての動作フローである。本動作フローは、ニューラルネットワークハードウェアアクセラレーションデータ並列処理のための方法を提供し得る。少なくとも幾つかの実施形態において、本方法は、
図2において示される計算コントローラ216又は
図1において示される汎用コントローラ104など、特定の動作を実行するためのセクションを含むコントローラによって実行される。
【0034】
S330で、受信セクションは、値に対する数学演算を実行するための命令を受信する。少なくとも幾つかの実施形態において、命令は、各値の位置を含み、各位置はメモリバンク識別子、及び、当該メモリバンク内のアドレスによって識別される。少なくとも幾つかの実施形態において、命令は、実行すべき1つ又は複数の数学演算を示す。少なくとも幾つかの実施形態において、命令は、結果値を記録するための1つ又は複数の位置を含み、各位置はメモリバンク識別子、及び、当該メモリバンク内のアドレスによって識別される。
少なくとも幾つかの実施形態において、受信セクションは、集積回路によって、ニューラルネットワークの推論を実行するための命令を受信する。少なくとも幾つかの実施形態において、推論を実行するための命令は、数学演算を実行するための複数の命令を含む。少なくとも幾つかの実施形態において、受信セクションは、計算ユニットによって、推論を実行するための命令に基づき、汎用コントローラから命令を受信する。
【0035】
S332で、取り出しセクション又はそのサブセクションは、データ値を取り出す。少なくとも幾つかの実施形態において、取り出しセクションは、データバスを通じて1つ又は複数のメモリバンクからデータ値を取り出す。少なくとも幾つかの実施形態において、取り出しセクションは、データ値を記憶するメモリバンクに接続するためにマルチプレクサの入力を選択する。少なくとも幾つかの実施形態において、取り出しセクションは、ニューラルネットワーク推論を実行するように構成された集積回路内に備えられた複数の計算ユニットのうちの第1の計算ユニットによって、当該集積回路内に備えられた複数のメモリバンクのうちの、入力データ値を記憶するメモリバンクから入力データ値を取り出す。少なくとも幾つかの実施形態において、取り出しセクションは、第1の計算ユニットに対応する第1のマルチプレクサを、入力データ値を記憶するメモリバンクに接続するように構成する。少なくとも幾つかの実施形態において、データ値の取り出しプロセスは、
図8に関して以下で説明されるように実行される。
【0036】
S333で、取り出しセクション又はそのサブセクションは、重み値を取り出す。少なくとも幾つかの実施形態において、取り出しセクションは、データバスを通じて1つ又は複数のメモリバンクから重み値を取り出す。少なくとも幾つかの実施形態において、取り出しセクションは、重み値を記憶するメモリバンクに接続するためにマルチプレクサの入力を選択する。少なくとも幾つかの実施形態において、取り出しセクションは、第1の計算ユニットによって、複数のメモリバンクのうちの、重み値を記憶するメモリバンクから、重み値を取り出す。少なくとも幾つかの実施形態において、取り出しセクションは、重み値を記憶する1つのメモリバンクに接続するために第1のマルチプレクサを構成する。少なくとも幾つかの実施形態において、重み値の取り出しプロセスは、
図8に関して以下で説明されるように実行される。
【0037】
S335で、演算セクション又はそのサブセクションは、数学演算を実行する。少なくとも幾つかの実施形態において、演算セクションは、S332で取り出されたデータ値及びS333で取り出された重み値に対する数学演算を実行する。少なくとも幾つかの実施形態において、演算セクションは、
図2におけるプロセッサ212などのプロセッサに、数学演算を実行させる。少なくとも幾つかの実施形態において、演算セクションは、第1の計算ユニットによって、入力データ値及び重み値に対する数学演算を実行して、結果データ値を生成する。少なくとも幾つかの実施形態において、演算セクションは、S335における演算の先行する反復の結果データ値及びS333で取り出された重み値に対する数学演算を実行する。
【0038】
S336で、コントローラ又はそのサブセクションは、S330で受信された命令内の全ての演算が実行されたかどうかを判定する。少なくとも幾つかの実施形態において、S335での演算の結果値は、メモリバンクに記録される前に更なる演算の対象となる。コントローラが、命令が更なる演算を含むと判定した場合、動作フローは、S333における重み値の取り出しに戻る。コントローラが、命令内の全ての演算が実行されたと判定した場合、動作フローは、S338における結果値の伝送に進む。
【0039】
S338で、伝送セクション又はそのサブセクションは、結果値を1つ又は複数のメモリバンクに伝送する。少なくとも幾つかの実施形態において、伝送セクションは、データバスを通じて、1つ又は複数のメモリバンクに結果値を伝送する。少なくとも幾つかの実施形態において、伝送セクションは、計算ユニットに結果値を伝送させる。少なくとも幾つかの実施形態において、伝送セクションは、1つ又は複数のメモリバンクの各対応するメモリユニットのマルチプレクサに、記録のために計算ユニットに接続するよう命令する。少なくとも幾つかの実施形態において、結果値の伝送プロセスは、
図4に関して以下で説明されるように実行される。
【0040】
図4は、本発明の少なくとも1つの実施形態による、結果値の伝送についての動作フローである。動作フローは、
図3におけるS338で実行される動作など、結果値を伝送するための方法を提供し得る。少なくとも幾つかの実施形態において、本方法は、
図2において示される計算コントローラ216又は
図1において示される汎用コントローラ104などのコントローラの伝送セクションによって実行される。
【0041】
S440で、伝送セクション又はそのサブセクションは、伝送が結果値の1つ又は複数の重複を記録することを伴うかどうかを判定する。少なくとも幾つかの実施形態において、コントローラによって受信される命令は、重複記録を伴う伝送のための1つよりも多くのメモリ位置を示す。コントローラが、伝送が重複記録を伴わないと判定した場合、動作フローはS442における単一のバンクロックに進む。コントローラが、伝送が重複記録を伴うと判定した場合、動作フローはS445における複数のバンクロックに進む。
【0042】
S442で、伝送セクション又はそのサブセクションは、結果値が記録されることになる単一のメモリバンクをロックする。少なくとも幾つかの実施形態において、伝送セクションは、単一のメモリバンクに対してロックを設定する。少なくとも幾つかの実施形態において、伝送セクションは、対応するメモリユニットのメモリコントローラに、計算ユニットからの記録のためにメモリバンクをロックするよう命令する。
【0043】
S443で、伝送セクション又はそのサブセクションは、結果値が記録されることになる単一のメモリバンクにバンクオフセットを設定する。少なくとも幾つかの実施形態において、伝送セクションは、単一のメモリバンクについてバンクオフセットを適用する。少なくとも幾つかの実施形態において、命令は、1つ又は複数のバンクオフセットを含み、各バンクオフセットは、集積回路内のメモリバンクに対応する。単一のメモリバンクが命令内のバンクオフセットに関連付けられることに応答して、少なくとも幾つかの実施形態において、伝送セクションは、結果値が指定されたアドレスに記録されるよう、当該バンクオフセットに基づきメモリバンク内のアドレスを調整する。
【0044】
S445で、伝送セクション又はそのサブセクションは、結果値が記録されることになる複数のメモリバンクをロックする。少なくとも幾つかの実施形態において、伝送セクションは、少なくとも2つのメモリバンクの各々に対してロックを設定する。少なくとも幾つかの実施形態において、伝送セクションは、各対応するメモリユニットのメモリコントローラに、計算ユニットからの記録のためにメモリバンクをロックするよう命令する。
【0045】
S446で、伝送セクション又はそのサブセクションは、結果値が記録されることになる複数のメモリバンクにバンクオフセットを設定する。少なくとも幾つかの実施形態において、伝送セクションは、少なくとも2つのメモリバンクのうちの1つ又は複数についてバンクオフセットを適用する。少なくとも幾つかの実施形態において、命令は、1つ又は複数のバンクオフセットを含み、各バンクオフセットは、集積回路内のメモリバンクに対応する。メモリバンクのうちの1つ又は複数が命令内のバンクオフセットに関連付けられることに応答して、少なくとも幾つかの実施形態において、伝送セクションは、結果値が指定されたアドレスに記録されるよう、当該関連付けられたバンクオフセットに基づきそれらのメモリバンク内のアドレスを調整する。
【0046】
S448で、伝送セクション又はそのサブセクションは、S442又はS445で結果値を受信するようにロックされた1つ又は複数のバンクに結果値を伝送する。少なくとも幾つかの実施形態において、伝送セクションは、計算ユニットに結果値を伝送させる。少なくとも幾つかの実施形態において、伝送セクションは、第1の計算ユニットが結果データ値の単一の伝送を行い、これが少なくとも2つのメモリバンクによって実質的に同様の時刻に受信されるよう、第1の計算ユニットにより、複数のメモリバンクのうちの少なくとも2つのメモリバンクに結果データ値を伝送する。少なくとも幾つかの実施形態において、伝送セクションは、第1の計算ユニットにより、結果データ値を単一のメモリバンクに伝送する。
【0047】
S449で、伝送セクション又はそのサブセクションは、S442又はS445でロックされた1つ又は複数のバンクのロックを解除する。少なくとも幾つかの実施形態において、伝送セクションは、各対応するメモリユニットのメモリコントローラに、メモリバンクのロックを解除するよう命令する。少なくとも幾つかの実施形態において、伝送セクションは、少なくとも2つのメモリバンクの各々に対するロックを解除する。
【0048】
図5は、本発明の少なくとも1つの実施形態による、データ並列記録中の計算ユニット及びメモリバンク相互接続の概略図である。本図は、データバス502、計算ユニット510、メモリバンク520A、及びメモリバンク520Bを含む集積回路500を有する。データバス502、計算ユニット510、及びメモリバンク520A及び520Bは、以下で説明が異なる場合を除き、それぞれ
図1のデータバス102、計算ユニット110、及びメモリバンク120と実質的に同じ構造を有し、実質的に同じ機能を実行する。
【0049】
データ並列記録中に、複数のメモリバンクが結果値をその上に記録するように指定されている
図4のS448における動作のように、結果値が複数のメモリバンクに伝送される。推論中に、計算ユニット510がメモリバンク520A及びメモリバンク520Bに結果値を記録するよう命令される少なくとも幾つかの実施形態において、伝送セクションは、メモリバンク520A及びメモリバンク520Bの各対応するメモリユニットのマルチプレクサに、記録のために計算ユニット510に接続するよう命令する。少なくとも幾つかの実施形態において、
図5に示されるデータバス502を通じた相互接続は、計算ユニット510からの出力をメモリバンク520A及びメモリバンク520Bにルーティングする。従って、計算ユニット510からの単一の伝送は、メモリバンク520A及びメモリバンク520Bの両方によって受信される。少なくとも幾つかの実施形態において、伝送は、メモリバンク520Bによって同じ伝送が受信されるのと実質的に同様の時刻にメモリバンク520Aによって受信される。少なくとも幾つかの実施形態において、メモリバンク520A及びメモリバンク520Bの間における同じ伝送の受信の時間差は、計算ユニット510及びそれぞれのメモリバンクの間の物理的距離の差に起因する。少なくとも幾つかの実施形態において、受信の時間差は無視できるものである。少なくとも幾つかの実施形態において、受信の時間差に起因する伝送の受信におけるエラーは、集積回路のクロックタイムを短縮することによって解消される。
【0050】
図6は、本発明の少なくとも1つの実施形態による、共通メモリバンクからの読み出しの間における計算ユニットの動作及び時刻のグラフである。水平軸は計算ユニットを表し、一方、垂直軸は時刻を表す。
【0051】
T0で、第1の計算ユニット610Aは、660A、662A、664A、666A及び668Aを含む一連の動作の実行を開始する。660Aで、第1の計算ユニット610Aは、第1の入力データ値を記憶するメモリバンクから第1の入力データ値を受信する。662Aで、第1の計算ユニット610Aは、重み値を記憶する第1のメモリバンクをロックする。664Aで、第1の計算ユニット610Aは、第1のメモリバンクから重み値を受信する。666Aで、第1の計算ユニット610Aは、第1の入力データ値及び重み値に対する計算を実行する。668Aで、第1の計算ユニット610Aは、第1のメモリバンクを解放する。T2で、第1の計算ユニット610Aによって実行される一連の動作が完了する。
【0052】
T1で、第2の計算ユニット610Bは、660B、662B、664B、666B及び668Bを含む一連の動作の実行を開始する。660Bで、第2の計算ユニット610Bは、第2の入力データ値を記憶するメモリバンクから第2の入力データ値を受信する。少なくとも幾つかの実施形態において、660A及び660Bにおける動作は同時に実行され、すなわち、T0=T1である。少なくとも幾つかの実施形態において、660Aにおける動作の実行及び660Bにおける動作の実行の間に遅延が存在する。少なくとも幾つかの実施形態において、第2の計算ユニット610Bが第2の入力データ値を記憶するメモリバンクから第2の入力データ値を受信すると、第2の計算ユニット610Bは次に、重み値の取り出しに移行する。しかしながら、重み値を記憶する第1のメモリバンクが第1の計算ユニット610Aにロックされている間、第2の計算ユニット610Bは第1のメモリバンクから重み値を取り出すことができない。少なくとも幾つかの実施形態において、第2の計算ユニット610Bは、第1の計算ユニット610Aが第1のメモリバンクに対するロックを解除するまで待機して、第1のメモリバンクから重み値を取り出す。
【0053】
T2で、第2の計算ユニット610Bは、662Bで一連の動作の実行を継続する。662Bで、第2の計算ユニット610Bは、第1のメモリバンクをロックする。664Bで、第2の計算ユニット610Bは、第1のメモリバンクから重み値を受信する。666Bで、第2の計算ユニット610Bは、第2の入力データ値及び重み値に対する計算を実行する。668Bで、第2の計算ユニット610Bは、第1のメモリバンクを解放する。2つの計算ユニットが同じメモリバンクに記憶された同じ値に対して演算を実行する少なくとも幾つかの実施形態において、使用される時間の総量は、1つの計算ユニットが演算を実行するために使用する時間の量のほぼ2倍である。
【0054】
図7は、本発明の少なくとも1つの実施形態による、別個のメモリバンクからの読み出しの間における計算ユニットの動作及び時刻のグラフである。水平軸は計算ユニットを表し、一方、垂直軸は時刻を表す。
【0055】
T0で、第1の計算ユニット710Aは、760A、762A、764A、766A及び768Aを含む一連の動作の実行を開始する。760Aで、第1の計算ユニット710Aは、第1の入力データ値を記憶するメモリバンクから第1の入力データ値を受信する。762Aで、第1の計算ユニット710Aは、重み値を記憶する第1のメモリバンクをロックする。764Aで、第1の計算ユニット710Aは、第1のメモリバンクから重み値を受信する。766Aで、第1の計算ユニット710Aは、第1の入力データ値及び重み値に対する計算を実行する。768Aで、第1の計算ユニット710Aは、第1のメモリバンクを解放する。T2で、第1の計算ユニット710Aによって実行される一連の動作が完了する。
【0056】
T1で、第2の計算ユニット710Bは、760B、762B、764B、766B及び768Bを含む一連の動作の実行を開始する。760Bで、第2の計算ユニット710Bは、第2の入力データ値を記憶するメモリバンクから第2の入力データ値を受信する。少なくとも幾つかの実施形態において、760A及び760Bにおける動作は同時に実行され、すなわち、T0=T1である。少なくとも幾つかの実施形態において、760Aにおける動作の実行及び760Bにおける動作の実行の間に遅延が存在する。少なくとも幾つかの実施形態において、第2の計算ユニット710Bが第2の入力データ値を記憶するメモリバンクから第2の入力データ値を受信すると、第2の計算ユニット710Bは次に、重み値の取り出しに移行する。少なくとも幾つかの実施形態において、重み値を記憶する第1のメモリバンクは第1の計算ユニット710Aにロックされているが、第2の計算ユニット710Bは、第1の計算ユニット710Aが第1のメモリバンクに対するロックを解除するまで待機することなく、第2のメモリバンクから重み値を取り出す。
【0057】
762Bで、第2の計算ユニット710Bは、第2のメモリバンクをロックする。764Bで、第2の計算ユニット710Bは、第2のメモリバンクから重み値を受信する。766Bで、第2の計算ユニット710Bは、第2の入力データ値及び重み値に対する計算を実行する。768Bで、第2の計算ユニット710Bは、第2のメモリバンクを解放する。2つの計算ユニットが別個のメモリバンクに記憶された同じ値に対して演算を実行する少なくとも幾つかの実施形態において、使用される時間の総量は僅かである、又は、1つの計算ユニットが演算を実行するために使用する時間の量以下である。少なくとも幾つかの実施形態において、複数のメモリバンクが結果値をその上に記録するように指定されている
図4のS448における動作のように、結果値が複数のメモリバンクに伝送されるデータ並列記録は、2つの計算ユニットが別個のメモリバンクに記憶された同じ値に対して演算を実行することを可能にし、それにより、ニューラルネットワーク推論を完了させるために集積回路によって使用される全体の時間を短縮する。少なくとも幾つかの実施形態において、データ並列処理は、ダークシリコンを削減する。
【0058】
図8は、本発明の少なくとも1つの実施形態による、値の取り出しについての動作フローである。動作フローは、
図3におけるS332又はS333で実行される動作など、値を取り出すための方法を提供し得る。少なくとも幾つかの実施形態において、本方法は、
図2において示される計算コントローラ216又は
図1において示される汎用コントローラ104などのコントローラの取り出しセクションによって実行される。
【0059】
S870で、取り出しセクション又はそのサブセクションは、一次計算ユニットがメモリバンクから値を取り出すことによって引き起こされるメモリバンクからの伝送を二次計算ユニットが読み出すことができるよう、取り出しがブロードキャストを伴うかどうかを判定する。少なくとも幾つかの実施形態において、コントローラによって受信される命令は、重複読み出しを伴う取り出しのための1つよりも多くの計算ユニットを示す。コントローラが、伝送が重複読み出しを伴わないと判定した場合、動作フローはS874におけるバンクロックに進む。コントローラが、伝送が重複読み出しを伴うと判定した場合、動作フローはS872における計算ユニット同期化に進む。
【0060】
S872で、取り出しセクション又はそのサブセクションは、計算ユニットを同期させる。少なくとも幾つかの実施形態において、取り出しセクションは、二次計算ユニットを一次計算ユニットと同期させる。少なくとも幾つかの実施形態において、取り出しセクションは、第2の計算ユニットを同期させて、入力データ値及び重み値のうちの一方を読み出す。少なくとも幾つかの実施形態において、取り出しセクションは、二次計算ユニットに、値を読み出すための準備をするよう命令する。少なくとも幾つかの実施形態において、取り出しセクションは、メモリバンクからの二次計算ユニットの物理的距離が、メモリバンクからの一次計算ユニットの物理的距離と著しく異なる場合に、二次計算ユニットについてタイミングオフセットを適用する。
【0061】
S874で、取り出しセクション又はそのサブセクションは、値が読み出されることになるメモリバンクをロックする。少なくとも幾つかの実施形態において、取り出しセクションは、一次計算ユニット及び二次計算ユニットの両方に関してメモリバンクに対するロックを設定する。少なくとも幾つかの実施形態において、伝送セクションは、対応するメモリユニットのメモリコントローラに、一次計算ユニット及び二次計算ユニットの両方による値の取り出しのためにメモリバンクをロックするよう命令する。
【0062】
S875で、取り出しセクション又はそのサブセクションは、値が読み出されることになるメモリバンクにバンクオフセットを設定する。少なくとも幾つかの実施形態において、取り出しセクションは、メモリバンクについてバンクオフセットを適用する。少なくとも幾つかの実施形態において、命令は、1つ又は複数のバンクオフセットを含み、各バンクオフセットは、集積回路内のメモリバンクに対応する。メモリバンクが命令内のバンクオフセットに関連付けられることに応答して、少なくとも幾つかの実施形態において、取り出しセクションは、値が指定されたアドレスから読み出されるよう、当該バンクオフセットに基づきメモリバンク内のアドレスを調整する。
【0063】
S877で、取り出しセクション又はそのサブセクションは、メモリバンクから値を読み出す。少なくとも幾つかの実施形態において、取り出しセクションは、一次計算ユニットに、メモリバンクから値を読み出させる。少なくとも幾つかの実施形態において、取り出しセクションは、入力データ値又は重み値のうちの一方を記憶するメモリバンクが、第1の計算ユニット及び第2の計算ユニットによって実質的に同様の時刻に読み出される入力データ値又は重み値のうちの一方の単一の伝送を行うよう、第1の計算ユニットによって、複数のメモリバンクのうちの、入力データ値又は重み値のうちの一方を記憶するメモリバンクから、入力データ値又は重み値のうちの一方を読み出す。
【0064】
S879で、取り出しセクション又はそのサブセクションは、S874でロックされたメモリバンクのロックを解除する。少なくとも幾つかの実施形態において、取り出しセクションは、対応するメモリユニットのメモリコントローラに、メモリバンクのロックを解除するよう命令する。少なくとも幾つかの実施形態において、取り出しセクションは、メモリバンクに対するロックを解除する。
【0065】
図9は、本発明の少なくとも1つの実施形態による、データ並列読み出し中の計算ユニット及びメモリバンク相互接続の概略図である。本図は、データバス902、計算ユニット910A、計算ユニット910B、及びメモリバンク920を含む集積回路900を有する。データバス902、計算ユニット910A及び910B、及びメモリバンク920は、以下で説明が異なる場合を除き、それぞれ
図1のデータバス102、計算ユニット110、及びメモリバンク120と実質的に同じ構造を有し、実質的に同じ機能を実行する。
【0066】
複数の計算ユニットが値を読み出すように指定されている
図8のS877における動作のように、データ並列読み出しプロセス中に、複数の計算ユニットからの単一のメモリバンクから値が読み出される。推論中に、計算ユニット910Aによって値が読み出されるときにメモリバンク920から値の伝送を受信するために、計算ユニット910Aが計算ユニット910Bと同期するよう命令される少なくとも幾つかの実施形態において、伝送セクションは、計算ユニット910A及び計算ユニット910Bの各々のマルチプレクサに、読み出しのためにメモリバンク920に接続するよう命令する。少なくとも幾つかの実施形態において、
図9に示されるデータバス902を通じた相互接続は、メモリバンク920からの出力を計算ユニット910A及び計算ユニット910Bにルーティングする。従って、メモリバンク920からの単一の伝送は、計算ユニット910A及び計算ユニット910Bの両方によって受信される。少なくとも幾つかの実施形態において、伝送は、計算ユニット910Bによって同じ伝送が受信されるのと実質的に同様の時刻に計算ユニット910Aによって受信される。少なくとも幾つかの実施形態において、計算ユニット910A及び計算ユニット910Bの間における同じ伝送の受信の時間差は、メモリバンク920及びそれぞれの計算ユニットの間の物理的距離の差に起因する。少なくとも幾つかの実施形態において、受信の時間差は無視できるものである。少なくとも幾つかの実施形態において、受信の時間差に起因する伝送の受信におけるエラーは、集積回路のクロックタイムを短縮することによって解消される。
【0067】
図10Aは、本発明の実施形態による、深さ単位畳み込みプロセッサ1012の例示的な構成を示す。深さ単位畳み込みプロセッサ1012は、キュー1012Q、主シーケンサ1012MS、窓シーケンサ1012WS、活性化フィーダ1012AF、重み付けフィーダ1012WF、パイプラインコントローラ1012PC、畳み込みパイプライン1012CP、外部累積ロジック1012A及び累積メモリインタフェース1012AIを含む。
【0068】
キュー1012Qは、命令を受信及び送信する。キュー1012Qは、
図2の計算コントローラ216などの計算コントローラから命令を受信して、主シーケンサ1012MSに当該命令を送信し得る。キュー1012Qは、FIFOメモリ、又は命令をキューイングするのに好適な任意の他のメモリであり得る。
【0069】
主シーケンサ1012MSは、畳み込みのための制御パラメータをシーケンスする。主シーケンサ1012MSは、キュー1012Qから命令を受信し、窓シーケンサ1012WSに命令を出力し得る。主シーケンサ1012MSは、KHxKWの畳み込みを1x<窓>のサイズのより小さな畳み込みに分割し、カーネル内の入力領域の順序に従って活性化データ及び重み値についての命令を準備する。ここで<窓>は線バッファ長を決定するアーキテクチャーパラメータを指す。
【0070】
窓シーケンサ1012WSは、1つの1x<窓>畳み込みのための制御パラメータをシーケンスする。窓シーケンサ1012WSは、主シーケンサ1012MSから命令を受信して、カーネル内の入力領域の順序に従った活性化データのデータシーケンスを活性化フィーダ1012AFに、及び、カーネル内の入力領域の順序に従った重み値のデータシーケンスを重み付けフィーダ1012WFに出力してよい。
【0071】
活性化フィーダ1012AFは、データメモリインタフェース1012DIを通じてメモリバンクからアクセスされた活性化データを、窓シーケンサ1012Sからのデータシーケンスにおいて示された活性化データに従って畳み込みパイプライン1012CPに供給する。活性化フィーダ1012AFは、1x<窓>計算のために十分な活性化データを、メモリバンクから畳み込みパイプライン1012CPの線バッファに読み出し得る。
【0072】
重み付けフィーダ1012WFは、窓シーケンサ1012Sからのデータシーケンスにおいて示された重み値に従って、重み付けメモリインタフェース1012WIを通じてメモリバンクからアクセスされた重み値を畳み込みパイプライン1012CPにプリロードする。重み付けフィーダ1012WFは、1x<窓>計算のために十分な重み値を、重み付けメモリから畳み込みパイプライン1012CPの重み付けバッファ内に読み出し得る。
【0073】
パイプラインコントローラ1012PCは、畳み込みパイプライン1012CPのデータ転送動作を制御する。現在の活性化バッファコンテンツが処理されると、パイプラインコントローラ1012PCは、線バッファから畳み込みパイプライン1012CPの活性化バッファへのデータの複製を開始し得る。パイプラインコントローラ1012PCは、畳み込みパイプライン1012CPの各チャネルパイプライン1012CHによって実行される畳み込み計算を制御してよく、ここで、各チャネルパイプライン1012CHは、深さ単位畳み込み層への入力の1つのチャネル上で動作する。
【0074】
畳み込みパイプライン1012CPは、活性化フィーダ1012AFから供給された活性化データ及び重み付けフィーダ1012WFからプリロードされた重み値に対する数学演算を実行する。畳み込みパイプライン1012CPは、チャネルパイプライン1012CHに分割され、各チャネルパイプライン1012CHは、1つのチャネルに対する数学演算を実行する。活性化フィーダ1012AF、重み付けフィーダ1012WF及びパイプラインコントローラ1012PCと組み合わせて、畳み込みパイプラインは畳み込み計算を論理的に実行する。
【0075】
外部累積ロジック1012Aは、畳み込みパイプライン1012CPからデータを受信し、累積メモリインタフェース1012AIを通じて、メモリバンクに当該データを記憶する。累積ロジック1012Aは、各チャネルパイプライン1012CHについての加算器1012Pを含む。累積ロジック1012Aは、メモリバンクのコンテンツによる1x<窓>畳み込みの結果の点単位の総和について使用され得る。
【0076】
この実施形態において、3つの窓パイプラインによって例示された3つのチャネルが存在する。しかしながら、他の実施形態は異なる数のチャネルを有してよい。可能ではあるが、この実施形態では主として簡潔にするために3つのチャネルを示している。多くの実施形態は、現実的なアプリケーションに対応すべく少なくとも16チャネルを含む。
【0077】
図10Bは、本発明の実施形態による、深さ単位畳み込みプロセッサについてのチャネル毎パイプラインの例示的な構成を示す。チャネルパイプライン1012CHは、線バッファ1012LB、活性化バッファ1012AB、重み付けバッファ1012WB、複数の乗算器1012X、複数の加算器1012P、遅延レジスタ1012DR及び内部累積レジスタ1012NBを含む。
【0078】
線バッファ1012LBは、活性化フィーダ1012AFから受信された活性化データを記憶する。線バッファ1012LBは、活性化フィーダ1012AFによって1サイクル当たり1ピクセルで読み出された活性化データを記憶するシフトレジスタを含んでよい。
【0079】
活性化バッファ1012ABは、線バッファ1012LBから受信された活性化データを記憶する。活性化バッファ1012ABは、現行の畳み込み計算が適用される活性化データを記憶するレジスタのセットを含んでよい。
【0080】
重み付けバッファ1012WBは、重み付けフィーダ1012WFから受信された重み値を記憶する。重み付けバッファ1012WBは、現行の畳み込み計算が適用される重み値を記憶するシフトレジスタを含んでよい。
【0081】
乗算器1012Xは、活性化バッファ1012ABからの活性化データに重み付けバッファ1012WBからの重み値を乗算する。この実施形態において、3つの乗算器1012Xが存在し、これは畳み込みカーネルの幅又は高さ次元の並列度が3であることを意味する。集合的に加算木を形成する加算器1012Pは、次に、活性化データ及び重み値の積を共に加算する。このプロセスの間、同じく加算木の一部とみなされる遅延レジスタ1012DRは、加算木を平衡させる。内部累積レジスタ1012IAは、部分和を記憶することにより加算を補助する。例えば、内部累積レジスタ1012IAは、この実施形態においては6つであるバッファの窓の数並びに畳み込みフィルタの幅又は高さが、3である並列度よりも多いときに、部分和の累積のために使用されてよい。
【0082】
積が総和として全て共に加算されると、当該総和は累積ロジック1012Aに出力され、これは次に、累積メモリインタフェース1012AIを通じてメモリバンクにデータを記憶する。
【0083】
図11は、本発明の実施形態による、点単位畳み込みプロセッサの例示的な構成を示す。点単位畳み込みプロセッサ1112は、キュー1112Q、主シーケンサ1112S、重み付けメモリインタフェース1112WI、重み付けフィーダ1112WF、重み付けメモリインタフェース1112WI、活性化フィーダ1112AF、データメモリインタフェース1112DI、シストリックアレイ1112S、累積ロジック1112A及び累積メモリインタフェース1112AIを含む。
【0084】
キュー1112Qは、命令を受信及び送信する。キュー1112Qは、
図2の計算コントローラ216などの計算コントローラから命令を受信して、主シーケンサ1112Sに当該命令を送信し得る。キュー1112Qは、FIFOメモリ、又は、命令をキューイングするのに好適な任意の他のメモリであり得る。
【0085】
主シーケンサ1112Sは、畳み込みのための制御パラメータをシーケンスする。主シーケンサ1112Sは、キュー1112Qから命令を受信して、制御シーケンスを重み付けフィーダ1112WF及び活性化フィーダ1112AFに、それぞれキューを通じて出力し得る。この実施形態において、主シーケンサ1112SはKHxKW畳み込みを一連の1x1畳み込みのシーケンスに分割し、これらは制御パラメータとして重み付けフィーダ1112WF及び活性化フィーダ1112AFに供給される。
【0086】
重み付けフィーダ1112WFは、主シーケンサ1112Sからの制御パラメータにおいて示された活性化データに従って、重み付けメモリインタフェース1112WIを通じてメモリバンクからアクセスされた重み値をシストリックアレイ1112SAにプリロードする。
【0087】
活性化フィーダ1112AFは、主シーケンサ1112Sからのデータシーケンスにおいて示された活性化データに従って、メモリバンクからデータメモリインタフェース1112DIを通じてアクセスされる活性化データをシストリックアレイ1112SAに供給する。
【0088】
シストリックアレイ1112SAは、複数のMAC要素1112Mを含む。各MAC要素1112Mは、計算開始前に、重み付けフィーダ1112WFから重み値をプリロードされ、次に、活性化フィーダ1112Fから活性化値を受信する。計算及び重み値のプリロードの重複を可能にすべく、複数の重み付けバッファが使用され得る。MAC要素1112Mは、先行するMAC要素1112Mから出力された活性化値及び重みの積が後続のMAC要素1112Mに入力されるよう、アレイ状に配列される。この実施形態において、あらゆるサイクルについて、各MAC要素1112Mは、その左隣のMAC要素1112Mから出力された値にプリロードされた重み値1112Wを乗算した値に等しい累積値を出力し、その積は、その上隣のMAC要素1112Mから出力された値に加算される。最下行のMAC要素1112Mは、それらの積を累積ロジック1112Aに出力する。
【0089】
累積ロジック1112Aは、シストリックアレイ1112SAから積を受信し、メモリバンクに当該積を記憶する。累積ロジック1112Aは、最下行の各MAC要素1112Mについての加算器1112Pを含む。この実施形態において、主シーケンサ1112Sによって必要とされる累積が、書き込まれることになるメモリ位置内の古い値を読み出す場合、累積ロジック1112Aは、それを、新たな値との和によって上書きする。そうでなければ、累積ロジック1112Aは、新たな値をそのまま書き込む。
【0090】
点単位畳み込みモジュール1112は、単一のKHxKW畳み込みを複数のKHxKW 1x1畳み込み分割することによって点単位畳み込みを実行する上で有用であり得る。例えば、4つの異なる1x1畳み込みに対応するメモリバンクの領域において、2x2畳み込みが置換され得る。点単位畳み込みモジュール1112は、各1x1畳み込みを、MAC要素における活性化値の行列及びMAC要素における重み値の行列のドット積として計算し、次に、当該1x1畳み込みの結果を合計し得る。
【0091】
図10A、
図10B、及び
図11の畳み込みプロセッサは、畳み込みネットワークの推論を実行するように構成された少なくとも幾つかの実施形態において実装される。他のプロセッサは、他のタイプのディープネットワークを含む他のタイプのニューラルネットワークの推論を実行するように構成された少なくとも幾つかの他の実施形態において使用される。
【0092】
少なくとも幾つかの実施形態は、そのブロックが(1)動作が実行されるプロセスのステップ、又は(2)動作を実行することを担うコントローラのセクション、を表すフローチャート及びブロック図を参照して説明される。少なくとも幾つかの実施形態において、特定のステップ及びセクションは、専用回路、コンピュータ可読媒体の上に記憶されているコンピュータ可読命令を供給されたプログラマブル回路、及び/又はコンピュータ可読媒体上に記憶されるコンピュータ可読命令を供給されたプロセッサによって実装される。少なくとも幾つかの実施形態において、専用回路は、デジタル及び/又はアナログハードウェア回路を含み、集積回路(IC)及び/又はディスクリート回路を含む。少なくとも幾つかの実施形態において、プログラマブル回路は、論理AND、OR、XOR、NAND、NOR及び他の論理動作、フリップフロップ、レジスタ、メモリ要素等を含む再構成可能ハードウェア回路、例えば、フィールドプログラマブルゲートアレイ(FPGA)、プログラマブルロジックアレイ(PLA)等を有する。
【0093】
少なくとも幾つかの実施形態において、コンピュータ可読記憶媒体は、命令実行デバイスによる使用のために命令を維持及び記憶できる有形デバイスを含む。幾つかの実施形態において、コンピュータ可読記憶媒体は、例えば、限定されないが、電子ストレージデバイス、磁気ストレージデバイス、光学ストレージデバイス、電磁ストレージデバイス、半導体ストレージデバイス、又は上記の任意の好適な組み合わせを含む。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、以下:ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ(RAM:random access memory)、リードオンリメモリ(ROM:read-only memory)、消去可能プログラマブルリードオンリメモリ(EPROM:erasable programmable read-only memory又はフラッシュメモリ)、スタティックランダムアクセスメモリ(SRAM:static random access memory)、ポータブルコンパクトディスクリードオンリメモリ(CD-ROM:compact disc read-only memory)、デジタルバーサタイルディスク(DVD:digital versatile disk)、メモリスティック、フロッピディスク、命令がその上に記録されているパンチカード又は溝の中の隆起構造などの機械的にエンコードされたデバイス、及び上記の任意の好適な組み合わせを含む。本明細書で使用される場合、コンピュータ可読記憶媒体は、電波又は自由に伝搬する他の電磁波、導波路又は他の伝送媒体を通って伝搬する電磁波(例えば、光ファイバケーブルを通過する光パルス)、又は、ワイヤを通って伝送される電気信号等の一時的な信号それ自体であるものとして解釈されるべきではない。
【0094】
少なくとも幾つかの実施形態において、本明細書で説明されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスへ、又は、ネットワーク、例えば、インターネット、ローカルエリアネットワーク、ワイドエリアネットワーク及び/又は無線ネットワークを介して外部コンピュータ又は外部ストレージデバイスにダウンロード可能である。少なくとも幾つかの実施形態において、ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ及び/又はエッジサーバを含む。少なくとも幾つかの実施形態において、各コンピューティング/処理デバイス内のネットワークアダプタカード又はネットワークインタフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体に記憶するためにコンピュータ可読プログラム命令を転送する。
【0095】
少なくとも幾つかの実施形態において、上記で説明された動作を実行するコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、又は、オブジェクト指向プログラミング言語、例えば、Smalltalk(登録商標)又はC++等、及び、従来の手続き型プログラミング言語、例えば、"C"プログラミング言語又は同様のプログラミング言語を含む、1つ又は複数のプログラミング言語の任意の組み合わせで書かれたソースコード又はオブジェクトコードのいずれかである。少なくとも幾つかの実施形態において、コンピュータ可読プログラム命令は、ユーザのコンピュータ上で完全に実行されるか、スタンドアロンのソフトウェアパッケージとして部分的にユーザのコンピュータ上で実行されるか、部分的にユーザのコンピュータ上でかつ部分的にリモートコンピュータ上で実行されるか、又は、リモートコンピュータ又はサーバ上で完全に実行される。少なくとも幾つかの実施形態において、後者のシナリオにおいては、リモートコンピュータはユーザのコンピュータに、ローカルエリアネットワーク(LAN)又はワイドエリアネットワーク(WAN)を含む任意のタイプのネットワークを通じて接続される、又は接続は、(例えば、インターネットサービスプロバイダを用いてインターネットを通じて)外部コンピュータに対して行われる。少なくとも幾つかの実施形態において、例えば、プログラマブルロジック回路、フィールドプログラマブルゲートアレイ(FPGA)又はプログラマブルロジックアレイ(PLA)を含む電子回路は、本発明の態様を実行するために、電子回路を適合させるコンピュータ可読プログラム命令の状態情報を利用することにより、コンピュータ可読プログラム命令を実行する。
【0096】
本発明の実施形態が説明されたが、特許請求の範囲に記載のいかなる主題の技術的範囲も、上記で説明された実施形態に限定されない。当業者であれば、上記で説明された実施形態に対する様々な改変及び改良が可能であることを理解するであろう。当業者はまた、特許請求の範囲に記載の範囲からそのような改変又は改良を加えた実施形態が本発明の技術的範囲に含まれることを理解するであろう。
【0097】
特許請求の範囲、実施形態、又は図において示される装置、システム、プログラム、及び方法によって実行される各プロセスの動作、手順、ステップ、及びステージは、その順序が「に先立ち」又は「の前に」等によって示されていない限り、かつ、前のプロセスからの出力が後のプロセスにおいて使用されない限り、任意の順序で実行されることが可能である。特許請求の範囲、実施形態、又は図において、プロセスフローが「最初に」又は「次に」などの語句を用いて説明されている場合でも、そのような説明は、説明された順序においてプロセスが実行されなければならないことを必ずしも意味するものではない。
【0098】
ニューラルネットワークハードウェアアクセラレーションデータ並列処理は、複数のメモリバンク、複数のメモリバンクのうちの各メモリバンクは、値を記憶し、記憶された値を伝送するように構成されている、複数の計算ユニット、複数の計算ユニットのうちの各計算ユニットは、入力データ値及び重み値に対する数学演算を実行して、結果データ値を生成するように構成された回路を含むプロセッサ、及び、値の伝送を1つよりも多くの計算ユニット又はバンクによって受信させるように構成された計算コントローラ、を有する、を備える集積回路によって実行される。
【0099】
上記は、当業者が本開示の態様をより良く理解するように、幾つかの実施形態の特徴を概説したものである。当業者であれば、本開示が、本明細書において導入された実施形態と同じ目的を実行する、及び/又は同じ利点を実現するための他のプロセス及び構造を設計又は修正するための基礎として容易に使用可能であることを理解すべきである。当業者はまた、そのような均等な構成が本開示の趣旨及び範囲から逸脱しないこと、及び、本明細書の様々な変更、置換、及び改変が本開示の趣旨及び範囲から逸脱することなく可能であることを認識すべきである。
【国際調査報告】