JP7020485B2 - 演算装置、演算方法及びプログラム - Google Patents
演算装置、演算方法及びプログラム Download PDFInfo
- Publication number
- JP7020485B2 JP7020485B2 JP2019525092A JP2019525092A JP7020485B2 JP 7020485 B2 JP7020485 B2 JP 7020485B2 JP 2019525092 A JP2019525092 A JP 2019525092A JP 2019525092 A JP2019525092 A JP 2019525092A JP 7020485 B2 JP7020485 B2 JP 7020485B2
- Authority
- JP
- Japan
- Prior art keywords
- matrix
- value
- columns
- rows
- unit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Theoretical Computer Science (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Complex Calculations (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
Description
例えば、特許文献1には、平均プーリングが実行される畳み込みニューラルネットワークの演算量を削減するための技術が示されている。特許文献1に記載の技術では、平均プーリングにおいて畳み込み層の出力の平均を求めることに基づいて、カーネルの要素毎に、当該要素と掛け合わされる入力値の総和を算出し、算出した総和とカーネルの要素との積を算出し、積の平均を算出する。
図1は、一実施形態に係る演算装置の機能構成を示す概略ブロック図である。図1に示すように、演算装置100は、通信部110と、表示部120と、操作入力部130と、記憶部180と、制御部190とを備える。記憶部180は、キャッシュメモリ部181と、主記憶部182とを備える。制御部190は、リスト生成部191と、演算実行部192と、メモリ管理部193とを備える。
但し、演算装置100が行う行列演算は、二次元の畳み込みに限定されない。演算装置100が行う行列演算は、要素値が値「0」である場合に演算の一部を省略可能ないろいろな演算であってよい。
以下では、畳み込みの演算子として「*」(アスタリスク)を用いる。また、スカラ積の演算子として「×」(クロス)を用いる。
表示部120は、例えば液晶パネル又はLED(Light Emitting Diode、発光ダイオード)パネル等の表示画面を備え、制御部190の制御に従って各種画像を表示する。例えば、演算装置100が二次元の畳み込みを用いて画像処理を行う場合、表示部120が、画像処理にて得られた画像を表示するようにしてもよい。また、演算装置100が二次元の畳み込みを用いて畳み込みニューラルネットワークを構築する場合、表示部120が畳み込みニューラルネットワークによる処理結果を表示するようにしてもよい。
操作入力部130は、例えばキーボード及びマウス等の入力装置を備え、ユーザ操作を受ける。例えば、操作入力部130が、演算装置100に対して処理の実行を指示するユーザ操作を受けるようにしてもよい。
主記憶部182は、演算装置100が備える主記憶装置を用いて構成されている。
キャッシュメモリ部181は、CPU(Central Processing Unit、中央処理装置)などの処理装置が主記憶装置にアクセスすることによるメモリアクセス時間を短くするために設けられている。
例えば、キャッシュメモリ部181に格納されていないデータにCPU等がアクセスする際、アクセス対象のデータが主記憶部182から読み出され、キャッシュメモリ部181へブロック単位で書き込まれる。また、主記憶部182からのデータをキャッシュメモリ部181に移動する際、このデータの格納領域を確保するために、例えばLRU(Least Recently Used)など所定の入替方式に従ってキャッシュメモリ部181上のデータがブロック単位で選択される。選択されたデータは主記憶部182へ書き込まれ、キャッシュメモリ部181におけるこのデータの記憶領域が解放される。
制御部190が演算結果の書き込みを繰り返す場合、キャッシュメモリ部181が書き込み対象の行列を保持している。これにより、制御部190が主記憶部182に演算結果を書き込む場合よりもメモリアクセス時間を短くすることができる。
リスト生成部191は、演算実行部192が二次元の畳み込みに用いるためのリストを生成する。このリストを要素リストとも称する。
演算実行部192は、リスト生成部191が生成した要素リストを用いて二次元の畳み込みを行う。
ここで、図2~図6を参照して、二次元の畳み込み及び要素リストについて説明する。
演算実行部192は、インプット行列910とカーネル920との畳み込みを行い、演算結果をアウトプット行列930に書き込む。
インプット行列910は、インプット行列910のうちカーネル920と同じ大きさの部分行列911とカーネル920との畳み込みを行ってアウトプット行列930の1つの要素の値を算出する。ここで、行列の大きさが同じであるとは、行列の行数及び列数のいずれも同じことである。
インプット行列910は、演算対象行列の例に該当する。カーネル920は、演算用行列の例に該当する。
図2の例の場合、部分行列911とカーネル920との畳み込みは式(1)のように表される。
図2の例では、演算実行部192は、アウトプット行列930の要素のうち、部分行列911の最左かつ最上の要素の位置の同じ位置の要素に演算結果を書き込むよう設定される。演算実行部192は、アウトプット行列930の第1行第1列の要素に演算結果の「7」を書き込む。
図3の例では、演算実行部192は、インプット行列910の部分行列911を1列ずつ右にずらした領域に設定しながら、図2を参照して説明したように部分行列911とカーネル920との畳み込みを繰り返す。部分行列911がインプット行列910の右端に到達すると、演算実行部192は、部分行列911の領域を1行下の左端から右端へとずらしながら、部分行列911とカーネル920との畳み込みを繰り返す。演算実行部192は、部分行列911の設定領域を左から右、上から下へとずらし、設定領域が右下端に到達するまで部分行列911の設定を繰り返す。演算実行部192は、部分行列911を設定する毎に部分行列911とカーネル920との畳み込みを繰り返す。これにより、演算実行部192は、インプット行列910全体に対応するアウトプット行列930を算出する。
図4の例で、演算実行部192は、C個のインプット行列910及び、C×K個のカーネル920を用いて二次元の畳み込みを行い、演算結果をK個のアウトプット行列930に書き込んでいる。C個のインプット行列910は、いずれも同じ大きさの行列である。C×K個のカーネル920は、いずれも同じ大きさの行列である。K個のアウトプット行列930は、いずれも同じ大きさの行列である。
すなわち、iを1≦i≦Kの正整数として、演算実行部192は、インプット行列910iとカーネル920i-1との畳み込み、インプット行列9102とカーネル920i-2との畳み込み、・・・、インプット行列910Cとカーネル920i-Cとの畳み込みを行う。演算実行部192は、演算結果を要素の位置毎に合計してアウトプット行列930iを算出する。
このように、演算実行部192が複数のインプット行列910及び複数のカーネル920を用いて畳み込みを行うようにしてもよい。特に、演算実行部192は、1つのインプット行列910と複数のカーネル920の各々との畳み込みを行う。
図6は、リスト生成部191が生成する要素リストの例を示す図である。図6では、図5の例におけるカーネル920に対してリスト生成部191が生成する要素リストの例を示している。
領域A11では、カーネル920の各要素の値が全て「0」である要素の位置については、その表示が除外されている。例えば、図5の4つのカーネル920のいずれでも、第1行第0列の要素値は「0」である。これに対応して、領域A11では、第1行第0列を表す「(1,0)」は示されていない。
例えば、図5で一番上のカーネル920(識別番号0のカーネル920)の第0行第0列の要素値は「0」である。この要素は、領域A12では表示されていない。
一方、図5で上から2番目のカーネル920(識別番号1のカーネル920)の第0行第0列の要素値は「1」である。これに対応して、図6の要素リストの一番上の行(第0行第0列に対応する行)の領域A12では、カーネル920の識別番号「1」と、要素値「1」とを組み合わせた「(1,1)」が示されている。
また、図5で上から3番目のカーネル920(識別番号2のカーネル920)の第0行第1列の要素値は「2」である。これに対応して、図6の要素リストの上から2番目の行(第0行第1列に対応する行)の領域A12では、カーネル920の識別番号「2」と、要素値「2」とを組み合わせた「(2,2)」が示されている。
このようにリスト生成部191は、複数のカーネル920の要素の位置毎に要素値を示す要素リストを生成する。また、リスト生成部191は、複数のカーネル920の要素の位置毎に、要素値が値「0」以外の要素を示す要素リストを生成する。
特に、メモリ管理部193は、リスト生成部191が生成した要素リストを参照して、インプット行列910の要素のうち当該要素の演算の相手となる要素の値に0以外の値が含まれている要素をロードする。一方、メモリ管理部193は、インプット行列910の要素のうち当該要素の演算の相手となる要素の値が全て0の要素のロードを抑制する。
すなわち、メモリ管理部193は、インプット行列910が有する複数の要素のうち、カーネル920における演算対象の各要素に値「0」以外の要素が含まれる、要素の要素値をロードする。また、メモリ管理部193は、インプット行列910が有する複数の要素のうち、カーネル920における演算対象の各要素が全て値「0」である、要素の要素値のロードを抑制する。
また、メモリ管理部193は、少なくとも演算実行部192が1つの前記部分行列に対する演算を開始してから終了するまで、アウトプット行列930をキャッシュメモリ部181に保持する。
これにより、メモリ管理部193は、演算実行部192による演算結果をアウトプット行列930に反映させる際のメモリアクセス時間を短くすることができる。
メモリ管理部193の機能はCPUを用いて実現されていてもよいし、例えばメモリアクセス専用のプロセッサなどCPU以外の装置を用いて構成されていてもよい。
図7は、リスト生成部191が要素リストを生成する処理手順の例を示すフローチャートである。リスト生成部191は、例えば演算装置100にカーネル920が与えられると図7の処理を行うなどのように、図7の処理を予め行っておく。
(ステップS101)
リスト生成部191は、要素リストのテンプレートを生成する。
ステップS101の後、ステップS102へ進む。
図8に示す領域A21は、図6の領域A11に対応しており、要素の位置が行と列との組み合わせで特定されている。図6の例では、第1行第0列のようにカーネル920の要素の値が全て「0」である要素の位置に対応する行が削除されている。これに対し、図8に示すテンプレートの段階では、全ての行と列との組み合わせが示されている。
図8に示す領域A22は、図6の領域A12に対応しており、カーネル920の識別番号と要素値との組み合わせを格納する領域である。
図7のステップS101の後、リスト生成部191は、カーネル920の要素の位置毎(すなわち、行毎かつ列毎)に処理を行うループL11を開始する。ループL11で処理対象となっている位置を対象位置と称する。
ステップS102の後、ステップS103へ進む。
(ステップS103)
リスト生成部191は、カーネル920毎に処理を行うループL12を開始する。ループL12で処理対象となっているカーネル920を対象カーネルと称する。
ステップS103の後、ステップS104へ進む。
リスト生成部191は、対象カーネルの対象位置の要素値が値「0」であるか否かを判定する。
要素値が値「0」であると判定した場合(ステップS104:YES)、処理はステップS106へ進む。一方、要素値が値「0」ではないと判定した場合(ステップS104:NO)、処理はステップS105へ進む。
リスト生成部191は、対象カーネルのカーネルIDと、対象カーネルの対象位置の要素値との組み合わせを、要素リストのテンプレートの対象位置に対応する行の領域A22に書き込む。該当する行に既にカーネルIDと要素値との組み合わせが書き込まれている場合、リスト生成部191は、既に書き込まれている組み合わせを消さずに、対象カーネルのカーネルIDと、対象カーネルの対象位置の要素値との組み合わせを追加する。
ステップS105の後、処理はステップS106へ進む。
リスト生成部191は、ループL12の終端処理を行う。具体的には、リスト生成部191は、全てのカーネル920についてループL12の処理を行ったか否かを判定する。
未処理のカーネル920が残っていると判定した場合は、リスト生成部191は、ステップS103へ戻り、引き続き残りのカーネル920についてループL12の処理を行う。一方、全てのカーネル920についてループL12の処理を行ったと判定した場合は、リスト生成部191は、ループL12を終了してステップS107へ進む。
リスト生成部191は、ループL11の終端処理を行う。具体的には、リスト生成部191は、カーネル920における全ての要素の位置についてループL11の処理を行ったか否かを判定する。未処理の位置が残っていると判定した場合は、リスト生成部191は、ステップS102へ戻り、引き続き残りの位置についてループL11の処理を行う。一方、全ての位置についてループL11の処理を行ったと判定した場合は、リスト生成部191は、ループL11を終了してステップS108へ進む。
リスト生成部191は、要素リストのテンプレートの行のうち、領域A22にカーネルIDと要素値との組み合わせが1つも示されていない行を削除する。領域A22にカーネルIDと要素値との組み合わせが1つも示されていない行が複数ある場合は、リスト生成部191は、全ての該当行を削除する。この処理の結果、要素リストが完成する。
ステップS108の後、図7の処理が終了する。
図9では、1つのインプット行列910に対する処理の例を示している。インプット行列910が複数ある場合は、演算装置100は、図9のステップS202~S213の処理を、インプット行列910の数だけ繰り返す。
メモリ管理部193は、アウトプット行列930をキャッシュメモリ部181に格納する。具体的には、メモリ管理部193は、キャッシュメモリ部181にアウトプット行列930の個数分の領域を確保し、各アウトプット行列930の各要素の値を値「0」に初期設定する。
ステップS201の後、処理はステップS202へ進む。
制御部190は、図3を参照して説明したように部分行列911毎に処理を行うループL21を開始する。ループL21で処理対象となっている部分行列911を対象部分行列と称する。
ステップS202の後、処理はステップS203へ進む。
演算実行部192は、インプット行列910における対象部分行列の位置を算出する。例えば、演算実行部192は、部分行列911の最左最上の要素(第0行第0列の要素)のインプット行列910における位置を算出する。
ステップS203の後、処理はステップS204へ進む。
制御部190は、対象部分行列の要素の位置毎に処理を行うループL22を開始する。ループL22で処理対象となっている位置を対象位置と称する。
ステップS204の後、処理はステップS205へ進む。
(ステップS205)
演算実行部192は、要素リストの行のうち処理対象位置に対応する行に、カーネルIDと要素値との組み合わせが示されているか否かを判定する。
カーネルIDと要素値との組み合わせが示されていると判定した場合(ステップS205:YES)、処理はステップS206へ進む。一方、カーネルIDと要素値との組み合わせが示されていないと判定した場合(ステップS205:NO)、処理はステップS212へ進む。
メモリ管理部193は、インプット行列910の部分行列911の処理対象位置の要素値をロードする。
ステップS206の後、処理はステップS207へ進む。
(ステップS207)
演算実行部192は、ステップS206で得られた要素値と、要素リストの該当行に示されているカーネル920の要素値との積を算出する。
要素リストの該当行にカーネルIDと要素値との組み合わせが複数示されている場合、演算実行部192は、未だステップS207の処理を行っていない組み合わせを1つ選択する。そして、演算実行部192は、選択した組み合わせに示される要素値を用いてステップS207の処理を行う。
演算実行部192は、ステップS207で得られた積をアウトプット行列930の要素値に加算する。
具体的には、演算実行部192は、ステップS203で算出したインプット行列910における部分行列911の位置に基づいて、この位置に対応するアウトプット行列930の要素の位置を算出する。メモリ管理部193は、キャッシュメモリ部181にアクセスして、ステップS207で要素リストから選択されたカーネルIDにて識別されるアウトプット行列930の要素の値のうち、演算実行部192が算出した位置の要素値を読み出す。演算実行部192は、メモリ管理部193が読み出した要素値に、ステップS207で得られた積を加算する。メモリ管理部193は、演算実行部192が算出した和を、値を読み出した要素に上書きする。
ステップS208の後、処理はステップS209へ進む。
演算実行部192は、要素リストの行のうち処理対象位置に対応する行に、未処理のカーネルIDと要素値との組み合わせが残っているか否かを判定する。
未処理の組み合わせが残っていると判定した場合(ステップS209:YES)、演算実行部192は、ステップS210へ進む。一方、未処理の組み合わせが残っていないと判定した場合(ステップS209:NO)、演算実行部192は、ステップS212へ進む。
演算実行部192は、ステップS209で未処理と判定した組み合わせの要素値と、要素リストの該当行に示されているカーネル920の要素値との積を算出する。
ステップS209で未処理と判定した組み合わせが複数ある場合、演算実行部192は、いずれか1つの組み合わせを選択する。そして、演算実行部192は、選択した組み合わせに示される要素値を用いてステップS210の処理を行う。
ステップS210の後、処理はステップS211へ進む。
演算実行部192は、ステップS210で得られた積をアウトプット行列930の要素値に加算する。
具体的な処理については、ステップS208で説明した具体的処理について「ステップS207」の記載を「ステップS210」に読み替える。
ステップS211の後、処理はステップS209へ戻る。
制御部190は、ループL22の終端処理を行う。具体的には、制御部190は、カーネル920の要素の全ての位置についてループL22の処理を行ったか否かを判定する。未処理の位置が残っていると判定した場合は、ステップS204へ戻り、引き続き残りの位置についてループL22の処理を行う。一方、全ての位置についてループL22の処理を行ったと判定した場合は、制御部190は、ループL22を終了してステップS213へ進む。
制御部190は、ループL21の終端処理を行う。具体的には、制御部190は、ループL21で処理対象となる全ての部分行列911についてループL21の処理を行ったか否かを判定する。未処理の部分行列911が残っていると判定した場合は、制御部190は、ステップS202へ戻り、引き続き残りの部分行列911についてループL21の処理を行う。一方、全ての部分行列911についてループL21の処理を行ったと判定した場合は、制御部190は、ループL21を終了してステップS214へ進む。
メモリ管理部193は、アウトプット行列930をキャッシュメモリ部181から主記憶部182へ移動させる(スワップアウトする)。あるいはメモリ管理部193が、ステップS214の段階では特に処理を行わず、キャッシュメモリ部181の記憶容量が不足した段階でアウトプット行列930をキャッシュメモリ部181から主記憶部182へ移動させるようにしてもよい。
ステップS214の後、図9の処理が終了する。
演算実行部192は、インプット行列910のうちカーネル920と同じ行数及び列数の部分行列911の要素値と、要素リストに示される要素値との畳み込みを行う。
演算実行部192が、複数のカーネル920の要素の位置毎に要素値を示す要素リストを用いて畳み込みを行うことで、部分行列911の要素と複数のカーネル920それぞれの要素との乗算を行うことができる。これにより、部分行列911の要素値の1回のロードによって複数のカーネル920の要素との乗算を行うことができ、部分行列911の要素値のダウンロード回数を低減させることができる。
演算実行部192が、複数のカーネル920の要素の位置毎に、要素値が0以外の要素を示す要素リストを用いる。これにより、カーネル920の要素値が値「0」の場合に部分行列911の要素とカーネル920の要素との乗算、及び、乗算の結果をアウトプット行列930に反映させるためのアクセスを抑制することができる。この点で、演算回数及びメモリアクセスの回数を低減させることができる。
特に、演算装置100では計算回数だけでなくメモリアクセス回数も低減させることができる点で、畳み込みの演算に要する時間をより低減させることができる。
図10では、例えば、1コアのベクトル計算機等で、計算時間とメモリアクセス時間との釣り合いが取れ、共に時間T11である場合と、計算時間及びメモリアクセス時間のいずれも短縮されている場合との例が示されている。
これに対し、図10の例のように、計算時間が時間T12に短縮され、メモリアクセス時間が時間T13に短縮されている場合、計算時間、メモリアクセス時間共に短縮する。これにより、より大きな時間短縮効果が見込まれる。
具体的には、演算実行部192が、インプット行列910における部分行列911の位置、及び、要素リストの行毎に行及び列で示される位置に基づいて、インプット行列910の要素のうちロード対象の要素を特定する。メモリ管理部193は、演算実行部192が特定した要素の値をロードする。上記のように要素リストには、値が「0」以外の要素が1つ以上ある位置のみが記載されている。このため、メモリ管理部193は、インプット行列910の要素のうち当該要素の演算の相手となる要素の値が全て「0」の要素のロードを抑制する。
インプット行列910の要素のうち当該要素の演算の相手となる要素の値が全て「0」の要素のロードを抑制する点で、演算装置100によれば、メモリアクセスの回数を低減させることができる。
これにより、メモリ管理部193は、演算実行部192による演算結果をアウトプット行列930に反映させる際のメモリアクセス時間を短くすることができる。
図11は、演算装置100が、インプット行列910からの要素値の1回のロードで複数の部分行列911に対する処理を行う場合の、複数の部分行列911の配置例を示す図である。図11では、3つの部分行列911が示されており、符号911a、911b、911cを付すことでこれらが区別されている。図の左から1列ずつずれて、部分行列911a、911b、911cの順で配置されている。
メモリ管理部193が、このように複数の部分行列911に共通の要素の値をロードすると、演算実行部192は、ロードされた値を用いてこれら複数の部分行列911の各々についての計算を行う。
メモリ管理部193がロードした要素値は、部分行列911bでは第0行第1列(最上行真ん中の列)の要素値に該当する。そこで、演算実行部192は、この要素値と、カーネル920の各々の第0行第1列の要素値との乗算を行い、得られた積をアウトプット行列930の該当する要素の値に加算する。
メモリ管理部193がロードした要素値は、部分行列911cでは第0行第0列(最上行最左列)の要素値に該当する。そこで、演算実行部192は、この要素値と、カーネル920の各々の第0行第0列の要素値との乗算を行い、得られた積をアウトプット行列930の該当する要素の値に加算する。
これにより、演算装置100では、メモリアクセス回数を低減させることができる。
図12は、実施形態に係るコンピュータの構成例を示す概略ブロック図である。図12に示すコンピュータ50は、CPU51と、通信装置52と、表示装置53と、入力装置54と、主記憶装置55と、キャッシュメモリ装置56と、を備える。通信装置52は、他の装置と通信を行う。表示装置53は、各種画像を表示する。入力装置54は、ユーザ操作を受ける。主記憶装置55は、各種情報を記憶する。キャッシュメモリ装置56は、CPU等が主記憶装置55へアクセスするメモリアクセス時間を低減させるために設けられた主記憶装置55よりも高速の記憶装置であり、CPU等での使用が予想される情報を一時的に記憶する。CPU51は、主記憶装置55及びキャッシュメモリ装置56のうち何れか一方又は両方からプログラムを読み出して実行することで、コンピュータ50の各部を制御して各種処理を実行する。
図13は、本発明に係る演算装置の最小構成の第一例を示す図である。図13に示す演算装置10は、リスト生成部11と、演算実行部12とを備える。
かかる構成にて、リスト生成部11は、行数及び列数が等しい複数の演算用行列が有する要素(第1の要素)の演算用行列における位置毎に、要素値を示すリストを生成する。演算実行部12は、演算対象行列のうち演算用行列と同じ行数及び列数の部分行列が有する要素(第2の要素)の要素値と、リストに示される要素(第1の要素)の要素値とに基づく演算を行う。
かかる構成にて、リスト生成部21は、行数及び列数が等しい複数の演算用行列が有する要素(第1の要素)の演算用行列における位置毎に、要素値が値「0」以外である要素の要素値を示すリストを生成する。
演算実行部22は、演算対象行列のうち演算用行列と同じ行数及び列数の部分行列が有する要素(第2の要素)の要素値と、リストに示される要素とに基づく演算を行う。
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD-ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。また上記プログラムは、前述した機能の一部を実現するためのものであっても良く、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであっても良い。
11、21、191 リスト生成部
12、22、192 演算実行部
110 通信部
120 表示部
130 操作入力部
180 記憶部
181 キャッシュメモリ部
182 主記憶部
190 制御部
193 メモリ管理部
Claims (7)
- 行数が等しくかつ列数も等しい複数の第一行列が有する要素である各第1の要素の要素値を、前記第一行列における行と列との組み合わせによって特定される位置毎に示すリストを生成するリスト生成部と、
複数の前記第一行列の各々について、その第一行列が有する第1の要素と、第二行列のうち前記第一行列と同じ行数及び列数の部分行列が有する要素である第2の要素とのうち、前記第一行列における行と列との組み合わせによって特定される前記第1の要素の位置と、前記部分行列における行と列との組み合わせによって特定される前記第2の要素の位置とが同じ位置である、前記第1の要素の要素値と、前記第2の要素の要素値とを用いた演算を、前記リストから、前記第一行列における行と列との組み合わせを指定して読み出される前記第一行列毎の前記第1の要素の要素値を用いて行う演算実行部と、
を備える演算装置。 - 前記リスト生成部は、前記第一行列における行と列との組み合わせによって特定される位置毎に、値が0以外である前記第1の要素の前記要素値を示す前記リストを生成し、
前記演算実行部は、複数の前記第一行列の各々について、その第一行列が有する第1の要素と、前記部分行列が有する前記第2の要素とのうち、前記第一行列における行と列との組み合わせによって特定される前記第1の要素の位置と、前記部分行列における行と列との組み合わせによって特定される前記第2の要素の位置とが同じ位置である、前記第1の要素の要素値と、前記第2の要素の要素値とを用いた演算、かつ、前記第1の要素の要素値が0の場合に省略可能な演算を、前記リストから、前記第一行列における行と列との組み合わせを指定して読み出される前記第一行列毎の前記第1の要素の要素値を用いて行う、
請求項1に記載の演算装置。 - 前記リストを参照して、前記第二行列が有する複数の前記第2の要素のうち、演算対象の各第1の要素に0以外の前記要素値の前記第1の要素が含まれる前記第2の要素の前記要素値をロードし、前記演算対象の各第1の要素の前記要素値が全て0である前記第2の要素の前記要素値のロードを抑制するメモリ管理部を備え、
前記演算実行部は、複数の前記第一行列の各々について、その第一行列が有する第1の要素と、前記部分行列が有する前記第2の要素とのうち、前記第一行列における行と列との組み合わせによって特定される前記第1の要素の位置と、前記部分行列における行と列との組み合わせによって特定される前記第2の要素の位置とが同じ位置である、前記第1の要素の要素値と、前記第2の要素の要素値とを用いた演算、かつ、前記第1の要素の要素値が0の場合に省略可能な演算を、前記リストから、前記第一行列における行と列との組み合わせを指定して読み出される前記第一行列毎の前記第1の要素の要素値を用いて行う、
請求項1または請求項2に記載の演算装置。 - 主記憶装置を示す第1の階層と、前記第1の階層より高速の第2の階層とを有する記憶部を備え、
少なくとも1つの前記部分行列に対する演算を開始してから終了するまで、演算結果を格納する行列を前記第2の階層に保持する、
請求項1から3の何れか一項に記載の演算装置。 - 前記演算実行部は、前記第二行列が有する前記第2の要素のうち複数の部分行列に共通する前記第2の要素の前記要素値をロードした場合、ロードした前記要素値を用いて前記複数の部分行列の各々の前記演算を行う、
請求項1から4の何れか一項に記載の演算装置。 - 行数が等しくかつ列数も等しい複数の第一行列が有する要素である各第1の要素の要素値を、前記第一行列における行と列との組み合わせによって特定される位置毎に示すリストを生成し、
複数の前記第一行列の各々について、その第一行列が有する第1の要素と、第二行列のうち前記第一行列と同じ行数及び列数の部分行列が有する要素である第2の要素とのうち、前記第一行列における行と列との組み合わせによって特定される前記第1の要素の位置と、前記部分行列における行と列との組み合わせによって特定される前記第2の要素の位置とが同じ位置である、前記第1の要素の要素値と、前記第2の要素の要素値とを用いた演算を、前記リストから、前記第一行列における行と列との組み合わせを指定して読み出される前記第一行列毎の前記第1の要素の要素値を用いて行う
ことを含む演算方法。 - コンピュータに、
行数が等しくかつ列数も等しい複数の第一行列が有する要素である各第1の要素の要素値を、前記第一行列における行と列との組み合わせによって特定される位置毎に示すリストを生成し、
複数の前記第一行列の各々について、その第一行列が有する第1の要素と、第二行列のうち前記第一行列と同じ行数及び列数の部分行列が有する要素である第2の要素とのうち、前記第一行列における行と列との組み合わせによって特定される前記第1の要素の位置と、前記部分行列における行と列との組み合わせによって特定される前記第2の要素の位置とが同じ位置である、前記第1の要素の要素値と、前記第2の要素の要素値とを用いた演算を、前記リストから、前記第一行列における行と列との組み合わせを指定して読み出される前記第一行列毎の前記第1の要素の要素値を用いて行う
処理を実行させるプログラム。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017122481 | 2017-06-22 | ||
JP2017122481 | 2017-06-22 | ||
PCT/JP2018/010640 WO2018235357A1 (ja) | 2017-06-22 | 2018-03-16 | 演算装置、演算方法及びプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JPWO2018235357A1 JPWO2018235357A1 (ja) | 2019-12-26 |
JP7020485B2 true JP7020485B2 (ja) | 2022-02-16 |
Family
ID=64737098
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2019525092A Active JP7020485B2 (ja) | 2017-06-22 | 2018-03-16 | 演算装置、演算方法及びプログラム |
Country Status (3)
Country | Link |
---|---|
US (1) | US11580193B2 (ja) |
JP (1) | JP7020485B2 (ja) |
WO (1) | WO2018235357A1 (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018174930A1 (en) * | 2017-03-20 | 2018-09-27 | Intel Corporation | Systems, methods, and apparatuses for matrix add, subtract, and multiply |
KR20200082613A (ko) * | 2018-12-31 | 2020-07-08 | 에스케이하이닉스 주식회사 | 프로세싱 시스템 |
KR20210156554A (ko) * | 2020-06-18 | 2021-12-27 | 삼성전자주식회사 | 텐서 처리 방법, 가속기 및 이를 포함한 전자 장치 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006067521A (ja) | 2004-08-30 | 2006-03-09 | Kyocera Corp | 画像処理装置と方法、および画像撮像装置と方法 |
JP2014119949A (ja) | 2012-12-17 | 2014-06-30 | Nippon Hoso Kyokai <Nhk> | 超解像装置及びプログラム |
JP2015095259A (ja) | 2013-11-14 | 2015-05-18 | インテル コーポレイション | グラフィカルテクスチャデータのマルチモードフィルタリングのためのフレキシブルフィルタロジック |
JP2016004572A (ja) | 2014-06-18 | 2016-01-12 | バイドゥ オンライン ネットワーク テクノロジー (ベイジン) カンパニー リミテッド | シングルチャネル畳み込み層のための処理方法及び処理装置、並びにマルチチャネル畳み込み層のための処理方法及び処理装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH06197222A (ja) * | 1992-12-25 | 1994-07-15 | Fuji Xerox Co Ltd | 画像処理装置 |
CN103238168A (zh) | 2010-12-03 | 2013-08-07 | 夏普株式会社 | 图像处理装置、图像处理方法及图像处理程序 |
JP6750203B2 (ja) | 2015-10-20 | 2020-09-02 | 富士通株式会社 | 畳み込みニューラルネットワークの演算方法及び演算プログラム、情報処理装置 |
US20170344876A1 (en) * | 2016-05-31 | 2017-11-30 | Samsung Electronics Co., Ltd. | Efficient sparse parallel winograd-based convolution scheme |
US10891538B2 (en) * | 2016-08-11 | 2021-01-12 | Nvidia Corporation | Sparse convolutional neural network accelerator |
CN108073977A (zh) * | 2016-11-14 | 2018-05-25 | 耐能股份有限公司 | 卷积运算装置及卷积运算方法 |
-
2018
- 2018-03-16 US US16/623,842 patent/US11580193B2/en active Active
- 2018-03-16 WO PCT/JP2018/010640 patent/WO2018235357A1/ja active Application Filing
- 2018-03-16 JP JP2019525092A patent/JP7020485B2/ja active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006067521A (ja) | 2004-08-30 | 2006-03-09 | Kyocera Corp | 画像処理装置と方法、および画像撮像装置と方法 |
JP2014119949A (ja) | 2012-12-17 | 2014-06-30 | Nippon Hoso Kyokai <Nhk> | 超解像装置及びプログラム |
JP2015095259A (ja) | 2013-11-14 | 2015-05-18 | インテル コーポレイション | グラフィカルテクスチャデータのマルチモードフィルタリングのためのフレキシブルフィルタロジック |
JP2016004572A (ja) | 2014-06-18 | 2016-01-12 | バイドゥ オンライン ネットワーク テクノロジー (ベイジン) カンパニー リミテッド | シングルチャネル畳み込み層のための処理方法及び処理装置、並びにマルチチャネル畳み込み層のための処理方法及び処理装置 |
Also Published As
Publication number | Publication date |
---|---|
US20200117701A1 (en) | 2020-04-16 |
WO2018235357A1 (ja) | 2018-12-27 |
US11580193B2 (en) | 2023-02-14 |
JPWO2018235357A1 (ja) | 2019-12-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10642613B2 (en) | Arithmetic processing device for deep learning and control method of the arithmetic processing device for deep learning | |
JP6900487B2 (ja) | ハードウェアにおける平均プーリングの実行 | |
JP7329533B2 (ja) | 演算を加速するための方法および加速器装置 | |
JP6987860B2 (ja) | ハードウェアにおけるカーネルストライドの実行 | |
US10642622B2 (en) | Arithmetic processing device and control method of the arithmetic processing device | |
JP6958027B2 (ja) | 演算処理装置及び演算処理装置の制御方法 | |
JP7020485B2 (ja) | 演算装置、演算方法及びプログラム | |
JP6936592B2 (ja) | 演算処理装置およびその制御方法 | |
TWI441021B (zh) | 使用多個較低連接埠數記憶體模擬單一記憶體之方法與裝置 | |
EP3460725A1 (en) | Method and apparatus for adapting parameters of neural network | |
US20170206089A1 (en) | Information processing apparatus and computational method | |
JP2018124867A (ja) | 演算処理装置及び演算処理装置の制御方法 | |
JP7353475B2 (ja) | コンピュータがテンソルデータの計算を実現する方法、装置、媒体及び機器 | |
JP7165018B2 (ja) | 情報処理装置、情報処理方法 | |
EP4024290A1 (en) | Implementing fully-connected neural-network layers in hardware | |
CN114792124A (zh) | 在硬件中实施扩张卷积 | |
CN111133457A (zh) | 电子设备及其控制方法 | |
JP6906622B2 (ja) | 演算回路および演算方法 | |
US20220179923A1 (en) | Information processing apparatus, information processing method, and computer-readable recording medium | |
KR20230068992A (ko) | 가속을 통한 신경망 훈련 | |
JP7251416B2 (ja) | 情報処理プログラムおよび情報処理方法 | |
JP7169768B2 (ja) | 画像処理装置、画像処理方法 | |
JP7420100B2 (ja) | 処理装置、処理方法、およびプログラム | |
JP2023073824A (ja) | 演算装置、情報処理方法、及びプログラム | |
US20210288650A1 (en) | Semiconductor device and circuit layout method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20190822 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20201027 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20201228 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20210601 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20210802 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20220104 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20220117 |
|
R151 | Written notification of patent or utility model registration |
Ref document number: 7020485 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R151 |