(57)【特許請求の範囲】
【請求項１】
複数のプロセシングエレメントを備えたプロセッサ装置において、
上記各プロセシングエレメントは、
複数のデータを保持する演算レジスタと、
所定の演算マスク値に従って命令の実行又は非実行を制御する制御手段とを備え、
上記各プロセシングエレメントはさらに、
処理を行うプロセシングエレメント自身以外のプロセシングエレメントのレジスタ値を参照する手段と、演算結果を処理を行うプロセシングエレメント自身以外のプロセシングエレメントのレジスタに転送して格納する手段とのうちの少なくとも１つの手段とを備え、
上記プロセッサ装置はテンポラリレジスタ及び演算マスクを備え、
上記制御手段は、上記各プロセシングエレメント方向に行ベクトルデータが配列され、かつ上記各プロセシングエレメント内レジスタ方向に列ベクトルデータがそれぞれ配列された２Ｎ行２Ｎ列の行列データ（Ｎは３以上の自然数である）の数学的転置を行うときに、
（１）２行２列の部分行列毎に、非対角要素間でデータ交換をするステップと、
（２）２Ｍ行２Ｍ列の部分行列毎に、２Ｍ−１行２Ｍ−１列からなる非対角データ要素群である要素群間でデータ交換をすることをＭ＝２，…，Ｎ−１で順次行うステップと、
（３）２Ｎ行２Ｎ列の行列全体において、２Ｎ−１行２Ｎ−１列からなる非対角データ要素群である要素群間でデータ交換をするステップと
を実行することで、上記行列データの各要素のデータのプロセシングエレメント間の移動を２のべき乗の距離に分割して行うように上記転置を行い、
上記制御手段は、上記転置の演算を行うときに、参照する現データを上記テンポラリレジスタに複写し、上記演算マスクを用いて、格納位置のプロセシングエレメントから所定の距離のＰＥシフトをともなうアキュムレータロード命令で参照位置のレジスタを読出すように、複数のプロセシングエレメントを同時に動作させることにより上記転置を行うことを特徴とするプロセッサ装置。
【請求項２】
複数のプロセシングエレメントを備えたプロセッサ装置の演算方法において、
上記各プロセシングエレメントは、
複数のデータを保持する演算レジスタと、
所定の演算マスク値に従って命令の実行又は非実行を制御する制御手段とを備え、
上記各プロセシングエレメントはさらに、
処理を行うプロセシングエレメント自身以外のプロセシングエレメントのレジスタ値を参照する手段と、演算結果を処理を行うプロセシングエレメント自身以外のプロセシングエレメントのレジスタに転送して格納する手段とのうちの少なくとも１つの手段とを備え、
上記プロセッサ装置はテンポラリレジスタ及び演算マスクを備え、
上記演算方法は、
上記制御手段が、上記各プロセシングエレメント方向に行ベクトルデータが配列され、かつ上記各プロセシングエレメント内レジスタ方向に列ベクトルデータがそれぞれ配列された２Ｎ行２Ｎ列の行列データ（Ｎは３以上の自然数である）の数学的転置を行うときに、
（１）２行２列の部分行列毎に、非対角要素間でデータ交換をするステップと、
（２）２Ｍ行２Ｍ列の部分行列毎に、２Ｍ−１行２Ｍ−１列からなる非対角データ要素群である要素群間でデータ交換をすることをＭ＝２，…，Ｎ−１で順次行うステップと、
（３）２Ｎ行２Ｎ列の行列全体において、２Ｎ−１行２Ｎ−１列からなる非対角データ要素群である要素群間でデータ交換をするステップと
を実行することで、上記行列データの各要素のデータのプロセシングエレメント間の移動を２のべき乗の距離に分割して行うように上記転置を行う制御ステップを含み、
上記制御ステップは、上記制御手段が、上記転置の演算を行うときに、参照する現データを上記テンポラリレジスタに複写し、上記演算マスクを用いて、格納位置のプロセシングエレメントから所定の距離のＰＥシフトをともなうアキュムレータロード命令で参照位置のレジスタを読出すように、複数のプロセシングエレメントを同時に動作させることにより上記転置を行うことを特徴とするプロセッサ装置の演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセシングエレメント（Processing Elements：以下、ＰＥという。）を備え、画像データ等を高速処理するために同一の命令で複数データに対して同じ処理を行うＳＩＭＤ（Single Instruction-stream Multiple Data-stream）型マイクロプロセッサなどのプロセッサ装置及びその演算方法に関し、特に、複数の行列（マトリクス）データの転置処理を効率よく並列処理するプロセッサ装置及びその演算方法に関する。
【背景技術】
【０００２】
近年、デジタル複写機やファクシミリ装置等の画像処理においては、画素数の増加、画像処理の多様化などにより画質の向上が図られている。このような画像処理では、複数（多数）のデータに対して同時に同じ処理を施すことが多い。その際、高速性を高めるため、１命令で１つのデータを処理するＳＩＳＤ（Single Instruction-stream Single Data-stream）型マイクロプロセッサよりも、１命令で複数のデータを同時処理する、ＳＩＭＤ型マイクロプロセッサが用いられることが多くなっている。
【０００３】
図１は従来技術に係る一般的なＳＩＭＤ型マイクロプロセッサ２の基本構成を示すブロック図である。当該ＳＩＭＤ型マイクロプロセッサ２は、概略、グローバルプロセッサ（以下、ＧＰという。）４、及びＰＥ３により構成されるのであるが、複数のデータを一度に処理するためにＰＥ３を複数個装備している。各ＰＥ３は、レジスタファイル６と演算アレイ８を備える。ＧＰ４は、プロセッサ２全体の制御を行い、ＰＥ３は、外部入出力装置（図示せず。）からデータを入力しデータ処理を行い、外部入出力装置に出力する。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上記のＳＩＭＤ型マイクロプロセッサ２は、通常、１クロックサイクルで１命令を処理するが、１命令でＰＥ３の個数分のデータを一度に処理することができる。ＳＩＭＤ型マイクロプロセッサ２の性能を表す際には、ＳＩＭＤ型マイクロプロセッサ２の動作周波数や、ＰＥ３の個数、すなわち１命令で処理できるデータの数などが重要視されるが、さらに、命令サイクル数も重要な要素とされる。つまり、同じ画像処理を行う限り１命令サイクルでも少ないほうが性能がよいとされるのである。しかし、１命令で複雑な処理を行うために、複雑な回路を設計して利用するならば、どうしてもコストが増大するという問題点があった。
【０００５】
ところで、近年、マルチメディア社会の進展からの懇請によって、大規模な二次元画像データ等のデジタル処理を高速に行う要請は日々増大しており、この要求を満たすための演算処理プロセッサのハードウェア、ソフトウェアの技術開発がたゆまなくなされている。その中で単一のプロセシングユニットもしくはプロセシングエレメントを備えるプロセッサの高速化を目指す技術開発は、その都度、ハードウェアの集積（複雑さと物量の増大）の限界と電気特性的な限界（例えば電気素子の動作遅延）に直面し、別の技術開発のアプローチとして、複数の演算ユニットで複数の信号データを同時並列に処理する、いわゆる「並列処理アプローチ」がある。
【０００６】
並列処理を行うプロセシングハードウェアは、複数データを同時に扱う際の分類としてＳＩＭＤ（単一命令複数データ）アプローチとＭＩＭＤ（複数命令複数データ）アプローチがある。ＳＩＭＤアプローチのプロセッサにおけるデジタル処理では、命令処理の制御や、ソフトウェアの構成が比較的容易であることから、これらのハードウェア、ソフトウェア分野の技術開発が盛んに行われている。
【０００７】
ＳＩＭＤアプローチのプロセッサは、さらにそのハードウェア構成によって、多倍精度のプロセシングユニットをビットスライス分割して、単一命令で、複数データを同時に一括処理する装置と方法、（以下、スライス型という。）一方、比較的規則的かつハードウェア規模の小さなプロセシングエレメント（ＰＥ）を多数並列に配列してプロセシングユニットを構成し、単一命令でそれらを同時に演算処理させるような装置と方法（以下、並列型という。）に分類される。
【０００８】
前者のアプローチのプロセシングユニットは比較的大きなビット幅のデータを扱う演算ユニットと比較的複雑かつ高速な演算命令体系と実行機能を備え、まれに実験的な組み立てを除き、通常は単一、多くとも数個のユニットから構成されるプロセッサであることがほとんどである。前者の具体的な従来技術として著名なものはインテル社のプロセッサにおけるＭＭＸ（Multi-Media eXtension）やＳＳＥ（Streaming SIMD Extension）技術などが挙げられる。ＭＭＸやＳＳＥ技術は、スライス分割によって複数データを同時処理するためのマルチメディアデジタル処理に適した命令セット拡張体系である。
【０００９】
図４は従来技術に係るＭＭＸ技術を用いた行列転置方法の好適例を示すプログラムを示す図である。すなわち、図４はスライス型のＳＩＭＤアプローチにおける、並列性を有したデータ移動、交換によるデータ配置変換処理の一般概念をも好適に示す。
【００１０】
図４の従来例においてプロセッサは１２８ビット幅の語長をもつプロセシングユニットを４個の３２ビット語長のスライス（以下、レーンデータという。）に分割し、これらを同時並列にデータ演算する命令体系を備えている。４つのレジスタｍ０からレジスタｍ３までに、ｍ００からｍ３３までの４×４の行列データが格納されており、これをレジスタ内データの配置変換命令を使って転置処理を行うものである。結果はレジスタｍ０からレジスタｍ３までに戻されるように構成されている。プログラムリストはＣ言語の表記をなしているが、６行目以降の
［数１］
__builtin_ia32_unpcklps(),__builtin_ia32_unpckhps()
がプロセッサの配置変換（インターリーブやパック命令と一般に呼称されるものである）命令（もしくは命令マクロ）に対応している。
【００１１】
これらのステートメント表記を見ても明らかなように、本命令ではソースオペランドとして２項のレジスタを、デスティネーションオペランドとして１項のレジスタを取る構成である。レジスタ内のビットスライスを下位ビットから順に第１レーン、第２レーン、第３レーン、第４レーンとすると、前者の命令ではソースレジスタの下位２レーン分のスライスに着目し、第１オペランドの第１レーンと第２レーンのビットスライスデータをデスティネーションの第１レーンと第３レーン、第２オペランドの第１レーンと第２レーンのビットスライスデータをデスティネーションの第２レーンと第４レーンに配置して格納する作用をする。同様に後者の命令では、ソースレジスタの上位２レーン分のスライスに着目し、第１オペランドの第３レーンと第４レーンのビットスライスデータをデスティネーションの第１レーンと第３レーン、第２オペランドの第３レーンと第４レーンのビットスライスデータをデスティネーションの第２レーンと第４レーンに配置して格納する作用をする。中間の配置結果の時刻ｔ０からｔ３までを使ってさらに配置変換を繰り返すことにより１０行目以降で最終的に転置された行列データがｍ０からｍ３までに格納されることがわかる。複数のレーンデータを同時並列に移動・配置できることから、単に複数データを同時に算術演算するだけでなくデータ配置変換処理においてもスライス型のＳＩＭＤプロセッサ装置及び方法が有効に機能することが示される好例である。
【００１２】
さらに、別の従来例では、インターリーブ命令を強化して、分割するビットスライス幅の変更と、それに合わせた配置変換パターンの制御の変更を行える装置を開示し、行列転置や他のデータ配列変換処理をさらに効率よく行える方法が、例えば特許文献１において開示されている。
【００１３】
さらに、過去をさかのぼり別の従来技術では、レジスタのビットシフトと、レジスタ間のデータ複写又は移動の際にデータマスク機能を使うことにより、近代のスライス型ＳＩＭＤアプローチに似た手法でレジスタ内の部分データをインターリーブする手法を行列転置に応用した事例の方法が、例えば特許文献２において開示されている。
【００１４】
これらＳＩＭＤアプローチのプロセッサによる配置変換方法では一般的にいって、レジスタを含むプロセシングユニットの演算語長を複数にスライス分割することが本質であるため、同時に処理できるスライスデータ（レーン）の数はプロセシングユニットの演算語長に依存して限定されることになる。通常は数個程度のデータ（レーン）しか同時並列に扱うことはできない欠点が見られる。スライス分割数を超えるデータの配置変換には必ず、外部キャッシュ又は外部メモリとの通信が必要となり、全体の処理速度が低下する欠点も見られる。
【００１５】
さらに、プロセッサ装置のサイクル速度とハードウェア規模とのトレードオフにより、データレーンの配置変換命令においては、通常は数種程度の固定化された配置変換パターンしか持ち得ず、それらアトミックな配置変換パターンを組み合わせて様々な配置変換を実現することになり、固定パターンになじまない種類の配置変換処理ではこれらを複数組み合わせて実現することになり、処理効率を損なうとともに柔軟性に欠けると見ることもできる。
【００１６】
さらに、特許文献１において開示された装置のごとく、配置変換パターンに自由度をもたせるためには多大なハードウェアコストを支払う必要があること、そのことにより演算サイクルの低下を招く傾向にあることが欠点として認められる。さらに、特許文献２において開示された従来例における転置処理の方法は、ビットスライスの配置変換専用命令を持たない旧来のプロセッサを用いて、多倍精度語長のレジスタ内のスライスデータの配置変換をビットシフトとデータマスクを用いて逐次的に実現したものであり、並列同時にデータ移動がなされているわけではなく多大なステップが必要となってしまう欠点があるが、スライス型ＳＩＭＤアプローチの黎明期の方法事例として好適である。
【００１７】
以上はスライス型のＳＩＭＤアプローチの装置及び方法における全般的な問題点を示しているが、それは同時に本アプローチのプロセッサで行列転置処理を方法実現する際の問題としてそのまま示されることは容易に理解される。
【００１８】
次に、並列型のＳＩＭＤアプローチの具体的な従来技術であるプロセッサ装置が、例えば、特許文献６及び７において開示されている。本アプローチにおける以降の説明及び実施形態で引用されるプロセッサ装置例となる。これら文献で示される並列型のＳＩＭＤアプローチをとるプロセッサ装置では、比較的規則的かつ演算語長が小さく小規模なプロセシングエレメント（ＰＥ）が多数並列に配列され、単一命令に従って、ＰＥに分散された多数の複数データを同時並列に演算処理するものである。これらのプロセッサにきわめて特徴的な機能として、近傍ＰＥのレジスタアクセス機能と、ＰＥ個々の演算の実行又は演算の非実行を制御するための演算マスク機能が挙げられる。本発明における行列転置方法ではこれらの機能を有効利用するものである。また以下で述べる発明者らの従来の転置方法においてもこれらの機能を利用し、多数個の行列の転置処理を並列処理で転置する方法を示している。
【００１９】
さらに、並列型のＳＩＭＤアプローチの具体的な従来技術であるプロセッサ装置が、例えば特許文献３において開示されている。このプロセッサ装置によれば、ＰＥを跨ぐデータアクセスのためのネットワーク機構を柔軟かつ強化し、その転送パターンを命令セットとは切離して独立に設定できるようにしたプロセッサ装置を開示し、応用方法として行列転置処理方法をも示している。転送ネットワークを任意に設定できるためＰＥ間のデータ移動の自由度は増大するが、データネットワークの回路規模が膨大になることが予想され、ＰＥの回路の規則性も損なわれるため、大規模多数のＰＥを集積することは困難であると予想される。集積されるＰＥの数が限定されることは処理の並列度の低下を意味し、プロセッサ内に留めることのできる要素データの数が限定され、大規模多数のデータに演算を施し、ＰＥ間でのデータ移動、配置変換を複数回内包するような演算処理では、外部キャッシュや外部メモリへのアクセスが頻繁に発生し、処理の効率と速度を落とす原因となる欠点が認められる。
【００２０】
以下は、並列型のＳＩＭＤアプローチを取るプロセッサで、発明者らが従来実施してきた多数個の行列転置処理を並列処理で転置する方法を示している。この従来例では、３５２個のＰＥを備えるプロセッサ装置で処理を行う方法を示す。ＰＥにはそれぞれに、識別するためのＰＥ番号（アドレス）が０（下位側）から３５１（上位側）まで付加されている。以下、この従来例では８×８要素の行列転置処理を行う方法について示している。
【００２１】
図５は従来例に係る行列転置方法において、行列データが列方向（図５の縦方向）のベクトルデータがＰＥの演算レジスタＴｍＲ０〜ＴｍＲ７に配置されかつＰＥ方向に行ベクトルをなすように配列された行列データを示す図である。すなわち８個のＰＥで１つの行列データを保持するよう配列されている。この従来例では３５２個のＰＥを配するプロセッサであるため全てのＰＥにデータを配置することで総計４４個の行列を並列に処理することができるようになる。転置処理の結果はＴｍＲ２０からＴｍＲ２７までの別のレジスタに格納される。
【００２２】
以下の表１〜表１０は、上記並列型のＳＩＭＤプロセッサで行列転置処理方法の手順を示したプログラムリストである。プログラムリストのそれぞれのステートメントはプロセッサの機械語に対応し、処理内容に合わせたニモニック表示となっている。セミコロン以下はコメント行である。
【００２３】
命令
［数２］
settb/t1      #1,#3f8h
はプロセシングエレメント（ＰＥ）の処理実行又は処理非実行を制御するための演算マスクビットを設定する命令であり、即値とＰＥ番号とのビット比較により、演算マスクビットの設定を行うものである。第１オペランドが比較値、第２オペランドは比較の際無視するビットを指定するアドレスマスクである。演算マスクビットは各ＰＥ毎にＴ１からＴ７までの７個を持ち、同時に７種類の演算マスクを保持してＰＥの演算実行制御を個々に行うことができる。先の命令の場合、ＰＥ番号の下位３ビットを除く上位ビットを全て無視して、即値「１」と比較し一致するＰＥのＴ１ビットをセット（すなわち「１」を書き込む）するように動作する。結果、ＰＥ番号を８で割り算した余りが１である全てのＰＥのＴ１ビットがセットされることになる。さらに、Lda命令は指定されたソースレジスタ内容を第１アキュムレータＡにロードする命令、Ldf命令は第２アキュムレータＦにロードする命令である。
【００２４】
命令
［数３］
lda/t1      TmR1:L1
は２つのオプションが付加されており、/t1により演算マスクＴ１ビットがセットされたＰＥだけで実行される命令となり、Ｔ１ビットがクリアされているＰＥでは実行されない（ＮＯＰ）。オペランドのＴｍＲ１はソースレジスタの指定で、:L1は１つ下位（Ｌｏｗｅｒ：ＰＥ番号が小さいもの）のＰＥのレジスタを参照するように修飾される。この従来例のプロセッサでは自身以外のＰＥのレジスタ参照は、上位側、下位側それぞれ３つの距離まで可能であり、先のレジスタ修飾は:L1からL3まで、及びU1からU3まで使うことができる。ここで、Uは上位番号のＰＥを表す。これらの修飾子が付加されない場合は自身のレジスタが参照される。本機能により、ＰＥ方向のデータの移動が可能となり、このような態様を以下、「ＰＥシフト」という。
【００２５】
Sta、Stfはそれぞれのアキュムレータからデスティネーションレジスタまでにストア（格納）する命令である。デスティネーションレジスタにも隣接ＰＥの参照を制御する修飾子（:L1〜:L3、:U1〜:U3）があり、同様に下位ＰＥもしくは上位ＰＥのレジスタに内容を格納するよう制御される。
［数４］
ldf      TmR4:L3,TmR10
命令のように、ロード命令で２項のオペランドが配される場合は、アキュムレータにソースレジスタの内容がロードされた後、同時にアキュムレータの内容が第２項のデスティネーションレジスタにストア（複写）されるように動作する。
【００２６】
この従来例に係るプロセッサ装置の場合は、最大上下３個先のＰＥのレジスタをアクセスできるが、それ以上離れた場所のアクセスを行うには、テンポラリレジスタを介して、ＰＥシフトの距離量を組み合わせることで実現する。その分、ステップ数が増える問題はあるが柔軟に手順を組み立てることができる。しかしながら、どの距離のＰＥまでアクセスできるかは、時代の集積技術と応用分野からの性能要請に基づきトレードオフで決定されるものであるので、この従来例ではあくまで一例として示したにすぎず、以降の説明や本発明の内容をなんら制約するものではない。
【００２７】
［表１］
;===================================================
;行列転置
;---------------------------------------------------
;Input
;  TmR00(1行目)〜TmR07(8行目)
;---------------------------------------------------
;Output
;  TmR20(1行目)〜TmR27(8行目)
;---------------------------------------------------
;Tmp
;  TmR10,TmR11,TmR12,TmR13,TmR14,
;  t1,t2,t3,t4,t5,t6,t7
;===================================================
;
【００２８】
［表２］
;演算マスクの設定
settb/t1      #1,#3f8h      ;01000000      ;STEP1
settb/t2      #2,#3f8h      ;00100000      ;STEP2
settb/t3      #3,#3f8h      ;00010000      ;STEP3
settb/t4      #4,#3f8h      ;00001000      ;STEP4
settb/t5      #5,#3f8h      ;00000100      ;STEP5
settb/t6      #6,#3f8h      ;00000010      ;STEP6
settb/t7      #7,#3f8h      ;00000001      ;STEP7
;
【００２９】
［表３］
;1行目の配置
lda         TmR0               ;STEP8
lda/t1      TmR1:L1            ;STEP9
lda/t2      TmR2:L2            ;STEP10
lda/t3      TmR3:L3            ;STEP11
ldf         TmR4:L3,TmR10      ;STEP12
ldf         TmR5:L3,TmR11      ;STEP13
ldf         TmR6:L3,TmR12      ;STEP14
ldf         TmR7:L3            ;STEP15
lda/t4      TmR10:L1           ;STEP16
lda/t5      TmR11:L2           ;STEP17
stf         TmR10:U1           ;STEP18
lda/t6      TmR12:L3           ;STEP19
lda/t7      TmR10:L3,TmR20     ;STEP20
【００３０】
［表４］
;2行目の配置
lda         TmR0:U1             ;STEP21
lda/t1      TmR1                ;STEP22
lda/t2      TmR2:L1             ;STEP23
lda/t3      TmR3:L2             ;STEP24
lda/t4      TmR4:L3             ;STEP25
ldf         TmR5:L3,TmR10       ;STEP26
ldf         TmR6:L3,TmR11       ;STEP27
ldf         TmR7:L3,TmR12       ;STEP28
lda/t5      TmR10:L1            ;STEP29
lda/t6      TmR11:L2            ;STEP30
lda/t7      TmR12:L3,TmR21      ;STEP31
【００３１】
［表５］
;3行目の配置
lda         TmR0:U2             ;STEP32
lda/t1      TmR1:U1             ;STEP33
lda/t2      TmR2                ;STEP34
lda/t3      TmR3:L1             ;STEP35
lda/t4      TmR4:L2             ;STEP36
lda/t5      TmR5:L3             ;STEP37
ldf         TmR6:L3,TmR10       ;STEP38
ldf         TmR7:L3,TmR11       ;STEP39
lda/t6      TmR10:L1            ;STEP40
lda/t7      TmR11:L2,TmR22      ;STEP41
【００３２】
［表６］
;4行目の配置
lda         TmR0:U3,TmR10       ;STEP42
lda/t1      TmR1:U2             ;STEP43
lda/t2      TmR2:U1             ;STEP44
lda/t3      TmR3                ;STEP45
lda/t4      TmR4:L1             ;STEP46
lda/t5      TmR5:L2             ;STEP47
ldf         TmR7:L3,TmR11       ;STEP48
lda/t6      TmR6:L3             ;STEP49
lda/t7      TmR11:L1,TmR23      ;STEP50
【００３３】
［表７］
;5行目の配置
lda         TmR10:U1           ;STEP51
lda/t1      TmR1:U3            ;STEP52
lda/t2      TmR2:U2            ;STEP53
lda/t3      TmR3:U1            ;STEP54
lda/t4      TmR4                             ;STEP55
lda/t5      TmR5:L1            ;STEP56
lda/t6      TmR6:L2            ;STEP57
lda/t7      TmR7:L3,TmR24      ;STEP58
【００３４】
［表８］
;6行目の配置
ldf         TmR1:U3,TmR11      ;STEP59
lda         TmR10:U2           ;STEP60
lda/t1      TmR11:U1           ;STEP61
lda/t2      TmR2:U3            ;STEP62
lda/t3      TmR3:U2            ;STEP63
lda/t4      TmR4:U1            ;STEP64
lda/t5      TmR5               ;STEP65
lda/t6      TmR6:L1            ;STEP66
lda/t7      TmR7:L2,TmR25      ;STEP67
【００３５】
［表９］
;7行目の配置
ldf         TmR2:U3,TmR12      ;STEP68
lda         TmR10:U3           ;STEP69
lda/t1      TmR11:U2           ;STEP70
lda/t2      TmR12:U1           ;STEP71
lda/t3      TmR3:U3            ;STEP72
lda/t4      TmR4:U2            ;STEP73
lda/t5      TmR5:U1            ;STEP74
lda/t6      TmR6               ;STEP75
lda/t7      TmR7:L1,TmR26      ;STEP76
【００３６】
［表１０］
;8行目の配置
ldf         TmR10             ;STEP77
stf         TmR14:L1          ;STEP78
lda         TmR14:U3          ;STEP79
ldf         TmR3:U3,TmR13     ;STEP80
lda/t1      TmR11:U3          ;STEP81
lda/t2      TmR12:U2          ;STEP82
lda/t3      TmR13:U1          ;STEP83
lda/t4      TmR4:U3           ;STEP84
lda/t5      TmR5:U2           ;STEP85
lda/t6      TmR6:U1           ;STEP86
lda/t7      TmR7,TmR27        ;STEP87
;
【００３７】
次に、この従来例に係るプログラムリストで実現されている手順について説明する。まず、ＳＴＥＰ１からＳＴＥＰ７まで演算マスクビットを設定する。Ｔ１ビットはＰＥ番号を８で割って余りが１のＰＥの全てについてそれぞれセットされる。Ｔ２ビットは同様に余りが２のＰＥ全てについて、Ｔ３ビットは余りが３のＰＥ全てについて、Ｔ４ビットは余りが４のＰＥ全てについて、Ｔ５ビットは余りが５のＰＥ全てについて、Ｔ６ビットは余りが６のＰＥ全てについて、Ｔ７ビットは余りが７のＰＥ全てについて各々セットされる。ＳＴＥＰ８からＳＴＥＰ２０までは転置結果の１行目の配置変換を行う手順である。以下にデータ移動の様子を図示している。
【００３８】
図６は従来例に係る行列転置方法において、ＳＴＥＰ８〜ＳＴＥＰ２０までの手順により転置結果の１行目の配置変換を示す行列データを示す図である。図６に示すように、対角要素を除き、ハッチング部分のデータがこれらのステップで移動される。ＴｍＲ２０からＴｍＲ２７までのレジスタに処理結果が格納される。ＴｍＲ２０は転置結果の１行目が配置されるが、図６とプログラムリストを見て明らかなように、行の要素の８ＰＥ毎に１個ずつ、ＰＥシフト操作を介して列要素からデータ移動されていることがわかる。３５２個のＰＥに跨って４４個の８×８の行列が配置されているので、行列要素としては１個ずつではあるが、全体としては４４個のデータが同時並列に移動、配置されるステップである。
【００３９】
以下同様に、各行の処理内容の図を示す。図７は従来例に係る行列転置方法において、ＳＴＥＰ２１〜ＳＴＥＰ３１までの手順により２行目の配置変換を示す行列データを示す図である。また、図８は従来例に係る行列転置方法において、ＳＴＥＰ３２〜ＳＴＥＰ４１までの手順により３行目の配置変換を示す行列データを示す図である。さらに、図９は従来例に係る行列転置方法において、ＳＴＥＰ４２〜ＳＴＥＰ５０までの手順により４行目の配置変換を示す行列データを示す図である。またさらに、図１０は従来例に係る行列転置方法において、ＳＴＥＰ５１〜ＳＴＥＰ５８までの手順により５行目の配置変換を示す行列データを示す図である。また、図１１は従来例に係る行列転置方法において、ＳＴＥＰ５９〜ＳＴＥＰ６７までの手順により６行目の配置変換を示す行列データを示す図である。さらに、図１２は従来例に係る行列転置方法において、ＳＴＥＰ６８〜ＳＴＥＰ７６までの手順により７行目の配置変換を示す行列データを示す図である。またさらに、図１３は従来例に係る行列転置方法において、ＳＴＥＰ７７〜ＳＴＥＰ８７までの手順により８行目の配置変換を示す行列データを示す図である。
【００４０】
以上、並列型のＳＩＭＤプロセッサで近傍ＰＥのレジスタアクセス機能と、ＰＥの演算マスクにより、複数の行列転置処理を同時並列に実施する従来例に係る行列転置方法を示した。近傍ＰＥのレジスタアクセスにより、ＰＥ間を跨るデータとＰＥ内に配置されるデータを柔軟に移動、配置できることが示されている。また多数のＰＥを配列するプロセッサではその並列性により多数の行列データを並列同時に処理する方法が提供されうることが示されている。
【００４１】
しかしながら、この従来例で示した方法では行列あたり１要素ずつ移動させるステップから構成されるため、並列性が高く処理効率が良いとはいえない欠点があった。さらにレジスタアクセス可能なＰＥ間の距離が小さく限定されるプロセッサでは、回路の規則性が高く、複雑度、回路規模が小さく、より多数のＰＥを集積できうる利点はあるものの、可能な最大距離を超えた位置のＰＥのレジスタアクセスを行うには追加のステップが必要となり、処理速度と効率が低下する欠点が認められる。具体的には、この従来例においてデータ要素移動の個々のステップで距離３を越えるＰＥのデータへのアクセスは、都度３以下のＰＥシフトを組み合わせて多段ステップで実現しており、ステップ数が増えると全体のステップ数に与える影響が大きいという欠点がある。
【００４２】
従来技術に係るビットスライス型のＳＩＭＤプロセッサでは一般的にプロセシングユニットの演算語長の制約から同時に並列処理できるデータの数に、最大で数個程度という制限があり、制限を越える大量のデータ処理を行うためには逐次外部キャッシュやメモリアクセスが必要となり、並列処理の効率が比較的低く速度の低下を招く問題点があった。
【００４３】
さらに、別の形態に係る、プロセシングユニットを多数並列に配列する並列型のＳＩＭＤプロセッサでは、規則性が高く比較的小規模のプロセシングエレメント（ＰＥ）をより多数個配列して集積するものほど処理の並列性が増大し、処理効率はきわめて高くなる一方、データ移動可能なＰＥの範囲は装置回路的にＰＥ自身の近傍距離に限られる傾向にあり、行列転置のようなデータ移動のＰＥ間距離が比較的大きい処理ほど、データ移動ステップが多段で煩雑となり、処理ステップが増大して処理速度が低下する問題点があった。
【００４４】
本発明の第１の目的は以上の問題点を解決し、多数のプロセシングエレメント（ＰＥ）を集積しうる並列型のＳＩＭＤプロセッサにおいて並列性の高い行列転置方法を用いたプロセッサ装置及びその演算方法を提供することにある。
【００４５】
また、本発明の第２の目的は上記第１の目的に加えて、より大規模な並列性を有するプロセッサにおいてもＰＥ間のデータ移動効率が良く、処理ステップ数がより少ない行列転置方法を用いたプロセッサ装置及びその演算方法を提供することにある。
【００４６】
さらに、本発明の第３の目的は上記第１及び第２の目的に加えて、ＰＥ間のデータ移動の並列性を高めて処理ステップがさらに少なく効率的な行列転置方法をプロセッサ装置及びその演算方法を提供することにある。
【課題を解決するための手段】
【００４７】
第１の発明に係るプロセッサ装置は、複数のプロセシングエレメントを備えたプロセッサ装置において、
上記各プロセシングエレメントは、
複数のデータを保持する演算レジスタと、
所定の演算マスク値に従って命令の実行又は非実行を制御する制御手段とを備え、
上記各プロセシングエレメントはさらに、
処理を行うプロセシングエレメント自身以外のプロセシングエレメントのレジスタ値を参照する手段と、演算結果を処理を行うプロセシングエレメント自身以外のプロセシングエレメントのレジスタに転送して格納する手段とのうちの少なくとも１つの手段とを備え、
上記プロセッサ装置はテンポラリレジスタ及び演算マスクを備え、
上記制御手段は、上記各プロセシングエレメント方向に行ベクトルデータが配列され、かつ上記各プロセシングエレメント内レジスタ方向に列ベクトルデータがそれぞれ配列された２Ｎ行２Ｎ列の行列データ（Ｎは３以上の自然数である）の数学的転置を行うときに、
（１）２行２列の部分行列毎に、非対角要素間でデータ交換をするステップと、
（２）２Ｍ行２Ｍ列の部分行列毎に、２Ｍ−１行２Ｍ−１列からなる非対角データ要素群である要素群間でデータ交換をすることをＭ＝２，…，Ｎ−１で順次行うステップと、
（３）２Ｎ行２Ｎ列の行列全体において、２Ｎ−１行２Ｎ−１列からなる非対角データ要素群である要素群間でデータ交換をするステップと
を実行することで、上記行列データの各要素のデータのプロセシングエレメント間の移動を２のべき乗の距離に分割して行うように上記転置を行い、
上記制御手段は、上記転置の演算を行うときに、参照する現データを上記テンポラリレジスタに複写し、上記演算マスクを用いて、格納位置のプロセシングエレメントから所定の距離のＰＥシフトをともなうアキュムレータロード命令で参照位置のレジスタを読出すように、複数のプロセシングエレメントを同時に動作させることにより上記転置を行うことを特徴とする。
【００４９】
第２の発明に係るプロセッサ装置の演算方法は、複数のプロセシングエレメントを備えたプロセッサ装置の演算方法において、
複数のプロセシングエレメントを備えたプロセッサ装置の演算方法において、
上記各プロセシングエレメントは、
複数のデータを保持する演算レジスタと、
所定の演算マスク値に従って命令の実行又は非実行を制御する制御手段とを備え、
上記各プロセシングエレメントはさらに、
処理を行うプロセシングエレメント自身以外のプロセシングエレメントのレジスタ値を参照する手段と、演算結果を処理を行うプロセシングエレメント自身以外のプロセシングエレメントのレジスタに転送して格納する手段とのうちの少なくとも１つの手段とを備え、
上記プロセッサ装置はテンポラリレジスタ及び演算マスクを備え、
上記演算方法は、
上記制御手段が、上記各プロセシングエレメント方向に行ベクトルデータが配列され、かつ上記各プロセシングエレメント内レジスタ方向に列ベクトルデータがそれぞれ配列された２Ｎ行２Ｎ列の行列データ（Ｎは３以上の自然数である）の数学的転置を行うときに、
（１）２行２列の部分行列毎に、非対角要素間でデータ交換をするステップと、
（２）２Ｍ行２Ｍ列の部分行列毎に、２Ｍ−１行２Ｍ−１列からなる非対角データ要素群である要素群間でデータ交換をすることをＭ＝２，…，Ｎ−１で順次行うステップと、
（３）２Ｎ行２Ｎ列の行列全体において、２Ｎ−１行２Ｎ−１列からなる非対角データ要素群である要素群間でデータ交換をするステップと
を実行することで、上記行列データの各要素のデータのプロセシングエレメント間の移動を２のべき乗の距離に分割して行うように上記転置を行う制御ステップを含み、
上記制御ステップは、上記制御手段が、上記転置の演算を行うときに、参照する現データを上記テンポラリレジスタに複写し、上記演算マスクを用いて、格納位置のプロセシングエレメントから所定の距離のＰＥシフトをともなうアキュムレータロード命令で参照位置のレジスタを読出すように、複数のプロセシングエレメントを同時に動作させることにより上記転置を行うことを特徴とする。
【発明の効果】
【００５１】
従って、本発明に係るプロセッサ装置及びその演算方法によれば、２のべき乗次の部分行列を対象に非対角位置のブロックのデータを一括して移動、交換するステップを含み、データのＰＥ間移動は２のべき乗の距離の移動を組み合わせ、それぞれの２のべき乗距離のデータ移動は並列に一括して行うことが可能となるため、データのＰＥ間の移動距離が自身の近傍位置に限られるような、より大規模な並列性を有するプロセッサにおいてもＰＥ間のデータ移動効率が良く、処理ステップがより少ない行列転置方法を提供することができる。また、複数の行列データの転置処理を同時一括して並列処理することができるので処理全体のスループットは高くなる。さらに、複数の行列データをプロセッサ装置内に留め置き演算処理を進めることができるので外部キャッシュやメモリとのアクセス頻度を減らすことができ処理のスループット向上を図ることができる。
【００５２】
また、本発明に係るプロセッサ装置及びその演算方法によれば、所定の演算マスク値を設定し、２Ｎ個の連続位置のデータ毎に２Ｎ−１個（Ｎ＝１，２，…）のデータに対応する連続ＰＥを並列動作させて並列同時にデータの移動、交換するステップを含むので、並列動作するＰＥの数が最大に保たれ、並列性が高く効率のきわめて高い行列転置方法を提供することができる。
【図面の簡単な説明】
【００５３】
【図１】従来技術及び本発明の実施形態に係るＳＩＭＤ型マイクロプロセッサ装置の基本構成を示すブロック図である。
【図２】本発明の実施形態に係るＳＩＭＤ型マイクロプロセッサ装置の詳細構成を示すブロック図である。
【図３】図２のレジスタファイルのレジスタと演算アレイとを結び付けるマルチプレクサの機能構成を示すブロック図である。
【図４】従来例に係るＭＭＸ技術を用いた行列転置方法の一例を示すプログラムを示す図である。
【図５】従来例に係る行列転置方法において、行列データが列方向（図５の縦方向）のベクトルデータがＰＥの演算レジスタＴｍＲ０〜ＴｍＲ７に配置されかつＰＥ方向に行ベクトルをなすように配列された行列データを示す図である。
【図６】従来例に係る行列転置方法において、ＳＴＥＰ８〜ＳＴＥＰ２０までの手順により転置結果の１行目の配置変換を示す行列データを示す図である。
【図７】従来例に係る行列転置方法において、ＳＴＥＰ２１〜ＳＴＥＰ３１までの手順により２行目の配置変換を示す行列データを示す図である。
【図８】従来例に係る行列転置方法において、ＳＴＥＰ３２〜ＳＴＥＰ４１までの手順により３行目の配置変換を示す行列データを示す図である。
【図９】従来例に係る行列転置方法において、ＳＴＥＰ４２〜ＳＴＥＰ５０までの手順により４行目の配置変換を示す行列データを示す図である。
【図１０】従来例に係る行列転置方法において、ＳＴＥＰ５１〜ＳＴＥＰ５８までの手順により５行目の配置変換を示す行列データを示す図である。
【図１１】従来例に係る行列転置方法において、ＳＴＥＰ５９〜ＳＴＥＰ６７までの手順により６行目の配置変換を示す行列データを示す図である。
【図１２】従来例に係る行列転置方法において、ＳＴＥＰ６８〜ＳＴＥＰ７６までの手順により７行目の配置変換を示す行列データを示す図である。
【図１３】従来例に係る行列転置方法において、ＳＴＥＰ７７〜ＳＴＥＰ８７までの手順により８行目の配置変換を示す行列データを示す図である。
【図１４】本実施形態に係る行列転置方法において、行列データが列方向（図１４の縦方向）のベクトルデータがＰＥの演算レジスタＴｍＲ０〜ＴｍＲ７に配置されかつＰＥ方向に行ベクトルをなすように配列された行列データを示す図である。
【図１５】本実施形態に係る行列転置方法において、ＳＴＥＰ４〜ＳＴＥＰ７までの手順を実行後の行列データの配置を示す図である。
【図１６】本実施形態に係る行列転置方法において、ＳＴＥＰ１９による２×２部分行列の処理終了時点での行列データの配置を示す図である。
【図１７】本実施形態に係る行列転置方法において、ＳＴＥＰ２０〜ＳＴＥＰ２３までの手順を実行後の行列データの配置を示す図である。
【図１８】本実施形態に係る行列転置方法において、ＳＴＥＰ２４〜ＳＴＥＰ２７までの手順を実行後の行列データの配置を示す図である。
【図１９】本実施形態に係る行列転置方法において、ＳＴＥＰ２４〜ＳＴＥＰ２７、ＳＴＥＰ２８〜ＳＴＥＰ３１、ＳＴＥＰ３２〜ＳＴＥＰ３５までの手順を実行後の行列データの配置を示す図である。
【図２０】本実施形態に係る行列転置方法において、ＳＴＥＰ３６〜ＳＴＥＰ４１までの手順を実行後の行列データの配置を示す図である。
【図２１】本実施形態に係る行列転置方法において、ＳＴＥＰ４２〜ＳＴＥＰ４７までの手順を実行後の行列データの配置を示す図である。
【図２２】本実施形態に係る行列転置方法において、ＳＴＥＰ４８〜ＳＴＥＰ５３までの手順を実行後の行列データの配置を示す図である。
【図２３】本実施形態に係る行列転置方法において、ＳＴＥＰ５４〜ＳＴＥＰ５９までの手順を実行後の行列データの配置を示す図である。
【発明を実施するための形態】
【００５４】
以下、本発明に係る実施形態について図面を参照して説明する。なお、以下の各実施形態において、同様の構成要素については同一の符号を付している。
【００５５】
実施形態の基本構成．
図１は本発明の実施形態に係るＳＩＭＤ型マイクロプロセッサ２の基本構成を示すブロック図である。実施形態に係るＳＩＭＤ型マイクロプロセッサ２は、主としてプロセッサ２全体を制御するグローバルプロセッサ（ＧＰ）４と、主として外部入出力装置からデータを入力しデータ処理を行い、外部入出力装置にデータを出力するプロセシングエレメント（ＰＥ）３とを備えて構成される。ＰＥ３は、複数データを同時に処理するために複数用意されている。図１では、１個のＧＰ４と、２５６個のＰＥ３とにより、ＳＩＭＤ型マイクロプロセッサ２が構成されている。
【００５６】
図２は本発明の実施形態に係るＳＩＭＤ型マイクロプロセッサ装置の詳細構成を示すブロック図である。図２に示されるように、ＧＰ４は、
（ａ）命令コードで構成されるプログラムを格納するためのプログラムＲＡＭ１０と、
（ｂ）ＧＰ４での演算データを格納するデータＲＡＭ１２と、
（ｃ）プログラムを解読し各種ブロックに各種制御信号を送るシーケンシャルユニット（ＳＣＵ）９と、
（ｄ）データを格納する複数の汎用レジスタ（Ｇ０〜Ｇ３）と、
（ｅ）ＳＣＵ９にプログラムの命令コードを送るためにプログラムのアドレスを保持するプログラムカウンタ（ＰＣ）１４と、
（ｆ）データメモリにスタックを形成するためデータメモリのアドレスを格納するスタックポインタ（ＳＰ）２４と、
（ｇ）プログラムの途中でサブルーチン処理を行う際には分岐が発生するが分岐前のアドレスを格納する複数のリンクレジスタ（ＬＳ、ＬＩ、ＬＮ）と、
（ｈ）データメモリのデータ、命令コード中に記述された数値（即値）データ、もしくは汎用レジスタに格納されているデータのいずれかの組み合わせに対して、算術論理演算を行う算術論理演算装置（ＡＬＵ）１１と、
（ｉ）プロセッサの状態を保持するプロセッサステータスレジスタ（図示せず。）と、
（ｊ）ハードウェア割り込みとソフトウェア割り込みを制御する割り込み制御回路（図示せず。）と、
（ｋ）外部入出力に直接接続され外部からのデータの入出力を制御する外部入出力制御回路（図示せず。）とを備えて構成される。
【００５７】
図２では図示していないが、上記ＳＣＵ９は、ＧＰ命令を解読し主にＧＰ内の各ブロックに制御信号を発生するＧＰ命令デコーダと、ＰＥ命令を解読し主にＰＥ内の各ブロックに制御信号を発生するＰＥ命令デコーダとで、構成される。すなわち、本プロセッサに係る命令コードは、主にＧＰ４内の各ブロックを制御し、プログラムのシーケンスを決定したり、ＰＥに転送する共通データをＧＰ４内のＡＬＵ１１で加工したりするＧＰ命令と、外部入出力装置から一度に入力されたデータをＰＥ３毎に処理をさせるプロセシングエレメント命令とに分類される。
【００５８】
図１に示すように、各ＰＥ３は、外部入出力装置からの入出力データを一時的に保持するレジスタファイル６と、ＰＥ３内で算術論理演算やビット演算のデータ処理を行うための演算アレイ８を含む。さらに、図２に示すようにレジスタファイル６には、例えば、Ｒ０〜Ｒ３１までの８ビットのレジスタ３４が３２個用意されている。これらのレジスタ３４からデータが演算アレイ８に転送され、また逆に、演算アレイ８からデータが転送されてレジスタ３４に格納される。レジスタ３４と演算アレイ６とのバスは、８ビットの双方向バスである。
【００５９】
さらに、図２に示すように、単体の演算アレイ８は演算ユニットであり、
（ａ）レジスタファイル６からのデータをシフトして符号付き拡張もしくは符号無し拡張をして１６ビットデータに加工するシフト拡張器４４と、
（ｂ）例えば、Ａレジスタ３８とＦレジスタ４０などを含む複数の汎用レジスタと、
（ｃ）レジスタファイル６からのデータを、シフト拡張器４４を経由して加工し１入力とし、他方の入力をＡレジスタ３６からの入力とする算術論理演算装置（ＡＬＵ）３６と、
（ｄ）ＰＥ番号マスク回路、固定値選択回路、及びｎおきにビットパターンデータ出力回路のそれぞれからの出力を入力とし、自らの出力をＡレジスタ３８やＴレジスタ５４に繋げる選択回路３５とを備えて構成される。
【００６０】
算術論理演算装置（ＡＬＵ）３６の出力は、Ａレジスタ３６もしくはＦレジスタ４０に一時格納されように設定されているが、Ａレジスタ３６からレジスタファイル６の所定の１レジスタ３４にデータ転送されることも可能である。
【００６１】
また、演算アレイ８は、詳細後述するように、「Ｔレジスタ」と呼ばれる演算制御レジスタ５４を備える。ＡＬＵ３６からの出力は、当該Ｔレジスタ５４によって、Ａレジスタ３６もしくはＦレジスタ４０への書き込み内容が制御される。例えば、演算制御レジスタ（Ｔレジスタ）５４の中の所定の１ビットの状態に応じて、「１」であればＡレジスタ３６もしくはＦレジスタ５４への書き込みを行い、「０」であれば行わないというような制御が行われる。
【００６２】
図３は図２のレジスタファイルのレジスタと演算アレイとを結び付けるマルチプレクサの機能構成を示すブロック図である。図３において、ＰＥｉ（ｉ＝０，１，２，…，２５５）のＰＥに備わるマルチプレクサは７対１のマルチプレクサであり、ＰＥｉ−３（ＰＥｉから３つ左隣りに位置する）、ＰＥｉ−２（ＰＥｉから２つ左隣りに位置する）、ＰＥｉ−１（ＰＥｉから１つ左隣りに位置する）、ＰＥｉ、ＰＥｉ＋１（ＰＥｉから１つ右隣りに位置する）、ＰＥｉ＋２（ＰＥｉから２つ右隣りに位置する）、ＰＥｉ＋３（ＰＥｉから３つ右隣りに位置する）のＰＥ３のレジスタファイル６からのデータを入出力することができるように設定されている。この機能を、ＰＥシフト機能と称する。マルチプレクサによって選択されたデータは、演算アレイ８のシフト拡張器４４に転送される。
【００６３】
ここで、ＰＥ３の番号を含む呼称について定義する。図２に示すように、本実施形態に係るＳＩＭＤ型マイクロプロセッサ２には２５６個のＰＥ３が設置されており、それらＰＥ３の個々に対し、（図２では左側から）ＰＥ０、ＰＥ１、ＰＥ２、ＰＥ３、…、ＰＥ２５４、ＰＥ２５５というように、ＰＥ番号を付すと定義する。
【００６４】
実施形態．
本発明に係る好適な実施形態を以下に説明する。以下に示す表１１〜表１５は並列型のＳＩＭＤプロセッサにおいて行列転置処理方法の手順を示したプログラムリストである。本実施形態に係るＳＩＭＤプロセッサの形態及び命令セットの説明は、上述の従来例と同様であるので省略する。命令に付加される/f1オプションは、マスクビットT1に基づく演算制御のための修飾で、T1ビットが０であれば命令実行を行うよう制御される。/fに続く数字はT1〜T7ビットを指定するものである。プロセッサにおいてどの距離のＰＥまでアクセスできるかは、時代の集積技術と応用分野からの性能要請に基づきトレードオフで決定されるものであるので、本実施形態ではあくまで一例として示したにすぎず、以降の説明や本発明の内容をなんら制約するものではない。
【００６５】
本実施形態では、３５２個のＰＥを備えるプロセッサ装置で処理を行う方法を示す。ＰＥにはそれぞれに、識別するためのＰＥ番号（アドレス）が０（下位側）から３５１（上位側）まで付加されている。以下、本実施形態では８×８要素の行列転置処理を行う方法について示している。
【００６６】
図１４は本実施形態に係る行列転置方法において、行列データが列方向（図１４の縦方向）のベクトルデータがＰＥの演算レジスタＴｍＲ０〜ＴｍＲ７に配置されかつＰＥ方向に行ベクトルをなすように配列された行列データを示す図である。すなわち、８個のＰＥで１つの行列データを保持するよう配列されている。本実施形態では、３５２個のＰＥを配するプロセッサであるため全てのＰＥにデータを配置することで総計４４個の行列を並列に処理することができるようになる。転置処理の結果はＴｍＲ０からＴｍＲ７までのレジスタに再び格納されるよう動作する。
【００６７】
［表１１］
;===================================================
;行列転置
;---------------------------------------------------
;Input
;  TmR0(1行目)〜TmR7(8行目)
;---------------------------------------------------
;Output
;  TmR0(1行目)〜TmR7(8行目)
;---------------------------------------------------
;Tmp
;  TmR8~TmR9
;  t1,t2,t3
;===================================================
;
【００６８】
［表１２］
;演算マスクの設定
settb/t1#1,#3feh      ;01010101      ;STEP1
settb/t2#2,#3fdh      ;00110011      ;STEP2
settb/t3#4,#3fbh      ;00001111      ;STEP3
;
【００６９】
［表１３］
;２×２部分行列の転置
lda         TmR0,TmR8         ;STEP4
ldf         TmR1,TmR9         ;STEP5
ldf/f1      TmR8:u1,TmR1      ;STEP6
lda/t1      TmR9:l1,TmR0      ;STEP7
;
lda         TmR2,TmR8         ;STEP8
ldf         TmR3,TmR9         ;STEP9
ldf/f1      TmR8:u1,TmR3      ;STEP10
lda/t1      TmR9:l1,TmR2      ;STEP11
;
lda         TmR4,TmR8         ;STEP12
ldf         TmR5,TmR9         ;STEP13
ldf/f1      TmR8:u1,TmR5      ;STEP14
lda/t1      TmR9:l1,TmR2      ;STEP15
;
lda         TmR6,TmR8         ;STEP16
ldf         TmR7,TmR9         ;STEP17
ldf/f1      TmR8:u1,TmR7      ;STEP18
lda/t1      TmR9:l1,TmR6      ;STEP19
;
【００７０】
［表１４］
;４×４部分行列の転置
lda          TmR0,TmR8         ;STEP20
ldf          TmR2,TmR9         ;STEP21
ldf/f2       TmR8:u2,TmR2      ;STEP22
lda/t2       TmR9:l2,TmR0      ;STEP23
;
lda          TmR1,TmR8         ;STEP24
ldf          TmR3,TmR9         ;STEP25
ldf/f2       TmR8:u2,TmR3      ;STEP26
lda/t2       TmR9:l2,TmR1      ;STEP27
;
lda          TmR4,TmR8         ;STEP28
ldf          TmR6,TmR9         ;STEP29
ldf/f2       TmR8:u2,TmR6      ;STEP30
lda/t2       TmR9:l2,TmR4      ;STEP31
;
lda          TmR5,TmR8         ;STEP32
ldf          TmR7,TmR9         ;STEP33
ldf/f2       TmR8:u2,TmR7      ;STEP34
lda/t2       TmR9:l2,TmR5      ;STEP35
;
【００７１】
［表１５］
;８×８最終行列の転置
lda         TmR0              ;STEP36
sta         TmR8:l2           ;STEP37
ldf         TmR4              ;STEP38
stf         TmR9:u2           ;STEP39
ldf/f3      TmR8:u2,TmR4      ;STEP40
lda/t3      TmR9:l2,TmR0      ;STEP41
;
lda         TmR1              ;STEP42
sta         TmR8:l2           ;STEP43
ldf         TmR5              ;STEP44
stf         TmR9:u2           ;STEP45
ldf/f3      TmR8:u2,TmR5      ;STEP46
lda/t3      TmR9:l2,TmR1      ;STEP47
;
lda         TmR2              ;STEP48
sta         TmR8:l2           ;STEP49
ldf         TmR6              ;STEP50
stf         TmR9:u2           ;STEP51
ldf/f3      TmR8:u2,TmR6      ;STEP52
lda/t3      TmR9:l2,TmR2      ;STEP53
;
lda         TmR3              ;STEP54
sta         TmR8:l2           ;STEP55
ldf         TmR7              ;STEP56
stf         TmR9:u2           ;STEP57
ldf/f3      TmR8:u2,TmR7      ;STEP58
lda/t3      TmR9:l2,TmR3      ;STEP59
【００７２】
ＳＴＥＰ１からＳＴＥＰ３までは処理で必要な演算マスク値の設定を以下のごとく行っている。
［数５］
settb/t1      #1,#3feh
命令は、ＰＥ番号の最下位ビット（ｂｉｔ０）が１のもの全てのＴ１ビットをセット（１を設定）する。このことにより、Ｔ１ビットの値は、最下位ＰＥから０１０１０１０１０…が設定される。すなわち、偶数番号のＰＥのＴ１ビットは０に、奇数ビットのＴ１ビットは１に設定される。
【００７３】
［数６］
settb/t2      #2,#3fdh
命令は、ＰＥ番号のｂｉｔ１（最下位ビットから次のビットをいう。）が１のもの全てのＴ２ビットをセット（１を設定）する。このことにより、Ｔ２ビットの値は、最下位ＰＥから００１１００１１００１１…が設定される。すなわち、連続する４つのＰＥ毎に連続する下位２つのＰＥのＴ２ビットは０に、上位２つのＰＥのＴ２ビットは１に設定される。
【００７４】
［数７］
settb/t3      #4,#3fbh
命令は、ＰＥ番号のｂｉｔ２（最下位ビットから２ビット目のビットをいう。）が１のもの全てのＴ３ビットをセット（１を設定）する。このことにより、Ｔ３ビットの値は、最下位ＰＥから００００１１１１００００１１１１…が設定される。すなわち連続する８つのＰＥ毎に連続する下位４つのＰＥのＴ３ビットは０に、上位４つのＰＥのＴ３ビットは１に設定される。
【００７５】
ＳＴＥＰ４からＳＴＥＰ１９までは、隣り合う２行のデータを対象に、これに内包される２×２部分行列の非対角要素の交換処理を行うステップである。参照する現データをテンポラリレジスタＴｍＲ８、ＴｍＲ９に複写し、演算マスクを用いて、格納位置のＰＥから距離１のＰＥシフトをともなうアキュムレータロード命令で参照位置のレジスタを読出すことでデータの移動配置を行い、特に、偶数もしくは奇数のＰＥが常に動作していることから処理の並列度が高いことを特徴としている。
【００７６】
図１５は本実施形態に係る行列転置方法において、ＳＴＥＰ４〜ＳＴＥＰ７までの手順を実行後の行列データの配置を示す図である。また、図１６は本実施形態に係る行列転置方法において、ＳＴＥＰ１９による２×２部分行列の処理終了時点での行列データの配置を示す図である。
【００７７】
ＳＴＥＰ２０からＳＴＥＰ３５までは、隣り合う連続４行のデータを対象に、これに内包される４×４部分行列を対象にその中の非対角ブロック（２×２要素）の交換処理を行うステップである。交換処理を行う２行データを対象に参照する現データをテンポラリレジスタＴｍＲ８、ＴｍＲ９に複写し、演算マスクを用いて、格納位置のＰＥから距離２のＰＥシフトをともなうアキュムレータロード命令で参照位置のレジスタを読出すことでデータの移動配置を行い、特に、４つのＰＥ毎に２つのＰＥが常に動作していることから処理の並列度が高いことを特徴としている。
【００７８】
図１７は本実施形態に係る行列転置方法において、ＳＴＥＰ２０〜ＳＴＥＰ２３までの手順を実行後の行列データの配置を示す図である。図１７から明らかなように、最初の２行分のデータ移動を行っている。
【００７９】
図１８は本実施形態に係る行列転置方法において、ＳＴＥＰ２４〜ＳＴＥＰ２７までの手順を実行後の行列データの配置を示す図である。図１８から明らかなように、次の２行分のデータ移動を行っている。これで前半の４×４部分行列の非対角２×２要素ブロックの移動が完了している。
【００８０】
図１９は本実施形態に係る行列転置方法において、ＳＴＥＰ２４〜ＳＴＥＰ２７、ＳＴＥＰ２８〜ＳＴＥＰ３１、ＳＴＥＰ３２〜ＳＴＥＰ３５までの手順を実行後の行列データの配置を示す図である。図１９から明らかなように、２行目と６行目、３行目と７行目、４行目と８行目の配置変換がそれぞれ実施される。
【００８１】
次いで、ＳＴＥＰ３６からＳＴＥＰ５９までは、最後に８行のデータを対象に、その非対角ブロック（４×４要素）の交換処理を行うステップである。交換処理を行う２行データを対象に参照する現データをテンポラリレジスタＴｍＲ８、ＴｍＲ９に複写し、演算マスクを用いて、格納位置のＰＥから距離４のＰＥシフトをともなうアキュムレータロード命令で参照位置のレジスタを読出すことでデータの移動配置を行い、特に、８つのＰＥ毎に４つのＰＥが常に動作していることから処理の並列度が高いことを特徴としている。移動距離４の場合は、１段のＰＥシフトでは届かないので、２段のＰＥシフトで対応している。１段目は距離２のシフトを行ったデータをテンポラリレジスタに一時的に保存し、そのレジスタをさらに距離２のＰＥシフトで参照して距離４の移動配置を行う。１段目の距離２のＰＥシフトをともなう移動命令は全数のＰＥで同時並列に実行できるため、ステップ数の増加の影響は最小限にすることができる。
【００８２】
図２０は本実施形態に係る行列転置方法において、ＳＴＥＰ３６〜ＳＴＥＰ４１までの手順を実行後の行列データの配置を示す図である。図２０から明らかなように、最初の２行分のデータ移動を行っている。ＳＴＥＰ３６とＳＴＥＰ３７は、１行目のデータ（ＴｍＲ０）を距離２の下位へのＰＥシフトを行い、テンポラリレジスタＴｍＲ８に複写する手順である。同様に、ＳＴＥＰ３８とＳＴＥＰ３９は５行目のデータ（ＴｍＲ４）を距離２の上位へのＰＥシフトを行い、テンポラリレジスタＴｍＲ９に複写する手順である。以上は全てのＰＥで実行される。ＳＴＥＰ４０とＳＴＥＰ４１でさらに距離２のＰＥシフトを行って先のテンポラリレジスタを参照することで距離４のデータ移動、交換を実現している。以上は演算マスクビットの設定により、８つのＰＥ毎に４つのＰＥで同時並列に実行される。
【００８３】
以下同様にＳＴＥＰ４２〜４７、ＳＴＥＰ４８〜５３、ＳＴＥＰ５４〜５９実施後のデータ配置を以下の図に示す。すなわち、図２１は本実施形態に係る行列転置方法において、ＳＴＥＰ４２〜ＳＴＥＰ４７までの手順を実行後の行列データの配置を示す図である。また、図２２は本実施形態に係る行列転置方法において、ＳＴＥＰ４８〜ＳＴＥＰ５３までの手順を実行後の行列データの配置を示す図である。さらに、図２３は本実施形態に係る行列転置方法において、ＳＴＥＰ５４〜ＳＴＥＰ５９までの手順を実行後の行列データの配置を示す図である。
【００８４】
以上説明したように、本実施形態によれば、２×２部分行列から始めて、２のべき乗次の行列である４×４、８×８行列を対象に各々非対角位置のブロックのデータを一括交換する手順を順次行うステップを含んでいることが本実施形態の別の特徴である。
【００８５】
本実施形態によれば、行列要素を１つずつ個々に多段の移動ステップと組み合わせて移動させていた自社従来例に比べて、データのＰＥ間移動を２のべき乗の距離に分割して（例えば７つの位置移動であれば、１＋２＋４のように組み合わせて移動することに結果としてなる）それぞれの２のべき乗距離の移動は並列に一括して行うため、回路及び命令セットで制限される最大のＰＥシフト量を超えるデータの移動においてもステップ数の増加が少なく効率が良いという特有の効果を有する。
【００８６】
また、各部分行列の処理ステップでは、演算マスク値設定の工夫によって、２Ｎ個の連続位置のデータ毎に２Ｎ−１個（Ｎ＝１，２，…）のデータを対応する連続ＰＥを並列動作させることにより並列同時に移動可能となるステップを含んでいる特長的な処理手順が示されている。このことにより、並列動作するＰＥの数が常に最大に保たれており、並列処理効率はきわめて高い。
【００８７】
以上の優位点から、自社従来例に比べて処理ステップは３０％強縮減され（８７個のステップ数から５９個のステップ数に減縮）、命令数も縮減されるのでコードサイズを減らすこともできる。さらにプロセッサに集積された最大ＰＥ数まで対象行列をマッピングすることで、複数の行列データを同時一括して並列処理することができるので処理全体のスループットは高くなる。できるだけ大量のデータをプロセッサ内に留め置き、並列処理を進め、外部キャッシュやメモリとのアクセス頻度を減らすことは全体のスループット向上に資すると認められる。もしくは、本実施形態では、２×２部分行列から始めて、４×４、８×８行列を対象に各々非対角位置のブロックのデータを一括交換する手順を順次行うステップを含んでいるが、８×８行列から始めて順に４×４、２×２と繰り返し処理するステップに構成しても有効に機能することは明らかである。
【産業上の利用可能性】
【００８８】
以上詳述したように、本発明に係るプロセッサ装置及びその演算方法によれば、２のべき乗次の部分行列を対象に非対角位置のブロックのデータを一括して移動、交換するステップを含み、データのＰＥ間移動は２のべき乗の距離の移動を組み合わせ、それぞれの２のべき乗距離のデータ移動は並列に一括して行うことが可能となるため、データのＰＥ間の移動距離が自身の近傍位置に限られるような、より大規模な並列性を有するプロセッサにおいてもＰＥ間のデータ移動効率が良く、処理ステップがより少ない行列転置方法を提供することができる。また、複数の行列データの転置処理を同時一括して並列処理することができるので処理全体のスループットは高くなる。さらに、複数の行列データをプロセッサ装置内に留め置き演算処理を進めることができるので外部キャッシュやメモリとのアクセス頻度を減らすことができ処理のスループット向上を図ることができる。
【００８９】
また、本発明に係るプロセッサ装置及びその演算方法によれば、所定の演算マスク値を設定し、２Ｎ個の連続位置のデータ毎に２Ｎ−１個（Ｎ＝１，２，…）のデータに対応する連続ＰＥを並列動作させて並列同時にデータの移動、交換するステップを含むので、並列動作するＰＥの数が最大に保たれ、並列性が高く効率のきわめて高い行列転置方法を提供することができる。
【００９０】
さらに、本発明に係るプロセッサ装置及びその演算方法によれば、画像信号などの二次元信号のデータのデジタル処理において、例えばそのデータの圧縮や伸張を行うための二次元離散コサイン変換（ＤＣＴ又はＤＣＴ変換）における変換処理の次元の方向を入れ替える処理すなわち２次元行列における数学的転置処理に広く適用できる。
【符号の説明】
【００９１】
２…ＳＩＭＤ型マイクロプロセッサ、
３…プロセシングエレメント（ＰＥ）、
４…グローバルプロセッサ（ＧＰ）、
６…レジスタファイル、
８…演算アレイ、
９…シーケンシャルユニット（ＳＣＵ）、
１０…プログラムＲＡＭ、
１１…算術論理演算装置（ＡＬＵ）、
１２…データＲＡＭ、
１４…プログラムカウンタ（ＰＣ）、
２４…スタックポインタ（ＳＰ）、
３４，３８，４０，５４…レジスタ、
４４…シフト拡張器、
Ｇ０〜Ｇ３…汎用レジスタ、
ＬＳ，ＬＩ，ＬＮ…リンクレジスタ。
【先行技術文献】
【特許文献】
【００９２】
【特許文献１】特開２００５−１７４２９３号公報
【特許文献２】特開昭６２−１０７３８１号公報
【特許文献３】特開２００５−２６７６１５号公報
【特許文献４】特開２００２−１４９４００号公報
【特許文献５】特表２００２−５１８７３０号公報
【特許文献６】特許第４３９８９６５号公報
【特許文献７】特許第３７４２７４５号公報
【特許文献８】特許第３７７９５４０号公報
【図１】
0005760532.tif 000002
【図２】
0005760532.tif 000003
【図３】
0005760532.tif 000004
【図４】
0005760532.tif 000005
【図５】
0005760532.tif 000006
【図６】
0005760532.tif 000007
【図７】
0005760532.tif 000008
【図８】
0005760532.tif 000009
【図９】
0005760532.tif 000010
【図１０】
0005760532.tif 000011
【図１１】
0005760532.tif 000012
【図１２】
0005760532.tif 000013
【図１３】
0005760532.tif 000014
【図１４】
0005760532.tif 000015
【図１５】
0005760532.tif 000016
【図１６】
0005760532.tif 000017
【図１７】
0005760532.tif 000018
【図１８】
0005760532.tif 000019
【図１９】
0005760532.tif 000020
【図２０】
0005760532.tif 000021
【図２１】
0005760532.tif 000022
【図２２】
0005760532.tif 000023
【図２３】
0005760532.tif 000024