JP7379581B2 - 特殊目的計算ユニットを用いたハードウェアダブルバッファリング - Google Patents

特殊目的計算ユニットを用いたハードウェアダブルバッファリング Download PDF

Info

Publication number
JP7379581B2
JP7379581B2 JP2022069548A JP2022069548A JP7379581B2 JP 7379581 B2 JP7379581 B2 JP 7379581B2 JP 2022069548 A JP2022069548 A JP 2022069548A JP 2022069548 A JP2022069548 A JP 2022069548A JP 7379581 B2 JP7379581 B2 JP 7379581B2
Authority
JP
Japan
Prior art keywords
data
memory
buffer
value
buffer allocation
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.)
Active
Application number
JP2022069548A
Other languages
English (en)
Other versions
JP2022106815A (ja
Inventor
テマム,オリビエ
カイタン,ハーシット
ナラヤナスワミ,ラビ
ウ,ドン・ヒョク
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of JP2022106815A publication Critical patent/JP2022106815A/ja
Priority to JP2023187546A priority Critical patent/JP2024020270A/ja
Application granted granted Critical
Publication of JP7379581B2 publication Critical patent/JP7379581B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0207Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0215Addressing or allocation; Relocation with look ahead addressing means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/08Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations, the intermediate ones not being accessible for either enqueue or dequeue operations, e.g. using a shift register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/30Providing cache or TLB in specific location of a processing system
    • G06F2212/302In image processor or graphics adapter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/454Vector or matrix data

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Human Computer Interaction (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Computing Systems (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Neurology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Medical Informatics (AREA)
  • Image Input (AREA)
  • Memory System (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Communication Control (AREA)

Description

背景
本明細書は、一般に、ハードウェアダブルバッファを有する特殊目的計算ユニットを用いて機械学習計算を行うことに関する。
ニューラルネットワークは、モデルの1つ以上の層を利用して、受信した入力について出力、たとえば分類を生成する機械学習モデルである。いくつかのニューラルネットワークは、外側層に加えて1つ以上の隠れ層を含む。各隠れ層の出力は、ネットワーク内の次の層、すなわちネットワークの次の隠れ層または出力層、への入力として用いられる。ネットワークの各層は、それぞれのパラメータセットの現在の値に従って、受信した入力から出力を生成する。
いくつかのニューラルネットワークは、1つ以上の畳み込みニューラルネットワーク層を含む。各畳み込みニューラルネットワーク層は、関連付けられた一組のカーネルを有する。カーネルは、重み入力のマトリックス構造として表現することができる。各畳み込み層は、カーネルを使用して、層への入力を処理する。層への一組の入力も、マトリックス構造として表現することができる。
概要
本明細書には、N次元テンソルのデータをダブルバッファリングするための特殊目的計算ユニットの使用に関連する技術が記載されている。
一般に、本明細書に記載されている主題の1つの革新的な局面は、データを転送するための装置において具体化することができる。上記装置は、少なくとも第1のメモリおよび第2のメモリを含む複数のメモリを含んでもよい。上記装置は、1つ以上の処理ユニットも含んでもよい。上記1つ以上の処理ユニットは、第1のデータ格納場所に格納され、第2のデータ格納場所に転送されているデータ要素のシーケンスのバッファメモリアドレスを決定するように構成されてもよい。上記シーケンスにおける上記データ要素のうちの1つ以上のデータ要素の各グループについて、上記1つ以上の処理ユニットは、複数の値の間で切り替え可能なバッファ割り当て要素の値を識別してもよく、上記複数の値の各々は、上記メモリのうちの異なる1つに対応する。上記1つ以上の処理ユニットは、上記バッファ割り当て要素の上記値に基づいて上記1つ以上のデータ要素のグループのバッファメモリアドレスを決定してもよい。上記バッファ割り当て要素の上記値が、上記第1のメモリに対応する第1の値である場合に、上記1つ以上の処理ユニットは、上記第1のメモリのベースアドレスと上記1つ以上のデータ要素のグループのメモリオフセット値との組み合わせに基づいて上記1つ以上のデータ要素のグループの上記バッファメモリアドレスを決定することによって、上記1つ以上のデータ要素のグループを上記第1のメモリに割り当ててもよい。上記バッファ割り当て要素の上記値が、上記第2のメモリに対応する、上記第1の値とは異なる第2の値である場合に、上記1つ以上の処理ユニットは、上記1つ以上のデータ要素のグループを上記第2のメモリに割り当てるために、上記第1のメモリの上記ベースアドレスと、上記第2のメモリの上記メモリアドレスオフセット値と、上記1つ以上のデータ要素のグループの上記メモリオフセット値との組み合わせに基づいて上記1つ以上のデータ要素のグループの上記メモリアドレスを決定することによって、上記データ要素を上記第2のメモリに割り当ててもよい。上記1つ以上の処理ユニットは、上
記データ要素のシーケンスの1つ以上のデータ要素の後続グループの上記バッファメモリアドレスを決定する前に、上記バッファ割り当て要素の上記値を切り替えてもよい。上記1つ以上の処理ユニットは、1つ以上のデータ要素の各グループの上記決定されたバッファメモリアドレスを用いて、各データ要素を上記第1または第2のメモリのそれぞれのメモリ場所に転送してもよい。
これらのおよび他の実現例の各々は、任意に、以下の特徴のうちの1つ以上を含んでもよい。いくつかの局面において、上記第1のメモリおよび上記第2のメモリは、各々が第1のデータ記憶容量を有するバッファである。上記第1のデータ格納場所および上記第2のデータ格納場所の各々は、少なくとも、上記第1のデータ記憶容量よりも大きな第2のデータ記憶容量を含んでもよい。
いくつかの局面において、上記第1のメモリおよび上記第2のメモリは、各々が第1のデータ記憶容量を有するバッファである。上記データ要素のシーケンスは、上記第1のデータ記憶容量を超えるデータ量を含んでもよい。
いくつかの局面において、上記バッファ割り当て要素の上記値および上記第2のメモリのメモリアドレスオフセット値に基づいて上記1つ以上のデータ要素のグループの上記バッファメモリアドレスを決定することは、上記データ要素のシーケンスを反復するために用いられる1つ以上のループの反復回数に基づいて上記1つ以上のデータ要素のグループの上記メモリオフセット値を決定することを含んでもよい。
いくつかの局面において、上記バッファ割り当て要素の上記値および上記第2のメモリのメモリアドレスオフセット値に基づいて上記1つ以上のデータ要素のグループの上記バッファメモリアドレスを決定することは、上記バッファ割り当て要素の上記値が上記第2の値であるたびに、(i)上記第1のメモリの上記ベースアドレスと、(ii)上記第2のメモリの上記メモリアドレスオフセット値と、(iii)上記1つ以上のデータ要素のグループの上記メモリオフセット値との合計を上記1つ以上のデータ要素のグループの上記バッファメモリアドレスとして決定することを含んでもよい。上記バッファ割り当て要素の上記値が上記第1の値であるたびに、(i)上記第1のメモリの上記ベースアドレスと、(ii)上記第2のメモリの上記メモリアドレス値から独立した上記1つ以上のデータ要素のグループの上記オフセット値との合計に基づいて、上記1つ以上のデータ要素のグループの上記バッファメモリアドレスが決定されてもよい。
いくつかの局面において、上記1つ以上のデータ要素のグループの上記メモリオフセット値は、N次元テンソルの各次元についてのループの反復回数に基づく。上記第2のメモリの上記メモリアドレスオフセット値は、上記第1のメモリのメモリアドレスと上記第2のメモリのアドレスとの間の差に基づいてもよい。
本明細書に記載されている主題は、以下の利点のうちの1つ以上を実現するように特定の実施形態において実現されてもよい。複数のメモリを用いることにより、単一のバッファの記憶容量を超えるデータをより迅速かつ効率的に転送することが可能になる。たとえば、8メガバイト(MB)のデータが第1のデータ格納場所から第2のデータ格納場所に転送され、バッファの容量が4MBに過ぎない場合、データは2つの4MBバッファの間で分割可能である。ネステッドループを用いて複数のバッファのメモリアドレスを決定することによって、アドレスを決定するための命令の数を減らすことができ、その結果、符号化が高密度になり、使用されるメモリリソースが少なくなり、および/または、必要なメモリリソースが少なくなる。各バッファメモリアドレス決定後に値を切り替えられるバッファ割り当て要素(たとえば、1ビットトグルカウンタ)を用いることにより、バッファ割り当てをより迅速に行うことが可能になり、データを複数のバッファに割り当てるた
めの命令総数を減らすことができる。また、データを第2のバッファに割り当てる前に、第1のバッファが一杯であるか否かを判断するのではなく、バッファ割り当て要素の値を切り替えることにより、処理をより迅速に行うことが可能になり、プロセッサに対する計算需要を少なくすることができる。命令が減少することにより、性能も高くなる。なぜなら、処理ユニットは、より少ない命令を処理してメモリアドレスを判断するからである。特殊目的ハードウェアユニットにおいてダブルバッファ命令を符号化することは、プロセッサがデータをバッファに割り当てるために実行するであろう計算サイクル数を減少させ、そのため、他の計算タスクのためのプロセッサ帯域幅を増加させる。
このおよび他の局面の他の実現例は、コンピュータ記憶装置に符号化された方法の動作を実行するように構成された対応するシステム、装置およびコンピュータプログラムを含む。1つ以上のコンピュータのシステムは、動作時にシステムに動作を実行させる、システムにインストールされたソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせによってそのように構成されてもよい。1つ以上のコンピュータプログラムは、データ処理装置によって実行されると装置に動作を実行させる命令を有することによってそのように構成されてもよい。
本明細書に記載されている主題の1つ以上の実現例の詳細を、添付の図面および以下の説明に記載する。主題の他の考えられる特徴、局面および利点は、明細書、図面および特許請求の範囲から明らかになるであろう。
計算システムの一例のブロック図である。 バッファを用いて転送されるデータの一例およびバッファ割り当て要素の一例を示す。 ダブルバッファリングを用いてデータを転送するためのプロセスの一例を示すフロー図である。
さまざまな図における同様の参照番号および名称は、同様の要素を示す。
詳細な説明
一般に、ソフトウェアアルゴリズムがN次元テンソルを処理するとき、ネステッドループが用いられる場合がある。各ループは、N次元テンソルのそれぞれの次元を横断することに関与し得る。多次元テンソルは、マトリックスまたは多次元マトリックスであってもよい。たとえば、二次元テンソルは、マトリックスであり、三次元テンソルは、複数の二次元マトリックスからなる三次元マトリックスである。N次元テンソルの各次元は、1つ以上の要素を含んでもよく、各要素は、それぞれのデータ値を格納してもよい。たとえば、テンソルは、プログラムにおける変数であってもよく、当該変数は、3つの次元を有してもよい。第1の次元は、300個の要素の長さを有してもよく、第2の次元は、1000個の要素の長さを有してもよく、第3の次元は、20個の要素の長さを有してもよい。当然のことながら、各次元において他の個数の要素も可能である。
ネステッドループにおいてテンソルを横断することは、要素のメモリアドレス値を計算して、当該要素の対応するデータ値をロードまたは格納することを含み得る。forループは、ネステッドループの一例であり、3つのループインデックス変数(たとえば、i、jおよびk)によって追跡される3つのループが、三次元テンソルを横断するようにネストされ得る。ニューラルネットワークでは、テンソルに関連付けられた1つ以上のドット積計算に要素の値が用いられてもよい。たとえば、当該要素の値は、対応するパラメータまたは重みを乗算されてもよい。テンソルの要素は、ネステッドforループを用いて順番に横断され、要素にアクセスして、要素の値を用いて1つ以上の計算を行ってもよい。
三次元テンソルの例を続けて、変数iによって追跡されるループを横断するために外側forループが用いられてもよく、変数jによって追跡されるループを横断するために中央forループループが用いられてもよく、変数kによって追跡されるループを横断するために内側forループが用いられてもよい。この例では、アクセスされる第1の要素は、(i=0,j=0,k=0)であってもよく、第2の要素は、(i=0,j=0,k=1)であってもよい、などである。
後述するように、処理ユニットが要素の値にアクセスして要素の値を用いて1つ以上の計算を行うことができるようにネステッドループを用いて順番に各要素のメモリアドレスを決定するのにテンソル横断ユニットを用いることができる。重みまたはパラメータの値も、ネステッドforループを用いて同様にアクセスされることができる。また、計算に用いられるおよび/または計算の出力のための重みまたはパラメータのアドレスを決定するのにテンソル横断ユニットを用いることができ、計算の出力は、ニューラルネットワークの隠れ層への入力として用いられてもよい。
本明細書に記載されている技術により、ループネストを符号化して、ダブルバッファリングを用いてデータを生成および消費することが可能になる。たとえば、テンソル要素に格納されたデータは、ダブルバッファリング技術を用いて1つのデータ格納場所から別のデータ格納場所に転送されてもよい。ニューラルネットワークの例では、1つの隠れ層の出力として判断されるアクティベーションは、別の隠れ層への入力として提供されてもよく、そのため、出力場所、すなわちニューラルネットワーク層の出力が格納されているメモリ場所から、入力場所、すなわちニューラルネットワーク層への入力が格納されているメモリ場所に転送されてもよい。別の例では、計算の出力を表すデータは、一時的なメモリ場所からより永久的なメモリ場所に転送されてもよい。これらの例の各々では、データをより迅速に転送することができ、データはダブルバッファリングを用いてより迅速に後続の処理に備えることができる。
ニューラルネットワーク計算が実行される前に当該計算のためのデータを収集するのにバッファリングを用いることができる。たとえば、ニューラルネットワーク層への入力は、計算を実行するプロセッサによる検索のために、特定の場所に格納されてもよい。特定の場所に格納されたデータを用いてニューラルネットワーク計算を実行している間に、次の機械学習計算のためのデータがバッファに移動され得る。前のニューラルネットワーク計算が完了すると、バッファに格納されたデータは、プロセッサによる検索のために、特定の場所に移動され得る。
ダブルバッファを用いてデータが生成または消費されているテンソル要素のバッファメモリアドレスを計算するのにループネストにおける1つ以上のループが用いられてもよい。転送されるデータの量が単一のバッファの記憶容量よりも大きい場合には、複数のバッファが用いられてもよい。たとえば、転送されるデータの量が単一のバッファの記憶容量の2倍である場合、データは2つのバッファの間で分割されてもよい。この例では、データの第1の部分は、第1のバッファに転送されてもよく、データの第2の部分は、第2のデータ格納場所に転送される前に第2のバッファに転送されてもよい。このように、第2のデータ格納場所に転送される前に全てのデータをバッファリングすることができる。
一例として、三次元テンソルの要素は、ニューラルネットワークによって分類される画像の特徴を表してもよい。第1の次元(Z)は、画像の幅を表してもよく、第2の次元(Y)は、画像の高さを表してもよく、第3の次元(X)は、画像内の画素のRGB値を表してもよい。画像を分類するために、各RGB値は、畳み込み層のフィルタ値を乗算されて、アクティベーションマップを生成してもよい。
テンソルの各RGB値にアクセスするためのメモリアドレスを決定するのにネステッドループを用いることができる。ネステッドループは、テンソルの各次元のためのループを含み得る。たとえば、Z次元(画像の幅)を横断するために外側ループ(z)が用いられてもよく、Y次元(画像の高さ)を横断するために中央ループ(y)が用いられてもよく、X次元(各画素の3つのRGB値)を横断するために内側ループ(x)が用いられてもよい。内側ループの各反復において、外側ループzおよび中央ループyの値によって表される画像の特定の画素の3つのRGB値のうちの1つについてメモリアドレスが決定される。たとえば、Z=0およびY=0によって表される画像の画素のR値のメモリアドレスは、z=0およびy=0(たとえば、z=0;y=0;x=0)である場合に内側ループxの第1の反復中に決定されてもよい。同様に、Z=5およびY=2によって表される画像の画素のG値のメモリアドレスは、z=5およびy=2(たとえば、z=5;y=2;x=2)である場合に内側ループxの第3の反復中に決定されてもよい。画像の各画素の3つのRGB値がバッファの容量を超える場合には、画像の各画素の3つのRGB値を表すデータは、2つ以上のバッファの間で分割可能である。
ネステッドループを用いて複数のバッファのバッファメモリアドレスを決定するために、バッファ割り当て要素の値は、バッファメモリアドレスを決定するために用いられるループの各反復後(または前)に切り替えられることができる。たとえば、2つのバッファが用いられ、データが2つのバッファの間で分割されている場合には、バッファ割り当て値は、2つの値の間で切り替えられてもよい。バッファ割り当て要素の第1の値(たとえば、0)は、データ要素(または、データ要素のグループ)を第1のバッファに割り当てるために用いられてもよく、バッファ割り当て要素の第2の値(たとえば、1)は、データ要素(または、データ要素のグループ)を第2のバッファに割り当てるために用いられてもよい。バッファ割り当て要素の値がループの反復にとっての第1の値である場合、ループのこの反復に対応するデータ要素が第1のバッファのバッファメモリアドレスに割り当てられてもよい。同様に、バッファ割り当て要素の値がループの反復にとっての第2の値である場合、ループのこの反復に対応するデータ要素が第2のバッファのバッファメモリアドレスに割り当てられてもよい。3つ以上のバッファが用いられる場合には、バッファ割り当て要素は、3つ以上の値、たとえば各バッファにつき1つの値、を有してもよい。
図1は、計算システム100の一例のブロック図である。一般に、コンピューティングシステム100は、入力104を処理して、出力116を生成する。コンピューティングシステム100は、線形代数計算、ニューラルネットワーク計算および他の計算を行うように構成されてもよい。入力104は、コンピューティングシステム100によって処理可能な任意の好適なデータであってもよい。コンピューティングシステム100は、処理ユニット102と、1つ以上の記憶媒体104と、テンソル横断ユニット106とを含む。
処理ユニット114は、1つ以上のプロセッサおよび/または1つ以上の有限状態マシン(finite-state machine:FSM)を含み得る。処理ユニット114のプロセッサは、テンソルの特定の要素にアクセスするための命令を実行することができる。プロセッサがこのような命令を処理すると、テンソル横断ユニット106は、処理ユニットが記憶媒体104にアクセスして特定の要素の値を表すデータを読み取ることができるように、テンソルの特定の要素のメモリアドレスを決定する。
FSMを含む処理ユニットでは、FSMは、テンソル要素のメモリアドレスをテンソル横断ユニット106から照会することができる。いくつかの実現例では、FSM108は、テンソルの特定の要素のアドレス値をテンソル横断ユニット106に継続的に照会する。次いで、FSMは、プロセッサが記憶媒体104にアクセスして特定の要素の値を表す
データを読み取ることができるように、受信したアドレス値を処理ユニット102のプロセッサに提供することができる。
たとえば、プログラムは、ネステッドループを含んでもよく、処理ユニット102は、ネステッドループに関連付けられた現在のインデックス変数値に従って、ネステッドループ内の二次元アレイ変数の要素にアクセスするための命令を実行してもよい。ネステッドループに関連付けられた現在のインデックス変数値に基づいて、テンソル横断ユニット106は、二次元アレイ変数の第1の要素のメモリアドレスからのオフセットを表すアドレスオフセット値を決定してもよい。次いで、処理ユニット102は、アドレスオフセット値を用いて、記憶媒体104から二次元アレイ変数の特定の要素にアクセスしてもよい。
記憶媒体104は、コンピューティングシステム100内の情報を格納する。いくつかの実現例では、記憶媒体104は、1つまたは複数の揮発性メモリユニットである。いくつかの他の実現例では、記憶媒体104は、1つまたは複数の不揮発性メモリユニットである。また、記憶媒体104は、フロッピー(登録商標)ディスク装置、ハードディスク装置、光ディスク装置もしくはテープ装置、フラッシュメモリもしくは他の同様のソリッドステートメモリ装置、または各種の装置(ストレージエリアネットワークもしくは他の構成における装置を含む)などの別の形態のコンピュータ読取可能媒体であってもよい。命令は、処理ユニット102によって実行されると、処理ユニット102に1つ以上のタスクを実行させる。
一般に、テンソル横断ユニット106は、1つ以上のテンソルに関連付けられた状態を判断する。いくつかの実現例では、当該状態は、ループ境界値、現在のループインデックス変数値、メモリアドレス値を決定するための部分アドレスオフセット値、および/または、ブランチループ境界を処理するためのプログラムカウンタ値を含んでもよい。テンソル横断ユニット106は、特定用途向け集積回路として実現されてもよい。
テンソル横断ユニット106は、テンソルインデックスをメモリアドレスに翻訳することができる。たとえば、テンソル横断ユニット106は、一組のN次元テンソルインデックスを一次元アドレス空間に翻訳してもよい。テンソル横断ユニット106は、テンソル要素のメモリアドレスを要素の次元インデックスの組み合わせ(たとえば、線形組み合わせ)にすることによってこのような翻訳を実行することができる。
テンソル横断ユニット106は、1つ以上のテンソル状態要素122と、数値演算ユニット124とを含み得る。テンソル状態要素122の各々は、記憶要素、たとえばレジスタまたは任意の好適な記憶回路であってもよい。テンソル状態要素122は、後述のバッファ割り当て要素を含み得る。数値演算ユニット124は、1つ以上の算術論理演算ユニット(arithmetic logic unit:ALU)および/または1つ以上のハードウェア加算器
を含み得る。数値演算ユニット124は、たとえばテンソル状態要素に格納された値に基づいてテンソル要素のメモリアドレスまたはメモリアドレスオフセット値を計算するのに用いられることができる。テンソル横断ユニットを用いてメモリアドレスを決定するための技術の一例については、2016年10月27日に出願された「ニューラルネットワーク計算タイル」と題される米国特許出願番号第15/335,769号および2016年2月3日に出願された「多次元テンソルにおけるデータへのアクセス」と題される米国特許出願番号第15/014,265号に記載されており、これらの特許出願の内容全体は引用によって本明細書に援用される。
また、テンソル横断ユニット106は、データを1つのデータ格納場所から別のデータ格納場所に転送するための一時的なメモリ場所、たとえばバッファ、のメモリアドレスを決定するように構成され得る。たとえば、記憶媒体104は、格納場所A112および格
納場所B114を含む複数のデータ格納場所を含み得る。各格納場所は、共通のメモリユニットまたは異なるメモリユニットの種々のメモリアドレスであってもよい。記憶媒体104は、バッファA116およびバッファB118を含む複数の一時メモリも含み得る。処理ユニット102は、データを第2のデータ格納場所(たとえば、格納場所B114)に転送する前に、データを第1のデータ格納場所(たとえば、格納場所A112)から1つ以上のバッファ(たとえば、バッファA116および/またはバッファB118)に転送することができる。
テンソル横断ユニット106は、バッファ(たとえば、ダブルバッファ)を用いてデータが生成または消費されているテンソル要素のバッファメモリアドレスを決定することができる。たとえば、2016年2月3日に出願された「多次元テンソルにおけるデータへのアクセス」と題される米国特許出願番号第15/014,265号に記載されている技術と同様に、テンソル横断ユニット106は、テンソルのベースバッファメモリアドレスおよびテンソル要素のテンソルインデックスに基づく各テンソル要素のアドレスオフセットを用いてテンソルインデックスをバッファメモリアドレスに翻訳することができる。
たとえば、米国特許出願番号第15/014,265号に記載されているように、テンソル状態要素122は、テンソルインデックス要素のグループ、テンソル境界要素のグループ、および次元乗数要素のグループを含み得る。要素の各グループは、M個の行とN個の列とを有する2Dアレイとして配置され得る。グループの各行は、テンソルのテンソルインデックス情報を表し得る。グループの各列は、テンソルに関連付けられたネステッドループインデックス変数値についての情報(たとえば、テンソルインデックス値、テンソル境界値または次元乗数値)を表し得る。たとえば、テンソルインデックス要素の2Dアレイにおける1つの列は、変数iについてのテンソルインデックス情報を表してもよく、1つの列は、変数iについてのテンソルインデックス情報を表してもよく、1つの列は、変数kについてのテンソルインデックス情報を表してもよい。
各テンソルインデックス要素は、ネステッドループにおけるループのネステッドループ変数を追跡することができる。たとえば、1つのテンソルインデックス要素は、ネステッドループインデックス変数iを追跡するように割り当てられてもよく、1つのテンソルインデックス要素は、ネステッドループインデックス変数jを追跡するように割り当てられてもよく、1つのテンソルインデックス要素は、ネステッドループインデックス変数kを追跡するように割り当てられてもよい。各テンソル境界要素は、テンソルインデックス要素における対応する要素を有する。各テンソル境界要素は、テンソルに関連付けられたネステッドループインデックス変数値についてのテンソル境界情報を表してもよい。たとえば、1つのテンソル境界要素は、ネステッドループインデックス変数iについてのテンソル境界情報を表してもよく、1つのテンソル境界要素は、ネステッドループインデックス変数jについてのテンソル境界情報を表してもよく、1つのテンソル境界要素は、ネステッドループインデックス変数kについてのテンソル境界情報を表してもよい。
各次元乗数要素は、テンソルインデックス要素における対応する要素に乗算される乗数を表し得る。要素のメモリアドレスを決定するために、テンソル横断ユニット106は、ネステッドループインデックス変数のテンソルインデックス要素に格納された値にネステッドループインデックス変数の乗数を乗算することによって、各ネステッドループインデックス変数のメモリアドレスオフセットを決定することができる。次いで、テンソル横断ユニット106は、全ての乗算結果を合計して、アクセスされる要素に対応するメモリアドレスを決定することができる。
テンソル横断ユニット106は、ネステッドループの内側ループの各反復後にテンソルインデックス要素を更新することができる。内側ループの各反復について、テンソル横断
ユニット106は、たとえば内側ループのテンソルインデックス要素をインクリメントすることによって、ループのテンソルインデックス要素を更新することができる。内側ループの更新されたテンソルインデックス要素が、内側ループのテンソル境界要素に格納された値に等しい場合には、テンソルインデックス要素がリセットされ得て、ネステッドにおける内側ループの次の外側ループのテンソルインデックス要素が更新され得る。次いで、テンソル横断ユニット120は、上記のように、テンソルインデックス要素にそれらの対応する乗数を乗算して結果を合計することによって、内側ループのこの反復に対応する次の要素のメモリアドレスを決定することができる。
データを転送するために2つ以上のバッファが用いられる場合、テンソル横断ユニット106は、バッファ割り当て要素も用いて、各テンソル要素またはテンソル要素のグループをバッファのうちの1つに割り当てることができる。いくつかの実現例では、テンソル横断ユニット106は、バッファ割り当て要素の値が1つの値である場合にさらなるオフセットをバッファメモリアドレスに追加することによって1つ以上のテンソル要素のグループをバッファのうちの1つに割り当て、バッファ割り当て要素が異なる値である場合にさらなるオフセット値をバッファメモリアドレスに追加しないことによって1つ以上のテンソル要素のグループを異なるバッファに割り当てることができる。
たとえば、ベースメモリアドレスは、第1のバッファの第1のメモリアドレスに対応してもよい。第2のバッファの第1のメモリアドレスは、ベースメモリアドレスから特定数のアドレスだけオフセットされてもよい。この例では、テンソル要素を第1のバッファのメモリアドレスに割り当てるために、テンソル横断ユニット106は、ベースメモリアドレスをテンソル要素のメモリオフセット値と組み合わせてもよい(たとえば、加算してもよい)。テンソル要素のメモリオフセット値は、2016年2月3日に出願された「多次元テンソルにおけるデータへのアクセス」と題される米国特許出願番号第15/014,265号に記載されているように、テンソルを横断するために用いられるネステッドループのテンソルインデックスに基づいて決定されてもよい。
テンソル要素を第2のバッファのメモリアドレスに割り当てるために、テンソル横断ユニット106は、ベースメモリアドレスをテンソル要素のメモリオフセット値および第2のバッファのメモリアドレスオフセット値(たとえば、第2のバッファの第1のメモリアドレスを第1のバッファの第1のメモリアドレスからオフセットさせる特定数のアドレス)と組み合わせてもよい(たとえば、加算してもよい)。
テンソル横断ユニット106は、バッファ割り当て要素の値を用いて、テンソル要素を第2のバッファにいつ割り当てるかを判断するため、第2のバッファのメモリアドレスオフセット値をベースメモリアドレスおよびテンソル要素のメモリオフセット値と組み合わせることによってテンソル要素のバッファメモリアドレスを決定することができる。たとえば、バッファ割り当て要素の値が第1の値である場合、テンソル横断ユニット106は、メモリアドレスオフセット値をベースメモリアドレスおよびテンソル要素のメモリオフセット値と組み合わせないことによってテンソル要素を第1のバッファに割り当ててもよい。バッファ割り当て要素の値が、第1の値とは異なる第2の値である場合、テンソル横断ユニット106は、メモリアドレスオフセット値をベースメモリアドレスおよびテンソル要素のメモリオフセット値と組み合わせることによってテンソル要素を第2のバッファに割り当ててもよい。
いくつかの実現例では、テンソル横断ユニット106は、たとえばネステッドループを用いて、あるシーケンスにおける一連のテンソル要素のバッファメモリアドレスを決定してもよい。この例では、処理ユニット102は、特定のループの各反復、たとえば最内ループの各反復について、1つ以上のテンソル要素のグループのバッファメモリアドレスを
テンソル横断ユニット106から要求することができる。テンソル横断ユニット106は、ループインデックスに基づいて、ループの反復に対応するテンソル要素のグループのメモリオフセット値を決定することができる。また、テンソル横断ユニット106は、上記のように、バッファ割り当て要素の値に基づいて、テンソル要素のグループを第1のバッファに割り当てるか第2のバッファ(または、3つ以上の場合にはさらなるバッファ)に割り当てるかを判断することができる。テンソル横断ユニット106は、ベースメモリアドレス、テンソル要素のグループのメモリオフセット値、およびバッファ割り当て要素の値によっては第2のバッファのメモリオフセット値に基づいて、テンソル要素のグループのバッファメモリアドレスを決定することができる。
当該シーケンスにおけるテンソル要素のグループのバッファメモリアドレスを決定した後、テンソル横断ユニットは、バッファ割り当て要素の値を切り替えることができる。たとえば、2つのバッファがある場合には、テンソル横断ユニット106は、各バッファメモリアドレス決定後に2つの値の間で値を切り替えてもよい。この例では、テンソル横断ユニット106は、バッファ割り当て要素の値が0であるときにはテンソル要素のグループを第1のバッファに割り当て、バッファ割り当て要素の値が1であるときにはテンソル要素のグループを第2のバッファに割り当てることができる。第1バッファメモリアドレス決定のために、バッファ割り当て要素は、0という値を有してもよい。この例では、テンソル横断ユニット106は、シーケンスにおけるテンソル要素の第1のグループを第1のバッファに割り当てることができる。次いで、テンソル横断ユニット106は、バッファ割り当て要素の値を1に切り替えることができる。したがって、テンソル横断ユニット106は、シーケンスにおけるテンソル要素の第2のグループを第2のバッファに割り当てることができる。テンソル横断ユニット106は、テンソル要素の他の全てのグループが第1のバッファに割り当てられるように、各バッファメモリアドレス決定後に値を切り替え続けることができる。
いくつかの実現例では、各バッファメモリアドレス決定のためにテンソル要素のグループ(たとえば、テンソルのサブテンソル)がバッファに割り当てられるように、きめの粗いトグリング(toggling)が用いられる。いくつかの実現例では、各メモリアドレス決定において各々の個々のテンソル要素がバッファに割り当てられるように、きめ細かいトグリングが用いられる。
テンソル横断ユニットが2つの1キロバイト(kB)バッファを有し、これらのバッファを用いて4kBのデータが転送される例を考えてみたい。ループネストの一例は、2つのバッファの間を行ったり来たりする外側ループを含み得て、内側ループは、このバッファに含まれるデータの各部分を識別するのに用いられ得る。たとえば、ネステッドループは、以下を含み得る。
Figure 0007379581000001
この例では、内側ループ「j」は、バッファに含まれる1kBのデータを識別するのに用いられ、外側ループ「i」は、2つのバッファを切り替えるのに用いられる。たとえば、「i」が奇数値を有する場合、1kBのデータ要素のグループが第1のバッファに割り当てられてもよい。「i」が偶数値を有する場合、1kBのデータが第2のバッファに割り当てられてもよい。したがって、この例では、ループネストは、「i」の値に基づいて2つのバッファの間を行ったり来たりする。
3つ以上のバッファがある場合には、テンソル横断ユニット106は、3つ以上の異なる値、たとえば各バッファについて固有の値、の間でバッファ割り当て要素を切り替えてもよい。たとえば、3つのバッファがある場合には、テンソル横断ユニット106は、バッファ割り当て要素が第1の値を有するときにテンソル要素のグループを第1のバッファに割り当てることができ、テンソル横断ユニット106は、バッファ割り当て要素が第2の値を有するときにテンソル要素のグループを第2のバッファに割り当てることができ、テンソル横断ユニット106は、バッファ割り当て要素が第3の値を有するときにテンソル要素のグループを第3のバッファに割り当てることができる。
別の例では、各々が1MBの記憶容量を有する2つのバッファがあってもよく、これらのバッファを通じて3MBのデータを転送する必要があってもよい。この例では、第1の1MBが2つのバッファのうちの第1のバッファに割り当てられることができ、第2の1MBが2つのバッファのうちの第2のバッファに割り当てられることができる。次いで、たとえばプロセッサによって第1の1MBが消費された後、第3の1MBを第1のバッファに移動させることができる。
いくつかの実現例では、テンソル横断ユニット106は、各バッファメモリアドレス決定後にバッファ割り当て要素の値を切り替えるのではなく、交互のバッファ割り当て値のシーケンスを取得することができる。たとえば、交互のバッファ割り当て値のシーケンスは、0および1が交互になったシーケンスであってもよい。各メモリアドレス決定後に、テンソル横断ユニット106は、シーケンスにおける次の値に移動して、次の値に基づいてテンソル要素のグループを適切なバッファに割り当てることができる。
図2は、バッファを用いて転送されるデータの一例およびバッファ割り当て要素の一例を示す。この例では、データ要素、たとえばテンソル要素、の8個のグループのシーケンスが、2つのバッファを用いて第1のデータ格納場所205から第2のデータ格納場所215に転送されている。バッファ割り当て値のシーケンス210は、データ要素の各グループを2つのバッファのうちの1つに割り当てるのに用いられる。たとえば、データ要素のグループが、そのシーケンス内で、0という値を有するバッファ割り当て要素と同じ位置にある場合、データ要素のグループは第1のバッファに割り当てられる。データ要素のグループが、そのシーケンス内で、1という値を有するバッファ割り当て要素と同じ位置にある場合、データ要素のグループは、第1のバッファとは異なる第2のバッファに割り当てられる。
したがって、この例では、第1、第3、第5および第7のバッファ割り当て値が0であるので、データ要素グループ「0」、「2」、「4」および「6」が第1のバッファに割り当てられる。同様に、第2、第4、第6および第8のバッファ割り当て値が1であるので、データ要素グループ「1」、「3」、「5」および「7」が第2のバッファに割り当てられる。したがって、各々がデータ要素の4個のグループを格納するための記憶容量を有する2つのバッファを用いて、データ要素の8個のグループをバッファリングすることができる。
図3は、ダブルバッファリングを用いてデータを転送するためのプロセス300の一例を示すフロー図である。プロセス300は、1つ以上のコンピュータのシステム、たとえば図1のコンピューティングシステム110、によって実行されてもよい。
当該システムは、第1のバッファおよび第2のバッファを用いたダブルバッファリングのために指定されたデータ要素のシーケンスを識別する(302)。データ要素のシーケンスは、ダブルバッファリングのために指定されたテンソル要素のシーケンスであっても
よい。テンソル要素は、N次元テンソルの一部であってもよい。たとえば、テンソルは、ネステッドループを用いて横断されてもよく、各ループは、N次元テンソルのそれぞれの次元を横断することに関与する。
データ要素のシーケンスは、ダブルバッファリングのために指定された特定の次元のテンソル要素を全て含んでもよい。たとえば、ネステッドループを含むプログラムは、特定の次元に対応するループをダブルバッファリングされるループとして指定するコードを含んでもよい。特定の三次元テンソルの例では、テンソルは、インデックスx、yおよびzを有する3つのループを用いて横断されてもよい。この例では、テンソルのZ次元は、インデックスzを有する外側ループを用いて横断されてもよく、テンソルのY次元は、インデックスyを有する中央ループを用いて横断されてもよく、テンソルのX次元は、インデックスxを有する内側ループを用いて横断されてもよい。内側ループは、ニューラルネットワーク計算のためのデータを迅速にバッファリングするようにダブルバッファリングのために指定されてもよい。
当該システムは、シーケンスにおけるデータ要素の各グループのバッファメモリアドレスを決定する(304)。各グループは、1つ以上のデータ要素を含み得る。たとえば、きめ細かいトグリングが用いられる場合、各グループは、1つのデータ要素を含み得る。きめの粗いトグリングが用いられる場合、各グループは、複数のデータ要素、たとえば最大で特定量のメモリまたは特定数のデータ要素まで、を含み得る。
いくつかの実現例では、当該システムは、バッファメモリアドレスを一度に一つずつ決定する。前の例を続けて、当該システムは、内側ループの各反復についてバッファメモリアドレスを決定してもよい。なぜなら、内側ループの各反復は、ダブルバッファリングのために指定された特定のテンソル要素に対応するからである。当該システムは、構成動作306~314を用いてデータ要素のシーケンスのバッファメモリアドレスを決定してもよい。
当該システムは、データ要素のシーケンスにおけるデータ要素のグループのバッファ割り当て要素の値を識別する(306)。いくつかの実現例では、上記のように、当該システムは、各バッファメモリアドレス決定後に、たとえばダブルバッファリングのために指定されたループの各反復後に、バッファ割り当て要素の値を切り替えることができる。この例では、当該システムは、バッファ割り当て要素の現在の値をこのデータ要素のバッファ割り当て要素の値として識別することができる。バッファ割り当て要素の値は、データ要素のグループを適切なバッファに割り当てるのに用いられる。
当該システムは、バッファ割り当て要素の値および第2のバッファのメモリアドレスオフセット値に基づいて、データ要素のグループのバッファメモリアドレスオフセット値を決定する(308)。上記のように、バッファのベースメモリアドレスは、第1のバッファの第1のメモリアドレスに対応してもよい。第2のバッファの第1のメモリアドレスは、ベースメモリアドレスから特定数のアドレスだけオフセットされてもよい。第2のバッファのメモリアドレスオフセット値は、特定数のアドレスと等しくてもよい。
データ要素のグループのバッファメモリアドレスオフセット値を決定するために、当該システムは、バッファ割り当て要素の値が第1の値であるか第2の値(または、3つ以上のバッファがある場合にはより多くの値)であるかを判断する。バッファ割り当て要素が第1の値である場合、当該システムは、データ要素のグループのバッファメモリアドレス値を決定する際に第2のバッファのメモリアドレスオフセット値を用いないことによってデータ要素のグループを第1のバッファに割り当てることができる。その代わりに、当該システムは、上記のように、ネステッドループのループインデックスに基づいて決定され
るデータ要素のメモリオフセット値を用いることができる。
バッファ割り当て要素が第2の値である場合、当該システムは、データ要素のグループのメモリオフセット値を第2のバッファのメモリアドレスオフセット値と組み合わせることによってデータ要素のグループを第2のバッファに割り当てることができる。たとえば、当該システムは、データ要素のグループのメモリオフセット値と第2のバッファのメモリアドレスオフセット値との合計をデータ要素のグループのバッファメモリアドレスオフセット値として決定してもよい。
いくつかの実現例では、当該システムは、1という値を有するバッファ割り当て要素の値の論理積をとってその結果に第2のバッファのメモリアドレスオフセット値を乗算し、この結果をデータ要素のグループのメモリオフセット値に加算することによって、データ要素のグループのバッファメモリアドレスオフセット値を計算することができる。この例では、バッファ割り当て要素が0という値を有する場合、データ要素のグループのバッファメモリアドレスオフセット値は、データ要素のグループのメモリオフセット値に等しい。バッファ割り当て要素が1という値を有する場合、データ要素のグループのバッファメモリアドレスオフセット値は、第2のバッファのメモリアドレスオフセット値+データ要素のグループのメモリオフセット値に等しい値を有する。いくつかの実現例では、どのバッファを用いるかを判断するのに1ビットトグルカウンタを用いることができる。
当該システムは、バッファのベースアドレスおよびバッファメモリアドレスオフセット値に基づいてデータ要素のグループのバッファメモリアドレスを決定する(310)。たとえば、当該システムは、バッファのベースアドレス(たとえば、第1のバッファの第1のメモリアドレス)をバッファメモリアドレスオフセット値に加算することによってデータ要素のグループのバッファメモリアドレスを決定してもよい。
当該システムは、シーケンスにおける各データ要素についてバッファメモリアドレスが決定されたか否かを判断する(312)。決定されていない場合、当該システムは、次のデータ要素のバッファ割り当て要素の値を切り替える。このようにして、次のデータ要素が現在のデータ要素とは異なるバッファに割り当てられる。
シーケンスにおける各データ要素についてバッファメモリアドレスが決定された場合、当該システムは、決定されたバッファメモリアドレスに基づいて、データ要素に格納されたデータをバッファに転送する(314)。次いで、データは、たとえばニューラルネットワーク計算で使用されるように、バッファから第2のデータ格納場所に転送されてもよい。
本明細書に記載されている主題および機能動作の実施形態は、デジタル電子回路で実現されてもよく、有形に具体化されたコンピュータソフトウェアもしくはファームウェアで実現されてもよく、本明細書に開示されている構造およびそれらの構造的等価物を含むコンピュータハードウェアで実現されてもよく、またはそれらのうちの1つ以上の組み合わせで実現されてもよい。本明細書に記載されている主題の実施形態は、1つ以上のコンピュータプログラム、すなわちデータ処理装置による実行またはデータ処理装置の動作の制御のために有形の非一時的なプログラムキャリアに符号化されたコンピュータプログラム命令の1つ以上のモジュール、として実現されてもよい。代替的にまたは加えて、プログラム命令は、好適な受信機装置に送信されてデータ処理装置によって実行されるように情報を符号化するように生成された人工的に生成された伝搬信号、たとえば機械によって生成された電気信号、光信号または電磁信号に符号化されてもよい。コンピュータ記憶媒体は、機械読取可能な記憶装置、機械読取可能な記憶基板、ランダムもしくはシリアルアクセスメモリ装置、またはそれらのうちの1つ以上の組み合わせであってもよい。
本明細書に記載されているプロセスおよび論理フローは、1つ以上のプログラム可能なコンピュータが、入力データを操作して出力を生成することによって機能を実行するように1つ以上のコンピュータプログラムを実行することによって、実行されてもよい。また、プロセスおよび論理フローは、特殊目的論理回路、たとえばFPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)またはGPGPU(汎用グラフィックスプロセシングユニット)、によって実行されてもよく、装置は、特殊目的論理回路、たとえばFPGA、ASICまたはGPGPUとして実現されてもよい。
コンピュータプログラムの実行に適したコンピュータは、一例として、汎用マイクロプロセッサもしくは特殊目的マイクロプロセッサもしくはそれら両方、またはその他の種類の中央処理装置を含み、それらに基づくものであってもよい。一般に、中央処理装置は、リードオンリメモリまたはランダムアクセスメモリまたはそれら両方から命令およびデータを受信する。コンピュータの必須の要素は、命令を実施または実行するための中央処理装置、ならびに、命令およびデータを格納するための1つ以上のメモリ装置である。一般に、コンピュータは、データを格納するための1つ以上の大容量記憶装置(たとえば磁気ディスク、光磁気ディスクもしくは光ディスク)も含み、または、1つ以上の大容量記憶装置からデータを受信するように、もしくは1つ以上の大容量記憶装置にデータを送信するように、もしくは1つ以上の大容量記憶装置に対してデータを送受信するように動作可能に結合される。しかし、コンピュータは、このような装置を有していなくてもよい。さらに、コンピュータは、別の装置、たとえばほんの数例を挙げると、携帯電話、パーソナルデジタルアシスタント(PDA)、携帯オーディオまたはビデオプレーヤ、ゲーム機、グローバルポジショニングシステム(GPS)受信機、または携帯型記憶装置(たとえば、ユニバーサルシリアルバス(USB)フラッシュドライブ)に組み込まれてもよい。
コンピュータプログラム命令およびデータの格納に適したコンピュータ読取可能な媒体は、全ての形態の不揮発性メモリ、媒体およびメモリ装置を含み、これらの不揮発性メモリ、媒体およびメモリ装置は、一例として、半導体メモリ装置(たとえば、EPROM、EEPROMおよびフラッシュメモリ装置)、磁気ディスク(たとえば、内部ハードディスクまたはリムーバブルディスク)、光磁気ディスク、ならびにCD ROMおよびDVD-ROMディスクを含む。プロセッサおよびメモリは、特殊目的論理回路によって補完されてもよく、または特殊目的論理回路に組み入れられてもよい。
本明細書は、多くの具体的な実現例の詳細を含んでいるが、これらは発明またはクレームされ得るものの範囲を限定するものとして解釈されるべきではなく、特定の発明の特定の実施形態に特有であり得る特徴の説明として解釈されるべきである。別々の実施形態の文脈で本明細書に記載されている特定の特徴は、単一の実施形態において組み合わせて実現されてもよい。逆に、単一の実施形態の文脈で記載されているさまざまな特徴は、複数の実施形態において別々に、または任意の好適な部分的組み合わせで実現されてもよい。さらに、特徴は、特定の組み合わせで作用するものとして上記され、そのように最初から記載され得るが、記載されている組み合わせからの1つ以上の特徴は、場合によっては当該組み合わせから削除されてもよく、記載されている組み合わせは、部分的組み合わせまたは部分的組み合わせの変形例に向けられてもよい。
同様に、動作は特定の順序で図面に記載されているが、これは、このような動作が、望ましい結果を達成するために、示されている特定の順序またはシーケンシャルな順序で実行されなければならないものとして理解されるべきではなく、または望ましい結果を達成するために全ての示されている動作を実行しなければならないものとして理解されるべきではない。特定の状況では、マルチタスクおよび並列処理が有利である場合もある。さらに、上記の実施形態におけるさまざまなシステムモジュールおよびコンポーネントの分離
は、全ての実施形態においてこのような分離が必要であるものとして理解されるべきではなく、記載されているプログラムコンポーネントおよびシステムは、一般に、単一のソフトウェア製品に一体化されてもよく、または複数のソフトウェア製品にパッケージングされてもよい、ということが理解されるべきである。
主題の特定の実施形態について説明してきた。他の実施形態も以下の特許請求の範囲の範囲内である。たとえば、請求項に記載されている動作は、異なる順序で実行されても依然として望ましい結果を達成することができる。一例として、添付の図面に示されているプロセスは、望ましい結果を達成するために、示されている特定の順序またはシーケンシャルな順序を必ずしも必要としない。特定の実現例では、マルチタスクおよび並列処理が有利である場合もある。

Claims (20)

  1. データを転送するための装置であって、
    複数のメモリと、
    1つまたは複数のプロセッサとを備え、前記1つまたは複数のプロセッサは、
    第1のデータ格納場所に格納され、第2のデータ格納場所に転送されているN次元テンソルのデータのバッファメモリアドレスを決定するように配置され、Nは、2以上の整数であり、前記決定することは、
    複数の値の間で切り替え可能なバッファ割り当て要素の現在の値を識別することを備え、前記複数の値の各々は、前記複数のメモリのうちの異なる1つに対応し、前記決定することはさらに、
    前記バッファ割り当て要素の前記現在の値に対応する前記メモリが一杯になるまで、前記バッファ割り当て要素の前記現在の値に対応する前記N次元テンソルの前記データの第1の部分を前記メモリに割り当てることを備え、前記割り当てることは、
    少なくとも(i)前記複数のメモリのベースアドレスと、(ii)前記バッファ割り当て要素の前記現在の値に対応する前記メモリのメモリアドレスオフセット値と、(iii)データ要素のメモリオフセット値との組み合わせに基づいて、データの前記第1の部分の各データ要素の前記バッファメモリアドレスを決定することを含み、各データ要素の前記メモリオフセット値は、前記N次元テンソルを横断するために使用されるループネストにおける複数のループの現在のインデックス値に基づき、前記1つまたは複数のプロセッサはさらに、
    各データ要素の前記決定されたバッファメモリアドレスを使用して、前記N次元テンソルの前記データの前記第1の部分を、前記バッファ割り当て要素の前記現在の値に対応する前記メモリのそれぞれのメモリ場所に転送するように配置され、
    前記N次元テンソルの前記データの次の部分のバッファメモリアドレスを決定する前に、前記バッファ割り当て要素の前記値を切り替えるように配置される、装置。
  2. 前記1つまたは複数のプロセッサは、前記バッファ割り当て要素の前記現在の値に対応する前記メモリが一杯になったと判断したことに応答して、前記バッファ割り当て要素の前記値を切り替えるように配置される、請求項1に記載の装置。
  3. 前記メモリのうちの1つの前記メモリアドレスオフセット値はゼロであり、各々の他のメモリの前記メモリアドレスオフセット値はゼロでない、請求項1または2に記載の装置。
  4. 前記複数のメモリの各メモリは、各々が第1のデータ記憶容量を有するバッファであり、
    前記第1のデータ格納場所および前記第2のデータ格納場所の各々は、少なくとも、前記第1のデータ記憶容量よりも大きな第2のデータ記憶容量を備える、請求項1~3のいずれか一項に記載の装置。
  5. 各データ要素の前記メモリオフセット値は、前記N次元テンソルの各次元についてのループの反復回数に基づく、請求項1~4のいずれか一項に記載の装置。
  6. 前記1つまたは複数のプロセッサは、前記N次元テンソルの前記データの前記第1の部分を、前記バッファ割り当て要素の前記現在の値に対応する前記メモリの前記それぞれのメモリ場所から前記第2のデータ格納場所に転送するように配置される、請求項1~5のいずれか一項に記載の装置。
  7. 前記バッファ割り当て要素の前記値は、前記バッファ割り当て要素の前記値を切り替えるために使用されるループのループ変数であり、
    前記N次元テンソルの前記データの次の部分のバッファメモリアドレスを決定する前に前記バッファ割り当て要素の前記値を切り替えることは、前記バッファ割り当て要素の前記現在の値に対応する前記メモリが一杯になったと判断したことに応答して前記ループ変数を反復することを備える、請求項1~6のいずれか一項に記載の装置。
  8. データを転送するためのコンピューティングシステムによって実行される方法であって、
    第1のデータ格納場所に格納され、第2のデータ格納場所に転送されているN次元テンソルのデータのバッファメモリアドレスを決定するステップを備え、Nは、2以上の整数であり、前記決定するステップは、
    複数の値の間で切り替え可能なバッファ割り当て要素の現在の値を識別するステップを備え、前記複数の値の各々は、複数のメモリのうちの異なる1つに対応し、前記決定するステップはさらに、
    前記バッファ割り当て要素の前記現在の値に対応する前記メモリが一杯になるまで、前記バッファ割り当て要素の前記現在の値に対応する前記N次元テンソルの前記データの第1の部分を前記メモリに割り当てるステップを備え、前記割り当てるステップは、
    少なくとも(i)前記複数のメモリのベースアドレスと、(ii)前記バッファ割り当て要素の前記現在の値に対応する前記メモリのメモリアドレスオフセット値と、(iii)データ要素のメモリオフセット値との組み合わせに基づいて、データの前記第1の部分の各データ要素の前記バッファメモリアドレスを決定するステップを含み、各データ要素の前記メモリオフセット値は、前記N次元テンソルを横断するために使用されるループネストにおける複数のループの現在のインデックス値に基づき、前記方法はさらに、
    各データ要素の前記決定されたバッファメモリアドレスを使用して、前記N次元テンソルの前記データの前記第1の部分を、前記バッファ割り当て要素の前記現在の値に対応する前記メモリのそれぞれのメモリ場所に転送するステップと、
    前記N次元テンソルの前記データの次の部分のバッファメモリアドレスを決定する前に、前記バッファ割り当て要素の前記値を切り替えるステップとを備える、方法。
  9. 前記バッファ割り当て要素の前記値は、前記バッファ割り当て要素の前記現在の値に対応する前記メモリが一杯になったと判断したことに応答して切り替えられる、請求項8に記載の方法。
  10. 前記メモリのうちの1つの前記メモリアドレスオフセット値はゼロであり、各々の他のメモリの前記メモリアドレスオフセット値はゼロでない、請求項8または9に記載の方法。
  11. 前記複数のメモリの各メモリは、各々が第1のデータ記憶容量を有するバッファであり、
    前記第1のデータ格納場所および前記第2のデータ格納場所の各々は、少なくとも、前記第1のデータ記憶容量よりも大きな第2のデータ記憶容量を備える、請求項8~10のいずれか一項に記載の方法。
  12. 各データ要素の前記メモリオフセット値は、前記N次元テンソルの各次元についてのループの反復回数に基づく、請求項8~11のいずれか一項に記載の方法。
  13. 前記N次元テンソルの前記データの前記第1の部分を、前記バッファ割り当て要素の前記現在の値に対応する前記メモリの前記それぞれのメモリ場所から前記第2のデータ格納場所に転送するステップをさらに備える、請求項8~12のいずれか一項に記載の方法。
  14. 前記バッファ割り当て要素の前記値は、前記バッファ割り当て要素の前記値を切り替えるために使用されるループのループ変数であり、
    前記N次元テンソルの前記データの次の部分のバッファメモリアドレスを決定する前に前記バッファ割り当て要素の前記値を切り替えるステップは、前記バッファ割り当て要素の前記現在の値に対応する前記メモリが一杯になったと判断したことに応答して前記ループ変数を反復するステップを備える、請求項8~13のいずれか一項に記載の方法。
  15. データを転送するためのシステムであって、
    複数のメモリと、
    1つまたは複数の数値演算ユニットを含む1つまたは複数の処理ユニットとを備え、前記1つまたは複数の処理ユニットは、
    第1のデータ格納場所に格納され、第2のデータ格納場所に転送されているN次元テンソルのデータのバッファメモリアドレスを決定するように構成され、Nは、2以上の整数であり、前記決定することは、
    複数の値の間で切り替え可能なバッファ割り当て要素の現在の値を識別することを備え、前記複数の値の各々は、前記複数のメモリのうちの異なる1つに対応し、前記決定することはさらに、
    前記バッファ割り当て要素の前記現在の値に対応する前記メモリが一杯になるまで、前記バッファ割り当て要素の前記現在の値に対応する前記N次元テンソルの前記データの第1の部分を前記メモリに割り当てることを備え、前記割り当てることは、
    少なくとも(i)前記複数のメモリのベースアドレスと、(ii)前記バッファ割り当て要素の前記現在の値に対応する前記メモリのメモリアドレスオフセット値と、(iii)データ要素のメモリオフセット値との組み合わせに基づいて、データの前記第1の部分の各データ要素の前記バッファメモリアドレスを決定することを含み、各データ要素の前記メモリオフセット値は、前記N次元テンソルを横断するために使用されるループネストにおける複数のループの現在のインデックス値に基づき、前記1つまたは複数の処理ユニットはさらに、
    各データ要素の前記決定されたバッファメモリアドレスを使用して、前記N次元テンソルの前記データの前記第1の部分を、前記バッファ割り当て要素の前記現在の値に対応する前記メモリのそれぞれのメモリ場所に転送するように構成され、
    前記N次元テンソルの前記データの次の部分のバッファメモリアドレスを決定する前に、前記バッファ割り当て要素の前記値を切り替えるように構成される、システム。
  16. 前記1つまたは複数の処理ユニットは、前記バッファ割り当て要素の前記現在の値に対応する前記メモリが一杯になったと判断したことに応答して、前記バッファ割り当て要素の前記値を切り替えるように配置される、請求項15に記載のシステム。
  17. 前記メモリのうちの1つの前記メモリアドレスオフセット値はゼロであり、各々の他のメモリの前記メモリアドレスオフセット値はゼロでない、請求項15または16に記載のシステム。
  18. 前記複数のメモリの各メモリは、各々が第1のデータ記憶容量を有するバッファであり、
    前記第1のデータ格納場所および前記第2のデータ格納場所の各々は、少なくとも、前記第1のデータ記憶容量よりも大きな第2のデータ記憶容量を備える、請求項15~17のいずれか一項に記載のシステム。
  19. 各データ要素の前記メモリオフセット値は、前記N次元テンソルの各次元についてのループの反復回数に基づく、請求項15~18のいずれか一項に記載のシステム。
  20. 前記バッファ割り当て要素の前記値は、前記バッファ割り当て要素の前記値を切り替えるために使用されるループのループ変数であり、
    前記N次元テンソルの前記データの次の部分のバッファメモリアドレスを決定する前に前記バッファ割り当て要素の前記値を切り替えることは、前記バッファ割り当て要素の前記現在の値に対応する前記メモリが一杯になったと判断したことに応答して前記ループ変数を反復することを備える、請求項15~19のいずれか一項に記載のシステム。
JP2022069548A 2017-07-05 2022-04-20 特殊目的計算ユニットを用いたハードウェアダブルバッファリング Active JP7379581B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2023187546A JP2024020270A (ja) 2017-07-05 2023-11-01 特殊目的計算ユニットを用いたハードウェアダブルバッファリング

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US15/641,824 US10175912B1 (en) 2017-07-05 2017-07-05 Hardware double buffering using a special purpose computational unit
US15/641,824 2017-07-05
JP2019530793A JP7062659B2 (ja) 2017-07-05 2018-06-18 特殊目的計算ユニットを用いたハードウェアダブルバッファリング
PCT/US2018/038009 WO2019009993A1 (en) 2017-07-05 2018-06-18 DOUBLE MATERIAL BUFFER USING A SPECIALIZED CALCULATION UNIT

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2019530793A Division JP7062659B2 (ja) 2017-07-05 2018-06-18 特殊目的計算ユニットを用いたハードウェアダブルバッファリング

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2023187546A Division JP2024020270A (ja) 2017-07-05 2023-11-01 特殊目的計算ユニットを用いたハードウェアダブルバッファリング

Publications (2)

Publication Number Publication Date
JP2022106815A JP2022106815A (ja) 2022-07-20
JP7379581B2 true JP7379581B2 (ja) 2023-11-14

Family

ID=62981308

Family Applications (3)

Application Number Title Priority Date Filing Date
JP2019530793A Active JP7062659B2 (ja) 2017-07-05 2018-06-18 特殊目的計算ユニットを用いたハードウェアダブルバッファリング
JP2022069548A Active JP7379581B2 (ja) 2017-07-05 2022-04-20 特殊目的計算ユニットを用いたハードウェアダブルバッファリング
JP2023187546A Pending JP2024020270A (ja) 2017-07-05 2023-11-01 特殊目的計算ユニットを用いたハードウェアダブルバッファリング

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2019530793A Active JP7062659B2 (ja) 2017-07-05 2018-06-18 特殊目的計算ユニットを用いたハードウェアダブルバッファリング

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2023187546A Pending JP2024020270A (ja) 2017-07-05 2023-11-01 特殊目的計算ユニットを用いたハードウェアダブルバッファリング

Country Status (7)

Country Link
US (3) US10175912B1 (ja)
EP (2) EP3686743A1 (ja)
JP (3) JP7062659B2 (ja)
KR (2) KR102335909B1 (ja)
CN (2) CN110036374B (ja)
TW (3) TWI777442B (ja)
WO (1) WO2019009993A1 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10175912B1 (en) 2017-07-05 2019-01-08 Google Llc Hardware double buffering using a special purpose computational unit
US10936942B2 (en) 2017-11-21 2021-03-02 Google Llc Apparatus and mechanism for processing neural network tasks using a single chip package with multiple identical dies
CN111324294B (zh) * 2018-12-17 2023-11-07 地平线(上海)人工智能技术有限公司 存取张量数据的方法和装置
US11748599B2 (en) * 2019-02-21 2023-09-05 Texas Instruments Incorporated Super-tiling in neural network processing to enable analytics at lower memory speed
CN111756940A (zh) * 2020-07-07 2020-10-09 广州威谱通信设备有限公司 一种可编程寻址双输入混音的精简数字语音通信系统
US11954580B2 (en) 2020-09-16 2024-04-09 Meta Platforms, Inc. Spatial tiling of compute arrays with shared control
US11704562B1 (en) 2020-11-04 2023-07-18 Meta Platforms, Inc. Architecture for virtual instructions
US11709783B1 (en) 2020-11-11 2023-07-25 Meta Platforms, Inc. Tensor data distribution using grid direct-memory access (DMA) controller
US11972349B1 (en) 2020-11-12 2024-04-30 Meta Platforms, Inc. Flexible compute array utilization in a tensor processor
US11922306B2 (en) 2020-12-28 2024-03-05 Meta Platforms, Inc. Tensor controller architecture
US12001893B1 (en) 2020-12-28 2024-06-04 Meta Platforms, Inc. Distributed synchronization scheme

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002254729A (ja) 2001-03-02 2002-09-11 Sharp Corp 画像データのdma制御装置
JP2006301724A (ja) 2005-04-15 2006-11-02 Seiko Epson Corp メモリコントローラ、画像処理コントローラ及び電子機器
US20170103298A1 (en) 2015-10-09 2017-04-13 Altera Corporation Method and Apparatus for Designing and Implementing a Convolution Neural Net Accelerator

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5163132A (en) * 1987-09-24 1992-11-10 Ncr Corporation Integrated controller using alternately filled and emptied buffers for controlling bi-directional data transfer between a processor and a data storage device
JPH02132566A (ja) * 1988-11-14 1990-05-22 Toshiba Corp 画像データ転送装置
US4910683A (en) * 1988-12-20 1990-03-20 Sun Microsystems, Inc. Method and apparatus for fractional double buffering
JPH03131951A (ja) * 1989-10-18 1991-06-05 Fujitsu Ltd データ転送方式
JPH0553982A (ja) * 1991-08-28 1993-03-05 Nec Corp メモリ制御回路
DE69727465T2 (de) * 1997-01-09 2004-12-23 Hewlett-Packard Co. (N.D.Ges.D.Staates Delaware), Palo Alto Rechnersystem mit Speichersteuerung für Stossbetrieb-Übertragung
US6282634B1 (en) * 1998-05-27 2001-08-28 Arm Limited Apparatus and method for processing data having a mixed vector/scalar register file
US6363470B1 (en) 1998-10-06 2002-03-26 Texas Instruments Incorporated Circular buffer management
JP2001022950A (ja) 1999-05-20 2001-01-26 Mitsubishi Electric Inf Technol Center America Inc ボリュームレンダリンググラフィックボード
US7155570B1 (en) 2000-09-29 2006-12-26 Intel Corporation FIFO write/LIFO read trace buffer with software and hardware loop compression
JP2002182925A (ja) 2000-12-12 2002-06-28 Hitachi Ltd コンパイル方法及びコンピュータ読み取り可能な記録媒体
EP1367493A1 (en) 2002-05-30 2003-12-03 STMicroelectronics Limited Prefetch buffer
JP4004389B2 (ja) 2002-11-27 2007-11-07 富士通株式会社 バッファメモリ管理方法及びシステム
US6931497B2 (en) 2003-01-09 2005-08-16 Emulex Design & Manufacturing Corporation Shared memory management utilizing a free list of buffer indices
GB0313986D0 (en) 2003-06-17 2003-07-23 Zarlink Semiconductor Inc Data memory extension for use in double buffered TDM switches
US20080270332A1 (en) * 2003-08-26 2008-10-30 Paul Rudolf Associative Memory Device and Method Based on Wave Propagation
US7864864B2 (en) 2005-06-27 2011-01-04 Intel Corporation Context buffer address determination using a plurality of modular indexes
US20100281192A1 (en) 2009-04-30 2010-11-04 Novafora, Inc. Apparatus and method for transferring data within a data processing system
JP2011039302A (ja) 2009-08-11 2011-02-24 Seiko Epson Corp バッファー制御回路、表示コントローラー及び電子機器
US8458377B2 (en) * 2010-03-05 2013-06-04 Lsi Corporation DMA engine capable of concurrent data manipulation
US8892787B2 (en) * 2012-03-06 2014-11-18 Lsi Corporation Methods and apparatus for packing received frames in buffers in a serial attached SCSI (SAS) device
US20140188961A1 (en) * 2012-12-27 2014-07-03 Mikhail Plotnikov Vectorization Of Collapsed Multi-Nested Loops
US9875104B2 (en) 2016-02-03 2018-01-23 Google Llc Accessing data in multi-dimensional tensors
US10175912B1 (en) 2017-07-05 2019-01-08 Google Llc Hardware double buffering using a special purpose computational unit

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002254729A (ja) 2001-03-02 2002-09-11 Sharp Corp 画像データのdma制御装置
JP2006301724A (ja) 2005-04-15 2006-11-02 Seiko Epson Corp メモリコントローラ、画像処理コントローラ及び電子機器
US20170103298A1 (en) 2015-10-09 2017-04-13 Altera Corporation Method and Apparatus for Designing and Implementing a Convolution Neural Net Accelerator

Also Published As

Publication number Publication date
TW202131194A (zh) 2021-08-16
CN110036374B (zh) 2023-03-10
US10175912B1 (en) 2019-01-08
US10496326B2 (en) 2019-12-03
JP2020506453A (ja) 2020-02-27
US20200183612A1 (en) 2020-06-11
JP7062659B2 (ja) 2022-05-06
TW201908977A (zh) 2019-03-01
KR102335909B1 (ko) 2021-12-06
KR20190073535A (ko) 2019-06-26
US20190138243A1 (en) 2019-05-09
EP3686743A1 (en) 2020-07-29
KR102309522B1 (ko) 2021-10-07
TWI777442B (zh) 2022-09-11
TWI722526B (zh) 2021-03-21
TWI671633B (zh) 2019-09-11
TW201945937A (zh) 2019-12-01
WO2019009993A1 (en) 2019-01-10
JP2022106815A (ja) 2022-07-20
EP3529701A1 (en) 2019-08-28
KR20210119584A (ko) 2021-10-05
CN116303111A (zh) 2023-06-23
JP2024020270A (ja) 2024-02-14
EP3529701B1 (en) 2020-03-11
CN110036374A (zh) 2019-07-19
US11099772B2 (en) 2021-08-24
US20190012112A1 (en) 2019-01-10

Similar Documents

Publication Publication Date Title
JP7379581B2 (ja) 特殊目的計算ユニットを用いたハードウェアダブルバッファリング
JP7279226B2 (ja) 代替ループ限界値
US20220051087A1 (en) Neural Network Architecture Using Convolution Engine Filter Weight Buffers
JP7051895B2 (ja) 加算器を使用した多次元テンソルにおけるデータへのアクセス
EP3265907B1 (en) Data processing using resistive memory arrays
TW202215366A (zh) 對圖形進行分區的方法以及更新圖形的頂點的裝置及方法

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220511

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220511

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20230328

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230425

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230711

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20231003

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20231101

R150 Certificate of patent or registration of utility model

Ref document number: 7379581

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150