(57)【要約】  行列データを格納でき、要素データ単位で読み出せるレジスタ群と、同一列の要素データがそれぞれ別の列となるように行データごとに並び替える出力データ並替部と、並び替えられた行列データをレジスタ群に書き込み、同一の列に属する要素データがレジスタ群に記憶される場所を示す列位置情報を用いて要素データの集合をレジスタ群から読み出すレジスタアクセス部と、読み出した要素データの集合を並び替える入力データ並替部と、並び替えられた要素データの集合に演算を行う演算処理部と、並替情報と列位置情報を生成してデータの並び替えを制御する転置制御部とを備え、データ列の並び替えをレジスタ群への格納時と読み出し時に行うことで、転置処理を高速化する。
2013054468.tif 000002
【特許請求の範囲】
【請求項１】
処理対象となる行列データを構成する行データを格納し、行データを構成する要素データ単位で読み出せるレジスタからなる、前記行列データを格納可能なレジスタ群と、
行列データに対して、同一列の要素データがそれぞれ別の列となるように行データごとに並び替えるための出力並替情報と、前記行列データにおいて同一の列に属する要素データが前記レジスタ群に記憶される場所を示す列位置情報と、前記列位置情報に従って前記レジスタ群から読み出される前記行列データの同一列の要素データの集合を並び替えるための入力並替情報とを生成する転置制御部と、
前記出力並替情報を用いて前記行列データを並び替える出力データ並替部と、
前記出力データ並替部が並び替えを行った行列データを前記レジスタ群に書き込み、前記レジスタ群からデータを読み出して、前記列位置情報を用いて要素データを取り出すレジスタを前記出力データ並替部が並び替えを行った行列データの列ごとに１つずつ選択し、前記要素データの集合を出力するレジスタアクセス部と、
前記レジスタアクセス部が出力する前記要素データの集合を前記入力並替情報を用いて並び替える入力データ並替部と
前記入力データ並替部が並び替えを行った要素データの集合に演算を行う演算処理部と
を備えることを特徴とする転置演算装置。
【請求項２】
前記出力並替情報は、
前記行列データにおいて行データごとにローテートシフトによって並び替えるためのシフト量を示す出力ローテート量である
ことを特徴とする請求項１に記載の転置演算装置。
【請求項３】
前記入力並替情報は、
前記レジスタアクセス部が出力する前記要素データの集合をローテートシフトによって並び替えるためのシフト量を示す入力ローテート量であり、
前記転置制御部は、
前記行列データの行ごとに右向きに要素データ単位ずつ増加する出力ローテート量と、当該行列データに対応する出力ローテート量と絶対値が同じでシフトする向きが逆である入力ローテート量とを生成する
ことを特徴とする請求項２に記載の転置演算装置。
【請求項４】
前記転置制御部は、
行列データを転置させるか否かの指示を記憶する設定レジスタを備え、
前記設定レジスタに行列データを転置させる指示があれば、出力並替情報と、列位置情報と、入力並替情報とを生成する
ことを特徴とする請求項１に記載の転置演算装置。
【請求項５】
前記レジスタ群は転置処理の対象となる行列データを記憶するための専用レジスタを含み、
前記転置制御部は、
前記レジスタアクセス部が前記専用レジスタに行列データを読み書きする場合に、出力並替情報と、列位置情報と、入力並替情報とを生成する
ことを特徴とする請求項１に記載の転置演算装置。
【請求項６】
前記転置演算装置が実行する演算命令は当該演算命令の対象および当該演算命令の結果に転置処理を行うか否かの情報を含み、
前記転置制御部は、
転置処理を伴う演算命令に含まれる転置処理のための情報を用いて、出力並替情報と、列位置情報と、入力並替情報とを生成する
ことを特徴とする請求項１に記載の転置演算装置。
【請求項７】
処理対象となる行列データを構成する行データを格納し、行データを構成する要素データ単位で書き込めるレジスタからなる、前記行列データを格納可能なレジスタ群と、
行列データに対して、同一列の要素データがそれぞれ別の列となるように行データごとに並び替えるための出力並替情報と、前記行列データにおいて同一の列に属する要素データが前記レジスタ群に記憶される場所を示す列位置情報と、前記列位置情報に従って前記レジスタ群から読み出される前記行列データの同一列の要素データの集合を並び替えるための入力並替情報とを生成する転置制御部と、
前記出力並替情報を用いて前記行列データを並び替える出力データ並替部と、
前記列位置情報を用いて、前記出力データ並替部が並び替えを行った行列データの第ｉ行（ｉ≧１）を第ｉ列が記憶される場所の前記レジスタ群に書き込み、前記レジスタ群からデータを読み出すレジスタアクセス部と、
前記レジスタアクセス部が読み出す前記要素データの集合を前記入力並替情報を用いて並び替える入力データ並替部と、
前記入力データ並替部が並び替えを行った要素データの集合に演算を行う演算処理部と
を備えることを特徴とする転置演算装置。
【請求項８】
処理対象となる行列データを構成する行データを格納し、行データを構成する要素データ単位で読み出せるレジスタからなる、前記行列データを格納可能なレジスタ群と、
行列データに対して、同一列の要素データがそれぞれ別の列となるように行データごとに並び替えるための出力並替情報と、前記行列データにおいて同一の列に属する要素データが前記レジスタ群に記憶される場所を示す列位置情報と、前記列位置情報に従って前記レジスタ群から読み出される前記行列データの同一列の要素データの集合を並び替えるための入力並替情報とを生成する転置制御部と、
前記出力並替情報を用いて前記行列データを並び替える出力データ並替部と、
前記出力データ並替部が並び替えを行った行列データを前記レジスタ群に書き込み、前記レジスタ群からデータを読み出して、前記列位置情報を用いて要素データを取り出すレジスタを前記出力データ並替部が並び替えを行った行列データの列ごとに１つずつ選択し、前記要素データの集合を出力するレジスタアクセス部と、
前記レジスタアクセス部が出力する前記要素データの集合を前記入力並替情報を用いて並び替える入力データ並替部と、
前記入力データ並替部が並び替えを行った要素データの集合に演算を行う演算処理部と
を備えることを特徴とする集積回路。
【請求項９】
行列データを構成する行データを格納し、行データを構成する要素データ単位で読み出せるレジスタからなる、前記行列データを格納可能なレジスタ群を含み、前記行列データに対して演算処理と転置処理を行う転置演算装置における転置処理方法であって、
行列データに対して、同一列に属する要素データがそれぞれ別の列に属するように行データごとに並び替える出力データ並替ステップと、
前記並び替えられた行列データを前記レジスタ群に記憶させるデータ記憶ステップと、
前記出力行列データにおいて同一列に属する要素データが記憶されている前記レジスタ群の場所を示す列位置情報を生成する列位置情報生成ステップと、
前記列位置情報を用いて前記列位置情報を用いて要素データを取り出すレジスタを前記出力データ並替部が並び替えを行った行列データの列ごとに１つずつ選択し、前記要素データの集合を前記レジスタ群から読み出すデータ読み出しステップと、
前記データ読み出しステップで読み出される前記要素データの集合を並び替える入力データ並替ステップと、
前記入力並び替えられた要素データの集合に演算処理を行う演算ステップと
を含む転置処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、行列の転置処理を実行するための転置演算技術に関する。
【背景技術】
【０００２】
従来、画像処理を高速に行うプロセッサとして、データ並列処理プロセッサが知られている。このデータ並列処理プロセッサは、データを構成する複数の要素データに対して、同一の処理を同時に行うことで、処理の高速化を実現している。このとき、例えば、矩形の画像データに対するフィルタ処理や二次元直交変換など、プロセッサが並列に処理を行うために、転置処理によるデータ列の変換が必要となる場合がある。【０００３】
行列データを転置する方法としては、行列データの列と行を入れ替えるように各要素の入れ替え動作を行列データ全体に対して行えばよい。しかしながら、この方法では、行列の要素の数が大きくなると交換命令の実行回数が膨大になる問題がある。【０００４】
そこで、転置処理を高速化させるために、行列転置装置を用いる方法が知られている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１０―１５４１４０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、プロセッサとは別に特許文献１の行列転置装置を用いる場合、転置処理の度にプロセッサと行列転置装置との間で行列データのやり取りが発生するため、行列データの転送に要する時間が新たな時間コストとなる。【０００７】
本発明は、転置処理に要する処理時間を短縮する転置演算装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明に係る転置演算装置は、処理対象となる行列データを構成する行データを格納し、行データを構成する要素データ単位で読み出せるレジスタからなる、前記行列データを格納可能なレジスタ群と、行列データに対して、同一列の要素データがそれぞれ別の列となるように行データごとに並び替えるための出力並替情報と、前記行列データにおいて同一の列に属する要素データが前記レジスタ群に記憶される場所を示す列位置情報と、前記列位置情報に従って前記レジスタ群から読み出される前記行列データの同一列の要素データの集合を並び替えるための入力並替情報とを生成する転置制御部と、前記出力並替情報を用いて前記行列データを並び替える出力データ並替部と、前記出力データ並替部が並び替えを行った行列データを前記レジスタ群に書き込み、前記レジスタ群からデータを読み出して、前記列位置情報を用いて要素データを取り出すレジスタを前記出力データ並替部が並び替えを行った行列データの列ごとに１つずつ選択し、前記要素データの集合を出力するレジスタアクセス部と、前記レジスタアクセス部が出力する前記要素データの集合を前記入力並替情報を用いて並び替える入力データ並替部と、前記入力データ並替部が並び替えを行った要素データの集合に演算を行う演算処理部とを備えることを特徴とする。
【発明の効果】
【０００９】
上記の構成によれば、転置演算装置において、行列転置処理に要する処理時間を短縮することが可能である。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１における転置演算装置の構成例を示すブロック図
【図２】実施の形態１における転置演算装置を含む画像処理装置の構成例を示すブロック図
【図３】実施の形態１におけるレジスタアクセス部の構成例を示すブロック図
【図４】実施の形態１における転置処理に係る行列データの格納イメージを示す図
【図５】実施の形態１における転置演算装置の演算処理に係る動作を示すフローチャート
【図６】実施の形態１における矩形アクセスによる画像データのレジスタ格納を示す図
【図７】実施の形態１における読み出しデータの並び替え手順を示す図
【図８】実施の形態１における読み出しデータの並び替え手順を示す図
【図９】実施の形態１における読み出しデータの並び替え手順を示す図
【図１０】実施の形態２における転置演算装置の構成例を示すブロック図
【図１１】実施の形態２における転置制御部のレジスタアドレスと列位置情報、ローテート量の関係を示す図
【図１２】実施の形態２における転置演算装置の演算処理に係る動作を示すフローチャート
【図１３】実施の形態３における転置演算装置の構成例を示すブロック図
【図１４】実施の形態３における転置演算装置の動作を示すフローチャート
【図１５】実施の形態４におけるレジスタアクセス部の構成例を示すブロック図
【図１６】実施の形態４における書き込みデータの並び替え手順を示す図
【図１７】実施の形態４における書き込みデータの並び替え手順を示す図
【図１８】実施の形態５における転置演算装置の構成例を示すブロック図
【図１９】実施の形態５における読み出しデータの並び替え手順を示す図
【図２０】実施の形態５における読み出しデータの並び替え手順を示す図
【図２１】従来の行列転置装置の構成を示すブロック図
【発明を実施するための形態】
【００１１】
（発明に至った経緯）
一般的に、プロセッサは、演算処理の対象とするデータを、レジスタと呼ばれる記憶領域に一時的に格納する。プロセッサは、１つのレジスタに格納されている全データを１命令でまとめて読み出すことが可能である。したがって、並列処理プロセッサにおいて、並列処理の対象となるデータは、処理単位で個別のレジスタに格納されることが望ましい。
【００１２】
ここで、行列データの格納方法について説明する。例えば、矩形の画像を示す画像データは、各画素のデータ（色情報などの画素値）を要素データとする行列データである。具体的には、最も左上の画素を行列データの要素（１，１）として、水平方向に隣り合う画素のデータが行方向に並び、かつ、垂直方向に隣り合う画素のデータが列方向に並ぶ。このような行列データをレジスタに格納する際には、行列データを行ごとに分割し、１行分の要素データの並びであるデータ列を、それぞれ個別にレジスタに格納する。つまり、水平方向に隣り合う画素のデータは同一のレジスタに、垂直方向に隣り合う画素のデータは異なるレジスタに格納されることになる。
【００１３】
したがって、例えば、水平方向に並ぶ画素に対するフィルタ処理など、行列データの特定の行を読み出す場合、当該行のデータを格納している１つのレジスタからデータ列をそのまま読み出せばよく、１命令で読み出しが実行できる。しかしながら、例えば、垂直方向に並ぶ画素に対するフィルタ処理など、行列データを列単位で読み出す場合、行列データを格納している複数のレジスタから１要素データずつ読み出す処理が必要となる。この処理にはレジスタへの読み出し命令を行列データの列の数だけ実行する必要がある。
【００１４】
そこで、並列処理プロセッサが行列データを列単位で効率よく扱う方法として、行列データの転置処理がある。そのようにすれば、行列の行と列が入れ替わり、すなわち「転置前の行列データの列」が１つのレジスタに格納されて、１命令で読み出すことが可能となるからである。
【００１５】
レジスタに格納された行列データを転置する方法として、上述したように、レジスタ間で要素データの交換を行う方法がある。しかしながら、行列データの行数および列数が大きくなると、つまり、要素の数が大きくなると交換命令の実行回数が膨大となり、多大な処理時間が必要となる問題がある。
【００１６】
また、行列を転置する方法として、特許文献１に開示されているような行列転置装置を用いる方法がある。
【００１７】
図２１に特許文献１に記載された行列転置装置９００の構成図を示す。行列転置装置９００は入力装置９２１−０〜９２１−ｐ、記憶装置９２２−０〜９２２−ｐ、アドレス発生器９２３−０〜９２３−ｐ、出力選択装置９２４−０〜９２４−ｎ、および制御回路９２５により構成されている。また、図中９２６は演算器を示している。記憶装置９２２−Ｉ（Ｉは０以上ｐ以下の整数）は、例えば１入力１出力のＲＡＭにより構成され、各々アドレス発生器９２３−Ｉで発生されるアドレスで指定可能な記憶領域を有している。
【００１８】
制御装置９２５は、行列データを格納する際、任意の行データの各要素が互いに異なる記憶装置９２２−Ｉに格納されるように、入力選択装置９２１−Ｉとアドレス発生器９２３−Ｉとを制御する。次に、制御装置９２５は、行列データを読み出す際、出力選択装置９２４−Ｊ（Ｊは０以上ｎ以下の整数）とアドレス発生器９２３−Ｉとを制御し、転置行列データの任意の列データを、定められた順序および定められた列データ内の要素の順序を保つように出力する。
【００１９】
しかしながら、プロセッサから特許文献１の行列転置装置を利用する際に、下記の２つの問題がある。
【００２０】
プロセッサの外部に行列転置装置を設ける場合、プロセッサが処理を行えない待機時間が生じる。つまり、転置処理を行う際に、プロセッサは行列転置装置に行列データを出力した後、行列転置装置から転置後の行列データを読み出さなければならない。したがって、少なくとも行列データにおける第Ｉ列のデータの出力が完了してから転置後の行列データにおける第Ｉ行のデータがレジスタに格納されるまでの間、プロセッサは、転置前の行列における第Ｉ列のデータ（転置後の第Ｉ行のデータ）に対する処理を行うことができない。
【００２１】
一方、プロセッサ内に行列転置装置を実現しようとすると、次の問題が生じる。特許文献１の行列転置装置は、Ｎ行Ｎ列（Ｎは２以上の整数）の行列データを転置するために、個別に入出力できる記憶装置をＮ個必要とする。したがって、例えば、８×８画素のブロックを転置する画像処理プロセッサであれば、個別に入出力できる記憶装置が８個必要になり、プロセッサのコストアップの要因となる。他方、記憶装置１つだけを用いて、プロセッサとソフトウェアで行列転置装置を実現しようとすると、高速に行列転置処理を実現できない。これは、入力行列データにおける列データの入力と転置行列データにおける列データの出力のいずれにおいても、列データ単位で行うことができず要素単位で行う必要が生じるからである。
【００２２】
そこで、発明者らは、転置前の行列データの行データの格納も、転置後の行列データの行データの読み出しも、いずれも１命令で行えるような、行列データのレジスタ群への格納方法と、当該レジスタ群に対する行列データの格納と読み出し動作のみで行列転置を実行する方法との着想を得た。すなわち、転置対象となる行列データを出力する演算の結果をレジスタに格納する際に、転置前の行列において同一の列に属する要素データが同一の列に２以上存在しなくなるように行列データの各行を並び替えて、レジスタ群に転置対象の行列データを格納する。そして、転置後の行列データを要求する演算の入力データをレジスタから読み出す際に、あるレジスタの１番目、他のレジスタの２番目、さらに別のレジスタの３番目、のように、データ列内の順序が重複しないよう複数のレジスタから要素データを１つずつ転置後の行列データの各行を読み出す（この読み出しは、１命令で実行される）。最後に、読み出した各行を列の順に並べ替え、転置後の行列データを必要とする演算を実行する。
【００２３】
この構成によれば、演算処理１の結果である行列データを転置して演算処理２に用いる場合に、演算処理１の結果をレジスタに格納する命令と演算処理２の対象をレジスタから読み出す命令とを、転置のための格納命令と転置のための読み出し命令とにそれぞれ置き換えるだけでよい。すなわち、レジスタへの行列データの読み書き処理により行列転置が完了するので、転置対象の行列をレジスタに格納してからプロセッサの演算器が転置命令を実行する、という処理を行う必要がない。また、読み出し処理の対象はレジスタであるため、プロセッサの演算器は、読み出された転置後の行列データの各行を直接利用することができる。そのため、転置後の行列データの各行を演算の対象とするためにレジスタに格納する処理も不要である。したがって、行列転置処理に要する処理時間を短縮することが可能である。
【００２４】
（実施の形態）
以下、本発明の実施の形態について、図面を参照しながら説明する。
【００２５】
（実施の形態１）
まず、実施の形態１に係る転置演算装置２００を含む画像処理装置１００の構成について説明する。
【００２６】
図２は、画像処理装置１００の機能ブロック図である。画像処理装置１００は、画像入力部１１０、入力処理部１２０、画像メモリ１３０、システム制御部１４０、信号処理部１５０を備える。転置演算装置２００は、信号処理部１５０の一部である。
【００２７】
画像入力部１１０は、一定のフレームレートで画像の取り込みを行い、生成した一定サイズの画像データを入力処理部１２０に送信する。
【００２８】
入力処理部１２０は、画像入力部１１０から取り込んだ画像データを画像メモリ１３０へ転送する機能を有し、画像データの転送完了後、システム制御部１４０へ通知する。
【００２９】
画像メモリ１３０は、入力処理部１２０から転送される入力画像データ、および信号処理部１５０で実行される画像処理の結果を保持する。
【００３０】
システム制御部１４０は、画像処理装置１００全体の制御や、装置内の各ブロックの動作設定を行う機能を有する。
【００３１】
信号処理部１５０は、画像メモリ１３０から入力された画像データの信号処理を行うブロックであり、転置処理を含む演算は転置演算装置２００で実行される。
【００３２】
システム制御部１４０、信号処理部１５０、及び転置演算装置２００のパラメータ設定や実行制御は、プロセッサバスを介して行われ、入力画像や画像処理を行う画像データの受け渡しを含む、画像メモリ１３０への他の構成要素からのアクセスは、メモリバスを介して行われる。
【００３３】
＜転置演算装置＞
図１は、実施の形態１に係る転置演算装置２００を示すブロック図である。転置演算装置２００は、命令発行部２１０、命令デコード部２２０、演算制御部２３０、演算処理部２４０、転置制御部２５０、入力ローテート部２６０、出力ローテート部２７０、レジスタアクセス部３００、レジスタ群３１０から構成される。
【００３４】
命令発行部２１０は、転置演算装置２００で実行する、データ並列処理プロセッサの演算命令を信号処理部１５０から受け取り、命令デコード部２２０へ発行する。
【００３５】
命令デコード部２２０は、実行命令を受け取ると、命令コードからレジスタアクセス情報や演算処理の情報を解読し、演算制御部２３０へ命令実行時に必要となるデータパスの情報を送信する。また、命令デコード部２２０は演算処理後に転置処理が必要か否かの情報を演算制御部２３０に出力する。
【００３６】
レジスタ群３１０は、演算処理および転置処理の対象となる行列データを記憶しておくための装置である。レジスタ群３１０は、それぞれ固有のアドレスを有する複数のレジスタからなる。
【００３７】
以下、レジスタにおいてレジスタアドレスを同一とする記憶領域の範囲を「１つのレジスタ」と表記する。行列データは行ごとに個別のデータ列として、データ列ごとにそれぞれ異なるアドレスのレジスタに記憶される。
【００３８】
レジスタアクセス部３００は、レジスタ群３１０からのデータの読み出しと、レジスタ群３１０へのデータの書き込みを行う。図３にレジスタアクセス部３００の構成を示す。レジスタアクセス部３００は、要素データごとにレジスタ群３１０を構成するレジスタからデータを受け取って１つを選択して出力するセレクタ３５０−１〜３５０−４を備えている。ここで、要素データとは、行列データにおいて行列の成分となる最小単位のデータである。例えば、４×４画素の画像データが４行４列の行列データとなっている場合、要素データは１画素分のデータである。
【００３９】
レジスタアクセス部３００は、演算制御部２３０からアドレスの指定を伴った読み出し命令を受け、かつ転置制御部２５０が列位置情報を指定しない場合には、レジスタ群３１０のうち指定されたアドレスを有するレジスタに記憶されているデータ列を読み出して、入力ローテート部２６０に送信する。
【００４０】
また、レジスタアクセス部３００は、演算制御部２３０からアドレスの指定を伴った読み出し命令を受け、かつ転置制御部２５０が列位置情報としてアドレス補正値を指定している場合には、アドレスとアドレス補正値からオフセットアドレスを生成し、以下に示す通りに要素データ単位で読み出すレジスタを変更してデータ列を読み出して、入力ローテート部２６０に送信する。以下、列位置情報を用いて要素データ単位で行う読み出し動作をオフセットリードと呼ぶ。
【００４１】
ここで、アドレス補正値とは、要素データ単位で読み出し動作の対象を指定することでレジスタ群３１０が記憶している行列データの特定の列を読み出すための列位置情報であって、１番目の要素データを読み出すレジスタのアドレス、２番目の要素データを読み出すレジスタのアドレス、以下同様に読み出すレジスタのアドレスを演算制御部２３０が指定する読み出しアドレスとの差分値で表したものである。詳細を以下に示す。
【００４２】
レジスタアクセス部３００は、アドレス補正値が指定されている場合には、次のようにしてデータを読み出す。まず、演算制御部２３０が指定する読み出しアドレス（リードアドレス）に加算器３４０−１〜３４０−４を用いてアドレス補正値を加算し、オフセットアドレスを生成する。次に、リードアドレスに最初の要素データに対応するアドレス補正値を加算したオフセットアドレスが加算器３４０−１よりセレクタ３５０−１に出力され、セレクタ３５０−１はレジスタ群３１０のうち各レジスタの１番目の要素を格納している領域３１１−１よりオフセットアドレスが指し示すレジスタを選択して要素データを取得する。同様に、セレクタ３５０−２は加算器３４０−２よりリードアドレスに２番目の要素データに対応するアドレスを加算したオフセットアドレスを取得し、レジスタ群３１０のうち各レジスタの２番目の要素を格納している領域３１１−２より、オフセットアドレスが指し示すレジスタを選択して要素データを取得する。同様に、全てのオフセットアドレスに対応する要素データを読み出す。
【００４３】
セレクタ３５０−１は、レジスタ群３１０のうち各レジスタの１番目の要素を格納している領域３１１−１より要素データを取得し、セレクタ３５０−２は、レジスタ群３１０のうち各レジスタの２番目の要素を格納している領域３１１−２より要素データを取得する。そのため、レジスタアクセス部３００は、レジスタ群３１０より、各レジスタの１番目の要素を格納している領域３１１−１から１の要素データ、全レジスタの２番目の要素を格納している領域３１１−２から１の要素データ、全レジスタの３番目の要素を格納している領域３１１−３から１の要素データ、全レジスタの４番目の要素を格納している領域３１１−４から１の要素データを同時に取得することができる。読み出された要素データは、セレクタ３５０−１の出力、セレクタ３５０−２の出力、セレクタ３５０−３の出力、セレクタ３５０−４の出力の順に並んだデータ列として、レジスタアクセス部３００から入力ローテート部２６０に出力される。なお、セレクタは２以上の要素データを同時に出力することはできないので、アドレス＃１のレジスタの１番目の要素データとアドレス＃２のレジスタの１番目の要素データを１回の読み出し動作により得ることはできない。
【００４４】
レジスタアクセス部３００は、演算制御部２３０からアドレスを伴う書き込み命令を受けた場合には、レジスタ群３１０のうち指定されたアドレスを有するレジスタに、出力ローテート部２７０から受信したデータ列を書き込む。
【００４５】
入力ローテート部２６０は、レジスタアクセス部３００がレジスタ群３１０から読み出したデータ列に対して、要素データ単位でローテートシフトすることで並び替えを行う機能を持つ。なお、ローテートシフトとは、データ列の右端と左端とがつながっているようにビットシフトを行うことである。具体的には、ビットシフトによってデータ列の右端からあふれた要素データは当該データ列に左端から挿入され、同様に、ビットシフトによってデータ列の左端からあふれた要素データは当該データ列に右端から挿入される。例えば、｛ａ，ｂ，ｃ，ｄ，ｅ，ｆ｝のデータ列（ａ，ｂ，ｃ，ｄ，ｅ，ｆはそれぞれ１ビットの要素データ）を右に１ビットだけローテートシフトすると、｛ｆ，ａ，ｂ，ｃ，ｄ，ｅ｝のデータ列となる。このデータ列にさらに左に２ビットだけローテートシフトすると、｛ｂ，ｃ，ｄ，ｅ，ｆ，ａ｝のデータ列となる。
【００４６】
データ列を右または左のいずれかに何ビット分だけローテートシフトするかは、転置制御部２５０から指定されるローテート量で決定される。
【００４７】
以下、右シフトのシフト量を正の値、左シフトのシフト量を負の値で表示する。また、本実施の形態においては、要素データのビット幅をシフト量の単位とする。例えば、要素データのビット幅が８ビットである場合、シフト量＋２とは、１６ビットだけ右にローテートシフトすることを指し、シフト量−５とは、４０ビットだけ左にローテートシフトすることを指す。
【００４８】
入力ローテート部２６０で並び替えを行ったデータ列は、演算処理部２４０へ入力データとして渡される。
【００４９】
演算処理部２４０は、算術演算や論理演算を行うＡＬＵ（Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃ  Ｕｎｉｔ）２４１、乗算器２４２、バレルシフタ２４３などで構成され、いずれも複数の要素データに対して、並列に演算処理を行う。
【００５０】
演算処理部２４０は、入力ローテート部２６０で並び替えを行ったデータ列を、ソースデータとして、それぞれ独立したソースバスを介して各演算器へ供給する。各演算器の処理内容は、演算制御部２３０から指定される演算命令に基づいて決定され、演算結果は、ディスティネーションバスを介して、出力ローテート部２７０へ出力される。
【００５１】
出力ローテート部２７０は、演算処理部２４０で処理された演算結果のデータ列に対して、要素データ単位でローテートシフトすることで並び替えを行う機能を持つ。ローテート量は入力ローテート部２６０と同様に転置制御部２５０で決定される。並び替えられたデータ列は、レジスタアクセス部３００に出力される。ローテートシフトおよびシフト量の詳細については入力ローテート部２６０と同一であるので説明を省略する。
【００５２】
演算制御部２３０は、順次実行される演算命令から、演算処理を実行するためのデータパス情報を生成する機能を持つ。データパス情報は命令デコード部２２０から受信する信号を元に生成され、その内容は実行される演算命令の機能や、読み出し・書き込み先のレジスタアドレス、有効となるソースバスやディスティネーションバスの選択情報である。また、演算制御部２３０は、演算処理の結果に転置処理を実施する必要がある場合には、当該演算の結果が出力されるまでに、転置制御部２５０が転置処理を行うために必要な書き込み先のレジスタアドレスなどの設定情報を、転置制御部２５０が内包する設定レジスタ３２０に出力する。設定レジスタ３２０は設定情報を保持する。
【００５３】
転置制御部２５０は、内包する設定レジスタ３２０に設定情報がある場合には、当該演算と、当該演算の結果を転置させたデータを用いる演算とにおいて、行列データをレジスタ群３１０に書き込み、当該行列データをレジスタ群３１０から読み出すときに転置処理のための制御を行う。設定レジスタ３２０に設定情報がない場合には、転置制御部２５０は、レジスタ群３１０への書き込み、ならびにレジスタ群３１０からの読み出しに転置処理のための制御を行わず、後述するように、行列データに対して出力ローテート部２７０も入力ローテート部２６０もローテートシフトを行わず、レジスタアクセス部３００は演算制御部２３０が指定するアドレスのみを用いてレジスタ群３１０にアクセスする。
【００５４】
転置演算装置２００が転置処理を行うときの動作、および、転置制御部２５０が転置処理のために行う制御について、図４を用いて説明する。転置演算装置２００は、演算処理１の演算結果に転置処理を行って転置された行列データに演算処理２を行うとした場合、次の動作をする。
【００５５】
まず、転置演算装置２００は、演算処理１を実施する際に、通常通り演算を行う（演算結果を図４（ａ）に示す）。次に、転置演算装置２００は、演算結果に上述の出力ローテート部２７０によるローテートシフトを実施し（図４（ｂ））、ローテートシフトがなされた行列データをレジスタアクセス部３００によってレジスタ群３１０に格納する。転置制御部２５０は、出力ローテート部２７０に対して、行列データの第１行に対してはローテート量０、第２行に対してはローテート量＋１というように、要素データ単位だけ増加する値を指示する。これにより、行列データの第１列を構成する要素データは、第１行においては第１番目の要素、第２行においては第２番目の要素、のように異なる要素データの順序に属することになる。
【００５６】
次に、転置演算装置２００は、演算処理２を実施する際に、レジスタからデータを読み出すときに上述のオフセットリードと入力ローテート部２６０によるローテート処理を実施し、ローテート処理がなされたデータ列を演算処理部２４０に出力する（図４（ｃ））。転置制御部２５０は、レジスタアクセス部３００に対して、第１の要素に対するアドレス補正値０、第２の要素に対するアドレス補正値＋１、のように、１つの要素を基準として要素データ単位毎に＋１ずつ増加する値を指示する。これにより、第１行を格納しているレジスタの第１番目の要素、第２行を格納しているレジスタの第２番目の要素、のように上述した異なる要素データの順序に分散させた行列データの第１列を構成する要素データを１回の読み出しで取り出すことが可能になる。
【００５７】
また、例えば第２列の要素データであれば、レジスタアクセス部３００は、第１行を格納している第２番目の要素、第２行を格納している第３番目の要素、のように読み出す。そのため、元の行列データの第１行第２列の要素データが２番目、第２行第２列の要素データが３番目というように、元の行列データの第２列を右に１要素分だけローテートシフトしたデータ列が読み出される。このデータ列を、元の行列データの第１行第２列の要素データを第１番目の要素とするような、転置行列データの第２行のデータとするために、転置処理部２５０は、出力ローテート部２７０における第２行に対するローテート量＋１と絶対値が同じで向きが逆であるローテート量−１を入力ローテート部２６０に指示する。
【００５８】
これらの動作により、演算処理部２４０は、演算命令２を実施するときには演算命令１の結果に転置処理を加えた結果を入力として受け取ることができる（図４（ｄ））。
【００５９】
転置制御部２５０は、上述したように、転置処理後に実行する演算に係るレジスタ群３１０からのデータ読み込み処理と、当該データを出力する演算に係るレジスタ群３１０へのデータ書き込み処理とにおいて、ローテートシフトとオフセットリードを実施することで演算処理部２４０に転置のための処理をさせることなく転置処理を実施する。転置制御部２５０は、上記転置処理に必要な出力ローテート部２７０におけるローテート量（出力ローテート量と呼ぶ）、オフセットリードのためのアドレス補正値、入力ローテート部２６０におけるローテート量（入力ローテート量と呼ぶ）を生成し、内包する設定レジスタ３２０に保持する。入力ローテート部２６０、出力ローテート部２７０、レジスタアクセス部３００は設定レジスタ３２０よりローテート量およびアドレス補正値を取得する。
【００６０】
なお、ローテート量およびアドレス補正値の設定例および詳細な動作については後述する。
【００６１】
＜動作＞
以下は、転置演算装置２００に基づき、８行８列の画像データの画像処理に関して、転置処理の手順を示すものである。
【００６２】
図５は、本実施の形態に係る転置演算装置２００において、一つの演算命令を実施するときの動作を示すフローチャートである。
【００６３】
図６は、要素データが８つ集合したデータ列が存在し、そのデータ列が８列分集合した状態を示す。
【００６４】
図６に示すＰ００−Ｐ７７の８行８列の行列データが演算処理１の出力データであり、演算処理２の入力データであるとする。上述したように、当該行列データをレジスタ群３１０に格納する場合、第１行のＰ００−Ｐ０７が１つのレジスタに格納され、第２行のＰ１０−Ｐ１７が別の１つのレジスタに格納され、第３行のＰ２０−Ｐ２７が同様に前記２つとは別の１つのレジスタに格納される。このとき、転置演算装置２００がＰ００−Ｐ７０の要素データからなるデータ列（図６の行列における第１列）に対して演算を行う場合、それぞれの要素データが異なるアドレスを有するレジスタに格納されていてかつ要素データの順序が同じであり同時に読み出すことができないため、読み出すためには８回の読み出し処理が発生することになる。このため、データ並列処理プロセッサ上で効率良く演算を行うには、転置処理が必要になる。演算制御部２３０は演算処理１の出力に対して転置処理を行うよう設定レジスタ３２０に設定情報を出力して転置制御部２５０に指示をし（Ｓ１０５でＹｅｓ）、転置制御部２５０は以下の方法で転置を行う。
【００６５】
まず、レジスタ群３１０に画像データを格納するにあたり、転置制御部２５０は、出力ローテート量を設定レジスタ３２０に設定する。出力ローテート部２７０は、出力ローテート量に基づいてローテートシフトを実行する。転置制御部２５０は、Ｐ００−Ｐ０７を基準としてローテート量０、Ｐ１０−Ｐ１７に対してローテート量＋１、Ｐ２０−Ｐ２７に対してローテート量＋２というように、データ列ごとに＋１ずつ増加させたローテート量を指示し、出力ローテート部２７０は指示通りにローテートシフトを行う（Ｓ１０６）。
【００６６】
次に、出力ローテート部２７０は、ローテートシフト後のデータ列をレジスタアクセス部３００に出力する。レジスタアクセス部３００は、演算制御部２３０が指定したレジスタアドレスＮが指すレジスタにＰ００−Ｐ０７を、レジスタアドレス（Ｎ＋１）が指すレジスタにＰ１０−Ｐ１７を、レジスタアドレス（Ｎ＋２）が指すレジスタにＰ２０−Ｐ２７を格納する（Ｓ１０７）。すべてのデータ列が格納された状態を図７（ａ）に示す。このように、出力ローテート部２７０によるローテートシフトを行ってからレジスタ群３１０に格納した状態を、転置準備状態と呼ぶ。
【００６７】
演算処理１に伴う転置処理はレジスタ群３１０への格納を持って完了する。なお、演算処理以前（Ｓ１０１〜Ｓ１０４）については、演算処理１が入力データとする行列データに転置が必要であるか否かに依存するため、ここでは説明を省略する。
【００６８】
次に、演算処理２に伴う転置処理について説明する。
【００６９】
演算処理２は転置を伴うので（Ｓ１０１でＹｅｓ）、レジスタ群３１０から入力データＰ００−Ｐ７７を読み出す際に、転置制御部２５０は、転置前の行列データの列ごとにアドレス補正値を作成する。レジスタアクセス部３００は、演算制御部２３０が指定するレジスタアドレスＮとアドレス補正値を用いてオフセットリードを行い、転置前の行列データの列ごとにデータ列を出力する（Ｓ１０２）。
【００７０】
アドレス補正値の生成方法について説明する。例えば、図７（ｂ）に示す通り、転置処理前の行列データの第１列目に当たるデータ列Ｐ００−Ｐ７０を読み出すときは、１番目の要素アドレス補正値を０とし、２番目の要素アドレス補正値を＋１、３番目の要素アドレス補正値を＋２のように指定し、アドレス補正値は｛０，＋１，＋２，＋３，＋４，＋５，＋６，＋７｝となる。
【００７１】
レジスタアクセス部３００は、次のようにレジスタ群３１０からデータを読み出してデータ列を生成する。１番目の要素については補正値が０であるので、指定された＃Ｎレジスタの１番目の要素であるＰ００を読み出す。２番目の要素については補正値が＋１であるので、アドレスＮに補正値＋１を加算した＃（Ｎ＋１）レジスタの２番目の要素であるＰ１０を読み出す。同様に３−８番目の要素も読み出すことにより、データ列Ｐ００−Ｐ７０が読み出しデータ列となる。
【００７２】
転置制御部２５０は、読み出す列データを変えるために基準となる要素データを変更し、同様に基準となる要素データから順に＋１ずつ増加するリードアクセスのアドレス補正値を生成する。ここで、基準となる要素データとは、演算制御部２３０が指定するアドレスのレジスタに記録されていて（＝アドレス補正値が０）、読み出す列に属する要素データを指す。例えば、２列目を読み出したい場合、基準となる要素データはＰ０１である。なお、基準となる要素データが１番目の要素でない場合、最後の要素データのアドレス補正値に＋１だけ増加させた値を１番目の要素の補正値とする。例えば、２番目の要素データのアドレス補正値を０とした例を図８（ｃ）に示す。このときのアドレス補正値は、｛＋７，０，＋１，＋２，＋３，＋４，＋５，＋６｝となる。上述したように、１番目の要素については、アドレスＮに＋７の補正値を加算した＃（Ｎ＋７）レジスタの１番目の要素Ｐ７１を読み出す。同様に２−８番目の要素を読み出すことで、Ｐ０１−Ｐ７１のデータ列の読み出しが行われる。同様に、例えば、図８（ｄ）に示す通り、Ｐ０７−Ｐ７７のデータ列の読み出しを行うには８番目の要素データのアドレス補正値を０として、アドレス補正値を｛＋１，＋２，＋３，＋４，＋５，＋６，＋７，０｝にすればよい。このように基準となる要素データ位置を１番目から１つずつ変更してオフセットリードを繰り返すことで、レジスタ上の行列データが転置前の行列データの列ごとに１つのデータ列となって取り出される。
【００７３】
最後に、転置制御部２５０が、転置前の行列データを転置準備状態にするために用いられたローテート量と絶対値が同じで向きが逆のローテート量を入力ローテート部２６０に指定する。図９（ｅ）に示す通り、入力ローテート部２６０がローテートシフトを実施することで、演算処理部２４０への入力データは元の８行８列の画像データを転置した行列データと等価になる（Ｓ１０３）。
【００７４】
以上の処理により、演算処理部２４０は、転置処理のための演算命令を実行することなく、レジスタ群３１０に格納した行列データを転置した行列データを、演算のための入力として受け取る（Ｓ１０４）。
【００７５】
演算処理２に伴う転置処理は、演算処理部２４０への転置行列データの出力を持って完了する。なお、演算処理以降（Ｓ１０５〜Ｓ１０７）については、出力データに転置が必要か否かに依存し、上記演算処理１に伴う転置処理と同様であるため省略する。
【００７６】
次に、演算処理１の結果を転置せず演算処理２の入力として用いる場合について説明する。
【００７７】
演算処理１において、転置制御部２５０は、出力ローテート部２７０にローテート量を指示せず、出力ローテート部２７０は、演算処理部２４０から受け取ったデータ列をローテートシフトすることなく、そのままレジスタアクセス部３００に出力する（Ｓ１０５でＮｏ）。レジスタアクセス部３００は、図６に示すように、演算制御部２３０が指定するレジスタアドレスＮにＰ００−Ｐ０７、レジスタアドレス（Ｎ＋１）にＰ１０−Ｐ１７のように、レジスタ群３１０に行列データを格納する（Ｓ１０７）。
【００７８】
演算処理２において、転置制御部２５０は、アドレス補正値、ローテート量を指示せず、レジスタアクセス部３００は、演算制御部２３０が指定するレジスタアドレスＮよりＰ００−Ｐ０７のデータ列、レジスタアドレス（Ｎ＋１）よりＰ１０−Ｐ１７のデータ列を読み出す。入力ローテート部２６０は、レジスタアクセス部３００から入力されたデータ列をローテートシフトすることなく、そのまま演算処理部２４０に出力する（Ｓ１０１でＮ）。
【００７９】
なお、転置演算装置２００は、転置処置後の演算の結果を転置した状態のまま扱う場合にはそのまま次の演算処理の入力として用いればよいし、元の配置に戻す場合には次の演算の前に再度転置処理を行えばよい。
【００８０】
かかる構成によれば、転置演算装置２００において転置制御部２５０に転置処理を指示するだけで、転置を必要とするデータを出力する演算において演算処理部２４０から出力データをレジスタ群３１０へ書き込むまでの処理と、転置を必要とするデータを入力とする演算においてレジスタ群３１０からデータを読み出し入力データを演算処理部２４０へ供給するまでの処理とを行う際に転置処理を分割して実行することができる。特に、レジスタ群３１０への書き込みが完了していれば、オフセットリードとローテートシフトにより転置行列を行ごとに演算処理部２４０に出力できるため、例えば、転置行列全体を出力しながら演算処理を並列に実行することができ、転置処理の伴う画像処理を高速化することができる。
【００８１】
（実施の形態２）
図１０は、実施の形態２における転置演算装置４００を示すブロック図である。図１０において、図１と同じ構成要素については同じ符号を用い、説明を省略する。
【００８２】
レジスタ群には、転置処理に係るデータ列を保持するための専用レジスタの集合である転置レジスタ群５１０を含む。本実施の形態において、レジスタ番号０−７は転置レジスタ群である。以下、転置レジスタ群５１０に属し固有のアドレスを有するレジスタを転置レジスタと呼ぶ。
【００８３】
転置演算装置４００は、命令発行部４１０、命令デコード部４２０、演算制御部４３０、演算処理部２４０、転置制御部４５０、レジスタアクセス部５００、転置レジスタ群５１０から構成される。
【００８４】
転置制御部４５０は内部に列位置情報やローテート量を設定するレジスタを持たず、命令デコード部４２０から、制御用パラメータを受け取る。
【００８５】
レジスタアクセス部５００は、転置レジスタ群５１０を含むレジスタ群からのデータの読み出しと、レジスタ群へのデータの書き込みを行う。詳細は後述する。
【００８６】
命令発行部４１０は、転置演算装置４００で実行する、データ並列処理プロセッサの演算命令を命令デコード部４２０へ発行する。
【００８７】
命令デコード部４２０は、命令コードを解読し、データをレジスタから読み出すためのアドレス、データをレジスタに書き込むためのアドレスを得る。書き込むためのレジスタのアドレスが転置レジスタであれば、当該レジスタのアドレス、並びに行列データを格納するレジスタのアドレス範囲など転置処理のために必要な情報を転置制御部４５０に出力する。
【００８８】
なお、データをレジスタから読み出すためのアドレス、データをレジスタへ書き込むためのアドレスが、転置レジスタ群５１０に属さないアドレス（０−７以外）である場合には、当該レジスタへの書き込み及び読み出しの際に転置処理を行わず、書き込まれた行列データをそのまま読み出す。
【００８９】
演算制御部４３０は、順次実行される演算命令から、演算処理を実行するためのデータパス情報を生成する機能を持つ。データパス情報は命令デコード部４２０から受信する信号を元に生成され、その内容は実行される演算命令の機能や、読み出し・書き込み先のレジスタアドレス、有効となるソースバスやディスティネーションバスの選択情報である。
【００９０】
転置制御部４５０は、命令デコード部４２０から受信した当該レジスタのアドレスを基にして、転置処理のためのデータの並び替えに必要な情報、つまり出力ローテート部２７０におけるローテート量、転置レジスタからのデータの読み出しに使用する列位置情報、入力ローテート部２６０におけるローテート量を決定する。例えば、レジスタ番号１へのリードが発生する場合、命令デコード部４２０は、列位置情報とするリードアドレスを、上位の要素から順番にアドレス｛７，０，１，２，３，４，５，６｝と、入力ローテート量を−１と、出力ローテート量を＋１というように、一意に設定する。情報の決定方法は、予めレジスタアドレスと対応する列位置情報やローテート量を保持しておいてもよいし、転置レジスタへの書き込みが発生するたびにその都度生成してもよい。
【００９１】
演算処理１の結果を転置して演算処理２の入力に用いる場合、演算処理１において出力レジスタとして転置レジスタを指定し、演算処理２において入力レジスタとして当該レジスタを指定すれば、転置演算装置４００は次のように動作する。すなわち、転置演算装置４００は、演算処理１の結果を出力ローテート部２７０によるローテートシフトを実行して、レジスタアクセス部５００により転置レジスタ群５１０に書き込む。次に、演算処理２が行われるときは、転置演算装置４００は、レジスタアクセス部５００により列位置情報に従って転置レジスタ群５１０に対しオフセットリードを行い、オフセットリードの結果に対し入力ローテート部２６０によりローテートシフトを行って演算処理部２４０に出力する。このようにすることで、転置後のデータ列を演算処理２の入力とすることができる。
【００９２】
なお、転置に必要なパラメータ、すなわち出力ローテート量、列位置情報、入力ローテート量は転置レジスタのアドレスによって一意に決まるものとは限らず、転置レジスタのアドレスが同一であってもデータ要素のビット幅や転置をおこなうデータ列の数が異なる場合には、上記パラメータが同一でなくてもよい。
【００９３】
レジスタ番号１−８に要素データ量１ｂｙｔｅの８行８列のデータを格納する場合の列位置情報アドレス値、入力ローテート量、出力ローテート量の設定例を図１１に示す。
【００９４】
＜動作＞
図１２は、本実施の形態に係る転置演算装置４００の一つの演算命令を実施するときの動作を示すフローチャートである。
【００９５】
演算処理１に係る転置処理について説明する。なお、Ｓ２０１からＳ２０４までについては、演算処理１の入力データに転置が必要であるかに依存し、演算処理２に係るＳ２０１からＳ２０４までと同様であるため、ここでは説明を省略する。
【００９６】
演算命令の出力レジスタが転置レジスタ群５１０に属する場合（Ｓ２０５でＹｅｓ）には、転置制御部４５０は、命令デコード部４２０からレジスタアドレスを受け取って出力ローテート量、列位置情報アドレス値、入力ローテート量を生成する。出力ローテート部２７０は、転置制御部４５０より受け取った出力ローテート量に従って、演算処理部２４０の出力行列データをデータ列ごとにローテートシフトして（Ｓ２０６）、レジスタアクセス部５００に出力する。レジスタアクセス部５００は、演算制御部４３０が書き込み先として指定するアドレスのレジスタに出力ローテート部２７０から受け取ったデータ列を書き込む（Ｓ２０７）。
【００９７】
次に、演算処理２に係る転置処理について説明する。
【００９８】
レジスタアクセス部５００は、演算処理部２４０が読み出し先に指定するアドレスが転置レジスタ群５１０に属するので（Ｓ２０１でＹｅｓ）、転置制御部４５０より列位置情報アドレス値を受け取り、オフセットリードによって元の行列の列データごとに読み出して入力ローテート部２６０に出力する（Ｓ２０２）。上述のＳ１０２とは、オフセットレジスタを用いて要素データごとのレジスタを特定する代わりに、上述の列位置情報アドレス値をそのまま用いて要素データごとのレジスタを特定することが異なる。
【００９９】
入力ローテート部２６０は、レジスタアクセス部５００から入力された元の行列の列データを、転置制御部４５０が生成した入力ローテート量を用いてローテートシフトを行い、演算処理部２４０に出力する（Ｓ２０３）。
【０１００】
一方、演算命令１の出力先のレジスタが転置レジスタ群５１０に属さない場合（Ｓ２０５でＮｏ）、出力ローテート部２７０は、演算処理部２４０の出力をそのままレジスタアクセス部５００に出力し、データは図６に示されるような形式でレジスタ群に格納される。
【０１０１】
また、演算命令２の入力元のレジスタが転置レジスタ群５１０に属さない場合（Ｓ２０１でＮｏ）、レジスタアクセス部５００は、列位置情報を用いることなく、演算制御部４３０が指定するアドレスからデータ列をそのまま読み出す。また、入力ローテート部２６０は、レジスタアクセス部５００が読み出したデータ列を、そのまま演算処理部２４０に出力する。
【０１０２】
本実施の形態では、演算命令１において転置レジスタを出力先とし、演算命令２の入力レジスタを当該転置レジスタとすることにより、演算命令１の演算結果に転置処理を施して演算命令２の入力データとすることができる。また、演算命令１の出力レジスタを転置レジスタ以外のレジスタとし、演算命令２の入力レジスタを当該レジスタとすれば、演算命令２が演算命令１の演算結果をそのまま入力データとして受け取ることができる。
【０１０３】
この構成によれば、レジスタの一部を転置処理専用のレジスタとして扱うことで、演算命令の入出力レジスタのアドレス指定によって転置処理の実施の有無を設定でき、転置制御部における転置制御を行うためのレジスタの設定が不要になる。また、転置処理の対象となるデータと転置処理の対象とならないデータとは同じアドレスのレジスタには書き込まれないため、転置処理の対象となるデータと転置処理の対象とならないデータとを取り違えてデータ列の並びを破壊する事故を防ぐことができる。
【０１０４】
（実施の形態３）
図１３は、実施の形態３に係る転置演算装置６００を示す。図１３において、図１と同じ構成要素については同じ符号を用い、説明を省略する。
【０１０５】
転置演算装置６００は、命令発行部６１０、命令デコード部６２０、演算制御部６３０、演算処理部６４０、転置制御部６５０、レジスタアクセス部３００、レジスタ群３１０から構成される。
【０１０６】
命令発行部６１０は、転置が伴う演算命令及び、転置が伴わない演算命令を発行する。転置が伴う演算命令には、通常の演算命令のほか、転置のためのパラメータ、すなわち、列位置情報、入力ローテート量、出力ローテート量またはこれらを決定するために必要な情報を含んでいる。例えば、通常の演算命令がｓｕｂ，Ｒ３，Ｒ１６，Ｒ１９やｍｕｌ，Ｒ５，Ｒ２，Ｒ２４であれば、これらに転置のパラメータを付加した、ｓｕｂ＿ｏｆｆｓｅｔ０＿ｒｄ０＿ｗｒ３，Ｒ３，Ｒ１６，Ｒ１９やｍｕｌ＿ｏｆｆｓｅｔ２＿ｒｄ２＿ｗｒ０，Ｒ２，Ｒ０，Ｒ２４のような命令が発行される。ここで、ｏｆｆｓｅｔ２は列位置情報として予め作成しているアドレス補正値のうちパターン２を使用すること、ｒｄ２は入力ローテート量が２であること、ｗｒ３は出力ローテート量が３であることを示している。後述するように、演算結果をレジスタに転置準備状態で出力する命令についてはｗｒの値を設定し、転置準備状態で記録されたレジスタからデータを読み出して演算前に転置を行う命令についてはｏｆｆｓｅｔとｒｄの値を適正に設定することで、転置処理が可能となる。
【０１０７】
命令デコード部６２０は、命令コードの解読時に、転置処理を伴うかどうかを判定する。転置処理を伴う場合には、命令に付加されている転置のための情報を転置制御部６５０に出力する。
【０１０８】
転置制御部６５０は、命令デコード部６２０が出力する転置のための情報をもとに、列位置情報及び入力ローテート量、出力ローテート量を生成する。列位置情報及び入力ローテート量、出力ローテート量を決定する方法としては、上述の例のように命令に直接付加された列位置情報のパターン、入力ローテート量、出力ローテート量をそのまま用いてもよいし、列位置情報、入力ローテート量、出力ローテート量の組み合わせを予め複数作成しておいて、命令コードによりどの組み合わせを使用するか指定してもよい。または、列位置情報と入力ローテート量、出力ローテート量の組み合わせについて、作成済みの組み合わせの１つを使用するか新たに組み合わせを作成するかを命令コードで指定し、新たな組み合わせが指定された場合はその都度、列位置情報と入力ローテート量、出力ローテート量の組み合わせを生成するものとしてもよい。
【０１０９】
また、転置制御部６５０は、行列データをレジスタ群３１０に書き込む際に演算処理部６４０に出力ローテート量を、行列データをレジスタ群３１０から読み出す際にレジスタアクセス部３００に列位置情報を、演算処理部６４０に入力ローテート量をそれぞれ出力する。
【０１１０】
演算制御部６３０は、演算前に転置処理を伴う演算命令に対しては、入力ローテート部２６０を備えた演算器を使用するデータパス情報を生成する。また、当該演算命令の結果に対して転置処理を伴う演算命令に対しては、出力ローテート部２７０を備えた演算器を使用するデータパス情報を生成する。
【０１１１】
演算処理部６４０は、入力データの並び替えを備えた演算器と、入力データをそのまま扱う演算器とを備え、転置制御部６５０と演算制御部６３０とから各種転置処理および演算処理に伴うパラメータを受け取ることで、転置処理を伴わない演算と転置処理の伴う演算とを実行する。
【０１１２】
＜動作＞
図１４は、本実施の形態に係る転置演算装置６００の１つの演算命令に係る動作を示すフローチャートである。
【０１１３】
演算命令１の演算結果に転置処理を行って演算命令２の入力とする場合について説明する。
【０１１４】
演算命令１に係る転置処理について説明する。
【０１１５】
転置演算装置６００は、演算処理部６４０のうち入力ローテート部２６０と出力ローテート部２７０とを有する演算器を用いて演算を行う。演算処理を実施した後（Ｓ３０４）、当該演算命令より生成された出力ローテート量を用いて出力ローテート部２７０でデータ列の並び替えを実行する（Ｓ３０５）。
【０１１６】
レジスタアクセス部３００は、演算処理部６４０の出力を、演算制御部６３０が指定するアドレスのレジスタに書き込む（Ｓ３０８）。
【０１１７】
次に、演算命令２に係る転置処理について説明する。
【０１１８】
演算命令に転置が伴う場合（Ｓ３０１でＹｅｓ）、レジスタアクセス部３００は、演算制御部６３０が指定する読み込み先アドレスと、転置制御部６５０からリードアドレス補正値とを受け取って、オフセットリードを実行しデータ列を読み出す（Ｓ３０２）。詳細な動作はＳ１０４と同様なので省略する。次に、転置演算装置６００は、演算処理部６４０のうち入力ローテート部２６０と出力ローテート部２７０とを有する演算器を用いて演算命令を実行する。まず、入力ローテート部２６０が、転置制御部６５０から受け取る入力ローテート量を用いてデータ列の並び替えを行い、転置行列データを生成する（Ｓ３０３）。これにより、演算器は、演算命令１の結果に転置を施したデータを入力として演算命令２の実行が可能になる。
【０１１９】
演算に転置を伴わない場合（Ｓ３０１でＮｏ）、次の処理となる。
【０１２０】
演算命令１においては、演算処理部６４０のうち入力ローテート部２６０及び出力ローテート部２７０を有さない演算器を用いて演算が行われる（Ｓ３０７）。次に、レジスタアクセス部３００は、演算処理部６４０の出力を、演算制御部６３０が指定するアドレスのレジスタに書き込む（Ｓ３０８）。
【０１２１】
演算命令２において、レジスタアクセス部３００は、演算制御部６３０が指定する読み込み先アドレスを用いてデータ列を読み出す（Ｓ３０６）。次に、転置演算装置６００は、演算処理部６４０のうち入力ローテート部２６０と出力ローテート部２７０とを有さない演算器を用いて演算を行う（Ｓ３０７）。
【０１２２】
この構成によると、演算命令１に出力ローテート命令を付加し、演算命令２にオフセットリードと入力ローテート命令を付加することにより、演算命令１の演算結果に転置処理を施したデータを、演算命令２を実施する演算器が入力データとして受け取ることができる。このとき、例えば、演算命令１における出力ローテート量が行列データの１行目から｛＋１，＋２，…，＋７，０｝、演算命令２におけるアドレス補正値が１行目に対して｛＋７，０，＋１，＋２，…，＋６｝、入力ローテート量が行列データの１行目から｛−１，−２，…，−７，０｝となるように、演算命令に転置に関する情報を付加すればよい。また、演算命令１に出力ローテート命令を付加せず演算命令２にもオフセットリード命令と入力ローテート命令を付加しなければ、演算命令２が演算命令１の結果をそのまま入力データとして受け取ることができる。
【０１２３】
この構成によれば、転置処理のための列位置情報、出力ローテート量、入力ローテート量について演算命令を作成する者が任意に設定することが可能で、転置対象となる行列データを格納するレジスタのアドレスについて制約がない。
【０１２４】
（実施の形態４）
実施の形態１において、転置処理を行った後の演算結果について、そのまま（転置状態）で次の演算の入力とする場合は転置に係る処理を行わずに次の演算に出力し、元の配置に戻す場合には次の演算の前に再度転置を行う場合について説明した。本実施の形態においては、転置処理を行った後の演算結果について、再度の転置と異なる方法で元の配置に戻す場合について説明する。
【０１２５】
本実施の形態に係る転置演算装置は、レジスタアクセス部３００に代えてレジスタアクセス部７００を備えている以外、実施の形態１と同様の構成である。レジスタアクセス部７００はレジスタアクセス部３００の機能に加えて、下記の機能を有している。
【０１２６】
レジスタアクセス部７００は、演算制御部２３０からアドレスの指定を伴った書き込み命令を受け、かつ転置制御部２５０がアドレス補正値を指定している場合には、オフセットリードと同様、出力ローテート部２７０から受信したデータ列を要素データ単位に分割し、要素データ単位で書き込むレジスタを変更して要素データ単位でレジスタに書き込む。このようなアドレス補正値を伴う書き込み動作をオフセットライトと呼ぶ。
【０１２７】
レジスタアクセス部７００が要素データ単位で書き込むレジスタを変更する方法について、図１５を用いて説明する。レジスタアクセス部７００は、書き込むためのデータ列を要素データ単位に分割する。次に、レジスタアクセス部７００は、レジスタ群３１０のうち書き込み対象のレジスタを選択し、当該レジスタの入力手段より要素データを書き込む。
【０１２８】
レジスタアクセス部７００は、まず演算制御部２３０が指定する書き込みアドレス（ライトアドレス）に加算器７４０−１〜７４０−４を用いてアドレス補正値を加算し、要素データごとにオフセットアドレスを生成する。次に、ライトアドレスに最初の要素データに対応するアドレス補正値を加算したオフセットアドレスが加算器７４０−１より出力され、レジスタアクセス部７００は、レジスタ群３１０のうち各レジスタの１番目の要素を格納する領域３１１−１の中から、オフセットアドレスが示すレジスタの１番目の要素を格納する領域を選択し書き込むためのデータ列の１番目の要素を書き込む。また、加算器７４０−２から出力されるオフセットアドレスを用いて、書き込むためのデータ列の２番目の要素を書き込む領域をレジスタ群３１０における各レジスタの２番目の要素を格納する領域３１１−２から選択し、書き込む。同様に、データ列の３番目の要素は加算器７４０−３が生成するオフセットアドレスを用いて、データ列の４番目の要素は加算器７４０−４が生成するオフセットアドレスを用いてレジスタ群３１０に書き込む。このようにして、レジスタアクセス部７００は書き込むためのデータ列の全ての要素データをレジスタ群３１０に書き込む。
【０１２９】
＜動作＞
演算処理２において演算を行うまでの処理については、実施の形態１と同一であるので説明を省略し、以降の演算処理部２４０による演算結果をレジスタ３１０に格納する処理について図を用いて説明する。
【０１３０】
画像処理が完了後に再びもとのデータ配置に変換する場合、次の転置処理を行う。
【０１３１】
演算器が出力した演算結果は、出力ローテート部２７０でデータ列の並びを変更する。ここでローテートシフトする量は、転置後の要素データ位置を０から７までに格納する場合、要素データ位置０に対する要素データ位置の差分によって決定する。図１６（ａ）はローテートシフトされた演算結果から構成される、書き込みデータ列の集合を示している。
【０１３２】
転置制御部２５０は、レジスタ群３１０に書き込みを行うためのアドレス補正値を生成する。レジスタアクセス部７００は、演算制御部２３０が指定する書き込みアドレスと、転置制御部２５０が生成するアドレス補正値とを用いて、要素データごとに書き込むレジスタのアドレスを変更し、演算結果である行列データの列データをレジスタ群３１０に書き込む。
【０１３３】
例えば、要素データ位置３、要素データ位置５の順序でデータ列の演算処理が完了した場合のレジスタ群への書き込みを図１６（ｂ）及び図１７（ｃ）に示す。要素データ位置３のデータ列Ｐ０３−７３については、図１７（ｃ）に示す通り、４番目の要素アドレス補正値を０とし、５番目の要素アドレス補正値を＋１、６番目の要素アドレス補正値を＋２のように指定してレジスタに書き込む。同様に要素データ位置５のデータ列Ｐ０５−７５については、図１６（ｂ）に示す通り、６番目の要素アドレス補正値を０とし、７番目の要素アドレス補正値を＋１、８番目の要素アドレス補正値を＋２のように指定する。書き込む列データを変えるためには実施の形態１〜３におけるオフセットリードと同様、基準となる要素データ位置を変更し、同様に要素データ毎に＋１ずつ増加するライトアクセスのアドレス補正値を生成する。なお、基準となる要素データ（アドレス補正値が０となる要素データ）が１番目の要素でない場合、最後の要素データのアドレス補正値に＋１だけ増加させた値を１番目の要素の補正値とする。図１７（ｄ）に示す通り、全ての要素データが書き込まれた時点で、レジスタ群３１０には転置準備状態で行列データが格納されている。
【０１３４】
全ての要素データの書き込みの完了後、ローテートシフトを行うことで、図６の示す画像フォーマットに戻すことができる。
【０１３５】
ここで、レジスタ群３１０に格納する行列データを入力データとする演算処理を行う場合、次のように処理を実行してもよい。レジスタ群３１０に書き込みを行った後ローテートシフトを行わずに、当該演算を実行するためレジスタ群３１０からデータを読み出す際に入力ローテート部２６０でローテートシフトを行う。これにより、演算処理部２４０は元のデータ配置によるデータ列を受け取ることができる。そのため、レジスタ群３１０からデータを読み出す前に別途ローテートシフトを行う必要がなくなる。
【０１３６】
この構成によれば、例えば、転置処理後の行列データを用いて演算処理を行い、行列データの一部を更新した後に行列データを転置前の配置に戻す場合に、演算処理によって更新される行列データの列データ（転置状態における行データ）のみをレジスタ群３１０に格納すればよく、演算処理の結果である行列データ全体をレジスタ群３１０に書き込んで転置する必要がないため、転置処理の伴う画像処理の処理時間が短縮される。
【０１３７】
（実施の形態５）
実施の形態１から４において、出力ローテート量が１列目から順に｛０，＋１，＋２，＋３，＋４，＋５，＋６，＋７｝、アドレス補正値が図７（ｂ）、図８（ｃ）、図８（ｄ）に示される値、入力ローテート量が１列目から順に｛０，−１，−２，−３，−４，−５，−６，−７｝、である場合について説明した。本実施の形態においては、レジスタ群３１０への書き込み前の並び替え、およびレジスタ群３１０から読み出し後の並び替えについてローテートシフト以外の並び替えを行う場合について説明する。
【０１３８】
図１８は実施の形態５に係る転置演算装置８００を示す。図１８において、図１と同じ構成要素については同じ符号を用い、説明を省略する。
【０１３９】
転置演算装置８００は、命令発行部２１０、命令デコード部２２０、演算制御部２３０、演算処理部２４０、転置制御部８５０、レジスタアクセス部３００、レジスタ群３１０、入力データ並替部８６０、出力データ並替部８７０から構成される。
【０１４０】
入力データ並替部８６０は、レジスタアクセス部３００がレジスタ群３１０から読み出したデータ列を要素データ単位で並び替えを行う機能を持つ。
【０１４１】
データ列をどのように並び替えるかは、転置制御部８５０から指定される入力並替情報で決定される。
【０１４２】
入力データ並替部８６０で並び替えを行ったデータ列は、演算処理部２４０へ入力データとして渡される。
【０１４３】
出力データ並替部８７０は、演算処理部２４０で処理された演算結果のデータ列に対して、要素データ単位で並び替えを行う機能を持つ。データ列の並び替え方法は入力データ並替部８６０と同様に転置制御部８５０で決定される。並び替えられたデータ列は、レジスタアクセス部３００に出力される。
【０１４４】
転置制御部８５０は、転置処理後に実行する演算に係るレジスタ群３１０からのデータ読み込み処理と、当該データを出力する演算に係るレジスタ群３１０へのデータ書き込み処理においてデータ列並び替えとオフセットリードを実施することで演算処理部２４０に転置のための処理をさせることなく転置処理を実施する。転置制御部８５０は、上記転置処理に必要な出力並替情報、オフセットリードのための列位置情報であるアドレス補正値、入力並替情報を生成し、内包する設定レジスタ３２０に保持する。入力データ並替部８６０、出力データ並替部８７０、レジスタアクセス部３００は設定レジスタ３２０より出力並替情報、入力並替情報およびアドレス補正値を取得する。
【０１４５】
＜動作＞
以下は、転置演算装置８００による、８行８列の行列データの転置処理の手順を示すものである。
【０１４６】
まず、レジスタ群３１０に画像データを格納するにあたり、転置制御部８５０は、出力並替情報を設定レジスタ３２０に設定し、出力データ並替部８７０は、出力並替情報に基づいて並び替えを実行する。転置制御部８５０は、Ｐ００−Ｐ０７は並び替えなし、Ｐ１０−Ｐ１７に対して｛６，０，１，４，３，２，７，５｝、Ｐ２０−Ｐ２７に対して｛５，７，０，１，２，３，４，６｝というように、転置前行列における同じ列（例えばＰ００−Ｐ７０）が同じ列に属さないように、出力並替情報を指示する。なお、並替情報は、並び替え前のデータ列の各要素データが、並び替え後にどのような順で並ぶかを示しており、例えばデータ列｛Ｐ００，Ｐ０１，Ｐ０２，Ｐ０３｝を並替情報｛３，１，２，０｝に従って並び替えると、データ列｛Ｐ０３，Ｐ０１，Ｐ０２，Ｐ００｝となる。
【０１４７】
次に、出力データ並替部８７０は、並び替え後のデータ列をレジスタアクセス部３００に出力し、レジスタアクセス部３００は、演算制御部２３０が指定したレジスタアドレスＮが指すレジスタにＰ００−Ｐ０７を、レジスタアドレス（Ｎ＋１）が指すレジスタにＰ１０−Ｐ１７を、レジスタアドレス（Ｎ＋２）が指すレジスタにＰ２０−Ｐ２７を格納する。すべてのデータ列が格納された状態を図１９（ａ）に示す。
【０１４８】
次に、演算処理２に伴う転置処理について説明する。
【０１４９】
転置制御部８５０は、転置前の行列データの列ごとにアドレス補正値を作成する。レジスタアクセス部３００は、演算制御部２３０が指定するレジスタアドレスＮと、転置制御部８５０が生成したアドレス補正値とを用いてオフセットリードを行い、転置前の行列データの列ごとにデータ列を出力する。
【０１５０】
アドレス補正値の生成方法について説明する。例えば、図１９（ｂ）に示す通り、転置処理前の行列データの第３列目に当たるデータ列Ｐ０２−Ｐ７２を読み出すときは、アドレス補正値は｛＋６，＋５，０，＋７，＋２，＋１，＋４，＋３｝となる。
同様に、例えば、Ｐ０７−Ｐ７７のデータ列の読み出しを行うにはアドレス補正値を｛＋３，＋２，＋７，＋４，＋５，＋６，＋１，０｝にすればよい。このように基準となる要素データ位置を変更してオフセットリードを繰り返すことで、レジスタ上の行列データが転置前の行列データの列ごとに１つのデータ列となって取り出される。すべてのデータ列が取り出された状態を図２０（ｃ）に示す。
【０１５１】
最後に、転置制御部８５０が、取り出されたデータ列が転置後の行列データにおける行データとなるように並び替えるための入力並替情報を入力データ並替部８６０に指定する。例えば、第４列目（Ｐ０３−０７３）であれば、｛Ｐ５３，Ｐ６３，Ｐ３３，Ｐ０３，Ｐ１３，Ｐ２３，Ｐ７３，Ｐ４３｝の順を｛Ｐ０３，Ｐ１３，Ｐ２３，Ｐ３３，Ｐ４３，Ｐ５３，Ｐ６３，Ｐ７３｝に並べ替えるため、｛３，４，５，２，７，０，１，６｝となる。
【０１５２】
取り出されたすべてのデータ列に対して、入力並替情報を用いて並び替えを行うことにより、図２０（ｄ）に示すように演算処理部２４０への入力データは元の８行８列の行列データを転置した行列データと等価になる。
【０１５３】
かかる構成によれば、レジスタ群３１０への書き込み前のオフセットリードの並び替えにおいて、行列データの各行ごとに要素データ幅だけ右向きシフト量が増加するローテートシフトに限られず、もとの行列データの同一列のデータが異なる列に属するよう並び替えを実施することにより、本発明に基づく行列データの転置を行うことができる。
【０１５４】
＜本実施の形態に係るその他の変形例＞
（１）実施の形態１〜５では、転置対象の行列データの全ての列に対応する列位置情報（アドレス補正値）を用いて演算処理２を行う演算処理部２４０または６４０に転置行列全体を出力する場合について説明したが、本発明は必ずしもこの場合に限定されない。例えば、演算処理２が転置対象の行列データの第１列、第２列、第３列に対応するデータ列のみを用いる場合、当該部分データのみを演算処理部２４０または６４０に出力してもよい。このようにすることで、例えば、転置行列全体を生成することなく、転置行列の一部を必要とする演算を並列で実行することが可能になる。
【０１５５】
（２）実施の形態１〜４では、ローテート量の最小単位を要素データの幅として、入力ローテート部２６０および出力ローテート部２７０は指定されたローテート量×要素データの幅が示す量（ビット数）だけローテートシフトする場合について説明したが、本発明は必ずしもこの場合に限定されない。例えば、ローテート量の最小単位を１ビットとしてローテート量をビット数単位で指定してもよいし、要素データの幅の整数倍（例えば、２倍や４倍）を最小単位としてもよい。このようにすることで、例えば、要素データの幅が８ビットであるときに、１６ビットを１要素とするような行列データに対して転置処理を行うことが可能になる。
【０１５６】
（３）実施の形態１では、出力ローテート量が１列目から順に｛０，＋１，＋２，＋３，＋４，＋５，＋６，＋７｝、アドレス補正値が図７（ｂ）、図８（ｃ）、図８（ｄ）に示される値、入力ローテート量が１列目から順に｛０，−１，−２，−３，−４，−５，−６，−７｝、実施の形態２では、レジスタアクセスのアドレス補正値、入力ローテート量、出力ローテート量が図１１に記載の値である場合について説明したが、本発明は必ずしもこの場合に限定されない。例えば、出力ローテート量を１列目から順に｛＋６，＋７，０，＋１，＋２，＋３，＋４，＋５｝として入力ローテート量を１列目から順に｛−６，−７，０，−１，−２，−３，−４，−５｝とし、アドレス補正値をローテート量に合わせた値として１列目であれば｛＋２，＋３，＋４，＋５，＋６，＋７，０，＋１｝としてもよい。このように、出力ローテート量を１列目から順に＋１ずつ要素データ単位で増加させた値を設定し、入力ローテート量を絶対値が同一でシフト向きが逆向きとなるよう設定することで実施の形態１〜４による本発明の実施が可能となる。
【０１５７】
（４）実施の形態１、２，３では、入力ローテート量を、対応する出力ローテート量と絶対値が同一でシフト向きが逆向きとする場合について説明したが、本発明は必ずしもこの場合に限定されない。例えば、転置処理対象となる行列データがｎ行ｎ列（ｎは２以上の整数）である場合に、ｊ行目（ｊは１以上ｎ以下の整数）の出力ローテート量とｊ行目の入力ローテート量の合計がｎの整数倍（単位は要素データ幅）であってもよい。
【０１５８】
（５）実施の形態２、３において、転置処理を伴う演算を実行後、演算結果を元の並びに戻すために、当該演算と当該演算の結果を入力データとして用いる演算との間に転置処理を実施する場合について説明したが、本発明は必ずしもこの場合に限定されない。例えば、実施の形態４のように、当該演算の結果をレジスタに格納する際に、レジスタアクセス部３００または５００がレジスタアクセス部７００の機能も有し、ライトアドレス補正を行ってレジスタに書き込み、当該データを用いる演算を実行するときにレジスタアクセス部３００または５００が通常の読み込みを行って入力ローテート部２６０がローテートシフトを行うものとしてもよい。
【０１５９】
あるいは、実施の形態１〜３において転置処理を行うときに、演算命令１において出力ローテート部２７０によるローテートシフトとレジスタアクセス部３００または５００によるオフセットライトを行い、演算命令２においてレジスタアクセス部３００または５００が通常の読み込みを行って入力ローテート部２６０がローテートシフトを行ってもよい。
【０１６０】
（６）実施の形態２では、レジスタ番号０−７を転置レジスタとする場合について説明したが、本発明は必ずしもこの場合に限定されない。例えば、レジスタ番号２４−３１を転置レジスタとしてもよいし、レジスタ番号０−１５を転置レジスタとして最大１６行１６列のデータを転置できるものとしてもよい。
【０１６１】
（７）実施の形態３では、転置処理を伴わない演算命令は入力ローテート部２６０及び出力ローテート部２７０を有さない演算器を用いて処理を行う場合について説明したが、本発明は必ずしもこの場合に限定されない。例えば、転置処理を伴わない演算命令を、入力ローテート量が０、出力ローテート量が０の転置処理を伴う演算命令として、入力ローテート部２６０及び出力ローテート部２７０を有する演算器で処理を行ってもよい。逆に、入力ローテート量が０、出力ローテート量が０の転置処理を伴う演算命令を、入力ローテート部２６０及び出力ローテート部２７０を有さない演算器を用いて処理を行ってもよい。または、演算処理部６４０が入力ローテート部２６０のみを有する演算器を備えて、入力ローテート量が０でなく出力ローテート量が０である転置処理を伴う演算命令を当該演算器に実行させてもよいし、出力ローテート部２７０のみを有する演算器を備えて、出力ローテート量が０でなく入力ローテート量が０である転置処理を伴う演算命令を当該演算器に実行させてもよい。このようにすることで、並列処理の効率を向上させることができ、かつ、演算器リソースの共用化によるハードウェアリソースの削減が可能になる。
【０１６２】
あるいは、実施の形態１、２において、演算処理部２４０を、演算処理部６４０のように入力ローテート部２６０と出力ローテート部２７０を演算器ごとに配置する構成としてもよい。例えば、実施の形態２において、入力ローテート部２６０を有する演算器に転置レジスタからの読み出しを伴う命令を実行させ、出力ローテート部２７０を有する演算器に転置レジスタへの書き込みを伴う命令を実行させるものとしてもよい。
【０１６３】
（８）実施の形態１、３〜５では、転置制御部２５０が列位置情報を演算制御部２３０、４３０または６３０が生成する読み込みのためのレジスタのアドレスとの差分であるアドレス補正値として供給する場合について説明したが、本発明は必ずしもこの場合に限定されない。例えば、実施の形態２のように列位置情報はレジスタのアドレスを直接指定するものであってもよい。このようにすることで、転置のための行列データを格納するためのレジスタのアドレスが離散した値であっても本発明に係る転置処理を実施することが可能になり、オフセットリードを行う場合には演算制御部２３０、４３０、６３０または８３０が読み込みのためのレジスタのアドレスを生成する必要がなくなる。
【０１６４】
（９）実施の形態１、３〜５では、８行８列の行列データを転置する場合について説明したが、本発明は必ずしもこの場合に限定されない。例えば、１つのレジスタに要素データがＭ個格納できて、かつ、レジスタ群がＭ個のレジスタで構成されている場合は、ｍ行ｍ列（ｍ≦Ｍ）の行列データを転置することができる。また、実施の形態２にあっては、転置レジスタ群５１０に属する１つのレジスタに要素データがＭ個格納できて、かつ、転置レジスタ群５１０にレジスタがＭ個存在する場合に、ｍ行ｍ列（ｍ≦Ｍ）の行列データを転置することができる。
【０１６５】
あるいは、転置対象となる行列が正方行列でない場合には、正方行列となるよう空行または空列を付加して出力ローテート部２７０に出力し、入力ローテート部２６０の出力より付加した空行または空列を取り除くことにより、本発明に係る方法で転置を行うことが可能になる。
【０１６６】
（１０）実施の形態１〜５では、演算処理１の演算結果に転置処理を行って演算処理２の入力とする場合について説明したが、本発明は必ずしもこの場合に限定されない。例えば、外部の記憶装置である画像メモリ１３０に格納されている行列データに転置処理を行って演算処理２の入力とする場合には、画像メモリ１３０を入力先としてレジスタ群３１０または転置レジスタ群５１０を出力先とし、入力データをそのまま出力する演算処理１を行えばよい。同様に、例えば、演算処理１の演算結果に対し転置処理を行ってから画像メモリ１３０に格納する場合には、レジスタ群３１０または転置レジスタ群５１０を入力先として画像メモリ１３０を出力先とし、入力データをそのまま出力する演算処理２を行えばよい。
【０１６７】
（１１）上記の各実施の形態の転置演算装置は、典型的には集積回路であるＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）として実現されてよい。各回路を個別に１チップとしてもよいし、全ての回路又は一部の回路を含むように１チップ化されてもよい。
【０１６８】
ここでは、ＬＳＩとして記載したが、集積度の違いにより、ＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、システムＬＳＩ、スーパＬＳＩ、ウルトラＬＳＩと呼称されることもある。
【０１６９】
また、集積回路化の手法はＬＳＩに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。ＬＳＩ製造後にプログラム化することが可能なＦＰＧＡ（ＦｉｅｌｄＰｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）、ＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用してもよい。
【０１７０】
さらには、半導体技術の進歩又は派生する別技術によりＬＳＩに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。
【０１７１】
（１２）実施の形態１〜５の説明は本発明の例示に過ぎず、本発明の範囲を逸脱することなく種々の改良や変形を行うことができる。
【０１７２】
＜補足＞
以下に、実施の形態に係る転置演算装置とその集積回路、および転置処理方法の構成および効果について説明する。
【０１７３】
（１）実施の形態に係る転置演算装置は、処理対象となる行列データを構成する行データを格納し、行データを構成する要素データ単位で読み出せるレジスタからなる、前記行列データを格納可能なレジスタ群と、行列データに対して、同一列の要素データがそれぞれ別の列となるように行データごとに並び替えるための出力並替情報と、前記行列データにおいて同一の列に属する要素データが前記レジスタ群に記憶される場所を示す列位置情報と、前記列位置情報に従って前記レジスタ群から読み出される前記行列データの同一列の要素データの集合を並び替えるための入力並替情報とを生成する転置制御部と、前記出力並替情報を用いて前記行列データを並び替える出力データ並替部と、前記出力データ並替部が並び替えを行った行列データを前記レジスタ群に書き込み、前記レジスタ群からデータを読み出して、前記列位置情報を用いて要素データを取り出すレジスタを前記出力データ並替部が並び替えを行った行列データの列ごとに１つずつ選択し、前記要素データの集合を出力するレジスタアクセス部と、前記レジスタアクセス部が出力する前記要素データの集合を前記入力並替情報を用いて並び替える入力データ並替部と、前記入力データ並替部が並び替えを行った要素データの集合に演算を行う演算処理部とを備えることを特徴とする。
【０１７４】
また、実施の形態に係る集積回路は、処理対象となる行列データを構成する行データを格納し、行データを構成する要素データ単位で読み出せるレジスタからなる、前記行列データを格納可能なレジスタ群と、行列データに対して、同一列の要素データがそれぞれ別の列となるように行データごとに並び替えるための出力並替情報と、前記行列データにおいて同一の列に属する要素データが前記レジスタ群に記憶される場所を示す列位置情報と、前記列位置情報に従って前記レジスタ群から読み出される前記行列データの同一列の要素データの集合を並び替えるための入力並替情報とを生成する転置制御部と、前記出力並替情報を用いて前記行列データを並び替える出力データ並替部と、前記出力データ並替部が並び替えを行った行列データを前記レジスタ群に書き込み、前記レジスタ群からデータを読み出して、前記列位置情報を用いて要素データを取り出すレジスタを前記出力データ並替部が並び替えを行った行列データの列ごとに１つずつ選択し、前記要素データの集合を出力するレジスタアクセス部と、前記レジスタアクセス部が出力する前記要素データの集合を前記入力並替情報を用いて並び替える入力データ並替部と、前記入力データ並替部が並び替えを行った要素データの集合に演算を行う演算処理部とを備えることを特徴とする。
【０１７５】
また、実施の形態に係る転置処理方法は、行列データを構成する行データを格納し、行データを構成する要素データ単位で読み出せるレジスタからなる、前記行列データを格納可能なレジスタ群を含み、前記行列データに対して演算処理と転置処理を行う転置演算装置における転置処理方法であって、行列データに対して、同一列に属する要素データがそれぞれ別の列に属するように行データごとに並び替える出力データ並替ステップと、前記並び替えられた行列データを前記レジスタ群に記憶させるデータ記憶ステップと、前記出力行列データにおいて同一列に属する要素データが記憶されている前記レジスタ群の場所を示す列位置情報を生成する列位置情報生成ステップと、前記列位置情報を用いて前記列位置情報を用いて要素データを取り出すレジスタを前記出力データ並替部が並び替えを行った行列データの列ごとに１つずつ選択し、前記要素データの集合を前記レジスタ群から読み出すデータ読み出しステップと、前記データ読み出しステップで読み出される前記要素データの集合を並び替える入力データ並替ステップと、前記入力並び替えられた要素データの集合に演算処理を行う演算ステップとを含むことを特徴とする。
【０１７６】
これら上記の構成によれば、転置演算装置において、転置処理が必要なデータをレジスタ群に書き込む際に行列データの行データごとに並び替えを行ってレジスタ群に書き込み、読み出し処理と並び替えによって転置行列データを生成することができるので、行列データを転置のためにレジスタ以外の記憶装置に転送する必要がなく、またレジスタ群に行列データの行データ単位で一度に書き込みができ、レジスタ群から行列データの列データ単位で一度に読み出して並べ替えた要素データの集合に演算処理を行えるので、行列転置処理に要する処理時間を短縮することが可能である。
【０１７７】
（２）また、実施の形態に係る上記（１）の転置演算装置は、前記出力並替情報は、前記行列データにおいて行データごとにローテートシフトによって並び替えるためのシフト量を示す出力ローテート量である、としてもよい。
【０１７８】
このようにすることで、レジスタ群へのデータの書き込みの際に行うデータ列の並び替えを単純化することができる。
【０１７９】
（３）また、実施の形態に係る上記（２）の転置演算装置は、前記入力並替情報は、前記レジスタアクセス部が出力する前記要素データの集合をローテートシフトによって並び替えるためのシフト量を示す入力ローテート量であり、前記転置制御部は、前記行列データの行ごとに右向きに要素データ単位ずつ増加する出力ローテート量と、当該行列データに対応する出力ローテート量と絶対値が同じでシフトする向きが逆である入力ローテート量とを生成する、としてもよい。
【０１８０】
このようにすることで、レジスタ群へのデータの書き込みの際およびレジスタ群からのデータの読み出しの際に行うデータ列の並び替えを単純化することができる。
【０１８１】
（４）また、実施の形態に係る上記（１）の転置演算装置は、前記転置制御部は、行列データを転置させるか否かの指示を記憶する設定レジスタを備え、前記設定レジスタに行列データを転置させる指示があれば、出力並替情報と、列位置情報と、入力並替情報とを生成する、としてもよい。
【０１８２】
このようにすることで、転置処理のための情報を、転置処理が必要なデータを出力する演算処理と転置されたデータを入力する演算処理とに関連付け、レジスタへ書き込む際とレジスタから読み込む際に必要な並び替え処理を実行することができる。
【０１８３】
（５）また、実施の形態に係る上記（１）の転置演算装置は、前記レジスタ群は転置処理の対象となる行列データを記憶するための専用レジスタを含み、前記転置制御部は、前記レジスタアクセス部が前記専用レジスタに行列データを読み書きする場合に、出力並替情報と、列位置情報と、入力並替情報とを生成する、としてもよい。
【０１８４】
このようにすることで、転置演算装置は行列データを書き込むレジスタまたは読み出すレジスタが専用レジスタであるか否かにより、当該行列データが転置処理の対象であるか否かを判別することができる。
【０１８５】
（６）また、実施の形態に係る上記（１）の転置演算装置は、前記転置演算装置が実行する演算命令は当該演算命令の対象および当該演算命令の結果に転置処理を行うか否かの情報を含み、前記転置制御部は、転置処理を伴う演算命令に含まれる転置処理のための情報を用いて、出力並替情報と、列位置情報と、入力並替情報とを生成する、としてもよい。
【０１８６】
このようにすることで、転置処理が必要なデータを出力する演算命令と転置されたデータを必要とする演算命令とに転置処理に関する設定情報を付加することで転置処理を実行することができ、転置処理がどの演算命令に伴うかを指示するための命令を別途必要としない。
【０１８７】
（７）また、実施の形態に係る転置演算装置は、処理対象となる行列データを構成する行データを格納し、行データを構成する要素データ単位で書き込めるレジスタからなる、前記行列データを格納可能なレジスタ群と、行列データに対して、同一列の要素データがそれぞれ別の列となるように行データごとに並び替えるための出力並替情報と、前記行列データにおいて同一の列に属する要素データが前記レジスタ群に記憶される場所を示す列位置情報と、前記列位置情報に従って前記レジスタ群から読み出される前記行列データの同一列の要素データの集合を並び替えるための入力並替情報とを生成する転置制御部と、前記出力並替情報を用いて前記行列データを並び替える出力データ並替部と、前記列位置情報を用いて、前記出力データ並替部が並び替えを行った行列データの第ｉ行（ｉ≧１）を第ｉ列が記憶される場所の前記レジスタ群に書き込み、前記レジスタ群からデータを読み出すレジスタアクセス部と、前記レジスタアクセス部が読み出す前記要素データの集合を前記入力並替情報を用いて並び替える入力データ並替部と、前記入力データ並替部が並び替えを行った要素データの集合に演算を行う演算処理部とを備える、としてもよい。
【０１８８】
このようにすることで、転置処理が必要なデータをレジスタ群に書き込む際に行列データの行データごとに並び替えを行って、かつ行列データの列データとしてレジスタ群に記録することにより、当該行列データをレジスタ群から読み出し並び替えるだけで、転置処理された行列データを得ることができる。
【産業上の利用可能性】
【０１８９】
本発明にかかる転置演算装置は、デジタルＴＶやレコーダ、デジタルスチルカメラやデジタルビデオカメラ等における、転置処理を伴う画像処理に有用である。
【符号の説明】
【０１９０】
１００  画像処理装置
１１０  画像入力部
１２０  入力処理部
１３０  画像メモリ
１４０  システム制御部
１５０  信号処理部
２００、４００、６００、８００  転置演算装置
２１０、４１０、６１０  命令発行部
２２０、４２０、６２０  命令デコード部
２３０、４３０、６３０  演算制御部
２４０、６４０  演算処理部
２５０、４５０、６５０  転置制御部
２６０  入力ローテート部
２７０  出力ローテート部
３００、５００、７００  レジスタアクセス部
３１０  レジスタ群
５１０  転置レジスタ群
８６０  入力データ並替部
８７０  出力データ並替部
【図１】
2013054468.tif 000003
【図２】
2013054468.tif 000004
【図３】
2013054468.tif 000005
【図４】
2013054468.tif 000006
【図５】
2013054468.tif 000007
【図６】
2013054468.tif 000008
【図７】
2013054468.tif 000009
【図８】
2013054468.tif 000010
【図９】
2013054468.tif 000011
【図１０】
2013054468.tif 000012
【図１１】
2013054468.tif 000013
【図１２】
2013054468.tif 000014
【図１３】
2013054468.tif 000015
【図１４】
2013054468.tif 000016
【図１５】
2013054468.tif 000017
【図１６】
2013054468.tif 000018
【図１７】
2013054468.tif 000019
【図１８】
2013054468.tif 000020
【図１９】
2013054468.tif 000021
【図２０】
2013054468.tif 000022
【図２１】
2013054468.tif 000023
【手続補正書】
【提出日】平成25年1月24日(2013.1.24)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
処理対象となる行列データを構成する行データを格納し、行データを構成する要素データ単位で読み出せるレジスタからなる、前記行列データを格納可能なレジスタ群と、
行列データを転置させるか否かの指示を記憶する設定レジスタを備え、前記設定レジスタに行列データを転置させる指示があれば、行列データに対して、同一列の要素データがそれぞれ別の列となるように行データごとに並び替えるための出力並替情報と、前記行列データにおいて同一の列に属する要素データが前記レジスタ群に記憶される場所を示す列位置情報と、前記列位置情報に従って前記レジスタ群から読み出される前記行列データの同一列の要素データの集合を並び替えるための入力並替情報とを生成する転置制御部と、
前記出力並替情報を用いて前記行列データを並び替える出力データ並替部と、
前記出力データ並替部が並び替えを行った行列データを前記レジスタ群に書き込み、前記レジスタ群からデータを読み出して、前記列位置情報を用いて要素データを取り出すレジスタを前記出力データ並替部が並び替えを行った行列データの列ごとに１つずつ選択し、前記要素データの集合を出力するレジスタアクセス部と、
前記レジスタアクセス部が出力する前記要素データの集合を前記入力並替情報を用いて並び替える入力データ並替部と、
前記入力データ並替部が並び替えを行った要素データの集合に演算を行う演算処理部と
を備える
ことを特徴とする転置演算装置。
【請求項２】
前記出力並替情報は、
前記行列データにおいて行データごとにローテートシフトによって並び替えるためのシフト量を示す出力ローテート量である
ことを特徴とする請求項１に記載の転置演算装置。
【請求項３】
前記入力並替情報は、
前記レジスタアクセス部が出力する前記要素データの集合をローテートシフトによって並び替えるためのシフト量を示す入力ローテート量であり、
前記転置制御部は、
前記行列データの行ごとに右向きに要素データ単位ずつ増加する出力ローテート量と、当該行列データに対応する出力ローテート量と絶対値が同じでシフトする向きが逆である入力ローテート量とを生成する
ことを特徴とする請求項２に記載の転置演算装置。
【請求項４】
（削除）
【請求項５】
処理対象となる行列データを構成する行データを格納し、行データを構成する要素データ単位で読み出せるレジスタからなる、前記行列データを格納可能なレジスタ群と、
行列データに対して、同一列の要素データがそれぞれ別の列となるように行データごとに並び替えるための出力並替情報と、前記行列データにおいて同一の列に属する要素データが前記レジスタ群に記憶される場所を示す列位置情報と、前記列位置情報に従って前記レジスタ群から読み出される前記行列データの同一列の要素データの集合を並び替えるための入力並替情報とを生成する転置制御部と、
前記出力並替情報を用いて前記行列データを並び替える出力データ並替部と、
前記出力データ並替部が並び替えを行った行列データを前記レジスタ群に書き込み、前記レジスタ群からデータを読み出して、前記列位置情報を用いて要素データを取り出すレジスタを前記出力データ並替部が並び替えを行った行列データの列ごとに１つずつ選択し、前記要素データの集合を出力するレジスタアクセス部と、
前記レジスタアクセス部が出力する前記要素データの集合を前記入力並替情報を用いて並び替える入力データ並替部と、
前記入力データ並替部が並び替えを行った要素データの集合に演算を行う演算処理部と
を備え、
前記レジスタ群は転置処理の対象となる行列データを記憶するための専用レジスタを含み、
前記転置制御部は、
前記レジスタアクセス部が前記専用レジスタに行列データを読み書きする場合に、出力並替情報と、列位置情報と、入力並替情報とを生成する
ことを特徴とする転置演算装置。
【請求項６】
行列データに対して演算処理と転置処理を行う転置演算装置であって、
処理対象となる行列データを構成する行データを格納し、行データを構成する要素データ単位で読み出せるレジスタからなる、前記行列データを格納可能なレジスタ群と、
行列データに対して、同一列の要素データがそれぞれ別の列となるように行データごとに並び替えるための出力並替情報と、前記行列データにおいて同一の列に属する要素データが前記レジスタ群に記憶される場所を示す列位置情報と、前記列位置情報に従って前記レジスタ群から読み出される前記行列データの同一列の要素データの集合を並び替えるための入力並替情報とを生成する転置制御部と、
前記出力並替情報を用いて前記行列データを並び替える出力データ並替部と、
前記出力データ並替部が並び替えを行った行列データを前記レジスタ群に書き込み、前記レジスタ群からデータを読み出して、前記列位置情報を用いて要素データを取り出すレジスタを前記出力データ並替部が並び替えを行った行列データの列ごとに１つずつ選択し、前記要素データの集合を出力するレジスタアクセス部と、
前記レジスタアクセス部が出力する前記要素データの集合を前記入力並替情報を用いて並び替える入力データ並替部と、
前記入力データ並替部が並び替えを行った要素データの集合に演算を行う演算処理部と
を備え、
前記転置演算装置が実行する演算命令は当該演算命令の対象および当該演算命令の結果に転置処理を行うか否かの情報を含み、
前記転置制御部は、
転置処理を伴う演算命令に含まれる転置処理のための情報を用いて、出力並替情報と、列位置情報と、入力並替情報とを生成する
ことを特徴とする転置演算装置。
【請求項７】
（削除）
【請求項８】
処理対象となる行列データを構成する行データを格納し、行データを構成する要素データ単位で読み出せるレジスタからなる、前記行列データを格納可能なレジスタ群と、
行列データを転置させるか否かの指示を記憶する設定レジスタを備え、前記設定レジスタに行列データを転置させる指示があれば、行列データに対して、同一列の要素データがそれぞれ別の列となるように行データごとに並び替えるための出力並替情報と、前記行列データにおいて同一の列に属する要素データが前記レジスタ群に記憶される場所を示す列位置情報と、前記列位置情報に従って前記レジスタ群から読み出される前記行列データの同一列の要素データの集合を並び替えるための入力並替情報とを生成する転置制御部と、
前記出力並替情報を用いて前記行列データを並び替える出力データ並替部と、
前記出力データ並替部が並び替えを行った行列データを前記レジスタ群に書き込み、前記レジスタ群からデータを読み出して、前記列位置情報を用いて要素データを取り出すレジスタを前記出力データ並替部が並び替えを行った行列データの列ごとに１つずつ選択し、前記要素データの集合を出力するレジスタアクセス部と、
前記レジスタアクセス部が出力する前記要素データの集合を前記入力並替情報を用いて並び替える入力データ並替部と、
前記入力データ並替部が並び替えを行った要素データの集合に演算を行う演算処理部と
を備える
ことを特徴とする集積回路。
【請求項９】
行列データを構成する行データを格納し、行データを構成する要素データ単位で読み出せるレジスタからなる、前記行列データを格納可能なレジスタ群を含み、前記行列データに対して演算処理と転置処理を行う転置演算装置における転置処理方法であって、
前記転置演算装置は、行列データを転置させるか否かの指示を記憶する設定レジスタを備え、
前記転置処理方法は、
行列データに対して、同一列に属する要素データがそれぞれ別の列に属するように行データごとに並び替える出力データ並替ステップと、
前記並び替えられた行列データを前記レジスタ群に記憶させるデータ記憶ステップと、
前記出力行列データにおいて同一列に属する要素データが記憶されている前記レジスタ群の場所を示す列位置情報を生成する列位置情報生成ステップと、
前記列位置情報を用いて要素データを取り出すレジスタを前記出力データ並替ステップが並び替えを行った行列データの列ごとに１つずつ選択し、前記要素データの集合を前記レジスタ群から読み出すデータ読み出しステップと、
前記データ読み出しステップで読み出される前記要素データの集合を並び替える入力データ並替ステップと、
前記入力並び替えられた要素データの集合に演算処理を行う演算ステップと
を含み、
前記設定レジスタに行列データを転置させる指示があれば、前記出力データ並替ステップと、前記列位置情報生成ステップと、前記入力データ並替ステップとを実行する
ことを特徴とする転置処理方法。
【請求項１０】
処理対象となる行列データを構成する行データを格納し、行データを構成する要素データ単位で読み出せるレジスタからなる、前記行列データを格納可能なレジスタ群と、
行列データに対して、同一列の要素データがそれぞれ別の列となるように行データごとに並び替えるための出力並替情報と、前記行列データにおいて同一の列に属する要素データが前記レジスタ群に記憶される場所を示す列位置情報と、前記列位置情報に従って前記レジスタ群から読み出される前記行列データの同一列の要素データの集合を並び替えるための入力並替情報とを生成する転置制御部と、
前記出力並替情報を用いて前記行列データを並び替える出力データ並替部と、
前記出力データ並替部が並び替えを行った行列データを前記レジスタ群に書き込み、前記レジスタ群からデータを読み出して、前記列位置情報を用いて要素データを取り出すレジスタを前記出力データ並替部が並び替えを行った行列データの列ごとに１つずつ選択し、前記要素データの集合を出力するレジスタアクセス部と、
前記レジスタアクセス部が出力する前記要素データの集合を前記入力並替情報を用いて並び替える入力データ並替部と、
前記入力データ並替部が並び替えを行った要素データの集合に演算を行う演算処理部と
を備え、
前記レジスタ群は転置処理の対象となる行列データを記憶するための専用レジスタを含み、
前記転置制御部は、
前記レジスタアクセス部が前記専用レジスタに行列データを読み書きする場合に、出力並替情報と、列位置情報と、入力並替情報とを生成する
ことを特徴とする集積回路。
【請求項１１】
行列データを構成する行データを格納し、行データを構成する要素データ単位で読み出せるレジスタからなる、前記行列データを格納可能なレジスタ群を含み、前記行列データに対して演算処理と転置処理を行う転置演算装置における転置処理方法であって、
前記レジスタ群は転置処理の対象となる行列データを記憶するための専用レジスタを含み、
前記転置処理方法は、
行列データに対して、同一列に属する要素データがそれぞれ別の列に属するように行データごとに並び替える出力データ並替ステップと、
前記並び替えられた行列データを前記レジスタ群に記憶させるデータ記憶ステップと、
前記出力行列データにおいて同一列に属する要素データが記憶されている前記レジスタ群の場所を示す列位置情報を生成する列位置情報生成ステップと、
前記列位置情報を用いて要素データを取り出すレジスタを前記出力データ並替ステップが並び替えを行った行列データの列ごとに１つずつ選択し、前記要素データの集合を前記レジスタ群から読み出すデータ読み出しステップと、
前記データ読み出しステップで読み出される前記要素データの集合を並び替える入力データ並替ステップと、
前記入力並び替えられた要素データの集合に演算処理を行う演算ステップと
を含み、
前記データ記憶ステップまたは前記データ読み出しステップが前記専用レジスタに行列データを読み書きする場合に、前記出力データ並替ステップと、前記列位置情報生成ステップと、前記入力データ並替ステップとを実行する
ことを特徴とする転置処理方法。
【請求項１２】
行列データに対して演算処理と転置処理を行う集積回路であって、
処理対象となる行列データを構成する行データを格納し、行データを構成する要素データ単位で読み出せるレジスタからなる、前記行列データを格納可能なレジスタ群と、
行列データに対して、同一列の要素データがそれぞれ別の列となるように行データごとに並び替えるための出力並替情報と、前記行列データにおいて同一の列に属する要素データが前記レジスタ群に記憶される場所を示す列位置情報と、前記列位置情報に従って前記レジスタ群から読み出される前記行列データの同一列の要素データの集合を並び替えるための入力並替情報とを生成する転置制御部と、
前記出力並替情報を用いて前記行列データを並び替える出力データ並替部と、
前記出力データ並替部が並び替えを行った行列データを前記レジスタ群に書き込み、前記レジスタ群からデータを読み出して、前記列位置情報を用いて要素データを取り出すレジスタを前記出力データ並替部が並び替えを行った行列データの列ごとに１つずつ選択し、前記要素データの集合を出力するレジスタアクセス部と、
前記レジスタアクセス部が出力する前記要素データの集合を前記入力並替情報を用いて並び替える入力データ並替部と、
前記入力データ並替部が並び替えを行った要素データの集合に演算を行う演算処理部と
を備え、
前記集積回路が実行する演算命令は当該演算命令の対象および当該演算命令の結果に転置処理を行うか否かの情報を含み、
前記転置制御部は、
転置処理を伴う演算命令に含まれる転置処理のための情報を用いて、出力並替情報と、列位置情報と、入力並替情報とを生成する
ことを特徴とする集積回路。
【請求項１３】
行列データを構成する行データを格納し、行データを構成する要素データ単位で読み出せるレジスタからなる、前記行列データを格納可能なレジスタ群を含み、前記行列データに対して演算処理と転置処理を行う転置演算装置における転置処理方法であって、
前記転置演算装置が実行する演算命令は当該演算命令の対象および当該演算命令の結果に転置処理を行うか否かの情報を含み、
前記転置処理方法は、
転置処理を伴う演算命令に含まれる転置処理のための情報を用いて、行列データに対して、同一列に属する要素データがそれぞれ別の列に属するように行データごとに並び替える出力データ並替ステップと、
前記並び替えられた行列データを前記レジスタ群に記憶させるデータ記憶ステップと、
転置処理を伴う演算命令に含まれる転置処理のための情報を用いて、前記出力行列データにおいて同一列に属する要素データが記憶されている前記レジスタ群の場所を示す列位置情報を生成する列位置情報生成ステップと、
前記列位置情報を用いて要素データを取り出すレジスタを前記出力データ並替ステップが並び替えを行った行列データの列ごとに１つずつ選択し、前記要素データの集合を前記レジスタ群から読み出すデータ読み出しステップと、
転置処理を伴う演算命令に含まれる転置処理のための情報を用いて、前記データ読み出しステップで読み出される前記要素データの集合を並び替える入力データ並替ステップと、
前記入力並び替えられた要素データの集合に演算処理を行う演算ステップと
を含む
ことを特徴とする転置処理方法。
【国際調査報告】
2013054468.tif 000024
2013054468.tif 000025