(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024166373
(43)【公開日】2024-11-28
(54)【発明の名称】行列演算用の装置及び方法
(51)【国際特許分類】
G06F 17/16 20060101AFI20241121BHJP
【FI】
G06F17/16 Z
【審査請求】有
【請求項の数】1
【出願形態】OL
(21)【出願番号】P 2024161294
(22)【出願日】2024-09-18
(62)【分割の表示】P 2021569012の分割
【原出願日】2020-03-25
(31)【優先権主張番号】16/417,937
(32)【優先日】2019-05-21
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】マッティーナ、マシュー
(72)【発明者】
【氏名】リウ、チーカン
(72)【発明者】
【氏名】ワットモー、ポール ニコラス
(72)【発明者】
【氏名】マンセル、デイヴィッド ハンナ
(57)【要約】
【課題】第1の行列及び第2の行列上で演算を実行するデータ処理装置を提供する。
【解決手段】データ処理装置は、第1の行列の要素、第2の行列の要素、及び第1の行列の要素が第1の行列内に位置する場所を示す対応データ、を受信する受信機回路を含む。判定回路は、対応データを使用して、第1の行列の列iの第1の行列の所与の要素に対して、第2の行列の所与の要素が第2の行列の行iに発生するかどうかの判定を実行する。集約回路は、第1の行列の所与の行と第2の行列の所与の列との間の集約を計算し、その判定に応じて、第1の行列の所与の要素及び第2の行列の所与の要素に対する機能を実行して部分結果を生成する機能回路を含む。
【選択図】
図9
【特許請求の範囲】
【請求項1】
行列演算命令を含む1つ以上の命令を受信するデコード回路を備え、前記行列演算命令が、第1の行列の要素、第2の行列の要素、及び前記第1の行列の前記要素が前記第1の行列内にある場所を示す対応データを参照し、前記第1の行列の要素と前記対応データとが、ベクトルレジスタに記憶され、
前記行列演算命令を受信することに応じて、前記デコード回路が、1つ以上の実行ユニットに前記第1の行列及び前記第2の行列上で行列演算を実行させるために1つ以上の制御信号を生成するように構成される、データ処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、データ処理に関する。
【背景技術】
【0002】
行列乗算などの行列演算を実行する際に、多数のサブステップが実行され得る。多くの場合、これらのサブステップは、行列演算全体に対してほとんど影響を及ぼさない。例えば、2つの疎行列(0の値を有する比較的大きい割合のエントリを含むもの)を一緒に乗算する場合、ゼロによる多数の乗算が行われる。これは特に、例えば、多くの場合画像分類で使用される、畳み込みニューラルネットワーク(CNN)の場合であり得る。ゼロによる乗算は、ゼロの結果をもたらすため、そのような乗算は無駄であり得るが、乗算を実際に実行するプロセスでは、依然として回路時間及び電力を消費し得る。更に、そのような行列を記憶することは、多くの記憶スペースを使用し得る。したがって、より少数のサブステップを使用してそのような演算を実行することができるのが望ましい。そのような行列が、より少ない記憶スペースを使用して記憶され、それによって、リソース消費、並びに電力及び潜在的には回路サイズを低減することも望ましい。
【発明の概要】
【0003】
第1の例示的な構成から見ると、第1の行列及び第2の行列上で演算を実行するデータ処理装置が提供され、データ処理装置は、第1の行列の要素、第2の行列の要素、及び第1の行列の要素が第1の行列内に位置する場所を示す対応データを受信する受信機回路と、対応データを使用して、第1の行列の行i、列jiの第1の行列の所与の要素に対して、第2の行列の要素のうちの所与の1つが第2の行列の行j、列iに発生するかどうかの判定を実行する判定回路と、第1の行列の所与の行iと第2の行列の所与の列iとの間の集約を計算する集約回路であって、判定に応じて、第1の行列の所与の要素及び第2の行列の所与の要素に対する機能を実行して部分結果を生成する機能回路を含む、集約回路と、を備える。
【0004】
第2の例示的な構成から見ると、第1の行列及び第2の行列上で演算を実行するデータ処理方法が提供され、方法は、第1の行列の要素、第2の行列の要素、及び第1の行列の要素が第1の行列内に位置する場所を示す対応データと、を受信することと、対応データを使用して、第1の行列の列iの第1の行列の所与の要素に対して、第2の行列の要素の所与の要素が第2の行列の行iに発生するかどうかの判定を実行することと、第1の行列の所与の行と第2の行列の所与の列との間の集約を計算することであって、判定に応じて、第1の行列の所与の要素及び第2の行列の所与の要素に対する機能を実行することによって部分結果を生成する、ことと、からなるステップを含む。
【0005】
第3の例示的な構成から見ると、データ処理装置が提供され、データ処理装置は、行列演算命令を含む1つ以上の命令を受信するデコード回路を備え、第1の行列の行列演算命令参照要素、第2の行列の要素、第1の行列の要素が第1の行列内に位置する場所を示す対応データを参照し、行列演算命令を受信することに応じて、デコード回路は、1つ以上の実行ユニットに第1の行列及び第2の行列上で行列演算を実行させるために、1つ以上の制御信号を生成する。
【図面の簡単な説明】
【0006】
添付図面に示されるそれらの実施形態を参照して、あくまで例として本発明を更に説明する。
【
図1】いくつかの実施形態による、例示的なデータ処理装置を概略的に示す。
【
図2】行列積和演算を示し、行列の特定の要素の場所が表され得る方法を示す。
【
図3】圧縮行列の要素が(元の)行列内に配置される方法を示す対応データと共に、圧縮形式の
図2の行列の一部を示す。
【
図4】
図3に示される圧縮行列がレジスタ内に記憶され得る方法を示す。
【
図5】いくつかの実施形態による、前に図示した圧縮行列内で行列演算を実行することができる回路を示す。
【
図6】第2の行列が非圧縮である行列積和演算を示す。
【
図7】
図6に示される非圧縮の第2の行列がレジスタ内に記憶される方法を示す。
【
図8】いくつかの実施形態による、前に図示した圧縮行列内で行列演算を実行することができる回路を示す。
【
図9】いくつかの実施形態による、行列演算命令をデコードする回路を示す。
【
図10】いくつかの実施形態による、データ処理の方法を示すフローチャートを示す。
【発明を実施するための形態】
【0007】
添付図面を参照して実施形態を検討する前に、以下の実施形態を説明する。
【0008】
いくつかの実施形態によれば、第1の行列及び第2の行列上で演算を実行するデータ処理装置が提供され、データ処理装置は、第1の行列の要素、第2の行列の要素、及び第1の行列の要素が第1の行列内に位置する場所を示す対応データを受信する受信機回路と、対応データを使用して、第1の行列の列iの第1の行列の所与の要素に対して、第2の行列の要素の所与の要素が第2の行列の行iに発生するかどうかの判定を実行する判定回路と、第1の行列の所与の行と第2の行列の所与の列との間の集約を計算する集約回路であって、判定に応じて、第1の行列の所与の要素及び第2の行列の所与の要素に対する機能を実行して部分結果を生成する機能回路を含む、集約回路と、を備える。
【0009】
第1の行列及び第2の行列の要素の一部又は全ては、対応データと一緒に受信される。対応データは、全ての要素が提供されている訳ではない場所、提供要素が第1及び/又は第2の行列内に位置する場所、を示すために使用される。判定回路は、第1の行列と第2の行列との間で特定の演算(乗算や加算など)が実行された場合に、2つの要素が互いに相互作用するように、提供要素のうちの2つ(第1の行列の1つ及び第2の行列の1つ)が、互いに「相互作用」することになるかどうか、例えば、第1の行列の列i内の所与の要素のうちの1つに対して、第2の行列の所与の要素のうちの1つが行i内に存在するかどうかの指標を提供する。この判定に基づいて、機能回路は、第1及び第2の行列の所与の要素に対する機能を実行する。例えば、2つの要素が相互作用する場合、機能は部分結果を生成するために実行されるが、2つの要素が相互作用しない場合には、機能は実行されない(又は部分結果として「0」を単に戻す)。次いで、部分結果が、一緒に集約される。集約は、第1の行列の所与の行、及び第2の行列の所与の列に関して実行される。このようにして、第1の行列及び第2の行列の全ての要素を提供することなく、第1の行列と第2の行列との間で演算を実行することが可能である。特に、第1の行列と第2の行列との間の相互作用が発生する場所を判定することによって、全体的に計算されなければならない演算の数を制限することが可能である。更に、第1の行列の要素、第2の行列の要素、並びに第1の行列全体及び第2の行列全体ではなく対応データを記憶する必要のみがあるため、記憶要件を低減することができる。
【0010】
いくつかの実施形態では、第1の行列の要素は、第1の行列の圧縮形態の要素であり、第1の行列の圧縮形態は、第1の行列からゼロである少なくとも一部のエントリを除去し、かつ各エントリがゼロである少なくとも一部の列又は行を除去することによって生成されている。ゼロを有するエントリの一部を除去し、かつその列又は行の各エントリがゼロである列又は行の少なくとも一部を除去することによって、行列の全体寸法及びその行列に提供される必要があるエントリの数を低減することが可能である。いくつかの実施形態では、ゼロ以外の値の除去が使用され得る。しかしながら、(値の高い割合がゼロである)疎行列の場合、オペランドのうちの1つがゼロである多くの演算が行われ得ることを理解されたい。そのような演算は、たとえ結果が予測可能であるか、又は更には無関係であっても、時間がかかり得る。そのような値を行列から除去することによって、演算の数を低減することができる。
【0011】
いくつかの実施形態では、対応データは、第1の行列の要素のそれぞれに対して、行番号及び列番号を示し、要素内の所与の要素に対する行番号及び列番号は、所与の要素が第1の行列内に位置する行及び列に対応している。したがって、対応データは、第1の行列の要素を第1の行列に転換する方法を示している。これは、特定の既知の値を省略することによって、第1の行列を圧縮するために使用することができる。次いで、行列の全ての要素を提供する代わりに、これらの要素が実際に位置する場所と一緒に行列の要素の一部を提供することのみによって、圧縮を達成することができる。
【0012】
いくつかの実施形態では、受信機回路は、第2の行列の要素が第2の行列内に位置する場所を示すように、更なる対応データを受信するように適合されており、判定回路は、対応データに加えて、更なる対応データを使用して判定を実行するように適合されている。第1の行列の提供要素に関する場所情報を提供する対応データと同様に、更なる対応データは、第2の行列の提供要素に関する場所情報を提供する。
【0013】
いくつかの実施形態では、更なる対応データは、第2の行列の要素のそれぞれに対して、行番号及び列番号を示し、要素内の所与の要素に対する行番号及び列番号は、所与の要素が第2の行列内に位置する行及び列に対応している。対応データ及び更なる対応データが、同じフォーマット、又は更には正確に同じ情報を有する義務はないことに留意されたい。
【0014】
いくつかの実施形態では、第2の行列の要素は、第2の行列の圧縮形態の要素であり、第2の行列の圧縮形態は、第2の行列からゼロである少なくとも一部のエントリを除去し、かつ各エントリがゼロである少なくとも一部の列又は行を除去することによって生成されている。第1の行列及び第2の行列の両方を圧縮形態で提供することによって、2つの行列上で演算を実行するために必要とされる記憶量を低減し、また、演算を実行する際に行われる計算の数を低減することが可能である。
【0015】
いくつかの実施形態では、演算は、第1の行列及び第2の行列に対する乗算演算を含み、集約回路は、集約として、所与の行及び所与の列のドット積を計算するドット積回路を備え、機能回路は、機能として乗算を実行する乗算回路を備え、ドット積回路は、所与の行及び所与の列に対して生成された各部分結果を加算する加算回路を備える。2つの行列間で乗算を実行することは、実行されている多数の計算を伴うため、時間がかかり得る。しかしながら、多くの場合、計算の一部のみが対象となる。例えば、対象の計算は、値のうちの1つが非ゼロであるものであり得る。したがって、行列の一方又は両方を圧縮し、対応データを使用することによって、(例えば、非ゼロ要素間の)関連する相互作用が発生することになる場所を判定すること、及びそれらの特定の計算を実行することが可能である。これにより、実行される計算の数を低減することができる。
【0016】
いくつかの実施形態では、受信機回路は、第3の行列の要素を受信するように適合され、演算は、第3の行列の、第1の行列及び第2の行列の乗算演算の結果との加算演算を含み、加算回路は、第3の行列の要素のうちの1つと一緒に、所与の行及び所与の列に対して生成された各部分結果を加算するように適合されている。積和演算では、2つのオペランドが一緒に乗算され、その結果が、そのような多数の乗算の結果を積算する「積算器」に加算される。
【0017】
いくつかの実施形態では、乗算回路は、第2の行列の要素のいずれも第2の行列の行i内で発生していないという判定に応じて、値「0」を出力するように適合されている。第2の行列の要素のいずれも第2の行列の行i内で発生していない場合、それらの要素との関連する相互作用はない場合がある。例えば、任意のそのような相互作用は、提供されない行列の要素との相互作用である。これは、例えば、全ての要素がゼロである場合に発生し得る。計算が実行されていない結果として、ゼロの値が直接出力され、それによってより複雑な計算を実行すべき必要性を除去する。
【0018】
いくつかの実施形態では、判定回路は、第2の行列の所与の要素が、第2の行列の行j、列i以外の場所で発生するとの判定を判定回路が行ったことに応じて、乗算回路への入力として値「0」を提供するように適合されている。乗算回路に値「0」を出力させる1つの方法は、乗算回路自体への入力として「0」を提供することである。
【0019】
いくつかの実施形態では、データ処理装置は、第1の行列の要素を記憶する記憶回路を備え、記憶回路は対応データを含む。そのような実施形態では、第1の行列の要素は、対応データと一緒に記憶され、対応データはそれらの要素が第1の行列内に現れる場所を示す。
【0020】
いくつかの実施形態では、記憶回路は、ベクトルレジスタである。ベクトルレジスタは、大量のデータを記憶する目的で、複数の規則的なレジスタから構成され得る。ベクトルレジスタは、典型的に、ベクトルレジスタ内の全てのデータが同時にアクセス又は提供され得るように、一緒に配線されるか又は編成される。いくつかの場合では、ベクトルレジスタは、ストレージのその量が変化させられ得るようにスケーラブルであることができ、したがって、そのような実施形態では、行列の要素及び対応データを記憶するのに十分であるように、ベクトルレジスタのサイズを制限することが可能であることに留意されたい。このように、最悪ケースシナリオを取り扱うために大きなベクトルレジスタを必要とすることなく、様々な異なる行列サイズ(又は要素の数)をサポートすることができる。
【0021】
いくつかの実施形態では、第2の行列の要素を記憶する記憶回路が提供され、記憶回路は更なる対応データを含む。第1の行列の要素を記憶するために使用される記憶回路と同様の方法で、第2の行列はまた、記憶回路内に記憶することができ、更なる対応データと一緒に記憶することができる。第1の行列及び第2の行列のために使用される記憶回路は、同じであってもよく、又は異なっていてもよいことに留意されたい。
【0022】
いくつかの実施形態では、記憶回路は、ベクトルレジスタである。第2の行列を記憶するために使用されるベクトルレジスタは、第1の行列を記憶するために使用されるのと同じベクトルレジスタであってもよく、又は異なるベクトルレジスタであってもよい。
【0023】
いくつかの実施形態では、記憶回路の幅はbビットであり、第1の行列の要素のそれぞれは、cビットの幅を有し、第1の行列の要素の数は、最大でb/cである。したがって、要素の数は、要素の幅、及びストレージのサイズにも応じて変化させることができる。例えば、各要素が1ビットのみであり、記憶回路が32ビットである場合、第1の行列の要素の数は32までになり得る。
【0024】
いくつかの実施形態では、対応データの幅は、第1の行列の要素のそれぞれに対してxビットであり、第1の行列の要素の数は、最大でb/(c+x)である。対応データは、その要素が第1の行列内にあることを示すために、各要素に対して提供されてもよい。そのような対応データは、第1の行列のサイズに応じて多数のビットを使用することができる。例えば、対応データが(m列を含む)各行に対して提供される場合、対応データのサイズは、第1の行列の要素のそれぞれに対して、log2(m)ビットであり得る。同様に、対応データが(n行を含む)各列に対して提供された場合、対応データのサイズは、第1の行列の要素のそれぞれに対して、log2(n)であり得る。対応データが行又は列ベースで提供されず、したがって第1の行列の各要素が指定された行及び列を有しなければならない場合、対応データは、log2(m)+log2(n)ビットであり得る。
【0025】
いくつかの実施形態では、記憶回路の幅はbビットであり、第2の行列の要素のそれぞれは、cビットの幅を有し、第2の行列の要素の数は、最大でb/cである。上記と同様に、第2の行列の要素の数は、第2の行列の要素を記憶する記憶回路のサイズ、並びに各要素を表すために使用されるビット数に応じて変化させることができる。
【0026】
いくつかの実施形態では、更なる対応データの幅は、第2の行列の要素のそれぞれに対してxビットであり、第2の行列の要素の数は、最大でb/(c+x)である。上記と同様に、更なる対応データは、第2の行列のサイズに依存する幅を有する。
【0027】
いくつかの実施形態によれば、データ処理装置が提供され、データ処理装置は、行列演算命令を含む1つ以上の命令を受信するデコード回路を備え、行列演算命令は第1の行列の要素、第2の行列の要素、第1の行列の要素が第1の行列内に位置する場所を示す対応データを参照し、行列演算命令を受信することに応じて、デコード回路は、1つ以上の実行ユニットに、第1の行列及び第2の行列上で行列演算を実行させるために、1つ以上の制御信号を生成する。
【0028】
そのような態様によれば、第1の行列及び第2の行列上で演算を実行するために、第1の行列の要素及び第2の行列の要素、及び第1の行列の要素が第1の行列に関連する方法(例えば、要素が位置する場所)を示す対応データをも参照する命令を提供することが可能である。圧縮は、第1の行列の要素の一部(しかし全てではない)を提供することによって達成され得る。
【0029】
ここで、特定の実施形態を、図面を参照して説明する。
【0030】
図1は、いくつかの実施形態によるデータ処理装置100を概略的に示す。装置は、第1の行列のいくつかの要素、第2の行列の少なくともいくつかの要素、及び第1の行列の提供要素が第1の行列に属する場所を示す対応データを受信する、受信機回路110を含む。この情報は、受信機回路から判定回路120に渡される。判定回路は、行列演算を実行する際に、第1の行列のどの提供要素が第2の行列の要素と相互作用するかを判定するために、対応データを使用する。2つの要素が相互作用することになるかどうかは、第1の行列及び第2の行列内のそれらの場所、及び実行されている演算に依存する。例えば、行列乗算の場合、第1の行列と第2の行列とが一緒に乗算されるときに、第1の行列の第1の行、第1の列の要素は第2の行列の第2の行、第2の列の要素と相互作用しない。対応データが、第1の行列の提供要素が第1の行列内に位置する場所を示すため、この情報は、相互作用している要素のペア及びそれらの場所を判定するために使用され得る。
【0031】
発生する相互作用に関する情報は、集約回路130に渡される。集約回路130は、多数の相互作用しているペアにわたる集約を計算するために使用される。例えば、集約回路は、行列乗算を実行する際に、所与の行/列と相互作用するペアの集約を計算することができる。集約回路130は、行列演算を実行する機能回路140を含む。特に、判定回路120が相互作用すると判定した特定の要素のペア(第1の行列からの1つ及び第2の行列からの1つ)に対して、機能回路は、相互作用が発生すると判定された演算を実行する。それによって、機能回路は、単一の相互作用しているペアの部分結果を生成し、次いでこれが集約回路130によって集約される。
【0032】
いくつかの実施形態では、受信機回路110はまた、更なる対応データを受信して、第2の行列の提供要素が第2の行列内に発生する場所を示す。これは、例えば、第2の行列の要素のうちの一部のみが提供される場合であり得る。更なる対応データは、相互作用しているペアを判定するために、この更なる対応データを使用する判定回路120に渡される。他の実施形態では、更なる対応データは、無視することができる。例えば、これは、第2の行列の要素が第2の行列の要素の全てを含む場合であり得る。
【0033】
図2は、対応データ及び任意選択の更なる対応データを使用して、第1の行列及び第2の行列の要素の場所を、第1の行列及び第2の行列内にそれぞれ示し得る方法を示す。
図2の場合、結果行列dを提供するために、行列aと行列bとの間の乗算の結果が積算行列cに加算される積和演算の実施例が示されている。この実施例では、積算行列cは2×2行列であり、第1の行列aは8×2行列であり、第2の行列は2×8行列であり、結果行列dは2×2行列である。行列乗算の性質は、行列bによる行列aの乗算の結果が、2×2行列になることを意味する。当然のことながら、他のサイズ行列を使用することができ、実際に、同じプロセスを使用して、積算演算なしに行列乗算を実行することができることが理解されるであろう。
【0034】
この実施例では、第1の行列aの提供要素は、非ゼロである要素である。同様に、第2の行列bの提供要素は、非ゼロである値である。第1の行列aの場合、対応データは、各行に対して提供され、かつ各非ゼロ要素がその行内に位置する場所のインデックスを提供する。例えば、行列aの第1の行では、インデックス0、5、及び7に、非ゼロ要素が存在する。第2の行では、インデックス1、4、及び6に、非ゼロ値が存在する。したがって、第1の行列aの第1の行に対する対応データは、値0、5、及び7を表し、対応データは、第2の行に対して、値1、4、及び6を示すことになる。第2の行列bに関して、各列に対して更なる対応データが提供される。この実施例では、行列bの第1の列は、インデックス0、3、及び7で非ゼロ値を含み、そのため、第1の列に対する更なる対応データは、インデックス0、3、及び7を含むことになる。第2の列では、インデックス0、3、及び6に、非ゼロ値が見出される。したがって、更なる対応データは、位置0、3、及び6に、第2の行列bの要素が位置することを示すことになる。
【0035】
対応データ及び更なる対応データを使用して、第1及び第2の行列を、第1の行列の提供要素及び第2の行列の提供要素からそれぞれ再構成することが可能である。
【0036】
図3は、圧縮行列a’及びb’をそれぞれ形成するために、行列a及びbが対応データを使用して圧縮され得る方法を示している。この場合、圧縮行列は、元の行列a及びbの非ゼロ要素から構成される。このようにして、第1の行列は8×2から3×2に縮小され、第2の行列bは2×8から2×3に縮小されている。したがって、行列を記憶又は表現するのに必要な記憶スペースは、対応データ(及び任意選択の更なる対応データ)もまた記憶されるにもかかわらず、行列をその完全な形態で記憶又は表現する状況と比較して低減される。この実施例では、第1の行列a及び第2の行列bが、行列乗算演算に適しているように対応するサイズに圧縮されている。しかしながら、他の行列演算に対して、圧縮行列a’及びb’は、実行すべき演算に応じて、それらのサイズが対応しないように圧縮され得る。
【0037】
図3はまた、対応データ及び更なる対応データが表される方法を示す。特に、第1の行列aの場合、対応データは、圧縮行列a’の各行に対して提供されるが、第2の行列bの場合、圧縮行列b’の各列に対して対応データが提供される。
【0038】
図4は、ベクトルレジスタ410、420、430、を使用して圧縮行列を記憶し得る方法の実施例を示す。この実施例では、2つのベクトルレジスタVR
a’410及びVR
b’420が、圧縮行列a’及びb’を記憶するために使用され、第3のベクトルレジスタVR
c430が、積算行列cを表すために使用される。ベクトルレジスタ410、420、430のそれぞれは、bビットの幅を有する。
【0039】
第1の圧縮行列a’の場合、第2の行の要素のそれぞれが記憶され、その後、その第2の行に対する対応データが記憶される。これに続いて第1の行の要素、その後、第1の行に対する対応データが記憶される。各要素は、cビットの幅が与えられる。したがって、対応データなしで、ベクトルレジスタ410、420、430のうちの1つに記憶され得る要素の最大数は、b/cである。この実施例では、xビットを使用して、要素のそれぞれに対する各対応データを記憶する。第1の圧縮行列a’の各行には3つの要素が存在するため、各行に対して対応データの3xビットが、すなわち合計6xビットが提供される。したがって、ベクトルレジスタ410、420、430のそれぞれに記憶され得る要素の最大数は、(b-6x)/cに等しい。別の言い方をすれば、各要素に対してxビットの対応データが提供される場合、ベクトルレジスタ410、420、430に記憶され得る要素の最大数は、b/(c+x)である。
【0040】
この実施例では、xは5である。これは、要素のインデックスを表現するには十分過ぎることを理解されたい。実際に、この実施例では、元の行列は、1行(行列aの場合)又は1列(行列bの場合)あたり8個の要素を有するため、1要素あたりlog2(8)=3ビットのみが必要である。
【0041】
この実施例では、要素4、5、及び6に対応する第1の対応データ440は、6<<10|4<<5|1に等しい。換言すれば、値1は、値4と連結されて左に5回シフトし、値6と連結されて左に10回シフトしたものである。これは、値6が第1のインデックスに属し、値5が第4のインデックスに属し、値4が第6のインデックスに属する事実を表す。これは、
図2の行列aの第2の行に示されている。シフトは、インデックスがストレージ中で互いに競合することを防止するために実行される。同様に、第2の対応データ450は、要素1、2、及び5に対応し、7<<10|5<<5|0に等しい。換言すれば、値0は、値5と連結されて左に5回シフトし、値7と連結されて左に10回シフトしたものである。これは、値3がインデックス0で発生し、値2がインデックス5で発生し、値1がインデックス7で発生するという事実を表す。これは、
図2の行列aの第1の行に示されている。対応データは、行ごとに一緒にグループ化されているため、対応データの一部を形成するインデックスに基づいて所与の値の場所を知ることが可能であることに留意されたい。
【0042】
同様に、第2のベクトルレジスタVR
b’内に記憶されたデータは、更なる対応データ460、470の2つのアイテムを含む。第1の対応データ460のは、要素B、C、及びDに対応し、6<<10|3<<5|0に等しい。換言すれば、値0は、値3と連結されて左に5回シフトし、値6と連結されて左に10回シフトしたものである。これは、値Dがインデックス0で記憶され、値Cがインデックス3に記憶され、値Bがインデックス6に記憶されているという事実を表す。これは、
図2の行列bの第2の列に示されている。第2の更なる対応データ470は、値8、9、及びAに対応し、7<<10|3<<5|0に等しい。換言すれば、値0は、値3と連結されて左に5回シフトし、値7と連結されて左に10回シフトしたものである。これは、値Aがインデックス0で発生し、値9がインデックス3で発生し、値8がインデックス7で発生することを示す。再度、これは、
図2の行列bの第1の列として示されている。更なる対応データは、列ごとに一緒にグループ化されているため、対応データの一部を形成するインデックスに基づいて所与の値の場所を知ることが可能であることに留意されたい。
【0043】
積算行列は、行列a’及びb’と同じ方法で圧縮されていないため、積算行列cのデータ要素には対応データが必要ではないことに留意されたい。したがって、第3のベクトルレジスタVRc430は、積算行列cの4つの値を単に含む。対応データが存在しないため、かつ4つの値のみが存在するため、積算行列cの要素にはより多くのビットを割り当てることができる。これはまた、特にこれらが多数の乗算の加算結果を表す場合に、積算行列の要素のサイズがはるかに大きくなり得るため、適切である。
【0044】
図5は、2つの圧縮行列a’及びb’と積算行列c’との間で乗算又は積和演算を実行するために使用される回路を示している。このプロセスは、一連のドット積演算を実行することを含む。回路500は、4つのユニット530a、530b、530c、530dから作製され、そのそれぞれがドット積を実行する。ユニット530a、530b、530c、530dのそれぞれは、行列乗算演算に従って、第1の圧縮行列a’及び第2の圧縮行列b’の要素の異なる組み合わせを受信する。加えて、積和演算が実行される場合、4つのユニット530a、530b、530c、530dのそれぞれに積算要素が渡される。例えば、第1の圧縮行列a’の第1の列と第2の圧縮行列b’の第1の行とのドット積は、結果行列の(1,1)において要素を生成する。積和演算を実行すべき場合、積算行列の(1,1)における要素はまた、結果行列を生成するためにドット積演算の結果に追加されなければならない。同様に、第1の圧縮行列a’の第1の列と第2の圧縮行列b’の第2の行とのドット積は、結果行列の(2,1)(第2の列、第1の行)において要素を生成する。積和演算が実行されている場合、積算行列の(2,1)における要素もまた追加されて、結果行列を生成する。乗算又は積和演算が実行されるか否かにかかわらず、4つのユニット530a、530b、530c、530dのそれぞれの出力が、結果行列dの要素のうちの1つである。
【0045】
図5はまた、ユニット530aのうちの1つの構造を示す。他のユニット530b、530c、530dの構造は、受信される圧縮行列a’、b’の要素、及び積算行列cの要素を除いて同様である。
【0046】
図示された実施例では、圧縮行列a’の第1の行の要素、及び圧縮行列b’の第1の列の要素が受信される。ユニット530aは、3つの判定回路520aa、520ab、520acを含み、そのため、回路は、(第1の圧縮行列b’に対して)1列あたり最大3つの要素を有する圧縮行列b’をサポートすることができる。判定回路520aa、520ab、520acのそれぞれは、圧縮行列b’の3つの要素のそれぞれを受信する。更に、判定回路のそれぞれは、更なる入力として値z(0)を受信する。この実施例では、判定回路520aa、520ab、520acのそれぞれは、マルチプレクサの形態をとる。マルチプレクサの選択信号Sは、3つの構成要素s2、s1、s0から構成される。これらの要素のそれぞれは単一ビットであり、全体的な選択信号Sはワンホットである。
【0047】
図5に示されるように、第1の判定回路520aaの場合、s
0=(a
0id==b
0id)、s
1=(a
0id==b
1id)、s
2=(a
0id==b
2id)である。換言すれば、
第1の判定回路520aaは、第1の圧縮行列a’の第1の提供要素のインデックスが、第2の圧縮行列b’の第1の提供要素のインデックスに等しい場合、1に等しい第1の選択ビットs
0を有する。そうでなければ、選択ビットs
0は、0に等しい。
【0048】
第1の判定回路520aaは、第1の圧縮行列a’の第1の提供要素のインデックスが、第2の圧縮行列b’の第2の提供要素のインデックスと等しい場合、1に等しい第2の選択ビットs1を有する。そうでなければ、選択ビットs1は、0に等しい。
【0049】
第1の判定回路520aaは、第1の圧縮行列a’の第1の提供要素のインデックスが、第2の圧縮行列b’の第3の提供要素のインデックスと等しい場合、1に等しい第3の選択ビットs2を有する。そうでなければ、選択ビットs2は、0に等しい。
【0050】
このインデックスは、対応データ及び更なる対応データに従って判定される。したがって、選択信号は、第1の圧縮行列a’の第1の提供要素のいずれかのインデックスが、第2の圧縮行列b’の3つの要素のいずれかのインデックスに等しいかどうかを、第1の判定回路520aaに対して示す。理解されるように、第1の行列と第2の行列との間の乗算演算では、第1の行列の第1の要素は、そのインデックスが一致する場合、第2の行列の第2の要素と相互作用する(それによって乗算される)。すなわち、第1の要素の列番号が第2の要素の行番号と同じである場合である。したがって、選択信号は、任意のそのような一致が発生する場所を示し、これにより、第2の行列から一致する要素を選択させる。
【0051】
したがって、判定回路520aaの出力は、相互作用がないときに値0に等しい、又は第1の圧縮行列a’の第1の要素と第2の圧縮行列の要素との間で相互作用が発生する場合に、第2の圧縮行列b’の要素のうちの1つの要素の値に等しい、のいずれかである。次いで、この値は、入力として第1の圧縮行列a’の第1の要素も受信する、第1の乗算回路の形態の第1の機能回路540aaに渡される。次いで、第1の乗算回路520aaは、乗算を実行する。その出力は、ドット積演算の加算部分を実行する、加算器の形態である積算回路550aに渡される。
【0052】
第2の判定回路520abは、何らかの相互作用が、第2の圧縮行列b’の3つの提供要素と第1の圧縮行列a’の第2の提供要素との間で発生するかどうかを判定するために提供される。再度、選択信号Sは、3つのビットs0、s1、s2から構成される。しかしながら、第2の判定回路520abの場合、s0=(a1id==b0id)、s1=(a1id==b1id)、s2=(a1id==b2id)である。第2の判定回路520abの出力は、第2の圧縮行列b’の要素のうちのいずれか1つであり、これは、第1の圧縮行列a’の第2の要素と相互作用すると見なされる要素、又は相互作用が発生しない場合はz(0)である。結果は、第2の乗算回路540abに渡される。第2の乗算回路は、第1の圧縮行列a’の第2の要素と一緒に渡される値を乗算する。次いで、乗算の結果は、ドット積演算の加算部分を実行する、加算器の形態である積算回路550aに渡される。
【0053】
同様に、第3の判定回路520acは、第2の圧縮行列b’の3つの要素のいずれかが第1の圧縮行列a’の第3の要素と相互作用するかどうかを判定する。ここで、選択信号ビットはs0=(a2id==b0id)、s1=(a2id==b1id)、s2=(a2id==b2id)である。したがって、第2の判定回路520acの出力はゼロである、又は第1の圧縮行列a’の第2の要素と相互作用すると見なされる、第2の圧縮行列b’の3つの提供要素のうちの1つ、である。出力は、第3の乗算回路540acに渡され、ここでその結果が第1の圧縮行列a’の第3の提供値によって乗算され、この結果が積算器550aに渡される。
【0054】
積算回路550aは、乗算回路540aa、540ab、540acのそれぞれの結果を一緒に加算する。積算器はまた、(提供されている場合)積算行列cからの提供要素を加算する。この結果は、
図5に示されるように、結果行列dの値のうちの1つを生成する。
【0055】
他のユニット530b、530c、530dは、同様の方法で挙動する。判定回路520のそれぞれは、第2の圧縮行列b’の3つの提供要素のインデックスを、第1の圧縮行列a’の3つの提供要素のうちの1つのインデックスと比較する。1つのユニット内の3つの判定回路は、第2の圧縮行列b’の提供要素のインデックスのそれぞれを、第1の圧縮行列a’の提供要素のインデックスのそれぞれと、まとめて比較する。
【0056】
したがって、対応データ及び更なる対応データをインデックスの形態で使用することによって、判定回路は、第1の行列a’の要素と第2の行列b’の要素との間で相互作用が発生する場所を判定することができることが分かり得る。相互作用が発生すると見なされる場合、それらの要素間の演算(例えば、乗算)が行われる。そうでなければ、実行される乗算は、ゼロによる乗算である。
【0057】
この実施例では、第1の圧縮行列a’及び第2の圧縮行列b’のそれぞれの3つの要素のみが考慮されている。しかしながら、それは、更なる乗算回路540を提供することにより、判定回路520への更なる入力を提供することによって、スケーリングされ得ることを理解されたい。更に、提供される出力結果は2×2行列であり、したがって4(2×2)個のユニット530が提供される。しかしながら、出力行列dがより大きい場合、ユニットのより大きなアレイが提供され得る。例えば、出力行列が3×3行列である場合、9個のそのようなユニット530が提供されることになる。もちろん、そのような場合、圧縮行列のサイズは、同様により大きくなる可能性が高く、したがって、個々のユニット530のサイズもまた、前述のように拡張される可能性が高い。
【0058】
装置500の結果として、例えば、非圧縮行列a、bに対して必要とされ得る演算の完全なセットを実行する必要はないことが理解されるであろう。例えば、非圧縮行列a、bの要素数を考慮すると、合計32の乗算が必要とされることになるが、圧縮により、この実施例では、12の乗算の実行のみが必要となる。更に、多数の乗算が、複数のユニット530にわたって並行して発生する。これらの両方の理由の結果として、この行列演算は、非圧縮行列の場合よりも迅速に実行することができる。更に、圧縮行列a’及びb’は、非圧縮行列a及びbよりも著しく小さく、したがって、より少ない記憶スペースを使用することで記憶され得ることを理解されたい。
【0059】
この実施例では、行列の両方が圧縮される。しかしながら、2つの行列のうちの1つは、非圧縮形態であり得ることを理解されたい。これが生じる場合、必要とされるインデックスが行列自体から直接判定され得るため、対応データ又は更なる対応データは必要ではない。
【0060】
他の実施形態では、乗算(又は積和)以外の演算を実行することができる。例えば、2つの行列を一緒に加算する際に、1つ又は2つのゼロオペランドの加算は、本質的に冗長演算である。したがって、2つの値が加算において互いに「相互作用」している場合、実際の加算演算は、非ゼロ(又は全てのオペランドがゼロである場合はゼロ)のオペランドを単に返すことによって、無視され得る。
【0061】
図6は、第1の行列及び第2の行列が非対応のサイズを有する演算を実行するために「タイリング」が使用され得る実施例を考察している。特に、行列aは、多くの非ゼロエントリを有する疎行列であることにより圧縮され得る。したがって、それは、以前に示したように、2×8行列aから2×3行列a’に圧縮され得る。対照的に、行列bは高密度であって、非ゼロエントリを有さず、したがって、8×1行列のままである。通常、これらの行列間の行列乗算は、2×1行列を生成する。しかしながら、タイリングによって、8×1行列は、2つの列610、620を有する4×2行列として処理され得る。したがって、この出力は、2×2行列である。その結果、要素d
00及びd
10は、行列bの第1の半分(ビット0~3)610を使用して生成される。一方、要素d
01及びd
11は、第2の行列bの第2の半分(ビット4~7)620を使用して生成される。
【0062】
図7は、
図6の実施例のストレージが達成される方法を示す。特に、第1の圧縮行列a’及び積算行列c用のストレージは、
図4に関して示されるのと同じ方法で、ベクトルレジスタ710、730内に生じる。第2の行列bの場合、(圧縮が発生しないので)更なる対応データが必要でないため、スペースは、記憶すべき第2の行列bの要素のそれぞれに対して解放される。
【0063】
図8は、2つの行列のうちの1つが非対応サイズを有する行列演算を実行するために使用され得る回路800を示す。この実施例では、行列bは、その非圧縮形態のままであり、したがって技術的には8×1行列であり、
図8の回路は、代わりに、タイリングを使用して4×2行列として処理する。
【0064】
回路800は、
図5に示される回路500と同様に動作する。1つの重要な違いは、非圧縮行列bが4行を有するように処理されるため、4つのユニット830a、830b、830c、830dのそれぞれが、第2の非圧縮行列bに関連して4つの入力を受信することである。
【0065】
4つのユニット830a、830b、830c、830d内の判定回路820aa、820ab、820acのそれぞれは、定数0(z)と一緒に4つの入力を受信する。更に、選択信号Sは、4つの構成要素s0、s1、s2、s3から構成される。例えば、第1のユニット820aaの場合、s0=(a0id==b0id)、s1=(a0id==b1id)、s2=(a0id==b2id)、s3=(a0id==b3id)である。再度、選択信号Sの構成要素は、第1の圧縮行列a’の所与の要素と第2の行列bの提示された要素のそれぞれとの間で相互作用が発生するかどうかを示している。この場合、圧縮が行われないため、更なる対応データは、第2の行列bの要素に対して利用可能ではない。しかしながら、第2の行列bの要素のそれぞれの場所が既知であるため、更なる対応データは必要ではない。
【0066】
図8に示される回路はまた、b’に対するものなどの圧縮行列のペアと共に使用することができる。これは、(更なる)対応データの一部として提供されるインデックスを単に使用することによって達成され得る。同様に、
図8の回路は、非対応のサイズを有する行列の乗算に使用することができるが(この場合、圧縮された2×3行列を8×1行列によって乗算し、4×2行列として処理される)、
判定回路820への任意の余分な入力信号を無視することによって、かつそれらが選択されないように、それらの入力のための選択信号Sの対応する選択ビットを0に設定することによって、同じ回路をより小さなサイズの行列に使用することもできる。例えば、第4の入力を判定回路820に対して無視し、かつs
3による選択値を0に設定することによって、同じ回路を、2×3行列を別の2×3行列(
図5のように)によって乗算するために使用することができる。第1の行列がより小さい場合(例えば、圧縮行列a’が2×2であった場合)、余分な判定ユニット820(及びそれらの関連する乗算ユニット840)は無視される。例えば、圧縮行列a’が2×2行列である場合、第3の判定回路820ac及びその関連する乗算ユニット840acは、単に無視される。
【0067】
図9は、いくつかの実施形態による装置900を示す。装置は、パイプラインの形態の多数の構成要素930を含む。パイプライン930内で、フェッチ回路910は、行列演算を実行するための命令(MatrixOp)を受信する。命令は、第1の行列の要素(elemA)、第2の行列の要素(elemB)、第1の行列の要素に対する対応データ(correspondenceA)、第2の行列の要素に対する任意選択の更なる対応データ(correspondenceB)、及び第3の行列積算器の任意選択の要素(elemC)を特定する。各場合では、行列の要素への参照は、レジスタ(単数又は複数)の形態、又は要素が見出され得るメモリ内の場所の形態で提供され得る。フェッチ回路910は、フェッチ命令をデコード回路920に渡す。デコード回路は、1つ以上の制御信号を提供する命令をデコードする。次いで、これらの制御信号は、
図5又は
図8に関して示されるもののような行列演算回路500に渡される。
【0068】
図10は、いくつかの実施形態による、データ処理の方法1000を示す。ステップ1010において、第1の行列の要素は、第2の行列の要素、及び第1の行列の要素が第1の行列内に発生する場所を示す対応データと一緒に受信される。ステップ1020において、行列演算に従って、第1の行列及び第2の行列のどの要素が互いに相互作用するかについて判定される。ステップ1030において、集約は、判定ステップ1020により互いに相互作用すると見なされる行列及び第2の行列の要素上で行列演算を実行することによって行われる。
【0069】
本出願において、「~ように構成された(configured to...)」という用語は、装置の要素が、定義された動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」とは、ハードウェア又はソフトウェアの構成又は相互接続の方法を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスが機能を実行するようにプログラムされてもよい。「構成されている」は、定義された動作を提供するために装置要素を何らかの方法で変更する必要があることを意味しない。
【0070】
本発明の例示的な実施形態が添付の図面を参照して本明細書で詳細に説明されてきたが、本発明はそれらの正確な実施形態に限定されないこと、及び添付の特許請求の範囲によって規定される本発明の範囲及び趣旨から逸脱することなく、当業者によって様々な変更、追加、及び修正が当業者によって実施され得ることが理解されるであろう。例えば、本発明の範囲から逸脱することなく、従属請求項の特徴と独立請求項の特徴との様々な組み合わせを行うことができる。