(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-08-23
(54)【発明の名称】デジタルコンピュートインメモリのための折り畳み列加算器アーキテクチャ
(51)【国際特許分類】
G06N 3/063 20230101AFI20240816BHJP
G06G 7/60 20060101ALI20240816BHJP
G06F 7/50 20060101ALI20240816BHJP
【FI】
G06N3/063
G06G7/60
G06F7/50
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024505074
(86)(22)【出願日】2022-07-18
(85)【翻訳文提出日】2024-01-26
(86)【国際出願番号】 US2022073856
(87)【国際公開番号】W WO2023015105
(87)【国際公開日】2023-02-09
(32)【優先日】2021-08-02
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】595020643
【氏名又は名称】クゥアルコム・インコーポレイテッド
【氏名又は名称原語表記】QUALCOMM INCORPORATED
(74)【代理人】
【識別番号】110003708
【氏名又は名称】弁理士法人鈴榮特許綜合事務所
(72)【発明者】
【氏名】バダログル、ムスタファ
(72)【発明者】
【氏名】ワン、ジョンゾー
(57)【要約】
いくつかの態様は、機械学習タスクを実施するための、特に、コンピューテーションインメモリアーキテクチャに対する、装置を提供する。一態様は、インメモリ計算のための回路を提供する。本回路は、概して、メモリの複数の列の各々上の複数のメモリセルと、複数のメモリセルが、ニューラルネットワークの重みを表す複数のビットを記憶するように構成され、ここにおいて、複数の列の各々上の複数のメモリセルが、メモリの異なるワード線上にある、各々が複数の列のうちのそれぞれの1つに結合された、複数の加算回路と、複数の加算回路のうちの少なくとも2つの出力に結合された第1の加算器回路と、第1の加算器回路の出力に結合された累算器とを含む。
【選択図】
図5A
【特許請求の範囲】
【請求項1】
メモリの複数の列の各々上の複数のメモリセルと、前記複数のメモリセルが、ニューラルネットワークの重みを表す複数のビットを記憶するように構成され、ここにおいて、前記複数の列の各々上の前記複数のメモリセルは、前記メモリの異なるワード線上にある、
各々が前記複数の列のうちのそれぞれの1つに結合された、複数の加算回路と、
前記複数の加算回路のうちの少なくとも2つの出力に結合された第1の加算器回路と、
前記第1の加算器回路の出力に結合された累算器と、
を備える、インメモリ計算のための回路。
【請求項2】
前記第1の加算器回路の1つまたは複数の部分は、選択的に無効にされるように構成された、請求項1に記載の回路。
【請求項3】
前記複数の加算回路の各々は、前記複数の列のうちの前記それぞれの1つ上の前記複数のメモリセルに結合された加算器ツリーを備える、請求項1に記載の回路。
【請求項4】
前記複数の加算回路の各々は、別の累算器を備える、請求項1に記載の回路。
【請求項5】
前記第1の加算器回路の第1の部分は、第1の計算サイクル中に選択的に無効にされるように構成され、前記第1の加算器回路の第2の部分は、第2の計算サイクル中に選択的に無効にされるように構成された、請求項1に記載の回路。
【請求項6】
前記複数の加算回路の各々と前記複数の列のうちの前記それぞれの1つとの間に結合された第2の加算器回路をさらに備える、請求項1に記載の回路。
【請求項7】
前記第2の加算器回路は、前記ワード線のうちの2つまたはそれ以上に結合された加算器ツリーを備える、請求項6に記載の回路。
【請求項8】
前記加算器ツリーは、前記複数の列のうちの前記それぞれの1つと前記ワード線のうちの前記2つまたはそれ以上との上にある前記メモリセルの出力信号を加算するように構成された、請求項7に記載の回路。
【請求項9】
前記第2の加算器回路と前記複数の列のうちの前記それぞれの1つとの間の結合されたセンス増幅器をさらに備える、請求項6に記載の回路。
【請求項10】
前記第1の加算器回路は、前記複数の加算回路のうちの前記少なくとも2つの出力信号を加算するように構成された加算器ツリーを備える、請求項1に記載の回路。
【請求項11】
前記加算器ツリーの1つまたは複数の加算器は、ビットシフトおよび加算回路を備える、請求項10に記載の回路。
【請求項12】
第1のクロック信号を出力するように構成された第1の出力を有し、第2のクロック信号を出力するように構成された第2の出力を有する、クロック生成器回路をさらに備え、ここにおいて、
前記複数の加算回路は、前記クロック生成器の前記第1の出力に結合され、前記第1のクロック信号に基づいて動作するように構成され、
前記第1の加算器回路は、前記クロック生成器の前記第2の出力に結合され、前記第2のクロック信号に基づいて動作するように構成され、前記第2のクロック信号は、前記第1のクロック信号とは異なる周波数を有する、
請求項1に記載の回路。
【請求項13】
前記クロック生成器回路は、前記第1のクロック信号に基づいて前記第2のクロック信号を生成するように構成された周波数逓倍器を備える、請求項12に記載の回路。
【請求項14】
複数のハーフラッチ回路をさらに備え、各ハーフラッチ回路は、前記第1の加算器回路と前記複数の加算回路のうちの1つとの間に結合される、請求項1に記載の回路。
【請求項15】
前記複数のメモリセルは、異なるアクティブ化入力に基づいて連続的にアクティブ化されるように構成され、
前記累算器は、前記複数のメモリセルが連続的にアクティブ化された後に、前記第1の加算器回路の出力信号を累算するように構成された、
請求項1に記載の回路。
【請求項16】
前記累算器は、前記第1の加算器回路の前記出力に結合された唯一の累算器である、請求項1に記載の回路。
【請求項17】
前記複数の列は、前記複数の列の第1のサブセットと前記複数の列の第2のサブセットとを備え、
前記第1のサブセットは、第1の計算サイクル中にアクティブ化される、
請求項1に記載の回路。
【請求項18】
前記第2のサブセットは、第2の計算サイクル中にアクティブ化され、前記第2の計算サイクルは、前記第1の計算サイクルの後にある、請求項17に記載の回路。
【請求項19】
前記ワード線の各々上の前記メモリセルのうちの少なくともいくつかは、前記ニューラルネットワークの前記重みのうちの1つを記憶するように構成され、
前記複数の列の前記第1のサブセットの量は、前記重みのうちの前記1つのビットの量に関連する、
請求項17に記載の回路。
【請求項20】
前記複数の加算回路に結合された出力を有し、前記複数の列の前記第2のサブセットからの信号を処理することに関連するクロック信号を非アクティブ化するように構成された、クロックゲーティング回路をさらに備える、請求項17に記載の回路。
【請求項21】
複数の加算回路の各々を介して、メモリの複数の列のうちのそれぞれの1つ上の出力信号を加算することと、ここにおいて、複数のメモリセルは、前記複数の列の各々上にあり、前記複数のメモリセルは、ニューラルネットワークの重みを表す複数のビットを記憶し、前記複数の列の各々上の前記複数のメモリセルは、前記メモリの異なるワード線上にある、
第1の加算器回路を介して、前記複数の加算回路のうちの少なくとも2つの出力信号を加算することと、
累算器を介して、前記第1の加算器回路の出力信号を累算することと、
を備える、インメモリ計算のための方法。
【請求項22】
前記重みの各々に関連するビット数に基づいて前記第1の加算器回路の1つまたは複数の部分を選択的に無効にすることをさらに備える、請求項21に記載の方法。
【請求項23】
前記複数の列のうちの前記それぞれの1つ上の前記出力信号を加算することは、前記ワード線のうちの2つまたはそれ以上が連続的にアクティブ化された後に、前記複数の列のうちの前記それぞれの1つ上の前記メモリセルの出力信号を累算することを備える、請求項21に記載の方法。
【請求項24】
前記複数の加算回路の各々と前記複数の列のうちの前記それぞれの1つとの間に結合された第2の加算器回路を介して、前記複数の列のうちの前記それぞれの1つと前記ワード線のうちの前記2つまたはそれ以上との上にある前記メモリセルの出力信号を加算することをさらに備える、請求項23に記載の方法。
【請求項25】
前記第2の加算器回路と前記複数の列のうちの前記それぞれの1つとの間に結合されたセンス増幅器を介して、前記複数の列のうちの前記それぞれの1つと前記ワード線のうちの前記2つまたはそれ以上との上にある前記メモリセルの前記出力信号を検知することをさらに備え、ここにおいて、前記第2の加算器回路を介して前記加算することは、前記検知された出力信号に基づく、請求項24に記載の方法。
【請求項26】
前記複数の加算回路のうちの前記少なくとも2つの前記出力信号を前記加算することは、前記複数の加算回路のうちの前記少なくとも2つ上でビットシフトおよび加算演算を実施することを備える、請求項21に記載の方法。
【請求項27】
第1のクロック信号を生成することと、ここにおいて、前記複数の加算回路は、前記第1のクロック信号に基づいて動作する、
第2のクロック信号を生成することと、ここにおいて、前記第1の加算器回路は、前記第2のクロック信号に基づいて動作し、前記第2のクロック信号は、前記第1のクロック信号とは異なる周波数を有する、
をさらに備える、請求項21に記載の方法。
【請求項28】
異なるアクティブ化入力に基づいて前記複数のメモリセルを連続的にアクティブ化することをさらに備え、ここにおいて、前記第1の加算器回路の前記出力信号を前記累算することは、前記複数のメモリセルが連続的にアクティブ化された後に行われる、請求項21に記載の方法。
【請求項29】
前記複数のメモリセルを連続的にアクティブ化することは、
第1のアクティブ化サイクル中に前記アクティブ化入力の第1のセットを受信することと、
第2のアクティブ化サイクル中に前記アクティブ化入力の第2のセットを受信することと、
を備え、
前記第1の加算器回路の前記出力信号を前記累算することは、前記第1のアクティブ化サイクルおよび前記第2のアクティブ化サイクルの後に行われる、
請求項28に記載の方法。
【請求項30】
メモリの複数の列のうちのそれぞれの1つ上の出力信号を加算するための第1の手段と、ここにおいて、複数のメモリセルは、前記複数の列の各々上にあり、前記複数のメモリセルは、ニューラルネットワークの重みを表す複数のビットを記憶し、前記複数の列の各々上の前記複数のメモリセルは、前記メモリの異なるワード線上にある、
加算するための前記第1の手段のうちの少なくとも2つの出力信号を加算するための第2の手段と、
加算するための前記第2の手段の出力信号を累算するための手段と、
を備える、インメモリ計算のための装置。
【発明の詳細な説明】
【優先権の主張】
【0001】
関連出願の相互参照
[0001]本出願は、本出願の譲受人に譲渡され、その全体が参照により本明細書に組み込まれる、2021年8月2日に出願された米国出願第17/391,718号の優先権を主張する。
【技術分野】
【0002】
序論
[0002]本開示の態様は、機械学習タスクを実施することに関し、詳細には、コンピューテーションインメモリ(computation-in-memory)アーキテクチャに関する。
【背景技術】
【0003】
[0003]機械学習は、概して、アプリオリに知られるトレーニングデータのセットへの一般化された適合を表す、トレーニングされたモデルを作り出すプロセス(たとえば、人工ニューラルネットワーク、ツリー、または他の構造)である。トレーニングされたモデルを新しいデータに適用することは、推論を作り出し、これは、新しいデータへのインサイトを得るために使用され得る。いくつかの場合には、モデルを新しいデータに適用することは、新しいデータに対して「推論を実行すること」として説明される。
【0004】
[0004]様々な機械学習(または人工知能)タスクを可能にするために機械学習の使用が急増するにつれて、機械学習モデルデータのより効率的な処理の必要が生じてきた。いくつかの場合には、機械学習アクセラレータなどの専用ハードウェアが、機械学習モデルデータを処理する処理システムのキャパシティを向上させるために使用され得る。しかしながら、そのようなハードウェアはスペースと電力とを必要とし、これは、常に処理デバイス上で利用可能であるとは限らない。たとえば、モバイルデバイス、常時オンデバイス、モノのインターネット(IoT)デバイスなど、「エッジ処理」デバイスは、一般に、処理能力と電力およびパッケージング制約とのバランスをとらなければならない。さらに、アクセラレータは、共通データバスにわたってデータを移動し得、これは、著しい電力使用を引き起こし、データバスを共有する他のプロセスにレイテンシをもたらすことがある。したがって、処理システムの他の態様が、機械学習モデルデータを処理するために考慮されている。
【0005】
[0005]メモリデバイスは、いわゆるコンピューテーションインメモリ(CIM)プロセスを通して機械学習モデルデータの処理を実施するために活用され得る処理システムの別の態様の一例である。従来のCIMプロセスはアナログ信号を使用して計算を実施し、これは、計算結果の不正確さを生じ、ニューラルネットワーク計算に悪影響を及ぼし得る。したがって、増加された正確さでコンピューテーションインメモリを実施するためのシステムおよび方法が必要とされる。
【発明の概要】
【0006】
[0006]いくつかの態様は、機械学習タスクを実施するための、特に、コンピューテーションインメモリアーキテクチャに対する、装置および技法を提供する。
【0007】
[0007]一態様は、インメモリ計算(in-memory computation)のための回路を提供する。本回路は、概して、メモリの複数の列の各々上の複数のメモリセルと、複数のメモリセルが、ニューラルネットワークの重みを表す複数のビットを記憶するように構成され、ここにおいて、複数の列の各々上の複数のメモリセルが、メモリの異なるワード線上にある;各々が複数の列のうちのそれぞれの1つに結合された、複数の加算回路と;複数の加算回路のうちの少なくとも2つの出力に結合された第1の加算器回路と;第1の加算器回路の出力に結合された累算器とを含む。
【0008】
[0008]一態様は、インメモリ計算のための方法を提供する。本方法は、概して、複数の加算回路の各々を介して、メモリの複数の列のうちのそれぞれの1つ上の出力信号を加算することと、ここにおいて、複数のメモリセルが、複数の列の各々上にあり、複数のメモリセルが、ニューラルネットワークの重みを表す複数のビットを記憶し、ここにおいて、複数の列の各々上の複数のメモリセルが、メモリの異なるワード線上にある;第1の加算器回路を介して、複数の加算回路のうちの少なくとも2つの出力信号を加算することと;累算器を介して、第1の加算器回路の出力信号を累算することとを含む。
【0009】
[0009]一態様は、インメモリ計算のための装置を提供する。本装置は、概して、メモリの複数の列のうちのそれぞれの1つ上の出力信号を加算するための第1の手段と、ここにおいて、複数のメモリセルが、複数の列の各々上にあり、複数のメモリセルが、ニューラルネットワークの重みを表す複数のビットを記憶し、ここにおいて、複数の列の各々上の複数のメモリセルが、メモリの異なるワード線上にある;加算するための第1の手段のうちの少なくとも2つの出力信号を加算するための第2の手段と;加算するための第2の手段の出力信号を累算するための手段とを含む。
【0010】
[0010]他の態様は、上述の方法ならびに本明細書で説明される方法を実施するように構成された処理システムと、処理システムの1つまたは複数のプロセッサによって実行されたとき、処理システムに上述の方法ならびに本明細書で説明される方法を実施させる命令を備える、非一時的コンピュータ可読媒体と、上述の方法ならびに本明細書でさらに説明される方法を実施するためのコードを備えるコンピュータ可読記憶媒体上で実施されたコンピュータプログラム製品と、上述の方法ならびに本明細書でさらに説明される方法を実施するための手段を備える処理システムとを提供する。
【0011】
[0011]以下の説明および関連する図面は、1つまたは複数の態様のいくつかの例示的な特徴を詳細に記載する。
【0012】
[0001]本開示の上記で具陳された特徴が詳細に理解され得るように、添付の図面にその一部が示される態様を参照することによって、上記で手短に要約されたより具体的な説明が得られ得る。ただし、その説明は他の等しく有効な態様に通じ得るので、添付の図面は、本開示のいくつかの典型的な態様のみを示し、したがって、本開示の範囲を限定するものと見なされるべきではないことに留意されたい。
【図面の簡単な説明】
【0013】
【
図1A】[0012]本開示の態様によって実装され得る、様々なタイプのニューラルネットワークの例を示す図。
【
図1B】本開示の態様によって実装され得る、様々なタイプのニューラルネットワークの例を示す図。
【
図1C】本開示の態様によって実装され得る、様々なタイプのニューラルネットワークの例を示す図。
【
図1D】本開示の態様によって実装され得る、様々なタイプのニューラルネットワークの例を示す図。
【
図2】[0013]本開示の態様によって実装され得る、旧来の畳み込み演算の一例を示す図。
【
図3A】[0014]本開示の態様によって実装され得る、深さ単位分離可能畳み込み(depthwise separable convolution)演算の例を示す図。
【
図3B】本開示の態様によって実装され得る、深さ単位分離可能畳み込み演算の例を示す図。
【
図4】[0015]コンピュートインメモリ(CIM:compute-in-memory)回路のための8トランジスタ(8T)スタティックランダムアクセスメモリ(SRAM)セルとして実装された例示的なメモリセルを示す図。
【
図5A】[0016]本開示のいくつかの態様による、CIMのための回路を示す図。
【
図5B】[0017]加算器回路の例示的な一実装形態を示す図。
【
図5C】[0018]累算器の例示的な一実装形態を示す図。
【
図6】[0019]本開示のいくつかの態様による、ビット列加算器ツリーを使用して実装されたCIMのための回路を示す図。
【
図7】[0020]本開示のいくつかの態様による、
図6の回路に関連する信号を示すタイミング図。
【
図8A】[0021]本開示のいくつかの態様による、重みの構成可能なビットサイズをもつCIM回路を示すブロック図。
【
図8B】本開示のいくつかの態様による、重みの構成可能なビットサイズをもつCIM回路を示すブロック図。
【
図8C】本開示のいくつかの態様による、重みの構成可能なビットサイズをもつCIM回路を示すブロック図。
【
図9】[0022]本開示のいくつかの態様による、インメモリ計算のための例示的な動作を示す流れ図。
【
図10】[0023]本開示のいくつかの態様による、ニューラルネットワークにおける信号処理のための動作を実施するように構成された例示的な電子デバイスを示す図。
【発明を実施するための形態】
【0014】
[0024]理解を容易にするために、可能な場合、図面に共通である同一の要素を指定するために同一の参照番号が使用されている。一態様の要素および特徴が、さらなる具陳なしに他の態様に有益に組み込まれ得ることが企図される。
【0015】
[0025]本開示の態様は、機械学習モデルを実装することなど、データ集約的処理を扱うために、コンピューテーションインメモリ(CIM)を実施するための装置、方法、処理システム、およびコンピュータ可読媒体を提供する。いくつかの態様は、加算回路を使用してデジタルCIMを実施するための技法を提供し、各加算回路が、複数の計算サイクルの後に、メモリの複数の列のうちのそれぞれの1つ上の出力信号を加算(たとえば、累算)する。本明細書で使用される「加算回路」は、概して、列上のメモリセルの出力信号を加算する(または連続計算サイクルにわたって累算する)任意の回路を指す。いくつかの場合には、加算回路は累算器であり得る。累算器は、概して、複数のサイクルにわたって出力信号を累算するために使用される回路を指す。他の場合には、加算回路は加算器ツリーであり得る。「加算器回路」または「加算器ツリー」は、概して、複数のメモリセル(たとえば、ワード線または列にわたるメモリセル)の出力信号を加算するために使用されるデジタル加算器を指す。加算器回路の例示的な一実装形態が、
図5Bに関して本明細書で説明され、累算器の例示的な一実装形態が、
図5Cに関して本明細書で説明される。加算回路は、複数の加算器回路を有する加算器ツリー、または累算器として実装され得る。いくつかの態様では、CIM回路のワード線が連続的にアクティブ化され、ワード線のうちの2つまたはそれ以上が連続的にアクティブ化された後に、累算結果を提供するために、累算器が同時に累算を実施する。
【0016】
[0026]いくつかの態様は、計算のために使用される重みのビットサイズの構成可能性を可能にする、折り畳み(folding)アーキテクチャを提供する。たとえば、CIMアーキテクチャの(「ウイング(wing)」とも呼ばれる)1つまたは複数の処理経路が、使用されている重みのビットサイズを調整するために、無効にされ得る。たとえば、(たとえば、列、および関連する処理回路を含む)8つの処理経路が、8ビット重みを実装するために使用され得るか、または、4つの処理経路が、4ビット重みを実装するために使用され得る(他の4つの処理経路は一時的に無効にされる)。
【0017】
[0027]CIMベース機械学習(ML)/人工知能(AI)が、画像およびオーディオ処理と、(たとえば、スループットと信号品質とを最適化するか、または少なくとも増加させるために)ワイヤレス通信判定を行うこととを含む、多種多様なタスクのために使用され得る。さらに、CIMは、ダイナミックランダムアクセスメモリ(DRAM)、(たとえば、
図4に記載のSRAMセルに基づく)スタティックランダムアクセスメモリ(SRAM)、磁気抵抗ランダムアクセスメモリ(MRAM)、抵抗性ランダムアクセスメモリ(ReRAMまたはRRAM(登録商標))など、様々なタイプのメモリアーキテクチャに基づき得、中央処理ユニット(CPU)、デジタル信号プロセッサ(DSP)、グラフィックス処理ユニット(GPU)、フィールドプログラマブルゲートアレイ(FPGA)、AIアクセラレータなどを含む、様々なタイプの処理ユニットに取り付けられ得る。概して、CIMは、有益には、「メモリウォール」問題を低減し得、これは、メモリ中へのおよびメモリの中からのデータの移動が、データの計算よりも多くの電力を消費する場合である。したがって、コンピューテーションインメモリを実施することによって、著しい電力節約が実現され得る。これは、低電力エッジ処理デバイス、モバイルデバイスなど、様々なタイプの電子デバイスのために特に有用である。
【0018】
[0028]たとえば、モバイルデバイスが、データを記憶し、コンピュートインメモリ動作を実施するために構成されたメモリデバイスを含み得る。モバイルデバイスは、モバイルデバイスのカメラセンサーによって生成された画像データなど、モバイルデバイスによって生成されたデータに基づいて、ML/AI動作を実施するように構成され得る。したがって、モバイルデバイスのメモリコントローラユニット(MCU)が、別のオンボードメモリ(たとえば、フラッシュまたはRAM)からメモリデバイスのCIMアレイに重みをロードし、入力特徴バッファと出力(たとえば、出力アクティブ化)バッファとを割り振り得る。処理デバイスは、次いで、たとえば、入力バッファ中の層をロードし、CIMアレイにロードされた重みでその層を処理することによって、画像データの処理を開始し得る。この処理は、画像データの各層について繰り返され得、出力(たとえば、出力アクティブ化)は、出力バッファに記憶され、次いで、顔認識などのML/AIタスクのためにモバイルデバイスによって使用され得る。
ニューラルネットワーク、深層ニューラルネットワーク、および深層学習に関する簡単な背景
[0029]ニューラルネットワークは、相互結合されたノードの層に編成される。概して、ノード(またはニューロン)は、計算が発生する場所である。たとえば、ノードは、入力データを、入力データを増幅するかまたは減衰させるかのいずれかである重み(または係数)のセットと組み合わせ得る。したがって、入力信号の増幅または減衰は、ネットワークが学習することを試みているタスクに関する様々な入力への相対的重要性の割当てと見なされ得る。概して、入力-重み積(input-weight product)が加算(または累算)され、次いで、その和はノードのアクティブ化関数を通過させられて、その信号がネットワークを通ってさらに進むべきであるかどうかと、どの程度までさらに進むべきであるかとを決定する。
【0019】
[0030]最も基本的な実装形態では、ニューラルネットワークは、入力層と、隠れ層と、出力層とを有し得る。「深層」ニューラルネットワークは、概して、2つ以上の隠れ層を有する。
【0020】
[0031]深層学習は、深層ニューラルネットワークをトレーニングする方法である。概して、深層学習は、ネットワークへの入力をネットワークからの出力にマッピングし、したがって、深層学習は、任意の入力xと任意の出力yとの間の未知関数f(x)=yを近似するように学習することができるので、「万能近似器(universal approximator)」と呼ばれることがある。言い換えれば、深層学習は、xをyに変換するための正しいfを見つける。
【0021】
[0032]より詳細には、深層学習は、前の層からの出力である、特徴の別個のセットに基づいて、ノードの各層をトレーニングする。したがって、深層ニューラルネットワークの各連続層では、特徴はより複雑になる。したがって、深層学習は、各層において連続的により高い抽象レベルで入力を表すように学習し、それにより、入力データの有用な特徴表現を蓄積することによって、入力データからより高いレベルの特徴を漸進的に抽出し、オブジェクト認識などの複雑なタスクを実施することができるので、深層学習は強力である。
【0022】
[0033]たとえば、視覚データが提示された場合、深層ニューラルネットワークの第1の層が、エッジなど、入力データ中の比較的単純な特徴を認識するように学習し得る。別の例では、聴覚データが提示された場合、深層ニューラルネットワークの第1の層は、入力データ中の特定の周波数におけるスペクトル電力を認識するように学習し得る。次いで、深層ニューラルネットワークの第2の層は、第1の層の出力に基づいて、視覚データの場合の単純な形状、または聴覚データの場合の音の組合せなど、特徴の組合せを認識するように学習し得る。次いで、上位層は、視覚データ中の複雑な形状、または聴覚データ中の単語を認識するように学習し得る。さらに上位の層は、共通の視覚オブジェクトまたは発話フレーズを認識するように学習し得る。したがって、深層学習アーキテクチャは、自然階層構造を有する問題に適用されたとき、特にうまく機能し得る。
ニューラルネットワークにおける層結合性
[0034]深層ニューラルネットワーク(DNN)などのニューラルネットワークは、層間の様々な結合性パターンを用いて設計され得る。
【0023】
[0035]
図1Aは、全結合ニューラルネットワーク102の一例を示す。全結合ニューラルネットワーク102では、第1の層における各ノードは、第2の層における各ノードが第1の層におけるあらゆるノードから入力を受信するように、それの出力を第2の層におけるあらゆるノードに通信する。
【0024】
[0036]
図1Bは、局所結合ニューラルネットワーク104の一例を示す。局所結合ニューラルネットワーク104では、第1の層におけるノードは、第2の層における限られた数のノードに結合され得る。より一般的には、局所結合ニューラルネットワーク104の局所結合層は、層における各ノードが同じまたは同様の結合性パターンを有するように構成されるが、異なる値(たとえば、第1の層ノードの局所エリア110、112、114、および116に関連する値)を有し得る結合強度(または重み)で構成され得る。局所結合の結合性パターンは、所与の領域中の上位層ノードが、ネットワークへの総入力のうちの制限された部分のプロパティへのトレーニングを通して調節された入力を受信し得るので、上位層において空間的に別個の受容野を生じ得る。
【0025】
[0037]1つのタイプの局所結合ニューラルネットワークは、畳み込みニューラルネットワーク(CNN)である。
図1Cは、畳み込みニューラルネットワーク106の一例を示す。畳み込みニューラルネットワーク106は、(たとえば、第1の層ノードの別の局所エリアと重複する局所エリア108について)第2の層における各ノードのための入力に関連する結合強度が共有されるように構成され得る。畳み込みニューラルネットワークは、入力の空間ロケーションが有意味である問題に好適である。
【0026】
[0038]1つのタイプの畳み込みニューラルネットワークは、深層畳み込みネットワーク(DCN)である。深層畳み込みネットワークは、複数の畳み込み層のネットワークであり、これは、たとえば、プーリング層および正規化層でさらに構成され得る。
【0027】
[0039]
図1Dは、画像キャプチャデバイス130によって生成された画像126における視覚特徴を認識するように設計されたDCN100の一例を示す。たとえば、画像キャプチャデバイス130が、車両中にまたは車両上に搭載された(またはさもなければ車両とともに移動する)カメラである場合、DCN100は、交通標識、さらには交通標識上の数を識別するように、様々な教師あり学習技法を用いてトレーニングされ得る。DCN100は、同様に、車線マーキングを識別すること、または交通信号を識別することなど、他のタスクのためにトレーニングされ得る。これらはほんのいくつかの例示的なタスクであり、多くの他のタスクが可能である。
【0028】
[0040]
図1Dの例では、DCN100は、特徴抽出セクションと分類セクションとを含む。画像126を受信すると、畳み込み層132が、特徴マップ(または中間アクティブ化)118の第1のセットを生成するために、(たとえば、
図2に示されており、
図2で説明される)畳み込みカーネルを画像126に適用する。概して、「カーネル」または「フィルタ」は、入力データチャネルの異なる態様を強調するように設計された重みの多次元アレイを備える。様々な例では、「カーネル」と「フィルタ」とは、畳み込みニューラルネットワークにおいて適用される重みのセットを指すために互換的に使用され得る。
【0029】
[0041]次いで、特徴マップ118の第1のセットは、特徴マップ120の第2のセットを生成するために、プーリング層(たとえば、最大プーリング層、図示せず)によってサブサンプリングされ得る。プーリング層は、モデル性能を改善するために、情報の大部分を維持しながら、特徴マップ118の第1のセットのサイズを低減し得る。たとえば、特徴マップ120の第2のセットは、プーリング層によって28×28行列から14×14行列にダウンサンプリングされ得る。
【0030】
[0042]このプロセスは、多くの層を通して繰り返され得る。言い換えれば、特徴マップ120の第2のセットは、特徴マップの1つまたは複数の後続のセット(図示せず)を生成するために、1つまたは複数の後続の畳み込み層(図示せず)を介して、さらに畳み込まれ得る。
【0031】
[0043]
図1Dの例では、特徴マップ120の第2のセットは、全結合層124に提供され、全結合層124は、出力特徴ベクトル128を生成する。出力特徴ベクトル128の各特徴は、「標識」、「60」、および「100」など、画像126の可能な特徴に対応する数を含み得る。いくつかの場合には、ソフトマックス関数(図示せず)が、出力特徴ベクトル128中の数を確率にコンバートし得る。そのような場合、DCN100の出力122は、画像126が1つまたは複数の特徴を含む確率である。
【0032】
[0044]ソフトマックス関数(図示せず)は、DCN100の出力122が、画像126が、画像126の場合のような数「60」をその上に伴う標識など、1つまたは複数の特徴を含む、1つまたは複数の確率であるように、出力特徴ベクトル128の個々の要素を確率にコンバートし得る。したがって、本例では、「標識」および「60」についての出力122における確率は、「30」、「40」、「50」、「70」、「80」、「90」、および「100」など、出力122の他の要素の確率よりも高くなるべきである。
【0033】
[0045]DCN100をトレーニングする前に、DCN100によって作り出される出力122は、不正確であり得る。したがって、誤差が、出力122と、アプリオリに知られるターゲット出力との間で算出され得る。たとえば、ここでは、ターゲット出力は、画像126が「標識」と数「60」とを含むという指示である。知られているターゲット出力を利用して、次いで、DCN100の重みは、DCN100の後続の出力122が(高い確率で)ターゲット出力を達成するように、トレーニングを通して調整され得る。
【0034】
[0046]DCN100の重みを調整するために、学習アルゴリズムは、重みのための勾配ベクトルを計算し得る。勾配ベクトルは、重みが特定の方法で調整された場合に、誤差が増加または減少する量を示し得る。次いで、重みは、誤差を低減するために調整され得る。重みを調整するこの様式は、この調整プロセスがDCN100の層を通る「バックワードパス」を伴うので、「バックプロパゲーション」と呼ばれることがある。
【0035】
[0047]実際には、重みの誤差勾配は、算出された勾配が真の誤差勾配を近似するように、少数の例にわたって算出され得る。この近似方法は、確率的勾配降下(stochastic gradient descent)と呼ばれることがある。システム全体の達成可能な誤差レートが減少しなくなるまで、または誤差レートがターゲットレベルに達するまで、確率的勾配降下が繰り返され得る。
【0036】
[0048]トレーニングの後に、DCN100は新しい画像を提示され得、DCN100は、分類、または様々な特徴が新しい画像中にある確率など、推論を生成し得る。
畳み込みニューラルネットワークのための畳み込み技法
[0049]畳み込みは、概して、入力データセットから有用な特徴を抽出するために使用される。たとえば、上記で説明されたものなど、畳み込みニューラルネットワークでは、畳み込みは、その重みがトレーニング中に自動的に学習される、カーネルおよび/またはフィルタを使用して、異なる特徴の抽出を可能にする。次いで、抽出された特徴は、推論を行うために組み合わせられる。
【0037】
[0050]アクティブ化関数が、畳み込みニューラルネットワークの各層の前におよび/または後に適用され得る。アクティブ化関数は、概して、ニューラルネットワークのノードの出力を決定する数学関数である。したがって、アクティブ化関数は、ノードの入力がモデルの予測に関連があるかどうかに基づいて、ノードが情報をパスするべきであるか否かを決定する。y=conv(x)である(すなわち、yはxの畳み込みである)一例では、xとyの両方が、概して、「アクティブ化」と見なされ得る。しかしながら、特定の畳み込み演算に関して、xが特定の畳み込みの前に存在するので、xは、「プリアクティブ化(pre-activation)」または「入力アクティブ化」と呼ばれることもあり、yは、出力アクティブ化または特徴マップと呼ばれることがある。
【0038】
[0051]
図2は、12ピクセル×12ピクセル×3チャネルの入力画像が、5×5×3畳み込みカーネル204と、1のストライド(またはステップサイズ)とを使用して畳み込まれる、旧来の畳み込みの一例を示す。得られた特徴マップ206は、8ピクセル×8ピクセル×1チャネルである。この例に見られるように、旧来の畳み込みは、(ここでは、3チャネルから1チャネルへの)チャネル次元数を含む、出力データと比較した入力データの次元数を(ここでは、12×12ピクセルから8×8ピクセルに)変更し得る。
【0039】
[0052]畳み込み層を備えるニューラルネットワークに関連する、(たとえば、浮動小数点演算毎秒(FLOPs)で測定される)計算負担およびパラメータの数を低減するための1つの方法は、畳み込み層を因子分解することである。たとえば、
図2に示されているものなど、空間分離可能畳み込みは、2つの構成要素、すなわち、(1)各空間チャネルが深さ単位畳み込みによって独立して畳み込まれる、深さ単位畳み込み(たとえば、空間融合)と、(2)すべての空間チャネルが線形結合される、点単位畳み込み(pointwise convolution)(たとえば、チャネル融合)とに因子分解され得る。深さ単位分離可能畳み込みの一例が、
図3Aおよび
図3Bに示されている。概して、空間融合中に、ネットワークは空間平面から特徴を学習し、チャネル融合中に、ネットワークは、チャネルにわたるこれらの特徴間の関係を学習する。
【0040】
[0053]一例では、深さ単位分離可能畳み込みは、空間融合のための5×5カーネルと、チャネル融合のための1×1カーネルとを使用して、実装され得る。特に、チャネル融合は、深さdの入力画像中のあらゆる単一の点を通して反復する1×1×dカーネルを使用し得、ここで、カーネルの深さdは、概して、入力画像のチャネルの数に一致する。点単位畳み込みを介したチャネル融合は、効率的な計算のための次元低減のために有用である。1×1×dカーネルを適用し、カーネルの後にアクティブ化層を加算することは、加算された深さをネットワークに与え得、これは、ネットワークの性能を増加させ得る。
【0041】
[0054]特に、
図3Aでは、12ピクセル×12ピクセル×3チャネルの入力画像302が、各々が5×5×1次元数を有する、3つの別個のカーネル304A~304Cを備えるフィルタで畳み込まれて、8ピクセル×8ピクセル×3チャネルの特徴マップ306を生成し、ここで、各チャネルは、カーネル304A~304Cの中の個々のカーネルによって生成される。
【0042】
[0055]次いで、特徴マップ306は、さらに、次元数1×1×3を有するカーネル308による点単位畳み込み演算を使用して畳み込まれて、8ピクセル×8ピクセル×1チャネルの特徴マップ310を生成する。この例に示されているように、特徴マップ310は次元数を低減しており(1チャネル対3チャネル)、これは、それとともに、より効率的な計算を可能にする。
【0043】
[0056]
図3Aおよび
図3B中の深さ単位分離可能畳み込みの結果は、
図2中の旧来の畳み込みと実質的に同様であるが、計算の数は著しく低減され、したがって、深さ単位分離可能畳み込みは、ネットワーク設計がそれを可能にする場合、著しい効率利得を与える。
【0044】
[0057]
図3Bに示されていないが、複数の(たとえば、m個の)点単位畳み込みカーネル308(たとえば、フィルタの個々の構成要素)が、畳み込み出力のチャネル次元数を増加させるために使用され得る。したがって、たとえば、m=256の1×1×3カーネル308が生成され得、各出力は、8ピクセル×8ピクセル×1チャネルの特徴マップ(たとえば、特徴マップ310)であり、これらの特徴マップは、積層されて、8ピクセル×8ピクセル×256チャネルの得られた特徴マップを得ることができる。チャネル次元数の得られた増加は、トレーニングのためのより多くのパラメータを提供し、これは、(たとえば、入力画像302における)特徴を識別する畳み込みニューラルネットワークの能力を改善し得る。
例示的なコンピュートインメモリ(CIM)アーキテクチャ
[0058]
図4は、CIMアレイ中で実装され得る、スタティックランダムアクセスメモリ(SRAM)の例示的なメモリセル400を示す。メモリセル400は、メモリセル400が8つのトランジスタで実装されるので、8トランジスタ(8T)SRAMセルと呼ばれることがある。
【0045】
[0059]図示のように、メモリセル400は、出力414と出力416とを有する交差結合インバータペア424を含み得る。図示のように、交差結合インバータペア出力414は、パスゲートトランジスタ402を介して書込みビット線(WBL)406に選択的に結合され、交差結合インバータペア出力416は、パスゲートトランジスタ418を介して相補型(complementary)書込みビット線(WBLB)420に選択的に結合される。WBL406およびWBLB420は、交差結合インバータペア424に書き込まれる(たとえば、記憶される)べき相補型デジタル信号を提供するように構成される。WBLおよびWBLBは、メモリセル400に、ニューラルネットワーク重みのためのビットを記憶するために使用され得る。パスゲートトランジスタ402、418のゲートは、図示のように、書込みワード線(WWL)404に結合され得る。たとえば、書き込まれるべきデジタル信号が、WBLに提供され得る(および、デジタル信号の補数が、WBLBに提供される)。ここではn形電界効果トランジスタ(NFET)として実装される、パスゲートトランジスタ402、418は、次いで、WWL404に論理高信号を提供することによってオンにされ、デジタル信号が交差結合インバータペア424に記憶されることを生じる。
【0046】
[0060]図示のように、交差結合インバータペア出力414は、トランジスタ410のゲートに結合され得る。トランジスタ410のソースは、基準電位ノード(VSSまたは電気接地)に結合され得、トランジスタ410のドレインは、トランジスタ412のソースに結合され得る。トランジスタ412のドレインは、図示のように、読取りビット線(RBL)422に結合され得る。トランジスタ412のゲートは、読取りワード線(RWL)408を介して制御され得る。RWL408は、アクティブ化入力信号を介して制御され得る。
【0047】
[0061]読取りサイクル中に、RBL422は、論理高にプリチャージされ得る。アクティブ化入力と、交差結合インバータペア出力414において記憶された重みビットの両方が論理高である場合、トランジスタ410とトランジスタ412とは両方ともオンにされ、トランジスタ410のソースにおいてRBL422をVSSに電気的に結合し、RBL422を論理低に放電する。アクティブ化入力または交差結合インバータペア出力414において記憶された重みのいずれかが論理低である場合、トランジスタ410、412のうちの少なくとも1つがオフにされることになり、したがって、RBL422は論理高のままである。したがって、RBL422におけるメモリセル400の出力は、重みビットとアクティブ化入力の両方が論理高であるときのみ、論理低であり、他の場合、論理高であり、事実上、NANDゲート動作を実装する。
【0048】
[0062]
図5Aは、本開示のいくつかの態様による、CIMのための回路500を示す。回路500は、(行とも呼ばれる)ワード線504
0~504
31と列506
0~506
7とを有するCIMアレイ501を含む。ワード線504
0~504
31はワード線(WL)504と総称され、列506
0~506
7は列506と総称される。図示のように、CIMアレイ501は、ワード線504にアクティブ化信号を提供するように構成されたアクティブ化回路590を含み得る。CIMアレイ501は、理解を容易にするために32個のワード線と8つの列とで実装されるが、CIMアレイは、任意の数のワード線または列で実装され得る。図示のように、(メモリセル502と総称される)メモリセル502
0-0~502
31-7は、WL504と列506との交差において実装される。
【0049】
[0063]メモリセル502の各々は、
図4に関して説明されたメモリセルアーキテクチャを使用して実装され得る。図示のように、アクティブ化入力a(0,0)~a(31,0)が、それぞれのワード線504に提供され得、メモリセル502は、ニューラルネットワーク重みw(0,0)~w(31,7)を記憶し得る。たとえば、メモリセル502
0-0~502
0-7は、重みビットw(0,0)~w(0,7)を記憶し得、メモリセル502
1-0~502
1-7は、重みビットw(1,0)~w(1,7)を記憶し得、以下同様である。各ワード線は、マルチビット重みを記憶し得る。たとえば、重みビットw(0,0)~w(0,7)は、ニューラルネットワークの重みの8ビットを表す。
【0050】
[0064]図示のように、回路500は、各々が列506のうちのそれぞれの1つについて実装される、(加算器ツリー510と総称される)加算器ツリー5100~5107を含み得る。加算器ツリー510の各々は、列506のうちのそれぞれの1つ上のメモリセル502からの出力信号を加算する。各加算器ツリーは、加算器回路511など、加算器回路のツリーを使用して実装される。加算器ツリー510の出力は、図示のように、重みシフト加算器ツリー回路512に結合される。重みシフト加算器ツリー回路512は、各々が、ビットシフトおよび加算演算(bit-shift and addition operation)の実施を容易にするためのビットシフトおよび加算回路を含む、複数の重みシフト加算器(たとえば、重みシフト加算器514)を含む。言い換えれば、列5060上のメモリセルが、それぞれの重みについての最上位ビット(MSB)を記憶し得、列5067上のメモリセルが、それぞれの重みについての最下位ビット(LSB)を記憶し得る。したがって、列506にわたる加算を実施するとき、関連する列上のビットの重要性を考慮するために、ビットをシフトするためのビットシフト演算が実施される。
【0051】
[0065]重みシフト加算器ツリー回路512の出力は、アクティブ化シフト累算器回路516に提供される。アクティブ化シフト累算器回路516は、ビットシフト回路518と累算器520とを含む。アクティブ化シフト累算器回路516は、フリップフロップ(FF)522とFF591とをも含み得る。
【0052】
[0066]回路500の動作中に、アクティブ化回路590が、第1のアクティブ化サイクル中の計算のために、メモリセル502にアクティブ化入力a(0,0)~a(31,0)の第1のセット599を提供する。アクティブ化入力a(0,0)~a(31,0)の第1のセットは、アクティブ化パラメータの最上位ビットを表す。各列上の計算の出力は、加算器ツリー510のうちのそれぞれの1つを使用して加算される。加算器ツリー510の出力は、重みシフト加算器ツリー回路512を使用して加算され、その結果は、アクティブ化シフト累算器に提供される。アクティブ化パラメータの第2の最上位ビットを表すアクティブ化入力a(0,1)~a(31,1)など、後続のアクティブ化サイクル中のアクティブ化入力の他のセットについて、同じ動作が実施され、アクティブ化パラメータの最下位ビットを表すアクティブ化入力が処理されるまで、以下同様である。ビットシフト回路518は、アクティブ化サイクルに基づいてビットシフト演算を実施する。たとえば、8つのアクティブ化サイクルを使用して処理される8ビットアクティブ化パラメータの場合、ビットシフト回路は、第1のアクティブ化サイクルについて8ビットシフトを実施し、第2のアクティブ化サイクルについて7ビットシフトを実施し得、以下同様である。アクティブ化サイクルの後に、ビットシフト回路518の出力は、累算器520を使用して累算され、転送レジスタを実装していることがあるFF522、591に記憶される。
【0053】
[0067]回路500のアーキテクチャは、重みシフト加算器ツリー回路512など、処理回路の対称構造により、「折り畳み」アーキテクチャと呼ばれる。折り畳みアーキテクチャは、計算中に使用される重みに関連するビット数の構成可能性を可能にする。たとえば、8ビット重みを使用する計算の代わりに、本明細書でより詳細に説明されるように、4ビット重みを使用する計算が、列506のうちの4つを非アクティブ化(アクティブ化解除)することによって実装され得る。
【0054】
[0068]
図5Aに関して説明される態様は、ビット単位記憶とビット単位乗算とを提供する。加算器ツリー510は、列506についてのポピュレーションカウント加算を実施する。すなわち、加算器ツリー510の各々は、列についてのメモリセルの出力信号を加算する。(たとえば、8つの列について示されているように3つの段階を有する)重みシフト加算器ツリー回路512は、8つの列について生成された重み付き和を組み合わせる(たとえば、アクティブ化サイクル中の所与のアクティブ化ビット位置についての累算結果を提供する)。アクティブ化シフト累算器回路516は、複数の(たとえば、8つの)アクティブ化サイクルからの結果を組み合わせ、最終累算結果を出力する。たとえば、ビットシフト回路518は、関連するアクティブ化サイクルに基づいて、重みシフト加算器ツリー回路512の出力におけるビットをシフトする。直列累算器520は、ビットシフト回路518によって生成されたシフトされた加算器出力を累算する。FF522、591を使用して実装された転送レジスタは、最後のアクティブ化サイクルについての計算が完了した後に、直列累算器520の出力をコピーする。
【0055】
[0069]列にわたる並列加算は、回路500に関連する(テラ演算毎秒(TOPS)換算での)処理性能を増加させ、よりコンパクトな全加算器セルを提供し、加算器がビット乗算メモリセルの隣に実装されるので、寄生ペナルティ(parasitic penalty)を低減し、従来の実装と比較して、メモリのより少数の行が、高いアクティブ化振幅を有するので、切替えアクティビティを低減し、加算器ツリーの実現のためにセルが当接構成において横並びで配置されることにより、容易なマクロ生成を可能にする容易なタイリングを提供する。
図5Aに関して説明される態様は、単一のクロック周波数で実装され得る。
【0056】
[0070]回路500は、アクティブ化パラメータまたは重みパラメータの異なるビットサイズを使用する計算にわたる線形エネルギースケーリングを提供する。言い換えれば、加算器ツリー510と重みシフト加算器ツリー回路512とを使用することは、本明細書で説明されるように、ビットサイズ構成可能性を提供し、mビット重み累算を伴うnビットアクティブ化を可能にし、nおよびmは正の整数である。回路500に関連するエネルギー消費は、アクティブ化パラメータと重みとについての構成されたビットサイズに基づいて線形的にスケーリングする。
【0057】
[0071]
図5Bは、加算演算(add operation)を実施するように構成された加算器回路585の例示的な一実装形態を示す。加算器回路585は、加算器回路511など、本明細書で説明される加算器回路のいずれかに対応し得る。図示のように、加算器回路は、(AおよびBと標示された)入力570、571を受信する排他的OR(XOR)ゲート573を含む。XORゲート573の出力は、XORゲート574の入力に提供され、XORゲート574の他方の入力は、桁上げ入力(Cin)信号572を受信する。XORゲート574の出力は、加算器回路の(SUMと標示された)出力を提供する。図示のように、加算器回路は、Cin信号572を受信し、XORゲート573の出力を受信するANDゲート575をも含み得る。ANDゲート576は、入力570、571を受信する。ANDゲート575、576の出力は、加算演算についての桁上げ出力信号(carry out signal)を生成するORゲート578の入力に提供される。
図5Bは、理解を容易にするために、加算器回路の1つの例示的な実装形態を示すが、本明細書で説明される態様は、任意の好適な加算器回路アーキテクチャを使用して実装され得る。
【0058】
[0072]
図5Cは、累算器587の例示的な一実装形態である。累算器587は、累算器520など、本明細書で説明される累算器のいずれかに対応し得る。図示のように、累算器520は、図示のように、入力信号を受信する加算器回路580を含む。加算器回路580の出力は、レジスタ581に提供されるクロック信号の各サイクルにおいて加算器回路の出力を記憶するように構成されたレジスタに提供される。レジスタ581の出力582は、図示のように、累算器587の出力として使用され、加算器回路580の入力にフィードバックされる。
図5Cは、理解を容易にするために、累算器の1つの例示的な実装形態を示すが、本明細書で説明される態様は、任意の好適な累算器アーキテクチャを使用して実装され得る。
【0059】
[0073]
図6は、本開示のいくつかの態様による、ビット列加算器ツリー回路650と列累算器回路652とを使用して実装されたCIMのための回路600を示す。ビット列加算器ツリー回路650は、複数の列506に接続された複数のセンス増幅器602
0、602
1、~602
7の出力に結合された入力を有し、ここで、各列は複数のビット線(たとえば、RBL)を有する。たとえば、列506の各々が4つのビット線を有し得、各ビット線は、4つのセンス増幅器(たとえば、センス増幅器602
0)のうちの1つの入力に結合される。CIMアレイ501のワード線は、複数のワード線グループ(たとえば、8つのグループ)を含み得、各グループは4つのワード線を有する。4つのワード線の各グループの各ワード線は、各列上の4つのビット線のうちのそれぞれの1つに結合される。4つのワード線の各グループは、所与の計算サイクルにおいて、対応するアクティブ化信号によってアクティブになり、残りのワード線グループのアクティブ化信号は、論理低に設定される。ワード線グループ(たとえば、この例における合計32個のワード線についての8つのワード線グループ)は、合計8つのクロックサイクルにおいて処理される。センス増幅器602
0、602
1、~602
7は、センス増幅器602と総称される。列506の各々について複数のセンス増幅器(たとえば、4つ)が含まれ、複数の列が同時に検知されることを可能にする。たとえば、センス増幅器602
0は、列506
0上のそれぞれのメモリセル502
0-0~502
3-0の出力を同時に検知し、センス増幅器602
1は、列506
1上のそれぞれのメモリセル502
0-1~502
3-1の出力を同時に検知し、列506
7上のそれぞれのメモリセル502
0-7~502
3-7の出力を同時に検知するセンス増幅器602
7まで、以下同様である。各列についてのセンス増幅器の出力は、加算器ツリー(たとえば、加算器ツリー604と総称される、加算器ツリー604
0、604
1、~604
7)に結合される。加算器ツリー604の各々を実装するために使用される加算器回路の各々は、
図5Bに関して説明されたように実装され得る。
【0060】
[0074]簡単のために、センス増幅器602の各々は、単一のメモリセルの出力に結合された入力を有するものとして示されている。しかしながら、センス増幅器602の各々の入力は、連続様式でアクティブ化され得る、複数のメモリセルの出力に結合され得る。言い換えれば、各列について4つのセンス増幅器がある場合、4つのワード線が、各列上で一度にアクティブ化され得る。一例として、センス増幅器6020の入力は、図示のようにワード線の第1のグループ(たとえば、ワード線5040~5043)についてのそれぞれのメモリセルの出力に結合されるが、また、ワード線の第2のグループ(たとえば、ワード線5044~5047)についてのそれぞれのメモリセルの出力に結合され、ワード線の第3のグループ(たとえば、ワード線5048~50411)についてのそれぞれのメモリセルの出力に結合され、ワード線の最後のグループ(たとえば、ワード線50428~50431)まで以下同様であり得る。したがって、32個のワード線および列ごとの4つのセンス増幅器について、8つの計算サイクルが、アクティブ化入力のセット(たとえば、アクティブ化入力a(0,0)~a(31,0))についての計算を完了するために使用され得る。
【0061】
[0075]説明されるように、加算器ツリー604の出力は、列累算器回路652に結合される。たとえば、加算器ツリー604の各々の出力は、列累算器回路652の(累算器606と総称される)累算器606
0、606
1、~606
7のうちの1つに結合される。累算器606の各々は、
図5Cに関して説明されたように実装され得る。累算器606の各々は、複数の計算サイクルにわたる、加算器ツリー604のうちのそれぞれの1つの出力信号の累算を実施する。たとえば、各計算サイクル中に、4つのワード線について計算が実施され、4つのワード線についての計算の出力信号が、ビット列加算器ツリー回路650の加算器ツリー604を使用して加算される。複数の計算サイクル(たとえば、4つのセンス増幅器を使用するときの32個のワード線についての8つのサイクル)の後に、累算器606の各々は、加算器ツリー604のうちのそれぞれの1つの出力信号の累算を実施する。
【0062】
[0076]複数の計算サイクルが完了すると、
図5Aに関して説明されたように、累算器606の出力は、列にわたる加算のために、重みシフト加算器ツリー回路512に提供され、重みシフト加算器ツリー回路512の出力は、アクティブ化サイクルにわたる累算のために、アクティブ化シフト累算器回路516に提供される。言い換えれば、ビット単位累算が、複数の計算サイクル(たとえば、8つの計算サイクル、各計算サイクルは、32個のワード線についての計算が完了するまで、4つのワード線についてのものである)にわたって、累算器606の各々において行われる。重みシフト加算器ツリー回路512は、8つの列の重み付き和を組み合わせ(たとえば、各アクティブ化サイクル中の所与のアクティブ化ビット位置についての累算結果を提供し)、アクティブ化シフト累算器回路516は、複数の(たとえば、8つの)アクティブ化サイクルからの結果を組み合わせて、最終累算結果を出力する。いくつかの態様では、CIMアレイ501、ビット列加算器ツリー回路650、および列累算器回路652は、重みシフト加算器ツリー回路512およびアクティブ化シフト累算器回路516よりも(たとえば、8つの計算サイクルを使用して実装されたときの8倍、または依然として8つの計算サイクルを使用しながら臨界経路遅延(critical path delay)の限界によって決定された8倍未満)高い周波数において動作する。図示のように、(ハーフラッチ回路608と総称される)ハーフラッチ回路608
0、608
1、~608
7が、累算器606のそれぞれの出力に結合され得る。各ハーフラッチ回路は、累算器606のうちのそれぞれの1つの出力を保持し、複数の計算サイクルが完了すると、重みシフト加算器ツリー回路512のそれぞれの入力に出力を提供する。言い換えれば、ハーフラッチ回路は、概して、クロックサイクルの始めにデジタル入力(たとえば、累算器606のうちの1つの出力)を保持し、クロックサイクルの終わりにラッチ回路の出力にデジタル入力を提供する、ラッチ回路を指す。ハーフラッチ回路608は、(たとえば、図示のように8×における)列累算器回路652のより高い周波数動作から、(たとえば、図示のように1×における)重みシフト加算器ツリー回路512のより低い周波数動作への遷移を容易にする。
【0063】
[0077]
図7は、本開示のいくつかの態様による、回路600に関連する信号を示すタイミング
図700である。回路600は、デジタルコンピュートインメモリ(DCIM:digital compute in memory)クロック上で動作し得る。DCIMクロックは、回路500、600が動作するメインクロックとして使用され得る。DCIMクロックの8つのサイクルの後に、最終累算出力が、8ビットアクティブ化入力との重みの乗算について提供され得る。図示のように、ローカルクロックと呼ばれる、より高い周波数クロック信号が、より低い周波数のDCIMクロックから生成され得る。たとえば、ローカルクロックは、DCIMクロックの周波数よりも8倍大きい周波数を有し得る。
【0064】
[0078]図示のように、アクティブ化入力の各々の1ビットが、DCIMクロックの8つのサイクルの各々中に提供される。たとえば、ビットa(0,0)~a(31,0)(たとえば、異なるアクティブ化入力のMSB)が、第1のアクティブ化サイクル(たとえば、DCIMクロックの第1のサイクル)中にメモリセルに提供され、ビットa(0,1)~a(31,1)(たとえば、異なるアクティブ化入力の第2のMSB(MSB-1))が、第2のアクティブ化サイクル(たとえば、DCIMクロックの第2のサイクル)中にメモリセルに提供され、以下同様である。
【0065】
[0079]ローカルクロックの各サイクル中に、(「SA Out」と標示された)センス増幅器602の出力と、(「Col Add Out」と標示された)加算器ツリー604の出力とが、計算サイクルについて提供される。ローカルクロックの各サイクル中に、SA OutおよびCol Add Outは、ワード線504のサブセットのメモリセルについて(たとえば、
図6に関して説明された例における4つのワード線について)出力を提供する。たとえば、ローカルクロックの第1のサイクル中に、加算器ツリー604
0についてのCol Add Outがメモリセル502
0-0~502
3-0によって実施された計算について提供され、ローカルクロックの第2のサイクル中に、Col Add Outがメモリセル502
4-0~502
7-0によって実施された計算について提供され、(ここでは、ローカルクロックの8つのサイクルの後に)Col Add Outがメモリセル502
28-0~502
31-0によって実施された計算について提供されるまで、以下同様である。
【0066】
[0080]図示のように、列累算器回路652の(「Col Acc Latch」と標示された)出力と、重みシフト加算器ツリー回路512の(「Weight Shift Add Out」と標示された)出力とが、8つのローカルクロックサイクルの後に(たとえば、単一のDCIMクロックサイクルの後に)提供される。アクティブ化シフト累算器回路516は、8つのDCIMクロックサイクルにわたってWeight Shift Add Outを累算し、8つのDCIMクロックサイクルの終わりに(「Acc Out」と標示された)出力を提供する。
【0067】
[0081]いくつかの態様では、アクティブ化入力および/または重みに関連するビット数は、構成可能であり得る。ビット列加算器ツリー回路650は、単一のビットまで、重みについてのビット数の構成可能性を可能にする。たとえば、4ビット重みを実装するために、本明細書でより詳細に説明されるように、列5064、5065、5066、5067に関連する回路が非アクティブ化され得る。
【0068】
[0082]
図8A、
図8B、および
図8Cは、本開示のいくつかの態様による、重みの構成可能なビットサイズをもつCIM回路を示すブロック図である。たとえば、
図8Aに示されているように、8ビット重みが、メモリセル502に記憶され、本明細書で説明されるように、ビット列加算器ツリー回路650、列累算器回路652、重みシフト加算器ツリー回路512、およびアクティブ化シフト累算器回路516を使用して処理され得る。
【0069】
[0083]図示のように、クロック生成器回路870が、DCIMクロックを生成するように構成されたクロック生成器871を含み得る。クロック生成器871は、位相ロックループ(PLL)またはリング発振器など、任意の好適なクロック生成回路を使用して実装され得る。重みシフト加算器ツリー回路512は、
図7に関して説明されたDCIMクロック上で受信および動作し得る。いくつかの態様では、クロック生成器回路870は、ローカルクロックを生成するために使用され得る周波数逓倍器(frequency multiplier)802を含み得、そのローカルクロックに基づいて、アクティブ化回路590、ビット列加算器ツリー回路650、および列累算器回路652が動作する。周波数逓倍器802はクロック生成器回路870の一部であるものとして示されているが、周波数逓倍器802は、いくつかの実装形態では、クロック生成器871とは別個であり得る。周波数逓倍器は、概して、第1の周波数を有するクロック信号を受信し、第2の異なる周波数を有する第2のクロック信号を生成する、任意の回路を指し、ここで、第2の周波数は第1の周波数の倍数である。
【0070】
[0084]いくつかの態様は、
図8Bおよび
図8Cに関して説明されるように、ウイング直列演算(wing-serial operation)を使用する計算技法を提供する。CIM回路の場合、本明細書で使用される「ウイング直列演算」は、概して、あるウイング(CIM回路のある処理経路)上で演算し、次いで、別のウイング(CIM回路の別の処理経路)上で演算することを指す。たとえば、4ビット重みが、第1の4ビット重み計算を実施するために使用されるべき4つの列のセット(たとえば、列506
4、506
5、506
6、506
7)上のメモリセルに記憶され得、4ビット重みが、第2の4ビット重み計算を実施するために使用されるべき4つの列の別のセット(たとえば、列506
0、506
1、506
2、506
3)上のメモリセルに記憶され得る。4つの列の2つのセットは、独立セットであり得る。提供された例では、4ビット重み計算が列506
0、506
1、506
2、506
3について実施される前に、4ビット重み計算は、列506
4、506
5、506
6、506
7について実施されるが、その計算は逆順で実施され得る。たとえば、4ビット重み計算が列506
4、506
5、506
6、506
7について実施される前に、4ビット重み計算は、列506
0、506
1、506
2、506
3について実施され得る。
【0071】
[0085]
図8Bは、第1の4ビット重み計算がその間に実施される第1のサイクルを示す。第1のサイクル中に、列506
4、506
5、506
6、506
7についての処理信号のために使用される、ビット列加算器ツリー回路650と列累算器回路652との回路が、非アクティブ化される。たとえば、クロックゲーティング回路804が、電力消費を低減するために、第1のサイクル中に、累算器606
4、606
5、606
6、606
7に提供されるクロックを非アクティブ化するために使用され得る。本明細書で使用されるクロックゲーティング回路は、概して、クロック信号を受信し(たとえば、第1の入力を有するANDゲートがクロック信号を受信する)、制御信号に応答して回路の出力にクロック信号を提供する(たとえば、ANDゲートの第2の入力に提供された制御信号が論理高である)、任意の回路を指す。第1のサイクルの終わりに、アクティブ化シフト累算器回路516は、第1の4ビット重み計算についての結果を提供する。
【0072】
[0086]
図8Cは、第2の4ビット重み計算がその間に実施される第2のサイクルを示す。第2のサイクル中に、列506
0、506
1、506
2、506
3についての処理信号のために使用される、ビット列加算器ツリー回路650と列累算器回路652との回路が、非アクティブ化される。たとえば、クロックゲーティング回路804が、電力消費を低減するために、第2のサイクル中に、累算器606
0、606
1、606
2、606
3に提供されるクロックを非アクティブ化するために使用され得る。クロックゲーティング技法は、理解を容易にするために、列累算器回路652へのクロック信号について示されているにすぎないが、クロックゲーティング技法は、ビット列加算器ツリーの回路など、未使用である他の回路へのクロック信号を非アクティブ化するために使用され得る。
デジタルコンピューテーションインメモリ(CIM)のための例示的な動作
[0087]
図9は、本開示のいくつかの態様による、インメモリ計算のための例示的な動作900を示す流れ図である。動作900は、
図5Aに関して説明された回路500または
図6に関して説明された回路600など、CIMのための回路によって実施され得る。
【0073】
[0088]動作900は、ブロック905において、回路が、複数の加算回路(たとえば、加算器ツリー510または累算器606)の各々を介して、メモリの複数の列(たとえば、列506)のうちのそれぞれの1つ上の出力信号を加算することによって始まる。複数のメモリセルは、複数の列の各々上にあり、複数のメモリセルは、ニューラルネットワークの重み(たとえば、
図5Aに示されているw(0,0)~w(31,7))を表す複数のビットを記憶する。複数の列の各々上の複数のメモリセルは、メモリの異なるワード線(たとえば、ワード線504)上にある。
【0074】
[0089]ブロック910において、回路は、第1の加算器回路(たとえば、重みシフト加算器ツリー回路512)を介して、複数の加算回路のうちの少なくとも2つの出力信号を加算する。ブロック915において、回路は、累算器(たとえば、累算器520またはアクティブ化シフト累算器回路516)を介して、第1の加算器回路の出力信号を累算する。いくつかの態様では、回路は、重みの各々に関連するビット数に基づいて、第1の加算器回路の1つまたは複数の部分、および/または複数の加算回路のうちの1つまたは複数を選択的に無効(disable)にする。
【0075】
[0090]いくつかの態様では、複数の列のうちのそれぞれの1つ上の出力信号を加算することは、(複数の)ワード線のうちの2つまたはそれ以上が連続的にアクティブ化された後に、(たとえば、累算器606を介して)複数の列のうちのそれぞれの1つ上のメモリセルの出力信号を累算することを含み得る。いくつかの態様では、回路は、複数の加算回路の各々と複数の列のうちのそれぞれの1つとの間に結合された第2の加算器回路(たとえば、加算器ツリー604の各々)を介して、複数の列のうちのそれぞれの1つとワード線のうちの2つまたはそれ以上との上にあるメモリセルの出力信号を加算する。いくつかの態様では、回路は、第2の加算器回路と複数の列のうちのそれぞれの1つとの間に結合されたセンス増幅器(たとえば、センス増幅器602)を介して、複数の列のうちのそれぞれの1つとワード線のうちの2つまたはそれ以上との上にあるメモリセルの出力信号を検知する。この場合、第2の加算器回路を介して加算することは、検知された出力信号に基づく。
【0076】
[0091]いくつかの態様では、回路は、第1の計算サイクル中に、第1の加算器回路の第1の部分および/または加算回路のうちの少なくとも1つを無効にし、第2の計算サイクル中に、第1の加算器回路の第2の部分と加算回路のうちの少なくとも別の1つとを無効にする。
【0077】
[0092]いくつかの態様では、回路は、ワード線のうちの2つまたはそれ以上を連続的にアクティブ化する。この場合、複数の加算回路の各々を介して、複数の列のうちのそれぞれの1つ上の出力信号を加算することは、ワード線のうちの2つまたはそれ以上が連続的にアクティブ化された後に、複数の加算回路(たとえば、累算器606)の各々を介して、複数の列のうちのそれぞれの1つ上のメモリセルの出力信号を累算することを含む。
【0078】
[0093]いくつかの態様では、複数の加算回路のうちの少なくとも2つの出力信号の加算は、複数の加算回路のうちの少なくとも2つ上でビットシフトおよび加算演算を実施することを含む。いくつかの態様では、回路は、第1のクロック信号を生成し、ここで、複数の加算回路は、第1のクロック信号(たとえば、
図7に示されているローカルクロック)に基づいて動作し、回路は、第2のクロック信号を生成し、ここで、第1の加算器回路は、第2のクロック信号(たとえば、
図7に示されているDCIMクロック)に基づいて動作し、第2のクロック信号は、第1のクロック信号とは異なる周波数を有する。いくつかの態様では、回路は、周波数逓倍器(たとえば、周波数逓倍器802)を介して、第1のクロック信号に基づいて第2のクロック信号を生成する。
【0079】
[0094]いくつかの態様では、回路は、異なるアクティブ化入力に基づいて複数のメモリセルを連続的にアクティブ化し、第1の加算器回路の出力信号の累算は、複数のメモリセルが連続的にアクティブ化された後に行われる。たとえば、複数のメモリセルを連続的にアクティブ化することは、第1のアクティブ化サイクル中にアクティブ化入力の第1のセット(たとえば、アクティブ化入力a(0,0)~a(31,0))を受信することと、第2のアクティブ化サイクル中にアクティブ化入力の第2のセット(たとえば、アクティブ化入力a(0,1)~a(31,1))を受信することとを含み得、ここで、第1の加算器回路の出力信号を累算することは、第1のアクティブ化サイクルおよび第2のアクティブ化サイクルの後に行われる。
【0080】
[0095]いくつかの態様では、複数の列は、複数の列の第1のサブセット(たとえば、列506
0~506
3)と、複数の列の第2のサブセット(たとえば、列506
4~506
7)とを含む。第1のサブセットは、第1の計算サイクル(たとえば、
図8Bに示されているサイクル1)中にアクティブ化され得る。第2のサブセットは、第2の計算サイクル(たとえば、
図8Cに示されているサイクル2)中にアクティブ化され得、第2の計算サイクルは、第1の計算サイクルの後にある。
【0081】
[0096]いくつかの態様では、ワード線の各々上のメモリセルは、ニューラルネットワークの重みのうちの1つを記憶するように構成され、複数の列の第1のサブセットの量(たとえば、
図8Bに示されている例における4つ)は、重みのうちの1つのビットの量に関連する。いくつかの態様では、回路は、クロックゲーティング回路(たとえば、クロックゲーティング回路804)を介して、複数の列の第2のサブセットからの信号を処理することに関連するクロック信号を非アクティブ化する。
コンピューテーションインメモリのための例示的な処理システム
[0097]
図10は、例示的な電子デバイス1000を示す。電子デバイス1000は、
図9に関して説明された動作900を含む、本明細書で説明される方法を実施するように構成され得る。
【0082】
[0098]電子デバイス1000は、いくつかの態様ではマルチコアCPUであり得る、中央処理ユニット(CPU)1002を含む。CPU1002において実行される命令が、たとえば、CPU1002に関連するプログラムメモリからロードされ得るか、またはメモリ1024からロードされ得る。
【0083】
[0099]電子デバイス1000は、グラフィックス処理ユニット(GPU)1004、デジタル信号プロセッサ(DSP)1006、ニューラル処理ユニット(NPU)1008、マルチメディア処理ブロック1010、マルチメディア処理ブロック1010、およびワイヤレス接続性処理ブロック1012など、特定の機能に適合された追加の処理ブロックをも含む。一実装形態では、NPU1008は、CPU1002、GPU1004、および/またはDSP1006のうちの1つまたは複数において実装され得る。
【0084】
[0100]いくつかの態様では、ワイヤレス接続性処理ブロック1012は、たとえば、第3世代(3G)接続性、第4世代(4G)接続性(たとえば、4G LTE(登録商標))、第5世代接続性(たとえば、5GまたはNR)、Wi-Fi(登録商標)接続性、Bluetooth(登録商標)接続性、およびワイヤレスデータ送信規格のための、構成要素を含み得る。ワイヤレス接続性処理ブロック1012は、ワイヤレス通信を容易にするために、1つまたは複数のアンテナ1014にさらに接続される。
【0085】
[0101]電子デバイス1000は、センサーの任意の様式に関連する1つまたは複数のセンサープロセッサ1016、画像センサーの任意の様式に関連する1つまたは複数の画像信号プロセッサ(ISP)1018、および/またはナビゲーションプロセッサ1020をも含み得、ナビゲーションプロセッサ1020は、衛星ベース測位システム構成要素(たとえば、GPSまたはGLONASS)ならびに慣性測位システム構成要素を含み得る。
【0086】
[0102]電子デバイス1000は、スクリーン、(タッチセンシティブディスプレイを含む)タッチセンシティブ表面、物理ボタン、スピーカー、マイクロフォンなど、1つまたは複数の入力および/または出力デバイス1022をも含み得る。いくつかの態様では、電子デバイス1000のプロセッサのうちの1つまたは複数は、ARM命令セットに基づき得る。
【0087】
[0103]電子デバイス1000は、ダイナミックランダムアクセスメモリ、フラッシュベーススタティックメモリなど、1つまたは複数のスタティックメモリおよび/またはダイナミックメモリを表す、メモリ1024をも含む。この例では、メモリ1024は、電子デバイス1000の上述のプロセッサまたは(制御回路とも呼ばれる)CIMコントローラ1032のうちの1つまたは複数によって実行され得る、コンピュータ実行可能構成要素を含む。たとえば、電子デバイス1000は、本明細書で説明されるように、回路500など、CIM回路1026を含み得る。CIM回路1026は、CIMコントローラ1032を介して制御され得る。たとえば、いくつかの態様では、メモリ1024は、記憶する(たとえば、メモリセルに重みを記憶する)ためのコード1024Aと、計算する(たとえば、アクティブ化入力を適用することによってニューラルネットワーク計算を実施する)ためのコード1024Bとを含み得る。図示のように、CIMコントローラ1032は、記憶する(たとえば、メモリセルに重みを記憶する)ための回路1028Aと、計算する(たとえば、アクティブ化入力を適用することによってニューラルネットワーク計算を実施する)ための回路1028Bとを含み得る。示された構成要素、および他の示されない構成要素は、本明細書で説明される方法の様々な態様を実施するように構成され得る。
【0088】
[0104]電子デバイス1000がサーバデバイスである場合など、いくつかの態様では、マルチメディア処理ブロック1010、ワイヤレス接続性処理ブロック1012、アンテナ1014、センサープロセッサ1016、ISP1018、またはナビゲーションプロセッサ1020のうちの1つまたは複数など、様々な態様が、
図10に示された例から省略され得る。
例示的な条項
[0105]条項1. メモリの複数の列の各々上の複数のメモリセルと、複数のメモリセルが、ニューラルネットワークの重みを表す複数のビットを記憶するように構成され、ここにおいて、複数の列の各々上の複数のメモリセルが、メモリの異なるワード線上にある、各々が複数の列のうちのそれぞれの1つに結合された、複数の加算回路と、複数の加算回路のうちの少なくとも2つの出力に結合された第1の加算器回路と、第1の加算器回路の出力に結合された累算器とを備える、インメモリ計算のための回路。
【0089】
[0106]条項2. 第1の加算器回路の1つまたは複数の部分が、選択的に無効にされるように構成された、条項1に記載の回路。
【0090】
[0107]条項3. 複数の加算回路の各々が、複数の列のうちのそれぞれの1つ上の複数のメモリセルに結合された加算器ツリーを備える、条項1~2のいずれか1つに記載の回路。
【0091】
[0108]条項4. 複数の加算回路の各々が、別の累算器を備える、条項1~3のいずれか1つに記載の回路。
【0092】
[0109]条項5. 第1の加算器回路の第1の部分が、第1の計算サイクル中に選択的に無効にされるように構成され、第1の加算器回路の第2の部分が、第2の計算サイクル中に選択的に無効にされるように構成された、条項1~4のいずれか1つに記載の回路。
【0093】
[0110]条項6. 複数の加算回路の各々と複数の列のうちのそれぞれの1つとの間に結合された第2の加算器回路をさらに備える、条項1~5のいずれか1つに記載の回路。
【0094】
[0111]条項7. 第2の加算器回路が、ワード線のうちの2つまたはそれ以上に結合された加算器ツリーを備える、条項6に記載の回路。
【0095】
[0112]条項8. 加算器ツリーが、複数の列のうちのそれぞれの1つとワード線のうちの2つまたはそれ以上との上にあるメモリセルの出力信号を加算するように構成された、条項7に記載の回路。
【0096】
[0113]条項9. 第2の加算器回路と複数の列のうちのそれぞれの1つとの間の結合されたセンス増幅器をさらに備える、条項6に記載の回路。
【0097】
[0114]条項10. 第1の加算器回路が、複数の加算回路のうちの少なくとも2つの出力信号を加算するように構成された加算器ツリーを備える、条項1~9のいずれか1つに記載の回路。
【0098】
[0115]条項11. 加算器ツリーの1つまたは複数の加算器が、ビットシフトおよび加算回路を備える、条項10に記載の回路。
【0099】
[0116]条項12. 第1のクロック信号を出力するように構成された第1の出力を有し、第2のクロック信号を出力するように構成された第2の出力を有する、クロック生成器回路をさらに備え、ここにおいて、複数の加算回路が、クロック生成器の第1の出力に結合され、第1のクロック信号に基づいて動作するように構成され、第1の加算器回路が、クロック生成器の第2の出力に結合され、第2のクロック信号に基づいて動作するように構成され、第2のクロック信号が、第1のクロック信号とは異なる周波数を有する、条項1~11のいずれか1つに記載の回路。
【0100】
[0117]条項13. クロック生成器回路が、第1のクロック信号に基づいて第2のクロック信号を生成するように構成された周波数逓倍器を備える、条項12に記載の回路。
【0101】
[0118]条項14. 複数のハーフラッチ回路をさらに備え、各ハーフラッチ回路が、第1の加算器回路と複数の加算回路のうちの1つとの間に結合される、条項1~13のいずれか1つに記載の回路。
【0102】
[0119]条項15. 複数のメモリセルが、異なるアクティブ化入力に基づいて連続的にアクティブ化されるように構成され、累算器は、複数のメモリセルが連続的にアクティブ化された後に、第1の加算器回路の出力信号を累算するように構成された、条項1~14のいずれか1つに記載の回路。
【0103】
[0120]条項16. 累算器が、第1の加算器回路の出力に結合された唯一の累算器である、条項1~15のいずれか1つに記載の回路。
【0104】
[0121]条項17. 複数の列が、複数の列の第1のサブセットと複数の列の第2のサブセットとを備え、第1のサブセットが、第1の計算サイクル中にアクティブ化される、条項1~16のいずれか1つに記載の回路。
【0105】
[0122]条項18. 第2のサブセットが、第2の計算サイクル中にアクティブ化され、第2の計算サイクルが、第1の計算サイクルの後にある、条項17に記載の回路。
【0106】
[0123]条項19. ワード線の各々上のメモリセルのうちの少なくともいくつかが、ニューラルネットワークの重みのうちの1つを記憶するように構成され、複数の列の第1のサブセットの量が、重みのうちの1つのビットの量に関連する、条項17~18のいずれか1つに記載の回路。
【0107】
[0124]条項20. 複数の加算回路に結合された出力を有し、複数の列の第2のサブセットからの信号を処理することに関連するクロック信号を非アクティブ化するように構成された、クロックゲーティング回路をさらに備える、条項17~19のいずれか1つに記載の回路。
【0108】
[0125]条項21. 複数の加算回路の各々を介して、メモリの複数の列のうちのそれぞれの1つ上の出力信号を加算することと、ここにおいて、複数のメモリセルが、複数の列の各々上にあり、複数のメモリセルが、ニューラルネットワークの重みを表す複数のビットを記憶し、ここにおいて、複数の列の各々上の複数のメモリセルが、メモリの異なるワード線上にある、第1の加算器回路を介して、複数の加算回路のうちの少なくとも2つの出力信号を加算することと、累算器を介して、第1の加算器回路の出力信号を累算することとを備える、インメモリ計算のための方法。
【0109】
[0126]条項22. 重みの各々に関連するビット数に基づいて第1の加算器回路の1つまたは複数の部分を選択的に無効にすることをさらに備える、条項21に記載の方法。
【0110】
[0127]条項23. 複数の列のうちのそれぞれの1つ上の出力信号を加算することは、ワード線のうちの2つまたはそれ以上が連続的にアクティブ化された後に、複数の列のうちのそれぞれの1つ上のメモリセルの出力信号を累算することを備える、条項21~22のいずれか1つに記載の方法。
【0111】
[0128]条項24. 複数の加算回路の各々と複数の列のうちのそれぞれの1つとの間に結合された第2の加算器回路を介して、複数の列のうちのそれぞれの1つとワード線のうちの2つまたはそれ以上との上にあるメモリセルの出力信号を加算することをさらに備える、条項23に記載の方法。
【0112】
[0129]条項25. 第2の加算器回路と複数の列のうちのそれぞれの1つとの間に結合されたセンス増幅器を介して、複数の列のうちのそれぞれの1つとワード線のうちの2つまたはそれ以上との上にあるメモリセルの出力信号を検知することをさらに備え、ここにおいて、第2の加算器回路を介して加算することが、検知された出力信号に基づく、条項24に記載の方法。
【0113】
[0130]条項26. 複数の加算回路のうちの少なくとも2つの出力信号を加算することが、複数の加算回路のうちの少なくとも2つ上でビットシフトおよび加算演算を実施することを備える、条項21~25のいずれか1つに記載の方法。
【0114】
[0131]条項27. 第1のクロック信号を生成することと、ここにおいて、複数の加算回路が、第1のクロック信号に基づいて動作する、第2のクロック信号を生成することと、ここにおいて、第1の加算器回路が、第2のクロック信号に基づいて動作し、第2のクロック信号が、第1のクロック信号とは異なる周波数を有する、をさらに備える、条項21~26のいずれか1つに記載の方法。
【0115】
[0132]条項28. 異なるアクティブ化入力に基づいて複数のメモリセルを連続的にアクティブ化することをさらに備え、ここにおいて、第1の加算器回路の出力信号を累算することは、複数のメモリセルが連続的にアクティブ化された後に行われる、条項21~27のいずれか1つに記載の方法。
【0116】
[0133]条項29. 複数のメモリセルを連続的にアクティブ化することは、第1のアクティブ化サイクル中にアクティブ化入力の第1のセットを受信することと、第2のアクティブ化サイクル中にアクティブ化入力の第2のセットを受信することと、ここにおいて、第1の加算器回路の出力信号を累算することが、第1のアクティブ化サイクルおよび第2のアクティブ化サイクルの後に行われる、を備える、条項28に記載の方法。
【0117】
[0134]条項30. メモリの複数の列のうちのそれぞれの1つ上の出力信号を加算するための第1の手段と、ここにおいて、複数のメモリセルが、複数の列の各々上にあり、複数のメモリセルが、ニューラルネットワークの重みを表す複数のビットを記憶し、ここにおいて、複数の列の各々上の複数のメモリセルが、メモリの異なるワード線上にある、加算するための第1の手段のうちの少なくとも2つの出力信号を加算するための第2の手段と、加算するための第2の手段の出力信号を累算するための手段とを備える、インメモリ計算のための装置。
追加の考慮事項
[0135]上記の説明は、当業者が本明細書で説明された様々な態様を実施することを可能にするために提供された。本明細書で説明される例は、特許請求の範囲に記載される範囲、適用可能性、または態様を限定するものではない。これらの態様への様々な修正は当業者には容易に明らかであり、本明細書で定義された一般原理は他の態様に適用され得る。たとえば、本開示の範囲から逸脱することなく、説明される要素の機能および構成において変更が行われ得る。様々な例は、適宜に、様々な手順または構成要素を、省略、置換、または追加し得る。たとえば、説明される方法は、説明される順序とは異なる順序で実施され得、様々なステップが追加、省略、または組み合わせられ得る。また、いくつかの例に関して説明される特徴は、いくつかの他の例において組み合わせられ得る。たとえば、本明細書に記載される態様をいくつ使用しても、装置は実装され得、または方法は実施され得る。さらに、本開示の範囲は、本明細書に記載される本開示の様々な態様に加えて、またはそれらの態様以外に、他の構造、機能、または構造および機能を使用して実施されるそのような装置または方法をカバーするものとする。本明細書で開示される本開示のいずれの態様も、請求項の1つまたは複数の要素によって実施され得ることを理解されたい。
【0118】
[0136]本明細書で使用される「例示的」という語は、「例、事例、または例示の働きをすること」を意味する。「例示的」として本明細書で説明されるいかなる態様も、必ずしも他の態様よりも好適または有利であると解釈されるべきであるとは限らない。
【0119】
[0137]本明細書で使用される、項目のリスト「のうちの少なくとも1つ」を指す句は、単一のメンバーを含む、それらの項目の任意の組合せを指す。一例として、「a、b、またはcのうちの少なくとも1つ」は、a、b、c、a-b、a-c、b-c、およびa-b-c、ならびに複数の同じ要素をもつ任意の組合せ(たとえば、a-a、a-a-a、a-a-b、a-a-c、a-b-b、a-c-c、b-b、b-b-b、b-b-c、c-c、およびc-c-c、またはa、b、およびcの任意の他の順序)を包含するものとする。
【0120】
[0138]本明細書で使用される「決定すること」という用語は、多種多様なアクションを包含する。たとえば、「決定すること」は、算出すること、計算すること、処理すること、導出すること、調査すること、ルックアップすること(たとえば、テーブル、データベースまたは別のデータ構造においてルックアップすること)、確認することなどを含み得る。また、「決定すること」は、受信すること(たとえば、情報を受信すること)、アクセスすること(たとえば、メモリ中のデータにアクセスすること)などを含み得る。また、「決定すること」は、解決すること、選択すること、選定すること、確立することなどを含み得る。
【0121】
[0139]本明細書で開示される方法は、方法を達成するための1つまたは複数のステップまたはアクションを備える。本方法のステップおよび/またはアクションは、特許請求の範囲から逸脱することなく、互いに交換され得る。言い換えれば、ステップまたはアクションの特定の順序が指定されない限り、特定のステップおよび/またはアクションの順序および/または使用は、特許請求の範囲から逸脱することなく修正され得る。さらに、上記で説明された方法の様々な動作は、対応する機能を実施することが可能な任意の好適な手段によって実施され得る。それらの手段は、限定はしないが、回路、特定用途向け集積回路(ASIC)、またはプロセッサを含む、様々な(1つまたは複数の)ハードウェアおよび/またはソフトウェア構成要素および/またはモジュールを含み得る。概して、図に示されている動作がある場合、それらの動作は、同様の番号をもつ対応するカウンターパートのミーンズプラスファンクション構成要素を有し得る。たとえば、加算するための手段が、加算器ツリー510または重みシフト加算器ツリー512など、加算器ツリー、あるいは累算器606などの累算器を含み得る。累算するための手段が、アクティブ化シフト累算器516などの累算器を含み得る。検知するための手段が、SA602などのSAを含み得る。
【0122】
[0140]以下の特許請求の範囲は、本明細書で示された態様に限定されるものではなく、特許請求の範囲の文言に矛盾しない全範囲を与えられるべきである。請求項内で、単数形の要素への言及は、そのように明記されていない限り、「唯一無二の」を意味するものではなく、「1つまたは複数の」を意味するものである。別段に明記されていない限り、「いくつか」という用語は、1つまたは複数を指す。いかなるクレーム要素も、その要素が「ための手段」という句を使用して明確に具陳されていない限り、または方法クレームの場合には、その要素が「ためのステップ」という句を使用して具陳されていない限り、米国特許法第112条(f)の規定の下で解釈されるべきではない。当業者に知られている、または後に知られることになる、本開示全体にわたって説明された様々な態様の要素のすべての構造的および機能的等価物は、参照により本明細書に明確に組み込まれ、特許請求の範囲に包含されるものである。その上、本明細書で開示されるいかなることも、そのような開示が特許請求の範囲に明示的に具陳されているかどうかにかかわらず、公に供するものではない。
【国際調査報告】