(57)【要約】【課題】  転置データを切れ目なく生成するバッファ部の回路規模の増大を抑制する。【解決手段】  演算処理装置は、演算を実行する演算実行部と、演算実行部が演算に使用するデータを格納する第１レジスタ部と、データを保持する第１バッファ部と、第１制御部と、第２制御部を有する。データの配列を変更してデータを第１レジスタ部に格納する場合、第１制御部は、順次受信する複数のデータ群を第１バッファ部に格納する。第２制御部は、複数のデータ群の各々を第１バッファ部が格納する毎に、第１バッファ部に格納されたデータ群に含まれるデータを第１レジスタ部に順次出力する。【選択図】    図１
2018132901.tif 000002
【特許請求の範囲】
【請求項１】
演算を実行する演算実行部と、
前記演算実行部が演算に使用するデータを格納する第１レジスタ部と、
データを保持する第１バッファ部と、
データの配列を変更してデータを前記第１レジスタ部に格納する場合、順次受信する複数のデータ群を前記第１バッファ部に格納する第１制御部と、
前記複数のデータ群の各々を前記第１バッファ部が格納する毎に、前記第１バッファ部に格納されたデータ群に含まれるデータを前記第１レジスタ部に順次出力する第２制御部を有することを特徴とする演算処理装置。
【請求項２】
前記第１レジスタ部に設けられ、複数のデータをそれぞれ格納する複数の第１レジスタファイルと、
前記第１バッファ部に設けられ、前記複数のデータ群をそれぞれ保持する複数の第１保持部と、
前記第１制御部に設けられ、前記複数のデータ群の各々を前記複数の第１保持部のいずれかに出力する第１セレクタ部と、
前記第２制御部に設けられる複数の第２セレクタ部と、
前記複数の第２セレクタ部を前記複数の第１レジスタファイルにそれぞれ接続する複数の第１データ線を有し、
前記複数の第２セレクタ部の各々は、対応する第１保持部にデータ群が保持されたことに基づいて、保持されたデータ群に含まれる複数のデータを順次選択して前記複数の第１データ線のうち、対応する第１データ線に出力し、
前記演算実行部は、前記複数の第１レジスタファイルにそれぞれ保持された複数のデータを使用して演算を実行することを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記複数の第２セレクタ部の各々は、対応する第１保持部にデータ群が保持されたサイクルの次のサイクルから、対応する第１保持部に保持されたデータ群に含まれる複数のデータを順次選択することを特徴とする請求項２記載の演算処理装置。
【請求項４】
前記第２制御部は、前記複数の第１保持部のいずれかがデータ群を保持する毎に、データ群が保持された第１保持部に対応する第２セレクタ部に出力する第１選択信号を順次生成する第１信号生成部を有し、
前記複数の第２セレクタ部の各々は、対応する第１保持部が保持するデータ群に含まれる複数のデータのいずれかを前記第１選択信号に基づいて選択することを特徴とする請求項２または請求項３記載の演算処理装置。
【請求項５】
前記第１選択信号は、複数の第１レジスタファイルの各々にデータを書き込む制御に使用されることを特徴とする請求項４記載の演算処理装置。
【請求項６】
前記演算処理装置は、さらに、
前記演算実行部が実行する演算の実行結果を示す複数のデータをそれぞれ格納する複数の第２レジスタファイルを含む第２レジスタ部と、
前記複数の第２レジスタファイルにそれぞれ対応する複数の第２保持部を含む第２バッファ部と、
前記複数の第２レジスタファイルからサイクルをずらして順次読み出される複数のデータを、対応する第２保持部に格納する第３制御部と、
複数のデータの格納が完了した第２保持部から順に、第２保持部に格納された複数のデータを出力する第４制御部を有することを特徴とする請求項１ないし請求項５のいずれか１項記載の演算処理装置。
【請求項７】
前記第３制御部は、
前記複数の第２レジスタファイルと前記複数の第２保持部とに対応してそれぞれ設けられる複数の第３セレクタ部と、
前記複数の第３セレクタ部のそれぞれに互いに異なるサイクルで出力する複数の第２選択信号を生成する第２信号生成部を有し、
前記複数の第３セレクタ部の各々は、対応する第２レジスタファイルから読み出される複数のデータのいずれかを、前記複数の第２選択信号の各々に基づいて選択し、選択したデータを、対応する第２保持部に出力することを特徴とする請求項６記載の演算処理装置。
【請求項８】
前記第２選択信号は、前記複数の第２レジスタファイルの各々からデータを読み出す制御に使用されることを特徴とする請求項７記載の演算処理装置。
【請求項９】
前記第４制御部は、
前記複数の第２レジスタファイルのいずれかから前記複数の第２保持部のいずれかへの複数のデータの格納が完了する毎に、複数のデータの格納が完了した第２保持部に対応する第３選択信号を生成する第３信号生成部と、
前記複数の第２保持部のいずれかに保持された複数のデータを、前記第３選択信号に基づいて選択し、選択した複数のデータを出力する第４セレクタ部を有することを特徴とする請求項６ないし請求項８のいずれか１項記載の演算処理装置。
【請求項１０】
演算を実行する演算実行部と、前記演算実行部が演算に使用するデータを格納する第１レジスタ部と、データを保持する第１バッファ部を有する演算処理装置の制御方法において、
データの配列を変更してデータを前記第１レジスタ部に格納する場合、
前記演算処理装置が有する第１制御部が、順次受信する複数のデータ群を前記第１バッファ部に格納し、
前記演算処理装置が有する第２制御部が、前記複数のデータ群の各々を前記第１バッファ部が格納する毎に、前記第１バッファ部に格納されたデータ群に含まれるデータを前記第１レジスタ部に順次出力することを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
画像処理等のデータ処理では、データの配列において行と列とを入れ換えた転置データが使用される場合がある。例えば、メモリセルアレイの行方向に並ぶメモリセルにデータを書き込み、列方向に並ぶメモリセルからデータを読み出すことで、データを転置する手法が知られている。ここで、第１ポートと第２ポートとを有するマルチポートのメモリセルを含むメモリセルアレイを使用することで、データは、切れ目なく転置データに変換可能である。この場合、所定数のサイクルの各々において、第１ポートを使用してメモリセルアレイの行方向に並ぶメモリセルに対して、データを読み出した後にデータの書き込みが実行される。そして、次の所定数のサイクルの各々において、第２ポートを使用してメモリセルアレイの列方向に並ぶメモリセルに対してデータの読み出し後にデータの書き込みが実行される（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１１−５３３４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、マルチポートのメモリセルを含むメモリセルアレイを利用して転置データを生成する場合、行デコーダ、列デコーダ等の制御回路が、シングルポートのメモリセルを含むメモリセルアレイを制御する制御回路に比べて複雑になる。また、マルチポートのメモリセルの面積は、シングルポートのメモリセルの面積に比べて大きい。このため、マルチポート構成のメモリセルアレイは、転置データを切れ目なく生成できるが、構成が複雑になるとともに複雑な制御を必要とする。
【０００５】
一方、行列状に配列されたデータを、複数のフリップフロップ回路を有するバッファ部に保持し、バッファ部から読み出すデータの順序を、バッファ部に書き込んだデータの順序と変えることで、転置データが生成可能である。しかしながら、転置データを切れ目なく生成する場合、データを交互に保持する２つのバッファ部が使用されるため、回路の回路規模は増大する。
【０００６】
１つの側面では、本発明は、転置データを切れ目なく生成するバッファ部の回路規模の増大を抑制することを目的とする。
【課題を解決するための手段】
【０００７】
一つの実施態様では、演算処理装置は、演算を実行する演算実行部と、演算実行部が演算に使用するデータを格納する第１レジスタ部と、データを保持する第１バッファ部と、データの配列を変更してデータを第１レジスタ部に格納する場合、順次受信する複数のデータ群を第１バッファ部に格納する第１制御部と、複数のデータ群の各々を第１バッファ部が格納する毎に、第１バッファ部に格納されたデータ群に含まれるデータを第１レジスタ部に順次出力する第２制御部を有する。
【発明の効果】
【０００８】
１つの側面では、本発明は、転置データを切れ目なく生成するバッファ部の回路規模の増大を抑制することができる。
【図面の簡単な説明】
【０００９】
【図１】演算処理装置の一実施形態を示す図である。
【図２】図１に示す演算処理装置の動作の一例を示す図である。
【図３】図２に示すサイクル０からサイクル７における転置バッファの動作の一例を示す図である。
【図４】図１に示す演算処理装置の動作フローの一例を示す図である。
【図５】演算処理装置の別の実施形態を示す図である。
【図６】図５に示す転置部の一例を示す図である。
【図７】図６に示すメモリ入力セレクタ部および転置バッファ４２の一例を示す図である。
【図８】図６に示すレジスタ出力セレクタ部の一例を示す図である。
【図９】図６に示すレジスタ入力セレクタ部の一例を示す図である。
【図１０】図６に示す転置バッファ５０の一例を示す図である。
【図１１】図６に示すメモリ出力セレクタ部の一例を示す図である。
【図１２】図５に示すレジスタ部の一例を示す図である。
【図１３】図１２に示すレジスタファイルの一例を示す図である。
【図１４】図７に示すメモリ入力セレクタ部の動作の一例を示す図である。
【図１５】図８に示すレジスタ出力セレクタ部の動作の一例を示す図である。
【図１６】図５に示すプロセッサコアにおいてロード命令の実行時の動作の一例を示す図である。
【図１７】図９に示すレジスタ入力セレクタ部の動作の一例を示す図である。
【図１８】図１１に示すメモリ出力セレクタ部の動作の一例を示す図である。
【図１９】図５に示す演算処理装置の動作フローの一例を示す図である。
【図２０】図１９のステップＳ１２で実行されるロード命令の動作フローの一例を示す図である。
【図２１】図１９のステップＳ２０で実行されるストア命令の動作フローの一例を示す図である。
【図２２】転置部の他の例を示す図である。
【図２３】図２２に示すレジスタ出力セレクタ部の一例を示す図である。
【図２４】図２２に示すレジスタ入力セレクタ部の一例を示す図である。
【図２５】図２２に示すメモリ出力セレクタ部の一例を示す図である。
【図２６】図２２に示すメモリ入力セレクタ部の動作の一例を示す図である。
【図２７】図２２に示すレジスタ出力セレクタ部の動作の一例を示す図である。
【図２８】図２２に示すレジスタ入力セレクタ部の動作の一例を示す図である。
【図２９】図２２に示すメモリ出力セレクタ部の動作の一例を示す図である。
【発明を実施するための形態】
【００１０】
以下、図面を用いて実施形態を説明する。
【００１１】
図１は、演算処理装置の一実施形態を示す。図１に示す演算処理装置１００は、演算を実行する演算実行部１、レジスタ部２、転置バッファ３、バッファ入力制御部４およびバッファ出力制御部５を有する。レジスタ部２は、第１レジスタ部の一例であり、転置バッファ３は、第１バッファ部の一例であり、バッファ入力制御部４は、第１制御部の一例であり、バッファ出力制御部５は、第２制御部の一例である。
【００１２】
レジスタ部２は、演算実行部１の演算に使用されるデータが格納される複数のレジスタファイルＲＦ（ＲＦ０、ＲＦ１、ＲＦ２、ＲＦ３）を有する。転置バッファ３は、レジスタ部２に格納されるデータを、レジスタ部２に格納される前に保持する。図１に示す例では、転置バッファ３は、矩形で示す１６個のデータを保持する保持領域を有する。
【００１３】
バッファ入力制御部４は、データ線ＤＬ１を介して演算処理装置１００がメモリ２００から順次受信する複数のデータ群を、受信した順に転置バッファ３に格納する。バッファ出力制御部５は、複数のデータ群の各々が転置バッファ３に格納される毎に、転置バッファ３に格納されたデータ群に含まれるデータを、データ線ＤＬ２を介してレジスタ部２に順次出力する。なお、演算処理装置１００は、データ線ＤＬ１上のデータを、転置バッファ３を介さずにレジスタ部２に直接転送するバイパス経路ＢＹＰＳを有する。バイパス経路ＢＹＰＳは、図２および図４で説明するように、メモリ２００から読み出されるデータの配列を転置せずにレジスタ部２に格納する場合に使用される。
【００１４】
特に限定されないが、メモリ２００から受信する複数のデータ群は、例えば、画像データである。演算実行部１は、例えば、プログラムを実行することで、レジスタ部２に保持された画像データに対してＤＣＴ変換を実行し、あるいは、レジスタ部２に保持された画像データに対して各種フィルタリング処理を実行する。例えば、演算処理装置１００は、ディープラーニング用のＡＩ（Artificial Intelligence）プロセッサである。あるいは、演算処理装置１００は、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＧＰＵ（Graphics Processing Unit）またはＧＰＧＰＵ（General Purpose computing on GPU）等のプロセッサである。なお、演算処理装置１００は、プロセッサの代わりに画像処理等を実行するアクセラレータであってもよい。
【００１５】
図２は、図１に示す演算処理装置１００の動作の一例を示す。すなわち、図２は、演算処理装置１００の制御方法の一例を示す。図２において、サイクルは、例えば、クロックサイクルを示す。図２に示す例では、メモリ２００は、複数のデータ（＃０−＃３１）を保持する。データは、４つのデータ（例えば、＃０、＃１、＃２、＃３）を含むデータ群毎にメモリ２００から読み出される。
【００１６】
バッファ入力制御部４は、メモリ２００から読み出される各データ群を、データ線ＤＬ１を介して転置バッファ３に格納する。図２において、メモリ２００に保持されるデータのうち太枠で囲まれた４つのデータと、データ線ＤＬ１に伝達されるデータのうち太枠で囲まれた４つのデータは、データ群を示す。
【００１７】
バッファ出力制御部５は、データ群毎に、データ群が転置バッファ３に格納されたサイクルの次のサイクルから４サイクル掛けて、転置バッファ３に格納されたデータ群に含まれる４つのデータを、レジスタファイルＲＦ０−ＲＦ３のいずれかに順次格納する。すなわち、バッファ出力制御部５は、データ群の各々が転置バッファ３に格納される毎に、転置バッファ３に格納されたデータ群に含まれるデータを、データ線ＤＬ２を介してレジスタ部２に順次出力する。演算実行部１は、レジスタファイルＲＦ０−ＲＦ３に分散して格納された４つのデータを使用して演算を実行する。
【００１８】
例えば、データ線ＤＬ２は、レジスタファイルＲＦ０−ＲＦ３にそれぞれ対応するデータ線ＤＬ２［０］、ＤＬ２［１］、ＤＬ２［２］、ＤＬ２［３］を有する。図２において、データ線ＤＬ２に伝達されるデータのうち太枠で囲まれた４つのデータと、レジスタ部２に保持されるデータのうち太枠で囲まれた４つのデータは、演算実行部１が各演算に使用するデータの単位を示す。すなわち、演算実行部１は、データ＃０、＃４、＃８、＃１２を使用して演算を実行し、データ＃１、＃５、＃９、＃１３を使用して演算を実行する。また、演算実行部１は、データ＃２、＃６、＃１０、＃１４を使用して演算を実行し、データ＃３、＃７、＃１１、＃１５を使用して演算を実行する。
【００１９】
演算実行部１が各演算に使用する４つのデータの配列は、メモリ２００から一度に読み出される４つのデータの配列と異なる。すなわち、バッファ入力制御部４およびバッファ出力制御部５は、メモリ２００から読み出されて転置バッファ３に保持したデータを転置してレジスタ部２に格納する。
【００２０】
バッファ入力制御部４は、サイクル０からサイクル３を使用してデータ＃０−＃１５を転置バッファ３に順次格納した後、サイクル４からサイクル７を使用してデータ＃１６−＃３１を転置バッファ３に順次格納する。例えば、データ群＃１６−＃１９は、転置バッファ３においてデータ群＃０−＃３が格納された保持領域に格納され、データ群＃２０−＃２３は、転置バッファ３においてデータ群＃４−＃７が格納された保持領域に格納される。データ群＃２４−＃２７は、転置バッファ３においてデータ群＃８−＃１１が格納された保持領域に格納され、データ群＃２８−＃３１は、転置バッファ３においてデータ群＃１２−＃１５が格納された保持領域に格納される。
【００２１】
データ＃３は、サイクル４に転置バッファ３から読み出され、データ＃１６は、サイクル４に転置バッファ３に格納される。このため、サイクル４においてデータ群＃１６−＃１９が転置バッファ３に格納されるとき、データ群＃０−＃３は、転置バッファ３からデータ線ＤＬ２［０］に読み出し済みである。したがって、データ群＃０−＃１５の後にデータ群＃１６−＃３１を切れ目なく転送する場合にも、データ群＃０−＃３は、失われることなくレジスタファイルＲＦ０−ＲＦ３に格納される。
【００２２】
サイクル５からサイクル７においても、サイクル４と同様に、新たなデータ群が転置バッファ３に格納される前に、既に転置バッファ３に保持されたデータ群は、転置バッファ３から読み出される。したがって、データ群が転置バッファ３に保持される毎に、データ群に含まれる複数のデータをレジスタ部２に順次格納することで、転置バッファ３に保持されたデータを上書きすることなく、転置するデータを連続して転置バッファ３に格納することができる。この結果、１つの転置バッファ３を利用して、複数のデータを転置し、転置したデータをレジスタ部２に連続して格納することができ、演算実行部１は、メモリ２００から読み出されて転置されたデータを使用して、複数の演算を連続して実行することができる。
【００２３】
これに対して、１６個のデータ＃０−＃１５がサイクル０からサイクル３を使用して転置バッファ３に格納された後、サイクル４からサイクル７を使用して転置バッファ３からレジスタ部２に転送することでデータを転置する場合、以下の不具合が発生する。まず、データ＃１６−＃１９を転置バッファ３に格納するサイクル４において、データ＃０、＃４、＃８、＃１２が転置バッファ３からレジスタ部２に転送される。この場合、サイクル０で転置バッファ３に保持されたデータ＃１、＃２、＃３は、データ＃１７、＃１８、＃１９により上書きされ、レジスタ部２に転送される前に失われてしまう。データの消失を抑止するためには、例えば、２つの転置バッファ３が設けられ、１６個のデータが、２つの転置バッファ３に交互に格納される。そして、一方の転置バッファ３にデータを格納するサイクル中に、他方の転置バッファ３からレジスタ部２にデータが転送される。
【００２４】
なお、データを転置せずに演算を実行する場合、図１に示したメモリ２００から読み出されるデータは、バイパス経路ＢＹＰＳを介してレジスタ部２に格納される。この場合、例えば、データ＃０、＃１、＃２、＃３は、レジスタファイルＲＦ０−ＲＦ３にそれぞれ格納される。換言すれば、データ＃０、＃４、＃８、＃１２は、レジスタファイルＲＦ０に格納され、データ＃１、＃５、＃９、＃１３は、レジスタファイルＲＦ１に格納される。データ＃２、＃６、＃１０、＃１４は、レジスタファイルＲＦ２に格納され、データ＃３、＃７、＃１１、＃１５は、レジスタファイルＲＦ３に格納される。
【００２５】
図３は、図２に示すサイクル０からサイクル７における転置バッファ３の動作の一例を示す。すなわち、図３は、演算処理装置１００の制御方法の一例を示す。図３において、折り曲げた矢印は、データが転置バッファ３の保持領域に書き込まれることを示す。太枠で示す保持領域は、データが読み出される保持領域を示し、右向きの矢印の先に付した符号ＲＦ０−ＲＦ３は、保持領域から読み出されたデータが格納されるレジスタファイルＲＦ０−ＲＦ３を示す。
【００２６】
例えば、サイクル４では、データ＃１２、＃９、＃６、＃３が転置バッファ３から読み出された後、データ＃１６、＃１７、＃１８、＃１９が転置バッファ３に書き込まれる。転置バッファ３に保持されたデータ＃０、＃１、＃２、＃３は、データ＃１６、＃１７、＃１８、＃１９の書き込みにより消失する。しかしながら、データ＃０、＃１、＃２、＃３は、サイクル１からサイクル４に掛けてレジスタファイルＲＦ０−ＲＦ３に対して転送完了となるため問題は発生しない。
【００２７】
同様に、サイクル５では、データ＃１６、＃１３、＃１０、＃７が転置バッファ３から読み出された後、データ＃２０、＃２１、＃２２、＃２３が転置バッファ３に書き込まれる。転置バッファ３に保持されたデータ＃４、＃５、＃６、＃７は、データ＃２０、＃２１、＃２２、＃２３の書き込みにより消失する。しかしながら、データ＃４、＃５、＃６、＃７は、サイクル２からサイクル５に掛けてレジスタファイルＲＦ０−ＲＦ３に対して転送完了となるため、問題は発生しない。
【００２８】
図４は、図１に示す演算処理装置１００の動作フローの一例を示す。すなわち、図４は、演算処理装置１００の制御方法の一例を示す。まず、ステップＳ１において、演算処理装置１００は、演算に使用するデータをメモリ２００から読み出す。メモリ２００からのデータの読み出しは、例えば、演算処理装置１００によるロード命令に基づいて実行される。次に、ステップＳ２において、演算処理装置１００は、データを転置するか否かを判定する。データを転置するか否かは、例えば、ロード命令のオペランドに含まれる転置フラグの値に基づいて判定される。データを転置する場合、動作はステップＳ３に移行され、データを転置しない場合、動作はステップＳ５に移行される。
【００２９】
ステップＳ３において、演算処理装置１００は、メモリ２００から読み出したデータを転置バッファ３に順次格納する。また、ステップＳ４において、演算処理装置１００は、データを転置バッファ３に格納する毎に、サイクルをずらしながら、転置バッファ３に格納したデータを順次読み出し、レジスタファイルＲＦ０−ＲＦ３に格納する。データは、転置バッファ３を介してレジスタ部２に格納される過程で転置される。なお、図２および図３に示したように、ステップＳ３、Ｓ４の動作は、並列に実行される。ステップＳ３、Ｓ４の後、動作はステップＳ６に移行される。
【００３０】
一方、データを転置しない場合、ステップＳ５において、演算処理装置１００は、演算に使用するためにメモリ２００から読み出したデータを、バイパス経路ＢＹＰＳを介してレジスタファイルＲＦ０−ＲＦ３に格納し、動作をステップＳ６に移行する。ステップＳ６において、演算処理装置１００は、演算命令に基づいて、レジスタファイルＲＦ０−ＲＦ３に格納されたデータを使用して演算を実行し、動作を終了する。なお、演算結果は、例えば、レジスタファイルＲＦ０−ＲＦ３において、メモリ２００からのデータが格納されない領域などのデータを書き込んでも問題ない領域に格納される。演算結果は、例えば、演算処理装置１００によるストア命令の実行に基づいて、レジスタ部２からメモリ２００に転送される。
【００３１】
以上、図１から図４に示す実施形態では、演算処理装置１００は、データ群が転置バッファ３に保持される毎に、データ群に含まれる複数のデータをレジスタ部２に順次格納する。これにより、転置するデータが転置バッファ３に連続して供給される場合にも、データを失うことなくデータを転置し、転置したデータをレジスタ部２に格納することができる。したがって、演算実行部１は、メモリ２００から読み出されて転置されたデータを使用して、複数の演算を連続して実行することができる。さらに、１つの転置バッファ３を使用して転置データを切れ目なく生成することができるため、転置バッファ３の回路規模の増大を抑制することができる。メモリ２００から読み出したデータを、バイパス経路ＢＹＰＳを介してレジスタ部２に転送することで、データを転置せずにレジスタファイルＲＦ０−ＲＦ３に格納することができる。
【００３２】
図５は、演算処理装置の別の実施形態を示す。図５に示す演算処理装置１１０は、ディープラーニング用のＡＩプロセッサ、あるいは、ＣＰＵ、ＤＳＰ、ＧＰＵまたはＧＰＧＰＵ等のプロセッサである。なお、演算処理装置１１０は、アクセラレータであってもよい。
【００３３】
演算処理装置１１０は、複数のプロセッサコア１２０およびメモリコントローラ１３０を有する。なお、演算処理装置１１０は、単一のプロセッサコア１２０を有してもよい。各プロセッサコア１２０は、命令バッファ１０、デコード部１２、ステートマシン１４、ロード／ストアエンジン１６、転置部１８、演算実行部２０およびレジスタ部２２を有する。
【００３４】
命令バッファ１０は、メモリコントローラ１３０を介してメモリ２１０から読み出される命令を順次保持し、保持した命令をデコード部１２に順次出力する。デコード部１２は、命令バッファ１０から転送される命令を解読し、解読した命令に含まれる命令コードおよびレジスタアドレス等をステートマシン１４に出力する。
【００３５】
ステートマシン１４は、命令を保持する複数のエントリを有する。ステートマシン１４は、エントリに保持した命令の依存関係を判定し、判定した依存関係に基づいて、エントリに保持した命令の中から実行可能な命令を選択する。ステートマシン１４は、選択した命令が演算命令の場合、選択した演算命令を演算実行部２０に出力する。ステートマシン１４は、選択した命令がメモリアクセス命令（ロード命令またはストア命令）の場合、選択したメモリアクセス命令をロード／ストアエンジン１６に出力する。
【００３６】
ロード／ストアエンジン１６は、ロード命令の受信に基づいて、メモリ２１０からデータを読み出す指示をメモリコントローラ１３０に出力する。ロード／ストアエンジン１６は、メモリコントローラ１３０を介してメモリ２１０から読み出されるデータを受信し、受信したデータを、バリッド信号ＬＶＡＬＩＤとともにメモリバスＭＢを介して転置部１８に出力する。
【００３７】
また、ロード／ストアエンジン１６は、ストア命令の受信に基づいて、バリッド信号ＳＶＡＬＩＤを転置部１８に出力し、転置部１８を介してレジスタ部２２から出力されるデータを、メモリバスＭＢを介して受信する。ロード／ストアエンジン１６は、メモリバスＭＢを介して転置部１８から受信したデータをメモリ２１０に書き込む指示をデータとともにメモリコントローラ１３０に出力する。
【００３８】
メモリコントローラ１３０は、プロセッサコア１２０に設けられる図示しないプログラムカウンタが生成するアドレスに基づいて、メモリ２１０から命令を読み出し、読み出した命令を命令バッファ１０に出力する。メモリコントローラ１３０は、ロード／ストアエンジン１６からの読み出し指示に基づいて、メモリ２１０からデータを読み出し、ロード／ストアエンジン１６からの書き込み指示に基づいて、メモリ２１０にデータを書き込む。
【００３９】
転置部１８は、ロード命令に基づいてロード／ストアエンジン１６から出力されるデータ（ロードデータ）を、メモリバスＭＢを介して受信し、受信したデータを、レジスタバスＲＢを介してレジスタ部２２に出力する。転置部１８は、ストア命令に基づいてレジスタ部２２から出力されるデータ（ストアデータ）を、レジスタバスＲＢを介して受信し、受信したデータを、メモリバスＭＢを介してロード／ストアエンジン１６に出力する。転置部１８の例は、図６から図１１に示される。
【００４０】
演算実行部２０は、複数の積和演算器２４、複数の加算器２６および複数の乗算器２８を有する。各積和演算器２４は、乗算器と加算器とを有し、乗算器で乗算した結果を加算器により加算する。各加算器２６は、加算を実行する。各乗算器２８は、乗算または除算を実行する。なお、積和演算器２４、加算器２６および乗算器２８の数は、図５に示す例に限定されず、演算の種類も限定されない。積和演算器２４、加算器２６および乗算器２８のそれぞれは、固定小数点数用でもよく、浮動小数点用でもよい。また、演算実行部２０は、固定小数点数用と浮動小数点用の積和演算器２４、加算器２６および乗算器２８をそれぞれ有してもよい。
【００４１】
レジスタ部２２は、レジスタバスＲＢを介して転送されるデータおよび演算実行部２０による演算結果を示すデータを保持する複数のレジスタファイルＲＦ（ＲＦ０−ＲＦ７）を有する。レジスタファイルＲＦ０−ＲＦ７の例は、図１２および図１３に示される。
【００４２】
図６は、図５に示す転置部１８の一例を示す。転置部１８は、データシフト制御部３２Ａ、３２Ｂ、メモリ入力セレクタ部４０、転置バッファ４２、レジスタ出力セレクタ部４４、クロスバースイッチ４６、レジスタ入力セレクタ部４８、転置バッファ５０およびメモリ出力セレクタ部５２を有する。データシフト制御部３２Ａは、バッファ入力制御部３４Ａと、複数のカウンタ３８Ａを含むバッファ出力制御部３６Ａとを有する。データシフト制御部３２Ｂは、複数のカウンタ３８Ｂを含むバッファ入力制御部３４Ｂと、バッファ出力制御部３６Ｂとを有する。
【００４３】
メモリ入力セレクタ部４０は、第１セレクタ部の一例であり、メモリ出力セレクタ部５２は、第４セレクタ部の一例である。バッファ入力制御部３４Ａおよびメモリ入力セレクタ部４０は、第１制御部の一例であり、バッファ出力制御部３６Ａおよびレジスタ出力セレクタ部４４は、第２制御部の一例である。バッファ入力制御部３４Ｂおよびレジスタ入力セレクタ部４８は、第３制御部の一例であり、バッファ出力制御部３６Ｂおよびメモリ出力セレクタ部５２は、第４制御部の一例である。転置バッファ４２は、第１バッファ部の一例であり、転置バッファ５０は、第２バッファ部の一例である。
【００４４】
バッファ入力制御部３４Ａは、図５に示したロード／ストアエンジン１６から出力されるバリッド信号ＬＶＡＬＩＤに同期してイネーブル信号ＥＮ（ＥＮ０−ＥＮ７）のいずれかを出力する。また、バッファ入力制御部３４Ａは、イネーブル信号ＥＮを出力する毎に、バッファ出力制御部３６Ａに転送開始信号ＴＳ１を出力する。ロード／ストアエンジン１６は、複数のデータを含むデータ群を転置部１８に出力する毎に、バリッド信号ＬＶＡＬＩＤを出力する。
【００４５】
バッファ入力制御部３４Ａは、ロード命令に対応して受信する複数のバリッド信号ＬＶＡＬＩＤに同期してイネーブル信号ＥＮ０−ＥＮ７を順次出力する。なお、以下では、説明を分かりやすくするため、１つのロード命令に対応して、８つのデータ群が転置部１８に供給される例を説明するが、１つのロード命令に対応して、転置部１８に供給されるデータ群の数は、”１”から”８”のいずれでもよい。例えば、各データ群は、２５６ビットである。バッファ入力制御部３４Ａが生成するイネーブル信号ＥＮ０−ＥＮ７の例は、図１４に示される。
【００４６】
式（１）は、ロード命令ｌｄの一例を示す。ロード命令ｌｄは、オペランドにメモリアドレスｍａｄｄｒ、レジスタアドレスｒａｄｄｒ、転送長ｌｅｎｇｔｈおよび転置フラグｔｒａｎｓを含む。メモリアドレスｍａｄｄｒは、データを読み出すメモリ２１０の先頭アドレスを示し、レジスタアドレスｒａｄｄｒは、データを書き込むレジスタファイルＲＦの先頭アドレスを示す。転送長ｌｅｎｇｔｈは、転送するデータの数（バイト数またはワード数）を示す。転置フラグｔｒａｎｓは、メモリ２１０から読み出したデータを転置してレジスタ部２２に書き込む場合、”１”に設定され、メモリ２１０から読み出したデータを転置せずにレジスタ部２２に書き込む場合、”０”に設定される。以下では、説明を分かりやすくするために、レジスタアドレスｒａｄｄｒは、図１２に示す各レジスタファイルＲＦ０−ＲＦ７のどの位置に書くかを番号で示し、転送長ｌｅｎｇｔｈは、２５６バイトであるとする。
ｌｄ  ｍａｄｄｒ  ｒａｄｄｒ  ｌｅｎｇｔｈ  ｔｒａｎｓ  ‥‥  （１）
バッファ出力制御部３６Ａは、バッファ入力制御部３４Ａから転送開始信号ＴＳ１を受け、カウンタ３８Ａを動作させ、カウンタ３８Ａが計数するカウンタ値に応じた選択信号ＳＥＬ０−ＳＥＬ７を出力する。選択信号ＳＥＬ０−ＳＥＬ７は、第１選択信号の一例であり、バッファ出力制御部３６Ａは、選択信号ＳＥＬ０−ＳＥＬ７を順次生成する第１信号生成部の一例である。
【００４７】
例えば、バッファ出力制御部３６Ａは、データ線Ｄ０−Ｄ７を制御するためカウンタ３８Ａを有する。カウンタ３８Ａは、転送開始信号ＴＳ１を受信すると計数を開始し、選択信号ＳＥＬ０−ＳＥＬ７をそれぞれ生成する。バッファ出力制御部３６Ａのカウンタ３８Ａが生成する選択信号ＳＥＬ０−ＳＥＬ７の例は、図１５に示される。なお、選択信号ＳＥＬ０−ＳＥＬ７は、図５に示したレジスタ部２２にも供給され、データをレジスタファイルＲＦ０−ＲＦ７に格納する制御に使用される。
【００４８】
メモリ入力セレクタ部４０は、メモリバスＭＢを介して受信する２５６ビットのデータを、イネーブル信号ＥＮ０−ＥＮ７に応じて８つのデータ線（２５６ビット）のいずれかに出力する。メモリバスＭＢは、８つのメモリバスＭＢ０−ＭＢ７を有し、各メモリバスＭＢ０−ＭＢ７は、３２ビットである。メモリ入力セレクタ部４０から８つのデータ線のいずれかに出力されたデータは、転置バッファ４２に供給される。メモリ入力セレクタ部４０の例は、図７に示され、メモリ入力セレクタ部４０の動作の例は、図１４に示される。
【００４９】
転置バッファ４２は、ロード命令ｌｄに基づいて、メモリ入力セレクタ部４０を介して受信する２０４８ビットのデータを保持し、保持したデータを２５６ビットずつデータ線ＤＬ（ＤＬ０−ＤＬ７）に出力する。転置バッファ４２の例は、図７に示される。ここで、データ線ＤＬ０は、データ線ＤＬ００−ＤＬ０７を示し、データ線ＤＬ１は、データ線ＤＬ１０−ＤＬ１７を示し、データ線ＤＬ２は、データ線ＤＬ２０−ＤＬ２７を示し、データ線ＤＬ３は、データ線ＤＬ３０−ＤＬ３７を示す。データ線ＤＬ４は、データ線ＤＬ４０−ＤＬ４７を示し、データ線ＤＬ５は、データ線ＤＬ５０−ＤＬ５７を示し、データ線ＤＬ６は、データ線ＤＬ６０−ＤＬ６７を示し、データ線ＤＬ７は、データ線ＤＬ７０−ＤＬ７７を示す。各データ線ＤＬ００−ＤＬ７７は、３２ビットである。
【００５０】
レジスタ出力セレクタ部４４は、データ線ＤＬ０−ＤＬ７を介して受信する２０４８ビットのデータを、選択信号ＳＥＬ０−ＳＥＬ７に応じて３２ビットずつ選択し、選択したデータを３２ビットのデータ線Ｄ（Ｄ０−Ｄ７）のいずれかに出力する。選択信号ＳＥＬ０−ＳＥＬ７は、データ線ＤＬ０−ＤＬ７の選択にそれぞれ使用される。例えば、選択信号ＳＥＬ０−ＳＥＬ７の各々は、４ビットであり、最上位の１ビットが有効な場合、下位の３ビットの論理に応じてデータ線ＤＬ００−ＤＬ７７のいずれかが選択される。例えば、選択信号ＳＥＬ０の値（”０”から”７”）に応じて、ＤＬ００−ＤＬ０７のいずれかが選択され、選択信号ＳＥＬ１の値（”０”から”７”）に応じて、ＤＬ１０−ＤＬ１７のいずれかが選択される。レジスタ出力セレクタ部４４の例は、図８に示され、レジスタ出力セレクタ部４４の動作の例は、図１５に示される。
【００５１】
クロスバースイッチ４６は、データ線Ｄ（Ｄ０−Ｄ７）の各々をレジスタバスＲＢ（ＲＢ０−ＲＢ７）のいずれかに接続し、または、バイパス経路ＢＹＰＳをレジスタバスＲＢに接続する。クロスバースイッチ４６は、レジスタバスＲＢ（すなわち、レジスタファイルＲＦ）を、レジスタ出力セレクタ部４４の出力、レジスタ入力セレクタ部４８の入力、またはバイパス経路ＢＹＰＳに接続する切替部の一例である。なお、以下では、説明を分かりやすくするために、クロスバースイッチ４６は、データ線Ｄ０−Ｄ７をレジスタバスＲＢ０−ＲＢ７にそれぞれ接続し、接続を変更しないものとする。すなわち、各データ線Ｄは、末尾の数値が同じレジスタバスＲＢに接続される。
【００５２】
なお、レジスタ出力セレクタ部４４とレジスタ入力セレクタ部４８とは、互いに異なるデータ線Ｄ０−Ｄ７を使用してクロスバースイッチ４６に接続される。この場合、クロスバースイッチ４６は、ロード命令ｌｄに基づいて、レジスタ出力セレクタ部４４に接続されたデータ線Ｄ０−Ｄ７をレジスタバスＲＢ０−ＲＢ７に接続する。また、クロスバースイッチ４６は、ストア命令ｓｔに基づいて、レジスタバスＲＢ０−ＲＢ７をレジスタ入力セレクタ部４８に接続されたデータ線Ｄ０−Ｄ７に接続する。
【００５３】
バイパス経路ＢＹＰＳは、図１と同様に、ロード命令ｌｄに基づいてメモリ２１０から読み出されたデータを転置せずにレジスタ部２２に格納する場合に使用される。また、バイパス経路ＢＹＰＳは、レジスタ部２２に保持された演算結果等を示すデータを、ストア命令に基づいて転置せずにメモリ２１０に格納する場合に使用される。バイパス経路ＢＹＰＳを使用することで、メモリ２１０から読み出したデータを転置せずにレジスタ部２２に格納することができ、レジスタ部２２から読み出したデータを転置せずにメモリ２１０に格納することができる。
【００５４】
バッファ入力制御部３４Ｂは、図５に示したロード／ストアエンジン１６から出力されるバリッド信号ＳＶＡＬＩＤを受けると、カウンタ３８Ｂを動作させ、カウンタ３８Ｂが計数するカウンタ値に応じたイネーブル信号ＥＮ００−ＥＮ７７を出力する。イネーブル信号ＥＮ００−ＥＮ７７は、第２選択信号の一例であり、バッファ入力制御部３４Ｂは、イネーブル信号ＥＮ００−ＥＮ７７を生成する第２信号生成部の一例である。
【００５５】
例えば、バッファ入力制御部３４Ｂは、データ線Ｄ０−Ｄ７に対応してカウンタ３８Ｂを有する。カウンタ３８Ｂは、バッファ入力制御部３４Ｂによる制御に基づいて、各レジスタファイルＲＦ０−ＲＦ７からデータ線Ｄにデータが出力されるタイミングのため計数を開始し、イネーブル信号ＥＮ００−ＥＮ７７を生成する。バッファ入力制御部３４Ｂのカウンタ３８Ｂが生成するイネーブル信号ＥＮ００−ＥＮ７７の例は、図１７に示される。なお、イネーブル信号ＥＮ００−ＥＮ７７は、図５に示したレジスタ部２２にも供給され、レジスタファイルＲＦ０−ＲＦ７からデータを読み出す制御に使用される。
【００５６】
図５に示したロード／ストアエンジン１６は、ストア命令を実行する場合にレジスタファイルＲＦ０−ＲＦ７からのデータの読み出しサイクルに合わせて、バリッド信号ＳＶＡＬＩＤを出力する。また、バッファ入力制御部３４Ｂは、転置バッファ５０に最初のデータ群が揃ったことに基づいて、バッファ出力制御部３６Ｂに転送開始信号ＴＳ２を出力する。なお、以下では、説明を分かりやすくするため、１つのストア命令に対応して、転置バッファ５０が８つのデータ群を保持する例を説明するが、１つのストア命令に対応して、転置バッファ５０が保持するデータ群の数は、”１”から”８”のいずれでもよい。
【００５７】
式（２）は、ストア命令ｓｔの一例を示す。ストア命令ｓｔは、オペランドにレジスタアドレスｒａｄｄｒ、メモリアドレスｍａｄｄｒ、転送長ｌｅｎｇｔｈおよび転置フラグｔｒａｎｓを含む。レジスタアドレスｒａｄｄｒは、データを読み出すレジスタファイルＲＦの先頭アドレスを示し、メモリアドレスｍａｄｄｒは、データを書き込むメモリ２１０の先頭アドレスを示す。転送長ｌｅｎｇｔｈは、転送するデータの数（バイト数またはワード数）を示す。転置フラグｔｒａｎｓは、レジスタ部２２から読み出したデータを転置してメモリ２１０に書き込む場合、”１”に設定され、レジスタ部２２から読み出したデータを転置せずにメモリ２１０に書き込む場合、”０”に設定される。以下では、説明を分かりやすくするために、ロード命令ｌｄと同様に、レジスタアドレスｒａｄｄｒは、図１２に示す各レジスタファイルＲＦ０−ＲＦ７のどの位置に格納するかの番号を示し、転送長ｌｅｎｇｔｈは、２５６バイトであるとする。
ｓｔ  ｒａｄｄｒ  ｍａｄｄｒ  ｌｅｎｇｔｈ  ｔｒａｎｓ  ‥‥  （２）
バッファ出力制御部３６Ｂは、バッファ入力制御部３４Ｂから転送開始信号ＴＳ２を受信した場合、選択信号ＳＥＬを順次出力する。例えば、選択信号ＳＥＬは、サイクル毎に”０”から”７”まで変化する。なお、バッファ出力制御部３６Ｂは、カウンタを使用して選択信号ＳＥＬを生成してもよい。選択信号ＳＥＬは、第３選択信号の一例であり、バッファ出力制御部３６Ｂは、選択信号ＳＥＬを生成する第３信号生成部の一例である。バッファ出力制御部３６Ｂが生成する選択信号ＳＥＬの例は、図１８に示される。
【００５８】
レジスタ入力セレクタ部４８は、データ線Ｄ０−Ｄ７を介してレジスタ部２２から受信するデータを、イネーブル信号ＥＮ００−ＥＮ７７に応じて３２ビットずつ選択し、選択したデータを、データ線ＤＯ（ＤＯ０−ＤＯ７）を介して転置バッファ５０に出力する。各データ線ＤＯ０−ＤＯ７は、２５６ビット（３２ビットが８つ）である。レジスタ入力セレクタ部４８の例は、図９に示され、レジスタ入力セレクタ部４８の動作の例は、図１７に示される。
【００５９】
転置バッファ５０は、ストア命令ｓｔに基づいて、レジスタ入力セレクタ部４８を介して順次受信する２０４８ビットのデータを保持し、保持したデータを２５６ビットずつデータ線ＤＳ（ＤＳ０−ＤＳ７）に出力する。転置バッファ５０の例は、図１０に示される。ここで、データ線ＤＳ０は、データ線ＤＳ００−ＤＳ０７を示し、データ線ＤＳ１は、データ線ＤＳ１０−ＤＳ１７を示し、データ線ＤＳ２は、データ線ＤＳ２０−ＤＳ２７を示し、データ線ＤＳ３は、データ線ＤＳ３０−ＤＳ３７を示す。データ線ＤＳ４は、データ線ＤＳ４０−ＤＳ４７を示し、データ線ＤＳ５は、データ線ＤＳ５０−ＤＳ５７を示し、データ線ＤＳ６は、データ線ＤＳ６０−ＤＳ６７を示し、データ線ＤＳ７は、データ線ＤＳ７０−ＤＳ７７を示す。各データ線ＤＳ００−ＤＳ７７は、３２ビットである。
【００６０】
メモリ出力セレクタ部５２は、転置バッファ５０からデータ線ＤＳ０−ＤＳ７にそれぞれ出力される２５６ビットのデータいずれかを、選択信号ＳＥＬに応じて選択し、選択したデータをメモリバスＭＢ（ＭＢ０−ＭＢ７）に出力する。例えば、選択信号ＳＥＬは、４ビットであり、最上位の１ビットが有効な場合、下位の３ビットの論理に応じてデータ線ＤＳ０−ＤＳ７のいずれかが選択される。
【００６１】
図７は、図６に示すメモリ入力セレクタ部４０および転置バッファ４２の一例を示す。転置バッファ４２は、メモリ入力セレクタ部４０を介して供給される２５６ビットのデータをそれぞれ保持する８つの列ユニットＣＵＬ（ＣＵＬ０−ＣＵＬ７）を有する。列ユニットＣＵＬは、第１保持部の一例である。各列ユニットＣＵＬは、８つの制御単位に分かれた保持回路ＦＦを有し、保持回路ＦＦは、３２ビットのデータをそれぞれ保持し、保持したデータをデータ線ＤＬに出力する。例えば、１つの制御単位の各保持回路ＦＦは、データを保持する３２個のフリップフロップ等を含む。各保持回路ＦＦおよび各データ線ＤＬの末尾に付した２桁の数字のうち、上位の値は、列ユニットＣＵＬの番号を示し、下位の値は、データが供給されるメモリバスＭＢの番号を示す。
【００６２】
メモリ入力セレクタ部４０は、メモリバスＭＢ上の２５６ビットのデータを、イネーブル信号ＥＮ０−ＥＮ７の論理に応じて、列ユニットＣＵＬのいずれかに出力する論理回路を有する。イネーブル信号ＥＮの末尾に付した数字は、列ユニットＣＵＬの番号を示す。図７に示す例では、メモリバスＭＢにデータが転送される毎に、イネーブル信号ＥＮ０−ＥＮ７のいずれか１つが論理１に設定される。メモリバスＭＢ上のデータは、イネーブル信号ＥＮ０が論理１の場合、列ユニットＣＵＬ０に格納され、イネーブル信号ＥＮ１が論理１の場合、列ユニットＣＵＬ１に格納される。なお、各列ユニットＣＵＬの各保持回路ＦＦは、対応するイネーブル信号ＥＮが論理１の場合、図示しないクロック信号に同期してデータをラッチする。
【００６３】
図８は、図６に示すレジスタ出力セレクタ部４４の一例を示す。レジスタ出力セレクタ部４４は、図７に示した列ユニットＣＵＬ０−ＣＵＬ７に対応して８つのセレクタ４４０−４４７を有する。セレクタ４４０−４４７は、第２セレクタ部の一例である。各セレクタ４４０−４４７の末尾の数字は、データ線ＤＬを介して接続される列ユニットＣＵＬの番号と、受信する選択信号ＳＥＬ０−ＳＥＬ７の番号と、データを出力するデータ線Ｄ０−Ｄ７の番号とを示す。例えば、セレクタ４４０は、選択信号ＳＥＬ０の下位３ビットの値に応じて、８つのデータ線ＤＬ００−ＤＬ０７にそれぞれ供給される３２ビットのデータのいずれかを選択し、選択したデータをデータ線Ｄ０に出力する。なお、選択信号ＳＥＬ０の最上位ビットの論理が無効状態を示す場合、セレクタ４４０は、データ線Ｄ０へのデータの出力を停止し、データ線Ｄ０は、０を出力する。他のセレクタ４４１−４４７は、セレクタ４４０と同様に動作する。
【００６４】
図９は、図６に示すレジスタ入力セレクタ部４８の一例を示す。レジスタ入力セレクタ部４８は、図６に示すデータ線Ｄ０−Ｄ７のそれぞれに接続された８つのセレクタ４８０−４８７を有する。セレクタ４８０−４８７は、第３セレクタ部の一例である。各セレクタ４８０−４８７の末尾の数字は、データ線Ｄ０−Ｄ７の番号を示す。例えば、セレクタ４８０は、イネーブル信号ＥＮ００−ＥＮ０７の論理に応じて、データ線Ｄ０から受ける３２ビットのデータをデータ線ＤＯ００−ＤＯ０７のいずれかに出力する。イネーブル信号ＥＮ００−ＥＮ０７のいずれか１つは、データ線Ｄ０にデータが供給される毎に論理１に設定される。他のセレクタ４８１−４８７は、セレクタ４８０と同様に動作する。なお、データ線ＤＯの末尾の２桁の数字は、図１０に示す転置バッファ５０に設けられる保持回路ＦＦの番号を示す。
【００６５】
図１０は、図６に示す転置バッファ５０の一例を示す。転置バッファ５０は、データ線ＤＯを介して供給される２５６ビットのデータをそれぞれ保持する８つの列ユニットＣＵＳ（ＣＵＳ０−ＣＵＳ７）を有する。列ユニットＣＵＳは、第２保持部の一例である。各列ユニットＣＵＳは、図７に示した列ユニットＣＵＬと同様に、８つの保持回路ＦＦを有し、８つの保持回路ＦＦは、３２ビットのデータをそれぞれ保持し、保持したデータをデータ線ＤＳに出力する。なお、転置バッファ５０の保持回路ＦＦの番号は、図７に示した転置バッファ４２の保持回路ＦＦの番号と重複するが、転置バッファ５０の保持回路ＦＦと図７に示した転置バッファ４２の保持回路ＦＦとは、物理的に別なものである。
【００６６】
列ユニットＣＵＳ０−ＣＵＳ７の各保持回路ＦＦ００−ＦＦ７７は、末尾の番号が同じイネーブル信号ＥＮ００−ＥＮ７７が論理１の場合、図示しないクロック信号に同期してデータをラッチする。例えば、保持回路ＦＦ００は、イネーブル信号ＥＮ００が論理１の場合にデータをラッチし、保持回路ＦＦ１０は、イネーブル信号ＥＮ１０が論理１の場合にデータをラッチする。図１０において、各保持回路ＦＦ、各データ線ＤＯおよび各データ線ＤＳの末尾に付した２桁の数字のうち、上位の値は、列ユニットＣＵＳの番号を示し、下位の値は、データを出力するメモリバスＭＢの番号を示す。
【００６７】
図１１は、図６に示すメモリ出力セレクタ部５２の一例を示す。メモリ出力セレクタ部５２は、選択信号ＳＥＬの下位３ビットの値に応じて、データ線ＤＳに供給される２５６ビットのデータのいずれかを選択し、選択したデータをメモリバスＭＢに出力する。例えば、メモリ出力セレクタ部５２は、選択信号ＳＥＬの下位３ビットが”２”を示す場合、データ線ＤＳ２０−ＤＳ２７に供給される２５６ビットのデータをメモリバスＭＢに出力する。メモリ出力セレクタ部５２は、選択信号ＳＥＬの下位３ビットが”６”を示す場合、データ線ＤＳ６０−ＤＳ６７に供給される２５６ビットのデータをメモリバスＭＢに出力する。なお、選択信号ＳＥＬの最上位ビットの論理が無効状態を示す場合、メモリ出力セレクタ部５２は、メモリバスＭＢへのデータの出力を停止し、メモリバスＭＢは、０レベルを出力する。
【００６８】
図１２は、図５に示すレジスタ部２２の一例を示す。レジスタ部２２は、レジスタバスＲＢ０−ＲＢ７にそれぞれ接続されるレジスタファイルＲＦ０−ＲＦ７を有する。各レジスタファイルＲＦ０−ＲＦ７は、３２ビットのデータを記憶する複数の記憶領域を有する。図１２において、横方向に並ぶ３２ビットの８つの記憶領域により、ワードＷＬ（ＷＬ０−ＷＬ７：図１３に示すワード線ＷＬに対応）が構築される。レジスタファイルＲＦ０−ＲＦ７の内部構造の例は、図１３に示される。
【００６９】
ロード命令ｌｄに基づくデータのレジスタ部２２への書き込みは、例えば、ワードＷＬ毎に実行され、ストア命令ｓｔに基づくレジスタ部２２からのデータの読み出しは、ワードＷＬ毎に実行される。また、図５に示した演算実行部２０は、例えば、ワードＷＬのいずれか１つに格納されたデータ毎に演算を実行する。これは、演算実行部２０は、レジスタバスＲＢを介してワードＷＬ毎にデータを読み出すためである。この時、レジスタバスＲＢ０−ＲＢ７から、それぞれ１つのデータを同時に取り出す事が可能である。
【００７０】
それゆえ、一度に８つのデータを取り出す場合、レジスタバスＲＢ０−ＲＢ７から１つずつのデータを取り出す必要がある。つまり、一つのレジスタバスＲＢから複数のワードＷＬのデータは取り出せない。このようなケースでは、データを転置してレジスタファイルＲＦに格納することで、同時に演算できるデータをうまくレジスタファイルＲＦに配置するケースがある。
【００７１】
図１３は、図１２に示すレジスタファイルＲＦ０−ＲＦ７の一例を示す。レジスタファイルＲＦ０−ＲＦ７は、互いに同じ構造のため、以下では、レジスタファイルＲＦ０について説明する。
【００７２】
レジスタファイルＲＦ０は、マトリックス状に配置されたＳＲＡＭ（Static Random Access Memory）のメモリセルＭＣ、ワードデコーダＷＤＥＣ、読み書き制御回路ＲＷＣ、ライトアンプＷＡおよびリードアンプＲＡを有する。図１３の横方向に配列されるメモリセルＭＣは、１０２４本のワード線ＷＬ（ＷＬ０、ＷＬ１、ＷＬ２、...、ＷＬ１０２３）のいずれかに接続され、図１３の縦方向に並ぶメモリセルＭＣは、３２組のビット線対ＢＬ、／ＢＬ（ＢＬ０、／ＢＬ０、ＢＬ１、／ＢＬ１、...、ＢＬ３１、／ＢＬ３１）のいずれかに接続される。レジスタファイルＲＦ０−ＲＦ７において、番号が互いに同じワード線ＷＬに接続されるメモリセルＭＣは、同じワードＷＬに属する。なお、ワード線ＷＬの数は、１０２４本に限定されない。
【００７３】
ワードデコーダＷＤＥＣは、ロード命令ｌｄまたはストア命令ｓｔ等で指定されるレジスタアドレスｒａｄｄｒと、選択信号ＳＥＬ０またはイネーブル信号ＥＮ００−ＥＮ０７とに基づいて、ワード線ＷＬのいずれかを駆動（選択）する。ここで、レジスタアドレスｒａｄｄｒは、アクセスを開始するワード線ＷＬの番号を示し、選択信号ＳＥＬ０の値およびイネーブル信号ＥＮ００−ＥＮ０７は、アクセスを開始するワード線ＷＬからの相対位置を示す。
【００７４】
例えば、レジスタアドレスｒａｄｄｒがワード線ＷＬ０を示し、選択信号ＳＥＬ０が”１”を示す場合、ワードデコーダＷＤＥＣは、ワード線ＷＬ１を選択する。レジスタアドレスｒａｄｄｒがワード線ＷＬ１を示し、選択信号ＳＥＬ０が”１”を示す場合、ワードデコーダＷＤＥＣは、ワード線ＷＬ２を選択する。レジスタアドレスｒａｄｄｒがワード線ＷＬ０を示し、イネーブル信号ＥＮ０１を受信した場合、ワードデコーダＷＤＥＣは、ワード線ＷＬ１を選択する。レジスタアドレスｒａｄｄｒがワード線ＷＬ１を示し、イネーブル信号ＥＮ０１を受信した場合、ワードデコーダＷＤＥＣは、ワード線ＷＬ２を選択する。他のレジスタファイルＲＦ１−ＲＦ７のワードデコーダＷＤＥＣは、受信する選択信号ＳＥＬ０−ＳＥＬ７とイネーブル信号ＥＮ００−ＥＮ７７が異なることを除き、レジスタファイルＲＦ０のワードデコーダＷＤＥＣと同様に動作する。
【００７５】
互いに異なる選択信号ＳＥＬ０−ＳＥＬ７をレジスタファイルＲＦ０−ＲＦ７にそれぞれ供給することで、図１５に示すように、転置されたデータをレジスタファイルＲＦ０−ＲＦ７の各ワード線ＷＬに接続されるメモリセルＭＣに書き込むタイミングを独立に制御することができる。また、互いに異なるイネーブル信号ＥＮ００−ＥＮ７７をレジスタファイルＲＦ０−ＲＦ７にそれぞれ供給することで、図１７に示すように、レジスタファイルＲＦ０−ＲＦ７の各ワード線ＷＬに接続されるメモリセルＭＣからデータを読み出すタイミングを独立に制御することができる。したがって、レジスタファイルＲＦ０−ＲＦ７の動作を制御する制御信号を生成する回路をワード線ＷＬに接続されるメモリセルＭＣ、選択信号ＳＥＬ０−ＳＥＬ７およびイネーブル信号ＥＮ００−ＥＮ７７を使用しない場合に比べて、簡易にすることができる。
【００７６】
メモリセルＭＣは、一対のインバータの一方の出力を他方の入力に接続し、他方の出力を一方の入力に接続した記憶ノードＭＮと、記憶ノードＭＮをビット線ＢＬ、／ＢＬにそれぞれ接続する転送トランジスタＴ１、Ｔ２を有する。転送トランジスタＴ１、Ｔ２は、メモリセルＭＣに接続されるワード線ＷＬが駆動された場合（例えば、ハイレベル）、記憶ノードＭＮの一端をビット線ＢＬに接続し、記憶ノードＭＮの他端をビット線／ＢＬに接続する。そして、メモリセルＭＣにデータを書き込む書き込み動作では、ビット線ＢＬ、／ＢＬ上の相補のデータの論理に基づいて、記憶ノードＭＮに論理０または論理１が書き込まれる。メモリセルＭＣからデータを読み出す読み出し動作では、記憶ノードＭＮが記憶する論理とその逆の論理がビット線ＢＬ、／ＢＬにそれぞれ読み出される。
【００７７】
読み書き制御回路ＲＷＣは、選択信号ＳＥＬ０の受信に基づいてライトイネーブル信号ＷＲＥＮを出力し、各イネーブル信号ＥＮ００−ＥＮ０７の受信に基づいてリードイネーブル信号ＲＤＥＮを出力する。他のレジスタファイルＲＦ１−ＲＦ７の読み書き制御回路ＲＷＣは、受信する選択信号ＳＥＬ０−ＳＥＬ７とイネーブル信号ＥＮ００−ＥＮ７７が異なることを除き、レジスタファイルＲＦ０の読み書き制御回路ＲＷＣと同様に動作する。
【００７８】
ライトアンプＷＡは、ライトイネーブル信号ＷＲＥＮに基づいて、レジスタバスＲＢ０から受信する３２ビットのデータを相補のデータとして３２個のビット線対ＢＬ、／ＢＬにそれぞれ出力する。リードアンプＲＡは、リードイネーブル信号ＲＤＥＮに基づいて、メモリセルＭＣから３２個のビット線対ＢＬ、／ＢＬ上に出力された３２ビットのデータをレジスタバスＲＢ０に出力する。なお、各ビット線対ＢＬ、／ＢＬにビット線対ＢＬ、／ＢＬの電圧差を増幅するセンスアンプが接続されてもよい。
【００７９】
図１４は、図７に示すメモリ入力セレクタ部４０の動作の一例を示す。すなわち、図１４は、演算処理装置１１０の制御方法の一例を示す。図１４に示す例では、２つのロード命令ｌｄに基づいて、メモリ２１０から２０４８ビットのデータ＃０−＃６３が２回連続して読み出される。すなわち、各ロード命令ｌｄでは、式（１）に示す転送長ｌｅｎｇｔｈは、２５６バイトに指定される。図５に示したロード／ストアエンジン１６は、メモリ２１０から読み出した２０４８ビットのデータ＃０−＃６３のうちの２５６ビット（データ群）を、サイクル毎に順次出力する動作を２回繰り返す（サイクル０−サイクル７と、サイクル８−サイクル１５）。データ＃０−＃６３の各々は、３２ビットである。また、ロード／ストアエンジン１６は、ステートマシン１４からの指示に基づいて、図示しないバリッド信号ＬＶＡＬＩＤを各データ群とともに出力する。なお、サイクルは、クロックサイクルを示す。
【００８０】
バッファ入力制御部３４Ａは、バリッド信号ＬＶＡＬＩＤを受信する毎にイネーブル信号ＥＮ０−ＥＮ７のいずれかを順次出力し、バリッド信号ＬＶＡＬＩＤを受信すると転送開始信号ＴＳ１を出力する。メモリ入力セレクタ部４０は、メモリバスＭＢ（ＭＢ０−ＭＢ７）を介して順次受信する２５６ビットのデータを、イネーブル信号ＥＮ０−ＥＮ７のそれぞれに同期して、列ユニットＣＵＬ０−ＣＵＬ７のいずれかに出力する。そして、８サイクルを使用して、８つのデータ群である２０４８ビットのデータ＃０−＃６３が、データ群毎に列ユニットＣＵＬ０−ＣＵＬ７に格納される。
【００８１】
データ＃０−＃６３が格納される保持回路ＦＦの番号は、図１４において、メモリバスＭＢ０−ＭＢ７に伝達されるデータ＃０−＃６３の上側または下側に示される。例えば、最初のデータ群＃０−＃７は、列ユニットＣＵＬ０に格納され、２番目のデータ群＃８−＃１５は、列ユニットＣＵＬ１に格納され、３番目のデータ群＃１６−＃２３は、列ユニットＣＵＬ２に格納される。
【００８２】
図１５は、図８に示すレジスタ出力セレクタ部４４の動作の一例を示す。すなわち、図１５は、演算処理装置１１０の制御方法の一例を示す。図１５に示す動作は、図１４に示す動作と並行して実行される。すなわち、図１５は、２つのロード命令ｌｄに基づいて実行されるレジスタ出力セレクタ部４４の動作を示す。
【００８３】
図６に示したバッファ出力制御部３６Ａは、バッファ入力制御部３４Ａから転送開始信号ＴＳ１（図示せず）を受信したことに基づいて、”０”から”７”を示す選択信号ＳＥＬ０をサイクル毎に図８に示すセレクタ４４０に出力する。バッファ出力制御部３６Ａは、２番目の転送開始信号ＴＳ１の受信に基づいて、”０”から”７”を示す選択信号ＳＥＬ１をサイクル毎に図８に示すセレクタ４４１に出力する。さらに、バッファ出力制御部３６Ａは、転送開始信号ＴＳ１によって起動されたカウンタ３８Ａに基づいて、”０”から”７”を示す選択信号ＳＥＬ２−ＳＥＬ７のそれぞれを図８に示すセレクタ４４２−４４７に順次出力する。この後、バッファ出力制御部３６Ａは、サイクル９からサイクル１６に掛けて、順次受信する転送開始信号ＴＳ１に基づいて、”０”から”７”を示す選択信号ＳＥＬ０−ＳＥＬ７をセレクタ４４０−４４７に順次出力する動作を開始する。
【００８４】
セレクタ４４０は、列ユニットＣＵＬ０から出力されるデータ＃０−＃７を選択信号ＳＥＬ０の値に基づいて順次選択し、選択したデータ＃０−＃７をデータ線Ｄ０に出力する。セレクタ４４１は、列ユニットＣＵＬ１から出力されるデータ＃８−＃１５を選択信号ＳＥＬ１の値に基づいて順次選択し、選択したデータ＃８−＃１５をデータ線Ｄ１に出力する。同様に、セレクタ４４２−４４７は、列ユニットＣＵＬ２−ＣＵＬ７から出力されるデータを対応する選択信号ＳＥＬ２−ＳＥＬ７の値に基づいて順次選択し、選択したデータをデータ線Ｄ２−Ｄ７のいずれかに出力する。
【００８５】
データ線Ｄ０−Ｄ７は、図６に示すクロスバースイッチ４６により、レジスタバスＲＢ０−ＲＢ７にそれぞれ接続される。また、図１３で説明したように、各レジスタファイルＲＦ０−ＲＦ７は、選択信号ＳＥＬ０−ＳＥＬ７に基づいてライトイネーブル信号ＷＲＥＮを生成する。このため、各データ線Ｄ０−Ｄ７に出力されたデータは、各レジスタバスＲＢ０−ＲＢ７を介して、各レジスタファイルＲＦ０−ＲＦ７に格納される。各レジスタファイルＲＦ０−ＲＦ７において、３２ビットのデータが格納される領域は、ロード命令ｌｄに含まれるレジスタアドレスｒａｄｄｒと、選択信号ＳＥＬ０−ＳＥＬ７の値とに基づいて決められる。なお、例えば、１番目と２番目のロード命令ｌｄに含まれるレジスタアドレスｒａｄｄｒは、互いに相違するため、データは互いに異なるワード線ＷＬに接続されるメモリセルＭＣに格納される。
【００８６】
図１４に示したように、２番目のロード命令ｌｄに基づいて供給される２０４８ビットのデータのうち、最初のデータ＃０−＃７は、サイクル８において列ユニットＣＵＬ０に格納される。列ユニットＣＵＬ０−ＣＵＬ７の各保持回路ＦＦにおいて、データの書き込みは、データの読み出し後に実行される。つまり、最初に供給された２０４８ビットのデータのうち、データ＃０−＃７は、サイクル８までにレジスタファイルＲＦ０に転送済みであるため、データの上書きは発生しない。同様に、サイクル９において、２番目のデータ＃８−＃１５が列ユニットＣＵＬ１に格納される前に、列ユニットＣＵＬ１が保持する１番目のデータ＃８−＃１５は、レジスタファイルＲＦ１に転送済みであるため、データの上書きは発生しない。他の列ユニットＣＵＬにおいても、２番目のデータが格納される前に、１番目のデータは、レジスタファイルＲＦに転送済みである。
【００８７】
このため、複数のロード命令ｌｄに基づいて供給されるデータを、連続して切れ目なく転置バッファ４２に格納する場合にも、データを失うことなくデータを転置し、レジスタファイルＲＦ０−ＲＦ７に格納することができる。換言すれば、１つのロード命令ｌｄに対応する２０４８ビットのデータを保持する１つの転置バッファ４２を使用して、複数のロード命令ｌｄに対応して連続して供給されるデータを転置することができる。
【００８８】
複数のロード命令ｌｄに対応するデータを１つの転置バッファ４２を使用して転置する動作は、セレクタ４４０−４４７にそれぞれ対応する選択信号ＳＥＬ０−ＳＥＳ７の値を互いにずらして生成することで可能になる。これにより、選択信号ＳＥＬ０−ＳＥＳ７を受けて動作するセレクタ４４０−４４７は、列ユニットＣＵＬ０−ＣＵＬ７にそれぞれ保持されたデータ群を、サイクルをずらして選択することができる。
【００８９】
データ群に含まれるデータを、各データ群を転置バッファ４２に保持したサイクルの次のサイクルから順次出力することで、データをずらして出力する場合にも、最小限のサイクル数でデータをレジスタファイルＲＦ０−ＲＦ７に格納することができる。例えば、各データ群は、転置バッファ４２に保持された後、８サイクルでレジスタファイルＲＦへのデータの転送を完了することができる。また、複数のロード命令ｌｄに対応してデータを連続してレジスタ部２２に格納する場合のデータ転送レートは、後述する図２２に示す２つの転置バッファ４２ａ、４２ｂを有する転置部１８Ｃによるデータ転送レートと同じにすることができる。
【００９０】
図１６は、図５に示すプロセッサコア１２０においてロード命令ｌｄの実行時の動作の一例を示す。例えば、メモリ２１０には、データ＃０−＃６３が記憶され、太枠で示す単位でデータ＃０−＃７、＃８−＃１５、＃１６−＃２３、＃２４−＃３１、＃３２−＃３９、＃４０−＃４７、＃４８−＃５５、＃５６−＃６３がメモリ２１０から順次読み出される。
【００９１】
ロード命令ｌｄのオペランドに記述された転置フラグｔｒａｎｓが、”１”の場合、メモリ２１０から読み出された２０４８ビットのデータは、転置バッファ４２を経由してレジスタ部２２に格納される。この場合、図１６の右上に示すように、レジスタ部２２には、メモリ２１０に記憶されたデータの配列を転置したデータが保持される。すなわち、レジスタ部２２には、メモリ２１０から読み出される太枠の単位のデータ群が、レジスタファイルＲＦ０−ＲＦ７にそれぞれ格納される。転置バッファ４２から供給されるデータが格納されるレジスタ部２２は、第１レジスタ部の一例であり、転置バッファ４２から供給されるデータが格納されるワードＷＬを含むレジスタファイルＲＦ０−ＲＦ７は、第１レジスタファイルの一例である。
【００９２】
一方、ロード命令ｌｄのオペランドに記述された転置フラグｔｒａｎｓが、”０”の場合、メモリ２１０から読み出された２０４８ビットのデータは、転置バッファ４２を経由せずにレジスタ部２２に格納される。この場合、図１６の右下に示すように、レジスタ部２２には、メモリ２１０に記憶されたデータの配列を維持したデータが保持される。すなわち、レジスタ部２２には、メモリ２１０から読み出される太枠の単位のデータ群が、１つのワードＷＬのレジスタファイルＲＦ０−ＲＦ７に分散して保持される。
【００９３】
レジスタ部２２に格納されたデータは、例えば、演算命令に基づいて実行される演算に使用される。演算命令では、レジスタファイルＲＦ０−ＲＦ７にそれぞれ保持された３２ビットのデータが、８つの演算器にそれぞれ転送され、レジスタファイルＲＦ０−ＲＦ７の他のワードＷＬに保持された３２ビットのデータとの間で演算が実行される。データが２０４８ビットの場合、８回の演算が実行される。各演算の実行結果は、レジスタファイルＲＦ０−ＲＦ７の他のワードＷＬに格納される。
【００９４】
８つの演算器による演算は、レジスタファイルＲＦ０−ＲＦ７にそれぞれ保持された２５６ビットのデータを使用して実行される。このため、８回の演算の対象データのそれぞれが＃０−＃７、＃８−＃１５、...、＃５６−＃６３の場合、メモリ２１０から読み出されるデータは転置せずにレジスタファイルＲＦ０−ＲＦ７に格納される。一方、演算の対象データが＃０、＃８、＃１６、＃２４、＃３２、＃４０、＃４８、＃５６等の場合、メモリ２１０から読み出されるデータは転置バッファ４２により転置され、レジスタファイルＲＦ０−ＲＦ７に格納される。
【００９５】
図１７は、図９に示すレジスタ入力セレクタ部４８の動作の一例を示す。すなわち、図１７は、演算処理装置１１０の制御方法の一例を示す。図１７に示す例では、２つのストア命令ｓｔに基づいて、レジスタ部２２から２０４８ビットのデータ＃０−＃６３が２回連続して読み出される。以下では、最初のストア命令ｓｔに基づく２０４８ビットのデータ＃０−＃６３のレジスタ部２２からの読み出しについて説明される。２番目のストア命令ｓｔに基づく２０４８ビットのデータ＃０−＃６３のレジスタ部２２からの読み出しも、以下と同様に実行される。
【００９６】
まず、図５に示したロード／ストアエンジン１６は、ステートマシン１４からの指示に基づいて、図示しないバリッド信号ＳＶＡＬＩＤを、転置部１８が最初のデータを受信するタイミングで出力する。バッファ入力制御部３４Ｂは、最初のバリッド信号ＳＶＡＬＩＤの受信に基づいて、イネーブル信号ＥＮ００−ＥＮ０７を順次出力し、バリッド信号ＳＶＡＬＩＤの受信に基づいて、イネーブル信号ＥＮ１０−ＥＮ１７を順次出力する。
【００９７】
以下、バッファ入力制御部３４Ｂは、バリッド信号ＳＶＡＬＩＤを受信する毎に、イネーブル信号ＥＮ００−ＥＮ０７、ＥＮ１０−ＥＮ１７、ＥＮ２０−ＥＮ２７、ＥＮ３０−ＥＮ３７、ＥＮ４０−ＥＮ４７、ＥＮ５０−ＥＮ５７、ＥＮ６０−ＥＮ６７、ＥＮ７０−ＥＮ７７を順次出力する。また、バッファ入力制御部３４Ｂは、イネーブル信号ＥＮ０７とともに、転送開始信号ＴＳ２（図６）をバッファ出力制御部３６Ｂに出力する。
【００９８】
イネーブル信号ＥＮ００−ＥＮ７７は、図１３で説明したように、レジスタファイルＲＦ０−ＲＦ７にも供給され、レジスタファイルＲＦ０−ＲＦ７の所定のワードＷＬ（図１２）からデータを読み出す動作にも使用される。そして、レジスタファイルＲＦ０−ＲＦ７の所定のワードＷＬから読み出されたデータは、レジスタバスＲＢ０−ＲＢ７を介してデータ線Ｄ０−Ｄ７に供給される。レジスタファイルＲＦ０−ＲＦ７において、ストア命令ｓｔに基づいてデータが読み出されるワードＷＬは、第２レジスタファイルの一例であり、第２レジスタファイルを含むレジスタ部２２は、第２レジスタ部の一例である。
【００９９】
レジスタ入力セレクタ部４８は、データ線Ｄ０に供給されるデータ＃０−＃７を、イネーブル信号ＥＮ００−ＥＮ０７に基づいて転置バッファ５０の保持回路ＦＦ００−ＦＦ０７に順次格納する。レジスタ入力セレクタ部４８は、データ線Ｄ１に供給されるデータ＃８−＃１５を、イネーブル信号ＥＮ１０−ＥＮ１７に基づいて転置バッファ５０の保持回路ＦＦ１０−ＦＦ１７に順次格納する。同様に、レジスタ入力セレクタ部４８は、データ線Ｄ２−Ｄ７にそれぞれ供給されるデータ＃１６−＃６３を、イネーブル信号ＥＮ２０−ＥＮ７７に基づいて転置バッファ５０の保持回路ＦＦ３０−ＦＦ７７に順次格納する。データ＃０−＃６３が格納される保持回路ＦＦの番号は、図１７において、データ線Ｄ０−Ｄ７に伝達されるデータ＃０−＃６３の上側または下側に示される。
【０１００】
図１８は、図１１に示すメモリ出力セレクタ部５２の動作の一例を示す。すなわち、図１８は、演算処理装置１１０の制御方法の一例を示す。図１８に示す動作は、図１７に示す動作と並行して実行される。図６に示すバッファ出力制御部３６Ｂは、バッファ入力制御部３４Ｂから転送開始信号ＴＳ２（図示せず）を受信したことに基づいて、”０”から”７”を示す選択信号ＳＥＬを順次出力する。なお、バッファ出力制御部３６Ｂは、選択信号ＳＥＬを生成するためのカウンタを有してもよい。
【０１０１】
メモリ出力セレクタ部５２は、選択信号ＳＥＬ０に基づいて、転置バッファ５０の保持回路ＦＦ００−ＦＦ０７に保持されたデータ＃０−＃７をメモリバスＭＢ（ＭＢ０−ＭＢ７）に出力する。メモリ出力セレクタ部５２は、選択信号ＳＥＬ１に基づいて、転置バッファ５０の保持回路ＦＦ１０−ＦＦ１７に保持されたデータ＃８−＃１５をメモリバスＭＢに出力する。同様に、メモリ出力セレクタ部５２は、選択信号ＳＥＬ２−ＳＥＬ７に基づいて、転置バッファ５０の保持回路ＦＦ２０−ＦＦ７７に保持されたデータ＃１６−＃６３をメモリバスＭＢに順次出力する。データ＃０−＃６３が格納される保持回路ＦＦの番号は、図１８において、メモリバスＭＢ０−ＭＢ７に伝達されるデータ＃０−＃６３の上側または下側に示される。そして、転置バッファ５０に保持されたデータ＃０−＃６３は、メモリコントローラ１３０により、メモリ２１０に書き込まれる。
【０１０２】
図１７では、転置バッファ５０の各保持回路ＦＦにおいて、データの書き込みは、データの読み出し後に実行される。このため、最初のストア命令ｓｔに基づいてレジスタ部２２から順次読み出されたデータ群＃０−＃７は、２番目のストア命令ｓｔに基づいて、サイクル８でレジスタ部２２からデータ＃０が読み出される前に、転置バッファ５０から出力済みである。同様に、最初のストア命令ｓｔに基づいてレジスタ部２２から順次読み出されたデータ群＃８−＃１５は、２番目のストア命令ｓｔに基づいて、サイクル９でレジスタ部２２からデータ＃８が読み出される前に、転置バッファ５０から出力済みである。最初のストア命令ｓｔに基づいてレジスタ部２２から順次読み出された他のデータ群についても、２番目のストア命令ｓｔに基づいて、レジスタ部２２からデータが読み出される前に、転置バッファ５０から出力済みである。
【０１０３】
したがって、複数のストア命令ｓｔに基づいて、レジスタ部２２からデータを切れ目なく読み出して転置する場合にも、読み出したデータを失うことなく、転置バッファ５０を介してメモリ２１０に書き込むことができる。換言すれば、１つのストア命令ｓｔに対応する２０４８ビットのデータを保持する１つの転置バッファ５０を使用して、複数のストア命令ｓｔに対応してレジスタ部２２から連続して読み出されるデータを転置することができる。
【０１０４】
複数のストア命令ｓｔに対応するデータを１つの転置バッファ５０を使用して転置する動作は、セレクタ４８０−４８７にそれぞれ対応するイネーブル信号ＥＮ００−ＥＮ７７を互いにずらして生成することで可能になる。これにより、イネーブル信号ＥＮ００−ＥＮ７７を受けて動作するセレクタ４８０−４８７は、レジスタ部２２からサイクルをずらして読み出されるデータを選択することができる。
【０１０５】
また、メモリ出力セレクタ部５２は、各データ群に含まれるデータの転置バッファ５０への格納が完了したサイクルの次のサイクルでデータ群をメモリバスＭＢに出力する。これにより、レジスタ部２２からサイクルをずらしてデータを順次読み出す場合にも、最小限のサイクル数でデータをメモリ２１０に書き込むことができる。例えば、各データ群は、データ群の最初のデータがレジスタ部２２から読み出されてから８サイクル後にメモリ２１０に書き込むことができる。換言すれば、複数のストア命令ｓｔに対応してデータを連続してレジスタ部２２から読み出す場合のデータ転送レートは、後述する図２２に示す２つの転置バッファ５０ａ、５０ｂを有する転置部１８Ｃによるデータ転送レートと同じにすることができる。
【０１０６】
なお、レジスタファイルＲＦ０−ＲＦ７から読み出されるデータの配列を転置してメモリ２１０に格納する動作は、図１６の転置バッファ４２を転置バッファ５０に置き換え、メモリ２１０とレジスタ部２２間の矢印の向きを逆にすることで説明可能である。
【０１０７】
図１９は、図５に示す演算処理装置の動作フローの一例を示す。すなわち、図１９は、演算処理装置１１０の制御方法の一例を示す。図１９に示すフローは、図５に示すデコード部１２による命令のデコードに基づいて開始される。まず、ステップＳ１０において、デコード部１２がロード命令ｌｄをデコードした場合、動作はステップＳ１２に移行され、デコード部１２がロード命令ｌｄをデコードしない場合、動作はステップＳ１４に移行される。
【０１０８】
ステップＳ１２において、図５に示すプロセッサコア１２０は、ロード命令ｌｄを実行し、動作を終了する。ステップＳ１２によるロード命令ｌｄの実行フローは、図２０に示される。ステップＳ１４において、デコード部１２が演算命令をデコードした場合、動作はステップＳ１６に移行され、デコード部１２が演算命令をデコードしない場合、動作はステップＳ１８に移行される。ステップＳ１６において、図５に示すプロセッサコア１２０は、演算命令を実行し、動作を終了する。
【０１０９】
ステップＳ１８において、デコード部１２がストア命令ｓｔをデコードした場合、動作はステップＳ２０に移行され、デコード部１２がストア命令ｓｔをデコードしない場合、動作は終了する。ステップＳ２０において、図５に示すプロセッサコア１２０は、ストア命令ｓｔを実行し、動作を終了する。ステップＳ２０によるストア命令ｓｔの実行フローは、図２１に示される。
【０１１０】
図２０は、図１９のステップＳ１２で実行されるロード命令ｌｄの動作フローの一例を示す。まず、ステップＳ１２０において、図５に示すロード／ストアエンジン１６は、ロードするデータをメモリ２１０から読み出す。ステップＳ１２０の後、動作は、ステップＳ１２２に移行される。
【０１１１】
ステップＳ１２２において、データを転置する場合、動作は、ステップＳ１２４に移行され、データを転置しない場合、動作は、ステップＳ１２８に移行される。ステップＳ１２４において、図６に示す転置部１８は、メモリ２１０から読み出したデータを転置バッファ４２に順次格納する。ステップＳ１２６において、転置部１８は、データを転置バッファ４２に格納する毎に、サイクルをずらしながら、転置バッファ４２に格納したデータを順次読み出し、レジスタファイルＲＦ０−ＲＦ７に格納する。データは、転置バッファ４２を介してレジスタ部２２に格納される過程で転置される。なお、図１４および図１５に示したように、ステップＳ１２４、Ｓ１２６の動作は、並列に実行される。ステップＳ１２４、Ｓ１２６の後、動作は終了する。
【０１１２】
一方、ステップＳ１２８において、転置部１８は、演算に使用するためにメモリ２１０から読み出したデータを、バイパス経路ＢＹＰＳを介してレジスタファイルＲＦ０−ＲＦ７に格納し、動作を終了する。
【０１１３】
図２１は、図１９のステップＳ２０で実行されるストア命令ｓｔの動作フローの一例を示す。まず、ステップＳ２００において、データを転置する場合、動作は、ステップＳ２０２に移行され、データを転置しない場合、動作は、ステップＳ２０６に移行される。ステップＳ２０２において、図６に示す転置部１８は、レジスタファイルＲＦ０−ＲＦ７において読み出し対象のワードＷＬが保持するデータを、サイクルをずらしながら順次読み出し、読み出したデータを転置バッファ５０に格納する。
【０１１４】
また、ステップＳ２０４において、転置部１８は、転置バッファ５０にデータ群が揃う毎に、データ群をメモリ２１０に出力する。なお、図１７および図１８に示したように、ステップＳ２０２、Ｓ２０４の動作は、並列に実行される。ステップＳ２０２、Ｓ２０４の後、動作は終了する。
【０１１５】
一方、ステップＳ２０６において、転置部１８は、レジスタファイルＲＦ０−ＲＦ７において読み出し対象のワードＷＬが保持するデータを読み出し、読み出したデータを、バイパス経路ＢＹＰＳを介してメモリ２１０から書き込み、動作を終了する。
【０１１６】
図２２は、転置部の他の例を示す。図６と同じ要素については、同じ符号を付し、詳細な説明は省略する。例えば、図２２に示す転置部１８Ｃは、図５に示す転置部１８の代わりにプロセッサコア１２０に搭載される。
【０１１７】
転置部１８Ｃは、メモリバスＭＢを介してメモリ２１０（図５）から読み出される２０４８ビットのデータを転置するために保持する２つの転置バッファ４２ａ、４２ｂを有する。また、転置部１８Ｃは、レジスタファイルＲＦ０−ＲＦ７から読み出される２０４８ビットのデータを転置するために保持する２つの転置バッファ５０ａ、５０ｂを有する。
【０１１８】
さらに、転置部１８Ｃは、データシフト制御部３２Ｄ、３２Ｅ、メモリ入力セレクタ部４０Ｃａ、４０Ｃｂ、レジスタ出力セレクタ部４４Ｃａ、４４Ｃｂ、クロスバースイッチ４６、レジスタ入力セレクタ部４８Ｃａ、４８Ｃｂおよびメモリ出力セレクタ部５２Ｃａ、５２Ｃｂを有する。データシフト制御部３２Ｄは、バッファ入力制御部３４Ｄと、カウンタ３８Ｄを含むバッファ出力制御部３６Ｄとを有する。データシフト制御部３２Ｅは、カウンタ３８Ｅを含むバッファ入力制御部３４Ｅと、バッファ出力制御部３６Ｅとを有する。
【０１１９】
バッファ入力制御部３４Ｄは、イネーブル信号ＥＮ（ＥＮａ０−ＥＮａ７、ＥＮｂ０−ＥＮｂ７）のいずれかを出力することを除き、図６に示すバッファ入力制御部３４Ａと同様の機能を有する。また、バッファ入力制御部３４Ｄは、イネーブル信号ＥＮａ０の出力から７サイクル後に転送開始信号ＴＳ１ａを出力し、イネーブル信号ＥＮｂ０の出力から７サイクル後に転送開始信号ＴＳ１ｂを出力する。
【０１２０】
バッファ出力制御部３６Ｄは、選択信号ＳＥＬ０−ＳＥＬ７の代わりに選択信号ＳＥＬｄａ、ＳＥＬｄｂを出力することを除き、図６に示すバッファ出力制御部３６Ａと同様の機能を有する。バッファ出力制御部３６Ｄは、転送開始信号ＴＳ１ａの受信に基づいて、４ビットの選択信号ＳＥＬｄａの下位３ビットをカウンタ３８Ｄに生成させる。また、バッファ出力制御部３６Ｄは、転送開始信号ＴＳ１ｂの受信に基づいて、４ビットの選択信号ＳＥＬｄｂの下位３ビットをカウンタ３８Ｄに生成させる。各選択信号ＳＥＬｄａ、ＳＥＬｄｂは、最上位の１ビットが有効な場合、下位の３ビットが有効になる。
【０１２１】
メモリ入力セレクタ部４０Ｃａ、４０Ｃｂの各々は、図７に示すメモリ入力セレクタ部４０と同じ構成を有する。メモリ入力セレクタ部４０Ｃａは、メモリバスＭＢを介して受信する２５６ビットのデータを、イネーブル信号ＥＮａ０−ＥＮａ７に応じて８つのデータ線（２５６ビット）のいずれかに出力する。メモリ入力セレクタ部４０Ｃｂは、メモリバスＭＢを介して受信する２５６ビットのデータを、イネーブル信号ＥＮｂ０−ＥＮｂ７に応じて８つのデータ線（２５６ビット）のいずれかに出力する。イネーブル信号ＥＮａ０−ＥＮａ７は、データを転置バッファ４２ａに出力するために使用され、イネーブル信号ＥＮｂ０−ＥＮｂ７は、データを転置バッファ４２ｂに出力するために使用される。メモリ入力セレクタ部４０Ｃａ、４０Ｃｂの動作の例は、図２６に示される。
【０１２２】
転置バッファ４２ａ、４２ｂの各々は、図７に示す転置バッファ４２と同じ構成を有する。すなわち、転置バッファ４２ａは、図７に示す転置バッファ４２と同様に、６４個の保持回路ＦＦａ（ＦＦａ００−ＦＦａ０７、ＦＦａ１０−ＦＦａ１７、ＦＦａ２０−ＦＦａ２７、...、ＦＦａ７０−ＦＦａ７７）を有する。転置バッファ４２ｂは、図７に示す転置バッファ４２と同様に、６４個の保持回路ＦＦｂ（ＦＦｂ００−ＦＦｂ０７、ＦＦｂ１０−ＦＦｂ１７、ＦＦｂ２０−ＦＦｂ２７、...、ＦＦｂ７０−ＦＦｂ７７）を有する。
【０１２３】
転置バッファ４２ａは、保持した２０４８ビットのデータをデータ線ＤＬａ（ＤＬａ００−ＤＬａ７７）に出力し、転置バッファ４２ｂは、保持した２０４８ビットのデータをデータ線ＤＬｂ（ＤＬｂ００−ＤＬｂ７７）に出力する。データ線ＤＬａ００−ＤＬａ７７は、図７に示すＤＬ００−ＤＬ７７にそれぞれ対応し、データ線ＤＬｂ００−ＤＬｂ７７は、図７に示すＤＬ００−ＤＬ７７にそれぞれ対応する。各データ線ＤＬａ００−ＤＬａ７７および各データ線ＤＬｂ００−ＤＬｂ７７は、３２ビットであり、例えば、データ線ＤＬａ００−ＤＬａ０７は、２５６ビットである。例えば、データ線ＤＬａ００−ＤＬａ０７は、転置バッファ４２ａの列ユニットＣＵＬ０に接続され、データ線ＤＬｂ７０−ＤＬｂ７７は、転置バッファ４２ｂの列ユニットＣＵＬ７に接続される。
【０１２４】
レジスタ出力セレクタ部４４Ｃａは、データ線ＤＬａ（ＤＬａ００−ＤＬａ７７）を介して受信するデータを、選択信号ＳＥＬｄａに応じてデータ線Ｄ０−Ｄ７に出力する。レジスタ出力セレクタ部４４Ｃｂは、データ線ＤＬｂ（ＤＬｂ００−ＤＬｂ７７）を介して受信するデータを、選択信号ＳＥＬｄｂに応じてデータ線Ｄ０−Ｄ７に出力する。レジスタ出力セレクタ部４４Ｃａ、４４Ｃｂの例は、図２３に示される。
【０１２５】
バッファ入力制御部３４Ｅは、イネーブル信号ＥＮ００−ＥＮ７７の代わりにイネーブル信号ＥＮａ００−ＥＮａ７７、ＥＮｂ００−ＥＮｂ７７を出力することを除き、図６に示すバッファ入力制御部３４Ｂと同様の機能を有する。バッファ入力制御部３４Ｅは、図５に示したロード／ストアエンジン１６から出力されるバリッド信号ＳＶＡＬＩＤを受ける毎に、カウンタ３８Ｅを動作させる。そして、バッファ入力制御部３４Ｅは、カウンタ３８Ｅが計数するカウンタ値に応じたイネーブル信号ＥＮａ００−ＥＮａ７７、ＥＮｂ００−ＥＮｂ７７を出力する。
【０１２６】
また、バッファ入力制御部３４Ｅは、カウンタ３８Ｅを有する。バッファ入力制御部３４Ｅは、各レジスタファイルＲＦ０−ＲＦ７からデータ線Ｄにデータが出力されるタイミングに合わせて、カウンタ３８Ｅに計数を開始させる。そして、カウンタ３８Ｅにイネーブル信号ＥＮａ００−ＥＮａ７７またはイネーブル信号ＥＮｂ００−ＥＮｂ７７を生成させる。カウンタ３８Ｅが生成するイネーブル信号ＥＮａ００−ＥＮａ７７、ＥＮｂ００−ＥＮｂ７７の例は、図２８に示される。
【０１２７】
レジスタ入力セレクタ部４８Ｃａは、イネーブル信号ＥＮａ００−ＥＮａ７７に応じて、クロスバースイッチ４６を介してデータ線Ｄ０−Ｄ７に供給されるデータを、データ線ＤＯａ０−ＤＯａ７を介して転置バッファ５０ａに出力する。レジスタ入力セレクタ部４８Ｃｂは、イネーブル信号ＥＮｂ００−ＥＮｂ７７に応じて、クロスバースイッチ４６を介してデータ線Ｄ０−Ｄ７に供給されるデータを、データ線ＤＯｂ０−ＤＯｂ７を介して転置バッファ５０ｂに出力する。レジスタ入力セレクタ部４８Ｃａ、４８Ｃｂの例は、図２４に示される。
【０１２８】
転置バッファ５０ａ、５０ｂの各々は、図１０に示す転置バッファ５０と同じ構成を有する。転置バッファ５０ａは、データ線ＤＯａ０−ＤＯａ７に供給される２０４８ビットのデータを保持し、保持したデータをデータ線ＤＳａ（ＤＳａ００−ＤＳａ７７）に出力する。転置バッファ５０ｂは、データ線ＤＯｂ０−ＤＯｂ７に供給される２０４８ビットのデータを保持し、保持したデータをデータ線ＤＳｂ（ＤＳｂ００−ＤＳｂ７７）に出力する。
【０１２９】
メモリ出力セレクタ部５２Ｃａは、データ線ＤＳａを介して受信するデータを、選択信号ＳＥＬｅａに応じて選択し、選択したデータをメモリバスＭＢに出力する。メモリ出力セレクタ部５２Ｃｂは、データ線ＤＳｂを介して受信するデータを、選択信号ＳＥＬｅｂに応じて選択し、選択したデータをメモリバスＭＢに出力する。メモリ出力セレクタ部５２Ｃａ、５２Ｃｂの例は、図２５に示される。
【０１３０】
図２３は、図２２に示すレジスタ出力セレクタ部４４Ｃａ、４４Ｃｂの一例を示す。レジスタ出力セレクタ部４４Ｃａ、４４Ｃｂの各々は、選択信号ＳＥＬ０−ＳＥＬ７の代わりに共通の選択信号ＳＥＬｄａまたは共通の選択信号ＳＥＬｄｂを受けることを除き、図８に示すレジスタ出力セレクタ部４４と同じ構成を有する。レジスタ出力セレクタ部４４Ｃａは、データ線ＤＯ−Ｄ７のそれぞれにデータを出力する８つのセレクタを有する。８つのセレクタは、選択信号ＳＥＬｄａの下位３ビットの値が”０”から”７”の場合、選択信号ＳＥＬｄａの値に応じて、転置バッファ５０ａの各列ユニットＣＵＬ０−ＣＵＬ７が保持する２５６ビットのデータから３２ビットを選択してデータ線Ｄ０−Ｄ７のいずれかに出力する。レジスタ出力セレクタ部４４Ｃｂは、データ線ＤＯ−Ｄ７のそれぞれにデータを出力する８つのセレクタを有する。８つのセレクタは、選択信号ＳＥＬｄｂの下位３ビットの値が”０”から”７”の場合、選択信号ＳＥＬｄｂの値に応じて、転置バッファ５０ｂの各列ユニットＣＵＬ０−ＣＵＬ７が保持する２５６ビットのデータから３２ビットを選択してデータ線Ｄ０−Ｄ７のいずれかに出力する。
【０１３１】
図２４は、図２２に示すレジスタ入力セレクタ部４８Ｃａ、４８Ｃｂの一例を示す。レジスタ入力セレクタ部４８Ｃａ、４８Ｃｂの各々は、イネーブル信号ＥＮの代わりにイネーブル信号ＥＮａまたはイネーブル信号ＥＮｂを受けることを除き、図９に示すレジスタ入力セレクタ部４８と同じ構成を有する。レジスタ入力セレクタ部４８Ｃａは、データ線Ｄ（ＤＯ−Ｄ７）をデータ線ＤＯａ（ＤＯａ０−ＤＯａ７）に接続する８つのセレクタ４８０Ｃａ、４８１Ｃａ、...、４８７Ｃａを有する。各セレクタ４８０Ｃａ、４８１Ｃａ、...、４８７Ｃａは、イネーブル信号ＥＮａに応じてデータ線をデータ線ＤＯａに接続する。レジスタ入力セレクタ部４８Ｃｂは、データ線Ｄ（ＤＯ−Ｄ７）をデータ線ＤＯａ（ＤＯｂ０−ＤＯｂ７）に接続する８つのセレクタ４８０Ｃｂ、４８１Ｃｂ、...、４８７Ｃｂを有する。各セレクタ４８０Ｃｂ、４８１Ｃｂ、...、４８７Ｃｂは、イネーブル信号ＥＮｂに応じてデータ線をデータ線ＤＯｂに接続する。
【０１３２】
図２５は、図２２に示すメモリ出力セレクタ部５２Ｃａ、５２Ｃｂの一例を示す。メモリ出力セレクタ部５２Ｃａ、５２Ｃｂの各々は、選択信号ＳＥＬの代わりに選択信号ＳＥＬｅａ、ＳＥＬｅｂを受けることを除き、図１１に示すメモリ出力セレクタ部５２Ｃと同じ構成である。メモリ出力セレクタ部５２Ｃａは、選択信号ＳＥＬｅａの下位３ビットが”２”を示す場合、データ線ＤＳａ２０−ＤＳａ２７に供給される２５６ビットのデータをメモリバスＭＢに出力する。メモリ出力セレクタ部５２Ｃｂは、選択信号ＳＥＬｅｂの下位３ビットが”６”を示す場合、データ線ＤＳｂ６０−ＤＳｂ６７に供給される２５６ビットのデータをメモリバスＭＢに出力する。なお、選択信号ＳＥＬｅａ、ＳＥＬｅｂの最上位ビットの論理が無効状態を示す場合、メモリ出力セレクタ部５２Ｃａ、５２Ｃｂは、メモリバスＭＢへのデータの出力を停止する。
【０１３３】
図２６は、図２２に示すメモリ入力セレクタ部４０Ｃａ、４０Ｃｂの動作の一例を示す。図２６に示す例では、２つのロード命令ｌｄに基づいて、メモリ２１０から２０４８ビットのデータ＃０−＃６３が２回連続して読み出される。最初に読み出された２０４８ビットのデータは、転置バッファ４２ａの保持回路ＦＦａに格納され、２番目に読み出された２０４８ビットのデータは、転置バッファ４２ｂの保持回路ＦＦｂに格納される。データを格納する保持回路ＦＦａ、ＦＦｂ（すなわち、列ユニットＣＵＬ０−ＣＵＬ７）は、イネーブル信号ＥＮａ０−ＥＮａ７、ＥＮｂ０−ＥＮｂ７に応じて選択される。
【０１３４】
図２７は、図２２に示すレジスタ出力セレクタ部４４Ｃａ、４４Ｃｂの動作の一例を示す。図２７に示す動作は、図２６に示す動作と並行して実行される。レジスタ出力セレクタ部４４Ｃａは、選択信号ＳＥＬｄａの値に応じて、転置バッファ４２ａの各列ユニットＣＵＬ０−ＣＵＬ７から３２ビットを選択し、選択したデータをデータ線Ｄ０−Ｄ７に出力する。また、レジスタ出力セレクタ部４４Ｃｂは、選択信号ＳＥＬｄｂの値に応じて、転置バッファ４２ｂの各列ユニットＣＵＬ０−ＣＵＬ７から３２ビットを選択し、選択したデータをデータ線Ｄ０−Ｄ７に出力する。これにより、転置バッファ４２ａ、４２ｂに保持されたデータが転置されて、レジスタファイルＲＦ０−ＲＦ７に格納される。なお、転置バッファ４２ａに保持されたデータと、転置バッファ４２ｂに保持されたデータとは、レジスタファイルＲＦ０−ＲＦ７において、互いに異なるワードＷＬに重複することなく格納される。
【０１３５】
図２６および図２７に示すように、２つの転置バッファ４２ａ、４２ｂに交互に２０４８ビットのデータを保持することで、データを失うことなく転置データを連続して生成し、生成した転置データをレジスタファイルＲＦ０−ＲＦ７に格納することができる。すなわち、図２２に示す転置部１８Ｃは、図１４および図１５と同様の転置動作を実行することができる。しかしながら、この場合、転置バッファ４２ａ、４２ｂに搭載される保持回路ＦＦの数（１２８個）は、図６に示す転置バッファ４２に搭載される保持回路ＦＦの数（６４個）の２倍になる。換言すれば、転置バッファ４２ａ、４２ｂに搭載されるフリップフロップの数（４０９６個）は、転置バッファ４２に搭載されるフリップフロップの数（２０４８個）の２倍になる。
【０１３６】
図２８は、図２２に示すレジスタ入力セレクタ部４８Ｃａ、４８Ｃｂの動作の一例を示す。レジスタ入力セレクタ部４８Ｃａは、イネーブル信号ＥＮａ００−ＥＮａ７７に応じて、データ線Ｄ０−Ｄ７に順次供給されるデータをデータ線ＤＯａ０−ＤＯａ７に出力する。これにより、データ線Ｄ０−Ｄ７に供給されたデータは、転置バッファ５０ａに格納される。一方、レジスタ入力セレクタ部４８Ｃｂは、イネーブル信号ＥＮｂ００−ＥＮｂ７７に応じて、データ線Ｄ０−Ｄ７に順次供給されるデータをデータ線ＤＯｂ０−ＤＯｂ７に出力する。これにより、データ線Ｄ０−Ｄ７に供給されたデータは、転置バッファ５０ｂに格納される。
【０１３７】
図２９は、図２２に示すメモリ出力セレクタ部５２Ｃａ、５２Ｃｂの動作の一例を示す。図２９に示す動作は、図２８に示す動作と並行して実行される。メモリ出力セレクタ部５２Ｃａは、選択信号ＳＥＬｅａの値に応じて、転置バッファ５０ａの列ユニットＣＵＬ０−ＣＵＬ７がそれぞれ保持する２５６ビットのデータのいずれかを選択し、選択したデータをメモリバスＭＢ（ＭＢ０−ＭＢ７）に出力する。また、メモリ出力セレクタ部５２Ｃｂは、選択信号ＳＥＬｅｂの値に応じて、転置バッファ５０ｂの列ユニットＣＵＬ０−ＣＵＬ７がそれぞれ保持する２５６ビットのデータのいずれかを選択し、選択したデータをメモリバスＭＢ（ＭＢ０−ＭＢ７）に出力する。そして、レジスタファイルＲＦ０−ＲＦ７から読み出されたデータが転置されて、メモリ２１０に書き込まれる。
【０１３８】
図２８および図２９に示すように、２つの転置バッファ５０ａ、５０ｂに交互に２０４８ビットのデータを保持することで、データを失うことなく、レジスタファイルＲＦ０−ＲＦ７から連続して読み出されたデータの配列を転置することができる。すなわち、図２２に示す転置部１８Ｃは、図１７および図１８と同様の転置動作を実行することができる。しかしながら、この場合、転置バッファ５０ａ、５０ｂに搭載される保持回路ＦＦの数（１２８個）は、図６に示す転置バッファ５０に搭載される保持回路ＦＦの数（６４個）の２倍になる。換言すれば、転置バッファ５０ａ、５０ｂに搭載されるフリップフロップの数（４０９６個）は、転置バッファ５０ｂに搭載されるフリップフロップの数（２０４８個）の２倍になる。
【０１３９】
換言すれば、図６に示す転置部１８では、クロック信号に同期して動作する保持回路ＦＦの数を、図２２に示す転置部１８Ｃに比べて半分にすることができる。したがって、転置バッファ４２、５０の回路サイズを、転置バッファ４２ａ、４２ｂ、５０ａ、５０ｂの回路サイズのほぼ半分にすることができる。また、転置バッファ４２、５０の消費電力を、転置バッファ４２ａ、４２ｂ、５０ａ、５０ｂの消費電力のほぼ半分にすることができる。この結果、図５に示す演算処理装置１１０のチップサイズを、転置部１８Ｃが搭載される演算処理装置のチップサイズに比べて削減することができる。また、図５に示す演算処理装置１１０の消費電力を、転置部１８Ｃが搭載される演算処理装置の消費電力に比べて削減することができる。
【０１４０】
以上、図５から図２１に示す実施形態において、図１から図４に示す実施形態と同様の効果を得ることができる。例えば、転置するデータが転置バッファ４２に連続して供給される場合にも、データを失うことなくデータを転置し、転置したデータをレジスタ部２２に格納することができる。したがって、演算実行部２０は、複数のロード命令ｌｄに基づいてメモリ２１０から連続して読み出され、転置バッファ４２を利用して転置されたデータを使用して、複数の演算を連続して実行することができる。
【０１４１】
連続して供給されるデータを１つの転置バッファ４２を使用して転置できるため、２つの転置バッファ４２ａ、４２ｂ（図２２）を使用してデータを転置する場合に比べて回路規模を削減することができる。メモリ２１０から読み出され、バイパス経路ＢＹＰＳを介して供給されるデータを、クロスバースイッチ４６を介してレジスタ部２２に転送することで、データを転置せずにレジスタファイルＲＦ０−ＲＦ７に格納することができる。
【０１４２】
さらに、図５から図２１に示す実施形態では、例えば、以下の効果を得ることができる。複数のストア命令ｓｔに基づいて、レジスタ部２２から転置バッファ５０にデータが切れ目なく転送される場合にも、転置バッファ５０に格納されたデータを失うことなく読み出すことで転置し、転置したデータをメモリ２１０に書き込むことができる。レジスタ部２２から連続して読み出されるデータを１つの転置バッファ５０を使用して転置できるため、データを２つの転置バッファ５０ａ、５０ｂ（図２２）を使用して転置する場合に比べて回路規模を削減することができる。レジスタ部２２から読み出されたデータを、クロスバースイッチ４６を介してバイパス経路ＢＹＰＳに転送することで、データを転置せずにメモリ２１０に書き込むことができる。
【０１４３】
転置バッファ４２の列ユニットＣＵＬ０−ＣＵＬ７に保持されたデータを、選択信号ＳＥＬ０−ＳＥＬ７を使用してそれぞれ選択することで、データのデータ線Ｄ０−Ｄ７への出力タイミングを独立に制御することができる。これにより、転置バッファ４２にデータが連続して供給される場合にも、各列ユニットＣＵＬ０−ＣＵＬ７に保持されたデータを、失うことなく読み出すことができる。さらに、レジスタ出力セレクタ部４４を制御する選択信号ＳＥＬ０−ＳＥＬ７を、レジスタファイルＲＦ０−ＲＦ７に供給することで、転置されたデータをレジスタファイルＲＦ０−ＲＦ７の各ワードＷＬに書き込むタイミングを独立に制御することができる。
【０１４４】
レジスタ部２２からデータ線Ｄ０−Ｄ７に順次読み出されるデータを、イネーブル信号ＥＮ００−ＥＮ７７を使用してレジスタ入力セレクタ部４８のセレクタ４８０−４８７に選択させることで、図１７に示した動作を実現することができる。さらに、レジスタ入力セレクタ部４８を制御するイネーブル信号ＥＮ００−ＥＮ７７を、レジスタファイルＲＦ０−ＲＦ７に供給することで、レジスタ入力セレクタ部４８の動作タイミングに合わせて、レジスタ部２２からデータを読み出すことができる。
【０１４５】
転置バッファ４２、５０に搭載される保持回路ＦＦの数を、図２２に示した転置バッファ４２ａ、４２ｂ、５０ａ、５０ｂに搭載される保持回路ＦＦの数の半分にすることができる。このため、図５に示す演算処理装置１１０のチップサイズを、図２２に示す演算処理装置１８Ｃのチップサイズに比べて削減することができる。また、保持回路ＦＦの数の削減により、転置バッファ４２、５０の消費電力を、転置バッファ４２ａ、４２ｂ、５０ａ、５０ｂの消費電力のほぼ半分にすることができる。この結果、図５に示す演算処理装置１１０の転置部１８の消費電力を、図２２に示す転置部１８Ｃの消費電力に比べて削減することができる。
【０１４６】
さらに、演算処理装置１８が複数のロード命令ｌｄを連続して実行することによりメモリ２１０からレジスタ部２２に転送されるデータの転送レートを、演算処理装置１８Ｃによるデータの転送レートと同じにすることができる。また、演算処理装置１８が複数のストア命令ｓｔを連続して実行することによりレジスタ部２２からメモリ２１０に転送されるデータの転送レートを、演算処理装置１８Ｃによるデータの転送レートと同じにすることができる。したがって、演算処理装置１８は、データの転送効率を下げることなく、演算処理装置１８Ｃに比べて、チップサイズを削減し、消費電力を削減することができる。
【０１４７】
以上の図１から図２１に示す実施形態に関し、さらに以下の付記を開示する。
（付記１）
演算を実行する演算実行部と、
前記演算実行部が演算に使用するデータを格納する第１レジスタ部と、
データを保持する第１バッファ部と、
データの配列を変更してデータを前記第１レジスタ部に格納する場合、順次受信する複数のデータ群を前記第１バッファ部に格納する第１制御部と、
前記複数のデータ群の各々を前記第１バッファ部が格納する毎に、前記第１バッファ部に格納されたデータ群に含まれるデータを前記第１レジスタ部に順次出力する第２制御部を有することを特徴とする演算処理装置。
（付記２）
前記第１レジスタ部に設けられ、複数のデータをそれぞれ格納する複数の第１レジスタファイルと、
前記第１バッファ部に設けられ、前記複数のデータ群をそれぞれ保持する複数の第１保持部と、
前記第１制御部に設けられ、前記複数のデータ群の各々を前記複数の第１保持部のいずれかに出力する第１セレクタ部と、
前記第２制御部に設けられる複数の第２セレクタ部と、
前記複数の第２セレクタ部を前記複数の第１レジスタファイルにそれぞれ接続する複数の第１データ線を有し、
前記複数の第２セレクタ部の各々は、対応する第１保持部にデータ群が保持されたことに基づいて、保持されたデータ群に含まれる複数のデータを順次選択して前記複数の第１データ線のうち、対応する第１データ線に出力し、
前記演算実行部は、前記複数の第１レジスタファイルにそれぞれ保持された複数のデータを使用して演算を実行することを特徴とする付記１記載の演算処理装置。
（付記３）
前記複数の第２セレクタ部の各々は、対応する第１保持部にデータ群が保持されたサイクルの次のサイクルから、対応する第１保持部に保持されたデータ群に含まれる複数のデータを順次選択することを特徴とする付記２記載の演算処理装置。
（付記４）
前記第２制御部は、前記複数の第１保持部のいずれかがデータ群を保持する毎に、データ群が保持された第１保持部に対応する第２セレクタ部に出力する第１選択信号を順次生成する第１信号生成部を有し、
前記複数の第２セレクタ部の各々は、対応する第１保持部が保持するデータ群に含まれる複数のデータのいずれかを前記第１選択信号に基づいて選択することを特徴とする付記２または付記３記載の演算処理装置。
（付記５）
前記第１選択信号は、複数の第１レジスタファイルの各々にデータを書き込む制御に使用されることを特徴とする付記４記載の演算処理装置。
（付記６）
前記演算処理装置は、さらに、
前記演算実行部が実行する演算の実行結果を示す複数のデータをそれぞれ格納する複数の第２レジスタファイルを含む第２レジスタ部と、
前記複数の第２レジスタファイルにそれぞれ対応する複数の第２保持部を含む第２バッファ部と、
前記複数の第２レジスタファイルからサイクルをずらして順次読み出される複数のデータを、対応する第２保持部に格納する第３制御部と、
複数のデータの格納が完了した第２保持部から順に、第２保持部に格納された複数のデータを出力する第４制御部を有することを特徴とする付記１ないし付記５のいずれか１項記載の演算処理装置。
（付記７）
前記第３制御部は、
前記複数の第２レジスタファイルと前記複数の第２保持部とに対応してそれぞれ設けられる複数の第３セレクタ部と、
前記複数の第３セレクタ部のそれぞれに互いに異なるサイクルで出力する複数の第２選択信号を生成する第２信号生成部を有し、
前記複数の第３セレクタ部の各々は、対応する第２レジスタファイルから読み出される複数のデータのいずれかを、前記複数の第２選択信号の各々に基づいて選択し、選択したデータを、対応する第２保持部に出力することを特徴とする付記６記載の演算処理装置。
（付記８）
前記第２選択信号は、前記複数の第２レジスタファイルの各々からデータを読み出す制御に使用されることを特徴とする付記７記載の演算処理装置。
（付記９）
前記第４制御部は、
前記複数の第２レジスタファイルのいずれかから前記複数の第２保持部のいずれかへの複数のデータの格納が完了する毎に、複数のデータの格納が完了した第２保持部に対応する第３選択信号を生成する第３信号生成部と、
前記複数の第２保持部のいずれかに保持された複数のデータを、前記第３選択信号に基づいて選択し、選択した複数のデータを出力する第４セレクタ部を有することを特徴とする付記６ないし付記８のいずれか１項記載の演算処理装置。
（付記１０）
前記演算処理装置は、さらに、命令をデコードするデコード部を有し、
前記第１制御部および前記第２制御部は、データの転置処理を含むロード命令を前記デコード部がデコードしたことに基づいて動作することを特徴とする付記１ないし付記９のいずれか１項記載の演算処理装置。
（付記１１）
前記演算処理装置は、さらに、
順次受信する複数のデータ群を、前記第１バッファ部を経由することなく前記第１レジスタ部に転送するバイパス経路と、
前記第１バッファ部の出力または前記バイパス経路のいずれかを前記第１レジスタ部に接続する切替部を有することを特徴とする付記１ないし付記１０のいずれか１項記載の演算処理装置。
（付記１２）
前記演算処理装置は、さらに、命令をデコードするデコード部を有し、
前記第３制御部および前記第４制御部は、データの転置処理を含むストア命令を前記デコード部がデコードしたことに基づいて動作することを特徴とする付記６ないし付記９のいずれか１項記載の演算処理装置。
（付記１３）
前記演算処理装置は、さらに、
前記第２レジスタ部に保持された複数のデータを、前記第２バッファ部を経由することなく、前記第２バッファ部が出力する複数のデータを伝達するデータ線に転送するバイパス経路と、
前記第２レジスタ部を前記第２バッファ部の入力または前記バイパス経路のいずれかに接続する切替部を有することを特徴とする付記６ないし付記９、付記１２のいずれか１項記載の演算処理装置。
（付記１４）
演算を実行する演算実行部と、前記演算実行部が演算に使用するデータを格納する第１レジスタ部と、データを保持する第１バッファ部を有する演算処理装置の制御方法において、
データの配列を変更してデータを前記第１レジスタ部に格納する場合、
前記演算処理装置が有する第１制御部が、順次受信する複数のデータ群を前記第１バッファ部に格納し、
前記演算処理装置が有する第２制御部が、前記複数のデータ群の各々を前記第１バッファ部が格納する毎に、前記第１バッファ部に格納されたデータ群に含まれるデータを前記第１レジスタ部に順次出力することを特徴とする演算処理装置の制御方法。
【０１４８】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１４９】
１…演算実行部；２…レジスタ部；３…転置バッファ；４…バッファ入力制御部；５…バッファ出力制御部；１０…命令バッファ；１２…デコード部；１４…ステートマシン；１６…ロード／ストアエンジン；１８…転置部；２０…演算実行部；２２…レジスタ部；２４…積和演算器；２６…加算器；２８…乗算器；３２Ａ、３２Ｂ、３２Ｄ、３２Ｅ…データシフト制御部；３４Ａ、３４Ｂ、３４Ｄ、３４Ｅ…バッファ入力制御部；３６Ａ、３６Ｂ、３６Ｄ、３６Ｅ…バッファ出力制御部；３８Ａ、３８Ｂ、３８Ｄ、３８Ｅ…カウンタ；４０、４０Ｃａ、４０Ｃｂ…メモリ入力セレクタ部；４２、４２ａ、４２ｂ…転置バッファ；４４、４４Ｃａ、４４Ｃｂ…レジスタ出力セレクタ部；４６…クロスバースイッチ；４８、４８Ｃａ、４８Ｃｂ…レジスタ入力セレクタ部；５０、５０ａ、５０ｂ…転置バッファ；５２、５２Ｃａ、５２Ｃｂ…メモリ出力セレクタ部；１００、１１０…演算処理装置；１２０…プロセッサコア；１３０…メモリコントローラ；２００、２１０…メモリ；ＢＹＰＳ…バイパス経路；ＣＵＬ、ＣＵＳ…列ユニット；Ｄ、ＤＬ、ＤＬ１、ＤＬ２、ＤＯ、ＤＳ…データ線；ＥＮ…イネーブル信号；ＬＶＡＬＩＤ…バリッド信号；ＭＢ…メモリバス；ＲＢ…レジスタバス；ＲＦ…レジスタファイル；ＳＥＬ…選択信号；ＳＶＡＬＩＤ…バリッド信号
【図１】
2018132901.tif 000003
【図２】
2018132901.tif 000004
【図３】
2018132901.tif 000005
【図４】
2018132901.tif 000006
【図５】
2018132901.tif 000007
【図６】
2018132901.tif 000008
【図７】
2018132901.tif 000009
【図８】
2018132901.tif 000010
【図９】
2018132901.tif 000011
【図１０】
2018132901.tif 000012
【図１１】
2018132901.tif 000013
【図１２】
2018132901.tif 000014
【図１３】
2018132901.tif 000015
【図１４】
2018132901.tif 000016
【図１５】
2018132901.tif 000017
【図１６】
2018132901.tif 000018
【図１７】
2018132901.tif 000019
【図１８】
2018132901.tif 000020
【図１９】
2018132901.tif 000021
【図２０】
2018132901.tif 000022
【図２１】
2018132901.tif 000023
【図２２】
2018132901.tif 000024
【図２３】
2018132901.tif 000025
【図２４】
2018132901.tif 000026
【図２５】
2018132901.tif 000027
【図２６】
2018132901.tif 000028
【図２７】
2018132901.tif 000029
【図２８】
2018132901.tif 000030
【図２９】
2018132901.tif 000031