JPH0748207B2 - 行列演算装置 - Google Patents
行列演算装置Info
- Publication number
- JPH0748207B2 JPH0748207B2 JP1096079A JP9607989A JPH0748207B2 JP H0748207 B2 JPH0748207 B2 JP H0748207B2 JP 1096079 A JP1096079 A JP 1096079A JP 9607989 A JP9607989 A JP 9607989A JP H0748207 B2 JPH0748207 B2 JP H0748207B2
- Authority
- JP
- Japan
- Prior art keywords
- matrix
- memory
- zero
- elements
- data
- 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.)
- Expired - Fee Related
Links
Landscapes
- Complex Calculations (AREA)
Description
【発明の詳細な説明】 〈産業上の利用分野〉 この発明は、零成分を多く含む行列(スパース行列)と
ベクトルとの演算に適した行列演算装置に関する。
ベクトルとの演算に適した行列演算装置に関する。
〈従来の技術〉 自然界における現象を計算機を用いてシュミレーション
する場合、2次元配列で表わされる行列を変換行列とし
て、1次元配列で表わされるベクトルの1次変換を計算
することが多い。例えば、次式(1),(2)に示すよ
うな行列演算が挙げられる。
する場合、2次元配列で表わされる行列を変換行列とし
て、1次元配列で表わされるベクトルの1次変換を計算
することが多い。例えば、次式(1),(2)に示すよ
うな行列演算が挙げられる。
y=Wx …(1) vt=utW …(2) ここで、x=(x1,x2,x3,…,xM)tは入力ベクトル、y
=(y1,y2,y3,…,yN)tは出力ベクトル、W={Wji}は
一次変換のためのN行M列の変換行列、u=(u1,u2,
u3,…,uN)tは入力ベクトル、v=(v1,v2,v3,…,vM)t
は出力ベクトル、(*)tは行と列を入れ換えた転置行
列を示している。
=(y1,y2,y3,…,yN)tは出力ベクトル、W={Wji}は
一次変換のためのN行M列の変換行列、u=(u1,u2,
u3,…,uN)tは入力ベクトル、v=(v1,v2,v3,…,vM)t
は出力ベクトル、(*)tは行と列を入れ換えた転置行
列を示している。
従来のベクトルプロセッサなどの行列演算装置は、上記
変換行列Wの各要素Wjiを表わすデータを記憶するメモ
リと、この要素Wjiと入力ベクトルの要素との積和の計
算アルゴリズムを記憶する記憶手段と、この計算アルゴ
リズムに従って計算する演算手段とを備えて、(1)式
の計算のとき出力yj(j=1,2,…,N)を、次式(3)に
従って計算するようにしている。
変換行列Wの各要素Wjiを表わすデータを記憶するメモ
リと、この要素Wjiと入力ベクトルの要素との積和の計
算アルゴリズムを記憶する記憶手段と、この計算アルゴ
リズムに従って計算する演算手段とを備えて、(1)式
の計算のとき出力yj(j=1,2,…,N)を、次式(3)に
従って計算するようにしている。
また(2)式の計算のとき各列の出力vi(i=1,2,…,
M)を、次式(4)に従って計算するようにしている。
M)を、次式(4)に従って計算するようにしている。
なお、これら式(3),(4)の計算を模式的に示すと
それぞれ第16図、第17図のようになる。
それぞれ第16図、第17図のようになる。
〈発明が解決しようとする課題〉 ところで、上記行列演算を現実の問題に適用するにあた
って、上記変換行列Wの要素Wjiのうち零である要素
(以下、「零要素」と呼ぶ)の占める割合が大きくなる
場合がある。たとえば、神経回路網のシュミレーション
において、一方の神経回路素子群が他方の神経回路素子
群から受け取る伝達信号は、送り手の各素子の出力を入
力ベクトルxとし、送り手側の各素子から受け手側の各
素子への結合の強さ(結合係数)を変換行列Wとした一
次変換y=Wxと考えることができるが、このとき、すべ
ての神経回路素子間が接続されていることは稀であっ
て、逆に、各素子間の結合係数すなわち変換行列Wの要
素のうち大部分が零要素である(スパース行列である)
場合が多い。この傾向は神経回路網が大規模になるほど
強くなる。
って、上記変換行列Wの要素Wjiのうち零である要素
(以下、「零要素」と呼ぶ)の占める割合が大きくなる
場合がある。たとえば、神経回路網のシュミレーション
において、一方の神経回路素子群が他方の神経回路素子
群から受け取る伝達信号は、送り手の各素子の出力を入
力ベクトルxとし、送り手側の各素子から受け手側の各
素子への結合の強さ(結合係数)を変換行列Wとした一
次変換y=Wxと考えることができるが、このとき、すべ
ての神経回路素子間が接続されていることは稀であっ
て、逆に、各素子間の結合係数すなわち変換行列Wの要
素のうち大部分が零要素である(スパース行列である)
場合が多い。この傾向は神経回路網が大規模になるほど
強くなる。
このような場合、上記従来の演算処理装置は、零でない
要素(以下、「非零要素」と呼ぶ)が多い行列を取り扱
う場合と同様に、上記N行M列の変換行列Wの各要素Wj
iをそのままN×M個の実数としてメモリに割り当てて
記憶する必要があり、また、上記行列演算処理1回につ
き乗算と加算とをN×M回ずつ行なっている。このた
め、零要素を記憶・計算する無駄が生じていると考えら
れる。
要素(以下、「非零要素」と呼ぶ)が多い行列を取り扱
う場合と同様に、上記N行M列の変換行列Wの各要素Wj
iをそのままN×M個の実数としてメモリに割り当てて
記憶する必要があり、また、上記行列演算処理1回につ
き乗算と加算とをN×M回ずつ行なっている。このた
め、零要素を記憶・計算する無駄が生じていると考えら
れる。
そこで、スパース行列の非零要素からなるデータ列を格
納した行列メモリと、上記スパース行列内での各非零要
素の位置情報を記憶したインデックスメモリを備えて、
上記インデックスメモリの位置情報を参照しつつ上記ス
パース行列の非零要素のみと入力ベクトルの要素との積
和を演算する線形変換方式が提案されている(特開昭53
-64439号公報)。この線形変換方式によれば、メモリの
記憶量と計算量を低減することができる。
納した行列メモリと、上記スパース行列内での各非零要
素の位置情報を記憶したインデックスメモリを備えて、
上記インデックスメモリの位置情報を参照しつつ上記ス
パース行列の非零要素のみと入力ベクトルの要素との積
和を演算する線形変換方式が提案されている(特開昭53
-64439号公報)。この線形変換方式によれば、メモリの
記憶量と計算量を低減することができる。
しかしながら、この線形変換方式では、インデックスメ
モリに位置情報として行番号を表す整数と列番号を表す
整数とを格納しているため、行列メモリの非零要素を読
み出すためには、別途アドレスコントローラによって上
記インデックスメモリの内容に基づいてアドレスを指定
しなければならない。つまり、行列メモリのアドレスを
指定するために複雑な制御を行わなければならないとい
う問題がある。
モリに位置情報として行番号を表す整数と列番号を表す
整数とを格納しているため、行列メモリの非零要素を読
み出すためには、別途アドレスコントローラによって上
記インデックスメモリの内容に基づいてアドレスを指定
しなければならない。つまり、行列メモリのアドレスを
指定するために複雑な制御を行わなければならないとい
う問題がある。
そこで、この発明の目的は、大規模なスパース行列演算
処理を行なうときにメモリの記憶量と計算量を低減する
ことができる上、簡単に制御できる行列演算装置を提供
することにある。
処理を行なうときにメモリの記憶量と計算量を低減する
ことができる上、簡単に制御できる行列演算装置を提供
することにある。
〈課題を解決するための手段〉 上記目的を達成するために、この発明の行列演算装置
は、2次元配列で表わされる行列の各要素について零で
ある要素か零でない要素かを特定するデータを格納する
第1のメモリと、上記行列の零でない要素の内容を表わ
すデータを格納する第2のメモリと、上記第1のメモリ
に格納されたデータを参照して、上記行列の要素が零で
あるか否かを判別する判別手段と、上記判別手段によっ
て零でないと判別された行列の要素について、上記第2
のメモリに格納されたデータと入力ベクトルの要素とを
乗算して、積和を求める演算手段を備えた行列演算装置
において、上記第1のメモリは、上記行列内で、零であ
る要素が連続して並ぶ数を表わす整数と、零でない要素
が連続して並ぶ数を表す整数とを、上記行列内の各連続
する並びの順に格納していることを特徴としている。
は、2次元配列で表わされる行列の各要素について零で
ある要素か零でない要素かを特定するデータを格納する
第1のメモリと、上記行列の零でない要素の内容を表わ
すデータを格納する第2のメモリと、上記第1のメモリ
に格納されたデータを参照して、上記行列の要素が零で
あるか否かを判別する判別手段と、上記判別手段によっ
て零でないと判別された行列の要素について、上記第2
のメモリに格納されたデータと入力ベクトルの要素とを
乗算して、積和を求める演算手段を備えた行列演算装置
において、上記第1のメモリは、上記行列内で、零であ
る要素が連続して並ぶ数を表わす整数と、零でない要素
が連続して並ぶ数を表す整数とを、上記行列内の各連続
する並びの順に格納していることを特徴としている。
〈作用〉 上記判別手段によって第1のメモリに格納されたデータ
を参照して、参照した上記行列の要素が零であるとき
は、何ら計算を行なうことなく、次の要素の参照を続け
る。そして、参照した要素が零でないとき、上記演算手
段によって上記第2のメモリに格納されたデータと、入
力ベクトルのこのデータに対応する要素とを乗算する。
1つの行または列について、この積和を計算して、出力
ベクトルの1つの要素とする。そして、各行または各列
について、この計算を行なって、出力ベクトルの全要素
を求める。
を参照して、参照した上記行列の要素が零であるとき
は、何ら計算を行なうことなく、次の要素の参照を続け
る。そして、参照した要素が零でないとき、上記演算手
段によって上記第2のメモリに格納されたデータと、入
力ベクトルのこのデータに対応する要素とを乗算する。
1つの行または列について、この積和を計算して、出力
ベクトルの1つの要素とする。そして、各行または各列
について、この計算を行なって、出力ベクトルの全要素
を求める。
このように行列演算処理を行なう場合、例えば上記行列
の全要素(N×M個の実数)のうち非零要素の占める割
合がk%であるとき、この行列の要素を記憶するための
上記第2のメモリの記憶量は、実数にしてN×M×k/10
0個分となる。また、上記行列演算処理1回につき乗算
と加算を行なう回数は、それぞれN×M×k/100とな
る。したがって、非零要素の占める割合が少ない(kが
小さい)ときに、上記行列の要素の記憶量と上記演算処
理の計算量が低減される。
の全要素(N×M個の実数)のうち非零要素の占める割
合がk%であるとき、この行列の要素を記憶するための
上記第2のメモリの記憶量は、実数にしてN×M×k/10
0個分となる。また、上記行列演算処理1回につき乗算
と加算を行なう回数は、それぞれN×M×k/100とな
る。したがって、非零要素の占める割合が少ない(kが
小さい)ときに、上記行列の要素の記憶量と上記演算処
理の計算量が低減される。
しかも、上記第1のメモリは、上記行列内で、零である
要素が連続して並ぶ数を表わす整数と、零でない要素が
連続して並ぶ数を表す整数とを、上記行列内の各連続す
る並びの順に格納しているので、第2のメモリの内容を
読み出すときにそのアドレス指定が簡単に行われる。す
なわち、第1のメモリを例えばポインタによって順にス
キャンして、非零要素が並ぶ数を表す整数が検出された
とき、この整数分だけ順に第2のメモリに格納された非
零要素の内容を表すデータを読み出せば良い。このよう
に、第1のメモリの内容検出と、第2のメモリの内容読
み出しとを並行して進めることによって、簡単に第2の
メモリのアドレス指定が行われる。この結果、この行列
演算装置の制御は簡単に行われる。
要素が連続して並ぶ数を表わす整数と、零でない要素が
連続して並ぶ数を表す整数とを、上記行列内の各連続す
る並びの順に格納しているので、第2のメモリの内容を
読み出すときにそのアドレス指定が簡単に行われる。す
なわち、第1のメモリを例えばポインタによって順にス
キャンして、非零要素が並ぶ数を表す整数が検出された
とき、この整数分だけ順に第2のメモリに格納された非
零要素の内容を表すデータを読み出せば良い。このよう
に、第1のメモリの内容検出と、第2のメモリの内容読
み出しとを並行して進めることによって、簡単に第2の
メモリのアドレス指定が行われる。この結果、この行列
演算装置の制御は簡単に行われる。
〈実施例〉 以下、この発明の行列演算装置を実施例により詳細に説
明する。
明する。
第1図はこの発明の基礎となる第1の行列演算装置を示
している。この行列演算装置は、CPU(中央演算処理装
置)1と、所定の計算アルゴリズムを記憶するROM2と、
変換行列Wについての情報を記憶する第1のメモリ11お
よび第2のメモリ12と、入力ベクトルx=(x1,…,xj,
…,xM)tまたはu=(u1,…,uj,…uN)tの情報を入力
する入力装置21と、出力ベクトルy=(y1,…,yj,…
yN)tまたはv=(v1,…,vj,…,vM)tの情報を出力す
る出力装置22を備えている。
している。この行列演算装置は、CPU(中央演算処理装
置)1と、所定の計算アルゴリズムを記憶するROM2と、
変換行列Wについての情報を記憶する第1のメモリ11お
よび第2のメモリ12と、入力ベクトルx=(x1,…,xj,
…,xM)tまたはu=(u1,…,uj,…uN)tの情報を入力
する入力装置21と、出力ベクトルy=(y1,…,yj,…
yN)tまたはv=(v1,…,vj,…,vM)tの情報を出力す
る出力装置22を備えている。
上記CPU1は、上記入力装置21から入力ベクトルxの各要
素を表わすデータを受けて、上記第1のメモリ11および
第2のメモリ12を参照し、ROM2が記憶する計算アルゴリ
ズムに従って、上記入力ベクトルxまたはuの一次変換
を計算して、出力ベクトルyまたはvを表わすデータを
上記出力装置22に出力することができる。第7図に示す
ように、上記入力装置21は、入力ベクトルxの各要素xi
を表わすデータを保持可能な入力バッファ302およびこ
の入力バッファ302の各データXTxp(xp=1,2,…,M)を
指すポインタ(指示値xp)306と、入力ベクトルuの各
要素ujを表わすデータを保持可能な入力バッファ304お
よびこの入力バッファ304の各データUTup(up=1,2,…
N)を指すポインタ(指示値up)308とからなってい
る。上記出力装置22は、出力ベクトルyの各要素tjを表
わすデータを保持可能な積和演算バッファ兼用の出力バ
ッフア303およびこの出力バッフア303の各データYTyp
(yp=1,2,…,N)を指すポインタ(指示値yp)307と、
出力ベクトルvの各要素viを表わすデータを保持可能な
積和演算バッファ兼用の出力バッフア305およびこの出
力バッフア305の各データVTvp(vp=1,2,…M)を指す
ポインタ(指示値vp)309とからなっている。なお、第
7図中の301は、この行列演算装置の機能を説明するた
めに、例として変換行列Wの各要素Wjiを2次元配列に
よって表わしたものである。図中、“0"はWji=0であ
る零要素、“W"はWji≠0である非零要素を表わしてい
る。また、piは零要素が行方向に並ぶ数、qiは非零要素
が行方向に並ぶ数を表わしている。第2図に示すよう
に、上記第1のメモリ11は、上記変換行列Wの零要素が
連続して並ぶ数を表わす整数を記憶しているインデック
ステーブル401と、このインデックステーブル401の各デ
ータITip(ip=1,2,…)を指すポインタ(指示値ip)40
3とからなっている。一方、第3図に示すように、上記
第2のメモリ12は、上記変換行列Wの非零要素の内容を
表わすデータを順に格納している係数メモリ402と、こ
の係数メモリ402の各データWTwp(wp=1,2,…)を指す
ポインタ(指示値wp)404とからなっている。
素を表わすデータを受けて、上記第1のメモリ11および
第2のメモリ12を参照し、ROM2が記憶する計算アルゴリ
ズムに従って、上記入力ベクトルxまたはuの一次変換
を計算して、出力ベクトルyまたはvを表わすデータを
上記出力装置22に出力することができる。第7図に示す
ように、上記入力装置21は、入力ベクトルxの各要素xi
を表わすデータを保持可能な入力バッファ302およびこ
の入力バッファ302の各データXTxp(xp=1,2,…,M)を
指すポインタ(指示値xp)306と、入力ベクトルuの各
要素ujを表わすデータを保持可能な入力バッファ304お
よびこの入力バッファ304の各データUTup(up=1,2,…
N)を指すポインタ(指示値up)308とからなってい
る。上記出力装置22は、出力ベクトルyの各要素tjを表
わすデータを保持可能な積和演算バッファ兼用の出力バ
ッフア303およびこの出力バッフア303の各データYTyp
(yp=1,2,…,N)を指すポインタ(指示値yp)307と、
出力ベクトルvの各要素viを表わすデータを保持可能な
積和演算バッファ兼用の出力バッフア305およびこの出
力バッフア305の各データVTvp(vp=1,2,…M)を指す
ポインタ(指示値vp)309とからなっている。なお、第
7図中の301は、この行列演算装置の機能を説明するた
めに、例として変換行列Wの各要素Wjiを2次元配列に
よって表わしたものである。図中、“0"はWji=0であ
る零要素、“W"はWji≠0である非零要素を表わしてい
る。また、piは零要素が行方向に並ぶ数、qiは非零要素
が行方向に並ぶ数を表わしている。第2図に示すよう
に、上記第1のメモリ11は、上記変換行列Wの零要素が
連続して並ぶ数を表わす整数を記憶しているインデック
ステーブル401と、このインデックステーブル401の各デ
ータITip(ip=1,2,…)を指すポインタ(指示値ip)40
3とからなっている。一方、第3図に示すように、上記
第2のメモリ12は、上記変換行列Wの非零要素の内容を
表わすデータを順に格納している係数メモリ402と、こ
の係数メモリ402の各データWTwp(wp=1,2,…)を指す
ポインタ(指示値wp)404とからなっている。
上記インデックステーブル401、係数メモリ402は、次の
ようにして作成される。第7図に示した上記変換行列W3
01の各行を1行目から順に左から右に調べてゆき、非零
要素のときその内容(実数)を表わすデータを、上記係
数メモリ402に格納する一方、この非零要素の左側に並
ぶ零要素の数piに1を足した整数(pi+1)をnビット
のデータで表わして上記インデックステーブル401に格
納する(以下、単に「整数を登録する」という)。な
お、上記非零要素の左隣が非零要素である場合、pi=0
であるため、登録する整数は1となる。非零要素がqi個
並ぶときは上記インデックステーブル401には整数1を
(qi−1)個続けて登録することになる。各行の行末に
きたときは、行末記号delim(delim=2n−1)を登録す
る。行末が零要素である場合、この行末の零要素を含む
零要素の並びの数(零要素が並んでおらず、左隣が非零
要素のときは1)を登録するのでなく、行末記号delim
を登録する。ところで、このようにnビットのデータ
(1ワード)で整数を表わす場合、表わすことができる
整数は(2n−1)までであり、さらに整数(2n−1)を
上に述べたように行末記号delimに使用しているので、
結局、1ワードで表すことができる整数は(2n−2)ま
でとなっている。そこで、(2n−2)個以上零要素が並
ぶときは、次のように2ワード以上使ってその数を表わ
して登録する。例えば、零要素が並ぶ数をpiとすると、 pi+1=(2n−2)a+b a,bは整数 0≦a 0≦b<(2n−2) と表わせるときは、(a+1)個のワードを使って表わ
す。すなわち、a個のワードのデータは(2n−2)と
し、最後の1ワードのデータはbとする。
ようにして作成される。第7図に示した上記変換行列W3
01の各行を1行目から順に左から右に調べてゆき、非零
要素のときその内容(実数)を表わすデータを、上記係
数メモリ402に格納する一方、この非零要素の左側に並
ぶ零要素の数piに1を足した整数(pi+1)をnビット
のデータで表わして上記インデックステーブル401に格
納する(以下、単に「整数を登録する」という)。な
お、上記非零要素の左隣が非零要素である場合、pi=0
であるため、登録する整数は1となる。非零要素がqi個
並ぶときは上記インデックステーブル401には整数1を
(qi−1)個続けて登録することになる。各行の行末に
きたときは、行末記号delim(delim=2n−1)を登録す
る。行末が零要素である場合、この行末の零要素を含む
零要素の並びの数(零要素が並んでおらず、左隣が非零
要素のときは1)を登録するのでなく、行末記号delim
を登録する。ところで、このようにnビットのデータ
(1ワード)で整数を表わす場合、表わすことができる
整数は(2n−1)までであり、さらに整数(2n−1)を
上に述べたように行末記号delimに使用しているので、
結局、1ワードで表すことができる整数は(2n−2)ま
でとなっている。そこで、(2n−2)個以上零要素が並
ぶときは、次のように2ワード以上使ってその数を表わ
して登録する。例えば、零要素が並ぶ数をpiとすると、 pi+1=(2n−2)a+b a,bは整数 0≦a 0≦b<(2n−2) と表わせるときは、(a+1)個のワードを使って表わ
す。すなわち、a個のワードのデータは(2n−2)と
し、最後の1ワードのデータはbとする。
この行列演算装置は、上記述べたように、変換行列Wの
零要素が並ぶ数piと行末記号delimをインデックスとし
て、次のように演算処理を行なう。
零要素が並ぶ数piと行末記号delimをインデックスとし
て、次のように演算処理を行なう。
入力ベクトルxの一次変換として式(1)を計算をする
場合、第8図に示す計算アルゴリズムに従って計算す
る。
場合、第8図に示す計算アルゴリズムに従って計算す
る。
まず、ステップS1に示すように、各ポインタ403,404,30
6,307の指示値をそれぞれip,wp,yp=1、xp=0とし、
出力バッフア303のデータYTyp(yp=1,…,M)を0とす
る(初期化)。次に、インデックステーブル401のデー
タITipが行末記号delim(=2n−1)であるかどうか判
別(S2)して、行末であれば改行(S3)する。行末でな
ければ、行方向向きにITip分だけ移動(S5)して、ITip
が最大数(2n−2)であるかどうかを判別(S6)する。
最大数であれば、インデックステーブル401の次のデー
タを調べにゆく(S7)。最大数でなければ、積WTwp×XT
xpをYTypに加算(S8)し、係数メモリ404の次のデータ
を出せるように指示値wpを1つ進めると共に、インデッ
クステーブル401の次のデータを調べにゆく(S9)。そ
して、ステップS2に戻って、再びITipが行末記号delim
であるかどうかを判別して、行末であれば改行(S3)し
て、さらに、N行まで調べ終わったとき、この演算を終
了する。
6,307の指示値をそれぞれip,wp,yp=1、xp=0とし、
出力バッフア303のデータYTyp(yp=1,…,M)を0とす
る(初期化)。次に、インデックステーブル401のデー
タITipが行末記号delim(=2n−1)であるかどうか判
別(S2)して、行末であれば改行(S3)する。行末でな
ければ、行方向向きにITip分だけ移動(S5)して、ITip
が最大数(2n−2)であるかどうかを判別(S6)する。
最大数であれば、インデックステーブル401の次のデー
タを調べにゆく(S7)。最大数でなければ、積WTwp×XT
xpをYTypに加算(S8)し、係数メモリ404の次のデータ
を出せるように指示値wpを1つ進めると共に、インデッ
クステーブル401の次のデータを調べにゆく(S9)。そ
して、ステップS2に戻って、再びITipが行末記号delim
であるかどうかを判別して、行末であれば改行(S3)し
て、さらに、N行まで調べ終わったとき、この演算を終
了する。
入力ベクトルutの一次変換式(2)を計算する場合、上
記演算と同様の手順によって、第9図に示す計算アルゴ
リズムに従って計算する。
記演算と同様の手順によって、第9図に示す計算アルゴ
リズムに従って計算する。
このように演算処理を行なうことによって、例えばN行
M列の変換行列Wの全要素(N×M個の実数)のうち非
零要素の占める割合がk%であるとき、この行列Wの要
素を記憶するための上記係数メモリ402の記憶量は、実
数にしてN×M×k/100個分となり、一方、上記インデ
ックステーブル401の記憶量は、整数にして約N×M×k
/100個分となる。したがって、非零要素の占める割合が
少ない(kが小さいとき)上記変換行列Wの要素の記憶
量を低減することができる。また、上記行列演算処理1
回につき乗算と加算を行なう回数はそれぞれN×M×k/
100回となって、kが小さいとき計算量を低減すること
ができる。
M列の変換行列Wの全要素(N×M個の実数)のうち非
零要素の占める割合がk%であるとき、この行列Wの要
素を記憶するための上記係数メモリ402の記憶量は、実
数にしてN×M×k/100個分となり、一方、上記インデ
ックステーブル401の記憶量は、整数にして約N×M×k
/100個分となる。したがって、非零要素の占める割合が
少ない(kが小さいとき)上記変換行列Wの要素の記憶
量を低減することができる。また、上記行列演算処理1
回につき乗算と加算を行なう回数はそれぞれN×M×k/
100回となって、kが小さいとき計算量を低減すること
ができる。
次に、この発明の基礎となる第2の行列演算装置を説明
する。
する。
この行列演算装置は、第1の行列演算装置のインデック
ステーブル401に代えて、第4図に示すインデックステ
ーブル411を備えている。他の構成は第1の行列演算装
置と同一である。上記インデックステーブル411は次の
ようにして作成される。インデックステーブル401と同
様に、零要素の並びの数piに1を足した整数(pi+1)
を登録する。ただし、行末記号delimを使用せず、零要
素が行末から次行の行頭へ続く場合は、行末の零要素の
並び数と次行の行頭の零要素の並び数とを足した数に1
を加えて登録する。例えば、第7図に示す変換行列W301
の1行目の行末と2行目の行頭の場合、整数(p2+p3+
1)を登録する。
ステーブル401に代えて、第4図に示すインデックステ
ーブル411を備えている。他の構成は第1の行列演算装
置と同一である。上記インデックステーブル411は次の
ようにして作成される。インデックステーブル401と同
様に、零要素の並びの数piに1を足した整数(pi+1)
を登録する。ただし、行末記号delimを使用せず、零要
素が行末から次行の行頭へ続く場合は、行末の零要素の
並び数と次行の行頭の零要素の並び数とを足した数に1
を加えて登録する。例えば、第7図に示す変換行列W301
の1行目の行末と2行目の行頭の場合、整数(p2+p3+
1)を登録する。
上記入力ベクトルx,入力ベクトルutの一次変換式
(1),式(2)を計算する場合、それぞれ第10図、第
11図に示す計算アルゴリズムに従って行なう。なお、簡
単のため、各データ、指示値は第1の行列演算装置と同
一記号を使用している(後に述べる第3、第4の行列演
算装置において同様)。第1の行列演算装置に対して略
同一手順であるが、式(1)の計算の場合、行末を検出
するためにxpとMとを比較して、xp>Mならば行が変わ
ったと判断(S25)して、ypをint(xp/M)だけ進める
(S26)点が異なっている。式(2)の計算の場合、vp
を使ってこれを行なう。なお、int(*)は括弧内の式
の値の整数部を示している。
(1),式(2)を計算する場合、それぞれ第10図、第
11図に示す計算アルゴリズムに従って行なう。なお、簡
単のため、各データ、指示値は第1の行列演算装置と同
一記号を使用している(後に述べる第3、第4の行列演
算装置において同様)。第1の行列演算装置に対して略
同一手順であるが、式(1)の計算の場合、行末を検出
するためにxpとMとを比較して、xp>Mならば行が変わ
ったと判断(S25)して、ypをint(xp/M)だけ進める
(S26)点が異なっている。式(2)の計算の場合、vp
を使ってこれを行なう。なお、int(*)は括弧内の式
の値の整数部を示している。
次に、この発明を具現化した第3の行列演算装置を説明
する。
する。
この行列演算装置は、第1の行列演算装置のインデック
ステーブル401に代えて、第5図に示すインデックステ
ーブル421を備えている。他の構成は第1の行列演算装
置と同一である。上記インデックステーブル421は、零
要素の並びの数piと別に非零要素の並びの数qiを登録す
る。すなわち、非零要素が並んでいる場合、第1の行列
演算装置,第2の行列演算装置と異なり、(qi−1)個
の整数1をそれぞれ別個に登録するのでなく、1つのデ
ータとして整数qiを登録する。そして、1ワード当たり
nビットのうち最上位ビットを、零要素の並びの数piで
あるか非零要素の並びの数qiであるかの区別に使用す
る。零要素または非零要素が行末から次行の行頭へ続く
ときは、それらの並びの数を足した整数(pi+pi+1),
(qi+qi+1)を登録する。このようにした場合、第1の
行列演算装置,第2の行列演算装置に比して、インデッ
クステーブルのデータ量を少なくすることができる。
ステーブル401に代えて、第5図に示すインデックステ
ーブル421を備えている。他の構成は第1の行列演算装
置と同一である。上記インデックステーブル421は、零
要素の並びの数piと別に非零要素の並びの数qiを登録す
る。すなわち、非零要素が並んでいる場合、第1の行列
演算装置,第2の行列演算装置と異なり、(qi−1)個
の整数1をそれぞれ別個に登録するのでなく、1つのデ
ータとして整数qiを登録する。そして、1ワード当たり
nビットのうち最上位ビットを、零要素の並びの数piで
あるか非零要素の並びの数qiであるかの区別に使用す
る。零要素または非零要素が行末から次行の行頭へ続く
ときは、それらの並びの数を足した整数(pi+pi+1),
(qi+qi+1)を登録する。このようにした場合、第1の
行列演算装置,第2の行列演算装置に比して、インデッ
クステーブルのデータ量を少なくすることができる。
上記入力ベクトルx、入力ベクトルutの一次変換として
式(1),(2)を計算する場合、それぞれ第12図,第
13図に示す計算アルゴリズムに従って演算処理を行な
う。第1の行列演算装置および第2の行列演算装置に対
して略同一手順であるが、ITipが零要素または非零要素
のいずれを示しているかを判断(S53,S74)して、零要
素を示しているときは、その数だけxpまたはvpをスキッ
プする点が異なっている(S54,S75)。非零要素を示し
ているときは、その数だけ入力XTxpと係数WTwpとの積和
を計算する(S57乃至S61,S78乃至S82)。ただし、第2
の行列演算装置と同様に、その途中で行末になったかど
うかを、xpまたはvpの値をMの値と比較して判断する
(S60,S80)。
式(1),(2)を計算する場合、それぞれ第12図,第
13図に示す計算アルゴリズムに従って演算処理を行な
う。第1の行列演算装置および第2の行列演算装置に対
して略同一手順であるが、ITipが零要素または非零要素
のいずれを示しているかを判断(S53,S74)して、零要
素を示しているときは、その数だけxpまたはvpをスキッ
プする点が異なっている(S54,S75)。非零要素を示し
ているときは、その数だけ入力XTxpと係数WTwpとの積和
を計算する(S57乃至S61,S78乃至S82)。ただし、第2
の行列演算装置と同様に、その途中で行末になったかど
うかを、xpまたはvpの値をMの値と比較して判断する
(S60,S80)。
このように、インデックステーブル421の内容検出と、
第2のメモリ12の内容読み出しとを並行して進めること
によって、簡単に第2のメモリのアドレス指定を行うこ
とができる。この結果、この行列演算装置の制御を簡単
に行うことができる。
第2のメモリ12の内容読み出しとを並行して進めること
によって、簡単に第2のメモリのアドレス指定を行うこ
とができる。この結果、この行列演算装置の制御を簡単
に行うことができる。
次に、この発明を具現化した第4の行列演算装置を説明
する。
する。
この行列演算装置は、第1の行列演算装置のインデック
ステーブルに代えて、第6図に示すインデックステーブ
ル431を備えている。他の構成は第1の行列演算装置と
同一である。上記インデックステーブル431は、第3の
行列演算装置と同様に、零要素の並びの数piと別に非零
要素の並びの数qiを登録する。ただし、行末では零要素
または非零要素の並びの数のいずれかの最大値を行末記
号delimとして登録する。なお、行末が零要素または零
要素の並びで終わるときは、1または並びの数を登録せ
ず、上記行末記号delimを登録する。このようにした場
合、第1の行列演算装置,第2の行列演算装置に比し
て、インデックステーブルのデータ量を少なくすること
ができる。
ステーブルに代えて、第6図に示すインデックステーブ
ル431を備えている。他の構成は第1の行列演算装置と
同一である。上記インデックステーブル431は、第3の
行列演算装置と同様に、零要素の並びの数piと別に非零
要素の並びの数qiを登録する。ただし、行末では零要素
または非零要素の並びの数のいずれかの最大値を行末記
号delimとして登録する。なお、行末が零要素または零
要素の並びで終わるときは、1または並びの数を登録せ
ず、上記行末記号delimを登録する。このようにした場
合、第1の行列演算装置,第2の行列演算装置に比し
て、インデックステーブルのデータ量を少なくすること
ができる。
上記入力ベクトルx,入力ベクトルutの一次変換式
(1),式(2)を計算する場合、それぞれ第14図,第
15図に示す計算アルゴリズムに従って演算処理を行な
う。第3の行列演算装置に対して、行末であるかどうか
行末記号delimを使用して判断(S93,S104)する点のみ
が異なっている。
(1),式(2)を計算する場合、それぞれ第14図,第
15図に示す計算アルゴリズムに従って演算処理を行な
う。第3の行列演算装置に対して、行末であるかどうか
行末記号delimを使用して判断(S93,S104)する点のみ
が異なっている。
このように、インデックステーブル431の内容検出と、
第2のメモリ12の内容読み出しとを並行して進めること
によって、簡単に第2のメモリのアドレス指定を行うこ
とができる。この結果、この行列演算装置の制御を簡単
に行うことができる。
第2のメモリ12の内容読み出しとを並行して進めること
によって、簡単に第2のメモリのアドレス指定を行うこ
とができる。この結果、この行列演算装置の制御を簡単
に行うことができる。
なお、第1乃至第4の行列演算装置において、変換行列
Wの各行を左から右へスキャンしたが、当然ながら、列
方向にスキャンしても良い。
Wの各行を左から右へスキャンしたが、当然ながら、列
方向にスキャンしても良い。
<発明の効果> 以上より明らかなように、この発明の行列演算装置は、
2次元配列で表わされる行列の各要素について零要素か
非零要素かを特定するデータを格納する第1のメモリ
と、上記行列の非零要素の内容を表わすデータを格納す
る第2のメモリと、上記第1のメモリに格納されたデー
タを参照して、上記行列の要素が零であるか否かを判別
する判別手段と、上記判別手段によって零でないと判別
された行列の要素について、上記第2のメモリに格納さ
れたデータと入力ベクトルの要素とを乗算して、積和を
求める演算手段を備えているので、大規模なスパース行
列の演算処理を行なう場合、変換行列において非零要素
の占める割合がk%であるとき、メモリの記憶量と計算
量をk%に低減することができる。
2次元配列で表わされる行列の各要素について零要素か
非零要素かを特定するデータを格納する第1のメモリ
と、上記行列の非零要素の内容を表わすデータを格納す
る第2のメモリと、上記第1のメモリに格納されたデー
タを参照して、上記行列の要素が零であるか否かを判別
する判別手段と、上記判別手段によって零でないと判別
された行列の要素について、上記第2のメモリに格納さ
れたデータと入力ベクトルの要素とを乗算して、積和を
求める演算手段を備えているので、大規模なスパース行
列の演算処理を行なう場合、変換行列において非零要素
の占める割合がk%であるとき、メモリの記憶量と計算
量をk%に低減することができる。
しかも、上記第1のメモリは、上記行列内で、零である
要素が連続して並ぶ数を表わす整数と、零でない要素が
連続して並ぶ数を表す整数とを、上記行列内の各連続す
る並びの順に格納しているので、第2のメモリの内容を
読み出すときにそのアドレス指定を簡単に行うことがで
きる。すなわち、第1のメモリを例えばポインタによっ
て順にスキャンして、非零要素が並ぶ数を表す整数が検
出されたとき、この整数分だけ順に第2のメモリに格納
された非零要素の内容を表すデータを読み出す。このよ
うに、第1のメモリの内容検出と、第2のメモリの内容
読み出しとを並行して進めることによって、簡単に第2
のメモリのアドレス指定を行うことができる。この結
果、この行列演算装置の制御を簡単に行うことができ
る。
要素が連続して並ぶ数を表わす整数と、零でない要素が
連続して並ぶ数を表す整数とを、上記行列内の各連続す
る並びの順に格納しているので、第2のメモリの内容を
読み出すときにそのアドレス指定を簡単に行うことがで
きる。すなわち、第1のメモリを例えばポインタによっ
て順にスキャンして、非零要素が並ぶ数を表す整数が検
出されたとき、この整数分だけ順に第2のメモリに格納
された非零要素の内容を表すデータを読み出す。このよ
うに、第1のメモリの内容検出と、第2のメモリの内容
読み出しとを並行して進めることによって、簡単に第2
のメモリのアドレス指定を行うことができる。この結
果、この行列演算装置の制御を簡単に行うことができ
る。
第1図はこの発明の行列演算装置の構成を示すブロック
図、第2図,第4図,第5図および第6図は上記行列演
算装置のインデックステーブルを示す図、第3図は上記
行列演算装置の係数メモリを示す図、第7図は上記行列
演算装置の入出力バッファ,ポインタと変換行列Wの要
素を示す図、第8図乃至第15図は上記行列演算装置の計
算アルゴリズムを示すフローチャート、第16図および第
17図は従来の行列演算装置による演算を模式的に示す図
である。 1……CPU、2……ROM、11……第1のメモリ、12……第
2のメモリ、21……入力装置、22……出力装置、301…
…変換行列W、302,308……入力バッファ、303,305……
出力バッフア、401,411,421,431……インデックステー
ブル、402……係数メモリ、306,307,308,309,403,404…
…ポインタ。
図、第2図,第4図,第5図および第6図は上記行列演
算装置のインデックステーブルを示す図、第3図は上記
行列演算装置の係数メモリを示す図、第7図は上記行列
演算装置の入出力バッファ,ポインタと変換行列Wの要
素を示す図、第8図乃至第15図は上記行列演算装置の計
算アルゴリズムを示すフローチャート、第16図および第
17図は従来の行列演算装置による演算を模式的に示す図
である。 1……CPU、2……ROM、11……第1のメモリ、12……第
2のメモリ、21……入力装置、22……出力装置、301…
…変換行列W、302,308……入力バッファ、303,305……
出力バッフア、401,411,421,431……インデックステー
ブル、402……係数メモリ、306,307,308,309,403,404…
…ポインタ。
Claims (1)
- 【請求項1】2次元配列で表わされる行列の各要素につ
いて零である要素か零でない要素かを特定するデータを
格納する第1のメモリと、 上記行列の零でない要素の内容を表わすデータを格納す
る第2のメモリと、 上記第1のメモリに格納されたデータを参照して、上記
行列の要素が零であるか否かを判別する判別手段と、 上記判別手段によって零でないと判別された行列の要素
について、上記第2のメモリに格納されたデータと入力
ベクトルの要素とを乗算して、積和を求める演算手段を
備えた行列演算装置において、 上記第1のメモリは、上記行列内で、零である要素が連
続して並ぶ数を表わす整数と、零でない要素が連続して
並ぶ数を表す整数とを、上記行列内の各連続する並びの
順に格納していることを特徴とする行列演算装置。
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP1096079A JPH0748207B2 (ja) | 1989-04-14 | 1989-04-14 | 行列演算装置 |
| US07/798,939 US5267185A (en) | 1989-04-14 | 1991-11-27 | Apparatus for calculating matrices |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP1096079A JPH0748207B2 (ja) | 1989-04-14 | 1989-04-14 | 行列演算装置 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH02273867A JPH02273867A (ja) | 1990-11-08 |
| JPH0748207B2 true JPH0748207B2 (ja) | 1995-05-24 |
Family
ID=14155390
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP1096079A Expired - Fee Related JPH0748207B2 (ja) | 1989-04-14 | 1989-04-14 | 行列演算装置 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH0748207B2 (ja) |
Families Citing this family (8)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6895421B1 (en) | 2000-10-06 | 2005-05-17 | Intel Corporation | Method and apparatus for effectively performing linear transformations |
| CN109328361B (zh) * | 2016-06-14 | 2020-03-27 | 多伦多大学管理委员会 | 用于深度神经网络的加速器 |
| US10360163B2 (en) * | 2016-10-27 | 2019-07-23 | Google Llc | Exploiting input data sparsity in neural network compute units |
| US10175980B2 (en) | 2016-10-27 | 2019-01-08 | Google Llc | Neural network compute tile |
| DE112017008040T5 (de) * | 2017-09-14 | 2020-07-09 | Mitsubishi Electric Corporation | Rechenoperationsschaltung, rechenoperationsverfahren und programm |
| DE112018004972T5 (de) * | 2017-10-18 | 2020-06-18 | Mitsubishi Electric Corporation | Operationsschaltung und operationsverfahren |
| CN113228057B (zh) * | 2019-01-11 | 2024-05-31 | 三菱电机株式会社 | 推理装置和推理方法 |
| CN117290653B (zh) * | 2023-11-24 | 2024-02-20 | 巨霖科技(上海)有限公司 | 一种基于eda系统的矩阵求解方法及系统 |
Family Cites Families (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPS5364439A (en) * | 1976-11-20 | 1978-06-08 | Agency Of Ind Science & Technol | Linear coversion system |
| JPS60250473A (ja) * | 1984-05-25 | 1985-12-11 | Hitachi Ltd | ベクトルプロセツサ |
-
1989
- 1989-04-14 JP JP1096079A patent/JPH0748207B2/ja not_active Expired - Fee Related
Also Published As
| Publication number | Publication date |
|---|---|
| JPH02273867A (ja) | 1990-11-08 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US5267185A (en) | Apparatus for calculating matrices | |
| US5301136A (en) | Method and apparatus for fast implementation of inverse discrete cosine transform in a digital image processing system using low cost accumulators | |
| US11803360B2 (en) | Compilation method, apparatus, computing device and medium | |
| JP3323949B2 (ja) | Idctを効率よく実行する方法及び装置 | |
| JPH06162171A (ja) | コンピューターグラフィックスにおける多角形の頂点インデックスキャッシュシステム | |
| CN115392450B (zh) | 运算方法以及运算系统 | |
| JPH03231383A (ja) | 画像縮小/拡大方法及び装置 | |
| JPH0526229B2 (ja) | ||
| JP3526976B2 (ja) | プロセッサおよびデータ処理装置 | |
| US5794065A (en) | Data driven information processor | |
| US20230068450A1 (en) | Method and apparatus for processing sparse data | |
| CN115481364B (zh) | 基于gpu加速的大规模椭圆曲线多标量乘法的并行计算方法 | |
| JPH0748207B2 (ja) | 行列演算装置 | |
| US7478363B2 (en) | Method for translating a given source program into an object program containing computing expressions | |
| US4916649A (en) | Method and apparatus for transforming a bit-reversed order vector into a natural order vector | |
| JPH036546B2 (ja) | ||
| WO1988007242A2 (en) | Arithmetic computation modifier based upon data dependent operations | |
| JP2662124B2 (ja) | 高速フーリエ変換における信号シーケンス発生方法、装置およびシステム並びに高速フーリエ変換処理装置 | |
| JPH1049665A (ja) | 画像処理装置および方法 | |
| JP2026031990A (ja) | インサイチュでのスパース行列展開 | |
| EP0327001A2 (en) | Pattern data generating system | |
| WO1993019431A1 (en) | Parallel vector processor architecture | |
| CN118363923A (zh) | 一种基于算子复用的低成本矩阵运算fpga实现方法 | |
| US6938064B1 (en) | Method for computing fast Fourier transform and inverse fast Fourier transform | |
| JPH07220062A (ja) | 表示の情報内容を実質的に維持しながら、そのサイズを縮少する方法および装置 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| LAPS | Cancellation because of no payment of annual fees |