IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アーム・リミテッドの特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-17
(45)【発行日】2024-06-25
(54)【発明の名称】データ処理
(51)【国際特許分類】
   G06F 9/312 20180101AFI20240618BHJP
   G06F 9/34 20180101ALI20240618BHJP
   G06F 9/345 20180101ALI20240618BHJP
【FI】
G06F9/312 L
G06F9/34 350A
G06F9/345 A
【請求項の数】 16
(21)【出願番号】P 2021551772
(86)(22)【出願日】2020-03-26
(65)【公表番号】
(43)【公表日】2022-10-12
(86)【国際出願番号】 GB2020050813
(87)【国際公開番号】W WO2021023957
(87)【国際公開日】2021-02-11
【審査請求日】2023-03-17
(31)【優先権主張番号】16/531,210
(32)【優先日】2019-08-05
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】ミラノヴィック、ジェレナ
(72)【発明者】
【氏名】アイゼン、リー イヴァン
(72)【発明者】
【氏名】ステファン、ニゲル ジョン
【審査官】坂庭 剛史
(56)【参考文献】
【文献】特開2005-149492(JP,A)
【文献】米国特許出願公開第2017/0337156(US,A1)
【文献】国際公開第2018/154269(WO,A1)
【文献】米国特許出願公開第2018/0217840(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/312
G06F 9/34
G06F 9/345
(57)【特許請求の範囲】
【請求項1】
nは1を超える整数であり、内部のそれぞれの位置に複数のn個のデータ項目を含む線形アレイの、1つ以上のデータ項目に処理演算を適用する処理回路であって、n×n個の記憶位置のアレイにアクセスするように構成されており、
プログラム命令をデコードする命令デコーダ回路と、
前記命令デコーダ回路によってデコードされた命令を実行する命令処理回路と、
を備える、処理回路を備え、
前記命令デコーダ回路は、アレイアクセス命令に応じて、前記命令処理回路を制御して、線形アレイとして、前記アレイアクセス命令の制御下で、少なくとも第1のアレイ方向と、前記第1のアレイ方向とは異なる第2のアレイ方向とを含む候補アレイ方向のセットから選択されたアレイ方向に配置された、n個の記憶位置のセットにアクセスし、前記第2のアレイ方向は、前記第1のアレイ方向に直交している、
データ処理装置。
【請求項2】
前記命令処理回路は、前記第1のアレイ方向に配置されたn個の記憶位置のグループとして、記憶位置の前記アレイに入力ベクトルを記憶するように構成されており、データ取り出し命令に応じて、線形アレイとして、前記データ取り出し命令の制御下で、候補アレイ方向の前記セットから、選択されたアレイ方向に配列されたn個の記憶位置のセットを取り出し、
前記第1のアレイ方向は、所定のアレイ方向である、
請求項に記載のデータ処理装置。
【請求項3】
前記データ取り出し命令は、前記命令処理回路が線形アレイとしてn個の記憶位置のセットにアクセスするアレイ方向を指定するための、関連する命令パラメータを有する、請求項2に記載のデータ処理装置。
【請求項4】
n×n個の記憶位置の2つ以上のアレイを含む、請求項1~のいずれか一項に記載のデータ処理装置。
【請求項5】
前記アレイアクセス命令は、n×n個の記憶位置の前記2つ以上のアレイのうちのそれぞれに記憶されたデータ項目のそれぞれの入力行列に応じて出力データを生成する行列処理演算を定義する行列処理命令を含む、請求項に記載のデータ処理装置。
【請求項6】
前記行列処理演算は、前記入力行列のうちの1つのデータ項目の行又は列と、前記入力行列のうちの別のもののデータ項目の行又は列との間の演算を定義し、
前記行列処理命令は、データ項目の前記入力行列を記憶するn×n個の記憶位置の前記それぞれのアレイごとに、前記命令デコーダ回路が前記命令処理回路を制御して記憶位置の前記アレイから線形アレイを取り出すアレイ方向を指定するための、関連する命令パラメータを有する、
請求項に記載のデータ処理装置。
【請求項7】
前記行列処理演算は、前記入力行列のうちの1つのデータ項目の行及び列のうちの1つの要素と、前記入力行列の別のもののデータ項目の行及び列のうちの他方の要素との間の演算に依存して、出力行列の要素を生成する、行列乗算演算である、請求項に記載のデータ処理装置。
【請求項8】
n×n個の記憶位置の前記アレイは、2n個の線形アレイとして前記命令処理回路によってアクセス可能な記憶素子のアレイを含み、前記2n個の線形アレイは、前記第1のアレイ方向のn個の線形アレイと、前記第2のアレイ方向のn個の線形アレイとを含み、各線形アレイはn個のデータ項目を含む、請求項に記載のデータ処理装置。
【請求項9】
前記アレイアクセス命令は、前記2n個の線形アレイのうちの1つ以上を指定する、請求項に記載のデータ処理装置。
【請求項10】
前記n×n個の記憶位置の前記アレイは、アーキテクチャ的にアドレス指定可能なレジスタ、アーキテクチャ的にアドレス指定不可能なレジスタ、スクラッチパッドメモリ、及びキャッシュ、のうちの少なくとも1つを備える、請求項1~のいずれか一項に記載のデータ処理装置。
【請求項11】
nが16に等しい、請求項1~10のいずれか一項に記載のデータ処理装置。
【請求項12】
nは1を超える整数であり、内部のそれぞれの位置に複数のn個のデータ項目を含む線形アレイの、1つ以上のデータ項目に処理演算を適用する処理手段であって、n×n個の記憶位置のアレイにアクセスするように動作可能であり、
プログラム命令をデコードする命令デコーダ手段と、
前記命令デコーダ手段によってデコードされた命令を実行する命令処理手段と、
を備える、処理手段を備え、
前記命令デコーダ手段は、アレイアクセス命令に応じて、前記命令処理手段を制御して、線形アレイとして、前記アレイアクセス命令の制御下で、少なくとも第1のアレイ方向と、前記第1のアレイ方向とは異なる第2のアレイ方向とを含む候補アレイ方向のセットから選択されたアレイ方向に配置された、n個の記憶位置のセットにアクセスし、前記第2のアレイ方向は、前記第1のアレイ方向に直交している、
データ処理装置。
【請求項13】
nは1を超える整数であり、内部のそれぞれの位置に複数のn個のデータ項目を含む線形アレイの、1つ以上のデータ項目に処理演算を適用することであって、n×n個の記憶位置のアレイにアクセスするように構成されており、前記適用するステップが、
プログラム命令をデコードすることと、
前記デコードするステップによってデコードされた命令を実行することと、
を含む、適用することを含み、
前記デコードするステップは、アレイアクセス命令に応じて、前記実行するステップを制御して、線形アレイとして、前記アレイアクセス命令の制御下で、少なくとも第1のアレイ方向と、前記第1のアレイ方向とは異なる第2のアレイ方向とを含む候補アレイ方向のセットから選択されたアレイ方向に配置された、n個の記憶位置のセットにアクセスする、
データ処理方法。
【請求項14】
コンピュータによって実行されると、前記コンピュータに、請求項13に記載の方法を実行させるコンピュータソフトウェア。
【請求項15】
請求項14に記載のコンピュータソフトウェアを記憶する、非一時的マシン可読記憶媒体。
【請求項16】
マシン可読命令を含むコンピュータプログラムを実行するためのデータプロセッサ上で実施された仮想マシンであって、前記コンピュータプログラムの実行は、前記データプロセッサをデータ処理装置として動作させ、前記データ処理装置は、
nは1を超える整数であり、内部のそれぞれの位置に複数のn個のデータ項目を含む線形アレイの、1つ以上のデータ項目に処理演算を適用する処理回路であって、n×n個の記憶位置のアレイにアクセスするように構成されており、
プログラム命令をデコードする命令デコーダ回路と、
前記命令デコーダ回路によってデコードされた命令を実行する命令処理回路と、
を備える、処理回路を備え、
前記命令デコーダ回路は、アレイアクセス命令に応じて、前記命令処理回路を制御して、線形アレイとして、前記アレイアクセス命令の制御下で、少なくとも第1のアレイ方向と、前記第1のアレイ方向とは異なる第2のアレイ方向とを含む候補アレイ方向のセットから選択されたアレイ方向に配置された、n個の記憶位置のセットにアクセスし、前記第2のアレイ方向は、前記第1のアレイ方向に直交している、
仮想マシン。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、データ処理に関する。
【0002】
いくつかのデータ処理構成は、ベクトル処理演算を可能にし、ベクトル処理演算は、単一ベクトル処理命令を、データベクトル内のそれぞれの位置に複数のデータ項目を有するデータベクトルのデータ項目に適用することを含む。対照的に、スカラ処理は、データベクトルではなく単一のデータ項目に効果的に演算する。
【発明の概要】
【発明が解決しようとする課題】
【0003】
例示的な構成では、データ処理装置が提供され、このデータ処理装置は、
nは1を超える整数であり、内部のそれぞれの位置に複数のn個のデータ項目を含む線形アレイの、1つ以上のデータ項目に処理演算を適用する処理回路であって、n×n個の記憶位置のアレイにアクセスするように構成されており、
プログラム命令をデコードする命令デコーダ回路と、
命令デコーダ回路によってデコードされた命令を実行する命令処理回路と、
を備える、処理回路を備え、
命令デコーダ回路は、アレイアクセス命令に応じて、命令処理回路を制御して、線形アレイとして、アレイアクセス命令の制御下で、少なくとも第1のアレイ方向と、第1のアレイ方向とは異なる第2のアレイ方向とを含む候補アレイ方向のセットから選択されたアレイ方向に配置された、n個の記憶位置のセットにアクセスする。
【0004】
別の例示的な構成では、データ処理装置が提供され、このデータ処理装置は、
nは1を超える整数であり、内部のそれぞれの位置に複数のn個のデータ項目を含む線形アレイの、1つ以上のデータ項目に処理演算を適用する処理手段であって、n×n個の記憶位置のアレイにアクセスするように動作可能であり、
プログラム命令をデコードする命令デコーダ手段と、
命令デコーダ手段によってデコードされた命令を実行する命令処理手段と、
を備える、処理手段を備え、
命令デコーダ手段は、アレイアクセス命令に応じて、命令処理手段を制御して、線形アレイとして、アレイアクセス命令の制御下で、少なくとも第1のアレイ方向と、第1のアレイ方向とは異なる第2のアレイ方向とを含む候補アレイ方向のセットから選択されたアレイ方向に配置された、n個の記憶位置のセットにアクセスする。
【0005】
別の例示的な構成では、データ処理方法が提供され、この方法は、
nは1を超える整数であり、内部のそれぞれの位置に複数のn個のデータ項目を含む線形アレイの、1つ以上のデータ項目に処理演算を適用することであって、n×n個の記憶位置のアレイにアクセスするように構成されており、適用するステップが、
プログラム命令をデコードすることと、
デコードするステップによってデコードされた命令を実行することと、
を含む、適用することを含み、
デコードするステップは、アレイアクセス命令に応じて、実行するステップを制御して、線形アレイとして、アレイアクセス命令の制御下で、少なくとも第1のアレイ方向と、第1のアレイ方向とは異なる第2のアレイ方向とを含む候補アレイ方向のセットから選択されたアレイ方向に配置された、n個の記憶位置のセットにアクセスする。
【0006】
別の例示的な構成では、マシン可読命令を含むコンピュータプログラムを実行するデータプロセッサを備える仮想マシンが提供され、このコンピュータプログラムの実行は、データプロセッサをデータ処理装置として動作させ、データ処理装置は、
nは1を超える整数であり、内部のそれぞれの位置に複数のn個のデータ項目を含む線形アレイの、1つ以上のデータ項目に処理演算を適用する処理回路であって、n×n個の記憶位置のアレイにアクセスするように構成されており、
プログラム命令をデコードする命令デコーダ回路と、
命令デコーダ回路によってデコードされた命令を実行する命令処理回路と、
を備える、処理回路を備え、
命令デコーダ回路は、アレイアクセス命令に応じて、命令処理回路を制御して、線形アレイとして、アレイアクセス命令の制御下で、少なくとも第1のアレイ方向と、第1のアレイ方向とは異なる第2のアレイ方向とを含む候補アレイ方向のセットから選択されたアレイ方向に配置された、n個の記憶位置のセットにアクセスする。
【0007】
本開示の更なるそれぞれの態様及び特徴は、添付の特許請求の範囲によって定義される。
【図面の簡単な説明】
【0008】
添付図面に示されるそれらの実施形態を参照して、あくまで一例として本開示を更に説明する。
図1図1は、データ処理装置を概略的に示す。
図2A図2Aは、ストレージアレイを概略的に示す。
図2B図2Bは、図2Bのストレージアレイへのアクセスを概略的に示す。
図3図3は、図2Bのストレージアレイへのアクセスを概略的に示す。
図4図4は、図2Bのストレージアレイへのアクセスを概略的に示す。
図5A図5Aは、ベクトル乗算の一例を概略的に示す。
図5B図5Bは、ベクトル乗算の一例を概略的に示す。
図5C図5Cは、ベクトル乗算の一例を概略的に示す。
図5D図5Dは、ベクトル乗算の一例を概略的に示す。
図5E図5Eは、ベクトル乗算の一例を概略的に示す。
図6A図6Aは、行列乗算の一例を概略的に示す。
図6B図6Bは、行列乗算の一例を概略的に示す。
図6C図6Cは、行列乗算の一例を概略的に示す。
図6D図6Dは、行列乗算の一例を概略的に示す。
図6E図6Eは、行列乗算の一例を概略的に示す。
図7A図7Aは、行列積和演算(matrix multiply accumulate、MMLA)命令の使用を概略的に示す。
図7B図7Bは、行列積和演算(matrix multiply accumulate、MMLA)命令の使用を概略的に示す。
図7C図7Cは、行列積和演算(matrix multiply accumulate、MMLA)命令の使用を概略的に示す。
図7D図7Dは、行列積和演算(matrix multiply accumulate、MMLA)命令の使用を概略的に示す。
図7E図7Eは、行列積和演算(matrix multiply accumulate、MMLA)命令の使用を概略的に示す。
図7F図7Fは、行列積和演算(matrix multiply accumulate、MMLA)命令の使用を概略的に示す。
図8図8は、仮想マシンを概略的に示す。
図9図9は、方法を表す概略フローチャートである。
【発明を実施するための形態】
【0009】
添付図面を参照して実施形態を検討する前に、以下の実施形態の説明を行う。
【0010】
例示的な実施形態は、データ処理装置を提供し、このデータ処理装置は、
nは1を超える整数であり、内部のそれぞれの位置に複数のn個のデータ項目を含む線形アレイの、1つ以上のデータ項目に処理演算を適用する処理回路であって、n×n個の記憶位置のアレイにアクセスするように構成されており、
プログラム命令をデコードする命令デコーダ回路と、
命令デコーダ回路によってデコードされた命令を実行する命令処理回路と、
を備える、処理回路を備え、
命令デコーダ回路は、アレイアクセス命令に応じて、命令処理回路を制御して、線形アレイとして、アレイアクセス命令の制御下で、少なくとも第1のアレイ方向と、第1のアレイ方向とは異なる第2のアレイ方向とを含む候補アレイ方向のセットから選択されたアレイ方向に配置された、n個の記憶位置のセットにアクセスする。
【0011】
例示的な実施形態は、アレイ処理において特定の効率及び利便性を提供することができる技術を表す。一実施例は、行列処理に関するものであるが、この技術は他の用途で使用可能である。
【0012】
行列の乗算又は他の操作は、多くの場合、多くの適用領域によって使用されるデジタル信号処理において見出される。そして近年、行列の乗算が訓練アルゴリズム及び推論アルゴリズムに見出される機械学習の浸透の増大に伴い、行列乗算処理の加速における関心は極めて大きいものがある。
【0013】
例えば、行列Aが次元[M,K]であり、行列Bが次元[K,N]である、2つの行列に対して、行列C=ABは次元[M,N]であり、MはA及びCの両方の行の数であり、KはAの列の数であり、かつBの行の数であり、NはB及びCの両方の列の数である。
【0014】
行列乗算演算が非常に単純である場合であっても、つまり、Cの各要素が、Aの1行及びBの1列のKウェイの内積によって取得され、この計算はK個の積和演算と見なされてもよい場合でも、この課題は、このデータを使用してその結果を計算する命令によって指定された特定の順序に寄与する行列A及びBの、命令に特定の要素の入力シーケンスを送達する際に存在する。本発明の実施形態は、例えば(排他的ではないが)ベクトル処理CPU上で計算が実行されるときに、適切に整理された入力行列要素を送達することに関連する。
【0015】
通常、1つの実装のためにカスタマイズされていない一般的なアプリケーションフレームワークでは、3つの行列A、B、及びCのメモリレイアウトは同じであり、全てが行優先メモリレイアウトにあるか、又は3つ全ての行列が列優先メモリレイアウトにある。特定の結果に寄与するA行列及びB行列の要素を、それらを処理するCPU命令への入力として、効果的に送達する際の課題は、メモリ内のデータ配置が同じであり得るが、必要とされるものは、Aの1行及びBの1列である、という点にある。A及びB行列が同じメモリレイアウトを有する場合、データがメモリから連続的に取得され送達される必要があるA又はBのうちの1つが常にあるが、他の行列のデータは、メモリ内の不連続な場所から収集される必要がある。
【0016】
本発明の技術の実施例では、一般的な非カスタマイズのアプリケーションフレームワークにおいて見出される行列の乗算の課題は、入力行列要素を入力行列のメモリレイアウトの任意の組み合わせの線形アレイとして送達するための有効な機構を提供することによって、少なくとも部分的に対処される。4つの組み合わせが存在し、A及びBの両方が行優先メモリレイアウトにあるもの、A及びB入力行列の両方が列優先メモリレイアウトにあるもの、Aが行優先メモリレイアウトにあってBが列優先メモリレイアウトにあるもの、Aが列優先メモリレイアウトにあってBが行優先メモリレイアウトにあるもの、である。
【0017】
これらの特徴は、垂直方向などの少なくとも2つの異なる方向のうちの1つにおいてn個のデータ項目の線形アレイとして、n×n個の記憶位置のアレイとの間でデータを書き込み及び読み出しできる、例示的な実施形態によって達成することができる。
【0018】
例示的な実施形態は、ストレージアレイを提供することができ、各アレイは、n個の水平アレイ及びn個の垂直アレイの両方として見ることができる。ストレージアレイからの入力データを取る処理回路は、アレイに投入されるロードと同じ方向、又はその方向に直交する第2の方向などの別の方向、の2つの方向でアレイを読み取ることができる。アレイに投入されたロードと同じ方向にアレイを読み取るように命令が使用される場合、命令は、メモリ内のそのネイティブレイアウト内の入力を消費する。一方、ロードがアレイに投入された方向に直交する方向にアレイを読み出すように命令が使用される場合、命令は、メモリ内のそのネイティブレイアウトに対して、転置形式で入力を消費する。これは、提案された技術による「オンザフライ転置能力」の実施可能性につながる。
【0019】
上記のような実施例では、第2のアレイ方向は、第1のアレイ方向に直交する。
【0020】
いくつかの実施例では、命令処理回路は、第1のアレイ方向に配置されたn個の記憶位置のグループとして、記憶位置のアレイに入力ベクトルを記憶するように構成されており、データ取り出し命令に応じて、線形アレイとして、データ取り出し命令の制御下で、候補アレイ方向のセットから、選択されたアレイ方向に配列されたn個の記憶位置のセットを取り出し、第1のアレイ方向は所定のアレイ方向である。
【0021】
一般に、アレイ方向は暗示されてもよく、又は別個の命令が、各アクセス方向に関して使用されてもよいが、データ取り出し命令は、n個の記憶位置のセットを線形アレイとして、命令処理回路がアクセスする(例えば、取り出す)アレイ方向を指定するための、関連する命令パラメータを有してもよい。
【0022】
好都合には、例えば、処理演算をそれらの間で実行することを可能にするために、データ処理装置は、n×n個の記憶位置の2つ以上のアレイを含んでもよい。
【0023】
いくつかの実施例では、この技術は、n×n個の記憶位置の2つ以上のアレイのそれぞれに記憶されたデータ項目のそれぞれの入力行列に応じて出力データを生成する行列処理演算を定義する行列処理命令を含むアレイアクセス命令に関して特に有用である。例えば、行列処理演算は、入力行列のうちの1つのデータ項目の行又は列と入力行列のうちの別のもののデータ項目の行又は列との間の演算を定義することができ、行列処理命令は、データ項目の入力行列を記憶するn×n個の記憶位置のそれぞれのアレイごとに、命令デコーダ回路が命令処理回路を制御して、記憶位置のアレイから線形アレイを取り出すアレイ方向を指定するための、関連する命令パラメータを有してもよい。
【0024】
例示的な構成では、行列処理演算は、入力行列のうちの1つのデータ項目の行及び列のうちの1つの要素と、入力行列の別のもののデータ項目の行及び列のうちの他方の要素との間の演算に依存して、出力行列の要素を生成する、行列乗算演算である。
【0025】
好都合には、n×n個の記憶位置のアレイは、2n個の線形アレイとして命令処理回路によってアクセス可能な記憶素子のアレイを含み、2n個の線形アレイは、第1アレイ方向のn個の線形アレイと、第2のアレイ方向のn個の線形アレイとを含み、各線形アレイはn個のデータ項目を含む。例えば、アレイアクセス命令は、2n個の線形アレイのうちの1つ以上を指定することができる。いくつかの例示的実施形態では、(排他的ではないが)線形アレイは、ベクトルレジスタとしてアクセス可能であり得る。
【0026】
数nは任意の値であってもよく、アレイに割り当てられたストレージの全体サイズ及びアクセスの粒度に関連し得るが、一実施例では、nは16に等しい。
【0027】
別の例示的実施形態は、データ処理装置を提供し、このデータ処理装置は、
nは1を超える整数であり、内部のそれぞれの位置に複数のn個のデータ項目を含む線形アレイの、1つ以上のデータ項目に処理演算を適用する処理手段であって、n×n個の記憶位置のアレイにアクセスするように動作可能であり、
プログラム命令をデコードする命令デコーダ手段と、
命令デコーダ手段によってデコードされた命令を実行する命令処理手段と、
を備える、処理手段を備え、
命令デコーダ手段は、アレイアクセス命令に応じて、命令処理手段を制御して、線形アレイとして、アレイアクセス命令の制御下で、少なくとも第1のアレイ方向と、第1のアレイ方向とは異なる第2のアレイ方向とを含む候補アレイ方向のセットから選択されたアレイ方向に配置された、n個の記憶位置のセットにアクセスする。
【0028】
別の例示的実施形態は、データ処理方法を提供し、このデータ処理方法は、
nは1を超える整数であり、内部のそれぞれの位置に複数のn個のデータ項目を含む線形アレイの、1つ以上のデータ項目に処理演算を適用することであって、n×n個の記憶位置のアレイにアクセスするように構成されており、適用するステップが、
プログラム命令をデコードすることと、
デコードするステップによってデコードされた命令を実行することと、
を含む、適用することを含み、
デコードするステップは、アレイアクセス命令に応じて、実行するステップを制御して、線形アレイとして、アレイアクセス命令の制御下で、少なくとも第1のアレイ方向と、第1のアレイ方向とは異なる第2のアレイ方向とを含む候補アレイ方向のセットから選択されたアレイ方向に配置された、n個の記憶位置のセットにアクセスする。
【0029】
例示的な実施形態は、コンピュータによって実行されると、コンピュータに上記で定義された方法を実行させるコンピュータソフトウェアとして実装され得る。かかるソフトウェアは、そのようなコンピュータソフトウェアを記憶する、非一時的マシン可読記憶媒体によって提供されてもよい。
【0030】
別の例示的実施形態は、マシン可読命令を含むコンピュータプログラムを実行するデータプロセッサを備える仮想マシンを提供し、このコンピュータプログラムの実行は、データプロセッサをデータ処理装置として動作させ、データ処理装置は、
nは1を超える整数であり、内部のそれぞれの位置に複数のn個のデータ項目を含む線形アレイの、1つ以上のデータ項目に処理演算を適用する処理回路であって、n×n個の記憶位置のアレイにアクセスするように構成されており、
プログラム命令をデコードする命令デコーダ回路と、
命令デコーダ回路によってデコードされた命令を実行する命令処理回路と、
を備える、処理回路を備え、
命令デコーダ回路は、アレイアクセス命令に応じて、命令処理回路を制御して、線形アレイとして、アレイアクセス命令の制御下で、少なくとも第1のアレイ方向と、第1のアレイ方向とは異なる第2のアレイ方向とを含む候補アレイ方向のセットから選択されたアレイ方向に配置された、n個の記憶位置のセットにアクセスする。
【0031】
ここで図面を参照すると、図1は、データ値32及びプログラム命令34を記憶するメモリ30に結合されたプロセッサ20を備える、データ処理システム10を概略的に示す。プロセッサ20は、メモリ30からプログラム命令34をフェッチし、デコーダ回路50にフェッチプログラム命令を供給するための命令フェッチユニット40を含む。デコーダ回路50は、フェッチされたプログラム命令をデコードし、処理回路60を制御する制御信号を生成して、デコードされたベクトル命令によって指定されるようにレジスタ回路70内に記憶されたレジスタに処理演算を実行する。
【0032】
プロセッサ20は、ストレージアレイ90にアクセスできる。これは破線で描かれており、それがプロセッサ20の一部として提供されても、提供されなくてもよいことを示す。様々な実施例では、ストレージアレイは、以下の、アーキテクチャ的にアドレス指定可能なレジスタ、アーキテクチャ的にアドレス指定不可能なレジスタ、スクラッチパッドメモリ、及びキャッシュ、のうちの任意の1つ以上として実装することができる。
【0033】
処理回路60は、例えば、ベクトル処理回路及び/又はスカラ処理回路であってもよい。スカラ処理とベクトル処理との間の一般的な区別は、以下のとおりである。ベクトル処理は、単一ベクトル処理命令を、データベクトル内のそれぞれの位置に複数のデータ項目を有するデータベクトルのデータ項目に適用することを含む。スカラ処理は、データベクトルではなく、単一のデータ項目に、効果的に演算を行う。ベクトル処理は、処理されるデータの多くの異なるインスタンスに処理演算が実行される場合に有用であり得る。ベクトル処理構成では、単一の命令を(データベクトルの)複数のデータ項目に同時に適用することができる。これにより、スカラ処理と比較して、データ処理の効率及びスループットを改善することができる。
【0034】
本実施形態は、ベクトル処理に関連し得るが、ベクトルプロセッサが使用されることが要件ではない。代わりに、本発明の技術は、例えばストレージアレイ90に記憶されたデータ項目の2次元アレイを処理することに関する。2次元ストレージアレイは、少なくともいくつかの実施例では、複数の候補方向におけるデータ項目の1次元アレイとしてアクセスされてもよい。データ項目のこのような1次元アレイは、いくつかの実施例ではデータベクトルとして扱われ得るが、これは本発明の技術の必須要件ではない。
【0035】
例示的実施形態では、ストレージアレイ90は、メモリ内のデータ項目のより大きい又はより高い次元のアレイ又は行列の正方形のアレイ部分を記憶してもよい。
【0036】
ストレージアレイ90の複数のインスタンスは、データ項目の複数のそれぞれのアレイを記憶するように提供されてもよい。
【0037】
以下の説明は、例示的なプログラム命令34に関する。本開示の実施形態は、例えば、図1に示されるタイプの装置を含み、このようなプログラム命令をデコード及び実行するように動作可能又は構成されている。したがって、図1は、線形アレイ内の位置にあるデータ項目に処理演算を選択的に適用する処理回路の一実施例を提供し、各線形アレイは、データ項目順序を有する複数のデータ項目を含み、処理回路は、プログラム命令をデコードする命令デコーダ回路と、命令デコーダ回路によってデコードされた命令を実行する命令処理回路と、を備え、命令デコーダ回路は、命令に応じて、命令処理回路を制御して、以下に説明する機能を実行する。
【0038】
任意選択的に、ベクトル処理装置が使用されている場合、ベクトル処理演算は、いわゆる述語の制御下にあってもよい。ここで、それぞれの述語は、線形アレイ内のデータ項目位置(この例示的な構成でデータベクトルとして処理することができる)のうちの1つに対して特定のベクトル関数が適用されるか否かを制御することができる。
【0039】
上述のように、処理回路60は、デコーダ回路50によってデコードされた命令の制御下で、レジスタ70及び/又はストレージアレイ90にアクセスするように構成されている。この後者の構成の更なる詳細を、ここで図2aを参照して説明する。
【0040】
本実施例では、ストレージアレイ90は、n×n個の記憶位置200のアレイ205として構成されており、nは1を超える整数である。本実施例では、nは16であり、これは、記憶位置200へのアクセスの粒度が、水平又は垂直アレイ方向のいずれかで全記憶の1/16であることを意味する。この態様は、以下で更に説明される。
【0041】
処理回路の視点から、n×n個の位置のアレイは、第1の方向(例えば、描かれた水平方向)のn個の線形(1次元)アレイとして、そして、第2のアレイ方向(例えば、描かれた垂直方向)のn個の線形アレイとしてアクセス可能である。各線形アレイは、各ストレージアレイがn個のデータ項目の線形アレイを記憶するようにn個の要素を有する。換言すれば、n×n個の記憶位置は、処理回路60の視点から、2n個の線形アレイ、n個のデータ項目のそれぞれとして構成されるか、又は少なくともアクセス可能である。
【0042】
したがって、これは、n×n個の記憶位置のアレイが、2n個の線形アレイとして命令処理回路によってアクセス可能な記憶素子のアレイを含み、2n個の線形アレイは、第1のアレイ方向のn個の線形アレイと、第2のアレイ方向のn個の線形アレイとを含み、各線形アレイは、(例えば、これは要件ではないが)n個のデータ項目を、データベクトルレジスタとして含む、一実施例を提供する。以下で説明される例示的な命令は、2n個の線形アレイのうちの1つ以上を指定することができる。
【0043】
記憶位置200のアレイは、少なくとも処理回路及び任意選択的にデコーダ回路50と通信する制御回路250の制御下で、アクセス回路210、220、列選択回路230及び行選択回路240によってアクセス可能である。
【0044】
図2bを参照すると、第1の方向(描かれているような水平方向又は「H」方向)のn個の線形アレイは、「A1」と表記される例示的な記憶アレイ90の場合(以下に記載されるように、2つ以上のそのようなストレージアレイ90、例えばA0、A1、A2などが存在し得ることを示す)、16個のデータ項目0~F(16進表記法)のそれぞれであり、この実施例ではA1H0~A1H15として参照され得る。図2bのストレージアレイ90A1の256エントリ(16×16エントリ)に記憶された同じ基礎データは、代わりに、A1V0~A1V15として、第2の方向(描かれているような垂直又は「V」方向)で参照されてもよい。例えば、データ項目260は、A1H0の項目Fであるが、A1V15のアイテム0として参照されることに留意されたい。なお、「H」及び「V」の使用は、ストレージアレイ90を構成するデータ要素の記憶に関する任意の空間的又は物理的レイアウト要件を暗示せず、また、ストレージアレイが、行列処理を含む例示的なアプリケーションにおいて行又は列データを記憶するかどうかに関係しない、ということに留意されたい。
【0045】
図2bの技術に従って動作する図1及び図2aの装置は、データ処理装置10の一実施例を提供し、この装置は、
nは1を超える整数であり、内部のそれぞれの位置に複数のn個のデータ項目を含む線形アレイの、1つ以上のデータ項目に処理演算を適用する処理回路20であって、n×n個の記憶位置200のアレイ205にアクセスするように構成されており、
プログラム命令をデコードする命令デコーダ回路50と、
命令デコーダ回路によってデコードされた命令を実行する命令処理回路60と、
を備える、処理回路20を備え、
命令デコーダ回路は、アレイアクセス命令に応じて、命令処理回路を制御して、線形アレイとして、アレイアクセス命令の制御下で、少なくとも第1のアレイ方向と、第1のアレイ方向とは異なる第2のアレイ方向とを含む候補アレイ方向のセットから選択されたアレイ方向に配置された、n個の記憶位置のセットにアクセスする。
【0046】
例示的な構成では、第2のアレイ方向(図2aで描かれている垂直方向)は、第1のアレイ方向(描かれているように水平)に直交する。
【0047】
第1の方向、例えば、描かれている水平方向の線形アレイA1H0~A1H15のうちの1つにアクセスするために、任意の線形アレイA1Hm300(この実施例では、mは0~15の任意の数である)がアクセスされている、図3を参照する。ここで、行選択回路240は、線形アレイ300に対応する記憶位置の行を選択するように制御回路250によって制御され、アクセス回路210は、インターフェース320を介して処理回路に提供される線形アレイ300の個々のデータ項目310からのアクセス(入力又は出力)を制御する。
【0048】
同様に、図4を参照すると、線形アレイA1Vm400など、描かれているような他の方向の任意の線形アレイにアクセスするために、列選択回路230は、線形アレイ400に対応する記憶素子の列を選択し、データは、インターフェース410によって処理回路とインターフェース接続されるアクセス回路220を介して読み出される(出力される)。
【0049】
ここで、図2a~図4の構成のいわゆる粒度を説明する。線形アレイA1Hmは、それぞれ32ビットの16個のデータ項目を表す。16個のそのような線形アレイが存在し、第2のアレイ方向の各線形アレイA1Vmはまた、32ビットの16個のエントリを有する。しかしながら、その代わりに、このストレージは、それぞれの方向に8ビットの64個のデータ項目の(いわば)ベクトルとして構成され得る。換言すれば、ストレージアレイ90を提供するストレージへのアクセスの粒度は、32ビットの粒度ではなく8ビットの粒度とすることができる。しかしながら、本実施例では、第1及び第2の方向におけるそれぞれの線形アレイ内の粒度及びデータ項目の数は、同じ(第1の実施例では16、第2の実施例では64)であるべきである。
【0050】
例示的な構成では、命令処理回路60は、第1のアレイ方向に配置されたn個の記憶位置のグループ(A1Hm)として、記憶位置のアレイに入力ベクトル又は線形アレイを記憶するように構成されており、データ取り出し命令に応じて、線形アレイとして、データ取り出し命令の制御下で、候補アレイ方向のセットから、選択されたアレイ方向に配置されたn個の記憶位置のセット(例えば、A1Hm又はA1Vm)を取り出し、第1のアレイ方向は所定のアレイ方向(例えば、描かれた水平方向)である。換言すれば、データ書き込みは第1の方向に制約されるが、データ読み取りはいずれの方向にも許可される。しかし、当然のことながら、データ書き込み及びデータ読み取りがいずれの方向にも許可される別の例示的な構成が提供され得る。
【0051】
図2a~図4によって表されるストレージアレイ90にアクセスするために使用され得る処理命令の実施例には、以下のうちの1つ以上が含まれてもよい。
(a)例えば、以下を指定する、ロード及びストア命令:
・ ストレージアレイ90のうちの1つの線形アレイ(又は線形アレイのセット)(上記実施例におけるA1Hm)
・ 演算のソース又は送付先としてのメモリ位置のブロック
・ 任意選択的に(ベクトル処理回路の実施例の場合)、各メモリロケーションに対して演算が実行されるかどうかを定義する述語レジスタ
・ 任意選択的に、アクセスの粒度を定義するパラメータ(上記参照)
(b)コピー又は転置機能を提供し、例えば、以下を指定する、ムーブ命令:
・ ストレージアレイ90のうちの1つのソース線形アレイ(又は線形アレイのソースセット)(上記実施例におけるA1Hm又はA1Vm)、又は初期化値
・ アレイのうちの別の(異なる)1つのターゲット線形アレイ(又は線形アレイのターゲットセット)(上記実施例におけるA1Hm又はA1Vm)
・ 任意選択的に、アクセスの粒度を定義するパラメータ(上記参照)
(c)以下を指定する、行列乗算命令:
・ ストレージアレイ90のうちの1つの左入力線形アレイ(又は線形アレイのセット)(上記実施例におけるA1Hm又はA1Vm)
・ ストレージアレイ90のうちの別の(異なる)1つの右入力線形アレイ(又は線形アレイのセット)(上記実施例におけるA1Hm又はA1Vm)
・ 乗算演算の結果を記憶するための出力線形アレイ(又は線形アレイのセット)(又はスカラレジスタが、単一の線形アレイに単一の線形アレイを乗算する特定の場合に指定され得る)
・ 任意選択的に、アクセスの粒度を定義するパラメータ(上記参照)
(d)行列積和命令(以下に更に説明)
【0052】
これらの命令のうちの少なくともいくつかは、命令処理回路が線形アレイとしてn個の記憶位置のセットにアクセスする(例えば、取り出す)アレイ方向を指定するための、関連する命令パラメータを有する、データ取り出し命令の実施例を提供する。
【0053】
これらの命令のうちの少なくともいくつかは、n×n個の記憶位置の2つ以上のアレイのそれぞれに記憶されたデータ項目のそれぞれの入力行列に応じて出力データを生成する行列処理演算を定義する行列処理命令の実施例を提供する。このような実施例では、行列処理演算は、入力行列のうちの1つのデータ項目の行又は列と入力行列のうちの別のもののデータ項目の行又は列との間の演算を定義することができ、行列処理命令は、データ項目の入力行列を記憶するn×n個の記憶位置のそれぞれのアレイごとに、命令デコーダ回路が命令処理回路を制御して、記憶位置のアレイから線形アレイを取り出すアレイ方向を指定するための、関連する命令パラメータを有してもよい。いくつかの実施例では、行列処理演算は、入力行列のうちの1つのデータ項目の行及び列のうちの1つの要素と、入力行列の別のものの他のデータ項目の行及び列のうちの他方の要素の間の演算に依存して、出力行列の要素を生成する、行列乗算演算であってもよい。
【0054】
この種の技術の使用例は、行列処理演算に関する。図5a~図5eは、簡略化された特定の実施例、すなわちベクトル乗算を概略的に示しているが、図6a~図6eは、行列処理関数のより一般的な状況を表す。
【0055】
図5aを参照すると、1つの入力ベクトル510と別の入力ベクトル520とのベクトル乗算の結果500を生成するために、いわゆる内積が使用され、それによって、例えば、描かれているように左から右へと進む入力ベクトル510の連続的な要素に、例えば、描かれているように上部から下部へと進む入力ベクトル520のそれぞれの要素を乗じて、結果は、それらの個々の積のそれぞれの合計である。
【0056】
このような構成は、図2図4を参照して説明されるストレージアレイ90を使用して実装することができる。例えば、n×n個の記憶位置の2つ以上のストレージアレイ90が提供されてもよく、そのようなアレイの対530、540が本実施例で使用される。
【0057】
図5bでは、入力ベクトル510は、第1の方向の線形アレイの任意の1つ532から取り出され入力ベクトル520は、第2の方向の線形アレイ540の任意の1つ542から取り出される。スカラレジスタ550を使用して、内積演算のスカラ結果を記憶することができる。
【0058】
しかしながら、図5aに概略的に示されるベクトル乗算が、行510に列520を乗算することを含むにもかかわらず、本実施例のストレージアレイ構成によって提供される柔軟性により、他の順列が記憶位置のアレイに実装されることを可能にする。例えば、アレイ530では、線形アレイ510は、実際には、第2の方向534の直線アレイによって表され得るが、列520はまた、第2の方向の直線アレイ544によって表される。
【0059】
図5dの実施例では、線形アレイ510、520の両方は、第1の方向に表すことができ、図5eの図式実施例では、行510は、第2の方向の線形アレイ538によって表されるが、列520は第1の方向の線形アレイ548によって表される。
【0060】
これらの技術は、行列乗算の例示のインスタンスにおいて特に有用であり得、ここでは(図6a)、左行列600が右行列610によって乗算され、出力つまり積行列620を生成する。出力行列620の各行列要素622は、左行列の行602と、右行列の列612との内積によって生成される。上記のタイプの内積は、行602と列612との間で実行されて、行602と列612との交点によって表される出力行列内の位置に取り込まれる単一要素622を生成する。
【0061】
第1及び第2の入力アレイ630、640を使用してこのタイプの行列処理機能を実施することに関して、入力行列600、610のそれぞれが、ストレージアレイ630、640に書き込まれる方法は、行列を表す基礎データがメモリにどのように記憶されるか、例えば、いわゆる行優先形式(行ごと)、又はいわゆる列優先形式(列ごと)として記憶されるかに依存し得る。いくつかの実施例では、フォーマットメモリのいずれでも、データは、第1の方向のストレージアレイ630、640(描かれているように水平に配向された線形アレイ)に書き込まれるが、他の実施例では、2n個の線形アレイのどの線形アレイが入力行列600、610をロードするために使用されるべきかについての(第1の方向と第2の方向との間のような)完全な柔軟性が存在し得る。
【0062】
結果として、図6b~6eの順列に示されるように、入力行列600は、各行が第1の方向の線形アレイ(図6b、図6c)に、又は第2の方向の線形アレイ(図6d、図6e)として記憶されるように表すことができ、入力行列610は、各列が第2の方向の線形アレイ(図6b、図6d)として、又は第1の方向の線形アレイ(図6c及び図6e)として記憶されるように表される。
【0063】
出力又は積行列620を表すために使用されるストレージアレイ650は、必ずしも、ストレージアレイ630、640を参照して上述した多方向アクセス機能を提供する必要はないが、いくつかの実施例では、これらの機能性を提供することができることに留意されたい。
【0064】
他の実施例では、いわゆる行列積和演算(MMLA)命令が使用されてもよい。
【0065】
図7aは、この技術の概略図を提供する。このような命令は、入力行列A列と入力行列Bの外積の結果を出力行列内の前の値に加算することによって出力行列Cを生成して、行列積和演算(例えば、Cm’=Cm+AiVk×BjHk)を提供することができる。
【0066】
入力行列のセット(又はより大きい行列の一部)は、本明細書に記載される技術のいずれかを使用して、メモリから入力アレイAi、Bjにロードすることができる。演算中、1つのMMLA命令は、1つのAiVk及び1つのBjHkをソースとして取り込み、出力アレイCm内に累算されるn×n個の積を生成する。例えば、n=16かつ2つの入力アレイがA0、B0である場合、MMLA命令の特定のインスタンスについては、256(16×16)個の積和演算が実行される。例えば、各n及びm=0~15に対して、出力アレイ要素C0’(n,m)=C0(n,m)+(A0Vk(n)B0Hk(m))である。
【0067】
これらのMMLA演算は、2入力16要素の線形アレイのための256個の積(16×16の例)を提供し、そのため、ロード帯域幅が制限されるか、又は高いレイテンシが、線形アレイが取り出される16×16ストレージアレイに投入したロード演算に関連付けられる状況において、効率的である可能性がある。
【0068】
MMLA命令の結果は、それ自体で有用であり得る。すなわち、実際には、MMLA演算がループされて複数回反復される必要はない。しかしながら、他の実施例では、図6a~図6eを参照して説明されるタイプの数学的行列乗算は、MMLA命令の繰り返しループ化演算によって実装されてもよい。
【0069】
図7b~図7fは、図6a~図6eの表現と同様の表現を提供する。
【0070】
図7bを参照すると、データAjVkは入力行列700の列702によって表され、データBjHkは入力行列710の行712によって表される。積和演算積は、出力行列Cm722によって表される。
【0071】
図6b~図6eと同様に、図7c~図7fは、データアレイ730、740に関して、MMLA命令への入力を形成するデータが、本明細書に記載される機能によって提供されるオンザフライの転置によって可能となる、任意の順列内のそれぞれの行又は列を表すことができる。
【0072】
様々な実施形態では、アレイは、以下の、アーキテクチャ的にアドレス指定可能なレジスタ、アーキテクチャ的にアドレス指定不可能なレジスタ、スクラッチパッドメモリ、及びキャッシュ、のうちの1つ以上を備える。
【0073】
図8は、上述の機能の一部又は全てが提供され得る仮想マシンを概略的に示す。仮想マシンは、データ処理回路800の一実施例としての中央演算処理装置(CPU)と、不揮発性メモリ810と、制御インターフェース820と、入出力(IO)インターフェース830とを備え、全てがバス構成840によって相互接続されている。ランダムアクセスメモリ(RAM)850は、CPU800の動作を制御するソフトウェア860を提供するプログラム命令を記憶する。ソフトウェア860の制御下で、CPU800は、上述の処理命令のうちの1つ以上の機能を提供するか、又はその機能をエミュレートする。RAM850はまた、プログラム命令870及びデータ880を記憶し、プログラム命令870は、図1のプロセッサ20に適用可能な命令であり、仮想マシンとして機能するCPU800によって解釈、エミュレート、又は別の方法で実行される。データ880は、プログラム命令870の(仮想)実行によって操作される図1のデータ32に対応するデータである。したがって、図8の構成は、マシン可読命令(例えば、ソフトウェア860)を含むコンピュータプログラムを実行するデータプロセッサ(CPU800など)を備える仮想マシンの一実施例を提供し、コンピュータプログラムの実行によって、データプロセッサが上記のタイプのデータ処理装置として動作する。例示的な実施形態はまた、コンピュータによって実行されると、コンピュータに、図9の方法を含む本明細書に記載されている技術のうちの1つ以上を実行させるコンピュータソフトウェアによって、そして、このようなコンピュータソフトウェアを記憶する非一時的マシン可読記憶媒体によって表される。
【0074】
要約すると、図9は、データ処理方法を示す概略フローチャートであり、この方法は、
nは1を超える整数であり、内部のそれぞれの位置に複数のn個のデータ項目を含む線形アレイの、1つ以上のデータ項目に処理演算を(ステップ900で)適用することであって、n×n個の記憶位置のアレイにアクセスするように構成されており、適用するステップが、
(ステップ910で)プログラム命令をデコードすることと、
デコードするステップによってデコードされた命令を(ステップ920で)実行することと、
を含む、適用することを含み、
デコードするステップは、アレイアクセス命令に応じて、実行するステップを制御して、線形アレイとして、アレイアクセス命令の制御下で、少なくとも第1のアレイ方向と、第1のアレイ方向とは異なる第2のアレイ方向とを含む候補アレイ方向のセットから選択されたアレイ方向に配置された、n個の記憶位置のセットにアクセスする。
【0075】
本出願において、「~ように構成される(configured to)」という用語は、装置の要素が、定義された動作を実行することができる構成を有することを意味するために使用される。このコンテキストにおいて、「構成」は、ハードウェア又はソフトウェアの相互接続の構成又は方法を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスは、機能を実行するようにプログラムされてもよい。「~ように構成される」は、定義された動作を提供するために、装置要素を任意の方法で変更する必要を意味しない。
【0076】
本発明の技術の例示的な実施形態が添付の図面を参照して本明細書で詳細に説明されてきたが、本発明の技術はそれらの正確な実施形態に限定されず、添付の特許請求の範囲によって定義される本発明の範囲及び精神から逸脱することなく、当業者によって様々な変更、追加、及び修正を行うことができることを理解されたい。例えば、従属請求項の特徴の様々な組み合わせは、本発明の技術の範囲から逸脱することなく、独立請求項の特徴によって作製され得る。
図1
図2A
図2B
図3
図4
図5A
図5B
図5C
図5D
図5E
図6A
図6B
図6C
図6D
図6E
図7A
図7B
図7C
図7D
図7E
図7F
図8
図9