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

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

▶ 海光信息技術股分有限公司の特許一覧

特表2024-533746データ処理方法、装置、機器及び記憶媒体
<>
  • 特表-データ処理方法、装置、機器及び記憶媒体 図1
  • 特表-データ処理方法、装置、機器及び記憶媒体 図2
  • 特表-データ処理方法、装置、機器及び記憶媒体 図3
  • 特表-データ処理方法、装置、機器及び記憶媒体 図4
  • 特表-データ処理方法、装置、機器及び記憶媒体 図5
  • 特表-データ処理方法、装置、機器及び記憶媒体 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-09-12
(54)【発明の名称】データ処理方法、装置、機器及び記憶媒体
(51)【国際特許分類】
   G06F 17/16 20060101AFI20240905BHJP
【FI】
G06F17/16 M
G06F17/16 D
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2024518978
(86)(22)【出願日】2022-05-16
(85)【翻訳文提出日】2024-03-26
(86)【国際出願番号】 CN2022092990
(87)【国際公開番号】W WO2023077770
(87)【国際公開日】2023-05-11
(31)【優先権主張番号】202111291162.1
(32)【優先日】2021-11-03
(33)【優先権主張国・地域又は機関】CN
(81)【指定国・地域】
(71)【出願人】
【識別番号】524114858
【氏名又は名称】海光信息技術股分有限公司
【氏名又は名称原語表記】HYGON INFORMATION TECHNOLOGY CO., LTD.
【住所又は居所原語表記】Industrial Incubator 3-8,North 2-204,No.18 West Hitech Road,Huayuan Industrial District,Binhai New Area,Tianjin 300392 China
(74)【代理人】
【識別番号】100134636
【弁理士】
【氏名又は名称】金高 寿裕
(74)【代理人】
【識別番号】100114904
【弁理士】
【氏名又は名称】小磯 貴子
(72)【発明者】
【氏名】陳 慶
(72)【発明者】
【氏名】楊 仍才
(72)【発明者】
【氏名】袁 慶
(72)【発明者】
【氏名】楊 宇
(72)【発明者】
【氏名】王 斌
(72)【発明者】
【氏名】潘 于
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056BB32
5B056BB71
5B056FF01
5B056FF02
5B056FF10
(57)【要約】
本開示は、行列演算に適用されるデータ処理方法、装置、機器及び記憶媒体を提供する。該データ処理方法は、複数の第1操作データを含む第1行列が記憶された少なくとも1つの第1ベクトルレジスタ、及び複数の第2操作データを含む第2行列が記憶された少なくとも1つの第2ベクトルレジスタを決定するステップと、第1データ選択情報及び第2データ選択情報を取得するステップと、第1データ選択情報に基づき、複数の第1操作データから少なくとも1つの第1操作データを選択し、少なくとも1つの第1ターゲット操作データを得るステップと、第2データ選択情報に基づき、複数の第2操作データから少なくとも1つの第2操作データを選択し、少なくとも1つの第2ターゲット操作データを得るステップと、を含む。該データ処理方法は、行列の特性を十分に利用し、スレッド間でデータを効果的に多重化し、データの読み取り回数を大幅に減少させ、消費電力を低減させる。
【選択図】図1
【特許請求の範囲】
【請求項1】
行列演算に適用されるデータ処理方法であり、
複数の第1操作データを含む第1行列が記憶された少なくとも1つの第1ベクトルレジスタ、及び複数の第2操作データを含む第2行列が記憶された少なくとも1つの第2ベクトルレジスタを決定するステップと、
第1データ選択情報及び第2データ選択情報を取得するステップと、
前記第1データ選択情報に基づき、前記複数の第1操作データから少なくとも1つの第1操作データを選択し、少なくとも1つの第1ターゲット操作データを得て、前記少なくとも1つの第1ターゲット操作データを、前記第2行列の第2行列次元を倍数としてデータコピーして複数の演算器に提供して前記複数の演算器に1対1で対応する複数の第1乗算係数を決定するステップと、
前記第2データ選択情報に基づき、前記複数の第2操作データから少なくとも1つの第2操作データを選択し、少なくとも1つの第2ターゲット操作データを得て、前記少なくとも1つの第2ターゲット操作データを、前記第1行列の第1行列次元を倍数としてデータコピーして前記複数の演算器に提供して前記複数の演算器に1対1で対応する複数の第2乗算係数を決定するステップと、を含み、
前記第1行列次元及び前記第2行列次元はいずれも正の整数であり、且つ前記第1行列次元のタイプと前記第2行列次元のタイプは異なるデータ処理方法。
【請求項2】
前記少なくとも1つの第1ターゲット操作データはM個の第1ターゲット操作データを含み、前記複数の演算器はP個の演算器群を含み、各演算器群はM個の演算器を含み、前記第2行列次元はPであり、M及びPはいずれも正の整数であり、
前記少なくとも1つの第1ターゲット操作データを、前記第2行列の第2行列次元を倍数としてデータコピーして複数の演算器に提供して前記複数の演算器に1対1で対応する複数の第1乗算係数を決定するステップは、
前記M個の第1ターゲット操作データをP部コピーし、P個の第1ターゲット操作データ群を得るステップであり、各第1ターゲット操作データ群は前記M個の第1ターゲット操作データを含むステップと、
前記P個の第1ターゲット操作データ群をそれぞれ前記P個の演算器群に提供し、前記複数の第1乗算係数を決定するステップであり、各演算器群のM個の演算器に対応するM個の第1乗算係数はそれぞれ前記M個の第1ターゲット操作データであるステップと、を含む請求項1に記載のデータ処理方法。
【請求項3】
前記少なくとも1つの第2ターゲット操作データはP個の第2ターゲット操作データを含み、前記複数の演算器はP個の演算器群を含み、各演算器群はM個の演算器を含み、前記第1行列次元はMであり、M及びPはいずれも正の整数であり、
前記少なくとも1つの第2ターゲット操作データを、前記第1行列の第1行列次元を倍数としてデータコピーして前記複数の演算器に提供して前記複数の演算器に1対1で対応する複数の第2乗算係数を決定するステップは、
前記P個の第2ターゲット操作データをM部コピーし、P個の第2ターゲット操作データ群を得るステップであり、各第2ターゲット操作データ群は1つの第2ターゲット操作データに対応し、且つ同じM個の前記第2ターゲット操作データを含むステップと、
前記P個の第2ターゲット操作データ群をそれぞれ前記P個の演算器群に提供し、前記複数の第2乗算係数を決定するステップであり、各演算器群内のM個の演算器に対応するM個の第2乗算係数は同じであり、且つ前記各演算器群に対応する第2ターゲット操作データ群内の第2ターゲット操作データであるステップと、を含む請求項1に記載のデータ処理方法。
【請求項4】
前記行列演算は複数のスレッドを含み、前記複数の演算器はそれぞれ前記複数のスレッドに対応し、前記少なくとも1つの第1ベクトルレジスタは複数の第1パスを有し、前記少なくとも1つの第2ベクトルレジスタは複数の第2パスを有し、前記複数のスレッドの各スレッドはそれぞれ前記複数の第1パスのうちの対応する第1パス及び前記複数の第2パスのうちの対応する第2パスに対応し、前記複数の第1操作データは前記複数の第1パスに対応し、前記複数の第2操作データは前記複数の第2パスに対応し、
前記第1データ選択情報に基づき、前記複数の第1操作データから少なくとも1つの第1操作データを選択し、少なくとも1つの第1ターゲット操作データを得るステップは、
前記第1データ選択情報に基づき、前記複数の第1パスのうち選択された少なくとも1つの第1パスを決定し、前記選択された少なくとも1つの第1パスに対応する少なくとも1つの第1操作データを前記少なくとも1つの第1ターゲット操作データとして用いるステップを含み、
前記第2データ選択情報に基づき、前記複数の第2操作データから少なくとも1つの第2操作データを選択し、少なくとも1つの第2ターゲット操作データを得るステップは、
前記第2データ選択情報に基づき、前記複数の第2パスのうち選択された少なくとも1つの第2パスを決定し、前記選択された少なくとも1つの第2パスに対応する少なくとも1つの第2操作データを前記少なくとも1つの第2ターゲット操作データとして用いるステップを含む請求項1~3のいずれか1項に記載のデータ処理方法。
【請求項5】
少なくとも1つのデスティネーションベクトルレジスタを決定するステップと、
前記複数の第1乗算係数及び前記複数の第2乗算係数に基づき、前記複数の演算器によって乗算演算を実行し、前記複数の演算器に対応する複数の乗算演算結果を得るステップであり、各演算器は対応する第1乗算係数及び第2乗算係数に対して乗算演算を実行し、前記各演算器に対応する乗算演算結果を得るステップと、
前記複数の乗算演算結果を前記少なくとも1つのデスティネーションベクトルレジスタに送信するステップと、をさらに含む請求項1~4のいずれか1項に記載のデータ処理方法。
【請求項6】
前記複数の乗算演算結果を前記少なくとも1つのデスティネーションベクトルレジスタに送信するステップは、
前記複数の乗算演算結果と前記少なくとも1つのデスティネーションベクトルレジスタに記憶された複数の記憶データとを1対1で対応させて加算演算を行い、複数の加算演算結果を得るステップと、
前記複数の加算演算結果を前記少なくとも1つのデスティネーションベクトルレジスタに記憶するステップと、を含む請求項5に記載のデータ処理方法。
【請求項7】
第1データ選択情報及び第2データ選択情報を取得するステップは、
データ選択命令を取得するステップと、
前記データ選択命令を解析し、前記第1データ選択情報及び前記第2データ選択情報を得るステップと、を含む請求項1~6のいずれか1項に記載のデータ処理方法。
【請求項8】
前記少なくとも1つの第1ベクトルレジスタは第1ターゲットベクトルレジスタを含み、前記少なくとも1つの第1ターゲット操作データはいずれも前記第1ターゲットベクトルレジスタに記憶され、
前記少なくとも1つの第2ベクトルレジスタは第2ターゲットベクトルレジスタを含み、前記少なくとも1つの第2ターゲット操作データはいずれも前記第2ターゲットベクトルレジスタに記憶される請求項1~7のいずれか1項に記載のデータ処理方法。
【請求項9】
前記第1行列は縦行列であり、前記少なくとも1つの第1ターゲット操作データは前記第1行列の同一列に位置し、及び、
前記第2行列は横行列であり、前記少なくとも1つの第2ターゲット操作データは前記第2行列の同一行に位置する請求項1~8のいずれか1項に記載のデータ処理方法。
【請求項10】
第1行列が記憶された少なくとも1つの第1ベクトルレジスタ、及び第2行列が記憶された少なくとも1つの第2ベクトルレジスタを決定するステップは、
少なくとも1つの第1アドレス及び少なくとも1つの第2アドレスを取得するステップと、
前記少なくとも1つの第1アドレスに基づき、前記少なくとも1つの第1ベクトルレジスタを決定するステップと、
前記少なくとも1つの第2アドレスに基づき、前記少なくとも1つの第2ベクトルレジスタを決定するステップと、を含む請求項1~9のいずれか1項に記載のデータ処理方法。
【請求項11】
少なくとも1つの第1アドレス及び少なくとも1つの第2アドレスを取得するステップは、
行列演算命令を取得するステップと、
前記行列演算命令を解析し、前記少なくとも1つの第1アドレス及び前記少なくとも1つの第2アドレスを得るステップと、を含む請求項10に記載のデータ処理方法。
【請求項12】
第1データ選択情報及び第2データ選択情報を取得するステップは、
前記行列演算命令を解析し、前記第1データ選択情報及び前記第2データ選択情報を得るステップを含む請求項1~11のいずれか1項に記載のデータ処理方法。
【請求項13】
少なくとも1つの第1データ読取命令及び少なくとも1つの第2データ読取命令を取得するステップと、
前記少なくとも1つの第1データ読取命令を解析し、少なくとも1つの第1読み出しアドレス及び少なくとも1つの第1アドレスを得るステップと、
前記少なくとも1つの第1読み出しアドレスに基づいてメモリから前記複数の第1操作データを読み取り、前記少なくとも1つの第1アドレスに基づき、前記少なくとも1つの第1ベクトルレジスタを決定して前記複数の第1操作データを前記少なくとも1つの第1ベクトルレジスタに書き込むステップと、
前記少なくとも1つの第2データ読取命令を解析し、少なくとも1つの第2読み出しアドレス及び少なくとも1つの第2アドレスを得るステップと、
前記少なくとも1つの第2読み出しアドレスに基づいて前記メモリから前記複数の第2操作データを読み取り、前記少なくとも1つの第2アドレスに基づき、前記少なくとも1つの第2ベクトルレジスタを決定して前記複数の第2操作データを前記少なくとも1つの第2ベクトルレジスタに書き込むステップと、をさらに含む請求項1~12のいずれか1項に記載のデータ処理方法。
【請求項14】
前記複数の演算器は乗算演算を並列に実行する請求項1~13のいずれか1項に記載のデータ処理方法。
【請求項15】
行列演算に適用されるデータ処理装置であり、
複数の第1操作データを含む第1行列が記憶された少なくとも1つの第1ベクトルレジスタ、及び複数の第2操作データを含む第2行列が記憶された少なくとも1つの第2ベクトルレジスタを決定することに用いられたレジスタ決定ユニットと、
第1データ選択情報及び第2データ選択情報を取得することに用いられた情報取得ユニットと、
前記第1データ選択情報に基づき、前記複数の第1操作データから少なくとも1つの第1操作データを選択し、少なくとも1つの第1ターゲット操作データを得て、及び前記第2データ選択情報に基づき、前記複数の第2操作データから少なくとも1つの第2操作データを選択し、少なくとも1つの第2ターゲット操作データを得ることに用いられたデータ選択ユニットと、
前記少なくとも1つの第1ターゲット操作データを、前記第2行列の第2行列次元を倍数としてデータコピーして複数の演算器に提供して前記複数の演算器に1対1で対応する複数の第1乗算係数を決定し、及び前記少なくとも1つの第2ターゲット操作データを、前記第1行列の第1行列次元を倍数としてデータコピーして前記複数の演算器に提供して前記複数の演算器に1対1で対応する複数の第2乗算係数を決定するためのデータブロードキャストユニットと、を含み、
前記第1行列次元及び前記第2行列次元はいずれも正の整数であり、且つ前記第1行列次元のタイプと前記第2行列次元のタイプは異なるデータ処理装置。
【請求項16】
データ処理機器であり、
プロセッサと、
コンピュータ実行可能命令が記憶される記憶媒体と、を含み、
前記コンピュータ実行可能命令は前記プロセッサによって実行されるときに請求項1~14のいずれか1項に記載のデータ処理方法を実現するデータ処理機器。
【請求項17】
コンピュータ実行可能命令を非一時的に記憶するためのコンピュータ可読記憶媒体であり、
前記コンピュータ実行可能命令はプロセッサによって実行されるときに請求項1~14のいずれか1項に記載のデータ処理方法を実現するコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本願は、2021年11月3日に提出された中国特許出願第202111291162.1号の優先権を主張し、全ての目的のために上記中国特許出願に開示されている全内容は本願の一部として引用されている。
【0002】
本開示の実施例は、データ処理方法、データ処理装置、データ処理機器及びコンピュータ可読記憶媒体に関する。
【背景技術】
【0003】
グラフィックスプロセッサ(GPU、graphic process unit)には大量のデータ処理ユニットが含まれており、各データ処理ユニットは単一命令マルチデータストリーム(SIMD、Single-Instruction-Multiple-Data)構造であり、SIMDは1つの命令を実行することにより複数のスレッドでの同じ操作の実行を同時に制御することができ、各SIMD構造にはいずれも専用の1つのベクトルレジスタ群、及び乗算ユニットなどの大量の並列実行可能な演算ユニットがある。SIMD構造は並列性が高いため、SIMD構造は行列演算に広く適用されている。
【発明の概要】
【課題を解決するための手段】
【0004】
本開示の少なくとも1つの実施例は行列演算に適用されるデータ処理方法を提供し、複数の第1操作データを含む第1行列が記憶された少なくとも1つの第1ベクトルレジスタ、及び複数の第2操作データを含む第2行列が記憶された少なくとも1つの第2ベクトルレジスタを決定するステップと、第1データ選択情報及び第2データ選択情報を取得するステップと、第1データ選択情報に基づき、複数の第1操作データから少なくとも1つの第1操作データを選択し、少なくとも1つの第1ターゲット操作データを得て、少なくとも1つの第1ターゲット操作データを、第2行列の第2行列次元を倍数として、複数の演算器に提供して複数の演算器に1対1で対応する複数の第1乗算係数を決定するステップと、第2データ選択情報に基づき、複数の第2操作データから少なくとも1つの第2操作データを選択し、少なくとも1つの第2ターゲット操作データを得て、少なくとも1つの第2ターゲット操作データを、第1行列の第1行列次元を倍数として、複数の演算器に提供して複数の演算器に1対1で対応する複数の第2乗算係数を決定するステップと、を含み、第1行列次元及び第2行列次元はいずれも正の整数であり、且つ第1行列次元のタイプと第2行列次元のタイプは異なる。
【0005】
例えば、本開示の少なくとも1つの実施例に係るデータ処理方法では、少なくとも1つの第1ターゲット操作データはM個の第1ターゲット操作データを含み、複数の演算器はP個の演算器群を含み、各演算器群はM個の演算器を含み、第2行列次元はPであり、M及びPはいずれも正の整数であり、少なくとも1つの第1ターゲット操作データを、第2行列の第2行列次元を倍数として、複数の演算器に提供して複数の演算器に1対1で対応する複数の第1乗算係数を決定するステップは、M個の第1ターゲット操作データをP部コピーし、P個の第1ターゲット操作データ群を得るステップであり、各第1ターゲット操作データ群はM個の第1ターゲット操作データを含むステップと、P個の第1ターゲット操作データ群をそれぞれP個の演算器群に提供し、複数の第1乗算係数を決定するステップであり、各演算器群のM個の演算器に対応するM個の第1乗算係数はそれぞれM個の第1ターゲット操作データであるステップと、を含む。
【0006】
例えば、本開示の少なくとも1つの実施例に係るデータ処理方法では、少なくとも1つの第2ターゲット操作データはP個の第2ターゲット操作データを含み、複数の演算器はP個の演算器群を含み、各演算器群はM個の演算器を含み、第1行列次元はMであり、M及びPはいずれも正の整数であり、少なくとも1つの第2ターゲット操作データを、第1行列の第1行列次元を倍数として、複数の演算器に提供して複数の演算器に1対1で対応する複数の第2乗算係数を決定するステップは、P個の第2ターゲット操作データをM部コピーし、P個の第2ターゲット操作データ群を得るステップであり、各第2ターゲット操作データ群は1つの第2ターゲット操作データに対応し、且つ同じM個の第2ターゲット操作データを含むステップと、P個の第2ターゲット操作データ群をそれぞれP個の演算器群に提供し、複数の第2乗算係数を決定するステップであり、各演算器群内のM個の演算器に対応するM個の第2乗算係数は同じであり、且つ各演算器群に対応する第2ターゲット操作データ群内の第2ターゲット操作データであるステップと、を含む。
【0007】
例えば、本開示の少なくとも1つの実施例に係るデータ処理方法では、行列演算は複数のスレッドを含み、複数の演算器はそれぞれ複数のスレッドに対応し、少なくとも1つの第1ベクトルレジスタは複数の第1パスを有し、少なくとも1つの第2ベクトルレジスタは複数の第2パスを有し、複数のスレッドの各スレッドはそれぞれ複数の第1パスのうちの対応する第1パス及び複数の第2パスのうちの対応する第2パスに対応し、複数の第1操作データは複数の第1パスに対応し、複数の第2操作データは複数の第2パスに対応し、第1データ選択情報に基づき、複数の第1操作データから少なくとも1つの第1操作データを選択し、少なくとも1つの第1ターゲット操作データを得るステップは、第1データ選択情報に基づき、複数の第1パスのうち選択された少なくとも1つの第1パスを決定し、選択された少なくとも1つの第1パスに対応する少なくとも1つの第1操作データを少なくとも1つの第1ターゲット操作データとして用いるステップを含み、及び、第2データ選択情報に基づき、複数の第2操作データから少なくとも1つの第2操作データを選択し、少なくとも1つの第2ターゲット操作データを得るステップは、第2データ選択情報に基づき、複数の第2パスのうち選択された少なくとも1つの第2パスを決定し、選択された少なくとも1つの第2パスに対応する少なくとも1つの第2操作データを少なくとも1つの第2ターゲット操作データとして用いるステップを含む。
【0008】
例えば、本開示の少なくとも1つの実施例に係るデータ処理方法は、少なくとも1つのデスティネーションベクトルレジスタを決定するステップと、複数の第1乗算係数及び複数の第2乗算係数に基づき、複数の演算器によって乗算演算を実行し、複数の演算器に対応する複数の乗算演算結果を得るステップであり、各演算器は対応する第1乗算係数及び第2乗算係数に対して乗算演算を実行し、各演算器に対応する乗算演算結果を得ることに用いられるステップと、複数の乗算演算結果を少なくとも1つのデスティネーションベクトルレジスタに送信するステップと、をさらに含む。
【0009】
例えば、本開示の少なくとも1つの実施例に係るデータ処理方法では、複数の乗算演算結果を少なくとも1つのデスティネーションベクトルレジスタに送信するステップは、複数の乗算演算結果と少なくとも1つのデスティネーションベクトルレジスタに記憶された複数の記憶データとを1対1で対応させて加算演算を行い、複数の加算演算結果を得るステップと、複数の加算演算結果を少なくとも1つのデスティネーションベクトルレジスタに記憶するステップと、を含む。
【0010】
例えば、本開示の少なくとも1つの実施例に係るデータ処理方法では、第1データ選択情報及び第2データ選択情報を取得するステップは、データ選択命令を取得するステップと、データ選択命令を解析し、第1データ選択情報及び第2データ選択情報を得るステップと、を含む。
【0011】
例えば、本開示の少なくとも1つの実施例に係るデータ処理方法では、少なくとも1つの第1ベクトルレジスタは第1ターゲットベクトルレジスタを含み、少なくとも1つの第1ターゲット操作データはいずれも第1ターゲットベクトルレジスタに記憶され、少なくとも1つの第2ベクトルレジスタは第2ターゲットベクトルレジスタを含み、少なくとも1つの第2ターゲット操作データはいずれも第2ターゲットベクトルレジスタに記憶される。
【0012】
例えば、本開示の少なくとも1つの実施例に係るデータ処理方法では、第1行列は縦行列であり、少なくとも1つの第1ターゲット操作データは第1行列の同一列に位置し、及び、第2行列は横行列であり、少なくとも1つの第2ターゲット操作データは第2行列の同一行に位置する。
【0013】
例えば、本開示の少なくとも1つの実施例に係るデータ処理方法では、第1行列が記憶された少なくとも1つの第1ベクトルレジスタ、及び第2行列が記憶された少なくとも1つの第2ベクトルレジスタを決定するステップは、少なくとも1つの第1アドレス及び少なくとも1つの第2アドレスを取得するステップと、少なくとも1つの第1アドレスに基づき、少なくとも1つの第1ベクトルレジスタを決定するステップと、少なくとも1つの第2アドレスに基づき、少なくとも1つの第2ベクトルレジスタを決定するステップと、を含む。
【0014】
例えば、本開示の少なくとも1つの実施例に係るデータ処理方法では、少なくとも1つの第1アドレス及び少なくとも1つの第2アドレスを取得するステップは、行列演算命令を取得するステップと、行列演算命令を解析し、少なくとも1つの第1アドレス及び少なくとも1つの第2アドレスを得るステップと、を含む。
【0015】
例えば、本開示の少なくとも1つの実施例に係るデータ処理方法では、第1データ選択情報及び第2データ選択情報を取得するステップは、行列演算命令を解析し、第1データ選択情報及び第2データ選択情報を得るステップを含む。
【0016】
例えば、本開示の少なくとも1つの実施例に係るデータ処理方法は、少なくとも1つの第1データ読取命令及び少なくとも1つの第2データ読取命令を取得するステップと、少なくとも1つの第1データ読取命令を解析し、少なくとも1つの第1読み出しアドレス及び少なくとも1つの第1アドレスを得るステップと、少なくとも1つの第1読み出しアドレスに基づいてメモリから複数の第1操作データを読み取り、少なくとも1つの第1アドレスに基づき、少なくとも1つの第1ベクトルレジスタを決定して複数の第1操作データを少なくとも1つの第1ベクトルレジスタに書き込むステップと、少なくとも1つの第2データ読取命令を解析し、少なくとも1つの第2読み出しアドレス及び少なくとも1つの第2アドレスを得るステップと、少なくとも1つの第2読み出しアドレスに基づいてメモリから複数の第2操作データを読み取り、少なくとも1つの第2アドレスに基づき、少なくとも1つの第2ベクトルレジスタを決定して複数の第2操作データを少なくとも1つの第2ベクトルレジスタに書き込むステップと、をさらに含む。
【0017】
例えば、本開示の少なくとも1つの実施例に係るデータ処理方法では、複数の演算器は乗算演算を並列に実行する。
【0018】
本開示の少なくとも1つの実施例は行列演算に適用されるデータ処理装置を提供し、データ処理装置は、複数の第1操作データを含む第1行列が記憶された少なくとも1つの第1ベクトルレジスタ、及び複数の第2操作データを含む第2行列が記憶された少なくとも1つの第2ベクトルレジスタを決定することに用いられたレジスタ決定ユニットと、第1データ選択情報及び第2データ選択情報を取得することに用いられた情報取得ユニットと、第1データ選択情報に基づき、複数の第1操作データから少なくとも1つの第1操作データを選択し、少なくとも1つの第1ターゲット操作データを得て、及び第2データ選択情報に基づき、複数の第2操作データから少なくとも1つの第2操作データを選択し、少なくとも1つの第2ターゲット操作データを得ることに用いられたデータ選択ユニットと、少なくとも1つの第1ターゲット操作データを、第2行列の第2行列次元を倍数として、複数の演算器に提供して複数の演算器に1対1で対応する複数の第1乗算係数を決定し、及び少なくとも1つの第2ターゲット操作データを、第1行列の第1行列次元を倍数として、複数の演算器に提供して複数の演算器に1対1で対応する複数の第2乗算係数を決定するためのデータブロードキャストユニットと、を含み、第1行列次元及び第2行列次元はいずれも正の整数であり、且つ第1行列次元のタイプと第2行列次元のタイプは異なる。
【0019】
本開示の少なくとも1つの実施例はデータ処理機器を提供し、プロセッサと、コンピュータ実行可能命令を記憶するための記憶媒体と、を含み、コンピュータ実行可能命令はプロセッサによって実行されるときに本開示の少なくとも1つの実施例に係るデータ処理方法を実現する。
【0020】
本開示の少なくとも1つの実施例はコンピュータ可読記憶媒体を提供し、コンピュータ実行可能命令を非一時的に記憶することに用いられ、コンピュータ実行可能命令はプロセッサによって実行されるときに本開示の少なくとも1つの実施例に係るデータ処理方法を実現する。
【0021】
本開示の実施例の技術的解決手段をより明確に説明するために、以下、実施例の図面を簡単に説明し、明らかに、以下に説明される図面は本開示のいくつかの実施例に関するものに過ぎず、本開示を制限するものではない。
【図面の簡単な説明】
【0022】
図1図1は本開示の実施例に係る行列演算のためのデータ処理方法の模式的なフローチャートである。
図2図2は本開示の実施例に係る行列演算を実行するスレッドとベクトルレジスタのパスとの間の対応関係の模式図である。
図3図3は本開示の実施例に係る行列演算のデータ処理の一例の模式図である。
図4図4は本開示の実施例に係る行列演算に適用されるデータ処理装置の一例の模式的なブロック図である。
図5図5は本開示の実施例に係るデータ処理の後半に関する例示的なデータ選択ユニット及びデータブロードキャストユニットの動作模式図である。
図6図6は本開示の実施例に係るデータ処理機器の模式図である。
【発明を実施するための形態】
【0023】
本開示の実施例の目的、技術的解決手段及び利点をより明確にするために、以下、本開示の実施例の図面を参照しながら、本開示の実施例の技術的解決手段を明確、かつ完全に説明する。明らかに、説明される実施例は本開示の実施例の一部であり、実施例の全部ではない。説明される本開示の実施例に基づき、当業者が創造的な労働を必要とせずに取得した全ての他の実施例は、いずれも本開示の保護範囲に属する。
【0024】
特に定義されない限り、本開示で使用される技術用語又は科学用語は、当業者が理解できる一般的な意味を有する。本開示で使用される「第1」、「第2」及び類似する用語は、何らかの順序、数又は重要性を示すものではなく、異なる構成要素を区別するためのものに過ぎない。「含む」又は「備える」などの類似する用語は、該用語の前に記載された素子又は部材が、該用語の後に列挙される素子又は部材、及びそれらの同等物を含むことを意味し、他の素子又は部材を排除するものではない。「接続」又は「連結」などの類似する用語は、物理的又は機械的接続に限定されず、直接接続されるか間接的に接続されるかに関わらず、電気的接続を含んでもよい。「上」、「下」、「左」、「右」などは、相対的な位置関係を表すためのものに過ぎず、説明される対象の絶対位置が変化すると、該相対的な位置関係もそれに応じて変化する可能性がある。
【0025】
本開示の実施例の下記説明を明確、かつ簡潔に維持するために、本開示では一部の既知の機能及び既知の部材についての詳細な説明を省略する。
【0026】
GPUのSIMD構造処理ユニットは、行列演算命令を実行することにより複数のスレッドでの同じ操作の実行を同時に制御して、行列読み取り、演算操作、結果格納などを実現する。例えば、SIMD32構造について、1つの命令を実行することで32個のスレッドで実行される操作を同時に制御することができ、各SIMD32構造にはいずれも専用の1つのベクトルレジスタ群があり、各ベクトルレジスタは32個のパスを有する。以下の表1には汎用の行列演算命令が示されており、これは、SIMD構造で行列演算操作を実行するときに使用される従来の命令であり、行列演算命令はソースオペランド1、ソースオペランド2、ソースオペランド3、デスティネーションオペランド及びオペコードを含み、ソースオペランド1は第1ベクトルレジスタのアドレスを示すことに用いられ、ソースオペランド2は第2ベクトルレジスタのアドレスを示すことに用いられ、ソースオペランド3は第3ベクトルレジスタのアドレスを示すことに用いられ、デスティネーションオペランドは行列演算結果を記憶するためのデスティネーションベクトルレジスタのアドレスを示すことに用いられ、オペコードは該行列演算命令によって実行される具体的な操作、すなわち行列演算命令のタイプを示すことに用いられ、例えば、行列演算命令内のオペコードを乗加算演算を示す対応値に設定することにより、該行列演算命令はすなわち行列乗加算命令となり、行列演算命令内のオペコードを乗算操作を示す対応値に設定することにより、該行列演算命令はすなわち行列演算命令となる。
【0027】
【表1】
【0028】
例えば、SIMD32構造では汎用の行列演算命令フォーマットの行列演算命令を用いて行列乗算演算A*Bを実行し、行列Aはサイズが8*4の行列であり、すなわち行列Aには8行4列のデータが含まれ、4列はそれぞれ列ベクトルA(:,1)、A(:,2)、A(:,3)、A(:,4)であり、各列ベクトルには8つのデータが含まれ、行列Bはサイズが4*4の行列であり、すなわち行列Bには4行4列のデータが含まれ、4行はそれぞれ行ベクトルB(1,:)、B(2,:)、B(3,:)、B(4,:)であり、各行ベクトルには4つのデータが含まれる。
【0029】
上記行列乗算演算について、行列A及び行列BのデータをDDR(ダブルデータレート同期ダイナミックランダムアクセスメモリ、Double-Data-Rate Synchronous Dynamic Random-Access Memory、内部メモリの1種)からキャッシュ(Cache、キャッシュメモリ)を介してベクトルレジスタに1つずつ読み込み、次に、ベクトルレジスタから読み出して演算器に転送して演算するという従来技術が一般的に使用される。先ず、行列Aの4つの列ベクトルA(:,1)、A(:,2)、A(:,3)、A(:,4)をそれぞれ4つのベクトルレジスタ(それぞれV0、V1、V2及びV3と呼ばれる)に読み込み、次に、行列Bの4つの行ベクトルB(1,:)、B(2,:)、B(3,:)、B(4,:)をそれぞれ4つのベクトルレジスタ(それぞれV80、V81、V82及びV83と呼ばれる)に読み込み、1回演算ごとにベクトルレジスタV0、V1、V2又はV3の第1パスに対応するデータ、及びベクトルレジスタV80、V81、V82又はV83の第2パスに対応するデータを対応する演算器に送信して乗算演算を行う。この演算過程はDDRからデータを複数回読み取る過程に関し、例えば、この演算過程ではDDRからデータを読み取る回数が8回であるため、不要なデータ冗長性及び追加の消費電力を引き起こしている。
【0030】
本開示の少なくとも1つの実施例は行列演算に適用されるデータ処理方法を提供し、複数の第1操作データを含む第1行列が記憶された少なくとも1つの第1ベクトルレジスタ、及び複数の第2操作データを含む第2行列が記憶された少なくとも1つの第2ベクトルレジスタを決定するステップと、第1データ選択情報及び第2データ選択情報を取得するステップと、第1データ選択情報に基づき、複数の第1操作データから少なくとも1つの第1操作データを選択し、少なくとも1つの第1ターゲット操作データを得て、少なくとも1つの第1ターゲット操作データを、第2行列の第2行列次元を倍数として、複数の演算器に提供して複数の演算器に1対1で対応する複数の第1乗算係数を決定するステップと、第2データ選択情報に基づき、複数の第2操作データから少なくとも1つの第2操作データを選択し、少なくとも1つの第2ターゲット操作データを得て、少なくとも1つの第2ターゲット操作データを、第1行列の第1行列次元を倍数として、複数の演算器に提供して複数の演算器に1対1で対応する複数の第2乗算係数を決定するステップと、を含み、第1行列次元及び第2行列次元はいずれも正の整数であり、且つ第1行列次元のタイプと第2行列次元のタイプは異なる。
【0031】
本開示の実施例に係る行列演算のためのデータ処理方法は、第1ベクトルレジスタの複数の第1パスを選択し、及び第2ベクトルレジスタの複数の第2パスを選択し、選択された第1パス及び選択された第2パスに対応する操作データをコピーして対応するスレッドの乗算演算に参加することにより、行列の特性を十分に利用し、スレッド間でデータを効果的に多重化し、スレッド間のデータの冗長性を低減させ、DDRからデータを読み取る回数を大幅に減少させ、消費電力を低減させる。
【0032】
本開示の実施例では、行列演算過程で、第1行列内の第1操作データを選択しコピーし、及び第2行列内の第2操作データを選択しコピーすることにより、行列演算を実現することができ、これにより、DDRからデータ(例えば、第1操作データ及び第2操作データ)を読み取ってベクトルレジスタに書き込む過程では、読み取られたデータ(例えば、第1操作データ及び第2操作データ)をコピーする必要がなく、それによりDDRからデータを読み取る回数を減少させ(例えば、場合によっては、第1行列内の全ての第1操作データを1回のデータ読み取り過程によって読み取ってベクトルレジスタに書き込むことができ、第2行列内の全ての第2操作データを1回のデータ読み取り過程によって読み取ってベクトルレジスタに書き込むことができる)、DDRからデータを読み取る速度を加速し、DDRからデータを読み取る時間を節約し、消費電力を節約し、データをベクトルレジスタに書き込むことに起因するデータの冗長性を低減させ又は回避し、第1行列の第1操作データ及び第2行列の第2操作データを記憶するための記憶空間を減少させ(例えば、第1行列及び第2行列を記憶するベクトルレジスタの数を減少させる)、記憶空間を節約する。
【0033】
本開示の少なくとも1つの実施例は、上記データ処理方法に対応するデータ処理装置、データ処理機器及びコンピュータ可読記憶媒体をさらに提供する。
【0034】
以下、図面を参照しながら本開示の実施例についてさらに説明する。
【0035】
図1は本開示の実施例に係る行列演算のためのデータ処理方法100の模式的なフローチャートを示す。例えば、行列演算は第1行列及び第2行列に対する演算を実現することに用いられる。
【0036】
図1示すように、本開示の実施例に係るデータ処理方法100はステップS101~ステップS104を含む。
【0037】
ステップS101、複数の第1操作データを含む第1行列が記憶された少なくとも1つの第1ベクトルレジスタ、及び複数の第2操作データを含む第2行列が記憶された少なくとも1つの第2ベクトルレジスタを決定する。
【0038】
ステップS102、第1データ選択情報及び第2データ選択情報を取得する。
【0039】
ステップS103、第1データ選択情報に基づき、複数の第1操作データから少なくとも1つの第1操作データを選択し、少なくとも1つの第1ターゲット操作データを得て、少なくとも1つの第1ターゲット操作データを、第2行列の第2行列次元を倍数として、複数の演算器に提供して複数の演算器に1対1で対応する複数の第1乗算係数を決定する。
【0040】
ステップS104、第2データ選択情報に基づき、複数の第2操作データから少なくとも1つの第2操作データを選択し、少なくとも1つの第2ターゲット操作データを得て、少なくとも1つの第2ターゲット操作データを、第1行列の第1行列次元を倍数として、複数の演算器に提供して複数の演算器に1対1で対応する複数の第2乗算係数を決定する。
【0041】
例えば、第1行列次元及び第2行列次元はいずれも正の整数であり、且つ第1行列次元のタイプと第2行列次元のタイプは異なる。
【0042】
第1行列次元は行列の行数を表し、第2行列次元は行列の列数を表す。例えば、1つの行列は8*4の行列であり、すなわち、該行列の第1行列次元は8であり、該行列の第2行列次元は4である。
【0043】
本開示の実施例では、行列演算自体の特徴に基づき、第1行列内の第1操作データ及び第2行列内の第2操作データに対して異なる選択コピー操作を行い、すなわち少なくとも1つの第1ターゲット操作データを第2行列の第2行列次元を倍数としてコピーし、少なくとも1つの第2ターゲット操作データを第1行列の第1行列次元を倍数としてコピーすることにより、コピーされたデータは行列演算の実現過程を満たす。
【0044】
また、行列演算過程では、行列演算の特徴に基づいて第1行列内の第1操作データを選択しコピーすることができ、第2行列内の第2操作データを選択しコピーすることもできるため、ベクトルレジスタに記憶された第1操作データ及び第2操作データは行列演算によって制限されず、第1操作データ及び第2操作データの記憶過程及び記憶位置はより柔軟で変化可能であり、データの冗長性を回避することができる。
【0045】
本開示の実施例によれば、ステップS101は、少なくとも1つの第1アドレス及び少なくとも1つの第2アドレスを取得するステップと、少なくとも1つの第1アドレスに基づき、少なくとも1つの第1ベクトルレジスタを決定するステップと、少なくとも1つの第2アドレスに基づき、少なくとも1つの第2ベクトルレジスタを決定するステップと、を含む。第1アドレス又は第2アドレスは、該SIMD構造処理ユニットに対応する全てのレジスタのうちの第1ベクトルレジスタ又は第2ベクトルレジスタのインデックスであってもよい。
【0046】
本開示の実施例によれば、少なくとも1つの第1アドレス及び少なくとも1つの第2アドレスを取得するステップは、行列演算命令を取得するステップと、行列演算命令を解析し、少なくとも1つの第1アドレス及び少なくとも1つの第2アドレスを得るステップと、を含む。
【0047】
例えば、少なくとも1つの第1アドレスは第1行列が記憶された少なくとも1つの第1ベクトルレジスタのアドレスを表し、少なくとも1つの第2アドレスは第2行列が記憶された少なくとも1つの第2ベクトルレジスタのアドレスを表し、少なくとも1つの第1アドレスに基づき少なくとも1つの第1ベクトルレジスタを決定することができ、少なくとも1つの第2アドレスに基づいて少なくとも1つの第2ベクトルレジスタを決定することができる。メモリ(DDRなど)から行列演算命令を取得することができる。本開示のいくつかの実施例では、行列演算命令のフォーマットは以下の表2に示され、行列演算命令はソースオペランド1、ソースオペランド2、ソースオペランド3、デスティネーションオペランド、オペコード及び制御ドメインを含むことができ、ソースオペランド1、ソースオペランド2、ソースオペランド3、デスティネーションオペランド、オペコードの意味は以上の表1に示される行列演算命令の各部分の意味と同じであり、ここでは詳細な説明を省略する。制御ドメインについては詳細に後述する。例えば、ステップS101において、行列演算命令を解析することにより、ソースオペランド1及びソースオペランド2に基づいて少なくとも1つの第1アドレス及び少なくとも1つの第2アドレスを得ることができる。
【0048】
【表2】
【0049】
例えば、第1行列は少なくとも1つの第1ベクトルレジスタに記憶され得、第2行列は少なくとも1つの第2ベクトルレジスタに記憶され得る。少なくとも1つの第1ベクトルレジスタは複数の第1パスを有し、少なくとも1つの第2ベクトルレジスタは複数の第2パスを有し、いくつかの例では、第1ベクトルレジスタ及び第2ベクトルレジスタは同じ数のパスを有し、第1行列の第1操作データは第1ベクトルレジスタの第1パスに対応し、つまり、第1ベクトルレジスタの第1パスは対応する第1操作データを伝送することができ、第2行列の第2操作データは第2ベクトルレジスタの第2パスに対応し、つまり、第2ベクトルレジスタの第2パスは対応する第2操作データを伝送することができる。例えば、SIMD32構造について、第1ベクトルレジスタは32個の第1パスを有し、第2ベクトルレジスタは32個の第2パスを有するため、第1ベクトルレジスタ又は第2ベクトルレジスタは、記憶された行列内の最大32個のデータを同時に提供して演算に参加することができる。別のいくつかの例では、第1ベクトルレジスタが有する第1パスの数と第2ベクトルレジスタが有する第2パスの数とは異なってもよい。
【0050】
例えば、行列乗算A*Bについて、行列Aは第1行列の一例であり、行列Aのサイズは8*4であり、行列Aには4つの列ベクトルA(:,1)、A(:,2)、A(:,3)、A(:,4)が含まれ、各列ベクトルには8つのデータが含まれ、行列Bは第2行列の一例であり、行列Bのサイズは4*4であり、行列Bには4つの行ベクトルB(1,:)、B(2,:)、B(3,:)、B(4,:)が含まれ、各行ベクトルには4つのデータが含まれる。行列Aの32個のデータはすなわち複数の第1操作データであり、行列Bの16個のデータはすなわち複数の第2操作データである。行列A及び行列B内の各データが32ビット(bit、binary digit)を含み、且つ各ベクトルレジスタ(第1ベクトルレジスタ又は第2ベクトルレジスタ)が32個の32bitスカラー要素を記憶可能なベクトルレジスタであると仮定すると、このとき、行列Aの32個のデータは1つの第1ベクトルレジスタに記憶され、行列Bの16個のデータは1つの第2ベクトルレジスタに記憶され得る。行列Aが記憶された第1ベクトルレジスタの32個の第1パス0~31はそれぞれ行列Aの32個のデータに対応し、例えば、第1パス0~7は列ベクトルA(:,1)の8つのデータに対応し、第1パス8~15は列ベクトルA(:,2)の8つのデータに対応し、第1パス16~23は列ベクトルA(:,3)の8つのデータに対応し、及び第1パス24~31は列ベクトルA(:,4)の8つのデータに対応し、行列Bが記憶された第2ベクトルレジスタの32個の第2パスのうちの最初の16個のパスはそれぞれ行列Bの16個のデータに対応し、例えば、第2パス0~3は行ベクトルB(1,:)の4つのデータに対応し、第2パス4~7は行ベクトルB(2,:)の4つのデータに対応し、第2パス8~11は行ベクトルB(3,:)の4つのデータに対応し、及び第2パス12~15は行ベクトルB(4,:)の4つのデータに対応し、第2ベクトルレジスタ内の他の第2パスは行列B内の任意のデータに対応することはない。説明する必要があるように、行列Bが32個のデータを含むと、行列Bが記憶された第2ベクトルレジスタの32個の第2パスはそれぞれ行列Bの32個のデータに対応する。
【0051】
例えば、行列Aに含まれるデータの数が32よりも大きいときに、行列Aのデータは複数の第1ベクトルレジスタに記憶することができ、行列Bに含まれるデータの数が32よりも大きいときに、行列Bのデータは複数の第2ベクトルレジスタに記憶することができる。
【0052】
本開示は、行列A及び行列B内の各データが32ビット(bit、binary digit)を含み、且つ各ベクトルレジスタ(第1ベクトルレジスタ又は第2ベクトルレジスタ)が32個の32bitスカラー要素を記憶可能なベクトルレジスタであることを例として説明するが、本開示の実施例はこれに限定されない。
【0053】
ステップS102において、第1データ選択情報及び第2データ選択情報を取得することができる。
【0054】
例えば、いくつかの実施例では、メモリ(DDRなど)からデータ選択命令を取得することができ、データ選択命令は第1データ選択情報及び第2データ選択情報を含み、データ選択命令を解析することにより第1データ選択情報及び第2データ選択情報を得ることができる。データ選択命令は以下の表3に示される。例えば、データ選択命令は、他の機能を実現するための予約フィールド(実際の状況に応じてユーザによって設定される)をさらに含んでもよい。
【0055】
【表3】
【0056】
例えば、別のいくつかの実施例では、メモリ(DDRなど)から行列演算命令を取得することができ、行列演算命令を解析することにより第1データ選択情報及び第2データ選択情報を得ることができる。本開示の実施例によれば、行列演算命令は表2に示され、表2は、表1に示される行列演算命令を基礎として制御ドメインを追加したものであり、制御ドメインには命令フィールドSRC1_SVF_MODE及びSRC2_SVF_MODEが含まれ、SRC1_SVF_MODEは第1データ選択情報であり、第1行列内の第1操作データを操作して、行列演算過程で第1行列内の演算に参加するデータの選択及びコピーを指導することに用いられ、SRC2_SVF_MODEは第2データ選択情報であり、第2行列内の第2操作データを操作して、行列演算過程で第2行列内の演算に参加するデータの選択及びコピーを指導することに用いられる。
【0057】
本開示の実施例によれば、行列演算命令及びデータ選択命令は2つの命令であってもよく、又は1つの命令の2つの部分であってもよい。例えば、行列演算命令及びデータ選択命令が2つの命令である場合、第1データ選択情報及び第2データ選択情報を取得することは、データ選択命令を取得し、データ選択命令を解析して第1データ選択情報及び第2データ選択情報を得ることを含んでもよく、行列演算命令及びデータ選択命令が1つの命令の2つの部分である場合、第1データ選択情報及び第2データ選択情報を取得することは、行列演算命令を取得して解析することにより第1データ選択情報及び第2データ選択情報を得ることを含んでもよい。以下の説明では、行列演算命令及びデータ選択命令が1つの命令の2つの部分であることを例として説明し、例えば、行列演算命令及びデータ選択命令は同一のSIMD命令の2つの部分であってもよく、すなわちSIMD命令は行列演算命令及びデータ選択命令を含む。
【0058】
例えば、いくつかの実施例では、SIMD命令の長さは64ビットであってもよく、その最初の48ビット[0:47]は行列演算命令部分であり、行列演算命令内の各フィールドの定義及び関連説明は表4に示され、その後の16ビット[48:63]はデータ選択命令部分であり、データ選択命令内の各フィールドの定義及び関連説明は表5に示される。
【0059】
表4を参照すると、このSIMD命令の行列演算命令部分では、0~7ビット[0:7]はソースオペランド1フィールドであり、このフィールドは第1行列が記憶された少なくとも1つの第1ベクトルレジスタのアドレスを示すことができる。8~15ビット[8:15]はソースオペランド2フィールドであり、このフィールドは第2行列が記憶された少なくとも1つの第2ベクトルレジスタのアドレスを示すことができる。16~23ビット[16:23]はソースオペランド3フィールドであり、このフィールドは第3行列が記憶された少なくとも1つの第3ベクトルレジスタのアドレスを示すことができる。第3行列は行列乗加算演算の初期行列であり、例えば、行列乗加算演算A*B+Cについて、第1行列は行列Aであり、第2行列は行列Bであり、第3行列は行列Cである。24~31ビット[24:31]はデスティネーションオペランドフィールドであり、このフィールドは行列演算結果が記憶されたデスティネーションベクトルレジスタのアドレスを示すことができる。説明する必要があるように、いくつかの実施例では、第3ベクトルレジスタとデスティネーションベクトルレジスタは同一であってもよい。32~47ビット[32:47]はオペコードフィールドであり、オペコードフィールドは指定された複数の値を含んでもよい。例えば、オペコードが0であると、乗算操作を行うことが示され、このとき、行列演算命令は行列乗算命令であり、オペコードが1であると、乗加算操作を行うことが示され、このとき、行列演算命令は行列乗加算命令である。
【0060】
【表4】
【0061】
表5を参照すると、このSIMD命令のデータ選択命令部分では、48~52ビット[48:52]はSRC2_SVF_MODEフィールドであり、53~57ビットはSRC1_SVF_MODEフィールドであり、長さが5ビットのSRC1_SVF_MODE/SRC2_SVF_MODEは複数のスレッド間のデータのコピー操作を示すことに用いることができる。残りのビット[63:58]はデータ選択命令の予約フィールドであり、他の操作を後で実現するために予約することができる。SRC1_SVF_MODE及びSRC2_SVF_MODEのビット数は5ビットに限定されず、SRC1_SVF_MODE及びSRC2_SVF_MODEが有するビットのビット数は行列の大きさによって決められ得る。説明する必要があるように、表5では、Pが4であり、すなわちP個の演算器群(後述する)がそれぞれ第1演算器群、第2演算器群、第3演算器群及び第4演算器群であり、且つ各演算器群が8つの演算器を含むことを例とするが、理解されるように、表5は模式的なものに過ぎず、SRC1_SVF_MODE及びSRC2_SVF_MODEの具体的な意味は実際の状況に応じて設計することができ、本開示はこれを具体的に制限しない。
【0062】
【表5】
【0063】
図2は本開示の実施例に係る行列演算を実行するスレッドとベクトルレジスタのパスとの間の対応関係の模式図を示す。
【0064】
本開示の実施例によれば、行列演算は複数のスレッドを含み、複数の演算器はそれぞれ複数のスレッドに対応し、複数のスレッドの各スレッドはそれぞれ複数の第1パスのうちの対応する第1パス及び複数の第2パスのうちの対応する第2パスに対応し、複数の第1操作データは複数の第1パスに対応し、複数の第2操作データは複数の第2パスに対応する。
【0065】
図2示すように、いくつかの実施例では、行列Aは第1行列の一例であり、行列Bは第2行列の一例であり、行列演算には32個のスレッド、すなわちスレッド0~スレッド31が含まれ、例えば、スレッド0は第1ベクトルレジスタのパス0(第1パスの一例)及び第2ベクトルレジスタのパス0(第2パスの一例)に対応し、スレッド1は第1ベクトルレジスタのパス1及び第2ベクトルレジスタのパス1に対応するようになっている。説明する必要があるように、図2では、第1ベクトルレジスタのパス0~パス31は図2の第1ベクトルレジスタからセレクタAへ向かう矢印付きの線で表され、第2ベクトルレジスタのパス0~パス15は図2の第2ベクトルレジスタからセレクタBへ向かう矢印付きの線で表される。
【0066】
続いて、図1に戻り、ステップS103において、第1データ選択情報に基づき、複数の第1操作データから少なくとも1つの第1操作データを選択し、少なくとも1つの第1ターゲット操作データを得るステップは、第1データ選択情報に基づき、複数の第1パスのうち選択された少なくとも1つの第1パスを決定し、選択された少なくとも1つの第1パスに対応する少なくとも1つの第1操作データを少なくとも1つの第1ターゲット操作データとして用いるステップを含む。
【0067】
例えば、いくつかの実施例では、第1行列は縦行列であり、すなわち第1行列内の同一列に位置するデータは内部メモリに連続的に記憶され、少なくとも1つの第1ターゲット操作データは第1行列の同一列に位置してもよい。例えば、第1行列の同一列に位置する全ての第1操作データはいずれも第1ターゲット操作データであり、このとき、複数の第1操作データから少なくとも1つの第1操作データを選択し少なくとも1つの第1ターゲット操作データを得ることは、第1行列の同一列に位置する全ての第1操作データを選択することである。例えば、第1行列が8*4の行列であると、少なくとも1つの第1ターゲット操作データは第1行列の1列目又は2列目又は3列目又は4列目に位置する第1操作データであり、少なくとも1つの第1ターゲット操作データの数は8つである。
【0068】
本開示の実施例では、行列演算自体の特徴により、第1行列内の第1操作データに対する選択ロジックと第2行列内の第2操作データに対する選択ロジックとは実質的に異なり、例えば、第1行列について、同一列から第1操作データを選択し、選択された第1操作データを第2行列の第2行列次元を倍数としてデータコピーすることができ、第2行列について、同一行から第2操作データを選択し、選択された第2操作データを第1行列の第1行列次元を倍数としてデータコピーすることができる。ハードウェア実現では、行列の同一列のデータを選択するのに必要なハードウェア実現と、行列の同一行のデータを選択するのに必要なハードウェア実現とは異なる。例えば、第1データ選択情報はSRC1_SVF_MODEであり、SRC1_SVF_MODEの値に基づき、複数の第1パスのうち選択された少なくとも1つの第1パスを決定することができる。例えば、以上の表5に示すように、SRC1_SVF_MODE=5’d0であるときに、少なくとも1つの第1ベクトルレジスタのパス0~7を選択された少なくとも1つの第1パスとして用い、第1ベクトルレジスタのパス0~7に対応する8つの第1操作データを8つの第1ターゲット操作データとして決定し、該8つの第1ターゲット操作データをそれぞれ第1演算器群、第2演算器群、第3演算器群及び第4演算器群にコピーする。
【0069】
例えば、本開示の実施例によれば、少なくとも1つの第1ベクトルレジスタは第1ターゲットベクトルレジスタを含み、少なくとも1つの第1ターゲット操作データはいずれも第1ターゲットベクトルレジスタに記憶され、すなわち少なくとも1つの第1ターゲット操作データは同一のベクトルレジスタ(すなわち第1ターゲットベクトルレジスタ)に記憶され、例えば、上記決定された8つの第1ターゲット操作データはいずれも第1ターゲットベクトルレジスタに記憶される。
【0070】
本開示の実施例によれば、少なくとも1つの第1ターゲット操作データはM個の第1ターゲット操作データを含み、複数の演算器はP個の演算器群を含み、各演算器群はM個の演算器を含み、第2行列の第2行列次元はPであり、例えば、P及びMはいずれも正整数である。ステップS103において、少なくとも1つの第1ターゲット操作データを、第2行列の第2行列次元を倍数として、複数の演算器に提供して複数の演算器に1対1で対応する複数の第1乗算係数を決定するステップは、M個の第1ターゲット操作データをP部コピーし、P個の第1ターゲット操作データ群を得るステップであり、各第1ターゲット操作データ群はM個の第1ターゲット操作データを含むステップと、P個の第1ターゲット操作データ群をそれぞれP個の演算器群に提供し、複数の第1乗算係数を決定するステップであり、各演算器群のM個の演算器に対応するM個の第1乗算係数はそれぞれM個の第1ターゲット操作データであるステップと、を含む。
【0071】
例えば、図2示すように、第1行列は8*4の行列Aであり、第2行列は4*4の行列Bであり、第2行列の第2行列次元は4であり、少なくとも1つの第1ターゲット操作データは8つの第1ターゲット操作データを含み、このとき、Mは8であり、図2示すように、該8つの第1ターゲット操作データは行列Aの1列目のデータA(1,1)~A(8,1)であってもよく、複数の演算器は4つの演算器群を含み、このとき、Pは4であり、各演算器群は8つの演算器を含む。8つの第1ターゲット操作データA(1,1)~A(8,1)を4部コピーし、4つの第1ターゲット操作データ群を得て、各第1ターゲット操作データ群は8つの第1ターゲット操作データA(1,1)~A(8,1)を含み、4つの第1ターゲット操作データ群をそれぞれ4つの演算器群に提供し、複数の第1乗算係数を決定し、複数の第1乗算係数はすなわち4つの第1ターゲット操作データ群内の32個のデータである。各演算器群は1つの第1ターゲット操作データ群に対応し、各演算器群の8つの演算器に対応する8つの第1乗算係数はそれぞれ対応する第1ターゲット操作データ群内の8つの第1ターゲット操作データA(1,1)~A(8,1)である。
【0072】
ステップS104において、第2データ選択情報に基づき、複数の第2操作データから少なくとも1つの第2操作データを選択し、少なくとも1つの第2ターゲット操作データを得て、少なくとも1つの第2ターゲット操作データを、第1行列の第1行列次元を倍数として、複数の演算器に提供して複数の演算器に1対1で対応する複数の第2乗算係数を決定する。
【0073】
ステップS104において、複数の第2操作データから少なくとも1つの第2操作データを選択し、少なくとも1つの第2ターゲット操作データを得るステップは、第2データ選択情報に基づき、複数の第2パスのうち選択された少なくとも1つの第2パスを決定し、選択された少なくとも1つの第2パスに対応する少なくとも1つの第2操作データを少なくとも1つの第2ターゲット操作データとして用いるステップを含む。
【0074】
例えば、いくつかの実施例では、第2行列は横行列であり、すなわち第2行列内の同一行に位置するデータは内部メモリに連続的に記憶され、少なくとも1つの第2ターゲット操作データは第2行列の同一行に位置してもよい。例えば、第2行列の同一行に位置する全ての第2操作データはいずれも第2ターゲット操作データであり、このとき、複数の第2操作データから少なくとも1つの第2操作データを選択し少なくとも1つの第2ターゲット操作データを得ることは、第2行列の同一行に位置する全ての第2操作データを選択することである。例えば、第2行列が4*4の行列であると、少なくとも1つの第2ターゲット操作データは第2行列の1行目又は2行目又は3行目又は4行目に位置する第2操作データであり、少なくとも1つの第2ターゲット操作データの数は4つである。
【0075】
例えば、第2データ選択情報はSRC2_SVF_MODEであり、SRC2_SVF_MODEの値に基づき、複数の第2パスのうち選択された少なくとも1つの第2パスを決定することができる。例えば、以上の表5に示すように、SRC2_SVF_MODE=5’d0であるときに、少なくとも1つの第2ベクトルレジスタのパス0~3を選択された少なくとも1つの第2パスとして用い、第2ベクトルレジスタのパス0~3に対応する4つの第2操作データを4つの第2ターゲット操作データとして決定し、第2ベクトルレジスタのパス0に対応する第2ターゲット操作データを第1演算器群にコピーし、第2ベクトルレジスタのパス1に対応する第2ターゲット操作データを第2演算器群にコピーし、第2ベクトルレジスタのパス2に対応する第2ターゲット操作データを第3演算器群にコピーし、第2ベクトルレジスタのパス3に対応する第2ターゲット操作データを第4演算器群にコピーする。
【0076】
例えば、本開示の実施例によれば、少なくとも1つの第2ベクトルレジスタは第2ターゲットベクトルレジスタを含み、少なくとも1つの第2ターゲット操作データはいずれも第2ターゲットベクトルレジスタに記憶され、すなわち少なくとも1つの第2ターゲット操作データは同一のベクトルレジスタ(すなわち第2ターゲットベクトルレジスタ)に記憶され、例えば、上記決定された4つの第2ターゲット操作データはいずれも第2ターゲットベクトルレジスタに記憶される。
【0077】
本開示の実施例によれば、少なくとも1つの第2ターゲット操作データはP個の第2ターゲット操作データを含み、複数の演算器はP個の演算器群を含み、各演算器群はM個の演算器を含み、第1行列の第1行列次元はMであり、M及びPはいずれも正の整数であり、ステップS104において、少なくとも1つの第2ターゲット操作データを、第1行列の第1行列次元を倍数として、複数の演算器に提供して複数の演算器に1対1で対応する複数の第2乗算係数を決定するステップは、P個の第2ターゲット操作データをM部コピーし、P個の第2ターゲット操作データ群を得るステップであり、各第2ターゲット操作データ群は1つの第2ターゲット操作データに対応し、且つ同じM個の第2ターゲット操作データを含むステップと、P個の第2ターゲット操作データ群をそれぞれP個の演算器群に提供し、複数の第2乗算係数を決定するステップであり、各演算器群内のM個の演算器に対応するM個の第2乗算係数は同じであり、且つ各演算器群に対応する第2ターゲット操作データ群内の第2ターゲット操作データであるステップと、を含む。
【0078】
例えば、図2示すように、第1行列が8*4の行列Aであり、第2行列が4*4の行列Bである場合、第1行列の第1行列次元は8であり、少なくとも1つの第2ターゲット操作データは4つの第2ターゲット操作データを含み、図2示すように、該4つの第2ターゲット操作データは行列Bの1行目のデータB(1,1)~B(1,4)であってもよく、複数の演算器は4つの演算器群を含み、各演算器群は8つの演算器を含む。4つの第2ターゲット操作データB(1,1)~B(1,4)をそれぞれ8部コピーし、4つの第2ターゲット操作データ群を得て、各第2ターゲット操作データ群は1つの第2ターゲット操作データに対応し、且つ同じ8つの第2ターゲット操作データを含み、4つの第2ターゲット操作データ群をそれぞれ4つの演算器群に提供し、複数の第2乗算係数を決定し、複数の第2乗算係数はすなわち4つの第2ターゲット操作データ群内の32個のデータである。各演算器群は1つの第2ターゲット操作データ群に対応し、各演算器群内の8つの演算器に対応する8つの第2乗算係数は同じであり、且つ各演算器群に対応する第2ターゲット操作データ群内の第2ターゲット操作データである。
【0079】
例えば、図2示すように、セレクタAに対応するパス0~パス31(セレクタAに対応するパス0~パス31は図2のセレクタAから演算器へ向かう矢印付きの線で表される)はそれぞれスレッド0~スレッド31に対応し、セレクタBに対応するパス0~パス31(セレクタBに対応するパス0~パス31は図2のセレクタBから演算器へ向かう矢印付きの線で表される)もそれぞれスレッド0~スレッド31に対応する。スレッド0~スレッド7に対応する第1ベクトルレジスタのパス0~パス7は行列A内の列ベクトルA(:,1)の8つの第1操作データA(1,1)、A(2,1)、…、A(8,1)であり、いくつかの例では、行列A内の列ベクトルA(:,1)の8つの第1操作データA(1,1)、A(2,1)、…、A(8,1)は第1ターゲット操作データとして用いられ、第1ベクトルレジスタのパス0~パス7に対応する第1操作データA(1,1)、A(2,1)、…、A(8,1)をそれぞれセレクタAに対応するパス0~パス7、セレクタAに対応するパス8~パス15、セレクタAに対応するパス16~パス23、セレクタAに対応するパス24~パス31にコピーすることにより、スレッド0~スレッド7に対応するデータはそれぞれA(1,1)、A(2,1)、…、A(8,1)であり、スレッド8~スレッド15に対応するデータはそれぞれA(1,1)、A(2,1)、…、A(8,1)であり、スレッド16~スレッド23に対応するデータはそれぞれA(1,1)、A(2,1)、…、A(8,1)であり、スレッド24~スレッド31に対応するデータはそれぞれA(1,1)、A(2,1)、…、A(8,1)である。セレクタAに対応するパスで伝送されたデータは上記第1乗算係数である。スレッド0~スレッド3に対応する第2ベクトルレジスタのパス0~パス3は行列Bの行ベクトルB(1,:)の4つの第2操作データB(1,1)、B(1,2)、B(1,3)、B(1,4)に対応し、いくつかの例では、行列Bの行ベクトルB(1,:)の4つの第2操作データB(1,1)、B(1,2)、B(1,3)、B(1,4)は第2ターゲット操作データとして用いられ、第2ベクトルレジスタのパス0に対応する第2操作データB(1,1)をセレクタBに対応するパス0~パス7にコピーし、第2ベクトルレジスタのパス1に対応する第2操作データB(1,2)をセレクタBに対応するパス8~パス15にコピーし、第2ベクトルレジスタのパス2に対応する第2操作データB(1,3)をセレクタBに対応するパス16~パス23にコピーし、第2ベクトルレジスタのパス3に対応する第2操作データB(1,4)をセレクタBに対応するパス24~パス31にコピーすることにより、スレッド0~スレッド7に対応するデータはいずれもB(1,1)であり、スレッド8~スレッド15に対応するデータはいずれもB(1,2)であり、スレッド16~スレッド23に対応するデータはいずれもB(1,3)であり、スレッド24~スレッド31に対応するデータはいずれもB(1,4)である。セレクタBに対応するパスで伝送されたデータは上記第2乗算係数である。以上は、行列Aの1列目及び行列Bの1行目を例として行列演算中のデータコピー操作を説明し、行列Aの他の列及び行列Bの他の行はこの例と同様であり、ここでは詳細な説明を省略する。
【0080】
ステップS101~S104に加えて、図1示すように、本開示の実施例に係るデータ処理方法はステップS105~S107をさらに含む。
【0081】
ステップS105、少なくとも1つのデスティネーションベクトルレジスタを決定する。
【0082】
例えば、メモリ(DDRなど)から行列演算命令を取得し、行列演算命令を解析して少なくとも1つのデスティネーションベクトルレジスタのアドレスを得て、少なくとも1つのデスティネーションベクトルレジスタのアドレスに基づいて少なくとも1つのデスティネーションベクトルレジスタを決定することができる。
【0083】
ステップS106、複数の第1乗算係数及び複数の第2乗算係数に基づき、複数の演算器によって乗算演算を実行し、複数の演算器に対応する複数の乗算演算結果を得て、各演算器は対応する第1乗算係数及び第2乗算係数に対して乗算演算を実行し、各演算器に対応する乗算演算結果を得ることに用いられる。
【0084】
例えば、第1行列は8*4の行列であり、第2行列は4*4の行列であり、ステップS103及びステップS104に基づき、複数の第1乗算係数及び複数の第2乗算係数を決定する。この実施例では、第1ターゲット操作データは第1行列の同一列に位置する8つの第1操作データであり、第2ターゲット操作データは第2行列の同一行に位置する4つの第2操作データである。8つの第1ターゲット操作データを第2行列の第2行列次元(すなわち4)を倍数としてコピーして32個の第1乗算係数を得て、32個の第1乗算係数をそれぞれ32個の演算器に提供し、32個の第1乗算係数は32個の演算器に1対1で対応し、4つの第2ターゲット操作データを第1行列の第1行列次元(すなわち8)を倍数としてコピーして32個の第2乗算係数を得て、32個の第2乗算係数をそれぞれ32個の演算器に提供し、32個の第2乗算係数は32個の演算器に1対1で対応する。各演算器は1つの第1乗算係数及び1つの第2乗算係数に対応し、且つ該第1乗算係数及び該第2乗算係数に対して乗算演算を実行して乗算演算結果を得る。
【0085】
例えば、図2示すように、行列乗算A*B=Cについて、第1行列は8*4の行列Aであり、第2行列は4*4の行列Bであり、これに対応して、結果行列Cは8*4の行列である。複数の演算器は演算器0~演算器31を含み(図2では演算器0、演算器1、演算器24及び演算器31のみが示される)、各演算器は乗算演算を実行するための乗算器を含む。演算器0はセレクタAのパス0及びセレクタBのパス0に対応し、演算器0はセレクタAのパス0で伝送された第1乗算係数及びセレクタBのパス0で伝送された第2乗算係数に対して乗算演算を行い、演算器0に対応する乗算演算結果C(1,1)を得ることに用いられ、演算器1はセレクタAのパス1及びセレクタBのパス1に対応し、演算器1はセレクタAのパス1で伝送された第1乗算係数及びセレクタBのパス1で伝送された第2乗算係数に対して乗算演算を行い、演算器1に対応する乗算演算結果C(2,1)を得ることに用いられるようになっている。図2では、結果行列C内の演算器24に対応する乗算演算結果C(1,4)、演算器31に対応する乗算演算結果C(8,4)も示される。
【0086】
本開示の実施例によれば、複数の演算器は乗算演算を並列に実行する。例えば、32個の演算器は乗算演算を同時に実行する。
【0087】
ステップS107、複数の乗算演算結果を少なくとも1つのデスティネーションベクトルレジスタに送信する。
【0088】
例えば、少なくとも1つのデスティネーションベクトルレジスタは複数の乗算演算結果を記憶することに用いられる。
【0089】
本開示の実施例によれば、ステップS107は、複数の乗算演算結果と少なくとも1つのデスティネーションベクトルレジスタに記憶された複数の記憶データとを1対1で対応させて加算演算を行い、複数の加算演算結果を得るステップと、複数の加算演算結果を少なくとも1つのデスティネーションベクトルレジスタに記憶するステップと、を含む。
【0090】
例えば、第1行列は8*4の行列であり、第2行列は4*4の行列であり、第1行列と第2行列を乗算して結果行列を得て、結果行列は8*4の行列である。第1行列の1列目の8つのデータをそれぞれ第2行列の1行目の第1データと乗算して1組の8つの乗算演算結果を得て、第1行列の1列目の8つのデータをそれぞれ第2行列の1行目の第2データと乗算して1組の8つの乗算演算結果を得て、このように、第1行列の1列目と第2行列の1行目を乗算して4組の乗算演算結果を得て、各組の乗算演算結果は8つの乗算演算結果を含み、この4組の乗算演算結果(合計で32個の乗算演算結果)をデスティネーションベクトルレジスタに送信して、記憶データとしてデスティネーションベクトルレジスタに記憶する。続いて、第1行列の2列目と第2行列の2行目を乗算した32個の乗算演算結果をデスティネーションベクトルレジスタに送信して、該デスティネーションベクトルレジスタに以前に記憶された32個の記憶データ(例えば、第1行列の1列目と第2行列の1行目を乗算した32個の乗算演算結果)と1対1で対応させて加算演算を行い、32個の加算演算結果を得て、この32個の加算演算結果を更新された32個の記憶データとしてデスティネーションベクトルレジスタに記憶する。このように、第1行列の4列目と第2行列の4行目を乗算した32個の乗算演算結果をデスティネーションベクトルレジスタに送信して以前に記憶された32個の記憶データと1対1で対応させて加算演算を行い、32個の加算演算結果を得て、この32個の加算演算結果は最終的な結果であり、デスティネーションベクトルレジスタに記憶される。説明する必要があるように、第1行列のある列と第2行列のある行を乗算した乗算演算結果がデスティネーションベクトルレジスタに送信される順序は一意ではなく、例えば、第1行列の1列目と第2行列の1行目を乗算した乗算演算結果は、最初にデスティネーションベクトルレジスタに送信されてもよく、最後にデスティネーションベクトルレジスタに送信されてもよい。
【0091】
例えば、少なくとも1つの第1データ読取命令を用いて第1行列の第1操作データをメモリ(例えば、内部メモリ)から読み出して少なくとも1つの第1ベクトルレジスタに書き込むことができ、少なくとも1つの第2データ読取命令を用いて第2行列の第2操作データをメモリから読み出して少なくとも1つの第2ベクトルレジスタに書き込むことができる。
【0092】
第1操作データの読み取り及び書き込み、及び第2操作データの読み取り及び書き込みについて、本開示の実施例に係るデータ処理方法は、少なくとも1つの第1データ読取命令及び少なくとも1つの第2データ読取命令を取得するステップと、少なくとも1つの第1データ読取命令を解析し、少なくとも1つの第1読み出しアドレス及び少なくとも1つの第1アドレスを得るステップと、少なくとも1つの第1読み出しアドレスに基づいてメモリから複数の第1操作データを読み取り、少なくとも1つの第1アドレスに基づき、少なくとも1つの第1ベクトルレジスタを決定して複数の第1操作データを少なくとも1つの第1ベクトルレジスタに書き込むステップと、少なくとも1つの第2データ読取命令を解析し、少なくとも1つの第2読み出しアドレス及び少なくとも1つの第2アドレスを得るステップと、少なくとも1つの第2読み出しアドレスに基づいてメモリから複数の第2操作データを読み取り、少なくとも1つの第2アドレスに基づき、少なくとも1つの第2ベクトルレジスタを決定して複数の第2操作データを少なくとも1つの第2ベクトルレジスタに書き込むステップと、をさらに含む。
【0093】
例えば、メモリ(DDRなど)から第1データ読取命令及び第2データ読取命令を取得することができる。第1データ読取命令は第1読み出しアドレス及び第1アドレスを含み、第2データ読取命令は第2読み出しアドレス及び第2アドレスを含む。第1読み出しアドレスは第1操作データのメモリでの記憶位置を示し、第2読み出しアドレスは第2操作データのメモリでの記憶位置を示す。第1読み出しアドレス及び第2読み出しアドレスに基づき、メモリから第1操作データ及び第2操作データを読み取ることができる。第1アドレスは第1操作データを記憶するための第1ベクトルレジスタのアドレスを示し、第2アドレスは第2操作データを記憶するための第2ベクトルレジスタのアドレスを示し、第1アドレス及び第2アドレスに基づき、第1ベクトルレジスタ及び第2ベクトルレジスタを決定し、第1操作データを第1ベクトルレジスタに書き込み、及び第2操作データを第2ベクトルレジスタに書き込むことができる。
【0094】
先ず、第1行列全体を第1ベクトルレジスタに一度に読み込み、第2行列全体を第2ベクトルレジスタに一度に読み込み、次に、第1ベクトルレジスタの複数の第1パスを選択し、及び第2ベクトルレジスタの複数の第2パスを選択し、選択された第1パスに対応する操作データ及び選択された第2パスに対応する操作データをコピーして対応するスレッドの乗算演算に参加することにより、行列の特性を十分に利用し、スレッド間でデータを効果的に多重化し、スレッド間のデータの冗長性を低減させ、データの読み取り回数を大幅に減少させ、消費電力を低減させる。
【0095】
図3は本開示の実施例に係る行列演算のデータ処理の一例の模式図を示す。
【0096】
図3示すように、本実施例では、SIMDの例はSIMD32構造であり、各第1ベクトルレジスタは32個の第1パスを含み、各第2ベクトルレジスタは32個の第2パスを含み、この構造で行列乗算A*B=Cを実行し、第1行列は8*4の行列Aであり、第2行列は4*4の行列Bであり、これに対応して、結果行列Cは8*4の行列であり、関連するハードウェアの一般行列アルゴリズムは以下のとおりである。
【0097】
本実施例では、具体的な操作は以下のとおりである。
【0098】
第1ベクトルレジスタは32個の第1パスを有し、図2示すように、第1ベクトルレジスタのパス0~パス7は行列Aの列ベクトルA(:,1)の8つのデータA(1,1)、A(2,1)、…、A(8,1)に対応し、第1ベクトルレジスタのパス8~パス15は行列Aの列ベクトルA(:,2)の8つのデータA(1,2)、A(2,2)、…、A(8,2)に対応し、第1ベクトルレジスタのパス16~パス23は行列Aの列ベクトルA(:,3)の8つのデータA(1,3)、A(2,3)、…、A(8,3)に対応し、第1ベクトルレジスタのパス24~パス31は行列Aの列ベクトルA(:,4)の8つのデータA(1,4)、A(2,4)、…、A(8,4)に対応する。第2ベクトルレジスタは32個の第2パスを有し、図2示すように、第2ベクトルレジスタのパス0~パス3は行列Bの行ベクトルB(1,:)の4つのデータB(1,1)、B(1,2)、B(1,3)、B(1,4)に対応し、第2ベクトルレジスタのパス4~パス7(図2では図示せず)は行列Bの行ベクトルB(2,:)の4つのデータB(2,1)、B(2,2)、B(2,3)、B(2,4)に対応し、第2ベクトルレジスタのパス8~パス11(図2では図示せず)は行列Bの行ベクトルB(3,:)の4つのデータB(3,1)、B(3,2)、B(3,3)、B(3,4)に対応し、第2ベクトルレジスタのパス12~パス15は行列Bの行ベクトルB(4,:)の4つのデータB(4,1)、B(4,2)、B(4,3)、B(4,4)に対応する。説明する必要があるように、図2では第2ベクトルレジスタのパス0~パス15のみが示され、第2ベクトルレジスタの残りの16個のパス(第2ベクトルレジスタのパス16~パス31)が図示されていないが、それらが存在しないことが示されることはなく、且つ第2ベクトルレジスタの残りの16個のパスに対応するデータは実際の状況に応じて設定される。
【0099】
表5を参照すると、SRC1_SVF_MODE=5’d0であるときに、第1操作データA(1,1)、A(2,1)、…、A(8,1)を第1ターゲット操作データとしてセレクタAに対応するパス0~7、パス8~15、パス16~23及びパス24~31に対応してコピーし(図3では1つの実線矢印でこの過程を表す)、すなわち行列Bの第2行列次元4を倍数として8つの第1ターゲット操作データを4部コピーし、SRC1_SVF_MODE=5’d1であるときに、A(1,2)、A(2,2)、…、A(8,2)をセレクタAに対応するパス0~7、パス8~15、パス16~23及びパス24~31に対応してコピーし、SRC1_SVF_MODE=5’d2であるときに、A(1,3)、A(2,3)、…、A(8,3)をセレクタAに対応するパス0~7、パス8~15、パス16~23及びパス24~31に対応してコピーし、SRC1_SVF_MODE=5’d3であるときに、A(1,4)、A(2,4)、…、A(8,4)をセレクタAに対応するパス0~7、パス8~15、パス6~23及びパス24~31に対応してコピーする。
【0100】
SRC2_SVF_MODE=5’d0であるときに、第2操作データB(1,1)をセレクタBに対応するパス0~7にコピーし、第2操作データB(1,2)をセレクタBに対応するパス8~15にコピーし、第2操作データB(1,3)をセレクタBに対応するパス16~23にコピーし、第2操作データB(1,4)をセレクタBに対応するパス24~31にコピーし(図3では1つの実線矢印でこの過程を表す)、SRC2_SVF_MODE=5’d1であるときに、第2操作データB(2,1)、B(2,2)、B(2,3)、B(2,4)をそれぞれセレクタBに対応するパス0~7、パス8~15、パス16~23及びパス24~31に対応してコピーし、SRC2_SVF_MODE=5’d2であるときに、第2操作データB(3,1)、B(3,2)、B(3,3)、B(3,4)をそれぞれセレクタBに対応するパス0~7、パス8~15、パス16~23及びパス24~31に対応してコピーし、SRC2_SVF_MODE=5’d3であるときに、第2操作データB(4,1)、B(4,2)、B(4,3)、B(4,4)をそれぞれセレクタBに対応するパス0~7、パス8~15、パス16~23及びパス24~31に対応してコピーする。
【0101】
SRC1_SVF_MODE=5’d0であり且つSRC2_SVF_MODE=5’d0であるときに、第1ターゲットベクトルレジスタの32個の第1パスに対応するデータと第2ターゲットベクトルレジスタの32個の第2パスに対応するデータをそれぞれ対応して乗算して、行列Cの列ベクトルC(:,1)を得て、このように、SRC1_SVF_MODE=5’d1であり且つSRC2_SVF_MODE=5’d1であるときに、行列Cの列ベクトルC(:,2)を得て、SRC1_SVF_MODE=5’d2であり且つSRC2_SVF_MODE=5’d2であるときに、行列Cの列ベクトルC(:,3)を得て、SRC1_SVF_MODE=5’d3であり且つSRC2_SVF_MODE=5’d3であるときに、行列Cの列ベクトルC(:,4)を得る。
【0102】
以下、本開示の実施例に係る行列演算のためのデータ処理過程の具体的な操作が具体的に説明される。例えば、該行列演算は第1行列及び第2行列に対する演算を実現することに用いられる。
【0103】
先ず、行列演算のための第1行列を少なくとも1つの第1ベクトルレジスタに読み込み、行列演算のための第2行列を少なくとも1つの第2ベクトルレジスタに読み込み、次に、第1データ選択情報に基づき、少なくとも1つの第1ベクトルレジスタに記憶された複数の第1操作データから少なくとも1つの第1操作データを選択し、少なくとも1つの第1ターゲット操作データを得て、第2データ選択情報に基づき、少なくとも1つの第2ベクトルレジスタに記憶された複数の第2操作データから少なくとも1つの第2操作データを選択し、少なくとも1つの第2ターゲット操作データを得て、続いて、少なくとも1つの第1ターゲット操作データを、第2行列の第2行列次元を倍数として、複数の演算器に提供して複数の演算器に1対1で対応する複数の第1乗算係数を決定し、少なくとも1つの第2ターゲット操作データを、前記第1行列の第1行列次元を倍数として、複数の演算器に提供して複数の演算器に1対1で対応する複数の第2乗算係数を決定し、最後に、複数の演算器は、複数の第1乗算係数及び複数の第2乗算係数に対して乗算演算を行い、該行列演算を実現する。上記データ処理過程では、データを読み取って記憶する回数を減少させることができ、例えば、データを読み取って記憶する回数を1回に減少させることができ、1回のデータ読み取りだけで第1行列及び第2行列の行列演算を完了することができる。例えば、上記行列演算の一部の編集命令は以下のように示される。
【0104】
vec_load_b32 v0, v_addr_0;
vec_load_b32 v80, v_addr_1;
vec_mul_u32 v100, v0, v80, SRC1_SVF_MODE=5’d0, SRC2_SVF_MODE=5’d0;
vec_mul_u32 v101, v0, v80, SRC1_SVF_MODE=5’d1, SRC2_SVF_MODE=5’d1;
vec_mul_u32 v102, v0, v80, SRC1_SVF_MODE=5’d2, SRC2_SVF_MODE=5’d2;
vec_mul_u32 v103, v0, v80, SRC1_SVF_MODE=5’d3, SRC2_SVF_MODE=5’d3;
【0105】
具体的には、上記編集命令では、先ず、1つのvec_load_b32命令によって、行列Aをメモリ(アドレスv_addr_0)から第1ベクトルレジスタv0に読み込み、1つのvec_load_b32命令によって、行列Bをメモリ(アドレスv_addr_1)から第2ベクトルレジスタv80に読み込み、第1ベクトルレジスタv0及び第2ベクトルレジスタv80はいずれも32個のデータを記憶することができる。
【0106】
続いて、第1ベクトルレジスタv0及び第2ベクトルレジスタv80内のデータに対して行列演算を行う。具体的には、命令「vec_mul_u32 v100, v0, v80, SRC1_SVF_MODE=5’d0, SRC2_SVF_MODE=5’d0」について、vec_mul_u32はオペコードであり、32ビットの乗算操作を示し、v0は第1行列Aが記憶された第1ベクトルレジスタのアドレスを示し、v80は第2行列Bが記憶された第2ベクトルレジスタのアドレスを示し、SRC1_SVF_MODE及びSRC2_SVF_MODEの値を設定することにより第1行列A内の第1ターゲット操作データ及び第2行列B内の第2ターゲット操作データを選択し、v100/v101/v102/v103は乗算演算結果を記憶するためのデスティネーションベクトルレジスタのアドレスを示し、それによりSIMD構造で行列の1回読み取り操作に基づく行列演算を実現する。
【0107】
理解されるように、SIMD構造及び乗算演算に参加する行列は上記例に限定されず、当業者が実際の状況に応じて調整することができ、ここで一々列挙はしない。
【0108】
図4は本開示の実施例に係る行列演算に適用されるデータ処理装置400の一例の模式的なブロック図を示す。
【0109】
図4示すように、本開示の実施例に係る行列演算に適用されるデータ処理装置400は、レジスタ決定ユニット401と、情報取得ユニット402と、データ選択ユニット403と、データブロードキャストユニット404と、を含むことができる。
【0110】
レジスタ決定ユニット401は、複数の第1操作データを含む第1行列が記憶された少なくとも1つの第1ベクトルレジスタ、及び複数の第2操作データを含む第2行列が記憶された少なくとも1つの第2ベクトルレジスタを決定するために構成され得る。例えば、レジスタ決定ユニット401は、メモリ(DDRなど)から行列演算命令を取得し、行列演算命令を解析し、少なくとも1つの第1ベクトルレジスタのアドレスを示す少なくとも1つの第1アドレス及び少なくとも1つの第2ベクトルレジスタのアドレスを示す少なくとも1つの第2アドレスを得ることにより、少なくとも1つの第1アドレス及び少なくとも1つの第2アドレスに基づいて少なくとも1つの第1ベクトルレジスタ及び少なくとも1つの第2ベクトルレジスタを決定することができる。
【0111】
情報取得ユニット402は、第1データ選択情報及び第2データ選択情報を取得するために構成され得る。例えば、情報取得ユニット402は、メモリ(DDRなど)からデータ選択命令を取得することができ、データ選択命令には第1データ選択情報及び第2データ選択情報が含まれる。情報取得ユニット402はデータ選択命令を解析することにより第1データ選択情報及び第2データ選択情報を得る。
【0112】
データ選択ユニット403は、第1データ選択情報に基づき、複数の第1操作データから少なくとも1つの第1操作データを選択し、少なくとも1つの第1ターゲット操作データを得て、及び第2データ選択情報に基づき、複数の第2操作データから少なくとも1つの第2操作データを選択し、少なくとも1つの第2ターゲット操作データを得るために構成され得る。例えば、データ選択ユニット403は第1セレクタ4031及び第2セレクタ4032を含んでもよく、第1セレクタ4031は、第1データ選択情報(例えば、SRC1_SVF_MODE)に基づいて第1行列の少なくとも1つの第1操作データから少なくとも1つの第1操作データを選択し、少なくとも1つの第1ターゲット操作データを得て、第2セレクタ4032は、第2データ選択情報(例えば、SRC2_SVF_MODE)に基づいて第2行列の少なくとも1つの第2操作データから少なくとも1つの第2操作データを選択し、少なくとも1つの第2ターゲット操作データを得る。
【0113】
例えば、第1セレクタ4031及び第2セレクタ4032はいずれも多対1セレクタであり、図5に示される例では、第1セレクタ4031は上記セレクタAであってもよく、セレクタAは32対8セレクタであってもよく、第2セレクタ4032は上記セレクタBであってもよく、セレクタBは32対4セレクタであってもよい。
【0114】
データブロードキャストユニット404は、少なくとも1つの第1ターゲット操作データを、第2行列の第2行列次元を倍数として、複数の演算器に提供して複数の演算器に1対1で対応する複数の第1乗算係数を決定し、及び少なくとも1つの第2ターゲット操作データを、第1行列の第1行列次元を倍数として、複数の演算器に提供して複数の演算器に1対1で対応する複数の第2乗算係数を決定するために構成され得、第1行列次元及び第2行列次元はいずれも正の整数であり、且つ第1行列次元のタイプと第2行列次元のタイプは異なる。
【0115】
図5は本開示の実施例に係るデータ処理の後半に関する例示的なデータ選択ユニット403及びデータブロードキャストユニット404の動作模式図を示す。
【0116】
図5示すように、第1ベクトルレジスタは32個のパス(すなわち第1ベクトルレジスタに対応するパス0~パス31)を有し、行列Aの32個の第1操作データは第1ベクトルレジスタの32個のパスに対応する。第2ベクトルレジスタは32個のパス(すなわち第2ベクトルレジスタに対応するパス0~パス31)を有し、行列Bの16個の第2操作データは第2ベクトルレジスタの最初の16個のパスに対応する。データ選択ユニット403は、情報取得ユニット402から受信された第1データ選択情報SRC1_SVF_MODE及び第2データ選択情報SRC2_SVF_MODEに基づき、第1ベクトルレジスタの32個のパスで、行列A(本開示の第1行列の一例)の32個の第1操作データを1つの32対8セレクタAに通し、8つの第1ターゲット操作データを選択し、第2ベクトルレジスタの32個のパスで、行列B(本開示の第2行列の一例)の16個の第2操作データを1つの32対4セレクタBに通し、4つの第2ターゲット操作データを選択する。その後、データブロードキャストユニット404は、8つの第1ターゲット操作データを、行列Bの第2行列次元4を倍数として、セレクタAに対応するパス0~7、パス8~15、パス16~23及びパス24~31に対応してコピーし、次に、セレクタAの32個のパスで伝送されたデータを4つの乗算器群に提供し(各乗算器群は8つの乗算器を含む)、セレクタAに対応するパスで伝送されたデータは32個の乗算器に1対1で対応する上記第1乗算係数である。データブロードキャストユニット404は、4つの第2ターゲット操作データを、行列Aの第1行列次元8を倍数として、セレクタBに対応するパス0~7、パス8~15、パス16~23、パス24~31に対応してコピーし、次に、セレクタBの32個のパスで伝送されたデータを4つの乗算器群に提供し、セレクタBに対応するパスで伝送されたデータは32個の乗算器に1対1で対応する上記第2乗算係数である。第1乗算係数及び第2乗算係数に対して乗算器において行列乗算演算を行って4組の乗算演算結果を得て、各組の乗算演算結果は8つの乗算演算結果を含み、この4組の乗算演算結果(合計で32個の乗算演算結果)をそれぞれ4つの加算器群に送信し、各加算器群は8つの加算器を含み、加算演算を実現し、各組の乗算演算結果内の8つの乗算演算結果を、1つの加算係数として1つの加算器群内の8つの加算器に対応して送信する。この4組の乗算演算結果をそれぞれデスティネーションベクトルレジスタ内の対応する記憶データ(加算器の別の加算係数として)と加算して、複数の加算演算結果を得て、複数の加算演算結果を更新された記憶データとして少なくとも1つのデスティネーションベクトルレジスタに記憶する。
【0117】
例えば、レジスタ決定ユニット401、情報取得ユニット402、データ選択ユニット403、及びデータブロードキャストユニット404はハードウェア、ソフトウェア、ファームウェア及びそれらの任意の実行可能な組み合わせを用いて実現されてもよい。
【0118】
例えば、第1行列が記憶された少なくとも1つの第1ベクトルレジスタ、及び第2行列が記憶された少なくとも1つの第2ベクトルレジスタを決定するステップを実行するときに、レジスタ決定ユニット401は、少なくとも1つの第1アドレス及び少なくとも1つの第2アドレスを取得し、少なくとも1つの第1アドレスに基づき、少なくとも1つの第1ベクトルレジスタを決定し、少なくとも1つの第2アドレスに基づき、少なくとも1つの第2ベクトルレジスタを決定するために構成され得る。
【0119】
例えば、少なくとも1つの第1アドレス及び少なくとも1つの第2アドレスを取得するステップを実行するときに、レジスタ決定ユニット401は、行列演算命令を取得し、行列演算命令を解析し、少なくとも1つの第1アドレス及び少なくとも1つの第2アドレスを得るために構成され得る。
【0120】
例えば、いくつかの実施例では、第1データ選択情報及び第2データ選択情報を取得するステップを実行するときに、情報取得ユニット402はさらに、行列演算命令を解析し、第1データ選択情報及び第2データ選択情報を得るために構成され得る。
【0121】
例えば、別のいくつかの実施例では、第1データ選択情報及び第2データ選択情報を取得するステップを実行するときに、情報取得ユニット402は、データ選択命令を取得し、データ選択命令を解析し、第1データ選択情報及び第2データ選択情報を得るために構成され得る。
【0122】
例えば、いくつかの実施例では、データ処理装置400はデータ読み取り及び書き込みユニットをさらに含み、データ読み取り及び書き込みユニットは、少なくとも1つの第1データ読取命令及び少なくとも1つの第2データ読取命令を取得し、少なくとも1つの第1データ読取命令を解析し、少なくとも1つの第1読み出しアドレス及び少なくとも1つの第1アドレスを得て、少なくとも1つの第1読み出しアドレスに基づいてメモリから複数の第1操作データを読み取り、少なくとも1つの第1アドレスに基づき、少なくとも1つの第1ベクトルレジスタを決定して複数の第1操作データを少なくとも1つの第1ベクトルレジスタに書き込み、少なくとも1つの第2データ読取命令を解析し、少なくとも1つの第2読み出しアドレス及び少なくとも1つの第2アドレスを得て、少なくとも1つの第2読み出しアドレスに基づいてメモリから複数の第2操作データを読み取り、少なくとも1つの第2アドレスに基づき、少なくとも1つの第2ベクトルレジスタを決定して複数の第2操作データを少なくとも1つの第2ベクトルレジスタに書き込むために構成され得る。
【0123】
例えば、行列演算は複数のスレッドを含み、複数の演算器はそれぞれ複数のスレッドに対応し、少なくとも1つの第1ベクトルレジスタは複数の第1パスを有し、少なくとも1つの第2ベクトルレジスタは複数の第2パスを有し、複数のスレッドの各スレッドはそれぞれ複数の第1パスのうちの対応する第1パス及び複数の第2パスのうちの対応する第2パスに対応し、複数の第1操作データは複数の第1パスに対応し、複数の第2操作データは複数の第2パスに対応する。第1データ選択情報に基づき、複数の第1操作データから少なくとも1つの第1操作データを選択し、少なくとも1つの第1ターゲット操作データを得るステップを実行するときに、データ選択ユニット403は、第1データ選択情報に基づき、複数の第1パスのうち選択された少なくとも1つの第1パスを決定し、選択された少なくとも1つの第1パスに対応する少なくとも1つの第1操作データを少なくとも1つの第1ターゲット操作データとして用いるために構成され得、前記第2データ選択情報に基づき、前記複数の第2操作データから少なくとも1つの第2操作データを選択し、少なくとも1つの第2ターゲット操作データを得るステップを実行するときに、データ選択ユニット403は、第2データ選択情報に基づき、複数の第2パスのうち選択された少なくとも1つの第2パスを決定し、選択された少なくとも1つの第2パスに対応する少なくとも1つの第2操作データを少なくとも1つの第2ターゲット操作データとして用いるために構成され得る。
【0124】
例えば、いくつかの実施例では、データ処理装置400はデータ演算及び書き込みユニットをさらに含み、データ演算及び書き込みユニットは、少なくとも1つのデスティネーションベクトルレジスタを決定し、複数の第1乗算係数及び複数の第2乗算係数に基づき、複数の演算器によって乗算演算を実行し、複数の演算器に対応する複数の乗算演算結果を得て、各演算器は対応する第1乗算係数及び第2乗算係数に対して乗算演算を実行し、各演算器に対応する乗算演算結果を得ることに用いられ、複数の乗算演算結果を少なくとも1つのデスティネーションベクトルレジスタに送信するために構成され得る。
【0125】
例えば、複数の乗算演算結果を少なくとも1つのデスティネーションベクトルレジスタに送信するステップを実行するときに、データ演算及び書き込みユニットは、複数の乗算演算結果と少なくとも1つのデスティネーションベクトルレジスタに記憶された複数の記憶データとを1対1で対応させて加算演算を行い、複数の加算演算結果を得て、複数の加算演算結果を少なくとも1つのデスティネーションベクトルレジスタに記憶するために構成され得る。
【0126】
例えば、少なくとも1つの第1ターゲット操作データはM個の第1ターゲット操作データを含み、複数の演算器はP個の演算器群を含み、各演算器群はM個の演算器を含み、第2行列次元はPであり、M及びPはいずれも正整数である。少なくとも1つの第1ターゲット操作データを、第2行列の第2行列次元を倍数として、複数の演算器に提供して複数の演算器に1対1で対応する複数の第1乗算係数を決定するステップを実行するときに、データブロードキャストユニット404は、M個の第1ターゲット操作データをP部コピーし、P個の第1ターゲット操作データ群を得ることであり、各第1ターゲット操作データ群はM個の第1ターゲット操作データを含むこと、P個の第1ターゲット操作データ群をそれぞれP個の演算器群に提供し、複数の第1乗算係数を決定することであり、各演算器群のM個の演算器に対応するM個の第1乗算係数はそれぞれM個の第1ターゲット操作データであること、のために構成され得る。
【0127】
例えば、少なくとも1つの第2ターゲット操作データはP個の第2ターゲット操作データを含み、複数の演算器はP個の演算器群を含み、各演算器群はM個の演算器を含み、第1行列次元はMであり、M及びPはいずれも正整数である。少なくとも1つの第2ターゲット操作データを、第1行列の第1行列次元を倍数として、複数の演算器に提供して複数の演算器に1対1で対応する複数の第2乗算係数を決定するステップを実行するときに、データブロードキャストユニット404は、P個の第2ターゲット操作データをM部コピーし、P個の第2ターゲット操作データ群を得ることであり、各第2ターゲット操作データ群は1つの第2ターゲット操作データに対応し、且つ同じM個の第2ターゲット操作データを含むこと、P個の第2ターゲット操作データ群をそれぞれP個の演算器群に提供し、複数の第2乗算係数を決定することであり、各演算器群内のM個の演算器に対応するM個の第2乗算係数は同じであり、且つ各演算器群に対応する第2ターゲット操作データ群内の第2ターゲット操作データであること、のために構成され得る。
【0128】
例えば、複数の演算器は乗算演算を並列に実行する。
【0129】
例えば、少なくとも1つの第1ベクトルレジスタは第1ターゲットベクトルレジスタを含み、少なくとも1つの第1ターゲット操作データはいずれも前記第1ターゲットベクトルレジスタに記憶され、少なくとも1つの第2ベクトルレジスタは第2ターゲットベクトルレジスタを含み、少なくとも1つの第2ターゲット操作データはいずれも第2ターゲットベクトルレジスタに記憶される。
【0130】
例えば、第1行列は縦行列であり、少なくとも1つの第1ターゲット操作データは第1行列の同一列に位置し、及び、第2行列は横行列であり、少なくとも1つの第2ターゲット操作データは第2行列の同一行に位置する。
【0131】
図6は本開示の実施例に係るデータ処理機器600の模式図を示す。
【0132】
図6示すように、本開示の実施例に係るデータ処理機器600は、バス603を介して相互接続可能なプロセッサ601及び記憶媒体602を含むことができる。
【0133】
プロセッサ601は、記憶媒体602に記憶されたプログラム又はコードに基づいて様々な動作及び処理を実行することができる。具体的には、プロセッサ601は集積回路チップであってもよく、信号の処理能力を有する。上記プロセッサは、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)又は他のプログラマブルロジックデバイス、ディスクリートゲート又はトランジスタロジックデバイス、ディスクリートハードウェアコンポーネントであってもよい。本開示の実施例に開示されている様々な方法、ステップ、プロセス及びロジックブロック図を実現又は実行することができる。汎用プロセッサはマイクロプロセッサであってもよく、又は該プロセッサは任意の通常のプロセッサなどであってもよく、X86アーキテクチャ又はARMアーキテクチャなどであってもよい。
【0134】
記憶媒体602にはコンピュータ実行可能命令が記憶され、コンピュータ実行可能命令はプロセッサ601によって実行されるときに本開示の少なくとも1つの実施例に係るデータ処理方法を実現する。記憶媒体602は揮発性メモリ又は不揮発性メモリであってもよく、又は揮発性メモリと不揮発性メモリの両方を含んでもよい。不揮発性メモリは、読み取り専用メモリ(ROM)、プログラマブル読み取り専用メモリ(PROM)、消去可能プログラマブル読み取り専用メモリ(EPROM)、電気的消去可能プログラマブル読み取り専用メモリ(EEPROM)又はフラッシュメモリであってもよい。揮発性メモリは外部キャッシュメモリとして機能するランダムアクセスメモリ(RAM)であってもよい。制限的でなく例示的な説明により、多くの形態のRAMは利用可能であり、例えばスタティックランダムアクセスメモリ(SRAM)、ダイナミックランダムアクセスメモリ(DRAM)、同期ダイナミックランダムアクセスメモリ(SDRAM)、ダブルデータレート同期ダイナミックランダムアクセスメモリ(DDRSDRAM)、強化型同期ダイナミックランダムアクセスメモリ(ESDRAM)、同期リンクダイナミックランダムアクセスメモリリ(SLDRAM)及びダイレクトラムバスランダムアクセスメモリ(DRRAM)であってもよい。なお、本明細書で説明される方法のメモリは、これら、及び任意の他の適切なタイプのメモリを含むことを意図するが、これらに限定されない。
【0135】
本開示の実施例はコンピュータ可読記憶媒体をさらに提供し、コンピュータ実行可能命令を非一時的に記憶することに用いられ、該コンピュータ実行可能命令はプロセッサによって実行されるときに本開示の少なくとも1つの実施例に係るデータ処理方法を実現する。同様に、本開示の実施例のコンピュータ可読記憶媒体は揮発性メモリ又は不揮発性メモリであってもよく、又は揮発性メモリと不揮発性メモリの両方を含んでもよい。例えば、コンピュータ可読記憶媒体は上記記憶媒体602であってもよい。なお、本明細書で説明される方法のメモリは、これら、及び任意の他の適切なタイプのメモリを含むことを意図するが、これらに限定されない。
【0136】
本開示の実施例はコンピュータプログラム製品又はコンピュータプログラムをさらに提供し、該コンピュータプログラム製品又はコンピュータプログラムはコンピュータ命令を含み、該コンピュータ命令はコンピュータ可読記憶媒体に記憶される。コンピュータ機器のプロセッサはコンピュータ可読記憶媒体から該コンピュータ命令を読み取り、プロセッサは該コンピュータ命令を実行し、該コンピュータ機器に本開示の実施例に係るデータ処理方法を実行させる。
【0137】
本開示について、以下の点を説明する必要がある。
【0138】
(1)本開示の実施例の図面は本開示の実施例に係る構造のみに関し、他の構造は通常の設計を参照すればよい。
【0139】
(2)明確にするために、本発明の実施例を説明するための図面において、層又は構造の厚さ及びサイズが拡大されている。理解できるように、層、フィルム、領域又は回路基板などの素子が、別の素子の「上」又は「下」に位置すると記載される場合、該素子は、別の素子の「上」又は「下」に「直接」位置してもよく、又は中間素子が存在してもよい。
【0140】
(3)矛盾しない場合、本開示の実施例及び実施例における特徴を互いに組み合わせて新たな実施例を得ることができる。
【0141】
以上は、本開示の具体的な実施形態に過ぎないが、本開示の保護範囲はこれに限定されず、本開示の保護範囲は前記特許請求の範囲の保護範囲に準じるべきである。
図1
図2
図3
図4
図5
図6
【手続補正書】
【提出日】2024-03-26
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
行列演算に適用されるデータ処理方法であり、
複数の第1操作データを含む第1行列が記憶された少なくとも1つの第1ベクトルレジスタ、及び複数の第2操作データを含む第2行列が記憶された少なくとも1つの第2ベクトルレジスタを決定するステップと、
第1データ選択情報及び第2データ選択情報を取得するステップと、
前記第1データ選択情報に基づき、前記複数の第1操作データから少なくとも1つの第1操作データを選択し、少なくとも1つの第1ターゲット操作データを得て、前記少なくとも1つの第1ターゲット操作データを、前記第2行列の第2行列次元を倍数としてデータコピーして複数の演算器に提供して前記複数の演算器に1対1で対応する複数の第1乗算係数を決定するステップと、
前記第2データ選択情報に基づき、前記複数の第2操作データから少なくとも1つの第2操作データを選択し、少なくとも1つの第2ターゲット操作データを得て、前記少なくとも1つの第2ターゲット操作データを、前記第1行列の第1行列次元を倍数としてデータコピーして前記複数の演算器に提供して前記複数の演算器に1対1で対応する複数の第2乗算係数を決定するステップと、を含み、
前記第1行列次元及び前記第2行列次元はいずれも正の整数であり、且つ前記第1行列次元のタイプと前記第2行列次元のタイプは異なるデータ処理方法。
【請求項2】
前記少なくとも1つの第1ターゲット操作データはM個の第1ターゲット操作データを含み、前記複数の演算器はP個の演算器群を含み、各演算器群はM個の演算器を含み、前記第2行列次元はPであり、M及びPはいずれも正の整数であり、
前記少なくとも1つの第1ターゲット操作データを、前記第2行列の第2行列次元を倍数としてデータコピーして複数の演算器に提供して前記複数の演算器に1対1で対応する複数の第1乗算係数を決定するステップは、
前記M個の第1ターゲット操作データをP部コピーし、P個の第1ターゲット操作データ群を得るステップであり、各第1ターゲット操作データ群は前記M個の第1ターゲット操作データを含むステップと、
前記P個の第1ターゲット操作データ群をそれぞれ前記P個の演算器群に提供し、前記複数の第1乗算係数を決定するステップであり、各演算器群のM個の演算器に対応するM個の第1乗算係数はそれぞれ前記M個の第1ターゲット操作データであるステップと、を含む請求項1に記載のデータ処理方法。
【請求項3】
前記少なくとも1つの第2ターゲット操作データはP個の第2ターゲット操作データを含み、前記複数の演算器はP個の演算器群を含み、各演算器群はM個の演算器を含み、前記第1行列次元はMであり、M及びPはいずれも正の整数であり、
前記少なくとも1つの第2ターゲット操作データを、前記第1行列の第1行列次元を倍数としてデータコピーして前記複数の演算器に提供して前記複数の演算器に1対1で対応する複数の第2乗算係数を決定するステップは、
前記P個の第2ターゲット操作データをM部コピーし、P個の第2ターゲット操作データ群を得るステップであり、各第2ターゲット操作データ群は1つの第2ターゲット操作データに対応し、且つ同じM個の前記第2ターゲット操作データを含むステップと、
前記P個の第2ターゲット操作データ群をそれぞれ前記P個の演算器群に提供し、前記複数の第2乗算係数を決定するステップであり、各演算器群内のM個の演算器に対応するM個の第2乗算係数は同じであり、且つ前記各演算器群に対応する第2ターゲット操作データ群内の第2ターゲット操作データであるステップと、を含む請求項1に記載のデータ処理方法。
【請求項4】
前記行列演算は複数のスレッドを含み、前記複数の演算器はそれぞれ前記複数のスレッドに対応し、前記少なくとも1つの第1ベクトルレジスタは複数の第1パスを有し、前記少なくとも1つの第2ベクトルレジスタは複数の第2パスを有し、前記複数のスレッドの各スレッドはそれぞれ前記複数の第1パスのうちの対応する第1パス及び前記複数の第2パスのうちの対応する第2パスに対応し、前記複数の第1操作データは前記複数の第1パスに対応し、前記複数の第2操作データは前記複数の第2パスに対応し、
前記第1データ選択情報に基づき、前記複数の第1操作データから少なくとも1つの第1操作データを選択し、少なくとも1つの第1ターゲット操作データを得るステップは、
前記第1データ選択情報に基づき、前記複数の第1パスのうち選択された少なくとも1つの第1パスを決定し、前記選択された少なくとも1つの第1パスに対応する少なくとも1つの第1操作データを前記少なくとも1つの第1ターゲット操作データとして用いるステップを含み、
前記第2データ選択情報に基づき、前記複数の第2操作データから少なくとも1つの第2操作データを選択し、少なくとも1つの第2ターゲット操作データを得るステップは、
前記第2データ選択情報に基づき、前記複数の第2パスのうち選択された少なくとも1つの第2パスを決定し、前記選択された少なくとも1つの第2パスに対応する少なくとも1つの第2操作データを前記少なくとも1つの第2ターゲット操作データとして用いるステップを含む請求項1~3のいずれか1項に記載のデータ処理方法。
【請求項5】
少なくとも1つのデスティネーションベクトルレジスタを決定するステップと、
前記複数の第1乗算係数及び前記複数の第2乗算係数に基づき、前記複数の演算器によって乗算演算を実行し、前記複数の演算器に対応する複数の乗算演算結果を得るステップであり、各演算器は対応する第1乗算係数及び第2乗算係数に対して乗算演算を実行し、前記各演算器に対応する乗算演算結果を得るステップと、
前記複数の乗算演算結果を前記少なくとも1つのデスティネーションベクトルレジスタに送信するステップと、をさらに含む請求項1~のいずれか1項に記載のデータ処理方法。
【請求項6】
前記複数の乗算演算結果を前記少なくとも1つのデスティネーションベクトルレジスタに送信するステップは、
前記複数の乗算演算結果と前記少なくとも1つのデスティネーションベクトルレジスタに記憶された複数の記憶データとを1対1で対応させて加算演算を行い、複数の加算演算結果を得るステップと、
前記複数の加算演算結果を前記少なくとも1つのデスティネーションベクトルレジスタに記憶するステップと、を含む請求項5に記載のデータ処理方法。
【請求項7】
第1データ選択情報及び第2データ選択情報を取得するステップは、
データ選択命令を取得するステップと、
前記データ選択命令を解析し、前記第1データ選択情報及び前記第2データ選択情報を得るステップと、を含む請求項1~のいずれか1項に記載のデータ処理方法。
【請求項8】
前記少なくとも1つの第1ベクトルレジスタは第1ターゲットベクトルレジスタを含み、前記少なくとも1つの第1ターゲット操作データはいずれも前記第1ターゲットベクトルレジスタに記憶され、
前記少なくとも1つの第2ベクトルレジスタは第2ターゲットベクトルレジスタを含み、前記少なくとも1つの第2ターゲット操作データはいずれも前記第2ターゲットベクトルレジスタに記憶される請求項1~のいずれか1項に記載のデータ処理方法。
【請求項9】
前記第1行列は縦行列であり、前記少なくとも1つの第1ターゲット操作データは前記第1行列の同一列に位置し、及び、
前記第2行列は横行列であり、前記少なくとも1つの第2ターゲット操作データは前記第2行列の同一行に位置する請求項1~のいずれか1項に記載のデータ処理方法。
【請求項10】
第1行列が記憶された少なくとも1つの第1ベクトルレジスタ、及び第2行列が記憶された少なくとも1つの第2ベクトルレジスタを決定するステップは、
少なくとも1つの第1アドレス及び少なくとも1つの第2アドレスを取得するステップと、
前記少なくとも1つの第1アドレスに基づき、前記少なくとも1つの第1ベクトルレジスタを決定するステップと、
前記少なくとも1つの第2アドレスに基づき、前記少なくとも1つの第2ベクトルレジスタを決定するステップと、を含む請求項1~のいずれか1項に記載のデータ処理方法。
【請求項11】
少なくとも1つの第1アドレス及び少なくとも1つの第2アドレスを取得するステップは、
行列演算命令を取得するステップと、
前記行列演算命令を解析し、前記少なくとも1つの第1アドレス及び前記少なくとも1つの第2アドレスを得るステップと、を含む請求項10に記載のデータ処理方法。
【請求項12】
第1データ選択情報及び第2データ選択情報を取得するステップは、
前記行列演算命令を解析し、前記第1データ選択情報及び前記第2データ選択情報を得るステップを含む請求項1~のいずれか1項に記載のデータ処理方法。
【請求項13】
少なくとも1つの第1データ読取命令及び少なくとも1つの第2データ読取命令を取得するステップと、
前記少なくとも1つの第1データ読取命令を解析し、少なくとも1つの第1読み出しアドレス及び少なくとも1つの第1アドレスを得るステップと、
前記少なくとも1つの第1読み出しアドレスに基づいてメモリから前記複数の第1操作データを読み取り、前記少なくとも1つの第1アドレスに基づき、前記少なくとも1つの第1ベクトルレジスタを決定して前記複数の第1操作データを前記少なくとも1つの第1ベクトルレジスタに書き込むステップと、
前記少なくとも1つの第2データ読取命令を解析し、少なくとも1つの第2読み出しアドレス及び少なくとも1つの第2アドレスを得るステップと、
前記少なくとも1つの第2読み出しアドレスに基づいて前記メモリから前記複数の第2操作データを読み取り、前記少なくとも1つの第2アドレスに基づき、前記少なくとも1つの第2ベクトルレジスタを決定して前記複数の第2操作データを前記少なくとも1つの第2ベクトルレジスタに書き込むステップと、をさらに含む請求項1~のいずれか1項に記載のデータ処理方法。
【請求項14】
前記複数の演算器は乗算演算を並列に実行する請求項1~のいずれか1項に記載のデータ処理方法。
【請求項15】
行列演算に適用されるデータ処理装置であり、
複数の第1操作データを含む第1行列が記憶された少なくとも1つの第1ベクトルレジスタ、及び複数の第2操作データを含む第2行列が記憶された少なくとも1つの第2ベクトルレジスタを決定することに用いられたレジスタ決定ユニットと、
第1データ選択情報及び第2データ選択情報を取得することに用いられた情報取得ユニットと、
前記第1データ選択情報に基づき、前記複数の第1操作データから少なくとも1つの第1操作データを選択し、少なくとも1つの第1ターゲット操作データを得て、及び前記第2データ選択情報に基づき、前記複数の第2操作データから少なくとも1つの第2操作データを選択し、少なくとも1つの第2ターゲット操作データを得ることに用いられたデータ選択ユニットと、
前記少なくとも1つの第1ターゲット操作データを、前記第2行列の第2行列次元を倍数としてデータコピーして複数の演算器に提供して前記複数の演算器に1対1で対応する複数の第1乗算係数を決定し、及び前記少なくとも1つの第2ターゲット操作データを、前記第1行列の第1行列次元を倍数としてデータコピーして前記複数の演算器に提供して前記複数の演算器に1対1で対応する複数の第2乗算係数を決定するためのデータブロードキャストユニットと、を含み、
前記第1行列次元及び前記第2行列次元はいずれも正の整数であり、且つ前記第1行列次元のタイプと前記第2行列次元のタイプは異なるデータ処理装置。
【請求項16】
データ処理機器であり、
プロセッサと、
コンピュータ実行可能命令が記憶される記憶媒体と、を含み、
前記コンピュータ実行可能命令は前記プロセッサによって実行されるときに請求項1~のいずれか1項に記載のデータ処理方法を実現するデータ処理機器。
【請求項17】
コンピュータ実行可能命令を非一時的に記憶するためのコンピュータ可読記憶媒体であり、
前記コンピュータ実行可能命令はプロセッサによって実行されるときに請求項1~のいずれか1項に記載のデータ処理方法を実現するコンピュータ可読記憶媒体。
【国際調査報告】