以下に、本願の開示する演算処理装置及び演算処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する演算処理装置及び演算処理装置の制御方法が限定されるものではない。
図1は、情報処理装置の全体構成図である。情報処理装置50は、PCI(Peripheral Component Interconnect)カード1及びホストコンピュータ2を有する。PCIカード1とホストコンピュータ2とはPCIバスで接続され、互いにデータの送受信を行う。
ホストコンピュータ2は、例えば、深層学習を実行する際の全体的な管理を行う。深層学習を実行する場合、ホストコンピュータ2は、PCIカード1に対して畳み込み演算などの深層学習における所定の演算の実行を指示する。深層学習を実行する際に、ホストコンピュータ2は、要素データのデータサイズの変更を伴うパッキング及びアンパッキングの処理の実行をPCIカード1に対して指示する。例えば、全結合演算を行うレイヤーとsoftmax演算のレイヤーとの間でのデータの授受を行う場合に、ホストコンピュータ2は、要素データのデータサイズの変更を伴うパッキング及びアンパッキングの処理の実行をPCIカード1に指示する。
PCIカード1は、ホストコンピュータ2からの指示を受けて演算を実行し、演算結果をホストコンピュータ2に出力する。例えば、PCIカード1は、深層学習における演算処理を実行する。PCIカード1は、図1に示すように、複数の処理ユニット10、全体命令制御部11、メモリコントローラ12、メモリ13及びPCI制御部14を有する。このPCIカード1が、「演算処理装置」の一例にあたる。
PCI制御部14は、演算の実行を指示する演算命令や演算で使用する演算データの入力をホストコンピュータ2から受ける。そして、PCI制御部14は、取得した演算命令や演算データをメモリコントローラ12へ出力する。
また、PCI制御部14は、指示された演算に対する演算結果の入力をメモリコントローラ12から受ける。そして、PCI制御部14は、演算結果をホストコンピュータ2へ出力する。
メモリコントローラ12は、演算命令や演算で使用する演算データの入力をPCI制御部14から受ける。そして、メモリコントローラ12は、取得した演算命令及び演算データをメモリ13へ格納する。
また、メモリコントローラ12は、演算を実行する際に用いる演算データのベクタレジスタ111への格納の指示を全体命令制御部11から受ける。そして、メモリコントローラ12は、指定された演算データを指定された積和演算部100のベクタレジスタ111へ格納する。ここで、メモリコントローラ12は、直列に並んだ処理ユニット10のうちの後段の処理ユニット10に対してデータを送信する場合、積和演算部100を迂回させてマルチプレクサ103へ演算データを出力する。
また、メモリコントローラ12は、演算結果の格納指示を全体命令制御部11から受けると、指定された積和演算部100のベクタレジスタ111から演算結果を取得しメモリ13へ格納する。さらに、メモリコントローラ12は、ホストコンピュータ2からPCI制御部14を介して指示を受けると、メモリ13に格納された演算結果を読み出し、PCI制御部14へ出力する。
全体命令制御部11は、ホストコンピュータ2から実行が指示された演算の全体の統括管理を行う。全体命令制御部11は、ホストコンピュータ2からの指示をPCI制御部14経由で受け、メモリ13に格納された全体命令列を次々と読んでは実行する。全体命令には、メモリ13から演算命令バッファ102に演算命令列を転送する命令、メモリ13から演算データをベクタレジスタ111に格納する命令、演算命令バッファ102に格納された演算命令列を演算命令制御部101に実行開始させる命令、ベクタレジスタ111に格納された演算結果をメモリ13に格納する命令、命令列の実行を終了する命令などがある。全体命令制御部11は、演算命令列を処理ユニット10に実行させる。
演算を処理ユニット10に実行させる場合、全体命令制御部11は、演算を実行する際に用いる演算データの送信をメモリコントローラ12に指示する。また、処理ユニット10における演算が完了すると、全体命令制御部11は、演算結果の格納をメモリコントローラ12に指示する。さらに、実行が指示された演算の全ての処理が完了すると、全体命令制御部11は、演算完了をメモリコントローラ12へ通知する。
全体命令制御部11は、深層学習を実行する場合、各レイヤー間のデータの授受なども制御する。その場合、全体命令制御部11は、要素データのデータサイズの変更を伴うパッキング及びアンパッキングの処理の実行を演算命令制御部101に対して指示する。その際、全体命令制御部11は、パッキング及びアンパッキングを行う対象となる配列に格納された要素データの送信をメモリコントローラ12に指示する。例えば、全結合演算を行うレイヤーとsoftmax演算のレイヤーとの間でのデータの授受を行う場合に、全体命令制御部11は、要素データのデータサイズの変更を伴うパッキング及びアンパッキングの処理の実行を演算命令制御部101に指示する。
次に、処理ユニット10について説明する。処理ユニット10は、図1に示すように1つのPCIカード1に複数搭載される。各処理ユニット10は、並列及び直列に複数接続される。処理ユニット10の数は、ある態様においては128個である。処理ユニット10は、積和演算部100、演算命令制御部101、演算命令バッファ102及びマルチプレクサ103を有する。ただし、図1の処理ユニット10は、簡略化して記載しており、詳細については後で説明する。
演算命令制御部101は、演算命令の実行処理を管理制御する。演算命令制御部101は、個々の演算の実行の指示を全体命令制御部11から受ける。処理ユニット10で実行できる命令を、全体命令と対比させて演算命令と呼んでいるが、命令には、積和演算部に演算を行わせる狭義の演算命令のほか、汎用レジスタ(図示しない)の操作命令、分岐命令、繰り返し命令、命令列の実行を停止する命令などが含まれる。
演算命令制御部101は、演算命令バッファ102に格納された演算命令を取得する。次に、演算命令制御部101は、取得した演算命令で指定された演算データの出力をベクタレジスタ111に指示する。また、演算命令制御部101は、取得した演算命令にしたがい、演算実行の指示を積和演算器112へ出力する。その後、演算命令制御部101は、積和演算器112内で演算結果を用いた演算をループさせる。また、演算命令制御部101は、例えば、要素データのデータサイズの変更を伴うパッキング及びアンパッキングの処理の実行命令を発行する。
演算命令バッファ102は、演算命令列を格納する記憶領域である。演算命令バッファ102は、メモリコントローラ12から入力された演算命令列を指示されたアドレスから入力順に格納する。その後、演算命令制御部101からの演算命令の取得要求を受けて、演算命令バッファ102は、演算命令制御部101に要求されたアドレスの演算命令を出力する。
積和演算部100は、ベクタレジスタ111及び積和演算器112を有する。ただし、積和演算部100が有するベクタレジスタ111は、処理ユニット10に搭載されたベクタレジスタ全体の一部にあたる。
ベクタレジスタ111は、演算を実行する際に用いる演算データの入力をメモリコントローラ12から受けて、入力された演算データを格納する。その後、ベクタレジスタ111は、演算命令制御部101からの指示を受けて、演算で使用する演算データを積和演算器112に出力する。また、ベクタレジスタ111は、積和演算器112の演算結果を取得して格納する。積和演算器112による演算のループ処理が完了後、メモリ13への出力の指示をメモリコントローラ12から受けると、ベクタレジスタ111は、出力を指示された領域に格納された積和演算器112の演算結果を、マルチプレクサ103へ出力する。
特に、要素データのデータサイズの変更を伴うパッキング及びアンパッキングの処理の場合、ベクタレジスタ111は、パッキング又はアンパッキングを行う要素データ、並びに、パッキング又はアンパッキングの処理後の要素データを格納する。
積和演算器112は、演算命令制御部101からの演算実行の指示を受ける。そして、積和演算器112は、ベクタレジスタ111から入力された演算データを用いて積和演算を実行する。その後、積和演算器112は、演算結果をベクタレジスタ111へ出力する。命令により累積を指示された場合は、積和演算器112は、累積演算結果を演算器内のレジスタ(アキュムレータ)に保持し、後続の累積演算命令で使用する。
積和累積演算の場合、積和演算器112は、全ての演算が完了するまでベクタレジスタ111から入力された値に対する積和演算を繰返す。その後、積和累積演算のループ処理が終了すると、積和演算器112は、演算結果をベクタレジスタ111へ出力し、格納させる。
次に、図2を参照して、要素データのデータサイズの変更を伴うパッキング及びアンパッキングの処理を行う積和演算部100の機能の詳細に説明する。図2は、積和演算部の詳細な回路図である。図2では、演算命令制御部101から、ベクタレジスタ111A、積和演算器112A、読出ライン変更回路121A、バイトシャッフル回路122A、宛先バイト書込可否選択回路123A、宛先ライン選択回路124A及びルータ125へ延びる信号経路を記載した。ただし、実際には、演算命令制御部101からの信号経路は、他のベクタレジスタ111B~111C、積和演算器112B~112C、読出ライン変更回路121B~121C、バイトシャッフル回路122B~122Cへも延びる。また、演算命令制御部101からの信号経路は、宛先バイト書込可否選択回路123B~123C及び宛先ライン選択回路124B~124Cへも延びる。
積和演算部100は、図2に示すように、図1に示した積和演算器112を複数有する。ここでは、それぞれの積和演算器112を、積和演算器112A~112Cと表す。また、積和演算部100は、バンクと呼ばれる単位に分割されたベクタレジスタ111を有する。ここでは、バンク単位に分割された各ベクタレジスタ111を、ベクタレジスタ111A~111Cと表す。ベクタレジスタ111A~111Cは、それぞれ積和演算器112A~112Cに1対1で対応する。さらに、積和演算部100は、各ベクタレジスタ111A~111Cに対応させて、読出ライン変更回路121A~121C及び宛先ライン選択回路124A~124Cが配置される。また、各積和演算器112A~112Cに対応させて、バイトシャッフル回路122A~122C及び宛先バイト書込可否選択回路123A~123Cが配置される。以下の説明では、それぞれを区別しない場合、要素レジスタ113、積和演算器112、読出ライン変更回路121、バイトシャッフル回路122、宛先バイト書込可否選択回路123及び宛先ライン選択回路124と称する。
さらに、ベクタレジスタ111A~111Cからバイトシャッフル回路122A~122Cを介して積和演算器112A~112Cへ繋がる経路上に、ルータ125が配置される。ルータ125は、ベクタレジスタ111A~111Cから出力されたデータを、バイトシャッフル回路122A~122Cのいずれかへ選択的に出力する。ここで、本実施例では、ベクタレジスタ111とバイトシャッフル回路122とを結ぶ経路上にルータ125を配置したが、ベクタレジスタ111と積和演算器112とを結ぶ他の経路も、ルータ125を経由してもよい。
ベクタレジスタ111は、例えばRAM(Random Access Memory)である。ベクタレジスタ111は、本実施例では、全部で8つ配置される。ここでは、ベクタレジスタ111Aがバンク番号#0にあたり、ベクタレジスタ111Bがバンク番号#1にあたり、ベクタレジスタ111Cがバンク番号#7にあたる場合で説明する。
さらに、ベクタレジスタ111は、複数の要素レジスタ113を有する。ベクタレジスタ111に含まれる各要素レジスタ113は、それぞれ番号が割り当てられたラインと呼ばれる単位と対応する。ここでは、各ラインを表す数値を、ライン番号という。すなわち、各要素レジスタ113には、それぞれライン番号が割り当てられる。
本実施例では、ベクタレジスタ111は、演算命令制御部101から延びる経路に繋がるポートを4つ有する。演算命令制御部101から延びる経路に繋がる4つのポートのうち、3つはリードアドレスが入力されるポートである。そして、リードアドレスが入力される3つのポートのうち1つが、読出ライン変更回路121を介して演算命令制御部101に繋がる。また、演算命令制御部101から延びる経路に繋がる4つのポートのうちの残りの1つのポートは、ライトアドレスが入力されるポートである。
また、ベクタレジスタ111は、各サイクルで演算に用いる複数のオペランドを積和演算器112に供給し、また、各サイクルで演算結果をいずれかの要素レジスタ113に書き戻すためのリードポート及びライトポートを有する。また、本実施例では、ベクタレジスタは、3つのリードポート及び1つのライトポートを有する。3つのリードポートは、それぞれ、演算命令制御部101から延びる経路に繋がる3つのライトアドレスが入力されるポートのいずれかに対応する。本実施例では、読出ライン変更回路121に接続するポートと、ルータを経由してバイトシャッフル回路122に接続されるポートとが対応する。
ベクタレジスタ111は、演算命令制御部101に繋がるポートに入力されたリードアドレスに対応する要素レジスタ113に格納された値を、リードアドレスが入力されたポートに対応するリードポートから出力する。具体的には、ベクタレジスタ111Aは、読出ライン変更回路121から入力されたリードアドレスに対応する要素レジスタ113に格納された値を、ルータ125へ出力する。
ここで、本実施例に係る要素レジスタ113は、ライン毎のサイズが32ビットである。そして、本実施例では、図3に示すように、要素レジスタ113のライン毎に格納された32ビットのデータを8ビットに変換後、要素レジスタ113の何れかの1つのラインの中に4つパッキングする処理を例に説明する。図3は、実施例1に係るパッキング処理の概要を表す図である。
この場合、1つのバンクのラインを埋めるために、4つの送信元の領域のデータが用いられる。そこで、パッキング処理により宛先となるラインを全て埋めるには、送信元の領域として4×8=32個の送信元の領域のデータを用いることになる。また、バンク番号#0~#7に対応するベクタレジスタ111における要素レジスタ113は、それぞれ独立してアクセスされるので、1度に8つの書き込み処理又は読込処理が可能である。すなわち、送信元のバンクがそれぞれ異なり、宛先のバンクがそれぞれ異なれば、8つの送信元の領域のデータを一度に宛先の領域へ移すことができる。そこで、この8つの送信元の領域のデータを一度に宛先の領域へ移す処理を1ステップの処理とした場合、1つの宛先のラインをすべて埋めるには、4ステップの処理が行われる。そして、宛先のラインが同一であることから、32個の送信元の領域の要素データの移動が、パッキング処理の1回の繰り返し単位となる。
図4は、パッキングの処理において使用される領域を説明するための図である。図4では、紙面に向かって縦方向に分割された各列が各バンク番号#0~#7のバンクを表す。そして、紙面に向かって横方向がラインを表す。すなわち、図4における領域21~23が、それぞれ繰り返し単位毎の送信元の領域となる。そして、各繰り返し単位における宛先の領域が領域24~26となる。すなわち、処理ユニット10は、領域21に格納された32個の要素データを、領域24に格納する。また、処理ユニット10は、領域22に格納された32個の要素データを、領域25に格納する。処理ユニット10は、領域23に格納された32個の要素データを、領域26に格納する。この領域21~23及び領域24~26のそれぞれが、「2つの記憶領域」の一例にあたる。そして、パッキング処理の場合、領域21~23が、「一方の記憶領域」の一例にあたり、領域24~26が、「他方の記憶領域」の一例にあたる。逆に、アンパッキング処理の場合、領域24~26が、「一方の記憶領域」の一例にあたり、領域21~23が、「他方の記憶領域」の一例にあたる。
また、本実施例では、図5に示すように、1つのラインの8つの要素レジスタ113に格納された8ビットのデータを4つのラインの要素レジスタ113に振り分けて、32ビットに拡張するアンパッキング処理を例に説明する。図5は、実施例1に係るアンパッキング処理の概要を表す図である。アンパッキング処理は、パッキング処理を逆転させた処理にあたる。すなわち、アンパッキング処理においても、4ステップの処理が行われる。そして、宛先のラインが同一であることから、1つのラインに格納された32個の送信元の領域の要素データの移動が、アンパッキング処理の1回の繰り返し単位となる。
読出ライン変更回路121は、ここで説明するパッキング及びアンパッキングの処理以外の処理を行う場合、演算命令制御部101から入力されたデータをそのままベクタレジスタ111へ出力する。
一方、パッキング及びアンパッキングの処理の場合、読出ライン変更回路121は、宛先決定の指示とともに、ベクタレジスタ111における送信元となる領域の情報及びベクタレジスタ111における宛先となる領域の情報の入力を受ける。
パッキング処理の場合、読出ライン変更回路121は、例えば、図5における送信元となる領域の情報として領域21を示す情報の入力を演算命令制御部101から受ける。さらに、読出ライン変更回路121は、ステップ番号を演算命令制御部101から受ける。ここで、本実施例では、1つの繰り返し単位の処理において4つのステップが行われるので、読出ライン変更回路121は、ステップ番号として0~3のいずれかの情報の入力を受ける。ここで、ステップ番号が0とは、最初のステップであることを表す。
パッキング処理の場合、読出ライン変更回路121は、入力されたステップ番号の情報と自己が接続されたベクタレジスタ111のバンク番号を基に、図6に示す読出ライン選択テーブル201に応じた読出ラインのライン番号を取得する。
図6は、実施例1に係るパッキング処理用の読出ライン選択テーブルの一例の図である。読出ライン選択テーブル201は、本実施例において4回繰り返して行われるパッキング処理毎の各送信元バンクに応じた読み出し元とする読出ラインの情報を表す。
例えば、0回目の繰り返しの場合、読出ライン変更回路121は、自己が接続するベクタレジスタ111のライン番号及びステップ番号である0を用いて、読み出し元となる読出ラインの情報を求める。この読み出しラインの情報が読出ライン選択テーブル201におけるバンク番号#0のステップ番号が0の場合の読出ラインの情報に一致する。そして、読出ライン変更回路121は、求めたライン番号を読み出しアドレスとしてベクタレジスタ111に入力する。
図7を参照して、より具体的に読み出し元の情報の生成を説明する。図7は、実施例1に係る読出ライン変更回路の回路構成の概要を表す図である。バンク番号302は、読出ライン変更回路121が接続するベクタレジスタ111のバンク番号を2進数で表した3ビットの情報である。また、ステップ番号301は、4つのステップ番号を2進数で表した2ビットの情報である。
読出ライン変更回路121は、「a,b,c」で表される自己に対応するベクタレジスタ111のバンク番号302を取得する。例えば、読出ライン変更回路121Aは、バンク番号302として「0,0,0」を取得する。
次に、読出ライン変更回路121は、「u,v」で表されるステップ番号301の入力を演算命令制御部101から受ける。例えば、ステップ番号301が2の場合、読出ライン変更回路121は、「1,0」の入力を受ける。
次に、読出ライン変更回路121は、排他的論理和回路303を用いて、バンク番号302の最下位から2番目のビットと、ステップ番号301の上位ビットとの排他的論理和を求める。また、読出ライン変更回路121は、排他的論理和回路304を用いて、バンク番号302の最下位のビットと、ステップ番号301の下位ビットとの排他的論理和を求める。これにより、読出ライン変更回路121Aは、読出ライン番号305を取得する。ここで、読出ライン番号305における大文字のアルファベットはビットの値を反転させた値を指す。例えば、ステップ番号が2の場合、読出ライン変更回路121Aは、排他的論理和回路303から1を取得し、排他的論理和回路304から0を取得する。すなわち、読出ライン変更回路121Aは、読出ライン番号305として「1,0」を取得する。「1,0」が表すラインは、ライン番号##2のラインにあたる。
その後、読出ライン変更回路121は、命令で指定された読み出し元とするラインのライン情報306の下位2ビットに読出ライン番号305を付加して、読出ライン情報307を生成する。その後、読出ライン変更回路121は、生成した読出ライン情報307をベクタレジスタ111へ出力する。これにより、読出ライン変更回路121は、図6で示した読出ライン選択テーブル201におけるバンク番号及びステップ番号に対応するライン番号の出力を行うことができる。この場合、読出ライン変更回路121は、読出ライン情報307に含まれる下位2ビットで表されるライン番号にあたる要素レジスタ113から出力される読出データをベクタレジスタ111に出力させることができる。ここで、読出データは、要素レジスタ113に格納された全ての値、すなわち、4つの要素データを含む。
また、アンパッキングの処理の場合、読出ライン変更回路121は、入力されたリードアドレスを含む送信元の情報をそのまま、ベクタレジスタ111へ出力する。これにより、読出ライン変更回路121は、リードアドレスで表されるライン番号の要素レジスタ113から出力される読出データをベクタレジスタ111に出力させることができる。この読出ライン変更回路121が、「第1決定部」の一例にあたる。そして、送信元バンクが、「第1格納領域」の一例にあたり、読出ラインが、「第1格納位置」の一例にあたる。
図2に戻って説明を続ける。ルータ125は、読出データの入力を各ベクタレジスタ111から受ける。また、ルータ125は、ステップ番号の入力を演算命令制御部101から受ける。
パッキング処理の場合、ルータ125は、格納先のベクタレジスタ111のバンク番号及びステップ番号を基に、図8に示す宛先バンク選択テーブル202に応じた送信元のバンク番号を取得する。
図8は、実施例1に係るパッキング処理用の宛先バンク選択テーブルの一例の図である。宛先バンク選択テーブル202は、本実施例において4回繰り返して行われるパッキング処理毎の各格納先のバンクに応じた送信元となる送信元バンクの情報を表す。例えば、格納先バンクがバンク番号#0であれば、ステップ番号が0~3である場合のそれぞれで、ルータ125は、バンク番号#0、#1、#2、#3のバンクを送信元バンクとして選択する。
図9を参照して、より具体的に格納先バンクの決定を説明する。図9は、実施例1に係るルータが有するパッキング時の格納先バンクを決定する回路構成の概要を表す図である。バンク番号311は、格納先バンクのバンク番号を2進数で表した3ビットの情報である。また、ステップ番号312は、4つのステップ番号を2進数で表した2ビットの情報である。
ルータ125は、格納先とする「a,b,c」で表されるバンク番号を選択する。次に、ルータ125は、選択した格納先バンクのバンク番号のビットを2ビット左ローテートする。2ビットの左ローテートとは、各ビットを上位ビット側に向けて2ビット移動する処理であり、且つ、最上位のビットを超えた移動の場合は最下位のビットに移動して巡回させる処理である。すなわち、ルータ125は、バンク番号311の最下位のビットの値を最上位のビットに移動し、最上位のビットの値を下から2番目のビットに移動し、下から2番目のビットの値を最下位のビットに移動する。これにより、ルータ125は、巡回後番号313を取得する。例えば、格納先のベクタレジスタ111のバンク番号311が「0,1,1」である場合、ルータ125は、巡回後番号313として「1,0,1」を取得する。
次に、ルータ125は、2進数である「u,v」で表されるステップ番号312の入力を演算命令制御部101から受ける。例えば、ステップ番号が2の場合、ルータ125は、「1,0」の入力を受ける。
次に、ルータ125は、排他的論理和回路314を用いて巡回後番号313の下から2番目のビットと、ステップ番号の上位のビットの排他的論理和を求める。また、ルータ125は、排他的論理和回路315を用いて巡回後番号313の最下位のビットと、ステップ番号の下位のビットの排他的論理和を求める。そして、ルータ125は、巡回後番号313の最上位ビット、排他的論理和回路314からの出力及び排他的論理和回路315からの出力を並べて送信元バンクのバンク番号316を取得する。ここで、バンク番号316における大文字のアルファベットは元の値を反転させた値である。
例えば、格納先のベクタレジスタ111のバンク番号311が「0,1,1」であり、ステップ番号が2の場合について説明する。この場合、ルータ125は、排他的論理和回路314及び排他的論理和回路315から1を取得し、送信元バンクのバンク番号316として、「1,1,1」を取得する。バンク番号316が「1,1,1」であるとは、バンク番号#7が送信元バンクであることを表す。これにより、ルータ125は、図8で示した宛先バンク選択テーブル202における格納先のバンク番号及びステップ番号に対応する送信元となるバンク番号を取得することができる。
ルータ125は、選択した格納先のバンク番号のベクタレジスタ111に対応する積和演算器112に接続するバイトシャッフル回路122に対して、決定した送信元のバンク番号のベクタレジスタ111から入力された値を出力する。
また、アンパッキング処理の場合、ルータ125は、格納先のベクタレジスタ111のバンク番号及びステップ番号を基に、図10に示す宛先バンク選択テーブル203に応じた宛先バンクのバンク番号を取得する。
図10は、アンパッキング処理用の宛先バンク選択テーブルの一例の図である。宛先バンク選択テーブル203は、本実施例において4回繰り返して行われるパッキング処理毎の各格納先のバンクに応じた送信元となる送信元バンクの情報を表す。例えば、格納先バンクがバンク番号#0である場合、ルータ125は、ステップ番号が0~3である場合のそれぞれで、バンク番号#0、#2、#4、#6を送信元バンクのバンク番号として選択する。
図11を参照して、より具体的に格納先バンクの決定を説明する。図11は、実施例1に係るルータが有するアンパッキング時の格納先バンクを決定する回路構成の概要を表す図である。バンク番号321は、格納先バンクのバンク番号を2進数で表した3ビットの情報である。また、ステップ番号322は、4つのステップ番号を2進数で表した2ビットの情報である。
ルータ125は、格納先とする「a,b,c」で表されるバンク番号を選択する。次に、ルータ125は、選択した格納先のバンク番号のビットを2ビット右ローテートする。2ビットの右ローテートとは、各ビットを下位ビット側に向けて2ビット移動する処理であり、且つ、最下位のビットを超えた移動の場合は最上位のビットに移動して巡回させる処理である。すなわち、ルータ125は、バンク番号321の最上位のビットの値を最下位のビットに移動し、最下位のビットの値を下から2番目のビットに移動し、下から2番目のビットの値を最上位のビットに移動する。これにより、ルータ125は、巡回後番号323を取得する。例えば、格納先のベクタレジスタ111のバンク番号321が「1,0,1」である場合、ルータ125は、巡回後番号323として「0,1,1」を取得する。
次に、ルータ125は、2進数である「u,v」で表されるステップ番号322の入力を演算命令制御部101から受ける。例えば、ステップ番号が2の場合、ルータ125は、「1,0」の入力を受ける。
次に、ルータ125は、排他的論理和回路324を用いて巡回後番号323の最上位のビットと、ステップ番号の上位のビットの排他的論理和を求める。また、ルータ125は、排他的論理和回路325を用いて巡回後番号323の最下位から2番目のビットと、ステップ番号の下位のビットの排他的論理和を求める。そして、ルータ125は、排他的論理和回路324からの出力、排他的論理和回路325からの出力及び巡回後番号323の最下位ビットを並べて送信元バンクのバンク番号326を取得する。ここで、バンク番号326における大文字のアルファベットは元の値を反転させた値である。
例えば、格納先のベクタレジスタ111のバンク番号311が「1,0,1」であり、ステップ番号が2の場合について説明する。この場合、ルータ125は、排他的論理和回路324及び排他的論理和回路325から1を取得し、送信元バンクのバンク番号326として、「1,1,1」を取得する。バンク番号326が「1,1,1」であるとは、バンク番号#7が送信元バンクであることを表す。これにより、ルータ125は、図10で示した宛先バンク選択テーブル203における格納先のバンク番号及びステップ番号に対応する送信元となるバンク番号を取得することができる。
ルータ125は、選択した格納先のバンク番号のベクタレジスタ111に対応する積和演算器112に接続するバイトシャッフル回路122に対して、決定した送信元のバンク番号のベクタレジスタ111から入力された読出データを出力する。
ここで、ルータ125による送信元バンクから格納先バンクへの経路選択方法の一例について説明する。ルータ125は、例えば、図12に示す定義パターン251を記憶する。図12は、格納先バンクに対応する読出元バンクを決定するための定義パターンの一例を表す図である。定義パターン251は、それぞれのパターン毎に各格納元バンクに対応する読出元バンクが登録される。定義パターン251における各読出元バンクの左側の数字は読出元ライン番号のオフセットである。すなわち、+1の場合は、次のラインに移ることを表す。
各パターンの機能としては、通常、ローテート及びブロードキャストが存在する。通常は、読出元バンクと格納先バンクが同じとなる場合である。ローテートは、読出元バンクのバンクバンク番号が、各格納先バンクに同じ数を加えたものになる場合である。ブロードキャストは、1つの読出元バンクからのデータが全ての格納先バンクに格納される場合である。
ルータ125は、定義パターン251を用いることで、決定した読み出し元バンクと格納先バンクの組み合わせに応じたデータ転送を実現することができる。ただし、定義パターン252は一例であり、ルータ125は、他のパターンを用いても良いし、また、定義パターンを用いずに転送を行うことも可能である。このルータ125が、「転送部」の一例にあたる。また、格納先バンクが、「第2格納領域」の一例にあたる。
図2に戻って説明を続ける。本実施例では、読み出し元及び書き込み先となる要素レジスタ113におけるライン毎の32ビットの領域は、4つの8ビットとして個別に扱うことができる。この4つの8ビットの領域をそれぞれバイトB0~B3とする。B0~B3は、バイト番号を表すが、ここでは各バイト番号を有するバイトを、バイトB0~B3と表す。以下では、バイトシャッフル回路122、積和演算器112及び宛先バイト書込可否選択回路123について説明する。
バイトシャッフル回路122、積和演算器112及び宛先バイト書込可否選択回路123は、それぞれの処理を組み合わせることで書き込み先の要素レジスタ113における書き込む対象とするバイトを決定する。詳細には、読み出し元における要素が格納されたバイトと書き込み先における要素が格納されるバイトとは位置が異なるため、バイトシャッフル回路122は、読出データの各読出バイトに格納された要素データに対応する宛先バイトの位置を決定する。また、積和演算器112は、ここでは単にデータを通過させる回路である。また、宛先バイト書込可否選択回路123は、実際に要素データを書き込む宛先バイトを選択する回路である。
バイトシャッフル回路122は、ベクタレジスタ111から出力された読出データの入力をルータ125から受ける。また、バイトシャッフル回路122及び宛先バイト書込可否選択回路123は、ステップ番号の入力を演算命令制御部101から受ける。
パッキングの処理の場合、バイトシャッフル回路122、積和演算器112及び宛先バイト書込可否選択回路123は、格納先のベクタレジスタ111のバンク番号及びステップ番号を基に、図13に示すバイト選択テーブル204に応じた宛先バイト番号及び読出元バイト番号を取得する。
図13は、実施例1に係るパッキング処理用のバイト選択テーブルの一例の図である。バイト選択テーブル204は、本実施例において4回繰り返して行われるパッキングの処理毎の各格納先バンクに応じた書き込み先となる宛先バイト及び読み出し元となる読出バイトの情報を表す。本実施例に係るパッキングの処理では、読出ラインにおいて要素データは全てバイトB0の位置に格納されるので、読出バイトとして指定されるのはバイトB0である。例えば、格納先バンクがバンク番号#0でありステップ番号が2の場合、バイトシャッフル回路122、積和演算器112及び宛先バイト書込可否選択回路123は、バイトB2を宛先バイトとし、バイトB0を読出バイトとする。
アンパッキング処理の場合、バイトシャッフル回路122、積和演算器112及び宛先バイト書込可否選択回路123は、格納先のベクタレジスタ111のバンク番号及びステップ番号を基に、図14に示すバイト選択テーブル205に応じた宛先バイトのバイト番号及び読出バイトのバイト番号を取得する。
図14は、アンパッキング処理用のバイト選択テーブルの一例の図である。バイト選択テーブル205は、本実施例において4回繰り返して行われるパッキングの処理毎の各格納先バンクに応じた書き込み先となる読出バイト及び読み出し元となる読出バンクの情報を表す。本実施例に係るアンパッキングの処理では、書き込み先の宛先ラインにおいて要素データは全てバイトB0の位置に格納されるので、宛先バイトとして指定されるのはバイト番号B0である。例えば、格納先バンクがバンク番号#0でありステップ番号が2の場合、バイトシャッフル回路122、積和演算器112及び宛先バイト書込可否選択回路123は、バイト番号B0を宛先バイトとし、バイト番号B0を読出バイトとする。
以下に、バイトシャッフル回路122、積和演算器112及び宛先バイト書込可否選択回路123の詳細について説明する。
図15を参照して、パッキング時のバイトシャッフル回路122による要素データが格納されるバイトの位置を決定について説明する。図15は、実施例2に係るバイトシャッフル回路によるパッキング時の宛先バイトの決定処理を説明するための図である。
バイトシャッフル回路122は、格納先のベクタレジスタ111のバンク番号に関わらず、宛先バイトがバイト番号B0~B3のいずれであっても、図15のテーブル331で示すように読出元バイトを「00」に決定する。ここで、「00」は、バイト番号B0のバイトを示す。これは、本実施例では、32ビットのデータが8ビットに圧縮された要素データが、どのバンクのどのラインであってもバイトB0に格納されることを理由とする。
次に、図16を参照して、アンパッキング時のバイトシャッフル回路122による要素データが格納される宛先バイトの位置を決定について説明する。図16は、実施例1に係るバイトシャッフル回路によるアンパッキング時の宛先バイトの決定処理を説明するための図である。バンク番号332は、格納先バンクのバンク番号を2進数で表した3ビットの情報である。
バイトシャッフル回路122は、自己に対応するベクタレジスタ111のバンク番号を予め有する。この自己に対応するベクタレジスタ111のバンク番号が、格納先バンクのバンク番号である。また、本実施例のアンパッキングの処理では、要素データは、ラインにおける最下位のバイトB0に書き込まれる。そこで、バイトシャッフル回路122は、バイトB0を宛先バイトとする。
そして、バイトシャッフル回路122は、格納先のベクタレジスタ111のバンク番号332の下位2ビットを取得して、テーブル333に示すように、宛先バイトであるバイト番号B0のバイトに対応する読出バイトのバイト番号とする。
バイトシャッフル回路122は、読出データとともに読出データにおける各読出バイトに対応する宛先バイトの情報を積和演算器112へ出力する。
ここで、図2に戻って、積和演算器112について説明する。積和演算器112は、読出データ及び読出データにおける各読出バイトに対応する宛先バイトの情報の入力をバイトシャッフル回路122から受ける。そして、積和演算器112は、入力された情報を素通させる演算を行い、演算結果を宛先バイト書込可否選択回路123へ出力する。すなわち、積和演算器112は、入力された読出データの情報をそのまま宛先バイト書込可否選択回路123へ出力するのと同じ処理を行う。
次に、宛先バイト書込可否選択回路123について説明する。図17は、実施例1に係る宛先バイト書込可否選択回路が有するパッキング時の宛先バイトを選択する回路構成の概要を表す図である。バンク番号342は、格納先バンクのバンク番号を2進数で表した3ビットの情報である。また、ステップ番号341は、4つのステップ番号を2進数で表した2ビットの情報である。
宛先バイト書込可否選択回路123は、格納先とする「a,b,c」で表されるバンク番号を取得する。次に、宛先バイト書込可否選択回路123は、「u,v」で表されるステップ番号341の入力を演算命令制御部101から受ける。例えば、ステップ番号が2の場合、宛先バイト書込可否選択回路123は、「1,0」の入力を受ける。
次に、宛先バイト書込可否選択回路123は、排他的論理和回路343を用いてバンク番号342の最上位のビットと、ステップ番号の上位のビットの排他的論理和を求める。また、宛先バイト書込可否選択回路123は、排他的論理和回路344を用いてバンク番号342の最下位から2番目のビットと、ステップ番号の下位のビットの排他的論理和を求める。そして、宛先バイト書込可否選択回路123は、排他的論理和回路343からの出力及び排他的論理和回路344からの出力を並べて2進数とした値を判定回路345~348へ入力する。
判定回路345~348は、四角の枠の中に記載された「==n」に応じて、入力された値がnを表す2進数の場合には1を出力し、それ以外の場合には0を出力する回路である。判定回路345~348は、AND回路とインバータを組み合わせることで実現可能である。そして、判定回路345~348のいずれかから1が出力された場合、それに繋がる四角の枠に記載するように、バイトB0~B3のいずれかへの書き込みを有効にする。そして、有効にされたバンクにデータが書き込まれ、他のバンクにはデータが書き込まれない。
次に、図18を参照して、アンパッキング時の宛先バイト書込可否選択回路123の処理について説明する。図18は、実施例1に係る宛先バイト書込可否選択回路によるアンパッキング時の宛先バイトの書込可否選択処理を説明するための図である。
宛先バイト書込可否選択回路123は、格納先のベクタレジスタ111のバンク番号に関わらず、図15のテーブル349で示すようにバイトB1~B3への書き込みを無効とする。また、宛先バイト書込可否選択回路123は、テーブル349で示すようにバイトB0への書き込みを有効とする。これは、本実施例では、アンパッキング時には、いずれのバンクのどのラインであっても32ビットの領域の最下位のビットに要素データが格納されることを理由とする。
以上により、バイトシャッフル回路122、積和演算器112及び宛先バイト書込可否選択回路123は、パッキング時に図13で示したバイト選択テーブル204における宛先バイトのバンク番号及びステップ番号に対応する情報の出力を行うことができる。また、バイトシャッフル回路122、積和演算器112及び宛先バイト書込可否選択回路123は、アンパッキング時に図14で示したバイト選択テーブル205における宛先バイトのバンク番号及びステップ番号に対応する情報の出力を行うことができる。このバイトシャッフル回路122及び宛先バイト書込可否選択回路123が、「格納部」の一例にあたる。そして、宛先バイトが「所定位置」の一例にあたる。
図2に戻って説明を続ける。宛先ライン選択回路124は、宛先となる領域の情報の入力を演算命令制御部101から受ける。例えば、宛先ライン選択回路124は、宛先となる領域の情報として図5に示す領域24を示す情報の入力を演算命令制御部101から受ける。また、宛先ライン選択回路124は、ステップ番号の入力を演算命令制御部101から受ける。また、宛先ライン選択回路124は、自己が接続するベクタレジスタ111のバンク番号を格納先のベクタレジスタ111のバンク番号として保持する。
ここで、本実施例では、パッキング時には特定のラインに要素データを詰め合わせる。そこで、パッキングの処理の場合、宛先ライン選択回路124は、演算命令制御部101から入力された命令で指定された宛先となる領域が示すラインを宛先ラインとする。
これに対して、アンパッキングの処理の場合、宛先ライン選択回路124は、格納先バンクのバンク番号及びステップ番号を基に、図19に示す宛先バンク選択テーブル202に応じたライン番号を取得する。
図19は、実施例1に係るアンパッキング処理用の宛先ライン選択テーブルの一例の図である。宛先ライン選択テーブル206は、本実施例において4回繰り返して行われるアンパッキングの処理毎の各宛先バンクに応じた要素データの格納先となる宛先ラインの情報を表す。例えば、宛先バンクがバンク番号#0である場合、宛先ライン選択回路124は、ステップ番号が0~3である場合のそれぞれで、ライン番号##0、##1、##2、##3のラインを宛先ラインとして選択する。
次に、より具体的に宛先ライン選択回路124による宛先ラインの決定処理について説明する。図20は、実施例1に係る宛先ライン選択回路が有するアンパッキング時の宛先ラインを決定する回路構成の概要を表す図である。バンク番号352は、格納先バンクのバンク番号を2進数で表した3ビットの情報である。また、ステップ番号351は、4つのステップ番号を2進数で表した2ビットの情報である。
宛先ライン選択回路124は、「a,b,c」で表される自己が接続するベクタレジスタ111のバンク番号352を取得する。例えば、宛先ライン選択回路124Aは、バンク番号352として「0,0,0」を取得する。
次に、宛先ライン選択回路124は、「u,v」で表されるステップ番号351の入力を演算命令制御部101から受ける。例えば、ステップ番号351が2の場合、宛先ライン選択回路124は、「1,0」の入力を受ける。
次に、宛先ライン選択回路124は、排他的論理和回路353を用いて、バンク番号352の下位から2番目のビットと、ステップ番号351の上位ビットとの排他的論理和を求める。また、宛先ライン選択回路124は、排他的論理和回路354を用いて、バンク番号352の最下位のビットと、ステップ番号351の下位ビットとの排他的論理和を求める。これにより、宛先ライン選択回路124は、宛先ライン番号355を取得する。ここで、宛先ライン番号355における大文字のアルファベットはビットの値を反転させた値を指す。例えば、ステップ番号が2の場合、宛先ライン選択回路124Aは、排他的論理和回路353から1を取得し、排他的論理和回路354から0を取得する。すなわち、宛先ライン選択回路124は、宛先ライン番号355として「1,0」を取得する。「1,0」が表すラインは、ライン番号##2のラインである。
その後、宛先ライン選択回路124は、命令で指定された宛先とするラインのライン情報356の下位2ビットに宛先ライン番号355を付加して、宛先ライン情報357を生成する。その後、宛先ライン選択回路124は、生成した宛先ライン情報357をベクタレジスタ111へ出力する。これにより、宛先ライン選択回路124は、図19で示した宛先ライン選択テーブル206におけるバンク番号及びステップ番号に対応する情報の出力を行うことができる。この場合、宛先ライン選択回路124は、宛先ライン情報357に含まれる下位2ビットで表されるライン番号の要素レジスタ113への要素データの書き込みをベクタレジスタ111に行わせることができる。この宛先ライン選択回路124が、「第2選択部」の一例にあたる。そして、宛先ラインが「第2格納位置」の一例にあたる。
次に、図21を参照して、4つのステップにおける本実施例に係る積和演算部100によるパッキング時の送信元の要素データの格納位置と宛先の要素データの格納位置との関係について説明する。図21は、実施例1に係るパッキング時の送信元の要素データの格納位置と宛先の要素データの格納位置との関係を表す図である。図21は、上述した処理により積和演算部100により各ステップにおいて決定される送信元及び宛先を表す。
図21において、対応関係410は、ステップ番号が0の場合の送信元における格納位置を表す情報及び宛先における格納位置を表す情報との関係を表す。また、対応関係420は、ステップ番号が1の場合の送信元における格納位置を表す情報及び宛先における格納位置を表す情報との関係を表す。また、対応関係430は、ステップ番号が2の場合の送信元における格納位置を表す情報及び宛先における格納位置を表す情報との関係を表す。また、対応関係440は、ステップ番号が3の場合の送信元における格納位置を表す情報及び宛先における格納位置を表す情報との関係を表す。そして、指定情報451は、演算命令制御部101からの命令で指定された送信元の情報である。また、指定情報452は、演算命令制御部101からの命令で指定された宛先の情報である。
ステップ番号が0の場合、対応関係410に示すように、積和演算部100は、指定情報451の下位2ビットに、読出ライン情報411を付加して、読出ラインのライン番号とする。読出ライン情報411は、2進数を用いた3ビットで送信元バンクのバンク番号を表した送信元バンク番号412の下位2ビットにあたる。送信元バンク番号412は、送信元バンクのバンク番号となる。さらに、積和演算部100は、「00」の値を取るバイト番号413を読出バイトのバイト番号とする。
そして、ステップ番号が0の場合、積和演算部100は、送信元バンク番号412の各ビットを2ビット右ローテートさせることで生成される格納先バンク番号414を送信先のバンク番号とする。さらに、積和演算部100は、送信元バンク番号412の下位2ビットにあたる宛先バイト番号415を宛先バイトのバイト番号とする。
ステップ番号が1の場合、対応関係420に示すように、積和演算部100は、指定情報451の下位2ビットに読出ライン情報421を付加して、読出ラインのライン番号とする。読出ライン情報421は、送信元バンク番号422の下位2ビットのうちの下位のビットを反転させた値である。さらに、積和演算部100は、「00」の値を取るバイト番号423を読出バイトのバイト番号とする。
そして、ステップ番号が1の場合、積和演算部100は、送信元バンク番号422の最下位のビットを反転させたうえで、各ビットを2ビット右ローテートさせることで生成される格納先バンク番号424を格納先バンクのバンク番号とする。さらに、積和演算部100は、送信元バンク番号422の下位2ビットにあたる宛先バイト番号425を宛先バイトのバイト番号とする。
ステップ番号が2の場合、対応関係430に示すように、積和演算部100は、指定情報451の下位2ビットに読出ライン情報431を付加して、読出ラインのライン番号とする。読出ライン情報431は、送信元バンク番号432の下位2ビットのうちの上位のビットを反転させた値である。さらに、積和演算部100は、「00」の値を取るバイト番号433を読出元バイトのバイト番号とする。
そして、ステップ番号が2の場合、積和演算部100は、送信元バンク番号432の最下位から2番目のビットを反転させたうえで、各ビットを2ビット右ローテートさせることで生成される格納先バンク番号434を格納先バンクのバンク番号とする。さらに、積和演算部100は、送信元バンク番号432の下位2ビットにあたる宛先バイト番号435を宛先バイトのバイト番号とする。
ステップ番号が3の場合、対応関係440に示すように、積和演算部100は、指定情報451の下位2ビットに読出ライン情報441を付加して、読出ラインのライン番号とする。読出ライン情報441は、送信元バンク番号432の下位2ビットの両方のビットを反転させた値である。さらに、積和演算部100は、「00」の値を取るバイト番号443を読出元バイトのバイト番号とする。
そして、ステップ番号が3の場合、積和演算部100は、送信元バンク番号442の下位2ビットを反転させたうえで、各ビットを2ビット右ローテートさせることで生成される格納先バンク番号444を格納先バンクのバンク番号とする。さらに、積和演算部100は、送信元バンク番号442の下位2ビットにあたる宛先バイト番号445を宛先バイトのバイト番号とする。
図21で示した送信元と宛先の情報をライン、バンク及びバイトの形で表すと図22の様に表される。図22は、実施例1に係る積和演算部によるパッキング時の送信元と宛先の情報の一覧の図である。
図22において、紙面に向かって左端の数字は、パッキング前の32個の要素データが格納された領域に連番で振った番号を表す。そして、矢印の左側が、送信元の位置の情報を表す。また、矢印の右側が、宛先の位置の情報を表す。すなわち、「line##p-bank#q-byte(Br)」は、ライン番号##p、バンク番号#q、バイト番号(Br)で表される領域を指す。また、ライン番号##(dst)は、命令で指定された宛先のライン番号である。さらに、紙面に向かって上端から8個ずつの組が、それぞれステップ番号が0~3の各ステップにおける送信元と宛先にあたる。
図22に示すように、送信元のバンク番号461は、各ステップにおいて重複しない。すなわち、積和演算部100は、各ステップで同時に8つの要素データを読み出すことができる。そして、図22に示すように宛先のバンク番号462も、各ステップにおいて重複しない。すなわち、積和演算部100は、各ステップで同時に8つの要素データを格納することができる。すなわち、積和演算部100は、8つのバンクを効率的に使用してパッキングの処理を行うことができる。
このように、積和演算部100は、図21に示した手順で決められた送信元及び宛先の位置を用いることで効率的にパッキングの処理を行うことができる。そして、図21に示した送信元及び宛先の位置は、図6の読出ライン選択テーブル201、図8の宛先バンク選択テーブル202、及び、図13のバイト選択テーブル204にしたがって決定した送信元及び宛先の位置に一致する。すなわち、上述した積和演算部100の処理により、積和演算部100は、効率的にパッキングの処理を行うことができることが分かる。
ここで、図23を参照して、パッキング時の送信元及び宛先の決定を一般化について説明する。図23は、パッキング時の一般化した送信元及び宛先の決定方法を説明するための図である。
図23における紙面に向かって上側の情報471は、送信元の領域の位置を表す情報である。また、情報472は、宛先の領域の位置を表す情報である。
まず、図23におけるKは、バンクの数を2の冪乗で表した場合の冪数である。例えば、本実施例のように8つのバンクがある場合は、K=3である。また、Nは、送信元の要素データのサイズに対する各バンクのラインのサイズの倍率の2を底とした対数の値である。すなわち、Nは、圧縮後の要素データに対する圧縮前の要素データの倍率の2を底とした対数の値である。例えば、本実施例のように32ビットの要素データを8ビットに圧縮した場合、圧縮後の要素データに対する圧縮前の要素データの倍率は4倍であるので、N=2となる。さらに、Mは、送信元の各バンクの1つのラインの中に、含まれる要素データの数の2を底とした対数の値である。本実施例では、送信元の各バンクの1つのラインの中には1つの要素データが含まれるので、M=0である。
そして、送信元バンクのバンク番号をKビットの2進数で表し、最下位からNビットである領域473の各ビットの値をそのまま維持する又は反転させるかして求められる組み合わせが求められる。そして、最下位からNビットの部分を求めた組み合わせに変更したKビットの値をNビット右ローテートさせることで、格納先バンクのバンク番号474が求められる。ここで、バンク番号474の先頭からNビットは、領域473の各ビットの値をそのまま維持する又は反転させるかして求められた組み合わせである。そして、格納先バンクのバンク番号474の最上位からNビットである領域475の値が、読出ラインのライン番号476になる。さらに、送信元バンクのバンク番号の最下位からNビットの領域473の値が宛先バイトの最上位からNビットの領域477の値にあたり、さらにその後に読出バイトの最上位からMビットの領域478の値を付加したN+Mビットの値479が、要素の移動先の宛先ラインのバンク内での要素番号となる。
図23で示す方法で決定した送信元及び宛先を各ステップにおいて選択するように回路を組むことで、任意の圧縮率及びバンクの数において、積和演算部100は、効率的にパッキングの処理を行うことができる。
次に、図24を参照して、4つのステップにおける本実施例に係る積和演算部100によるアンパッキング時の送信元の要素データの格納位置と宛先の要素データの格納位置との関係について説明する。図24は、アンパッキング時の送信元の要素データの格納位置と宛先の要素データの格納位置との関係を表す図である。図24は、上述した処理により積和演算部100により各ステップにおいて決定される送信元及び宛先を表す。
図24において、対応関係510は、ステップ番号が0の場合の送信元における格納位置を表す情報及び宛先における格納位置を表す情報との関係を表す。また、対応関係520は、ステップ番号が1の場合の送信元における格納位置を表す情報及び宛先における格納位置を表す情報との関係を表す。また、対応関係530は、ステップ番号が2の場合の送信元における格納位置を表す情報及び宛先における格納位置を表す情報との関係を表す。また、対応関係540は、ステップ番号が3の場合の送信元における格納位置を表す情報及び宛先における格納位置を表す情報との関係を表す。そして、指定情報551は、演算命令制御部101からの命令で指定された送信元の情報である。また、指定情報552は、演算命令制御部101からの命令で指定された宛先の情報である。
ステップ番号が0の場合、対応関係510における送信元バンク番号511が、送信元バンクのバンク番号となる。また、指定情報552の下位2ビットに付加される宛先ライン情報513が、宛先ラインのライン番号となる。宛先ライン情報513は、送信元バンク番号511の上位2ビットにあたる。さらに、「00」であるバイト番号515が、宛先バイトのバイト番号となる。
そして、ステップ番号が0の場合、送信元バンク番号511の各ビットを2ビット左ローテートさせることで生成される格納先バンク番号514が、格納先バンクのバンク番号となる。さらに、格納先バンク番号514の下位2ビットが、読出バイト番号512にあたる。
ステップ場合が1の場合、対応関係520における送信元バンク番号521が、送信元バンクのバンク番号となる。また、指定情報552の下位2ビットに付加される宛先ライン情報523が、宛先ラインのライン番号となる。宛先ライン情報523は、送信元バンク番号521の上位2ビットにあたる。さらに、「00」であるバイト番号525が、宛先バイトのバイト番号となる。
そして、ステップ番号が1の場合、送信元バンク番号521の最下位から2番目のビットを反転させたうえで、各ビットを2ビット左ローテートさせることで生成される格納先バンク番号524が、格納先バンクのバンク番号となる。さらに、格納先バンク番号524の下位2ビットが、読出バイト番号522にあたる。
ステップ場合が2の場合、対応関係530における送信元バンク番号531が、送信元バンクのバンク番号となる。また、指定情報552の下位2ビットに付加される宛先ライン情報533が、宛先ラインのライン番号となる。宛先ライン情報533は、送信元バンク番号531の上位2ビットにあたる。さらに、「00」であるバイト番号535が、宛先バイトのバイト番号となる。
そして、ステップ番号が2の場合、送信元バンク番号531の最上位のビットを反転させたうえで、各ビットを2ビット左ローテートさせることで生成される格納先バンク番号534が、格納先バンクのバンク番号となる。さらに、格納先バンク番号534の下位2ビットが、読出バイト番号532にあたる。
ステップ場合が3の場合、対応関係540における送信元バンク番号541が、送信元バンクのバンク番号となる。また、指定情報552の下位2ビットに付加される宛先ライン情報543が、宛先ラインのライン番号となる。宛先ライン情報543は、送信元バンク番号541の上位2ビットにあたる。さらに、「00」であるバイト番号545が、宛先バイトのバイト番号となる。
そして、ステップ番号が3の場合、送信元バンク番号541の最上位から2ビットを両方とも反転させたうえで、各ビットを2ビット左ローテートさせることで生成される格納先バンク番号544が、格納先バンクのバンク番号となる。さらに、格納先バンク番号544の下位2ビットが、読出バイト番号542にあたる。
積和演算部100は、図24に示した手順で決められた送信元及び宛先の位置を用いることで効率的にパッキングの処理を行うことができる。そして、図24に示した送信元及び宛先の位置は、図10の宛先バンク選択テーブル203、図14のバイト選択テーブル205及び図19の宛先ライン選択テーブル206にしたがって決定した送信元及び宛先の位置に一致する。すなわち、上述した積和演算部100の処理により、積和演算部100は、効率的にアンパッキングの処理を行うことができる。
ここで、図25を参照して、アンパッキング時の送信元及び宛先の決定を一般化について説明する。図25は、一般化したアンパッキング時の送信元及び宛先の決定方法を説明するための図である。
図25における紙面に向かって上側の情報561は、送信元の領域の位置を表す情報である。また、情報562は、宛先の領域の位置を表す情報である。
まず、図25におけるK、N及びMはそれぞれ、図23におけるK、N及びMと同様の方法で決定される。
そして、送信元バンクのバンク番号をKビットの2進数で表し、最上位からNビットである領域563の各ビットの値をそのまま維持する又は反転させるかして組み合わせが求められる。この組み合わせの取得は、全ての組み合わせが完了するまで繰り返し行われる。そして、最上位からNビットの部分を求めた組み合わせに変更したKビットの値をNビット右ローテートさせることで、送信先バンクのバンク番号564が求められる。ここで、バンク番号564の最下位からNビットは、領域563の各ビットの値をそのまま維持する又は反転させるかして求められた組み合わせである。そして、送信元バンクのバンク番号の最上位からNビットである領域563の値が、宛先ラインのライン番号565になる。さらに、送信先バンクのバンク番号564の最下位からNビットの領域566の値が宛先バイトの最上位からNビットの領域567の値にあたり、さらにその後に宛先バイトの最上位からMビットの領域568の値を付加したN+Mビットの値569が、要素の移動先の読出ラインのバンク内での要素番号となる。
図25で示す方法で決定した送信元及び宛先を各ステップにおいて選択するように回路を組むことで、任意の圧縮率及びバンクの数において、積和演算部100は、効率的にアンパッキングの処理を行うことができる。
次に、図26を参照して、本実施例に係る処理ユニット10によるパッキング処理の流れを説明する。図26は、実施例1に係る処理ユニットによるパッキング処理のフローチャートである。
積和演算部100は、繰り返し単位のパッキング命令を演算命令制御部101から取得する(ステップS101)。このとき、積和演算部100は、ステップ番号の初期値、すなわち0の入力を演算命令制御部101から受ける。
読出ライン変更回路121は、自己が対応するベクタレジスタ111のバンク番号及びステップ番号から送信先のライン番号を取得する。また、読出ライン変更回路121は、パッキング命令から命令で指定された格納先のラインの情報を取得する。そして、読出ライン変更回路121は、命令で指定された格納先のラインの情報の最下位に取得した送信先のライン番号を付加する(ステップS102)。そして、読出ライン変更回路121は、送信先のライン番号を付加したラインの情報をベクタレジスタ111へ出力する。
ベクタレジスタ111は、入力されたラインの情報の最下位に付加されたライン番号に応じた要素レジスタ113から読出データを読み出す(ステップS103)。ベクタレジスタ111は、読み出した読出データをルータ125へ出力する。
ルータ125は、各格納先のバンク番号に応じた送信元のバンク番号を特定する(ステップS104)。
ルータ125は、取得した読出データを、読出元のベクタレジスタ111のバンク番号を送信元とする格納先のバンク番号を有するベクタレジスタ111に対応する積和演算器112に繋がるバイトシャッフル回路122へ送信する(ステップS105)。
バイトシャッフル回路122は、格納先の要素レジスタ113のバンク番号に応じた各宛先バイトに対応する読出バイトを決定する(ステップS106)。そして、バイトシャッフル回路122は、各宛先バイトに対応する読出バイトの情報とともに、読出データを積和演算器112へ出力する。
積和演算器112は、受信した読出データに素通しする演算を実行して出力する(ステップS107)。
宛先バイト書込可否選択回路123は、読出データを積和演算器112から取得する。次に、宛先バイト書込可否選択回路123は、宛先バイトのうち格納先のバンク番号及びステップ番号から宛先バイトを決定し、その宛先バイトの書き込みを有効にする(ステップS108)。
次に、宛先バイト書込可否選択回路123は、読出データをベクタレジスタ111へ出力する。ベクタレジスタ111は、命令で指定されたラインの書き込みが有効にされたバイトに、対応する読出バイトに格納された要素データを書き込む(ステップS109)。
演算命令制御部101は、繰り返し単位の処理である4回のステップが完了したか否かを判定する(ステップS110)。
4回のステップが完了していない場合(ステップS110:否定)、演算命令制御部101は、次のステップのステップ番号を積和演算器112へ出力する。積和演算器112は、次のステップのステップ番号を演算命令制御部101から取得する(ステップS111)。その後、積和演算器112は、ステップS102へ戻る。
これに対して、4回のステップが完了した場合(ステップS110:肯定)、演算命令制御部101は、全ての繰り返し単位のパッキング処理が完了したか否かを判定する(ステップS112)。繰り返し単位のパッキング処理が残っている場合(ステップS112:否定)、積和演算器112は、ステップS101へ戻る。
これに対して、全ての繰り返し単位のアンパッキング処理が完了した場合(ステップS112:肯定)、パッキング処理を終了する。
次に、図27を参照して、本実施例に係る処理ユニット10によるアンパッキング処理の流れを説明する。図27は、実施例1に係る処理ユニットによるアンパッキング処理のフローチャートである。
積和演算部100は、繰り返し単位のアンパッキング命令を演算命令制御部101から取得する(ステップS201)。このとき、積和演算部100は、ステップ番号の初期値、すなわち0の入力を演算命令制御部101から受ける。
読出ライン変更回路121は、アンパッキング命令から命令で指定された送信元のラインの情報を取得する。そして、読出ライン変更回路121は、命令で指定された送信先のラインの情報をベクタレジスタ111へ出力する。
ベクタレジスタ111は、入力されたラインの情報に応じたライン番号を有する要素レジスタ113から読出データを読み出す(ステップS202)。ベクタレジスタ111は、読み出した読出データをルータ125へ出力する。
ルータ125は、各格納先のバンク番号に応じた送信元のバンク番号を特定する(ステップS203)。
ルータ125は、取得した読出データを、読出元のベクタレジスタ111のバンク番号を送信元とする格納先のバンク番号を有するベクタレジスタ111に対応する積和演算器112に繋がるバイトシャッフル回路122へ送信する(ステップS204)。
バイトシャッフル回路122は、格納先の要素レジスタ113のバンク番号に応じた各宛先バイトに対応する読出バイトを決定する(ステップS205)。そして、バイトシャッフル回路122は、各宛先バイトに対応する読出バイトの情報とともに、読出データを積和演算器112へ出力する。
積和演算器112は、受信した読出データに素通しする演算を実行して出力する(ステップS206)。
宛先バイト書込可否選択回路123は、読出データを積和演算器112から取得する。次に、宛先バイト書込可否選択回路123は、宛先バイトのうち最下位のバイトの書き込みを有効にする(ステップS207)。
宛先ライン選択回路124は、格納先のバンクに応じた宛先ラインを決定する(ステップS208)。
次に、宛先バイト書込可否選択回路123は、読出データをベクタレジスタ111へ出力する。ベクタレジスタ111は、宛先ライン選択回路124により決定されたラインの書き込みが有効にされたバイトに、対応する読出バイトに格納された要素データを書き込む(ステップS209)。
演算命令制御部101は、繰り返し単位の処理である4回のステップが完了したか否かを判定する(ステップS210)。
4回のステップが完了していない場合(ステップS210:否定)、演算命令制御部101は、次のステップのステップ番号を積和演算器112へ出力する。積和演算器112は、次のステップのステップ番号を演算命令制御部101から取得する(ステップS211)。その後、積和演算器112は、ステップS202へ戻る。
これに対して、4回のステップが完了した場合(ステップS210:肯定)、演算命令制御部101は、全ての繰り返し単位のアンパッキング処理が完了したか否かを判定する(ステップS212)。繰り返し単位のアンパッキング処理が残っている場合(ステップS212:否定)、積和演算器112は、ステップS201へ戻る。
これに対して、全ての繰り返し単位のパッキング処理が完了した場合(ステップS212:肯定)、アンパッキング処理を終了する。
図28は、処理ユニットに本実施例に係るパッキング処理及びアンパッキング処理を実行させる命令の一例を示す図である。図28に示す命令は、どのようなパッキング処理及びアンパッキング処理を行うかと、その内のどのステップの処理を行うかと、読出元ラインのライン番号と、宛先ラインのライン番号とを指定する。積和演算部100における各処理回路は、図28に示される命令によって指定された情報を取得して処理を実行する。
以上に説明したように、本実施例に係る処理ユニットは、パッキング処理であれば送信元バンクのバンク番号及び繰り返し単位の処理に含まれるステップのステップ番号から格納先バンクのバンク番号を決定し、且つ、宛先バイトを決定する。そして、決定したバンク番号を有するベクタレジスタに含まれる所定のライン番号の要素レジスタの決定した宛先バイトに各バンクに格納された要素データを移動することでパッキングを完了する。
また、本実施例に係る処理ユニットは、アンパッキング処理であれば送信元バンクのバンク番号及び繰り返し単位の処理に含まれるステップのステップ番号から格納先バンクのバンク番号及び宛先ラインのライン番号を決定する。そして、決定したバンク番号を有するベクタレジスタに含まれる決定した宛先ラインのライン番号を有する要素レジスタの決定した宛先バイトに各バンクに格納された要素データを移動することでアンパッキングを完了する。
このように、本実施例に係る処理ユニットは、既存の積和演算の回路を用いて効率的なパッキング及びアンパッキングの処理を実行することができる。
次に、実施例2について説明する。本実施例においても図1に示す情報処理装置50及び図2に示す積和演算部100が用いられる。以下の説明では、実施例1と同様の各部の動作は説明を省略する場合がある。
本実施例に係る処理ユニット10は、図29に示すようにパッキング時には32ビットのデータを16ビットに圧縮し、32ビットの宛先ラインに2つずつ16ビットのデータを詰め合わせる。図29は、実施例2に係るパッキング処理の概要を表す図である。本実施例では、図29に示すように繰り返し単位として、2回のステップが実行される。
パッキング処理の場合、読出ライン変更回路121は、入力されたステップ番号の情報と自己が接続されたベクタレジスタ111のバンク番号を基に、図30に示す読出ライン選択テーブル601に応じた読出ラインのライン番号を取得する。
図30は、実施例2に係るパッキング処理用の読出ライン選択テーブルの一例の図である。読出ライン選択テーブル601は、本実施例において2回繰り返して行われるパッキング処理毎の各送信元バンクに応じた読み出し元とする読出ラインの情報を表す。
例えば、0回目の繰り返しの場合、読出ライン変更回路121は、自己が接続するベクタレジスタ111のライン番号及びステップ番号である0を用いて、読み出し元となる読出ラインの情報を求める。この読み出しラインの情報が読出ライン選択テーブル601におけるバンク番号#0のステップ番号が0の場合の読出ラインの情報に一致する。そして、読出ライン変更回路121は、求めたライン番号を読み出しアドレスとしてベクタレジスタ111に入力する。
図31を参照して、より具体的に読み出し元の情報の生成を説明する。図31は、実施例2に係る読出ライン変更回路の回路構成の概要を表す図である。バンク番号612は、読出ライン変更回路121が接続するベクタレジスタ111のバンク番号を2進数で表した3ビットの情報である。また、ステップ番号611は、2つのステップ番号を2進数で表した1ビットの情報である。
読出ライン変更回路121は、「a,b,c」で表される自己に対応するベクタレジスタ111のバンク番号612を取得する。次に、読出ライン変更回路121は、「v」で表されるステップ番号611の入力を演算命令制御部101から受ける。例えば、ステップ番号が1の場合、読出ライン変更回路121は、「1」の入力を受ける。
次に、読出ライン変更回路121は、排他的論理和回路613を用いて、バンク番号612の最下位のビットと、ステップ番号611との排他的論理和を求める。これにより、読出ライン変更回路121は、読出ライン番号614を取得する。ここで、読出ライン番号614における大文字のアルファベットはビットの値を反転させた値を指す。
その後、読出ライン変更回路121は、命令で指定された読み出し元とするラインのライン情報615の最下位のビットに読出ライン番号614を付加して、読出ライン情報616を生成する。その後、読出ライン変更回路121は、生成した読出ライン情報616をベクタレジスタ111へ出力する。これにより、読出ライン変更回路121は、図30で示した読出ライン選択テーブル601におけるバンク番号及びステップ番号に対応するライン番号の出力を行うことができる。この場合、読出ライン変更回路121は、読出ライン情報616に含まれる最下位ビットで表されるライン番号にあたる要素レジスタ113から出力される読出データをベクタレジスタ111に出力させることができる。
また、アンパッキングの処理の場合、読出ライン変更回路121は、入力されたリードアドレスを含む送信元の情報をそのまま、ベクタレジスタ111へ出力する。これにより、読出ライン変更回路121は、リードアドレスで表されるライン番号の要素レジスタ113から出力される読出データをベクタレジスタ111に出力させることができる。
ルータ125は、読出データの入力を各ベクタレジスタ111から受ける。また、ルータ125は、ステップ番号の入力を演算命令制御部101から受ける。
パッキング処理の場合、ルータ125は、格納先のベクタレジスタ111のバンク番号及びステップ番号を基に、図32に示す宛先バンク選択テーブル602に応じた送信元のバンク番号を取得する。
図32は、実施例2に係るパッキング処理用の宛先バンク選択テーブルの一例の図である。宛先バンク選択テーブル602は、本実施例において2回繰り返して行われるパッキング処理毎の各格納先のバンクに応じた送信元となる送信元バンクの情報を表す。例えば、格納先バンクがバンク番号#0であれば、ステップ番号が0、1である場合のそれぞれで、ルータ125は、バンク番号#0、#1のバンクを送信元バンクとして選択する。
図33を参照して、より具体的に格納先バンクの決定を説明する。図33は、実施例2に係るルータが有するパッキング時の格納先バンクを決定する回路構成の概要を表す図である。バンク番号621は、格納先バンクのバンク番号を2進数で表した3ビットの情報である。また、ステップ番号622は、2つのステップ番号を2進数で表した1ビットの情報である。
ルータ125は、格納先とする「a,b,c」で表されるバンク番号を選択する。次に、ルータ125は、選択した格納先バンクのバンク番号のビットを1ビット左ローテートする。すなわち、ルータ125は、バンク番号621の最下位及び最下位から2番目のビットの値を1ビットずつの上位のビットに移動し、最上位のビットの値を最下位のビットに移動する。これにより、ルータ125は、巡回後番号623を取得する。例えば、格納先のベクタレジスタ111のバンク番号621が「0,1,1」である場合、ルータ125は、巡回後番号623として「1,1,0」を取得する。
次に、ルータ125は、「v」で表されるステップ番号622の入力を演算命令制御部101から受ける。次に、ルータ125は、排他的論理和回路624を用いて巡回後番号623の最下位のビットとステップ番号との排他的論理和を求める。そして、ルータ125は、巡回後番号623の最上位ビット及び最下位から2番目のビット、並びに、排他的論理和回路624からの出力を並べて送信元バンクのバンク番号625を取得する。ここで、バンク番号625における大文字のアルファベットは元の値を反転させた値である。
ルータ125は、選択した格納先のバンク番号のベクタレジスタ111に対応する積和演算器112に接続するバイトシャッフル回路122に対して、決定した送信元バンクのバンク番号を有するベクタレジスタ111から入力された値を出力する。
また、アンパッキング処理の場合、図34に示す回路により格納先バンクを決定する。図34は、実施例2に係るルータが有するアンパッキング時の格納先バンクを決定する回路構成の概要を表す図である。バンク番号626は、格納先バンクのバンク番号を2進数で表した3ビットの情報である。また、ステップ番号627は、2つのステップ番号を2進数で表した1ビットの情報である。
ルータ125は、格納先とする「a,b,c」で表されるバンク番号を選択する。次に、ルータ125は、選択した格納先のバンク番号のビットを1ビット右ローテートする。すなわち、ルータ125は、バンク番号626の最上位のビット及び最下位から2番目のビットの値をそれぞれ1つ下位のビットに移動し、最下位のビットの値を最上位のビットにする。これにより、ルータ125は、巡回後番号628を取得する。例えば、格納先のベクタレジスタ111のバンク番号626が「1,0,1」である場合、ルータ125は、巡回後番号628として「1,1,0」を取得する。
次に、ルータ125は、「v」で表されるステップ番号627の入力を演算命令制御部101から受ける。次に、ルータ125は、排他的論理和回路629を用いて巡回後番号628の最上位のビットと、ステップ番号627との排他的論理和を求める。そして、ルータ125は、排他的論理和回路629からの出力、並びに、巡回後番号628の最上位ビット及び最下位から2番目のビットの値を並べて送信元バンクのバンク番号630を取得する。ここで、バンク番号630における大文字のアルファベットは元の値を反転させた値である。
ルータ125は、選択した格納先のバンク番号のベクタレジスタ111に対応する積和演算器112に接続するバイトシャッフル回路122に対して、決定した送信元のバンク番号のベクタレジスタ111から入力された読出データを出力する。
バイトシャッフル回路122、積和演算器112及び宛先バイト書込可否選択回路123は、パッキングの処理の場合、格納先のベクタレジスタ111のバンク番号及びステップ番号を基に、図35に示すバイト選択テーブル603に応じた宛先バイト番号及び読出元バイト番号を取得する。
図35は、実施例2に係るパッキング処理用のバイト選択テーブルの一例の図である。バイト選択テーブル603は、本実施例において2回繰り返して行われるパッキングの処理毎の各格納先バンクに応じた書き込み先となる宛先バイト及び読み出し元となる読出バイトの情報を表す。本実施例に係るパッキングの処理では、宛先バイトがバイトB0又はB2の要素データは、読出ラインにおけるバイトB0の位置に格納される。また、宛先バイトがバイトB1又はB3の要素データは、読出ラインにおけるバイトB1の位置に格納される。
アンパッキング処理の場合、パッキング処理を逆向きにすることで、宛先バイトのバイト番号及び読出バイトのバイト番号が決定できる。以下に、バイトシャッフル回路122及び宛先バイト書込可否選択回路123の詳細について説明する。
図36を参照して、パッキング時のバイトシャッフル回路122による要素データが格納されるバイトの位置を決定について説明する。図36は、実施例2に係るバイトシャッフル回路によるパッキング時の宛先バイトの決定処理を説明するための図である。
バイトシャッフル回路122は、宛先バイトがバイト番号B0又はB2の場合、読出バイトをバイト番号00とする。また、バイトシャッフル回路122は、宛先バイトがバイト番号B1又はB3の場合、読出バイトをバイト番号01とする。
次に、図37を参照して、アンパッキング時のバイトシャッフル回路122による要素データが格納される宛先バイトの位置を決定について説明する。図37は、実施例2に係るバイトシャッフル回路によるアンパッキング時の宛先バイトの決定処理を説明するための図である。バンク番号632は、格納先バンクのバンク番号を2進数で表した3ビットの情報である。
バイトシャッフル回路122は、自己に対応するベクタレジスタ111のバンク番号を予め有する。この自己に対応するベクタレジスタ111のバンク番号が、格納先バンクのバンク番号である。また、本実施例のアンパッキングの処理では、要素データは、ラインにおける最下位のバイトB0及び1つ上位のバイトB1に書き込まれる。そこで、バイトシャッフル回路122は、対応633に示すように、バイトB0及びB1が宛先バイトの場合の読出バイトをバイト番号c0及びc1とする。
そして、バイトシャッフル回路122は、格納先のベクタレジスタ111のバンク番号632の最下位ビットを取得して、対応633に示すように、宛先バイトであるバイト番号B0及びB1のバイトに対応する読出バイトのバイト番号を取得する。
バイトシャッフル回路122は、読出データとともに読出データにおける各読出バイトに対応する宛先バイトの情報を積和演算器112へ出力する。
図38は、実施例2に係る宛先バイト書込可否選択回路が有するパッキング時の宛先バイトを選択する回路構成の概要を表す図である。バンク番号642は、格納先バンクのバンク番号を2進数で表した3ビットの情報である。また、ステップ番号641は、2つのステップ番号を2進数で表した1ビットの情報である。
宛先バイト書込可否選択回路123は、格納先とする「a,b,c」で表されるバンク番号642を取得する。次に、宛先バイト書込可否選択回路123は、「v」で表されるステップ番号641の入力を演算命令制御部101から受ける。
次に、宛先バイト書込可否選択回路123は、排他的論理和回路643を用いてバンク番号642の最上位のビットとステップ番号641との排他的論理和を求める。そして、宛先バイト書込可否選択回路123は、排他的論理和回路643からの出力を判定回路644及び645へ入力する。
判定回路644及び645は、四角の枠の中に記載された「==n」に応じて、入力された値がnを表す2進数の場合には1を出力し、それ以外の場合には0を出力する回路である。そして、判定回路645から1が出力された場合、バイト番号B0及びB1への書き込みを有効にする。判定回路644から1が出力された場合、バイト番号B2及びB3への書き込みを有効にする。そして、有効にされたバンクにデータが書き込まれ、他のバンクにはデータが書き込まれない。
次に、図39を参照して、アンパッキング時の宛先バイト書込可否選択回路123の処理について説明する。図39は、実施例2に係る宛先バイト書込可否選択回路によるアンパッキング時の宛先バイトの書込可否選択処理を説明するための図である。
宛先バイト書込可否選択回路123は、格納先のベクタレジスタ111のバンク番号に関わらず、図39のテーブル646で示すようにバイトB2及びB3への書き込みを無効とする。また、宛先バイト書込可否選択回路123は、テーブル646で示すようにバイトB0及びB1への書き込みを有効とする。これは、本実施例では、アンパッキング時には、いずれのバンクのどのラインであっても32ビットの領域のバイトB0及びB1に要素データが格納されることを理由とする。
図40は、実施例2に係るアンパッキング処理用の宛先ライン選択テーブルの一例の図である。宛先ライン選択テーブル605は、本実施例において2回繰り返して行われるアンパッキングの処理毎の各宛先バンクに応じた要素データの格納先となる宛先ラインの情報を表す。例えば、宛先バンクがバンク番号#0である場合、宛先ライン選択回路124は、ステップ番号が0及び1である場合のそれぞれで、ライン番号##0、##1のラインを宛先ラインとして選択する。
次に、より具体的に宛先ライン選択回路124による宛先ラインの決定処理について説明する。図41は、実施例2に係る宛先ライン選択回路が有するアンパッキング時の宛先ラインを決定する回路構成の概要を表す図である。バンク番号652は、格納先バンクのバンク番号を2進数で表した3ビットの情報である。また、ステップ番号651は、2つのステップ番号を2進数で表した1ビットの情報である。
宛先ライン選択回路124は、「a,b,c」で表される自己が接続するベクタレジスタ111のバンク番号652を取得する。次に、宛先ライン選択回路124は、「v」で表されるステップ番号651の入力を演算命令制御部101から受ける。
次に、宛先ライン選択回路124は、排他的論理和回路653を用いて、バンク番号652の最下位のビットとステップ番号651との排他的論理和を求める。これにより、宛先ライン選択回路124は、宛先ライン番号654を取得する。ここで、宛先ライン番号654における大文字のアルファベットはビットの値を反転させた値を指す。
その後、宛先ライン選択回路124は、命令で指定された宛先とするラインのライン情報655の最下位ビットに宛先ライン番号654を付加して、宛先ライン情報656を生成する。その後、宛先ライン選択回路124は、生成した宛先ライン情報656をベクタレジスタ111へ出力する。これにより、宛先ライン選択回路124は、図40で示した宛先ライン選択テーブル605におけるバンク番号及びステップ番号に対応する情報の出力を行うことができる。この場合、宛先ライン選択回路124は、宛先ライン情報656に含まれる最下位ビットで表されるライン番号の要素レジスタ113への要素データの書き込みをベクタレジスタ111に行わせることができる。
次に、図42を参照して、2つのステップにおける本実施例に係る積和演算部100によるパッキング時の送信元の要素データの格納位置と宛先の要素データの格納位置との関係について説明する。図42は、実施例2に係るパッキング時の送信元の要素データの格納位置と宛先の要素データの格納位置との関係を表す図である。図42は、上述した処理により積和演算部100により各ステップにおいて決定される送信元及び宛先を表す。
図42において、対応関係660は、ステップ番号が0の場合の送信元における格納位置を表す情報及び宛先における格納位置を表す情報との関係を表す。また、対応関係670は、ステップ番号が1の場合の送信元における格納位置を表す情報及び宛先における格納位置を表す情報との関係を表す。そして、指定情報681は、演算命令制御部101からの命令で指定された送信元の情報である。また、指定情報682は、演算命令制御部101からの命令で指定された宛先の情報である。
ステップ番号が0の場合、対応関係660に示すように、積和演算部100は、指定情報681の最下位ビットに、読出ライン情報661を付加して、読出ラインのライン番号とする。読出ライン情報661は、2進数を用いた3ビットで送信元バンクのバンク番号を表した送信元バンク番号662の最下位ビットにあたる。送信元バンク番号662は、送信元バンクのバンク番号となる。さらに、積和演算部100は、「0」の値を取るバイト番号663を読出バイトのバイト番号とする。
そして、ステップ番号が0の場合、積和演算部100は、送信元バンク番号662の各ビットを1ビット右ローテートさせることで生成される格納先バンク番号664を送信先のバンク番号とする。さらに、積和演算部100は、送信元バンク番号662の最下位ビットにあたる宛先バイト番号665を宛先バイトのバイト番号とする。
ステップ番号が1の場合、対応関係670に示すように、積和演算部100は、指定情報681の最下位ビットに読出ライン情報671を付加して、読出ラインのライン番号とする。読出ライン情報671は、送信元バンク番号672の最下位ビットを反転させた値である。さらに、積和演算部100は、「0」の値を取るバイト番号673を読出バイトのバイト番号とする。
そして、ステップ番号が1の場合、積和演算部100は、送信元バンク番号672の最下位のビットを反転させたうえで、各ビットを1ビット右ローテートさせることで生成される格納先バンク番号674を格納先バンクのバンク番号とする。さらに、積和演算部100は、送信元バンク番号672の最下位ビットにあたる宛先バイト番号675を宛先バイトのバイト番号とする。
図42で示した送信元と宛先の情報をライン、バンク及びバイトの形で表すと図43の様に表される。図43は、実施例2に係る積和演算部によるパッキング時の送信元と宛先の情報の一覧の図である。
図43において、紙面に向かって左端の数字は、パッキング前の16個の要素データが格納された領域に連番で振った番号を表す。そして、矢印の左側が、送信元の位置の情報を表す。また、矢印の右側が、宛先の位置の情報を表す。紙面に向かって上端から8個ずつの組が、それぞれステップ番号が0及び1の各ステップにおける送信元と宛先にあたる。
図43に示すように、送信元のバンク番号691は、各ステップにおいて重複しない。すなわち、積和演算部100は、各ステップで同時に8つの要素データを読み出すことができる。そして、図43に示すように宛先のバンク番号692も、各ステップにおいて重複しない。すなわち、積和演算部100は、各ステップで同時に8つの要素データを格納することができる。すなわち、積和演算部100は、8つのバンクを効率的に使用してパッキングの処理を行うことができる。
このように、積和演算部100は、図42に示した手順で決められた送信元及び宛先の位置を用いることで効率的にパッキングの処理を行うことができる。そして、図42に示した送信元及び宛先の位置は、図30の読出ライン選択テーブル601、図32の宛先バンク選択テーブル602、及び、図35のバイト選択テーブル603にしたがって決定した送信元及び宛先の位置に一致する。すなわち、上述した積和演算部100の処理により、積和演算部100は、効率的にパッキングの処理を行うことができることが分かる。また、アンパッキング処理についても同様であり、積和演算部100は、効率的にアンパッキングの処理を行うことができることが分かる。
以上に説明したように、本実施例に係る処理ユニットは、32ビットのデータを16ビットのデータに変換して2つずつ詰め合せるパッキング処理やその逆のアンパッキング処理について、既存の積和演算の回路を用いて効率的に処理を行うことができる。