図1は、本実施形態によるデータ処理装置の構成例を示す図である。データ処理装置は、命令メモリ101、デジタルシグナルプロセッサ(DSP:Digital Signal Processor)102及びデータメモリ103を有する。デジタルシグナルプロセッサ102は、デコーダ111、並び替え部112、演算部113、セレクタ114、ダイレクトメモリアクセスコントローラ115及び116を有する。命令メモリ101は、命令を記憶し、命令をデコーダ111に出力する。デコーダ111は、命令メモリ101に記憶されている命令をデコードし、並び替え部112、演算部113、セレクタ114、ダイレクトメモリアクセスコントローラ115及び116に制御信号及びパラメータを出力する。ダイレクトメモリアクセスコントローラ116は、デコーダ111の制御により、データメモリ103に記憶されているデータをロードして並び替え部112及び/又は演算部113に出力するロード部である。並び替え部112は、デコーダ111の制御により、ダイレクトメモリアクセスコントローラ116から入力したデータを並び替えてセレクタ114に出力する。演算部113は、デコーダ111の制御により、ダイレクトメモリアクセスコントローラ116から入力したデータに対して種々の演算を行ってセレクタ114に出力する。セレクタ114は、デコーダ111の制御により、並び替え部112の出力データ又は演算部113の出力データを選択してダイレクトメモリアクセスコントローラ115に出力する。ダイレクトメモリアクセスコントローラ115は、デコーダ111の制御により、セレクタ114から入力したデータをデータメモリ103にストアするストア部である。
デジタルシグナルプロセッサ102は、例えば無線通信のデータ処理のため、複数次元配列データ(2次元以上の配列データ)に対して種々の演算を行う。演算部113は、無線通信のデータ処理として、例えば、線形最小二乗平均誤差(LMMSE:Linear Minimum Mean Square Error)の平滑化処理(図2)、及びチャンネル品質指標(CQI:Channel Quality Indicator)の推定処理(図3)を行う。
図2は、LMMSEの平滑化処理の例を示す図である。演算部113は、次式(1)により、3次元配列データhZF_CSI(a,b,k+m−Lmmse)及び係数WMid(m)の内積を演算することにより、3次元配列データhCSI(a,b,k)を求める。この際、第1の次元a及び第2の次元bの各値に対して、第3の次元kを変化させながら内積を行う。
ここで、3次元配列データhZF_CSI(a,b,k)は、第1の次元a、第2の次元b及び第3の次元kを有する。第1の次元aは、受信アンテナ数であり、例えば1〜4(a=0〜3)の範囲の整数である。第2の次元bは、送信アンテナ数であり、例えば1〜4(b=0〜3)の範囲の整数である。第3の次元kは、リソースブロック(RB)数であり、例えば1〜100(k=0〜99)の範囲の整数である。上記のように、3次元配列データhCSI(a,b,k)は、3次元配列データhZF_CSI(a,b,k)を基に演算される。
図3は、CQIの推定処理の例を示す図である。3次元行列(配列)データH(a,b,k)は、第1の次元a、第2の次元b及び第3の次元kを有する。第1の次元aは、受信アンテナ数であり、例えば1〜4(a=0〜3)の範囲の整数である。第2の次元bは、送信アンテナ数であり、例えば1〜4(b=0〜3)の範囲の整数である。第3の次元kは、リソースブロック数であり、例えば1〜100(k=0〜99)の範囲の整数である。2次元行列データH(k)は、3次元行列(配列)データH(a,b,k)のうちの次元kの値が指定された一部の2次元行列データである。演算部113は、次式(2)により、次元kの各値について、2次元行列データH(k)及びそのエルミート行列データH(k)Hの積を演算することにより、3次元配列データΓtmpを求める。この際、第3の次元kの各値に対して、第1の次元a及び第2の次元bを変化させながら行列H(a,b,k)の積を演算する。
図4は、データメモリ103に記憶される3次元配列データの順序を示す図である。図2の3次元配列データhZF_CSI(a,b,k)及び図3の3次元配列データH(a,b,k)は、データメモリ103内の一次元のアドレスに記憶される。そのため、図2の3次元配列データhZF_CSI(a,b,k)及び図3の3次元配列データH(a,b,k)は、第1の次元aの変化、第2の次元bの変化及び第3の次元kの変化に優先順位をつけて、データメモリ103の一次元のアドレスに順番に記憶させる必要がある。
図4に示すように、データメモリ103のアドレスに対して、図3の3次元配列データH(a,b,k)を、第1の次元aの変化、第2の次元bの変化、第3の次元kの変化の順番の優先順位で、3次元配列データh(a,b,k)として記憶する場合を説明する。ここで、演算部113は、上式(2)のように、図3の3次元配列データH(a,b,k)に対して、第1の次元a及び第2の次元bを変化させ、2次元配列データH(k)の行列積を演算する。配列データ401は、第3の次元kを0に指定し、第1の次元a及び第2の次元bを順次変化させたデータであり、アドレスに対して連続的に配列されたシーケンシャルなデータである。したがって、演算部113は、上式(2)の演算を行う際には、配列データH(k)のデータ401をデータメモリ103からシーケンシャルにロードすることができる。
これに対し、図4に示すように、データメモリ103のアドレスに対して、図2の3次元配列データhZF_CSI(a,b,k)を、第1の次元aの変化、第2の次元bの変化、第3の次元kの変化の順番の優先順位で、3次元配列データh(a,b,c)として記憶する場合を説明する。ここで、演算部113は、上式(1)のように、図2の3次元配列データhZF_CSI(a,b,k)に対して、第3の次元kを変化させ、内積を演算する。配列データ402は、第1の次元a及び第2の次元bを0に指定し、第3の次元kを順次変化させたデータであり、アドレスに対して不連続に配列されたデータである。したがって、演算部113は、上式(1)の演算を行う際には、配列データhZF_CSI(a,b,k)のデータ402をデータメモリ103から不連続でロードする。
以上のように、図3の3次元配列データH(a,b,k)は、第1の次元aの変化及び第2の次元bの変化が第3の次元kの変化より優先した順序で演算され、図2の3次元配列データhZF_CSI(a,b,k)は、第3の次元kの変化が第1の次元aの変化及び第2の次元bの変化より優先した順序で演算される。そのため、図3の3次元配列データH(a,b,k)は、図4の配列データ401のように、アドレスに対して連続した順序でロードされ、シーケンシャルロードが可能である。これに対して、図2の3次元配列データhZF_CSI(a,b,k)は、図4の配列データ402のように、アドレスに対して不連続の順序でロードされ、シーケンシャルロードが不可である。このように、図3の3次元配列データH(a,b,k)及び図2の3次元配列データhZF_CSI(a,b,k)の両方がシーケンシャルロードできるようなデータ配置は存在しない。
図5(A)は、図4のデータ401がデータメモリ103内で連続して配置されている例を示す図である。ダイレクトメモリアクセスコントローラ116は、データメモリ103に対してラインLN単位でアクセスする。すなわち、ダイレクトメモリアクセスコントローラ116は、1サイクルで、1ラインLNのデータをロードする。例えば、データ401が1ラインLN内に含まれていれば、ダイレクトメモリアクセスコントローラ116は、1サイクルで、データ401をロードすることができる。
図5(B)は、図4のデータ402がデータメモリ103内で不連続で配置されている例を示す図である。データ402は複数のラインLNに含まれているので、ダイレクトメモリアクセスコントローラ116は、そのラインLNの数に対応する複数サイクルで、データ402をロードする。
以上のように、図5(A)の場合は、データ401のシーケンシャルロードが可能であるので、アクセス回数が少なく、処理速度が速く、消費電力が小さい。これに対し、図5(B)の場合は、データ402のシーケンシャルロードが不可であるので、アクセス回数が多く、処理速度が遅く、消費電力が大きい。そこで、上式(1)及び(2)の両方の演算で、シーケンシャルロードを可能する技術が望まれる。しかし、上記のように、上式(1)及び(2)の両方でシーケンシャルロードが可能なデータ配置は存在せず、いずれかの演算でシーケンシャルロードが不可になってしまう。
また、下記の3点の特徴があるため、問題を複雑化させている。第1に、配列データが2次元以上の複数次元配列データである。第2に、配列の寸法は演算により異なる。第3に、配列データが大容量のため、データ構造全体をデジタルシグナルプロセッサ102内部のレジスタ/バッファにロードすることは難しい。
本実施形態では、複数の演算でシーケンシャルロードを可能にするため、結合命令vmergeを用いる。結合命令vmergeは、図9に示すように、第3の次元kの変化が第1の次元aの変化及び第2の次元bの変化より優先した順序である上式(1)の演算に向いたデータ配置901を、第1の次元aの変化及び第2の次元bの変化が第3の次元kの変化より優先した順序である上式(2)の演算に向いたデータ配置902に並び替えるための命令である。
図7は、結合命令vmergeの動作を説明するための図である。結合命令vmergeは、下記のニーモニックを有し、命令メモリ101に格納される。
vmerge vtype M,N,A,B,C
ここで、パラメータvtypeは、配列データの各要素が実数又は複素数のいずれであるのかを示す。パラメータMは、並び替え前の第1の配列データの大きさであり、例えば3である。パラメータNは、並び替え前の第2の配列データの大きさであり、例えば2である。パラメータAは、並び替え前の第1の配列データが記憶されているデータメモリ103のアドレスである。パラメータBは、並び替え前の第2の配列データが記憶されているデータメモリ103のアドレスである。パラメータCは、第1の配列データ及び第2の配列データを結合してストアするデータメモリ103のアドレスである。
第1のアドレスAの第1の配列データ及び第2のアドレスBの第2の配列データの結合は、複数次元配列データ単位で行われる。図7では、2次元配列データの例を示すが、3次元以上の配列データの場合も同様である。
図8は、結合命令vmergeを用いてデータ配置の並び替えを行う例を示す図である。下記の結合命令vmergeを実行させることにより、図8の並び替えを行うことができる。なお、説明の簡単のため、図8では1次元配列データの例を示すが、実際には2次元以上の配列データである。
vmerge M=1,N=1,A=D1,B=D2,C=D0
上記の結合命令vmergeは、命令メモリ101に記憶される。デコーダ111は、命令メモリ101内の結合命令vmergeをデコードし、並び替え部112、セレクタ114、ダイレクトメモリアクセスコントローラ115及び116に制御信号を出力する。
ダイレクトメモリコントローラ(ロード部)116は、データメモリ103の第1のアドレスA=D1に記憶されている配列データのうちの大きさM=1の一部の第1の配列データ「0」をロードし、データメモリ103の第2のアドレスB=D2に記憶されている配列データのうちの大きさN=1の一部の第2の配列データ「0」をロードする。並び替え部(結合部)112は、ロードされた第1の配列データ「0」及び第2の配列データ「0」を結合する。ダイレクトメモリアクセスコントローラ(ストア部)115は、結合された配列データ「0,0」をデータメモリ103の第3のアドレスC=D0にストアする。
次に、ダイレクトメモリコントローラ(ロード部)116は、データメモリ103の第1のアドレスA=D1+1に記憶されている配列データのうちの大きさM=1の一部の第1の配列データ「1」をロードし、データメモリ103の第2のアドレスB=D2+1に記憶されている配列データのうちの大きさN=1の一部の第2の配列データ「1」をロードする。並び替え部(結合部)112は、ロードされた第1の配列データ「1」及び第2の配列データ「1」を結合する。ダイレクトメモリアクセスコントローラ(ストア部)115は、結合された配列データ「1,1」をデータメモリ103の第3のアドレスC=D0+2にストアする。
次に、ダイレクトメモリコントローラ(ロード部)116は、データメモリ103の第1のアドレスA=D1+2に記憶されている配列データのうちの大きさM=1の一部の第1の配列データ「2」をロードし、データメモリ103の第2のアドレスB=D2+2に記憶されている配列データのうちの大きさN=1の一部の第2の配列データ「2」をロードする。並び替え部(結合部)112は、ロードされた第1の配列データ「2」及び第2の配列データ「2」を結合する。ダイレクトメモリアクセスコントローラ(ストア部)115は、結合された配列データ「2,2」をデータメモリ103の第3のアドレスC=D0+4にストアする。上記のように、大きさM及びNの単位で、配列データの最後まで上記の処理を繰り返す。
図9は、第3の次元kの変化が第1の次元aの変化及び第2の次元bの変化より優先した順序である上式(1)の演算に向いたデータ配置901を、第1の次元aの変化及び第2の次元bの変化が第3の次元kの変化より優先した順序である上式(2)の演算に向いたデータ配置902に並び替える例を示す図である。
データ配置901では、第1のラインは、第1の次元a=0であり、第2の次元b=0であり、第3の次元kが変化する配列データを記憶する。第2のラインは、第1の次元a=1であり、第2の次元b=0であり、第3の次元kが変化する配列データを記憶する。第3のラインは、第1の次元a=2であり、第2の次元b=0であり、第3の次元kが変化する配列データを記憶する。第4のラインは、第1の次元a=3であり、第2の次元b=0であり、第3の次元kが変化する配列データを記憶する。第5のラインは、第1の次元a=0であり、第2の次元b=1であり、第3の次元kが変化する配列データを記憶する。第6のラインは、第1の次元a=1であり、第2の次元b=1であり、第3の次元kが変化する配列データを記憶する。第7のラインは、第1の次元a=2であり、第2の次元b=1であり、第3の次元kが変化する配列データを記憶する。第8のラインは、第1の次元a=3であり、第2の次元b=1であり、第3の次元kが変化する配列データを記憶する。第9のラインは、第1の次元a=0であり、第2の次元b=2であり、第3の次元kが変化する配列データを記憶する。第10のラインは、第1の次元a=1であり、第2の次元b=2であり、第3の次元kが変化する配列データを記憶する。第11のラインは、第1の次元a=2であり、第2の次元b=2であり、第3の次元kが変化する配列データを記憶する。第12のラインは、第1の次元a=3であり、第2の次元b=2であり、第3の次元kが変化する配列データを記憶する。第13のラインは、第1の次元a=0であり、第2の次元b=3であり、第3の次元kが変化する配列データを記憶する。第14のラインは、第1の次元a=1であり、第2の次元b=3であり、第3の次元kが変化する配列データを記憶する。第15のラインは、第1の次元a=2であり、第2の次元b=3であり、第3の次元kが変化する配列データを記憶する。第16のラインは、第1の次元a=3であり、第2の次元b=3であり、第3の次元kが変化する配列データを記憶する。以上のように、配列データは、第3の次元kの変化、第1の次元aの変化、第2の次元bの変化の順で優先した順番で記憶されている。
データ配置902では、第1のラインは、第3の次元k=0であり、第1の次元a及び第2の次元bが変化する配列データを記憶する。第2のラインは、第3の次元k=1であり、第1の次元a及び第2の次元bが変化する配列データを記憶する。第3のラインは、第3の次元k=2であり、第1の次元a及び第2の次元bが変化する配列データを記憶する。すなわち、各ラインは、第3の次元kの値が同じ配列データを記憶する。データ配置902では、第1の次元aの変化及び第2の次元bの変化が第3の次元kの変化より優先した順序で配列データが記憶されている。例えば、配列データは、第1の次元aの変化、第2の次元bの変化、第3の次元kの変化の順で優先した順番で記憶されている。
デジタルシグナルプロセッサ102は、15個の結合命令vmergeを実行することにより、データ配置901をデータ配置902に並び替えることができる。第1の結合命令vmergeでは、M=1、N=1で、第1のライン及び第2のラインの結合を行う。第2の結合命令vmergeでは、M=2、N=1で、第1の結合命令vmergeにより結合された配列データと第3のラインとの結合を行う。第3の結合命令vmergeでは、M=3、N=1で、第2の結合命令vmergeにより結合された配列データと第4のラインとの結合を行う。第4の結合命令vmergeでは、M=4、N=1で、第3の結合命令vmergeにより結合された配列データと第5のラインとの結合を行う。第5の結合命令vmergeでは、M=5、N=1で、第4の結合命令vmergeにより結合された配列データと第6のラインとの結合を行う。第6の結合命令vmergeでは、M=6、N=1で、第5の結合命令vmergeにより結合された配列データと第7のラインとの結合を行う。第7の結合命令vmergeでは、M=7、N=1で、第6の結合命令vmergeにより結合された配列データと第8のラインとの結合を行う。第8の結合命令vmergeでは、M=8、N=1で、第7の結合命令vmergeにより結合された配列データと第9のラインとの結合を行う。第9の結合命令vmergeでは、M=9、N=1で、第8の結合命令vmergeにより結合された配列データと第10のラインとの結合を行う。第10の結合命令vmergeでは、M=10、N=1で、第9の結合命令vmergeにより結合された配列データと第11のラインとの結合を行う。第11の結合命令vmergeでは、M=11、N=1で、第10の結合命令vmergeにより結合された配列データと第12のラインとの結合を行う。第12の結合命令vmergeでは、M=12、N=1で、第11の結合命令vmergeにより結合された配列データと第13のラインとの結合を行う。第13の結合命令vmergeでは、M=13、N=1で、第12の結合命令vmergeにより結合された配列データと第14のラインとの結合を行う。第14の結合命令vmergeでは、M=14、N=1で、第13の結合命令vmergeにより結合された配列データと第15のラインとの結合を行う。第15の結合命令vmergeでは、M=15、N=1で、第14の結合命令vmergeにより結合された配列データと第16のラインとの結合を行うことにより、データ配置902を生成することができる。
以上のように、ダイレクトメモリアクセスコントローラ(ロード部)116は、データメモリ103の第1のアドレスAに記憶されている複数次元配列データのうちの一部の第1の配列データを第1の大きさMの単位で順次ロードし、データメモリ103の第2のアドレスBに記憶されている複数次元配列データのうちの一部の第2の配列データを第2の大きさNの単位で順次ロードする。並び替え部(結合部)112は、ロードされた第1の配列データ及び第2の配列データをロード毎に順次結合する。ダイレクトメモリアクセスコントローラ(ストア部)115は、結合された配列データをデータメモリ103の第3のアドレスCに結合毎に順次ストアする。
データメモリ103の第1のアドレスA及び第2のアドレスBからロードする複数次元配列データ901は、複数次元のうちの次元a,bの変化より次元kの変化を優先した順序でデータメモリ103に記憶されている。データメモリ103の第3のアドレスCにストアされた複数次元配列データ902は、複数次元のうちの次元kの変化より次元a,bの変化を優先した順序でデータメモリ103に記憶される。
デコーダ111は、結合命令vmergeをデコードすることにより、第1の大きさM、第2の大きさN、第1のアドレスA、第2のアドレスB及び第3のアドレスCを指定する。
並び替え後、演算部113は、データメモリ103の第3のアドレスCにストアされた複数次元配列データ902をシーケンシャルにロードして上式(1)の第1の演算を行う。シーケンシャルにロードすることにより、処理の高速化及び低消費電力化を実現することができる。
並び替え前、演算部113は、データメモリ103の第1のアドレスA及び第2のアドレスBに記憶されている複数次元配列データ901をシーケンシャルにロードして第2の演算を行うことにより、例えば図3の3次元配列データH(a,b,k)を生成することができる。シーケンシャルにロードすることにより、処理の高速化及び低消費電力化を実現することができる。
また、本実施形態では、複数の演算でシーケンシャルロードを可能にするため、抽出命令vsplitを用いる。抽出命令vsplitは、図10に示すように、第1の次元aの変化及び第2の次元bの変化が第3の次元kの変化より優先した順序である上式(2)の演算に向いたデータ配置902を、第3の次元kの変化が第1の次元aの変化及び第2の次元bの変化より優先した順序である上式(1)の演算に向いたデータ配置901に並び替えるための命令である。
図6は、抽出命令vsplitの動作を説明するための図である。抽出命令vsplitは、下記のニーモニックを有し、命令メモリ101に格納される。
vsplit vtype M,N,K,A,B,C
ここで、パラメータvtypeは、配列データの各要素が実数又は複素数のいずれであるのかを示す。パラメータMは、並び替え前の複数次元配列データのうちの並び替えを行う一部の複数次元配列データの大きさであり、例えば5である。パラメータNは、上記の大きさMの一部の複数次元配列データのうちの第1の抽出位置を示し、例えば2である。パラメータKは、上記の大きさMの一部の複数次元配列データのうちの第2の抽出位置を示し、例えば5である。パラメータAは、並び替え前の複数次元配列データが記憶されているデータメモリ103のアドレスである。パラメータBは、第1の抽出位置Nの配列データを抽出してストアするデータメモリ103のアドレスである。パラメータCは、第2の抽出位置Kの配列データを抽出してストアするデータメモリ103のアドレスである。
第1の抽出位置N及び第2の抽出位置Kの配列データの抽出は、配列データ単位で行われる。図6では、2次元配列データの例を示すが、3次元以上の配列データの場合も同様である。
図8は、抽出命令vsplitを用いてデータ配置の並び替えを行う例を示す図である。下記の抽出命令vsplitを実行させることにより、図8の並び替えを行うことができる。なお、説明の簡単のため、図8では1次元配列データの例を示すが、実際には2次元以上の配列データである。
vsplit M=2,N=1,K=2,A=D0,B=D1,C=D2
上記の抽出命令vsplitは、命令メモリ101に記憶される。デコーダ111は、命令メモリ101内の抽出命令vsplitをデコードし、並び替え部112、セレクタ114、ダイレクトメモリアクセスコントローラ115及び116に制御信号を出力する。
ダイレクトメモリコントローラ(ロード部)116は、データメモリ103の第1のアドレスA=D0に記憶されている配列データのうちの大きさM=2の一部の配列データ「0,0」をロードする。次に、並び替え部(抽出部)112は、ロードされた一部の配列データ「0,0」のうちの第1の抽出位置N=1の第1の配列データ「0」及び第2の抽出位置K=2の第2の配列データ「0」を抽出する。次に、ダイレクトメモリアクセスコントローラ(ストア部)115は、第1の抽出位置N=1の第1の配列データ「0」をデータメモリ103の第2のアドレスB=D1にストアし、第2の抽出位置N=2の第2の配列データ「0」をデータメモリ103の第3のアドレスC=D2にストアする。
次に、ダイレクトメモリコントローラ(ロード部)116は、データメモリ103の第1のアドレスA=D0+2に記憶されている配列データのうちの大きさM=2の一部の配列データ「1,1」をロードする。次に、並び替え部(抽出部)112は、ロードされた一部の配列データ「1,1」のうちの第1の抽出位置N=1の第1の配列データ「1」及び第2の抽出位置K=2の第2の配列データ「1」を抽出する。次に、ダイレクトメモリアクセスコントローラ(ストア部)115は、第1の抽出位置N=1の第1の配列データ「1」をデータメモリ103の第2のアドレスB=D1+1にストアし、第2の抽出位置N=2の第2の配列データ「1」をデータメモリ103の第3のアドレスC=D2+1にストアする。
次に、ダイレクトメモリコントローラ(ロード部)116は、データメモリ103の第1のアドレスA=D0+4に記憶されている配列データのうちの大きさM=2の一部の配列データ「2,2」をロードする。次に、並び替え部(抽出部)112は、ロードされた一部の配列データ「2,2」のうちの第1の抽出位置N=1の第1の配列データ「2」及び第2の抽出位置K=2の第2の配列データ「2」を抽出する。次に、ダイレクトメモリアクセスコントローラ(ストア部)115は、第1の抽出位置N=1の第1の配列データ「2」をデータメモリ103の第2のアドレスB=D1+2にストアし、第2の抽出位置N=2の第2の配列データ「2」をデータメモリ103の第3のアドレスC=D2+2にストアする。上記のように、大きさMの単位で、配列データの最後まで上記の処理を繰り返す。
図10は、第1の次元aの変化及び第2の次元bの変化が第3の次元kの変化より優先した順序である上式(2)の演算に向いたデータ配置902を、第3の次元kの変化が第1の次元aの変化及び第2の次元bの変化より優先した順序である上式(1)の演算に向いたデータ配置901に並び替える例を示す図である。
データ配置902では、図9と同様に、第1のラインは、第3の次元k=0であり、第1の次元a及び第2の次元bが変化する配列データを記憶する。第2のラインは、第3の次元k=1であり、第1の次元a及び第2の次元bが変化する配列データを記憶する。第3のラインは、第3の次元k=2であり、第1の次元a及び第2の次元bが変化する配列データを記憶する。すなわち、各ラインは、第3の次元kの値が同じ配列データを記憶する。データ配置902では、第1の次元aの変化及び第2の次元bの変化が第3の次元kの変化より優先した順序で配列データが記憶されている。
データ配置901では、図9と同様に、第1のラインは、第1の次元a=0であり、第2の次元b=0であり、第3の次元kが変化する配列データを記憶する。第2のラインは、第1の次元a=1であり、第2の次元b=0であり、第3の次元kが変化する配列データを記憶する。第3のラインは、第1の次元a=2であり、第2の次元b=0であり、第3の次元kが変化する配列データを記憶する。第4のラインは、第1の次元a=3であり、第2の次元b=0であり、第3の次元kが変化する配列データを記憶する。第5のラインは、第1の次元a=0であり、第2の次元b=1であり、第3の次元kが変化する配列データを記憶する。第6のラインは、第1の次元a=1であり、第2の次元b=1であり、第3の次元kが変化する配列データを記憶する。第7のラインは、第1の次元a=2であり、第2の次元b=1であり、第3の次元kが変化する配列データを記憶する。第8のラインは、第1の次元a=3であり、第2の次元b=1であり、第3の次元kが変化する配列データを記憶する。第9のラインは、第1の次元a=0であり、第2の次元b=2であり、第3の次元kが変化する配列データを記憶する。第10のラインは、第1の次元a=1であり、第2の次元b=2であり、第3の次元kが変化する配列データを記憶する。第11のラインは、第1の次元a=2であり、第2の次元b=2であり、第3の次元kが変化する配列データを記憶する。第12のラインは、第1の次元a=3であり、第2の次元b=2であり、第3の次元kが変化する配列データを記憶する。第13のラインは、第1の次元a=0であり、第2の次元b=3であり、第3の次元kが変化する配列データを記憶する。第14のラインは、第1の次元a=1であり、第2の次元b=3であり、第3の次元kが変化する配列データを記憶する。第15のラインは、第1の次元a=2であり、第2の次元b=3であり、第3の次元kが変化する配列データを記憶する。第16のラインは、第1の次元a=3であり、第2の次元b=3であり、第3の次元kが変化する配列データを記憶する。
デジタルシグナルプロセッサ102は、8個の抽出命令vsplitを実行することにより、データ配置902をデータ配置901に並び替えることができる。第1の抽出命令vsplitでは、M=16、N=1、K=2にすることにより、データ配置901の第1のライン(a=0,b=0)及び第2のライン(a=1,b=0)を生成することができる。第2の抽出命令vsplitでは、M=16、N=3、K=4にすることにより、データ配置901の第3のライン(a=2,b=0)及び第4のライン(a=3,b=0)を生成することができる。第3の抽出命令vsplitでは、M=16、N=5、K=6にすることにより、データ配置901の第5のライン(a=0,b=1)及び第6のライン(a=1,b=1)を生成することができる。第4の抽出命令vsplitでは、M=16、N=7、K=8にすることにより、データ配置901の第7のライン(a=2,b=1)及び第8のライン(a=3,b=1)を生成することができる。第5の抽出命令vsplitでは、M=16、N=9、K=10にすることにより、データ配置901の第9のライン(a=0,b=2)及び第10のライン(a=1,b=2)を生成することができる。第6の抽出命令vsplitでは、M=16、N=11、K=12にすることにより、データ配置901の第11のライン(a=2,b=2)及び第12のライン(a=3,b=2)を生成することができる。第7の抽出命令vsplitでは、M=16、N=13、K=14にすることにより、データ配置901の第13のライン(a=0,b=3)及び第14のライン(a=1,b=3)を生成することができる。第8の抽出命令vsplitでは、M=16、N=15、K=16にすることにより、データ配置901の第15のライン(a=2,b=3)及び第16のライン(a=3,b=3)を生成することができる。
以上のように、ダイレクトメモリアクセスコントローラ(ロード部)116は、データメモリ103の第1のアドレスAに記憶されている第1の複数次元配列データのうちの一部の複数次元配列データを指定された大きさMの単位で順次ロードする。並び替え部(抽出部)112は、ロードされた一部の複数次元配列データのうちの第1の抽出位置Nの第1の配列データ及び第2の抽出位置Kの第2の配列データをロード毎に順次抽出する。ダイレクトメモリアクセスコントローラ(ストア部)115は、第1の配列データをデータメモリ103の第2のアドレスBに抽出毎に順次ストアし、第2の配列データをデータメモリ103の第3のアドレスCに抽出毎に順次ストアする。
データメモリ103の第1のアドレスAからロードする第1の複数次元配列データ902は、複数次元のうちの次元kの変化より次元a,bの変化を優先した順序でデータメモリ103に記憶されている。データメモリ103の第2のアドレスB及び第3のアドレスCにストアされた複数次元配列データ901は、複数次元のうちの次元a,bの変化より次元kの変化を優先した順序でデータメモリ103に記憶される。
デコーダ111は、抽出命令vsplitをデコードすることにより、大きさM、第1の抽出位置N、第2の抽出位置K、第1のアドレスA、第2のアドレスB及び第3のアドレスCを指定する。
並び替え後、演算部113は、データメモリ103の第2のアドレスB及び第3のアドレスCにストアされた複数次元配列データ901をシーケンシャルにロードして第1の演算を行う。シーケンシャルにロードすることにより、処理の高速化及び低消費電力化を実現することができる。
また、並び替え前、演算部113は、データメモリ103の第1のアドレスAに記憶されている第1の複数次元配列データ902をシーケンシャルにロードして第2の演算を行うことができる。シーケンシャルにロードすることにより、処理の高速化及び低消費電力化を実現することができる。
以上のように、演算に合わせて、配列データを並び替えることで、シーケンシャルアクセスを可能にする。演算は、上式(1)及び(2)に限定されず、種々の演算に適用できる。演算を開始する前に配列データを並び替えることで、シーケンシャルアクセスが可能になり、トータルのメモリアクセス時間を減らすことが可能である。並び替えは、デジタルシグナルプロセッサ102に結合命令又は抽出命令を実行させることにより行う。結合命令及び抽出命令によりパラメータを指定することにより、種々の演算に適用可能である。結合及び抽出は、指定された大きさ単位で繰り返すことにより、複数次元配列データ全体をデジタルシグナルプロセッサ102の内部に取り込むことなく、並び替えを行うことができる。
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。