JP2011134042A - Simd型マイクロプロセッサおよびsimd型マイクロプロセッサのデータ整列方法 - Google Patents
Simd型マイクロプロセッサおよびsimd型マイクロプロセッサのデータ整列方法 Download PDFInfo
- Publication number
- JP2011134042A JP2011134042A JP2009291901A JP2009291901A JP2011134042A JP 2011134042 A JP2011134042 A JP 2011134042A JP 2009291901 A JP2009291901 A JP 2009291901A JP 2009291901 A JP2009291901 A JP 2009291901A JP 2011134042 A JP2011134042 A JP 2011134042A
- Authority
- JP
- Japan
- Prior art keywords
- data
- register
- read
- words
- write
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Abstract
【課題】データの並び替えを効率よく、かつ、回路規模の増大を抑えるように構成したSIMD型マイクロプロセッサおよびSIMD型マイクロプロセッサのデータ整列方法を提供する。
【解決手段】GP2が、読み出し処理Aを行い、リードレジスタ17のレジスタ17aに読み出したデータを格納し、読み出し処理Bを行い、リードレジスタ17のレジスタ17bに読み出したデータを格納し、レジスタ17aに格納したデータを組み合せ回路18で並び替えてライトレジスタ19を介してレジスタファイル3に書き戻し、レジスタ17bに格納したデータを組み合せ回路18で並び替えてライトレジスタ19を介してレジスタファイル3に書き戻す。
【選択図】図3
【解決手段】GP2が、読み出し処理Aを行い、リードレジスタ17のレジスタ17aに読み出したデータを格納し、読み出し処理Bを行い、リードレジスタ17のレジスタ17bに読み出したデータを格納し、レジスタ17aに格納したデータを組み合せ回路18で並び替えてライトレジスタ19を介してレジスタファイル3に書き戻し、レジスタ17bに格納したデータを組み合せ回路18で並び替えてライトレジスタ19を介してレジスタファイル3に書き戻す。
【選択図】図3
Description
本発明は、1つの演算命令により複数の画像データ等を並列処理するSIMD(Single Instruction-stream Multiple Data-stream)型マイクロプロセッサに関する。
SIMD型マイクロプロセッサでは、複数のデータに対して1つの命令で同時に同一の演算処理が実行可能である。この構造により、演算は同一であるがデータ量が非常に多い処理(例えばデジタル複写機などにおける画像処理)に係る用途において頻用される(例えば、特許文献1参照)。
SIMD型マイクロプロセッサにおける通常の画像処理では、複数の演算ユニット(Processor Element [PE];プロセッサエレメント)を主走査方向に並べ、同一の演算を同時に複数のデータに対して実行することによって高速な演算処理が可能となっている。従って、SIMD型マイクロプロセッサが有するPE数は画像処理の処理速度を決定する最も重要な要素の1つである。
一方、画像処理装置への要求性能には、出力画像の品質向上ということも挙げられ、これは各PEで一度に処理可能な演算データのビット幅に依存する。つまり、PEに含まれる演算回路、データ記憶回路のビット幅が大きく、演算精度が高ければ出力画像の品質を向上させる一助となる。
そのため、演算速度を高めるためのPE数増と、演算精度を高めるための演算回路、データ記憶回路のビット幅増は、回路規模の観点からトレードオフの関係にあり、対象とする画像処理の処理内容を分析し、適切に対応する必要がある。
従来から、上述した点を踏まえ、各PEに演算可能な要素群を複数存在させ、状況に応じて、演算可能な要素群を独立、もしくは連動して動作させることで、実質のPE数、演算ビット幅を変更することが可能である構成のSIMD型マイクロプロセッサが提案されている。
このような構成のSIMD型マイクロプロセッサにおいて、各PEで複数の独立した演算を行わせる場合、演算データを格納するレジスタにも複数の独立したデータを格納しておく必要がある。
例えばレジスタの最大ビット幅を16ビットとすると、各PEで1つの演算を行わせる場合には、レジスタには1つの16ビットデータを格納しておき、各PEで2つの演算を行わせる場合には、レジスタには2つの8ビットデータを格納しておく必要がある。このように各PEが備える一つずつのレジスタに2つのデータを格納する場合、PEを1次元アレイ状、つまり、1列に配置しているとすると、図6、図7のような代表的な2つのデータの並べ方が考えられる(図中、PEの総数は16としている)。
図6および図7では“00”から“31”までの昇順データの並べ方を例にとり、2通りの並べ方を図示している。以降、PE番号をn(nは0以上の自然数とする)とし、各PE内レジスタのLow側、High側の8ビットデータを、それぞれPE[n](L)、PE[n](H)のように表記すると、図6では、PE[0](L)、PE[0](H)、PE[1](L)、PE[1](H)、の順にPE15[H]まで32個のデータをジグザグ状に並べている。図7では、PE[0](L)からPE[15](L)までレジスタのLow側にすべてデータを並べた後、次にPE[0](H)からPE15[H]までレジスタのHigh側に最後までデータを並べている。以降、本明細書中において、図6の並べ方をパックド配置と呼び、図7をセパレート配置と呼ぶこととする。
パックド配置あるいはセパレート配置のどちらのデータ配置を採用するかは、後述する、レジスタファイルに対してデータのリード/ライトが可能な外部データ処理装置の構成に依存し、必要に応じてデータの並べ替えを行う必要がある。
このようなデータの整列処理の多くは、SIMD型マイクロプロセッサの並列性を十分に生かせず、プロセッサの処理性能を落とす要因となってしまう。また、レジスタを含むPE内に並べ替え処理のための専用経路を持たせるということも考えられるが、PE総数に応じて長配線化、あるいは配線の複雑さといった実装面における問題が大きくなることが多い。
本発明はかかる問題を解決することを目的としている。
すなわち、本発明は、データの並び替えを効率よく、かつ、回路規模の増大を抑えるように構成したSIMD型マイクロプロセッサおよびSIMD型マイクロプロセッサのデータ整列方法を提供することを目的としている。
請求項1に記載された発明は、2次元配列状に配置され、予め付与されたアドレスに応じて2ワードのデータのリードライトが行える複数のレジスタから構成されたレジスタファイルと、前記レジスタを一度に複数列分指定して複数列分のデータを前記レジスタファイルの外部とデータ転送するデータバスと、を備えたSIMD型マイクロプロセッサにおいて、前記データバスが、前記レジスタに格納される2ワードのデータを一方側と他方側に分割してデータ転送可能に構成され、前記レジスタファイルの列数をN(Nは2以上の自然数)とし、n列目(nは1以上の自然数)の前記レジスタ内の一方側ワードのデータと(n+N/2)列目の前記レジスタ内の他方側ワードのデータとを同時に前記nを1ずつ増加させながらMワード分(Mは2以上の偶数)順次読み出す第一の読み出し手段と、n列目の前記レジスタ内の他方側ワードのデータと(n+N/2)列目のレジスタ内の一方側ワードのデータとを同時に前記nを1ずつ増加させながら前記Mワード分順次読み出す第二の読み出し手段と、前記レジスタファイルから前記第一の読み出し手段が読み出した前記Mワード分のデータを格納するための第一のリードレジスタと、前記レジスタファイルから前記第二の読み出し手段が読み出した前記Mワード分のデータを格納するための第二のリードレジスタと、前記第一のリードレジスタのデータと前記第二のリードレジスタのデータとを交互に並べて前記Mワード分のデータを形成し前記レジスタファイルに書き戻す書き戻し手段と、を備えていることを特徴とするSIMD型マイクロプロセッサである。
請求項2に記載された発明は、請求項1に記載された発明において、前記書き戻し手段が、並べ替え前のデータが格納されていた行の前記レジスタとは異なる行の前記レジスタに書き戻すことを特徴とする。
請求項3に記載された発明は、請求項1または2に記載された発明において、前記書き戻し手段が生成したデータを記憶する記憶手段を備え、前記書き戻し手段が、生成した前記Mワード分のデータを前記記憶手段に記憶させるとともに、前記N列分のデータが記憶された後に前記記憶手段から前記レジスタファイルに書き戻すことを特徴とする。
請求項4に記載された発明は、2次元配列状に配置され、予め付与されたアドレスに応じて2ワードのデータのリードライトが行える複数のレジスタから構成されたレジスタファイルと、前記レジスタを一度に複数列分指定して複数列分のデータを前記レジスタファイルの外部とデータ転送するデータバスと、を備えたSIMD型マイクロプロセッサのデータ整列方法において、前記レジスタファイルの列数をN(Nは2以上の自然数)とし、n列目(nは1以上の自然数)の前記レジスタ内の一方側ワードのデータと(n+N/2)列目の前記レジスタ内の他方側ワードのデータとを同時に前記nを1ずつ増加させながらMワード分(Mは2以上の偶数)順次読み出す第一の工程と、前記レジスタファイルから前記第一の工程で読み出した前記Mワード分のデータを第一のリードレジスタに格納する第二の工程と、n列目の前記レジスタ内の他方側ワードのデータと(n+N/2)列目のレジスタ内の一方側ワードのデータとを同時に前記nを1ずつ増加させながら前記Mワード分順次読み出す第三の工程と、前記レジスタファイルから前記第二の工程で読み出した前記Mワード分のデータを第二のリードレジスタに格納する第四の工程と、前記第一のリードレジスタのデータと前記第二のリードレジスタのデータとを交互に並べて前記Mワード分のデータを形成し前記レジスタファイルに書き戻す第五の工程と、を備えていることを特徴とするSIMD型マイクロプロセッサのデータ整列方法である。
請求項1に記載の発明によれば、第一の読み出し手段でn列目のレジスタの一行目側データと(n+N/2)列目のレジスタの二行目側データとを同時にnを1ずつ増加させながらMワード分順次読み出し第一のリードレジスタに格納し、第二の読み出し手段でn列目のレジスタの二行目側データと(n+N/2)列目のレジスタの一行目側データとを同時にnを1ずつ増加させながらMワード分順次読み出し第二のリードレジスタに格納し、書き戻し手段で第一のリードレジスタの2m番目のデータと第二のリードレジスタのデータとを交互に並べてMワード分のデータを形成しレジスタファイルに書き戻しているので、PEのレジスタにパックド配置されたデータをセパレート配置に並べ替える際に、物理的に離れたPEのデータを効率的に読み出すことができ、置き換え処理全体にかかるハードウェア追加を少なく抑えることができる。また、複数ワード同時に読み出しているので、処理の高速化にも寄与できる。
請求項2に記載の発明によれば、書き戻し手段が、並べ替え前のデータが格納されていた行のレジスタとは異なる行のレジスタに書き戻しているので、並べ替え前の元データを格納するレジスタと、並べ替え後のデータを書き戻すレジスタを別々にすることとなり、並べ替え後のデータによって、まだ並べ替え処理が終わっていない元データを書き潰すことがなくなる。
請求項3に記載の発明によれば、書き戻し手段が生成したデータを記憶する記憶手段を備え、書き戻し手段が、生成したMワード分のデータを記憶手段に記憶させるとともに、N列分のデータが記憶された後に記憶手段からレジスタファイルに書き戻しているので、並べ替え後のデータをレジスタファイルに書き戻す前にメモリ等に退避することで、並べ替え後のデータがすべて揃ってからレジスタファイルに順に書き戻していくことができるため、並べ替え前の元データを格納するレジスタと、並べ替え後のデータを書き戻すレジスタを同一にすることができる。
請求項4に記載の発明によれば、第一の工程でn列目のレジスタの一行目側データと(n+N/2)列目のレジスタの二行目側データとを同時にnを1ずつ増加させながらMワード分順次読み出し、第二の工程で第一のリードレジスタに格納し、第三の工程でn列目のレジスタの二行目側データと(n+N/2)列目のレジスタの一行目側データとを同時にnを1ずつ増加させながらMワード分順次読み出し、第四の工程で第二のリードレジスタに格納し、第五の工程で第一のリードレジスタの2m番目のデータと第二のリードレジスタのデータとを交互に並べてMワード分のデータを形成しレジスタファイルに書き戻しているので、PEのレジスタにパックド配置されたデータをセパレート配置に並べ替える際に、物理的に離れたPEのデータを効率的に読み出すことができ、置き換え処理全体にかかるハードウェア追加を少なく抑えることができる。また、複数ワード同時に読み出しているので、処理の高速化にも寄与できる。
以下、本発明の一実施形態を、図1ないし図4を参照して説明する。図1は、本発明の一実施形態にかかるSIMD型マイクロプロセッサの構成図である。図2は、図1に示されたSIMD型マイクロプロセッサのレジスタファイルとGPへデータ転送用のデータバスの部分を抜き出した概略図である。図3は、図2に示されたデータバスの書き戻し部分を加えた概略図である。図4は、図2に示されたSIMD型マイクロプロセッサのデータ並べ替え動作を示したフローチャートである。
図1に本発明の一実施形態にかかるSIMD型マイクロプロセッサ1を示す。図1に示したSIMD型マイクロプロセッサ1は、グローバルプロセッサ2と、レジスタファイル3と、演算アレイ6と、を備えている。
第一の読み出し手段、第二の読み出し手段、書き戻し手段としてのグローバルプロセッサ(GP)2は、SIMD型マイクロプロセッサ1のプログラム格納用のプログラムRAM(Program−RAM)と、演算データ格納用のデータRAM(Data−RAM)が内蔵されている。さらに、プログラムのアドレスを保持するプログラムカウンタ(PC)、演算処理のデータ格納のための汎用レジスタであるG0〜G15レジスタ、レジスタ退避、復帰時に退避先データRAMのアドレスを保持しているスタックポインタ(SP)、サブルーチンコール時にコール元のアドレスを保持するリンクレジスタ(LS)、同じくIRQ時とNMI時の分岐元アドレスを保持するLI、LNレジスタ、プロセッサの状態を保持しているプロセッサステータスレジスタ(P)が内蔵されている。
レジスタファイル3は、各PEごとにR0からR31の32本16ビットのレジスタが内蔵されており、PE数分の組みが並べられたアレイ構成になっている。なお、これらの16本のレジスタを総称して以降Rレジスタと呼ぶこととする。また、それぞれのレジスタは演算アレイ6に対してポートを備えており、16ビットのリード/ライト兼用のバス(以下レジスタバス4)で演算アレイ6からアクセスできる。なお、図1で図示しているレジスタは、紙面の関係で各PEで6本としている。即ち、レジスタファイル3は、2次元配列状に配置され、予め付与されたアドレスに応じてデータのリードライトが行える複数のレジスタから構成されている。
レジスタファイル3の図1中上段2つのレジスタ(実際は24個のレジスタ)は、図示していない外部データ処理装置によって内容の読み出し/書き込みが可能なレジスタである。そのため、プロセッサ外に設けられる外部データ処理装置からデータバスと制御信号線5を用いて、任意のレジスタの読み出し/書き込みが可能である。また、外部データ処理装置からアクセス可能なレジスタは、それぞれ固有のアドレスが割り振られており、外部データ処理装置はアクセスするレジスタのアドレスを制御信号に含めて出力する。このデータバスと制御信号線5に接続されたレジスタにおいては、外部データ処理装置が出力するアドレスと自身のアドレスを比較し、一致していればアクセスに対応する。
演算アレイ6は、7to1マルチプレクサ(7to1MUX)7と、シフタ(Shift Expand)8と、下位用16bitALU9と、上位用16bitALU10と、下位用Aレジスタ11と、上位用Aレジスタ12と、下位用Fレジスタ13と、上位用Fレジスタ14と、を備えている。
7to1マルチプレクサ7は、レジスタファイル3と演算部15との接続に設けられており、PEの並んだ方向で左に1、2、3つ離れたPEのレジスタバス4、右に1、2、3つ離れたPEのレジスタバス4、自PEのレジスタバス4に接続し、演算対象として選択することを可能としている。
シフタ8は、7to1マルチプレクサ7の出力のビットシフトと拡張を行う。シフタ8の制御はPE命令のオプション指定により行われる。
下位用16bitALU9は、算術論理演算器であり、PE命令により演算が制御される。下位用16bitALU9は、基本的にレジスタファイルから読み出されシフタ8を経たデータを片側の入力として、もう片側には下位用Aレジスタ11の内容を入力として、結果を下位用Aレジスタ11に格納する。
上位用16bitALU10は、算術論理演算器であり、PE命令により演算が制御される。上位用16bitALU10は、基本的にレジスタファイルから読み出されシフタ8を経たデータを片側の入力として、もう片側には上位用Aレジスタ12の内容を入力として、結果を上位用Aレジスタ12に格納する。
下位用16bitALU9と上位用16bitALU10は、それぞれ独立して16ビットの演算が可能であるとともに、連動して動作し合わせて32ビットの演算も可能である。また、それぞれの動作はGP2からの制御による。なお、下位用16bitALU9と上位用16bitALU10が連動する場合のため、両ALU間にキャリーなどの情報伝達経路を備えている。
そして、7to1マルチプレクサ(7to1MUX)7と、シフタ(Shift Expand)8と、下位用16bitALU9と、上位用16bitALU10と、下位用Aレジスタ11と、上位用Aレジスタ12と、下位用Fレジスタ13と、上位用Fレジスタ14と、それぞれ1組ずつ備えたものが演算部15であり、演算アレイ6は、演算部15が複数並べて設けられている。
さらに、Rレジスタが1組と、演算部15が1組で1つのPEを構成する。
次に、上述した構成のSIMD型マイクロプロセッサ1の動作を説明する。
図2は、上述した構成のSIMD型マイクロプロセッサ1のレジスタファイル3とGP2へデータ転送用のデータバス16の部分を抜き出した概略図である。図2では説明を簡単にするために、PEはPE[0]からPE[15]までの16PEで構成していることとする。また、図2では、レジスタファイル3中の1つのレジスタ(例えばR0レジスタ)を抜き出して図示している。
そして、図2には、データバス16以外に、リードレジスタ17と、組み合せ回路18と、ライトレジスタ19と、が図1に対して追加されている。
データバス16は、図1には図示していなかったが、複数PE分のデータをGP2が備えるデータRAM等に転送するための経路として従来から設けられているものである。また、データバス16は、データバスと制御信号線5と同様にレジスタファイル3のレジスタごとに設けられている。つまり、データバス16は、全R0レジスタを接続するものだけでなく、R1レジスタやR2レジスタにも設けられている。但し、どの行のレジスタまで設けるかは、適用する処理や必要とする性能に合わせて適宜設定すればよい。
リードレジスタ17は、8ワード分のデータを格納する第一のリードレジスタとしてのレジスタ17aと、第二のリードレジスタとしてのレジスタ17bの2組を有し、データバス16に読み出されてきたレジスタファイル3のデータが格納される。
書き戻し手段としての組み合せ回路18は、リードレジスタ17に格納されたデータを並び替えて後述するライトレジスタ19へ出力する。
ライトレジスタ19は、組み合せ回路18で並べ替えられたデータを格納するレジスタであり、その後レジスタファイル3へデータバス16を介して書き戻す。
なお、リードレジスタ17、組み合せ回路18、ライトレジスタ19は、本発明を実施するに際して追加されたものである。
図2の場合、最大4PE分のデータを一度に転送可能となっており、SIMD型マイクロプロセッサ1が備える転送命令によって、例えばPE[0]からPE[3]までの4PE分のデータ転送を指示すると、PE[0]からPE[3]までのデータを順に並べた64ビットデータをGP2側に送る。なお、図2のレジスタ内に記載された“00”や“01”などがデータの並びを示す番号である。即ち、データバス16は、レジスタを一度に複数列分指定して複数列分のデータをレジスタファイル3の外部とデータ転送する。
また、例えばPE[0]からPE[15]までの16PE分のデータ転送を指示すると、
(1)PE[0]、PE[4]、PE[8]、 PE[12]のデータを論理和演算した16ビット分のデータ
(2)PE[1]、PE[5]、PE[9]、 PE[13]のデータを論理話演算した16ビット分のデータ
(3)PE[2]、PE[6]、PE[10]、PE[14]のデータを論理和演算した16ビット分のデータ
(4)PE[3]、PE[7]、PE[11]、PE[15]のデータを論理和演算した16ビット分のデータ
の(1)から(4)を順に並べた64ビットデータをGP2側に送る。つまり、PE[0]からPE[3]のように連続して並んでいるPEに限らず、例えば、PE[0]、PE[5]、PE[10]、PE[15]といった並びのデータを送ることもできる。
(1)PE[0]、PE[4]、PE[8]、 PE[12]のデータを論理和演算した16ビット分のデータ
(2)PE[1]、PE[5]、PE[9]、 PE[13]のデータを論理話演算した16ビット分のデータ
(3)PE[2]、PE[6]、PE[10]、PE[14]のデータを論理和演算した16ビット分のデータ
(4)PE[3]、PE[7]、PE[11]、PE[15]のデータを論理和演算した16ビット分のデータ
の(1)から(4)を順に並べた64ビットデータをGP2側に送る。つまり、PE[0]からPE[3]のように連続して並んでいるPEに限らず、例えば、PE[0]、PE[5]、PE[10]、PE[15]といった並びのデータを送ることもできる。
そして、このように構成されたデータバス16を、各PEのRレジスタの一方側としてのLow側、他方側としてのHigh側の8ビットずつのデータを別々に制御することで、Rレジスタから読み出し可能な64ビット分のデータを、パックド配置からセパレート配置へ並べ替えを容易に行っている。つまり、1つのレジスタには2ワード分のデータが格納されている。以下に具体的な動作を説明する。なお、以下の動作制御はGP2が行う。
まず、1回目の読み出し処理として、PE[0](L)、PE[8](H)、PE[1](L)、PE[9](H)、PE[2](L)、PE[10](H)、PE[3](L)、PE[11](H)を順に並べた64ビットデータを読み出し、リードレジスタ17のレジスタ17aに格納する。この時点で、レジスタ17aには図2に示すように、“00” “17” “02” “19” “04” “21” “06” “23”番目のデータが順に格納されている。
次に、2回目の読み出し処理として、PE[8](L)、PE[0](H)、PE[9](L)、PE[1](H)、PE[10](L)、PE[2](H)、PE[11](L)、PE[3](H)を順に並べた64ビットデータを読み出し、リードレジスタ17のレジスタ17bに格納する。この時点で、レジスタ17aには図2に示すように、“16” “01” “18” “03” “20” “05” “22” “07”番目のデータが順に格納されている。
次に、1つ目の書き戻しデータとして、PE[0](L)、PE[8](L)、PE[0](H)、PE[8](H)、PE[1](L)、PE[9](L)、PE[1](H)、PE[9](H)を順に組み合せ回路19が並べた64ビットデータをライトレジスタ19に格納する。つまり、ライトレジスタ19には、“00” “16” “01” “17” “02” “18” “03” “19”番目のデータが順に格納されている。即ち、レジスタ17a、17b、17b、17a、17a、17b、…といった形でレジスタ17aのデータとレジスタ17bのデータとを交互に並べて8ワード分のデータを形成している。
次に、ライトレジスタ19に格納された1つ目の書き戻しデータを、異なる行(例えばR1レジスタ)のPE[0](L)、PE[0](H)、PE[1](L)、PE[1](H)、PE[2](L)、PE[2](H)、PE[3](L)、PE[3](H)に書き戻す。つまり、PE[0](L)に“00” 番目のデータ、PE[0](H)に“16” 番目のデータ、PE[1](L)に“01” 番目のデータ、PE[1](H)に“17” 番目のデータ、PE[2](L)に“02” 番目のデータ、PE[2](H)に“18” 番目のデータ、PE[3](L)に“03” 番目のデータ、PE[3](H)に“19” 番目のデータがそれぞれ格納される。この書き戻しもデータバス16を用いて行う。
次に、2つ目の書き戻しデータとして、PE[2](L)、PE[10](L)、PE[2](H)、PE[10](H)、PE[3](L)、PE[11](L)、PE[3](H)、PE[11](H)を順に組み合せ回路19が並べた64ビットデータをライトレジスタ19に格納する。つまり、ライトレジスタ19には、“04” “20” “05” “21” “06” “22” “07” “23”番目のデータが順に格納されている。
次に、ライトレジスタ19に格納された2つ目の書き戻しデータを、異なる行(例えばR1レジスタ)のPE[4](L)、PE[4](H)、PE[5](L)、PE[5](H)、PE[6](L)、PE[6](H)、PE[7](L)、PE[7](H)に書き戻す。つまり、PE[4](L)に“04” 番目のデータ、PE[4](H)に“20” 番目のデータ、PE[5](L)に“05” 番目のデータ、PE[5](H)に“21” 番目のデータ、PE[6](L)に“06” 番目のデータ、PE[6](H)に“22” 番目のデータ、PE[7](L)に“07” 番目のデータ、PE[7](H)に“23” 番目のデータがそれぞれ格納される。
次に、3回目の読み出し処理として、PE[4](L)、PE[12](H)、PE[5](L)、PE[13](H)、PE[6](L)、PE[14](H)、PE[7](L)、PE[15](H)を順に並べた64ビットデータを読み出しリードレジスタ17のレジスタ17aに格納する。この時点で、レジスタ17aには “08” “25” “10” “27” “12” “29” “14” “31”番目のデータが順に格納されている。
次に、4回目の読み出し処理として、PE[12](L)、PE[4](H)、PE[13](L)、PE[5](H)、PE[14](L)、PE[6](H)、PE[15](L)、PE[7](H)を順に並べた64ビットデータを読み出しリードレジスタ17のレジスタ17bに格納する。この時点で、レジスタ17aには “09” “24” “11” “26” “13” “28” “15” “30”番目のデータが順に格納されている。
次に、3つ目の書き戻しデータとして、PE[4](L)、PE[12](L)、PE[4](H)、PE[12](H)、PE[5](L)、PE[13](L)、PE[5](H)、PE[13](H)を順に組み合せ回路19が並べた64ビットデータをライトレジスタ19に格納する。つまり、ライトレジスタ19には、“08” “24” “09” “25” “10” “26” “11” “27”番目のデータが順に格納されている。
次に、ライトレジスタ19に格納された3つ目の書き戻しデータを、異なる行(例えばR1レジスタ)のPE[8](L)、PE[8](H)、PE[9](L)、PE[9](H)、PE[10](L)、PE[10](H)、PE[11](L)、PE[11](H)に書き戻す。つまり、PE[8](L)に“08” 番目のデータ、PE[8](H)に“24” 番目のデータ、PE[9](L)に“09” 番目のデータ、PE[9](H)に“25” 番目のデータ、PE[10](L)に“10” 番目のデータ、PE[10](H)に“26” 番目のデータ、PE[11](L)に“11” 番目のデータ、PE[11](H)に“27” 番目のデータがそれぞれ格納される。
次に、4つ目の書き戻しデータとして、PE[6](L)、PE[14](L)、PE[6](H)、PE[14](H)、PE[7](L)、PE[15](L)、PE[7](H)、PE[15](H)を順に組み合せ回路19が並べた64ビットデータをライトレジスタ19に格納する。つまり、ライトレジスタ19には、“12” “28” “13” “29” “14” “30” “15” “31”番目のデータが順に格納されている。
次に、ライトレジスタ19に格納された4つ目の書き戻しデータを、異なる行(例えばR1レジスタ)のPE[12](L)、PE[12](H)、PE[13](L)、PE[13](H)、PE[14](L)、PE[14](H)、PE[15](L)、PE[15](H)に書き戻す。つまり、PE[12](L)に“12” 番目のデータ、PE[12](H)に“28” 番目のデータ、PE[13](L)に“13” 番目のデータ、PE[13](H)に“29” 番目のデータ、PE[14](L)に“14” 番目のデータ、PE[14](H)に“30” 番目のデータ、PE[15](L)に“15” 番目のデータ、PE[15](H)に“31” 番目のデータがそれぞれ格納される。
以上のように動作させることにより、図3に示したようにRレジスタの異なる行にパックド配置からセパレート配置への並べ替え処理を完了させることができる。
ここで、1回目の読み出し処理から見た3回目の読み出し処理、2回目の読み出し処理から見た4回目の読み出し処理は、それぞれPE番号を4だけインクリメントした違いであり、これらは、1回目の読み出し処理と3回目の読み出し処理を読み出し処理A、2回目の読み出し処理と4回目の読み出し処理を読み出し処理Bの2パターンの処理に分類することができる。
パックド配置からセパレート配置に変換する際には、PE[0]のLow側及びHigh側データ、PE[8]のLow側及びHigh側データのようにPE総数のちょうど折り返し位置にあたるPE同士のデータを組み合せて配置する必要がある。これは、PE番号をn、PE総数をNとすると、“PE[n]とPE[n+N/2]のデータを組み合せる”、と表現することができる。
即ち、読み出し処理Aは、レジスタファイル3の列数をN(Nは2以上の自然数)とし、n列目(nは1以上の自然数)のレジスタ内の一方側ワードのデータと(n+N/2)列目のレジスタ内の他方側ワードのデータとを同時にnを1ずつ増加させながらMワード分(Mは本実施形態では8)順次読み出し、読み出し処理Bは、n列目のレジスタ内の他方側ワードのデータと(n+N/2)列目のレジスタ内の一方側ワードのデータとを同時にnを1ずつ増加させながらMワード分順次読み出している。そして、レジスタ17aは、レジスタファイル3から読み出し処理Aで読み出したMワード分のデータを格納し、レジスタ17bは、レジスタファイル3から読み出し処理Bで読み出したMワード分のデータを格納している。
ここで、上述した動作を図4のフローチャートにまとめる。まず、ステップS1において、読み出し処理Aを行い8ワード分のデータを読み出し、リードレジスタの1つ目(レジスタ17a)に格納してステップS2に進む。
次に、ステップS2において、読み出し処理Bを行い8ワード分のデータを読み出し、リードレジスタの2つ目(レジスタ17b)に格納してステップS3に進む。
次に、ステップS3において、2つのリードレジスタに格納された16ワード(8ワード×2)のデータから最初の8ワード分の並べ替え後のデータを形成し書き戻してステップS4に進む。
次に、ステップS4において、2つのリードレジスタに格納された16ワード(8ワード×2)のデータから次の8ワード分の並べ替え後のデータを形成しに書き戻してステップS5に進む。
次に、ステップS5において、PE番号を4インクリメント(+4)してステップS6に進む。
次に、ステップS6において、全てのPEについて処理が終了したか否かを判断し、終了している場合(Yesの場合)は終了し、終了していない場合(Noの場合)はステップS1に戻る。
本実施形態によれば、GP2が、読み出し処理Aを行い、リードレジスタ17のレジスタ17aに読み出したデータを格納し、読み出し処理Bを行い、リードレジスタ17のレジスタ17bに読み出したデータを格納し、レジスタ17aに格納したデータを組み合せ回路18で並び替えてライトレジスタ19を介してレジスタファイル3に書き戻し、レジスタ17bに格納したデータを組み合せ回路18で並び替えてライトレジスタ19を介してレジスタファイル3に書き戻しているので、PEのRレジスタにパックド配置されたデータをセパレート配置に並べ替える際に、物理的に離れたPEのデータを効率的に読み出すことができ、置き換え処理全体にかかるハードウェア追加を少なく抑えることができる。また、複数ワード同時に読み出しているので、処理の高速化にも寄与できる。
また、本実施形態では説明を簡単にするためにPE総数を16としたが、実際は512、あるいは1024といった大規模なものが主流であるため、折り返し位置にあたるPE同士の距離が遠く、配線の複雑さ等の観点からしてレジスタファイル3内部に専用経路を持たせることは得策でなく、本実施形態のように元々プロセッサが備えていた経路を再利用することで、回路や配線の増大を抑えることができる。
また、Rレジスタの異なる行に書き戻しているので元データを書き潰すことがない。
なお、Rレジスタの異なる行に書き戻しているので、ライトレジスタ19は、必ずしも必要ではなく、組み合せ回路18から直接書き戻してもよい。
また、リードレジスタ17を4組設ければ、4回分の読み出し処理のデータを格納することができるため、4回分の読み出し処理の後、Rレジスタの同じ行に書き戻すことができる。リードレジスタ17を4組設けた場合は、ライトレジスタ19を設けなくとも並び替えたデータを直接Rレジスタの同じ行に書き戻すことができる。つまり、読み出し処理を読み出し処理Aに対応する第一のリードレジスタと、読み出し処理を読み出し処理Bに対応する第二のリードレジスタがそれぞれ2組ずつ設けられていれば良い。
また、図5に示すようにライトレジスタ19をGP2のデータRAM20に出力し、全ての並べ替えデータをGP2のデータRAMに格納した後にデータRAM20からレジスタファイル3への書き戻しを行ってもよい。このようにすることで、すべての元データについての並べ替え後のデータが記憶手段としてのデータRAM20に揃っているため、元データを格納している読み出しレジスタと、並べ替え後のデータを格納する書き戻しレジスタにRレジスタの同じ行を使用することができる。また、記憶手段としてGP2のデータRAM20を用いているので新たにメモリを追加する必要が無くハードウェアの追加を抑えることができる。また、この場合もライトレジスタ19を必要とせず組み合せ回路18の出力をデータRAM20に出力すれば元データを書き潰すことがない。
なお、本発明は上記実施形態に限定されるものではない。即ち、本発明の骨子を逸脱しない範囲で種々変形して実施することができる。
1 SIMD型マイクロプロセッサ
2 グローバルプロセッサ(第一の読み出し手段、第二の読み出し手段、書き戻し手段)
3 レジスタファイル
16 データバス
17 リードレジスタ
17a レジスタ(第一のリードレジスタ)
17b レジスタ(第二のリードレジスタ)
18 組み合せ回路(書き戻し手段)
20 データRAM(記憶手段)
R0〜R31 レジスタ
2 グローバルプロセッサ(第一の読み出し手段、第二の読み出し手段、書き戻し手段)
3 レジスタファイル
16 データバス
17 リードレジスタ
17a レジスタ(第一のリードレジスタ)
17b レジスタ(第二のリードレジスタ)
18 組み合せ回路(書き戻し手段)
20 データRAM(記憶手段)
R0〜R31 レジスタ
Claims (4)
- 2次元配列状に配置され、予め付与されたアドレスに応じて2ワードのデータのリードライトが行える複数のレジスタから構成されたレジスタファイルと、前記レジスタを一度に複数列分指定して複数列分のデータを前記レジスタファイルの外部とデータ転送するデータバスと、を備えたSIMD型マイクロプロセッサにおいて、
前記データバスが、前記レジスタに格納される2ワードのデータを一方側と他方側に分割してデータ転送可能に構成され、
前記レジスタファイルの列数をN(Nは2以上の自然数)とし、n列目(nは1以上の自然数)の前記レジスタ内の一方側ワードのデータと(n+N/2)列目の前記レジスタ内の他方側ワードのデータとを同時に前記nを1ずつ増加させながらMワード分(Mは2以上の偶数)順次読み出す第一の読み出し手段と、
n列目の前記レジスタ内の他方側ワードのデータと(n+N/2)列目のレジスタ内の一方側ワードのデータとを同時に前記nを1ずつ増加させながら前記Mワード分順次読み出す第二の読み出し手段と、
前記レジスタファイルから前記第一の読み出し手段が読み出した前記Mワード分のデータを格納するための第一のリードレジスタと、
前記レジスタファイルから前記第二の読み出し手段が読み出した前記Mワード分のデータを格納するための第二のリードレジスタと、
前記第一のリードレジスタのデータと前記第二のリードレジスタのデータとを交互に並べて前記Mワード分のデータを形成し前記レジスタファイルに書き戻す書き戻し手段と、
を備えていることを特徴とするSIMD型マイクロプロセッサ。 - 前記書き戻し手段が、並べ替え前のデータが格納されていた行の前記レジスタとは異なる行の前記レジスタに書き戻すことを特徴とする請求項1に記載のSIMD型マイクロプロセッサ。
- 前記書き戻し手段が生成したデータを記憶する記憶手段を備え、
前記書き戻し手段が、生成した前記Mワード分のデータを前記記憶手段に記憶させるとともに、前記N列分のデータが記憶された後に前記記憶手段から前記レジスタファイルに書き戻すことを特徴とする請求項1または2に記載のSIMD型マイクロプロセッサ。 - 2次元配列状に配置され、予め付与されたアドレスに応じて2ワードのデータのリードライトが行える複数のレジスタから構成されたレジスタファイルと、前記レジスタを一度に複数列分指定して複数列分のデータを前記レジスタファイルの外部とデータ転送するデータバスと、を備えたSIMD型マイクロプロセッサのデータ整列方法において、
前記レジスタファイルの列数をN(Nは2以上の自然数)とし、n列目(nは1以上の自然数)の前記レジスタ内の一方側ワードのデータと(n+N/2)列目の前記レジスタ内の他方側ワードのデータとを同時に前記nを1ずつ増加させながらMワード分(Mは2以上の偶数)順次読み出す第一の工程と、
前記レジスタファイルから前記第一の工程で読み出した前記Mワード分のデータを第一のリードレジスタに格納する第二の工程と、
n列目の前記レジスタ内の他方側ワードのデータと(n+N/2)列目のレジスタ内の一方側ワードのデータとを同時に前記nを1ずつ増加させながら前記Mワード分順次読み出す第三の工程と、
前記レジスタファイルから前記第二の工程で読み出した前記Mワード分のデータを第二のリードレジスタに格納する第四の工程と、
前記第一のリードレジスタのデータと前記第二のリードレジスタのデータとを交互に並べて前記Mワード分のデータを形成し前記レジスタファイルに書き戻す第五の工程と、
を備えていることを特徴とするSIMD型マイクロプロセッサのデータ整列方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009291901A JP2011134042A (ja) | 2009-12-24 | 2009-12-24 | Simd型マイクロプロセッサおよびsimd型マイクロプロセッサのデータ整列方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009291901A JP2011134042A (ja) | 2009-12-24 | 2009-12-24 | Simd型マイクロプロセッサおよびsimd型マイクロプロセッサのデータ整列方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2011134042A true JP2011134042A (ja) | 2011-07-07 |
Family
ID=44346715
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009291901A Withdrawn JP2011134042A (ja) | 2009-12-24 | 2009-12-24 | Simd型マイクロプロセッサおよびsimd型マイクロプロセッサのデータ整列方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2011134042A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2017529597A (ja) * | 2014-09-25 | 2017-10-05 | インテル・コーポレーション | ビット群インターリーブプロセッサ、方法、システムおよび命令 |
-
2009
- 2009-12-24 JP JP2009291901A patent/JP2011134042A/ja not_active Withdrawn
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2017529597A (ja) * | 2014-09-25 | 2017-10-05 | インテル・コーポレーション | ビット群インターリーブプロセッサ、方法、システムおよび命令 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114238204B (zh) | 可重构并行处理 | |
US5812147A (en) | Instruction methods for performing data formatting while moving data between memory and a vector register file | |
US20070186082A1 (en) | Stream Processor with Variable Single Instruction Multiple Data (SIMD) Factor and Common Special Function | |
EP0539595A1 (en) | Data processor and data processing method | |
KR102318531B1 (ko) | 스트리밍 메모리의 치환 동작 | |
JP2019519865A (ja) | 並べ替え動作を実行するための装置および方法 | |
JP2008047031A (ja) | 並列演算装置 | |
JP4801605B2 (ja) | Simd型マイクロプロセッサ | |
CN107851016A (zh) | 向量算术指令 | |
EP1634163B1 (en) | Result partitioning within simd data processing systems | |
JP2011134042A (ja) | Simd型マイクロプロセッサおよびsimd型マイクロプロセッサのデータ整列方法 | |
JP2006350907A (ja) | Simd型マイクロプロセッサ、データ転送装置、及びデータ変換装置 | |
KR20200028965A (ko) | 데이터 처리장치에서의 벡터 인터리빙 | |
JP5889747B2 (ja) | 半導体装置 | |
JP4868607B2 (ja) | Simd型マイクロプロセッサ | |
JP4482356B2 (ja) | Simdプロセッサを用いた画像処理方法及び画像処理装置 | |
JP5369669B2 (ja) | Simd型マイクロプロセッサ | |
JP4516495B2 (ja) | Simd型マイクロプロセッサにおけるデータ処理方法 | |
JP2008071037A (ja) | Simd型マイクロプロセッサ | |
JP5760532B2 (ja) | プロセッサ装置及びその演算方法 | |
JP5049802B2 (ja) | 画像処理装置 | |
JP4442907B2 (ja) | Simd型プロセッサ | |
JP3971543B2 (ja) | Simd型プロセッサ | |
JP2019519864A (ja) | ベクトルレジスタのアクセス | |
KR20010072490A (ko) | 레지스터 스택을 포함하는 데이터 프로세서, 그 처리방법, 컴퓨터 프로그램 제품 및 멀티미디어 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Withdrawal of application because of no request for examination |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20130305 |