(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-19
(45)【発行日】2024-06-27
(54)【発明の名称】N次元テンソルにアクセスするための命令を処理するための装置、システム、およびコンピュータによって実現される方法
(51)【国際特許分類】
G06F 17/16 20060101AFI20240620BHJP
【FI】
G06F17/16 A
G06F17/16 F
【外国語出願】
(21)【出願番号】P 2023017754
(22)【出願日】2023-02-08
(62)【分割の表示】P 2021096509の分割
【原出願日】2016-12-26
【審査請求日】2023-03-02
(32)【優先日】2016-02-03
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ウ・ドン・ヒョク
(72)【発明者】
【氏名】アンドリュー・エバレット・フェルプス
【審査官】田中 幸雄
(56)【参考文献】
【文献】米国特許出願公開第2014/0201497(US,A1)
【文献】米国特許出願公開第2014/0188961(US,A1)
【文献】国際公開第2001/090888(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/16
(57)【特許請求の範囲】
【請求項1】
N次元テンソルの要素のメモリアドレスを決定するための
システムであって、
前記
システムは、前記N次元テンソルの各次元について、
前記次元のインデックス値を記憶するように構成されたハードウェア記憶回路を含むテンソルインデックス要素を備え、前記インデックス値は、前記次元をトラバースするために使用されるループの各反復後に
更新され、前記N次元テンソルは、各前記N次元にわたって配置された複数の要素を有し、Nは、2以上の整数であり、
前記
システムはさらに、前記N次元テンソルの各次元について、
前記次元の乗数値を記憶するように構成されたハードウェア記憶回路を含む次元乗数要素を備え、前記乗数値は、前記次元をトラバースするために使用される前記ループの各反復について一定のままである一定値であり、
前記
システムはさらに、
以下の動作を実行するように構成されたテンソルトラバースユニットを備え
、前記
以下の動作は、
各テンソルインデックス要素によって記憶された現在のインデックス値を取得することと、
各テンソルインデックス要素によって記憶された前記現在のインデックス値と各次元乗数要素によって記憶された前記乗数値とを使用して、特定の要素がメモリに記憶されるメモリアドレスを決定することとを備え、前記決定することは、
前記N次元テンソルの各次元について、(i)前記次元の前記現在のインデックス値と、(ii)前記次元の前記乗数値との積を求めることと、
前記N次元テンソルの各次元についての前記積の合計に基づいて前記特定の要素の前記メモリアドレスを決定することとを含み、
前記
以下の動作はさらに、
前記決定されたメモリアドレスを示すデータを処理ユニットに出力することを備え、前記処理ユニットは、前記決定されたメモリアドレスを使用して前記N次元テンソルの前記特定の要素にアクセスするように構成される、
システム。
【請求項2】
前記
テンソルトラバースユニットは、前記特定の要素の前記メモリアドレスを決定するための命令を受信したことに応答して、前記特定の要素がメモリに記憶される前記メモリアドレスを決定する、請求項1に記載の
システム。
【請求項3】
前記N次元テンソルの各次元についての前記積の合計に基づいて前記特定の要素の前記メモリアドレスを決定することは、各次元についての前記積の前記合計をベースメモリアドレス値に加算することを備える、請求項1または2に記載の
システム。
【請求項4】
前記N次元テンソルの各次元についてそれぞれのテンソル境界要素をさらに備え、各テンソル境界要素は、前記次元をトラバースするために使用される前記ループのループ境界を記憶するように構成されたハードウェア記憶回路を含む、請求項1~3のいずれか1項に記載の
システム。
【請求項5】
前記決定されたメモリアドレスを示すデータを前記処理ユニットに出力することは、前記N次元テンソルの各次元についての前記ループの反復に基づいて前記N次元テンソルの各要素のそれぞれのメモリアドレスを順番に出力することを備える、請求項1~4のいずれか1項に記載の
システム。
【請求項6】
前記テンソルインデックス要素は、テンソルインデックス要素のM個のグループに配置され、Mは、1よりも大きな正の整数であり、
テンソルインデックス要素の各グループは、別個の異なる多次元テンソルに割り当てられる、請求項1~5のいずれか1項に記載の
システム。
【請求項7】
前記次元のうちの少なくとも1つの次元の前記乗数値は、前記ループのうちの少なくとも1つのループの反復の数に基づく、請求項1~6のいずれか1項に記載の
システム。
【請求項8】
システムであって、
N次元テンソルに対して線形代数演算を実行するように構成された
テンソルトラバースユニットを備え、前記N次元テンソルは、各前記N次元にわたって配置されたデータ要素を有し、Nは、2以上の整数であり、
前記システムはさらに、前記N次元テンソルの各次元について、
前記次元のインデックス値を記憶するように構成されたハードウェア記憶回路を含むテンソルインデックス要素を備え、前記インデックス値は、前記次元をトラバースするために使用されるループの各反復後に
更新され、
前記システムはさらに、前記N次元テンソルの各次元について、
前記次元の乗数値を記憶するように構成されたハードウェア記憶回路を含む次元乗数要素を備え、前記乗数値は、前記次元をトラバースするために使用される前記ループの各反復について一定のままである一定値であり、
前記システムはさらに、ハードウェア回路を備え、前記ハードウェア回路は、
各テンソルインデックス要素によって記憶された現在のインデックス値を取得し、
各テンソルインデックス要素によって記憶された前記現在のインデックス値と各次元乗数要素によって記憶された前記乗数値とを使用して、特定の要素がメモリに記憶されるメモリアドレスを決定するように構成され、前記決定することは、
前記N次元テンソルの各次元について、(i)前記次元の前記現在のインデックス値と、(ii)前記次元の前記乗数値との積を求めることと、
前記N次元テンソルの各次元についての前記積の合計に基づいて前記特定の要素の前記メモリアドレスを決定することとを含み、
前記ハードウェア回路はさらに、
前記決定されたメモリアドレスを示すデータを処理ユニットに出力するように構成され、前記処理ユニットは、前記決定されたメモリアドレスを使用して前記N次元テンソルの前記特定の要素にアクセスするように構成される、システム。
【請求項9】
前記ハードウェア回路は、前記特定の要素の前記メモリアドレスを決定するための命令を受信したことに応答して、前記特定の要素がメモリに記憶される前記メモリアドレスを決定する、請求項8に記載のシステム。
【請求項10】
前記N次元テンソルの各次元についての前記積の合計に基づいて前記特定の要素の前記メモリアドレスを決定することは、各次元についての前記積の前記合計をベースメモリアドレス値に加算することを備える、請求項8または9に記載のシステム。
【請求項11】
前記N次元テンソルの各次元についてそれぞれのテンソル境界要素をさらに備え、各テンソル境界要素は、前記次元をトラバースするために使用される前記ループのループ境界を記憶するように構成されたハードウェア記憶回路を含む、請求項8~10のいずれか1項に記載のシステム。
【請求項12】
前記決定されたメモリアドレスを示すデータを前記処理ユニットに出力することは、前記N次元テンソルの各次元についての前記ループの反復に基づいて前記N次元テンソルの各要素のそれぞれのメモリアドレスを順番に出力することを備える、請求項8~11のいずれか1項に記載のシステム。
【請求項13】
前記テンソルインデックス要素は、テンソルインデックス要素のM個のグループに配置され、Mは、1よりも大きな正の整数であり、
テンソルインデックス要素の各グループは、別個の異なる多次元テンソルに割り当てられる、請求項8~12のいずれか1項に記載のシステム。
【請求項14】
前記次元のうちの少なくとも1つの次元の前記乗数値は、前記ループのうちの少なくとも1つのループの反復の数に基づく、請求項8~13のいずれか1項に記載のシステム。
【請求項15】
N次元テンソルの要素のメモリアドレスを決定するための、1つまたは複数のデータ処理装置によって実行される方法であって、
前記データ処理装置の
テンソルトラバースユニットが、複数のテンソルインデックス要素の各々によって記憶された現在のインデックス値を取得するステップを備え、前記複数のテンソルインデックス要素は、前記N次元テンソルの各次元について、対応するテンソルインデックス要素を含み、各テンソルインデックス要素は、前記対応する次元のインデックス値を記憶するように構成されたハードウェア記憶回路を含み、前記インデックス値は、前記対応する次元をトラバースするために使用されるループの各反復後に
更新され、前記N次元テンソルは、各前記N次元にわたって配置された複数の要素を有し、Nは、2以上の整数であり、前記方法はさらに、
前記
テンソルトラバースユニットが、各テンソルインデックス要素によって記憶された前記現在のインデックス値と複数の次元乗数要素の各々によって記憶された乗数値とを使用して、特定の要素がメモリに記憶されるメモリアドレスを決定するステップを備え、各次元乗数要素は、前記N次元テンソルの対応する次元の乗数値を記憶するように構成されたハードウェア記憶回路を含み、前記乗数値は、前記対応する次元をトラバースするために使用される前記ループの各反復について一定のままである一定値であり、前記決定するステップは、
前記N次元テンソルの各次元について、(i)前記次元の前記現在のインデックス値と、(ii)前記次元の前記乗数値との積を求めるステップと、
前記N次元テンソルの各次元についての前記積の合計に基づいて前記特定の要素の前記メモリアドレスを決定するステップとを含み、
前記方法はさらに、
前記決定されたメモリアドレスを示すデータを処理ユニットに出力するステップを備え、前記処理ユニットは、前記決定されたメモリアドレスを使用して前記N次元テンソルの前記特定の要素にアクセスするように構成される、方法。
【請求項16】
前記1つまたは複数のデータ処理装置は、前記特定の要素の前記メモリアドレスを決定するための命令を受信したことに応答して、前記特定の要素がメモリに記憶される前記メモリアドレスを決定する、請求項15に記載の方法。
【請求項17】
前記N次元テンソルの各次元についての前記積の合計に基づいて前記特定の要素の前記メモリアドレスを決定するステップは、各次元についての前記積の前記合計をベースメモリアドレス値に加算するステップを備える、請求項15または16に記載の方法。
【請求項18】
前記決定されたメモリアドレスを示すデータを前記処理ユニットに出力するステップは、前記N次元テンソルの各次元についての前記ループの反復に基づいて前記N次元テンソルの各要素のそれぞれのメモリアドレスを順番に出力するステップを備える、請求項15~17のいずれか1項に記載の方法。
【請求項19】
前記テンソルインデックス要素は、テンソルインデックス要素のM個のグループに配置され、Mは、1よりも大きな正の整数であり、
テンソルインデックス要素の各グループは、別個の異なる多次元テンソルに割り当てられる、請求項15~18のいずれか1項に記載の方法。
【請求項20】
前記次元のうちの少なくとも1つの次元の前記乗数値は、前記ループのうちの少なくとも1つのループの反復の数に基づく、請求項15~19のいずれか1項に記載の方法。
【発明の詳細な説明】
【背景技術】
【0001】
発明の詳細な説明
背景
本明細書は、一般に、メモリアドレス値を計算するためのレジスタの使用に関する。レジスタは、分岐条件の処理に使用され得る。
【発明の概要】
【課題を解決するための手段】
【0002】
概要
本明細書に記載されている主題の1つの革新的な側面によれば、レジスタは、入れ子ループ構造を反復し、対応するメモリアドレスを計算し、プログラマがループ境界条件を処理することを可能にすることに使用できる。一般に、レジスタは、ループ境界値、各ループにおける現在のループインデックス変数、メモリアドレス値を計算するための次元乗数、および分岐ループ境界を処理するためのプログラムカウンタ値を含むアーキテクチャステータスのいくつかのセットを維持するように配置され得る。当該配置は、1つ以上の多次元データ構造の処理にとって有効であり得る。これらのアーキテクチャステータスセットにより、プロセッサは、インデックス変数を新たな位置に移動させ、メモリアドレス値を検索し、新たな分岐先にジャンプするための命令を実行し得る。
【0003】
一般に、本明細書に記載されている主題の1つの革新的な側面は、N次元テンソルにアクセスするための命令を処理するための装置で具体化できる。上記装置は、複数のテンソルインデックス要素と、複数の次元乗数要素とを含み、上記次元乗数要素の各々は、対応するテンソルインデックス要素を有する。上記装置は、1つ以上のプロセッサを含み、上記1つ以上のプロセッサは、N次元テンソルの特定の要素にアクセスするための命令を取得するように構成され、上記N次元テンソルは、N個の次元の各々にわたって配置された複数の要素を有し、Nは、1以上の整数であり、上記1つ以上のプロセッサはさらに、上記複数のテンソルインデックス要素のうちの1つ以上のテンソルインデックス要素および上記複数の次元乗数要素のうちの1つ以上の次元乗数要素を用いて、上記特定の要素のアドレスを決定するように構成され、上記N次元テンソルの上記特定の要素にアクセスするための上記決定されたアドレスを示すデータを出力するように構成される。
【0004】
これらのおよび他の実現例は、各々が任意に以下の特徴のうちの1つ以上を含み得る。例えば、上記特定の要素の上記アドレスは、上記N次元テンソルの別の要素からのアドレスオフセットであり得る。上記特定の要素の上記アドレスを決定するために、上記1つ以上のテンソルインデックス要素の各テンソルインデックス要素ごとに、それぞれのテンソルインデックス要素に記憶された値と上記1つ以上の複数のテンソルインデックス要素の上記対応するテンソルインデックス要素に記憶された値とが乗算されて、それぞれの乗算された値を生成し得る。上記アドレスオフセットは、上記乗算された値の合計を求めることによって決定され得る。
【0005】
上記複数のテンソルインデックス要素は、テンソルインデックス要素のM個のグループに配置され得て、Mは、1よりも大きな正の整数である。テンソルインデックス要素の各グループは、別個の異なる多次元テンソルに割り当てられ得る。
【0006】
上記装置は、複数のテンソル境界要素を含み得て、上記複数のテンソル境界要素の各々は、上記複数のテンソルインデックス要素における対応するテンソルインデックス要素を
有し得る。上記命令は、第1のループと上記第1のループの外側ループである第2のループとを含む入れ子ループを処理するための命令を表わし得て、上記第1のループは、第1のインデックス変数を用いて反復され、上記第2のループは、第2のインデックス変数を用いて反復される。
【0007】
上記1つ以上のプロセッサは、上記複数のテンソルインデックス要素、上記複数の次元乗数要素および上記複数のテンソル境界要素に記憶された値を初期化値に設定するように構成され得る。上記1つ以上のプロセッサは、上記複数のテンソル境界要素の第1のテンソル境界要素に記憶された値を、上記第1のループを反復するための上記第1のインデックス変数の上限値に設定するように構成され、上記複数のテンソル境界要素の第2のテンソル境界要素に記憶された値を、上記第2のループを反復するための上記第2のインデックス変数の上限値に設定するように構成され、上記複数の次元乗数要素の第1の次元乗数要素に記憶された値を、予め定められた値に設定するように構成され、上記複数の次元乗数要素の第2の次元乗数要素に記憶された値を、上記第1のインデックス変数の上記上限値に設定するように構成され得る。
【0008】
上記N次元テンソルの上記要素の上記アドレスを決定するために、上記1つ以上のプロセッサは、上記複数のテンソルインデックス要素の第1のテンソルインデックス要素に記憶された値を、上記第1のインデックス変数の現在の値に設定するように構成され、上記複数のテンソルインデックス要素の第2のテンソルインデックス要素に記憶された値を、上記第2のインデックス変数の現在の値に設定するように構成され、上記第1の次元乗数要素に記憶された上記値と上記第1のテンソルインデックス要素に記憶された上記値とを乗算して、第1の乗算された値を取得するように構成され、上記第2の次元乗数要素に記憶された上記値と上記第2のテンソルインデックス要素に記憶された上記値とを乗算して、第2の乗算された値を取得するように構成され、上記第1の乗算された値および上記第2の乗算された値を少なくとも合計することによって上記アドレスを決定するように構成され得る。
【0009】
上記1つ以上のプロセッサは、上記第1のテンソルインデックス要素に記憶された上記値を更新するための命令を受取るように構成され、上記第1のテンソルインデックス要素に記憶された上記値を更新するための上記命令を受取った後、上記第1のテンソルインデックス要素に記憶された上記値と上記第1のテンソル境界要素に記憶された上記値との間の差が閾値を満たすことを判断するように構成され、上記第1のテンソルインデックス要素に記憶された上記値と上記第1のテンソル境界要素に記憶された上記値との間の上記差が上記閾値を満たすと判断したことに応答して、上記第1のテンソルインデックス要素に記憶された上記値を更新するように構成され得る。上記第1のインデックス変数は、上記第1のループが完了するたびに第1のインクリメント値だけインクリメントされ得る。上記第1のテンソルインデックス要素に記憶された上記値を更新するために、上記第1のテンソルインデックス要素に記憶された上記値は、上記第1のインクリメント値だけインクリメントされ得る。
【0010】
上記1つ以上のプロセッサは、上記第1のテンソルインデックス要素に記憶された上記値を更新するための命令を受取るように構成され、上記第1のテンソルインデックス要素に記憶された上記値を更新するための上記命令を受取った後、上記第1のテンソルインデックス要素に記憶された上記値と上記第1のテンソル境界要素に記憶された上記値との間の差が閾値を満たさないことを判断するように構成され得る。上記第1のテンソルインデックス要素に記憶された上記値と上記第1のテンソル境界要素に記憶された上記値との間の上記差が上記閾値を満たさないと判断したことに応答して、上記1つ以上のプロセッサは、上記第1のテンソルインデックス要素に記憶された上記値をリセットするように構成され、上記第2のテンソルインデックス要素に記憶された上記値を更新するように構成さ
れ得る。上記第2のインデックス変数は、上記第2のループが完了するたびに第2のインクリメント値だけインクリメントされ得る。上記第2のテンソルインデックス要素に記憶された上記値を更新するために、上記第2のテンソルインデックス要素に記憶された上記値は、上記第2のインクリメント値だけインクリメントされ得る。
【0011】
上記1つ以上のプロセッサは、1つ以上の演算論理ユニットを含み得る。上記テンソルインデックス要素および上記次元乗数要素の各々は、レジスタであり得る。上記装置は、複数の分岐先要素を含み得て、上記複数の分岐先要素の各々は、上記複数のテンソルインデックス要素における対応するテンソルインデックス要素を有し、上記複数の分岐先要素の各々は、上記それぞれの分岐先要素に対応するループの反復が完了すると実行される命令のためのアドレスを記憶するように構成される。
【0012】
本明細書に記載されている主題は、以下の利点のうちの1つ以上を達成するように特定の実施例で実現可能である。レジスタを用いてメモリアドレス値を追跡することにより、プログラムは、1つの命令で、深く入れ子にされたループを反復することができる。メモリアドレス値は、レジスタに記憶された値に基づいて単純な演算計算を適用することによって迅速に決定可能である。演算論理ユニットを用いてメモリアドレス値を決定することにより、プロセッサにおける計算サイクルの数を減少させることができ、他の計算タスクのためのプロセッサの帯域幅が増加する。命令の数を減少させた状態で、テンソルをトラバース(traverse)することができる。二次元レジスタアーキテクチャにより、各々が異なる次元を有する多次元テンソルを同時に追跡することができる。分岐先テーブルを有することによって、分岐命令関連のオーバーヘッドを減少させることができる。
【0013】
このおよび他の側面の他の実現例は、コンピュータ記憶装置に符号化された方法の動作を実行するように構成された対応するシステム、装置およびコンピュータプログラムを含む。1つ以上のコンピュータのシステムは、動作時にシステムに動作を実行させる、システムにインストールされたソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせによってそのように構成され得る。1つ以上のコンピュータプログラムは、データ処理装置によって実行されたときに装置に動作を実行させる命令を有することによってそのように構成され得る。
【0014】
本明細書に記載されている主題の1つ以上の実現例の詳細は、添付の図面および以下の説明に記載されている。主題の他の考えられる特徴、側面および利点は、明細書、図面および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【0015】
【
図2A】例示的なテンソルトラバースユニットを示す。
【
図2B】例示的なテンソルトラバースユニットを示す。
【
図2C】例示的なテンソルトラバースユニットを示す。
【
図2D】例示的なテンソルトラバースユニットを示す。
【
図2E】例示的なテンソルトラバースユニットを示す。
【
図2F】例示的なテンソルトラバースユニットを示す。
【
図2G】例示的なテンソルトラバースユニットを示す。
【
図2H】例示的なテンソルトラバースユニットを示す。
【
図3】例示的なテンソルトラバースユニットを示す。
【
図4】多次元テンソル変数のアドレスを決定するためのプロセスの一例を示すフロー図である。
【発明を実施するための形態】
【0016】
さまざまな図の中の同様の参照番号および名称は、同様の要素を示す。
詳細な説明
一般に、ソフトウェアアルゴリズムがN次元テンソルを処理する際には、入れ子ループが使用され得て、各ループは、N次元テンソルの各次元をトラバースする役割を果たしている。多次元テンソルは、マトリクスまたは多次元マトリクスであってもよい。N次元テンソルの各次元は、1つ以上の要素を含み得て、各要素は、それぞれのデータ値を記憶し得る。例えば、テンソルは、プログラムにおける変数であってもよく、当該変数は、3つの次元を有し得る。第1の次元は、300個の要素の長さを有し得て、第2の次元は、1000個の要素の長さを有し得て、第3の次元は、20個の要素の長さを有し得る。入れ子ループにおいてテンソルをトラバースするには、要素の対応するデータ値をロードまたは記憶するために当該要素のメモリアドレス値の計算を必要とする。例えば、forループは入れ子ループであり、3つのループインデックス変数によって追跡される3つのループは、三次元テンソルをトラバースするように入れ子にされることができる。場合によっては、プロセッサは、外側ループインデックス変数により内側ループのループ境界を設定するなどのループ境界条件を実行する必要があるかもしれない。例えば、入れ子ループの最も内側のループを出るか否かを判断する際に、プログラムは、入れ子ループの最も内側のループのループインデックス変数の現在の値と、入れ子ループの最も外側のループのループインデックス変数の現在の値とを比較し得る。
【0017】
これらのタスクは、分岐命令および整数演算命令などの相当な数の命令を必要とし得る。各ループ境界が小さく、ループの数が多い場合、計算は、実行時間全体の相当な部分を占めてパフォーマンス全体を著しく劣化させる恐れがある。例えば、プロセッサは、N次元テンソル入力を処理するように設計され得る。プロセッサは、二次元アーキテクチャ上で実現され得て、ソフトウェアによって処置されるべき(N-2)個の次元を残す。Nが大きい場合には、N-2個の次元の処理は、プロセッサにとって計算的に重い可能性がある。なぜなら、計算は非常に高いスカラ計算帯域幅を必要とするからである。プロセッサのためのハードウェアテンソルトラバースユニット(tensor traversal unit)は、テン
ソルをトラバースする際にプロセッサが処理しなければならない次元の数を減少させることによってプロセッサの計算帯域幅を増加させ得る。
【0018】
図1は、テンソルをトラバースするための例示的な計算システム100のブロック図を示す。一般に、計算システム100は、入力104を処理して、出力116を生成する。計算システム100は、線形代数計算を実行するように構成され得る。入力104は、計算システム100によって処理されることができる任意の好適なデータであり得る。計算システム100は、処理ユニット102と、記憶媒体104と、テンソルトラバースユニット106とを含む。
【0019】
一般に、処理ユニット102がテンソルの特定の要素にアクセスするための命令を実行すると、テンソルトラバースユニット106は、当該テンソルの特定の要素のアドレスを決定し、その結果、処理ユニット102は、記憶媒体104にアクセスして、当該特定の要素の値を表わすデータ114を読取ることができる。例えば、プログラムは、入れ子ループを含み得て、処理ユニット102は、入れ子ループに関連付けられる現在のインデックス変数値に従って、入れ子ループ内の二次元配列変数の要素にアクセスするための命令を実行し得る。入れ子ループに関連付けられる現在のインデックス変数値に基づいて、テンソルトラバースユニット106は、二次元配列変数の第1の要素からのオフセットを表わすオフセット値を決定し得る。次いで、当該オフセット値を用いて、記憶媒体から、処理ユニット102は、二次元配列変数の特定の要素にアクセスし得る。
【0020】
処理ユニット102は、記憶媒体104に記憶される命令112または別の記憶装置に記憶される他の命令を含む、計算システム100内での実行のための命令を処理するよう
に構成される。処理ユニット102は、1つ以上のプロセッサを含み得る。記憶媒体104は、計算システム100内の情報を記憶する。いくつかの実現例では、記憶媒体104は、揮発性メモリユニットである。いくつかの他の実現例では、記憶媒体104は、不揮発性メモリユニットである。また、記憶媒体104は、フロッピー(登録商標)ディスクデバイス、ハードディスクデバイス、光ディスクデバイス、またはテープデバイス、フラッシュメモリもしくは他の同様のソリッドステートメモリデバイス、またはストレージエリアネットワークもしくは他の構成におけるデバイスを含むデバイスの配列などの、別の形態のコンピュータ読取可能な媒体であってもよい。命令は、処理ユニット102によって実行されたときに、処理ユニット102に1つ以上のタスクを実行させる。
【0021】
テンソルトラバースユニット106は、1つ以上のテンソルに関連付けられるステータスを決定するように構成される。当該ステータスは、ループ境界値、現在のループインデックス変数値、メモリアドレス値を計算するための次元乗数、および/または、分岐ループ境界を処理するためのプログラムカウンタ値を含み得る。テンソルトラバースユニット106は、テンソルステータス要素122と、演算論理ユニット124とを含む。テンソルステータス要素122の各々は、記憶要素、例えばレジスタまたはその他の好適な記憶回路であってもよい。いくつかの実現例では、テンソルステータス要素122は、
図2A~
図2Hおよび
図3A~
図3Bを参照して以下でより詳細に説明するように、異なるグループに物理的または論理的に配置され得る。いくつかの実現例では、テンソルステータス要素122のグループは、多次元配列に物理的または論理的に配置され得る。例えば、テンソルステータス要素122の各グループは、二次元配列に物理的または論理的に配置されてもよい。演算論理ユニット124は、演算および論理オペレーションを実行するように構成された1つ以上の演算論理ユニット(arithmetic logic unit:ALU)を含む。
例えば、演算論理ユニット124は、加算、減算、乗算、除算、論理積、論理和、またはその他の好適な演算および論理オペレーションを実行するように構成されたデジタル回路を含んでもよい。
【0022】
図2Aは、テンソルトラバースユニットのテンソルステータス要素200の例示的なセットを示す。テンソルステータス要素200は、テンソルトラバースユニット106のテンソルステータス要素122に対応し得る。テンソルトラバースユニット200は、テンソルインデックス要素202のグループと、テンソル境界要素204のグループと、次元乗数要素206のグループとを含む。テンソルインデックス要素202は、M個の行およびN個の列を有する二次元配列として物理的または論理的に配置され得て、MおよびNは1以上の整数である。いくつかの実現例では、テンソルインデックス要素202の各行は、テンソルのためのテンソルインデックス情報を表わし得る。例えば、プログラムが2つの配列変数V1およびV2を規定する場合、テンソルトラバースユニットは、配列変数V1およびV2のためのテンソルインデックス情報をそれぞれ追跡するために行202aおよび202bを割り当ててもよい。いくつかの実現例では、テンソルインデックス要素202の各列は、テンソルに関連付けられる入れ子ループインデックス変数値のためのテンソルインデックス情報を表わし得る。例えば、プログラムが変数V1にアクセスするための3つのループを有する入れ子ループを規定し、入れ子ループの各ループが入れ子ループインデックス変数i、jおよびkによって指標付けされる場合、テンソルトラバースユニットは、入れ子ループインデックス変数i、jおよびkをそれぞれ追跡するためにテンソルインデックス要素X
1,1、X
1,2およびX
1,3を割り当ててもよい。テンソルインデックス情報については、以下の
図2D~
図2Hを参照して以下でより詳細に説明する。
【0023】
テンソル境界要素204は、テンソルインデックス要素202と同一の次元を有する二次元配列として物理的または論理的に配置され得て、テンソル境界要素204の各要素は、テンソルインデックス要素202における対応する要素を有する。いくつかの実現例で
は、テンソル境界要素204の各行は、テンソルのためのテンソル境界情報を表わし得る。例えば、プログラムが2つの配列変数V1およびV2を規定する場合、テンソルトラバースユニットは、配列変数V1およびV2のためのテンソル境界情報をそれぞれ追跡するために行204aおよび204bを割り当ててもよい。いくつかの実現例では、テンソル境界要素204の各列は、テンソルに関連付けられる入れ子ループインデックス変数値のためのテンソル境界情報を表わし得る。例えば、プログラムが変数V1にアクセスするための3つのループを有する入れ子ループを規定し、入れ子ループの各ループが入れ子ループインデックス変数i、jおよびkによって指標付けされる場合、テンソルトラバースユニットは、入れ子ループインデックス変数i、jおよびkにそれぞれ関連付けられるテンソル境界情報を追跡するためにテンソル境界要素Y
1,1、Y
1,2およびY
1,3を割り当ててもよい。テンソル境界情報については、以下の
図2Cを参照して以下でより詳細に説明する。
【0024】
次元乗数要素206は、テンソルインデックス要素202と同一の次元を有する二次元配列として物理的または論理的に配置され得て、次元乗数要素206の各要素は、テンソルインデックス要素202における対応する要素を有する。いくつかの実現例では、次元乗数要素206の各行は、テンソルのための次元乗数情報を表わし得る。例えば、プログラムが2つの配列変数V1およびV2を規定する場合、テンソルトラバースユニットは、配列変数V1およびV2のための次元乗数情報をそれぞれ追跡するために行206aおよび206bを割り当ててもよい。いくつかの実現例では、次元乗数要素206の各列は、テンソルに関連付けられる入れ子ループインデックス変数値のための次元乗数情報を表わし得る。例えば、プログラムが変数V1にアクセスするための3つのループを有する入れ子ループを規定し、入れ子ループの各ループが入れ子ループインデックス変数i、jおよびkによって指標付けされる場合、テンソルトラバースユニットは、入れ子ループインデックス変数i、jおよびkにそれぞれ関連付けられる次元乗数情報を追跡するために次元乗数要素Z
1,1、Z
1,2およびZ
1,3を割り当ててもよい。次元乗数情報については、以下の
図2Dを参照して以下でより詳細に説明する。
【0025】
図2B~
図2Hは、テンソルステータス要素200が、テンソルを処理するためにテンソルトラバースユニットによっていかに使用され得るかの一例を示す。
図2Bを参照して、プログラム212は、記憶媒体104または処理ユニット102によって実行可能な別の記憶媒体に記憶され得る。プログラム212は、4という第1の次元と2という第2の次元とを有する文字配列変数Vを指定する。プログラム212は、変数Vをトラバースするための入れ子forループを指定し、forループは、入れ子ループインデックス変数iによって追跡される外側ループにおけるVの第1の次元をトラバースし、入れ子ループインデックス変数jによって追跡される内側ループにおけるVの第2の次元をトラバースする。いくつかの実現例では、テンソルステータス要素200は、プログラムの開始時に初期化され得る。例えば、プロセッサは、テンソルステータス要素200を初期化する命令「InitializeElements」を実行してもよい。当該命令は、プロセッサによって実行可能な命令セットのハードウェア命令であってもよい。いくつかの実現例では、初期化後、テンソルステータス要素200の各要素は、予め定められた値に設定される。ここでは、初期化後、テンソルステータス要素200の各要素は、ゼロに設定され得る。
【0026】
図2Cは、プログラム212に従ったテンソル境界要素204におけるテンソル境界情報の設定を示す。例えば、プロセッサは、テンソル境界要素204におけるテンソル境界情報を設定する命令「SetTensorBound」を実行してもよい。いくつかの実現例では、テンソル境界情報は、対応する入れ子ループインデックス変数の上限を表わす。ここでは、内側入れ子ループインデックス変数iは4という上限を有し、外側入れ子ループインデックス変数jは2という上限を有する。テンソル境界要素204におけるテンソル境界情報を設定した後、要素214(すなわちY
1,2)は4に設定され、要素216(すなわちY
1,1)は2に設定される。
【0027】
図2Dは、プログラム212に従った次元乗数要素206における次元乗数情報の設定を示す。例えば、プロセッサは、次元乗数要素206における次元乗数情報を設定する命令「SetDimensionMultiplier」を実行してもよい。いくつかの実現例では、次元乗数情報は、テンソルインデックス要素202における対応する要素が乗算され得る乗数を表わす。ここでは、文字変数Vは、4という第1の次元と、2という第2の次元とを有する。要素V[0][0]がベースメモリアドレスPに記憶され、要素V[0][1]がメモリアドレスP+1に記憶される場合、要素V[1][0]はメモリアドレスP+2に記憶される。したがって、要素V[i][j]のための対応するメモリアドレスは、P+(i×2)+(j×1)である。したがって、外側ループのための次元乗数情報は2であり、内側ループのための次元乗数情報は1である。次元乗数要素206における次元乗数情報を設定した後、要素222(すなわちZ
1,2)は2に設定され、要素224(すなわちZ
1,1)は1に設定される。
【0028】
図2Eは、プログラム212に従った要素V[0][0]へのアクセスを示す。例えば、プロセッサは、アクセスされている要素に対応するメモリアドレスの位置を突き止める命令「LocateTensor」を実行してもよい。いくつかの実現例では、当該命令は、ベースメモリアドレスを含み得る。例えば、命令「LocateTensor」は、変数Vの第1の要素である要素V[0][0]のメモリアドレスを含み得る。いくつかの実現例では、当該命令は、アクセスされるべきテンソルに対応する行番号を含み得る。例えば、命令「LocateTensor」は、変数Vに対応する行番号を含んでもよい。ここでは、行番号は1である。
【0029】
いくつかの実現例では、命令を受取ったことに応答して、演算論理ユニット(例えば演算論理ユニット106)は、テンソルインデックス要素202の各々に記憶された値と対応する次元乗数要素206に記憶された値との間の乗算結果の合計を計算することによって、メモリアドレスオフセットを決定する。ここでは、演算論理ユニットは、要素X1,Nに記憶された値と要素Z1,Nに記憶された値とを乗算し、要素X1,N-1に記憶された値と要素Z1,N-1に記憶された値とを乗算し、...要素X1,2に記憶された値
と要素Z1,2に記憶された値とを乗算し、要素X1,1に記憶された値と要素Z1,1に記憶された値とを乗算する。次いで、演算論理ユニットは、全ての乗算結果を合計して、アクセスされている要素に対応するメモリアドレスを決定する。テンソルインデックス要素202における全ての値がゼロであるので、ボックス230によって示されるようにメモリアドレスオフセットはゼロである。次いで、プロセッサは、ベースメモリアドレス(すなわちP)をメモリアドレスオフセット(すなわち0)に加算してメモリアドレスを決定し、決定されたメモリアドレスに基づいて記憶媒体に記憶されたデータにアクセスすることによって、要素V[0][0]にアクセスすることができる。
【0030】
図2Fは、プログラム212に従った要素V[0][1]へのアクセスを示す。例えば、プログラムが第1の内側ループを反復した後、入れ子ループインデックス変数は更新され(すなわちi=0およびj=0)、プロセッサは、プログラムが第2の内側ループに入ったときにテンソルインデックス要素202を更新する(すなわちi=0およびj=1)命令「IterateTensor」を実行してもよい。いくつかの実現例では、テンソルトラバース
ユニットは、最低のインデックスを有するテンソルインデックス要素を予め定められた値だけインクリメントすることによってテンソルインデックス要素202を更新する。例えば、
図2Fを参照して、テンソルトラバースユニットは、テンソルインデックス要素228(すなわちX
1,1)を1だけインクリメントしてもよい。いくつかの他の実現例では
、テンソルトラバースユニットは、最低のインデックスを有するテンソルインデックス要素を予め定められた値だけデクリメントすることによってテンソルインデックス要素202を更新してもよい。
【0031】
いくつかの実現例では、テンソルトラバースユニットは、テンソルインデックス要素202における更新された値とテンソル境界要素204における値とを比較し、閾値が満たされたか否かを判断する。例えば、テンソルトラバースユニットは、テンソルインデックス要素228における更新された値(すなわち1)とテンソル境界要素216における値(すなわち2)とを比較し、テンソルインデックス要素228における更新された値がテンソル境界要素216における値よりも小さいか否かを判断してもよい。ここでは、テンソルインデックス要素228における更新された値は、テンソル境界要素216における値よりも小さく、テンソルインデックス要素228における更新された値は1のままである。
【0032】
次いで、プロセッサは、V[0][1]に対応するメモリアドレスの位置を突き止めるための命令「LocateTensor」を実行することによって要素V[0][1]にアクセスすることができる。
図2Fを参照して、テンソルインデックス要素228以外のテンソルインデックス要素202における全ての値は、ゼロである。テンソルインデックス要素228は1という値を有し、演算論理ユニットは、ボックス232によって示されるようにメモリアドレスオフセットが1であると判断し得る。次いで、プロセッサは、ベースメモリアドレス(すなわちP)をメモリアドレスオフセット(すなわち1)に加算してメモリアドレスを決定し、決定されたメモリアドレスに基づいて記憶媒体に記憶されたデータにアクセスすることによって、要素V[0][1]にアクセスすることができる。
【0033】
図2Gは、プログラム212に従った要素V[1][0]へのアクセスを示す。例えば、プログラムが二度目に内側ループを反復した後、入れ子ループインデックス変数は更新され(すなわちi=1およびj=0)、プロセッサは、テンソルインデックス要素202を更新する命令「IterateTensor」を実行してもよい。例えば、テンソルトラバースユニ
ットは、テンソルインデックス要素228(すなわちX
1,1)を1だけインクリメントしてもよい。テンソルトラバースユニットは、テンソルインデックス要素228における更新された値(すなわち2)とテンソル境界要素216における値(すなわち2)とを比較し、テンソルインデックス要素228における更新された値がテンソル境界要素216における値よりも小さくないと判断し得る。いくつかの実現例では、閾値が満たされていないと判断したことに応答して、テンソルトラバースユニットは、更新された値を次のテンソルインデックス要素に繰り越して、現在のテンソルインデックス要素をリセットし得る。例えば、テンソルインデックス要素228における更新された値がテンソル境界要素216における値よりも小さくないので、テンソルトラバースユニットは、テンソルインデックス要素226を1だけインクリメントし、テンソルインデックス要素228をゼロにリセットしてもよい。
【0034】
次いで、プロセッサは、V[1][0]に対応するメモリアドレスの位置を突き止めるための命令「LocateTensor」を実行することによって要素V[1][0]にアクセスすることができる。
図2Gを参照して、テンソルインデックス要素226以外のテンソルインデックス要素202における全ての値は、ゼロである。テンソルインデックス要素226は1という値を有し、演算論理ユニットは、ボックス234によって示されるようにメモリアドレスオフセットが2であると判断し得る。次いで、プロセッサは、ベースメモリアドレス(すなわちP)をメモリアドレスオフセット(すなわち2)に加算してメモリアドレスを決定し、決定されたメモリアドレスに基づいて記憶媒体に記憶されたデータにアクセスすることによって、要素V[1][0]にアクセスすることができる。
【0035】
図2Hは、プログラム212に従った要素V[3][1]へのアクセスを示す。例えば、プログラムは、入れ子ループインデックス変数がそれらの上限にくる(すなわちi=3およびj=1)まで内側ループおよび外側ループを反復し続けてもよい。プロセッサは、
V[3][1]に対応するメモリアドレスの位置を突き止めるための命令「LocateTensor」を実行することによって要素V[3][1]にアクセスすることができる。
図2Hを参照して、テンソルインデックス要素226および228以外のテンソルインデックス要素202における全ての値は、ゼロである。テンソルインデックス要素226は3という値を有し、テンソルインデックス要素228は1という値を有する。演算論理ユニットは、ボックス236によって示されるようにメモリアドレスオフセットが7であると判断し得る。次いで、プロセッサは、ベースメモリアドレス(すなわちP)をメモリアドレスオフセット(すなわち7)に加算してメモリアドレスを決定し、決定されたメモリアドレスに基づいて記憶媒体に記憶されたデータにアクセスすることによって、要素V[3][1]にアクセスすることができる。
【0036】
次いで、プロセッサは、テンソルインデックス要素202を更新する命令「IterateTensor」を実行し得る。例えば、テンソルトラバースユニットは、テンソルインデックス要
素228(すなわちX1,1)を1だけインクリメントしてもよい。テンソルトラバースユニットは、テンソルインデックス要素228における更新された値(すなわち2)とテンソル境界要素216における値(すなわち2)とを比較し、テンソルインデックス要素228における更新された値がテンソル境界要素216における値よりも小さくないと判断し得る。テンソルインデックス要素228における更新された値がテンソル境界要素216における値よりも小さくないので、テンソルトラバースユニットは、テンソルインデックス要素226を1だけインクリメントし、テンソルインデックス要素228をゼロにリセットし得る。テンソルトラバースユニットは、テンソルインデックス要素226における更新された値(すなわち3+1=4)とテンソル境界要素214における値(すなわち4)とを比較し、テンソルインデックス要素226における更新された値がテンソル境界要素214における値よりも小さくないと判断し得る。テンソルインデックス要素228における更新された値がテンソル境界要素214における値よりも小さくないので、テンソルトラバースユニットは、次のテンソルインデックス要素(すなわちX1,3)を1だけインクリメントし、テンソルインデックス要素226をゼロにリセットし得る。しかし、対応するテンソル境界要素(すなわちY1,3)がゼロであるので、閾値は満たされない。テンソルトラバースユニットは、第1の行における全てのテンソルインデックス要素がゼロにリセットされるまでテンソルインデックス要素202の第1の行をリセットし続けるであろう。
【0037】
図2B~
図2Hを参照して上記した例では、要素Vのためのテンソルトラバースの順序は、V[0][0]、V[0][1]、V[1][0]、V[1][1]、V[2][0]、V[2][1]、V[3][0]およびV[3][1]である。いくつかの実現例では、プログラムは、要素214(すなわちY
1,2)におけるテンソル境界情報を2に設定し、要素216(すなわちY
1,1)におけるテンソル境界情報を4に設定し、要素222(すなわちZ
1,2)における次元乗数情報を1に設定し、要素224(すなわちZ
1,1)における次元乗数情報を2に設定することによって、V[0][0]、V[1][0]、V[2][0]、V[3][0]、V[0][1]、V[1][1]、V[2][1]およびV[3][1]の順序で要素Vをトラバースし得る。
【0038】
図3は、テンソルトラバースユニットのテンソルステータス要素300の例示的なセットを示す。テンソルステータス要素300は、テンソルトラバースユニット106のテンソルステータス要素122またはテンソルステータス要素200に対応し得る。テンソルトラバースユニット300は、テンソルインデックス要素302のグループと、テンソル境界要素304のグループと、次元乗数要素306のグループと、分岐先要素308のグループとを含む。分岐先要素308は、二次元配列として物理的または論理的に配置され得て、分岐先要素308の各要素は、テンソルインデックス要素302における対応する要素を有する。いくつかの実現例では、分岐先要素308の各行は、テンソルのための分
岐先情報を表わし得る。いくつかの実現例では、分岐先要素308の各列は、テンソルに関連付けられる入れ子ループインデックス変数値のための分岐先情報を表わし得る。いくつかの実現例では、テンソルインデックス要素302、テンソル境界要素304および次元乗数要素306のためにN個の列が存在するN次元テンソルでは、対応する分岐先308のN+1個の列が存在し得る。なぜなら、境界閾値を満たすためのN+1個の場合があるからである。
【0039】
いくつかの実現例では、分岐先情報は、入れ子ループでのループ反復が完了するとプロセッサによって実行される命令のメモリアドレスを含み得る。例えば、テンソルインデックス要素における値が更新されると、プロセッサは、対応する分岐先要素に記憶されたメモリアドレスに従って命令を実行してもよい。
図3を参照して、プログラム312は、記憶媒体104または処理ユニット102によって実行可能な別の記憶媒体に記憶され得る。プログラム312は、4という第1の次元と2という第2の次元とを有する文字配列変数Vを指定する。プログラム312は、変数Vをトラバースするための入れ子forループを指定し、forループは、入れ子ループインデックス変数iによって追跡される外側ループにおけるVの第1の次元をトラバースし、入れ子ループインデックス変数jによって追跡される内側ループにおけるVの第2の次元をトラバースする。また、プログラム312は、プロセッサが入れ子ループインデックス変数iの現在の値と数2とを比較するための最小値関数命令を実行することを必要とする、内側ループを出るための条件を指定する。いくつかの実現例では、最小値関数命令のメモリアドレスは、分岐先要素324に記憶され得て、その結果、テンソルインデックス要素326からテンソルインデックス要素328への繰り越しがある場合には、最小値関数命令は、内側ループのための分岐条件を決定して内側ループのためのテンソル境界情報を設定するようにプロセッサによって実行されるであろう。同様に、異なる命令のメモリアドレスは、分岐先要素322に記憶され得て、その結果、テンソルインデックス要素328への繰り越しを有することなくテンソルインデックス要素326においてインクリメントがある場合には、当該異なる命令がプロセッサによって実行されるであろう。
【0040】
図4は、多次元テンソル変数のアドレスを決定するためのプロセス400の一例を示すフロー図である。プロセス400は、1つ以上のコンピュータのシステム、例えば計算システム100によって実行され得る。当該システムは、複数のテンソルインデックス要素と複数の次元乗数要素とを有するテンソルトラバースユニットを含み、次元乗数要素の各々は、対応するテンソルインデックス要素を有する。いくつかの実現例では、当該システムは、複数のテンソル境界要素を含み得て、複数のテンソル境界要素の各々は、複数のテンソルインデックス要素における対応するテンソルインデックス要素を有し得る。いくつかの実現例では、当該システムは、1つ以上の演算論理ユニットを含む。
【0041】
当該システムは、N次元テンソルの特定の要素にアクセスするための命令を取得し、N次元テンソルは、N次元の各々にわたって配置された複数の要素を有し、Nは1以上の整数である(402)。例えば、処理ユニット102は、テンソルの特定の要素にアクセスするための命令を実行してもよい。
【0042】
いくつかの実現例では、当該命令は、第1のループと第1のループの外側ループである第2のループとを含む入れ子ループを処理するための命令を表わし得て、第1のループは、第1のインデックス変数を用いて反復され、第2のループは、第2のインデックス変数を用いて反復される。例えば、プログラム212は、記憶媒体104または処理ユニット102によって実行可能な別の記憶媒体に記憶されてもよい。プログラム212は、4という第1の次元と2という第2の次元とを有する文字配列変数Vを指定し得る。プログラム212は、変数Vをトラバースするための入れ子forループを指定し得て、forループは、入れ子ループインデックス変数iによって追跡される外側ループにおけるVの第
1の次元をトラバースし、入れ子ループインデックス変数jによって追跡される内側ループにおけるVの第2の次元をトラバースする。
【0043】
当該システムは、複数のテンソルインデックス要素のうちの1つ以上のテンソルインデックス要素および複数の次元乗数要素のうちの1つ以上の次元乗数要素を用いて、特定の要素のアドレスを決定する(404)。いくつかの実現例では、特定の要素のアドレスは、N次元テンソルの別の要素からのアドレスオフセットであってもよい。1つ以上のテンソルインデックス要素の各テンソルインデックス要素ごとに、当該システムは、それぞれのテンソルインデックス要素に記憶された値と、1つ以上の複数のテンソルインデックス要素の対応するテンソルインデックス要素に記憶された値とを乗算して、それぞれの乗算された値を生成し得る。当該システムは、乗算された値の合計を求めることによってアドレスオフセットを決定し得る。例えば、演算論理ユニット(例えば演算論理ユニット106)は、テンソルインデックス要素202の各々に記憶された値と対応する次元乗数要素206に記憶された値との間の乗法積の合計を計算することによって、メモリアドレスオフセットを決定してもよい。
【0044】
いくつかの実現例では、当該システムは、複数のテンソルインデックス要素、複数の次元乗数要素および複数のテンソル境界要素に記憶された値を初期化値に設定し得る。例えば、プロセッサは、テンソルステータス要素200を初期化する命令「InitializeElements」を実行してもよい。初期化後、テンソルステータス要素200の各要素は、ゼロに設定され得る。
【0045】
いくつかの実現例では、当該システムは、複数のテンソル境界要素の第1のテンソル境界要素に記憶された値を、第1のループを反復するための第1のインデックス変数の上限値に設定し得る。当該システムは、複数のテンソル境界要素の第2のテンソル境界要素に記憶された値を、第2のループを反復するための第2のインデックス変数の上限値に設定し得る。例えば、プロセッサは、テンソルステータス要素200を初期化する命令「InitializeElements」を実行してもよい。初期化後、テンソルステータス要素200の各要素は、ゼロに設定され得る。当該システムは、複数の次元乗数要素の第1の次元乗数要素に記憶された値を予め定められた値に設定し得る。当該システムは、複数の次元乗数要素の第2の次元乗数要素に記憶された値を第1のインデックス変数の上限値に設定し得る。例えば、プロセッサは、テンソル境界要素204におけるテンソル境界情報を設定する命令「SetTensorBound」を実行してもよい。テンソル境界要素204におけるテンソル境界情報を設定した後、要素214(すなわちY1,2)は4に設定され、要素216(すなわちY1,1)は2に設定される。
【0046】
いくつかの実現例では、当該システムは、複数のテンソルインデックス要素の第1のテンソルインデックス要素に記憶された値を第1のインデックス変数の現在の値に設定し得る。当該システムは、複数のテンソルインデックス要素の第2のテンソルインデックス要素に記憶された値を第2のインデックス変数の現在の値に設定し得る。当該システムは、第1の次元乗数要素に記憶された値と、第1のテンソルインデックス要素に記憶された値とを乗算して、第1の乗算された値を取得し得る。当該システムは、第2の次元乗数要素に記憶された値と、第2のテンソルインデックス要素に記憶された値とを乗算して、第2の乗算された値を取得し得る。当該システムは、第1の乗算された値と第2の乗算された値とを少なくとも合計することによってアドレスを決定し得る。例えば、演算論理ユニットは、要素X1,Nに記憶された値と要素Z1,Nに記憶された値とを乗算し、要素X1,N-1に記憶された値と要素Z1,N-1に記憶された値とを乗算し、...要素X1,
2に記憶された値と要素Z1,2に記憶された値とを乗算し、要素X1,1に記憶された値と要素Z1,1に記憶された値とを乗算する。次いで、演算論理ユニットは、全ての乗算された積を合計して、アクセスされている要素に対応するメモリアドレスを決定する。
【0047】
いくつかの実現例では、当該システムは、第1のテンソルインデックス要素に記憶された値を更新するための命令を受取り得る。例えば、プロセッサは、テンソルインデックス要素202を更新する命令「IterateTensor」を実行してもよい。第1のテンソルインデ
ックス要素に記憶された値を更新するための命令を受取った後、当該システムは、第1のテンソルインデックス要素に記憶された値と第1のテンソル境界要素に記憶された値との間の差が閾値を満たすと判断し得る。第1のテンソルインデックス要素に記憶された値と第1のテンソル境界要素に記憶された値との間の差が閾値を満たすと判断したことに応答して、当該システムは、第1のテンソルインデックス要素に記憶された値を更新し得る。例えば、
図2Fを参照して、テンソルトラバースユニットは、テンソルインデックス要素228(すなわちX
1,1)を1だけインクリメントしてもよい。テンソルインデックス要素228における更新された値は、テンソル境界要素216における値よりも小さく、テンソルインデックス要素228における更新された値は、1のままである。
【0048】
いくつかの実現例では、第1のインデックス変数は、第1のループが完了するたびに第1のインクリメント値だけインクリメントされ得る。当該システムは、第1のテンソルインデックス要素に記憶された値を第1のインクリメント値だけインクリメントし得る。例えば、プログラムが第2の内側ループに入った(すなわちi=0およびj=1)後、テンソルトラバースユニットは、テンソルインデックス要素228(すなわちX1,1)を1だけインクリメントしてもよい。
【0049】
いくつかの実現例では、当該システムは、第1のテンソルインデックス要素に記憶された値を更新するための命令を受取り得る。例えば、プロセッサは、テンソルインデックス要素202を更新する命令「IterateTensor」を実行してもよい。第1のテンソルインデ
ックス要素に記憶された値を更新するための命令を受取った後、当該システムは、第1のテンソルインデックス要素に記憶された値と第1のテンソル境界要素に記憶された値との間の差が閾値を満たさないと判断し得る。第1のテンソルインデックス要素に記憶された値と第1のテンソル境界要素に記憶された値との間の差が閾値を満たさないと判断したことに応答して、当該システムは、第1のテンソルインデックス要素に記憶された値をリセットし、第2のテンソルインデックス要素に記憶された値を更新し得る。例えば、テンソルトラバースユニットは、テンソルインデックス要素228(すなわちX1,1)を1だけインクリメントしてもよい。テンソルトラバースユニットは、テンソルインデックス要素228における更新された値(すなわち2)とテンソル境界要素216における値(すなわち2)とを比較し、テンソルインデックス要素228における更新された値がテンソル境界要素216における値よりも小さくないと判断し得る。テンソルインデックス要素228における更新された値がテンソル境界要素216における値よりも小さくないので、テンソルトラバースユニットは、テンソルインデックス要素226を1だけインクリメントし、テンソルインデックス要素228をゼロにリセットし得る。
【0050】
いくつかの実現例では、第2のインデックス変数は、第2のループが完了するたびに第2のインクリメント値だけインクリメントされ得る。当該システムは、第2のテンソルインデックス要素に記憶された値を第2のインクリメント値だけインクリメントし得る。例えば、プログラムが外側ループの次のループに入った(すなわちi=1およびj=0)後、テンソルトラバースユニットは、テンソルインデックス要素226(すなわちX1,2)を1だけインクリメントしてもよい。
【0051】
当該システムは、N次元テンソルの特定の要素にアクセスするための決定されたアドレスを示すデータを出力する(406)。例えば、処理ユニット102は、メモリアドレスオフセット値を用いて、記憶媒体におけるN次元配列変数の特定の要素にアクセスしてもよい。
【0052】
いくつかの実現例では、当該システムは、複数の分岐先要素を含み、複数の分岐先要素の各々は、複数のテンソルインデックス要素における対応するテンソルインデックス要素を有し、複数の分岐先要素の各々は、それぞれの分岐先要素に対応するループの反復が完了すると実行される命令のためのアドレスを記憶するように構成される。例えば、テンソルトラバースユニット300は、分岐先情報を記憶する分岐先要素308のグループを含む。分岐先情報は、入れ子ループのループ反復が完了するとプロセッサによって実行される命令のメモリアドレスを含み得る。
【0053】
本明細書に記載されている主題および機能的オペレーションの実施例は、デジタル電子回路、有形に具体化されたコンピュータソフトウェアもしくはファームウェア、本明細書に開示された構造およびそれらの構造的等価物を含むコンピュータハードウェア、またはそれらのうちの1つ以上の組み合わせで実現可能である。本明細書に記載されている主題の実施例は、1つ以上のコンピュータプログラムとして、すなわち有形の非一時的なプログラムキャリア上で符号化されてデータ処理装置によって実行されるかまたはデータ処理装置のオペレーションを制御するためのコンピュータプログラム命令の1つ以上のモジュールとして実現可能である。代替的にまたは加えて、プログラム命令は、情報を符号化して好適な受信機装置に送信してデータ処理装置によって実行されるように生成される人為的に生成された伝搬信号、例えばマシンによって生成される電気信号、光信号または電磁信号上で符号化されてもよい。コンピュータ記憶媒体は、マシン読取可能な記憶装置、マシン読取可能な記憶基板、ランダムもしくはシリアルアクセスメモリデバイス、またはそれらのうちの1つ以上の組み合わせであってもよい。
【0054】
「データ処理装置」という用語は、データを処理するための全ての種類の装置、デバイスおよびマシンを包含し、一例としてプログラム可能なプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む。当該装置は、特殊用途論理回路、例えばFPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)を含んでもよい。また、当該装置は、ハードウェアに加えて、対象のコンピュータプログラムのための実行環境を作り出すコード、例えばプロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらのうちの1つ以上の組み合わせを構成するコードを含んでもよい。
【0055】
コンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、モジュール、ソフトウェアモジュール、スクリプト、またはコードとも称され、そのようなものとしても記載され得る)は、コンパイラ型言語もしくはインタープリタ型言語、または宣言型言語または手続き型言語を含む任意の形態のプログラミング言語で書込まれてもよく、スタンドアロン型プログラムまたはモジュール、コンポーネント、サブルーチンもしくは計算環境での使用に好適な他のユニットを含む任意の形態で配備されてもよい。コンピュータプログラムは、ファイルシステムにおけるファイルに対応してもよいが、対応する必要はない。プログラムは、他のプログラムもしくはデータを保持するファイルの一部、例えばマークアップ言語ドキュメントに記憶された1つ以上のスクリプトに記憶されてもよく、対象のプログラムに専用の単一のファイルに記憶されてもよく、または複数の調整されたファイル、例えば1つ以上のモジュール、サブプログラムもしくはコードの一部を記憶するファイルに記憶されてもよい。コンピュータプログラムは、1つのコンピュータで実行されるように配備されてもよく、または1箇所に位置するかもしくは複数の箇所に分散されて通信ネットワークよって相互接続されている複数のコンピュータで実行されるように配備されてもよい。
【0056】
本明細書に記載されているプロセスおよび論理フローは、入力データ上で動作して出力を生成することによって機能を実行するように1つ以上のコンピュータプログラムを実行
する1つ以上のプログラム可能なコンピュータによって実行されてもよい。また、当該プロセスおよび論理フローは、特殊用途論理回路、例えばFPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)またはGPGPU(汎用グラフィックス処理ユニット)によって実行されてもよく、そのようなものとして装置が実現されてもよい。
【0057】
コンピュータプログラムの実行に好適なコンピュータは、一例として、汎用マイクロプロセッサもしくは特殊用途マイクロプロセッサに基づいてもよく、またはそれら両方に基づいてもよく、またはその他の種類の中央処理装置に基づいてもよい。一般に、中央処理装置は、リードオンリメモリまたはランダムアクセスメモリまたはそれら両方から命令およびデータを受取るであろう。コンピュータの不可欠な要素は、命令を実施または実行するための中央処理装置と、命令およびデータを記憶するための1つ以上のメモリデバイスとである。一般に、コンピュータは、データを記憶するための1つ以上の大容量記憶装置、例えば磁気ディスク、光磁気ディスクまたは光ディスクも含み、または当該1つ以上の大容量記憶装置からデータを受取るか当該1つ以上の大容量記憶装置にデータを転送するように、もしくはデータの受取りも転送も行うように作動的に結合されるであろう。しかし、コンピュータは、このような装置を有する必要はない。さらに、コンピュータは、別の装置、例えば数例を挙げると、携帯電話、パーソナルデジタルアシスタント(personal
digital assistant:PDA)、携帯型オーディオもしくはビデオプレーヤ、ゲーム機、グローバルポジショニングシステム(Global Positioning System:GPS)受信機、ま
たは携帯記憶装置、例えばユニバーサルシリアルバス(universal serial bus:USB)フラッシュドライブに組み込まれてもよい。
【0058】
コンピュータプログラム命令およびデータの記憶に好適なコンピュータ読取可能な媒体は、全ての形態の不揮発性メモリ、媒体およびメモリデバイスを含み、一例として、例えばEPROM、EEPROMおよびフラッシュメモリデバイスといった半導体メモリデバイス、例えば内部ハードディスクまたはリムーバブルディスクといった磁気ディスク、光磁気ディスク、ならびにCD ROMおよびDVD-ROMディスクを含む。プロセッサおよびメモリは、特殊用途論理回路によって補完されてもよく、または特殊用途論理回路に組み入れられてもよい。
【0059】
ユーザとの対話を提供するために、本明細書に記載されている主題の実施例は、情報をユーザに表示するためのディスプレイ装置、例えばCRT(陰極線管)またはLCD(液晶ディスプレイ)モニタと、キーボードと、ユーザが入力をコンピュータに提供することができるポインティング装置、例えばマウスまたはトラックボールとを有するコンピュータ上で実現可能である。ユーザとの対話を提供するために他の種類の装置も使用可能である。例えば、ユーザに提供されるフィードバックは、任意の形態の感覚フィードバック、例えば視覚的フィードバック、聴覚的フィードバックまたは触知可能なフィードバックであってもよく、ユーザからの入力は、音響入力、音声入力または触知可能な入力を含む任意の形態で受取られてもよい。また、コンピュータは、ユーザによって使用される装置にドキュメントを送信し、当該装置からドキュメントを受信することによって、例えばユーザのクライアント装置上のウェブブラウザから受取られた要求に応答して当該ウェブブラウザにウェブページを送信することによって、ユーザと対話してもよい。
【0060】
本明細書に記載されている主題の実施例は、バックエンドコンポーネントを含む計算システムにおいて、例えばデータサーバとして実現されてもよく、またはミドルウェアコンポーネント、例えばアプリケーションサーバを含む計算システムにおいて実現されてもよく、フロントエンドコンポーネント、例えばユーザが本明細書に記載されている主題の実現例と対話することができるグラフィカルユーザインターフェイスもしくはウェブブラウザを有するクライアントコンピュータを含む計算システムにおいて実現されてもよく、ま
たは1つ以上のこのようなバックエンド、ミドルウェアまたはフロントエンドコンポーネントの任意の組み合わせを含む計算システムで実現されてもよい。システムのコンポーネントは、デジタルデータ通信、例えば通信ネットワークの任意の形態または媒体によって相互接続されてもよい。通信ネットワークの例としては、ローカルエリアネットワーク(「LAN」)および広域ネットワーク(「WAN」)、例えばインターネットが挙げられる。
【0061】
計算システムは、クライアントとサーバとを含み得る。クライアントおよびサーバは、一般に、互いに離れており、典型的には通信ネットワークを介して対話する。クライアントとサーバとの関係は、それぞれのコンピュータで実行されて互いに対するクライアントとサーバとの関係を有するコンピュータプログラムによって生じる。
【0062】
本明細書は多くの具体的な実現例の詳細を含むが、これらは、いかなる発明の範囲も限定するものとして解釈されるべきではなく、またはクレームされ得るものの範囲を限定するものとして解釈されるべきではなく、特定の発明の特定の実施例に特有であり得る特徴の説明として解釈されるべきである。別々の実施例の文脈で本明細書に記載されている特定の特徴は、単一の実施例において組み合わせて実現されてもよい。逆に、単一の実施例の文脈で記載されているさまざまな特徴は、複数の実施例で別々に実現されてもよく、または任意の好適なサブコンピネーションで実現されてもよい。さらに、特徴は、特定の組み合わせで作動するものとして、さらにはそのように最初にクレームされたものとして上記され得るが、クレームされている組み合わせからの1つ以上の特徴は、場合によっては、当該組み合わせから削除されてもよく、クレームされている組み合わせは、サブコンビネーションまたはサブコンビネーションの変形例に向けられてもよい。
【0063】
同様に、オペレーションは特定の順序で図面に示されているが、これは、このようなオペレーションが、望ましい結果を達成するために、示されている特定の順序またはシーケンシャルな順序で実行されなければならないものとして理解されるべきではなく、または、望ましい結果を達成するために全ての示されているオペレーションが実行されなければならないものとして理解されるべきではない。特定の状況では、マルチタスクおよび並列処理が有利であろう。さらに、上記の実施例におけるさまざまなシステムモジュールおよびコンポーネントの分離は、全ての実施例においてこのような分離が必要であるものとして理解されるべきではなく、記載されているプログラムコンポーネントおよびシステムは、一般に、単一のソフトウェア製品に統合されてもよく、または複数のソフトウェア製品にパッケージングされてもよい、ということが理解されるべきである。
【0064】
主題の特定の実施例について説明してきた。他の実施例も以下の特許請求の範囲の範囲内である。例えば、特許請求の範囲に記載されている動作は、異なる順序で実行されても、依然として望ましい結果を達成することができる。一例として、添付の図面に示されているプロセスは、望ましい結果を達成するために、示されている特定の順序またはシーケンシャルな順序を必ずしも必要としない。特定の実現例では、マルチタスクおよび並列処理が有利であろう。
【符号の説明】
【0065】
100 計算システム;102 処理ユニット;104 記憶媒体;104 入力;106 テンソルトラバースユニット;112 命令;114 データ;116 出力;122 テンソルステータス要素;124 演算論理ユニット;202、302 テンソルインデックス要素;204、304 テンソル境界要素;206、306 次元乗数要素;308 分岐先要素。