JP2022540548A - エネルギー効率的な入力オペランド固定アクセラレータにおいて小チャネルカウント畳み込みを実施するためのシステムおよび方法 - Google Patents
エネルギー効率的な入力オペランド固定アクセラレータにおいて小チャネルカウント畳み込みを実施するためのシステムおよび方法 Download PDFInfo
- Publication number
- JP2022540548A JP2022540548A JP2021572859A JP2021572859A JP2022540548A JP 2022540548 A JP2022540548 A JP 2022540548A JP 2021572859 A JP2021572859 A JP 2021572859A JP 2021572859 A JP2021572859 A JP 2021572859A JP 2022540548 A JP2022540548 A JP 2022540548A
- Authority
- JP
- Japan
- Prior art keywords
- array
- pes
- input
- neural network
- input data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 67
- 238000013528 artificial neural network Methods 0.000 claims abstract description 142
- 238000012545 processing Methods 0.000 claims abstract description 65
- 238000003491 array Methods 0.000 claims abstract description 31
- 230000015654 memory Effects 0.000 claims description 100
- 239000000872 buffer Substances 0.000 claims description 81
- 230000004044 response Effects 0.000 claims description 17
- 238000000638 solvent extraction Methods 0.000 claims description 17
- 238000005192 partition Methods 0.000 claims description 6
- 239000011159 matrix material Substances 0.000 description 70
- 238000013473 artificial intelligence Methods 0.000 description 64
- 210000002569 neuron Anatomy 0.000 description 29
- 238000013527 convolutional neural network Methods 0.000 description 25
- 239000013598 vector Substances 0.000 description 23
- 230000008569 process Effects 0.000 description 21
- 238000010586 diagram Methods 0.000 description 17
- 230000006870 function Effects 0.000 description 16
- 230000003068 static effect Effects 0.000 description 15
- 230000004913 activation Effects 0.000 description 11
- 238000013507 mapping Methods 0.000 description 11
- 238000011176 pooling Methods 0.000 description 10
- 238000012549 training Methods 0.000 description 9
- 230000008901 benefit Effects 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 3
- 230000000670 limiting effect Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000007781 pre-processing Methods 0.000 description 3
- 230000003190 augmentative effect Effects 0.000 description 2
- 210000004027 cell Anatomy 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000012805 post-processing Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000002194 synthesizing effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 241000699670 Mus sp. Species 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000003213 activating effect Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005265 energy consumption Methods 0.000 description 1
- 239000012530 fluid Substances 0.000 description 1
- 239000011521 glass Substances 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000012886 linear function Methods 0.000 description 1
- 230000007787 long-term memory Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000000306 recurrent effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000006403 short-term memory Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 210000000225 synapse Anatomy 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000011144 upstream manufacturing Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Evolutionary Computation (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Artificial Intelligence (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Neurology (AREA)
- Image Analysis (AREA)
- Complex Calculations (AREA)
Abstract
本明細書の開示は、ニューラルネットワークの層のための複数の出力を生成するための入力データを受信するためのシステム、方法、およびデバイスを含む。複数の出力は第1のアレイ中に構成される。第1のアレイの次元は、複数の処理装置(PE)を含むPEアレイの次元と比較されてもよい。比較することの結果にしたがって、第1のアレイはプロセッサによってサブアレイに区画化される。サブアレイの各々は、PEアレイの次元よりも小さいかまたはそれに等しい次元を有する。PEアレイ中のPEの第1のグループはサブアレイのうちの第1のサブアレイに割り当てられる。複数の出力の対応する出力は、サブアレイのうちの第1のサブアレイに割り当てられたPEの第1のグループの各PEによって、入力データの一部分を使用して生成される。【選択図】図1A
Description
本開示は、全体として、出力のアレイをサブアレイに区画化し、サブアレイのうちの1つに処理要素を割り当てることによって出力を生成するためのシステムおよび方法を含むがそれらに限定されない、ニューラルネットワークの層のための出力を生成するためのシステムおよび方法に関する。
人工知能(AI)アクセラレータにおける1つの課題は、ニューラルネットワークに対するAI処理を実施する際の消費電力の制御または低減に関連する。例えば、ニューラルネットワークは、畳み込み層を含むことができる、畳み込みニューラルネットワークであってもよい。畳み込み層では、AIアクセラレータは、畳み込み演算を入力層に適用して、従来の全結合の順伝播型ニューラルネットワークと比較してパラメータの数を低減する形で、結果を次の層に渡すことができる。しかしながら、畳み込みニューラルネットワークで使用される多次元(例えば、複数のチャネル)の入出力が複雑になればなるほど、エネルギーおよびレイテンシを低減する方法が望まれ得る。更に、入力データとカーネルとを用いて畳み込み演算を実施する際の処理の範囲に関して、冗長演算の回避が望まれ得る。
本発明によれば、ニューラルネットワークの層のための複数の出力を生成するためのデバイスが提供され、デバイスは、プロセッサと、複数の処理装置(PE)を含むPEアレイとを含み、プロセッサは、複数の出力が第1のアレイ中に構成された、ニューラルネットワークの層のための複数の出力を生成するための入力データを受信し、第1のアレイの次元をPEアレイの次元と比較し、比較することの結果にしたがって、第1のアレイを、それぞれPEアレイの次元よりも小さいかまたはそれに等しい次元を有するサブアレイに区画化し、PEアレイ中のPEの第1のグループをサブアレイのうちの第1のサブアレイに割り当てるように構成され、サブアレイのうちの第1のサブアレイに割り当てられたPEの第1のグループの各PEは、入力データの一部分を使用して複数の出力の対応する出力を生成するように構成される。
いくつかの実施形態では、PEアレイは二次元M×Nアレイであってもよい。MおよびNの各々は1よりも大きい整数である。プロセッサは、第1のアレイをM×Nアレイ、M×N/2アレイ、M/2×Nアレイ、またはM/2×N/2アレイのうちの1つまたは複数に区画化するように構成されてもよい。
いくつかの実施形態では、プロセッサは、第1の次元における第1のアレイのサイズが第1の次元におけるPEアレイのサイズよりも大きいかどうかを決定するように構成されてもよい。第1の次元における第1のアレイのサイズが第1の次元におけるPEアレイのサイズよりも大きいことを決定したことに応答して、プロセッサは、第1のアレイをサブアレイのうちの第1のサブアレイと第2のサブアレイとに区画化するように構成されてもよい。プロセッサは、第1のサブアレイをPEアレイ中のPEの第1のグループに割り当て、第2のサブアレイをPEの第1のグループとは異なるPEアレイ中のPEの第2のグループに割り当てるように構成されてもよい。
いくつかの実施形態では、プロセッサは更に、PEの第1と第2のグループの両方によって使用されるべき入力データの共通の部分を識別するように構成されてもよい。プロセッサは更に、入力データの共通の部分を少なくとも複数のPEの部分を通してPEの第1および第2のグループにシフトするように構成されてもよい。
いくつかの実施形態では、プロセッサは更に、PEの第1のグループによって使用されるべき入力データの第1の部分と、PEの第2のグループによって使用されるべき入力データの第2の部分とを識別するように構成されてもよい。プロセッサは更に、入力データの第1の部分を第1の次元に沿ってPEの第1のグループにシフトするように構成されてもよい。プロセッサは更に、入力データの第2の部分を第1の次元に沿ってPEの第2のグループにシフトするように構成されてもよい。
いくつかの実施形態では、複数の出力はニューラルネットワークの層のための畳み込み演算の出力であってもよい。
いくつかの実施形態では、入力データは第1の複数の入力値と第2の複数の入力値とを含んでもよく、PEの第1のグループの各PEは、第1のバッファメモリと、第2のバッファメモリと、乗累算器(MAC)回路類とを含んでもよい。複数の出力の対応する出力を生成することにおいて、PEの第1のグループの各PEは、第1の複数の入力値の第1の値と、第2の複数の入力値の第2の値とを受信するように構成されてもよい。PEの第1のグループの各PEは、第1の値および第2の値をそれぞれ第1のバッファメモリおよび第2のバッファメモリに格納するように構成されてもよい。PEの第1のグループの各PEは、MAC回路類を介して、第1の値と第2の値との第1のドット積を生成するように構成されてもよい。
いくつかの実施形態では、各PEは、複数の第1の入力値からの値の第1の数のセットを第1のバッファメモリに格納するように構成されてもよい。各PEは、MAC回路類を介して、(i)第1のバッファメモリに格納された値の第1の数のセットの各々と、(ii)第2のバッファメモリに格納された第2の値とのドット積を計算するように構成されてもよい。各PEは、第1の数の計算されたドット積をニューラルネットワークの層のための畳み込み演算の出力として出力するように構成されてもよい。
各PEは、複数の第2の入力値からの値の第2の数のセットを第2のバッファメモリに格納するように構成されてもよい。各PEは、MAC回路類を介して、(i)第1のバッファメモリに格納された第1の値と、(ii)第2のバッファメモリに格納された値の第2の数のセットの各々とのドット積を計算するように構成されてもよい。各PEは、第2の数の計算されたドット積をニューラルネットワークの層のための畳み込み演算の出力として出力するように構成されてもよい。
いくつかの実施形態では、第1の複数の入力値は、ニューラルネットワークの層に対する入力データストリームと重みとのうちの一方を表してもよい。第2の複数の入力値は、ニューラルネットワークの層に対する入力データストリームと重みとのうちの他方を表してもよい。
本発明によれば、ニューラルネットワークの層のための複数の出力を生成するための方法が提供され、本方法は、プロセッサによって、ニューラルネットワークの層のための複数の出力を生成するための入力データを受信することであって、複数の出力が第1のアレイ中に構成された、入力データを受信することと、プロセッサによって、第1のアレイの次元を複数の処理装置(PE)を含むPEアレイの次元と比較することと、比較することの結果にしたがって、プロセッサによって、第1のアレイをそれぞれPEアレイの次元よりも小さいかまたはそれに等しい次元を有するサブアレイに区画化することと、プロセッサによって、PEアレイ中のPEの第1のグループをサブアレイのうちの第1のサブアレイに割り当てることと、サブアレイのうちの第1のサブアレイに割り当てられたPEの第1のグループの各PEによって、入力データの一部分を使用して複数の出力の対応する出力を生成することとを含む。
いくつかの実施形態では、PEアレイは二次元M×Nアレイであってもよい。MおよびNの各々は1よりも大きい整数であってもよい。第1のアレイを区画化することにおいて、第1のアレイはM×Nアレイ、M×N/2アレイ、M/2×Nアレイ、またはM/2×N/2アレイのうちの1つまたは複数に区画化されてもよい。
いくつかの実施形態では、第1の次元における第1のアレイのサイズが第1の次元におけるPEアレイのサイズよりも大きいかどうかが決定されてもよい。第1の次元における第1のアレイのサイズが第1の次元におけるPEアレイのサイズよりも大きいことを決定したことに応答して、第1のアレイはサブアレイのうちの第1のサブアレイと第2のサブアレイとに区画化されてもよい。第1のサブアレイは、PEアレイ中のPEの第1のグループに割り当てられてもよく、第2のサブアレイはPEアレイ中のPEの第2のグループに割り当てられてもよい。第1の次元とは異なる第2の次元におけるPEの第1のグループの位置は第2の次元におけるPEの第2のグループの位置とは異なってもよい。
いくつかの実施形態では、PEの第1のグループと第2のグループの両方によって使用されるべき入力データの共通の部分が識別されてもよい。入力データの共通の部分は、第2の次元に沿って少なくとも複数のPEの一部分を通してPEの第1および第2のグループにシフトされてもよい。
いくつかの実施形態では、PEの第1のグループによって使用されるべき入力データの第1の部分が識別されてもよく、PEの第2のグループによって使用されるべき入力データの第2の部分が識別されてもよい。入力データの第1の部分は、第1の次元に沿ってPEの第1のグループを通してシフトされてもよい。入力データの第2の部分は、第1の次元に沿ってPEの第2のグループを通してシフトされてもよい。
いくつかの実施形態では、複数の出力は、ニューラルネットワークの層のための畳み込み演算の出力であってもよい。
いくつかの実施形態では、入力データは、第1の複数の入力値と第2の複数の入力値とを含んでもよい。PEの第1のグループの各PEによって複数の出力のうちの対応する出力を生成する際、第1の複数の入力値の第1の値と、第2の複数の入力値の第2の値とは前記各PEによって受信されてもよい。第1の値および第2の値は、それぞれ前記各PEの第1のバッファメモリおよび第2のバッファメモリに各PEによって格納されてもよい。第1の値と第2の値との第1のドット積は各PEの乗累算器(MAC)回路類によって生成されてもよい。
いくつかの実施形態では、第1の複数の入力値からの値の第1の数のセットは各PEの第1のバッファメモリに格納されてもよい。(i)各PEの第1のバッファメモリに格納された値の第1の数のセットの各々と、(ii)各PEの第2のバッファメモリに格納された第2の値とのドット積はMAC回路類によって計算されてもよい。第1の数の計算されたドット積は、ニューラルネットワークの層のための畳み込み演算の出力であってもよい。
いくつかの実施形態では、複数の第2の入力値からの値の第2の数のセットは各PEの第2のバッファメモリに格納されてもよい。(i)前記各PEの第1のバッファメモリに格納された第1の値と、(ii)各PEの第2のバッファメモリに格納された値の第2の数のセットの各々とのドット積はMAC回路類によって計算されてもよい。第1のドット積および第2の数の計算されたドット積は、ニューラルネットワークの層のための畳み込み演算の出力であってもよい。
いくつかの実施形態では、第1の複数の入力値は、ニューラルネットワークの層に対する入力データストリームと重みとのうちの一方を表してもよい。第2の複数の入力値は、ニューラルネットワークの層に対する入力データストリームと重みとのうちの他方を表してもよい。
上記および他の態様ならびに実現例について、以下で詳細に考察する。上述の情報および以下で詳述する説明は、様々な態様および実現例の実例を含み、特許請求する態様および実現例の性質ならびに特徴を理解するための概観または枠組みを提供する。図面は、様々な態様および実現例の例示ならびに更なる理解を提供し、本明細書に組み込まれるとともに本明細書の一部を構成する。
添付図面は縮尺通りに描かれることを意図しない。様々な図面における同様の参照番号および記号は同様の要素を示す。明瞭にするため、全ての図面において全ての構成要素に符号が付されるわけではない。
特定の実施形態を詳細に示す図面に移る前に、本開示は、明細書に記載されるかまたは図面に例示される、詳細もしくは方法論に限定されないことが理解されるべきである。また、本明細書で使用する専門用語は、単に説明のためのものであって限定とみなされるべきでないことが理解されるべきである。
以下の本発明の様々な実施形態についての説明を読む目的で、本明細書のセクションおよびそれらのそれぞれの内容についての以下の説明が有用であり得る。
セクションAは、本発明のシステム、方法、およびデバイスの一実施形態を実践または実現するために有用な環境、システム、構成、および/または他の態様について説明する。
セクションBは、ニューラルネットワークの層のための複数の出力を生成するためのデバイス、システム、および方法の実施形態について説明する。
セクションAは、本発明のシステム、方法、およびデバイスの一実施形態を実践または実現するために有用な環境、システム、構成、および/または他の態様について説明する。
セクションBは、ニューラルネットワークの層のための複数の出力を生成するためのデバイス、システム、および方法の実施形態について説明する。
A.人工知能に関連する処理のための環境
システム、デバイス、および/または方法の実施形態の詳細についてセクションBで考察する前に、システム、デバイス、および/または方法の特定の実施形態を実践もしくは実現するのに有用な、環境、システム、構成、および/または他の態様について考察するのが有用であり得る。ここで図1Aを参照すると、人工知能(AI)に関連する処理を実施するためのシステムの一実施形態が示される。概要では、システムは、入力データ110を使用してAIに関連する処理を実施することができる、1つまたは複数のAIアクセラレータ108を含む。AIアクセラレータ108として参照しているが、場合によっては、ニューラルネットワークアクセラレータ(NNA)、ニューラルネットワークチップもしくはハードウェア、AIプロセッサ、AIチップなどと呼ばれる。AIアクセラレータ108は、入力データ110および/またはパラメータ128(例えば、重みおよび/またはバイアス情報)にしたがって、AIに関連する処理を実施して、出力データ112を出力または提供することができる。AIアクセラレータ108は、1つもしくは複数のニューラルネットワーク114(例えば、人工ニューラルネットワーク)、1つもしくは複数のプロセッサ24、および/または1つもしくは複数の記憶デバイス126を含むことができ、ならびに/あるいは実装することができる。
システム、デバイス、および/または方法の実施形態の詳細についてセクションBで考察する前に、システム、デバイス、および/または方法の特定の実施形態を実践もしくは実現するのに有用な、環境、システム、構成、および/または他の態様について考察するのが有用であり得る。ここで図1Aを参照すると、人工知能(AI)に関連する処理を実施するためのシステムの一実施形態が示される。概要では、システムは、入力データ110を使用してAIに関連する処理を実施することができる、1つまたは複数のAIアクセラレータ108を含む。AIアクセラレータ108として参照しているが、場合によっては、ニューラルネットワークアクセラレータ(NNA)、ニューラルネットワークチップもしくはハードウェア、AIプロセッサ、AIチップなどと呼ばれる。AIアクセラレータ108は、入力データ110および/またはパラメータ128(例えば、重みおよび/またはバイアス情報)にしたがって、AIに関連する処理を実施して、出力データ112を出力または提供することができる。AIアクセラレータ108は、1つもしくは複数のニューラルネットワーク114(例えば、人工ニューラルネットワーク)、1つもしくは複数のプロセッサ24、および/または1つもしくは複数の記憶デバイス126を含むことができ、ならびに/あるいは実装することができる。
上述の要素または構成要素はそれぞれ、ハードウェア、またはハードウェアとソフトウェアの組み合わせの形で実装される。例えば、これらの要素または構成要素はそれぞれ、任意のアプリケーション、プログラム、ライブラリ、スクリプト、タスク、サービス、プロセス、あるいはデジタルおよび/またはアナログ要素(例えば、1つもしくは複数のトランジスタ、論理ゲート、レジスタ、メモリデバイス、抵抗素子、導電素子、容量素子)を含むことができる回路類などのハードウェア上で実行する、任意のタイプおよび形態の実行可能命令を含むことができる。
入力データ110は、AIアクセラレータ108のニューラルネットワーク114を構成、調整、訓練、および/または活性化するための、ならびに/あるいはプロセッサ124によって処理するための、任意のタイプもしくは形態のデータを含むことができる。ニューラルネットワーク114は、場合によっては、人工ニューラルネットワーク(ANN)と呼ばれる。ニューラルネットワークの構成、調整、および/または訓練は、履歴データなど、(例えば、入力データ110としての)訓練データセットがニューラルネットワークに提供されて処理される、機械学習のプロセスを指すかあるいは含むことができる。調整または構成は、ニューラルネットワーク114を訓練または処理して、ニューラルネットワークが精度を改善するのを可能にすることを指すかまたは含むことができる。ニューラルネットワーク114の調整または構成は、例えば、ニューラルネットワーク114に関する問題のタイプもしくは所望の目標に対して成功することが証明されているアーキテクチャを使用した、ニューラルネットワークの設計、形成、構築、合成、および/または確立を含むことができる。場合によっては、1つまたは複数のニューラルネットワーク114は、同じもしくは類似のベースラインモデルで開始してもよいが、調整、訓練、または学習プロセスの間、ニューラルネットワーク114の結果は、ベースラインモデルであるかあるいは異なる目標もしくは目的のために調整または訓練された異なるニューラルネットワークよりも高いレベルの精度および信頼性で、特定のタイプの入力を処理し、特定のタイプの出力を生成するように、各ニューラルネットワーク114を調整することができるような、十分に異なるものであることができる。ニューラルネットワーク114の調整は、各ニューラルネットワーク114に対して異なるパラメータ128を設定すること、各ニューラルネットワーク114に対してパラメータ114を異なるように微調整すること、または異なる重み(例えば、ハイパーパラメータ、もしくは学習率)、テンソルフローなどを割り当てることを含むことができる。したがって、ニューラルネットワークならびに/あるいはシステムの調整または訓練プロセスおよび目標に基づいて、ニューラルネットワーク114に対して適切なパラメータ128を設定することで、システム全体の性能を改善することができる。
AIアクセラレータ108のニューラルネットワーク114は、例えば、畳み込みニューラルネットワーク(CNN)、深層畳み込みネットワーク、順伝播型ニューラルネットワーク(例えば、多層パーセプトロン(MLP))、深層順伝播型ニューラルネットワーク、放射基底関数ニューラルネットワーク、コホネン自己組織化ニューラルネットワーク、回帰型ニューラルネットワーク、モジュール型ニューラルネットワーク、長期/短期メモリニューラルネットワークなど、任意のタイプのニューラルネットワークを含むことができる。ニューラルネットワーク114は、自然言語処理など、データ(例えば、画像、音声、映像)処理、オブジェクトもしくは特徴認識、レコメンダ機能、データもしくは画像分類、データ(例えば、画像)解析などを実施するために展開または使用することができる。
一例として、また1つまたは複数の実施形態では、ニューラルネットワーク114は、畳み込みニューラルネットワークとして構成することができ、または畳み込みニューラルネットワークを含むことができる。畳み込みニューラルネットワークは、それぞれ異なる目的に役立ち得る、1つもしくは複数の畳み込みセル(またはプーリング層)およびカーネルを含むことができる。畳み込みニューラルネットワークは、畳み込みカーネル(場合によっては、単に「カーネル」と呼ばれる)を含み、組み込み、および/または使用することができる。畳み込みカーネルは入力データを処理することができ、プーリング層は、例えば、maxなどの非線形関数を使用して、データを単純化し、それによって不要な特徴を低減することができる。畳み込みニューラルネットワークを含むニューラルネットワーク114は、画像、音声、または任意のデータの認識もしくは他の処理を容易にすることができる。例えば、(例えば、センサからの)入力データ110を、ファンネルを形成する畳み込みニューラルネットワークの畳み込み層に渡して、入力データ110の検出された特徴を圧縮することができる。畳み込みニューラルネットワークの第1の層は第1の特性を検出することができ、第2の層は第2の特性を検出することができ、その先も同様である。
畳み込みニューラルネットワークは、視覚心像、音声情報、および/または他の任意のタイプもしくは形態の入力データ110を解析するように構成された、深層順伝播型人工ニューラルネットワークのタイプであることができる。畳み込みニューラルネットワークは、最小限の前処理を使用するように設計された、多層パーセプトロンを含むことができる。畳み込みニューラルネットワークは、重み共有アーキテクチャおよび翻訳不変性特性に基づいて、シフト不変または空間不変人工ニューラルネットワークを含むことができ、またはそのように呼ぶことができる。畳み込みニューラルネットワークは、他のデータ分類/処理アルゴリズムと比較して相対的に少ない前処理を使用することができるので、畳み込みニューラルネットワークは、他のデータ分類/処理アルゴリズムのためにマニュアル設計されてもよいフィルタを自動的に学習して、ニューラルネットワーク114の構成、確立、またはセットアップと関連付けられた効率を改善することによって、他のデータ分類/処理技術と比べて技術的利点を提供することができる。
ニューラルネットワーク114は、ニューロンもしくはノードの、入力層116および出力層122を含むことができる。ニューラルネットワーク114はまた、ニューロンもしくはノードの、畳み込み層、プーリング層、全結合層、および/または正規化層を含むことができる、1つまたは複数の隠れ層118、119を有することができる。ニューラルネットワーク114では、各ニューロンは、前の層におけるいくつかの位置から入力を受信することができる。全結合層では、各ニューロンは、前の層の全ての要素からの入力を受信することができる。
ニューラルネットワーク114の各ニューロンは、前の層の受容野からの入力値に何らかの関数を適用することによって、出力値を計算することができる。入力値に適用される関数は、重みのベクトルおよびバイアス(一般的には実数)によって指定される。ニューラルネットワーク114における(例えば、訓練フェーズ中の)学習は、バイアスおよび/または重みを漸増的に調節することによって進行することができる。重みのベクトルおよびバイアスは、フィルタと呼ぶことができ、入力の何らかの特徴(例えば、特定の形状)を表すことができる。畳み込みニューラルネットワークの際立った特徴は、多くのニューロンが同じフィルタを共有できることである。これにより、各受容野が独自のバイアスおよび重みのベクトルを有するのではなく、単一のバイアスおよび重みの単一のベクトルを、該フィルタを共有する全ての受容野にわたって使用することができるので、メモリフットプリントが低減される。
例えば、畳み込み層では、システムは、畳み込み演算を入力層116に適用して、結果を次の層に渡すことができる。畳み込みは、個々のニューロンの応答をエミュレートして刺激を入力することができる。各畳み込みニューロンは、その受容野に対してのみデータを処理することができる。畳み込み演算は、全結合順伝播型ニューラルネットワークと比較して、ニューラルネットワーク114で使用されるニューロンの数を低減することができる。したがって、畳み込み演算は、自由パラメータの数を低減して、より少ないパラメータでネットワークをより深層化することを可能にすることができる。例えば、入力データ(例えば、画像データ)サイズにかかわらず、同じ共有重みをそれぞれ有するサイズ5×5のタイリング領域は、25個のみの学習可能パラメータを使用してもよい。このように、畳み込みニューラルネットワークを有する第1のニューラルネットワーク114は、逆伝播を使用することによって多くの層を有する従来の多層ニューラルネットワークを訓練する際の、勾配消失または発散の問題を解決することができる。
ニューラルネットワーク114(例えば、畳み込みニューラルネットワークで構成される)は、1つまたは複数のプーリング層を含むことができる。1つまたは複数のプーリング層は、ローカルプーリング層またはグローバルプーリング層を含むことができる。プーリング層は、1つの層におけるニューロンクラスタの出力を組み合わせて、次の層における単一のニューロンとすることができる。例えば、最大プーリングは、前の層におけるニューロンのクラスタそれぞれからの最大値を使用することができる。別の例は、前の層におけるニューロンのクラスタそれぞれからの平均値を使用することができる、平均プーリングである。
ニューラルネットワーク114(例えば、畳み込みニューラルネットワークで構成される)は、全結合層を含むことができる。全結合層は、1つの層の全てのニューロンを別の層の全てのニューロンに結合することができる。ニューラルネットワーク114は、畳み込み層で重みを共有して構成することができ、それは同じフィルタが層内の各受容野に使用されることを指すことができ、それにより、メモリフットプリントが低減され、第1のニューラルネットワーク114の性能が改善される。
隠れ層118、119は、入力データ(例えば、仮想現実システムなどからのセンサデータ)に基づいて、情報を検出するように調整または構成されるフィルタを含むことができる。システムがニューラルネットワーク114(例えば、畳み込みニューラルネットワーク)の各層を通るにつれて、システムは、第1の層からの入力を翻訳し、変換された入力を第2の層に出力することができ、その先も同様である。ニューラルネットワーク114は、検出、処理、および/または計算されるオブジェクトもしくは情報のタイプ、ならびに入力データ110のタイプに基づいて、1つまたは複数の隠れ層118、119を含むことができる。
いくつかの実施形態では、畳み込み層は、ニューラルネットワーク114(例えば、CNNとして構成される)のコアビルディングブロックである。層のパラメータ128は、小さい受容野を有するが、入力ボリュームの深さ全体を通って延在する、学習可能なフィルタ(またはカーネル)のセットを含むことができる。順方向パスの間、各フィルタは、入力ボリュームの幅および高さにわたって畳み込まれて、フィルタのエントリと入力との間のドット積を計算し、該フィルタの二次元活性化マップを作成する。結果として、ニューラルネットワーク114は、入力のある空間位置である特定のタイプの特徴を検出すると活性化する、フィルタを学習させることができる。深さ次元に沿って全てのフィルタの活性化マップを積み重ねることで、畳み込み層の全出力ボリュームが形成される。したがって、出力ボリュームの全てのエントリは、入力の小さい領域に注目し、同じ活性化マップのニューロンとパラメータを共有する、ニューロンの出力として解釈することもできる。畳み込み層では、ニューロンは、前の層の制限されたサブエリアから入力を受信することができる。一般的に、サブエリアは正方形形状のもの(例えば、サイズ5×5)である。ニューロンの入力エリアはその受容野と呼ばれる。そのため、全結合層では、受容野は前の層全体である。畳み込み層では、受容エリアは前の層全体よりも小さいものであり得る。
第1のニューラルネットワーク114は、(例えば、入力データ110に基づいて、オブジェクト、イベント、ワード、および/または他の特徴の確率を検出もしくは決定することによって)入力データ110を検出、分類、セグメント化、および/または翻訳するように訓練することができる。例えば、ニューラルネットワーク114の第1の入力層116は、入力データ110を受信し、入力データ110を処理してデータを第1の中間出力に変換し、第1の中間出力を第1の隠れ層118に伝達することができる。第1の隠れ層118は、第1の中間出力を受信し、第1の中間出力を処理して第1の中間出力を第2の中間出力に変換し、第2の中間出力を第2の隠れ層119に伝達することができる。第2の隠れ層119は、第2の中間出力を受信し、第2の中間出力を処理して第2の中間出力を第3の中間出力に変換し、第3の中間出力を、例えば出力層122に伝達することができる。出力層122は、第3の中間出力を受信し、第3の中間出力を処理して第3の中間出力を出力データ112に変換し、出力データ112を(例えば、場合によっては、ユーザに対するレンダリングのため、格納のためなど、後処理エンジンに)伝達することができる。出力データ112は、例として、オブジェクト検出データ、強化/翻訳/拡張されたデータ、推奨、分類、および/またはセグメント化されたデータを含むことができる。
再び図1Aを参照すると、AIアクセラレータ108は、1つまたは複数の記憶デバイス126を含むことができる。記憶デバイス126は、AIアクセラレータ108と関連付けられた任意のタイプもしくは形態のデータを、格納、保持、または維持するように、設計または実装することができる。例えば、データは、AIアクセラレータ108によって受信される入力データ110、および/または出力データ112(例えば、次のデバイスもしくは処理段階に出力される前)を含むことができる。データは、ニューラルネットワーク114および/またはプロセッサ124の処理段階のいずれかに使用される、またはいずれかからの、中間データを含むことができる。データは、記憶デバイス126から読み取るかまたはアクセスすることができる、ニューラルネットワーク114のニューロンに入力される、また該ニューロンで処理する、1つもしくは複数のオペランドを含むことができる。例えば、データは、記憶デバイス126に格納し、そこから読み取るかまたはアクセスすることができる、入力データ、重み情報、および/またはバイアス情報、活性化関数情報、ならびに/あるいは1つもしくは複数のニューロン(またはノード)のためのパラメータ128、および/またはニューラルネットワーク114の層を含むことができる。データは、記憶デバイス126に書き込み、またそこに格納することができる、ニューラルネットワーク114のニューロンからの出力データを含むことができる。例えば、データは、記憶デバイス126に転送するかもしくは書き込み、格納することができる、ニューラルネットワーク114の1つもしくは複数のニューロン(またはノード)および/または層のための、活性化データ、改良もしくは更新されたデータ(例えば、訓練段階などからの重み情報および/またはバイアス情報、活性化関数情報、および/または他のパラメータ128)を含むことができる。
いくつかの実施形態では、AIアクセラレータ108は1つまたは複数のプロセッサ124を含むことができる。1つまたは複数のプロセッサ124は、ニューラルネットワーク114またはAIアクセラレータ108のうち任意の1つもしくは複数に対する入力データを前処理するための、ならびに/あるいはニューラルネットワーク114またはAIアクセラレータ108のうち任意の1つもしくは複数に対する出力データを後処理するための、任意の論理、回路類、および/または処理構成要素(例えば、マイクロプロセッサ)を含むことができる。1つまたは複数のプロセッサ124は、ニューラルネットワーク114またはAIアクセラレータ108の1つもしくは複数の演算を構成、制御、および/または管理するための、論理、回路類、処理構成要素、および/または機能性を提供することができる。例えば、プロセッサ124は、ニューラルネットワーク114と関連付けられたデータまたは信号を受信して、(例えば、ニューラルネットワーク114の演算を実装する回路類に対するクロックゲート制御を介して)消費電力を制御または低減してもよい。別の例として、プロセッサ124は、(例えば、AIアクセラレータ108の様々な構成要素における、例えば並列の)別個の処理のため、(例えば、AIアクセラレータ108の同じ構成要素における、異なる時間もしくは段階での)逐次処理のため、あるいは記憶デバイスの異なるメモリスライスに、または異なる記憶デバイスに格納するため、データを区画化および/または再配置してもよい。いくつかの実施形態では、プロセッサ124は、特定の重み、活性化関数、および/またはパラメータ情報の識別、選択、ならびに/あるいはニューラルネットワーク114のニューロンおよび/または層へのロードによって、特定の文脈に対して演算を行い、特定のタイプの処理を提供し、ならびに/あるいは特定のタイプの入力データをアドレスするように、ニューラルネットワーク114を構成することができる。
いくつかの実施形態では、AIアクセラレータ108は、ディープラーニングおよび/またはAIワークロードを扱うかもしくは処理するように、設計および/または実装される。例えば、AIアクセラレータ108は、人工ニューラルネットワーク、マシンビジョン、および機械学習を含む人工知能用途のため、ハードウェアアクセラレーションを提供することができる。AIアクセラレータ108は、ロボティックス関連、物のインターネット(IoT)関連、または他のデータ集約的もしくはセンサ駆動のタスクを扱う演算向けに構成することができる。AIアクセラレータ108は、マルチコアまたは複数の処理要素(PE)設計を含んでもよく、人工現実(例えば、仮想、拡張、もしくは混合現実)システム、スマートフォン、タブレット、およびコンピュータなど、様々なタイプおよび形態のデバイスに組み込むことができる。AIアクセラレータ108の特定の実施形態は、少なくとも1つのデジタル信号プロセッサ(DSP)、コプロセッサ、マイクロプロセッサ、コンピュータシステム、プロセッサのヘテロジニアスコンピューティング構成、グラフィックス処理装置(GPU)、フィールドプログラマブルゲートアレイ(FPGA)、および/または特定用途向け集積回路(ASIC)を含むかあるいはそれらを使用して実装することができる。AIアクセラレータ108は、トランジスタベース、半導体ベース、および/または量子コンピューティングベースのデバイスであることができる。
次に図1Bを参照すると、AIに関連する処理を実施するためのデバイスの例示の一実施形態が示される。概要では、デバイスは、例えば、図1Aに関連して上述した1つまたは複数の特徴を有する、AIアクセラレータ108を含むかまたはそれに対応することができる。AIアクセラレータ108は、1つまたは複数の記憶デバイス126(例えば、スタティックランダムアクセスメモリ(SRAM)デバイスなどのメモリ)、1つまたは複数のバッファ、複数の処理要素(PE)回路またはPE回路のアレイ、他の論理または回路類(例えば、加算器回路類)、ならびに/あるいは他の構造または構成(例えば、相互接続、データバス、クロック回路類、電力ネットワーク)を含むことができる。上述の要素または構成要素はそれぞれ、ハードウェア、または少なくともハードウェアとソフトウェアの組み合わせの形で実装される。ハードウェアは、例えば、回路要素(例えば、1つもしくは複数のトランジスタ、論理ゲート、レジスタ、メモリデバイス、抵抗素子、導電素子、容量素子、および/またはワイヤもしくは導電性コネクタ)を含むことができる。
AIアクセラレータ108において実装されたニューラルネットワーク114(例えば、人工ニューラルネットワーク)では、ニューロンは、様々な形態を取ることができ、処理要素(PE)またはPE回路と呼ぶことができる。ニューロンは、対応するPE回路として実装することができ、ニューロンで起こり得る処理/活性化は、PE回路で実施することができる。PEは接続されて、異なるパターンが異なる機能的目的に役立つ、特定のネットワークパターンまたはアレイとなる。人工ニューラルネットワークのPEは、(例えば、半導体の実現例の実施形態では)電気的に動作し、アナログ、デジタル、またはハイブリッドのいずれかであってもよい。生体シナプスの作用に匹敵するために、PE間の接続に、適正なシステム出力を作成するように校正または「訓練」することができる、乗法的な重みを割り当てることができる。
PEは、(例えば、ニューロンのマッカロック-ピッツモデルを表す)次式に関して定義することができる。
ζ=Σiwixi (1)
y=σ(ζ) (2)
式中、ζは入力の重み付き合計(例えば、入力ベクトルおよびタップ重みベクトルの内積)であり、σ(ζ)は重み付き合計の関数である。重みおよび入力要素がベクトルwおよびxを形成する場合、重み付き合計ζは単純なドット積となる。
ζ=w・x (3)
これは、活性化関数(例えば、閾値比較の場合)または伝達関数のどちらかと呼ばれることがある。いくつかの実施形態では、1つまたは複数のPEはドット積エンジンと呼ばれる場合がある。ニューラルネットワーク114に対する入力(例えば、入力データ110)xは、入力空間からのものであることができ、出力(例えば、出力データ112)は出力空間の一部である。いくつかのニューラルネットワークでは、出力空間Yは、{0,1}のように単純なものであってもよく、または複雑な多次元(例えば、複数チャネル)空間(例えば、畳み込みニューラルネットワークの場合)であってもよい。ニューラルネットワークは、入力空間の自由度ごとに1つの入力、および出力空間の自由度ごとに1つの出力を有する傾向がある。
ζ=Σiwixi (1)
y=σ(ζ) (2)
式中、ζは入力の重み付き合計(例えば、入力ベクトルおよびタップ重みベクトルの内積)であり、σ(ζ)は重み付き合計の関数である。重みおよび入力要素がベクトルwおよびxを形成する場合、重み付き合計ζは単純なドット積となる。
ζ=w・x (3)
これは、活性化関数(例えば、閾値比較の場合)または伝達関数のどちらかと呼ばれることがある。いくつかの実施形態では、1つまたは複数のPEはドット積エンジンと呼ばれる場合がある。ニューラルネットワーク114に対する入力(例えば、入力データ110)xは、入力空間からのものであることができ、出力(例えば、出力データ112)は出力空間の一部である。いくつかのニューラルネットワークでは、出力空間Yは、{0,1}のように単純なものであってもよく、または複雑な多次元(例えば、複数チャネル)空間(例えば、畳み込みニューラルネットワークの場合)であってもよい。ニューラルネットワークは、入力空間の自由度ごとに1つの入力、および出力空間の自由度ごとに1つの出力を有する傾向がある。
いくつかの実施形態では、PEは、シストリックアレイとして配置および/または実装することができる。シストリックアレイは、セルまたはノードと呼ばれる、PEなどの結合されたデータ処理装置(DPU)のネットワーク(例えば、ホモジニアスネットワーク)であることができる。各ノードまたはPEは、上流側の隣接するノードまたはPEから受信したデータの関数として、部分結果を独立して計算することができ、結果を自身に格納することができ、結果を例えば下流側に渡すことができる。シストリックアレイは、特定用途向けに構成されたハードワイヤードまたはソフトウェアであることができる。ノードまたはPEは、固定された同一のものであることができ、シストリックアレイの相互接続はプログラム可能であることができる。シストリックアレイは同期型データ転送に依存することができる。
再び図1Bを参照すると、PE120に対する入力xは、記憶デバイス126(例えば、SRAM)から読み取られるかまたはアクセスされる、入力ストリーム132の一部であることができる。入力ストリーム132は、PEの1つの行(水平のバンクもしくはグループ)に方向付けることができ、PEのうち1つもしくは複数にわたって共有するか、またはそれぞれのPEに対する入力としてのデータ部分(重なり合うもしくは重なり合わないデータ部分)に区画化することができる。重みストリーム(例えば、記憶デバイス126から読み取られる)における重み134(もしくは重み情報)は、PEの列(垂直のバンクもしくはグループ)に方向付けるかまたは提供することができる。列のPEはそれぞれ、同じ重み134を共有するか、または対応する重み134を受信してもよい。標的のPEそれぞれに対する入力および/または重みは、(例えば、他のPEを通過せずに)標的のPEに(例えば、記憶デバイス126から)直接ルーティングすることができ、あるいは1つもしくは複数のPEを通して(例えば、PEの行もしくは列に沿って)ルーティングすることができる。各PEの出力は、PEアレイの外に(例えば、他のPEを通過せずに)直接ルーティングすることができ、あるいは1つもしくは複数のPEを通して(例えば、PEの列に沿って)PEアレイを出るようにルーティングすることができる。PEの各列の出力は、それぞれの列の加算器回路類において合算または加算し、PEのそれぞれの列に対するバッファ130に提供することができる。バッファ130は、受信した出力を記憶デバイス126に提供、転送、ルーティング、書き込み、および/または格納することができる。いくつかの実施形態では、記憶デバイス126によって格納された出力(例えば、ニューラルネットワークの1つの層からの活性化データ)を、記憶デバイス126から検索するかまたは読み取り、後の時間における(ニューラルネットワークの後続層の)処理のため、PE120のアレイに対する入力として使用することができる。特定の実施形態では、記憶デバイス126によって格納された出力を、AIアクセラレータ108に対する出力データ112として、記憶デバイス126から検索するかまたは読み取ることができる。
次に図1Cを参照すると、AIに関連する処理を実施するためのデバイスの例示の一実施形態が示される。概要では、デバイスは、例えば、図1Aおよび図1Bに関連して上述した1つまたは複数の特徴を有する、AIアクセラレータ108を含むかまたはそれに対応することができる。AIアクセラレータ108は、1つまたは複数のPE120、他の論理または回路類(例えば、加算器回路類)、ならびに/あるいは他の構造または構成(例えば、相互接続、データバス、クロック回路類、電力ネットワーク)を含むことができる。上述の要素または構成要素はそれぞれ、ハードウェア、または少なくともハードウェアとソフトウェアの組み合わせの形で実装される。ハードウェアは、例えば、回路要素(例えば、1つもしくは複数のトランジスタ、論理ゲート、レジスタ、メモリデバイス、抵抗素子、導電素子、容量素子、および/またはワイヤもしくは導電性コネクタ)を含むことができる。
いくつかの実施形態では、PE120は、1つもしくは複数の乗累算(MAC)ユニットまたは回路140を含むことができる。1つまたは複数のPEは、場合によっては、(単独でまたは集合的に)MACエンジンと呼ぶことができる。MACユニットは、乗累算を実施するように構成される。MACユニットは、乗算器回路、加算器回路、および/または累算器回路を含むことができる。乗累算は、2つの数字の積を計算し、その積を累算器に加える。MAC演算は、累算器オペランドa、ならびに入力bおよびcに関連して、次のように表すことができる。
a←a+(b×c) (4)
いくつかの実施形態では、MACユニット140は、組み合わせ論理に実装された乗算器とそれに続く加算器(例えば、組み合わせ論理を含むもの)、ならびに結果を格納する累算器レジスタ(例えば、順序および/または組み合わせ論理を含むもの)を含んでもよい。累算器レジスタの出力は、加算器の1つの入力にフィードバックすることができるので、各クロックサイクルにおいて、乗算器の出力を累算器レジスタに加算することができる。
a←a+(b×c) (4)
いくつかの実施形態では、MACユニット140は、組み合わせ論理に実装された乗算器とそれに続く加算器(例えば、組み合わせ論理を含むもの)、ならびに結果を格納する累算器レジスタ(例えば、順序および/または組み合わせ論理を含むもの)を含んでもよい。累算器レジスタの出力は、加算器の1つの入力にフィードバックすることができるので、各クロックサイクルにおいて、乗算器の出力を累算器レジスタに加算することができる。
上述したように、MACユニット140は、乗算および加算両方の機能を実施することができる。MACユニット140は2つの段階で演算することができる。MACユニット140は、最初に、第1の段階で所与の数(入力)の積を計算し、結果を第2の段階の演算(例えば、加算および/または累算)のために転送することができる。nビットのMACユニット140は、nビット乗算器、2nビット加算器、および2nビット累算器を含むことができる。(例えば、PEにおける)複数のMACユニット140またはMACユニットのアレイ140は、並列積分、畳み込み、相関、行列乗算、データ分類、および/またはデータ解析タスクのため、シストリックアレイの形で配置することができる。
本明細書に記載する様々なシステムおよび/またはデバイスを、コンピューティングシステムに実装することができる。図1Dは、代表的なコンピューティングシステム150のブロック図を示している。いくつかの実施形態では、図1Aのシステムは、コンピューティングシステム150の処理装置156(またはプロセッサ156)の少なくとも一部を形成することができる。コンピューティングシステム150は、例えば、スマートフォン、他の移動電話、タブレットコンピュータ、ウェアラブルコンピューティングデバイス(例えば、スマートウォッチ、眼鏡、ヘッドマウントディスプレイ)、デスクトップコンピュータ、ラップトップコンピュータなどのデバイス(例えばコンシューマデバイス)として実装するか、あるいは分散型コンピューティングデバイスを実装することができる。コンピューティングシステム150は、VR、AR、MR体験を提供するために実装することができる。いくつかの実施形態では、コンピューティングシステム150は、プロセッサ156、記憶デバイス158、ネットワークインターフェース151、ユーザ入力デバイス152、およびユーザ出力デバイス154など、従来の専用またはカスタムのコンピュータ構成要素を含むことができる。
ネットワークインターフェース151は、(ローカル/リモート)サーバまたはバックエンドシステムのネットワークインターフェースも接続される、ローカル/ワイドエリアネットワーク(例えば、インターネット)に対する接続を提供することができる。ネットワークインターフェース151は、有線インターフェース(例えば、イーサネット)、ならびに/あるいはWi-Fi、ブルートゥース、またはセルラーデータネットワーク規格(例えば、3G、4G、5G、LTEなど)などの様々なRFデータ通信規格を実装する無線インターフェースを含むことができる。
ユーザ入力デバイス152は、ユーザがコンピューティングシステム150に信号を提供するのに用いることができる、任意のデバイス(または複数のデバイス)を含むことができ、コンピューティングシステム150は、特定のユーザ要求または情報を示すものとして信号を解釈することができる。ユーザ入力デバイス152は、キーボード、タッチパッド、タッチスクリーン、マウスもしくは他のポインティングデバイス、スクロールホイール、クリックホイール、ダイアル、ボタン、スイッチ、キーパッド、マイクロフォン、センサ(例えば、モーションセンサ、視線追跡センサなど)などのいずれかまたは全てを含むことができる。
ユーザ出力デバイス154は、コンピューティングシステム150がユーザに情報を提供するのに用いることができる、任意のデバイスを含むことができる。例えば、ユーザ出力デバイス154は、コンピューティングシステム150によって生成されるかまたは該システムに送達される画像を表示する、ディスプレイを含むことができる。ディスプレイは、例えば、液晶ディスプレイ(LCD)、有機発光ダイオード(OLED)を含む発光ダイオード(LED)、投影システム、陰極線管(CRT)などの様々な画像生成技術を、サポートしている電子部品(例えば、デジタル・アナログもしくはアナログ・デジタル変換器、信号プロセッサなど)とともに組み込むことができる。入力および出力両方のデバイスとして機能する、タッチスクリーンなどのデバイスを使用することができる。ユーザ出力デバイス154は、ディスプレイに加えてまたはディスプレイの代わりに提供することができる。例としては、インジケータ光、スピーカ、触覚「ディスプレイ」デバイス、プリンタなどが挙げられる。
いくつかの実現例としては、コンピュータプログラム命令を非一時的なコンピュータ可読記憶媒体に格納する、マイクロプロセッサ、記憶装置、およびメモリなどの電子構成要素が挙げられる。本明細書に記載する特徴の多くは、コンピュータ可読記憶媒体として符号化されたプログラム命令のセットとして指定される、プロセスとして実現することができる。これらのプログラム命令は、1つまたは複数のプロセッサによって実行されると、プログラム命令に示されている様々な動作をプロセッサに実施させる。プログラム命令またはコンピュータコードの例としては、コンパイラによって作成されるものなどの機械コード、およびインタープリタを使用してコンピュータ、電子構成要素、またはマイクロプロセッサによって実行される、より高次のコードを含むファイルが挙げられる。好適なプログラミングを通して、プロセッサ156は、コンピューティングシステム150に対して、サーバまたはクライアントによって実施されるものとして本明細書に記載する機能性、またはメッセージ管理サービスと関連付けられた他の機能性のいずれかを含む、様々な機能性を提供することができる。
コンピューティングシステム150は例示であり、変形および修正が可能であることが認識されるであろう。本開示と関連して使用されるコンピュータシステムは、本明細書には具体的に記載しない他の能力を有することができる。更に、コンピューティングシステム150について、特定のブロックを参照して記載しているが、該ブロックは説明の便宜上定義されているものであり、構成部品の特定の物理的配置を示唆しようとするものではないことが理解されるべきである。例えば、異なるブロックを、同じ設備に、同じサーバラックに、または同じマザーボード上に配置することができる。更に、ブロックは必ずしも物理的に別個の構成要素に対応していなくてもよい。ブロックは、例えば、プロセッサをプログラミングするか、または適切な制御回路類を提供することによって、様々な動作を実施するように構成することができ、様々なブロックは、初期の構成がどのように得られるかに応じて再構成可能であってもなくてもよい。本開示の実現例は、回路類およびソフトウェアの任意の組み合わせを使用して実装される電子デバイスを含む、様々な装置で実現することができる。
B.ニューラルネットワークの層のための複数の出力を生成するための方法およびデバイス
本明細書の開示は、アレイをサブアレイに区画化し、サブアレイのうちの1つに処理要素のグループを割り当てることによってアレイ中に構成される複数の出力を生成するためのシステムおよび方法を含むがそれらに限定されない、ニューラルネットワークの層のための複数の出力を生成するためのシステム、方法、およびデバイスの実施形態を含む。いくつかの実施形態では、AIアクセラレータは、大きい畳み込みに対して最適化されるが、より小さい畳み込みに対しては効率が悪くなる。低いエネルギーおよびレイテンシで高い精度を達成するために、高スループットを与えながら小さい畳み込みを扱うことに効率的であるようにAIアクセラレータを構成することができる。したがって、大きい畳み込みに対して最適化されたAIアクセラレータを実現する代わりに、本開示のシステム、方法、およびデバイスによって実現されるAIアクセラレータは、より小さい畳み込みで効率を維持しながら、高いスループットおよび/または低いレイテンシを与えることが可能である。例として、AIアクセラレータは、AcclX×outY×AcclY(例えば、GEMM用語におけるM×N×K)のサイズまたは次元の一般行列乗算(GEMM)演算をサポートすることができる。入力オペランドおよび/または対応する出力にしたがって以下の畳み込みマッピングをフレキシブルに採用することができる。
1.デフォルト設定による畳み込み/GEMM演算のマッピング。出力は、AcclX×outYブロックにタイル表示されてもよく、入力オペランドのAcclX×AcclYチャンクとoutY×AcclYチャンクとを使用して更新されてもよい。
2.小さいフィーチャカウントを用いた畳み込み/GEMM演算のマッピング。出力は、AcclX/2×OutY/2ブロックにタイル表示されてもよく、入力オペランドのAcclX/2×AcclY/2チャンクとOutY/2×AcclY/2チャンクとを使用して更新されてもよい。
3.小さい入力フィーチャカウントを用いた畳み込み/GEMM演算のマッピング。出力は、AcclX×OutY/2ブロックにタイル表示されてもよく、入力オペランドのAcclX×AcclY/2チャンクとOutY/2×AcclY/2チャンクとを使用して更新されてもよい。
4.小さい出力フィーチャカウントを用いた畳み込み/GEMM演算のマッピング。出力は、AcclX/2×OutYブロックにタイル表示されてもよく、入力オペランドのAcclX/2×AcclY/2チャンクとOutY×AcclY/2チャンクとを使用して更新されてもよい。
本明細書の開示は、アレイをサブアレイに区画化し、サブアレイのうちの1つに処理要素のグループを割り当てることによってアレイ中に構成される複数の出力を生成するためのシステムおよび方法を含むがそれらに限定されない、ニューラルネットワークの層のための複数の出力を生成するためのシステム、方法、およびデバイスの実施形態を含む。いくつかの実施形態では、AIアクセラレータは、大きい畳み込みに対して最適化されるが、より小さい畳み込みに対しては効率が悪くなる。低いエネルギーおよびレイテンシで高い精度を達成するために、高スループットを与えながら小さい畳み込みを扱うことに効率的であるようにAIアクセラレータを構成することができる。したがって、大きい畳み込みに対して最適化されたAIアクセラレータを実現する代わりに、本開示のシステム、方法、およびデバイスによって実現されるAIアクセラレータは、より小さい畳み込みで効率を維持しながら、高いスループットおよび/または低いレイテンシを与えることが可能である。例として、AIアクセラレータは、AcclX×outY×AcclY(例えば、GEMM用語におけるM×N×K)のサイズまたは次元の一般行列乗算(GEMM)演算をサポートすることができる。入力オペランドおよび/または対応する出力にしたがって以下の畳み込みマッピングをフレキシブルに採用することができる。
1.デフォルト設定による畳み込み/GEMM演算のマッピング。出力は、AcclX×outYブロックにタイル表示されてもよく、入力オペランドのAcclX×AcclYチャンクとoutY×AcclYチャンクとを使用して更新されてもよい。
2.小さいフィーチャカウントを用いた畳み込み/GEMM演算のマッピング。出力は、AcclX/2×OutY/2ブロックにタイル表示されてもよく、入力オペランドのAcclX/2×AcclY/2チャンクとOutY/2×AcclY/2チャンクとを使用して更新されてもよい。
3.小さい入力フィーチャカウントを用いた畳み込み/GEMM演算のマッピング。出力は、AcclX×OutY/2ブロックにタイル表示されてもよく、入力オペランドのAcclX×AcclY/2チャンクとOutY/2×AcclY/2チャンクとを使用して更新されてもよい。
4.小さい出力フィーチャカウントを用いた畳み込み/GEMM演算のマッピング。出力は、AcclX/2×OutYブロックにタイル表示されてもよく、入力オペランドのAcclX/2×AcclY/2チャンクとOutY×AcclY/2チャンクとを使用して更新されてもよい。
様々な畳み込みマッピングは、大きい畳み込みに対して最適化された単一の畳み込み構成と比較して、広範囲のGEMM/畳み込み次元についてAIアクセラレータの計算スループットを高レベルにすることを可能にすることができる。
いくつかの態様では、CNNベースのAIアクセラレータ上で畳み込み/GEMM演算を実施するときのエネルギー非効率の1つの発生源は入力オペランドの反復されるフェッチである。いくつかの実施形態では、呼び出しにわたって持続する静的オペランドを保持するために、「r」個のレジスタまたはフリップフロップを各処理要素(PE)に加えることができる。これにより、システムは、例えば、畳み込み/GEMMの低減次元がAcclY×rよりも小さいかまたはAcclY×rに等しいときに、静的オペランドの冗長フェッチを回避することを可能にすることができる。
静的オペランドの複数のフェッチを回避する上記の技術と同様に、GEMMMがAcclXよりも大きいが、入力フィーチャカウントがAcclY×「r」個よりも小さい場合、ストリーミングオペランドがフェッチされるべき回数を低減することができる。この場合、ストリーミングオペランドの再利用カウントを最高「r」回まで増加することができる。
図2Aは、本開示の例示の一実現例による、AIに関連する処理を実施するためのデータの表現を示す図である。図2Aを参照すると、AIアクセラレータ(または「アクセラレータ」)は、(M×K)の入力行列211を入力データとして、および(K×N)のカーネル行列212をカーネル情報として受信することができ、(M×N)の畳み込み出力行列213を出力データとして生成するための畳み込みを実施することができる。いくつかの実施形態では、AIアクセラレータは、入力行列211からの1つの行とカーネル行列212からの対応する列とに対してドット積演算214を実施することによって、(M×N)の畳み込み出力行列213を生成することができる。いくつかの実施形態では、アクセラレータは、GEMMアルゴリズムを使用することによって(M×N)の畳み込み出力行列213を生成することができる。いくつかの実施形態では、入力行列211は、ニューラルネットワークの層に対する、サイズKのM個のデータチャンクで割った入力データストリーム(例えば、画像データ)を表してもよい。いくつかの実施形態では、入力データはチャネルの数に関連付けられてもよい(例えば、RGBデータの場合、チャネルの数は3つである)。いくつかの実施形態では、カーネル行列は、各カーネルがニューラルネットワークの層に対してKの重みから成る、N個のカーネルを表してもよい。
AIアクセラレータを設計する際に、大きい畳み込み(例えば、図2Aに示されているように、大きい出力サイズ(M×N)の畳み込み)に対して最適化を実施することができる。1つの手法では、AIアクセラレータは、大きいサイズ(例えば、大きいデータアレイ形状および/または次元)を有するデータの畳み込みに対して最適化を与えることができるが、より小さい畳み込み(例えば、(M×N)よりも小さい出力サイズの畳み込み)に対しては効率または利用率が悪くなる。例えば、AIアクセラレータ中の入力データチャンクの数Mおよび/またはカーネルの数Nが比較的小さいとき、AIアクセラレータの一部分(例えば、処理要素(PE)を含む回路類または乗累算器(MAC)回路類)は、実際のまたは有効な出力を処理していないことがあり、したがって冗長処理に対応し、それにより消費電力が増加する。
この問題を解決するために、いくつかの実現例では、大きい畳み込みに対してのみ最適化されたアクセラレータを構築する代わりに、アクセラレータは、より小さい畳み込みに対して効率を維持すると同時に、より大きい畳み込みに対して高いスループットと低いレイテンシとを与えることができる。例えば、大きい畳み込み出力を、処理要素(PE)のアレイの固定された次元に適合することができるより小さい畳み込み出力に区画化またはスプリットすることができる(図1BのPE120参照)。より小さい畳み込み出力に割り当てられたPEのグループによって、より小さい畳み込み出力の各々を生成することができる。このように、より小さい畳み込み出力はPEアレイの固定された次元に適合することができるので、PEアレイ中の全てのPEを実行することなしに、かかるより小さい出力に対する畳み込みを実施することができる。いくつかの実施形態では、MおよびNの各々が1よりも大きい整数である、(M×N)の次元のPEアレイについて、大きい畳み込み出力を、以下のより小さい畳み込み出力の例示的なタイプ、すなわち、(1)(M×N)の畳み込み出力行列、(2)(M/2×N)の畳み込み出力行列、(3)(M×N/2)の畳み込み出力行列、および(4)(M/2×N/2)の畳み込み出力行列のうちの1つに区画化(またはスプリットまたは分割)することができる。いくつかの実施形態では、(1)(M×N)の畳み込み出力行列を生成することであって、出力が、PEアレイ(例えば、全アレイ)の(M×N)のブロックに割り当てられるか、またはタイル表示され、アクセラレータへのオペランドとして(M×K)の入力行列と(K×N)のカーネル行列とを使用して更新される、(M×N)の畳み込み出力行列を生成すること、(2)(M/2×N)の畳み込み出力行列を生成することであって、出力が、PEアレイの(M/2×N)のブロックに割り当てられるか、またはタイル表示され、アクセラレータへのオペランドとして(M/2×K/2)の入力行列と(K/2×N)のカーネル行列とを使用して更新される、(M/2×N)の畳み込み出力行列を生成すること、(3)(M×N/2)の畳み込み出力行列を生成することであって、出力が、PEアレイの(M×N/2)のブロックに割り当てられるか、またはタイル表示され、アクセラレータへのオペランドとして(M×K/2)の入力行列と(K/2×N/2)のカーネル行列とを使用して更新される、(M×N/2)の畳み込み出力行列を生成すること、および(4)(M/2×N/2)の畳み込み出力行列を生成することであって、出力が、PEアレイの(M/2×N/2)のブロックに割り当てられるか、またはタイル表示され、アクセラレータへのオペランドとして(M/2×K/2)の入力行列と(K/2×N/2)のカーネル行列とを使用して更新される、(M/2×N/2)の畳み込み出力行列を生成することとを行うために、より小さい畳み込み出力の各タイプが生成または更新されてもよい。PEアレイの各ブロックは1つのPE(または複数のPE)を含んでもよい。
更に、畳み込み演算を実施する際の入力データとカーネルとの反復アクセスおよび/または処理に関して、消費電力および遅延が増加することがある。呼び出し(例えば、畳み込み演算の呼び出し)にわたって持続するアクセラレータへのオペランドは「静的」オペランドと呼ぶことができる。図2Aを参照すると、行列中の各カーネルは畳み込み演算中に変化しないので、カーネル行列中の各カーネル(例えば、カーネル値またはカーネル要素)は、(カーネルに対応する畳み込み出力行列の列を出力するための)畳み込み演算中に静的オペランドであることができる。例えば、図2Aを参照すると、カーネル行列212中のカーネル216は、カーネル216に対応する畳み込み出力行列213の列217を出力するための畳み込み演算中に静的オペランドである。一方、AIに関連する処理(例えば、畳み込み演算)のある動作中に変化するアクセラレータへのオペランドをストリーミングオペランドと呼ぶことができる。例えば、入力行列211中のM個のデータチャンクは、畳み込み出力行列213の列217を出力するための畳み込み演算中にストリーミングオペランドであることができる。
冗長演算の問題を解決するために、いくつかの実施形態では、静的オペランドを保持するためにメモリ(例えば、いくつかのレジスタ、フリップフロップ回路(例えば、FLOP)、またはラッチ)が各PE-120に追加されてもよく、それにより、記憶デバイス126からの記憶デバイス(例えば、SRAM)からのフェッチの数を低減することによってエネルギーが低減される。いくつかの実施形態では、キャッシュまたはバッファメモリが静的オペランドを保持するメモリとして使用されてもよい。いくつかの実施形態では、畳み込み/GEMMの低減されたサイズ(例えば次元)がK×Rよりも小さいかまたはK×Rに等しいとき、静的オペランドの冗長フェッチを回避するように、カーネルデータ(例えば、カーネル行列212)を静的オペランドとして保持するために、R個のFLOPが各PEに追加されてもよい。
本開示に記載するシステムおよび方法は、知られているシステムおよび方法に勝るいくつかの利点を含む。第1に、いくつかの実施形態では、本開示は、高いスループットを与えながら低いエネルギーおよびレイテンシを達成するための小さい畳み込み(例えば、と比較して、比較的小さいサイズの出力を生成する畳み込み)を扱うための解決策を提供する。第2に、いくつかの実施形態では、本開示は、より大きい畳み込み出力をそれから区画化することができる、より小さい畳み込み出力の様々なタイプ(例えば、4つのタイプ)または構成を提供する。この区画化によって、広範囲のGEMM/畳み込み次元に対してAIアクセラレータの計算スループットを比較的高くすることを可能にすることができる。第3に、各PEへのローカルメモリ(またはバッファ)の追加は、十分なスループットを与え、またエネルギーを節約するために、より小さい数のPEを展開することができるように、モジュラー構造を可能にすることができる。更に、ローカルメモリのかかる追加は、メモリ(例えば、図1BのSRAM126)からの(例えば、定常データの)冗長フェッチを回避することによって、データ移動コストを削減することができる。
図2B~図2Eは、本開示の1つまたは複数の例示の一実現例による、ニューラルネットワークの層のための複数の出力を生成するための、AIに関連する処理を実施するための複数の処理要素(PE)を含むデバイスの実施形態を示すブロック図である。
図2Bを参照すると、いくつかの実施形態では、アクセラレータ220は、アクセラレータ108の1つまたは複数の要素(図1Bを参照)を含んでもよく、(M×N)のPEアレイまたは行列を含むことができる。いくつかの実施形態では、PEアレイ中のPEの数は1kまたは2kであってもよい。いくつかの実施形態では、(例えば、図1Aのプロセッサ124の1つまたは複数の特徴を有する)アクセラレータのプロセッサは、最適エネルギー消費を考慮して、PEの数および/またはアレイ次元を決定し得る。いくつかの実施形態では、プロセッサは、異なる入力ストリーム223と異なるオペランドデータ224との対象であるアクセラレータ220の消費電力の測定データおよび/または推定に基づいて、PEの数および/またはアレイ次元を決定し得る。
いくつかの実施形態では、アクセラレータ220において、入力ストリーム223が記憶デバイス126から読み取られ、出力され、またはアクセスされてもよい(例えば、図1Bを参照)。いくつかの実施形態では、入力ストリーム223は、(M×K)の入力行列中に表されおよび/または構成されたデータを含むかまたは提供してもよい(図2Aを参照)。いくつかの実施形態では、入力ストリーム223はPE222のそれぞれの行のためのバッファ221に格納されてもよい。例えば、各バッファ221は、PE222の対応する行のための入力ストリーム223の一部分を格納してもよい。入力ストリーム223は、PE222の1つの行(水平のバンクもしくはグループ)に方向付けることができ、PEのうちの1つもしくは複数にわたって共有するか、またはそれぞれのPEに対する入力としてのデータ部分に区画化することができる。オペランドデータ224は、PEの列(垂直のバンクもしくはグループ)に方向付けるかまたは提供することができる。いくつかの実施形態では、オペランドデータ224は、(K×N)のカーネル行列(図2Aを参照)中に表されおよび/または構成されてもよい。いくつかの実施形態では、オペランドデータ224は、重みストリームにおける重み(または重み情報)を含むことができるカーネルデータを含んでもよい。列のPEの各々は、同じオペランド情報を共有するか、または対応するオペランド情報を受信してもよい。各標的のPEに対する(入力ストリーム223からの)入力および/または重みは、(例えば、他のPEを通過せずに)標的のPEに(例えば、記憶デバイス126から)直接ルーティングすることができ、あるいは1つもしくは複数のPEを通して(例えば、PEの行もしくは列に沿って)標的のPEにルーティングすることができる。各PEの出力は、PEアレイの外に(例えば、他のPEを通過せずに)直接ルーティングすることができる、あるいは1つもしくは複数のPEを通して(例えば、PEの列に沿って)PEアレイを出るようにルーティングすることができる。PEの各列の出力は、それぞれの列の加算器回路類において合算または加算し、出力データ225として出力することができる。いくつかの実施形態では、出力データ225は、(M×N)の畳み込み出力行列(図2Aを参照)中に表されおよび/または構成されてもよい。いくつかの実施形態では、出力データ225は、それぞれのPEの列に対するバッファ(例えば、図1Bのバッファ130)に格納されてもよい。バッファは、受信した出力を記憶デバイス126に提供、転送、ルーティング、書き込み、および/または格納することができる(例えば、図1Bを参照)。いくつかの実施形態では、記憶デバイス126(図1Bを参照)に格納された出力(例えば、ニューラルネットワークの1つの層からの活性化データ)を、記憶デバイス126から検索するかまたは読み取ることができ、後の時間における(ニューラルネットワークの後続の層の)処理のため、PE120のアレイに対する入力として使用することができる。
いくつかの実施形態では、(M×N)の次元をもつPEアレイは、ニューラルネットワークの層のための複数の出力を生成するための入力データを受信してもよい。いくつかの実施形態では、複数の出力は、第1のアレイ(図示されていない)中に構成される複数の畳み込み出力(例えば、PEによって実施された畳み込み演算によって生成される出力)であってもよい。プロセッサは、出力の第1のアレイの次元をPEアレイの次元(例えば、図2BのPEアレイについての(M×N))と比較してもよい。プロセッサは、比較することの結果にしたがって、(例えば、1つの第1のアレイの次元が対応するPEアレイの次元よりも大きいかまたはそれに等しいことの決定に応答して)、第1のアレイをPEアレイの次元よりも小さいかまたはそれに等しい次元を有する各サブアレイに区画化してもよい。
いくつかの実施形態では、第1のアレイの区画化は静的に構成されてもよい。例えば、プロセッサは、第1のアレイを、(例えば、第1のアレイよりも大きい畳み込み出力と比較してより小さい畳み込み出力をサポートする)以下の例示的なタイプのサブアレイ、すなわち、(1)(M×N)の畳み込み出力行列(図2Bを参照)、(2)(M/2×N)の畳み込み出力行列(図2Cを参照)、(3)(M×N/2)の畳み込み出力行列(例えば、図2Dを参照)、および(4)(M/2×N/2)の畳み込み出力行列(図2Bを参照)のうちの少なくとも1つに区画化(またはスプリットまたは分割またはマップ)してもよい。いくつかの実施形態では、区画化は、例えばプロセッサ124によって、例えば状態機械を使用して動的に構成されてもよい。
図2Bを参照すると、(M×N)のサブアレイを提供するために第1のアレイを区画化(またはスプリットまたは分割またはマッピング)することに応答して、プロセッサは、(M×N)の畳み込み出力行列をPEアレイ(例えば、全アレイ)の(M×N)のブロック227に割り当ててもよい。PEアレイの各ブロックは1つまたは複数のPEを含むことができる。いくつかの実施形態では、(M×N)の畳み込み出力行列は、(M×N)のブロック227にタイル表示またはマッピングされ、(M×K)の入力ストリーム223と(K×N)のオペランドデータ224とを使用して更新されてもよい。いくつかの実施形態では、(M×N)の畳み込み出力行列に割り当てられた(M×N)のブロック227の各PEは、(M×K)の入力ストリーム223と(K×N)のオペランドデータ224との一部分を使用して(M×N)の畳み込み出力行列の対応する出力を生成または更新してもよい。いくつかの実施形態では、(M×N)のブロック227の各PEは、対応する生成または更新された出力を対応するバッファ(例えば、図1Bのバッファ130)に格納してもよい。いくつかの実施形態では、バッファ130は(M×N)のアレイまたは行列中に構成されてもよく、および/または、例えばPEの各列の1つに対してN個のバッファ130を含んでもよい。いくつかの実施形態では、アクセラレータ220は、バッファに格納された(M×N)の出力データ225を記憶デバイス126に書き込んでもよい(図1Bを参照)。
図2Cを参照すると、(M/2×N)のサブアレイを提供するために第1のアレイを区画化(またはスプリットまたは分割またはマッピング)することに応答して、プロセッサは、(M/2×N)の畳み込み出力行列をPEアレイの(M/2×N)のブロック237に割り当ててもよい。PEアレイの各ブロックは1つまたは複数のPEを含むことができる。いくつかの実施形態では、(M/2×N)の畳み込み出力行列は、(M/2×N)のブロック237にタイル表示またはマッピングされ、(M/2×K/2)の入力ストリーム233と(K/2×N)のオペランドデータ234とを使用して更新されてもよい。いくつかの実施形態では、(M/2×N)の畳み込み出力行列に割り当てられた(M×N)のブロック237の各PEは、(M/2×K/2)の入力ストリーム233と(K/2×N)のオペランドデータ234との一部分を使用して(M/2×N)の畳み込み出力行列の対応する出力を生成または更新してもよい。いくつかの実施形態では、(M/2×N)のブロック237の各PEは、対応する生成または更新された出力を対応するバッファ(例えば、図1Bのバッファ130)に格納してもよい。いくつかの実施形態では、アクセラレータ220は、バッファに保持または格納された(M/2×N)の次元決定された出力データ235を記憶デバイス126に書き込んでもよい(図1Bを参照)。
図2Dを参照すると、(M×N/2)のサブアレイを提供するために第1のアレイを区画化(またはスプリットまたは分割またはマッピング)したことに応答して、プロセッサは、(M×N/2)の畳み込み出力行列をPEアレイの(M×N/2)のブロック247に割り当ててもよい。PEアレイの各ブロックは1つまたは複数のPEを含むことができる。いくつかの実施形態では、(M×N/2)の畳み込み出力行列は、(M×N/2)のブロック247にタイル表示され、(M×K/2)の入力ストリーム243と(K/2×N/2)のオペランドデータ244とを使用して更新されてもよい。いくつかの実施形態では、(M×N/2)の畳み込み出力行列に割り当てられた(M×N/2)のブロック247の各PEは、(M×K/2)の入力ストリーム243と(K/2×N/2)のオペランドデータ244との一部分を使用して(M×N/2)の畳み込み出力行列の対応する出力を生成または更新してもよい。いくつかの実施形態では、(M×N/2)のブロック247の各PEは、対応する生成または更新された出力を対応するバッファ(例えば、図1Bのバッファ130)に格納してもよい。いくつかの実施形態では、アクセラレータ220は、バッファに保持または格納された(M×N/2)の次元決定された出力データ245を記憶デバイス126に書き込んでもよい(図1Bを参照)。
図2Eを参照すると、(M/2×N/2)のサブアレイを提供するために第1のアレイを区画化(またはスプリットまたは分割またはマッピング)したことに応答して、プロセッサは、(M/2×N/2)の畳み込み出力行列をPEアレイの(M/2×N/2)のブロック257に割り当ててもよい。PEアレイの各ブロックは1つまたは複数のPEを含むことができる。いくつかの実施形態では、(M/2×N/2)の畳み込み出力行列は、(M/2×N/2)のブロック257にタイル表示され、(M/2×K/2)の入力ストリーム253と(K/2×N/2)のオペランドデータ254とを使用して更新されてもよい。いくつかの実施形態では、(M/2×N/2)の畳み込み出力行列に割り当てられた(M/2×N/2)のブロック257の各PEは、(M/2×K/2)の入力ストリーム253と(K/2×N/2)のオペランドデータ254との一部分を使用して(M/2×N/2)の畳み込み出力行列の対応する出力を生成または更新してもよい。いくつかの実施形態では、(M/2×N/2)のブロック257の各PEは、対応する生成または更新された出力を対応するバッファ(例えば、図1Bのバッファ130)に格納してもよい。いくつかの実施形態では、アクセラレータ220は、バッファに保持または格納された(M/2×N/2)の次元決定された出力データ255を記憶デバイス126に書き込んでもよい(図1Bを参照)。
図2Fは、本開示の例示の一実現例による、ニューラルネットワークの層のための複数の出力を生成するためのAIに関連する処理を実施するための処理装置(PE)の一実施形態のブロック図である。
図2Fを参照すると、いくつかの実施形態では、PE260は第1のメモリ261と第2のメモリ262とを含んでもよい。いくつかの実施形態では、PE260は、(1)第1のメモリ261に格納された入力ストリーム223データの第1のベクトルと、(2)オペランドデータ224の第2のベクトルとのドット積263を実施または計算するために(例えば、図1CのMACユニット140の1つまたは複数の特徴を有する)MACユニットを含んでもよい。PE260のMACユニットは、ドット積演算の結果を格納するための累算器264を含んでもよい。別のPE265は同様の構成を有する。各PEに対応する、入力ストリームとオペランドデータとに対する畳み込み演算の完了(例えば、入力ストリームからのベクトルとオペランドデータからのベクトルとのドット積を計算することの完了)に応答して、PE(図2Fの260または265)は畳み込み演算の対応する結果をアウトフロップ266の対応する列位置に出力してもよい。いくつかの実施形態では、同じ行のPEからの畳み込み演算の結果を出力したことに応答して、アウトフロップ266(例えば、1つまたは複数のレジスタまたはフロップフロップデバイス)は畳み込み演算の結果をバッファ267および268の対応する列位置(または列バンク)に書き込んでもよい。
いくつかの実施形態では、第1のメモリ261および第2のメモリ262の各々は、静的オペランドを保持するためのFLOP(フリップフロップまたはレジスタ)またはラッチの数を含んでもよく、それにより、(例えば、記憶デバイス126からの)フェッチの数を低減することによってエネルギーが低減される。いくつかの実施形態では、キャッシュまたはバッファメモリ(例えば、SRAM)は第1のメモリ261および第2のメモリ262の各々として使用されてもよい。いくつかの実施形態では、第2のメモリは、最高(K×R)の次元決定されたオペランドを格納してもよく、RはNよりも小さいかまたはNに等しい。例えば、第1のメモリ261および第2のメモリ262の各々は最高32バイトのデータを格納してもよい。この構成を用いて、各PEは、畳み込み/GEMMの低減されたサイズもしくは次元がK×Rよりも小さいかまたはK×Rに等しいとき、(例えばSRAMからの)静的オペランドの冗長フェッチを回避するように、最高(K×R)の次元決定されたカーネルデータ(例えば、カーネル行列212)を静的オペランドとして保持することができる。
同様に、いくつかの実施形態では、第1のメモリ261は、最高(S×K)の入力ストリームを格納してもよく、SはMよりも小さいかまたはMに等しい。この構成を用いて、各PEは、Sが1よりも大きいとき、入力ストリームデータが(例えばSRAMから)フェッチされるべき回数を低減するように、最高(S×K)の入力ストリームデータ(例えば、入力行列211)を保持することができる。この場合、入力ストリームデータを、例えばSRAMから新しい入力ストリームデータをフェッチすることなしに、最高S回再利用することができる。
図2Gは、本開示の例示の一実現例による、PEをAIに関連する処理の出力のサブアレイに割り当てるための方法の一実施形態を示すブロック図である。図2Gを参照すると、いくつかの実施形態では、アクセラレータ270は、(M×N)のPEアレイまたは行列と、入力ストリームバッファ271とを含んでもよい。いくつかの実施形態では、アクセラレータ270の各PE272は図2FのPE260と同様の構成を有してもよい。いくつかの実施形態では、(M×N)の次元をもつPEアレイに対して、プロセッサは、ニューラルネットワークの層のための複数の出力を生成するための入力データを受信してもよい。例えば、図2Gを参照すると、(M/2×2N)のアレイ(図示されていない)に複数の出力が構成される場合、プロセッサは、(M/2×2N)のアレイの次元を(M×N)の次元決定されたPEアレイの次元と比較する。(M/2×2N)のアレイの列次元、すなわち、2Nが、PEの対応する次元、すなわち、Nよりも大きいかまたはNに等しいという決定に応答して、プロセッサは、(M/2×2N)のアレイを、(M×N)のPEアレイに適合するように2つのサブアレイに、例えば、第1のサブアレイおよび第2のサブアレイの各々が(M/2×N)の次元を有し、それらがPEアレイ(M×N)の次元よりも小さいかまたはそれに等しくなるように、第1のサブアレイと第2のサブアレイとに区画化してもよい。
再び図2Gを参照すると、(M/2×2N)のアレイを(M/2×N)の第1のサブアレイと(M/2×N)の第2のサブアレイとに区画化(またはスプリットまたは分割またはマッピング)することに応答して、プロセッサは、(M/2×N)の第1のサブアレイをPEアレイの(M/2×N)のブロック277に割り当て、(M/2×N)の第2のサブアレイをPEアレイの(M/2×N)のブロック278に割り当ててもよい。いくつかの実施形態では、(M/2×N)の第1のサブアレイは、(M/2×N)のブロック277にタイル表示またはマッピングされ、(M/2×K)の入力ストリーム273と(K×N)のオペランドデータ275とを使用して更新されてもよい。いくつかの実施形態では、(M/2×N)の第1のサブアレイに割り当てられた(M/2×N)のブロック277の各PEは、(M/2×K)の入力ストリーム273と(K×N)のオペランドデータ274との一部分を使用して(M/2×N)の第1のサブアレイの対応する出力を生成または更新してもよい。いくつかの実施形態では、(M/2×N)のブロック277の各PEは、対応する生成または更新された出力を対応するバッファ(例えば、図1Bのバッファ130)に(M/2×N)の出力データ276として格納してもよい。同様に、いくつかの実施形態では、(M/2×N)の第2のサブアレイは、(M/2×N)のブロック278にタイル表示またはマッピングされ、(M/2×K)の入力ストリーム273と(K×N)のオペランドデータ275とを使用して更新されてもよい。いくつかの実施形態では、(M/2×N)の第2のサブアレイに割り当てられた(M/2×N)のブロック278の各PEは、(M/2×K)の入力ストリーム273と(K×N)のオペランドデータ275との一部分を使用して(M/2×N)の第2のサブアレイの対応する出力を生成または更新してもよい。いくつかの実施形態では、(M/2×N)のブロック278の各PEは、対応する生成または更新された出力を対応するバッファ(例えば、図1Bのバッファ130)に(M/2×N)の出力データ279として格納してもよい。
いくつかの実施形態では、(M/2×N)のブロック277のPEと(M/2×N)のブロック278のPEとのための入力データ構造はプロセッサによって決定されてもよい。プロセッサは、区画化にしたがって、入力データの特定の部分を様々なサブアレイ中のPEにどのように方向付けるかまたはルーティングするかを決定してもよい。いくつかの実施形態では、プロセッサは、(M/2×N)のブロック277と(M/2×N)のブロック278との間で共有および処理されるべき入力データの共通の部分を識別してもよい。例えば、プロセッサは、(M/2×K)の入力ストリーム273を共通の部分として識別し、アクセラレータ270に(M/2×K)の入力ストリーム273を(M/2×N)のブロック277と(M/2×N)のブロック278の両方に方向付け、シフト、またはルーティングさせてもよい。いくつかの実施形態では、プロセッサは、(M/2×N)のブロック277のために使用される入力データの一部分を識別してもよい。例えば、プロセッサは、(K×N)のオペランドデータ274を(M/2×N)のブロック277のために使用される入力データの一部分として識別してもよく、アクセラレータ270に(K×N)のオペランドデータ274を(M/2×N)のブロック277に方向付け、シフト、またはルーティングさせることができる。同様に、プロセッサは、(K×N)のオペランドデータ275を(M/2×N)のブロック278のために使用される入力データの一部分として識別してもよく、アクセラレータ270に(K×N)のオペランドデータ275を(M/2×N)のブロック278に方向付け、シフト、またはルーティングさせることができる。
いくつかの実施形態では、(M/2×N)のブロック277の各PEの第2のメモリ262(図2Fを参照)は、SRAMからの静的オペランドの冗長フェッチを回避するように、(K×N)のオペランドデータ274から最高(K×R)のオペランド(RはNよりも小さいかまたはNに等しい)を格納してもよい。同様に、(M/2×N)のブロック278の各PEの第2のメモリ262(図2Fを参照)は、SRAMからの静的オペランドの冗長フェッチを回避するように、(K×N)のオペランドデータ275から最高(K×R)のオペランド(RはNよりも小さいかまたはNに等しい)を格納してもよい。
いくつかの実施形態では、(M/2×N)のブロック277の各PEの第1のメモリ261(図2Fを参照)は、(M/2×K)の次元決定またはサイズ決定された入力ストリーム273から最高(S×K)の次元決定またはサイズ決定された入力ストリーム(SはMよりも小さいかまたはMに等しい)を格納してもよく、それにより、SRAMから新しい入力ストリームデータをフェッチすることなしに、入力ストリームデータを最高S回再利用する。同様に、(M/2×N)のブロック278の各PEの第1のメモリ261(図2Fを参照)は、(M/2×K)の次元決定またはサイズ決定された入力ストリーム273から最高(S×K)の次元決定またはサイズ決定された入力ストリーム(SはMよりも小さいかまたはMに等しい)を格納してもよく、それにより、SRAMから新しい入力ストリームデータをフェッチすることなしに、入力ストリームデータを最高S回再利用する。
図2Hは、本開示の例示の一実現例による、異なる(例えば、分離されたかまたは別個の)位置における2つのPEのグループをAIに関連する処理の出力に割り当てるための方法の一実施形態のブロック図である。図2Hを参照すると、いくつかの実施形態では、(M×N)の次元をもつPEアレイに対して、プロセッサは、(入力ストリーム281、282に対応する)2つの別個の入力データを受信してもよく、それらの各々は、ニューラルネットワークの層のために、アレイ中に構成されたそれぞれの複数の出力を生成するために使用される。例えば、図2Hを参照すると、プロセッサは、(M/2×N/2)の第1の出力アレイ(図示されていない)と(M/2×N/2)の第2の出力アレイ(図示されていない)とのそれぞれに対応する2つの入力データを受信してもよく、それらの両方は、PEアレイ(M×N)の次元よりも小さいかまたはそれに等しい次元を有する。(M/2×N/2)の第1の出力アレイと(M/2×N/2)の第2のサブアレイとを識別することに応答して、プロセッサは、(M/2×N/2)の第1の出力アレイをPEアレイの(M/2×N/2)のブロック287に割り当て、(M/2×N/2)の第2の出力アレイをPEアレイの(M/2×N/2)のブロック288に割り当ててもよい。いくつかの実施形態では、(M/2×N/2)の第1の出力アレイは、(M/2×N/2)のブロック287にタイル表示またはマッピングされ、(M/2×K/2)の入力ストリーム281と(K/2×N/2)のオペランドデータ283とを使用して更新されてもよい。いくつかの実施形態では、(M/2×N/2)の第1の出力アレイに割り当てられた(M/2×N/2)のブロック287の各PEは、(M/2×K/2)の入力ストリーム281と(K/2×N/2)のオペランドデータ283との一部分を使用して(M/2×N/2)の第1の出力アレイの対応する出力を生成または更新してもよい。いくつかの実施形態では、(M/2×N/2)のブロック287の各PEは、対応する生成または更新された出力を対応するバッファ(例えば、図1Bのバッファ130)に(M/2×N/2)の出力データ285として格納してもよい。同様に、いくつかの実施形態では、(M/2×N/2)の第2の出力アレイは、(M/2×N/2)のブロック288にタイル表示またはマッピングされ、(M/2×K/2)の入力ストリーム282と(K/2×N/2)のオペランドデータ284とを使用して更新されてもよい。いくつかの実施形態では、(M/2×N/2)の第2の出力アレイに割り当てられた(M/2×N/2)のブロック288の各PEは、(M/2×K/2)の入力ストリーム282と(K/2×N/2)のオペランドデータ284との一部分を使用して(M/2×N/2)の第2の出力アレイの対応する出力を生成または更新してもよい。いくつかの実施形態では、(M/2×N/2)のブロック288の各PEは、対応する生成または更新された出力を対応するバッファ(例えば、図1Bのバッファ130)に(M/2×N/2)の出力データ286として格納してもよい。
いくつかの実施形態では、(M/2×N/2)のブロック287と(M/2×N/2)のブロック288とのPEのための入力データ構造はプロセッサによって決定されてもよい。いくつかの実施形態では、第1および第2の出力アレイのための2つの入力データが互いに別個であることを識別することに応答して、プロセッサは、(M/2×N/2)のブロック287と(M/2×N/2)のブロック288(例えば、PEのサブアレイとして)との間に入力データの共通の部分がないことを決定してもよい。いくつかの実施形態では、(M/2×N/2)のブロック287と(M/2×N/2)のブロック288との間に入力データの共通の部分がないという決定に応答して、プロセッサは、(M/2×N/2)の第1の出力アレイと(M/2×N/2)の第2の出力アレイとを、異なる(例えば、別個のまたは分離された)位置におけるPEの2つのサブアレイ、例えば、PEアレイの(M/2×N/2)のブロック287とPEアレイの(M/2×N/2)のブロック288とに割り当ててもよい。本開示のいくつかの実施形態では、デバイス(例えば、図2Bのアクセラレータ220)は、デバイスのプロセッサ(例えば、図1Aのプロセッサ124)と処理装置(PE)アレイ(例えば、図2Bの(M×N)のPEアレイ)とを含んでもよい。PEアレイは複数のPE(例えば、図2BのPE222)を含んでもよい。プロセッサは、ニューラルネットワークの層の1つまたは複数のニューロン/ノードのための複数の出力を生成するための入力データを受信するように構成されてもよく、複数の出力は第1のアレイ中に構成される。いくつかの実施形態では、複数の出力は、ニューラルネットワークの層のための畳み込み演算の出力(図2Aを参照)であってもよい。プロセッサは、第1のアレイの次元をPEアレイ(例えば、図2Bの(M×N))の次元と比較するように構成されてもよい。プロセッサは、比較することの結果にしたがって、第1のアレイを、それぞれPEアレイの次元よりも小さいかまたはそれに等しい次元を有するサブアレイに区画化するように構成されてもよい。プロセッサは、PEアレイ中のPEの第1のグループ(例えば、図2GのPEの(M/2×N)のブロック277)をサブアレイのうちの第1のサブアレイに割り当てるように構成されてもよい。サブアレイのうちの第1のサブアレイ(例えば、図2GのPEの(M/2×N)のブロック277)に割り当てられたPEの第1のグループの各PEは、入力データの一部分(例えば、図2Gの(M/2×K)の入力ストリーム273、(K×N)のオペランドデータ274)を使用して複数の出力の対応する出力を生成するように構成されてもよい。
いくつかの実施形態では、PEアレイは二次元M×Nアレイ(図2B~図2Eおよび図2G~図2Hを参照)であってもよい。MおよびNの各々は1よりも大きい整数である。プロセッサは、第1のアレイをM×Nアレイ(図2Bを参照)、M×N/2アレイ(図2Dを参照)、M/2×Nアレイ(図2Cを参照)、M/2×N/2アレイ(図2Eを参照)および/または様々な次元の他のアレイのうちの1つまたは複数を提供するために区画化するように構成されてもよい。
いくつかの実施形態では、プロセッサは、第1の次元における第1のアレイのサイズ(例えば、図2Gの(M/2×2N)のアレイの2N)が第1の次元におけるPEアレイのサイズ(例えば、図2Gの(M×N)のPEアレイのN)よりも大きいかどうかを決定するように構成されてもよい。第1の次元における第1のアレイのサイズが第1の次元におけるPEアレイのサイズよりも大きいことを決定したことに応答して、プロセッサは、第1のアレイをサブアレイのうちの第1のサブアレイと第2のサブアレイとに区画化するように構成されてもよい。プロセッサは、第1のサブアレイをPEアレイ中のPEの第1のグループ(例えば、図2Gの(M/2×N)のブロック277)に割り当て、第2のサブアレイをPEの第1のグループとは異なるPEアレイ中のPEの第2のグループ(例えば、図2Gの(M/2×N)のブロック278)に割り当てるように構成されてもよい。
いくつかの実施形態では、プロセッサは更に、PEの第1および第2のグループの両方によって使用されるべき入力データの共通の部分(例えば、図2Gの(M/2×K)の入力ストリーム273)を識別するように構成されてもよい。プロセッサは更に、入力データの共通の部分(例えば、図2Gの(M/2×K)の入力ストリーム273)をPEの第1および第2のグループ(例えば、図2Gの(M/2×N)のブロック277および(M/2×N)のブロック278)に方向付け、ルーティングまたはシフトするように構成されてもよい。
いくつかの実施形態では、プロセッサは更に、PEの第1のグループによって使用されるべき入力データの第1の部分(例えば、図2Gの(K×N)のオペランドデータ274)と、PEの第2のグループによって使用されるべき入力データの第2の部分(例えば、図2Gの(K×N)のオペランドデータ275)とを識別するように構成されてもよい。プロセッサは更に、入力データの第1の部分(例えば、図2Gの(K×N)のオペランドデータ274)をPEの第1のグループ(例えば、図2Gの(M/2×N)のブロック277)に方向付け、ルーティングまたはシフトするように構成されてもよい。プロセッサは更に、入力データの第2の部分(例えば、図2Gの(K×N)のオペランドデータ275)をPEの第2のグループ(例えば、図2Gの(M/2×N)のブロック278)に方向付け、ルーティングまたはシフトするように構成されてもよい。
いくつかの実施形態では、入力データは、(例えば、図2Aの入力行列211の要素を表す)第1の複数の入力値と(例えば、図2Aのカーネル行列212の要素を表す)第2の複数の入力値とを含んでもよい。PEの第1のグループの各PE(例えば、図2FのPE260)は、第1のバッファメモリ(例えば、図2Fの第1のメモリ261)、第2のバッファメモリ(例えば、図2Fの第1のメモリ262)、および/または乗累算器(MAC)回路類(例えば、図1CのMACユニット140)を含んでもよい。複数の出力の対応する出力を生成する際に、PEの第1のグループの各PEは、第1の複数の入力値の第1の値(例えば、図2Fの第1のベクトル)と第2の複数の入力値の第2の値(例えば、図2Fの第2のベクトル)とを受信するように構成されてもよい。PEの第1のグループの各PE(例えば、図2FのPE260)は、第1の値および第2の値(例えば、図2Fの第1のベクトルおよび第2のベクトル)をそれぞれ第1のバッファメモリおよび第2のバッファメモリ(例えば、図2Fの第1のメモリ261および第2のメモリ262)に格納するように構成されてもよい。PEの第1のグループの各PEは、MAC回路類を介して、第1の値と第2の値との間の第1のドット積演算の結果(例えば、図2Fのドット積263)を生成するように構成されてもよい。
いくつかの実施形態では、各PEは、複数の第1の入力値からの値の第1の数のセット(例えば、図2FのS個の第1のベクトル)を第1のバッファメモリ(例えば、図2Fの第1のメモリ261)に格納するように構成されてもよい。各PEは、MAC回路類を介して、(i)第1のバッファメモリに格納された値の第1の数のセットの各々と、(ii)第2のバッファメモリに格納された第2の値(例えば、図2Fの第2のメモリ262に格納された第2のベクトル)とのドット積(例えば、ドット積演算の結果)を計算するように構成されてもよい。各PEは、第1の数の計算されたドット積(例えば、図2FのS個のドット積)をニューラルネットワークの層のための畳み込み演算の出力として出力するように構成されてもよい。
いくつかの実施形態では、各PEは、複数の第2の入力値からの値の第2の数のセット(例えば、図2FのR個の第2のベクトル)を第2のバッファメモリに(例えば、図2Fの第2のメモリ262)格納するように構成されてもよい。各PEは、MAC回路類を介して、(i)第1のバッファメモリに格納された第1の値(例えば、図2Fの第1のメモリ261に格納された第1のベクトル)と、(ii)第2のバッファメモリに格納された値の第2の数のセットの各々とのドット積(例えば、ドット積演算の結果)を計算するように構成されてもよい。各PEは、第2の数の計算されたドット積(例えば、図2FのR個のドット積)をニューラルネットワークの層のための畳み込み演算の出力として出力するように構成されてもよい。
いくつかの実施形態では、第1の複数の入力値は、ニューラルネットワークの層に対する入力データストリーム(例えば、図2Aの入力行列211)と重み(例えば、図2Aのカーネル行列212)とのうちの一方を表してもよい。第2の複数の入力値は、ニューラルネットワークの層に対する入力データのストリームと重みとの他方を表してもよい。
図2Iは、本開示の例示の一実現例による、ニューラルネットワークの層のための複数の出力を生成するためのプロセスを示すフローチャートである。いくつかの実施形態では、本方法は、プロセッサによって、ニューラルネットワークの層のための複数の出力を生成するための入力データを受信することであって、複数の出力が第1のアレイ中に構成された、入力データを受信すること(291)を含む。本方法は、プロセッサによって、第1のアレイの次元を複数の処理装置(PE)を含むPEアレイの次元と比較すること(292)を含むことができる。本方法は、比較することの結果にしたがって、プロセッサによって、第1のアレイをサブアレイに区画化すること(293)を含むことができる。サブアレイの各々は、PEアレイの次元よりも小さいかまたはそれに等しい次元を有してもよい。本方法は、プロセッサによって、PEアレイ中のPEの第1のグループをサブアレイのうちの第1のサブアレイに割り当てること(294)を含んでもよい。本方法は、サブアレイのうちの第1のサブアレイに割り当てられたPEの第1のグループの各PEによって、入力データの一部分を使用して複数の出力の対応する出力を生成することを含むことができる。
291の更なる詳細では、またいくつかの実施形態では、アクセラレータのプロセッサ(例えば、図1Aのプロセッサ124)は、ニューラルネットワークの層のための複数の出力を生成するための入力データを受信し、複数の出力は第1のアレイ中に構成される。いくつかの実施形態では、複数の出力は、ニューラルネットワークの層のための畳み込み演算の出力(図2Aを参照)であってもよい。例えば、図2Gを参照すると、第1のアレイは(M/2×2N)の次元を有してもよい。
292の更なる詳細では、またいくつかの実施形態では、プロセッサは、第1のアレイの次元を複数の処理装置(PE)(例えば、図2BのPE222)を含むPEアレイ(例えば、図2Bの(M×N)のPEアレイ)の次元(例えば、図2Bの(M×N))と比較する。いくつかの実施形態では、PEアレイは二次元M×Nアレイ(図2B~図2Eおよび図2G~図2Hを参照)であってもよく、MおよびNの各々は1よりも大きい整数であってもよい。いくつかの実施形態では、プロセッサは、第1の次元における第1のアレイのサイズ(例えば、図2Gの(M/2×2N)のアレイの2N)が第1の次元におけるPEアレイのサイズ(例えば、図2Gの(M×N)のPEアレイのN)よりも大きいかどうかを決定されてもよい。
293の更なる詳細では、またいくつかの実施形態では、比較することの結果にしたがって、プロセッサは、第1のアレイをサブアレイに区画化してもよい。いくつかの実施形態では、サブアレイの各々は、PEアレイの次元よりも小さいかまたはそれに等しい次元を有してもよい。例えば、図2Gでは、第1のサブアレイおよび第2のサブアレイの各々は、PEアレイの次元(すなわち、M×N)よりも小さいかまたはそれに等しい(M/2×N)の次元を有する。いくつかの実施形態では、第1の次元における第1のアレイのサイズ(例えば、図2Gの(M/2×2N)のアレイ中の2N)が第1の次元におけるPEアレイのサイズ(例えば、図2Gの(M×N)のPEアレイ中のN)よりも大きいことを決定することに応答して、プロセッサは、第1のアレイをサブアレイのうちの第1のサブアレイと第2のサブアレイとに区画化してもよい(例えば、図2Gでは、(M/2×2N)のアレイは、2つの(M/2×N)のサブアレイに区画化される)。
294の更なる詳細では、またいくつかの実施形態では、プロセッサは、PEアレイ中のPEの第1のグループ(例えば、図2GのPEの(M/2×N)のブロック277)をサブアレイのうちの第1のサブアレイ(例えば、図2Gの(M/2×N)のアレイ)に割り当ててもよい。いくつかの実施形態では、プロセッサは、第1のサブアレイをPEアレイ中のPEの第1のグループに割り当て、第2のサブアレイ(例えば、図2Gの(M/2×N)のアレイ)をPEアレイ中のPEの第2のグループ(例えば、図2GのPEの(M/2×N)のブロック278)に割り当ててもよい。第1の次元とは異なる第2の次元におけるPEの第1のグループ(例えば、図2GのPEの(M/2×N)のブロック277)の位置は、第2の次元におけるPEの第2のグループ(例えば、図2GのPEの(M/2×N)のブロック278)の位置と異なってもよい。
いくつかの実施形態では、プロセッサは、PEの第1および第2のグループの両方によって使用されるべき入力データの共通の部分(例えば、図2Gの(M/2×K)の入力ストリーム273)を識別してもよい。プロセッサは、入力データの共通の部分(例えば、図2Gの(M/2×K)の入力ストリーム273)をPEの第1および第2のグループ(例えば、図2Gの(M/2×N)のブロック277および(M/2×N)のブロック278)に方向付け、ルーティングまたはシフトしてもよい。
いくつかの実施形態では、プロセッサは、PEの第1のグループ(例えば、図2Gの(M/2×N)のブロック277)によって使用されるべき入力データの第1の部分(例えば、図2Gの(K×N)のオペランドデータ274)と、PEの第2のグループ(例えば、図2Gの(M/2×N)のブロック278)によって使用されるべき入力データの第2の部分(例えば、図2Gの(K×N)のオペランドデータ275)とを識別してもよい。プロセッサは、入力データの第1の部分(例えば、図2Gの(K×N)のオペランドデータ274)をPEの第1のグループ(例えば、図2Gの(M/2×N)のブロック277)に方向付け、ルーティング、またはシフトしてもよい。プロセッサは、入力データの第2の部分(例えば、図2Gの(K×N)のオペランドデータ275)をPEの第2のグループ(例えば、図2Gの(M/2×N)のブロック278)に方向付け、ルーティング、またはシフトしてもよい。
295の更なる詳細では、サブアレイのうちの第1のサブアレイ(例えば、図2GのPEの(M/2×N)のブロック277)に割り当てられたPEの第1のグループの各PEは、入力データ(例えば、図2Gの(M/2×K)の入力ストリーム273および(K×N)のオペランドデータ274)の一部分を使用して複数の出力の対応する出力を生成してもよい。いくつかの実施形態では、入力データは、第1の複数の入力値(例えば、図2Aの入力行列211)と第2の複数の入力値(例えば、図2Aのカーネル行列212)とを含んでもよい。いくつかの実施形態では、第1の複数の入力値は、ニューラルネットワークの層に対する入力データストリーム(例えば、図2Aの入力行列211)と重み(例えば、図2Aのカーネル行列212)とのうちの一方を表してもよい。いくつかの実施形態では、第2の複数の入力値は、ニューラルネットワークの層に対する入力データのストリームと重みとのうちの他方を表してもよい。PEの第1のグループの各PEによって複数の出力の対応する出力を生成する際に、各PEは第1の複数の入力値の第1の値(例えば、図2Fの第1のベクトル)と第2の複数の入力値の第2の値(例えば、図2Fの第2のベクトル)とを受信してもよい。各PEは、第1の値および第2の値を前記各PEのそれぞれ第1のバッファメモリおよび第2のバッファメモリ(例えば、図2Fの第1のメモリ261および第2のメモリ262)に格納してもよい。各PEの乗累算器(MAC)回路類(例えば、図1CのMACユニット140)は、第1の値と第2の値との第1のドット積(例えば、図2Fのドット積263)を生成または計算してもよい。
いくつかの実施形態では、各PEの第1のバッファメモリ(例えば、図2Fの第1のメモリ261)は、第1の複数の入力値からの値の第1の数のセット(例えば、図2FのS個の第1のベクトル)を格納してもよい。MAC回路類は、(i)各PEの第1のバッファメモリに格納された値の第1の数のセットの各々と、(ii)各PEの第2のバッファメモリに格納された第2の値(例えば、図2Fの第2のメモリ262に格納された第2のベクトル)とのドット積を計算してもよい。計算されたドット積の第1の数(例えば、図2FのS個のドット積)はニューラルネットワークの層のための畳み込み演算の出力であってもよい。
いくつかの実施形態では、各PEの第2のバッファメモリ(例えば、図2Fの第2のメモリ262)は、複数の第2の入力値からの値の第2の数のセット(例えば、図2FのR個の第2のベクトル)を格納してもよい。MAC回路類は、(i)前記各PEの第1のバッファメモリに格納された第1の値(例えば、図2Fの第1のメモリ261に格納された第1のベクトル)と、(ii)各PEの第2のバッファメモリに格納された値の第2の数のセットの各々とのドット積を計算し、出力してもよい。計算されたドット積の第2の数(例えば、図2FのR個のドット積)は、ニューラルネットワークの層のための畳み込み演算の出力であってもよい。
いくつかの例示的な実現例について記載してきたが、上記は例示であって限定ではなく、例として提示されていることが明白である。特に、本明細書に提示する例の多くには、方法行為またはシステム要素の特定の組み合わせが関与するが、それらの行為および要素は、同じ目的を遂行するために他の形で組み合わせることができる。1つの実現例に関連して考察される行為、要素、および特徴は、他の1つまたは複数の実現例における類似の役割から除外されないものとする。
本明細書に開示する実施形態と関連して記載される、様々なプロセス、動作、例示の論理、論理ブロック、モジュール、および回路を実現するのに使用される、ハードウェアおよびデータ処理構成要素は、汎用シングルもしくはマルチチッププロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、または他のプログラマブル論理デバイス、離散的ゲートもしくはトランジスタ論理、離散的ハードウェア構成要素、または本明細書に記載の機能を実施するように設計された上記のものの任意の組み合わせを用いて、実現または実施されてもよい。汎用プロセッサは、マイクロプロセッサ、または任意の従来のプロセッサ、コントローラ、マイクロコントローラ、もしくは状態機械であってもよい。プロセッサはまた、DSPとマイクロプロセッサとの組み合わせ、複数のマイクロプロセッサ、DSPコアと連動した1つもしくは複数のマイクロプロセッサ、または他の任意のかかる構成など、コンピューティングデバイスの組み合わせとして実現されてもよい。いくつかの実施形態では、特定のプロセスおよび方法は、所与の機能に特異的な回路類によって実施されてもよい。メモリ(例えば、メモリ、メモリユニット、記憶デバイスなど)は、本開示に記載する様々なプロセス、層、およびモジュールを完成させるかもしくは容易にする、データおよび/またはコンピュータコードを格納する、1つまたは複数のデバイス(例えば、RAM、ROM、フラッシュメモリ、ハードディスク記憶装置など)を含んでもよい。メモリは、揮発性メモリもしくは不揮発性メモリであるかまたはそれらを含んでもよく、本開示に記載する様々なアクティビティおよび情報構造をサポートする、データベース構成要素、オブジェクトコード構成要素、スクリプト構成要素、または他の任意のタイプの情報構造を含んでもよい。例示的実施形態によれば、メモリは、処理回路を介してプロセッサに通信可能に接続され、本明細書に記載の1つもしくは複数のプロセスを(例えば、処理回路および/またはプロセッサによって)実行するためのコンピュータコードを含む。
本開示は、様々な動作を遂行するための任意の機械可読媒体上における、方法、システム、およびプログラム製品を想到する。本開示の実施形態は、既存のコンピュータプロセッサを使用して、またはこの目的もしくは別の目的のために組み込まれる、適切なシステムのための専用コンピュータプロセッサによって、または配線接続システムによって、実現されてもよい。本開示の範囲内の実施形態は、格納された機械実行可能命令もしくはデータ構造を保持するかまたは有する、機械可読媒体を備えるプログラム製品を含む。かかる機械可読媒体は、汎用もしくは専用コンピュータ、またはプロセッサを有する他の機械によってアクセスすることができる、任意の利用可能な媒体であることができる。例として、かかる機械可読媒体は、RAM、ROM、EPROM、EEPROM、または他の光学ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、あるいは機械実行可能命令またはデータ構造の形態で所望のプログラムコードを保持または格納するのに使用することができ、汎用もしくは専用コンピュータまたはプロセッサを有する他の機械でアクセスすることができる、他の任意の媒体を含むことができる。上記のものの組み合わせはまた、機械可読媒体の範囲に含まれる。機械実行可能命令は、例えば、汎用コンピュータ、専用コンピュータ、または専用処理機械に、特定の機能または機能群を実施させる、命令およびデータを含む。
本明細書で使用する用語および専門用語は、説明のためのものであって限定とみなされるべきではない。本明細書における、「~を含む」、「~を備える」、「~を有する」、「~を含有する」、「~を伴う」、「~によって特徴付けられる」、「~を特徴とする」およびそれらの変形の使用は、該用語とともに列挙される項目、それらの等価物、および追加の項目、ならびに排他的に該用語とともに列挙される項目から成る代替実現例を網羅することを意味する。一実現例では、本明細書に記載するシステムおよび方法は、記載する要素、行為、または構成要素のうちの1つ、2つ以上の各組み合わせ、または全てから成る。
単数形で言及される本明細書のシステムおよび方法の実現例または要素または行為に対する任意の言及は、複数のこれらの要素を含む実現例も包含することができ、本明細書の任意の実現例または要素または行為に対する複数形での任意の言及は、単一の要素のみを含む実現例も包含することができる。単数形または複数形での言及は、本明細書に開示されるシステムもしくは方法、それらの構成要素、行為、または要素を、単数または複数の構成に限定しようとするものではない。任意の情報、行為、または要素に基づいた任意の行為または要素に対する言及は、行為または要素が、任意の情報、行為、または要素に少なくとも部分的に基づく場合の実現例を含むことができる。
本明細書に開示する任意の実現例は、他の任意の実現例または実施形態と組み合わせることができ、「ある実現例」、「いくつかの実現例」、「一実現例」などに対する言及は、必ずしも相互に排他的ではなく、実現例と関連して記載する特定の特徴、構造、または特性が、少なくとも1つの実現例または実施形態に含まれ得ることを示すものとする。かかる用語は、本明細書で使用するとき、必ずしも全てが同じ実現例を指すものではない。任意の実現例は、本明細書に開示する態様および実現例と一致する任意の手法で、他の任意の実現例と包括的または排他的に組み合わせることができる。
図面、詳細な説明、または任意のクレームにおける技術的特徴に参照符号が付される場合、参照符号は、図面、詳細な説明、およびクレームの了解度を向上するために含まれるものである。したがって、参照符号が存在してもしなくても、任意のクレーム要素の範囲に対する限定的影響を何ら有さない。
本明細書に記載するシステムおよび方法は、それらの特性から逸脱することなく、他の特定の形態で具体化されてもよい。「約」、「およそ」、「実質的に」、または他の程度を表す用語に対する言及は、別段の明示がない限り、所与の測定値、単位、または範囲から±10%の変動を含む。結合された要素は、直接または介在要素を用いて、互いに電気的、機械的、または物理的に結合することができる。本明細書に記載するシステムおよび方法の範囲は、したがって、上述の記載ではなく添付のクレームによって示され、クレームの等価物の意味および範囲内にある変更は包含される。
「結合された」という用語およびその変形は、2つの部材を直接または間接的に互いに接合することを含む。かかる接合は、静的(例えば、恒久的もしくは固定)または可動(例えば、除去可能もしくは解放可能)であってもよい。かかる接合は、互いに直接結合され、または互いに対して結合された2つの部材によって、別個の介在部材および互いに結合された任意の追加の中間部材を使用して互いに結合された2つの部材によって、あるいは2つの部材の一方とともに単一の単位体として一体的に形成された介在部材を使用して互いに結合された2つの部材によって、達成されてもよい。「結合された」またはその変形が、追加の用語によって修正された場合(例えば、直接結合された)、上述の「結合された」の包括的定義は、追加の用語の平易な言葉の意味によって修正され(例えば、「直接結合された」は、任意の別個の介在部材を有さない2つの部材の接合を意味する)、それによって上述の「結合された」の包括的定義よりも狭い定義になる。かかる結合は機械的、電気的、または流体的であってもよい。
「または」に対する言及は包括的と解釈することができるので、「または」を使用して記載されるいずれの用語も、記載される用語の単一、2つ以上、および全てのいずれかを示すことができる。「『A』および『B』のうち少なくとも1つ」は、「A」のみ、「B」のみ、ならびに「A」および「B」の両方を含むことができる。「備える」または他のオープンな用語と併せて使用されるかかる言及は、追加の項目を含むことができる。
様々な要素のサイズ、寸法、構造、形状、および比率、パラメータの値、取付け構造、材料使用、色、向きにおける変形例など、記載される要素および行為の修正は、本明細書に開示する主題の教示および利点から実質的に逸脱することなく行うことができる。例えば、一体的に形成されるものとして示される要素は、複数の部分または要素で構築することができ、要素の位置を反転させるかまたは別の形で変動させることができ、離散的要素または位置の性質もしくは数を改変または変更することができる。他の置換、修正、変更、および省略も、本開示の範囲から逸脱することなく、開示の要素および動作の設計、動作条件、および配置に対して行うことができる。
本明細書における要素の位置に対する言及(例えば、「上側」、「下側」、「上方」、「下方」)は単に、図面における様々な要素の向きを説明するために使用されるものである。様々な要素の向きは、他の例示的実施形態によって異なってもよく、かかる変形は本開示に包含されるものとする。
Claims (15)
- ニューラルネットワークの層のための複数の出力を生成するための方法であって、
プロセッサによって、ニューラルネットワークの層のための複数の出力を生成するための入力データを受信することであって、前記複数の出力が第1のアレイ中に構成された、入力データを受信することと、
前記プロセッサによって、前記第1のアレイの次元を、複数の処理装置(PE)を含むPEアレイの次元と比較することと、
前記比較することの結果にしたがって、前記プロセッサによって、前記第1のアレイを、それぞれ前記PEアレイの前記次元よりも小さいかまたはそれに等しい次元を有するサブアレイに区画化することと、
前記プロセッサによって、前記PEアレイ中のPEの第1のグループを前記サブアレイのうちの第1のサブアレイに割り当てることと、
前記サブアレイのうちの前記第1のサブアレイに割り当てられたPEの前記第1のグループの各PEによって、前記入力データの一部分を使用して前記複数の出力の対応する出力を生成することと
を含む、方法。 - 前記PEアレイは、MおよびNの各々が1よりも大きい整数である、二次元M×Nアレイであり、
前記第1のアレイを前記区画化することが、前記第1のアレイをM×Nアレイ、M×N/2アレイ、M/2×Nアレイ、またはM/2×N/2アレイのうちの1つまたは複数に区画化することを含む、請求項1に記載の方法。 - 第1の次元における前記第1のアレイのサイズが前記第1の次元における前記PEアレイのサイズよりも大きいかどうかを決定することと、
前記第1の次元における前記第1のアレイの前記サイズが前記第1の次元における前記PEアレイの前記サイズよりも大きいことを決定したことに応答して、
前記第1のアレイを前記サブアレイのうちの前記第1のサブアレイと第2のサブアレイとに区画化することと、
前記第1のサブアレイを前記PEアレイ中のPEの前記第1のグループに割り当て、前記第2のサブアレイを前記PEアレイ中のPEの第2のグループに割り当てることであって、前記第1の次元とは異なる第2の次元におけるPEの前記第1のグループの位置が前記第2の次元におけるPEの前記第2のグループの位置とは異なる、割り当てることと
を更に含む、請求項1に記載の方法。 - PEの前記第1と第2のグループの両方によって使用されるべき前記入力データの共通の部分を識別することと、
前記入力データの前記共通の部分をPEの前記第1および第2のグループにシフトすることと
を更に含む、請求項3に記載の方法。 - PEの前記第1のグループによって使用されるべき前記入力データの第1の部分と、PEの前記第2のグループによって使用されるべき前記入力データの第2の部分とを識別することと、
前記入力データの前記第1の部分をPEの前記第1のグループにシフトすることと、
前記入力データの前記第2の部分をPEの前記第2のグループにシフトすることと
を更に含む、請求項3に記載の方法。 - 前記複数の出力が、前記ニューラルネットワークの前記層のための畳み込み演算の出力であり、
前記入力データが第1の複数の入力値と第2の複数の入力値とを含み、
PEの前記第1のグループの各PEによって、前記複数の出力の前記対応する出力を生成することが、
前記各PEによって、前記第1の複数の入力値の第1の値と、前記第2の複数の入力値の第2の値とを受信することと、
前記各PEによって、前記第1の値および前記第2の値をそれぞれ前記各PEの第1のバッファメモリおよび第2のバッファメモリに格納することと、
前記各PEの乗累算器(MAC)回路類によって、前記第1の値と前記第2の値との第1のドット積を生成することであって、
前記第1の複数の入力値が、前記ニューラルネットワークの前記層に対する入力データストリームと重みとのうちの一方を表し、
前記第2の複数の入力値が、前記ニューラルネットワークの前記層に対する入力データストリームと重みとのうちの他方を表す、第1のドット積を生成することと
を含む、請求項1に記載の方法。 - 第1の複数の入力値からの値の第1の数のセットが前記各PEの前記第1のバッファメモリに格納され、
(i)前記各PEの前記第1のバッファメモリに格納された値の前記第1の数のセットの各々と、(ii)前記各PEの前記第2のバッファメモリに格納された前記第2の値とのドット積が、前記MAC回路類によって計算され、
前記第1の数の計算されたドット積が前記ニューラルネットワークの前記層のための畳み込み演算の出力である、請求項6に記載の方法。 - 前記第2の複数の入力値からの値の第2の数のセットが前記各PEの前記第2のバッファメモリに格納され、
(i)前記各PEの前記第1のバッファメモリに格納された前記第1の値と、(ii)前記各PEの前記第2のバッファメモリに格納された値の前記第2の数のセットの各々とのドット積が、前記MAC回路類によって計算され、
前記第2の数の計算されたドット積が前記ニューラルネットワークの前記層のための畳み込み演算の出力である、請求項6に記載の方法。 - ニューラルネットワークの層のための複数の出力を生成するためのデバイスであって、
プロセッサと、
複数の処理装置(PE)を含むPEアレイと
を含み、前記プロセッサは、
複数の出力が第1のアレイ中に構成された、ニューラルネットワークの層のための前記複数の出力を生成するための入力データを受信し、
前記第1のアレイの次元を前記PEアレイの次元と比較し、
前記比較することの結果にしたがって、前記第1のアレイを、それぞれ前記PEアレイの前記次元よりも小さいかまたはそれに等しい次元を有するサブアレイに区画化し、
前記PEアレイ中のPEの第1のグループを前記サブアレイのうちの第1のサブアレイに割り当てるように構成され、
前記サブアレイのうちの前記第1のサブアレイに割り当てられたPEの前記第1のグループの各PEが、前記入力データの一部分を使用して前記複数の出力の対応する出力を生成するように構成された、デバイス。 - 前記PEアレイは、MおよびNの各々が1よりも大きい整数である、二次元M×Nアレイであり、
前記プロセッサが、前記第1のアレイをM×Nアレイ、M×N/2アレイ、M/2×Nアレイ、またはM/2×N/2アレイのうちの1つまたは複数に区画化するように構成された、請求項9に記載のデバイス。 - 前記プロセッサは、第1の次元における前記第1のアレイのサイズが前記第1の次元における前記PEアレイのサイズよりも大きいかどうかを決定するように構成され、
前記第1の次元における前記第1のアレイの前記サイズが前記第1の次元における前記PEアレイの前記サイズよりも大きいことを決定したことに応答して、前記プロセッサが、
前記第1のアレイを前記サブアレイのうちの前記第1のサブアレイと第2のサブアレイとに区画化し、
前記第1のサブアレイを前記PEアレイ中のPEの前記第1のグループに割り当て、前記第2のサブアレイをPEの前記第1のグループとは異なる前記PEアレイ中のPEの第2のグループに割り当てるように構成された、請求項9に記載のデバイス。 - 前記プロセッサが更に、
PEの前記第1と第2のグループの両方によって使用されるべき前記入力データの共通の部分を識別し、
前記入力データの前記共通の部分をPEの前記第1および第2のグループにシフトするように構成された、請求項11に記載のデバイス。 - 前記プロセッサが更に、
PEの前記第1のグループによって使用されるべき前記入力データの第1の部分と、PEの前記第2のグループによって使用されるべき前記入力データの第2の部分とを識別し、
前記入力データの前記第1の部分をPEの前記第1のグループにシフトし、
前記入力データの前記第2の部分をPEの前記第2のグループにシフトするように構成された、請求項11に記載のデバイス。 - 前記複数の出力がニューラルネットワークの前記層のための畳み込み演算の出力であり、
前記入力データが第1の複数の入力値と第2の複数の入力値とを含み、
PEの前記第1のグループの各PEが、第1のバッファメモリと、第2のバッファメモリと、乗累算器(MAC)回路類とを含み、
前記複数の出力の前記対応する出力を生成することにおいて、PEの前記第1のグループの各PEが、
前記第1の複数の入力値の第1の値と、前記第2の複数の入力値の第2の値とを受信し、
前記第1の値および前記第2の値をそれぞれ前記第1のバッファメモリおよび前記第2のバッファメモリに格納し、
前記MAC回路類を介して、前記第1の値と前記第2の値との第1のドット積を生成するように構成され、
前記第1の複数の入力値が、前記ニューラルネットワークの前記層に対する入力データストリームと重みとのうちの一方を表し、
前記第2の複数の入力値が、前記ニューラルネットワークの前記層に対する入力データストリームと重みとのうちの他方を表す、請求項9に記載のデバイス。 - 前記各PEが、
前記第1の複数の入力値からの値の第1の数のセットを前記第1のバッファメモリに格納し、
前記MAC回路類を介して、(i)前記第1のバッファメモリに格納された値の前記第1の数のセットの各々と、(ii)前記第2のバッファメモリに格納された前記第2の値とのドット積を計算し、
前記第1の数の計算されたドット積を前記ニューラルネットワークの前記層のための畳み込み演算の出力として出力するように構成された、請求項14に記載のデバイス。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/511,544 US11675998B2 (en) | 2019-07-15 | 2019-07-15 | System and method for performing small channel count convolutions in energy-efficient input operand stationary accelerator |
US16/511,544 | 2019-07-15 | ||
PCT/US2020/041449 WO2021011314A1 (en) | 2019-07-15 | 2020-07-09 | System and method for performing small channel count convolutions in energy-efficient input stationary accelerator |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2022540548A true JP2022540548A (ja) | 2022-09-16 |
Family
ID=71842867
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021572859A Pending JP2022540548A (ja) | 2019-07-15 | 2020-07-09 | エネルギー効率的な入力オペランド固定アクセラレータにおいて小チャネルカウント畳み込みを実施するためのシステムおよび方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US11675998B2 (ja) |
EP (1) | EP4000012A1 (ja) |
JP (1) | JP2022540548A (ja) |
KR (1) | KR20220031115A (ja) |
CN (1) | CN114402338A (ja) |
WO (1) | WO2021011314A1 (ja) |
Families Citing this family (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11934342B2 (en) | 2019-03-15 | 2024-03-19 | Intel Corporation | Assistance for hardware prefetch in cache access |
WO2020190814A1 (en) | 2019-03-15 | 2020-09-24 | Intel Corporation | Graphics processors and graphics processing units having dot product accumulate instruction for hybrid floating point format |
CN112534405A (zh) | 2019-03-15 | 2021-03-19 | 英特尔公司 | 用于脉动阵列上的块稀疏操作的架构 |
US11656849B2 (en) * | 2019-08-14 | 2023-05-23 | Vorticity Inc. | Dedicated hardware system for solving partial differential equations |
US11403070B2 (en) | 2019-08-19 | 2022-08-02 | Vorticity Inc. | Systolic array design for solving partial differential equations |
US11556801B2 (en) * | 2019-08-19 | 2023-01-17 | Via Technologies, Inc. | Neural network image identification system, neural network building system and method |
US11921813B2 (en) | 2019-08-20 | 2024-03-05 | Vorticity Inc. | Methods for utilizing solver hardware for solving partial differential equations |
CN110727633A (zh) * | 2019-09-17 | 2020-01-24 | 广东高云半导体科技股份有限公司 | 基于SoC FPGA的边缘人工智能计算系统构架 |
US11842169B1 (en) | 2019-09-25 | 2023-12-12 | Amazon Technologies, Inc. | Systolic multiply delayed accumulate processor architecture |
US11861761B2 (en) * | 2019-11-15 | 2024-01-02 | Intel Corporation | Graphics processing unit processing and caching improvements |
US11467806B2 (en) | 2019-11-27 | 2022-10-11 | Amazon Technologies, Inc. | Systolic array including fused multiply accumulate with efficient prenormalization and extended dynamic range |
US11610102B1 (en) * | 2019-11-27 | 2023-03-21 | Amazon Technologies, Inc. | Time-based memory allocation for neural network inference |
US11816446B2 (en) | 2019-11-27 | 2023-11-14 | Amazon Technologies, Inc. | Systolic array component combining multiple integer and floating-point data types |
TWI733334B (zh) * | 2020-02-15 | 2021-07-11 | 財團法人工業技術研究院 | 卷積神經網路運算裝置及其運算的方法 |
US11461651B2 (en) * | 2020-04-09 | 2022-10-04 | Micron Technology, Inc. | System on a chip with deep learning accelerator and random access memory |
US11887647B2 (en) | 2020-04-09 | 2024-01-30 | Micron Technology, Inc. | Deep learning accelerator and random access memory with separate memory access connections |
US11726784B2 (en) | 2020-04-09 | 2023-08-15 | Micron Technology, Inc. | Patient monitoring using edge servers having deep learning accelerator and random access memory |
US11874897B2 (en) | 2020-04-09 | 2024-01-16 | Micron Technology, Inc. | Integrated circuit device with deep learning accelerator and random access memory |
US11355175B2 (en) | 2020-04-09 | 2022-06-07 | Micron Technology, Inc. | Deep learning accelerator and random access memory with a camera interface |
US11687764B2 (en) * | 2020-04-17 | 2023-06-27 | Samsung Electronics Co., Ltd. | System and method for increasing utilization of dot-product based neural network accelerator |
US11308027B1 (en) | 2020-06-29 | 2022-04-19 | Amazon Technologies, Inc. | Multiple accumulate busses in a systolic array |
US11422773B1 (en) * | 2020-06-29 | 2022-08-23 | Amazon Technologies, Inc. | Multiple busses within a systolic array processing element |
US11880682B2 (en) | 2021-06-30 | 2024-01-23 | Amazon Technologies, Inc. | Systolic array with efficient input reduction and extended array performance |
CN113704689B (zh) * | 2021-08-25 | 2022-11-11 | 北京大学 | 一种基于昇腾ai处理器的矩阵乘算子的处理方法及装置 |
KR20240061706A (ko) * | 2022-11-01 | 2024-05-08 | 오픈엣지테크놀로지 주식회사 | 신경망 및 액티베이션의 파티션 및 시뮬레이션 방법 및 이를 위한 컴퓨팅 장치 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10817587B2 (en) * | 2017-02-28 | 2020-10-27 | Texas Instruments Incorporated | Reconfigurable matrix multiplier system and method |
US11157441B2 (en) | 2017-07-24 | 2021-10-26 | Tesla, Inc. | Computational array microprocessor system using non-consecutive data formatting |
US11188820B2 (en) | 2017-09-08 | 2021-11-30 | International Business Machines Corporation | Deep neural network performance analysis on shared memory accelerator systems |
US11204976B2 (en) * | 2018-11-19 | 2021-12-21 | Groq, Inc. | Expanded kernel generation |
-
2019
- 2019-07-15 US US16/511,544 patent/US11675998B2/en active Active
-
2020
- 2020-07-09 JP JP2021572859A patent/JP2022540548A/ja active Pending
- 2020-07-09 CN CN202080051434.8A patent/CN114402338A/zh active Pending
- 2020-07-09 KR KR1020227004858A patent/KR20220031115A/ko unknown
- 2020-07-09 WO PCT/US2020/041449 patent/WO2021011314A1/en unknown
- 2020-07-09 EP EP20747289.5A patent/EP4000012A1/en not_active Withdrawn
Also Published As
Publication number | Publication date |
---|---|
US11675998B2 (en) | 2023-06-13 |
CN114402338A (zh) | 2022-04-26 |
WO2021011314A1 (en) | 2021-01-21 |
WO2021011314A8 (en) | 2021-12-23 |
EP4000012A1 (en) | 2022-05-25 |
US20210019591A1 (en) | 2021-01-21 |
KR20220031115A (ko) | 2022-03-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2022540548A (ja) | エネルギー効率的な入力オペランド固定アクセラレータにおいて小チャネルカウント畳み込みを実施するためのシステムおよび方法 | |
US11615319B2 (en) | System and method for shift-based information mixing across channels for shufflenet-like neural networks | |
JP2022540550A (ja) | ニューラルネットワークアクセラレータにおいてスパースデータを読み取るおよび書き込むためのシステムおよび方法 | |
JP2022539660A (ja) | 畳み込みからの早期抜け出しのためのシステム、方法、およびデバイス | |
US11385864B2 (en) | Counter based multiply-and-accumulate circuit for neural network | |
JP2022541721A (ja) | 効率的な乗算のための代替数字形式をサポートするシステムおよび方法 | |
JP2022539662A (ja) | 分散処理を加速させるパイプライン並列化のためのシステムおよび方法 | |
US11681777B2 (en) | Optimization for deconvolution | |
US20220237262A1 (en) | Power efficient multiply-accumulate circuitry | |
US11429394B2 (en) | Efficient multiply-accumulation based on sparse matrix | |
JP2022539495A (ja) | 負および正の値に対する非対称スケーリングファクタをサポートするシステムおよび方法 | |
US11899745B1 (en) | Systems and methods for speech or text processing using matrix operations |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20230418 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20240325 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20240416 |