(57)【特許請求の範囲】
【請求項１】
プロセッサから乗算対象である２つの行列の要素を受け取って行列乗算を行う行列演算コプロセッサにおいて、
各々第１のデータ入力端子に与えられるデータと第２のデータ入力端子に与えられるデータとを乗算する複数の乗算器と、
前記複数の乗算器による各乗算結果の累算を各々行う複数の累算器と、
乗算対象である２つの行列のうちの一方の行列の要素を記憶する行列要素レジスタと、
前記２つの行列の乗算結果である行列の要素を前記複数の累算器から行毎にまたは列毎に順次得るための制御を行う手段であって、前記乗算結果である行列の１行分または１列分の要素を前記複数の累算器から得るために、前記複数の累算器の累算値を予め初期化した後、前記乗算対象である２つの行列のうちの他方の行列の１行分または１列分の要素を前記プロセッサから１個ずつ順次受け取り、１個の要素を受け取る毎に、受け取った要素を前記複数の乗算器の第１のデータ入力端子に供給するとともに、前記乗算結果である行列の１行分または１列分の要素を得るための演算において当該要素を共通の乗算相手とする１行分または１列分の要素を前記行列要素レジスタから読み出して前記複数の乗算器の各々の第２のデータ入力端子に各々供給し、前記複数の乗算器から得られる各乗算結果の累算を前記複数の累算器に各々行わせる制御手段と
を具備することを特徴とする行列演算コプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、プロセッサから乗算対象である２つの行列の要素を受け取って、２つの行列の乗算を行う行列演算コプロセッサに関する。
【背景技術】
【０００２】
画像処理装置では、例えば画像の回転等の処理のために行列乗算処理が頻繁に行われる。一般に行列乗算処理は演算量が多い。従って、画像処理装置全体を制御するプロセッサにこの行列乗算処理を実行させると、画像処理装置の処理効率を大幅に低下させることとなる。そこで、プロセッサの負担を軽減するために、演算処理専用のコプロセッサを設け、このコプロセッサに行列乗算処理を実行させる構成が採られることがある（例えば特許文献１参照）。
【特許文献１】特開平７−２１１５５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ところで、例えば４×４個の２個の行列同士の乗算処理を行う場合、乗算結果である行列の１つの要素を算出するために、乗算対象である２個の行列のうち一方の行列の一行分の要素４個と他方の行列の一列分の要素４個、すなわち、合計８個の要素が必要となる。そこで、従来の技術において、コプロセッサは、乗算結果である行列の１つの要素を得るために、この８個の要素をプロセッサから受け取り、積和演算処理を行っていた。しかし、プロセッサおよびコプロセッサ間のデータ供給経路のビット幅は小さく、１クロックに同期して１要素分のデータしかプロセッサからコプロセッサに送ることができない。このため、乗算結果である行列の１つの要素を得るための所要クロック数は８クロック、乗算結果である行列の全要素を得るための所要クロック数は１６×８＝１２８クロックとなり、行列乗算処理の所要時間が長いという問題があった。
【０００４】
この発明は、以上説明した事情に鑑みてなされたものであり、行列の要素をプロセッサから多数まとめて送ることができない状況においても、行列乗算処理を高速に実行することができる行列演算コプロセッサを提供することを目的としている。
【課題を解決するための手段】
【０００５】
この発明は、プロセッサから乗算対象である２つの行列の要素を受け取って行列乗算を行う行列演算コプロセッサにおいて、各々第１のデータ入力端子に与えられるデータと第２のデータ入力端子に与えられるデータとを乗算する複数の乗算器と、前記複数の乗算器による各乗算結果の累算を各々行う複数の累算器と、乗算対象である２つの行列のうちの一方の行列の要素を記憶する行列要素レジスタと、前記２つの行列の乗算結果である行列の要素を前記複数の累算器から行毎にまたは列毎に順次得るための制御を行う手段であって、前記乗算結果である行列の１行分または１列分の要素を前記複数の累算器から得るために、前記複数の累算器の累算値を予め初期化した後、前記乗算対象である２つの行列のうちの他方の行列の１行分または１列分の要素を前記プロセッサから１個ずつ順次受け取り、１個の要素を受け取る毎に、受け取った要素を前記複数の乗算器の第１のデータ入力端子に供給するとともに、前記乗算結果である行列の１行分または１列分の要素を得るための演算において当該要素を共通の乗算相手とする１行分または１列分の要素を前記行列要素レジスタから読み出して前記複数の乗算器の各々の第２のデータ入力端子に各々供給し、前記複数の乗算器から得られる各乗算結果の累算を前記複数の累算器に各々行わせる制御手段とを具備することを特徴とする行列演算コプロセッサを提供する。
かかる発明によれば、行列演算コプロセッサでは、プロセッサから行列の要素を１個受け取る毎に、当該要素を共通の乗算相手とする複数の要素が行列要素レジスタから読み出され、複数組の乗算が行われ、それらの各乗算結果の累算が行われる。従って、行列要素を１個ずつしかプロセッサから受け取ることができない状況においても、高速に行列乗算の結果を算出することができる。
【発明を実施するための最良の形態】
【０００６】
以下、図面を参照し、この発明の実施の形態を説明する。
図１は、この発明の一実施形態である行列演算コプロセッサ１００の構成を示すブロック図である。この行列演算コプロセッサ１００は、ＣＰＵ２００から乗算対象である２つの行列ＡおよびＢの要素ａｉｊ（ｉ＝０〜３、ｊ＝０〜３）およびｂｉｊ（ｉ＝０〜３、ｊ＝０〜３）を受け取り、行列ＡおよびＢの乗算結果、すなわち、下記式（１）〜（１６）により与えられる行列Ｑの要素ｑｉｊ（ｉ＝０〜３、ｊ＝０〜３）を算出し、ＣＰＵ２００に返すコプロセッサである。
ｑ００
＝ａ００・ｂ００＋ａ０１・ｂ１０＋ａ０２・ｂ２０＋ａ０３・ｂ３０……（１）
ｑ０１
＝ａ００・ｂ０１＋ａ０１・ｂ１１＋ａ０２・ｂ２１＋ａ０３・ｂ３１……（２）
ｑ０２
＝ａ００・ｂ０２＋ａ０１・ｂ１２＋ａ０２・ｂ２２＋ａ０３・ｂ３２……（３）
ｑ０３
＝ａ００・ｂ０３＋ａ０１・ｂ１３＋ａ０２・ｂ２３＋ａ０３・ｂ３３……（４）
ｑ１０
＝ａ１０・ｂ００＋ａ１１・ｂ１０＋ａ１２・ｂ２０＋ａ１３・ｂ３０……（５）
ｑ１１
＝ａ１０・ｂ０１＋ａ１１・ｂ１１＋ａ１２・ｂ２１＋ａ１３・ｂ３１……（６）
ｑ１２
＝ａ１０・ｂ０２＋ａ１１・ｂ１２＋ａ１２・ｂ２２＋ａ１３・ｂ３２……（７）
ｑ１３
＝ａ１０・ｂ０３＋ａ１１・ｂ１３＋ａ１２・ｂ２３＋ａ１３・ｂ３３……（８）
ｑ２０
＝ａ２０・ｂ００＋ａ２１・ｂ１０＋ａ２２・ｂ２０＋ａ２３・ｂ３０……（９）
ｑ２１
＝ａ２０・ｂ０１＋ａ２１・ｂ１１＋ａ２２・ｂ２１＋ａ２３・ｂ３１……（１０）
ｑ２２
＝ａ２０・ｂ０２＋ａ２１・ｂ１２＋ａ２２・ｂ２２＋ａ２３・ｂ３２……（１１）
ｑ２３
＝ａ２０・ｂ０３＋ａ２１・ｂ１３＋ａ２２・ｂ２３＋ａ２３・ｂ３３……（１２）
ｑ３０
＝ａ３０・ｂ００＋ａ３１・ｂ１０＋ａ３２・ｂ２０＋ａ３３・ｂ３０……（１３）
ｑ３１
＝ａ３０・ｂ０１＋ａ３１・ｂ１１＋ａ３２・ｂ２１＋ａ３３・ｂ３１……（１４）
ｑ３２
＝ａ３０・ｂ０２＋ａ３１・ｂ１２＋ａ３２・ｂ２２＋ａ３３・ｂ３２……（１５）
ｑ３３
＝ａ３０・ｂ０３＋ａ３１・ｂ１３＋ａ３２・ｂ２３＋ａ３３・ｂ３３……（１６）
【０００７】
ここで、行列Ａは、例えば回転処理の対象である図形の頂点の座標を要素とする行列であり、行列Ｂは、回転角度に応じて決まる回転処理のための係数を要素とする行列である。行列ＡおよびＢの乗算結果である行列Ｑは、回転後の図形の頂点の座標を要素とする行列となる。
【０００８】
図１に示すように、行列演算コプロセッサ１００は、４個の乗算器１０１〜１０４と、その後段の４個の累算器１１１〜１１４と、行列要素レジスタ１２０と、結果格納部１３０と、制御部１４０とを有する。
【０００９】
乗算器１０１〜１０４は、各々第１のデータ入力端子に与えられるデータと第２のデータ入力端子に与えられるデータとを乗算し、その乗算結果を出力する。累算器１１１〜１１４は、乗算器１０１〜１０４の各乗算結果の累算を行う装置である。累算器１１１〜１１４の各々は、加算器１１とレジスタ１２により構成されている。各累算器１１１〜１１４において、加算器１１は前段の乗算器１０１〜１０４の出力データとレジスタ１２の出力データとを加算して出力する。レジスタ１２は、書き込み信号ＷＲが与えられることにより加算器１１の出力データを取り込んで出力する。以上説明した乗算器１０１〜１０４およびその後段の累算器１１１〜１１４は、行列ＡおよびＢの乗算結果である行列Ｑの要素ｑｉｊ（ｉ＝０〜３、ｊ＝０〜３）を算出するための手段として用いられる。
【００１０】
行列要素レジスタ１２０は、乗算対象である２つの行列ＡおよびＢのうちの一方の行列Ｂの要素ｂｉｊ（ｉ＝０〜３、ｊ＝０〜３）を記憶するレジスタである。ここで、行列Ｂの要素ｂｉｊ（ｉ＝０〜３、ｊ＝０〜３）は、行列ＡおよびＢの乗算処理の実行に先立って、予めＣＰＵ２００から行列演算コプロセッサ１００に与えられるものである。結果格納部１３０は、行列ＡおよびＢの乗算結果である行列Ｑの要素ｑｉｊ（ｉ＝０〜３、ｊ＝０〜３）を累算器１１１〜１１４から受け取って格納するバッファである。
【００１１】
制御部１４０は、ＣＰＵ２００から演算処理に関するコマンドを受け取り、演算処理を実行するための行列演算コプロセッサ１００内の各部の制御を行うとともに、ＣＰＵ２００との間のデータの授受の制御を行う装置である。
【００１２】
以下、この制御部１４０による制御の下で行われる行列ＡおよびＢの乗算処理について説明する。ＣＰＵ２００からのコマンドに従って行列ＡおよびＢの乗算処理を実行する場合、制御部１４０は、予め一方の行列Ｂの要素ｂｉｊ（ｉ＝０〜３、ｊ＝０〜３）をＣＰＵ２００から受け取って、行列要素レジスタ１２０に格納する。そして、制御部１４０は、行列ＡおよびＢの乗算結果の行列Ｑの要素ｑｉｊ（ｉ＝０〜３、ｊ＝０〜３）を４個の累算器１１１〜１１４から行毎（インデックスｉ毎）に順次得るための制御を行う。
【００１３】
さらに詳述すると、制御部１４０は、乗算結果である行列Ｑの第０行の要素ｑ０ｊ（ｊ＝０〜３）を累算器１１１〜１１４から得るために、まず、累算器１１１〜１１４の累算値ｑ０ｊ（ｊ＝０〜３）を予め「０」に初期化する。
【００１４】
その後、乗算対象である２つの行列ＡおよびＢのうちの他方の行列Ａの第０行の要素ａ０ｊ（ｊ＝０〜３）をＣＰＵ２００から１個ずつ順次受け取り、１個の要素ａ０ｊを受け取る毎に、次の制御を行う。
【００１５】
まず、最初に受け取った要素ａ００を４個の乗算器１０１〜１０４の第１のデータ入力端子に供給する。また、行列Ｑの第０行の要素ｑ０ｊ（ｊ＝０〜３）を得るための演算（前掲式（１）〜（４）参照）において当該要素ａ００を共通の乗算相手とする１行分の要素、すなわち、要素ｂ０ｊ（ｊ＝０〜３）を行列要素レジスタ１２０から読み出して乗算器１０１〜１０４の各々の第２のデータ入力端子に各々供給する。これにより乗算器１０１〜１０４から乗算結果ａ００・ｂ００、ａ００・ｂ０１、ａ００・ｂ０２およびａ００・ｂ０３が各々出力され、累算器１１１〜１１４に各々供給される。
【００１６】
次に累算器１１１〜１１４の各レジスタ１２に書き込み信号ＷＲを送る。これにより累算器１１１〜１１４では、下記式（１７）〜（２０）の累算が行われ、各式の左辺のｑ０ｊ（ｊ＝０〜３）が出力される。
ｑ００＝ａ００・ｂ００＋ｑ００                                    ……（１７）
ｑ０１＝ａ００・ｂ０１＋ｑ０１                                    ……（１８）
ｑ０２＝ａ００・ｂ０２＋ｑ０２                                    ……（１９）
ｑ０３＝ａ００・ｂ０３＋ｑ０３                                    ……（２０）
【００１７】
次に要素ａ０１を受け取ると、この要素ａ０１を４個の乗算器１０１〜１０４の第１のデータ入力端子に供給する。また、行列Ｑの第０行の要素ｑ０ｊ（ｊ＝０〜３）を得るための演算（前掲式（１）〜（４）参照）において当該要素ａ０１を共通の乗算相手とする１行分の要素、すなわち、要素ｂ１ｊ（ｊ＝０〜３）を行列要素レジスタ１２０から読み出して乗算器１０１〜１０４の各々の第２のデータ入力端子に各々供給する。これにより乗算器１０１〜１０４から乗算結果ａ０１・ｂ１０、ａ０１・ｂ１１、ａ０１・ｂ１２およびａ０１・ｂ１３が各々出力され、累算器１１１〜１１４に各々供給される。
【００１８】
次に累算器１１１〜１１４の各レジスタ１２に書き込み信号ＷＲを送る。これにより累算器１１１〜１１４では、下記式（２１）〜（２４）の累算が行われ、各式の左辺のｑ０ｊ（ｊ＝０〜３）が出力される。
ｑ００＝ａ０１・ｂ１０＋ｑ００                                    ……（２１）
ｑ０１＝ａ０１・ｂ１１＋ｑ０１                                    ……（２２）
ｑ０２＝ａ０１・ｂ１２＋ｑ０２                                    ……（２３）
ｑ０３＝ａ０１・ｂ１３＋ｑ０３                                    ……（２４）
【００１９】
以下同様であり、要素ａ０２を受け取ったときには、この要素ａ０２を４個の乗算器１０１〜１０４の第１のデータ入力端子に供給するとともに、要素ｂ２ｊ（ｊ＝０〜３）を行列要素レジスタ１２０から読み出して乗算器１０１〜１０４の各々の第２のデータ入力端子に各々供給し、累算器１１１〜１１４の各レジスタ１２に書き込み信号ＷＲを送る。これにより、累算器１１１〜１１４では、下記式（２５）〜（２８）の累算が行われ、各式の左辺のｑ０ｊ（ｊ＝０〜３）が出力される。
ｑ００＝ａ０２・ｂ２０＋ｑ００                                    ……（２５）
ｑ０１＝ａ０２・ｂ２１＋ｑ０１                                    ……（２６）
ｑ０２＝ａ０２・ｂ２２＋ｑ０２                                    ……（２７）
ｑ０３＝ａ０２・ｂ２３＋ｑ０３                                    ……（２８）
【００２０】
また、第０行の最後の要素ａ０３を受け取ったときには、この要素ａ０３を４個の乗算器１０１〜１０４の第１のデータ入力端子に供給するとともに、要素ｂ３ｊ（ｊ＝０〜３）を行列要素レジスタ１２０から読み出して乗算器１０１〜１０４の各々の第２のデータ入力端子に各々供給し、累算器１１１〜１１４の各レジスタ１２に書き込み信号ＷＲを送る。これにより、累算器１１１〜１１４では、下記式（２９）〜（３２）の累算が行われ、各式の左辺のｑ０ｊ（ｊ＝０〜３）が出力される。
ｑ００＝ａ０３・ｂ３０＋ｑ００                                    ……（２９）
ｑ０１＝ａ０３・ｂ３１＋ｑ０１                                    ……（３０）
ｑ０２＝ａ０３・ｂ３２＋ｑ０２                                    ……（３１）
ｑ０３＝ａ０３・ｂ３３＋ｑ０３                                    ……（３２）
【００２１】
このようにして、前掲式（１）〜（４）に示す行列Ｑの第０行の要素ｑ０ｊ（ｊ＝０〜３）が累算器１１１〜１１４から得られる。そこで、制御部１４０は、累算器１１１〜１１４から得られた要素ｑ０ｊ（ｊ＝０〜３）を結果格納部１３０に格納する。
【００２２】
そして、制御部１４０は、行を順次変え、以上説明した行列Ｑの第０行の場合と同様に、行列Ｑの第１行の要素ｑ１ｊ（ｊ＝０〜３）を得るための制御、第２行の要素ｑ１ｊ（ｊ＝０〜３）を得るための制御、第３行の要素ｑ１ｊ（ｊ＝０〜３）を得るための制御を実行する。このような制御により、乗算結果である行列Ｑの全行の要素ｑｉｊ（ｉ＝０〜３、ｊ＝０〜３）が結果格納部１３０に得られる。制御部１４０は、この結果格納部１３０から行列Ｑの要素ｑｉｊ（ｉ＝０〜３、ｊ＝０〜３）を順次読み出して、ＣＰＵ２００に送る。
【００２３】
以上説明した本実施形態によれば、行列演算コプロセッサ１００が４行４列の行列ＡおよびＢの乗算処理を行う場合において、１つのクロックに同期して１個の要素をＣＰＵ２００から受け取るとすると、所要クロック数は次のようになる。まず、行列要素レジスタ１２０に行列Ｂの全要素を格納するための所要クロック数が１６クロックとなる。次に乗算結果である行列Ｑの１行分の４個の要素を算出するための所要クロック数は４クロックとなる。従って、行列Ｑの全要素（すなわち、４行分の要素）を算出するための所要クロック数は１６クロックとなる。よって、行列乗算処理が終了するまでの所要クロック数は３２クロックとなる。このように本実施形態によれば、１つのクロックに同期して１個の要素しかＣＰＵ２００から受け取ることができない状況においても、少ない所要クロック数で行列乗算処理を実行することができる。また、画像処理においては、乗算対象である２個の行列のうちの一方の内容を固定し、他方の内容を切り換えて、行列乗算処理を繰り返す場合がある。そのような場合、本実施形態では、内容を固定する行列の要素を行列要素レジスタ１２０に格納してしまえば、再度、ＣＰＵ２００から受け取る必要がないので、さらに行列乗算処理を高速化することができる。
【００２４】
以上、この発明の一実施形態について説明したが、この発明には他にも実施形態があり得る。例えば次の通りである。
（１）上記実施形態では、乗算結果である行列Ｑの要素を行毎に順次算出するようにしたが、列毎に順次算出するようにしてもよい。
（２）上記実施形態では、４行４列の行列同士の乗算処理を行ったが、乗算処理の対象となる行列の規模は任意である。
【図面の簡単な説明】
【００２５】
【図１】この発明の一実施形態である行列演算コプロセッサ１００の構成を示すブロック図である。
【符号の説明】
【００２６】
２００……ＣＰＵ、１００……行列演算コプロセッサ、１０１〜１０４……乗算器、１１１〜１１４……累算器、１１……加算器、１２……レジスタ、１２０……行列要素レジスタ、１３０……結果格納部、１４０……制御部。
【図１】
0005157484.tif 000002