JP2016045703A - 処理装置、処理装置の処理方法及びプログラム - Google Patents

処理装置、処理装置の処理方法及びプログラム Download PDF

Info

Publication number
JP2016045703A
JP2016045703A JP2014169482A JP2014169482A JP2016045703A JP 2016045703 A JP2016045703 A JP 2016045703A JP 2014169482 A JP2014169482 A JP 2014169482A JP 2014169482 A JP2014169482 A JP 2014169482A JP 2016045703 A JP2016045703 A JP 2016045703A
Authority
JP
Japan
Prior art keywords
data
memory
processing
input
stage
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.)
Pending
Application number
JP2014169482A
Other languages
English (en)
Inventor
和浩 吉村
Kazuhiro Yoshimura
和浩 吉村
毅 ▲葛▼
毅 ▲葛▼
Takeshi Katsura
博 畑農
Hiroshi Hatano
博 畑農
靖弘 尾山
Yasuhiro Oyama
靖弘 尾山
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
Socionext Inc
Original Assignee
Fujitsu Ltd
Socionext Inc
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, Socionext Inc filed Critical Fujitsu Ltd
Priority to JP2014169482A priority Critical patent/JP2016045703A/ja
Publication of JP2016045703A publication Critical patent/JP2016045703A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】小面積で高速に行列演算及び高速フーリエ変換を行うことができる処理装置を提供することを課題とする。
【解決手段】処理装置は、行列演算処理命令が入力されると、演算部が行列演算を行うように制御し、高速フーリエ変換が複数のステージの処理に分割された複数の高速フーリエ変換ステージ処理命令が入力されると、演算部が高速フーリエ変換処理をステージ単位で行うように制御するコントローラを有し、コントローラは、演算部が高速フーリエ変換のあるステージの処理を実行している最中に行列演算処理命令が入力された場合に、演算部が実行している高速フーリエ変換のステージの処理が終了すると、演算部に行列演算処理命令に対応する行列演算処理を実行させ、演算部が行列演算処理を終了すると、終了した高速フーリエ変換のステージの次のステージの処理を演算部に実行させる。
【選択図】図7

Description

本発明は、処理装置、処理装置の処理方法及びプログラムに関する。
プロセッサにおいて高速フーリエ変換演算用のバタフライ演算を実施するための方法が知られている(特許文献1参照)。バタフライ演算に対する第1組の入力がr1+ji1及びr2+ji2であり、回転因子WnがWn=e-j2π/N=cos(2π/N)−jsin(2π/N)=a+jbと表され、バタフライ演算が第1組のレジスタにr1、i1、r2及びi2を格納するステップが行われる。回転因子を行列レジスタに格納するステップが行われる。行列レジスタと第1組のレジスタとの間で第1の行列ベクトル乗算演算を実行するステップが行われる。
また、フーリエ変換を実行するために改良された処理エンジンが知られている(特許文献2参照)。命令プロセッサは、シーケンシャルな命令ソフトウェア・コマンドを処理する。フーリエ変換エンジンは、命令プロセッサに接続され、連続したデータのストリームについて、フーリエ変換を実行する。フーリエ変換エンジンは、命令プロセッサから、ソフトウェア・タスクのセットを介して、設定情報及び演算データを受け取る。
また、バタフライ演算装置が知られている(特許文献3参照)。第1及び第2の乗算器は、並列に設けられる。第1の加減算器は、第1及び第2の乗算器の出力に動作的に接続される。第2及び第3の加減算器は、第1の加減算器の出力に動作的に接続され、並列に配置される。
特開2000−285105号公報 特表2011−516949号公報 特開2003−16051号公報
無線通信のベースバンド処理では、行列演算及び高速フーリエ変換(FFT)が必須である。行列演算及び高速フーリエ変換に対してそれぞれアクセラレータを設計し、それらの処理を同時かつ高速に実行する。しかし、近年、ベースバンド処理における行列演算の量が著しく増加したことにより、行列演算アクセラレータの回路面積が増加してしまい、行列演算アクセラレータ及び高速フーリエ変換アクセラレータを並置する構成では、携帯機器向けの半導体チップに実装可能な回路面積を満たすことができなくなってきたという課題がある。
本発明の目的は、小面積で高速に行列演算及び高速フーリエ変換を行うことができる処理装置、処理装置の処理方法及びプログラムを提供することである。
処理装置は、データを記憶するメモリと、データの演算を行う演算部と、前記メモリに記憶されているデータを前記演算部の入力端子に出力し、前記演算部の出力端子のデータを前記メモリに書き込むメモリコントローラと、行列演算処理命令が入力されると、前記演算部が行列演算を行うように制御し、高速フーリエ変換が複数のステージの処理に分割された複数の高速フーリエ変換ステージ処理命令が入力されると、前記演算部が前記高速フーリエ変換処理をステージ単位で行うように制御するコントローラとを有し、前記コントローラは、前記演算部が前記高速フーリエ変換のあるステージの処理を実行している最中に前記行列演算処理命令が入力された場合に、前記演算部が実行している前記高速フーリエ変換のステージの処理が終了すると、前記演算部に前記行列演算処理命令に対応する行列演算処理を実行させ、前記演算部が前記行列演算処理を終了すると、前記終了した高速フーリエ変換のステージの次のステージの処理を前記演算部に実行させる。
小面積で高速に行列演算及び高速フーリエ変換を行うことができる。
図1は、行列演算アクセラレータ及び高速フーリエ変換(FFT)アクセラレータの構成例を示す図である。 図2は、本実施形態による行列演算及びFFTアクセラレータの構成例を示す図である。 図3(A)及び(B)は、高速フーリエ変換を行うためのバタフライ演算を示す図である。 図4は、バタフライ演算による高速フーリエ変換の例を示す図である。 図5(A)及び(B)は、バタフライ演算器を示す図である。 図6(A)〜(C)は、行列演算処理及びFFT処理の例を示す図である。 図7(A)〜(C)は、行列演算処理及びFFT処理の例を示す図である。 図8は、行列データの例を示す図である。 図9(A)及び(B)は、行列演算を行う場合のスイッチの処理例を示す図である。 図10(A)及び(B)は、FFTを行うバタフライ演算器及びスイッチの第1及び第2のステージの処理例を示す図である。 図11(A)及び(B)は、FFTを行うバタフライ演算器及びスイッチの第3及び第4のステージの処理例を示す図である。 図12は、FFTを行うバタフライ演算器及びスイッチの第5〜第9のステージの処理例を示す図である。 図13は、行列演算及びFFTアクセラレータの一部の構成例を示す図である。 図14(A)及び(B)は、第1〜第5のステージにおけるメモリコントローラの読み出しアドレス及び書き込みアドレスを示す図である。 図15(A)及び(B)は、第6のステージにおけるメモリコントローラの読み出しアドレス及び書き込みアドレスを示す図である。 図16(A)及び(B)は、第7のステージにおけるメモリコントローラの読み出しアドレス及び書き込みアドレスを示す図である。 図17(A)及び(B)は、第8のステージにおけるメモリコントローラの読み出しアドレス及び書き込みアドレスを示す図である。 図18(A)及び(B)は、第9のステージにおけるメモリコントローラの読み出しアドレス及び書き込みアドレスを示す図である。 図19は、無線通信装置の構成例を示す図である。
図1は、行列演算アクセラレータ100及び高速フーリエ変換(FFT)アクセラレータ120の構成例を示す図である。行列演算アクセラレータ100は行列演算を行い、FFTアクセラレータ120は高速フーリエ変換を行う。例えば、行列演算アクセラレータ100及びFFTアクセラレータ120は、無線通信装置内に設けられる。
行列演算アクセラレータ100は、コントローラ101、入力バッファ102、演算部103、出力バッファ104、メモリコントローラ105、及びメモリ106を有する。コントローラ101は、外部から行列演算命令を入力し、行列演算命令に応じて、入力バッファ102、演算部103、出力バッファ104及びメモリコントローラ105を制御する。入力バッファ102は、第1のファーストインファーストアウト(FIFO)メモリ107及び第2のFIFOメモリ108を有する。演算部103は、複数の算出論理演算ユニット(ALU)109及びスイッチ110を有する。出力バッファ104は、第3のFIFOメモリ111及び第4のFIFOメモリ112を有する。
メモリ106には、複数の行列データが記憶されている。メモリコントローラ105は、メモリ106から行列データを読み出し、第1のFIFOメモリ107及び第2のFIFOメモリ108に出力する。第1のFIFOメモリ107及び第2のFIFOメモリ108は、それぞれ、ファーストインファーストアウトにより、行列データを複数のALU109に出力する。複数のALU109は、例えば行列の四則演算等の行列演算を行う。スイッチ110は、複数のALU109の出力データを選択的に第3のFIFOメモリ111及び第4のFIFOメモリ112に出力する。例えば、行列データが複素数データである場合、スイッチ110は、複素数データのうちの実数データ又は虚数データを選択して出力することができる。第3のFIFOメモリ111及び第4のFIFOメモリ112は、それぞれ、ファーストインファーストアウトにより、行列データをメモリコントローラ105に出力する。メモリコントローラ105は、第3のFIFOメモリ111及び第4のFIFOメモリ112の出力データをメモリ106に書き込む。
FFTアクセラレータ120は、コントローラ121、入力スイッチ122、メモリ123、バタフライ演算器124、出力スイッチ125、メモリコントローラ126、及びメモリ127を有する。コントローラ101は、外部からFFT命令を入力し、FFT命令に応じて、入力スイッチ122、メモリ123、バタフライ演算器124、出力スイッチ125、及びメモリコントローラ126を制御する。
メモリ127には、高速フーリエ変換をするためのデータが記憶されている。メモリコントローラ126は、メモリ127からデータを読み出し、入力スイッチ122に出力する。入力スイッチ122は、データの位置を入れ替えてバタフライ演算器124に出力する。メモリ123には、回転因子データWnが記憶されている。バタフライ演算器124は、入力スイッチ122から入力したデータ及びメモリ123から入力した回転因子データWnを基にバタフライ演算を行い、データを出力スイッチ125に出力する。出力スイッチ125は、データの位置を入れ替えてメモリコントローラ126に出力する。メモリコントローラ126は、出力スイッチ125の出力データをメモリ127に書き込む。
図19は、本実施形態による無線通信装置1901の構成例を示す図である。無線通信装置1901は、ベースバンド処理装置1902を有する。ベースバンド処理装置1902は、行列演算及びFFTアクセラレータ200を有する。
図2は、本実施形態による行列演算及びFFTアクセラレータ200の構成例を示す図である。行列演算及びFFTアクセラレータ200は、図1の行列演算アクセラレータ100の機能及びFFTアクセラレータ120の両方の機能を有し、行列演算及び高速フーリエ変換を行うことができる。行列演算及びFFTアクセラレータ200は、図1の行列演算アクセラレータ100及びFFTアクセラレータ120に対して、ハードウェアを共有化することにより、面積を小さくすることができる。すなわち、行列演算及びFFTアクセラレータ200は、図1の行列演算アクセラレータ100に対してメモリ203を追加した構成であり、メモリ203以外のハードウェアを共有することができる。
行列演算及びFFTアクセラレータ200は、処理装置であり、コントローラ201、入力バッファ202、メモリ203、演算部204、出力バッファ205、メモリコントローラ206、及びメモリ207を有する。コントローラ201は、外部から命令を入力し、命令に応じて、入力バッファ202、メモリ203、演算部204、出力バッファ205及びメモリコントローラ206を制御する。入力バッファ202は、第1のFIFOメモリ208及び第2のFIFOメモリ209を有する。演算部204は、複数のALU210及びスイッチ211を有する。出力バッファ205は、第3のFIFOメモリ212及び第4のFIFOメモリ213を有する。メモリ207には、複数の行列データ及び高速フーリエ変換のためのデータが記憶される。
まず、行列演算及びFFTアクセラレータ200が行列演算を行う場合を説明する。メモリコントローラ206は、メモリ207から行列データを読み出し、第1のFIFOメモリ208及び第2のFIFOメモリ209に出力する。第1のFIFOメモリ208及び第2のFIFOメモリ209は、それぞれ、ファーストインファーストアウトにより、行列データを複数のALU210に出力する。複数のALU210は、例えば行列の四則演算等の行列演算を行う。スイッチ211は、複数のALU210の出力データを選択的に第3のFIFOメモリ212及び第4のFIFOメモリ213に出力する。例えば、行列データが複素数データである場合、スイッチ211は、複素数データのうちの実数データ又は虚数データを選択して出力することができる。第3のFIFOメモリ212及び第4のFIFOメモリ213は、それぞれ、ファーストインファーストアウトにより、行列データをメモリコントローラ206に出力する。メモリコントローラ206は、第3のFIFOメモリ212及び第4のFIFOメモリ213の出力データをメモリ207に書き込む。
次に、図3(A)及び(B)等を参照しながら、行列演算及びFFTアクセラレータ200が高速フーリエ変換する処理を説明する。
図3(A)は、高速フーリエ変換を行うためのバタフライ演算の記号を示す図である。バタフライ演算は、第1の入力データX1及び第2の入力データX2を入力し、下記の演算を行い、第1の出力データY1及び第2の出力データY2を出力する。ここで、Wnは回転因子データであり、Nは高速フーリエ変換のデータ数である。
Y1=X1+X2×Wn
Y2=X1−X2×Wn
n=exp(−2πj×n/N)
図3(B)は、バタフライ演算器EXの構成例を示す図である。バタフライ演算器EXは、ALU301及び302を有する。ALU301及び302は、図2のALU210に対応する。ALU210は、複数のバタフライ演算器EXを構成することができる。回転因子データWnは、図2のメモリ203に記憶されている。ALU301は、第2の入力データX2及び回転因子データWnの乗算を行い、データX2×Wnを出力する。ALU302は、第1の入力データX1及びALU301の出力データを入力し、加算による第1の出力データY1及び減算による第2の出力データY2を出力する。
図2において、1個のバタフライ演算を行う場合を説明する。メモリコントローラ206は、メモリ207から第1の入力データX1及び第2の入力データX2を読み出し、第1のFIFOメモリ208及び第2のFIFOメモリ209を介して、ALU210に第1の入力データX1及び第2の入力データX2を出力する。メモリ203は、回転因子データWnをALU210に出力する。ALU210は、第1の入力データX1、第2の入力データX2及び回転因子データWnを基にバタフライ演算を行い、第1の出力データY1及び第2の出力データY2を、第3のFIFOメモリ212及び第4のFIFOメモリ213を介して、メモリコントローラ206に出力する。メモリコントローラ206は、第1の出力データY1及び第2の出力データY2をメモリ207に書き込む。
図4は、バタフライ演算による高速フーリエ変換の例を示す図であり、図5(A)の16個のバタフライ演算器EX1〜EX16により行われる。バタフライ演算器EX1〜EX16は、それぞれ、図3(A)のバタフライ演算器EXに対応し、図2のALU210により構成される。高速フーリエ変換のポイント数は32の場合、第1〜第5のステージを実行することにより、高速フーリエ変換が完了する。
第1のステージでは、32個の入力データがメモリ207から入力バッファ202を介してバタフライ演算器EX1〜EX16に入力される。バタフライ演算器EX1〜EX16は、32個のデータを入力し、32個のデータを出力する。例えば、バタフライ演算器EX1は、0番目の入力データ及び16番目の入力データを基にバタフライ演算を行い、0番目の出力データ及び1番目の出力データを出力する。バタフライ演算器EX2は、8番目の入力データ及び24番目の入力データを基にバタフライ演算を行い、16番目の出力データ及び17番目の出力データを出力する。バタフライ演算器EX1〜EX16が出力する32個のデータは、スイッチ211及び出力バッファ205を介して、メモリ207に書き込まれる。この32個のデータが第2のステージの入力データになる。
第2のステージでは、32個の入力データがメモリ207から入力バッファ202を介してバタフライ演算器EX1〜EX16に入力される。バタフライ演算器EX1〜EX16は、32個のデータを入力し、32個のデータを出力する。例えば、バタフライ演算器EX1は、0番目の入力データ及び16番目の入力データを基にバタフライ演算を行い、0番目の出力データ及び2番目の出力データを出力する。バタフライ演算器EX2は、1番目の入力データ及び17番目の入力データを基にバタフライ演算を行い、1番目の出力データ及び3番目の出力データを出力する。バタフライ演算器EX1〜EX16が出力する32個のデータは、スイッチ211及び出力バッファ205を介して、メモリ207に書き込まれる。この32個のデータが第3のステージの入力データになる。
第3のステージでは、32個の入力データがメモリ207から入力バッファ202を介してバタフライ演算器EX1〜EX16に入力される。バタフライ演算器EX1〜EX16は、32個のデータを入力し、32個のデータを出力する。例えば、バタフライ演算器EX1は、0番目の入力データ及び16番目の入力データを基にバタフライ演算を行い、0番目の出力データ及び4番目の出力データを出力する。バタフライ演算器EX2は、1番目の入力データ及び17番目の入力データを基にバタフライ演算を行い、1番目の出力データ及び5番目の出力データを出力する。バタフライ演算器EX1〜EX16が出力する32個のデータは、スイッチ211及び出力バッファ205を介して、メモリ207に書き込まれる。この32個のデータが第4のステージの入力データになる。
第4のステージでは、32個の入力データがメモリ207から入力バッファ202を介してバタフライ演算器EX1〜EX16に入力される。バタフライ演算器EX1〜EX16は、32個のデータを入力し、32個のデータを出力する。例えば、バタフライ演算器EX1は、0番目の入力データ及び16番目の入力データを基にバタフライ演算を行い、0番目の出力データ及び8番目の出力データを出力する。バタフライ演算器EX2は、1番目の入力データ及び17番目の入力データを基にバタフライ演算を行い、1番目の出力データ及び9番目の出力データを出力する。バタフライ演算器EX1〜EX16が出力する32個のデータは、スイッチ211及び出力バッファ205を介して、メモリ207に書き込まれる。この32個のデータが第5のステージの入力データになる。
第5のステージでは、32個の入力データがメモリ207から入力バッファ202を介してバタフライ演算器EX1〜EX16に入力される。バタフライ演算器EX1〜EX16は、32個のデータを入力し、32個のデータを出力する。例えば、バタフライ演算器EX1は、0番目の入力データ及び16番目の入力データを基にバタフライ演算を行い、0番目の出力データ及び16番目の出力データを出力する。バタフライ演算器EX2は、1番目の入力データ及び17番目の入力データを基にバタフライ演算を行い、1番目の出力データ及び17番目の出力データを出力する。バタフライ演算器EX1〜EX16が出力する32個のデータは、スイッチ211及び出力バッファ205を介して、メモリ207に書き込まれる。この32個のデータが高速フーリエ変換の最終データになる。
図2のALU210の個数は、有限である。ALU210が図5(A)のように16個のバタフライ演算器EX1〜EX16を構成する場合には、上記のように、各ステージを1サイクルで実行可能である。例えば、第3のステージでは、16個のバタフライ演算器EX1〜EX16は、16個のバタフライ演算401を1サイクルで実行する。
これに対し、ALU210が図5(B)のように8個のバタフライ演算器EX1〜EX8を構成する場合には、各ステージを2サイクルで実行する。例えば、第3のステージの場合、第1のサイクルでは、8個のバタフライ演算器EX1〜EX8は、上側の8個のバタフライ演算402を実行し、第2のサイクルでは、8個のバタフライ演算器EX1〜EX8は、下側の8個のバタフライ演算403を実行する。
本実施形態によれば、行列演算に使用するALU210の個数で、任意のFFTデータ数の高速フーリエ変換を行うことができる。すなわち、メモリコントローラ206は、高速フーリエ変換の1個のステージのデータを複数のデータの組みに分割し、分割された複数のデータの組みを順にメモリ207から第1のFIFOメモリ208及び第2のFIFOメモリ209に出力する。これにより、各ステージを複数サイクルで実行する。
図6(A)は、図1の行列演算アクセラレータ100及びFFTアクセラレータ120の処理例を示す図である。FFTアクセラレータ120は、時刻t1で第1のFFT命令が入力されると、時刻t1〜t3でFFT処理Pf1を行う。行列演算アクセラレータ100は、時刻t2で第1の行列演算命令が入力されると、時刻t2〜t3で行列演算処理Pm1を行う。FFTアクセラレータ120は、時刻t3で第2のFFT命令が入力されると、時刻t3〜t5でFFT処理Pf2を行う。行列演算アクセラレータ100は、時刻t4で第2の行列演算命令が入力されると、時刻t4〜t5で行列演算処理Pm2を行う。FFTアクセラレータ120は、時刻t5で第3のFFT命令が入力されると、時刻t5〜t6でFFT処理Pf3を行う。行列演算処理Pm1は、FFT処理Pf1に対して並列に行われる。行列演算処理Pm2は、FFT処理Pf2に対して並列に行われる。
これに対し、図2の行列演算及びFFTアクセラレータ200は、行列演算処理及びFFT処理を並列に行うことができない。例えば、行列演算処理は、FFT処理に対して優先度が高い。その場合、行列演算及びFFTアクセラレータ200は、図6(B)又は(C)の処理を行うことが考えられる。
図6(B)は、行列演算及びFFTアクセラレータ200の処理例を示す図である。行列演算及びFFTアクセラレータ200は、時刻t1で第1のFFT命令が入力されると、時刻t1〜t3でFFT処理Pf1を行う。行列演算及びFFTアクセラレータ200は、時刻t2で第1の行列演算命令が入力されると、FFT処理Pf1が終了するまで待機し、時刻t3〜t4で行列演算処理Pm1を行う。行列演算及びFFTアクセラレータ200は、時刻t3で第2のFFT命令が入力されると、行列演算処理Pm1が終了するまで待機する。行列演算及びFFTアクセラレータ200は、時刻t4で第2の行列演算命令が入力されると、時刻t4〜t5で行列演算処理Pm2を行う。行列演算及びFFTアクセラレータ200は、行列演算処理Pm2が終了すると、時刻t5〜t6で、時刻t3で入力された第2のFFT命令に対応するFFT処理Pf2を行う。しかし、この場合、行列演算処理Pm1は優先度が高いのに、第1の行列演算命令が入力された時刻t2から時刻t3まで、行列演算処理Pm1の実行が待機される。これでは、優先度の高い行列演算命令の処理速度が低下してしまう課題がある。
図6(C)は、行列演算及びFFTアクセラレータ200の他の処理例を示す図である。行列演算及びFFTアクセラレータ200は、時刻t1で第1のFFT命令が入力されると、時刻t1でFFT処理Pf1を開始する。行列演算及びFFTアクセラレータ200は、時刻t2で第1の行列演算命令が入力されると、FFT処理Pf1を中断し、内部状態をメモリ又はレジスタに退避し、行列演算処理Pm1を開始する。行列演算及びFFTアクセラレータ200は、時刻t3で行列演算処理Pm1が終了すると、メモリ又はレジスタの内部状態を復元し、中断していたFFT処理Pf1を再開する。FFT処理Pf1は、時刻t4で終了する。また、行列演算及びFFTアクセラレータ200は、時刻t3で第2のFFT命令が入力されると、FFT処理Pf1が終了するまで待機する。行列演算及びFFTアクセラレータ200は、時刻t4で第2の行列演算命令が入力されると、時刻t4〜t5で行列演算処理Pm2を行う。行列演算及びFFTアクセラレータ200は、行列演算処理Pm2が終了すると、時刻t5〜t6で、時刻t3で入力された第2のFFT命令に対応するFFT処理Pf2を行う。これにより、優先度が高い行列演算処理Pm1を高速に実行することができる。しかし、FFT処理Pf1の中断及び再開を行うために、内部状態の退避及び復元を行う複雑な制御が必要になるため、コントローラ201の回路面積が大きくなってしまう課題がある。
次に、図7(A)〜(C)を参照しながら、優先度の高い行列演算命令を高速に実行し、かつ面積を小さくすることができる行列演算及びFFTアクセラレータ200を説明する。
図7(A)は、図6(A)と同じであり、図1の行列演算アクセラレータ100及びFFTアクセラレータ120の処理例を示す図である。
図7(B)は、図2の行列演算及びFFTアクセラレータ200が行うFFT処理の例を示す図である。図7(A)のFFT処理Pf1は、例えば図4のように第1〜第5のステージを有し、図7(B)のFFTの第1のステージの処理Pf1a、FFTの第2のステージの処理Pf1b、FFTの第3のステージの処理Pf1c、FFTの第4のステージの処理Pf1d及びFFTの第5のステージの処理Pf1eに分割される。
同様に、図7(A)のFFT処理Pf2は、例えば図4のように第1〜第5のステージを有し、図7(B)のFFTの第1のステージの処理Pf2a、FFTの第2のステージの処理Pf2b、FFTの第3のステージの処理Pf2c、FFTの第4のステージの処理Pf2d及びFFTの第5のステージの処理Pf2eに分割される。
同様に、図7(A)のFFT処理Pf3は、例えば図4のように第1〜第5のステージを有し、図7(B)のFFTの第1のステージの処理Pf3a、FFTの第2のステージの処理Pf3b、FFTの第3のステージの処理Pf3c、FFTの第4のステージの処理Pf3d及びFFTの第5のステージの処理Pf3eに分割される。
行列演算及びFFTアクセラレータ200には、高速フーリエ変換が複数のステージの処理に分割された複数の高速フーリエ変換ステージ処理命令が順に入力される。例えば、FFTの第1のステージ命令fft(1)、FFTの第2のステージ命令fft(2)、FFTの第3のステージ命令fft(3)、FFTの第4のステージ命令fft(4)、FFTの第5のステージ命令fft(5)が順に入力される。行列演算及びFFTアクセラレータ200は、FFTの第1のステージ命令fft(1)が入力されると、FFTの第1のステージの処理Pf1aを行う。次に、行列演算及びFFTアクセラレータ200は、FFTの第2のステージ命令fft(2)が入力されると、FFTの第2のステージの処理Pf1bを行う。次に、行列演算及びFFTアクセラレータ200は、FFTの第3のステージ命令fft(3)が入力されると、FFTの第3のステージの処理Pf1cを行う。次に、行列演算及びFFTアクセラレータ200は、FFTの第4のステージ命令fft(4)が入力されると、FFTの第4のステージの処理Pf1dを行う。次に、行列演算及びFFTアクセラレータ200は、FFTの第5のステージ命令fft(5)が入力されると、FFTの第5のステージの処理Pf1eを行う。FFT処理Pf2a〜Pf2e及びFFT処理Pf3a〜Pf3eも同様である。
図7(C)は、図2の行列演算及びFFTアクセラレータ200が行う行列演算処理及びFFT処理の例を示す図である。図7(C)のFFTの各ステージ命令の入力時刻は、図7(B)のものと同じである。
行列演算及びFFTアクセラレータ200は、時刻t1で第1のFFTの第1のステージ命令が入力されると、第1のFFT処理の第1のステージの処理Pf1aを行う。次に、行列演算及びFFTアクセラレータ200は、第1のFFTの第2のステージ命令が入力されると、第1のFFTの第2のステージの処理Pf1bを行う。次に、行列演算及びFFTアクセラレータ200には、時刻t2で、第1のFFTの第3のステージ命令及び第1の行列演算命令が入力される。行列演算命令は、FFT命令より優先度が高いので、行列演算及びFFTアクセラレータ200は、第1の行列演算命令に対応する行列演算処理Pm1を実行する。第1のFFTの第3のステージ命令は、待機させられる。同様に、行列演算処理Pm1の実行中に入力された第1のFFTの第4のステージ命令及び第1のFFTの第5のステージ命令も、待機させられる。
次に、行列演算及びFFTアクセラレータ200は、時刻t3で、行列演算処理Pm1が終了すると、第1のFFTの第3のステージ命令に対応する第1のFFTの第3のステージの処理Pf1cを行う。次に、行列演算及びFFTアクセラレータ200は、第1のFFTの第4のステージ命令に対応する第1のFFTの第4のステージの処理Pf1dを行う。次に、行列演算及びFFTアクセラレータ200は、第1のFFTの第5のステージ命令に対応する第1のFFTの第5のステージの処理Pf1eを行う。
次に、行列演算及びFFTアクセラレータ200は、時刻t4で第2の行列演算命令が入力されると、時刻t4〜t5で行列演算処理Pm2を行う。次に、行列演算及びFFTアクセラレータ200は、第2のFFTの第1のステージ命令に対応する第2のFFTの第1のステージの処理Pf2aを行う。次に、行列演算及びFFTアクセラレータ200は、第2のFFTの第2のステージ命令に対応する第2のFFTの第2のステージの処理Pf2bを行う。次に、行列演算及びFFTアクセラレータ200は、第2のFFTの第3のステージ命令に対応する第2のFFTの第3のステージの処理Pf2cを行う。次に、行列演算及びFFTアクセラレータ200は、第2のFFTの第4のステージ命令に対応する第2のFFTの第4のステージの処理Pf2dを行う。次に、行列演算及びFFTアクセラレータ200は、第2のFFTの第5のステージ命令に対応する第2のFFTの第5のステージの処理Pf2eを行う。
コントローラ201は、行列演算処理命令が入力されると、複数のALU(演算器)210が行列演算を行うように制御する。また、コントローラ201は、FFTが複数のステージの処理に分割された複数のFFTステージ処理命令が入力されると、複数のALU210がFFT処理をステージ単位で行うように制御する。
また、コントローラ201は、複数のALU210がFFTのあるステージの処理Pf1bを実行している最中に、行列演算命令が入力されると、複数のALU210が実行しているFFTのステージの処理Pf1bが終了すると、複数のALU210に行列演算命令に対応する行列演算処理Pm1を行うように制御する。そして、コントローラ201は、複数のALU210が行列演算処理Pm1を終了すると、終了した高速フーリエ変換のステージの次のステージの処理Pf1cを複数のALU210が行うように制御する。
図8は、行列データの例を示す図である。行列801は、例えば2行2列の行列である。第1行第1列のデータは、複素数データa+ibであり、実数部a及び虚数部bを有し、行列データ802の最下位ビット(LSB)側から1番目のデータである。第1行第2列のデータは、複素数データc+idであり、実数部c及び虚数部dを有し、行列データ802の最下位ビット(LSB)側から2番目のデータである。第2行第1列のデータは、複素数データe+ifであり、実数部e及び虚数部fを有し、行列データ802の最下位ビット(LSB)側から3番目のデータである。第2行第2列のデータは、複素数データg+ihであり、実数部g及び虚数部hを有し、行列データ802の最下位ビット(LSB)側から4番目のデータである。例えば、実数部及び虚数部は、それぞれ、16ビットである。
図9(A)及び(B)は、行列演算を行う場合の図2のスイッチ211の処理例を示す図である。
図9(A)は、スイッチ211が行列の対角成分ベクトル抽出を行う処理例を示す図である。スイッチ211は、3行3列の行列902に対応する行列データ901を入力すると、第1行第1列の複素数データ、第2行第2列の複素数データ、及び第3行第3列の複素数データを、出力データ903として出力する。
図9(B)は、スイッチ211が行列の対角成分実数部抽出を行う処理例を示す図である。スイッチ211は、3行3列の行列912に対応する行列データ911を入力すると、第1行第1列の実数部データ、第2行第2列の実数部データ、及び第3行第3列の実数部データを、出力データ913として出力する。
同様に、スイッチ211は、行列の対角成分虚数部抽出を行うことができる。また、スイッチ211は、行列の実数部抽出を行うことができる。また、スイッチ211は、行列の虚数部抽出を行うことができる。また、スイッチ211は、入力した行列データを変換なしで、そのまま出力することができる。
以上のように、スイッチ211は、複数のALU210の出力データを入力し、行列演算命令に応じて、複数のALU210の出力データを選択し、選択したデータを出力することができる。
図10(A)、(B)、図11(A)、(B)及び図12は、FFTを行うバタフライ演算器EX1〜EX16及びスイッチ211の各ステージの処理例を示す図である。例えば、FFTデータ数が512であり、1サイクルのデータ数が32である。この場合、第1〜第9のステージの処理が行われる。各ステージのサイクル数は、512/32=16である。512個のデータは、32個のデータに16分割される。各サイクルで32個のデータが処理され、16サイクルで512個のデータが処理される。
図10(A)は、FFTの第1のステージの処理例を示す図である。第1の入力データ1001は、図3(B)の第1の入力データX1に対応し、図2の第1のFIFOメモリ208の出力データであり、バタフライ演算器EX1〜EX16の第1の入力端子にそれぞれ出力される。第2の入力データ1002は、図3(B)の第2の入力データX2に対応し、図2の第2のFIFOメモリ209の出力データであり、バタフライ演算器EX1〜EX16の第2の入力端子にそれぞれ出力される。
第1のFIFOメモリ208は、メモリコントローラ206を介してメモリ207から第1の入力データ1001を入力し、複数のバタフライ演算器EX1〜EX16の第1の入力端子に第1の入力データ1001を出力する。第2のFIFOメモリ209は、メモリコントローラ206を介してメモリ207から第2のデータ1002を入力し、複数のバタフライ演算器EX1〜EX16の第2の入力端子に第2の入力データ1002を出力する。
16個のバタフライ演算器EX1〜EX16は、第1の入力端子に第1の入力データ1001を入力し、第2の入力端子に第2の入力データ1002を入力し、第1の出力端子から第1の出力データ1003を出力し、第2の出力端子から第2の出力データ1004を出力する。第1の出力データ1003は、図3(B)の第1の出力データY1に対応する。第2の出力データ1004は、図3(B)の第2の出力データY2に対応する。例えば、バタフライ演算器EX1は、図4の第1のステージと同様に、0番目の入力データ及び16番目の入力データを入力し、0番目の出力データ及び1番目の出力データを出力する。バタフライ演算器EX2は、図4の第1のステージと同様に、1番目の入力データ及び17番目の入力データを入力し、2番目の出力データ及び3番目の出力データを出力する。なお、図10(A)、(B)、図11(A)、(B)及び図12では、図4に対して、バタフライ演算器EX1〜EX16の順番を変えて示している。
スイッチ211は、複数のバタフライ演算器EX1〜EX16の第1の出力データ1003及び第2の出力データ1004を入力し、第1の出力データ1003及び第2の出力データ1004の位置を入れ替えて、第3の出力データ1005及び第4の出力データ1006を出力する。第1の出力データ1003は0番目、2番目及び4番目等の出力データを有し、第2の出力データ1004は1番目、3番目及び5番目等の出力データを有する。これに対し、第3の出力データ1005は0番目、1番目及び2番目等の出力データを有し、第4の出力データ1006は16番目、17番目及び18番目等の出力データを有する。第3の出力データ1005は、図2の第3のFIFOメモリ212に出力される。第4の出力データ1006は、図2の第4のFIFOメモリ213に出力される。このデータの位置の入れ替えにより、次の第2のステージのバタフライ演算器EX1〜EX16の入力データの位置が決まる。これにより、図1の入力スイッチ122が不要になる。
図10(B)は、FFTの第2のステージの処理例を示す図である。第1の入力データ1011は、図3(B)の第1の入力データX1に対応し、図2の第1のFIFOメモリ208の出力データであり、バタフライ演算器EX1〜EX16の第1の入力端子にそれぞれ出力される。第2の入力データ1012は、図3(B)の第2の入力データX2に対応し、図2の第2のFIFOメモリ209の出力データであり、バタフライ演算器EX1〜EX16の第2の入力端子にそれぞれ出力される。
第1のFIFOメモリ208は、メモリコントローラ206を介してメモリ207から第1の入力データ1011を入力し、複数のバタフライ演算器EX1〜EX16の第1の入力端子に第1の入力データ1011を出力する。第2のFIFOメモリ209は、メモリコントローラ206を介してメモリ207から第2のデータ1012を入力し、複数のバタフライ演算器EX1〜EX16の第2の入力端子に第2の入力データ1012を出力する。
16個のバタフライ演算器EX1〜EX16は、第1の入力端子に第1の入力データ1011を入力し、第2の入力端子に第2の入力データ1012を入力し、第1の出力端子から第1の出力データ1013を出力し、第2の出力端子から第2の出力データ1014を出力する。第1の出力データ1013は、図3(B)の第1の出力データY1に対応する。第2の出力データ1014は、図3(B)の第2の出力データY2に対応する。例えば、バタフライ演算器EX1は、図4の第2のステージと同様に、0番目の入力データ及び16番目の入力データを入力し、0番目の出力データ及び2番目の出力データを出力する。バタフライ演算器EX2は、図4の第2のステージと同様に、1番目の入力データ及び17番目の入力データを入力し、1番目の出力データ及び3番目の出力データを出力する。
スイッチ211は、複数のバタフライ演算器EX1〜EX16の第1の出力データ1013及び第2の出力データ1014を入力し、第1の出力データ1013及び第2の出力データ1014の位置を入れ替えて、第3の出力データ1015及び第4の出力データ1016を出力する。第1の出力データ1013は0番目、1番目及び4番目等の出力データを有し、第2の出力データ1014は2番目、3番目及び6番目等の出力データを有する。これに対し、第3の出力データ1015は0番目、1番目及び2番目等の出力データを有し、第4の出力データ1016は16番目、17番目及び18番目等の出力データを有する。第3の出力データ1015は、図2の第3のFIFOメモリ212に出力される。第4の出力データ1016は、図2の第4のFIFOメモリ213に出力される。このデータの位置の入れ替えにより、次の第3のステージのバタフライ演算器EX1〜EX16の入力データの位置が決まる。
図11(A)は、FFTの第3のステージの処理例を示す図である。第1の入力データ1101は、図3(B)の第1の入力データX1に対応し、図2の第1のFIFOメモリ208の出力データであり、バタフライ演算器EX1〜EX16の第1の入力端子にそれぞれ出力される。第2の入力データ1102は、図3(B)の第2の入力データX2に対応し、図2の第2のFIFOメモリ209の出力データであり、バタフライ演算器EX1〜EX16の第2の入力端子にそれぞれ出力される。
第1のFIFOメモリ208は、メモリコントローラ206を介してメモリ207から第1の入力データ1101を入力し、複数のバタフライ演算器EX1〜EX16の第1の入力端子に第1の入力データ1101を出力する。第2のFIFOメモリ209は、メモリコントローラ206を介してメモリ207から第2のデータ1102を入力し、複数のバタフライ演算器EX1〜EX16の第2の入力端子に第2の入力データ1102を出力する。
16個のバタフライ演算器EX1〜EX16は、第1の入力端子に第1の入力データ1101を入力し、第2の入力端子に第2の入力データ1102を入力し、第1の出力端子から第1の出力データ1103を出力し、第2の出力端子から第2の出力データ1104を出力する。第1の出力データ1103は、図3(B)の第1の出力データY1に対応する。第2の出力データ1104は、図3(B)の第2の出力データY2に対応する。例えば、バタフライ演算器EX1は、図4の第3のステージと同様に、0番目の入力データ及び16番目の入力データを入力し、0番目の出力データ及び4番目の出力データを出力する。バタフライ演算器EX2は、図4の第3のステージと同様に、1番目の入力データ及び17番目の入力データを入力し、1番目の出力データ及び5番目の出力データを出力する。
スイッチ211は、複数のバタフライ演算器EX1〜EX16の第1の出力データ1103及び第2の出力データ1104を入力し、第1の出力データ1103及び第2の出力データ1104の位置を入れ替えて、第3の出力データ1105及び第4の出力データ1106を出力する。第1の出力データ1103は0番目、1番目及び2番目等の出力データを有し、第2の出力データ1104は4番目、5番目及び6番目等の出力データを有する。これに対し、第3の出力データ1105は0番目、1番目及び2番目等の出力データを有し、第4の出力データ1106は16番目、17番目及び18番目等の出力データを有する。第3の出力データ1105は、図2の第3のFIFOメモリ212に出力される。第4の出力データ1106は、図2の第4のFIFOメモリ213に出力される。このデータの位置の入れ替えにより、次の第4のステージのバタフライ演算器EX1〜EX16の入力データの位置が決まる。
図11(B)は、FFTの第4のステージの処理例を示す図である。第1の入力データ1111は、図3(B)の第1の入力データX1に対応し、図2の第1のFIFOメモリ208の出力データであり、バタフライ演算器EX1〜EX16の第1の入力端子にそれぞれ出力される。第2の入力データ1112は、図3(B)の第2の入力データX2に対応し、図2の第2のFIFOメモリ209の出力データであり、バタフライ演算器EX1〜EX16の第2の入力端子にそれぞれ出力される。
第1のFIFOメモリ208は、メモリコントローラ206を介してメモリ207から第1の入力データ1111を入力し、複数のバタフライ演算器EX1〜EX16の第1の入力端子に第1の入力データ1111を出力する。第2のFIFOメモリ209は、メモリコントローラ206を介してメモリ207から第2のデータ1112を入力し、複数のバタフライ演算器EX1〜EX16の第2の入力端子に第2の入力データ1112を出力する。
16個のバタフライ演算器EX1〜EX16は、第1の入力端子に第1の入力データ1111を入力し、第2の入力端子に第2の入力データ1112を入力し、第1の出力端子から第1の出力データ1113を出力し、第2の出力端子から第2の出力データ1114を出力する。第1の出力データ1113は、図3(B)の第1の出力データY1に対応する。第2の出力データ1114は、図3(B)の第2の出力データY2に対応する。例えば、バタフライ演算器EX1は、図4の第4のステージと同様に、0番目の入力データ及び16番目の入力データを入力し、0番目の出力データ及び8番目の出力データを出力する。バタフライ演算器EX2は、図4の第4のステージと同様に、1番目の入力データ及び17番目の入力データを入力し、1番目の出力データ及び9番目の出力データを出力する。
スイッチ211は、複数のバタフライ演算器EX1〜EX16の第1の出力データ1113及び第2の出力データ1114を入力し、第1の出力データ1113及び第2の出力データ1114の位置を入れ替えて、第3の出力データ1115及び第4の出力データ1116を出力する。第1の出力データ1113は0番目、1番目及び2番目等の出力データを有し、第2の出力データ1114は8番目、9番目及び10番目等の出力データを有する。これに対し、第3の出力データ1115は0番目、1番目及び2番目等の出力データを有し、第4の出力データ1116は16番目、17番目及び18番目等の出力データを有する。第3の出力データ1115は、図2の第3のFIFOメモリ212に出力される。第4の出力データ1116は、図2の第4のFIFOメモリ213に出力される。このデータの位置の入れ替えにより、次の第5のステージのバタフライ演算器EX1〜EX16の入力データの位置が決まる。
図12は、FFTの第5〜第9のステージの処理例を示す図である。第1の入力データ1201は、図3(B)の第1の入力データX1に対応し、図2の第1のFIFOメモリ208の出力データであり、バタフライ演算器EX1〜EX16の第1の入力端子にそれぞれ出力される。第2の入力データ1202は、図3(B)の第2の入力データX2に対応し、図2の第2のFIFOメモリ209の出力データであり、バタフライ演算器EX1〜EX16の第2の入力端子にそれぞれ出力される。
第1のFIFOメモリ208は、メモリコントローラ206を介してメモリ207から第1の入力データ1201を入力し、複数のバタフライ演算器EX1〜EX16の第1の入力端子に第1の入力データ1201を出力する。第2のFIFOメモリ209は、メモリコントローラ206を介してメモリ207から第2のデータ1202を入力し、複数のバタフライ演算器EX1〜EX16の第2の入力端子に第2の入力データ1202を出力する。
16個のバタフライ演算器EX1〜EX16は、第1の入力端子に第1の入力データ1201を入力し、第2の入力端子に第2の入力データ1202を入力し、第1の出力端子から第1の出力データ1203を出力し、第2の出力端子から第2の出力データ1204を出力する。第1の出力データ1203は、図3(B)の第1の出力データY1に対応する。第2の出力データ1204は、図3(B)の第2の出力データY2に対応する。例えば、バタフライ演算器EX1は、図4の第5のステージと同様に、0番目の入力データ及び16番目の入力データを入力し、0番目の出力データ及び16番目の出力データを出力する。バタフライ演算器EX2は、図4の第4のステージと同様に、1番目の入力データ及び17番目の入力データを入力し、1番目の出力データ及び17番目の出力データを出力する。
スイッチ211は、複数のバタフライ演算器EX1〜EX16の第1の出力データ1203及び第2の出力データ1204を入力し、そのまま、第3の出力データ1205及び第4の出力データ1206として出力する。第3の出力データ1205は、第1の出力データ1203と同じである。第4の出力データ1206は、第2の出力データ1204と同じである。第3の出力データ1205は、図2の第3のFIFOメモリ212に出力される。第4の出力データ1206は、図2の第4のFIFOメモリ213に出力される。第5〜第9のステージでは、スイッチ211は、データの位置の入れ替えを行わず、後述の方法により、メモリコントローラ206がデータの位置の入れ替えを行い、次のステージのバタフライ演算器EX1〜EX16の入力データの位置を決める。
図13は、図2の行列演算及びFFTアクセラレータ200の一部の構成例を示す図である。4個のバンクBK0、BK1、BK2及びBK3は、図2のメモリ207に対応し、図14(A)、(B)、図15(A)、(B)、図16(A)、(B)、図17(A)、(B)、図18(A)、(B)に示すように、それぞれ、0〜N(512)のアドレスにデータが格納される。第1のFIFOメモリ208及び第2のFIFOメモリ209には、バンクBK0〜BK3から読み出されたデータが記憶される。第1の入力データ1301は、第1のFIFOメモリ208の出力データであり、バタフライ演算器EX1〜EX16に入力される。第2の入力データ1302は、第2のFIFOメモリ209の出力データであり、バタフライ演算器EX1〜EX16に入力される。第3の出力データ1303は、図2のスイッチ211の出力データであり、第3のFIFOメモリ212に入力される。第4の出力データ1304は、図2のスイッチ211の出力データであり、第4のFIFOメモリ213に入力される。第3のFIFOメモリ212及び第4のFIFOメモリ213の出力データは、バンクBK0〜BK3に書き込まれる。
図14(A)、(B)、図15(A)、(B)、図16(A)、(B)、図17(A)、(B)、図18(A)、(B)において、かっこ内の数字はサイクル番号を示す。各ステージでは、512個のデータを32個のデータに16サイクル分割する。すなわち、各ステージは、16サイクルで処理される。各サイクルでは、32個のデータが処理される。
図14(A)は、FFTの第1〜第5のステージにおいてメモリコントローラ206がバンクBK0〜BK3から第1のFIFOメモリ208及び第2のFIFOメモリ209に読み出すアドレスを示す図であり、図13の第1のFIFOメモリ208及び第2のFIFOメモリ209に読み出されるデータをそれぞれ図13と同じハッチで示す。第1のサイクルでは、メモリコントローラ206は、バンクBK0の「0」のアドレスから、0番目〜15番目のデータを読み出して第1のFIFOメモリ208に出力し、バンクBK0の「256」のアドレスから、256番目〜271番目のデータを読み出して第2のFIFOメモリ209に出力する。第2のサイクルでは、メモリコントローラ206は、バンクBK1の「16」のアドレスから、16番目〜31番目のデータを読み出して第1のFIFOメモリ208に出力し、バンクBK1の「272」のアドレスから、272番目〜287番目のデータを読み出して第2のFIFOメモリ209に出力する。
図14(B)は、FFTの第1〜第5のステージにおいてメモリコントローラ206が第3のFIFOメモリ212及び第4のFIFOメモリ213からバンクBK0〜BK3に書き込むアドレスを示す図であり、図13の第3のFIFOメモリ212及び第4のFIFOメモリ213に書き込まれるデータをそれぞれ図13と同じハッチで示す。第1のサイクルでは、メモリコントローラ206は、第3のFIFOメモリ212が出力する0番目〜15番目のデータをバンクBK0の「0」のアドレスに書き込み、第4のFIFOメモリ213が出力する16番目〜31番目のデータをバンクBK1の「16」のアドレスに書き込む。第2のサイクルでは、メモリコントローラ206は、第3のFIFOメモリ212が出力する32番目〜47番目のデータをバンクBK2の「32」のアドレスに書き込み、第4のFIFOメモリ213が出力する48番目〜63番目のデータをバンクBK3の「48」のアドレスに書き込む。
以上のように、第1〜第5のステージでは、スイッチ211がデータの位置の入れ替えを行うので、メモリコントローラ206は、データの位置の入れ替えを行わない。
図15(A)は、FFTの第6のステージにおいてメモリコントローラ206がバンクBK0〜BK3から第1のFIFOメモリ208及び第2のFIFOメモリ209に読み出すアドレスを示す図であり、図13の第1のFIFOメモリ208及び第2のFIFOメモリ209に読み出されるデータをそれぞれ図13と同じハッチで示す。図15(A)は図14(A)と同じであり、第6のステージでは、メモリコントローラ206は、第1〜第5のステージと同じ読み出しを行う。
図15(B)は、FFTの第6のステージにおいてメモリコントローラ206が第3のFIFOメモリ212及び第4のFIFOメモリ213からバンクBK0〜BK3に書き込むアドレスを示す図であり、図13の第3のFIFOメモリ212及び第4のFIFOメモリ213に書き込まれるデータをそれぞれ図13と同じハッチで示す。第1のサイクルでは、メモリコントローラ206は、第3のFIFOメモリ212が出力する0番目〜15番目のデータをバンクBK0の「0」のアドレスに書き込み、第4のFIFOメモリ213が出力する32番目〜47番目のデータをバンクBK2の「32」のアドレスに書き込む。第2のサイクルでは、メモリコントローラ206は、第3のFIFOメモリ212が出力する16番目〜31番目のデータをバンクBK1の「16」のアドレスに書き込み、第4のFIFOメモリ213が出力する48番目〜63番目のデータをバンクBK3の「48」のアドレスに書き込む。図15(B)の書き込みにより、データの位置の入れ替えが行われ、次の第7のステージのバタフライ演算器EX1〜EX16の入力データの位置が決まる。これにより、図1の入力スイッチ122が不要になる。
図16(A)は、FFTの第7のステージにおいてメモリコントローラ206がバンクBK0〜BK3から第1のFIFOメモリ208及び第2のFIFOメモリ209に読み出すアドレスを示す図であり、図13の第1のFIFOメモリ208及び第2のFIFOメモリ209に読み出されるデータをそれぞれ図13と同じハッチで示す。図16(A)は図14(A)と同じであり、第7のステージでは、メモリコントローラ206は、第1〜第5のステージと同じ読み出しを行う。
図16(B)は、FFTの第7のステージにおいてメモリコントローラ206が第3のFIFOメモリ212及び第4のFIFOメモリ213からバンクBK0〜BK3に書き込むアドレスを示す図であり、図13の第3のFIFOメモリ212及び第4のFIFOメモリ213に書き込まれるデータをそれぞれ図13と同じハッチで示す。第1のサイクルでは、メモリコントローラ206は、第3のFIFOメモリ212が出力する0番目〜15番目のデータをバンクBK0の「0」のアドレスに書き込み、第4のFIFOメモリ213が出力する64番目〜79番目のデータをバンクBK0の「64」のアドレスに書き込む。第2のサイクルでは、メモリコントローラ206は、第3のFIFOメモリ212が出力する16番目〜31番目のデータをバンクBK1の「16」のアドレスに書き込み、第4のFIFOメモリ213が出力する80番目〜95番目のデータをバンクBK1の「80」のアドレスに書き込む。図16(B)の書き込みにより、データの位置の入れ替えが行われ、次の第8のステージのバタフライ演算器EX1〜EX16の入力データの位置が決まる。
図17(A)は、FFTの第8のステージにおいてメモリコントローラ206がバンクBK0〜BK3から第1のFIFOメモリ208及び第2のFIFOメモリ209に読み出すアドレスを示す図であり、図13の第1のFIFOメモリ208及び第2のFIFOメモリ209に読み出されるデータをそれぞれ図13と同じハッチで示す。図17(A)は図14(A)と同じであり、第8のステージでは、メモリコントローラ206は、第1〜第5のステージと同じ読み出しを行う。
図17(B)は、FFTの第8のステージにおいてメモリコントローラ206が第3のFIFOメモリ212及び第4のFIFOメモリ213からバンクBK0〜BK3に書き込むアドレスを示す図であり、図13の第3のFIFOメモリ212及び第4のFIFOメモリ213に書き込まれるデータをそれぞれ図13と同じハッチで示す。第1のサイクルでは、メモリコントローラ206は、第3のFIFOメモリ212が出力する0番目〜15番目のデータをバンクBK0の「0」のアドレスに書き込み、第4のFIFOメモリ213が出力する128番目〜143番目のデータをバンクBK0の「128」のアドレスに書き込む。第2のサイクルでは、メモリコントローラ206は、第3のFIFOメモリ212が出力する16番目〜31番目のデータをバンクBK1の「16」のアドレスに書き込み、第4のFIFOメモリ213が出力する144番目〜159番目のデータをバンクBK1の「144」のアドレスに書き込む。図17(B)の書き込みにより、データの位置の入れ替えが行われ、次の第9のステージのバタフライ演算器EX1〜EX16の入力データの位置が決まる。
図18(A)は、FFTの第9のステージにおいてメモリコントローラ206がバンクBK0〜BK3から第1のFIFOメモリ208及び第2のFIFOメモリ209に読み出すアドレスを示す図であり、図13の第1のFIFOメモリ208及び第2のFIFOメモリ209に読み出されるデータをそれぞれ図13と同じハッチで示す。図18(A)は図14(A)と同じであり、第9のステージでは、メモリコントローラ206は、第1〜第5のステージと同じ読み出しを行う。
図18(B)は、FFTの第9のステージにおいてメモリコントローラ206が第3のFIFOメモリ212及び第4のFIFOメモリ213からバンクBK0〜BK3に書き込むアドレスを示す図であり、図13の第3のFIFOメモリ212及び第4のFIFOメモリ213に書き込まれるデータをそれぞれ図13と同じハッチで示す。第1のサイクルでは、メモリコントローラ206は、第3のFIFOメモリ212が出力する0番目〜15番目のデータをバンクBK0の「0」のアドレスに書き込み、第4のFIFOメモリ213が出力する256番目〜271番目のデータをバンクBK0の「256」のアドレスに書き込む。第2のサイクルでは、メモリコントローラ206は、第3のFIFOメモリ212が出力する16番目〜31番目のデータをバンクBK1の「16」のアドレスに書き込み、第4のFIFOメモリ213が出力する272番目〜287番目のデータをバンクBK1の「272」のアドレスに書き込む。図18(B)の書き込みにより、データの位置の入れ替えが行われ、FFTの最終データの位置が決まる。
以上のように、第1〜第5のステージでは、スイッチ211により、データの位置の入れ替えを行い、第6〜第9のステージでは、メモリコントローラ206の書き込みにより、データの位置の入れ替えを行う。これにより、図1の入力スイッチ122が不要になり、面積を小さくすることができる。
スイッチ211は、複数のバタフライ演算器EX1〜EX16の第1及び第2の出力端子のデータを入力し、FFTの各ステージに応じて、入力したデータの位置を入れ替えて第3のFIFOメモリ212及び第4のFIFOメモリ213に出力する。
メモリコントローラ206は、FFTの各ステージに応じて、第3のFIFOメモリ212及び第4のFIFOメモリ213の出力データをメモリ207の異なるアドレスに書き込む。
FFTデータ数(例えば512)が1サイクルのデータ数(例えば32)より多い場合には、上記のように、一部のステージでは、スイッチ211により、データの位置の入れ替えを行い、他部のステージでは、メモリコントローラ206の書き込みにより、データの位置の入れ替えを行う。
また、FFTデータ数が1サイクルのデータ数以下である場合には、上記の第1〜第5のステージのように、すべてのステージで、スイッチ211により、データの位置の入れ替えを行う。
本実施形態による行列演算及びFFTアクセラレータ200は、小面積で行列演算及び高速フーリエ変換を行うことができる。
また、コントローラ201は、プログラムを実行することにより上記の処理を行うコンピュータであってもよい。すなわち、本実施形態は、コンピュータがプログラムを実行することによって実現することもできる。また、上記のプログラムを記録したコンピュータ読み取り可能な記録媒体及び上記のプログラム等のコンピュータプログラムプロダクトも本発明の実施形態として適用することができる。記録媒体としては、例えばフレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、磁気テープ、不揮発性のメモリカード、ROM等を用いることができる。
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
200 行列演算及びFFTアクセラレータ
201 コントローラ
202 入力バッファ
203 メモリ
204 演算部
205 出力バッファ
206 メモリコントローラ
207 メモリ
208 第1のFIFOメモリ
209 第2のFIFOメモリ
210 ALU
211 スイッチ
212 第3のFIFOメモリ
213 第4のFIFOメモリ

Claims (8)

  1. データを記憶するメモリと、
    データの演算を行う演算部と、
    前記メモリに記憶されているデータを前記演算部の入力端子に出力し、前記演算部の出力端子のデータを前記メモリに書き込むメモリコントローラと、
    行列演算処理命令が入力されると、前記演算部が行列演算を行うように制御し、高速フーリエ変換が複数のステージの処理に分割された複数の高速フーリエ変換ステージ処理命令が入力されると、前記演算部が前記高速フーリエ変換処理をステージ単位で行うように制御するコントローラとを有し、
    前記コントローラは、前記演算部が前記高速フーリエ変換のあるステージの処理を実行している最中に前記行列演算処理命令が入力された場合に、前記演算部が実行している前記高速フーリエ変換のステージの処理が終了すると、前記演算部に前記行列演算処理命令に対応する行列演算処理を実行させ、前記演算部が前記行列演算処理を終了すると、前記終了した高速フーリエ変換のステージの次のステージの処理を前記演算部に実行させる処理装置。
  2. さらに、前記メモリコントローラを介して前記メモリからデータが入力され、前記演算部の第1の入力端子にデータを出力する第1のファーストインファーストアウトメモリと、
    前記メモリコントローラを介して前記メモリからデータが入力され、前記演算部の第2の入力端子にデータを出力する第2のファーストインファーストアウトメモリと、
    前記演算部の第1の出力端子のデータが入力され、前記メモリコントローラを介して前記メモリにデータを出力する第3のファーストインファーストアウトメモリと、
    前記演算部の第2の出力端子のデータが入力され、前記メモリコントローラを介して前記メモリにデータを出力する第4のファーストインファーストアウトメモリとを有することを特徴とする請求項1記載の処理装置。
  3. 前記メモリコントローラは、前記高速フーリエ変換の1個のステージのデータを複数のデータの組みに分割し、前記分割された複数のデータの組みを順に前記メモリから前記第1及び第2のファーストインファーストアウトメモリに出力することを特徴とする請求項2記載の処理装置。
  4. さらに、前記演算部の前記第1及び第2の出力端子のデータを入力し、前記高速フーリエ変換の各ステージに応じて、前記入力したデータの位置を入れ替えて前記第3及び第4のファーストインファーストアウトメモリに出力するスイッチを有することを特徴とする請求項2又は3記載の処理装置。
  5. 前記スイッチは、前記演算部の出力データを入力し、前記行列演算命令に応じて、前記演算部の出力データを選択し、前記選択したデータを出力することを特徴とする請求項4記載の処理装置。
  6. 前記メモリコントローラは、前記高速フーリエ変換の各ステージに応じて、前記第3及び第4のファーストインファーストアウトメモリの出力データを前記メモリの異なるアドレスに書き込むことを特徴とする請求項2〜5のいずれか1項に記載の処理装置。
  7. データを記憶するメモリと、
    データの演算を行う演算部と、
    前記メモリに記憶されているデータを前記演算部の入力端子に出力し、前記演算部の出力端子のデータを前記メモリに書き込むメモリコントローラと、
    行列演算処理命令が入力されると、前記演算部が行列演算を行うように制御し、高速フーリエ変換が複数のステージの処理に分割された複数の高速フーリエ変換ステージ処理命令が入力されると、前記演算部が前記高速フーリエ変換処理をステージ単位で行うように制御するコントローラとを有する処理装置の処理方法であって、
    前記演算部が前記高速フーリエ変換のあるステージの処理を実行している最中に前記行列演算処理命令が入力された場合に、前記演算部が実行している前記高速フーリエ変換のステージの処理が終了すると、前記演算部が前記行列演算処理命令に対応する行列演算処理を実行し、
    前記演算部が前記行列演算処理を終了すると、前記終了した高速フーリエ変換のステージの次のステージの処理を前記演算部が実行する処理装置の処理方法。
  8. データを記憶するメモリと、
    データの演算を行う演算部と、
    前記メモリに記憶されているデータを前記演算部の入力端子に出力し、前記演算部の出力端子のデータを前記メモリに書き込むメモリコントローラとを有する処理装置を制御するコンピュータに実行させるプログラムであって、
    行列演算処理命令が入力されると、前記演算部が行列演算を行うように制御し、高速フーリエ変換が複数のステージの処理に分割された複数の高速フーリエ変換ステージ処理命令が入力されると、前記演算部が前記高速フーリエ変換処理をステージ単位で行うように制御する処理をコンピュータに実行させるプログラムであって、
    前記演算部が前記高速フーリエ変換のあるステージの処理を実行している最中に前記行列演算処理命令が入力された場合に、前記演算部が実行している前記高速フーリエ変換のステージの処理が終了すると、前記演算部に前記行列演算処理命令に対応する行列演算処理を実行させ、
    前記演算部が前記行列演算処理を終了すると、前記終了した高速フーリエ変換のステージの次のステージの処理を前記演算部に実行させる、
    処理をコンピュータに実行させるプログラム。
JP2014169482A 2014-08-22 2014-08-22 処理装置、処理装置の処理方法及びプログラム Pending JP2016045703A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014169482A JP2016045703A (ja) 2014-08-22 2014-08-22 処理装置、処理装置の処理方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014169482A JP2016045703A (ja) 2014-08-22 2014-08-22 処理装置、処理装置の処理方法及びプログラム

Publications (1)

Publication Number Publication Date
JP2016045703A true JP2016045703A (ja) 2016-04-04

Family

ID=55636219

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014169482A Pending JP2016045703A (ja) 2014-08-22 2014-08-22 処理装置、処理装置の処理方法及びプログラム

Country Status (1)

Country Link
JP (1) JP2016045703A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190025919A (ko) * 2016-07-01 2019-03-12 구글 엘엘씨 2차원 실행 레인 어레이 및 2차원 시프트 레지스터를 갖는 이미지 프로세서에 대한 블록 연산
WO2023037882A1 (ja) * 2021-09-09 2023-03-16 ローム株式会社 機械学習装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02210538A (ja) * 1988-10-05 1990-08-21 United Technol Corp <Utc> 集積回路と演算処理システム
JP2000285105A (ja) * 1999-03-11 2000-10-13 Hitachi Ltd 行列ベクトル乗算命令を用いて高速フーリエ変換を実行するための方法及びシステム
JP2003016051A (ja) * 2001-06-29 2003-01-17 Nec Corp 複素ベクトル演算プロセッサ

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02210538A (ja) * 1988-10-05 1990-08-21 United Technol Corp <Utc> 集積回路と演算処理システム
JP2000285105A (ja) * 1999-03-11 2000-10-13 Hitachi Ltd 行列ベクトル乗算命令を用いて高速フーリエ変換を実行するための方法及びシステム
JP2003016051A (ja) * 2001-06-29 2003-01-17 Nec Corp 複素ベクトル演算プロセッサ

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190025919A (ko) * 2016-07-01 2019-03-12 구글 엘엘씨 2차원 실행 레인 어레이 및 2차원 시프트 레지스터를 갖는 이미지 프로세서에 대한 블록 연산
KR102190318B1 (ko) * 2016-07-01 2020-12-11 구글 엘엘씨 2차원 실행 레인 어레이 및 2차원 시프트 레지스터를 갖는 이미지 프로세서에 대한 블록 연산
US11196953B2 (en) 2016-07-01 2021-12-07 Google Llc Block operations for an image processor having a two-dimensional execution lane array and a two-dimensional shift register
WO2023037882A1 (ja) * 2021-09-09 2023-03-16 ローム株式会社 機械学習装置

Similar Documents

Publication Publication Date Title
CN110678840B (zh) 张量寄存器文件
US20180107630A1 (en) Processor and method for executing matrix multiplication operation on processor
CN110678841B (zh) 张量处理器指令集架构
CN109240746B (zh) 一种用于执行矩阵乘运算的装置和方法
CN111310904A (zh) 一种用于执行卷积神经网络训练的装置和方法
EP1586991A2 (en) Processor with plurality of register banks
US20160098276A1 (en) Operand conflict resolution for reduced port general purpose register
JPWO2016024508A1 (ja) マルチプロセッサ装置
JP2016045703A (ja) 処理装置、処理装置の処理方法及びプログラム
CN109389213B (zh) 存储装置及方法、数据处理装置及方法、电子装置
JP6094356B2 (ja) 演算処理装置
KR20150035161A (ko) 그래픽 처리 장치 및 이의 동작 방법
TWI508023B (zh) 平行及向量式吉伯特-詹森-科西(gilbert-johnson-keerthi)圖形處理技術
WO2019141160A1 (zh) 一种数据处理的方法及装置
CN111860772B (zh) 一种用于执行人工神经网络pooling运算的装置和方法
US11409840B2 (en) Dynamically adaptable arrays for vector and matrix operations
JP2008102599A (ja) プロセッサ
JP6292324B2 (ja) 演算処理装置
JP4896839B2 (ja) マイクロプロセッサおよびデータ処理方法
CN104767544A (zh) 一种实现解扰解扩的方法和矢量运算器
JP5491113B2 (ja) ベクトル処理装置、ベクトル処理方法、およびプログラム
JP7157457B2 (ja) データ処理装置
CN112699525B (zh) 一种瑞利信道仿真器的计算方法、设备
CN102622318B (zh) 一种存储器控制电路及其控制的向量数据寻址方法
JP5358315B2 (ja) 並列計算装置

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20161227

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20161227

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170511

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20171208

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20171219

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20180619