JP7051895B2 - 加算器を使用した多次元テンソルにおけるデータへのアクセス - Google Patents

加算器を使用した多次元テンソルにおけるデータへのアクセス Download PDF

Info

Publication number
JP7051895B2
JP7051895B2 JP2019553901A JP2019553901A JP7051895B2 JP 7051895 B2 JP7051895 B2 JP 7051895B2 JP 2019553901 A JP2019553901 A JP 2019553901A JP 2019553901 A JP2019553901 A JP 2019553901A JP 7051895 B2 JP7051895 B2 JP 7051895B2
Authority
JP
Japan
Prior art keywords
dimension
value
address offset
loop
offset value
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
JP2019553901A
Other languages
English (en)
Other versions
JP2020521198A (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
Priority claimed from US15/603,061 external-priority patent/US9946539B1/en
Application filed by Google LLC filed Critical Google LLC
Publication of JP2020521198A publication Critical patent/JP2020521198A/ja
Priority to JP2022056584A priority Critical patent/JP7433356B2/ja
Application granted granted Critical
Publication of JP7051895B2 publication Critical patent/JP7051895B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • 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/045Combinations of networks
    • 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
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30065Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
    • 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/30101Special purpose registers
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Evolutionary Computation (AREA)
  • Molecular Biology (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Neurology (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Devices For Executing Special Programs (AREA)

Description

背景
本明細書は、一般に、ハードウェア加算器を有する特殊目的計算ユニットを使用して機械学習計算を実行することに関する。
ニューラルネットワークは、モデルの1つ以上のレイヤを利用して、受信した入力に対する出力、たとえば分類、を生成する機械学習モデルである。ニューラルネットワークの中には、出力レイヤに加えて1つ以上の隠れレイヤを含んでいるものもある。各隠れレイヤの出力は、ネットワーク内の次のレイヤ、すなわちネットワークの次の隠れレイヤまたは出力レイヤ、への入力として使用される。ネットワークの各レイヤは、それぞれのパラメータセットの現在の値に従って、受信した入力から出力を生成する。
ニューラルネットワークの中には、1つ以上の畳み込みニューラルネットワークレイヤを含んでいるものもある。各畳み込みニューラルネットワークレイヤは、関連付けられたカーネルセットを有する。カーネルは、重み入力のマトリクス構造として表すことができる。各畳み込みレイヤは、カーネルを使用してレイヤへの入力を処理する。レイヤへの入力セットも、マトリクス構造として表すことができる。
概要
本明細書には、テンソル要素のメモリアドレスを求めるために1つ以上のハードウェア加算器を使用してN次元テンソルにアクセスすることに関連する技術が記載されている。
概して、本明細書に記載されている主題の1つの革新的局面は、N次元テンソルにアクセスするための装置で具体化することができる。上記装置は、上記N次元テンソルの各次元について、部分アドレスオフセット値要素を含んでもよく、上記部分アドレスオフセット値要素は、上記次元の初期値、上記次元のステップ値および上記次元のループの繰り返し回数に少なくとも基づいて上記次元の部分アドレスオフセット値を格納する。また、上記装置は、1つ以上のハードウェア加算器と、1つ以上のプロセッサとを含んでもよい。上記1つ以上のプロセッサは、上記N次元テンソルの特定の要素にアクセスするための命令を取得するように構成されてもよい。上記N次元テンソルは、上記N個の次元の各々にわたって配置された複数の要素を有してもよい。Nは、1以上の整数であってもよい。上記プロセッサは、上記部分アドレスオフセット値要素および上記1つ以上のハードウェア加算器のうちの1つ以上を使用して、上記特定の要素のアドレスを求め、上記N次元テンソルの上記特定の要素にアクセスするための上記求められたアドレスを示すデータを出力してもよい。
これらのおよび他の実現例の各々は、任意に、以下の特徴のうちの1つ以上を含んでもよい。いくつかの局面では、上記装置は、各次元について、上記次元の上記初期値を格納する初期値要素と、上記次元の上記ステップ値を格納するステップ値要素とを含んでもよい。各部分アドレスオフセット値要素、各初期値要素および各ステップ値要素は、レジスタを含んでもよい。
いくつかの局面では、上記特定の要素の上記アドレスを求めることは、上記1つ以上のハードウェア加算器を使用して各次元について上記部分アドレスオフセット値の合計を求めることを含んでもよい。上記1つ以上のプロセッサは、各次元について、上記ステップ値を上記次元の以前のアドレスオフセット値に加算することによって、上記次元のネステッドループの各繰り返し後に上記次元の上記部分アドレスオフセット値を求めるように構成されてもよい。
上記装置は、各次元について、上記次元の限界値を格納する限界値要素を含んでもよい。上記1つ以上のプロセッサは、各次元について、次元の上記求められた部分アドレスオフセット値が上記次元の上記限界値に等しいか否かを判断してもよい。第1のネステッドループに対応する第1の次元の上記求められた部分アドレスオフセット値が上記第1の次元の上記限界値に等しいと判断したことに応答して、上記1つ以上のプロセッサは、上記第1の次元の上記部分アドレスオフセット値を上記第1の次元の上記初期値にリセットし、上記第1のネステッドループがネストされる第2のネステッドループに対応する第2の次元について、上記1つ以上のハードウェア加算器を使用して、上記第2の次元の上記ステップ値と上記第2の次元の上記部分アドレスオフセット値との合計に等しくなるように上記第2の次元の上記部分アドレスオフセット値を更新してもよい。いくつかの局面では、各次元の上記ステップ値は、1つ以上の上記次元における要素の個数に基づく予め定められた値である。
本明細書に記載されている主題は、以下の利点のうちの1つ以上を実現するように特定の実施形態において実現することができる。レジスタを使用してメモリアドレス値を追跡することによって、プログラムは、1つの命令で、深くネストされたループを繰り返すことができるようになる。メモリアドレス値は、レジスタに格納された値に基づいて単純な加算を適用することによって速やかに求めることができる。特殊目的計算ユニットは、アドレスを計算する加算器を含み得る。算術論理演算ユニット(ALU)、乗算器または他の複雑な回路ではなく加算器を使用することによって、回路のサイズおよび回路の製造コストを下げることができる。ハードウェア加算器を使用してメモリアドレス値を求めることによって、プロセッサにおける計算サイクル数を減らすことができ、他の計算タスクのためのプロセッサ帯域幅が増加する。命令数を減らした状態でテンソルをトラバースすることができる。二次元レジスタアーキテクチャは、同時に追跡される異なる次元を各々が有する多次元テンソルを可能にする。
これおよび他の局面の他の実現例は、コンピュータ記憶装置上に符号化された方法のアクションを実行するように構成された対応するシステム、方法およびコンピュータプログラムを含む。1つ以上のコンピュータからなるシステムは、動作時にシステムにアクションを実行させる、システムにインストールされたソフトウェア、ファームウェア、ハードウェアまたはそれらの組み合わせによってそのように構成することができる。1つ以上のコンピュータプログラムは、データ処理装置によって実行されたときに装置にアクションを実行させる命令を有することによってそのように構成することができる。
本明細書に記載されている主題の1つ以上の実現例の詳細については、添付の図面および以下の説明に記載されている。主題の他の考えられる特徴、局面および利点は、明細書、図面および特許請求の範囲から明らかになるであろう。
計算システムの一例のブロック図である。 テンソルトラバーサルユニットの一例を示す図である。 テンソルトラバーサルユニットの一例を示す図である。 テンソルトラバーサルユニットの一例を示す図である。 テンソルトラバーサルユニットの一例を示す図である。 テンソルトラバーサルユニットの一例を示す図である。 テンソルトラバーサルユニットの一例を示す図である。 テンソルトラバーサルユニットの一例を示す図である。 テンソルトラバーサルユニットの一例を示す図である。 多次元テンソル変数のアドレスを求めるためのプロセスの一例を示すフロー図である。
さまざまな図面中の同様の参照番号および名称は、同様の要素を示す。
詳細な説明
一般に、ソフトウェアアルゴリズムがN次元テンソルを処理する際にネステッドループが使用されてもよい。各ループは、N次元テンソルのそれぞれの次元をトラバースすることに関与し得る。多次元テンソルは、マトリクスまたは多次元マトリクスであってもよい。たとえば、二次元テンソルは、マトリクスであり、三次元テンソルは、複数の二次元マトリクスで構成される三次元マトリクスである。N次元テンソルの各次元は、1つ以上の要素を含んでもよく、各要素は、それぞれのデータ値を格納してもよい。たとえば、テンソルは、プログラムにおける変数であってもよく、この変数は、3つの次元を有してもよい。第1の次元は、300個の要素の長さを有してもよく、第2の次元は、1000個の要素の長さを有してもよく、第3の次元は、20個の要素の長さを有してもよい。当然のことながら、各次元において他の個数の要素も可能である。
ネステッドループにおいてテンソルをトラバースすることは、要素のメモリアドレス値を計算して、この要素の対応するデータ値をロードまたは格納することを含み得る。forループは、3つのループインデックス変数(たとえば、i、jおよびk)によって追跡される3つのループを、三次元テンソルをトラバースするようにネストすることができるネステッドループの一例である。ニューラルネットワークでは、テンソルに関連付けられた1つ以上のドット積計算に要素の値が使用されてもよい。たとえば、要素の値は、対応するパラメータまたは重みを乗算されてもよい。要素にアクセスして要素の値を用いて1つ以上の計算を実行するために、テンソルの要素は、ネステッドforループを使用して順番にトラバースされてもよい。引き続き三次元テンソルの例を参照して、外側forループを使用して、変数iによって追跡されるループをトラバースしてもよく、中間forループループを使用して、変数jによって追跡されるループをトラバースしてもよく、内側forループを使用して、変数kによって追跡されるループをトラバースしてもよい。この例では、アクセスされる第1の要素は(i=0,j=0,k=0)であってもよく、第2の要素は(i=0,j=0,k=1)であってもよい、などである。以下で説明するように、テンソルトラバーサルユニットを使用する目的は、ネステッドループを使用して順番に各要素のメモリアドレスを求めることによって、処理ユニットが要素の値にアクセスして、この要素の値を使用して1つ以上の計算を実行することができるようにすることである。重みまたはパラメータの値にも、ネステッドforループを使用して同様にアクセスすることができる。また、テンソルトラバーサルユニットは、計算に使用される重みもしくはパラメータのアドレス、および/または、計算の出力のアドレスを求める目的でも使用することができ、計算の出力は、ニューラルネットワークの隠れレイヤへの入力として使用されてもよい。
場合によっては、プロセッサは、外側ループインデックス変数を用いて内側ループのループ境界を設定するなど、ループ境界条件を実行する必要があるかもしれない。たとえば、ネステッドループの最も内側のループを出るか否かを判断する際に、プログラムは、最も内側のループのループインデックス変数の現在の値とネステッドループの最も外側のループのループインデックス変数の現在の値とを比較してもよい。
これらのタスクは、分岐命令および整数演算命令などの相当数の命令を必要とする可能性がある。各ループ境界が小さく、ループの数が多い場合には、計算が全実行時間のうちのかなりの部分を占めて、全体的性能を非常に劣化させるおそれがある。プロセッサのためのハードウェアテンソルトラバーサルユニットは、テンソルをトラバースする際にプロセッサが処理しなければならない次元の個数を減少させることによってプロセッサの計算帯域幅を増加させることができる。
図1は、テンソルをトラバースするためのコンピューティングシステムの一例100のブロック図を示す。一般に、コンピューティングシステム100は、入力104を処理して出力116を生成する。コンピューティングシステム100は、線形代数計算を実行するように構成されてもよい。入力104は、コンピューティングシステム100が処理することができる任意の好適なデータであってもよい。コンピューティングシステム100は、処理ユニット102と、記憶媒体104と、テンソルトラバーサルユニット106とを含む。
一般に、処理ユニット102が、テンソルの特定の要素にアクセスするための命令を実行すると、テンソルトラバーサルユニット106は、このテンソルの特定の要素のアドレスを求め、それにより、処理ユニット102が記憶媒体104にアクセスして特定の要素の値を表すデータ114を読み出すことができる。たとえば、プログラムは、ネステッドループを含んでもよく、処理ユニット102は、ネステッドループに関連付けられた現在のインデックス変数値に従って、ネステッドループ内の二次元配列変数の要素にアクセスするための命令を実行してもよい。ネステッドループに関連付けられた現在のインデックス変数値に基づいて、テンソルトラバーサルユニット106は、二次元配列変数の第1の要素のメモリアドレスからのオフセットを表すアドレスオフセット値を求めてもよい。次いで、処理ユニット102は、このアドレスオフセット値を使用して、記憶媒体から二次元配列変数の特定の要素にアクセスしてもよい。
処理ユニット102は、記憶媒体104に格納された命令112または別の記憶装置に格納された他の命令を含む、コンピューティングシステム100内で実行される命令を処理するように構成される。処理ユニット102は、1つ以上のプロセッサを含んでもよい。記憶媒体104は、コンピューティングシステム100内の情報を格納する。いくつかの実現例では、記憶媒体104は、1つまたは複数の揮発性メモリユニットである。いくつかの他の実現例では、記憶媒体104は、1つまたは複数の不揮発性メモリユニットである。また、記憶媒体104は、フロッピー(登録商標)ディスクデバイス、ハードディスクデバイス、光ディスクデバイスもしくはテープデバイス、フラッシュメモリもしくは他の同様のソリッドステートメモリデバイス、または一連のデバイス(ストレージエリアネットワークもしくは他の構成のデバイスを含む)などの、別の形態のコンピュータ読取可能媒体であってもよい。命令は、処理ユニット102によって実行されると、処理ユニット102に1つ以上のタスクを実行させる。
テンソルトラバーサルユニット106は、特定用途向け集積回路として実現されてもよい。テンソルトラバーサルユニット106は、1つ以上のテンソルに関連付けられた状態を判断するように構成されてもよい。この状態は、ループ境界値、現在のループインデックス変数値、メモリアドレス値を求めるための部分アドレスオフセット値、および/または、分岐ループ境界を処理するためのプログラムカウンタ値を含んでもよい。
テンソルトラバーサルユニット106は、テンソルインデックスをメモリアドレスに変換する。たとえば、テンソルトラバーサルユニット106は、一組のN次元テンソルインデックスを一次元アドレス空間に変換してもよい。テンソルトラバーサルユニットは、テンソル要素のメモリアドレスを要素の次元インデックスの組み合わせ(たとえば、線形組み合わせ)にすることによってこのような変換を実行することができる。
テンソルトラバーサルユニット106は、テンソル要素のシーケンスを参照するアドレスのシーケンスを効率的にプログラムに従って生成することができる。このアドレスのシーケンスは、ソフトウェアトラバーサルルーチンにおけるループネストによってアクセスされるであろうテンソル要素のシーケンスに対応する。トラバーサル中にアクセスされる要素のシーケンスは、メモリ内で物理的に連続している場合もあれば、そうでない場合もある。図2B~図2Hに示され、以下で説明する例は、要素のシーケンスがどのようにしてメモリ内で物理的に連続していないかの一例を示す。
テンソルトラバーサルユニット106は、テンソルアドレス値要素122と、ハードウェア加算器ユニット124とを含む。テンソルアドレス値要素122の各々は、記憶要素、たとえばレジスタまたはその他の好適な記憶回路であってもよい。いくつかの実現例では、図2A~図2Hを参照して以下でより詳細に説明するように、テンソルアドレス値要素122は、異なるグループに物理的または論理的に分類されてもよい。いくつかの実現例では、テンソルアドレス値要素122のグループは、多次元配列に物理的または論理的に配置されてもよい。たとえば、テンソルアドレス値要素122の各グループは、二次元配列に物理的または論理的に配置されてもよい。
ハードウェア加算器ユニット124は、1つ以上のハードウェア加算器を含み得る。各加算器は、加算演算を実行するように構成されたデジタル回路を含んでもよい。たとえば、以下で説明するように、1つ以上の加算器は、部分アドレスオフセット値を加算して、テンソルの要素の合計アドレスオフセット値を求めてもよい。ハードウェア加算器は、算術論理演算ユニット(ALU)およびハードウェア乗算器よりも必要な回路部品が少ないので、ハードウェア加算器ユニット124の回路のサイズ(したがって、テンソルトラバーサルユニット106のサイズ)は、ALUおよび/または乗算器を含むテンソルトラバーサルユニットよりも小さくすることができる。また、ハードウェア加算器を有するテンソルトラバーサルユニットの製造コストは、ALUおよび/または乗算器を有するテンソルトラバーサルユニットの製造コストよりも少ないであろう。いくつかの実現例では、ハードウェア加算器ユニット124は、加算器のみを含み、他の数学回路または論理回路は含まない。
図2Aは、テンソルトラバーサルユニットの一組のテンソルアドレス値要素200の一例を示す。テンソルアドレス値要素200は、テンソルトラバーサルユニット106のテンソルアドレス値要素122に対応してもよい。テンソルトラバーサルユニット200は、一群の初期値要素202と、一群のステップ値要素204と、一群の終了値要素206と、一群の部分アドレスオフセット値要素208とを含む。
初期値要素202は、M個の行とN個の列とを有する2D配列として物理的または論理的に配置されてもよく、MおよびNは、1以上の整数である。初期値要素202は、テンソル要素のメモリアドレスを求めるために使用される部分アドレスオフセットの初期値を格納してもよい。いくつかの実現例では、初期値要素202の各行は、テンソルの初期値を表してもよい。たとえば、プログラムが2つの配列変数V1およびV2を定義する場合、テンソルトラバーサルユニットは、行202aおよび202bを割り当てて、配列変数V1およびV2の初期値をそれぞれ格納してもよい。いくつかの実現例では、初期値要素202の各列は、テンソルに関連付けられたネステッドループインデックス変数値の初期値を表してもよい。たとえば、プログラムが、変数V1にアクセスするための3つのループを有するネステッドループを定義し、このネステッドループの各ループが、ネステッドループインデックス変数i,jおよびkによって索引付けされる場合、テンソルトラバーサルユニットは、初期値要素V1,1、V1,2およびV1,3を割り当てて、ネステッドループインデックス変数i,jおよびkの初期値をそれぞれ格納してもよい。初期値要素202については、図2B~図2Hを参照して以下でより詳細に説明する。
ステップ値要素204は、初期値要素202と同一の次元を有する2D配列として物理的または論理的に配置されてもよく、ステップ値要素204の各要素は、初期値要素202の中に対応する要素を有する。ステップ値要素204は、テンソル要素のメモリアドレスを求めるために使用される部分アドレスオフセットのステップ値を格納してもよい。いくつかの実現例では、ステップ値要素204の各行は、テンソルのステップ値を表してもよい。たとえば、プログラムが2つの配列変数V1およびV2を定義する場合、テンソルトラバーサルユニットは、行204aおよび204bを割り当てて、配列変数V1およびV2のステップ値をそれぞれ格納してもよい。いくつかの実現例では、ステップ値要素204の各列は、テンソルに関連付けられたネステッドループインデックス変数値のステップ値を表してもよい。たとえば、プログラムが、変数V1にアクセスするための3つのループを有するネステッドループを定義し、このネステッドループの各ループが、ネステッドループインデックス変数i,jおよびkによって索引付けされる場合、テンソルトラバーサルユニットは、ステップ値要素X1,1、X1,2およびX1,3を割り当てて、ネステッドループインデックス変数i,jおよびkのステップ値をそれぞれ格納してもよい。ステップ値要素204については、図2B~図2Hを参照して以下でより詳細に説明する。
終了値要素206は、初期値要素202と同一の次元を有する2D配列として物理的または論理的に配置されてもよく、終了値要素206の各要素は、初期値要素202の中に対応する要素を有する。終了値要素206は、テンソル要素のメモリアドレスを求めるために使用される部分アドレスオフセットの終了値を格納してもよい。いくつかの実現例では、終了値要素206の各行は、テンソルの終了値を表してもよい。たとえば、プログラムが2つの配列変数V1およびV2を定義する場合、テンソルトラバーサルユニットは、行206aおよび206bを割り当てて、配列変数V1およびV2の終了値をそれぞれ格納してもよい。いくつかの実現例では、終了値要素206の各列は、テンソルに関連付けられたネステッドループインデックス変数値の終了値を表してもよい。たとえば、プログラムが、変数V1にアクセスするための3つのループを有するネステッドループを定義し、このネステッドループの各ループが、ネステッドループインデックス変数i,jおよびkによって索引付けされる場合、テンソルトラバーサルユニットは、終了値要素Y1,1、Y1,2およびY1,3を割り当てて、ネステッドループインデックス変数i,jおよびkの終了値をそれぞれ格納してもよい。終了値要素206については、図2B~図2Hを参照して以下でより詳細に説明する。
部分アドレスオフセット値要素208は、初期値要素202と同一の次元を有する2D配列として物理的または論理的に配置されてもよく、部分アドレスオフセット値要素208の各要素は、初期値要素202の中に対応する要素を有する。部分アドレスオフセット値要素206は、テンソル要素のメモリアドレスを求めるために使用される部分アドレスオフセット値を格納してもよい。いくつかの実現例では、部分アドレスオフセット値要素208の各行は、テンソルの部分アドレスオフセット値を表してもよい。たとえば、プログラムが2つの配列変数V1およびV2を定義する場合、テンソルトラバーサルユニットは、行208aおよび208bを割り当てて、配列変数V1およびV2の部分アドレスオフセット値をそれぞれ格納してもよい。いくつかの実現例では、部分アドレスオフセット値要素208の各列は、テンソルに関連付けられたネステッドループインデックス変数値の部分アドレスオフセット値を表してもよい。たとえば、プログラムが、変数V1にアクセスするための3つのループを有するネステッドループを定義し、このネステッドループの各ループが、ネステッドループインデックス変数i,jおよびkによって索引付けされる場合、テンソルトラバーサルユニットは、部分アドレスオフセット値要素Z1,1、Z1,2およびZ1,3を割り当てて、ネステッドループインデックス変数i,jおよびkの部分アドレスオフセット値をそれぞれ格納してもよい。部分アドレスオフセット値要素208については、図2B~図2Hを参照して以下でより詳細に説明する。
図2B~図2Hは、テンソルアドレス値要素200がどのようにしてテンソルトラバーサルユニットによって使用されてテンソルを処理し得るかの一例を示し、テンソルのテンソル要素のメモリアドレス値を求めることを含む。図2Bを参照して、プログラム212は、記憶媒体104または別の記憶媒体に格納されてもよく、処理ユニット102によって実行可能である。プログラム212は、第1の次元が3であり、第2の次元が2であり、第3の次元が2である文字配列変数V1を指定する。プログラム212は、変数V1をトラバースするためのネステッドforループを指定し、このforループは、ネステッドループインデックス変数iによって追跡される外側ループにおいてV1の第1の次元をトラバースし、ネステッドループインデックス変数jによって追跡される中間ループにおいてV1の第2の次元をトラバースし、ネステッドループインデックス変数kによって追跡される内側ループにおいてV1の第3の次元をトラバースする。本明細書に記載されている図2B~図2Hの示されている例は、3つの次元を含んでいるが、異なる個数の次元(たとえば、2つ、5つ、8つ、または他の個数の次元)を有するテンソルのメモリアドレス値を同様の態様で求めることができる。たとえば、8つの次元を有するテンソルがトラバースされてもよく、テンソル要素のメモリアドレスは、8重のループネストを使用して求めることができる。
いくつかの実現例では、テンソルアドレス値要素200は、プログラムの開始時に初期化されてもよい。たとえば、プロセッサは、テンソルアドレス値要素200を初期化する命令「InitializeElements」を実行してもよい。この命令は、プロセッサによって実行可能な命令セットのハードウェア命令であってもよい。いくつかの実現例では、初期化後、テンソルアドレス値要素200の各要素は、予め定められた値に設定される。いくつかの実現例では、プロセッサは、たとえば初期値要素202のためにある命令を実行し、ステップ値要素のためにある命令を実行するなど、テンソルアドレス値要素の各グループについて別々の命令を実行してもよい。各々の別々の命令は、そのグループの各要素を当該要素のための予め定められた値に設定してもよい。
この例では、各初期値要素202は、ゼロという値に設定される。次元の初期値は、この次元をトラバースするforループの1回目の繰り返しの間、この次元の部分アドレスオフセット値が設定される値である。したがって、この例では、各次元の部分アドレスオフセット値は、この次元のforループの1回目の繰り返しの間はゼロという値に設定されることになる。
ステップ値要素は、テンソル要素のメモリアドレスを求めるために使用される部分アドレスオフセットのステップ値を格納してもよい。次元のステップ値は、この次元をトラバースするforループの各繰り返しの後にこの次元の部分アドレスオフセット値に加算される値である。この例では、内側ネステッドループインデックス変数kは、1というステップ値を有し、中間ネステッドループインデックス変数jは、6というステップ値を有し、外側ネステッドループインデックス変数iは、2というステップ値を有する。
いくつかの実現例では、プロセッサ、ユーザ、またはテンソルをトラバースするためのプログラムをコンパイルするコンパイラは、テンソルの1つ以上の次元における要素の個数に基づいて各次元のステップ値および/または終了値を求める。一例では、各次元のステップ値および/または終了値は、テンソルのメモリレイアウトによって決まる。二次元テンソルの場合、メモリレイアウトは、たとえば行優先または列優先の順序に従ってもよい。このように、各テンソル要素について計算されるメモリアドレスは、各々の他のテンソル要素のメモリアドレスとは異なっている。いくつかの実現例では、メモリアドレスは、トラバーサル中にアクセスされる要素のシーケンスがメモリ内で物理的に連続しているように求められる。この例では、第1のテンソル要素は、第1のアドレスを有する第1のメモリ場所に格納されてもよく、第2のテンソル要素は、第1のメモリ場所のすぐ隣に位置する第2のメモリ場所に格納されてもよく、第3のテンソル要素は、第2のメモリ場所のすぐ隣に位置する第3のメモリ場所に格納されてもよい、などである。いくつかの実現例では、メモリアドレスは、トラバーサル中にアクセスされる要素のシーケンスがメモリ内で物理的に連続していないように求められる。この例では、第2のテンソル要素は、第1のテンソル要素のすぐ隣に格納されなくてもよい。
終了値要素は、次元の終了値を格納してもよい。次元の終了値は、部分アドレスオフセット値がこの次元の初期値にリセットされる値を表す。また、第1のループの部分アドレスオフセット値が第1のループの終了値に等しい場合には、第1のループがネストされる第2のループのステップ値が第2のループの部分アドレスオフセット値に加算される。この例では、内側ネステッドループインデックス変数iは、2という終了値を有し、中間ネステッドループインデックス変数iは、12というステップ値を有し、外側ネステッドループインデックス変数kは、6という終了値を有する。したがって、内側ネステッドループインデックス変数iの部分アドレスオフセット値が2という値に達すると、プロセッサは、内側ネステッドループインデックス変数iの部分アドレスオフセット値をゼロにリセットして、中間ネステッドループインデックス変数jのステップ値(6)を中間ネステッドループインデックス変数jの部分アドレスオフセット値に加算してもよい。これが中間ネステッドループインデックス変数jによって追跡されるループの1回目の繰り返しであれば、中間ネステッドループインデックス変数jの部分アドレスオフセット値は、6(0+6)になるであろう。
部分アドレスオフセット値要素208は、次元の部分アドレスオフセット値を格納する。この例では、プロセッサは、部分アドレスオフセット値をゼロに設定する。部分アドレスオフセット値は、テンソル要素のメモリアドレスオフセットを求めるために使用される。いくつかの実現例では、特定の変数についての特定のテンソル要素のメモリアドレスは、式225に示されるように、テンソル要素の予め指定されたベースアドレスとテンソル要素の次元の部分アドレスオフセット値との合計に基づく。変数V1では、特定のテンソル要素のメモリアドレスは、テンソル要素のベースアドレスと行208a(一番上の行)における部分アドレスオフセット値との合計に等しい。したがって、変数V1(i=0,j=0,k=0)の各次元の第1の要素に対応するテンソル要素では、部分アドレスオフセット値が全てゼロであるので、メモリアドレスは、ベースアドレス+ゼロに等しい。
テンソル要素のメモリアドレスは、図1のハードウェア加算器ユニット124を使用して求めることができる。たとえば、特定の変数(たとえば、変数V1)についての加算器への入力は、ベースアドレスおよびこの変数の特定の行(たとえば、変数V1の行208a)における各部分アドレスオフセット値要素の値であってもよい。出力は、この変数のメモリアドレスである。
図2Cは、プログラム212に従って要素V1[0][0][0]にアクセスすることを示す。たとえば、プロセッサは、アクセスされる要素に対応するメモリアドレスを突き止める命令「LocateTensor」を実行してもよい。いくつかの実現例では、この命令は、ベースメモリアドレスを含んでもよい。たとえば、命令「LocateTensor」は、変数V1の第1の要素である要素V1[0][0][0]のメモリアドレスを含んでもよい。いくつかの実現例では、この命令は、アクセス対象のテンソルに対応する行番号を含んでもよい。たとえば、命令「LocateTensor」は、変数V1に対応する行番号を含んでもよい。ここでは、行番号は1である。
いくつかの実現例では、テンソルトラバーサルユニットを含むコンピューティングシステムは、テンソルトラバーサルユニットからメモリアドレス値を照会する有限状態機械(FSM)を含んでもよい。たとえば、FSMは、図2B~図2Hに関連して説明した「LocateTensor」および「IterateTensor」命令などの命令を実行するプロセッサではないプロセッサのメモリアドレス値を照会してもよい。FSMは、プロセッサを参照して以下で説明するように、ネステッドループを繰り返しトラバースし、ループをトラバースしながら部分アドレス値を繰り返してもよい。次いで、プロセッサは、求められたメモリアドレス値を、それらが求められた通りにハードウェアカウンタまたはFSMから受信することができる。
いくつかの実現例では、この命令を受信したことに応答して、ハードウェア加算器ユニット(たとえば、図1のハードウェア加算器ユニット124)は、部分アドレス値要素208の行1(行208a)における部分アドレスオフセット値要素208の各々に格納された値の合計を計算することによってメモリアドレスオフセットを求める。ここで、ハードウェア加算器ユニットは、要素Z1,1、Z1,2およびZ1,3に格納された値の合計を求める。次いで、プロセッサは、ベースメモリアドレスを求められたメモリアドレスオフセット(すなわち、この例では0)に加算してメモリアドレスを求め、求められたメモリアドレスに基づいて、記憶媒体に格納されたデータにアクセスすることによって、要素V1[0][0][0]にアクセスすることができる。別の例では、ハードウェア加算器は、ベースメモリアドレスと要素Z1,1、Z1,2およびZ1,3に格納された値との合計を求めることによって要素V1[0][0][0]のメモリアドレスを求めてもよい。次いで、プロセッサは、求められたメモリアドレスに基づいて、記憶媒体に格納されたにアクセスすることができる。
図2Dは、プログラム212に従って要素V1[0][0][1]にアクセスすることを示す。たとえば、プログラムが内側ループの1回目の繰り返しを完了した後、プロセッサは、プログラムが内側ループの2回目の繰り返し(すなわち、i=0,j=0,k=1)に入ったときに部分アドレスオフセット値を更新する命令「IterateTensor」を実行してもよい。いくつかの実現例では、テンソルトラバーサルユニットは、内側ループ(内側ネステッドループインデックス変数iによって追跡されるループ)に対応する次元の部分アドレスオフセット値要素208を、内側ループに対応する次元のステップ値だけインクリメントすることによって、部分アドレスオフセット値を更新する。この例では、部分アドレスオフセット値要素Z1,1に格納された部分アドレスオフセット値は、ハードウェア加算器ユニットを使用して、ステップ値要素X1,1に格納されたステップ値だけインクリメントされる。内側ループのために格納された、結果として生じる更新後の部分アドレスオフセット値は、Z1,1に格納された以前の値とX1,1に格納された値との合計、すなわち0+1=1である。
いくつかの実現例では、テンソルトラバーサルユニットは、要素Z1,1に格納された更新後の部分オフセットアドレス値と要素Y1,1に格納された内側ループの終了値とを比較する。Z1,1に格納された更新後の部分オフセットアドレス値が、要素Y1,1に格納された内側ループの終了値に等しい場合、テンソルトラバーサルユニットは、要素Z1,1に格納された部分オフセットアドレス値の値を、要素V1,1に格納された内側ループの初期値にリセットしてもよい。また、以下でより詳細に説明するように、テンソルトラバーサルユニットは、要素Z1,2に格納された中間ループに対応する次元の部分アドレスオフセット値を、X1,2に格納された中間ループのステップ値だけインクリメントしてもよい。
要素Z1,1に格納された更新後の部分オフセットアドレス値が、要素Y1,1に格納された内側ループの終了値未満である場合、テンソルトラバーサルユニットは、要素Z1,1に格納された内側ループの更新後の部分アドレス値を保持してもよい。この例では、内側ループの更新後の部分アドレスオフセット値(1)は、内側ループの終了値(2)未満である。したがって、テンソルトラバーサルユニットは、中間ループの部分アドレスオフセット値をインクリメントすることなく、内側ループの部分アドレスオフセット要素Z1,1に格納された更新後の部分アドレスオフセット値を保持する。
次いで、プロセッサは、V1[0][0][1]に対応するメモリアドレスを突き止めるための命令「LocateTensor」を実行することによって、要素V1[0][0][1]にアクセスすることができる。この命令を受信したことに応答して、ハードウェア加算器ユニットは、部分アドレス値要素208の行1(行208a)における部分アドレスオフセット値要素208の各々に格納された値の合計を計算することによって、メモリアドレスオフセットを求める。ここで、ハードウェア加算器ユニットは、要素Z1,1、Z1,2およびZ1,3に格納された値の合計を求める。次いで、プロセッサは、ベースメモリアドレスを求められたメモリアドレスオフセット(すなわち、この例では1)に加算してメモリアドレスを求め、求められたメモリアドレスに基づいて、記憶媒体に格納されたデータにアクセスすることによって、要素V1[0][0][1]にアクセスすることができる。別の例では、ハードウェア加算器は、ベースメモリアドレスと要素Z1,1、Z1,2およびZ1,3に格納された値との合計を求めることによって、要素V1[0][0][1]のメモリアドレスを求めてもよい。次いで、プロセッサは、求められたメモリアドレスに基づいて、記憶媒体に格納されたにアクセスすることができる。
図2Eは、プログラム212に従って要素V1[0][1][0]にアクセスすることを示す。たとえば、プログラムが内側ループの2回目の繰り返しを完了した後、プロセッサは、プログラムが中間ループの2回目の繰り返し(すなわち、i=0,j=1,k=0)に入ったときに部分アドレスオフセット値を更新する命令「IterateTensor」を実行してもよい。いくつかの実現例では、テンソルトラバーサルユニットは、内側ループ(内側ネステッドループインデックス変数iによって追跡されるループ)に対応する次元の部分アドレスオフセット値要素208を、内側ループに対応する次元のステップ値だけインクリメントすることによって、部分アドレスオフセット値を更新する。この例では、部分アドレスオフセット値要素Z1,1に格納された部分アドレスオフセット値は、ハードウェア加算器ユニットを使用して、ステップ値要素X1,1に格納されたステップ値だけインクリメントされる。内側ループのために格納された、結果として生じる更新後の部分アドレスオフセット値は、Z1,1に格納された以前の値とX1,1に格納された値との合計、すなわち1+1=2である。
いくつかの実現例では、テンソルトラバーサルユニットは、要素Z1,1に格納された更新後の部分オフセットアドレス値と要素Y1,1に格納された内側ループの終了値とを比較する。Z1,1に格納された更新後の部分オフセットアドレス値が、要素Y1,1に格納された内側ループの終了値に等しい場合、テンソルトラバーサルユニットは、要素Z1,1に格納された部分オフセットアドレス値の値を、要素V1,1に格納された内側ループの初期値にリセットしてもよい。また、テンソルトラバーサルユニットは、要素Z1,2に格納された中間ループに対応する次元の部分アドレスオフセット値を、X1,2に格納された中間ループのステップ値だけインクリメントしてもよい。
要素Z1,1に格納された更新後の部分オフセットアドレス値が、要素Y1,1に格納された内側ループの終了値未満である場合、テンソルトラバーサルユニットは、要素Z1,1に格納された内側ループの更新後の部分アドレス値を保持してもよい。この例では、内側ループの更新後の部分アドレスオフセット値(2)は、内側ループの終了値(2)に等しい。したがって、テンソルトラバーサルユニットは、要素Z1,1に格納された部分オフセットアドレス値を、要素V1,1に格納された初期値にリセットする。また、テンソルトラバーサルユニットは、要素Z1,2に格納された中間ループの部分アドレスオフセット値を、X1,2に格納された中間ループのステップ値だけインクリメントする。この例では、中間ループの更新後の部分アドレスオフセット値は、6(0+6)である。
いくつかの実現例では、テンソルトラバーサルユニットは、中間ループの部分オフセットアドレス値を更新すると判断したことに応答して、要素Z1,2に格納された中間ループの更新後の部分オフセットアドレス値と、要素Y1,2に格納された中間ループの終了値とを比較する。Z1,2に格納された中間ループ値の更新後の部分オフセットアドレスが、要素Y1,2に格納された中間ループの終了値に等しい場合、テンソルトラバーサルユニットは、要素Z1,2に格納された部分オフセットアドレス値の値を、要素V1,2に格納された中間ループの初期値にリセットしてもよい。また、以下で説明するように、テンソルトラバーサルユニットは、要素Z1,3に格納された外側ループに対応する次元の部分アドレスオフセット値を、X1,3に格納された外側ループのステップ値だけインクリメントしてもよい。
要素Z1,2に格納された中間ループの更新後の部分オフセットアドレス値が、要素Y1,2に格納された中間ループの終了値未満である場合、テンソルトラバーサルユニットは、要素Z1,2に格納された中間ループの更新後の部分アドレス値を保持してもよい。この例では、中間ループの更新後の部分アドレスオフセット値(6)は、内側ループの終了値(12)未満である。したがって、テンソルトラバーサルユニットは、外側ループの部分アドレスオフセット値をインクリメントすることなく、中間ループの部分アドレスオフセット要素Z1,2に格納された更新後の部分アドレスオフセット値を保持する。
次いで、プロセッサは、V1[0][1][0]に対応するメモリアドレスを突き止めるための命令「LocateTensor」を実行することによって、要素V1[0][1][0]にアクセスすることができる。この命令を受信したことに応答して、ハードウェア加算器ユニットは、部分アドレス値要素208の行1(行208a)における部分アドレスオフセット値要素208の各々に格納された値の合計を計算することによって、メモリアドレスオフセットを求める。ここで、ハードウェア加算器ユニットは、要素Z1,1、Z1,2およびZ1,3に格納された値の合計を求める。次いで、プロセッサは、ベースメモリアドレスを求められたメモリアドレスオフセット(すなわち、この例では6)に加算してメモリアドレスを求め、求められたメモリアドレスに基づいて、記憶媒体に格納されたデータにアクセスすることによって、要素V1[0][1][0]にアクセスすることができる。別の例では、ハードウェア加算器は、ベースメモリアドレスと要素Z1,1、Z1,2およびZ1,3に格納された値との合計を求めることによって、要素V1[0][1][0]のメモリアドレスを求めてもよい。次いで、プロセッサは、求められたメモリアドレスに基づいて、記憶媒体に格納されたにアクセスすることができる。
図2Fは、プログラム212に従って要素V1[0][1][1]にアクセスすることを示す。たとえば、プログラムが中間ループの2回目の繰り返しのための内側ループの1回目の繰り返しを完了した後、プロセッサは、プログラムが中間ループの2回目の繰り返しのための内側ループの2回目の繰り返し(すなわち、i=0,j=1,k=1)に入ったときに部分アドレスオフセット値を更新する命令「IterateTensor」を実行してもよい。いくつかの実現例では、テンソルトラバーサルユニットは、内側ループ(内側ネステッドループインデックス変数iによって追跡されるループ)に対応する次元の部分アドレスオフセット値要素208を、内側ループに対応する次元のステップ値だけインクリメントすることによって、部分アドレスオフセット値を更新する。この例では、部分アドレスオフセット値要素Z1,1に格納された部分アドレスオフセット値は、ハードウェア加算器ユニットを使用して、ステップ値要素X1,1に格納されたステップ値だけインクリメントされる。内側ループのために格納される、結果として生じる更新後の部分アドレスオフセット値は、Z1,1に格納された以前の値とX1,1に格納された値との合計、すなわち0+1=2である。
いくつかの実現例では、テンソルトラバーサルユニットは、要素Z1,1に格納された更新後の部分オフセットアドレス値と、要素Y1,1に格納された内側ループの終了値とを比較する。Z1,1に格納された更新後の部分オフセットアドレス値が、要素Y1,1に格納された内側ループの終了値に等しい場合、テンソルトラバーサルユニットは、要素Z1,1に格納された部分オフセットアドレス値の値を、要素V1,1に格納された内側ループの初期値にリセットしてもよい。また、テンソルトラバーサルユニットは、要素Z1,2に格納された中間ループに対応する次元の部分アドレスオフセット値を、X1,2に格納された中間ループのステップ値だけインクリメントしてもよい。
要素Z1,1に格納された更新後の部分オフセットアドレス値が、要素Y1,1に格納された内側ループの終了値未満である場合、テンソルトラバーサルユニットは、要素Z1,1に格納された内側ループの更新後の部分アドレス値を保持してもよい。この例では、内側ループの更新後の部分アドレスオフセット値(1)は、内側ループの終了値(2)未満である。したがって、テンソルトラバーサルユニットは、中間ループの部分アドレスオフセット値をインクリメントすることなく、内側ループの部分アドレスオフセット要素Z1,1に格納された更新後の部分アドレスオフセット値を保持する。
次いで、プロセッサは、V1[0][1][1]に対応するメモリアドレスを突き止めるための命令「LocateTensor」を実行することによって、要素V1[0][1][1]にアクセスすることができる。この命令を受信したことに応答して、ハードウェア加算器ユニットは、部分アドレス値要素208の行1(行208a)における部分アドレスオフセット値要素208の各々に格納された値の合計を計算することによって、メモリアドレスオフセットを求める。ここで、ハードウェア加算器ユニットは、要素Z1,1、Z1,2およびZ1,3に格納された値の合計を求める。次いで、プロセッサは、ベースメモリアドレスを求められたメモリアドレスオフセット(すなわち、この例では7)を加算してメモリアドレスを求め、求められたメモリアドレスに基づいて、記憶媒体に格納されたデータにアクセスすることによって、要素V1[0][1][1]にアクセスすることができる。別の例では、ハードウェア加算器は、ベースメモリアドレスと要素Z1,1、Z1,2およびZ1,3に格納された値との合計を求めることによって、要素V1[0][1][1]のメモリアドレスを求めてもよい。次いで、プロセッサは、求められたメモリアドレスに基づいて、記憶媒体に格納されたにアクセスすることができる。
図2Gは、プログラム212に従って要素V1[1][0][0]にアクセスすることを示す。たとえば、プログラムが中間ループの2回目の繰り返しのための内側ループの2回目の繰り返しを完了した後、プロセッサは、プログラムが外側ループの2回目の繰り返し(すなわち、i=1,j=0,k=0)に入ったときに部分アドレスオフセット値を更新する命令「IterateTensor」を実行してもよい。いくつかの実現例では、テンソルトラバーサルユニットは、内側ループ(内側ネステッドループインデックス変数iによって追跡されるループ)に対応する次元の部分アドレスオフセット値要素208を、内側ループに対応する次元のステップ値だけインクリメントすることによって、部分アドレスオフセット値を更新する。この例では、部分アドレスオフセット値要素Z1,1に格納された部分アドレスオフセット値は、ハードウェア加算器ユニットを使用して、ステップ値要素X1,1に格納されたステップ値だけインクリメントされる。内側ループのために格納される、結果として生じる更新後の部分アドレスオフセット値は、Z1,1に格納された以前の値とX1,1に格納された値との合計、すなわち1+1=2である。
いくつかの実現例では、テンソルトラバーサルユニットは、要素Z1,1に格納された更新後の部分オフセットアドレス値と、要素Y1,1に格納された内側ループの終了値とを比較する。Z1,1に格納された更新後の部分オフセットアドレス値が、要素Y1,1に格納された内側ループの終了値に等しい場合、テンソルトラバーサルユニットは、要素Z1,1に格納された部分オフセットアドレス値の値を、要素V1,1に格納された内側ループの初期値にリセットしてもよい。また、テンソルトラバーサルユニットは、要素Z1,2に格納された中間ループに対応する次元の部分アドレスオフセット値を、X1,2に格納された中間ループのステップ値だけインクリメントしてもよい。
要素Z1,1に格納された更新後の部分オフセットアドレス値が、要素Y1,1に格納された内側ループの終了値未満である場合、テンソルトラバーサルユニットは、要素Z1,1に格納された内側ループの更新後の部分アドレス値を保持してもよい。この例では、内側ループの更新後の部分アドレスオフセット値(2)は、内側ループの終了値(2)に等しい。したがって、テンソルトラバーサルユニットは、要素Z1,1に格納された部分オフセットアドレス値を、要素V1,1に格納された初期値にリセットする。また、テンソルトラバーサルユニットは、要素Z1,2に格納された中間ループの部分アドレスオフセット値を、X1,2に格納された中間ループのステップ値だけインクリメントする。この例では、中間ループの更新後の部分アドレスオフセット値は、12(6+6)である。
いくつかの実現例では、テンソルトラバーサルユニットは、中間ループの部分オフセットアドレス値を更新すると判断したことに応答して、要素Z1,2に格納された中間ループの更新後の部分オフセットアドレス値と、要素Y1,2に格納された中間ループの終了値とを比較する。Z1,2に格納された中間ループの更新後の部分オフセットアドレスが、要素Y1,2に格納された中間ループの終了値に等しい場合、テンソルトラバーサルユニットは、要素Z1,2に格納された部分オフセットアドレス値の値を、要素V1,2に格納された中間ループの初期値にリセットしてもよい。また、テンソルトラバーサルユニットは、要素Z1,3に格納された外側ループに対応する次元の部分アドレスオフセット値を、X1,3に格納された外側ループのステップ値だけインクリメントしてもよい。
要素Z1,2に格納された中間ループの更新後の部分オフセットアドレス値が、要素Y1,2に格納された中間ループの終了値未満である場合、テンソルトラバーサルユニットは、要素Z1,2に格納された中間ループの更新後の部分アドレス値を保持してもよい。この例では、中間ループの更新後の部分アドレスオフセット値(12)は、中間ループの終了値(12)に等しい。したがって、テンソルトラバーサルユニットは、要素Z1,2に格納された部分オフセットアドレス値を、要素V1,2に格納された初期値にリセットする。また、テンソルトラバーサルユニットは、要素Z1,3に格納された外側ループの部分アドレスオフセット値を、X1,3に格納された外側ループのステップ値だけインクリメントする。この例では、外側ループの更新後の部分アドレスオフセット値は、2(0+2)である。
次いで、プロセッサは、V1[1][0][0]に対応するメモリアドレスを突き止めるための命令「LocateTensor」を実行することによって、要素V1[1][0][0]にアクセスすることができる。この命令を受信したことに応答して、ハードウェア加算器ユニットは、部分アドレス値要素208の行1(行208a)における部分アドレスオフセット値要素208の各々に格納された値の合計を計算することによって、メモリアドレスオフセットを求める。ここで、ハードウェア加算器ユニットは、要素Z1,1、Z1,2およびZ1,3に格納された値の合計を求める。次いで、プロセッサは、ベースメモリアドレスを求められたメモリアドレスオフセット(すなわち、この例では2)に加算してメモリアドレスを求め、求められたメモリアドレスに基づいて、記憶媒体に格納されたデータにアクセスすることによって、要素V1[1][0][0]にアクセスすることができる。別の例では、ハードウェア加算器は、ベースメモリアドレスと要素Z1,1、Z1,2およびZ1,3に格納された値との合計を求めることによって、要素V1[1][0][0]のメモリアドレスを求めてもよい。次いで、プロセッサは、求められたメモリアドレスに基づいて、記憶媒体に格納されたにアクセスすることができる。
図2Hは、プログラム212に従って要素V1[1][0][1]にアクセスすることを示す。たとえば、プログラムが外側ループの2回目の繰り返しのための内側ループの1回目の繰り返しを完了した後、プロセッサは、プログラムが外側ループの2回目の繰り返しのための内側ループの2回目の繰り返し(すなわち、i=1,j=0,k=1)に入ったときに部分アドレスオフセット値を更新する命令「IterateTensor」を実行してもよい。いくつかの実現例では、テンソルトラバーサルユニットは、内側ループ(内側ネステッドループインデックス変数iによって追跡されるループ)に対応する次元の部分アドレスオフセット値要素208を、内側ループに対応する次元のステップ値だけインクリメントすることによって、部分アドレスオフセット値を更新する。この例では、部分アドレスオフセット値要素Z1,1に格納された部分アドレスオフセット値は、ハードウェア加算器ユニットを使用して、ステップ値要素X1,1に格納されたステップ値だけインクリメントされる。内側ループのために格納される、結果として生じる更新後の部分アドレスオフセット値は、Z1,1に格納された以前の値と、X1,1に格納された値との合計、すなわち0+1=2である。
いくつかの実現例では、テンソルトラバーサルユニットは、要素Z1,1に格納された更新後の部分オフセットアドレス値と、要素Y1,1に格納された内側ループの終了値とを比較する。Z1,1に格納された更新後の部分オフセットアドレス値が、要素Y1,1に格納された内側ループの終了値に等しい場合、テンソルトラバーサルユニットは、要素Z1,1に格納された部分オフセットアドレス値の値を、要素V1,1に格納された内側ループの初期値にリセットしてもよい。また、テンソルトラバーサルユニットは、要素Z1,2に格納された中間ループに対応する次元の部分アドレスオフセット値を、X1,2に格納された中間ループのステップ値だけインクリメントしてもよい。
要素Z1,1に格納された更新後の部分オフセットアドレス値が、要素Y1,1に格納された内側ループの終了値未満である場合、テンソルトラバーサルユニットは、要素Z1,1に格納された内側ループの更新後の部分アドレス値を保持してもよい。この例では、内側ループの更新後の部分アドレスオフセット値(1)は、内側ループの終了値(2)未満である。したがって、テンソルトラバーサルユニットは、中間ループの部分アドレスオフセット値をインクリメントすることなく、内側ループの部分アドレスオフセット要素Z1,1に格納された更新後の部分アドレスオフセット値を保持する。
次いで、プロセッサは、V1[1][0][1]に対応するメモリアドレスを突き止めるための命令「LocateTensor」を実行することによって、要素V1[1][0][1]にアクセスすることができる。この命令を受信したことに応答して、ハードウェア加算器ユニットは、部分アドレス値要素208の行1(行208a)における部分アドレスオフセット値要素208の各々に格納された値の合計を計算することによって、メモリアドレスオフセットを求める。ここで、ハードウェア加算器ユニットは、要素Z1,1、Z1,2およびZ1,3に格納された値の合計を求める。次いで、プロセッサは、ベースメモリアドレスを求められたメモリアドレスオフセット(すなわち、この例では3)に加算してメモリアドレスを求め、求められたメモリアドレスに基づいて、記憶媒体に格納されたデータにアクセスすることによって、要素V1[1][0][1]にアクセスすることができる。別の例では、ハードウェア加算器は、ベースメモリアドレスと要素Z1,1、Z1,2およびZ1,3に格納された値との合計を求めることによって、要素V1[1][0][1]のメモリアドレスを求めてもよい。次いで、プロセッサは、求められたメモリアドレスに基づいて、記憶媒体に格納されたにアクセスすることができる。
テンソルトラバーサルユニットは、ネステッドループの残りの繰り返しについてメモリアドレスを求めて、同様の態様で残りのテンソル要素にアクセスし続けることができる。以下の表1は、図2A~図2Hに示されるステップ値を使用したテンソル要素のメモリアドレスオフセット値を示す。
Figure 0007051895000001
図3は、多次元テンソル変数のアドレスを求めるためのプロセスの一例300を示すフロー図である。プロセス300は、1つ以上のコンピュータのシステム、たとえば図1のコンピューティングシステム100によって実行されてもよい。このシステムは、初期値要素とステップ値要素と終了値要素と部分アドレスオフセット要素とを含むテンソルアドレス値要素を有するテンソルトラバーサルユニットを含む。テンソルトラバーサルユニットは、1つ以上のハードウェア加算器を有するハードウェア加算器ユニットも含む。
このシステムは、N次元テンソルの特定の要素にアクセスするための命令を取得する(302)。N次元テンソルは、N個の次元の各々にわたって配置された複数の要素を含み得て、Nは、1以上の整数である。たとえば、このシステムは、テンソルの特定の要素にアクセスするための命令を実行する処理ユニット(たとえば、処理ユニット102)を含んでもよい。
いくつかの実現例では、命令は、第1のループと第2のループと第3のループとを含むネステッドループを処理するための命令を表してもよい。第1のループは、第2のループ内にネストされた内側ループであってもよく、第2のループは、第3のループ内にネストされた中間ループであってもよい。第1のループは、第1のインデックス変数を使用して繰り返されてもよい。同様に、第2のループは、第2のインデックス変数を使用して繰り返されてもよく、第3のループは、第3のインデックス変数を使用して繰り返されてもよい。たとえば、プログラムは、記憶媒体に格納されてもよく、処理ユニットによって実行可能である。プログラムは、文字配列変数V1(または、別のタイプの配列)、2という第1の次元、2という第2の次元および3という第3の次元を指定してもよい。プログラムは、変数V1をトラバースするためのネステッドforループを指定してもよい。このforループは、ネステッドループインデックス変数iによって追跡される外側ループにおいてV1の第3の次元をトラバースしてもよい。また、このforループは、ネステッドループインデックス変数jによって追跡される中間ループにおいてV1の第2の次元をトラバースしてもよく、ネステッドループインデックス変数kによって追跡される内側ループにおいて第1の次元をトラバースしてもよい。
このシステムは、1つ以上のハードウェア加算器および部分アドレスオフセット要素を使用して、特定の要素のアドレスを求める(304)。いくつかの実現例では、特定の要素のアドレスは、N次元テンソルの別の要素からオフセットされたアドレスであってもよい。たとえば、特定の要素のアドレスは、N次元テンソルの別の要素のベースメモリアドレスからオフセットされたアドレスであってもよい。1つ以上のテンソルインデックス要素の各テンソルインデックス要素について、このシステムは、ハードウェア加算器を使用してベースメモリアドレスとともに部分アドレスオフセット要素の現在の値を加算することによって、メモリアドレスを求めてもよい。部分アドレスオフセット要素の現在の値は、ループの現在の繰り返しに基づく。
いくつかの実現例では、テンソルの要素のうちのいずれかの要素のアドレスオフセットを求める前に、このシステムは、テンソルアドレス値要素に格納された値を設定してもよい。たとえば、プロセッサは、テンソルアドレス値要素を初期化する命令「InitializeElements」を実行してもよい。
内側ループの各繰り返しについて、このシステムは、内側ループのステップ値を使用して内側ループの部分アドレスオフセット値を更新してもよい。中間および外側ループの1回目の繰り返しのための内側ループの1回目の繰り返しの前(すなわち、i=0,j=0,k=0)に、内側ループの部分アドレスオフセット値は、内側ループの初期値に設定されてもよい。
内側ループの各繰り返し後、このシステムは、内側ループの部分アドレスオフセット値を、内側ループの以前の部分アドレスオフセット値と内側ループのステップ値との合計に更新してもよい。次いで、このシステムは、内側ループの更新後の部分アドレスオフセット値と内側ループの終了値とを比較してもよい。内側ループの更新後の部分アドレスオフセット値が内側ループの終了値未満である場合、このシステムは、少なくとも内側ループの次の繰り返しまでは、他の部分アドレスオフセット値のいずれも修正することなく、部分アドレスオフセット値要素における内側ループの更新後の部分アドレスオフセット値を維持してもよい。
この更新後の部分アドレスオフセット値が内側ループの終了値に等しい場合、このシステムは、部分アドレスオフセット値を内側ループの初期値にリセットし、内側ループのステップ値を使用して中間ループの部分アドレスオフセット値をインクリメントしてもよい。たとえば、このシステムは、中間ループの部分アドレスオフセット値を、中間ループの以前の部分アドレスオフセット値と中間ループのステップ値との合計に更新してもよい。次いで、このシステムは、中間ループの更新後の部分アドレスオフセット値と中間ループの終了値とを比較してもよい。中間ループの更新後の部分アドレスオフセット値が、内側ループの終了値未満である場合、このシステムは、少なくとも中間ループの次の繰り返しまでは、他の部分アドレスオフセット値のいずれも修正することなく、部分アドレスオフセット値要素における中間ループの更新後の部分アドレスオフセット値を維持してもよい。
この更新後の部分アドレスオフセット値が中間ループの終了値に等しい場合、このシステムは、部分アドレスオフセット値を中間ループの初期値にリセットし、外側ループのステップ値を使用して外側ループの部分アドレスオフセット値をインクリメントしてもよい。たとえば、このシステムは、外側ループの部分アドレスオフセット値を、外側ループの以前の部分アドレスオフセット値と外側ループのステップ値との合計に更新してもよい。次いで、このシステムは、外側ループの更新後の部分アドレスオフセット値と外側ループの終了値とを比較してもよい。
外側ループの更新後の部分アドレスオフセット値が外側ループの終了値未満である場合、このシステムは、部分アドレスオフセット値要素における外側ループの更新後の部分アドレスオフセット値を維持してもよい。この更新後の部分アドレスオフセット値が外側ループの終了値に等しい場合、このシステムは、テンソルの各要素がアクセスされたときに各ループの部分アドレスオフセット値をそれらのそれぞれの初期値にリセットしてもよい。
このシステムは、N次元テンソルの特定の要素にアクセスするための求められたアドレスを示すデータを出力する(306)。たとえば、テンソルトラバーサルユニットは、現在の部分アドレスオフセット値とベースメモリアドレスとの合計に基づいて、求められたアドレスを出力してもよい。システムの処理ユニットは、メモリアドレスオフセット値を使用して、記憶媒体におけるN次元配列変数の特定の要素にアクセスしてもよい。
本明細書に記載されている主題および機能動作の実施形態は、デジタル電子回路、有形に具体化されたコンピュータソフトウェアもしくはファームウェア、本明細書に開示されている構造およびそれらの構造的等価物を含むコンピュータハードウェア、またはそれらのうちの1つ以上の組み合わせで実現することができる。本明細書に記載されている主題の実施形態は、1つ以上のコンピュータプログラムとして、すなわちデータ処理装置によって実行されるようにまたはデータ処理装置の動作を制御するように有形の非一時的なプログラムキャリア上に符号化されたコンピュータプログラム命令の1つ以上のモジュールとして、実現することができる。代替的にまたは加えて、プログラム命令は、人為的に生成された伝搬信号、たとえば情報を符号化して好適な受信機装置に送信してデータ処理装置によって実行するように生成される、機械によって生成される電気信号、光信号または電磁信号、上に符号化することができる。コンピュータ記憶媒体は、機械読取可能な記憶装置、機械読取可能な記憶基板、ランダムもしくはシリアルアクセスメモリデバイス、またはそれらのうちの1つ以上の組み合わせであってもよい。
本明細書に記載されているプロセスおよび論理フローは、1つ以上のプログラム可能なコンピュータが入力データ上で動作して出力を生成することによって機能を実行するように1つ以上のコンピュータプログラムを実行することによって実行することができる。プロセスおよび論理フローは、特殊目的論理回路、たとえばFPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)またはGPGPU(汎用グラフィックス処理ユニット)、によっても実行することができ、装置は、特殊目的論理回路としても実現することができる。
コンピュータプログラムの実行に適したコンピュータは、一例として、汎用マイクロプロセッサもしくは特殊目的マイクロプロセッサもしくはそれら両方、またはその他の種類の中央処理装置を含み、それらに基づいてもよい。一般に、中央処理装置は、リードオンリメモリまたはランダムアクセスメモリまたはそれら両方から命令およびデータを受信する。コンピュータの必須の要素は、命令を実施または実行するための中央処理装置と、命令およびデータを格納するための1つ以上のメモリデバイスである。一般に、コンピュータは、データを格納するための1つ以上の大容量記憶装置(たとえば、磁気ディスク、光磁気ディスクまたは光ディスク)も含み、1つ以上の大容量記憶装置からデータを受信したり1つ以上の大容量記憶装置にデータを送信したり1つ以上の大容量記憶装置との間でデータを送受信したりするように動作可能に結合される。しかし、コンピュータは、このような装置を有していなくてもよい。さらに、コンピュータは、別のデバイス、たとえばほんの数例を挙げると、携帯電話、パーソナルデジタルアシスタント(PDA)、携帯オーディオもしくはビデオプレーヤ、ゲーム機、グローバルポジショニングシステム(GPS)受信機、またはポータブルストレージデバイス(たとえば、ユニバーサルシリアルバス(USB)フラッシュドライブ)、に組み込まれてもよい。
コンピュータプログラム命令およびデータの格納に適したコンピュータ読取可能媒体は、全ての形態の不揮発性メモリ、メディアおよびメモリデバイスを含み、メモリデバイスは、一例として、半導体メモリデバイス(たとえば、EPROM、EEPROMおよびフラッシュメモリデバイス)、磁気ディスク(たとえば、内蔵ハードディスクまたはリムーバブルディスク)、光磁気ディスク、ならびにCD ROMおよびDVD-ROMディスクを含む。プロセッサおよびメモリは、特殊目的論理回路によって補完されてもよく、または特殊目的論理回路に組み入れられてもよい。
本明細書は、多くの具体的な実現例の詳細を含んでいるが、これらは、いずれの発明または請求の範囲を限定するものとして解釈されるべきではなく、特定の発明の特定の実施形態に特有の特徴を説明するものとして解釈されるべきである。別々の実施形態の文脈で本明細書に記載されている特定の特徴は、単一の実施形態において組み合わせて実現することも可能である。逆に、単一の実施形態の文脈で記載されているさまざまな特徴は、複数の実施形態において別々にまたは任意の好適な部分的な組み合わせで実現することも可能である。さらに、特徴は、特定の組み合わせで動作するものとして上記され、最初にそのように記載されているかもしれないが、記載されている組み合わせの中の1つ以上の特徴は、場合によってはこの組み合わせから除外されてもよく、記載されている組み合わせは、部分的な組み合わせまたは部分的な組み合わせの変形例を対象としてもよい。
同様に、動作は、特定の順序で図面に示されているが、これは、望ましい結果を達成するために、示されている特定の順序またはシーケンシャルな順序でこのような動作を実行しなければならないものとして理解されるべきではなく、示されている動作を全て実行しなければならないものとして理解されるべきでもない。特定の状況では、マルチタスクおよび並列処理が有利である場合もある。さらに、上記の実施形態におけるさまざまなシステムモジュールおよびコンポーネントの分離は、このような分離が全ての実施形態で必要であるものとして理解されるべきではなく、記載されているプログラムコンポーネントおよびシステムは、一般に、単一のソフトウェア製品に一体化されるかまたは複数のソフトウェア製品にパッケージングされてもよいということが理解されるべきである。
主題の特定の実施形態について説明してきた。他の実施形態は、以下の特許請求の範囲の範囲内である。たとえば、特許請求の範囲に記載されている動作は、異なる順序で実行されても、依然として望ましい結果を達成することができる。一例として、添付の図面に示されているプロセスは、望ましい結果を達成するために、示されている特定の順序またはシーケンシャルな順序を必ずしも必要としない。特定の実現例では、マルチタスクおよび並列処理が有利である場合もある。

Claims (20)

  1. N次元テンソルにアクセスするための命令を処理する装置であって、
    前記N次元テンソルの各次元について、当該次元の部分アドレスオフセット値を格納する部分アドレスオフセット値要素記憶手段を備え、前記部分アドレスオフセット値は(i)前記N次元テンソルの複数の要素のメモリアドレスを決定するための前記N次元テンソルの各次元についての一つのループを含むネステッドループの一部である、当該次元についてそれぞれのループの実行された繰り返しの数を示すループインデックスと、(ii)前記繰り返しの数が0であることを前記ループインデックスが示している場合に前記次元についての前記それぞれのループのための初期値として予め定められた初期値と、(iii)前記次元についての前記それぞれのループの各繰り返しのための当該次元について前記部分アドレスオフセット値に加算されるために予め定められたステップ値とに少なくとも基づいており、各次元の前記部分アドレスオフセット値は、前記N次元テンソルの前記複数の要素のメモリアドレスを求めるために使用されるものであり、前記装置はさらに、
    1つ以上のハードウェア加算器と、
    1つ以上のプロセッサとを備え、前記1つ以上のプロセッサは、
    前記N次元テンソルの特定の要素にアクセスするための命令を取得するように構成され、前記N次元テンソルは、N次元の各々にわたって配置された複数の要素を有し、Nは、1以上の整数であり、前記特定の要素のメモリ位置は、前記N次元テンソルの前記複数の要素のベースメモリアドレスからのオフセットを表わすアドレスオフセット値により特定され、前記1つ以上のプロセッサはさらに、
    1つ以上の前記部分アドレスオフセット値要素記憶手段および前記1つ以上のハードウェア加算器を使用して、前記N次元テンソルの前記複数の要素の前記ベースメモリアドレスと、1つ以上の前記部分アドレスオフセット値要素記憶手段の各々の前記部分アドレスオフセット値と、の合計を算出することにより、前記特定の要素のアドレスを求めるように構成され、
    前記N次元テンソルの前記特定の要素にアクセスするための前記求められたアドレスを示すデータを出力するように構成される、装置。
  2. 各次元について、
    前記次元の前記初期値を格納する初期値要素記憶手段と、
    前記次元の前記ステップ値を格納するステップ値要素記憶手段とをさらに備える、請求項1に記載の装置。
  3. 各部分アドレスオフセット値要素記憶手段、各初期値要素記憶手段および各ステップ値要素記憶手段は、レジスタを含む、請求項2に記載の装置。
  4. 前記特定の要素の前記アドレスを求めることは、前記1つ以上のハードウェア加算器を使用して各次元について前記部分アドレスオフセット値の合計を求めることを備える、請求項1から3のいずれか1項に記載の装置。
  5. 前記1つ以上のプロセッサはさらに、
    各次元について、前記ステップ値を、前記次元の以前のアドレスオフセット値に加算することによって、当該次元のそれぞれのループの各繰り返し後に前記次元の前記部分アドレスオフセット値を求めるように構成されており、前記以前のアドレスオフセット値は、当該繰り返しの前に得られたものである、請求項1から4のいずれか1項に記載の装置。
  6. 各次元について、前記次元の限界値を格納する限界値要素をさらに備え、前記1つ以上のプロセッサはさらに、
    各次元について、前記次元の前記求められた部分アドレスオフセット値が前記次元の前記限界値に等しいか否かを判断するように構成され、
    第1のネステッドループに対応する第1の次元の前記求められた部分アドレスオフセット値が前記第1の次元の前記限界値に等しいと判断したことに応答して、
    前記第1の次元の前記部分アドレスオフセット値を前記第1の次元の前記初期値にリセットするように構成され、
    前記第1のネステッドループがネストされる第2のネステッドループに対応する第2の次元について、前記1つ以上のハードウェア加算器を使用して、前記第2の次元の前記ステップ値と前記第2の次元の前記部分アドレスオフセット値との合計に等しくなるように前記第2の次元の前記部分アドレスオフセット値を更新するように構成される、請求項5に記載の装置。
  7. 各次元の前記ステップ値は、1つ以上の前記次元における要素の個数に基づく予め定められた値である、請求項1から6のいずれか1項に記載の装置。
  8. システムであって、
    N次元テンソルに対して線形代数演算を実行するように構成された1つ以上のプロセッサを備え、前記N次元テンソルは、N次元の各々にわたって配置された複数の要素を有し、Nは、1以上の整数であり、前記システムはさらに、
    前記N次元の各次元について、当該次元の部分アドレスオフセット値を格納する部分アドレスオフセット値要素記憶手段を備え、前記部分アドレスオフセット値は(i)前記N次元テンソルの複数の要素のメモリアドレスを決定するための前記N次元テンソルの各次元についての一つのループを含むネステッドループの一部である、当該次元についてそれぞれのループの実行された繰り返しの数を示すループインデックスと、(ii)前記繰り返しの数が0であることを前記ループインデックスが示している場合に前記次元についての前記それぞれのループのため初期値として予め定められた初期値と、(iii)前記次元についてのぞれぞれのループの各繰り返しのための当該次元について前記部分アドレスオフセット値に加算されるために予め定められたステップ値とに少なくとも基づいており、各次元の前記部分アドレスオフセット値は、前記N次元テンソルの前記複数の要素のメモリアドレスを求めるために使用されるものであり、前記システムはさらに、
    1つ以上のハードウェア加算器を含む回路を備え、前記回路は、
    前記N次元テンソルの特定の要素にアクセスするための命令を取得するように構成され、前記特定の要素のメモリ位置は、前記N次元テンソルの前記複数の要素のベースメモリアドレスからのオフセットを表わすアドレスオフセット値により特定され、
    1つ以上の前記部分アドレスオフセット値要素記憶手段および前記1つ以上のハードウェア加算器を使用して、前記N次元テンソルの前記複数の要素の前記ベースメモリアドレスと、1つ以上の前記部分アドレスオフセット値要素記憶手段の各々の前記部分アドレスオフセット値と、の合計を算出することにより、前記特定の要素のアドレスを求めるように構成され、
    前記N次元テンソルの前記特定の要素にアクセスするための前記求められたアドレスを示すデータを出力するように構成される、システム。
  9. 各次元について、
    前記次元の前記初期値を格納する初期値要素記憶手段と、
    前記次元の前記ステップ値を格納するステップ値要素記憶手段とをさらに備える、請求項8に記載のシステム。
  10. 各部分アドレスオフセット値要素記憶手段、各初期値要素記憶手段および各ステップ値要素記憶手段は、レジスタを含む、請求項9に記載のシステム。
  11. 前記特定の要素の前記アドレスを求めることは、前記1つ以上のハードウェア加算器を使用して各次元について前記部分アドレスオフセット値の合計を求めることを備える、請求項8から10のいずれか1項に記載のシステム。
  12. 前記回路はさらに、
    各次元について、前記ステップ値を、前記次元の当該繰り返しの前に行なわれた繰り返しによって得られた以前のアドレスオフセット値に加算することによって、前記次元のそれぞれのループの各繰り返し後に前記次元の前記部分アドレスオフセット値を求めるように構成される、請求項8から11のいずれか1項に記載のシステム。
  13. 各次元について、前記次元の限界値を格納する限界値要素記憶手段をさらに備え、前記回路はさらに、
    各次元について、前記次元の前記求められた部分アドレスオフセット値が前記次元の前記限界値に等しいか否かを判断するように構成され、
    第1のネステッドループに対応する第1の次元の前記求められた部分アドレスオフセット値が前記第1の次元の前記限界値に等しいと判断したことに応答して、
    前記第1の次元の前記部分アドレスオフセット値を前記第1の次元の前記初期値にリセットするように構成され、
    前記第1のネステッドループがネストされる第2のネステッドループに対応する第2の次元について、前記1つ以上のハードウェア加算器を使用して、前記第2の次元の前記ステップ値と前記第2の次元の前記部分アドレスオフセット値との合計に等しくなるように前記第2の次元の前記部分アドレスオフセット値を更新するように構成される、請求項12に記載のシステム。
  14. 各次元の前記ステップ値は、1つ以上の前記次元における要素の個数に基づく予め定められた値である、請求項8から13のいずれか1項に記載のシステム。
  15. コンピュータによって実行される方法であって、
    N次元テンソルの特定の要素にアクセスするための命令を取得するステップを備え、前記N次元テンソルは、N次元の各々にわたって配置された複数の要素を有し、Nは、1以上の整数であり、前記特定の要素のメモリ位置は、前記N次元テンソルの前記複数の要素のベースメモリアドレスからのオフセットを表わすアドレスオフセット値により特定され、前記方法はさらに、
    それぞれの部分アドレスオフセット値要素記憶手段に格納された部分アドレスオフセット値および1つ以上のハードウェア加算器を使用して、前記N次元テンソルの前記複数の要素の前記ベースメモリアドレスと、前記それぞれの部分アドレスオフセット値要素記憶手段に格納された前記部分アドレスオフセット値と、の合計を算出することにより、前記特定の要素のアドレスを求めるステップを備え、前記部分アドレスオフセット値は、各次元の部分アドレスオフセット値を含み、前記次元の前記部分アドレスオフセット値は、(i)前記N次元テンソルの複数の要素のメモリアドレスを決定するための前記N次元テンソルの各次元についての一つのループを含むネステッドループの一部である、当該次元についてそれぞれのループの実行された繰り返しの数を示すループインデックスと、(ii)前記繰り返しの数が0であることを前記ループインデックスが示している場合に前記次元についての前記それぞれループのための初期値として予め定められた初期値(iii)前記次元について前記ぞれぞれのループの各繰り返しのための当該次元についての前記部分アドレスオフセット値に加算されるために予め定められたステップ値に少なくとも基づいており、各次元の前記部分アドレスオフセット値は、前記N次元テンソルの前記複数の要素のメモリアドレスを求めるために使用されるものであり、前記方法はさらに、
    前記N次元テンソルの前記特定の要素にアクセスするための前記求められたアドレスを示すデータを出力するステップを備える、方法。
  16. 各次元の前記初期値は、前記次元の初期値要素記憶手段に格納され、
    前記次元の前記ステップ値は、前記次元のステップ値要素記憶手段に格納される、請求項15に記載の方法。
  17. 各部分アドレスオフセット値要素記憶手段、各初期値要素記憶手段および各ステップ値要素記憶手段は、レジスタを備える、請求項16に記載の方法。
  18. 前記特定の要素の前記アドレスを求めるステップは、前記1つ以上のハードウェア加算器を使用して各次元について前記部分アドレスオフセット値の合計を求めるステップを備える、請求項15から17のいずれか1項に記載の方法。
  19. 各次元について、前記ステップ値を、前記次元の当該繰り返しの前に行なわれた繰り返しによって得られた以前のアドレスオフセット値に加算することによって、前記次元のそれぞれのループの各繰り返し後に前記次元の前記部分アドレスオフセット値を求めるステップをさらに備える、請求項15から18のいずれか1項に記載の方法。
  20. 各次元について、前記次元の前記求められた部分アドレスオフセット値が前記次元の限界値に等しいか否かを判断するステップと、
    第1のネステッドループに対応する第1の次元の前記求められた部分アドレスオフセット値が前記第1の次元の前記限界値に等しいと判断したことに応答して、
    前記第1の次元の前記部分アドレスオフセット値を前記第1の次元の前記初期値にリセットするステップと、
    前記第1のネステッドループがネストされる第2のネステッドループに対応する第2の次元について、前記1つ以上のハードウェア加算器を使用して、前記第2の次元の前記ステップ値と前記第2の次元の前記部分アドレスオフセット値との合計に等しくなるように前記第2の次元の前記部分アドレスオフセット値を更新するステップとをさらに備える、請求項19に記載の方法。
JP2019553901A 2017-05-23 2018-02-26 加算器を使用した多次元テンソルにおけるデータへのアクセス Active JP7051895B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2022056584A JP7433356B2 (ja) 2017-05-23 2022-03-30 加算器を使用した多次元テンソルにおけるデータへのアクセス

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US15/603,061 US9946539B1 (en) 2017-05-23 2017-05-23 Accessing data in multi-dimensional tensors using adders
US15/603,061 2017-05-23
US15/903,991 2018-02-23
US15/903,991 US10534607B2 (en) 2017-05-23 2018-02-23 Accessing data in multi-dimensional tensors using adders
PCT/US2018/019691 WO2018217258A1 (en) 2017-05-23 2018-02-26 Accessing data in multi-dimensional tensors using adders

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2022056584A Division JP7433356B2 (ja) 2017-05-23 2022-03-30 加算器を使用した多次元テンソルにおけるデータへのアクセス

Publications (2)

Publication Number Publication Date
JP2020521198A JP2020521198A (ja) 2020-07-16
JP7051895B2 true JP7051895B2 (ja) 2022-04-11

Family

ID=61617155

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2019553901A Active JP7051895B2 (ja) 2017-05-23 2018-02-26 加算器を使用した多次元テンソルにおけるデータへのアクセス
JP2022056584A Active JP7433356B2 (ja) 2017-05-23 2022-03-30 加算器を使用した多次元テンソルにおけるデータへのアクセス

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2022056584A Active JP7433356B2 (ja) 2017-05-23 2022-03-30 加算器を使用した多次元テンソルにおけるデータへのアクセス

Country Status (6)

Country Link
US (1) US10534607B2 (ja)
EP (1) EP3631625A1 (ja)
JP (2) JP7051895B2 (ja)
KR (2) KR102347119B1 (ja)
CN (1) CN110462586A (ja)
WO (1) WO2018217258A1 (ja)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10108538B1 (en) 2017-07-31 2018-10-23 Google Llc Accessing prologue and epilogue data
GB2567038B (en) * 2017-07-31 2019-09-25 Google Llc Accessing prologue and epilogue data
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
US10599583B2 (en) * 2018-08-20 2020-03-24 Macronix International Co., Ltd. Pre-match system and pre-match method
US11263011B2 (en) * 2018-11-28 2022-03-01 International Business Machines Corporation Compound instruction set architecture for a neural inference chip
KR20200142536A (ko) * 2019-04-04 2020-12-22 캠브리콘 테크놀로지스 코퍼레이션 리미티드 데이터 처리 장치 및 관련 제품
US11620358B2 (en) 2019-05-14 2023-04-04 Intel Corporation Technologies for performing macro operations in memory
JP7062617B2 (ja) * 2019-06-26 2022-05-06 株式会社東芝 演算装置および演算方法
US11354564B2 (en) * 2019-06-27 2022-06-07 Intel Corporation Tuning of loop orders in blocked dense basic linear algebra subroutines
KR102658003B1 (ko) * 2019-11-27 2024-04-17 한양대학교 에리카산학협력단 효율성이 향상된 양자 가산기 및 가산 방법
CN113391842A (zh) 2020-03-13 2021-09-14 华为技术有限公司 一种单指令多数据simd指令的生成、处理方法以及相关设备
EP3896565B1 (en) * 2020-04-16 2024-03-06 NXP USA, Inc. Memory address generator
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
US11790611B2 (en) 2020-12-30 2023-10-17 Meta Platforms, Inc. Visual editor for designing augmented-reality effects that utilize voice recognition
CN113836049B (zh) * 2021-09-17 2023-08-08 海飞科(南京)信息技术有限公司 存储器访问方法和电子装置
KR20230099190A (ko) 2021-12-27 2023-07-04 서울대학교산학협력단 다차원 텐서의 주소 생성 장치 및 방법
CN114489798B (zh) * 2022-01-25 2024-04-05 海飞科(南京)信息技术有限公司 用于确定张量元素的越界状态的方法和电子装置
CN117435547A (zh) * 2022-07-15 2024-01-23 北京有竹居网络技术有限公司 人工智能芯片、灵活地访问数据的方法、设备和介质
CN115658146B (zh) * 2022-12-14 2023-03-31 成都登临科技有限公司 一种ai芯片、张量处理方法及电子设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005209060A (ja) 2004-01-26 2005-08-04 Hitachi Ltd アドレス生成装置を含むシステムおよびそのアドレス生成装置
US20170075691A1 (en) 2011-12-23 2017-03-16 Intel Corporation Instruction for element offset calculation in a multi-dimensional array

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2854420B2 (ja) * 1990-02-21 1999-02-03 松下電器産業株式会社 多次元アドレス発生器およびその制御方式
EP0486635A1 (en) 1990-05-22 1992-05-27 International Business Machines Corporation Scalable flow virtual learning neurocomputer
US5398322A (en) * 1990-06-27 1995-03-14 Luminis Pty. Ltd. Number theory mapping generator for addressing matrix structures
JPH06324935A (ja) * 1993-05-11 1994-11-25 Matsushita Electric Ind Co Ltd アドレス発生器およびアドレス発生システム
US5958048A (en) * 1996-08-07 1999-09-28 Elbrus International Ltd. Architectural support for software pipelining of nested loops
US6219784B1 (en) 1997-11-17 2001-04-17 Advanced Micro Devices, Inc. Processor with N adders for parallel target addresses calculation
US6694311B1 (en) 1999-01-25 2004-02-17 International Business Machines Corporation Method and apparatus for fast query approximation using adaptive query vector projection
US6507835B1 (en) 2000-02-17 2003-01-14 International Business Machines Corporation Generating grouping queries using tensor representations
WO2001090888A1 (en) 2000-05-23 2001-11-29 Theis Jean Paul A data processing system having an address generation unit with hardwired multidimensional memory indexing support
US20040133745A1 (en) * 2002-10-28 2004-07-08 Quicksilver Technology, Inc. Adaptable datapath for a digital processing system
US6952821B2 (en) * 2002-08-19 2005-10-04 Hewlett-Packard Development Company, L.P. Method and system for memory management optimization
US7225439B2 (en) * 2003-03-21 2007-05-29 Sun Microsystems, Inc. Combining write-barriers within an inner loop with fixed step
US8443169B2 (en) 2005-03-28 2013-05-14 Gerald George Pechanek Interconnection network connecting operation-configurable nodes according to one or more levels of adjacency in multiple dimensions of communication in a multi-processor and a neural processor
US20080250227A1 (en) 2007-04-04 2008-10-09 Linderman Michael D General Purpose Multiprocessor Programming Apparatus And Method
US8713285B2 (en) 2008-12-09 2014-04-29 Shlomo Selim Rakib Address generation unit for accessing a multi-dimensional data structure in a desired pattern
US20100153100A1 (en) * 2008-12-11 2010-06-17 Electronics And Telecommunications Research Institute Address generator for searching algebraic codebook
US9141916B1 (en) 2012-06-29 2015-09-22 Google Inc. Using embedding functions with a deep network
US9946539B1 (en) * 2017-05-23 2018-04-17 Google Llc Accessing data in multi-dimensional tensors using adders

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005209060A (ja) 2004-01-26 2005-08-04 Hitachi Ltd アドレス生成装置を含むシステムおよびそのアドレス生成装置
US20170075691A1 (en) 2011-12-23 2017-03-16 Intel Corporation Instruction for element offset calculation in a multi-dimensional array

Also Published As

Publication number Publication date
US10534607B2 (en) 2020-01-14
US20180341479A1 (en) 2018-11-29
JP7433356B2 (ja) 2024-02-19
CN110462586A (zh) 2019-11-15
EP3631625A1 (en) 2020-04-08
WO2018217258A1 (en) 2018-11-29
JP2022095773A (ja) 2022-06-28
KR102243036B1 (ko) 2021-04-21
KR20210045509A (ko) 2021-04-26
JP2020521198A (ja) 2020-07-16
KR20190113973A (ko) 2019-10-08
KR102347119B1 (ko) 2022-01-05

Similar Documents

Publication Publication Date Title
JP7051895B2 (ja) 加算器を使用した多次元テンソルにおけるデータへのアクセス
JP7035080B2 (ja) 代替ループ限界値
US10802956B2 (en) Accessing prologue and epilogue data
TWI740274B (zh) 用於在使用加法器之多維張量中存取資料之系統、電腦實施方法及設備
JP6896415B2 (ja) N次元テンソルにアクセスするための命令を処理するための装置、システム、およびコンピュータによって実現される方法
JP7379581B2 (ja) 特殊目的計算ユニットを用いたハードウェアダブルバッファリング
GB2567038B (en) Accessing prologue and epilogue data

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191218

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20191218

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210113

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210224

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20210521

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20210726

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210812

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20211005

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220105

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: 20220308

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220330

R150 Certificate of patent or registration of utility model

Ref document number: 7051895

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150