(57)【要約】  パッキング及びアンパッキングの処理を効率化する演算処理装置及び演算処理装置の制御方法を提供する。ＰＣＩカードは、データ転送を所定数繰り返し行いサイズの異なる２つの記憶領域間で要素データを移動する。ルータ（１２５）は、送信元の一方の記憶領域における前記要素データが格納された第１格納領域の情報及び前記繰り返しの回数を基に、送信先の他方の記憶領域における前記要素データの第２格納領域を決定する。格納部（１２２，１２３）は、前記第２格納領域の情報及び前記繰り返しの回数を基に、前記第１格納領域に格納された要素データを前記第２格納領域の所定位置へ格納する。
2020084694.tif 000002
【特許請求の範囲】
【請求項１】
データ転送を所定数繰り返し行いサイズの異なる２つの記憶領域間で要素データを移動する演算処理装置であって、
送信元の一方の記憶領域における前記要素データが格納された第１格納領域の情報及び前記繰り返しの回数を基に、送信先の他方の記憶領域における前記要素データの第２格納領域を決定する転送部と、
前記第２格納領域の情報及び前記繰り返しの回数を基に、前記第１格納領域に格納された要素データを前記第２格納領域の所定位置へ格納する格納部と
を備えたことを特徴とする演算処理装置。
【請求項２】
送信元の一方の記憶領域における前記要素データが格納された第１格納領域の情報及び前記繰り返しの回数を基に、前記第１格納領域における前記要素データの第１格納位置を決定する第１決定部をさらに備え、
前記格納部は、前記第２格納領域の情報及び前記繰り返しの回数を基に、前記第１格納領域の前記第１格納位置に格納された要素データを前記第２格納領域の前記所定位置へ格納する
を備えたことを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記２つの記憶領域は行方向にバンク単位で分割され列方向に複数の格納領域を含むライン単位で分割されるレジスタの一部であって、
前記第１決定部は、前記一方の記憶領域における送信元のバンクの情報から送信元のラインを決定し、
前記転送部は、前記他方の記憶領域における送信先のバンクの情報から前記送信元のバンクを決定し、決定した前記送信元のバンクの前記第１決定部により決定された前記送信元のラインから取得した前記要素データを含む読出データを前記送信先のバンクに送信し、
前記格納部は、前記送信先のバンクの情報から送信元の格納領域及び送信先の格納領域を決定し、前記転送部から送信された前記読出データにおける前記送信先の格納領域から前記要素データを取得して、前記送信先のバンクの所定ラインにおける決定した前記送信先の格納領域に格納する
ことを特徴とする請求項２に記載の演算処理装置。
【請求項４】
前記第２格納領域の情報及び前記繰り返しの回数を基に、前記第２格納領域における前記要素データを格納する第２格納位置を決定する第２決定部をさらに備え、
前記格納部は、前記第２格納領域の情報及び前記繰り返しの回数を基に、前記第１格納領域に格納された要素データを前記第２格納領域の前記第２格納位置における前記所定位置へ格納する
ことを特徴とする請求項１に記載の演算処理装置。
【請求項５】
前記２つの記憶領域は行方向にバンク単位で分割され列方向に複数の格納領域を含むライン単位で分割されるレジスタの一部であって、
転送部は、前記他方の記憶領域における送信先のバンクの情報から送信元のバンクを決定し、決定した前記送信元のバンクの所定ラインから取得した読出データを前記送信先のバンクに送信し、
前記第２決定部は、前記送信先のバンクから送信先のラインを決定し、
前記格納部は、前記送信先のバンクの情報から送信元の格納領域及び送信先の格納領域を決定し、前記転送部から送信された前記読出データにおける前記送信先の格納領域から前記要素データを取得して、前記送信先のバンクの前記第２決定部により決定された前記送信先のラインにおける決定した前記送信先の格納領域に格納する、
ことを特徴とする請求項４に記載の演算処理装置。
【請求項６】
データ転送を所定数繰り返し行いサイズの異なる２つの記憶領域間で要素データを移動する演算処理装置の制御方法であって、
送信元の一方の記憶領域における前記要素データが格納された第１格納領域の情報及び前記繰り返しの回数を基に、送信先の他方の記憶領域における前記要素データの第２格納領域を決定し、
前記第２格納領域の情報及び前記繰り返しの回数を基に、前記第１格納領域に格納された要素データを前記第２格納領域の所定位置へ格納する
ことを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
昨今重要性を増す深層学習（ディープラーニング：deep  Learning）などで行われる計算においては、演算レイヤーにより巨大な演算データ配列の表現形式の変換が実行される場合が多い。表現形式の変換には、例えば、浮動小数点形式と固定小数点形式との間の変換などがある。さらに、巨大な演算データ配列の表現形式の変換においては、形式のみならず、計算に用いる要素毎のデータサイズも変わることが往々にしてある。そこで、効率的な演算動作のためには、変換後のデータは、変換後のサイズの要素の配列として配置し直されることが望ましい。【０００３】
例えば、畳み込みニューラルネットワーク（convolutional  neural  network）の処理において、畳み込み演算（convolution）を行うレイヤーは、演算量が多く、単位時間あたりにできるだけ大量の積和演算をこなしたい。一方で、畳み込み演算を行うレイヤーでは、各演算の精度はそれほど求められない。そのため、畳み込み演算を行うレイヤーが実行する演算においては、演算に用いられる各要素は８ビットや１６ビットなどの低精度の固定小数点であってもよいが、演算自体は高並列な演算であることが望ましい。全結合レイヤーも同様の傾向がある。【０００４】
一方で、同じ畳み込みニューラルネットワーク内の計算でも、ｓｏｆｔｍａｘ演算のレイヤーでは、計算量は畳み込み演算レイヤーや全結合レイヤーと比べると相対的にかなり少ないが、扱う数値のダイナミックレンジは大きい。そのため、ｓｏｆｔｍａｘ演算のレイヤーでは、浮動小数点での計算処理が望まれる。浮動小数点数は、固定小数点形式では存在しない指数部をデータ内で表現するため、固定小数点数より要素あたりのサイズが大きくなる傾向がある。【０００５】
このように、扱う数値の形式がことなるレイヤー間では、巨大なデータ配列の全要素について、形式とサイズを共に変換することが求められる。【０００６】
ここで、例として、ある演算レイヤーで、単精度の浮動小数点数で求められた演算結果の配列を、その次の演算レイヤーでは、８ビットの固定小数点数の配列に変換して処理する場合について説明する。ここでは、単精度の浮動小数点数をＦＰ３２と呼び、８ビットの固定小数点数をＩＮＴ８と呼ぶ。【０００７】
演算処理装置は、まず、ＦＰ３２で表現された数を、妥当な小数点位置のＩＮＴ８に変換する。次に、演算処理装置は、４つずつのＩＮＴ８のデータを、連続する３２ビット領域に詰め合わせる処理が行われる。【０００８】
この詰め合わせを行うことで、演算処理装置は、以降の演算レイヤーで、３２ビットの処理単位で、４つのデータをまとめて演算器に送ることや転送することができるようになる。すなわち、高い並列度で効率よく演算処理やデータ転送処理を実行できる。このような複数要素を所定の領域に詰め合わせてゆく操作は、パッキング（packing）と呼ばれる場合がある。パッキングは、大量のデータ移動を伴うため、効率的に処理することが望まれる。【０００９】
ここで、データを格納するレジスタと呼ばれる記憶領域は、ハードウェアの構成上、同時に制限なくランダムアクセスできるものではないことが一般的である。典型的には、記憶領域は、一般的にバンクと呼ばれる個別にアクセスされるいくつかの領域に分割される。そして、同一バンクでは同時に１個又は数個の読み書きが行われるという制限が存在する。【００１０】
ここでは、要素単位での読み出し又は書き込みのいずれかの処理がそれぞれに同時に実行可な８個のバンクにレジスタがインターリーブされた場合を考える。言い換えれば、同時に読み出し又は同時に書き込みアクセスできる８個のバンクに、配列の要素が順番に繰り返し配列された状態である。１つのバンクは、３２ビットのサイズを有する。その場合、パッキング処理を４回分まとめて３２要素を移動する処理を１つの単位で扱うとすると、演算処理は、８バンク全体に対する繰り返し単位となる。【００１１】
ここで、先頭のバンクから最後のバンクまでの全バンクの一巡をラインと呼ぶことにする。すなわち、ここでは１つのラインは３２×８ビットとなる。変換前には、３２ビットのデータだったものが８ビットのデータに変換されるので、データサイズは４分の１となる。そして、データサイズが４分の１となったデータを４つ詰め合せる場合、データは３２ビットの領域に格納される。すなわち、変換前の４つのラインから変換先の１つのラインへの移動が、この場合の演算処理の繰り返し単位となる。【００１２】
このような８バンク全体で見た繰り返し単位が実現できれば、それを繰返すことで、変換元の長い配列に含まれる要素を変換先に詰め合わせつつ移動することができる。【００１３】
逆に、ＩＮＴ８の配列をＦＰ３２の配列に変換する場合は、要素サイズが大きくなるため、要素の形式の変換前に広い領域への移動が行われる。この場合の処理を以下に示す。【００１４】
演算処理装置は、ＩＮＴ８の要素を含む配列を、１要素あたり８ビットの配列から１要素あたり３２ビットの配列に展開する。次に、演算処理装置は、４バイトの配列に１要素ずつとなったＩＮＴ８のデータをそれぞれＦＰ３２の表現に変換する。【００１５】
ここで、所定の領域に詰まった複数の要素を、要素毎にそれぞれより広い領域に散らせる操作は、アンパッキング（unpacking）と呼ばれる場合がある。アンパッキング処理も、パッキング処理と同様に、大量のデータ移動を伴うため、やはり効率的な処理が望まれる。【００１６】
ここでも、要素単位での読み出し又は書き込みのいずれかの処理が同時に実行可な８個のバンクにレジスタがインターリーブされた場合を考える。この場合も、上述したパッキング処理の場合と同じく、３２要素の移動が繰り返し単位となる。ただし、このアンパッキング処理では、要素のデータサイズが大きくなる変換であるので、変換元の１つのラインから変換先の４つのラインへの移動が、この場合の演算処理の繰り返し単位となる。【００１７】
ここで、データの移動や詰め合わせを行う命令は、例えば、他用途で使用されるパターンが想定された既存命令を組み合わせることで作成することが考えられる。パターンが想定された既存命令には、例えば、ｓｈｕｆｆｌｅ命令などがある。【００１８】
また、演算を並列して行う技術として、レジスタファイルを４つのバンクに分けて、１つのオペランドで４つのレジスタに同時にアクセスさせる従来技術がある。また、パッキング及びアンパッキング処理の技術として、メモリからパッキングされたデータを読み出して、アンパッキング処理を行い、アンパッキングした各データに対するフォーマット変換を並列で実施する従来技術がある。さらに、サイズの小さいレジスタに格納されたデータを読み出して、読み出したデータをサイズの大きいレジスタに複数個格納してＳＩＭＤ演算に用いる従来技術がある。
【先行技術文献】
【特許文献】
【００１９】
【特許文献１】特開２００２−１４９４００号公報
【特許文献２】特表２０１７−５０８２０１号公報
【特許文献３】特開２００５−１７４３００号公報
【発明の概要】
【発明が解決しようとする課題】
【００２０】
しかしながら、パターンが想定された既存命令の組み合わせでは、効率的な処理が困難である。例えば、ｓｈｕｆｆｌｅ命令は、要素間の選択は自由にできるものの、並び替え元や再配置先のラインの指定のしかたが固定的であり、パッキング又はアンパッキング処理うちいずれかの用途にしか活用できないおそれがある。また、パターンをうまく定義すれば、ＳＩＭＤ構成要素とするデータを単位とする移動は実現可能と考えられる。しかし、移動の前後で要素サイズが変わる場合、ＳＩＭＤ構成単位よりサイズの小さい演算要素の移動などを行うこととなり、パッキング及びアンパッキングの処理に利用することは困難である。【００２１】
また、１つのオペランドで４つに分けたレジスタに同時にアクセスさせる従来技術では、サイズ変更を伴うパッキング及びアンパッキングの処理を高速化することは困難である。また、メモリから読み出したデータをアンパッキングし、アンパッキングした各データに対するフォーマット変換を並列で実施する従来技術でも、移動の前後の要素サイズの変更は考慮されておらず、処理を高速化することは困難である。さらに、小さいレジスタに格納されたデータを大きいレジスタに複数個格納してＳＩＭＤ演算に用いる従来技術であっても、要素のデータサイズが変化する場合は考慮されておらず、パッキング及びアンパッキングの処理を効率化することは困難である。【００２２】
開示の技術は、上記に鑑みてなされたものであって、パッキング及びアンパッキングの処理を効率化する演算処理装置及び演算処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００２３】
本願の開示する演算処理装置及び演算処理装置の制御方法は、一つの態様において、データ転送を所定数繰り返し行いサイズの異なる２つの記憶領域間で要素データを移動する演算処理装置である。そして、転送部は、送信元の一方の記憶領域における前記要素データが格納された第１格納領域の情報及び前記繰り返しの回数を基に、送信先の他方の記憶領域における前記要素データの第２格納領域を決定する。格納部は、前記第２格納領域の情報及び前記繰り返しの回数を基に、前記第１格納領域に格納された要素データを前記第２格納領域の所定位置へ格納する。
【発明の効果】
【００２４】
本願の開示する演算処理装置及び演算処理装置の制御方法の一つの態様によれば、パッキング及びアンパッキングの処理を効率化できるという効果を奏する。
【図面の簡単な説明】
【００２５】
【図１】図１は、情報処理装置の全体構成図である。
【図２】図２は、積和演算部の詳細な回路図である。
【図３】図３は、実施例１に係るパッキング処理の概要を表す図である。
【図４】図４は、パッキングの処理において使用される領域を説明するための図である。
【図５】図５は、実施例１に係るアンパッキング処理の概要を表す図である。
【図６】図６は、実施例１に係るパッキング処理用の読出ライン選択テーブルの一例の図である。
【図７】図７は、実施例１に係る読出ライン変更回路の回路構成の概要を表す図である。
【図８】図８は、実施例１に係るパッキング処理用の宛先バンク選択テーブルの一例の図である。
【図９】図９は、実施例１に係るルータが有するパッキング時の格納先バンクを決定する回路構成の概要を表す図である。
【図１０】図１０は、アンパッキング処理用の宛先バンク選択テーブルの一例の図である。
【図１１】図１１は、実施例１に係るルータが有するアンパッキング時の格納先バンクを決定する回路構成の概要を表す図である。
【図１２】図１２は、格納先バンクに対応する読出元バンクを決定するための定義パターンの一例を表す図である。
【図１３】図１３は、実施例１に係るパッキング処理用のバイト選択テーブルの一例の図である。
【図１４】図１４は、アンパッキング処理用のバイト選択テーブルの一例の図である。
【図１５】図１５は、実施例２に係るバイトシャッフル回路によるパッキング時の宛先バイトの決定処理を説明するための図である。
【図１６】図１６は、実施例１に係るバイトシャッフル回路によるアンパッキング時の宛先バイトの決定処理を説明するための図である。
【図１７】図１７は、実施例1に係る宛先バイト書込可否選択回路が有するパッキング時の宛先バイトを選択する回路構成の概要を表す図である。
【図１８】図１８は、実施例１に係る宛先バイト書込可否選択回路によるアンパッキング時の宛先バイトの選択処理を説明するための図である。
【図１９】図１９は、実施例１に係るアンパッキング処理用の宛先ライン選択テーブルの一例の図である。
【図２０】図２０は、実施例1に係る宛先ライン選択回路が有するアンパッキング時の宛先ラインを決定する回路構成の概要を表す図である。
【図２１】図２１は、実施例１に係るパッキング時の送信元の要素データの格納位置と宛先の要素データの格納位置との関係を表す図である。
【図２２】図２２は、実施例１に係る積和演算部によるパッキング時の送信元と宛先の情報の一覧の図である。
【図２３】図２３は、パッキング時の一般化した送信元及び宛先の決定方法を説明するための図である。
【図２４】図２４は、アンパッキング時の送信元の要素データの格納位置と宛先の要素データの格納位置との関係を表す図である。
【図２５】図２５は、一般化したアンパッキング時の送信元及び宛先の決定方法を説明するための図である。
【図２６】図２６は、実施例１に係る処理ユニットによるパッキング処理のフローチャートである。
【図２７】図２７は、実施例１に係る処理ユニットによるアンパッキング処理のフローチャートである。
【図２８】図２８は、処理ユニットに本実施例に係るパッキング処理及びアンパッキング処理を実行させる命令の一例を示す図である。
【図２９】図２９は、実施例２に係るパッキング処理の概要を表す図である。
【図３０】図３０は、実施例２に係るパッキング処理用の読出ライン選択テーブルの一例の図である。
【図３１】図３１は、実施例２に係る読出ライン変更回路の回路構成の概要を表す図である。
【図３２】図３２は、実施例２に係るパッキング処理用の宛先バンク選択テーブルの一例の図である。
【図３３】図３３は、実施例２に係るルータが有するパッキング時の格納先バンクを決定する回路構成の概要を表す図である。
【図３４】図３４は、実施例２に係るルータが有するアンパッキング時の格納先バンクを決定する回路構成の概要を表す図である。
【図３５】図３５は、実施例２に係るパッキング処理用のバイト選択テーブルの一例の図である。
【図３６】図３６は、実施例２に係るバイトシャッフル回路によるパッキング時の宛先バイトの決定処理を説明するための図である。
【図３７】図３７は、実施例２に係るバイトシャッフル回路によるアンパッキング時の宛先バイトの決定処理を説明するための図である。
【図３８】図３８は、実施例２に係る宛先バイト書込可否選択回路が有するパッキング時の宛先バイトを選択する回路構成の概要を表す図である。
【図３９】図３９は、実施例２に係る宛先バイト書込可否選択回路によるアンパッキング時の宛先バイトの選択処理を説明するための図である。
【図４０】図４０は、実施例２に係るアンパッキング処理用の宛先ライン選択テーブルの一例の図である。
【図４１】図４１は、実施例２に係る宛先ライン選択回路が有するアンパッキング時の宛先ラインを決定する回路構成の概要を表す図である。
【図４２】図４２は、実施例２に係るパッキング時の送信元の要素データの格納位置と宛先の要素データの格納位置との関係を表す図である。
【図４３】図４３は、実施例２に係る積和演算部によるパッキング時の送信元と宛先の情報の一覧の図である。
【発明を実施するための形態】
【００２６】
以下に、本願の開示する演算処理装置及び演算処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する演算処理装置及び演算処理装置の制御方法が限定されるものではない。
【実施例１】
【００２７】
図１は、情報処理装置の全体構成図である。情報処理装置５０は、ＰＣＩ（Peripheral  Component  Interconnect）カード１及びホストコンピュータ２を有する。ＰＣＩカード１とホストコンピュータ２とはＰＣＩバスで接続され、互いにデータの送受信を行う。【００２８】
ホストコンピュータ２は、例えば、深層学習を実行する際の全体的な管理を行う。深層学習を実行する場合、ホストコンピュータ２は、ＰＣＩカード１に対して畳み込み演算などの深層学習における所定の演算の実行を指示する。深層学習を実行する際に、ホストコンピュータ２は、要素データのデータサイズの変更を伴うパッキング及びアンパッキングの処理の実行をＰＣＩカード１に対して指示する。例えば、全結合演算を行うレイヤーとｓｏｆｔｍａｘ演算のレイヤーとの間でのデータの授受を行う場合に、ホストコンピュータ２は、要素データのデータサイズの変更を伴うパッキング及びアンパッキングの処理の実行をＰＣＩカード１に指示する。【００２９】
ＰＣＩカード１は、ホストコンピュータ２からの指示を受けて演算を実行し、演算結果をホストコンピュータ２に出力する。例えば、ＰＣＩカード１は、深層学習における演算処理を実行する。ＰＣＩカード１は、図１に示すように、複数の処理ユニット１０、全体命令制御部１１、メモリコントローラ１２、メモリ１３及びＰＣＩ制御部１４を有する。このＰＣＩカード１が、「演算処理装置」の一例にあたる。【００３０】
ＰＣＩ制御部１４は、演算の実行を指示する演算命令や演算で使用する演算データの入力をホストコンピュータ２から受ける。そして、ＰＣＩ制御部１４は、取得した演算命令や演算データをメモリコントローラ１２へ出力する。【００３１】
また、ＰＣＩ制御部１４は、指示された演算に対する演算結果の入力をメモリコントローラ１２から受ける。そして、ＰＣＩ制御部１４は、演算結果をホストコンピュータ２へ出力する。【００３２】
メモリコントローラ１２は、演算命令や演算で使用する演算データの入力をＰＣＩ制御部１４から受ける。そして、メモリコントローラ１２は、取得した演算命令及び演算データをメモリ１３へ格納する。【００３３】
また、メモリコントローラ１２は、演算を実行する際に用いる演算データのベクタレジスタ１１１への格納の指示を全体命令制御部１１から受ける。そして、メモリコントローラ１２は、指定された演算データを指定された積和演算部１００のベクタレジスタ１１１へ格納する。ここで、メモリコントローラ１２は、直列に並んだ処理ユニット１０のうちの後段の処理ユニット１０に対してデータを送信する場合、積和演算部１００を迂回させてマルチプレクサ１０３へ演算データを出力する。【００３４】
また、メモリコントローラ１２は、演算結果の格納指示を全体命令制御部１１から受けると、指定された積和演算部１００のベクタレジスタ１１１から演算結果を取得しメモリ１３へ格納する。さらに、メモリコントローラ１２は、ホストコンピュータ２からＰＣＩ制御部１４を介して指示を受けると、メモリ１３に格納された演算結果を読み出し、ＰＣＩ制御部１４へ出力する。【００３５】
全体命令制御部１１は、ホストコンピュータ２から実行が指示された演算の全体の統括管理を行う。全体命令制御部１１は、ホストコンピュータ２からの指示をＰＣＩ制御部１４経由で受け、メモリ１３に格納された全体命令列を次々と読んでは実行する。全体命令には、メモリ１３から演算命令バッファ１０２に演算命令列を転送する命令、メモリ１３から演算データをベクタレジスタ１１１に格納する命令、演算命令バッファ１０２に格納された演算命令列を演算命令制御部１０１に実行開始させる命令、ベクタレジスタ１１１に格納された演算結果をメモリ１３に格納する命令、命令列の実行を終了する命令などがある。全体命令制御部１１は、演算命令列を処理ユニット１０に実行させる。【００３６】
演算を処理ユニット１０に実行させる場合、全体命令制御部１１は、演算を実行する際に用いる演算データの送信をメモリコントローラ１２に指示する。また、処理ユニット１０における演算が完了すると、全体命令制御部１１は、演算結果の格納をメモリコントローラ１２に指示する。さらに、実行が指示された演算の全ての処理が完了すると、全体命令制御部１１は、演算完了をメモリコントローラ１２へ通知する。【００３７】
全体命令制御部１１は、深層学習を実行する場合、各レイヤー間のデータの授受なども制御する。その場合、全体命令制御部１１は、要素データのデータサイズの変更を伴うパッキング及びアンパッキングの処理の実行を演算命令制御部１０１に対して指示する。その際、全体命令制御部１１は、パッキング及びアンパッキングを行う対象となる配列に格納された要素データの送信をメモリコントローラ１２に指示する。例えば、全結合演算を行うレイヤーとｓｏｆｔｍａｘ演算のレイヤーとの間でのデータの授受を行う場合に、全体命令制御部１１は、要素データのデータサイズの変更を伴うパッキング及びアンパッキングの処理の実行を演算命令制御部１０１に指示する。【００３８】
次に、処理ユニット１０について説明する。処理ユニット１０は、図１に示すように１つのＰＣＩカード１に複数搭載される。各処理ユニット１０は、並列及び直列に複数接続される。処理ユニット１０の数は、ある態様においては１２８個である。処理ユニット１０は、積和演算部１００、演算命令制御部１０１、演算命令バッファ１０２及びマルチプレクサ１０３を有する。ただし、図１の処理ユニット１０は、簡略化して記載しており、詳細については後で説明する。【００３９】
演算命令制御部１０１は、演算命令の実行処理を管理制御する。演算命令制御部１０１は、個々の演算の実行の指示を全体命令制御部１１から受ける。処理ユニット１０で実行できる命令を、全体命令と対比させて演算命令と呼んでいるが、命令には、積和演算部に演算を行わせる狭義の演算命令のほか、汎用レジスタ（図示しない）の操作命令、分岐命令、繰り返し命令、命令列の実行を停止する命令などが含まれる。【００４０】
演算命令制御部１０１は、演算命令バッファ１０２に格納された演算命令を取得する。次に、演算命令制御部１０１は、取得した演算命令で指定された演算データの出力をベクタレジスタ１１１に指示する。また、演算命令制御部１０１は、取得した演算命令にしたがい、演算実行の指示を積和演算器１１２へ出力する。その後、演算命令制御部１０１は、積和演算器１１２内で演算結果を用いた演算をループさせる。また、演算命令制御部１０１は、例えば、要素データのデータサイズの変更を伴うパッキング及びアンパッキングの処理の実行命令を発行する。【００４１】
演算命令バッファ１０２は、演算命令列を格納する記憶領域である。演算命令バッファ１０２は、メモリコントローラ１２から入力された演算命令列を指示されたアドレスから入力順に格納する。その後、演算命令制御部１０１からの演算命令の取得要求を受けて、演算命令バッファ１０２は、演算命令制御部１０１に要求されたアドレスの演算命令を出力する。【００４２】
積和演算部１００は、ベクタレジスタ１１１及び積和演算器１１２を有する。ただし、積和演算部１００が有するベクタレジスタ１１１は、処理ユニット１０に搭載されたベクタレジスタ全体の一部にあたる。【００４３】
ベクタレジスタ１１１は、演算を実行する際に用いる演算データの入力をメモリコントローラ１２から受けて、入力された演算データを格納する。その後、ベクタレジスタ１１１は、演算命令制御部１０１からの指示を受けて、演算で使用する演算データを積和演算器１１２に出力する。また、ベクタレジスタ１１１は、積和演算器１１２の演算結果を取得して格納する。積和演算器１１２による演算のループ処理が完了後、メモリ１３への出力の指示をメモリコントローラ１２から受けると、ベクタレジスタ１１１は、出力を指示された領域に格納された積和演算器１１２の演算結果を、マルチプレクサ１０３へ出力する。【００４４】
特に、要素データのデータサイズの変更を伴うパッキング及びアンパッキングの処理の場合、ベクタレジスタ１１１は、パッキング又はアンパッキングを行う要素データ、並びに、パッキング又はアンパッキングの処理後の要素データを格納する。【００４５】
積和演算器１１２は、演算命令制御部１０１からの演算実行の指示を受ける。そして、積和演算器１１２は、ベクタレジスタ１１１から入力された演算データを用いて積和演算を実行する。その後、積和演算器１１２は、演算結果をベクタレジスタ１１１へ出力する。命令により累積を指示された場合は、積和演算器１１２は、累積演算結果を演算器内のレジスタ（アキュムレータ）に保持し、後続の累積演算命令で使用する。【００４６】
積和累積演算の場合、積和演算器１１２は、全ての演算が完了するまでベクタレジスタ１１１から入力された値に対する積和演算を繰返す。その後、積和累積演算のループ処理が終了すると、積和演算器１１２は、演算結果をベクタレジスタ１１１へ出力し、格納させる。【００４７】
次に、図２を参照して、要素データのデータサイズの変更を伴うパッキング及びアンパッキングの処理を行う積和演算部１００の機能の詳細に説明する。図２は、積和演算部の詳細な回路図である。図２では、演算命令制御部１０１から、ベクタレジスタ１１１Ａ、積和演算器１１２Ａ、読出ライン変更回路１２１Ａ、バイトシャッフル回路１２２Ａ、宛先バイト書込可否選択回路１２３Ａ、宛先ライン選択回路１２４Ａ及びルータ１２５へ延びる信号経路を記載した。ただし、実際には、演算命令制御部１０１からの信号経路は、他のベクタレジスタ１１１Ｂ〜１１１Ｃ、積和演算器１１２Ｂ〜１１２Ｃ、読出ライン変更回路１２１Ｂ〜１２１Ｃ、バイトシャッフル回路１２２Ｂ〜１２２Ｃへも延びる。また、演算命令制御部１０１からの信号経路は、宛先バイト書込可否選択回路１２３Ｂ〜１２３Ｃ及び宛先ライン選択回路１２４Ｂ〜１２４Ｃへも延びる。【００４８】
積和演算部１００は、図２に示すように、図１に示した積和演算器１１２を複数有する。ここでは、それぞれの積和演算器１１２を、積和演算器１１２Ａ〜１１２Ｃと表す。また、積和演算部１００は、バンクと呼ばれる単位に分割されたベクタレジスタ１１１を有する。ここでは、バンク単位に分割された各ベクタレジスタ１１１を、ベクタレジスタ１１１Ａ〜１１１Ｃと表す。ベクタレジスタ１１１Ａ〜１１１Ｃは、それぞれ積和演算器１１２Ａ〜１１２Ｃに１対１で対応する。さらに、積和演算部１００は、各ベクタレジスタ１１１Ａ〜１１１Ｃに対応させて、読出ライン変更回路１２１Ａ〜１２１Ｃ及び宛先ライン選択回路１２４Ａ〜１２４Ｃが配置される。また、各積和演算器１１２Ａ〜１１２Ｃに対応させて、バイトシャッフル回路１２２Ａ〜１２２Ｃ及び宛先バイト書込可否選択回路１２３Ａ〜１２３Ｃが配置される。以下の説明では、それぞれを区別しない場合、要素レジスタ１１３、積和演算器１１２、読出ライン変更回路１２１、バイトシャッフル回路１２２、宛先バイト書込可否選択回路１２３及び宛先ライン選択回路１２４と称する。【００４９】
さらに、ベクタレジスタ１１１Ａ〜１１１Ｃからバイトシャッフル回路１２２Ａ〜１２２Ｃを介して積和演算器１１２Ａ〜１１２Ｃへ繋がる経路上に、ルータ１２５が配置される。ルータ１２５は、ベクタレジスタ１１１Ａ〜１１１Ｃから出力されたデータを、バイトシャッフル回路１２２Ａ〜１２２Ｃのいずれかへ選択的に出力する。ここで、本実施例では、ベクタレジスタ１１１とバイトシャッフル回路１２２とを結ぶ経路上にルータ１２５を配置したが、ベクタレジスタ１１１と積和演算器１１２とを結ぶ他の経路も、ルータ１２５を経由してもよい。【００５０】
ベクタレジスタ１１１は、例えばＲＡＭ（Random  Access  Memory）である。ベクタレジスタ１１１は、本実施例では、全部で８つ配置される。ここでは、ベクタレジスタ１１１Ａがバンク番号＃０にあたり、ベクタレジスタ１１１Ｂがバンク番号＃１にあたり、ベクタレジスタ１１１Ｃがバンク番号＃７にあたる場合で説明する。【００５１】
さらに、ベクタレジスタ１１１は、複数の要素レジスタ１１３を有する。ベクタレジスタ１１１に含まれる各要素レジスタ１１３は、それぞれ番号が割り当てられたラインと呼ばれる単位と対応する。ここでは、各ラインを表す数値を、ライン番号という。すなわち、各要素レジスタ１１３には、それぞれライン番号が割り当てられる。【００５２】
本実施例では、ベクタレジスタ１１１は、演算命令制御部１０１から延びる経路に繋がるポートを４つ有する。演算命令制御部１０１から延びる経路に繋がる４つのポートのうち、３つはリードアドレスが入力されるポートである。そして、リードアドレスが入力される３つのポートのうち１つが、読出ライン変更回路１２１を介して演算命令制御部１０１に繋がる。また、演算命令制御部１０１から延びる経路に繋がる４つのポートのうちの残りの１つのポートは、ライトアドレスが入力されるポートである。【００５３】
また、ベクタレジスタ１１１は、各サイクルで演算に用いる複数のオペランドを積和演算器１１２に供給し、また、各サイクルで演算結果をいずれかの要素レジスタ１１３に書き戻すためのリードポート及びライトポートを有する。また、本実施例では、ベクタレジスタは、３つのリードポート及び１つのライトポートを有する。３つのリードポートは、それぞれ、演算命令制御部１０１から延びる経路に繋がる３つのライトアドレスが入力されるポートのいずれかに対応する。本実施例では、読出ライン変更回路１２１に接続するポートと、ルータを経由してバイトシャッフル回路１２２に接続されるポートとが対応する。【００５４】
ベクタレジスタ１１１は、演算命令制御部１０１に繋がるポートに入力されたリードアドレスに対応する要素レジスタ１１３に格納された値を、リードアドレスが入力されたポートに対応するリードポートから出力する。具体的には、ベクタレジスタ１１１Ａは、読出ライン変更回路１２１から入力されたリードアドレスに対応する要素レジスタ１１３に格納された値を、ルータ１２５へ出力する。【００５５】
ここで、本実施例に係る要素レジスタ１１３は、ライン毎のサイズが３２ビットである。そして、本実施例では、図３に示すように、要素レジスタ１１３のライン毎に格納された３２ビットのデータを８ビットに変換後、要素レジスタ１１３の何れかの１つのラインの中に４つパッキングする処理を例に説明する。図３は、実施例１に係るパッキング処理の概要を表す図である。【００５６】
この場合、１つのバンクのラインを埋めるために、４つの送信元の領域のデータが用いられる。そこで、パッキング処理により宛先となるラインを全て埋めるには、送信元の領域として４×８＝３２個の送信元の領域のデータを用いることになる。また、バンク番号＃０〜＃７に対応するベクタレジスタ１１１における要素レジスタ１１３は、それぞれ独立してアクセスされるので、１度に８つの書き込み処理又は読込処理が可能である。すなわち、送信元のバンクがそれぞれ異なり、宛先のバンクがそれぞれ異なれば、８つの送信元の領域のデータを一度に宛先の領域へ移すことができる。そこで、この８つの送信元の領域のデータを一度に宛先の領域へ移す処理を１ステップの処理とした場合、１つの宛先のラインをすべて埋めるには、４ステップの処理が行われる。そして、宛先のラインが同一であることから、３２個の送信元の領域の要素データの移動が、パッキング処理の１回の繰り返し単位となる。【００５７】
図４は、パッキングの処理において使用される領域を説明するための図である。図４では、紙面に向かって縦方向に分割された各列が各バンク番号＃０〜＃７のバンクを表す。そして、紙面に向かって横方向がラインを表す。すなわち、図４における領域２１〜２３が、それぞれ繰り返し単位毎の送信元の領域となる。そして、各繰り返し単位における宛先の領域が領域２４〜２６となる。すなわち、処理ユニット１０は、領域２１に格納された３２個の要素データを、領域２４に格納する。また、処理ユニット１０は、領域２２に格納された３２個の要素データを、領域２５に格納する。処理ユニット１０は、領域２３に格納された３２個の要素データを、領域２６に格納する。この領域２１〜２３及び領域２４〜２６のそれぞれが、「２つの記憶領域」の一例にあたる。そして、パッキング処理の場合、領域２１〜２３が、「一方の記憶領域」の一例にあたり、領域２４〜２６が、「他方の記憶領域」の一例にあたる。逆に、アンパッキング処理の場合、領域２４〜２６が、「一方の記憶領域」の一例にあたり、領域２１〜２３が、「他方の記憶領域」の一例にあたる。【００５８】
また、本実施例では、図５に示すように、１つのラインの８つの要素レジスタ１１３に格納された８ビットのデータを４つのラインの要素レジスタ１１３に振り分けて、３２ビットに拡張するアンパッキング処理を例に説明する。図５は、実施例１に係るアンパッキング処理の概要を表す図である。アンパッキング処理は、パッキング処理を逆転させた処理にあたる。すなわち、アンパッキング処理においても、４ステップの処理が行われる。そして、宛先のラインが同一であることから、１つのラインに格納された３２個の送信元の領域の要素データの移動が、アンパッキング処理の１回の繰り返し単位となる。【００５９】
読出ライン変更回路１２１は、ここで説明するパッキング及びアンパッキングの処理以外の処理を行う場合、演算命令制御部１０１から入力されたデータをそのままベクタレジスタ１１１へ出力する。【００６０】
一方、パッキング及びアンパッキングの処理の場合、読出ライン変更回路１２１は、宛先決定の指示とともに、ベクタレジスタ１１１における送信元となる領域の情報及びベクタレジスタ１１１における宛先となる領域の情報の入力を受ける。【００６１】
パッキング処理の場合、読出ライン変更回路１２１は、例えば、図５における送信元となる領域の情報として領域２１を示す情報の入力を演算命令制御部１０１から受ける。さらに、読出ライン変更回路１２１は、ステップ番号を演算命令制御部１０１から受ける。ここで、本実施例では、１つの繰り返し単位の処理において４つのステップが行われるので、読出ライン変更回路１２１は、ステップ番号として０〜３のいずれかの情報の入力を受ける。ここで、ステップ番号が０とは、最初のステップであることを表す。【００６２】
パッキング処理の場合、読出ライン変更回路１２１は、入力されたステップ番号の情報と自己が接続されたベクタレジスタ１１１のバンク番号を基に、図６に示す読出ライン選択テーブル２０１に応じた読出ラインのライン番号を取得する。【００６３】
図６は、実施例１に係るパッキング処理用の読出ライン選択テーブルの一例の図である。読出ライン選択テーブル２０１は、本実施例において４回繰り返して行われるパッキング処理毎の各送信元バンクに応じた読み出し元とする読出ラインの情報を表す。【００６４】
例えば、０回目の繰り返しの場合、読出ライン変更回路１２１は、自己が接続するベクタレジスタ１１１のライン番号及びステップ番号である０を用いて、読み出し元となる読出ラインの情報を求める。この読み出しラインの情報が読出ライン選択テーブル２０１におけるバンク番号＃０のステップ番号が０の場合の読出ラインの情報に一致する。そして、読出ライン変更回路１２１は、求めたライン番号を読み出しアドレスとしてベクタレジスタ１１１に入力する。【００６５】
図７を参照して、より具体的に読み出し元の情報の生成を説明する。図７は、実施例１に係る読出ライン変更回路の回路構成の概要を表す図である。バンク番号３０２は、読出ライン変更回路１２１が接続するベクタレジスタ１１１のバンク番号を２進数で表した３ビットの情報である。また、ステップ番号３０１は、４つのステップ番号を２進数で表した２ビットの情報である。【００６６】
読出ライン変更回路１２１は、「ａ，ｂ，ｃ」で表される自己に対応するベクタレジスタ１１１のバンク番号３０２を取得する。例えば、読出ライン変更回路１２１Ａは、バンク番号３０２として「０，０，０」を取得する。【００６７】
次に、読出ライン変更回路１２１は、「ｕ，ｖ」で表されるステップ番号３０１の入力を演算命令制御部１０１から受ける。例えば、ステップ番号３０１が２の場合、読出ライン変更回路１２１は、「１，０」の入力を受ける。【００６８】
次に、読出ライン変更回路１２１は、排他的論理和回路３０３を用いて、バンク番号３０２の最下位から２番目のビットと、ステップ番号３０１の上位ビットとの排他的論理和を求める。また、読出ライン変更回路１２１は、排他的論理和回路３０４を用いて、バンク番号３０２の最下位のビットと、ステップ番号３０１の下位ビットとの排他的論理和を求める。これにより、読出ライン変更回路１２１Ａは、読出ライン番号３０５を取得する。ここで、読出ライン番号３０５における大文字のアルファベットはビットの値を反転させた値を指す。例えば、ステップ番号が２の場合、読出ライン変更回路１２１Ａは、排他的論理和回路３０３から１を取得し、排他的論理和回路３０４から０を取得する。すなわち、読出ライン変更回路１２１Ａは、読出ライン番号３０５として「１，０」を取得する。「１，０」が表すラインは、ライン番号＃＃２のラインにあたる。【００６９】
その後、読出ライン変更回路１２１は、命令で指定された読み出し元とするラインのライン情報３０６の下位２ビットに読出ライン番号３０５を付加して、読出ライン情報３０７を生成する。その後、読出ライン変更回路１２１は、生成した読出ライン情報３０７をベクタレジスタ１１１へ出力する。これにより、読出ライン変更回路１２１は、図６で示した読出ライン選択テーブル２０１におけるバンク番号及びステップ番号に対応するライン番号の出力を行うことができる。この場合、読出ライン変更回路１２１は、読出ライン情報３０７に含まれる下位２ビットで表されるライン番号にあたる要素レジスタ１１３から出力される読出データをベクタレジスタ１１１に出力させることができる。ここで、読出データは、要素レジスタ１１３に格納された全ての値、すなわち、４つの要素データを含む。【００７０】
また、アンパッキングの処理の場合、読出ライン変更回路１２１は、入力されたリードアドレスを含む送信元の情報をそのまま、ベクタレジスタ１１１へ出力する。これにより、読出ライン変更回路１２１は、リードアドレスで表されるライン番号の要素レジスタ１１３から出力される読出データをベクタレジスタ１１１に出力させることができる。この読出ライン変更回路１２１が、「第１決定部」の一例にあたる。そして、送信元バンクが、「第１格納領域」の一例にあたり、読出ラインが、「第１格納位置」の一例にあたる。【００７１】
図２に戻って説明を続ける。ルータ１２５は、読出データの入力を各ベクタレジスタ１１１から受ける。また、ルータ１２５は、ステップ番号の入力を演算命令制御部１０１から受ける。【００７２】
パッキング処理の場合、ルータ１２５は、格納先のベクタレジスタ１１１のバンク番号及びステップ番号を基に、図８に示す宛先バンク選択テーブル２０２に応じた送信元のバンク番号を取得する。【００７３】
図８は、実施例１に係るパッキング処理用の宛先バンク選択テーブルの一例の図である。宛先バンク選択テーブル２０２は、本実施例において４回繰り返して行われるパッキング処理毎の各格納先のバンクに応じた送信元となる送信元バンクの情報を表す。例えば、格納先バンクがバンク番号＃０であれば、ステップ番号が０〜３である場合のそれぞれで、ルータ１２５は、バンク番号＃０、＃１、＃２、＃３のバンクを送信元バンクとして選択する。【００７４】
図９を参照して、より具体的に格納先バンクの決定を説明する。図９は、実施例１に係るルータが有するパッキング時の格納先バンクを決定する回路構成の概要を表す図である。バンク番号３１１は、格納先バンクのバンク番号を２進数で表した３ビットの情報である。また、ステップ番号３１２は、４つのステップ番号を２進数で表した２ビットの情報である。【００７５】
ルータ１２５は、格納先とする「ａ，ｂ，ｃ」で表されるバンク番号を選択する。次に、ルータ１２５は、選択した格納先バンクのバンク番号のビットを２ビット左ローテートする。２ビットの左ローテートとは、各ビットを上位ビット側に向けて２ビット移動する処理であり、且つ、最上位のビットを超えた移動の場合は最下位のビットに移動して巡回させる処理である。すなわち、ルータ１２５は、バンク番号３１１の最下位のビットの値を最上位のビットに移動し、最上位のビットの値を下から２番目のビットに移動し、下から２番目のビットの値を最下位のビットに移動する。これにより、ルータ１２５は、巡回後番号３１３を取得する。例えば、格納先のベクタレジスタ１１１のバンク番号３１１が「０，１，１」である場合、ルータ１２５は、巡回後番号３１３として「１，０，１」を取得する。【００７６】
次に、ルータ１２５は、２進数である「ｕ，ｖ」で表されるステップ番号３１２の入力を演算命令制御部１０１から受ける。例えば、ステップ番号が２の場合、ルータ１２５は、「１，０」の入力を受ける。【００７７】
次に、ルータ１２５は、排他的論理和回路３１４を用いて巡回後番号３１３の下から２番目のビットと、ステップ番号の上位のビットの排他的論理和を求める。また、ルータ１２５は、排他的論理和回路３１５を用いて巡回後番号３１３の最下位のビットと、ステップ番号の下位のビットの排他的論理和を求める。そして、ルータ１２５は、巡回後番号３１３の最上位ビット、排他的論理和回路３１４からの出力及び排他的論理和回路３１５からの出力を並べて送信元バンクのバンク番号３１６を取得する。ここで、バンク番号３１６における大文字のアルファベットは元の値を反転させた値である。【００７８】
例えば、格納先のベクタレジスタ１１１のバンク番号３１１が「０，１，１」であり、ステップ番号が２の場合について説明する。この場合、ルータ１２５は、排他的論理和回路３１４及び排他的論理和回路３１５から１を取得し、送信元バンクのバンク番号３１６として、「１，１，１」を取得する。バンク番号３１６が「１，１，１」であるとは、バンク番号＃７が送信元バンクであることを表す。これにより、ルータ１２５は、図８で示した宛先バンク選択テーブル２０２における格納先のバンク番号及びステップ番号に対応する送信元となるバンク番号を取得することができる。【００７９】
ルータ１２５は、選択した格納先のバンク番号のベクタレジスタ１１１に対応する積和演算器１１２に接続するバイトシャッフル回路１２２に対して、決定した送信元のバンク番号のベクタレジスタ１１１から入力された値を出力する。【００８０】
また、アンパッキング処理の場合、ルータ１２５は、格納先のベクタレジスタ１１１のバンク番号及びステップ番号を基に、図１０に示す宛先バンク選択テーブル２０３に応じた宛先バンクのバンク番号を取得する。【００８１】
図１０は、アンパッキング処理用の宛先バンク選択テーブルの一例の図である。宛先バンク選択テーブル２０３は、本実施例において４回繰り返して行われるパッキング処理毎の各格納先のバンクに応じた送信元となる送信元バンクの情報を表す。例えば、格納先バンクがバンク番号＃０である場合、ルータ１２５は、ステップ番号が０〜３である場合のそれぞれで、バンク番号＃０、＃２、＃４、＃６を送信元バンクのバンク番号として選択する。【００８２】
図１１を参照して、より具体的に格納先バンクの決定を説明する。図１１は、実施例１に係るルータが有するアンパッキング時の格納先バンクを決定する回路構成の概要を表す図である。バンク番号３２１は、格納先バンクのバンク番号を２進数で表した３ビットの情報である。また、ステップ番号３２２は、４つのステップ番号を２進数で表した２ビットの情報である。【００８３】
ルータ１２５は、格納先とする「ａ，ｂ，ｃ」で表されるバンク番号を選択する。次に、ルータ１２５は、選択した格納先のバンク番号のビットを２ビット右ローテートする。２ビットの右ローテートとは、各ビットを下位ビット側に向けて２ビット移動する処理であり、且つ、最下位のビットを超えた移動の場合は最上位のビットに移動して巡回させる処理である。すなわち、ルータ１２５は、バンク番号３２１の最上位のビットの値を最下位のビットに移動し、最下位のビットの値を下から２番目のビットに移動し、下から２番目のビットの値を最上位のビットに移動する。これにより、ルータ１２５は、巡回後番号３２３を取得する。例えば、格納先のベクタレジスタ１１１のバンク番号３２１が「１，０，１」である場合、ルータ１２５は、巡回後番号３２３として「０，１，１」を取得する。【００８４】
次に、ルータ１２５は、２進数である「ｕ，ｖ」で表されるステップ番号３２２の入力を演算命令制御部１０１から受ける。例えば、ステップ番号が２の場合、ルータ１２５は、「１，０」の入力を受ける。【００８５】
次に、ルータ１２５は、排他的論理和回路３２４を用いて巡回後番号３２３の最上位のビットと、ステップ番号の上位のビットの排他的論理和を求める。また、ルータ１２５は、排他的論理和回路３２５を用いて巡回後番号３２３の最下位から２番目のビットと、ステップ番号の下位のビットの排他的論理和を求める。そして、ルータ１２５は、排他的論理和回路３２４からの出力、排他的論理和回路３２５からの出力及び巡回後番号３２３の最下位ビットを並べて送信元バンクのバンク番号３２６を取得する。ここで、バンク番号３２６における大文字のアルファベットは元の値を反転させた値である。【００８６】
例えば、格納先のベクタレジスタ１１１のバンク番号３１１が「１，０，１」であり、ステップ番号が２の場合について説明する。この場合、ルータ１２５は、排他的論理和回路３２４及び排他的論理和回路３２５から１を取得し、送信元バンクのバンク番号３２６として、「１，１，１」を取得する。バンク番号３２６が「１，１，１」であるとは、バンク番号＃７が送信元バンクであることを表す。これにより、ルータ１２５は、図１０で示した宛先バンク選択テーブル２０３における格納先のバンク番号及びステップ番号に対応する送信元となるバンク番号を取得することができる。【００８７】
ルータ１２５は、選択した格納先のバンク番号のベクタレジスタ１１１に対応する積和演算器１１２に接続するバイトシャッフル回路１２２に対して、決定した送信元のバンク番号のベクタレジスタ１１１から入力された読出データを出力する。【００８８】
ここで、ルータ１２５による送信元バンクから格納先バンクへの経路選択方法の一例について説明する。ルータ１２５は、例えば、図１２に示す定義パターン２５１を記憶する。図１２は、格納先バンクに対応する読出元バンクを決定するための定義パターンの一例を表す図である。定義パターン２５１は、それぞれのパターン毎に各格納元バンクに対応する読出元バンクが登録される。定義パターン２５１における各読出元バンクの左側の数字は読出元ライン番号のオフセットである。すなわち、＋１の場合は、次のラインに移ることを表す。【００８９】
各パターンの機能としては、通常、ローテート及びブロードキャストが存在する。通常は、読出元バンクと格納先バンクが同じとなる場合である。ローテートは、読出元バンクのバンクバンク番号が、各格納先バンクに同じ数を加えたものになる場合である。ブロードキャストは、１つの読出元バンクからのデータが全ての格納先バンクに格納される場合である。【００９０】
ルータ１２５は、定義パターン２５１を用いることで、決定した読み出し元バンクと格納先バンクの組み合わせに応じたデータ転送を実現することができる。ただし、定義パターン２５２は一例であり、ルータ１２５は、他のパターンを用いても良いし、また、定義パターンを用いずに転送を行うことも可能である。このルータ１２５が、「転送部」の一例にあたる。また、格納先バンクが、「第２格納領域」の一例にあたる。【００９１】
図２に戻って説明を続ける。本実施例では、読み出し元及び書き込み先となる要素レジスタ１１３におけるライン毎の３２ビットの領域は、４つの８ビットとして個別に扱うことができる。この４つの８ビットの領域をそれぞれバイトＢ０〜Ｂ３とする。Ｂ０〜Ｂ３は、バイト番号を表すが、ここでは各バイト番号を有するバイトを、バイトＢ０〜Ｂ３と表す。以下では、バイトシャッフル回路１２２、積和演算器１１２及び宛先バイト書込可否選択回路１２３について説明する。【００９２】
バイトシャッフル回路１２２、積和演算器１１２及び宛先バイト書込可否選択回路１２３は、それぞれの処理を組み合わせることで書き込み先の要素レジスタ１１３における書き込む対象とするバイトを決定する。詳細には、読み出し元における要素が格納されたバイトと書き込み先における要素が格納されるバイトとは位置が異なるため、バイトシャッフル回路１２２は、読出データの各読出バイトに格納された要素データに対応する宛先バイトの位置を決定する。また、積和演算器１１２は、ここでは単にデータを通過させる回路である。また、宛先バイト書込可否選択回路１２３は、実際に要素データを書き込む宛先バイトを選択する回路である。【００９３】
バイトシャッフル回路１２２は、ベクタレジスタ１１１から出力された読出データの入力をルータ１２５から受ける。また、バイトシャッフル回路１２２及び宛先バイト書込可否選択回路１２３は、ステップ番号の入力を演算命令制御部１０１から受ける。【００９４】
パッキングの処理の場合、バイトシャッフル回路１２２、積和演算器１１２及び宛先バイト書込可否選択回路１２３は、格納先のベクタレジスタ１１１のバンク番号及びステップ番号を基に、図１３に示すバイト選択テーブル２０４に応じた宛先バイト番号及び読出元バイト番号を取得する。【００９５】
図１３は、実施例１に係るパッキング処理用のバイト選択テーブルの一例の図である。バイト選択テーブル２０４は、本実施例において４回繰り返して行われるパッキングの処理毎の各格納先バンクに応じた書き込み先となる宛先バイト及び読み出し元となる読出バイトの情報を表す。本実施例に係るパッキングの処理では、読出ラインにおいて要素データは全てバイトＢ０の位置に格納されるので、読出バイトとして指定されるのはバイトＢ０である。例えば、格納先バンクがバンク番号＃０でありステップ番号が２の場合、バイトシャッフル回路１２２、積和演算器１１２及び宛先バイト書込可否選択回路１２３は、バイトＢ２を宛先バイトとし、バイトＢ０を読出バイトとする。【００９６】
アンパッキング処理の場合、バイトシャッフル回路１２２、積和演算器１１２及び宛先バイト書込可否選択回路１２３は、格納先のベクタレジスタ１１１のバンク番号及びステップ番号を基に、図１４に示すバイト選択テーブル２０５に応じた宛先バイトのバイト番号及び読出バイトのバイト番号を取得する。【００９７】
図１４は、アンパッキング処理用のバイト選択テーブルの一例の図である。バイト選択テーブル２０５は、本実施例において４回繰り返して行われるパッキングの処理毎の各格納先バンクに応じた書き込み先となる読出バイト及び読み出し元となる読出バンクの情報を表す。本実施例に係るアンパッキングの処理では、書き込み先の宛先ラインにおいて要素データは全てバイトＢ０の位置に格納されるので、宛先バイトとして指定されるのはバイト番号Ｂ０である。例えば、格納先バンクがバンク番号＃０でありステップ番号が２の場合、バイトシャッフル回路１２２、積和演算器１１２及び宛先バイト書込可否選択回路１２３は、バイト番号Ｂ０を宛先バイトとし、バイト番号Ｂ０を読出バイトとする。【００９８】
以下に、バイトシャッフル回路１２２、積和演算器１１２及び宛先バイト書込可否選択回路１２３の詳細について説明する。【００９９】
図１５を参照して、パッキング時のバイトシャッフル回路１２２による要素データが格納されるバイトの位置を決定について説明する。図１５は、実施例２に係るバイトシャッフル回路によるパッキング時の宛先バイトの決定処理を説明するための図である。【０１００】
バイトシャッフル回路１２２は、格納先のベクタレジスタ１１１のバンク番号に関わらず、宛先バイトがバイト番号Ｂ０〜Ｂ３のいずれであっても、図１５のテーブル３３１で示すように読出元バイトを「００」に決定する。ここで、「００」は、バイト番号Ｂ０のバイトを示す。これは、本実施例では、３２ビットのデータが８ビットに圧縮された要素データが、どのバンクのどのラインであってもバイトＢ０に格納されることを理由とする。【０１０１】
次に、図１６を参照して、アンパッキング時のバイトシャッフル回路１２２による要素データが格納される宛先バイトの位置を決定について説明する。図１６は、実施例１に係るバイトシャッフル回路によるアンパッキング時の宛先バイトの決定処理を説明するための図である。バンク番号３３２は、格納先バンクのバンク番号を２進数で表した３ビットの情報である。【０１０２】
バイトシャッフル回路１２２は、自己に対応するベクタレジスタ１１１のバンク番号を予め有する。この自己に対応するベクタレジスタ１１１のバンク番号が、格納先バンクのバンク番号である。また、本実施例のアンパッキングの処理では、要素データは、ラインにおける最下位のバイトＢ０に書き込まれる。そこで、バイトシャッフル回路１２２は、バイトＢ０を宛先バイトとする。【０１０３】
そして、バイトシャッフル回路１２２は、格納先のベクタレジスタ１１１のバンク番号３３２の下位２ビットを取得して、テーブル３３３に示すように、宛先バイトであるバイト番号Ｂ０のバイトに対応する読出バイトのバイト番号とする。【０１０４】
バイトシャッフル回路１２２は、読出データとともに読出データにおける各読出バイトに対応する宛先バイトの情報を積和演算器１１２へ出力する。【０１０５】
ここで、図２に戻って、積和演算器１１２について説明する。積和演算器１１２は、読出データ及び読出データにおける各読出バイトに対応する宛先バイトの情報の入力をバイトシャッフル回路１２２から受ける。そして、積和演算器１１２は、入力された情報を素通させる演算を行い、演算結果を宛先バイト書込可否選択回路１２３へ出力する。すなわち、積和演算器１１２は、入力された読出データの情報をそのまま宛先バイト書込可否選択回路１２３へ出力するのと同じ処理を行う。【０１０６】
次に、宛先バイト書込可否選択回路１２３について説明する。図１７は、実施例1に係る宛先バイト書込可否選択回路が有するパッキング時の宛先バイトを選択する回路構成の概要を表す図である。バンク番号３４２は、格納先バンクのバンク番号を２進数で表した３ビットの情報である。また、ステップ番号３４１は、４つのステップ番号を２進数で表した２ビットの情報である。【０１０７】
宛先バイト書込可否選択回路１２３は、格納先とする「ａ，ｂ，ｃ」で表されるバンク番号を取得する。次に、宛先バイト書込可否選択回路１２３は、「ｕ，ｖ」で表されるステップ番号３４１の入力を演算命令制御部１０１から受ける。例えば、ステップ番号が２の場合、宛先バイト書込可否選択回路１２３は、「１，０」の入力を受ける。【０１０８】
次に、宛先バイト書込可否選択回路１２３は、排他的論理和回路３４３を用いてバンク番号３４２の最上位のビットと、ステップ番号の上位のビットの排他的論理和を求める。また、宛先バイト書込可否選択回路１２３は、排他的論理和回路３４４を用いてバンク番号３４２の最下位から２番目のビットと、ステップ番号の下位のビットの排他的論理和を求める。そして、宛先バイト書込可否選択回路１２３は、排他的論理和回路３４３からの出力及び排他的論理和回路３４４からの出力を並べて２進数とした値を判定回路３４５〜３４８へ入力する。【０１０９】
判定回路３４５〜３４８は、四角の枠の中に記載された「＝＝ｎ」に応じて、入力された値がｎを表す２進数の場合には１を出力し、それ以外の場合には０を出力する回路である。判定回路３４５〜３４８は、ＡＮＤ回路とインバータを組み合わせることで実現可能である。そして、判定回路３４５〜３４８のいずれかから１が出力された場合、それに繋がる四角の枠に記載するように、バイトＢ０〜Ｂ３のいずれかへの書き込みを有効にする。そして、有効にされたバンクにデータが書き込まれ、他のバンクにはデータが書き込まれない。【０１１０】
次に、図１８を参照して、アンパッキング時の宛先バイト書込可否選択回路１２３の処理について説明する。図１８は、実施例１に係る宛先バイト書込可否選択回路によるアンパッキング時の宛先バイトの書込可否選択処理を説明するための図である。【０１１１】
宛先バイト書込可否選択回路１２３は、格納先のベクタレジスタ１１１のバンク番号に関わらず、図１５のテーブル３４９で示すようにバイトＢ１〜Ｂ３への書き込みを無効とする。また、宛先バイト書込可否選択回路１２３は、テーブル３４９で示すようにバイトＢ０への書き込みを有効とする。これは、本実施例では、アンパッキング時には、いずれのバンクのどのラインであっても３２ビットの領域の最下位のビットに要素データが格納されることを理由とする。【０１１２】
以上により、バイトシャッフル回路１２２、積和演算器１１２及び宛先バイト書込可否選択回路１２３は、パッキング時に図１３で示したバイト選択テーブル２０４における宛先バイトのバンク番号及びステップ番号に対応する情報の出力を行うことができる。また、バイトシャッフル回路１２２、積和演算器１１２及び宛先バイト書込可否選択回路１２３は、アンパッキング時に図１４で示したバイト選択テーブル２０５における宛先バイトのバンク番号及びステップ番号に対応する情報の出力を行うことができる。このバイトシャッフル回路１２２及び宛先バイト書込可否選択回路１２３が、「格納部」の一例にあたる。そして、宛先バイトが「所定位置」の一例にあたる。【０１１３】
図２に戻って説明を続ける。宛先ライン選択回路１２４は、宛先となる領域の情報の入力を演算命令制御部１０１から受ける。例えば、宛先ライン選択回路１２４は、宛先となる領域の情報として図５に示す領域２４を示す情報の入力を演算命令制御部１０１から受ける。また、宛先ライン選択回路１２４は、ステップ番号の入力を演算命令制御部１０１から受ける。また、宛先ライン選択回路１２４は、自己が接続するベクタレジスタ１１１のバンク番号を格納先のベクタレジスタ１１１のバンク番号として保持する。【０１１４】
ここで、本実施例では、パッキング時には特定のラインに要素データを詰め合わせる。そこで、パッキングの処理の場合、宛先ライン選択回路１２４は、演算命令制御部１０１から入力された命令で指定された宛先となる領域が示すラインを宛先ラインとする。【０１１５】
これに対して、アンパッキングの処理の場合、宛先ライン選択回路１２４は、格納先バンクのバンク番号及びステップ番号を基に、図１９に示す宛先バンク選択テーブル２０２に応じたライン番号を取得する。【０１１６】
図１９は、実施例１に係るアンパッキング処理用の宛先ライン選択テーブルの一例の図である。宛先ライン選択テーブル２０６は、本実施例において４回繰り返して行われるアンパッキングの処理毎の各宛先バンクに応じた要素データの格納先となる宛先ラインの情報を表す。例えば、宛先バンクがバンク番号＃０である場合、宛先ライン選択回路１２４は、ステップ番号が０〜３である場合のそれぞれで、ライン番号＃＃０、＃＃１、＃＃２、＃＃３のラインを宛先ラインとして選択する。【０１１７】
次に、より具体的に宛先ライン選択回路１２４による宛先ラインの決定処理について説明する。図２０は、実施例1に係る宛先ライン選択回路が有するアンパッキング時の宛先ラインを決定する回路構成の概要を表す図である。バンク番号３５２は、格納先バンクのバンク番号を２進数で表した３ビットの情報である。また、ステップ番号３５１は、４つのステップ番号を２進数で表した２ビットの情報である。【０１１８】
宛先ライン選択回路１２４は、「ａ，ｂ，ｃ」で表される自己が接続するベクタレジスタ１１１のバンク番号３５２を取得する。例えば、宛先ライン選択回路１２４Ａは、バンク番号３５２として「０，０，０」を取得する。【０１１９】
次に、宛先ライン選択回路１２４は、「ｕ，ｖ」で表されるステップ番号３５１の入力を演算命令制御部１０１から受ける。例えば、ステップ番号３５１が２の場合、宛先ライン選択回路１２４は、「１，０」の入力を受ける。【０１２０】
次に、宛先ライン選択回路１２４は、排他的論理和回路３５３を用いて、バンク番号３５２の下位から２番目のビットと、ステップ番号３５１の上位ビットとの排他的論理和を求める。また、宛先ライン選択回路１２４は、排他的論理和回路３５４を用いて、バンク番号３５２の最下位のビットと、ステップ番号３５１の下位ビットとの排他的論理和を求める。これにより、宛先ライン選択回路１２４は、宛先ライン番号３５５を取得する。ここで、宛先ライン番号３５５における大文字のアルファベットはビットの値を反転させた値を指す。例えば、ステップ番号が２の場合、宛先ライン選択回路１２４Ａは、排他的論理和回路３５３から１を取得し、排他的論理和回路３５４から０を取得する。すなわち、宛先ライン選択回路１２４は、宛先ライン番号３５５として「１，０」を取得する。「１，０」が表すラインは、ライン番号＃＃２のラインである。【０１２１】
その後、宛先ライン選択回路１２４は、命令で指定された宛先とするラインのライン情報３５６の下位２ビットに宛先ライン番号３５５を付加して、宛先ライン情報３５７を生成する。その後、宛先ライン選択回路１２４は、生成した宛先ライン情報３５７をベクタレジスタ１１１へ出力する。これにより、宛先ライン選択回路１２４は、図１９で示した宛先ライン選択テーブル２０６におけるバンク番号及びステップ番号に対応する情報の出力を行うことができる。この場合、宛先ライン選択回路１２４は、宛先ライン情報３５７に含まれる下位２ビットで表されるライン番号の要素レジスタ１１３への要素データの書き込みをベクタレジスタ１１１に行わせることができる。この宛先ライン選択回路１２４が、「第２選択部」の一例にあたる。そして、宛先ラインが「第２格納位置」の一例にあたる。【０１２２】
次に、図２１を参照して、４つのステップにおける本実施例に係る積和演算部１００によるパッキング時の送信元の要素データの格納位置と宛先の要素データの格納位置との関係について説明する。図２１は、実施例１に係るパッキング時の送信元の要素データの格納位置と宛先の要素データの格納位置との関係を表す図である。図２１は、上述した処理により積和演算部１００により各ステップにおいて決定される送信元及び宛先を表す。【０１２３】
図２１において、対応関係４１０は、ステップ番号が０の場合の送信元における格納位置を表す情報及び宛先における格納位置を表す情報との関係を表す。また、対応関係４２０は、ステップ番号が１の場合の送信元における格納位置を表す情報及び宛先における格納位置を表す情報との関係を表す。また、対応関係４３０は、ステップ番号が２の場合の送信元における格納位置を表す情報及び宛先における格納位置を表す情報との関係を表す。また、対応関係４４０は、ステップ番号が３の場合の送信元における格納位置を表す情報及び宛先における格納位置を表す情報との関係を表す。そして、指定情報４５１は、演算命令制御部１０１からの命令で指定された送信元の情報である。また、指定情報４５２は、演算命令制御部１０１からの命令で指定された宛先の情報である。【０１２４】
ステップ番号が０の場合、対応関係４１０に示すように、積和演算部１００は、指定情報４５１の下位２ビットに、読出ライン情報４１１を付加して、読出ラインのライン番号とする。読出ライン情報４１１は、２進数を用いた３ビットで送信元バンクのバンク番号を表した送信元バンク番号４１２の下位２ビットにあたる。送信元バンク番号４１２は、送信元バンクのバンク番号となる。さらに、積和演算部１００は、「００」の値を取るバイト番号４１３を読出バイトのバイト番号とする。【０１２５】
そして、ステップ番号が０の場合、積和演算部１００は、送信元バンク番号４１２の各ビットを２ビット右ローテートさせることで生成される格納先バンク番号４１４を送信先のバンク番号とする。さらに、積和演算部１００は、送信元バンク番号４１２の下位２ビットにあたる宛先バイト番号４１５を宛先バイトのバイト番号とする。【０１２６】
ステップ番号が１の場合、対応関係４２０に示すように、積和演算部１００は、指定情報４５１の下位２ビットに読出ライン情報４２１を付加して、読出ラインのライン番号とする。読出ライン情報４２１は、送信元バンク番号４２２の下位２ビットのうちの下位のビットを反転させた値である。さらに、積和演算部１００は、「００」の値を取るバイト番号４２３を読出バイトのバイト番号とする。【０１２７】
そして、ステップ番号が１の場合、積和演算部１００は、送信元バンク番号４２２の最下位のビットを反転させたうえで、各ビットを２ビット右ローテートさせることで生成される格納先バンク番号４２４を格納先バンクのバンク番号とする。さらに、積和演算部１００は、送信元バンク番号４２２の下位２ビットにあたる宛先バイト番号４２５を宛先バイトのバイト番号とする。【０１２８】
ステップ番号が２の場合、対応関係４３０に示すように、積和演算部１００は、指定情報４５１の下位２ビットに読出ライン情報４３１を付加して、読出ラインのライン番号とする。読出ライン情報４３１は、送信元バンク番号４３２の下位２ビットのうちの上位のビットを反転させた値である。さらに、積和演算部１００は、「００」の値を取るバイト番号４３３を読出元バイトのバイト番号とする。【０１２９】
そして、ステップ番号が２の場合、積和演算部１００は、送信元バンク番号４３２の最下位から２番目のビットを反転させたうえで、各ビットを２ビット右ローテートさせることで生成される格納先バンク番号４３４を格納先バンクのバンク番号とする。さらに、積和演算部１００は、送信元バンク番号４３２の下位２ビットにあたる宛先バイト番号４３５を宛先バイトのバイト番号とする。【０１３０】
ステップ番号が３の場合、対応関係４４０に示すように、積和演算部１００は、指定情報４５１の下位２ビットに読出ライン情報４４１を付加して、読出ラインのライン番号とする。読出ライン情報４４１は、送信元バンク番号４３２の下位２ビットの両方のビットを反転させた値である。さらに、積和演算部１００は、「００」の値を取るバイト番号４４３を読出元バイトのバイト番号とする。【０１３１】
そして、ステップ番号が３の場合、積和演算部１００は、送信元バンク番号４４２の下位２ビットを反転させたうえで、各ビットを２ビット右ローテートさせることで生成される格納先バンク番号４４４を格納先バンクのバンク番号とする。さらに、積和演算部１００は、送信元バンク番号４４２の下位２ビットにあたる宛先バイト番号４４５を宛先バイトのバイト番号とする。【０１３２】
図２１で示した送信元と宛先の情報をライン、バンク及びバイトの形で表すと図２２の様に表される。図２２は、実施例１に係る積和演算部によるパッキング時の送信元と宛先の情報の一覧の図である。【０１３３】
図２２において、紙面に向かって左端の数字は、パッキング前の３２個の要素データが格納された領域に連番で振った番号を表す。そして、矢印の左側が、送信元の位置の情報を表す。また、矢印の右側が、宛先の位置の情報を表す。すなわち、「ｌｉｎｅ＃＃ｐ−ｂａｎｋ＃ｑ−ｂｙｔｅ（Ｂｒ）」は、ライン番号＃＃ｐ、バンク番号＃ｑ、バイト番号（Ｂｒ）で表される領域を指す。また、ライン番号＃＃（ｄｓｔ）は、命令で指定された宛先のライン番号である。さらに、紙面に向かって上端から８個ずつの組が、それぞれステップ番号が０〜３の各ステップにおける送信元と宛先にあたる。【０１３４】
図２２に示すように、送信元のバンク番号４６１は、各ステップにおいて重複しない。すなわち、積和演算部１００は、各ステップで同時に８つの要素データを読み出すことができる。そして、図２２に示すように宛先のバンク番号４６２も、各ステップにおいて重複しない。すなわち、積和演算部１００は、各ステップで同時に８つの要素データを格納することができる。すなわち、積和演算部１００は、８つのバンクを効率的に使用してパッキングの処理を行うことができる。【０１３５】
このように、積和演算部１００は、図２１に示した手順で決められた送信元及び宛先の位置を用いることで効率的にパッキングの処理を行うことができる。そして、図２１に示した送信元及び宛先の位置は、図６の読出ライン選択テーブル２０１、図８の宛先バンク選択テーブル２０２、及び、図１３のバイト選択テーブル２０４にしたがって決定した送信元及び宛先の位置に一致する。すなわち、上述した積和演算部１００の処理により、積和演算部１００は、効率的にパッキングの処理を行うことができることが分かる。【０１３６】
ここで、図２３を参照して、パッキング時の送信元及び宛先の決定を一般化について説明する。図２３は、パッキング時の一般化した送信元及び宛先の決定方法を説明するための図である。【０１３７】
図２３における紙面に向かって上側の情報４７１は、送信元の領域の位置を表す情報である。また、情報４７２は、宛先の領域の位置を表す情報である。【０１３８】
まず、図２３におけるＫは、バンクの数を２の冪乗で表した場合の冪数である。例えば、本実施例のように８つのバンクがある場合は、Ｋ＝３である。また、Ｎは、送信元の要素データのサイズに対する各バンクのラインのサイズの倍率の２を底とした対数の値である。すなわち、Ｎは、圧縮後の要素データに対する圧縮前の要素データの倍率の２を底とした対数の値である。例えば、本実施例のように３２ビットの要素データを８ビットに圧縮した場合、圧縮後の要素データに対する圧縮前の要素データの倍率は４倍であるので、Ｎ＝２となる。さらに、Ｍは、送信元の各バンクの１つのラインの中に、含まれる要素データの数の２を底とした対数の値である。本実施例では、送信元の各バンクの１つのラインの中には１つの要素データが含まれるので、Ｍ＝０である。【０１３９】
そして、送信元バンクのバンク番号をＫビットの２進数で表し、最下位からＮビットである領域４７３の各ビットの値をそのまま維持する又は反転させるかして求められる組み合わせが求められる。そして、最下位からＮビットの部分を求めた組み合わせに変更したＫビットの値をＮビット右ローテートさせることで、格納先バンクのバンク番号４７４が求められる。ここで、バンク番号４７４の先頭からＮビットは、領域４７３の各ビットの値をそのまま維持する又は反転させるかして求められた組み合わせである。そして、格納先バンクのバンク番号４７４の最上位からＮビットである領域４７５の値が、読出ラインのライン番号４７６になる。さらに、送信元バンクのバンク番号の最下位からＮビットの領域４７３の値が宛先バイトの最上位からＮビットの領域４７７の値にあたり、さらにその後に読出バイトの最上位からＭビットの領域４７８の値を付加したＮ＋Ｍビットの値４７９が、要素の移動先の宛先ラインのバンク内での要素番号となる。【０１４０】
図２３で示す方法で決定した送信元及び宛先を各ステップにおいて選択するように回路を組むことで、任意の圧縮率及びバンクの数において、積和演算部１００は、効率的にパッキングの処理を行うことができる。【０１４１】
次に、図２４を参照して、４つのステップにおける本実施例に係る積和演算部１００によるアンパッキング時の送信元の要素データの格納位置と宛先の要素データの格納位置との関係について説明する。図２４は、アンパッキング時の送信元の要素データの格納位置と宛先の要素データの格納位置との関係を表す図である。図２４は、上述した処理により積和演算部１００により各ステップにおいて決定される送信元及び宛先を表す。【０１４２】
図２４において、対応関係５１０は、ステップ番号が０の場合の送信元における格納位置を表す情報及び宛先における格納位置を表す情報との関係を表す。また、対応関係５２０は、ステップ番号が１の場合の送信元における格納位置を表す情報及び宛先における格納位置を表す情報との関係を表す。また、対応関係５３０は、ステップ番号が２の場合の送信元における格納位置を表す情報及び宛先における格納位置を表す情報との関係を表す。また、対応関係５４０は、ステップ番号が３の場合の送信元における格納位置を表す情報及び宛先における格納位置を表す情報との関係を表す。そして、指定情報５５１は、演算命令制御部１０１からの命令で指定された送信元の情報である。また、指定情報５５２は、演算命令制御部１０１からの命令で指定された宛先の情報である。【０１４３】
ステップ番号が０の場合、対応関係５１０における送信元バンク番号５１１が、送信元バンクのバンク番号となる。また、指定情報５５２の下位２ビットに付加される宛先ライン情報５１３が、宛先ラインのライン番号となる。宛先ライン情報５１３は、送信元バンク番号５１１の上位２ビットにあたる。さらに、「００」であるバイト番号５１５が、宛先バイトのバイト番号となる。【０１４４】
そして、ステップ番号が０の場合、送信元バンク番号５１１の各ビットを２ビット左ローテートさせることで生成される格納先バンク番号５１４が、格納先バンクのバンク番号となる。さらに、格納先バンク番号５１４の下位２ビットが、読出バイト番号５１２にあたる。【０１４５】
ステップ場合が１の場合、対応関係５２０における送信元バンク番号５２１が、送信元バンクのバンク番号となる。また、指定情報５５２の下位２ビットに付加される宛先ライン情報５２３が、宛先ラインのライン番号となる。宛先ライン情報５２３は、送信元バンク番号５２１の上位２ビットにあたる。さらに、「００」であるバイト番号５２５が、宛先バイトのバイト番号となる。【０１４６】
そして、ステップ番号が１の場合、送信元バンク番号５２１の最下位から２番目のビットを反転させたうえで、各ビットを２ビット左ローテートさせることで生成される格納先バンク番号５２４が、格納先バンクのバンク番号となる。さらに、格納先バンク番号５２４の下位２ビットが、読出バイト番号５２２にあたる。【０１４７】
ステップ場合が２の場合、対応関係５３０における送信元バンク番号５３１が、送信元バンクのバンク番号となる。また、指定情報５５２の下位２ビットに付加される宛先ライン情報５３３が、宛先ラインのライン番号となる。宛先ライン情報５３３は、送信元バンク番号５３１の上位２ビットにあたる。さらに、「００」であるバイト番号５３５が、宛先バイトのバイト番号となる。【０１４８】
そして、ステップ番号が２の場合、送信元バンク番号５３１の最上位のビットを反転させたうえで、各ビットを２ビット左ローテートさせることで生成される格納先バンク番号５３４が、格納先バンクのバンク番号となる。さらに、格納先バンク番号５３４の下位２ビットが、読出バイト番号５３２にあたる。【０１４９】
ステップ場合が３の場合、対応関係５４０における送信元バンク番号５４１が、送信元バンクのバンク番号となる。また、指定情報５５２の下位２ビットに付加される宛先ライン情報５４３が、宛先ラインのライン番号となる。宛先ライン情報５４３は、送信元バンク番号５４１の上位２ビットにあたる。さらに、「００」であるバイト番号５４５が、宛先バイトのバイト番号となる。【０１５０】
そして、ステップ番号が３の場合、送信元バンク番号５４１の最上位から２ビットを両方とも反転させたうえで、各ビットを２ビット左ローテートさせることで生成される格納先バンク番号５４４が、格納先バンクのバンク番号となる。さらに、格納先バンク番号５４４の下位２ビットが、読出バイト番号５４２にあたる。【０１５１】
積和演算部１００は、図２４に示した手順で決められた送信元及び宛先の位置を用いることで効率的にパッキングの処理を行うことができる。そして、図２４に示した送信元及び宛先の位置は、図１０の宛先バンク選択テーブル２０３、図１４のバイト選択テーブル２０５及び図１９の宛先ライン選択テーブル２０６にしたがって決定した送信元及び宛先の位置に一致する。すなわち、上述した積和演算部１００の処理により、積和演算部１００は、効率的にアンパッキングの処理を行うことができる。【０１５２】
ここで、図２５を参照して、アンパッキング時の送信元及び宛先の決定を一般化について説明する。図２５は、一般化したアンパッキング時の送信元及び宛先の決定方法を説明するための図である。【０１５３】
図２５における紙面に向かって上側の情報５６１は、送信元の領域の位置を表す情報である。また、情報５６２は、宛先の領域の位置を表す情報である。【０１５４】
まず、図２５におけるＫ、Ｎ及びＭはそれぞれ、図２３におけるＫ、Ｎ及びＭと同様の方法で決定される。【０１５５】
そして、送信元バンクのバンク番号をＫビットの２進数で表し、最上位からＮビットである領域５６３の各ビットの値をそのまま維持する又は反転させるかして組み合わせが求められる。この組み合わせの取得は、全ての組み合わせが完了するまで繰り返し行われる。そして、最上位からＮビットの部分を求めた組み合わせに変更したＫビットの値をＮビット右ローテートさせることで、送信先バンクのバンク番号５６４が求められる。ここで、バンク番号５６４の最下位からＮビットは、領域５６３の各ビットの値をそのまま維持する又は反転させるかして求められた組み合わせである。そして、送信元バンクのバンク番号の最上位からＮビットである領域５６３の値が、宛先ラインのライン番号５６５になる。さらに、送信先バンクのバンク番号５６４の最下位からＮビットの領域５６６の値が宛先バイトの最上位からＮビットの領域５６７の値にあたり、さらにその後に宛先バイトの最上位からＭビットの領域５６８の値を付加したＮ＋Ｍビットの値５６９が、要素の移動先の読出ラインのバンク内での要素番号となる。【０１５６】
図２５で示す方法で決定した送信元及び宛先を各ステップにおいて選択するように回路を組むことで、任意の圧縮率及びバンクの数において、積和演算部１００は、効率的にアンパッキングの処理を行うことができる。【０１５７】
次に、図２６を参照して、本実施例に係る処理ユニット１０によるパッキング処理の流れを説明する。図２６は、実施例１に係る処理ユニットによるパッキング処理のフローチャートである。【０１５８】
積和演算部１００は、繰り返し単位のパッキング命令を演算命令制御部１０１から取得する（ステップＳ１０１）。このとき、積和演算部１００は、ステップ番号の初期値、すなわち０の入力を演算命令制御部１０１から受ける。【０１５９】
読出ライン変更回路１２１は、自己が対応するベクタレジスタ１１１のバンク番号及びステップ番号から送信先のライン番号を取得する。また、読出ライン変更回路１２１は、パッキング命令から命令で指定された格納先のラインの情報を取得する。そして、読出ライン変更回路１２１は、命令で指定された格納先のラインの情報の最下位に取得した送信先のライン番号を付加する（ステップＳ１０２）。そして、読出ライン変更回路１２１は、送信先のライン番号を付加したラインの情報をベクタレジスタ１１１へ出力する。【０１６０】
ベクタレジスタ１１１は、入力されたラインの情報の最下位に付加されたライン番号に応じた要素レジスタ１１３から読出データを読み出す（ステップＳ１０３）。ベクタレジスタ１１１は、読み出した読出データをルータ１２５へ出力する。【０１６１】
ルータ１２５は、各格納先のバンク番号に応じた送信元のバンク番号を特定する（ステップＳ１０４）。【０１６２】
ルータ１２５は、取得した読出データを、読出元のベクタレジスタ１１１のバンク番号を送信元とする格納先のバンク番号を有するベクタレジスタ１１１に対応する積和演算器１１２に繋がるバイトシャッフル回路１２２へ送信する（ステップＳ１０５）。【０１６３】
バイトシャッフル回路１２２は、格納先の要素レジスタ１１３のバンク番号に応じた各宛先バイトに対応する読出バイトを決定する（ステップＳ１０６）。そして、バイトシャッフル回路１２２は、各宛先バイトに対応する読出バイトの情報とともに、読出データを積和演算器１１２へ出力する。【０１６４】
積和演算器１１２は、受信した読出データに素通しする演算を実行して出力する（ステップＳ１０７）。【０１６５】
宛先バイト書込可否選択回路１２３は、読出データを積和演算器１１２から取得する。次に、宛先バイト書込可否選択回路１２３は、宛先バイトのうち格納先のバンク番号及びステップ番号から宛先バイトを決定し、その宛先バイトの書き込みを有効にする（ステップＳ１０８）。【０１６６】
次に、宛先バイト書込可否選択回路１２３は、読出データをベクタレジスタ１１１へ出力する。ベクタレジスタ１１１は、命令で指定されたラインの書き込みが有効にされたバイトに、対応する読出バイトに格納された要素データを書き込む（ステップＳ１０９）。【０１６７】
演算命令制御部１０１は、繰り返し単位の処理である４回のステップが完了したか否かを判定する（ステップＳ１１０）。【０１６８】
４回のステップが完了していない場合（ステップＳ１１０：否定）、演算命令制御部１０１は、次のステップのステップ番号を積和演算器１１２へ出力する。積和演算器１１２は、次のステップのステップ番号を演算命令制御部１０１から取得する（ステップＳ１１１）。その後、積和演算器１１２は、ステップＳ１０２へ戻る。【０１６９】
これに対して、４回のステップが完了した場合（ステップＳ１１０：肯定）、演算命令制御部１０１は、全ての繰り返し単位のパッキング処理が完了したか否かを判定する（ステップＳ１１２）。繰り返し単位のパッキング処理が残っている場合（ステップＳ１１２：否定）、積和演算器１１２は、ステップＳ１０１へ戻る。【０１７０】
これに対して、全ての繰り返し単位のアンパッキング処理が完了した場合（ステップＳ１１２：肯定）、パッキング処理を終了する。【０１７１】
次に、図２７を参照して、本実施例に係る処理ユニット１０によるアンパッキング処理の流れを説明する。図２７は、実施例１に係る処理ユニットによるアンパッキング処理のフローチャートである。【０１７２】
積和演算部１００は、繰り返し単位のアンパッキング命令を演算命令制御部１０１から取得する（ステップＳ２０１）。このとき、積和演算部１００は、ステップ番号の初期値、すなわち０の入力を演算命令制御部１０１から受ける。【０１７３】
読出ライン変更回路１２１は、アンパッキング命令から命令で指定された送信元のラインの情報を取得する。そして、読出ライン変更回路１２１は、命令で指定された送信先のラインの情報をベクタレジスタ１１１へ出力する。【０１７４】
ベクタレジスタ１１１は、入力されたラインの情報に応じたライン番号を有する要素レジスタ１１３から読出データを読み出す（ステップＳ２０２）。ベクタレジスタ１１１は、読み出した読出データをルータ１２５へ出力する。【０１７５】
ルータ１２５は、各格納先のバンク番号に応じた送信元のバンク番号を特定する（ステップＳ２０３）。【０１７６】
ルータ１２５は、取得した読出データを、読出元のベクタレジスタ１１１のバンク番号を送信元とする格納先のバンク番号を有するベクタレジスタ１１１に対応する積和演算器１１２に繋がるバイトシャッフル回路１２２へ送信する（ステップＳ２０４）。【０１７７】
バイトシャッフル回路１２２は、格納先の要素レジスタ１１３のバンク番号に応じた各宛先バイトに対応する読出バイトを決定する（ステップＳ２０５）。そして、バイトシャッフル回路１２２は、各宛先バイトに対応する読出バイトの情報とともに、読出データを積和演算器１１２へ出力する。【０１７８】
積和演算器１１２は、受信した読出データに素通しする演算を実行して出力する（ステップＳ２０６）。【０１７９】
宛先バイト書込可否選択回路１２３は、読出データを積和演算器１１２から取得する。次に、宛先バイト書込可否選択回路１２３は、宛先バイトのうち最下位のバイトの書き込みを有効にする（ステップＳ２０７）。【０１８０】
宛先ライン選択回路１２４は、格納先のバンクに応じた宛先ラインを決定する（ステップＳ２０８）。【０１８１】
次に、宛先バイト書込可否選択回路１２３は、読出データをベクタレジスタ１１１へ出力する。ベクタレジスタ１１１は、宛先ライン選択回路１２４により決定されたラインの書き込みが有効にされたバイトに、対応する読出バイトに格納された要素データを書き込む（ステップＳ２０９）。【０１８２】
演算命令制御部１０１は、繰り返し単位の処理である４回のステップが完了したか否かを判定する（ステップＳ２１０）。【０１８３】
４回のステップが完了していない場合（ステップＳ２１０：否定）、演算命令制御部１０１は、次のステップのステップ番号を積和演算器１１２へ出力する。積和演算器１１２は、次のステップのステップ番号を演算命令制御部１０１から取得する（ステップＳ２１１）。その後、積和演算器１１２は、ステップＳ２０２へ戻る。【０１８４】
これに対して、４回のステップが完了した場合（ステップＳ２１０：肯定）、演算命令制御部１０１は、全ての繰り返し単位のアンパッキング処理が完了したか否かを判定する（ステップＳ２１２）。繰り返し単位のアンパッキング処理が残っている場合（ステップＳ２１２：否定）、積和演算器１１２は、ステップＳ２０１へ戻る。【０１８５】
これに対して、全ての繰り返し単位のパッキング処理が完了した場合（ステップＳ２１２：肯定）、アンパッキング処理を終了する。【０１８６】
図２８は、処理ユニットに本実施例に係るパッキング処理及びアンパッキング処理を実行させる命令の一例を示す図である。図２８に示す命令は、どのようなパッキング処理及びアンパッキング処理を行うかと、その内のどのステップの処理を行うかと、読出元ラインのライン番号と、宛先ラインのライン番号とを指定する。積和演算部１００における各処理回路は、図２８に示される命令によって指定された情報を取得して処理を実行する。【０１８７】
以上に説明したように、本実施例に係る処理ユニットは、パッキング処理であれば送信元バンクのバンク番号及び繰り返し単位の処理に含まれるステップのステップ番号から格納先バンクのバンク番号を決定し、且つ、宛先バイトを決定する。そして、決定したバンク番号を有するベクタレジスタに含まれる所定のライン番号の要素レジスタの決定した宛先バイトに各バンクに格納された要素データを移動することでパッキングを完了する。【０１８８】
また、本実施例に係る処理ユニットは、アンパッキング処理であれば送信元バンクのバンク番号及び繰り返し単位の処理に含まれるステップのステップ番号から格納先バンクのバンク番号及び宛先ラインのライン番号を決定する。そして、決定したバンク番号を有するベクタレジスタに含まれる決定した宛先ラインのライン番号を有する要素レジスタの決定した宛先バイトに各バンクに格納された要素データを移動することでアンパッキングを完了する。【０１８９】
このように、本実施例に係る処理ユニットは、既存の積和演算の回路を用いて効率的なパッキング及びアンパッキングの処理を実行することができる。
【実施例２】
【０１９０】
次に、実施例２について説明する。本実施例においても図１に示す情報処理装置５０及び図２に示す積和演算部１００が用いられる。以下の説明では、実施例１と同様の各部の動作は説明を省略する場合がある。【０１９１】
本実施例に係る処理ユニット１０は、図２９に示すようにパッキング時には３２ビットのデータを１６ビットに圧縮し、３２ビットの宛先ラインに２つずつ１６ビットのデータを詰め合わせる。図２９は、実施例２に係るパッキング処理の概要を表す図である。本実施例では、図２９に示すように繰り返し単位として、２回のステップが実行される。【０１９２】
パッキング処理の場合、読出ライン変更回路１２１は、入力されたステップ番号の情報と自己が接続されたベクタレジスタ１１１のバンク番号を基に、図３０に示す読出ライン選択テーブル６０１に応じた読出ラインのライン番号を取得する。【０１９３】
図３０は、実施例２に係るパッキング処理用の読出ライン選択テーブルの一例の図である。読出ライン選択テーブル６０１は、本実施例において２回繰り返して行われるパッキング処理毎の各送信元バンクに応じた読み出し元とする読出ラインの情報を表す。【０１９４】
例えば、０回目の繰り返しの場合、読出ライン変更回路１２１は、自己が接続するベクタレジスタ１１１のライン番号及びステップ番号である０を用いて、読み出し元となる読出ラインの情報を求める。この読み出しラインの情報が読出ライン選択テーブル６０１におけるバンク番号＃０のステップ番号が０の場合の読出ラインの情報に一致する。そして、読出ライン変更回路１２１は、求めたライン番号を読み出しアドレスとしてベクタレジスタ１１１に入力する。【０１９５】
図３１を参照して、より具体的に読み出し元の情報の生成を説明する。図３１は、実施例２に係る読出ライン変更回路の回路構成の概要を表す図である。バンク番号６１２は、読出ライン変更回路１２１が接続するベクタレジスタ１１１のバンク番号を２進数で表した３ビットの情報である。また、ステップ番号６１１は、２つのステップ番号を２進数で表した１ビットの情報である。【０１９６】
読出ライン変更回路１２１は、「ａ，ｂ，ｃ」で表される自己に対応するベクタレジスタ１１１のバンク番号６１２を取得する。次に、読出ライン変更回路１２１は、「ｖ」で表されるステップ番号６１１の入力を演算命令制御部１０１から受ける。例えば、ステップ番号が１の場合、読出ライン変更回路１２１は、「１」の入力を受ける。【０１９７】
次に、読出ライン変更回路１２１は、排他的論理和回路６１３を用いて、バンク番号６１２の最下位のビットと、ステップ番号６１１との排他的論理和を求める。これにより、読出ライン変更回路１２１は、読出ライン番号６１４を取得する。ここで、読出ライン番号６１４における大文字のアルファベットはビットの値を反転させた値を指す。【０１９８】
その後、読出ライン変更回路１２１は、命令で指定された読み出し元とするラインのライン情報６１５の最下位のビットに読出ライン番号６１４を付加して、読出ライン情報６１６を生成する。その後、読出ライン変更回路１２１は、生成した読出ライン情報６１６をベクタレジスタ１１１へ出力する。これにより、読出ライン変更回路１２１は、図３０で示した読出ライン選択テーブル６０１におけるバンク番号及びステップ番号に対応するライン番号の出力を行うことができる。この場合、読出ライン変更回路１２１は、読出ライン情報６１６に含まれる最下位ビットで表されるライン番号にあたる要素レジスタ１１３から出力される読出データをベクタレジスタ１１１に出力させることができる。【０１９９】
また、アンパッキングの処理の場合、読出ライン変更回路１２１は、入力されたリードアドレスを含む送信元の情報をそのまま、ベクタレジスタ１１１へ出力する。これにより、読出ライン変更回路１２１は、リードアドレスで表されるライン番号の要素レジスタ１１３から出力される読出データをベクタレジスタ１１１に出力させることができる。【０２００】
ルータ１２５は、読出データの入力を各ベクタレジスタ１１１から受ける。また、ルータ１２５は、ステップ番号の入力を演算命令制御部１０１から受ける。【０２０１】
パッキング処理の場合、ルータ１２５は、格納先のベクタレジスタ１１１のバンク番号及びステップ番号を基に、図３２に示す宛先バンク選択テーブル６０２に応じた送信元のバンク番号を取得する。【０２０２】
図３２は、実施例２に係るパッキング処理用の宛先バンク選択テーブルの一例の図である。宛先バンク選択テーブル６０２は、本実施例において２回繰り返して行われるパッキング処理毎の各格納先のバンクに応じた送信元となる送信元バンクの情報を表す。例えば、格納先バンクがバンク番号＃０であれば、ステップ番号が０、１である場合のそれぞれで、ルータ１２５は、バンク番号＃０、＃１のバンクを送信元バンクとして選択する。【０２０３】
図３３を参照して、より具体的に格納先バンクの決定を説明する。図３３は、実施例２に係るルータが有するパッキング時の格納先バンクを決定する回路構成の概要を表す図である。バンク番号６２１は、格納先バンクのバンク番号を２進数で表した３ビットの情報である。また、ステップ番号６２２は、２つのステップ番号を２進数で表した１ビットの情報である。【０２０４】
ルータ１２５は、格納先とする「ａ，ｂ，ｃ」で表されるバンク番号を選択する。次に、ルータ１２５は、選択した格納先バンクのバンク番号のビットを１ビット左ローテートする。すなわち、ルータ１２５は、バンク番号６２１の最下位及び最下位から２番目のビットの値を１ビットずつの上位のビットに移動し、最上位のビットの値を最下位のビットに移動する。これにより、ルータ１２５は、巡回後番号６２３を取得する。例えば、格納先のベクタレジスタ１１１のバンク番号６２１が「０，１，１」である場合、ルータ１２５は、巡回後番号６２３として「１，１，０」を取得する。【０２０５】
次に、ルータ１２５は、「ｖ」で表されるステップ番号６２２の入力を演算命令制御部１０１から受ける。次に、ルータ１２５は、排他的論理和回路６２４を用いて巡回後番号６２３の最下位のビットとステップ番号との排他的論理和を求める。そして、ルータ１２５は、巡回後番号６２３の最上位ビット及び最下位から２番目のビット、並びに、排他的論理和回路６２４からの出力を並べて送信元バンクのバンク番号６２５を取得する。ここで、バンク番号６２５における大文字のアルファベットは元の値を反転させた値である。【０２０６】
ルータ１２５は、選択した格納先のバンク番号のベクタレジスタ１１１に対応する積和演算器１１２に接続するバイトシャッフル回路１２２に対して、決定した送信元バンクのバンク番号を有するベクタレジスタ１１１から入力された値を出力する。【０２０７】
また、アンパッキング処理の場合、図３４に示す回路により格納先バンクを決定する。図３４は、実施例２に係るルータが有するアンパッキング時の格納先バンクを決定する回路構成の概要を表す図である。バンク番号６２６は、格納先バンクのバンク番号を２進数で表した３ビットの情報である。また、ステップ番号６２７は、２つのステップ番号を２進数で表した１ビットの情報である。【０２０８】
ルータ１２５は、格納先とする「ａ，ｂ，ｃ」で表されるバンク番号を選択する。次に、ルータ１２５は、選択した格納先のバンク番号のビットを１ビット右ローテートする。すなわち、ルータ１２５は、バンク番号６２６の最上位のビット及び最下位から２番目のビットの値をそれぞれ１つ下位のビットに移動し、最下位のビットの値を最上位のビットにする。これにより、ルータ１２５は、巡回後番号６２８を取得する。例えば、格納先のベクタレジスタ１１１のバンク番号６２６が「１，０，１」である場合、ルータ１２５は、巡回後番号６２８として「１，１，０」を取得する。【０２０９】
次に、ルータ１２５は、「ｖ」で表されるステップ番号６２７の入力を演算命令制御部１０１から受ける。次に、ルータ１２５は、排他的論理和回路６２９を用いて巡回後番号６２８の最上位のビットと、ステップ番号６２７との排他的論理和を求める。そして、ルータ１２５は、排他的論理和回路６２９からの出力、並びに、巡回後番号６２８の最上位ビット及び最下位から２番目のビットの値を並べて送信元バンクのバンク番号６３０を取得する。ここで、バンク番号６３０における大文字のアルファベットは元の値を反転させた値である。【０２１０】
ルータ１２５は、選択した格納先のバンク番号のベクタレジスタ１１１に対応する積和演算器１１２に接続するバイトシャッフル回路１２２に対して、決定した送信元のバンク番号のベクタレジスタ１１１から入力された読出データを出力する。【０２１１】
バイトシャッフル回路１２２、積和演算器１１２及び宛先バイト書込可否選択回路１２３は、パッキングの処理の場合、格納先のベクタレジスタ１１１のバンク番号及びステップ番号を基に、図３５に示すバイト選択テーブル６０３に応じた宛先バイト番号及び読出元バイト番号を取得する。【０２１２】
図３５は、実施例２に係るパッキング処理用のバイト選択テーブルの一例の図である。バイト選択テーブル６０３は、本実施例において２回繰り返して行われるパッキングの処理毎の各格納先バンクに応じた書き込み先となる宛先バイト及び読み出し元となる読出バイトの情報を表す。本実施例に係るパッキングの処理では、宛先バイトがバイトＢ０又はＢ２の要素データは、読出ラインにおけるバイトＢ０の位置に格納される。また、宛先バイトがバイトＢ１又はＢ３の要素データは、読出ラインにおけるバイトＢ１の位置に格納される。【０２１３】
アンパッキング処理の場合、パッキング処理を逆向きにすることで、宛先バイトのバイト番号及び読出バイトのバイト番号が決定できる。以下に、バイトシャッフル回路１２２及び宛先バイト書込可否選択回路１２３の詳細について説明する。【０２１４】
図３６を参照して、パッキング時のバイトシャッフル回路１２２による要素データが格納されるバイトの位置を決定について説明する。図３６は、実施例２に係るバイトシャッフル回路によるパッキング時の宛先バイトの決定処理を説明するための図である。【０２１５】
バイトシャッフル回路１２２は、宛先バイトがバイト番号Ｂ０又はＢ２の場合、読出バイトをバイト番号００とする。また、バイトシャッフル回路１２２は、宛先バイトがバイト番号Ｂ１又はＢ３の場合、読出バイトをバイト番号０１とする。【０２１６】
次に、図３７を参照して、アンパッキング時のバイトシャッフル回路１２２による要素データが格納される宛先バイトの位置を決定について説明する。図３７は、実施例２に係るバイトシャッフル回路によるアンパッキング時の宛先バイトの決定処理を説明するための図である。バンク番号６３２は、格納先バンクのバンク番号を２進数で表した３ビットの情報である。【０２１７】
バイトシャッフル回路１２２は、自己に対応するベクタレジスタ１１１のバンク番号を予め有する。この自己に対応するベクタレジスタ１１１のバンク番号が、格納先バンクのバンク番号である。また、本実施例のアンパッキングの処理では、要素データは、ラインにおける最下位のバイトＢ０及び１つ上位のバイトＢ１に書き込まれる。そこで、バイトシャッフル回路１２２は、対応６３３に示すように、バイトＢ０及びＢ１が宛先バイトの場合の読出バイトをバイト番号ｃ０及びｃ１とする。【０２１８】
そして、バイトシャッフル回路１２２は、格納先のベクタレジスタ１１１のバンク番号６３２の最下位ビットを取得して、対応６３３に示すように、宛先バイトであるバイト番号Ｂ０及びＢ１のバイトに対応する読出バイトのバイト番号を取得する。【０２１９】
バイトシャッフル回路１２２は、読出データとともに読出データにおける各読出バイトに対応する宛先バイトの情報を積和演算器１１２へ出力する。【０２２０】
図３８は、実施例２に係る宛先バイト書込可否選択回路が有するパッキング時の宛先バイトを選択する回路構成の概要を表す図である。バンク番号６４２は、格納先バンクのバンク番号を２進数で表した３ビットの情報である。また、ステップ番号６４１は、２つのステップ番号を２進数で表した１ビットの情報である。【０２２１】
宛先バイト書込可否選択回路１２３は、格納先とする「ａ，ｂ，ｃ」で表されるバンク番号６４２を取得する。次に、宛先バイト書込可否選択回路１２３は、「ｖ」で表されるステップ番号６４１の入力を演算命令制御部１０１から受ける。【０２２２】
次に、宛先バイト書込可否選択回路１２３は、排他的論理和回路６４３を用いてバンク番号６４２の最上位のビットとステップ番号６４１との排他的論理和を求める。そして、宛先バイト書込可否選択回路１２３は、排他的論理和回路６４３からの出力を判定回路６４４及び６４５へ入力する。【０２２３】
判定回路６４４及び６４５は、四角の枠の中に記載された「＝＝ｎ」に応じて、入力された値がｎを表す２進数の場合には１を出力し、それ以外の場合には０を出力する回路である。そして、判定回路６４５から１が出力された場合、バイト番号Ｂ０及びＢ１への書き込みを有効にする。判定回路６４４から１が出力された場合、バイト番号Ｂ２及びＢ３への書き込みを有効にする。そして、有効にされたバンクにデータが書き込まれ、他のバンクにはデータが書き込まれない。【０２２４】
次に、図３９を参照して、アンパッキング時の宛先バイト書込可否選択回路１２３の処理について説明する。図３９は、実施例２に係る宛先バイト書込可否選択回路によるアンパッキング時の宛先バイトの書込可否選択処理を説明するための図である。【０２２５】
宛先バイト書込可否選択回路１２３は、格納先のベクタレジスタ１１１のバンク番号に関わらず、図３９のテーブル６４６で示すようにバイトＢ２及びＢ３への書き込みを無効とする。また、宛先バイト書込可否選択回路１２３は、テーブル６４６で示すようにバイトＢ０及びＢ１への書き込みを有効とする。これは、本実施例では、アンパッキング時には、いずれのバンクのどのラインであっても３２ビットの領域のバイトＢ０及びＢ１に要素データが格納されることを理由とする。【０２２６】
図４０は、実施例２に係るアンパッキング処理用の宛先ライン選択テーブルの一例の図である。宛先ライン選択テーブル６０５は、本実施例において２回繰り返して行われるアンパッキングの処理毎の各宛先バンクに応じた要素データの格納先となる宛先ラインの情報を表す。例えば、宛先バンクがバンク番号＃０である場合、宛先ライン選択回路１２４は、ステップ番号が０及び１である場合のそれぞれで、ライン番号＃＃０、＃＃１のラインを宛先ラインとして選択する。【０２２７】
次に、より具体的に宛先ライン選択回路１２４による宛先ラインの決定処理について説明する。図４１は、実施例２に係る宛先ライン選択回路が有するアンパッキング時の宛先ラインを決定する回路構成の概要を表す図である。バンク番号６５２は、格納先バンクのバンク番号を２進数で表した３ビットの情報である。また、ステップ番号６５１は、２つのステップ番号を２進数で表した１ビットの情報である。【０２２８】
宛先ライン選択回路１２４は、「ａ，ｂ，ｃ」で表される自己が接続するベクタレジスタ１１１のバンク番号６５２を取得する。次に、宛先ライン選択回路１２４は、「ｖ」で表されるステップ番号６５１の入力を演算命令制御部１０１から受ける。【０２２９】
次に、宛先ライン選択回路１２４は、排他的論理和回路６５３を用いて、バンク番号６５２の最下位のビットとステップ番号６５１との排他的論理和を求める。これにより、宛先ライン選択回路１２４は、宛先ライン番号６５４を取得する。ここで、宛先ライン番号６５４における大文字のアルファベットはビットの値を反転させた値を指す。【０２３０】
その後、宛先ライン選択回路１２４は、命令で指定された宛先とするラインのライン情報６５５の最下位ビットに宛先ライン番号６５４を付加して、宛先ライン情報６５６を生成する。その後、宛先ライン選択回路１２４は、生成した宛先ライン情報６５６をベクタレジスタ１１１へ出力する。これにより、宛先ライン選択回路１２４は、図４０で示した宛先ライン選択テーブル６０５におけるバンク番号及びステップ番号に対応する情報の出力を行うことができる。この場合、宛先ライン選択回路１２４は、宛先ライン情報６５６に含まれる最下位ビットで表されるライン番号の要素レジスタ１１３への要素データの書き込みをベクタレジスタ１１１に行わせることができる。【０２３１】
次に、図４２を参照して、２つのステップにおける本実施例に係る積和演算部１００によるパッキング時の送信元の要素データの格納位置と宛先の要素データの格納位置との関係について説明する。図４２は、実施例２に係るパッキング時の送信元の要素データの格納位置と宛先の要素データの格納位置との関係を表す図である。図４２は、上述した処理により積和演算部１００により各ステップにおいて決定される送信元及び宛先を表す。【０２３２】
図４２において、対応関係６６０は、ステップ番号が０の場合の送信元における格納位置を表す情報及び宛先における格納位置を表す情報との関係を表す。また、対応関係６７０は、ステップ番号が１の場合の送信元における格納位置を表す情報及び宛先における格納位置を表す情報との関係を表す。そして、指定情報６８１は、演算命令制御部１０１からの命令で指定された送信元の情報である。また、指定情報６８２は、演算命令制御部１０１からの命令で指定された宛先の情報である。【０２３３】
ステップ番号が０の場合、対応関係６６０に示すように、積和演算部１００は、指定情報６８１の最下位ビットに、読出ライン情報６６１を付加して、読出ラインのライン番号とする。読出ライン情報６６１は、２進数を用いた３ビットで送信元バンクのバンク番号を表した送信元バンク番号６６２の最下位ビットにあたる。送信元バンク番号６６２は、送信元バンクのバンク番号となる。さらに、積和演算部１００は、「０」の値を取るバイト番号６６３を読出バイトのバイト番号とする。【０２３４】
そして、ステップ番号が０の場合、積和演算部１００は、送信元バンク番号６６２の各ビットを１ビット右ローテートさせることで生成される格納先バンク番号６６４を送信先のバンク番号とする。さらに、積和演算部１００は、送信元バンク番号６６２の最下位ビットにあたる宛先バイト番号６６５を宛先バイトのバイト番号とする。【０２３５】
ステップ番号が１の場合、対応関係６７０に示すように、積和演算部１００は、指定情報６８１の最下位ビットに読出ライン情報６７１を付加して、読出ラインのライン番号とする。読出ライン情報６７１は、送信元バンク番号６７２の最下位ビットを反転させた値である。さらに、積和演算部１００は、「０」の値を取るバイト番号６７３を読出バイトのバイト番号とする。【０２３６】
そして、ステップ番号が１の場合、積和演算部１００は、送信元バンク番号６７２の最下位のビットを反転させたうえで、各ビットを１ビット右ローテートさせることで生成される格納先バンク番号６７４を格納先バンクのバンク番号とする。さらに、積和演算部１００は、送信元バンク番号６７２の最下位ビットにあたる宛先バイト番号６７５を宛先バイトのバイト番号とする。【０２３７】
図４２で示した送信元と宛先の情報をライン、バンク及びバイトの形で表すと図４３の様に表される。図４３は、実施例２に係る積和演算部によるパッキング時の送信元と宛先の情報の一覧の図である。【０２３８】
図４３において、紙面に向かって左端の数字は、パッキング前の１６個の要素データが格納された領域に連番で振った番号を表す。そして、矢印の左側が、送信元の位置の情報を表す。また、矢印の右側が、宛先の位置の情報を表す。紙面に向かって上端から８個ずつの組が、それぞれステップ番号が０及び１の各ステップにおける送信元と宛先にあたる。【０２３９】
図４３に示すように、送信元のバンク番号６９１は、各ステップにおいて重複しない。すなわち、積和演算部１００は、各ステップで同時に８つの要素データを読み出すことができる。そして、図４３に示すように宛先のバンク番号６９２も、各ステップにおいて重複しない。すなわち、積和演算部１００は、各ステップで同時に８つの要素データを格納することができる。すなわち、積和演算部１００は、８つのバンクを効率的に使用してパッキングの処理を行うことができる。【０２４０】
このように、積和演算部１００は、図４２に示した手順で決められた送信元及び宛先の位置を用いることで効率的にパッキングの処理を行うことができる。そして、図４２に示した送信元及び宛先の位置は、図３０の読出ライン選択テーブル６０１、図３２の宛先バンク選択テーブル６０２、及び、図３５のバイト選択テーブル６０３にしたがって決定した送信元及び宛先の位置に一致する。すなわち、上述した積和演算部１００の処理により、積和演算部１００は、効率的にパッキングの処理を行うことができることが分かる。また、アンパッキング処理についても同様であり、積和演算部１００は、効率的にアンパッキングの処理を行うことができることが分かる。【０２４１】
以上に説明したように、本実施例に係る処理ユニットは、３２ビットのデータを１６ビットのデータに変換して２つずつ詰め合せるパッキング処理やその逆のアンパッキング処理について、既存の積和演算の回路を用いて効率的に処理を行うことができる。
【符号の説明】
【０２４２】
１  ＰＣＩカード
２  ホストコンピュータ
１０  処理ユニット
１１  全体命令制御部
１２  メモリコントローラ
１３  メモリ
１４  ＰＣＩ制御部
５０  情報処理装置
１００  積和演算部
１０１  演算命令制御部
１０２  演算命令バッファ
１０３  マルチプレクサ
１１１，１１１Ａ〜１１１Ｃ  ベクタレジスタ
１１２，１１２Ａ〜１１２Ｃ  積和演算器
１２１，１２１Ａ〜１２１Ｃ  読出ライン変更回路
１２２，１２２Ａ〜１２２Ｃ  バイトシャッフル回路
１２３，１２３Ａ〜１２３Ｃ  宛先バイト書込可否選択回路
１２４，１２４Ａ〜１２４Ｃ  宛先ライン選択回路
１２５  ルータ
【図１】
2020084694.tif 000003
【図２】
2020084694.tif 000004
【図３】
2020084694.tif 000005
【図４】
2020084694.tif 000006
【図５】
2020084694.tif 000007
【図６】
2020084694.tif 000008
【図７】
2020084694.tif 000009
【図８】
2020084694.tif 000010
【図９】
2020084694.tif 000011
【図１０】
2020084694.tif 000012
【図１１】
2020084694.tif 000013
【図１２】
2020084694.tif 000014
【図１３】
2020084694.tif 000015
【図１４】
2020084694.tif 000016
【図１５】
2020084694.tif 000017
【図１６】
2020084694.tif 000018
【図１７】
2020084694.tif 000019
【図１８】
2020084694.tif 000020
【図１９】
2020084694.tif 000021
【図２０】
2020084694.tif 000022
【図２１】
2020084694.tif 000023
【図２２】
2020084694.tif 000024
【図２３】
2020084694.tif 000025
【図２４】
2020084694.tif 000026
【図２５】
2020084694.tif 000027
【図２６】
2020084694.tif 000028
【図２７】
2020084694.tif 000029
【図２８】
2020084694.tif 000030
【図２９】
2020084694.tif 000031
【図３０】
2020084694.tif 000032
【図３１】
2020084694.tif 000033
【図３２】
2020084694.tif 000034
【図３３】
2020084694.tif 000035
【図３４】
2020084694.tif 000036
【図３５】
2020084694.tif 000037
【図３６】
2020084694.tif 000038
【図３７】
2020084694.tif 000039
【図３８】
2020084694.tif 000040
【図３９】
2020084694.tif 000041
【図４０】
2020084694.tif 000042
【図４１】
2020084694.tif 000043
【図４２】
2020084694.tif 000044
【図４３】
2020084694.tif 000045
【国際調査報告】
2020084694.tif 000046
2020084694.tif 000047