以下、図面を用いて実施形態を説明する。
図1は、演算処理装置の一実施形態を示す。図1に示す演算処理装置100は、演算を実行する演算実行部1、レジスタ部2、転置バッファ3、バッファ入力制御部4およびバッファ出力制御部5を有する。レジスタ部2は、第1レジスタ部の一例であり、転置バッファ3は、第1バッファ部の一例であり、バッファ入力制御部4は、第1制御部の一例であり、バッファ出力制御部5は、第2制御部の一例である。
レジスタ部2は、演算実行部1の演算に使用されるデータが格納される複数のレジスタファイルRF(RF0、RF1、RF2、RF3)を有する。転置バッファ3は、レジスタ部2に格納されるデータを、レジスタ部2に格納される前に保持する。図1に示す例では、転置バッファ3は、矩形で示す16個のデータを保持する保持領域を有する。
バッファ入力制御部4は、データ線DL1を介して演算処理装置100がメモリ200から順次受信する複数のデータ群を、受信した順に転置バッファ3に格納する。バッファ出力制御部5は、複数のデータ群の各々が転置バッファ3に格納される毎に、転置バッファ3に格納されたデータ群に含まれるデータを、データ線DL2を介してレジスタ部2に順次出力する。なお、演算処理装置100は、データ線DL1上のデータを、転置バッファ3を介さずにレジスタ部2に直接転送するバイパス経路BYPSを有する。バイパス経路BYPSは、図2および図4で説明するように、メモリ200から読み出されるデータの配列を転置せずにレジスタ部2に格納する場合に使用される。
特に限定されないが、メモリ200から受信する複数のデータ群は、例えば、画像データである。演算実行部1は、例えば、プログラムを実行することで、レジスタ部2に保持された画像データに対してDCT変換を実行し、あるいは、レジスタ部2に保持された画像データに対して各種フィルタリング処理を実行する。例えば、演算処理装置100は、ディープラーニング用のAI(Artificial Intelligence)プロセッサである。あるいは、演算処理装置100は、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、GPU(Graphics Processing Unit)またはGPGPU(General Purpose computing on GPU)等のプロセッサである。なお、演算処理装置100は、プロセッサの代わりに画像処理等を実行するアクセラレータであってもよい。
図2は、図1に示す演算処理装置100の動作の一例を示す。すなわち、図2は、演算処理装置100の制御方法の一例を示す。図2において、サイクルは、例えば、クロックサイクルを示す。図2に示す例では、メモリ200は、複数のデータ(#0−#31)を保持する。データは、4つのデータ(例えば、#0、#1、#2、#3)を含むデータ群毎にメモリ200から読み出される。
バッファ入力制御部4は、メモリ200から読み出される各データ群を、データ線DL1を介して転置バッファ3に格納する。図2において、メモリ200に保持されるデータのうち太枠で囲まれた4つのデータと、データ線DL1に伝達されるデータのうち太枠で囲まれた4つのデータは、データ群を示す。
バッファ出力制御部5は、データ群毎に、データ群が転置バッファ3に格納されたサイクルの次のサイクルから4サイクル掛けて、転置バッファ3に格納されたデータ群に含まれる4つのデータを、レジスタファイルRF0−RF3のいずれかに順次格納する。すなわち、バッファ出力制御部5は、データ群の各々が転置バッファ3に格納される毎に、転置バッファ3に格納されたデータ群に含まれるデータを、データ線DL2を介してレジスタ部2に順次出力する。演算実行部1は、レジスタファイルRF0−RF3に分散して格納された4つのデータを使用して演算を実行する。
例えば、データ線DL2は、レジスタファイルRF0−RF3にそれぞれ対応するデータ線DL2[0]、DL2[1]、DL2[2]、DL2[3]を有する。図2において、データ線DL2に伝達されるデータのうち太枠で囲まれた4つのデータと、レジスタ部2に保持されるデータのうち太枠で囲まれた4つのデータは、演算実行部1が各演算に使用するデータの単位を示す。すなわち、演算実行部1は、データ#0、#4、#8、#12を使用して演算を実行し、データ#1、#5、#9、#13を使用して演算を実行する。また、演算実行部1は、データ#2、#6、#10、#14を使用して演算を実行し、データ#3、#7、#11、#15を使用して演算を実行する。
演算実行部1が各演算に使用する4つのデータの配列は、メモリ200から一度に読み出される4つのデータの配列と異なる。すなわち、バッファ入力制御部4およびバッファ出力制御部5は、メモリ200から読み出されて転置バッファ3に保持したデータを転置してレジスタ部2に格納する。
バッファ入力制御部4は、サイクル0からサイクル3を使用してデータ#0−#15を転置バッファ3に順次格納した後、サイクル4からサイクル7を使用してデータ#16−#31を転置バッファ3に順次格納する。例えば、データ群#16−#19は、転置バッファ3においてデータ群#0−#3が格納された保持領域に格納され、データ群#20−#23は、転置バッファ3においてデータ群#4−#7が格納された保持領域に格納される。データ群#24−#27は、転置バッファ3においてデータ群#8−#11が格納された保持領域に格納され、データ群#28−#31は、転置バッファ3においてデータ群#12−#15が格納された保持領域に格納される。
データ#3は、サイクル4に転置バッファ3から読み出され、データ#16は、サイクル4に転置バッファ3に格納される。このため、サイクル4においてデータ群#16−#19が転置バッファ3に格納されるとき、データ群#0−#3は、転置バッファ3からデータ線DL2[0]に読み出し済みである。したがって、データ群#0−#15の後にデータ群#16−#31を切れ目なく転送する場合にも、データ群#0−#3は、失われることなくレジスタファイルRF0−RF3に格納される。
サイクル5からサイクル7においても、サイクル4と同様に、新たなデータ群が転置バッファ3に格納される前に、既に転置バッファ3に保持されたデータ群は、転置バッファ3から読み出される。したがって、データ群が転置バッファ3に保持される毎に、データ群に含まれる複数のデータをレジスタ部2に順次格納することで、転置バッファ3に保持されたデータを上書きすることなく、転置するデータを連続して転置バッファ3に格納することができる。この結果、1つの転置バッファ3を利用して、複数のデータを転置し、転置したデータをレジスタ部2に連続して格納することができ、演算実行部1は、メモリ200から読み出されて転置されたデータを使用して、複数の演算を連続して実行することができる。
これに対して、16個のデータ#0−#15がサイクル0からサイクル3を使用して転置バッファ3に格納された後、サイクル4からサイクル7を使用して転置バッファ3からレジスタ部2に転送することでデータを転置する場合、以下の不具合が発生する。まず、データ#16−#19を転置バッファ3に格納するサイクル4において、データ#0、#4、#8、#12が転置バッファ3からレジスタ部2に転送される。この場合、サイクル0で転置バッファ3に保持されたデータ#1、#2、#3は、データ#17、#18、#19により上書きされ、レジスタ部2に転送される前に失われてしまう。データの消失を抑止するためには、例えば、2つの転置バッファ3が設けられ、16個のデータが、2つの転置バッファ3に交互に格納される。そして、一方の転置バッファ3にデータを格納するサイクル中に、他方の転置バッファ3からレジスタ部2にデータが転送される。
なお、データを転置せずに演算を実行する場合、図1に示したメモリ200から読み出されるデータは、バイパス経路BYPSを介してレジスタ部2に格納される。この場合、例えば、データ#0、#1、#2、#3は、レジスタファイルRF0−RF3にそれぞれ格納される。換言すれば、データ#0、#4、#8、#12は、レジスタファイルRF0に格納され、データ#1、#5、#9、#13は、レジスタファイルRF1に格納される。データ#2、#6、#10、#14は、レジスタファイルRF2に格納され、データ#3、#7、#11、#15は、レジスタファイルRF3に格納される。
図3は、図2に示すサイクル0からサイクル7における転置バッファ3の動作の一例を示す。すなわち、図3は、演算処理装置100の制御方法の一例を示す。図3において、折り曲げた矢印は、データが転置バッファ3の保持領域に書き込まれることを示す。太枠で示す保持領域は、データが読み出される保持領域を示し、右向きの矢印の先に付した符号RF0−RF3は、保持領域から読み出されたデータが格納されるレジスタファイルRF0−RF3を示す。
例えば、サイクル4では、データ#12、#9、#6、#3が転置バッファ3から読み出された後、データ#16、#17、#18、#19が転置バッファ3に書き込まれる。転置バッファ3に保持されたデータ#0、#1、#2、#3は、データ#16、#17、#18、#19の書き込みにより消失する。しかしながら、データ#0、#1、#2、#3は、サイクル1からサイクル4に掛けてレジスタファイルRF0−RF3に対して転送完了となるため問題は発生しない。
同様に、サイクル5では、データ#16、#13、#10、#7が転置バッファ3から読み出された後、データ#20、#21、#22、#23が転置バッファ3に書き込まれる。転置バッファ3に保持されたデータ#4、#5、#6、#7は、データ#20、#21、#22、#23の書き込みにより消失する。しかしながら、データ#4、#5、#6、#7は、サイクル2からサイクル5に掛けてレジスタファイルRF0−RF3に対して転送完了となるため、問題は発生しない。
図4は、図1に示す演算処理装置100の動作フローの一例を示す。すなわち、図4は、演算処理装置100の制御方法の一例を示す。まず、ステップS1において、演算処理装置100は、演算に使用するデータをメモリ200から読み出す。メモリ200からのデータの読み出しは、例えば、演算処理装置100によるロード命令に基づいて実行される。次に、ステップS2において、演算処理装置100は、データを転置するか否かを判定する。データを転置するか否かは、例えば、ロード命令のオペランドに含まれる転置フラグの値に基づいて判定される。データを転置する場合、動作はステップS3に移行され、データを転置しない場合、動作はステップS5に移行される。
ステップS3において、演算処理装置100は、メモリ200から読み出したデータを転置バッファ3に順次格納する。また、ステップS4において、演算処理装置100は、データを転置バッファ3に格納する毎に、サイクルをずらしながら、転置バッファ3に格納したデータを順次読み出し、レジスタファイルRF0−RF3に格納する。データは、転置バッファ3を介してレジスタ部2に格納される過程で転置される。なお、図2および図3に示したように、ステップS3、S4の動作は、並列に実行される。ステップS3、S4の後、動作はステップS6に移行される。
一方、データを転置しない場合、ステップS5において、演算処理装置100は、演算に使用するためにメモリ200から読み出したデータを、バイパス経路BYPSを介してレジスタファイルRF0−RF3に格納し、動作をステップS6に移行する。ステップS6において、演算処理装置100は、演算命令に基づいて、レジスタファイルRF0−RF3に格納されたデータを使用して演算を実行し、動作を終了する。なお、演算結果は、例えば、レジスタファイルRF0−RF3において、メモリ200からのデータが格納されない領域などのデータを書き込んでも問題ない領域に格納される。演算結果は、例えば、演算処理装置100によるストア命令の実行に基づいて、レジスタ部2からメモリ200に転送される。
以上、図1から図4に示す実施形態では、演算処理装置100は、データ群が転置バッファ3に保持される毎に、データ群に含まれる複数のデータをレジスタ部2に順次格納する。これにより、転置するデータが転置バッファ3に連続して供給される場合にも、データを失うことなくデータを転置し、転置したデータをレジスタ部2に格納することができる。したがって、演算実行部1は、メモリ200から読み出されて転置されたデータを使用して、複数の演算を連続して実行することができる。さらに、1つの転置バッファ3を使用して転置データを切れ目なく生成することができるため、転置バッファ3の回路規模の増大を抑制することができる。メモリ200から読み出したデータを、バイパス経路BYPSを介してレジスタ部2に転送することで、データを転置せずにレジスタファイルRF0−RF3に格納することができる。
図5は、演算処理装置の別の実施形態を示す。図5に示す演算処理装置110は、ディープラーニング用のAIプロセッサ、あるいは、CPU、DSP、GPUまたはGPGPU等のプロセッサである。なお、演算処理装置110は、アクセラレータであってもよい。
演算処理装置110は、複数のプロセッサコア120およびメモリコントローラ130を有する。なお、演算処理装置110は、単一のプロセッサコア120を有してもよい。各プロセッサコア120は、命令バッファ10、デコード部12、ステートマシン14、ロード/ストアエンジン16、転置部18、演算実行部20およびレジスタ部22を有する。
命令バッファ10は、メモリコントローラ130を介してメモリ210から読み出される命令を順次保持し、保持した命令をデコード部12に順次出力する。デコード部12は、命令バッファ10から転送される命令を解読し、解読した命令に含まれる命令コードおよびレジスタアドレス等をステートマシン14に出力する。
ステートマシン14は、命令を保持する複数のエントリを有する。ステートマシン14は、エントリに保持した命令の依存関係を判定し、判定した依存関係に基づいて、エントリに保持した命令の中から実行可能な命令を選択する。ステートマシン14は、選択した命令が演算命令の場合、選択した演算命令を演算実行部20に出力する。ステートマシン14は、選択した命令がメモリアクセス命令(ロード命令またはストア命令)の場合、選択したメモリアクセス命令をロード/ストアエンジン16に出力する。
ロード/ストアエンジン16は、ロード命令の受信に基づいて、メモリ210からデータを読み出す指示をメモリコントローラ130に出力する。ロード/ストアエンジン16は、メモリコントローラ130を介してメモリ210から読み出されるデータを受信し、受信したデータを、バリッド信号LVALIDとともにメモリバスMBを介して転置部18に出力する。
また、ロード/ストアエンジン16は、ストア命令の受信に基づいて、バリッド信号SVALIDを転置部18に出力し、転置部18を介してレジスタ部22から出力されるデータを、メモリバスMBを介して受信する。ロード/ストアエンジン16は、メモリバスMBを介して転置部18から受信したデータをメモリ210に書き込む指示をデータとともにメモリコントローラ130に出力する。
メモリコントローラ130は、プロセッサコア120に設けられる図示しないプログラムカウンタが生成するアドレスに基づいて、メモリ210から命令を読み出し、読み出した命令を命令バッファ10に出力する。メモリコントローラ130は、ロード/ストアエンジン16からの読み出し指示に基づいて、メモリ210からデータを読み出し、ロード/ストアエンジン16からの書き込み指示に基づいて、メモリ210にデータを書き込む。
転置部18は、ロード命令に基づいてロード/ストアエンジン16から出力されるデータ(ロードデータ)を、メモリバスMBを介して受信し、受信したデータを、レジスタバスRBを介してレジスタ部22に出力する。転置部18は、ストア命令に基づいてレジスタ部22から出力されるデータ(ストアデータ)を、レジスタバスRBを介して受信し、受信したデータを、メモリバスMBを介してロード/ストアエンジン16に出力する。転置部18の例は、図6から図11に示される。
演算実行部20は、複数の積和演算器24、複数の加算器26および複数の乗算器28を有する。各積和演算器24は、乗算器と加算器とを有し、乗算器で乗算した結果を加算器により加算する。各加算器26は、加算を実行する。各乗算器28は、乗算または除算を実行する。なお、積和演算器24、加算器26および乗算器28の数は、図5に示す例に限定されず、演算の種類も限定されない。積和演算器24、加算器26および乗算器28のそれぞれは、固定小数点数用でもよく、浮動小数点用でもよい。また、演算実行部20は、固定小数点数用と浮動小数点用の積和演算器24、加算器26および乗算器28をそれぞれ有してもよい。
レジスタ部22は、レジスタバスRBを介して転送されるデータおよび演算実行部20による演算結果を示すデータを保持する複数のレジスタファイルRF(RF0−RF7)を有する。レジスタファイルRF0−RF7の例は、図12および図13に示される。
図6は、図5に示す転置部18の一例を示す。転置部18は、データシフト制御部32A、32B、メモリ入力セレクタ部40、転置バッファ42、レジスタ出力セレクタ部44、クロスバースイッチ46、レジスタ入力セレクタ部48、転置バッファ50およびメモリ出力セレクタ部52を有する。データシフト制御部32Aは、バッファ入力制御部34Aと、複数のカウンタ38Aを含むバッファ出力制御部36Aとを有する。データシフト制御部32Bは、複数のカウンタ38Bを含むバッファ入力制御部34Bと、バッファ出力制御部36Bとを有する。
メモリ入力セレクタ部40は、第1セレクタ部の一例であり、メモリ出力セレクタ部52は、第4セレクタ部の一例である。バッファ入力制御部34Aおよびメモリ入力セレクタ部40は、第1制御部の一例であり、バッファ出力制御部36Aおよびレジスタ出力セレクタ部44は、第2制御部の一例である。バッファ入力制御部34Bおよびレジスタ入力セレクタ部48は、第3制御部の一例であり、バッファ出力制御部36Bおよびメモリ出力セレクタ部52は、第4制御部の一例である。転置バッファ42は、第1バッファ部の一例であり、転置バッファ50は、第2バッファ部の一例である。
バッファ入力制御部34Aは、図5に示したロード/ストアエンジン16から出力されるバリッド信号LVALIDに同期してイネーブル信号EN(EN0−EN7)のいずれかを出力する。また、バッファ入力制御部34Aは、イネーブル信号ENを出力する毎に、バッファ出力制御部36Aに転送開始信号TS1を出力する。ロード/ストアエンジン16は、複数のデータを含むデータ群を転置部18に出力する毎に、バリッド信号LVALIDを出力する。
バッファ入力制御部34Aは、ロード命令に対応して受信する複数のバリッド信号LVALIDに同期してイネーブル信号EN0−EN7を順次出力する。なお、以下では、説明を分かりやすくするため、1つのロード命令に対応して、8つのデータ群が転置部18に供給される例を説明するが、1つのロード命令に対応して、転置部18に供給されるデータ群の数は、”1”から”8”のいずれでもよい。例えば、各データ群は、256ビットである。バッファ入力制御部34Aが生成するイネーブル信号EN0−EN7の例は、図14に示される。
式(1)は、ロード命令ldの一例を示す。ロード命令ldは、オペランドにメモリアドレスmaddr、レジスタアドレスraddr、転送長lengthおよび転置フラグtransを含む。メモリアドレスmaddrは、データを読み出すメモリ210の先頭アドレスを示し、レジスタアドレスraddrは、データを書き込むレジスタファイルRFの先頭アドレスを示す。転送長lengthは、転送するデータの数(バイト数またはワード数)を示す。転置フラグtransは、メモリ210から読み出したデータを転置してレジスタ部22に書き込む場合、”1”に設定され、メモリ210から読み出したデータを転置せずにレジスタ部22に書き込む場合、”0”に設定される。以下では、説明を分かりやすくするために、レジスタアドレスraddrは、図12に示す各レジスタファイルRF0−RF7のどの位置に書くかを番号で示し、転送長lengthは、256バイトであるとする。
ld maddr raddr length trans ‥‥ (1)
バッファ出力制御部36Aは、バッファ入力制御部34Aから転送開始信号TS1を受け、カウンタ38Aを動作させ、カウンタ38Aが計数するカウンタ値に応じた選択信号SEL0−SEL7を出力する。選択信号SEL0−SEL7は、第1選択信号の一例であり、バッファ出力制御部36Aは、選択信号SEL0−SEL7を順次生成する第1信号生成部の一例である。
例えば、バッファ出力制御部36Aは、データ線D0−D7を制御するためカウンタ38Aを有する。カウンタ38Aは、転送開始信号TS1を受信すると計数を開始し、選択信号SEL0−SEL7をそれぞれ生成する。バッファ出力制御部36Aのカウンタ38Aが生成する選択信号SEL0−SEL7の例は、図15に示される。なお、選択信号SEL0−SEL7は、図5に示したレジスタ部22にも供給され、データをレジスタファイルRF0−RF7に格納する制御に使用される。
メモリ入力セレクタ部40は、メモリバスMBを介して受信する256ビットのデータを、イネーブル信号EN0−EN7に応じて8つのデータ線(256ビット)のいずれかに出力する。メモリバスMBは、8つのメモリバスMB0−MB7を有し、各メモリバスMB0−MB7は、32ビットである。メモリ入力セレクタ部40から8つのデータ線のいずれかに出力されたデータは、転置バッファ42に供給される。メモリ入力セレクタ部40の例は、図7に示され、メモリ入力セレクタ部40の動作の例は、図14に示される。
転置バッファ42は、ロード命令ldに基づいて、メモリ入力セレクタ部40を介して受信する2048ビットのデータを保持し、保持したデータを256ビットずつデータ線DL(DL0−DL7)に出力する。転置バッファ42の例は、図7に示される。ここで、データ線DL0は、データ線DL00−DL07を示し、データ線DL1は、データ線DL10−DL17を示し、データ線DL2は、データ線DL20−DL27を示し、データ線DL3は、データ線DL30−DL37を示す。データ線DL4は、データ線DL40−DL47を示し、データ線DL5は、データ線DL50−DL57を示し、データ線DL6は、データ線DL60−DL67を示し、データ線DL7は、データ線DL70−DL77を示す。各データ線DL00−DL77は、32ビットである。
レジスタ出力セレクタ部44は、データ線DL0−DL7を介して受信する2048ビットのデータを、選択信号SEL0−SEL7に応じて32ビットずつ選択し、選択したデータを32ビットのデータ線D(D0−D7)のいずれかに出力する。選択信号SEL0−SEL7は、データ線DL0−DL7の選択にそれぞれ使用される。例えば、選択信号SEL0−SEL7の各々は、4ビットであり、最上位の1ビットが有効な場合、下位の3ビットの論理に応じてデータ線DL00−DL77のいずれかが選択される。例えば、選択信号SEL0の値(”0”から”7”)に応じて、DL00−DL07のいずれかが選択され、選択信号SEL1の値(”0”から”7”)に応じて、DL10−DL17のいずれかが選択される。レジスタ出力セレクタ部44の例は、図8に示され、レジスタ出力セレクタ部44の動作の例は、図15に示される。
クロスバースイッチ46は、データ線D(D0−D7)の各々をレジスタバスRB(RB0−RB7)のいずれかに接続し、または、バイパス経路BYPSをレジスタバスRBに接続する。クロスバースイッチ46は、レジスタバスRB(すなわち、レジスタファイルRF)を、レジスタ出力セレクタ部44の出力、レジスタ入力セレクタ部48の入力、またはバイパス経路BYPSに接続する切替部の一例である。なお、以下では、説明を分かりやすくするために、クロスバースイッチ46は、データ線D0−D7をレジスタバスRB0−RB7にそれぞれ接続し、接続を変更しないものとする。すなわち、各データ線Dは、末尾の数値が同じレジスタバスRBに接続される。
なお、レジスタ出力セレクタ部44とレジスタ入力セレクタ部48とは、互いに異なるデータ線D0−D7を使用してクロスバースイッチ46に接続される。この場合、クロスバースイッチ46は、ロード命令ldに基づいて、レジスタ出力セレクタ部44に接続されたデータ線D0−D7をレジスタバスRB0−RB7に接続する。また、クロスバースイッチ46は、ストア命令stに基づいて、レジスタバスRB0−RB7をレジスタ入力セレクタ部48に接続されたデータ線D0−D7に接続する。
バイパス経路BYPSは、図1と同様に、ロード命令ldに基づいてメモリ210から読み出されたデータを転置せずにレジスタ部22に格納する場合に使用される。また、バイパス経路BYPSは、レジスタ部22に保持された演算結果等を示すデータを、ストア命令に基づいて転置せずにメモリ210に格納する場合に使用される。バイパス経路BYPSを使用することで、メモリ210から読み出したデータを転置せずにレジスタ部22に格納することができ、レジスタ部22から読み出したデータを転置せずにメモリ210に格納することができる。
バッファ入力制御部34Bは、図5に示したロード/ストアエンジン16から出力されるバリッド信号SVALIDを受けると、カウンタ38Bを動作させ、カウンタ38Bが計数するカウンタ値に応じたイネーブル信号EN00−EN77を出力する。イネーブル信号EN00−EN77は、第2選択信号の一例であり、バッファ入力制御部34Bは、イネーブル信号EN00−EN77を生成する第2信号生成部の一例である。
例えば、バッファ入力制御部34Bは、データ線D0−D7に対応してカウンタ38Bを有する。カウンタ38Bは、バッファ入力制御部34Bによる制御に基づいて、各レジスタファイルRF0−RF7からデータ線Dにデータが出力されるタイミングのため計数を開始し、イネーブル信号EN00−EN77を生成する。バッファ入力制御部34Bのカウンタ38Bが生成するイネーブル信号EN00−EN77の例は、図17に示される。なお、イネーブル信号EN00−EN77は、図5に示したレジスタ部22にも供給され、レジスタファイルRF0−RF7からデータを読み出す制御に使用される。
図5に示したロード/ストアエンジン16は、ストア命令を実行する場合にレジスタファイルRF0−RF7からのデータの読み出しサイクルに合わせて、バリッド信号SVALIDを出力する。また、バッファ入力制御部34Bは、転置バッファ50に最初のデータ群が揃ったことに基づいて、バッファ出力制御部36Bに転送開始信号TS2を出力する。なお、以下では、説明を分かりやすくするため、1つのストア命令に対応して、転置バッファ50が8つのデータ群を保持する例を説明するが、1つのストア命令に対応して、転置バッファ50が保持するデータ群の数は、”1”から”8”のいずれでもよい。
式(2)は、ストア命令stの一例を示す。ストア命令stは、オペランドにレジスタアドレスraddr、メモリアドレスmaddr、転送長lengthおよび転置フラグtransを含む。レジスタアドレスraddrは、データを読み出すレジスタファイルRFの先頭アドレスを示し、メモリアドレスmaddrは、データを書き込むメモリ210の先頭アドレスを示す。転送長lengthは、転送するデータの数(バイト数またはワード数)を示す。転置フラグtransは、レジスタ部22から読み出したデータを転置してメモリ210に書き込む場合、”1”に設定され、レジスタ部22から読み出したデータを転置せずにメモリ210に書き込む場合、”0”に設定される。以下では、説明を分かりやすくするために、ロード命令ldと同様に、レジスタアドレスraddrは、図12に示す各レジスタファイルRF0−RF7のどの位置に格納するかの番号を示し、転送長lengthは、256バイトであるとする。
st raddr maddr length trans ‥‥ (2)
バッファ出力制御部36Bは、バッファ入力制御部34Bから転送開始信号TS2を受信した場合、選択信号SELを順次出力する。例えば、選択信号SELは、サイクル毎に”0”から”7”まで変化する。なお、バッファ出力制御部36Bは、カウンタを使用して選択信号SELを生成してもよい。選択信号SELは、第3選択信号の一例であり、バッファ出力制御部36Bは、選択信号SELを生成する第3信号生成部の一例である。バッファ出力制御部36Bが生成する選択信号SELの例は、図18に示される。
レジスタ入力セレクタ部48は、データ線D0−D7を介してレジスタ部22から受信するデータを、イネーブル信号EN00−EN77に応じて32ビットずつ選択し、選択したデータを、データ線DO(DO0−DO7)を介して転置バッファ50に出力する。各データ線DO0−DO7は、256ビット(32ビットが8つ)である。レジスタ入力セレクタ部48の例は、図9に示され、レジスタ入力セレクタ部48の動作の例は、図17に示される。
転置バッファ50は、ストア命令stに基づいて、レジスタ入力セレクタ部48を介して順次受信する2048ビットのデータを保持し、保持したデータを256ビットずつデータ線DS(DS0−DS7)に出力する。転置バッファ50の例は、図10に示される。ここで、データ線DS0は、データ線DS00−DS07を示し、データ線DS1は、データ線DS10−DS17を示し、データ線DS2は、データ線DS20−DS27を示し、データ線DS3は、データ線DS30−DS37を示す。データ線DS4は、データ線DS40−DS47を示し、データ線DS5は、データ線DS50−DS57を示し、データ線DS6は、データ線DS60−DS67を示し、データ線DS7は、データ線DS70−DS77を示す。各データ線DS00−DS77は、32ビットである。
メモリ出力セレクタ部52は、転置バッファ50からデータ線DS0−DS7にそれぞれ出力される256ビットのデータいずれかを、選択信号SELに応じて選択し、選択したデータをメモリバスMB(MB0−MB7)に出力する。例えば、選択信号SELは、4ビットであり、最上位の1ビットが有効な場合、下位の3ビットの論理に応じてデータ線DS0−DS7のいずれかが選択される。
図7は、図6に示すメモリ入力セレクタ部40および転置バッファ42の一例を示す。転置バッファ42は、メモリ入力セレクタ部40を介して供給される256ビットのデータをそれぞれ保持する8つの列ユニットCUL(CUL0−CUL7)を有する。列ユニットCULは、第1保持部の一例である。各列ユニットCULは、8つの制御単位に分かれた保持回路FFを有し、保持回路FFは、32ビットのデータをそれぞれ保持し、保持したデータをデータ線DLに出力する。例えば、1つの制御単位の各保持回路FFは、データを保持する32個のフリップフロップ等を含む。各保持回路FFおよび各データ線DLの末尾に付した2桁の数字のうち、上位の値は、列ユニットCULの番号を示し、下位の値は、データが供給されるメモリバスMBの番号を示す。
メモリ入力セレクタ部40は、メモリバスMB上の256ビットのデータを、イネーブル信号EN0−EN7の論理に応じて、列ユニットCULのいずれかに出力する論理回路を有する。イネーブル信号ENの末尾に付した数字は、列ユニットCULの番号を示す。図7に示す例では、メモリバスMBにデータが転送される毎に、イネーブル信号EN0−EN7のいずれか1つが論理1に設定される。メモリバスMB上のデータは、イネーブル信号EN0が論理1の場合、列ユニットCUL0に格納され、イネーブル信号EN1が論理1の場合、列ユニットCUL1に格納される。なお、各列ユニットCULの各保持回路FFは、対応するイネーブル信号ENが論理1の場合、図示しないクロック信号に同期してデータをラッチする。
図8は、図6に示すレジスタ出力セレクタ部44の一例を示す。レジスタ出力セレクタ部44は、図7に示した列ユニットCUL0−CUL7に対応して8つのセレクタ440−447を有する。セレクタ440−447は、第2セレクタ部の一例である。各セレクタ440−447の末尾の数字は、データ線DLを介して接続される列ユニットCULの番号と、受信する選択信号SEL0−SEL7の番号と、データを出力するデータ線D0−D7の番号とを示す。例えば、セレクタ440は、選択信号SEL0の下位3ビットの値に応じて、8つのデータ線DL00−DL07にそれぞれ供給される32ビットのデータのいずれかを選択し、選択したデータをデータ線D0に出力する。なお、選択信号SEL0の最上位ビットの論理が無効状態を示す場合、セレクタ440は、データ線D0へのデータの出力を停止し、データ線D0は、0を出力する。他のセレクタ441−447は、セレクタ440と同様に動作する。
図9は、図6に示すレジスタ入力セレクタ部48の一例を示す。レジスタ入力セレクタ部48は、図6に示すデータ線D0−D7のそれぞれに接続された8つのセレクタ480−487を有する。セレクタ480−487は、第3セレクタ部の一例である。各セレクタ480−487の末尾の数字は、データ線D0−D7の番号を示す。例えば、セレクタ480は、イネーブル信号EN00−EN07の論理に応じて、データ線D0から受ける32ビットのデータをデータ線DO00−DO07のいずれかに出力する。イネーブル信号EN00−EN07のいずれか1つは、データ線D0にデータが供給される毎に論理1に設定される。他のセレクタ481−487は、セレクタ480と同様に動作する。なお、データ線DOの末尾の2桁の数字は、図10に示す転置バッファ50に設けられる保持回路FFの番号を示す。
図10は、図6に示す転置バッファ50の一例を示す。転置バッファ50は、データ線DOを介して供給される256ビットのデータをそれぞれ保持する8つの列ユニットCUS(CUS0−CUS7)を有する。列ユニットCUSは、第2保持部の一例である。各列ユニットCUSは、図7に示した列ユニットCULと同様に、8つの保持回路FFを有し、8つの保持回路FFは、32ビットのデータをそれぞれ保持し、保持したデータをデータ線DSに出力する。なお、転置バッファ50の保持回路FFの番号は、図7に示した転置バッファ42の保持回路FFの番号と重複するが、転置バッファ50の保持回路FFと図7に示した転置バッファ42の保持回路FFとは、物理的に別なものである。
列ユニットCUS0−CUS7の各保持回路FF00−FF77は、末尾の番号が同じイネーブル信号EN00−EN77が論理1の場合、図示しないクロック信号に同期してデータをラッチする。例えば、保持回路FF00は、イネーブル信号EN00が論理1の場合にデータをラッチし、保持回路FF10は、イネーブル信号EN10が論理1の場合にデータをラッチする。図10において、各保持回路FF、各データ線DOおよび各データ線DSの末尾に付した2桁の数字のうち、上位の値は、列ユニットCUSの番号を示し、下位の値は、データを出力するメモリバスMBの番号を示す。
図11は、図6に示すメモリ出力セレクタ部52の一例を示す。メモリ出力セレクタ部52は、選択信号SELの下位3ビットの値に応じて、データ線DSに供給される256ビットのデータのいずれかを選択し、選択したデータをメモリバスMBに出力する。例えば、メモリ出力セレクタ部52は、選択信号SELの下位3ビットが”2”を示す場合、データ線DS20−DS27に供給される256ビットのデータをメモリバスMBに出力する。メモリ出力セレクタ部52は、選択信号SELの下位3ビットが”6”を示す場合、データ線DS60−DS67に供給される256ビットのデータをメモリバスMBに出力する。なお、選択信号SELの最上位ビットの論理が無効状態を示す場合、メモリ出力セレクタ部52は、メモリバスMBへのデータの出力を停止し、メモリバスMBは、0レベルを出力する。
図12は、図5に示すレジスタ部22の一例を示す。レジスタ部22は、レジスタバスRB0−RB7にそれぞれ接続されるレジスタファイルRF0−RF7を有する。各レジスタファイルRF0−RF7は、32ビットのデータを記憶する複数の記憶領域を有する。図12において、横方向に並ぶ32ビットの8つの記憶領域により、ワードWL(WL0−WL7:図13に示すワード線WLに対応)が構築される。レジスタファイルRF0−RF7の内部構造の例は、図13に示される。
ロード命令ldに基づくデータのレジスタ部22への書き込みは、例えば、ワードWL毎に実行され、ストア命令stに基づくレジスタ部22からのデータの読み出しは、ワードWL毎に実行される。また、図5に示した演算実行部20は、例えば、ワードWLのいずれか1つに格納されたデータ毎に演算を実行する。これは、演算実行部20は、レジスタバスRBを介してワードWL毎にデータを読み出すためである。この時、レジスタバスRB0−RB7から、それぞれ1つのデータを同時に取り出す事が可能である。
それゆえ、一度に8つのデータを取り出す場合、レジスタバスRB0−RB7から1つずつのデータを取り出す必要がある。つまり、一つのレジスタバスRBから複数のワードWLのデータは取り出せない。このようなケースでは、データを転置してレジスタファイルRFに格納することで、同時に演算できるデータをうまくレジスタファイルRFに配置するケースがある。
図13は、図12に示すレジスタファイルRF0−RF7の一例を示す。レジスタファイルRF0−RF7は、互いに同じ構造のため、以下では、レジスタファイルRF0について説明する。
レジスタファイルRF0は、マトリックス状に配置されたSRAM(Static Random Access Memory)のメモリセルMC、ワードデコーダWDEC、読み書き制御回路RWC、ライトアンプWAおよびリードアンプRAを有する。図13の横方向に配列されるメモリセルMCは、1024本のワード線WL(WL0、WL1、WL2、...、WL1023)のいずれかに接続され、図13の縦方向に並ぶメモリセルMCは、32組のビット線対BL、/BL(BL0、/BL0、BL1、/BL1、...、BL31、/BL31)のいずれかに接続される。レジスタファイルRF0−RF7において、番号が互いに同じワード線WLに接続されるメモリセルMCは、同じワードWLに属する。なお、ワード線WLの数は、1024本に限定されない。
ワードデコーダWDECは、ロード命令ldまたはストア命令st等で指定されるレジスタアドレスraddrと、選択信号SEL0またはイネーブル信号EN00−EN07とに基づいて、ワード線WLのいずれかを駆動(選択)する。ここで、レジスタアドレスraddrは、アクセスを開始するワード線WLの番号を示し、選択信号SEL0の値およびイネーブル信号EN00−EN07は、アクセスを開始するワード線WLからの相対位置を示す。
例えば、レジスタアドレスraddrがワード線WL0を示し、選択信号SEL0が”1”を示す場合、ワードデコーダWDECは、ワード線WL1を選択する。レジスタアドレスraddrがワード線WL1を示し、選択信号SEL0が”1”を示す場合、ワードデコーダWDECは、ワード線WL2を選択する。レジスタアドレスraddrがワード線WL0を示し、イネーブル信号EN01を受信した場合、ワードデコーダWDECは、ワード線WL1を選択する。レジスタアドレスraddrがワード線WL1を示し、イネーブル信号EN01を受信した場合、ワードデコーダWDECは、ワード線WL2を選択する。他のレジスタファイルRF1−RF7のワードデコーダWDECは、受信する選択信号SEL0−SEL7とイネーブル信号EN00−EN77が異なることを除き、レジスタファイルRF0のワードデコーダWDECと同様に動作する。
互いに異なる選択信号SEL0−SEL7をレジスタファイルRF0−RF7にそれぞれ供給することで、図15に示すように、転置されたデータをレジスタファイルRF0−RF7の各ワード線WLに接続されるメモリセルMCに書き込むタイミングを独立に制御することができる。また、互いに異なるイネーブル信号EN00−EN77をレジスタファイルRF0−RF7にそれぞれ供給することで、図17に示すように、レジスタファイルRF0−RF7の各ワード線WLに接続されるメモリセルMCからデータを読み出すタイミングを独立に制御することができる。したがって、レジスタファイルRF0−RF7の動作を制御する制御信号を生成する回路をワード線WLに接続されるメモリセルMC、選択信号SEL0−SEL7およびイネーブル信号EN00−EN77を使用しない場合に比べて、簡易にすることができる。
メモリセルMCは、一対のインバータの一方の出力を他方の入力に接続し、他方の出力を一方の入力に接続した記憶ノードMNと、記憶ノードMNをビット線BL、/BLにそれぞれ接続する転送トランジスタT1、T2を有する。転送トランジスタT1、T2は、メモリセルMCに接続されるワード線WLが駆動された場合(例えば、ハイレベル)、記憶ノードMNの一端をビット線BLに接続し、記憶ノードMNの他端をビット線/BLに接続する。そして、メモリセルMCにデータを書き込む書き込み動作では、ビット線BL、/BL上の相補のデータの論理に基づいて、記憶ノードMNに論理0または論理1が書き込まれる。メモリセルMCからデータを読み出す読み出し動作では、記憶ノードMNが記憶する論理とその逆の論理がビット線BL、/BLにそれぞれ読み出される。
読み書き制御回路RWCは、選択信号SEL0の受信に基づいてライトイネーブル信号WRENを出力し、各イネーブル信号EN00−EN07の受信に基づいてリードイネーブル信号RDENを出力する。他のレジスタファイルRF1−RF7の読み書き制御回路RWCは、受信する選択信号SEL0−SEL7とイネーブル信号EN00−EN77が異なることを除き、レジスタファイルRF0の読み書き制御回路RWCと同様に動作する。
ライトアンプWAは、ライトイネーブル信号WRENに基づいて、レジスタバスRB0から受信する32ビットのデータを相補のデータとして32個のビット線対BL、/BLにそれぞれ出力する。リードアンプRAは、リードイネーブル信号RDENに基づいて、メモリセルMCから32個のビット線対BL、/BL上に出力された32ビットのデータをレジスタバスRB0に出力する。なお、各ビット線対BL、/BLにビット線対BL、/BLの電圧差を増幅するセンスアンプが接続されてもよい。
図14は、図7に示すメモリ入力セレクタ部40の動作の一例を示す。すなわち、図14は、演算処理装置110の制御方法の一例を示す。図14に示す例では、2つのロード命令ldに基づいて、メモリ210から2048ビットのデータ#0−#63が2回連続して読み出される。すなわち、各ロード命令ldでは、式(1)に示す転送長lengthは、256バイトに指定される。図5に示したロード/ストアエンジン16は、メモリ210から読み出した2048ビットのデータ#0−#63のうちの256ビット(データ群)を、サイクル毎に順次出力する動作を2回繰り返す(サイクル0−サイクル7と、サイクル8−サイクル15)。データ#0−#63の各々は、32ビットである。また、ロード/ストアエンジン16は、ステートマシン14からの指示に基づいて、図示しないバリッド信号LVALIDを各データ群とともに出力する。なお、サイクルは、クロックサイクルを示す。
バッファ入力制御部34Aは、バリッド信号LVALIDを受信する毎にイネーブル信号EN0−EN7のいずれかを順次出力し、バリッド信号LVALIDを受信すると転送開始信号TS1を出力する。メモリ入力セレクタ部40は、メモリバスMB(MB0−MB7)を介して順次受信する256ビットのデータを、イネーブル信号EN0−EN7のそれぞれに同期して、列ユニットCUL0−CUL7のいずれかに出力する。そして、8サイクルを使用して、8つのデータ群である2048ビットのデータ#0−#63が、データ群毎に列ユニットCUL0−CUL7に格納される。
データ#0−#63が格納される保持回路FFの番号は、図14において、メモリバスMB0−MB7に伝達されるデータ#0−#63の上側または下側に示される。例えば、最初のデータ群#0−#7は、列ユニットCUL0に格納され、2番目のデータ群#8−#15は、列ユニットCUL1に格納され、3番目のデータ群#16−#23は、列ユニットCUL2に格納される。
図15は、図8に示すレジスタ出力セレクタ部44の動作の一例を示す。すなわち、図15は、演算処理装置110の制御方法の一例を示す。図15に示す動作は、図14に示す動作と並行して実行される。すなわち、図15は、2つのロード命令ldに基づいて実行されるレジスタ出力セレクタ部44の動作を示す。
図6に示したバッファ出力制御部36Aは、バッファ入力制御部34Aから転送開始信号TS1(図示せず)を受信したことに基づいて、”0”から”7”を示す選択信号SEL0をサイクル毎に図8に示すセレクタ440に出力する。バッファ出力制御部36Aは、2番目の転送開始信号TS1の受信に基づいて、”0”から”7”を示す選択信号SEL1をサイクル毎に図8に示すセレクタ441に出力する。さらに、バッファ出力制御部36Aは、転送開始信号TS1によって起動されたカウンタ38Aに基づいて、”0”から”7”を示す選択信号SEL2−SEL7のそれぞれを図8に示すセレクタ442−447に順次出力する。この後、バッファ出力制御部36Aは、サイクル9からサイクル16に掛けて、順次受信する転送開始信号TS1に基づいて、”0”から”7”を示す選択信号SEL0−SEL7をセレクタ440−447に順次出力する動作を開始する。
セレクタ440は、列ユニットCUL0から出力されるデータ#0−#7を選択信号SEL0の値に基づいて順次選択し、選択したデータ#0−#7をデータ線D0に出力する。セレクタ441は、列ユニットCUL1から出力されるデータ#8−#15を選択信号SEL1の値に基づいて順次選択し、選択したデータ#8−#15をデータ線D1に出力する。同様に、セレクタ442−447は、列ユニットCUL2−CUL7から出力されるデータを対応する選択信号SEL2−SEL7の値に基づいて順次選択し、選択したデータをデータ線D2−D7のいずれかに出力する。
データ線D0−D7は、図6に示すクロスバースイッチ46により、レジスタバスRB0−RB7にそれぞれ接続される。また、図13で説明したように、各レジスタファイルRF0−RF7は、選択信号SEL0−SEL7に基づいてライトイネーブル信号WRENを生成する。このため、各データ線D0−D7に出力されたデータは、各レジスタバスRB0−RB7を介して、各レジスタファイルRF0−RF7に格納される。各レジスタファイルRF0−RF7において、32ビットのデータが格納される領域は、ロード命令ldに含まれるレジスタアドレスraddrと、選択信号SEL0−SEL7の値とに基づいて決められる。なお、例えば、1番目と2番目のロード命令ldに含まれるレジスタアドレスraddrは、互いに相違するため、データは互いに異なるワード線WLに接続されるメモリセルMCに格納される。
図14に示したように、2番目のロード命令ldに基づいて供給される2048ビットのデータのうち、最初のデータ#0−#7は、サイクル8において列ユニットCUL0に格納される。列ユニットCUL0−CUL7の各保持回路FFにおいて、データの書き込みは、データの読み出し後に実行される。つまり、最初に供給された2048ビットのデータのうち、データ#0−#7は、サイクル8までにレジスタファイルRF0に転送済みであるため、データの上書きは発生しない。同様に、サイクル9において、2番目のデータ#8−#15が列ユニットCUL1に格納される前に、列ユニットCUL1が保持する1番目のデータ#8−#15は、レジスタファイルRF1に転送済みであるため、データの上書きは発生しない。他の列ユニットCULにおいても、2番目のデータが格納される前に、1番目のデータは、レジスタファイルRFに転送済みである。
このため、複数のロード命令ldに基づいて供給されるデータを、連続して切れ目なく転置バッファ42に格納する場合にも、データを失うことなくデータを転置し、レジスタファイルRF0−RF7に格納することができる。換言すれば、1つのロード命令ldに対応する2048ビットのデータを保持する1つの転置バッファ42を使用して、複数のロード命令ldに対応して連続して供給されるデータを転置することができる。
複数のロード命令ldに対応するデータを1つの転置バッファ42を使用して転置する動作は、セレクタ440−447にそれぞれ対応する選択信号SEL0−SES7の値を互いにずらして生成することで可能になる。これにより、選択信号SEL0−SES7を受けて動作するセレクタ440−447は、列ユニットCUL0−CUL7にそれぞれ保持されたデータ群を、サイクルをずらして選択することができる。
データ群に含まれるデータを、各データ群を転置バッファ42に保持したサイクルの次のサイクルから順次出力することで、データをずらして出力する場合にも、最小限のサイクル数でデータをレジスタファイルRF0−RF7に格納することができる。例えば、各データ群は、転置バッファ42に保持された後、8サイクルでレジスタファイルRFへのデータの転送を完了することができる。また、複数のロード命令ldに対応してデータを連続してレジスタ部22に格納する場合のデータ転送レートは、後述する図22に示す2つの転置バッファ42a、42bを有する転置部18Cによるデータ転送レートと同じにすることができる。
図16は、図5に示すプロセッサコア120においてロード命令ldの実行時の動作の一例を示す。例えば、メモリ210には、データ#0−#63が記憶され、太枠で示す単位でデータ#0−#7、#8−#15、#16−#23、#24−#31、#32−#39、#40−#47、#48−#55、#56−#63がメモリ210から順次読み出される。
ロード命令ldのオペランドに記述された転置フラグtransが、”1”の場合、メモリ210から読み出された2048ビットのデータは、転置バッファ42を経由してレジスタ部22に格納される。この場合、図16の右上に示すように、レジスタ部22には、メモリ210に記憶されたデータの配列を転置したデータが保持される。すなわち、レジスタ部22には、メモリ210から読み出される太枠の単位のデータ群が、レジスタファイルRF0−RF7にそれぞれ格納される。転置バッファ42から供給されるデータが格納されるレジスタ部22は、第1レジスタ部の一例であり、転置バッファ42から供給されるデータが格納されるワードWLを含むレジスタファイルRF0−RF7は、第1レジスタファイルの一例である。
一方、ロード命令ldのオペランドに記述された転置フラグtransが、”0”の場合、メモリ210から読み出された2048ビットのデータは、転置バッファ42を経由せずにレジスタ部22に格納される。この場合、図16の右下に示すように、レジスタ部22には、メモリ210に記憶されたデータの配列を維持したデータが保持される。すなわち、レジスタ部22には、メモリ210から読み出される太枠の単位のデータ群が、1つのワードWLのレジスタファイルRF0−RF7に分散して保持される。
レジスタ部22に格納されたデータは、例えば、演算命令に基づいて実行される演算に使用される。演算命令では、レジスタファイルRF0−RF7にそれぞれ保持された32ビットのデータが、8つの演算器にそれぞれ転送され、レジスタファイルRF0−RF7の他のワードWLに保持された32ビットのデータとの間で演算が実行される。データが2048ビットの場合、8回の演算が実行される。各演算の実行結果は、レジスタファイルRF0−RF7の他のワードWLに格納される。
8つの演算器による演算は、レジスタファイルRF0−RF7にそれぞれ保持された256ビットのデータを使用して実行される。このため、8回の演算の対象データのそれぞれが#0−#7、#8−#15、...、#56−#63の場合、メモリ210から読み出されるデータは転置せずにレジスタファイルRF0−RF7に格納される。一方、演算の対象データが#0、#8、#16、#24、#32、#40、#48、#56等の場合、メモリ210から読み出されるデータは転置バッファ42により転置され、レジスタファイルRF0−RF7に格納される。
図17は、図9に示すレジスタ入力セレクタ部48の動作の一例を示す。すなわち、図17は、演算処理装置110の制御方法の一例を示す。図17に示す例では、2つのストア命令stに基づいて、レジスタ部22から2048ビットのデータ#0−#63が2回連続して読み出される。以下では、最初のストア命令stに基づく2048ビットのデータ#0−#63のレジスタ部22からの読み出しについて説明される。2番目のストア命令stに基づく2048ビットのデータ#0−#63のレジスタ部22からの読み出しも、以下と同様に実行される。
まず、図5に示したロード/ストアエンジン16は、ステートマシン14からの指示に基づいて、図示しないバリッド信号SVALIDを、転置部18が最初のデータを受信するタイミングで出力する。バッファ入力制御部34Bは、最初のバリッド信号SVALIDの受信に基づいて、イネーブル信号EN00−EN07を順次出力し、バリッド信号SVALIDの受信に基づいて、イネーブル信号EN10−EN17を順次出力する。
以下、バッファ入力制御部34Bは、バリッド信号SVALIDを受信する毎に、イネーブル信号EN00−EN07、EN10−EN17、EN20−EN27、EN30−EN37、EN40−EN47、EN50−EN57、EN60−EN67、EN70−EN77を順次出力する。また、バッファ入力制御部34Bは、イネーブル信号EN07とともに、転送開始信号TS2(図6)をバッファ出力制御部36Bに出力する。
イネーブル信号EN00−EN77は、図13で説明したように、レジスタファイルRF0−RF7にも供給され、レジスタファイルRF0−RF7の所定のワードWL(図12)からデータを読み出す動作にも使用される。そして、レジスタファイルRF0−RF7の所定のワードWLから読み出されたデータは、レジスタバスRB0−RB7を介してデータ線D0−D7に供給される。レジスタファイルRF0−RF7において、ストア命令stに基づいてデータが読み出されるワードWLは、第2レジスタファイルの一例であり、第2レジスタファイルを含むレジスタ部22は、第2レジスタ部の一例である。
レジスタ入力セレクタ部48は、データ線D0に供給されるデータ#0−#7を、イネーブル信号EN00−EN07に基づいて転置バッファ50の保持回路FF00−FF07に順次格納する。レジスタ入力セレクタ部48は、データ線D1に供給されるデータ#8−#15を、イネーブル信号EN10−EN17に基づいて転置バッファ50の保持回路FF10−FF17に順次格納する。同様に、レジスタ入力セレクタ部48は、データ線D2−D7にそれぞれ供給されるデータ#16−#63を、イネーブル信号EN20−EN77に基づいて転置バッファ50の保持回路FF30−FF77に順次格納する。データ#0−#63が格納される保持回路FFの番号は、図17において、データ線D0−D7に伝達されるデータ#0−#63の上側または下側に示される。
図18は、図11に示すメモリ出力セレクタ部52の動作の一例を示す。すなわち、図18は、演算処理装置110の制御方法の一例を示す。図18に示す動作は、図17に示す動作と並行して実行される。図6に示すバッファ出力制御部36Bは、バッファ入力制御部34Bから転送開始信号TS2(図示せず)を受信したことに基づいて、”0”から”7”を示す選択信号SELを順次出力する。なお、バッファ出力制御部36Bは、選択信号SELを生成するためのカウンタを有してもよい。
メモリ出力セレクタ部52は、選択信号SEL0に基づいて、転置バッファ50の保持回路FF00−FF07に保持されたデータ#0−#7をメモリバスMB(MB0−MB7)に出力する。メモリ出力セレクタ部52は、選択信号SEL1に基づいて、転置バッファ50の保持回路FF10−FF17に保持されたデータ#8−#15をメモリバスMBに出力する。同様に、メモリ出力セレクタ部52は、選択信号SEL2−SEL7に基づいて、転置バッファ50の保持回路FF20−FF77に保持されたデータ#16−#63をメモリバスMBに順次出力する。データ#0−#63が格納される保持回路FFの番号は、図18において、メモリバスMB0−MB7に伝達されるデータ#0−#63の上側または下側に示される。そして、転置バッファ50に保持されたデータ#0−#63は、メモリコントローラ130により、メモリ210に書き込まれる。
図17では、転置バッファ50の各保持回路FFにおいて、データの書き込みは、データの読み出し後に実行される。このため、最初のストア命令stに基づいてレジスタ部22から順次読み出されたデータ群#0−#7は、2番目のストア命令stに基づいて、サイクル8でレジスタ部22からデータ#0が読み出される前に、転置バッファ50から出力済みである。同様に、最初のストア命令stに基づいてレジスタ部22から順次読み出されたデータ群#8−#15は、2番目のストア命令stに基づいて、サイクル9でレジスタ部22からデータ#8が読み出される前に、転置バッファ50から出力済みである。最初のストア命令stに基づいてレジスタ部22から順次読み出された他のデータ群についても、2番目のストア命令stに基づいて、レジスタ部22からデータが読み出される前に、転置バッファ50から出力済みである。
したがって、複数のストア命令stに基づいて、レジスタ部22からデータを切れ目なく読み出して転置する場合にも、読み出したデータを失うことなく、転置バッファ50を介してメモリ210に書き込むことができる。換言すれば、1つのストア命令stに対応する2048ビットのデータを保持する1つの転置バッファ50を使用して、複数のストア命令stに対応してレジスタ部22から連続して読み出されるデータを転置することができる。
複数のストア命令stに対応するデータを1つの転置バッファ50を使用して転置する動作は、セレクタ480−487にそれぞれ対応するイネーブル信号EN00−EN77を互いにずらして生成することで可能になる。これにより、イネーブル信号EN00−EN77を受けて動作するセレクタ480−487は、レジスタ部22からサイクルをずらして読み出されるデータを選択することができる。
また、メモリ出力セレクタ部52は、各データ群に含まれるデータの転置バッファ50への格納が完了したサイクルの次のサイクルでデータ群をメモリバスMBに出力する。これにより、レジスタ部22からサイクルをずらしてデータを順次読み出す場合にも、最小限のサイクル数でデータをメモリ210に書き込むことができる。例えば、各データ群は、データ群の最初のデータがレジスタ部22から読み出されてから8サイクル後にメモリ210に書き込むことができる。換言すれば、複数のストア命令stに対応してデータを連続してレジスタ部22から読み出す場合のデータ転送レートは、後述する図22に示す2つの転置バッファ50a、50bを有する転置部18Cによるデータ転送レートと同じにすることができる。
なお、レジスタファイルRF0−RF7から読み出されるデータの配列を転置してメモリ210に格納する動作は、図16の転置バッファ42を転置バッファ50に置き換え、メモリ210とレジスタ部22間の矢印の向きを逆にすることで説明可能である。
図19は、図5に示す演算処理装置の動作フローの一例を示す。すなわち、図19は、演算処理装置110の制御方法の一例を示す。図19に示すフローは、図5に示すデコード部12による命令のデコードに基づいて開始される。まず、ステップS10において、デコード部12がロード命令ldをデコードした場合、動作はステップS12に移行され、デコード部12がロード命令ldをデコードしない場合、動作はステップS14に移行される。
ステップS12において、図5に示すプロセッサコア120は、ロード命令ldを実行し、動作を終了する。ステップS12によるロード命令ldの実行フローは、図20に示される。ステップS14において、デコード部12が演算命令をデコードした場合、動作はステップS16に移行され、デコード部12が演算命令をデコードしない場合、動作はステップS18に移行される。ステップS16において、図5に示すプロセッサコア120は、演算命令を実行し、動作を終了する。
ステップS18において、デコード部12がストア命令stをデコードした場合、動作はステップS20に移行され、デコード部12がストア命令stをデコードしない場合、動作は終了する。ステップS20において、図5に示すプロセッサコア120は、ストア命令stを実行し、動作を終了する。ステップS20によるストア命令stの実行フローは、図21に示される。
図20は、図19のステップS12で実行されるロード命令ldの動作フローの一例を示す。まず、ステップS120において、図5に示すロード/ストアエンジン16は、ロードするデータをメモリ210から読み出す。ステップS120の後、動作は、ステップS122に移行される。
ステップS122において、データを転置する場合、動作は、ステップS124に移行され、データを転置しない場合、動作は、ステップS128に移行される。ステップS124において、図6に示す転置部18は、メモリ210から読み出したデータを転置バッファ42に順次格納する。ステップS126において、転置部18は、データを転置バッファ42に格納する毎に、サイクルをずらしながら、転置バッファ42に格納したデータを順次読み出し、レジスタファイルRF0−RF7に格納する。データは、転置バッファ42を介してレジスタ部22に格納される過程で転置される。なお、図14および図15に示したように、ステップS124、S126の動作は、並列に実行される。ステップS124、S126の後、動作は終了する。
一方、ステップS128において、転置部18は、演算に使用するためにメモリ210から読み出したデータを、バイパス経路BYPSを介してレジスタファイルRF0−RF7に格納し、動作を終了する。
図21は、図19のステップS20で実行されるストア命令stの動作フローの一例を示す。まず、ステップS200において、データを転置する場合、動作は、ステップS202に移行され、データを転置しない場合、動作は、ステップS206に移行される。ステップS202において、図6に示す転置部18は、レジスタファイルRF0−RF7において読み出し対象のワードWLが保持するデータを、サイクルをずらしながら順次読み出し、読み出したデータを転置バッファ50に格納する。
また、ステップS204において、転置部18は、転置バッファ50にデータ群が揃う毎に、データ群をメモリ210に出力する。なお、図17および図18に示したように、ステップS202、S204の動作は、並列に実行される。ステップS202、S204の後、動作は終了する。
一方、ステップS206において、転置部18は、レジスタファイルRF0−RF7において読み出し対象のワードWLが保持するデータを読み出し、読み出したデータを、バイパス経路BYPSを介してメモリ210から書き込み、動作を終了する。
図22は、転置部の他の例を示す。図6と同じ要素については、同じ符号を付し、詳細な説明は省略する。例えば、図22に示す転置部18Cは、図5に示す転置部18の代わりにプロセッサコア120に搭載される。
転置部18Cは、メモリバスMBを介してメモリ210(図5)から読み出される2048ビットのデータを転置するために保持する2つの転置バッファ42a、42bを有する。また、転置部18Cは、レジスタファイルRF0−RF7から読み出される2048ビットのデータを転置するために保持する2つの転置バッファ50a、50bを有する。
さらに、転置部18Cは、データシフト制御部32D、32E、メモリ入力セレクタ部40Ca、40Cb、レジスタ出力セレクタ部44Ca、44Cb、クロスバースイッチ46、レジスタ入力セレクタ部48Ca、48Cbおよびメモリ出力セレクタ部52Ca、52Cbを有する。データシフト制御部32Dは、バッファ入力制御部34Dと、カウンタ38Dを含むバッファ出力制御部36Dとを有する。データシフト制御部32Eは、カウンタ38Eを含むバッファ入力制御部34Eと、バッファ出力制御部36Eとを有する。
バッファ入力制御部34Dは、イネーブル信号EN(ENa0−ENa7、ENb0−ENb7)のいずれかを出力することを除き、図6に示すバッファ入力制御部34Aと同様の機能を有する。また、バッファ入力制御部34Dは、イネーブル信号ENa0の出力から7サイクル後に転送開始信号TS1aを出力し、イネーブル信号ENb0の出力から7サイクル後に転送開始信号TS1bを出力する。
バッファ出力制御部36Dは、選択信号SEL0−SEL7の代わりに選択信号SELda、SELdbを出力することを除き、図6に示すバッファ出力制御部36Aと同様の機能を有する。バッファ出力制御部36Dは、転送開始信号TS1aの受信に基づいて、4ビットの選択信号SELdaの下位3ビットをカウンタ38Dに生成させる。また、バッファ出力制御部36Dは、転送開始信号TS1bの受信に基づいて、4ビットの選択信号SELdbの下位3ビットをカウンタ38Dに生成させる。各選択信号SELda、SELdbは、最上位の1ビットが有効な場合、下位の3ビットが有効になる。
メモリ入力セレクタ部40Ca、40Cbの各々は、図7に示すメモリ入力セレクタ部40と同じ構成を有する。メモリ入力セレクタ部40Caは、メモリバスMBを介して受信する256ビットのデータを、イネーブル信号ENa0−ENa7に応じて8つのデータ線(256ビット)のいずれかに出力する。メモリ入力セレクタ部40Cbは、メモリバスMBを介して受信する256ビットのデータを、イネーブル信号ENb0−ENb7に応じて8つのデータ線(256ビット)のいずれかに出力する。イネーブル信号ENa0−ENa7は、データを転置バッファ42aに出力するために使用され、イネーブル信号ENb0−ENb7は、データを転置バッファ42bに出力するために使用される。メモリ入力セレクタ部40Ca、40Cbの動作の例は、図26に示される。
転置バッファ42a、42bの各々は、図7に示す転置バッファ42と同じ構成を有する。すなわち、転置バッファ42aは、図7に示す転置バッファ42と同様に、64個の保持回路FFa(FFa00−FFa07、FFa10−FFa17、FFa20−FFa27、...、FFa70−FFa77)を有する。転置バッファ42bは、図7に示す転置バッファ42と同様に、64個の保持回路FFb(FFb00−FFb07、FFb10−FFb17、FFb20−FFb27、...、FFb70−FFb77)を有する。
転置バッファ42aは、保持した2048ビットのデータをデータ線DLa(DLa00−DLa77)に出力し、転置バッファ42bは、保持した2048ビットのデータをデータ線DLb(DLb00−DLb77)に出力する。データ線DLa00−DLa77は、図7に示すDL00−DL77にそれぞれ対応し、データ線DLb00−DLb77は、図7に示すDL00−DL77にそれぞれ対応する。各データ線DLa00−DLa77および各データ線DLb00−DLb77は、32ビットであり、例えば、データ線DLa00−DLa07は、256ビットである。例えば、データ線DLa00−DLa07は、転置バッファ42aの列ユニットCUL0に接続され、データ線DLb70−DLb77は、転置バッファ42bの列ユニットCUL7に接続される。
レジスタ出力セレクタ部44Caは、データ線DLa(DLa00−DLa77)を介して受信するデータを、選択信号SELdaに応じてデータ線D0−D7に出力する。レジスタ出力セレクタ部44Cbは、データ線DLb(DLb00−DLb77)を介して受信するデータを、選択信号SELdbに応じてデータ線D0−D7に出力する。レジスタ出力セレクタ部44Ca、44Cbの例は、図23に示される。
バッファ入力制御部34Eは、イネーブル信号EN00−EN77の代わりにイネーブル信号ENa00−ENa77、ENb00−ENb77を出力することを除き、図6に示すバッファ入力制御部34Bと同様の機能を有する。バッファ入力制御部34Eは、図5に示したロード/ストアエンジン16から出力されるバリッド信号SVALIDを受ける毎に、カウンタ38Eを動作させる。そして、バッファ入力制御部34Eは、カウンタ38Eが計数するカウンタ値に応じたイネーブル信号ENa00−ENa77、ENb00−ENb77を出力する。
また、バッファ入力制御部34Eは、カウンタ38Eを有する。バッファ入力制御部34Eは、各レジスタファイルRF0−RF7からデータ線Dにデータが出力されるタイミングに合わせて、カウンタ38Eに計数を開始させる。そして、カウンタ38Eにイネーブル信号ENa00−ENa77またはイネーブル信号ENb00−ENb77を生成させる。カウンタ38Eが生成するイネーブル信号ENa00−ENa77、ENb00−ENb77の例は、図28に示される。
レジスタ入力セレクタ部48Caは、イネーブル信号ENa00−ENa77に応じて、クロスバースイッチ46を介してデータ線D0−D7に供給されるデータを、データ線DOa0−DOa7を介して転置バッファ50aに出力する。レジスタ入力セレクタ部48Cbは、イネーブル信号ENb00−ENb77に応じて、クロスバースイッチ46を介してデータ線D0−D7に供給されるデータを、データ線DOb0−DOb7を介して転置バッファ50bに出力する。レジスタ入力セレクタ部48Ca、48Cbの例は、図24に示される。
転置バッファ50a、50bの各々は、図10に示す転置バッファ50と同じ構成を有する。転置バッファ50aは、データ線DOa0−DOa7に供給される2048ビットのデータを保持し、保持したデータをデータ線DSa(DSa00−DSa77)に出力する。転置バッファ50bは、データ線DOb0−DOb7に供給される2048ビットのデータを保持し、保持したデータをデータ線DSb(DSb00−DSb77)に出力する。
メモリ出力セレクタ部52Caは、データ線DSaを介して受信するデータを、選択信号SELeaに応じて選択し、選択したデータをメモリバスMBに出力する。メモリ出力セレクタ部52Cbは、データ線DSbを介して受信するデータを、選択信号SELebに応じて選択し、選択したデータをメモリバスMBに出力する。メモリ出力セレクタ部52Ca、52Cbの例は、図25に示される。
図23は、図22に示すレジスタ出力セレクタ部44Ca、44Cbの一例を示す。レジスタ出力セレクタ部44Ca、44Cbの各々は、選択信号SEL0−SEL7の代わりに共通の選択信号SELdaまたは共通の選択信号SELdbを受けることを除き、図8に示すレジスタ出力セレクタ部44と同じ構成を有する。レジスタ出力セレクタ部44Caは、データ線DO−D7のそれぞれにデータを出力する8つのセレクタを有する。8つのセレクタは、選択信号SELdaの下位3ビットの値が”0”から”7”の場合、選択信号SELdaの値に応じて、転置バッファ50aの各列ユニットCUL0−CUL7が保持する256ビットのデータから32ビットを選択してデータ線D0−D7のいずれかに出力する。レジスタ出力セレクタ部44Cbは、データ線DO−D7のそれぞれにデータを出力する8つのセレクタを有する。8つのセレクタは、選択信号SELdbの下位3ビットの値が”0”から”7”の場合、選択信号SELdbの値に応じて、転置バッファ50bの各列ユニットCUL0−CUL7が保持する256ビットのデータから32ビットを選択してデータ線D0−D7のいずれかに出力する。
図24は、図22に示すレジスタ入力セレクタ部48Ca、48Cbの一例を示す。レジスタ入力セレクタ部48Ca、48Cbの各々は、イネーブル信号ENの代わりにイネーブル信号ENaまたはイネーブル信号ENbを受けることを除き、図9に示すレジスタ入力セレクタ部48と同じ構成を有する。レジスタ入力セレクタ部48Caは、データ線D(DO−D7)をデータ線DOa(DOa0−DOa7)に接続する8つのセレクタ480Ca、481Ca、...、487Caを有する。各セレクタ480Ca、481Ca、...、487Caは、イネーブル信号ENaに応じてデータ線をデータ線DOaに接続する。レジスタ入力セレクタ部48Cbは、データ線D(DO−D7)をデータ線DOa(DOb0−DOb7)に接続する8つのセレクタ480Cb、481Cb、...、487Cbを有する。各セレクタ480Cb、481Cb、...、487Cbは、イネーブル信号ENbに応じてデータ線をデータ線DObに接続する。
図25は、図22に示すメモリ出力セレクタ部52Ca、52Cbの一例を示す。メモリ出力セレクタ部52Ca、52Cbの各々は、選択信号SELの代わりに選択信号SELea、SELebを受けることを除き、図11に示すメモリ出力セレクタ部52Cと同じ構成である。メモリ出力セレクタ部52Caは、選択信号SELeaの下位3ビットが”2”を示す場合、データ線DSa20−DSa27に供給される256ビットのデータをメモリバスMBに出力する。メモリ出力セレクタ部52Cbは、選択信号SELebの下位3ビットが”6”を示す場合、データ線DSb60−DSb67に供給される256ビットのデータをメモリバスMBに出力する。なお、選択信号SELea、SELebの最上位ビットの論理が無効状態を示す場合、メモリ出力セレクタ部52Ca、52Cbは、メモリバスMBへのデータの出力を停止する。
図26は、図22に示すメモリ入力セレクタ部40Ca、40Cbの動作の一例を示す。図26に示す例では、2つのロード命令ldに基づいて、メモリ210から2048ビットのデータ#0−#63が2回連続して読み出される。最初に読み出された2048ビットのデータは、転置バッファ42aの保持回路FFaに格納され、2番目に読み出された2048ビットのデータは、転置バッファ42bの保持回路FFbに格納される。データを格納する保持回路FFa、FFb(すなわち、列ユニットCUL0−CUL7)は、イネーブル信号ENa0−ENa7、ENb0−ENb7に応じて選択される。
図27は、図22に示すレジスタ出力セレクタ部44Ca、44Cbの動作の一例を示す。図27に示す動作は、図26に示す動作と並行して実行される。レジスタ出力セレクタ部44Caは、選択信号SELdaの値に応じて、転置バッファ42aの各列ユニットCUL0−CUL7から32ビットを選択し、選択したデータをデータ線D0−D7に出力する。また、レジスタ出力セレクタ部44Cbは、選択信号SELdbの値に応じて、転置バッファ42bの各列ユニットCUL0−CUL7から32ビットを選択し、選択したデータをデータ線D0−D7に出力する。これにより、転置バッファ42a、42bに保持されたデータが転置されて、レジスタファイルRF0−RF7に格納される。なお、転置バッファ42aに保持されたデータと、転置バッファ42bに保持されたデータとは、レジスタファイルRF0−RF7において、互いに異なるワードWLに重複することなく格納される。
図26および図27に示すように、2つの転置バッファ42a、42bに交互に2048ビットのデータを保持することで、データを失うことなく転置データを連続して生成し、生成した転置データをレジスタファイルRF0−RF7に格納することができる。すなわち、図22に示す転置部18Cは、図14および図15と同様の転置動作を実行することができる。しかしながら、この場合、転置バッファ42a、42bに搭載される保持回路FFの数(128個)は、図6に示す転置バッファ42に搭載される保持回路FFの数(64個)の2倍になる。換言すれば、転置バッファ42a、42bに搭載されるフリップフロップの数(4096個)は、転置バッファ42に搭載されるフリップフロップの数(2048個)の2倍になる。
図28は、図22に示すレジスタ入力セレクタ部48Ca、48Cbの動作の一例を示す。レジスタ入力セレクタ部48Caは、イネーブル信号ENa00−ENa77に応じて、データ線D0−D7に順次供給されるデータをデータ線DOa0−DOa7に出力する。これにより、データ線D0−D7に供給されたデータは、転置バッファ50aに格納される。一方、レジスタ入力セレクタ部48Cbは、イネーブル信号ENb00−ENb77に応じて、データ線D0−D7に順次供給されるデータをデータ線DOb0−DOb7に出力する。これにより、データ線D0−D7に供給されたデータは、転置バッファ50bに格納される。
図29は、図22に示すメモリ出力セレクタ部52Ca、52Cbの動作の一例を示す。図29に示す動作は、図28に示す動作と並行して実行される。メモリ出力セレクタ部52Caは、選択信号SELeaの値に応じて、転置バッファ50aの列ユニットCUL0−CUL7がそれぞれ保持する256ビットのデータのいずれかを選択し、選択したデータをメモリバスMB(MB0−MB7)に出力する。また、メモリ出力セレクタ部52Cbは、選択信号SELebの値に応じて、転置バッファ50bの列ユニットCUL0−CUL7がそれぞれ保持する256ビットのデータのいずれかを選択し、選択したデータをメモリバスMB(MB0−MB7)に出力する。そして、レジスタファイルRF0−RF7から読み出されたデータが転置されて、メモリ210に書き込まれる。
図28および図29に示すように、2つの転置バッファ50a、50bに交互に2048ビットのデータを保持することで、データを失うことなく、レジスタファイルRF0−RF7から連続して読み出されたデータの配列を転置することができる。すなわち、図22に示す転置部18Cは、図17および図18と同様の転置動作を実行することができる。しかしながら、この場合、転置バッファ50a、50bに搭載される保持回路FFの数(128個)は、図6に示す転置バッファ50に搭載される保持回路FFの数(64個)の2倍になる。換言すれば、転置バッファ50a、50bに搭載されるフリップフロップの数(4096個)は、転置バッファ50bに搭載されるフリップフロップの数(2048個)の2倍になる。
換言すれば、図6に示す転置部18では、クロック信号に同期して動作する保持回路FFの数を、図22に示す転置部18Cに比べて半分にすることができる。したがって、転置バッファ42、50の回路サイズを、転置バッファ42a、42b、50a、50bの回路サイズのほぼ半分にすることができる。また、転置バッファ42、50の消費電力を、転置バッファ42a、42b、50a、50bの消費電力のほぼ半分にすることができる。この結果、図5に示す演算処理装置110のチップサイズを、転置部18Cが搭載される演算処理装置のチップサイズに比べて削減することができる。また、図5に示す演算処理装置110の消費電力を、転置部18Cが搭載される演算処理装置の消費電力に比べて削減することができる。
以上、図5から図21に示す実施形態において、図1から図4に示す実施形態と同様の効果を得ることができる。例えば、転置するデータが転置バッファ42に連続して供給される場合にも、データを失うことなくデータを転置し、転置したデータをレジスタ部22に格納することができる。したがって、演算実行部20は、複数のロード命令ldに基づいてメモリ210から連続して読み出され、転置バッファ42を利用して転置されたデータを使用して、複数の演算を連続して実行することができる。
連続して供給されるデータを1つの転置バッファ42を使用して転置できるため、2つの転置バッファ42a、42b(図22)を使用してデータを転置する場合に比べて回路規模を削減することができる。メモリ210から読み出され、バイパス経路BYPSを介して供給されるデータを、クロスバースイッチ46を介してレジスタ部22に転送することで、データを転置せずにレジスタファイルRF0−RF7に格納することができる。
さらに、図5から図21に示す実施形態では、例えば、以下の効果を得ることができる。複数のストア命令stに基づいて、レジスタ部22から転置バッファ50にデータが切れ目なく転送される場合にも、転置バッファ50に格納されたデータを失うことなく読み出すことで転置し、転置したデータをメモリ210に書き込むことができる。レジスタ部22から連続して読み出されるデータを1つの転置バッファ50を使用して転置できるため、データを2つの転置バッファ50a、50b(図22)を使用して転置する場合に比べて回路規模を削減することができる。レジスタ部22から読み出されたデータを、クロスバースイッチ46を介してバイパス経路BYPSに転送することで、データを転置せずにメモリ210に書き込むことができる。
転置バッファ42の列ユニットCUL0−CUL7に保持されたデータを、選択信号SEL0−SEL7を使用してそれぞれ選択することで、データのデータ線D0−D7への出力タイミングを独立に制御することができる。これにより、転置バッファ42にデータが連続して供給される場合にも、各列ユニットCUL0−CUL7に保持されたデータを、失うことなく読み出すことができる。さらに、レジスタ出力セレクタ部44を制御する選択信号SEL0−SEL7を、レジスタファイルRF0−RF7に供給することで、転置されたデータをレジスタファイルRF0−RF7の各ワードWLに書き込むタイミングを独立に制御することができる。
レジスタ部22からデータ線D0−D7に順次読み出されるデータを、イネーブル信号EN00−EN77を使用してレジスタ入力セレクタ部48のセレクタ480−487に選択させることで、図17に示した動作を実現することができる。さらに、レジスタ入力セレクタ部48を制御するイネーブル信号EN00−EN77を、レジスタファイルRF0−RF7に供給することで、レジスタ入力セレクタ部48の動作タイミングに合わせて、レジスタ部22からデータを読み出すことができる。
転置バッファ42、50に搭載される保持回路FFの数を、図22に示した転置バッファ42a、42b、50a、50bに搭載される保持回路FFの数の半分にすることができる。このため、図5に示す演算処理装置110のチップサイズを、図22に示す演算処理装置18Cのチップサイズに比べて削減することができる。また、保持回路FFの数の削減により、転置バッファ42、50の消費電力を、転置バッファ42a、42b、50a、50bの消費電力のほぼ半分にすることができる。この結果、図5に示す演算処理装置110の転置部18の消費電力を、図22に示す転置部18Cの消費電力に比べて削減することができる。
さらに、演算処理装置18が複数のロード命令ldを連続して実行することによりメモリ210からレジスタ部22に転送されるデータの転送レートを、演算処理装置18Cによるデータの転送レートと同じにすることができる。また、演算処理装置18が複数のストア命令stを連続して実行することによりレジスタ部22からメモリ210に転送されるデータの転送レートを、演算処理装置18Cによるデータの転送レートと同じにすることができる。したがって、演算処理装置18は、データの転送効率を下げることなく、演算処理装置18Cに比べて、チップサイズを削減し、消費電力を削減することができる。
以上の図1から図21に示す実施形態に関し、さらに以下の付記を開示する。
(付記1)
演算を実行する演算実行部と、
前記演算実行部が演算に使用するデータを格納する第1レジスタ部と、
データを保持する第1バッファ部と、
データの配列を変更してデータを前記第1レジスタ部に格納する場合、順次受信する複数のデータ群を前記第1バッファ部に格納する第1制御部と、
前記複数のデータ群の各々を前記第1バッファ部が格納する毎に、前記第1バッファ部に格納されたデータ群に含まれるデータを前記第1レジスタ部に順次出力する第2制御部を有することを特徴とする演算処理装置。
(付記2)
前記第1レジスタ部に設けられ、複数のデータをそれぞれ格納する複数の第1レジスタファイルと、
前記第1バッファ部に設けられ、前記複数のデータ群をそれぞれ保持する複数の第1保持部と、
前記第1制御部に設けられ、前記複数のデータ群の各々を前記複数の第1保持部のいずれかに出力する第1セレクタ部と、
前記第2制御部に設けられる複数の第2セレクタ部と、
前記複数の第2セレクタ部を前記複数の第1レジスタファイルにそれぞれ接続する複数の第1データ線を有し、
前記複数の第2セレクタ部の各々は、対応する第1保持部にデータ群が保持されたことに基づいて、保持されたデータ群に含まれる複数のデータを順次選択して前記複数の第1データ線のうち、対応する第1データ線に出力し、
前記演算実行部は、前記複数の第1レジスタファイルにそれぞれ保持された複数のデータを使用して演算を実行することを特徴とする付記1記載の演算処理装置。
(付記3)
前記複数の第2セレクタ部の各々は、対応する第1保持部にデータ群が保持されたサイクルの次のサイクルから、対応する第1保持部に保持されたデータ群に含まれる複数のデータを順次選択することを特徴とする付記2記載の演算処理装置。
(付記4)
前記第2制御部は、前記複数の第1保持部のいずれかがデータ群を保持する毎に、データ群が保持された第1保持部に対応する第2セレクタ部に出力する第1選択信号を順次生成する第1信号生成部を有し、
前記複数の第2セレクタ部の各々は、対応する第1保持部が保持するデータ群に含まれる複数のデータのいずれかを前記第1選択信号に基づいて選択することを特徴とする付記2または付記3記載の演算処理装置。
(付記5)
前記第1選択信号は、複数の第1レジスタファイルの各々にデータを書き込む制御に使用されることを特徴とする付記4記載の演算処理装置。
(付記6)
前記演算処理装置は、さらに、
前記演算実行部が実行する演算の実行結果を示す複数のデータをそれぞれ格納する複数の第2レジスタファイルを含む第2レジスタ部と、
前記複数の第2レジスタファイルにそれぞれ対応する複数の第2保持部を含む第2バッファ部と、
前記複数の第2レジスタファイルからサイクルをずらして順次読み出される複数のデータを、対応する第2保持部に格納する第3制御部と、
複数のデータの格納が完了した第2保持部から順に、第2保持部に格納された複数のデータを出力する第4制御部を有することを特徴とする付記1ないし付記5のいずれか1項記載の演算処理装置。
(付記7)
前記第3制御部は、
前記複数の第2レジスタファイルと前記複数の第2保持部とに対応してそれぞれ設けられる複数の第3セレクタ部と、
前記複数の第3セレクタ部のそれぞれに互いに異なるサイクルで出力する複数の第2選択信号を生成する第2信号生成部を有し、
前記複数の第3セレクタ部の各々は、対応する第2レジスタファイルから読み出される複数のデータのいずれかを、前記複数の第2選択信号の各々に基づいて選択し、選択したデータを、対応する第2保持部に出力することを特徴とする付記6記載の演算処理装置。
(付記8)
前記第2選択信号は、前記複数の第2レジスタファイルの各々からデータを読み出す制御に使用されることを特徴とする付記7記載の演算処理装置。
(付記9)
前記第4制御部は、
前記複数の第2レジスタファイルのいずれかから前記複数の第2保持部のいずれかへの複数のデータの格納が完了する毎に、複数のデータの格納が完了した第2保持部に対応する第3選択信号を生成する第3信号生成部と、
前記複数の第2保持部のいずれかに保持された複数のデータを、前記第3選択信号に基づいて選択し、選択した複数のデータを出力する第4セレクタ部を有することを特徴とする付記6ないし付記8のいずれか1項記載の演算処理装置。
(付記10)
前記演算処理装置は、さらに、命令をデコードするデコード部を有し、
前記第1制御部および前記第2制御部は、データの転置処理を含むロード命令を前記デコード部がデコードしたことに基づいて動作することを特徴とする付記1ないし付記9のいずれか1項記載の演算処理装置。
(付記11)
前記演算処理装置は、さらに、
順次受信する複数のデータ群を、前記第1バッファ部を経由することなく前記第1レジスタ部に転送するバイパス経路と、
前記第1バッファ部の出力または前記バイパス経路のいずれかを前記第1レジスタ部に接続する切替部を有することを特徴とする付記1ないし付記10のいずれか1項記載の演算処理装置。
(付記12)
前記演算処理装置は、さらに、命令をデコードするデコード部を有し、
前記第3制御部および前記第4制御部は、データの転置処理を含むストア命令を前記デコード部がデコードしたことに基づいて動作することを特徴とする付記6ないし付記9のいずれか1項記載の演算処理装置。
(付記13)
前記演算処理装置は、さらに、
前記第2レジスタ部に保持された複数のデータを、前記第2バッファ部を経由することなく、前記第2バッファ部が出力する複数のデータを伝達するデータ線に転送するバイパス経路と、
前記第2レジスタ部を前記第2バッファ部の入力または前記バイパス経路のいずれかに接続する切替部を有することを特徴とする付記6ないし付記9、付記12のいずれか1項記載の演算処理装置。
(付記14)
演算を実行する演算実行部と、前記演算実行部が演算に使用するデータを格納する第1レジスタ部と、データを保持する第1バッファ部を有する演算処理装置の制御方法において、
データの配列を変更してデータを前記第1レジスタ部に格納する場合、
前記演算処理装置が有する第1制御部が、順次受信する複数のデータ群を前記第1バッファ部に格納し、
前記演算処理装置が有する第2制御部が、前記複数のデータ群の各々を前記第1バッファ部が格納する毎に、前記第1バッファ部に格納されたデータ群に含まれるデータを前記第1レジスタ部に順次出力することを特徴とする演算処理装置の制御方法。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。