(57)【要約】【課題】処理するデータ数が演算処理装置により同時処理できるデータ数に一致しない場合でも、処理速度の低下を抑えることができる演算処理装置および演算処理装置の制御方法の提供を図る。【解決手段】メモリ２からロードする第１データのデータ数を設定(setM)するデータ数設定用レジスタ４１と、前記第１データを、ロード開始アドレスおよび前記データ数を指定し、中間状態を保持するロード用アライメントレジスタ４３および第１レジスタ４２を用いて、ロード制御(loadMx16)するロード・アライメントレジスタ用制御回路５３と、演算処理された第２データを、ストア開始アドレスおよび前記データ数を指定し、中間状態を保持するストア用アライメントレジスタ４５および第２レジスタ４４を用いてストア制御(storeMx16)するストア・アライメントレジスタ用制御回路５４と、を有する。【選択図】図５
2016045890.tif 000002
【特許請求の範囲】
【請求項１】
メモリに連続して保持された第１データをロードし、前記第１データを演算処理した第２データを、前記メモリに連続してストアする演算処理装置であって、
前記メモリからロードする前記第１データのデータ数を設定するデータ数設定用レジスタと、
前記第１データを、ロード開始アドレスおよび前記データ数を指定し、中間状態を保持するロード用アライメントレジスタおよび第１レジスタを用いて、ロード制御するロード・アライメントレジスタ用制御回路と、
演算処理された前記第２データを、ストア開始アドレスおよび前記データ数を指定し、中間状態を保持するストア用アライメントレジスタおよび第２レジスタを用いてストア制御するストア・アライメントレジスタ用制御回路と、を有する、
ことを特徴とする演算処理装置。
【請求項２】
さらに、
前記ストア開始アドレスから選択パターンを決定し、前記ストア用アライメントレジスタを用いて有効なデータを前記メモリにストアするフラッシュ制御を行うフラッシュ命令用制御回路を有する、
ことを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記演算処理装置は、SIMDプロセッサであり、
前記第１レジスタは、ロード用SIMDレジスタであり、
前記第２レジスタは、ストア用SIMDレジスタであり、
前記データ数は、前記SIMDプロセッサにおけるSIMD幅よりも小さい、
ことを特徴とする請求項１または請求項２に記載の演算処理装置。
【請求項４】
前記ロード・アライメントレジスタ用制御回路は、
前記第１データが境界を跨ぐ場合、前記メモリに対する第１アクセスにより前記ロード用アライメントレジスタに保持された前記第１データの第１部分データに対して、前記メモリに対する第２アクセスを行って取得したデータから前記第１データの残りの第２部分データを連接してロードし、
前記第１データが境界を跨がない場合、前記メモリに対する前記第２アクセスを行うことなく、前記第１アクセスにより前記ロード用アライメントレジスタに保持されたデータから前記第１データを選択してロードする、ように制御する、
ことを特徴とする請求項３に記載の演算処理装置。
【請求項５】
前記ストア・アライメントレジスタ用制御回路は、
前記第２データが境界を跨ぐ場合、前記ストア用SIMDレジスタに保持されたデータから、前記ストア開始アドレスと同じ境界内にストアされるデータを選択して前記メモリにストアし、
前記第２データが境界を跨がない場合、前記ストア用SIMDレジスタに保持されたデータを前記ストア用アライメントレジスタに追加する、ように制御する、
ことを特徴とする請求項３に記載の演算処理装置。
【請求項６】
メモリに連続して保持された第１データをロードし、前記第１データを演算処理した第２データを、前記メモリに連続してストアする演算処理装置の制御方法であって、
前記メモリからロードする前記第１データのデータ数を設定し、
前記第１データを、ロード開始アドレスおよび前記データ数を指定してロードし、
演算処理された前記第２データを、ストア開始アドレスおよび前記データ数を指定してストアする、
ことを特徴とする演算処理装置の制御方法。
【請求項７】
メモリに連続して保持された第１データをロードし、前記第１データを演算処理した第２データを、前記メモリに連続してストアする演算処理装置の制御プログラムであって、
前記演算処理装置に、
前記メモリからロードする前記第１データのデータ数を設定し、
前記第１データを、ロード開始アドレスおよび前記データ数を指定してロードし、
演算処理された前記第２データを、ストア開始アドレスおよび前記データ数を指定してストアする、のを実行させる、
ことを特徴とする演算処理装置の制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書で言及する実施例は、演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
近年、大量のデータに対して順次同様の処理を行うようなプログラムに対して、複数データを同時に演算することで高性能に処理することができるSIMD(Single Instruction Multiple Data)プロセッサが様々な分野で利用されている。
【０００３】
例えば、無線通信処理や動画像のデコードといった大量のデータを高速に処理するシステムでは、１命令で複数のデータを処理することができるSIMDプロセッサが利用されることが多い。なお、SIMDプロセッサにおいて、メモリアクセスは、通常、SIMDレジスタのビット幅で行われる。
【０００４】
ところで、従来、演算処理装置(SIMDプロセッサ)およびその制御方法としては、様々な提案がなされている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第７２１９２１２号明細書
【特許文献２】特公昭６１−０２７７８０号公報
【特許文献３】特公昭６２−０２６７２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述したように、SIMDプロセッサ(演算処理装置)は、様々な分野で利用されているが、メモリアクセスは、通常、SIMDレジスタのビット幅で行われる。このようなSIMDプロセッサにおいて、例えば、プログラムを実行中、アライメントされていないデータのロードストアを行うことがある。
【０００７】
ここで、例えば、メモリに連続して存在するSIMD幅に一致したサイズのアライメントされていないデータを連続してロードまたはストアする場合、１命令で１データをロードまたはストアする命令が知られている。
【０００８】
これらの命令は、中間状態を保持するアライメントレジスタにロードデータまたはストアデータを部分的に保持しておき、アドレスから決定されるパターンに従って、アライメントレジスタ内データとSIMDレジスタ内データまたはメモリデータを合成する。これにより、１命令で毎サイクル、データをロードまたはストアすることを可能としている。
【０００９】
また、アプリケーションによっては、例えば、SIMD幅以下の個数でデータの処理を行うことがあり、その場合、データ処理時のデータ数とSIMD幅の差を吸収するようにプログラムを作成している。
【００１０】
例えば、SIMD幅が８でデータ処理時のデータ数が６の場合、ループを展開し、１ループで２４個のデータを処理する。すなわち、８個単位でロードを３回行い、さらに、６個単位でデータ処理を４回行った後、８個単位でストアを３回行うようにプログラムを作成している。
【００１１】
このとき、８個のデータ３つから６個のデータ４つに並べ替える処理と、６個のデータ３つを８個のデータ４つに並べ替える処理を行うことになる。すなわち、ループ展開を行い、さらに、データの並べ替えを行うため、コードサイズが増えて処理速度の低下を招くことになる。
【課題を解決するための手段】
【００１２】
一実施形態によれば、メモリに連続して保持された第１データをロードし、前記第１データを演算処理した第２データを、前記メモリに連続してストアする演算処理装置が提供される。前記演算処理装置は、前記メモリからロードする前記第１データのデータ数を設定するデータ数設定用レジスタと、ロード・アライメントレジスタ用制御回路と、ストア・アライメントレジスタ用制御回路と、を有する。
【００１３】
前記ロード・アライメントレジスタ用制御回路は、前記第１データを、ロード開始アドレスおよび前記データ数を指定し、中間状態を保持するロード用アライメントレジスタおよび第１レジスタを用いて、ロード制御する。前記ストア・アライメントレジスタ用制御回路は、演算処理された前記第２データを、ストア開始アドレスおよび前記データ数を指定し、中間状態を保持するストア用アライメントレジスタおよび第２レジスタを用いてストア制御する。
【発明の効果】
【００１４】
開示の演算処理装置および演算処理装置の制御方法は、処理するデータ数が演算処理装置により同時処理できるデータ数に一致しない場合でも、処理速度の低下を抑えることができるという効果を奏する。
【図面の簡単な説明】
【００１５】
【図１】図１は、演算処理装置の一例を示すブロック図である。
【図２】図２は、図１に示す演算処理装置における処理の一例を説明するための図(その１)である。
【図３】図３は、図１に示す演算処理装置における処理の一例を説明するための図(その２)である。
【図４】図４は、図１に示す演算処理装置における処理の一例を説明するための図(その３)である。
【図５】図５は、演算処理装置の一実施例を示すブロック図である。
【図６】図６は、図１に示す演算処理装置により実行される命令の一例、並びに、図５に示す演算処理装置により実行される命令の一例を比較して示す図である。
【図７】図７は、図５に示す演算処理装置により実行されるロード命令の動作の一例を説明するための図(その１)である。
【図８】図８は、図５に示す演算処理装置により実行されるロード命令の動作の一例を説明するための図(その２)である。
【図９】図９は、図５に示す演算処理装置により実行されるロード命令の動作の一例を説明するための図(その３)である。
【図１０】図１０は、図５に示す演算処理装置により実行されるロード命令によるSIMDレジスタ用制御回路の処理の一例を説明するためのフローチャートである。
【図１１】図１１は、図５に示す演算処理装置により実行されるロード命令によるロード・アライメントレジスタ用制御回路の処理の一例を説明するためのフローチャートである。
【図１２】図１２は、図５に示す演算処理装置により実行されるストア命令の動作の一例を説明するための図(その１)である。
【図１３】図１３は、図５に示す演算処理装置により実行されるストア命令の動作の一例を説明するための図(その２)である。
【図１４】図１４は、図５に示す演算処理装置により実行されるストア命令の動作の一例を説明するための図(その３)である。
【図１５】図１５は、図５に示す演算処理装置により実行されるストア命令の動作の一例を説明するための図(その４)である。
【図１６】図１６、図５に示す演算処理装置により実行されるストア命令によるメモリアクセス用制御回路の処理の一例を説明するためのフローチャートである。
【図１７】図１７は、図５に示す演算処理装置により実行されるストア命令によるストア・アライメントレジスタ用制御回路の処理の一例を説明するためのフローチャートである。
【図１８】図１８は、図５に示す演算処理装置により実行されるフラッシュ命令の動作の一例を説明するための図である。
【図１９】図１９は、図５に示す演算処理装置により実行されるフラッシュ命令によるフラッシュ命令用制御回路の処理の一例を説明するためのフローチャートである。
【発明を実施するための形態】
【００１６】
まず、本実施例の演算処理装置および演算処理装置の制御方法を詳述する前に、図１〜図４を参照して、演算処理装置の一例およびその演算処理装置における処理の一例を説明する。
【００１７】
図１は、演算処理装置の一例を示すブロック図である。図１に示されるように、演算処理装置は、命令メモリ(ＩＲＡＭ)１，データメモリ(メモリ：ＤＲＡＭ)２およびＣＰＵコア(SIMDプロセッサ)３を含む。
【００１８】
SIMDプロセッサ３は、プログラムカウンタ(ＰＣ)３１，デコーダ３２，SIMDレジスタ３３，ＡＬＵ(Arithmetic Logic Unit)３４０〜３４７，ロード用アライメントレジスタ３３ａ，３３ｂおよびストア用アライメントレジスタ３３ｃを含む。なお、図１において、SIMDレジスタ３３は、１６bit×８＝１２８bitのビット幅とされている。
【００１９】
すなわち、SIMDプロセッサ３において、メモリアクセスは、SIMDレジスタ３３のビット幅である１２８bitで行われる。ここで、ビット幅が１２８bitの場合、１６bit精度であれば８データ(SIMD幅＝８)となり、３２bit精度であれば４データ(SIMD幅＝４)となる。
【００２０】
前述したように、SIMDプロセッサ(演算処理装置)は、様々な分野で利用されているが、例えば、プログラムを実行中、アライメントされていないデータのロードストアを行うことがある。
【００２１】
ここで、例えば、データメモリ２に連続して存在するSIMD幅に一致したサイズのアライメントされていないデータを連続してロードまたはストアする場合、１命令で１データをロードまたはストアする命令が知られている。
【００２２】
これらの命令は、中間状態を保持するアライメントレジスタにロードデータまたはストアデータを部分的に保持しておき、アドレスから決定されるパターンに従って、アライメントレジスタ内データとSIMDレジスタ内データまたはメモリデータを合成する。これにより、１命令で毎サイクル、データをロードまたはストアすることを可能としている。
【００２３】
また、アプリケーションによっては、SIMD幅以下の個数でデータの処理を行うことがあり、その場合、データ処理時のデータ数とSIMD幅の差を吸収するようにプログラムを作成している。
【００２４】
図２〜図４は、図１に示す演算処理装置における処理の一例を説明するための図であり、SIMDレジスタのビット幅が１２８bit、SIMD幅が８、そして、データ処理時のデータ数が６の場合を説明するためのものである。なお、上記の条件は、単なる一例であり、他の様々な例もあり得るのはいうまでもない。
【００２５】
図２〜図４は、次の処理(命令列，プログラム)Ｐ０を、図１に示すSIMDプロセッサ(演算処理装置)により実行する場合を説明するためのものである。
short A[N], B[N];
int i;
for(i = 0; i < N; i++) ｛
B[i] = op(A[i]);
｝
…… ［Ｐ０］
【００２６】
まず、上記処理Ｐ０は、SIMDプロセッサにより効率よく処理させるために(SIMD化のために)変形すると、次の処理(命令列，プログラム)Ｐ１のようになる。
short A[N];
simd8x16 B[N/6];
simd8x16 va, vb, vc;
simd8x16 vw, vx, vy, vz;
for(i = 0; i < N; i+24) ｛
va = load8x16(&A[i]);
vb = load8x16(&A[i+8]);
vc = load8x16(&A[i+16]);
vw = sel(va, vb, mode, 6);
vx = sel(va, vb, mode, 6);
vy = sel(vb, vc, mode, 6);
vz = sel(vb, vc, mode, 6);
vw = op8x16(vw);
vx = op8x16(vx);
vy = op8x16(vy);
vz = op8x16(vz);
va = sel(vw, vx, mode, 8);
vb = sel(vx, vy, mode, 8);
vc = sel(vy, vz, mode, 8);
store8x16(va, &B[i]);
store8x16(vb, &B[i]);
store8x16(vc, &B[i]);
｝
…… ［Ｐ１］
【００２７】
ここで、図２(a)，図３(a)および図４(a)は、上記処理Ｐ１において、実行する命令列Ｐ１１，Ｐ１２およびＰ１３を示し、図２(b)，図３(b)および図４(b)は、それぞれの処理の様子を示す。
【００２８】
まず、図２(a)および図２(b)に示されるように、命令列Ｐ１１により、データメモリ２から１２８bit(＝１６bit×８)のビット幅のデータをロードして、SIMDレジスタ(アライメントレジスタ)にロードデータを部分的に保持する。
【００２９】
すなわち、「va = load8x16(&A[i]);」により、メモリ(開始アドレス0x1000)から１６bit単位(１要素)の８個のデータA0〜A7をロードしてレジスタｖａに保持する。また、「vb = load8x16(&A[i+8]);」により、メモリ(開始アドレス0x1010)から１６bit単位の８個のデータA8〜A15をロードしてレジスタｖｂに保持する。さらに、「vc = load8x16(&A[i+16]);」により、メモリ(開始アドレス0x1020)から１６bit単位の８個のデータA16〜A23をロードしてレジスタｖｃに保持する。
【００３０】
また、「vx = sel(va, vb, mode, 6);」により、レジスタｖａ(ｖｂ)から６個のデータA0〜A5を選択してレジスタｖｗに保持し、「vx = sel(va, vb, mode, 6);」により、レジスタｖａ，ｖｂから６個のデータA6〜A11を選択してレジスタｖｘに保持する。
【００３１】
そして、「vy = sel(vb, vc, mode, 6);」により、レジスタｖｂ，ｖｃから６個のデータA12〜A17を選択してレジスタｖｙに保持し、「vz = sel(vb, vc, mode, 6);」により、レジスタｖｂ，ｖｃから６個のデータA18〜A23を選択してレジスタｖｚに保持する。なお。レジスタｖｗ〜ｖｚにおいて、データ０は、ドントケア(don't care)のデータを示す。
【００３２】
次に、図３(a)および図３(b)に示されるように、命令列Ｐ１２により、各レジスタ(ｖｗ〜ｖｚ)に保持されたデータに対して演算処理を実行し、その演算処理されたデータデータをそれぞれのレジスタに保持する。
【００３３】
すなわち、「vw = op8x16(vw);」により、レジスタｖｗに保持されたデータA0〜A5に対して演算処理を実行し、その演算処理されたデータデータB0〜B5をレジスタｖｗに保持する。また、「vx = op8x16(vx);」により、レジスタｖｘに保持されたデータA6〜A11に対して演算処理を実行し、その演算処理されたデータデータB6〜B11をレジスタｖｘに保持する。
【００３４】
さらに、「vy = op8x16(vy);」により、レジスタｖｗに保持されたデータA12〜A17に対して演算処理を実行し、その演算処理されたデータデータB12〜B17をレジスタｖｙに保持する。また、「vz = op8x16(vz);」により、レジスタｖｚに保持されたデータA18〜A23に対して演算処理を実行し、その演算処理されたデータデータB18〜B23をレジスタｖｚに保持する。
【００３５】
そして、図４(a)および図４(b)に示されるように、命令列Ｐ１３により、各レジスタ(ｖｗ〜ｖｚ)に保持された、演算処理されたデータをSIMD幅に一致するように変換し、データメモリ２にストアする。
【００３６】
すなわち、「va = sel(vw, vx, mode, 8);」により、レジスタｖｗ，ｖｘから８個のデータB0〜B7を選択してレジスタｖａに保持し、「vb = sel(vx, vy, mode, 8);」により、レジスタｖｘ，ｖｙから８個のデータB8〜B15を選択してレジスタｖｂに保持する。また、「vc = sel(vy, vz, mode, 8);」により、レジスタｖｙ，ｖｚから８個のデータB16〜B23を選択してレジスタｖｃに保持する。
【００３７】
さらに、「store8x16(va, &B[i]);」により、レジスタｖａに保持された１２８bitのビット幅のデータB0〜B7をデータメモリ(開始アドレス0x8000)２にストアする。また、「store8x16(vb, &B[i]);」により、レジスタｖｂに保持されたデータB8〜B15をデータメモリ(開始アドレス0x8010)２にストアする。そして、「store8x16(vc, &B[i]);」により、レジスタｖｃに保持されたデータB16〜B23をデータメモリ(開始アドレス0x8020)２にストアする。
【００３８】
すなわち、上述した処理(プログラム)Ｐ１は、１ループで処理するデータ数がSIMD幅８とデータ処理時のデータ数６の最小公倍数である２４となるようにしたもので、まず、ロードを３回行って、データをSIMDレジスタｖａ，ｖｂ，ｖｃに保持(格納)する。
【００３９】
その後、データをデータ処理時のデータ数に整形してSIMDレジスタｖｗ，ｖｘ，ｖｙ，ｖｚに保持し、演算を行う。さらに、演算後は、SIMD幅にデータをまとめ直し、ストアを３回行う。
【００４０】
このように、例えば、SIMD幅が８でデータ処理時のデータ数が６であるようなケースでは、ループを展開し、１ループで２４個のデータを処理する。例えば、８個単位でロードを３回行い、さらに、６個単位でデータ処理を４回行った後、８個単位でストアを３回行うようにプログラムを作成する。このとき、８個のデータ３つから６個のデータ４つに並べ替える処理と、６個のデータ３つを８個のデータ４つに並べ替える処理を行うことになる。
【００４１】
すなわち、SIMDプロセッサにおいて、例えば、SIMD幅以下のデータ数で処理を行う場合、ループごとに処理するデータ数が、データ処理時のデータ数とSIMD幅の最小公倍数となるようにループ展開するため、コードサイズの増大を招く。このように、ループ展開およびデータの並べ替えを行うと、コードサイズが増えて処理速度の低下を招くことになる。
【００４２】
以下、本実施例の演算処理装置および演算処理装置の制御方法を、添付図面を参照して詳述する。図５は、演算処理装置の一実施例を示すブロック図である。
【００４３】
図５に示されるように、演算処理装置は、命令メモリ１，データメモリ(メモリ)２，データ数設定用レジスタ４１，ロード用SIMDレジスタ(第１レジスタ)４２，ロード用アライメントレジスタ４３およびストア用SIMDレジスタ(第２レジスタ)４４を含む。
【００４４】
また、演算処理装置は、ストア用アライメントレジスタ４５，メモリアクセス用制御回路５１，SIMDレジスタ用制御回路５２およびロード・アライメントレジスタ用制御回路５３を含む。さらに、演算処理装置は、ストア・アライメントレジスタ用制御回路５４およびフラッシュ命令用制御回路５５を含む。
【００４５】
本実施例の演算処理装置には、新たに追加する４つの命令(setM, loadMx16, storeMx16, flushMx16)を処理するための回路が設けられている。これら４つの命令は、命令メモリ１に格納される。なお、図５は、新たに追加する４つの命令を処理するレジスタおよび制御回路に注目して描いたものであり、他に様々な構成要素を含むのはいうまでもない。
【００４６】
ここで、新たなロード命令(loadMx16)は、データ数設定用レジスタ４１，ロード用SIMDレジスタ４２，ロード用アライメントレジスタ４３，SIMDレジスタ用制御回路５２およびロード・アライメントレジスタ用制御回路５３を使用して処理する。さらに、新たなロード命令は、命令メモリ１およびデータメモリ２も使用してロード処理を行う。
【００４７】
また、新たなストア命令(storeMx16)は、データ数設定用レジスタ４１，ストア用SIMDレジスタ４４，ストア用アライメントレジスタ４５，メモリアクセス用制御回路５１およびストア・アライメントレジスタ用制御回路５４を使用して処理する。さらに、新たなストア命令は、命令メモリ１およびデータメモリ２も使用してストア処理を行う。
【００４８】
そして、新たなフラッシュ命令(flushMx16)は、データメモリ２，ストア用アライメントレジスタ４５およびフラッシュ命令用制御回路５５を使用してフラッシュ処理を行う。なお、新たなセット命令(setM)を含めた４つの命令に関しては、後に詳述する。
【００４９】
なお、本実施例は、演算処理装置および演算処理装置の制御方法だけでなく、演算処理装置の制御プログラムとして実現することも可能なのは言うまでもない。このように、本実施例は、例えば、メモリ(データメモリ)に連続して存在するデータに対して、SIMDレジスタに関して半端なサイズ(SIMD幅よりもデータ数が少ない)データをSIMD演算用にロードし、メモリの連続した領域にストアする場合に適したものである。
【００５０】
ここで、本実施例を概説すると、次のようになる。まず、扱うデータサイズを指定することが可能なロード命令(loadMx16)およびストア命令(storeMx16)を用意し、さらに、そのデータサイズを設定する命令(setM)も用意する。
【００５１】
これらの命令とSIMDレジスタ(ロードおよびストア用SIMDレジスタ４２，４４)と同じデータ幅のデータ一時保存レジスタ(ロードおよびストア用アライメントレジスタ４３，４５)を用いて１命令につき１データのロードストア処理を行う。ロードを行う際は、まず、知られているアライメントロード準備命令を用い、与えられるアドレスのバウンダリからデータを取得し、データ一時保存レジスタに準備する。
【００５２】
さらに、用意したロード命令を用い、先の命令がアクセスしたバウンダリの隣のバウンダリから残りのデータをロードし、データ一時保存レジスタにあるデータとマージして目的のレジスタに書き込む。
【００５３】
そして、同じサイクル中、命令により与えられるアドレスと設定されたデータサイズを考慮して、同じバウンダリからデータを取得しデータ一時保存レジスタに準備する。この後、用意したロード命令を繰り返し用いることで、１命令につき１データをロードすることが可能となる。
【００５４】
一方、ストアを行う際は、命令より与えられるアドレスから同一のバウンダリにストアできるデータを判定してストアを行う。また、残りのデータについてデータサイズを考慮して有効なデータのみデータ一時保存レジスタに準備する。
【００５５】
次のストア命令では、データ一時保存レジスタに準備されているデータと新たなSIMDレジスタにあるデータをマージして、新たに命令より指示されるバウンダリへストアする。このとき、前のストア命令と同様に同一のバウンダリに入りきらない残りのデータはデータ一時保存レジスタに準備する。
【００５６】
以降、用意したストア命令を繰り返し用いることで、１命令につき１データをストアすることが可能となる。このように、本実施例では、データを操作する際に、アドレスだけでなくデータサイズも考慮するようになっている。なお、ストアアドレスと設定可能なデータ数からストア用アライメントレジスタ(データ一時保存レジスタ)のデータをストアするフラッシュ命令(flushMx16)を準備するのが好ましい。
【００５７】
そして、本実施例によれば、データ処理時のデータ数でロードまたはストアできるため、ループ展開をせずに演算処理することが可能となり、コードサイズを低減することができる。すなわち、本実施例によれば、処理するデータ数が演算処理装置により同時処理できるデータ数に一致しない場合でも、処理速度の低下を抑えることができる。
【００５８】
図６は、図１に示す演算処理装置により実行される命令の一例、並びに、図５に示す演算処理装置により実行される命令の一例を比較して示す図である。ここで、図１の演算処理装置により実行される処理(命令列)Ｐ１は、図５の演算処理装置により実行される処理Ｐ２のように変形することができる。
【００５９】
すなわち、前述した処理Ｐ１(処理Ｐ０)は、上述した４つの新たな命令を使用して、図５に示す演算処理装置(SIMDプロセッサ)で実行可能な、次の処理(命令列)Ｐ２のように変形することができる。
short A[N];
simd8x16 B[N/6];
simd8x16 va;
valign vb, vc;  //アライメントレジスタの宣言
setM(6);    //データサイズを設定
vb = load_prime8x16(&A[0]);
zero_valign(vc);
for(i = 0; i < N; i+6) ｛
loadMx16(va, vb, &A[i]);
va = op8x16(va);
storeMx16(va, vc &B [i]);
｝
flushMx16(vc, &B[i]);
…… ［Ｐ２］
【００６０】
ここで、ｖａは、SIMDレジスタ(ロード用SIMDレジスタ４２およびストア用SIMDレジスタ４４)を示し、ｖｂは、ロード用アライメントレジスタ４３、そして、ｖｃは、ストア用アライメントレジスタ４５を示す。なお、レジスタｖａ，ｖｂ，ｖｃは、例えば、１６bit×８＝１２８bitの同じハード構成を有している。
【００６１】
図６における処理Ｐ１の命令列Ｐ１０と処理Ｐ２の命令列Ｐ２０の比較から明らかなように、SIMD幅が８(１６bit×８)でデータ処理時のデータ数が６(１６bit×６)の場合、変数の宣言とループ構文を除いた命令数は、１７命令から７命令に削減することができる。これにより、コードサイズを低減して処理速度を向上させることが可能となる。
【００６２】
次に、新たに追加する４つの命令(setM, loadMx16, storeMx16, flushMx16)の仕様を説明する。なお、本明細書では、SIMDレジスタのビット幅が１２８bit、SIMD幅が８、そして、データ処理時のデータ数が６の場合を例として説明するが、これは単なる例であり、本実施例の適用は、このような場合に限定されないのはもちろんである。
【００６３】
まず、新たなデータ数設定命令「setM」の仕様(＜命令フォーマット＞および＜命令の動作＞)は、次のようになる。
＜命令フォーマット＞
setM(int s)
＜命令の動作＞
データ数設定用レジスタ４１にｓを書き込む。
【００６４】
また、新たなロード命令「loadMx16」の仕様は、ｒを出力先のSIMDレジスタ、ｕをアライメントレジスタ、そして、ａｄｄｒをロードアドレス(開始アドレス)とすると、次のようになる。
＜命令フォーマット＞
loadMx16(simd8x16 r, valign u, int* addr)
＜命令の動作＞
中間状態を保持するためのロード用アライメントレジスタ４３(ｕ)を用いて、ロード開始アドレスａｄｄｒからｓ個のデータを、ロード用SIMDレジスタ４２(ｒ)に保持する。
【００６５】
さらに、新たなストア命令「storeMx16」の仕様は、ｒを入力元のSIMDレジスタ、ｕをアライメントレジスタ、そして、ａｄｄｒをストアアドレス(開始アドレス)とすると、次のようになる。
＜命令フォーマット＞
storeMx16(simd8x16 r, valign u, int* addr) 
＜命令の動作＞
中間状態を保持するためのストア用アライメントレジスタ４５(ｕ)を用いて、ストア用SIMDレジスタ４４(ｒ)からｓ個のデータを取り出し、ストア開始アドレスａｄｄｒにストア(ストア用SIMDレジスタ４４に保持)する。
【００６６】
そして、新たなフラッシュ命令「flushMx16」の仕様は、ｕをアライメントレジスタ、そして、ａｄｄｒをストアアドレス(開始アドレス)とすると、次のようになる。
＜命令フォーマット＞
flushMx16(valign u, int* addr)
＜命令の動作＞
ストア開始アドレスａｄｄｒから選択パターンを決定し、ストア用アライメントレジスタ４５(ｕ)から有効なデータを読み出してストアする(データメモリ２に書き込む)。
【００６７】
以下、新たな４つの命令の動作例を詳述するが、図１〜図４を参照して説明したのと同じ、SIMDレジスタのビット幅が１２８bit、SIMD幅が８、そして、データ処理時のデータ数が６の場合を例として説明する。ただし、本実施例の適用は、このような場合に限定されないのはいうまでもない。
【００６８】
まず、新たなロード命令について説明する。図７〜図９は、図５に示す演算処理装置により実行されるロード命令の動作の一例を説明するための図である。ここで、図７(a)，図８(a)および図９(a)は、前述した処理Ｐ２において、実行する命令列Ｐ２１，Ｐ２２およびＰ２２を示し、図７(b)，図８(b)および図９(b)は、それぞれの処理の様子を示す。なお、以下の説明では、データメモリ２の開始アドレス0x1006から要素が１６bitの配列Ａ(１６bit単位のデータA0，A1，A2，…)が連続して保持されているものとする。
【００６９】
図７(a)および図７(b)に示されるように、事前準備として、命令列Ｐ２１により、新たなデータ数設定命令「setM」を用いてロードするデータ数ｓをレジスタに設定する。さらに、命令列Ｐ２１により、専用命令「load_prime」を用いて、ロードアドレスから境界(バウンダリ)までのデータをアライメントレジスタに読み出す。
【００７０】
すなわち、「setM(6);」により、ロードするデータ数ｓ＝６をデータ数設定用レジスタ４１に設定する。さらに、専用命令「vb = load_prime8x16(&A[0]);」により、ロードアドレス(開始アドレス)0x1006から境界0x1010までの１６bit単位のデータA0〜A4をロード用アライメントレジスタ４３(ｖｂ)にロードする。
【００７１】
ここで、ロードアドレスとｓの値から、ロードするデータが同じ境界内にすべて存在するかどうかを判定し、境界を跨ぐ場合には、図８(a)および図８(b)に示す処理を行い、境界内にすべて存在する場合は、図９(a)および図９(b)に示す処理を行う。
【００７２】
すなわち、命令列Ｐ２２(「loadMx16(va, vb, &A[i]);」)により、ロードアドレス(0x1006)とｓの値(ｓ＝６)から、ロードするデータが同じ境界内にすべて存在するかどうかを判定する。
【００７３】
具体的に、図８(a)および図８(b)では、ロードアドレス0x1006のデータA0から６個のデータA0〜A5をロードするため、ロードするデータが境界を跨ぐ(境界内にすべては存在しない)ことになる。
【００７４】
そして、ロードするデータが境界を跨いでいる場合は、命令列Ｐ２２によりメモリアクセスを行い、ロードデータとロード用アライメントレジスタ４３(ｖｂ：読み出し側)内のデータから６個のデータA0〜A5を選択し、１２８bitにゼロ拡張して出力する。
【００７５】
すなわち、データA0〜A5を、ロード用SIMDレジスタ４２(ｖａ)に保持(格納)する。また、ロードデータにおけるロード対象でないデータA6〜A12は、ロード用アライメントレジスタ４３(ｖｂ：書き込み側)に出力する。
【００７６】
一方、図９(a)および図９(b)では、ロードアドレス0x1002のデータA6から６個のデータA6〜A11をロードするため、ロードするデータが同じ境界内にすべて存在することになる。
【００７７】
すなわち、ロードするデータが同じ境界内にすべて存在する場合は、命令列Ｐ２２によりメモリアクセスは行わずに、ロード用アライメントレジスタ４３(ｖｂ：読み出し側)から６個のデータA6〜A11を選択し、１２８bitにゼロ拡張して出力する。
【００７８】
すなわち、データA6〜A11を、ロード用SIMDレジスタ４２(ｖａ)に保持する。そして、ロード用アライメントレジスタ４３(ｖｂ：書き込み側)では、読み出したデータデータA6〜A11に対応する６個分だけ右側にシフトした、データA12が最上位アドレスとして保持される。
【００７９】
図１０は、図５に示す演算処理装置により実行されるロード命令によるSIMDレジスタ用制御回路の処理の一例を説明するためのフローチャートである。なお、例として、SIMD幅は８で、アドレスは３２bitとして説明する。
【００８０】
図１０に示されるように、ロード命令によるSIMDレジスタ用制御回路の処理が開始すると、SIMDレジスタ用制御回路５２は、まず、ステップＳＴ１０において、ロードアドレスの最下位ビットから２〜４ビット目(addr[3:1])とロードするデータ数ｓを加算する。
【００８１】
さらに、ステップＳＴ１１に進んで、加算した結果、キャリーが発生したかどうかを判定する。ステップＳＴ１１において、キャリーが発生したと判定する(Ｙｅｓ)と、ステップＳＴ１２に進み、Ｘ＝8−addr[3:1]を算出する。
【００８２】
次に、ステップＳＴ１３に進んで、ロード用アライメントレジスタ４３の下位からＸ個のデータを抜き出し、ステップＳＴ１４に進んで、Ｙ＝(addr[3:1]+s−8)を算出する。さらに、ステップＳＴ１５に進んで、ロードしたデータの下位からＹ個のデータ抜き出し、ステップＳＴ１６に進んで、ロードしたデータを上位として抜き出した２つのデータと連接する。
【００８３】
すなわち、ステップＳＴ１２〜ＳＴ１６では、ロード用アライメントレジスタ４３(ｕ)の下位(8-addr[3:1])個のデータ(Ｘ)と、ロードデータの下位(addr[3:1]+s−8)個のデータを合成(連接)する。そして、ステップＳＴ１７に進んで、連接したデータを１２８bitにゼロ拡張してロード用SIMDレジスタ４２に送って保持し、処理を終了する。
【００８４】
なお、ステップＳＴ１１において、キャリーは発生していないと判定する(Ｎｏ)と、ステップＳＴ１８に進んで、Ｘ＝ｓとしてステップＳＴ１９に進む。ステップＳＴ１９では、ロード用アライメントレジスタ４３の下位からＸ個(データ数ｓだけ)を抜き出し、処理を終了する。
【００８５】
図１１は、図５に示す演算処理装置により実行されるロード命令によるロード・アライメントレジスタ用制御回路の処理の一例を説明するためのフローチャートである。
【００８６】
図１１に示されるように、ロード命令によるロード・アライメントレジスタ用制御回路の処理が開始すると、ロード・アライメントレジスタ用制御回路５３は、まず、ステップＳＴ２０において、ステップＳＴ１０と同様に、addr[3:1]+sを算出する。すなわち、ロードアドレスの最下位ビットから２〜４ビット目(addr[3:1])とロードするデータ数ｓを加算する。
【００８７】
さらに、ステップＳＴ２１に進んで、加算した結果、キャリーが発生したかどうかを判定する。ステップＳＴ２１において、キャリーが発生したと判定する(Ｙｅｓ)と、ステップＳＴ２２に進んで、Ｚ＝16−(addr[3:1]+s)を算出する。
【００８８】
そして、ステップＳＴ２３に進んで、ロードしたデータの上位からＺ個(16−addr[3:1]−s個)のデータをロード用アライメントレジスタ４３に書き込んで、処理を終了する。一方、ステップＳＴ２１において、キャリーは発生していないと判定する(Ｎｏ)と、ステップＳＴ２４に進んで、ロード用アライメントレジスタ４３のデータを、データ数ｓ個分だけ右シフトして処理を終了する。
【００８９】
以上のようにして、ロード処理が終了すると、例えば、「va = op8x16(va);」により、ロード用SIMDレジスタｖaに保持されたデータA0〜A5に対して演算処理を実行し、その演算処理されたデータデータをレジスタｖaに保持する。その後、以下に説明するストア処理を行う。
【００９０】
すなわち、SIMD命令による演算処理は、例えば、図１〜図４を参照して説明したのと同様であり、上述したロード処理、演算処理、および、後述するストア処理を繰り返し実行することになる。
【００９１】
次に、新たなストア命令について説明する。図１２〜図１５は、図５に示す演算処理装置により実行されるストア命令の動作の一例を説明するための図である。ここで、図１２(a)，図１３(a)，図１４(a)および図１５(a)は、前述した処理Ｐ２において、実行する命令列Ｐ２３，Ｐ２４，Ｐ２４およびＰ２５を示す。また、図１２(b)，図１３(b)，図１４(b)および図１５(b)は、それぞれの処理の様子を示す。なお、以下の説明では、データメモリ２の開始アドレス0x1006から要素が１６bitの配列Ａ(１６bit単位のデータA0，A1，A2，…)が連続して保持されているものとする。
【００９２】
図１２(a)および図１２(b)に示されるように、まず、命令列Ｐ２３により、ストア用アライメントレジスタをゼロクリアする。すなわち、「zero_valign(vc);」により、ストア用アライメントレジスタ４５(ｖｃ)をゼロクリアする。
【００９３】
次に、図１３(a)および図１３(b)に示されるように、命令列Ｐ２４により、ストア用アライメントレジスタ４５に所定の演算処理が行われたデータA0〜A5をストアする。すなわち、「storeMx16(va, vc &B [i]);」は、ストアアドレス(開始アドレス)とデータ数ｓの値を加算し、境界を跨ぐかどうかを判定する。
【００９４】
具体的に、図１３(b)に示されるように、例えば、ストアアドレス0x1006から６個のデータA0〜A5をストアする場合は、境界を跨ぐことになる。この境界を跨ぐ場合には、メモリアクセスを行って、ストア用SIMDレジスタ４４に保持されたデータA0〜A5から、ストアアドレスと同じ境界内にストアされるデータA0〜A4を選び、データメモリ２に書き込む(ストアする)。
【００９５】
なお、例えば、初期状態において、モードビットＭＢは『０』(モードビットは設定されていない)とされているため、ストア用アライメントレジスタ４５(ｖｃ)内のデータとの合成は行わない。
【００９６】
そして、ストア用SIMDレジスタ４４に保持されたデータA0〜A5において、選択されなかったデータ(あふれたデータ)A5が存在する場合には、そのデータA5をストア用アライメントレジスタ４５(ｖｃ)に移動して保持し、モードビットＭＢを『１』に書き換える。すなわち、モードビットを設定(ＭＢ＝１)する。
【００９７】
ここで、ストアアドレスとｓの値から、ストアするデータが同じ境界内にすべて存在するかどうかを判定し、境界を跨がない場合は、図１４(a)および図１４(b)に示す処理を行い、境界を跨ぐ場合は、図１５(a)および図１５(b)に示す処理を行う。
【００９８】
すなわち、命令列Ｐ２４(「storeMx16(va, vc &B [i]);」)により、ストアアドレス(0x1012)とｓの値(ｓ＝６)を加算して、ストアするデータが境界を跨ぐかどうかを判定する。
【００９９】
具体的に、図１４(a)および図１４(b)では、ストアアドレス0x1012から６個のデータB0〜B5をストアするため、ストアするデータが境界を跨がないことになる。すなわち、図１４(b)に示されるように、ストアするデータが境界を跨がない場合には、ストア用SIMDレジスタ４４(ｖａ)内のデータB0〜B5をストア用アライメントレジスタ４５(ｖｃ)に追加する。
【０１００】
一方、ストアするデータが境界を跨ぐ場合は、メモリアクセスを行う。すなわち、図１５(b)に示されるように、ストアするデータが境界を跨ぎ、且つ、モードビットＭＢが『１』の場合には、ストア用SIMDレジスタ４４(ｖａ)およびストア用アライメントレジスタ４５(ｖｃ)からデータA5，B0〜B5，C0を選択してストアする。
【０１０１】
換言すると、ストア用SIMDレジスタ４４のデータC0とストア用アライメントレジスタ４５のデータA5，B0〜B5を合成して、データメモリ２にストアする。なお、ストア用SIMDレジスタ４４の一部のデータC1〜C5は、ストア用アライメントレジスタ４５に移動される。
【０１０２】
図１６、図５に示す演算処理装置により実行されるストア命令によるメモリアクセス用制御回路の処理の一例を説明するためのフローチャートである。なお、例として、SIMD幅は８で、アドレスは３２bitとして説明する。
【０１０３】
図１６に示されるように、ストア命令によるメモリアクセス用制御回路の処理が開始すると、メモリアクセス用制御回路５１は、まず、ステップＳＴ３０において、Ｘ＝8-addr[3:1]を算出する。すなわち、８からストアアドレスの２〜４ビット目(addr[3:1])を減算し、その減算した値をＸとする。
【０１０４】
さらに、ステップＳＴ３１に進んで、値Ｘが、ストアするデータ数(データサイズ：１６bit単位)ｓ以下かどうかを判定し、Ｘ≦ｓが成立する(Ｙｅｓ)と判定すると、ステップＳＴ３２に進んで、ストア用SIMDレジスタ４４の回からＸ個のデータを抜き出す。
【０１０５】
そして、ステップＳＴ３３に進んで、モードビットＭＢが『０』かどうかを判定する。ステップＳＴ３３において、モードビット＝０が成立する(Ｙｅｓ：モードビットが設定されていない)と判定すると、ステップＳＴ３４に進んで、抜き出したＸ個のデータをデータメモリ２にストアして処理を終了する。
【０１０６】
一方、ステップＳＴ３３において、モードビット＝０が成立しない(Ｎｏ)と判定すると、ステップＳＴ３５に進んで、抜き出したＸ個のデータを上位としてストア用アライメントレジスタ４５のデータ(最下位ビットから２〜４ビット目(addr[3:1])と連接する。
【０１０７】
そして、ステップＳＴ３６に進んで、連接したデータをデータメモリ２にストアして処理を終了する。なお、ステップＳＴ３１において、Ｘ≦ｓが成立しない(Ｎｏ)と判定した場合、すなわち、8−addr[3:1]の結果(Ｘ)が、データ数ｓよりも大きい場合には、何も行わずに、そのまま処理を終了する。
【０１０８】
図１７は、図５に示す演算処理装置により実行されるストア命令によるストア・アライメントレジスタ用制御回路の処理の一例を説明するためのフローチャートである。
【０１０９】
図１７に示されるように、ストア命令によるストア・アライメントレジスタ用制御回路の処理が開始すると、ストア・アライメントレジスタ用制御回路５４は、まず、ステップＳＴ４０において、Ｘ＝8-addr[3:1]を算出する。すなわち、８からストアアドレスの２〜４ビット目(addr[3:1])を減算し、その減算した値をＸとする。
【０１１０】
さらに、ステップＳＴ４１に進んで、値Ｘが、ストアするデータ数ｓ以下かどうかを判定し、Ｘ≦ｓが成立する(Ｙｅｓ)と判定すると、ステップＳＴ４２に進んで、Ｙ＝ｓ−Ｘを算出する。そして、ステップＳＴ４３に進んで、ストア用SIMDレジスタ４４のＸ＋１番目のデータからＹ個分のデータをストア用アライメントレジスタ４５に送り、処理を終了する。
【０１１１】
一方、ステップＳＴ４１において、Ｘ≦ｓが成立しない(Ｎｏ)と判定すると、ステップＳＴ４４に進んで、ストア用SIMDレジスタ４４の下位からｓ個分のデータを抜き出し、さらに、ステップＳＴ４５に進んで、Ｚ＝addr[3:1]＋１を算出する。そして、ステップＳＴ４６に進んで、抜き出したｓ個のデータをストア用アライメントレジスタ４５のＺ番目からＺ＋ｓ番目までに格納(保持)し、処理を終了する。
【０１１２】
以上のようにして、ストア処理が終了すると、例えば、「flushMx16(vc, &B[i]);」により、フラッシュ処理を実行する。ここで、フラッシュ処理は、アドレスから選択パターンを決定し、ストア用アライメントレジスタ４５から有効なデータを読み出してストアする処理である。
【０１１３】
図１８は、図５に示す演算処理装置により実行されるフラッシュ命令の動作の一例を説明するための図である。ここで、図１８(a)は、前述した処理Ｐ２において、実行する命令列Ｐ２６を示し、図１８(b)は、その処理の様子を示す。
【０１１４】
上述したように、ループ終了後、例えば、ストア用アライメントレジスタ４５には、データが残ることになる。そこで、図１８(a)および図１８(b)に示されるように、命令列Ｐ２６により、ストアアドレスから選択パターンを決定し、ストア用アライメントレジスタ４５内のデータを読み出してストアする(データメモリ２に保持する)。
【０１１５】
図１９は、図５に示す演算処理装置により実行されるフラッシュ命令によるフラッシュ命令用制御回路の処理の一例を説明するためのフローチャートである。
【０１１６】
図１９に示されるように、フラッシュ命令によるフラッシュ命令用制御回路の処理が開始すると、フラッシュ命令用制御回路５５は、まず、ステップＳＴ５０において、Ｘ＝addr[3:1]を算出する。すなわち、ストアアドレスの２〜４ビット目(addr[3:1])をＸとする。
【０１１７】
さらに、ステップＳＴ５１に進んで、値Ｘが０よりも大きいかどうかを判定し、Ｘ＞０が成立する(Ｙｅｓ)と判定すると、ステップＳＴ５２に進んで、ストア用アライメントレジスタ４５の下位からＸ個のデータを読み出し、ステップＳＴ５３に進む。
【０１１８】
ステップＳＴ５３では、Ａ＝addr & 0xfffffff0を算出する。すなわち、ストアアドレスの下位４bitをマスクする。そして、ステップＳＴ５４に進んで、読み出したＸ個のデータを、下位４bitをマスクして得たストアアドレスにストアして処理を終了する。なお、ステップＳＴ５１に進おいて、Ｘ＞０が成立しない(Ｎｏ)と判定すると、何も行わずに、そのまま処理を終了する。
【０１１９】
以上、実施形態を説明したが、ここに記載したすべての例や条件は、発明および技術に適用する発明の概念の理解を助ける目的で記載されたものであり、特に記載された例や条件は発明の範囲を制限することを意図するものではない。また、明細書のそのような記載は、発明の利点および欠点を示すものでもない。発明の実施形態を詳細に記載したが、各種の変更、置き換え、変形が発明の精神および範囲を逸脱することなく行えることが理解されるべきである。
【０１２０】
以上の実施例を含む実施形態に関し、さらに、以下の付記を開示する。
（付記１）
メモリに連続して保持された第１データをロードし、前記第１データを演算処理した第２データを、前記メモリに連続してストアする演算処理装置であって、
前記メモリからロードする前記第１データのデータ数を設定するデータ数設定用レジスタと、
前記第１データを、ロード開始アドレスおよび前記データ数を指定し、中間状態を保持するロード用アライメントレジスタおよび第１レジスタを用いて、ロード制御するロード・アライメントレジスタ用制御回路と、
演算処理された前記第２データを、ストア開始アドレスおよび前記データ数を指定し、中間状態を保持するストア用アライメントレジスタおよび第２レジスタを用いてストア制御するストア・アライメントレジスタ用制御回路と、を有する、
ことを特徴とする演算処理装置。
【０１２１】
（付記２）
さらに、
前記ストア開始アドレスから選択パターンを決定し、前記ストア用アライメントレジスタを用いて有効なデータを前記メモリにストアするフラッシュ制御を行うフラッシュ命令用制御回路を有する、
ことを特徴とする付記１に記載の演算処理装置。
【０１２２】
（付記３）
前記演算処理装置は、SIMDプロセッサであり、
前記第１レジスタは、ロード用SIMDレジスタであり、
前記第２レジスタは、ストア用SIMDレジスタであり、
前記データ数は、前記SIMDプロセッサにおけるSIMD幅よりも小さい、
ことを特徴とする付記１または付記２に記載の演算処理装置。
【０１２３】
（付記４）
前記ロード・アライメントレジスタ用制御回路は、
前記第１データが境界を跨ぐ場合、前記メモリに対する第１アクセスにより前記ロード用アライメントレジスタに保持された前記第１データの第１部分データに対して、前記メモリに対する第２アクセスを行って取得したデータから前記第１データの残りの第２部分データを連接してロードし、
前記第１データが境界を跨がない場合、前記メモリに対する前記第２アクセスを行うことなく、前記第１アクセスにより前記ロード用アライメントレジスタに保持されたデータから前記第１データを選択してロードする、ように制御する、
ことを特徴とする付記３に記載の演算処理装置。
【０１２４】
（付記５）
前記ロード・アライメントレジスタ用制御回路は、
前記第１データが境界を跨ぐ場合、前記メモリに対する前記第２アクセスにより得られたデータのうち、指定された前記ロード開始アドレスから前記データ数だけ連接するデータ以外のデータを、前記ロード用アライメントレジスタに保持する、ように制御する、
ことを特徴とする付記４に記載の演算処理装置。
【０１２５】
（付記６）
前記ロード・アライメントレジスタ用制御回路は、
前記第１データが境界を跨がない場合、前記ロード用アライメントレジスタに保持されたデータにおいて、前記第１データ以外のデータを、前記ロード用アライメントレジスタにシフトして保持する、ように制御する、
ことを特徴とする付記４に記載の演算処理装置。
【０１２６】
（付記７）
前記ストア・アライメントレジスタ用制御回路は、
前記第２データが境界を跨ぐ場合、前記ストア用SIMDレジスタに保持されたデータから、前記ストア開始アドレスと同じ境界内にストアされるデータを選択して前記メモリにストアし、
前記第２データが境界を跨がない場合、前記ストア用SIMDレジスタに保持されたデータを前記ストア用アライメントレジスタに追加する、ように制御する、
ことを特徴とする付記３に記載の演算処理装置。
【０１２７】
（付記８）
前記ストア・アライメントレジスタ用制御回路は、
前記第２データが境界を跨ぐ場合、前記ストア用SIMDレジスタに保持されたデータにおいて選択されなかったデータを、前記ストア用アライメントレジスタに移動すると共に、モードビットを設定して保持する、ように制御する、
ことを特徴とする付記７に記載の演算処理装置。
【０１２８】
（付記９）
前記ストア・アライメントレジスタ用制御回路は、
前記第２データが境界を跨ぐ場合であって、前記モードビットが設定されているとき、
前記ストア用SIMDレジスタに保持された一部のデータと前記ストア用アライメントレジスタに保持されたデータを合成して前記メモリにストアし、
前記ストア用SIMDレジスタに保持された前記一部のデータ以外のデータを、前記ストア用アライメントレジスタに移動すると共に、前記モードビットを設定して保持する、ように制御する、
ことを特徴とする付記８に記載の演算処理装置。
【０１２９】
（付記１０）
前記ストア・アライメントレジスタ用制御回路は、
前記第２データが境界を跨がない場合、前記ストア用SIMDレジスタに保持されたデータを前記ストア用アライメントレジスタに追加する、
ことを特徴とする付記７に記載の演算処理装置。
【０１３０】
（付記１１）
メモリに連続して保持された第１データをロードし、前記第１データを演算処理した第２データを、前記メモリに連続してストアする演算処理装置の制御方法であって、
前記メモリからロードする前記第１データのデータ数を設定し、
前記第１データを、ロード開始アドレスおよび前記データ数を指定してロードし、
演算処理された前記第２データを、ストア開始アドレスおよび前記データ数を指定してストアする、
ことを特徴とする演算処理装置の制御方法。
【０１３１】
（付記１２）
さらに、
前記ストア開始アドレスから選択パターンを決定し、有効なデータを前記メモリにストアする、
ことを特徴とする付記１１に記載の演算処理装置の制御方法。
【０１３２】
（付記１３）
メモリに連続して保持された第１データをロードし、前記第１データを演算処理した第２データを、前記メモリに連続してストアする演算処理装置の制御プログラムであって、
前記演算処理装置に、
前記メモリからロードする前記第１データのデータ数を設定し、
前記第１データを、ロード開始アドレスおよび前記データ数を指定してロードし、
演算処理された前記第２データを、ストア開始アドレスおよび前記データ数を指定してストアする、のを実行させる、
ことを特徴とする演算処理装置の制御プログラム。
【符号の説明】
【０１３３】
１    命令メモリ(メモリ：ＩＲＡＭ)
２    データメモリ(ＤＲＡＭ)
３    ＣＰＵコア(SIMDプロセッサ)
４１    データ数設定用レジスタ
４２    ロード用SIMDレジスタ(第１レジスタ)
４３    ロード用アライメントレジスタ
４４    ストア用SIMDレジスタ(第２レジスタ)
４５    ストア用アライメントレジスタ
５１    メモリアクセス用制御回路
５２    SIMDレジスタ用制御回路
５３    ロード・アライメントレジスタ用制御回路
５４    ストア・アライメントレジスタ用制御回路
５５    フラッシュ命令用制御回路
【図１】
2016045890.tif 000003
【図２】
2016045890.tif 000004
【図３】
2016045890.tif 000005
【図４】
2016045890.tif 000006
【図５】
2016045890.tif 000007
【図６】
2016045890.tif 000008
【図７】
2016045890.tif 000009
【図８】
2016045890.tif 000010
【図９】
2016045890.tif 000011
【図１０】
2016045890.tif 000012
【図１１】
2016045890.tif 000013
【図１２】
2016045890.tif 000014
【図１３】
2016045890.tif 000015
【図１４】
2016045890.tif 000016
【図１５】
2016045890.tif 000017
【図１６】
2016045890.tif 000018
【図１７】
2016045890.tif 000019
【図１８】
2016045890.tif 000020
【図１９】
2016045890.tif 000021