(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-02-03
(45)【発行日】2023-02-13
(54)【発明の名称】行列記憶方法、行列アクセス方法、装置、電子機器および記憶媒体
(51)【国際特許分類】
G06F 17/16 20060101AFI20230206BHJP
【FI】
G06F17/16 B
G06F17/16 A
(21)【出願番号】P 2020105553
(22)【出願日】2020-06-18
【審査請求日】2020-06-18
(31)【優先権主張番号】201911420575.8
(32)【優先日】2019-12-31
(33)【優先権主張国・地域又は機関】CN
(73)【特許権者】
【識別番号】514322098
【氏名又は名称】ベイジン バイドゥ ネットコム サイエンス テクノロジー カンパニー リミテッド
【氏名又は名称原語表記】Beijing Baidu Netcom Science Technology Co., Ltd.
【住所又は居所原語表記】2/F Baidu Campus, No.10, Shangdi 10th Street, Haidian District, Beijing 100085, China
(73)【特許権者】
【識別番号】521457387
【氏名又は名称】クンルンシン テクノロジー (ベイジン) カンパニー リミテッド
【氏名又は名称原語表記】Kunlunxin Technology (Beijing) Company Limited
【住所又は居所原語表記】CW Section, F/4, Building 1, No.10, Shangdi 10th Street, Haidian District, 100101, Beijing, China
(74)【代理人】
【識別番号】110002468
【氏名又は名称】弁理士法人後藤特許事務所
(72)【発明者】
【氏名】阮 元
(72)【発明者】
【氏名】李 浩洋
【審査官】田中 幸雄
(56)【参考文献】
【文献】中国特許出願公開第108765247(CN,A)
【文献】特開平7-210672(JP,A)
【文献】特開2007-249262(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/16
(57)【特許請求の範囲】
【請求項1】
NPU(Neural-network Processing Unit)が実行する行列処理に用いられる行列データを、コンピュータを用いてメモリに記憶する行列記憶方法であって、
所定のN行×M列(前記N、Mの少なくとも一方が1より大きい)の分割粒度にしたがって行列を、少なくとも一つのN行×M列の第1データブロックを含み、前記行列の列数が前記Mの整数倍でなければ、さらに少なくとも一つのN行×P(前記Mより小さい)列でかつ隣接する前記第1データブロックとは行が揃う第2データブロックを含む複数のデータブロックに分割することと、
各前記第1データブロックのデータを前記メモリとしてのオフチップメモリに連続して記憶し、かつ各前記第2データブロックのデータを前記オフチップメモリに連続して記憶することとを含み、
前記オフチップメモリは、前記NPUの外部に設置
され、
前記NPUが複数のオフチップメモリに接続するための複数の記憶チャネルを含むのであれば、前記分割粒度は、単一記憶チャネルの記憶粒度の整数倍である、ことを特徴とする行列記憶方法。
【請求項2】
前記行列の行数が前記Nの整数倍でなければ、前記複数のデータブロックは、さらに少なくとも一つのL(前記Nより小さい)行×S列の第3データブロックを含むことを特徴とする請求項1に記載の方法。
【請求項3】
前記第3データブロックの数が1であり、前記Sが前記行列の列数に等しいことを特徴とする請求項2に記載の方法。
【請求項4】
各前記第3データブロックのデータを前記オフチップメモリに連続して記憶することをさらに含むことを特徴とする請求項2または3に記載の方法。
【請求項5】
コンピュータを用いて実行する行列アクセス方法であって、
請求項
1~4のいずれか一項に記載の行列記憶方法によってオフチップメモリに記憶される行列アクセス方法において、
前記行列のアクセスパラメータを含む前記行列へのアクセス要求を受信することと、
前記アクセスパラメータに対応するデータブロックが一つの
前記第1データブロックまたは一つの
前記第2データブロックを含むのであれば、前記データブロックのデータをオフチップメモリから読み取ることと、
前記アクセスパラメータに対応するデータブロックが
前記第1データブロック
の一部または
前記第2データブロック
の一部を含むのであれば、
前記データブロックのデータを前記オフチップメモリから読み取ることを禁止することとを含むことを特徴とする行列アクセス方法。
【請求項6】
NPU(Neural-network Processing Unit)が実行する行列処理に用いられる行列データをメモリに記憶する行列記憶装置であって、
所定のN行×M列(前記N、Mの少なくとも一方が1より大きい)の分割粒度にしたがって行列を、少なくとも一つのN行×M列の第1データブロックを含み、前記行列の列数が前記Mの整数倍でなければ、さらに少なくとも一つのN行×P(前記Mより小さい)列でかつ隣接する前記第1データブロックとは行が揃う第2データブロックを含む複数のデータブロックに分割するための分割モジュールと、
各前記第1データブロックのデータを前記メモリとしてのオフチップメモリに連続して記憶し、かつ各前記第2データブロックのデータを前記オフチップメモリに連続して記憶するための第1記憶モジュールとを含み、
前記オフチップメモリは、前記NPUの外部に設置
され、
前記NPUが複数のオフチップメモリに接続するための複数の記憶チャネルを含むのであれば、前記分割粒度は、単一記憶チャネルの記憶粒度の整数倍である、ことを特徴とする行列記憶装置。
【請求項7】
前記行列の行数が前記Nの整数倍でなければ、前記複数のデータブロックは、さらに少なくとも一つのL(前記Nより小さい)行×S列の第3データブロックを含むことを特徴とする請求項
6に記載の装置。
【請求項8】
前記第3データブロックの数が1であり、前記Sが前記行列の列数に等しいことを特徴とする請求項
7に記載の装置。
【請求項9】
各前記第3データブロックのデータを前記オフチップメモリに連続して記憶するための第2記憶モジュールをさらに含むことを特徴とする請求項
7または8に記載の装置。
【請求項10】
請求項
6~9のいずれか一項に記載の行列記憶装置に記憶されている行列へアクセスするための行列アクセス装置において、
前記行列のアクセスパラメータを含む前記行列へのアクセス要求を受信するための受信モジュールと、
前記アクセスパラメータに対応するデータブロックが一つの
前記第1データブロックまたは一つの
前記第2データブロックを含むのであれば、前記データブロックのデータをオフチップメモリから読み取るための読み取りモジュールと、
前記アクセスパラメータに対応するデータブロックが
前記第1データブロック
の一部または
前記第2データブロック
の一部を含むのであれば、前記データブロックのデータを前記オフチップメモリから読み取ることを禁止するための制御モジュールとを含むことを特徴とする行列アクセス装置。
【請求項11】
少なくとも一つのプロセッサと、
前記少なくとも一つのプロセッサと通信可能に接続するメモリとを含み、
前記メモリには、前記少なくとも一つのプロセッサによって実行可能な指令が格納され、前記指令が前記少なくとも一つのプロセッサによって実行されることによって、請求項
1~5のいずれか一項に記載の方法を前記少なくとも一つのプロセッサに実行させることを可能にすることを特徴とする電子機器。
【請求項12】
コンピュータ指令が格納されている非一時的コンピュータ読み取り可能な記憶媒体であって、
前記コンピュータ指令は、請求項
1~5のいずれか一項に記載の方法を前記コンピュータに実行させることに用いられることを特徴とする非一時的コンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本願は、データ処理技術に係り、特にデータアクセス技術分野に係り、具体的には行列記憶方法、行列アクセス方法、装置、電子機器および記憶媒体に係る。
【背景技術】
【0002】
ニューラルネットワークは、音声認識、画像認識などの人工知能シーンで広く利用され、ニューラルネットワークの計算プロセスは、多くの行列処理に関与することが多い。ニューラルネットワーク計算プロセスに必要なメモリ空間が増大するにつれて、ニューラルネットワークプロセッサNPU(Neural-network Processing Unit)は、オンチップメモリに加えて、オフチップメモリを通常備える。これにより、処理対象の行列をオフチップメモリに記憶しておき、処理時に、オフチップメモリに記憶された行列を必要に応じてオンチップメモリにロードする。現在、行列の記憶は、行記憶または列記憶の方式が一般的である。NPUは、行列計算の際に既存の記憶方式でデータをロードすることが一般的ではなく、これは、NPUの行列処理を非効率的にする。
【発明の概要】
【発明が解決しようとする課題】
【0003】
本願は、行列記憶方法、行列アクセス方法、装置および電子機器を提供し、NPUの行列処理効率が低いという問題を解決しようとする。
【課題を解決するための手段】
【0004】
第1方面では、本願は、行列記憶方法を提供する。当該方法において、所定のN行×M列(前記N、Mの少なくとも一方が1より大きい)の分割粒度にしたがって行列を、少なくとも一つのN行×M列の第1データブロックを含み、前記行列の列数が前記Mの整数倍でなければ、さらに少なくとも一つのN行×P(前記Mより小さい)列でかつ隣接する前記第1データブロックとは行が揃う第2データブロックを含む複数のデータブロックに分割することと、各前記第1データブロックのデータをオフチップメモリに連続して記憶し、かつ各前記第2データブロックのデータを前記オフチップメモリに連続して記憶することとを含む。
【0005】
選択可能に、前記行列の行数が前記Nの整数倍でなければ、前記複数のデータブロックは、さらに少なくとも一つのL(前記Nより小さい)行×S列の第3データブロックを含む。
【0006】
前記第3データブロックの数が1であり、前記Sが前記行列の列数に等しい。
【0007】
選択可能に、前記方法において、各前記第3データブロックのデータを前記オフチップメモリに連続して記憶することをさらに含む。
【0008】
選択可能に、前記オフチップメモリが複数の記憶チャネルを含むのであれば、前記分割粒度は、単一記憶チャネルの記憶粒度(Storage granularity)の整数倍である。
【0009】
第2方面では、本願は、行列アクセス方法を提供する。前記行列は、第1方面のいずれか一項に記載の行列記憶方法によってオフチップメモリに記憶される行列である。前記方法において、前記行列のアクセスパラメータを含む前記行列へのアクセス要求を受信することと、前記アクセスパラメータに対応するデータブロックが完全な第1データブロックまたは完全な第2データブロックを含むのであれば、前記データブロックのデータをオフチップメモリから読み取ることと、前記アクセスパラメータに対応するデータブロックが完全でない第1データブロックまたは完全でない第2データブロックを含むのであれば、前記データブロックのデータを前記オフチップメモリから読み取ることを禁止することとを含む。
【0010】
第3方面では、本願は、行列記憶装置を提供する。当該装置は、所定のN行×M列(前記N、Mの少なくとも一方が1より大きい)の分割粒度にしたがって行列を、少なくとも一つのN行×M列の第1データブロックを含み、前記行列の列数が前記Mの整数倍でなければ、さらに少なくとも一つのN行×P(前記Mより小さい)列でかつ隣接する前記第1データブロックとは行が揃う第2データブロックを含む複数のデータブロックに分割するための分割モジュールと、各前記第1データブロックのデータをオフチップメモリに連続して記憶し、かつ各前記第2データブロックのデータを前記オフチップメモリに連続して記憶するための第1記憶モジュールとを含む。
【0011】
選択可能に、前記行列の行数が前記Nの整数倍でなければ、前記複数のデータブロックは、さらに少なくとも一つのL(前記Nより小さい)行×S列の第3データブロックを含む。
【0012】
選択可能に、前記第3データブロックの数が1であり、前記Sが前記行列の列数に等しい。
【0013】
選択可能に、前記装置は、各前記第3データブロックのデータを前記オフチップメモリに連続して記憶するための第2記憶モジュールをさらに含む。
【0014】
選択可能に、前記オフチップメモリが複数の記憶チャネルを含むのであれば、前記分割粒度は、単一記憶チャネルの記憶粒度の整数倍である。
【0015】
第4方面では、本願は、第3方面のいずれか一項に記載の行列記憶装置に記憶されている行列へアクセスするための行列アクセス装置を提供する。当該装置は、前記行列のアクセスパラメータを含む前記行列へのアクセス要求を受信するための受信モジュールと、前記アクセスパラメータに対応するデータブロックが完全な第1データブロックまたは完全な第2データブロックを含むのであれば、前記データブロックのデータをオフチップメモリから読み取るための読み取りモジュールと、前記アクセスパラメータに対応するデータブロックが完全でない第1データブロックまたは完全でない第2データブロックを含むのであれば、前記データブロックのデータを前記オフチップメモリから読み取ることを禁止するための制御モジュールとを含む。
【0016】
第5方面は、本願は、少なくとも一つのプロセッサと、前記少なくとも一つのプロセッサと通信可能に接続するメモリとを含む電子機器を提供する。前記メモリには、前記少なくとも一つのプロセッサによって実行可能な指令が格納され、前記指令が前記少なくとも一つのプロセッサによって実行されることによって、第1方面のいずれか一項に記載の方法を前記少なくとも一つのプロセッサに実行させることを可能にする。
【0017】
第6方面では、本願は、コンピュータ指令が格納されている非一時的コンピュータ読み取り可能な記憶媒体を提供し、前記コンピュータ指令は、第1方面のいずれか一項に記載の方法を前記コンピュータに実行させることに用いられることを特徴とする。
【0018】
本願の各実施例の利点および有益な効果は、以下、具体的な実施例に関連して説明される。
【図面の簡単な説明】
【0019】
図面は、本解決策をより良く理解するために使用され、本願を限定するものではない。
【
図1】本願によるNPUの構造を示すブロック図である。
【
図2】本願の実施例1による行列記憶方法のフローチャートである。
【
図6】本願によるマルチチャネルオフチップメモリが集積されているNPUの構造を示すブロック図である。
【
図8】本願の実施例2による行列アクセス方法のフローチャートである。
【
図9】本願による行列アクセスプロセスの例示図である。
【
図11】本願による行列アクセス装置の構造図である。
【
図12】本願の実施例の行列記憶方法を実現するための電子機器のブロック図である。
【
図13】本願の実施例の行列アクセス方法を実現するための電子機器のブロック図である。
【発明を実施するための形態】
【0020】
以下、理解に役立つための本願の実施例の様々な細部を含めて本願の例示的な実施例は、図面に基づいて説明されるが、例示的なものに過ぎないとされるべきである。したがって、当業者は、本願の範囲および趣旨から逸脱することなく、ここに記載された実施例に様々な変更および修正を加えることができることを認識するであろう。また、説明の明確化および簡略化のため、以下の記載では、周知の機能および構成についての記載は、省略する。
【0021】
実施例1
本願は、行列記憶装置に応用可能な行列記憶方法を提供し、たとえば当該方法がNPUのプロセッサに適用可能である。
図1は、典型的なNPUの構造を示すブロック図である。
図1に示されるように、NPUは、通常、制御ユニット、計算ユニット、オンチップメモリ、ダイレクトメモリアクセスDMA(Direct Memory Access)、メモリコントローラMC(Memory Controller)およびオフチップメモリを含む。NPUが動作すると、DMAがMCにアクセス要求を送信する。MCがオフチップメモリにアクセスしてニューラルネットワークモデルと処理対象データを取得し、DMAによりニューラルネットワークモデルと処理対象データをオンチップメモリに書き込む。その後、計算ユニットがオンチップメモリにアクセスしてデータを取得して計算を行い、計算結果がオンチップメモリに書き込まれ、DMAによりオフチップメモリに戻される。ここで、制御ユニットは、DMAおよび計算ユニットの動作を制御することに用いられる。
【0022】
オンチップメモリの空間制約のため、NPUは、行列計算の際に、行列のデータを、行全体または列全体の方式でロードするのではなく、通常、ブロックの方式でロードする。すなわち、上記処理対象データは、通常、行列のある行のデータブロックや、ある列のデータブロックではない。このため、既存の行記憶または列記憶の方式で行列を記憶すると、上記処理対象データがオフチップメモリに記憶されるアドレス空間の連続性が悪くなり、NPUの行列処理効率が低下する。
【0023】
そこで、NPUの行列処理効率を向上させるため、本願では、行列記憶方法を提供する。
【0024】
図2に示すように、当該行列記憶方法は、以下のステップを含む。
【0025】
ステップ101において、所定のN行×M列の分割粒度にしたがって行列を複数のデータブロックに分割する。前記N、Mの少なくとも一方が1より大きい。ここで、前記複数のデータブロックは、少なくとも一つの第1データブロックを含み、前記第1データブロックがN行×M列のデータブロックである。前記行列の列数が前記Mの整数倍でなければ、前記複数のデータブロックは、さらに少なくとも一つのN行×P列の第2データブロックを含み、前記第2データブロックは、隣接する前記第1データブロックとは行が揃う。前記Pは、前記Mより小さい。
【0026】
上記行列は、オフチップメモリに記憶されるべき行列、またはオフチップメモリに記憶される必要がある行列として理解される。このステップの前に、行列記憶装置は、当該行列を予め取得する。当該行列は、サイズが限られず、仮にA行×B列の行列とする。
【0027】
なお、行列の行数および列数は、ともに正の整数であり、分割粒度の行数および列数、各データブロックの行数および列数も、正の整数であることは容易に理解できる。
【0028】
本願において、「分割」という用語は、データブロックを区分すること、すなわち、行列をN行×M列の分割粒度で複数のデータブロックに区分すると理解できる。「分割粒度」とは、ブロックの単位サイズとして理解できる。行列の行数がちょうどNの整数倍、かつ列数がちょうどMの整数倍であれば、分割粒度で分割し、行列を複数のデータブロックに均等に分割することができ、各データブロックのサイズが、いずれも分割粒度に等しい。本願では、分割粒度に等しいサイズのデータブロックを第1データブロック、あるいは、ベースデータブロックと呼ぶ。
【0029】
図3は、行列のサイズが分割粒度の整数倍である例を示す。
図3に示すように、12×1024の行列を例にとると、分割粒度が4×256であるとすると、行列は、データブロックa~データブロックlの12個のデータブロックに分割される。この12個のデータブロックは、それぞれ、第1データブロック(またはベースデータブロック)である。各第1データブロックのサイズは、4×256であり、各第1データブロックが必要とするアドレス空間のサイズは、1KBである。ここで、例えば、データブロックaが占めるアドレス空間は、0~1Kのアドレスであり、データブロックbが占めるアドレス空間は、1K~2Kのアドレスであり、データブロックcが占めるアドレス空間は、2K~3Kのアドレスである。
【0030】
また、一部の実際の場合には、行列のサイズが分割粒度の整数倍ではなく、たとえば行列の列数BがMの整数倍ではなく、または、行列の行数AがNの整数倍ではない。このように、行列は、
図3のように、複数の第1データブロックに均等に分割されることはできない。このようなシナリオに対し、本願では、
図4に示す分割方法を提供する。
図4に示すように、12×1152の行列を例にとり、分割粒度を4×256とすると、当該行列を均等に分割することができない。行列の((0,0),(11,1023))の部分は、
図3に示す分割方式を用いて、12個の第1データブロック、すなわちデータブロックa~d、データブロックf~i、データブロックk~nに分割することができる。また、行列の((0,1024),(11,1151))の部分については、3つの第2データブロック、すなわちデータブロックe、データブロックj、データブロックoに分割することができる。各第2データブロックは、隣接する第1データブロックとは行が揃う。したがって、第2データブロックは、アラインメントデータブロックと称する。各第2データブロックのサイズは、4×128であり、各第2データブロックが必要とするアドレス空間のサイズは、0.5KBである。
【0031】
本出願において、分割粒度のサイズは、必要に応じて予め設定されてもよく、たとえば、行列のアクセス要件に応じて分割粒度が予め設定されてもよい。オフチップメモリのインターリーブ粒度(Interleaving granularity)に応じて、分割粒度を予め設定してもよい。さらに、分割粒度は、経験的なパラメータに基づいて予め設定されていてもよい。
【0032】
ステップ102において、各前記第1データブロックのデータをオフチップメモリに連続して記憶し、かつ各前記第2データブロックのデータを前記オフチップメモリに連続して記憶する。
【0033】
行列を分割した後、行列のデータブロックにアクセスする後続のプロセスにおいて、アクセス対象データがオフチップメモリに記憶されるアドレス空間の連続性を高めるために、当該ステップにおいて、各第1データブロックのデータをオフチップメモリに連続して記憶する。また、データブロックに第2データブロックが含まれるシナリオについて、さらに、各第2データブロックのデータをオフチップメモリに連続して記憶する。
【0034】
データブロックのデータをオフチップメモリに連続して記憶することは、データブロックのデータに対してアドレスリマッピングを行い、一つのブロック内のデータがアドレス空間で連続なアドレスを占めることを実現すると理解できる。上記第1データブロックと第2データブロックは、アドレスリマッピングを経たデータブロックと理解できる。
【0035】
なお、各第1データブロックまたは第2データブロックのデータをオフチップメモリに連続して記憶する場合、同一のデータブロックのデータが連続して記憶されていればよく、異なるデータブロック間のデータが連続して記憶される必要があるかは、本願において限定されない。たとえば、
図4において、データブロックaのデータは、オフチップメモリの連続したアドレスを占め、データブロックbのデータも、オフチップメモリの連続したアドレスを占めるが、データブロックaとデータブロックbのデータが連続したアドレスを占めるか否かは、本願に限定されない。
【0036】
記憶対象行列を上記方式でオフチップメモリに記憶した後、この行列にアクセスする必要がある場合、アクセスされるデータブロックは、完全な第1データブロックまたは完全な第2データブロック(第2データブロックが存在する場合)を含む必要がある。これにより、アクセスされるデータのアドレス空間における連続性が向上される。たとえば、
図3に示すように、アクセスされるデータブロックは、データブロックc、データブロックd、データブロックg、データブロックhの4つの完全な第1データブロックを含むものとする。また、たとえば、
図4に示すように、アクセスされるデータブロックは、データブロックd、データブロックe、データブロックi、データブロックj、データブロックn、データブロックoの3つの完全な第1データブロックと3つの完全な第2データブロックを含むものとする。
【0037】
本願による上記実施例は、以下の利点および有益な効果を有する。行列を所定の分割粒度で分割し、分割された第1データブロックと第2データブロック(第2データブロックが存在する場合)のデータをオフチップメモリに連続して記憶することにより、データブロックを完全かつ連続的にオフチップメモリに書き込むことを実現することができる。行列のデータブロックへのアクセスが必要となると、オフチップメモリに連続して記憶された完全なデータブロックを読み取ることができ、アクセスされるデータのアドレス空間での連続性を向上させることができる。アクセスされるデータのアドレス空間における連続性が向上するため、データの読み取り速度を向上させ、アクセス効率を向上させることができる。以上のように、本願による上記実施例は、行列処理効率を向上させることができる。
【0038】
選択可能に、前記行列の行数が前記Nの整数倍でない場合、前記複数のデータブロックは、L行×S列の少なくとも1つの第3データブロックをさらに含み、前記Lは前記Nよりも小さい。
【0039】
一部の実際の場合には、行列の行数Aは、Nの整数倍ではない。このように、行列は、
図3または
図4のように、ちょうど第1データブロックと第2データブロック(第2データブロックが存在する場合)とに分割されない。このとき、行列を第1データブロックと第2データブロックとに分割した後、残りのデータブロックを少なくとも1つの第3データブロックに分割する。各第3データブロックの行数Lを残りのデータブロックの行数とし、列数Sの値は限定されない。たとえば、Sの値をMと等しくしてもよいし、Mより小さくても大きくてもよい。Sの値がMに等しいとき、各第3データブロックは、隣接する第1データブロックとは列が揃う。
【0040】
行列を第1データブロックと第2データブロックとに分割した後、残りのデータブロックの行数は一般に小さく、同様に第3データブロックの行数も小さいので、第3データブロックの記憶方式は、本願において限定されず、即ち、第3データブロックを如何なる実現可能な記憶方式でオフチップメモリに記憶することができる。たとえば,第3データブロックに対してアドレスリマッピングをしてもよいし、第3データブロックに対しアドレスリマッピングをしなくてもよい。
【0041】
第3データブロックに対しアドレスリマッピングをすれば、各前記第3データブロックのデータを前記オフチップメモリに連続して記憶することができる。この場合、アクセスが必要なデータブロックが第3データブロックを含む場合、アクセスされるデータのアドレス空間における連続性をさらに向上させることができる。第3データブロックにアドレスリマッピングをしない場合、第3データブロックは、アドレスリマッピングをされていないデータブロックと理解され、リマッピングレスデータブロックと呼ぶ。
【0042】
第3データブロックの行数は一般に小さく、アクセスされるデータブロックは完全な第3データブロックを含むことが保証されないため、第3データブロックに対しアドレスリマッピングをしても、メモリアクセス帯域幅の最適化に対する効果は一般に小さい。そこで、本願では、第3データブロックに対しアドレスリマッピングを行うか否かは、限定しない。このように、第3データブロックの記憶方式に柔軟性を持たせている。
【0043】
さらに、前記第3データブロックの数は、1であり、前記Sは、前記行列の列数に等しい。
【0044】
行列を第1データブロックと第2データブロックとに分割した後、残りのデータブロックの行数は一般に少ないので、残りのデータブロック全体を1つの第3データブロックとしてもよい。これにより、行列分割をより簡略化することができる。
【0045】
図5に示すように、13×1152の行列を例にとると、分割粒度が4×256であるとすると、当該行列を均等に分割できない。行列の((0,0),(11,1151))の部分は、
図4に示す分割方式を用いて、12個の第1データブロックと3個の第2データブロック、即ちデータブロックaからデータブロックoに均等に分割することができる。また、行列の((12,0),(12,1151))の部分については、1つの第3データブロック、すなわちデータブロックpに分割することができる。
【0046】
当該行列にアクセスし、たとえばDMAでは、行列の((0,256),(12,511))のブロックをロードする必要があると、オフチップメモリからデータブロックb、データブロックg、データブロックl、一部のデータブロックpを順次読み取る必要がある。ここで、一部のデータブロックpのデータに対応する記憶アドレスは、不連続であり、他の3つのデータブロックのデータに対応する記憶アドレスは、連続であることが可能である。アクセスされるデータがオフチップメモリに記憶されるアドレス空間の連続性が優れることが分かる。
【0047】
また、たとえばDMAが行列の((0,768),(12,1151))のブロックをロードする必要がある場合、データブロックd、データブロックe、データブロックi、データブロックj、データブロックn、データブロックo、および一部のデータブロックpをオフチップメモリから順次読み取る必要がある。ここで、一部のデータブロックpのデータに対応する記憶アドレスは不連続であり、他の6つのデータブロックのデータに対応する記憶アドレスは連続である。アクセスされるデータがオフチップメモリに記憶されるアドレス空間の連続性が優れることが分かる。
【0048】
選択可能に、前記オフチップメモリが複数の記憶チャネルを含む場合、前記分割粒度は、単一の記憶チャネルの記憶粒度の整数倍である。
【0049】
行列関連の様々な計算を改善するために、NPU内部には、多数の並列動作可能な計算ユニットが集積される。DMA、オンチップメモリ、計算ユニット間のデータパスがNPUチップ内にあるので、非常に高い帯域幅を容易に達することができる。MCがオフチップメモリにアクセスする帯域幅は、メモリプロトコルの標準化サイクルおよび物理的な実現の困難さ等によって制限され、単一チャネルのメモリアクセス帯域幅は、容易に向上させることができない。したがって、DMAではデータをオンチップメモリに書き込む速度は制限され、行列をNPUに伝達するのにかかる時間は、計算時間を超える可能性があり、最終的に、計算ユニットに多くの待機時間をもたらし、NPUの全体的な性能に影響を与える。
【0050】
この問題を解決するために、一般的に、マルチチャネルのオフチップメモリをNPUに集積してメモリアクセス帯域幅を拡大させる。
図6は、マルチチャネルのオフチップメモリが集積されたNPUの構造を示すブロック図を提供し、ここで、NOC(Network on Chip)がオンチップネットワークであり、オフチップメモリのチャネル数が4つ(4つに限定されない)である。マルチチャネルのオフチップメモリが集積されている条件では、DMAがNOCにアクセス要求を送信し、NOCがMCを介して複数のチャネルのオフチップメモリに並行してアクセスすることが可能となり、全体的なオフチップメモリアクセス帯域幅を数倍向上させることが可能となる。
【0051】
しかしながら、実際のシナリオでは、アクセス要求が複数のチャネル間で均衡を保つことができない。すなわち、アクセス要求が複数のチャネルをカバーすることができない。その結果、マルチチャネルのメモリアクセス帯域幅が実際に利用されない。したがって、実際のオフチップ記憶帯域幅の利用率に達しない。行列(ベクトルを含む)の計算動作を例にとると、オンチップメモリ空間の制約からDMAにブロックのアクセス指令を送信し、行列を分割してオンチップメモリにロードして計算を行うのが一般的である。現在の行列記憶は、基本的には、行記憶または列記憶の方式が用いられ、すなわち、行列の1行(または1列)のデータがアドレス空間では連続する。行記憶(または列記憶)によって、行列における必要なブロックデータのアドレッシングが容易である。しかしながら、このように一度アクセスするデータがアドレス空間で連続していることは保証されず、アクセスするデータが最終的に同一チャネルのメモリに分布してしまうことがあり、DMAが取得するデータ帯域幅は、設計目標の数分の1しかない。ここでは、NPUが4記憶チャネルのオフチップメモリで、チャネル毎のインタリーブ粒度が256Bである場合を例にとる。NPUは、
図7に示す4×1024の行列の((0,256),(3,511))のブロックをロードする必要があり、当該行列は、行記憶の方式でそれぞれ記憶チャネル0~記憶チャネル3に記憶され、行列のマルチチャネルアドレスインタリーブ規則により、行列の((0,256),(3,511))のブロックは、記憶チャネル1のオフチップメモリのみに記憶される。すると、NPUのDMAは、実際にこのブロックをロードする際に、1/4のオフチップメモリ帯域幅しか実現できず、その期間中に、3つの記憶チャネルが全て待機状態である。
【0052】
そこで、本願では、マルチチャネルのオフチップメモリに対する行列記憶方法を提供する。すなわち、前記オフチップメモリが複数の記憶チャネルを含む場合、前記分割粒度は、単一記憶チャネルの記憶粒度の整数倍である。ここで、「記憶粒度」という用語は、インタリーブ粒度と理解される。
【0053】
NPUが4つの記憶チャネルのオフチップメモリを有し、記憶粒度が256Bであるとすると、アドレス分布方式は、256*0~256*1-1がチャネル0を経てアクセスされ、256*1~256*2-1がチャネル1を経てアクセスされ、256*2~256*3-1がチャネル2を経てアクセスされ、256*3~256*4-1がチャネル3を経てアクセスされ、256*4~256*5-1がチャネル0を経てアクセスされ、……である。このように、アクセスするデータがアドレス空間的に連続した1KBであれば、NPUは、4つのチャネルに並行してアクセスし、所望のメモリアクセス帯域幅を達成することができる。
【0054】
分割粒度が単一記憶チャネルの記憶粒度の整数倍であるため、各第1データブロックのサイズは、単一記憶チャネルの記憶粒度の整数倍である。したがって、各アクセスは完全な第1データブロックを含まなければならないので、各アクセスは、少なくとも1つの記憶チャネルをカバーする。アクセスされるデータブロックの数が1つを超えると、各アクセスは、少なくとも2つの記憶チャネルをカバーする。各アクセスで記憶チャネルのカバー率が向上することが分かる。前記整数倍は、1倍、2倍、3倍、4倍などであってもよい。
図6に示す4つの記憶チャネルのオフチップメモリが集積されたNPUの場合、分割粒度は、単一記憶チャネルの記憶粒度の4倍である。これにより、各第1データブロックが全ての記憶チャネルをカバーすることができ、記憶チャネルのカバー率がさらに向上する。
【0055】
この実施形態では、行列の分割粒度とオフチップメモリの記憶チャネルの記憶粒度とを関連付けることで、各記憶チャネルのカバー率を向上させることができ、オフチップメモリのメモリアクセス帯域幅を向上させ、全ての記憶チャネルのメモリアクセス帯域幅を可能な限り利用し、NPUの性能を確実に向上させる。
【0056】
なお、本願における行列記憶方法の複数の選択可能な実施形態は、互いに組み合わせて実現してもよいし、単独で実現してもよく、本願は限定されない。
【0057】
本願の上記実施例は、以下の利点や有益な効果を有する。行列をオフチップメモリに記憶する前に、まず行列を所定の分割粒度で分割し、分割された第1データブロックと第2データブロック(第2データブロックが存在する場合)のデータをオフチップメモリに連続して記憶する。上記技術手段の採用により、データブロックを完全かつ連続的にオフチップメモリに書き込むことを実現することができ、行列のデータブロックへのアクセスが必要となると、オフチップメモリに連続して記憶されるデータブロックを完全に読み取ることができ、アクセスされるデータのアドレス空間における連続性が改善される。よって、本願による上記実施例によれば、行列処理効率を向上させることができる。
【0058】
実施例2
本願は、実施例1の行列記憶方法に適応する行列アクセス方法をさらに提供する。当該方法において、アクセスされる行列は、実施例1の行列記憶方法によってオフチップメモリに記憶される行列である。当該方法は、行列アクセス装置に応用可能であり、たとえば、当該方法は、NPUのプロセッサに適用可能である。
【0059】
図8に示すように、当該行列アクセス方法は、以下のステップを含む。
ステップ201において、前記行列のアクセスパラメータを含む前記行列へのアクセス要求を受信する。
ステップ202において、前記アクセスパラメータに対応するデータブロックが完全な第1データブロックまたは完全な第2データブロックを含むのであれば、前記データブロックのデータをオフチップメモリから読み取る。
ステップ203において、前記アクセスパラメータに対応するデータブロックが完全でない第1データブロックまたは完全でない第2データブロックを含むのであれば、前記データブロックのデータを前記オフチップメモリから読み取ることを禁止する。
【0060】
実施例1の行列記憶方法を用いてオフチップメモリに記憶される行列に関して、アクセスされるとき、ロードされるデータブロックのサイズは、ある程度要求される。すなわち、アクセスされるデータブロックは、完全な第1データブロックまたは完全な第2データブロック(第3データブロックの一部のみを含んでもよい)を含まなければならない。アクセスされたデータブロックが完全でない第1データブロックまたは完全でない第2データブロックを含むのであれば、データブロックをオフチップメモリからロードすることを禁止する。
【0061】
以下、行列アクセスの全体的なプロセスについて例示的に説明する。
【0062】
NPUが行列にアクセスする必要がある場合、DMAコントローラは、行列に対するアクセス要求を受信する。このアクセス要求は、(行列の長さn、幅m、先頭アドレスbase_addr)などの行列の情報を含み、(データブロックの左上隅要素の位置インデックス(m_start,n_start)、データブロックの右下隅要素の位置インデックス(m_end-1,n_end-1)などのアクセスすべきデータブロックの情報をさらに含み、さらに、(blk_m,blk_n)などの分割粒度の情報を含む。この分割粒度の情報は、第1データブロックの長さおよび幅の情報として理解できる。上記情報は、いずれもアクセスパラメータとして理解できる。アクセスパラメータにより、行列内のアクセスされるデータブロックが決定される。
【0063】
その後、DMAコントローラは、アクセスパラメータが要件を満たすか、すなわち、アクセスパラメータに対応するデータブロックが、完全な第1データブロックまたは完全な第2データブロックを含むかを判断する。具体的には、m_start%blk_m==0、n_start%blk_n==0、m_end%blk_m==0、または、m_end==m、n_end%blk_n==0、または、n_end==nが成立するか否かを判断する。一般に、blk_mおよびblk_nは、ハードウエア回路による判断を容易にするように2のべき乗に設定される。上記式が成り立つ場合は、アクセスパラメータが要件を満たすことを示し、逆の場合に、要件を満たさないことを示す。
【0064】
アクセスパラメータが要件を満たす場合、データブロックへのアクセスが可能となる。アクセスパラメータが要件を満たさない場合、エラー通知が返される。
【0065】
データブロックへのアクセスを行う場合、現在の処理対象のデータブロックの種類とパラメータは、cur_mとcur_nとから決定される。cur_mの初期値は、m_startであり、cur_n初期値は、n_startである。現在の処理対象のデータブロックが第1データブロックまたは第2データブロックである場合、連続したアドレス空間にアクセスして、必要なデータを取得し、現在のデータブロックの処理が完了した後、現在の処理対象のデータブロックの種類に応じてcur_m、cur_nを更新することを繰り返す。現在の処理対象のデータブロックが第3データブロックである場合には、必要なデータを取得するには、複数のアドレスにアクセスする必要がある。これで、データブロックへのアクセスが完了し、全体のフローが終了する。
図9は、行列アクセスの全体的なプロセスの一例を示す。
【0066】
なお、本願の行列アクセス方法に関する実施形態は、実施例1における行列アクセスに関する説明を参照し、同様の効果を奏することができるため、重複を避けるため、ここではその説明を省略する。
【0067】
本願の上記実施例は、以下の利点または有益な効果を有する。行列のデータブロックにアクセスする必要がある場合、アクセスパラメータに対応するデータブロックが、完全な第1データブロックまたは第2データブロックを含むのであれば、オフチップメモリの連続なアドレス空間から当該データブロックを読み取る。アクセスパラメータに対応するデータブロックが、完全でない第1データブロックまたは第2データブロックを含むのであれば、オフチップメモリの連続なアドレス空間から当該データブロックを読み取ることを禁止する。上記の技術手段の採用によれば、オフチップメモリに連続して記憶されるデータブロックを完全に読み取ることができ、アクセスされるデータのアドレス空間における連続性を向上させることができる。以上のように、本願による上記実施例によれば、行列処理効率を向上させることができる。
【0068】
本願は、行列記憶装置をさらに提供する。
図10に示すように、行列記憶装置300は、所定のN行×M列(前記N、Mの少なくとも一方が1より大きい)の分割粒度にしたがって行列を、少なくとも一つのN行×M列の第1データブロックを含み、前記行列の列数が前記Mの整数倍でなければ、さらに少なくとも一つのN行×P(前記Mより小さい)列でかつ隣接する前記第1データブロックとは行が揃う第2データブロックを含む複数のデータブロックに分割するための分割モジュール301と、各前記第1データブロックのデータをオフチップメモリに連続して記憶し、かつ各前記第2データブロックのデータを前記オフチップメモリに連続して記憶するための第1記憶モジュール302とを含む。
【0069】
選択可能に、前記行列の行数が前記Nの整数倍でなければ、前記複数のデータブロックは、さらに少なくとも一つのL(前記Nより小さい)行×S列の第3データブロックを含む。
【0070】
選択可能に、前記第3データブロックの数が1であり、前記Sが前記行列の列数に等しい。
【0071】
選択可能に、行列記憶装置300は、各前記第3データブロックのデータを前記オフチップメモリに連続して記憶するための第2記憶モジュールをさらに含む。
【0072】
選択可能に、前記オフチップメモリが複数の記憶チャネルを含むのであれば、前記分割粒度は、単一記憶チャネルの記憶粒度の整数倍である。
【0073】
本願による行列記憶装置300は、上記行列記憶方法の実施例における行列記憶装置によって実現される各プロセスを実現可能であり、かつ同じ有益な効果を奏することもできるので、重複を避けるためにここではその説明を省略する。
【0074】
本願は、上記行列記憶装置300に記憶されている行列へアクセスするための行列アクセス装置をさらに提供する。
図11に示すように、行列アクセス装置400は、前記行列のアクセスパラメータを含む前記行列へのアクセス要求を受信するための受信モジュール401と、前記アクセスパラメータに対応するデータブロックが完全な第1データブロックまたは完全な第2データブロックを含むのであれば、前記データブロックのデータをオフチップメモリから読み取るための読み取りモジュール402と、前記アクセスパラメータに対応するデータブロックが完全でない第1データブロックまたは完全でない第2データブロックを含むのであれば、前記データブロックのデータを前記オフチップメモリから読み取ることを禁止するための制御モジュール403とを含む。
【0075】
本願の実施例に基づき、本願は、電子機器および読み取り可能な記憶媒体をさらに提供する。
【0076】
図12は、本願の実施例に係る行列記憶方法に基づく電子機器のブロック図である。電子機器は、ラップトップコンピュータ、デスクトップコンピュータ、ワークステーション、パーソナルデジタルアシスタント、サーバ、ブレードサーバ、メインフレームコンピュータ、および他の適切なコンピュータなどの様々な形態のデジタルコンピュータを表すことが意図される。電子機器は、また、パーソナルデジタルプロセシング、セルラー電話、スマートフォン、ウェアラブルデバイス、および他の同様のコンピューティングデバイスなど、様々な形態のモバイルデバイスを表してもよい。本明細書に示される構成要素、それらの接続および関係、並びにそれらの機能は、単なる例であり、本明細書に記載および/または特許請求される本願の実施を限定することを意図しない。
【0077】
図12に示すように、当該電子機器は、1つまたは複数のプロセッサ501と、メモリ502と、各構成要素を接続するための、高速インターフェースと低速インターフェースとを含むインターフェースとを含む。各構成要素は、異なるバスで互いに接続され、共通のマザーボード上に実装されてもよいし、必要に応じてほかの形態で実装されてもよい。プロセッサは、インターフェースに結合されたディスプレイデバイスなどの外部入出力装置上にGUIのグラフィカル情報を表示するために、メモリ内またはメモリ上に記憶された指令を含む、電子機器内で実行される指令を処理できる。他の実施形態では、複数のプロセッサおよび/または複数のバスが、必要に応じて、複数のメモリとともに使用されてもよい。また、複数の電子機器が接続され、各機器が必要な動作の一部を提供するようにしてもよい(たとえば、サーバアレイ、ブレードサーバ群、マルチプロセッサシステムとする)。
図12では、1つのプロセッサ501を例に挙げている。
【0078】
メモリ502は、本願において提供される非一時的コンピュータ読み取り可能な記憶媒体である。前記メモリには、少なくとも1つのプロセッサによって実行可能な指令が格納され、本願において提供される行列記憶方法を前記少なくとも1つのプロセッサに実行させる。本願の非一時的コンピュータ読み取り可能な記憶媒体には、本願において提供される行列記憶方法をコンピュータに実行させるためのコンピュータ指令が格納されている。
【0079】
メモリ502は、非一時的コンピュータ読み取り可能な記憶媒体として機能し、非一時的ソフトウェアプログラム、非一時的コンピュータ実行可能プログラム、および、本願の実施例における行列記憶方法に対応するプログラム指令/モジュール(たとえば、
図10に示される分割モジュール301、第1記憶モジュール302)などのモジュールを記憶するために使用される。プロセッサ501は、メモリ502に格納された非一時的ソフトウェアプログラム、指令、モジュールを実行することにより、サーバの各種の機能アプリケーションやデータ処理を実行し、すなわち、上述した方法実施例における行列記憶方法を実現する。
【0080】
メモリ502は、オペレーティングシステム、少なくとも1つの機能に必要なアプリケーションを記憶することができるプログラム記憶領域と、行列記憶方法に基づく電子機器の使用に応じて作成されたデータ等を記憶することができるデータ記憶領域とを含むことができる。さらに、メモリ502は、高速ランダムアクセスメモリを含んでもよく、また、少なくとも1つの磁気ディスク記憶装置、フラッシュメモリデバイス、または他の非一時的固体記憶デバイスなどの、非一時的メモリを含んでもよい。いくつかの実施形態において、メモリ502は、任意選択で、プロセッサ501に対してリモートに配置されたメモリを含んでもよい。これらのリモートメモリは、行列記憶方法の電子機器にネットワークを介して接続されてもよい。上記ネットワークの例としては、インターネット、イントラネット、ローカルエリアネットワーク、移動体通信ネットワーク、およびこれらの組み合わせが挙げられるが、これらに限定されない。
【0081】
行列記憶方法の電子機器は、入力装置503と出力装置504とをさらに備えてもよい。プロセッサ501、メモリ502、入力装置503、出力装置504は、バスまたはその他の方式で接続されてもよいが、
図12ではバスで接続されている例を示している。
【0082】
入力装置503は、数字または文字情報の入力を受信し、タッチスクリーン、キーパッド、マウス、トラックパッド、タッチパッド、ポインティングスティック、1つ以上のマウスボタン、トラックボール、ジョイスティックなどの入力装置のような、行列記憶方法の電子機器のユーザ設定および機能制御に関するキー信号入力を生成することができる。出力装置504は、ディスプレイ装置、補助照明装置(たとえば、LED)、および触覚フィードバック装置(たとえば、振動モータ)などを含んでもよい。当該表示装置は、液晶ディスプレイ(LCD)、発光ダイオード(LED)ディスプレイ、およびプラズマディスプレイを含むが、これらに限定されない。いくつかの実施形態では、表示装置は、タッチスクリーンであってもよい。
【0083】
図13は、本願の実施例に係る行列アクセス方法に基づく電子機器のブロック図である。電子機器は、ラップトップコンピュータ、デスクトップコンピュータ、ワークステーション、パーソナルデジタルアシスタント、サーバ、ブレードサーバ、メインフレームコンピュータ、および他の適切なコンピュータなどの様々な形態のデジタルコンピュータを表すことが意図される。電子機器は、また、パーソナルデジタルプロセシング、セルラー電話、スマートフォン、ウェアラブルデバイス、および他の同様のコンピューティングデバイスなど、様々な形態のモバイルデバイスを表してもよい。本明細書に示される構成要素、それらの接続および関係、並びにそれらの機能は、単なる例であり、本明細書に記載および/または特許請求される本願の実施を限定することを意図しない。
【0084】
図13に示すように、当該電子機器は、1つまたは複数のプロセッサ601と、メモリ602と、各構成要素を接続するための、高速インターフェースと低速インターフェースとを含むインターフェースとを含む。各構成要素は、異なるバスで互いに接続され、共通のマザーボード上に実装されてもよいし、必要に応じてほかの形態で実装されてもよい。プロセッサは、インターフェースに結合されたディスプレイデバイスなどの外部入出力装置上にGUIのグラフィカル情報を表示するために、メモリ内またはメモリ上に記憶された指令を含む、電子機器内で実行される指令を処理できる。他の実施形態では、複数のプロセッサおよび/または複数のバスが、必要に応じて、複数のメモリとともに使用されてもよい。また、複数の電子機器が接続され、各機器が必要な動作の一部を提供するようにしてもよい(たとえば、サーバアレイ、ブレードサーバ群、マルチプロセッサシステムとする)。
図13では、1つのプロセッサ601を例に挙げている。
【0085】
メモリ602は、本願において提供される非一時的コンピュータ読み取り可能な記憶媒体である。前記メモリには、少なくとも1つのプロセッサによって実行可能な指令が格納され、本願において提供される行列アクセス方法を前記少なくとも1つのプロセッサに実行させる。本願の非一時的コンピュータ読み取り可能な記憶媒体には、本願において提供される行列アクセス方法をコンピュータに実行させるためのコンピュータ指令が格納されている。
【0086】
メモリ602は、非一時的コンピュータ読み取り可能な記憶媒体として機能し、非一時的ソフトウェアプログラム、非一時的コンピュータ実行可能プログラム、および、本願の実施例における行列アクセス方法に対応するプログラム指令/モジュール(たとえば、
図11に示される受信モジュール401、読み取りモジュール402および制御モジュール403)などのモジュールを記憶するために使用される。プロセッサ601は、メモリ602に格納された非一時的ソフトウェアプログラム、指令、モジュールを実行することにより、サーバの各種の機能アプリケーションやデータ処理を実行し、すなわち、上述した方法実施例における行列アクセス方法を実現する。
【0087】
メモリ602は、オペレーティングシステム、少なくとも1つの機能に必要なアプリケーションを記憶することができるプログラム記憶領域と、行列アクセス方法に基づく電子機器の使用に応じて作成されたデータ等を記憶することができるデータ記憶領域とを含むことができる。さらに、メモリ602は、高速ランダムアクセスメモリを含んでもよく、また、少なくとも1つの磁気ディスク記憶装置、フラッシュメモリデバイス、または他の非一時的固体記憶デバイスなどの、非一時的メモリを含んでもよい。いくつかの実施形態において、メモリ602は、任意選択で、プロセッサ601に対してリモートに配置されたメモリを含んでもよい。これらのリモートメモリは、行列アクセス方法の電子機器にネットワークを介して接続されてもよい。上記ネットワークの例としては、インターネット、イントラネット、ローカルエリアネットワーク、移動体通信ネットワーク、およびこれらの組み合わせが挙げられるが、これらに限定されない。
【0088】
行列アクセス方法の電子機器は、入力装置603と出力装置604とをさらに備えてもよい。プロセッサ601、メモリ602、入力装置603、出力装置604は、バスまたはその他の方式で接続されてもよいが、
図12ではバスで接続されている例を示している。
【0089】
入力装置603は、数字または文字情報の入力を受信し、タッチスクリーン、キーパッド、マウス、トラックパッド、タッチパッド、ポインティングスティック、1つ以上のマウスボタン、トラックボール、ジョイスティックなどの入力装置のような、行列アクセス方法の電子機器のユーザ設定および機能制御に関するキー信号入力を生成することができる。出力装置604は、ディスプレイ装置、補助照明装置(たとえば、LED)、および触覚フィードバック装置(たとえば、振動モータ)などを含んでもよい。当該表示装置は、液晶ディスプレイ(LCD)、発光ダイオード(LED)ディスプレイ、およびプラズマディスプレイを含むが、これらに限定されない。いくつかの実施形態では、表示装置は、タッチスクリーンであってもよい。
【0090】
ここで説明するシステムおよび技術の様々な実施形態は、デジタル電子回路システム、集積回路システム、特定用途向けASIC(特定用途向け集積回路)、コンピュータハードウェア、ファームウェア、ソフトウェア、および/またはそれらの組み合わせにおいて実現される。これらの様々な実施形態は、1つまたは複数のコンピュータプログラムで実施することを含む。当該1つまたは複数のコンピュータプログラムは、少なくとも1つのプログラマブルプロセッサを含むプログラマブルシステム上で実行および/または解釈可能である。当該プログラマブルプロセッサは、専用または汎用のプログラマブルプロセッサであり、記憶システム、少なくとも1つの入力装置、および少なくとも1つの出力装置からデータおよび指令を受信し、当該記憶システム、当該少なくとも1つの入力装置、および当該少なくとも1つの出力装置にデータおよび指令を伝送することができる。
【0091】
これらのコンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、またはコードとも呼ばれる)は、プログラマブルプロセッサの機械指令を含み、これらのコンピュータプログラムは、プロセスおよび/またはオブジェクト指向プログラミング言語、および/またはアセンブリ/機械言語で実施される。本明細書で使用される「機械読み取り可能な媒体」および「コンピュータ読み取り可能な媒体」は、機械読み取り可能な信号としての機械指令を受信する機械読み取り可能な媒体を含む、プログラマブルプロセッサに機械指令および/またはデータを提供するための任意のコンピュータプログラム製品、機器、および/または装置(たとえば、磁気ディスク、光学ディスク、メモリ、プログラマブル論理デバイス(PLD))を指す。「機械読み取り可能な信号」という用語は、機械指令および/またはデータをプログラマブルプロセッサに提供するために使用される任意の信号を指す。
【0092】
ユーザとのやり取りを提供するために、ここに記載されたシステムおよび技術は、ユーザに情報を表示するための表示装置(たとえば、CRT(陰極線管)またはLCD(液晶ディスプレイ)モニタ)と、ユーザがコンピュータに入力を提供することができるキーボードおよびポインティングデバイス(たとえば、マウスまたはトラックボール)とを有するコンピュータ上で実施される。他の種類の装置を使用して、ユーザとのやり取りを提供してもよい。たとえば、ユーザに提供されるフィードバックは、任意の形態の感覚フィードバック(たとえば、視覚フィードバック、聴覚フィードバック、または触覚フィードバック)であってもよい。任意の形態(音入力、音声入力、または触覚入力)でユーザからの入力を受信してもよい。
【0093】
ここに記載のシステムおよび技術は、バックエンド構成要素を含むコンピューティングシステム(たとえば、データサーバとして)、またはミドルウェア構成要素を含むコンピューティングシステム(たとえば、アプリケーションサーバ)、またはフロントエンド構成要素を含むコンピューティングシステム(たとえば、ユーザがここに記載のシステムおよび技術の実施形態とやり取りするグラフィカルユーザインターフェースまたはウェブブラウザを有するユーザコンピュータ)、またはそのようなバックエンド構成要素、ミドルウェア構成要素、またはフロントエンド構成要素の任意の組み合わせを含むコンピューティングシステムにおいて実施される。システムの構成要素は、任意の形式または媒体のデジタルデータ通信(たとえば、通信ネットワーク)によって互いに接続される。通信ネットワークとしては、たとえば、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、インターネット等が挙げられる。
【0094】
コンピュータシステムは、クライアントおよびサーバを含む。クライアントおよびサーバは、一般に、互いから離れており、通常、通信ネットワークを介してやりとりする。クライアントとサーバの関係は、それぞれのコンピュータ上で実行され、互いにクライアント-サーバ関係を有するコンピュータプログラムによって生成される。
【0095】
本願の実施例の技術的手段によれば、行列をオフチップメモリに記憶する前に、行列を所定の分割粒度で分割し、分割された第1データブロックと第2データブロック(第2データブロックが存在する場合)のデータをオフチップメモリに連続して記憶する。上記技術手段の採用により、データブロックを完全かつ連続的にオフチップメモリに書き込むことができ、行列のデータブロックへのアクセスが必要となると、連続してオフチップメモリに記憶されるデータブロックを完全に読み取ることができ、アクセスされるデータのアドレス空間における連続性が改善される。
【0096】
上記に示された様々な形態のフローが、ステップの順序変更、追加、または削除のために使用されることが理解されるべきである。たとえば、本願に記載された各ステップは、並列に実行されても、順次的に実行されても、異なる順序で実行されてもよいが、本願に開示された技術的解決手段の所望の結果を実現できる限り、本明細書に限定されない。
【0097】
上記の具体的な実施形態は、本願の保護範囲を制限するようには構成されない。当業者であれば、設計の要件やほかの要素に応じて、様々な修正、組み合わせ、サブ組み合わせ、置換を行うことが明らかである。本願の思想および原理に含まれるあらゆる変更、均等置換および改良等は、本願の範囲に含まれるものとする。