JPH06342450A - 行列乗算装置 - Google Patents

行列乗算装置

Info

Publication number
JPH06342450A
JPH06342450A JP13018293A JP13018293A JPH06342450A JP H06342450 A JPH06342450 A JP H06342450A JP 13018293 A JP13018293 A JP 13018293A JP 13018293 A JP13018293 A JP 13018293A JP H06342450 A JPH06342450 A JP H06342450A
Authority
JP
Japan
Prior art keywords
matrix
pointer
address
counter
sum
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.)
Withdrawn
Application number
JP13018293A
Other languages
English (en)
Inventor
Hiroshi Obara
洋 小原
Hideaki Kurihara
秀明 栗原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP13018293A priority Critical patent/JPH06342450A/ja
Publication of JPH06342450A publication Critical patent/JPH06342450A/ja
Withdrawn legal-status Critical Current

Links

Landscapes

  • Complex Calculations (AREA)

Abstract

(57)【要約】 【目的】行列の乗算を行う装置に関し、マイクロプロセ
ッサやDSP等において、効率よく行列の乗算を行うこ
とができる、行列乗算装置を提供することを目的とす
る。 【構成】JA×KA行列AJA,KA とJB×KB行列B
JB,KB とを乗算して、JA×KB行列CJA,KB を得る行
列乗算装置において、プログラム制御部1を備えて、行
列乗算命令CJA,KB =AJA,KA ×BJB,KB の実行をプロ
グラムによって制御し、アドレス生成部2を備えて、プ
ログラムの使用するアドレスを生成し、積和演算部3を
備えて、行列AJA,KA の要素と行列BJB,KB の要素との
積和演算を行い、メモリ4を備えて、行列AJA,KA と行
列BJB,KB の各要素を予め格納するとともに、求められ
た行列CJA,KB の各要素を格納することで構成する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、行列の乗算を行う装置
に関し、特にマイクロプロセッサやDSP(ディジタル
・シグナル・プロセッサ)等において、効率よく行列の
乗算を行うことができる、行列乗算装置に関するもので
ある。
【0002】
【従来の技術】行列の乗算式は、例えば次式のように表
すことができる。 CJA,KB =AJA,KA ×BJB,KB …(1) ここで、“JA,KB”はJA×KB行列を意味するも
のとする。
【0003】この場合の乗算のステップは、以下のよう
になる。 [1] C1,1 の計算:Aの第1行要素とBの第1列要素の積和[min(KA,JB) 回] C1,2 の計算:Aの第1行要素とBの第2列要素の積和[min(KA,JB) 回] : C1,KB の計算:Aの第1行要素とBの第KB列要素の積和[min(KA,JB) 回] [2] C2,1 の計算:Aの第2行要素とBの第1列要素の積和[min(KA,JB) 回] C2,2 の計算:Aの第2行要素とBの第2列要素の積和[min(KA,JB) 回] : C2,KB の計算:Aの第2行要素とBの第KB列要素の積和[min(KA,JB) 回] : : [JA]CJA,1 の計算:Aの第JA行要素とBの第1列要素の積和[min(KA,JB) 回] CJA,2 の計算:Aの第JA行要素とBの第2列要素の積和[min(KA,JB) 回] : CJA,KB の計算:Aの第JA行要素とBの第KB列要素の積和[min(KA,JB) 回]
【0004】このように、行列の乗算の演算は、乗算結
果の行列の各要素を構成する積和を求める各要素ごとの
N(NはKAとJBのいずれか小さい方の値)回の演算
ループと、乗算結果の行列の行ごとのKB回の演算ルー
プと、乗算結果の行列の行の数に等しいJA回の演算ル
ープとからなる、多重演算ループ構造となる。
【0005】図11,図12,図13は、行列の乗算に
用いられる行列のメモリ配置とポインタの動き(1),
(2),(3)を示したものである。図11は、A行列
のメモリ配置とこれに対するポインタの動きを示したも
のであって、メモリにはA行列の各要素が行ごとに格納
されており、ポインタの動きはこれに対応して、行ごと
に初期値XAから各要素を順次アクセスする、KB回の
ループを繰り返すことが示されている。
【0006】図12は、B行列のメモリ配置とこれに対
するポインタの動きを示したものであって、メモリには
B行列の各要素が行ごとに格納されており、ポインタの
動きは、各行の同一列の要素ごとにN回のアクセスを、
初期値XBからKB回行うループを、JA回繰り返すこ
とが示されている。
【0007】図13は、C行列のメモリ配置とこれに対
するポインタの動きを示したものであって、メモリには
乗算結果のC行列の各要素が、初期値XCからJA×K
B個、順次格納されることが示されている。
【0008】図14,図15は、プログラムによる行列
の乗算のフロー(1),(2)を示したものである。図
14,図15において、最初、乗算結果の各要素を求め
るための積和演算回数Nを、A行列の列数KAと、B行
列の行数JBとの最小数として求める(S1)。
【0009】次に各行列A,B,Cの先頭要素のアドレ
スXA,XB,XCをポインタに設定し(S2)、さら
に行列A,Bのポインタを格納するそれぞれのバッファ
を初期化する(S3)。この場合の初期値は、行列A,
Bの先頭要素のアドレスである。またB行列について
の、ポインタの更新量Y0を設定する(S4)。この場
合の更新量Y0の値は、前述のようにKBである。
【0010】次に演算に使用するアキュムレータをクリ
アして、その値Cを0にしたのち(S5)、C行列の各
要素を求めるN回の積和演算を行う(S6)。この場合
は、ポインタを初期値XAから順次1ずつ更新しなが
ら、A行列のメモリを読み出してAレジスタにロード
し、ポインタを初期値XBから順次Y0ずつ更新しなが
ら、B行列のメモリを読み出してBレジスタにロード
し、積和演算結果を初期値Cに順次加算しながらCレジ
スタにロードする。積和演算結果は、結果メモリにスト
アされる(S7)。
【0011】さらにB行列のポインタ・バッファを初期
値から+1し(S8)、ポインタを更新する(S9)。
この場合、A行列のメモリに対するポインタは変化しな
いが、B行列のメモリに対するポインタは、+1されて
1列分ずれている。このような演算ループをKB回繰り
返すことによって、C行列の第1行が求められる(S1
0)。
【0012】次に、ポインタ・バッファにおけるA行列
のポインタを+KAし、B行列のポインタを初期値とし
て(S11)、ポインタを更新する(S12)。この場
合、A行列のメモリに対するポインタは、+KAされて
1行分ずれているが、B行列のメモリに対するポインタ
は変化しない。このような演算ループをJA回繰り返す
ことによって、C行列が求められる(S13)。
【0013】
【発明が解決しようとする課題】プログラムを用いて行
う従来の行列の乗算は、次のような点がオーバーヘッド
となり、演算効率を低下させる原因となっている。 三重ループの演算制御を行うことが必要なため、そ
の制御が極めて煩雑である。
【0014】 ポインタ更新の処理が複雑である。す
なわち、上述のJA回,KB回の各ループ尾において、
次回のループのためのポインタの設定を行うが、この際
バッファを利用して、バッファ−ポインタ相互間の転送
を頻繁に行うため、その処理が煩雑で時間がかかる。
【0015】本発明は、このような従来技術の課題を解
決しようとするものであって、行列の乗算を行う場合
に、プログラムによってループ制御やポインタ制御を行
わずに、数種類のレジスタ,カウンタ,セレクタを用い
た簡単なハードウエア構成によって、演算を行わせるこ
とによって、演算に必要な処理量を削減するとともに、
プログラミングを容易にし、かつ演算装置の消費電力を
低減することができる、行列乗算装置を提供することを
目的としている。
【0016】
【課題を解決するための手段】
(1) 図1は、本発明の原理的構成を示したものである。
本発明は、JA×KA行列AJA,KA とJB×KB行列B
JB,KB とを乗算して、JA×KB行列CJA,KBを得る行
列乗算装置において、行列乗算命令CJA,KB =AJA,KA
×BJB,KB の実行をプログラムによって制御するプログ
ラム制御部1と、このプログラムの使用するアドレスを
生成するアドレス生成部2と、行列AJA,KA の要素と行
列BJB,K B の要素との積和演算を行う積和演算部3と、
行列AJA,KA と行列BJB,KB の各要素を予め格納すると
ともに、求められた行列CJA,KB の各要素を格納するメ
モリ4とを備えたものである。
【0017】(2)(1)において、プログラム制御部1が、
プログラム・カウンタ11のカウントに応じて行列乗算
命令を読みだす命令ROM12と、行列乗算命令の各行
列A JA,KA ,BJB,KB の行数,列数JA,KA,JBK
Bを格納する行・列レジスタ15と、列数KA,行数J
Bの最小値Nを算出する比較・演算部16と、この最小
値Nを格納するNレジスタ17と、行列CJA,KB の各要
素を求めるN回の積和演算ループを制御する第1のカウ
ンタ18と、行列CJA,KB の各行要素を求めるKB回の
演算ループを制御する第2のカウンタ19と、行列C
JA,KB の列要素を求めるJA回の演算ループを制御する
第3のカウンタ20とを備える。
【0018】(3)(2)において、アドレス生成部2が、N
回の積和演算ループにおいて、行列乗算命令の各行列A
JA,KA ,BJB,KB ,CJA,KB の要素(XA,XB,X
C)を指示するポインタを格納するポインタ・レジスタ
・ファイル21を用いて+1更新することによって、行
列CJA,KB の各要素を算出するアドレスを生成し、KB
回の演算ループにおいて、ポインタ・レジスタ・ファイ
ル21から転送された先頭アドレス(XA’,XB’)
を初期値として格納する第1のポインタ・バッファ22
を用いて+KA更新することによって、行列CJA,KB
JA個の行要素を算出するアドレスを生成し、JA回の
演算ループにおいて、行列BJB,KB の先頭アドレス(X
B”)を初期値として格納する第2のポインタ・バッフ
ァ23を用いて+KB更新することによって行列C
JA,KB のJA×KB個の列要素を算出するアドレスを生
成する。
【0019】(4)(1)において、積和演算部3が、メモリ
4における行列AJA,KA の要素をロードする第1の入力
レジスタ36と、メモリ4における行列BJB,KB の要素
をロードする第2の入力レジスタ37と、この両入力レ
ジスタ36,37のデータの積和演算を行う積和演算ユ
ニット38とを備えて構成される。
【0020】
【作用】本発明の行列乗算装置においては、プログラム
制御部1によって、行列乗算命令CJA,KB =AJA,KA ×
JB,KB の実行をプログラムによって制御し、アドレス
生成部2によって、プログラムの使用するアドレスを生
成するとともに、積和演算部3によって、行列AJA,KA
の要素と行列BJB,KB の要素との積和演算を行う。この
際メモリ4を用いて、行列AJA,KA と行列BJB,KB の各
要素を予め格納するとともに、求められた行列CJA,KB
の各要素を格納する。
【0021】プログラム制御部1においては、命令RO
M12に格納されている各行列の行数,列数(JA,K
A,JB,KB)を格納する行・列レジスタ15と、算
出された列数KA,行数JBの最小値Nを格納するNレ
ジスタ17と、演算に必要なリピート数2N+1,K
B,JAを格納するカウンタ18,19,20とを用い
て、行列乗算のプログラムを実行する。
【0022】アドレス生成部2においては、N回の積和
演算において、各行列AJA,KA ,B JB,KB ,CJA,KB
要素を指示するポインタを格納するポインタ・レジスタ
・ファイル21を用いて、通常の+1更新を行い、ルー
プ尾では、KB回ループの先頭アドレスを初期値として
格納するポインタ・バッファ22を用いて+KA更新を
行い、JA回ループでは、B行列の先頭アドレスを初期
値として格納するポインタ・バッファ23を用いて+K
B更新して、演算に必要なアドレスを生成する。この場
合の更新は、更新値0,1,KA,KBから選択して、
これをアドレス算術ユニット25で加算することによっ
て行われる。
【0023】積和演算部3においては、ポインタによっ
て示されたメモリ4から、乗算すべきデータが入力レジ
スタ36,37にロードされて、積和演算ユニット38
に入力され、積和演算ユニット38によって、N回の積
和演算によって、行列CJA,K B の要素が算出される。積
和演算結果は、データバスを経て、再びメモリ4に格納
される。
【0024】
【実施例】図2は、本発明の一実施例におけるプログラ
ム制御部の構成を示したものである。11はプログラム
・カウンタ、12は演算に必要な命令を格納した命令R
OM、13は命令をデコードするデコーダ、14はデー
タ・バス、15は演算に使用する各行列の行数と列数
(JA,KA,JB,KB)を格納する行・列レジス
タ、16は列数KAと行数JBの最小値Nを選択する比
較・選択部、17はNを格納するNレジスタ、18はリ
ピート数(2N+1)を格納するカウンタ、19はリピ
ート数(KB)を格納するカウンタ、20はリピート数
(JA)を格納するカウンタである。
【0025】プログラム・カウンタ11が順次カウント
することによって、命令ROM12から演算に必要な命
令が読み出される。デコーダ13は、これをデコードし
て所要の制御を行う。
【0026】命令ROM12から読み出された各行列の
行数,列数(JA,KA,JB,KB)は、行・列レジ
スタ15における対応する領域に格納される。比較・選
択部16は、A行列の列数KAと、B行列の行数JBと
を比較して、小さい方の値Nを選択し、Nレジスタ17
はこの値を格納する。
【0027】カウンタ18,19,20は、2N+1,
KB,JAをそれぞれリピート数として格納して、デー
タバス14との間で、データの送受を行う。
【0028】図3は、本発明の一実施例におけるアドレ
ス生成部の構成を示したものである。21は、初期状態
において行列A,B,Cのそれぞれの要素(XA,X
B,XC)の先頭アドレスを示すポインタを格納するポ
インタ・レジスタ・ファイル、22は初期状態において
KB回ループにおける行列A,Bの要素(XA’,X
B’)の先頭アドレスを示すポインタを格納するポイン
タ・バッファ、23は初期状態においてJA回ループに
おける行列Bの要素(XB”)の先頭アドレスを示すポ
インタを格納するポインタ・バッファ、24はフリップ
・フロップ(FF)、25はアドレス算術ユニット、2
6はポインタ・レジスタ・ファイル21の入力を選択す
るセレクタ、27はポインタ・レジスタ・ファイル21
の出力を選択するセレクタ、28はポインタ・バッファ
22の出力を選択するセレクタ、29はセレクタ27,
28の出力を選択するセレクタ、30はアドレス算術ユ
ニット25における更新値を選択するセレクタ、31は
アドレス・バスである。
【0029】ポインタ・レジスタ・ファイル21は、最
初、A行列,B行列,C行列のそれぞれのメモリに対す
るポインタの初期値XA,XB,XCを保持し、これか
らフリップ・フロップ24を経てタイミングを設定して
転送することによって、ポインタ・バッファ22にA行
列,B行列の先頭アドレスXA’,XB’が設定され
る。セレクタ30は、“KA”,“KB”または“1”
を加算することによって、ポインタを更新する。“0”
のときは、ポインタは更新されない。生成アドレスは、
セレクタ27からアドレス・バス31に出力される。
【0030】図4は、本発明の一実施例における演算部
とメモリの構成を示したものである。35はメモリであ
って、A行列,B行列,C行列をそれぞれ格納する。3
6,37は積和演算入力を保持する入力レジスタ
(A),(B)、38は積和演算ユニットである。
【0031】メモリ35からのA行列,B行列のデータ
は、データ・バス14を経てレジスタ(A)36,レジ
スタ(B)37にロードされたのち、積和演算ユニット
38において積和演算を行われ、演算結果は、データ・
バス14を経てメモリ35におけるC行列の領域に格納
される。メモリ35は、アドレス・バス31から、先頭
アドレスXA,XB,XCを与えられる。
【0032】以下においては、図2〜図4に示された構
成に基づいて、(1)式に示された行列の乗算「C
JA,KB =AJA,KA ×BJB,KB 」を実行する際の動作を詳
細に説明する。
【0033】最初、プログラムカウンタ11の所定のア
ドレスに、(1)式に示された演算を実行させる命令
が、例えば、 C(C1)=AJA,KA (A1)×BJB,KB (B1) …(2) のように格納されているものとする。ここで、A1,B
1,C1はそれぞれ、A行列,B行列,C行列が格納さ
れているメモリの先頭アドレスを示し、メモリ上におけ
るその配置は、図11〜図13に示されたものと同じで
ある。
【0034】図5〜図10は本発明の一実施例のシーケ
ンス・チャート(1)〜(6)を示したものである。図
中、縦の列はプログラムの1サイクルに対応している。
またプロセッサは、3段のパイプ・ライン構造を持つも
のとする。各図において、CO1,CO2,CO3はそ
れぞれメモリ18,19,20の内容を示し、〔ad〕
は生成されるアドレスを示し、〔LOAD〕は積和演算
のためにメモリからロードされるレジスタ(レジスタ
(A)36またはレジスタ(B)37)を示し、〔EX
E〕は積和演算の実行を示している。
【0035】 初期設定 プログラム・カウンタ11が所定のアドレス値になっ
て、命令ROM12内の演算命令が指示されると、デー
タ・バス14を介して、行・列レジスタ15に、JA,
KA,JB,KBがそれぞれロードされる。
【0036】次のサイクルでは、データ・バス14を介
して、ポインタ・レジスタ・ファイル21におけるX
A,XB,XCに、それぞれ初期値である先頭アドレス
(A1,B1,C1)がロードされ、ポインタ・バッフ
ァ23におけるXB”にB1がロードされる。これと同
時に比較・選択部16においてKA,JBの最小値Nが
算出されて、結果がNレジスタ17に格納される。
【0037】さらに次のサイクルで、カウンタ18,1
9,20にそれぞれ、2N+1,KB,JAがセットさ
れ、フリップ・フロップ24にクロックを与えることに
よって、ポインタ・レジスタ・ファイル21から、X
A,XBがポインタ・バッファ22のXA’,XB’に
転送される。
【0038】 C1,1 の計算 カウンタ18は、プロセッサのサイクルに同期してカウ
ント・ダウンする。C 1,1 の計算時、カウンタ19はK
B、カウンタ20はJAに保たれる。
【0039】カウンタ18の値が2N+1のとき、ポイ
ンタ・レジスタ・ファイル21のXAがセレクタ27を
経て読み出されることによって、A1がアドレスとして
アドレス・バス31に出力される。同時に、XAが+1
更新されるので、A1+1が新たなXAとなる。
【0040】カウンタ18の値が2Nのとき、ポインタ
・レジスタ・ファイル21のXBがセレクタ27を経て
読み出されることによって、B1がアドレス・バス31
に出力される。同時に、XBが+KB更新されるので、
B1+KBが新たなXBとなる。このとき、A1によっ
て指示されるメモリのデータが、レジスタ(A)36に
ロードされる。
【0041】カウンタ18の値が2N−1のとき、生成
されるアドレスはA1+1であり、ポインタ・レジスタ
・ファイル21のXAはA1+2となる。このとき、B
1によって指示されるメモリのデータがレジスタ(B)
37にロードされる。
【0042】カウンタ18の値が2N−2のとき、生成
されるアドレスはB1+KBであり、ポインタ・レジス
タ・ファイル21のXBはB1+2KBとなる。このと
き、A1によって指示されるメモリのデータがレジスタ
(A)36にロードされる。ここで、積和演算を行っ
て、A×B=Cを算出する。
【0043】以後、同様な演算を続けて、カウンタ18
の値が4のとき、生成されるアドレスはB1+(N−
2)KBであり、ポインタ・レジスタ・ファイル21の
XBはB1+(N−1)KBとなる。このとき、A1+
N−2によって指示されるメモリのデータがレジスタ
(A)36にロードされる。ここで、積和演算を行っ
て、C+A×B=Cを算出する。
【0044】カウンタ18の値が3のとき、生成される
アドレスはA1+N−1である。このとき、アドレス算
術ユニット25への入力として、ポインタ・バッファ2
2のXB’がセレクタ28,29によって選択され、±
0更新されるので、結果的に更新がなく、ポインタ・レ
ジスタ・ファイル21の新たなXAはA1となる。そし
て、B1+(N−2)KBによって指示されるメモリの
データが、レジスタ(B)37にロードされる。
【0045】カウンタ18の値が2のとき、生成される
アドレスはB1+(N−1)KBである。このとき、ポ
インタ・バッファ22のXB’がセレクタ28,29に
よって選択されてアドレス算術ユニット25へ入力され
るとともに、セレクタ30から“1”が入力されて+1
更新がなされるので、ポインタ・レジスタ・ファイル2
1における新たなXBは、B1+1となる。そして、A
1+N−1によって指示されるメモリのデータがレジス
タ(A)36にロードされる。ここで積和演算を行っ
て、C+A×B=Cを算出する。
【0046】カウンタ18の値が1のとき、生成される
アドレスはC1であって、ポインタ・レジスタ・ファイ
ル21のXCは+1更新されて、C1+1となる。この
とき、B1+(N−1)KBによって指示されるメモリ
のデータが、レジスタ(B)37にロードされる。そし
て、フリップ・フロップ24にクロックが供給されて、
ポインタ・レジスタ・ファイル21のXA,XBがポイ
ンタ・バッファ22のXA’,XB’に転送されて、新
たなXA,XBはそれぞれA1,B1+1となる。
【0047】次に再びカウンタ18の値が2N+1にな
ったとき、カウンタ19の値はKB−1であって、C+
A×B=Cが算出されて積和演算が終了する。
【0048】次にカウンタ18の値が2Nになったと
き、カウンタ19の値はKB−1であって、積和演算結
果がC1によって指示されるメモリに格納される。
【0049】 C1,2 の計算 カウンタ18は、プロセッサのサイクルに同期してカウ
ント・ダウンする。C 1,2 の計算時、カウンタ19はK
B−1、カウンタ20はJAに保たれる。
【0050】カウンタ18の値が2N+1のとき、カウ
ンタ19がKB−1にカウント・ダウンされる。生成さ
れるアドレスはA1であり、ポインタ・レジスタ・ファ
イル21のXAはA1+1になる。
【0051】カウンタ18の値が2Nのとき、生成され
るアドレスはB1+1であり、ポインタ・レジスタ・フ
ァイル21のXBはB1+1+KBとなる。
【0052】以下、同様な演算を続けて、カウンタ18
の値が3のとき、生成されるアドレスはA1+N−1で
ある。このとき、アドレス算術ユニット25への入力と
して、ポインタ・バッファ22のXA’がセレクタ2
8,29によって選択され、±0更新がなされるので、
結果的に更新がなく、ポインタ・レジスタ・ファイル2
1の新たなXAはA1となる。そして、B1+1+(N
−2)KBによって指示されるメモリのデータが、レジ
スタ(B)37にロードされる。
【0053】カウンタ18の値が2のとき、生成される
アドレスはB1+1+(N−1)KBであり、このと
き、ポインタ・バッファ22のXB’がセレクタ28,
29によって選択されてアドレス算術ユニット25へ入
力されるとともに、セレクタ30から“1”が入力され
て+1更新される結果、新たなXBは、B1+2とな
る。そして、A1+N−1によって指示されるメモリの
データがレジスタ(A)36にロードされる。ここで積
和演算を行って、C+A×B=Cを算出する。
【0054】カウンタ18の値が1のとき、生成される
アドレスはC1であって、ポインタ・レジスタ・ファイ
ル21のXCは+1更新されて、C1+2となる。この
とき、B1+1+(N−1)KBによって指示されるメ
モリのデータが、レジスタ(B)37にロードされる。
そして、フリップ・フロップ24にクロックが供給され
て、ポインタ・レジスタ・ファイル21のXA,XBが
ポインタ・バッファ22のXA’,XB’に転送され
て、新たなXA,XBはそれぞれA1,B1+2とな
る。
【0055】次に再びカウンタ18の値が2N+1にな
ったとき、カウンタ19の値はKB−2であって、C+
A×B=Cが算出されて積和演算が終了する。
【0056】次にカウンタ18の値が2Nになったと
き、カウンタ19の値はKB−2であって、積和演算結
果がC1+1によって指示されるメモリに格納される。
以後、同様な演算が繰り返される。
【0057】 C1,KB-1の計算 カウンタ18は、プロセッサのサイクルに同期してカウ
ント・ダウンする。C 1,KB-1の計算時、カウンタ19は
1、カウンタ20はJAに保たれる。
【0058】カウンタ18の値が2N+1のとき、カウ
ンタ19が1にカウント・ダウンされる。生成されるア
ドレスはA1であり、ポインタ・レジスタ・ファイル2
1のXAはA1+1になる。
【0059】カウンタ18の値が2Nのとき、生成され
るアドレスはB1+KB−1であり、ポインタ・レジス
タ・ファイル21のXBはB1+2KB−1となる。
【0060】以下、同様な演算を続けて、カウンタ18
の値が3のとき、生成されるアドレスはA1+N−1で
ある。このとき、アドレス算術ユニット25への入力と
して、ポインタ・バッファ22のXA’がセレクタ2
8,29によって選択され、+KA更新がなされるの
で、ポインタ・レジスタ・ファイル21の新たなXAは
A1+KAとなる。そして、B1+(N−1)KB−1
によって指示されるメモリのデータが、レジスタ(B)
37にロードされる。
【0061】カウンタ18の値が2のとき、生成される
アドレスはB1+N*KB−1である。このとき、ポイ
ンタ・バッファ22のXB’がセレクタ28,29によ
って選択されてアドレス算術ユニット25へ転送される
結果、新たなXBは、B1となる。そして、A1+N−
1によって指示されるメモリのデータがレジスタ(A)
36にロードされる。ここで積和演算を行って、C+A
×B=Cを算出する。
【0062】カウンタ18の値が1のとき、生成される
アドレスはC1+KB−1であって、ポインタ・レジス
タ・ファイル21のXCは+1更新されて、C1+KB
となる。このとき、B1+N*KB−1によって指示さ
れるメモリのデータが、レジスタ(B)37にロードさ
れる。そして、フリップ・フロップ24にクロックが供
給されて、ポインタ・レジスタ・ファイル21のXA,
XBがポインタ・バッファ22のXA’,XB’に転送
されて、新たなXA,XBはそれぞれA1+KA,B1
となる。
【0063】次に再びカウンタ18の値が2N+1にな
ったとき、カウンタ19の値はKB、カウンタ20の値
はJA−1であって、C+A×B=Cが算出されて積和
演算が終了する。
【0064】次にカウンタ18の値が2Nになったと
き、カウンタ19の値はKB、カウンタ20の値はJA
−1であって、積和演算結果がC1+KB−1によって
指示されるメモリに格納される。
【0065】 C2,1 の計算 カウンタ18は、プロセッサのサイクルに同期してカウ
ント・ダウンする。C 2,1 の計算時、カウンタ19はK
B、カウンタ20はJA−1に保たれる。
【0066】カウンタ18の値が2N+1のとき、カウ
ンタ19がKBにセットされる。またカウンタ20がJ
A−1にカウント・ダウンされる。生成されるアドレス
はA1+KAであり、ポインタ・レジスタ・ファイル2
1のXAはA1+KA+1になる。
【0067】カウンタ18の値が2Nのとき、生成され
るアドレスはB1であり、ポインタ・レジスタ・ファイ
ル21のXBはB1+KBとなる。以下、同様な演算が
行われる。
【0068】 CJA,KB の計算 上述と同様にして演算が行われて、カウンタ18の値が
3のとき、生成されるアドレスはA1+(J1−1)K
A+N−1である。このとき、B1+(N−1)KB−
1によって指示されるメモリのデータがレジスタ(B)
37にロードされる。
【0069】カウンタ18の値が2のとき、生成される
アドレスはB1+N*KB−1である。このとき、A1
+(J1−1)KA+N−1によって指示されるメモリ
のデータがレジスタ(A)36にロードされる。ここで
積和演算を行って、C+A×B=Cを算出する。
【0070】カウンタ18の値が1のとき、B1+N*
KB−1によって指示されるメモリのデータが、レジス
タ(B)37にロードされる。
【0071】カウンタ18,カウンタ19,カウンタ2
0の値がともに1になったとき、その+1サイクル後
に、C+A×B=Cを算出して積和演算を終了する。
【0072】カウンタ18,カウンタ19,カウンタ2
0の値がともに1になって、+2サイクル後に、積和演
算結果がC1+JA*KB−1によって指示されるメモ
リに格納される。
【0073】
【発明の効果】以上説明したように本発明によれば、行
列の乗算「CJA,KB =AJA,KA ×BJB ,KB 」を、マイク
ロプロセッサやDSP等によって行う際に、従来のよう
に、プログラムによって多重ループ制御や、ポインタ制
御等を行うことなしに、数種類のレジスタ,カウンタ,
セレクタ等を用いた回路構成からなる、簡単なハードウ
エアによって演算を実現するようにしたので、演算処理
量を減少させることができるとともに、プログラミング
が容易となり、さらに演算装置の消費電力を低減するこ
とが可能となる。
【図面の簡単な説明】
【図1】本発明の原理的構成を示す図である。
【図2】本発明の一実施例におけるプログラム制御部の
構成を示す図である。
【図3】本発明の一実施例におけるアドレス生成部の構
成を示す図である。
【図4】本発明の一実施例における演算部とメモリの構
成を示す図である。
【図5】本発明の一実施例のシーケンス・チャート
(1)を示す図である。
【図6】本発明の一実施例のシーケンス・チャート
(2)を示す図である。
【図7】本発明の一実施例のシーケンス・チャート
(3)を示す図である。
【図8】本発明の一実施例のシーケンス・チャート
(4)を示す図である。
【図9】本発明の一実施例のシーケンス・チャート
(5)を示す図である。
【図10】本発明の一実施例のシーケンス・チャート
(6)を示す図である。
【図11】行列の乗算に用いられる行列のメモリ配置と
ポインタの動き(1)を示す図である。
【図12】行列の乗算に用いられる行列のメモリ配置と
ポインタの動き(2)を示す図である。
【図13】行列の乗算に用いられる行列のメモリ配置と
ポインタの動き(3)を示す図である。
【図14】プログラムによる行列の乗算のフロー(1)
を示す図である。
【図15】プログラムによる行列の乗算のフロー(2)
を示す図である。
【符号の説明】
1 プログラム制御部 2 アドレス生成部 3 積和演算部 4 メモリ 11 プログラム・カウンタ 12 命令ROM 15 行・列レジスタ 16 比較・選択部 17 Nレジスタ 18 カウンタ 19 カウンタ 20 カウンタ 21 ポインタ・レジスタ・ファイル 22 ポインタ・バッファ 23 ポインタ・バッファ 36 入力レジスタ 37 入力レジスタ 38 積和演算ユニット

Claims (4)

    【特許請求の範囲】
  1. 【請求項1】 JA×KA行列AJA,KA とJB×KB行
    列BJB,KB とを乗算して、JA×KB行列CJA,KB を得
    る行列乗算装置において、 行列乗算命令CJA,KB =AJA,KA ×BJB,KB の実行をプ
    ログラムによって制御するプログラム制御部(1)と、 該プログラムの使用するアドレスを生成するアドレス生
    成部(2)と、 行列AJA,KA の要素と行列BJB,KB の要素との積和演算
    を行う積和演算部(3)と、 行列AJA,KA と行列BJB,KB の各要素を予め格納すると
    ともに、求められた行列CJA,KB の各要素を格納するメ
    モリ(4)とを備えたことを特徴とする行列乗算装置。
  2. 【請求項2】 前記プログラム制御部(1)が、 プログラム・カウンタ(11)のカウントに応じて前記
    行列乗算命令を読みだす命令ROM(12)と、 前記行列乗算命令の各行列AJA,KA ,BJB,KB の行数,
    列数JA,KA,JBKBを格納する行・列レジスタ
    (15)と、 該列数KA,行数JBの最小値Nを算出する比較・演算
    部(16)と、 該最小値Nを格納するNレジスタ(17)と、 前記行列CJA,KB の各要素を求めるN回の積和演算ルー
    プを制御する第1のカウンタ(18)と、 前記行列CJA,KB の各行要素を求めるKB回の演算ルー
    プを制御する第2のカウンタ(19)と、 前記行列CJA,KB の列要素を求めるJA回の演算ループ
    を制御する第3のカウンタ(20)とを備えたことを特
    徴とする請求項1に記載の行列乗算装置。
  3. 【請求項3】 前記アドレス生成部(2)が、 前記N回の積和演算ループにおいて、行列乗算命令の各
    行列AJA,KA ,BJB,K B ,CJA,KB の要素(XA,X
    B,XC)を指示するポインタを格納するポインタ・レ
    ジスタ・ファイル(21)を用いて+1更新することに
    よって、行列CJA ,KB の各要素を算出するアドレスを生
    成し、前記KB回の演算ループにおいて、ポインタ・レ
    ジスタ・ファイル(21)から転送された先頭アドレス
    (XA’,XB’)を初期値として格納する第1のポイ
    ンタ・バッファ(22)を用いて+KA更新することに
    よって、行列CJA,KB のJA個の行要素を算出するアド
    レスを生成し、前記JA回の演算ループにおいて、行列
    JB,KB の先頭アドレス(XB”)を初期値として格納
    する第2のポインタ・バッファ(23)を用いて+KB
    更新することによって行列CJA,KB のJA×KB個の列
    要素を算出するアドレスを生成することを特徴とする請
    求項2に記載の行列乗算装置。
  4. 【請求項4】 前記積和演算部(3)が、前記メモリ
    (4)における行列A JA,KA の要素をロードする第1の
    入力レジスタ(36)と、前記メモリ(4)における行
    列BJB,KB の要素をロードする第2の入力レジスタ(3
    7)と、該両入力レジスタ(36),(37)のデータ
    の積和演算を行う積和演算ユニット(38)とを備えて
    なることを特徴とする請求項1に記載の行列乗算装置。
JP13018293A 1993-06-01 1993-06-01 行列乗算装置 Withdrawn JPH06342450A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP13018293A JPH06342450A (ja) 1993-06-01 1993-06-01 行列乗算装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP13018293A JPH06342450A (ja) 1993-06-01 1993-06-01 行列乗算装置

Publications (1)

Publication Number Publication Date
JPH06342450A true JPH06342450A (ja) 1994-12-13

Family

ID=15028031

Family Applications (1)

Application Number Title Priority Date Filing Date
JP13018293A Withdrawn JPH06342450A (ja) 1993-06-01 1993-06-01 行列乗算装置

Country Status (1)

Country Link
JP (1) JPH06342450A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109240746A (zh) * 2016-04-26 2019-01-18 北京中科寒武纪科技有限公司 一种用于执行矩阵乘运算的装置和方法
CN109840585A (zh) * 2018-01-10 2019-06-04 中国科学院计算技术研究所 一种面向稀疏二维卷积的运算方法和系统
CN112991142A (zh) * 2021-03-31 2021-06-18 腾讯科技(深圳)有限公司 图像数据的矩阵运算方法、装置、设备及存储介质

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109240746A (zh) * 2016-04-26 2019-01-18 北京中科寒武纪科技有限公司 一种用于执行矩阵乘运算的装置和方法
CN109240746B (zh) * 2016-04-26 2020-12-18 安徽寒武纪信息科技有限公司 一种用于执行矩阵乘运算的装置和方法
CN109840585A (zh) * 2018-01-10 2019-06-04 中国科学院计算技术研究所 一种面向稀疏二维卷积的运算方法和系统
CN109840585B (zh) * 2018-01-10 2023-04-18 中国科学院计算技术研究所 一种面向稀疏二维卷积的运算方法和系统
CN112991142A (zh) * 2021-03-31 2021-06-18 腾讯科技(深圳)有限公司 图像数据的矩阵运算方法、装置、设备及存储介质
CN112991142B (zh) * 2021-03-31 2023-06-16 腾讯科技(深圳)有限公司 图像数据的矩阵运算方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
KR101202445B1 (ko) 프로세서
JPH0954761A (ja) デイジタル信号処理装置及び情報処理システム
JP2001067206A (ja) モジュラー乗算を実行するためのシステム並びに方法
JPH06342450A (ja) 行列乗算装置
JP3032340B2 (ja) プロセッサのデータメモリ用アドレスジェネレータ
JP2012022500A (ja) Fft演算装置
US4849926A (en) Data processing circuit for calculating either a total sum or a total product of a series of data at a high speed
JP2737933B2 (ja) 除算装置
JP2885197B2 (ja) 演算処理装置及び演算処理方法
JPH05143447A (ja) デイジタルプロセツサ及びその制御方法
JPS60204029A (ja) 信号処理装置
JP4107043B2 (ja) 演算処理装置
JP2778478B2 (ja) 相関演算プロセッサ
JP3088956B2 (ja) 演算装置
CN117762492A (zh) 数据处理方法、装置、计算机设备及可读存储介质
JPH02204828A (ja) 演算処理装置
KR950010820B1 (ko) 반복되는 데이타의 연산 처리 장치
JPH02176971A (ja) ベクトル演算装置
JPH04330519A (ja) 乗算回路
JPH05290080A (ja) 並列処理装置
JPH0221331A (ja) マイクロコンピュータのプログラム制御方式
JPS62295138A (ja) アドレス生成方式
JPH0623979B2 (ja) ベクトルプロセツサ
JPS62295175A (ja) アドレス生成回路
JPS5998249A (ja) デイジタル情報処理装置

Legal Events

Date Code Title Description
A300 Withdrawal of application because of no request for examination

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20000801