JP3955741B2 - ソート機能を有するsimd型マイクロプロセッサ - Google Patents
ソート機能を有するsimd型マイクロプロセッサ Download PDFInfo
- Publication number
- JP3955741B2 JP3955741B2 JP2001103145A JP2001103145A JP3955741B2 JP 3955741 B2 JP3955741 B2 JP 3955741B2 JP 2001103145 A JP2001103145 A JP 2001103145A JP 2001103145 A JP2001103145 A JP 2001103145A JP 3955741 B2 JP3955741 B2 JP 3955741B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- register
- general
- specific
- smaller
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 claims description 45
- 239000000872 buffer Substances 0.000 claims description 42
- 238000003672 processing method Methods 0.000 claims description 10
- 238000012545 processing Methods 0.000 description 46
- 238000010586 diagram Methods 0.000 description 23
- WQZGKKKJIJFFOK-VSOAQEOCSA-N L-altropyranose Chemical compound OC[C@@H]1OC(O)[C@H](O)[C@@H](O)[C@H]1O WQZGKKKJIJFFOK-VSOAQEOCSA-N 0.000 description 14
- 238000004364 calculation method Methods 0.000 description 6
- 230000000694 effects Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30021—Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/22—Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
- G06F7/24—Sorting, i.e. extracting data from one or more carriers, rearranging the data in numerical or other ordered sequence, and rerecording the sorted data on the original carrier or on a different carrier or set of carriers sorting methods in general
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T5/00—Image enhancement or restoration
- G06T5/20—Image enhancement or restoration by the use of local operators
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/38—Indexing scheme relating to groups G06F7/38 - G06F7/575
- G06F2207/3804—Details
- G06F2207/3808—Details concerning the type of numbers or the way they are handled
- G06F2207/3828—Multigauge devices, i.e. capable of handling packed numbers without unpacking them
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Analysis (AREA)
- Computing Systems (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Image Processing (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Complex Calculations (AREA)
Description
【発明の属する技術分野】
本発明は、SIMD(Single Instructin−stream Multiple Data−stream;単一命令多データ処理)型マイクロプロセッサに関する。
【0002】
【従来の技術】
SIMD型マイクロプロセッサでは、複数のデータに対して1つの命令で同時に同一の演算処理が実行可能である。この構造により、演算は同一であるがデータ量が非常に多い処理(例えば、画像処理)に係る用途において、頻用される。
【0003】
SIMD型マイクロプロセッサにおける通常の演算処理では、複数の演算ユニット(Processor Element〔PE〕;プロセッサエレメント)を並べ同一の演算を同時に複数のデータに対して実行する。このことにより高速な演算処理が可能となっている。
【0004】
ところで、「画像データ処理」においては、画質補正のために様々なフィルタ処理がなされる。通常のフィルタ処理は、画像の主走査方向、あるいは副走査方向に隣接する画素と対象となる画素との重み付け演算であるため、SIMD型マイクロプロセッサの同時演算性の利点が如何なく発揮され得る。通常の重み付けフィルタは、入力画像データのノイズ成分除去手法としても、用いられることがあるが、このような重み付けフィルタにおいては、輪郭部がぼやける等の欠点がある。
【0005】
そこで、入力画像データのノイズ除去の有用な手法として、「メディアン・フィルタ」が知られている。輪郭部を保持したままでノイズ成分のみを除去することができるため、画像処理において頻用されるフィルタ(処理)である。
【0006】
この「メディアン・フィルタ」とは、注目画素を中心として、隣接している画素(例えば注目画素の左、右、上、下、左上、右上、左下、右下に隣接している8画素)と注目画素とを合わせた複数の画素中から、「メディアン」、すなわちデータの大きい順に並べたときにちょうど中心の順位となるデータを求め、そのデータを注目画素のデータとして置き換える、という処理である。
【0007】
SIMD型マイクロプロセッサにおいては、図5(1)のように、画素データは主走査方向に各PEのレジスタ(図ではR2レジスタ)に並べられている。副走査方向に画素を参照しようとするには、いったん現ライン画素データを別のレジスタ(図ではR1レジスタ)にコピーして、SIMD型マイクロプロセッサの外部に設置されたFIFOメモリなどのラインバッファに格納することによって、ラインディレイを作っている。この操作を複数回繰り返すことによって副走査方向の画素が複数ライン分参照できる(図ではR1レジスタをラインディレイさせてR0レジスタを作っている。)。
【0008】
メディアン・フィルタ処理では、全てのPEにおいて、自身の画素を中心にして隣接する画素との「メディアン」を取る(確定する)処理が必要となる。例えば、図5(2)において、番号[5]が付されたPE、即ちPE[5]に着目する。ここで、注目画素を、自身(PE[5])のR1レジスタに格納されている画素「E」とする。すると、左上、左、左下の画素のデータは1つ前のPE(PE[4])のR0レジスタ(図では「A」の画素)、R1(図では「D」の画素)、R2(図では「G」の画素)に格納され、右上、右、右下の画素のデータは1つ後のPE(PE[6])のR0レジスタ(図では「C」)、R1レジスタ(図では「F」)、R2(図では「I」)に格納されている。なお、PEに付される番号、及び(R0、R1、R2などの)レジスタの種類については、後で説明する。
【0009】
上記のような9画素(「A」「B」「C」「D」「E」「F」「G」「H」「I」)のデータをソートしてメディアン(中心値)である5番目に大きい画素データを求めるためには、従来技術においては、画素データのソート処理を相当に多数回行なうことが欠かせない。そのような相当量のソート処理を軽減する若しくは高速化する方策が模索されている。
【0010】
メディアン・フィルタ処理を高速化するための手法はSIMD型マイクロプロセッサに関するものだけではない。例えば、特開平6−274617号は、「3×3」画素でのメディアン・フィルタの処理を取り上げている。そこでは、ソートする処理を3画素のソート、6画素のマージソート、9画素のマージソートと3つの段階に分けて処理の高速化を図る手法について、開示されている。また、特開平5−2645号には、対象となるデータをビットスライスに分割し、上位ビットから順に“1”の立っているデータの数を計数し、所望の順位のデータを求める方法について開示されている。いずれも、SISD型プロセッサあるいは画像処理専用LSIにおいては有効であり、メディアン・フィルタ処理を高速に行うことが可能となっている。
【0011】
しかし、SIMD型マイクロプロセッサを用いる画像処理において、上記発明を適用するのは、以下に述べるように、困難である。
【0012】
特開平6−274617号の発明を利用すると、6画素及び9画素でのマージソートにおいて、SISDなど分岐処理が可能であるプロセッサにおいては全体での処理速度が向上する。しかし、SIMD型マイクロプロセッサにおいては各PE毎に分岐処理を行うことができないため、全ての分岐先の演算を実行する必要が生じかえって処理時間がかかってしまう。
【0013】
また、特開平5−2645号においては、対象となるデータをビットスライスに分割し、上位ビットから順に“1”の立っているデータの数を計数し、所望の順位のデータを求める方法について、開示されている。このことを利用しようとすると、SIMD型マイクロプロセッサにおいては、注目画素の左右の画素データが隣接するPEのレジスタにデータが格納されているため、ビットスライスにまで分割されたデータを作るには隣接するPEからデータを引用してくる必要がある。そうすると、結果として配線数が増大してしまう。更に、ビットスライスに対する計数器、加算器を全ビット分まで各PEに保有させると、回路規模が非現実的なまでに増大してしまう。各ビットにまで処理を分割して実行させると、膨大なサイクル数がかかってしまうことにもなる。
【0014】
特開平11−149554号では、SIMD型マイクロプロセッサにおけるメディアン・フィルタ処理が開示されている。そこでは、「3×3画素」での計算方法が示されている。まず、3画素のソート処理を「列」方向に行い、次にソート後のデータに対して、「行」方向に3画素のソート処理を行い、最後に対角線方向にソートを行うというものである。
【0015】
上記の開示内容においては、基本となる「3画素のソート処理」に関しては示されていない。この「3画素のソート処理」を高速に行なえない、即ち「3画素のソート処理」に時間がかかってしまうと、全体処理時間も比例して増えてしまうことになる。3画素のデータをソート処理する場合、従来のSIMD型マイクロプロセッサでは、以下のような順序で行なっている。
【0016】
以下では、比較対象となる3画素のデータが、各PEのR0、R1、R2レジスタに格納されており、ソート処理後のデータは、各PEのR16、R17、R18に降順に格納される。「MAX」命令とは、2つのソースレジスタの値の比較を行い、大きい方のデータを指定したレジスタに書き戻す命令であり、同様に「MIN」命令とは、小さい方のデータを指定したレジスタに書き戻す命令である。
【0017】
1.R0とR1とのMAX演算を行い、結果をR16に格納する。
2.R0とR1とのMIN演算を行い、結果をR17に格納する。
3.R2とR17とのMIN演算を行い、結果をR18に格納する。
4.R2とR17とのMAX演算を行い、結果をR17に格納する。
5.R16とR17とのMAX演算を行い、結果をR16に格納する。
6.R16とR17とのMIN演算を行い、結果をR17に格納する。
【0018】
以上のように、6サイクルの処理サイクルが必要となる。
【0019】
特開平11−149554号の手法により、「3×3画素」のメディアン・フィルタ処理を行なうには、
(1)「列」方向に3画素のデータをソートする(「SIMD」であるから、3列分、同時実行可能である。)。;6サイクル
(2)「行」方向に3画素のデータをソートする。;3行で10サイクル
(3)対角線方向に3画素のデータをソートする。;6サイクル
となり、全体で22サイクルが必要となる。上記(2)においては、3画素のMAX、MINを求める際に、ソート処理が不要であり2サイクルで求められる。よって、処理時間が3行分のソートに必要な18サイクルよりは短く済む。
【0020】
【発明が解決しようとする課題】
本発明は、SIMD型マイクロプロセッサの各プロセッサエレメントにおいて、データのソート処理を高速に行ない得ることを目的としている。
【0021】
【課題を解決するための手段】
本発明は、上記目的を達成するために為されたものである。本発明に係る請求項1に記載のソート処理方法は、
複数のプロセッサエレメントを有するSIMD型マイクロプロセッサであって、
各プロセッサエレメントの備える特定のレジスタに格納される値と、オペランド指示されたソースレジスタに格納される値との、大小比較を行う第1のインストラクションにて、
比較の結果、大きい方のデータを該特定のレジスタに格納し、
小さい方のデータを、ソースレジスタに格納するか若しくはソースレジスタ以外のオペランド指示されたディスティネーションレジスタに格納し、
更に、
各プロセッサエレメントの備える特定のレジスタに格納される値と、オペランド指示されたソースレジスタに格納される値との、大小比較を行う第2のインストラクションにて、
比較の結果、小さい方のデータを該特定のレジスタに格納し、
大きい方のデータを、ソースレジスタに格納するか若しくはソースレジスタ以外のオペランド指示されたディスティネーションレジスタに格納することを特徴とするSIMD型マイクロプロセッサを
利用するソート処理方法であって、
各プロセッサエレメントにて各プロセッサエレメントに備わるn個(nは4以上の自然数 )の、第1の汎用レジスタから第n番目の汎用レジスタを、ソートバッファとして使用し、
上記ソートバッファにおいては、第1番目の汎用レジスタから第n番目の汎用レジスタへ大きい数値から順に格納し、
よって、各プロセッサエレメントにて、n個のデータをソート処理する方法において、
(1)1番目の比較対象データを特定のレジスタにロードする、工程1と、
(2)2番目の比較対象データと特定のレジスタのデータとの、第1のインストラクションの演算を行い、第n番目の汎用レジスタには小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残す、工程2と、
(3)3番目の比較対象データと特定のレジスタのデータとの、第2のインストラクションの演算を行い、第(n−2)番目の汎用レジスタには大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残し、
続いて、第n番目の汎用レジスタのデータと特定のレジスタのデータとの、第2のインストラクションの演算を行い、第(n−1)番目の汎用レジスタには大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残す、工程3と、
(4)4番目の比較対象データと特定のレジスタのデータとの、第1のインストラクションの演算を行い、第n番目の汎用レジスタには小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残し、
続いて、第(n−1)番目の汎用レジスタのデータと特定レジスタのデータとの、第1のインストラクションの演算を行い、第(n−1)番目の汎用レジスタに小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残し、
更に続いて、第(n−2)番目の汎用レジスタのデータと特定レジスタのデータとの、第1のインストラクションの演算を行い、第(n−2)番目の汎用レジスタに小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残す、工程4と、
(5)(2i−1)番目(iは3以上の自然数)の比較対象データと特定のレジスタのデータとの、第2のインストラクションの演算を行い、第[n−(2i−2)]番目の汎用レジスタには大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残し、
続いて、第[n−(2i−4)]番目の汎用レジスタのデータと特定のレジスタのデータとの、第2のインストラクションの演算を行い、第[n−(2i−3)]番目のレジスタには大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残し、
この後、同様にソートバッファにて1つずつ序数の大きい汎用レジスタに移行しつつ、ソートバッファの汎用レジスタのデータと特定のレジスタのデータとの、第2のインストラクションの演算を行い、大きい方のデータを1つ序数が小さい汎用レジスタに書き戻すことを繰り返し、最後に第n番目の汎用レジスタのデータと特定のレジスタのデータとの、第2のインストラクションの演算を行い、第(n−1)番目の汎用レジスタに大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残す、工程5と、
(6)2i番目の比較対象データと特定のレジスタのデータとの、第1のインストラクションの演算を行い、第n番目の汎用レジスタには小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残し、
続いて、第(n−1)番目の汎用レジスタのデータと特定のレジスタのデータとの、第1のインストラクションの演算を行い、第(n−1)番目の汎用レジスタに小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残し、
この後、同様にソートバッファにて1つずつ序数の小さい汎用レジスタに移行しつつ、ソートバッファの汎用レジスタのデータと特定のレジスタのデータとの、第1のインストラクションの演算を行い、小さい方のデータを同じ汎用レジスタに書き戻すことを繰り返し、最後に第[n−(2i−2)]番目の汎用レジスタのデータと特定のレジスタのデータとの、第1のインストラクションの演算を行い、第[n−(2i−2)]番目の汎用レジスタに小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残す、工程6と、
を含み、
工程1、工程2、工程3及び工程4を実施し、その後、
工程5及び工程6を、両工程が一回実施される毎にiを1ずつインクリメントしながら、比較対象データがn番目のものになるまで継続し、
nが偶数の場合は、ソートバッファの最大値の端部にてソート処理を終えて終了し、一方、nが奇数の場合は、ソートバッファの最小値の端部にてソート処理を終えて終了する、
ソート処理方法である。
【0022】
本発明に係る請求項2に記載のソート処理方法は、
複数のプロセッサエレメントを有するSIMD型マイクロプロセッサであって、
各プロセッサエレメントの備える特定のレジスタに格納される値と、オペランド指示されたソースレジスタに格納される値との、大小比較を行う第1のインストラクションにて、
比較の結果、大きい方のデータを該特定のレジスタに格納し、
小さい方のデータを、ソースレジスタに格納するか若しくはソースレジスタ以外のオペランド指示されたディスティネーションレジスタに格納し、
更に、
各プロセッサエレメントの備える特定のレジスタに格納される値と、オペランド指示されたソースレジスタに格納される値との、大小比較を行う第2のインストラクションにて、
比較の結果、小さい方のデータを該特定のレジスタに格納し、
大きい方のデータを、ソースレジスタに格納するか若しくはソースレジスタ以外のオペランド指示されたディスティネーションレジスタに格納することを特徴とするSIMD型マイクロプロセッサを
利用するソート処理方法であって、
各プロセッサエレメントにて各プロセッサエレメントに備わるn個(nは4以上の自然数)の、第1の汎用レジスタから第n番目の汎用レジスタを、ソートバッファとして使用し、
上記ソートバッファにおいては、第1番目の汎用レジスタから第n番目の汎用レジスタへ大きい数値から順に格納し、
よって、各プロセッサエレメントにて、n個のデータをソート処理する方法において、
(1)1番目の比較対象データを特定のレジスタにロードする、工程1と、
(2)2番目の比較対象データと特定のレジスタのデータとの、第2のインストラクションの演算を行い、第1番目の汎用レジスタには大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残す、工程2と、
(3)3番目の比較対象データと特定のレジスタのデータとの、第1のインストラクションの演算を行い、第3番目の汎用レジスタには小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残し、
続いて第1番目の汎用レジスタのデータと特定のレジスタのデータとの、第1のインストラクションの演算を行い、第2番目の汎用レジスタには小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残す、工程3と、
(4)4番目の比較対象データと特定のレジスタのデータとの、第2のインストラクションの演算を行い、第1番目の汎用レジスタには大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残し、
続いて、第2番目の汎用レジスタのデータと特定のレジスタのデータとの、第2のインストラクションの演算を行い、第2番目の汎用レジスタに大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残し、
更に続いて、第3番目の汎用レジスタのデータと特定のレジスタのデータとの、第2のインストラクションの演算を行い、第3番目の汎用レジスタに大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残す、工程4と、
(5)(2i−1)番目(iは3以上の自然数)の比較対象データと特定のレジスタのデータとの、第1のインストラクションの演算を行い、第(2i−1)番目のレジスタには小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残し、
続いて、第(2i−3)番目の汎用レジスタのデータと特定のレジスタのデータとの、第1のインストラクションの演算を行い、第(2i−2)番目のレジスタには小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残し、
この後、同様にソートバッファにて1ずつ序数の小さい汎用レジスタに移行しつつ、ソートバッファの汎用レジスタのデータと特定のレジスタのデータとの、第1のインストラクションの演算を行い、小さい方のデータを序数が1つ小さい汎用レジスタに書き戻すことを繰り返し、最後に第1番目の汎用レジスタのデータと特定のレジスタのデータとの第1のインストラクションの演算を行い、第2番目の汎用レジスタに小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残す、工程5と、
(6)2i番目の比較対象データと特定のレジスタのデータとの、第2のインストラクションの演算を行い、第1番目の汎用レジスタには大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残し、
続いて、第2番目の汎用レジスタのデータと特定のレジスタのデータとの、第2のインストラクションの演算を行い、第2番目の汎用レジスタに大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残し、
この後、同様にソートバッファにて1つずつ序数の大きい汎用レジスタに移行しつつ、ソートバッファの汎用レジスタのデータと特定のレジスタのデータとの、第2のインストラクションの演算を行い、大きい方のデータを同じ汎用レジスタに書き戻すことを繰り返し、最後に第(2i−1)番目の汎用レジスタのデータと特定のレジスタのデータとの、第2のインストラクションの演算を行い、第(2i−1)番目の汎用レジスタに大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残す、工程6と、
を含み、
工程1、工程2、工程3及び工程4を実施し、その後、
工程5及び工程6を、両工程が一回実施される毎にiを1ずつインクリメントしながら、比較対象データがn番目のものになるまで継続し、
nが偶数の場合は、ソートバッファの最小値の端部にてソート処理を終えて終了し、一方、nが奇数の場合は、ソートバッファの最大値の端部にてソート処理を終えて終了する、
ソート処理方法である。
【0023】
【0024】
【0025】
【0026】
【発明の実施の形態】
以下、図面を参照して、本発明に係る好適な実施形態を説明する。
【0027】
図1は、本発明に係るSIMD型マイクロプロセッサ2の概略の構成を示すブロック図である。該SIMD型マイクロプロセッサ2は、概略、グローバルプロセッサ4、レジスタファイル6、及び演算アレイ8から構成される。
【0028】
(1)グローバルプロセッサ4
このグローバルプロセッサ4そのものは、いわゆるSISD型のプロセッサであり、プログラムRAM10とデータRAM12を内蔵し(図2参照)、プログラムを解読し各種制御信号を生成する。この制御信号は内蔵する各種ブロック以外に、レジスタファイル6、演算アレイ8にも供給される。また、GP(グローバルプロセッサ)命令実行時は内蔵する汎用レジスタ、ALU(算術論理演算器)等を使用して各種演算処理、プログラム制御処理をおこなう。
【0029】
(2)レジスタファイル6
PE(プロセッサエレメント)命令で処理されるデータを保持している。PE(プロセッサエレメント)3は、公知のように、SIMD(Single Instruction−Stream,Multiple Data−Stream)型プロセッサにおいて個別の演算を実行する構成単位である。図2のレジスタファイル6及び演算アレイ8が示すように、図2のSIMD型マイクロプロセッサ2では256個のPE3を含んでいる。上記のPE命令はSIMD型の命令であり、レジスタファイル6に保持されている複数のデータに対し、同時に同じ処理を行なう。このレジスタファイル6からのデータの読み出し/書き込みの制御はグローバルプロセッサ4からの制御によって行なわれる。読み出されたデータは演算アレイ8に送られ、演算アレイ8での演算処理後にレジスタファイル6に書き込まれる。
【0030】
また、レジスタファイル6はプロセッサ2外部からのアクセスが可能であり、グローバルプロセッサ4の制御とは別に、外部から特定のレジスタに対し読み出し/書き込みが行なわれる。
【0031】
(3)演算アレイ
PE命令の演算処理が行なわれる。処理の制御はすべてグローバルプロセッサ4から行なわれる。
【0032】
図2は、本発明に係るSIMD型マイクロプロセッサ2の、更に詳細な構成を示すブロック図である。
【0033】
グローバルプロセッサ4には、本プロセッサ2のプログラム格納用のプログラムRAM10と、演算データ格納用のデータRAM12が内蔵されている。さらに、プログラムのアドレスを保持するプログラムカウンタ(PC)14、演算処理のデータ格納のための汎用レジスタであるG0、G1、G2及びG3レジスタ(16、18、20、22)、レジスタ退避・復帰時に退避先データRAMのアドレスを保持しているスタックポインタ(SP)24、サブルーチンコール時にコール元のアドレスを保持するリンクレジスタ(LS)26、同じくIRQ(Interrupt ReQuest;割込み要求)時とNMI(Non−Maskable Interrupt request;禁止不能割込み要求)時の分岐元アドレスを保持するLIレジスタ28及びLNレジスタ30、プロセッサの状態を保持しているプロセッサステータスレジスタ(P)32が内蔵されている。
【0034】
これらのレジスタと、(図示していない)命令デコーダ、ALU、SCU(シーケンシャルユニット)、メモリ制御回路、割り込み制御回路、外部I/O制御回路及びGP演算制御回路とを使用して、GP命令の実行が行なわれる。
【0035】
また、PE命令実行時には、命令デコーダ(図示せず。)、レジスタファイル制御回路(図示せず。)、PE演算制御回路(図示せず。)を使用して、レジスタファイル6の制御と演算アレイ8の制御を行なう。さらに、データRAM12から複数のPEレジスタファイル6にデータを転送できるように、設定されている。
【0036】
レジスタファイル6においては、1つのPE単位に8ビットのレジスタ34が32本内蔵されており、256個のPE分の(32本の)組が、アレイ構成になっている。レジスタ34はPE毎に、R0、R1、R2、...R31と呼ばれる。それぞれのレジスタ34は、演算アレイ8に対して1つの読み出しポートと1つの書き込みポートを備えており、8ビットのリード/ライト兼用のバスで演算アレイ8からアクセスされる。32本のレジスタの内、24本(R0〜R23)はプロセッサ外部からアクセス可能であり、外部からはクロック(CLK)とアドレス(Address)、リード/ライト制御(RWB)を入力することで、任意のレジスタ34に対し、読み書きできる。残りの8本(R24〜R31)のレジスタ34は、PE演算の一時的な演算データ保存用として使用される。
【0037】
演算アレイ8は、16ビットALU36と16ビットAレジスタ38、1つ又は複数のFレジスタ40を内蔵している。PE命令による演算は、レジスタファイル6から読み出されたデータ若しくはグローバルプロセッサ4から与えられたデータをALU36の片側の入力とし、Aレジスタ38の内容をもう片側の入力として、通常、行なわれるものである。その演算結果は、Aレジスタ38に格納される。したがって、R0〜R31レジスタ34若しくはグローバルプロセッサ4から与えられたデータと、Aレジスタ38に格納されるデータとの、演算が通常行なわれることになる。
【0038】
レジスタファイル6と演算アレイ8との接続に、7to1(7対1)のマルチプレクサ42が置かれている。図2に示すように、あるマルチプレクサ42から見て、左方向の3つのPE3に含まれるR0〜R31レジスタ34のデータと、右方向の3つのPE3に含まれるR0〜R31レジスタ34のデータと、自らが属するPE3に含まれるR0〜R31レジスタ34のデータを、演算対象として選択し得るように設定されている。また、レジスタファイル6の8ビットのデータは、シフト・拡張回路44により任意のビット分だけ、左シフトしてALU36に入力する。
【0039】
さらに、8ビットの条件レジスタ(図示せず。)により、PE3別に演算実行の無効/有効の制御をしており、特定のPE3だけを演算対象として選択できるようになっている。
【0040】
各PE3には、PE番号と呼ばれる通し番号が付されている。図2のSIMD型マイクロプロセッサ2では、PEの個数が256個であるので、8ビットのビット列(即ち、00000000b〜11111111bの256通り。ここで、上記のような末尾の“b”は2進法表記であることを表す。)が、各PE3にPE番号データとして与えられる。PE番号は、各PE3に対し、PEの位置とは無関係に与えられても構わないが、本明細書においては、(左)端から順に付されているものとする。また、PE番号が「n」であるPEを、
・PE[n]
と表すことにする。従って、図2のSIMD型マイクロプロセッサ2は、左方から、PE[0]、PE[2]、PE[3]、・・・PE[254]、PE[255]により、構成される。
【0041】
なお、上記のPE番号データは、各PE3にて8ビットの入力端子を備えさせその端子をVCC若しくはGNDに結ぶ組み合わせを変えることにより、作成している。
【0042】
≪第1の実施の形態≫
図3は、本発明の第1の実施の形態に係るSIMD型マイクロプロセッサ2のブロック図、特に、1つのPE3部分を拡大したブロック図を示す。
【0043】
各PEの演算部(演算アレイ8)は、
・ALU36、
・2つのALUラッチ(ALT[1]50−1、ALT[2]50−2)、
・演算結果を格納するAレジスタ38、
・テンポラリレジスタとして利用される2つのFレジスタ(F1レジスタ40−1、F2レジスタ40−2)、
・ALU36より出力されるキャリーをラッチするCF(キャリーフラグ)54、
を含んでいる。Aレジスタ38とALU36との間には、マルチプレクサ52が挿入されて設置されており、Aレジスタ38に格納する値として、ALU36での演算結果、若しくは2つのALUラッチ(ALT[1]50−1、ALT[2]50−2)の内容の、都合3つから1つのデータが選択されることが可能となっている。このマルチプレクサ52の選択を制御する選択信号として、
・グローバルプロセッサ4からの制御信号[1]と、
・ALU36から出力されたキャリーと
が入力されている。ここで、ALU36においては、通常の演算命令を行う場合には、ALU36の演算結果をAレジスタ38に入力するようにし、(後で説明する)「MAXS」命令若しくは「MINS」命令を実行する場合には、キャリーによってALT[1]とALT[2]のどちらかが選択されてAレジスタ38に入力するように、上記選択信号により制御されるのが望ましい。
【0044】
F1レジスタ40−1及びF2レジスタ40−2は、ALT[1]もしくはALT[2]からのデータを転送することができるように構成されている。どちらのデータを入力して保持するかは図示していないが、グローバルプロセッサ4よりの制御線によって決定される。Aレジスタ38及び2つのFレジスタ(F1レジスタ40−1、F2レジスタ40−2)は、データバス55にデータを出力するための経路を有している。ここで、Aレジスタ38の出力制御は、グローバルプロセッサ4よりの制御信号2によって、2つのFレジスタ(F1レジスタ40−1、F2レジスタ40−2)の出力制御は、グローバルプロセッサ4よりの制御信号3、制御信号4、及びCF54の値によって、制御される。
【0045】
上記の第1の実施の形態に係るSIMD型マイクロプロセッサ2の動作を説明する。
【0046】
先ず、「MAXS」命令時について示す。最初、Aレジスタ38の値が、ALT[2]50−2に入力され、オペランド指示されたソースレジスタの値が、ALT[1]50−1に入力され、ALU36にて比較(減算演算)される。比較結果は、「キャリー」となってALU36より出力される。演算後、Aレジスタ38には「キャリー」の値に応じて、ALT[1]50−1及びALU[2]50−2のうち大きい(即ち、MAXS命令)値が入力される。
【0047】
F1レジスタ40−1にはALT[1]50−1の値が入力され、F2レジスタ40−2にはALT[2]50−2の値が入力されるように、グローバルプロセッサ4より制御される。
【0048】
ディスティネーションレジスタへのデータ転送に関しては、キャリーをラッチしたCF54の値に応じてF1レジスタ40−1とF2レジスタ40−2のうちで、どちらがデータバス55にデータを出力するかが決定される。そのため、小さい(MAXS命令時)値を転送することが可能となる。
【0049】
上記の説明では、ソースレジスタとディスティネーションレジスタとは別々にオペランド指示されていることが想定されている。ソースレジスタとディスティネーションとが同一のオペランド(ソースオペランドのみ)で指定されてもよい。この場合はオペランド数が少なくてすむため命令マッピング上有利である。
【0050】
続いて、「MINS」命令時について示す。MINS命令は、ALU36における比較(減算演算)の順序を、MAXS命令と逆の順序にすることで実現できる。若しくは、Aレジスタ38の入力を選択するマルチプレクサ52において、「キャリー」を反転して入力するようにし、F1レジスタ40−1にALT[2]50−2の値を入力し、F2レジスタ40−1にはALT[1]50−1の値を入力するように、グローバルプロセッサ4より制御することでも実現できる。かかる構成によれば、上記MAXS命令実行時と逆に、小さい方のデータがAレジスタ38に格納され、大きい方のデータがディスティネーションレジスタに格納される。
【0051】
≪第2の実施の形態≫
2つの比較対象データが符号無しデータの場合は、上記のように比較結果をキャリー出力によって判断することが可能である。しかし、2つの比較対象データが符号付きデータの場合には、比較結果は、ネガティブビット(ALU36の減算結果の最上位ビット)と、オーバフロービットとの、排他的論理和によって判断される必要がある。
【0052】
図4は、本発明の第2の実施の形態に係るSIMD型マイクロプロセッサ2のブロック図、特に、1つのPE3部分を拡大したブロック図を示す。
【0053】
図4のPEの構成によれば、符号無しデータ、符号付きデータの何れにも対応し得る。ALU36より出力される各フラグ(C:キャリー、V:オーバフロー、N:ネガティブ)は、Aレジスタ38への入力を選択するマルチプレクサ52及び、フラグレジスタブロック(PSR)68へと入力されている。マルチプレクサ52は、比較対象データが符号なしの場合には、キャリーによってAレジスタ38に入力するデータを選択し、符号ありの場合はオーバフロービットとネガティブビットとの排他的論理和によってAレジスタ38に入力するデータを選択するように構成される。フラグレジスタブロック(PSR)68では、各フラグのラッチを行っている。内蔵しているマルチプレクサ68によって、比較対象データが符号無しデータの場合はCF(キャリーフラグ)を、符号ありの場合はNF(ネガティブフラグ)とVF(オーバフローフラグ)との排他的論理和を、F1レジスタ40−1、F2レジスタ40−2の出力イネーブル制御信号として出力する。
【0054】
≪基本的なソート処理の実施について≫
まず、上記の図3又は図4にて示されるSIMD型マイクロプロセッサ2を利用すれば、すでにソート済みのデータに対して、引き続き新たなデータが付加更新されてきた場合に、ソート処理を効率よく行うことができる。
【0055】
以下において、5個のソート済みデータがあり、R0、R1、R2、R3、R4の各レジスタにそれぞれ格納され(但し、R0≧R1≧R2≧R3≧R4となっている)、更に、1個の未ソートデータが(付加)更新されてきた場合の、ソート処理について記述する。
【0056】
1.Aレジスタ38に、未ソートデータをロードする。
2.Aレジスタ38とR4とのデータの比較を行い、大きい方のデータをAレジスタ38に残す。
3.Aレジスタ38とR3とのデータの比較を行い、大きい方のデータをAレジスタ38に残し、小さい方のデータをR4に格納する。
4.Aレジスタ38とR2とのデータの比較を行い、大きい方のデータをAレジスタに残し、小さい方のデータをR3レジスタに格納する。
5.Aレジスタ38とR1とのデータの比較を行い、大きい方のデータをAレジスタに残し、小さい方のデータをR2レジスタに格納する。
6.Aレジスタ38とR0とのデータの比較を行い、大きい方のデータをAレジスタに残し、小さい方のデータをR1レジスタに格納する。
7.Aレジスタ38の値をR0レジスタに格納する。
【0057】
ソートバッファ(R0、R1、R2、R3、R4)の上位側(即ち、値の大きい側)に伝達すべきデータが、Aレジスタ38に残り続けるため、上記のように連続して処理を続けることが可能となっている。以上の処理は、ソートバッファの下位順から上位順側に向かって処理を行っているが、逆に上位側から下位側に向かって行っても同様であることは自明である。
【0058】
≪3個のデータのソート処理について≫
以下では、本発明の第1の実施の形態若しくは第2の実施の形態に係るSIMD型マイクロプロセッサ2を利用して、3個のデータをソートする処理について説明する。
【0059】
比較対象となるデータが各PE3のR0、R1、R2レジスタに格納されており、ソート後のデータが各PE3のR16、R17、R18レジスタに格納されるものとする。但し、R16≧R17≧R18となっている。
【0060】
1.Aレジスタ38にR0レジスタの値をロードする。
2.Aレジスタ38とR1レジスタの値を比較し、大きい方のデータをAレジスタ38に残し、小さい方のデータをR18レジスタに格納する。
3.Aレジスタ38とR2レジスタの値を比較し、小さい方のデータをAレジスタ38に残し、大きい方のデータをR16レジスタに格納する。
4.Aレジスタ38とR18レジスタの値を比較し、小さい方のデータをAレジスタ38に残し、大きい方のデータをR17レジスタに格納する。
5.Aレジスタ38のデータをR18レジスタに格納する。
【0061】
次の処理でも、上記と同様のソートが行える。
【0062】
1.Aレジスタ38にR0レジスタの値をロードする。
2.Aレジスタ38とR1レジスタの値を比較し、小さい方のデータをAレジスタ38に残し、大きい方のデータをR16レジスタに格納する。
3.Aレジスタ38とR2レジスタの値を比較し、大きい方のデータをAレジスタ38に残し、小さい方のデータをR18レジスタに格納する。
4.Aレジスタ38とR16のデータを比較し、大きい方のデータをAレジスタに残し、小さい方のデータをR17に格納する。
5.Aレジスタ38のデータをR16に格納する。
【0063】
従来のSIMD型マイクロプロセッサでは、6サイクル必要だったソート処理が、上記のように5サイクルで行えることがわかる。上記の処理において、
「1.Aレジスタ38にR0レジスタの値をロードする。」
という処理は、画像処理においては、必ず、ソートを行う以前に実施されているはずである。よって、(最後に)Aレジスタ38に格納されている画素データを最初のソート対象データとすることによって更に1サイクルを削減できることとなる。
【0064】
≪メディアン・フィルタ処理の実施について≫
以下にて、本発明を用いて、「3×3」の画素領域でのメディアン・フィルタの処理について、説明する。
【0065】
上記の場合、メディアン(中心値)は5番目のデータであるから、ソートバッファとして5個のバッファが必要であることがわかる。5個のバッファとして、ここでは、
・R16、R17、R18、R19、R20
の各レジスタを使用することにする。
【0066】
また、各PE3のR0レジスタに、一番上の行の画素データが格納されており、R1レジスタに中心の画素データが格納されており、R2レジスタに一番下の画素データが格納されているとする。SIMD型マイクロプロセッサ2においては、PE3は主走査方向に展開される。また、副走査方向(下向き)の一番下の画素データ(即ち、R2レジスタのデータ)が現ラインデータとされ、それよりも上の行の画素データに関しては、FIFOメモリ等を用いるラインバッファにライン遅延させたデータを持たせることになる。ここではR0レジスタ、R1レジスタがライン遅延されているデータとなる(図5)。
【0067】
1.R2レジスタのデータを、Aレジスタ38にロードする(現ラインデータであるから既に実施されていることが多い。)。
2.Aレジスタ38の値と、1つ左のPEのR0レジスタの値とを比較し、大きい方のデータをAレジスタ38に残し、小さい方のデータをR20レジスタに格納する。
3.Aレジスタ38の値と、同一PE内のR0レジスタの値とを比較し、小さい方のデータをAレジスタ38に残し、大きい方のデータをR18レジスタに格納する。
4.Aレジスタ38の値と、R20レジスタの値とを比較し、小さい方のデータをAレジスタ38に残し、大きい方のデータをR19レジスタに格納する。
5.Aレジスタ38の値と、1つ右のPEのR0レジスタの値とを比較し、大きい方のデータをAレジスタ38に残し、小さい方のデータをR20レジスタに格納する。
6.Aレジスタ38の値と、R19レジスタの値を比較し、大きい方のデータをAレジスタ38に残し、小さい方のデータをR19レジスタに格納する。
7.Aレジスタ38の値と、R18レジスタの値を比較し、大きい方のデータをAレジスタ38に残し、小さい方のデータをR18レジスタに格納する。
8.Aレジスタ38の値と、1つ左のPEのR1レジスタの値とを比較し、小さい方のデータをAレジスタ38に残し、大きい方のデータをR16レジスタに格納する。
9.Aレジスタ38の値と、R18レジスタの値を比較し、小さい方のデータをAレジスタ38に残し、大きい方のデータをR17レジスタに格納する。
10.Aレジスタ38の値と、R19レジスタの値を比較し、小さい方のデータをAレジスタ38に残し、大きい方のデータをR18レジスタに格納する。
11.Aレジスタ38の値と、R20レジスタの値を比較し、小さい方のデータをAレジスタ38に残し、大きい方のデータをR19レジスタに格納する。
12.Aレジスタ38の値と、同一のPEのR1レジスタの値とを比較し、大きい方のデータをAレジスタ38に残す。
13.Aレジスタ38の値と、R19レジスタの値を比較し、大きい方のデータをAレジスタレジスタに残し、小さい方のデータをR20レジスタに格納する。
14.Aレジスタ38の値と、R18レジスタの値を比較し、大きい方のデータをAレジスタ38に残し、小さい方のデータをR19レジスタに格納する。
15.Aレジスタ38の値と、R17レジスタの値を比較し、大きい方のデータをAレジスタ38に残し、小さい方のデータをR18レジスタに格納する。
16.Aレジスタ38の値と、R16レジスタの値を比較し、大きい方のデータをAレジスタ38に残し、小さい方のデータをR17レジスタに格納する。
17.Aレジスタ38の値と、1つ右のPEのR1レジスタの値とを比較し、小さい方のデータをAレジスタ38に残し、大きい方のデータをR16レジスタに格納する。
18.Aレジスタ38の値と、R17レジスタの値を比較し、小さい方のデータをAレジスタ38に残し、大きい方のデータをR17レジスタに格納する。
19.Aレジスタ38の値と、R18レジスタの値を比較し、小さい方のデータをAレジスタ38に残し、大きい方のデータをR18レジスタに格納する。
20.Aレジスタ38の値と、R19レジスタの値を比較し、小さい方のデータをAレジスタ38に残し、大きい方のデータをR19レジスタに格納する。
21.Aレジスタ38の値と、R20レジスタの値を比較し、大きい方のデータをAレジスタ38に残す。
22.Aレジスタ38の値と、1つ左のPEのR2レジスタの値とを比較し、大きい方のデータをAレジスタ38に残す。
23.Aレジスタ38の値と、R19レジスタの値を比較し、大きい方のデータをAレジスタ38に残し、小さい方のデータをR20レジスタに格納する。
24.Aレジスタ38の値と、R18レジスタの値を比較し、大きい方のデータをAレジスタ38に残し、小さい方のデータをR19レジスタに格納する。ここで、残り1画素を除いて「4位」が確定するので、これ以上ソートの必要はない。
25.Aレジスタ38に1つ右のPEのR2レジスタのデータをロードする。
26.Aレジスタ38の値と、R20レジスタの値を比較して、大きい方のデータをAレジスタ38に残す。
27.Aレジスタ38の値と、R19レジスタの値を比較して、小さい方のデータを所望のレジスタに格納する。
【0068】
図6、図7、図8及び図9において、上記のソート処理の概念図及びフロー図を順に示す。図において、「空」は、ソートバッファが空であることを、灰色に塗られた部分はソース指示(3×3の画素群)、ディスティネーション指定(R16〜R20のソートバッファ)されていることを示す。また斜線掛けされている部分はすでにデータが比較し終わっている(3×3の画素群)、すでにデータが格納されている(R16〜R20のソートバッファ)ことを示している。
【0069】
上記の処理は、「1.」の処理を含めて27サイクルであり、「1.」の処理を省いても26サイクル必要である。よって、特開平11−149554号に開示される発明よりも、若干処理サイクルは多く必要となる。但し、特開平11−149554号では、ソート対象となるデータ数が自然数の積で表わされることを利用している都合上、適用できるデータ数に制限がある(3×3など)のに対して、本発明では、ソート対象のデータ数に依存せずにソート処理を行えることが利点である。
【0070】
【発明の効果】
以上の説明から明白なように、本発明を利用することにより以下のような効果を得ることができる。
【0071】
本発明に係る第1の実施の形態若しくは第2の実施の形態のSIMD型マイクロプロセッサ2を利用すると、2つのデータを比較して、大きい(あるいは小さい)データを特定のレジスタに残し、且つ、小さい(あるいは大きい)データをオペランド指示したレジスタに格納することができる。よって、ソート用のハードウェアをSIMD型マイクロプロセッサに実装すること無しに、未ソートデータをソート済みデータとマージする際の処理時間が短縮できる。
【0072】
更に、未ソートのデータをソートする際に処理時間を短縮できるような、処理フローを実現できる。
【図面の簡単な説明】
【図1】 本発明に係るSIMD型マイクロプロセッサの概略の構成を示すブロック図である。
【図2】 本発明に係るSIMD型マイクロプロセッサの更に詳細な構成を示すブロック図である。
【図3】 本発明の第1の実施の形態に係るSIMD型マイクロプロセッサのブロック図、特に、1つのプロセッサエレメント部分を拡大したブロック図を示す。
【図4】 本発明の第2の実施の形態に係るSIMD型マイクロプロセッサのブロック図、特に、1つのプロセッサエレメント部分を拡大したブロック図を示す。
【図5】 画素とレジスタの対応を示す概念図である。
【図6】 本発明を利用する、「3×3」の画素領域でのメディアン・フィルタのソート処理の、概念図及びフロー図(1)を示す。
【図7】 本発明を利用する、「3×3」の画素領域でのメディアン・フィルタのソート処理の、概念図及びフロー図(2)を示す。
【図8】 本発明を利用する、「3×3」の画素領域でのメディアン・フィルタのソート処理の、概念図及びフロー図(3)を示す。
【図9】 本発明を利用する、「3×3」の画素領域でのメディアン・フィルタのソート処理の、概念図及びフロー図(4)を示す。
【符号の説明】
2・・・SIMD型マイクロプロセッサ、3・・・プロセッサエレメント、4グローバルプロセッサ、6・・・レジスタファイル、8・・・演算アレイ、36・・・16ビットALU、38・・・Aレジスタ、40−1・・・F1レジスタ、40−2・・・F2レジスタ、42・・・マルチプレクサ、48・・・マルチプレクサ、50−1・・・ALUラッチ[1]、50−2・・・ALUラッチ[2]、52・・・マルチプレクサ、54・・・キャリーフラグ、68・・・フラグレジスタブロック(PSR)。
Claims (2)
- 複数のプロセッサエレメントを有するSIMD型マイクロプロセッサであって、
各プロセッサエレメントの備える特定のレジスタに格納される値と、オペランド指示されたソースレジスタに格納される値との、大小比較を行う第1のインストラクションにて、
比較の結果、大きい方のデータを該特定のレジスタに格納し、
小さい方のデータを、ソースレジスタに格納するか若しくはソースレジスタ以外のオペランド指示されたディスティネーションレジスタに格納し、
更に、
各プロセッサエレメントの備える特定のレジスタに格納される値と、オペランド指示されたソースレジスタに格納される値との、大小比較を行う第2のインストラクションにて、
比較の結果、小さい方のデータを該特定のレジスタに格納し、
大きい方のデータを、ソースレジスタに格納するか若しくはソースレジスタ以外のオペランド指示されたディスティネーションレジスタに格納することを特徴とするSIMD型マイクロプロセッサを
利用するソート処理方法であって、
各プロセッサエレメントにて各プロセッサエレメントに備わるn個(nは4以上の自然数)の、第1の汎用レジスタから第n番目の汎用レジスタを、ソートバッファとして使用し、
上記ソートバッファにおいては、第1番目の汎用レジスタから第n番目の汎用レジスタへ大きい数値から順に格納し、
よって、各プロセッサエレメントにて、n個のデータをソート処理する方法において、
(1)1番目の比較対象データを特定のレジスタにロードする、工程1と、
(2)2番目の比較対象データと特定のレジスタのデータとの、第1のインストラクションの演算を行い、第n番目の汎用レジスタには小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残す、工程2と、
(3)3番目の比較対象データと特定のレジスタのデータとの、第2のインストラクションの演算を行い、第(n−2)番目の汎用レジスタには大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残し、
続いて、第n番目の汎用レジスタのデータと特定のレジスタのデータとの、第2のインストラクションの演算を行い、第(n−1)番目の汎用レジスタには大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残す、工程3と、
(4)4番目の比較対象データと特定のレジスタのデータとの、第1のインストラクションの演算を行い、第n番目の汎用レジスタには小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残し、
続いて、第(n−1)番目の汎用レジスタのデータと特定レジスタのデータとの、第1のインストラクションの演算を行い、第(n−1)番目の汎用レジスタに小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残し、
更に続いて、第(n−2)番目の汎用レジスタのデータと特定レジスタのデータとの、第1のインストラクションの演算を行い、第(n−2)番目の汎用レジスタに小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残す、工程4と、
(5)(2i−1)番目(iは3以上の自然数)の比較対象データと特定のレジスタのデータとの、第2のインストラクションの演算を行い、第[n−(2i−2)]番目の汎用レジスタには大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残し、
続いて、第[n−(2i−4)]番目の汎用レジスタのデータと特定のレジスタのデー タとの、第2のインストラクションの演算を行い、第[n−(2i−3)]番目のレジスタには大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残し、
この後、同様にソートバッファにて1つずつ序数の大きい汎用レジスタに移行しつつ、ソートバッファの汎用レジスタのデータと特定のレジスタのデータとの、第2のインストラクションの演算を行い、大きい方のデータを1つ序数が小さい汎用レジスタに書き戻すことを繰り返し、最後に第n番目の汎用レジスタのデータと特定のレジスタのデータとの、第2のインストラクションの演算を行い、第(n−1)番目の汎用レジスタに大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残す、工程5と、
(6)2i番目の比較対象データと特定のレジスタのデータとの、第1のインストラクションの演算を行い、第n番目の汎用レジスタには小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残し、
続いて、第(n−1)番目の汎用レジスタのデータと特定のレジスタのデータとの、第1のインストラクションの演算を行い、第(n−1)番目の汎用レジスタに小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残し、
この後、同様にソートバッファにて1つずつ序数の小さい汎用レジスタに移行しつつ、ソートバッファの汎用レジスタのデータと特定のレジスタのデータとの、第1のインストラクションの演算を行い、小さい方のデータを同じ汎用レジスタに書き戻すことを繰り返し、最後に第[n−(2i−2)]番目の汎用レジスタのデータと特定のレジスタのデータとの、第1のインストラクションの演算を行い、第[n−(2i−2)]番目の汎用レジスタに小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残す、工程6と、
を含み、
工程1、工程2、工程3及び工程4を実施し、その後、
工程5及び工程6を、両工程が一回実施される毎にiを1ずつインクリメントしながら、比較対象データがn番目のものになるまで継続し、
nが偶数の場合は、ソートバッファの最大値の端部にてソート処理を終えて終了し、一方、nが奇数の場合は、ソートバッファの最小値の端部にてソート処理を終えて終了する、
ソート処理方法。 - 複数のプロセッサエレメントを有するSIMD型マイクロプロセッサであって、
各プロセッサエレメントの備える特定のレジスタに格納される値と、オペランド指示されたソースレジスタに格納される値との、大小比較を行う第1のインストラクションにて、
比較の結果、大きい方のデータを該特定のレジスタに格納し、
小さい方のデータを、ソースレジスタに格納するか若しくはソースレジスタ以外のオペランド指示されたディスティネーションレジスタに格納し、
更に、
各プロセッサエレメントの備える特定のレジスタに格納される値と、オペランド指示されたソースレジスタに格納される値との、大小比較を行う第2のインストラクションにて、
比較の結果、小さい方のデータを該特定のレジスタに格納し、
大きい方のデータを、ソースレジスタに格納するか若しくはソースレジスタ以外のオペランド指示されたディスティネーションレジスタに格納することを特徴とするSIMD型マイクロプロセッサを
利用するソート処理方法であって、
各プロセッサエレメントにて各プロセッサエレメントに備わるn個(nは4以上の自然数)の、第1の汎用レジスタから第n番目の汎用レジスタを、ソートバッファとして使用し、
上記ソートバッファにおいては、第1番目の汎用レジスタから第n番目の汎用レジスタへ大きい数値から順に格納し、
よって、各プロセッサエレメントにて、n個のデータをソート処理する方法において、
(1)1番目の比較対象データを特定のレジスタにロードする、工程1と、
(2)2番目の比較対象データと特定のレジスタのデータとの、第2のインストラクションの演算を行い、第1番目の汎用レジスタには大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残す、工程2と、
(3)3番目の比較対象データと特定のレジスタのデータとの、第1のインストラクションの演算を行い、第3番目の汎用レジスタには小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残し、
続いて第1番目の汎用レジスタのデータと特定のレジスタのデータとの、第1のインストラクションの演算を行い、第2番目の汎用レジスタには小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残す、工程3と、
(4)4番目の比較対象データと特定のレジスタのデータとの、第2のインストラクションの演算を行い、第1番目の汎用レジスタには大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残し、
続いて、第2番目の汎用レジスタのデータと特定のレジスタのデータとの、第2のインストラクションの演算を行い、第2番目の汎用レジスタに大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残し、
更に続いて、第3番目の汎用レジスタのデータと特定のレジスタのデータとの、第2のインストラクションの演算を行い、第3番目の汎用レジスタに大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残す、工程4と、
(5)(2i−1)番目(iは3以上の自然数)の比較対象データと特定のレジスタのデータとの、第1のインストラクションの演算を行い、第(2i−1)番目のレジスタには小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残し、
続いて、第(2i−3)番目の汎用レジスタのデータと特定のレジスタのデータとの、第1のインストラクションの演算を行い、第(2i−2)番目のレジスタには小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残し、
この後、同様にソートバッファにて1ずつ序数の小さい汎用レジスタに移行しつつ、ソートバッファの汎用レジスタのデータと特定のレジスタのデータとの、第1のインストラクションの演算を行い、小さい方のデータを序数が1つ小さい汎用レジスタに書き戻すことを繰り返し、最後に第1番目の汎用レジスタのデータと特定のレジスタのデータとの第1のインストラクションの演算を行い、第2番目の汎用レジスタに小さい方のデータを書き戻し、特定のレジスタには大きい方のデータを残す、工程5と、
(6)2i番目の比較対象データと特定のレジスタのデータとの、第2のインストラクションの演算を行い、第1番目の汎用レジスタには大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残し、
続いて、第2番目の汎用レジスタのデータと特定のレジスタのデータとの、第2のインストラクションの演算を行い、第2番目の汎用レジスタに大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残し、
この後、同様にソートバッファにて1つずつ序数の大きい汎用レジスタに移行しつつ、ソートバッファの汎用レジスタのデータと特定のレジスタのデータとの、第2のインストラクションの演算を行い、大きい方のデータを同じ汎用レジスタに書き戻すことを繰り返し、最後に第(2i−1)番目の汎用レジスタのデータと特定のレジスタのデータとの、第2のインストラクションの演算を行い、第(2i−1)番目の汎用レジスタに大きい方のデータを書き戻し、特定のレジスタには小さい方のデータを残す、工程6と、
を含み、
工程1、工程2、工程3及び工程4を実施し、その後、
工程5及び工程6を、両工程が一回実施される毎にiを1ずつインクリメントしながら、比較対象データがn番目のものになるまで継続し、
nが偶数の場合は、ソートバッファの最小値の端部にてソート処理を終えて終了し、一方、nが奇数の場合は、ソートバッファの最大値の端部にてソート処理を終えて終了する、
ソート処理方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001103145A JP3955741B2 (ja) | 2001-04-02 | 2001-04-02 | ソート機能を有するsimd型マイクロプロセッサ |
US10/113,766 US7500089B2 (en) | 2001-04-02 | 2002-04-01 | SIMD processor with exchange sort instruction operating or plural data elements simultaneously |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001103145A JP3955741B2 (ja) | 2001-04-02 | 2001-04-02 | ソート機能を有するsimd型マイクロプロセッサ |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006294342A Division JP2007102799A (ja) | 2006-10-30 | 2006-10-30 | ソート機能を有するsimd型マイクロプロセッサ |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2002297377A JP2002297377A (ja) | 2002-10-11 |
JP3955741B2 true JP3955741B2 (ja) | 2007-08-08 |
Family
ID=18956252
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001103145A Expired - Fee Related JP3955741B2 (ja) | 2001-04-02 | 2001-04-02 | ソート機能を有するsimd型マイクロプロセッサ |
Country Status (2)
Country | Link |
---|---|
US (1) | US7500089B2 (ja) |
JP (1) | JP3955741B2 (ja) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2004066141A2 (en) * | 2003-01-15 | 2004-08-05 | Globespanvirata Incorporated | Apparatus and method for determining extreme values |
US7434034B2 (en) * | 2004-09-13 | 2008-10-07 | Ati Technologies Inc. | SIMD processor executing min/max instructions |
US7328330B2 (en) * | 2005-08-16 | 2008-02-05 | International Business Machines Corporation | Queue design supporting dependency checking and issue for SIMD instructions within a general purpose processor |
JP4686435B2 (ja) * | 2006-10-27 | 2011-05-25 | 株式会社東芝 | 演算装置 |
JP5445469B2 (ja) * | 2009-01-13 | 2014-03-19 | 日本電気株式会社 | Simd型並列データ処理装置及びデータソート方法並びにプロセッシングエレメント |
JP5763472B2 (ja) * | 2011-08-10 | 2015-08-12 | ルネサスエレクトロニクス株式会社 | 演算回路及び演算装置 |
US10223112B2 (en) * | 2011-12-22 | 2019-03-05 | Intel Corporation | Processors, methods, systems, and instructions to generate sequences of integers in which integers in consecutive positions differ by a constant integer stride and where a smallest integer is offset from zero by an integer offset |
CN104011646B (zh) | 2011-12-22 | 2018-03-27 | 英特尔公司 | 用于产生按照数值顺序的连续整数的序列的处理器、方法、系统和指令 |
CN104011644B (zh) | 2011-12-22 | 2017-12-08 | 英特尔公司 | 用于产生按照数值顺序的相差恒定跨度的整数的序列的处理器、方法、系统和指令 |
US9651424B2 (en) | 2015-02-26 | 2017-05-16 | Sciaps, Inc. | LIBS analyzer sample presence detection system and method |
US20160283549A1 (en) * | 2015-03-27 | 2016-09-29 | Intel Corporation | Value sorter |
US9939383B2 (en) | 2016-02-05 | 2018-04-10 | Sciaps, Inc. | Analyzer alignment, sample detection, localization, and focusing method and system |
US10379854B2 (en) | 2016-12-22 | 2019-08-13 | Intel Corporation | Processor instructions for determining two minimum and two maximum values |
US10831502B2 (en) | 2018-11-06 | 2020-11-10 | International Business Machines Corporation | Migration of partially completed instructions |
US10831503B2 (en) | 2018-11-06 | 2020-11-10 | International Business Machines Corporation | Saving and restoring machine state between multiple executions of an instruction |
US10831478B2 (en) * | 2018-11-06 | 2020-11-10 | International Business Machines Corporation | Sort and merge instruction for a general-purpose processor |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS62208167A (ja) * | 1986-03-10 | 1987-09-12 | Hitachi Ltd | ベクトル処理装置 |
JPH052645A (ja) | 1991-06-26 | 1993-01-08 | Kawasaki Steel Corp | 順序フイルタリング方法 |
JP3204562B2 (ja) | 1993-03-18 | 2001-09-04 | 富士通株式会社 | メディアンフィルタ処理方法 |
JPH0830577A (ja) | 1994-07-15 | 1996-02-02 | Mitsubishi Electric Corp | Simdプロセッサ |
JPH11149554A (ja) | 1997-08-21 | 1999-06-02 | Motorola Inc | 3x3グリッドのランクに基づくフィルタのSIMD計算 |
-
2001
- 2001-04-02 JP JP2001103145A patent/JP3955741B2/ja not_active Expired - Fee Related
-
2002
- 2002-04-01 US US10/113,766 patent/US7500089B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US20020174325A1 (en) | 2002-11-21 |
US7500089B2 (en) | 2009-03-03 |
JP2002297377A (ja) | 2002-10-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3955741B2 (ja) | ソート機能を有するsimd型マイクロプロセッサ | |
US8069334B2 (en) | Parallel histogram generation in SIMD processor by indexing LUTs with vector data element values | |
US7574466B2 (en) | Method for finding global extrema of a set of shorts distributed across an array of parallel processing elements | |
EP0539595A1 (en) | Data processor and data processing method | |
US20050257026A1 (en) | Bit serial processing element for a SIMD array processor | |
JPS6053349B2 (ja) | 画像処理プロセツサ | |
JP2009015556A (ja) | Simd型マイクロプロセッサ | |
US7769980B2 (en) | Parallel operation device allowing efficient parallel operational processing | |
US5274777A (en) | Digital data processor executing a conditional instruction within a single machine cycle | |
JP3458518B2 (ja) | 並列プロセッサ | |
JP4237046B2 (ja) | 画像処理装置 | |
JP2007102799A (ja) | ソート機能を有するsimd型マイクロプロセッサ | |
JP2019220003A (ja) | データ処理装置、データ処理方法、およびプログラム | |
JP4482356B2 (ja) | Simdプロセッサを用いた画像処理方法及び画像処理装置 | |
JP2022074442A (ja) | 演算装置および演算方法 | |
EP1936492A1 (en) | SIMD processor with reduction unit | |
JP2002269067A (ja) | 行列演算装置 | |
JP2007108913A (ja) | ピーク値検出を行うsimd型マイクロプロセッサ | |
US9606798B2 (en) | VLIW processor, instruction structure, and instruction execution method | |
JP3837293B2 (ja) | 定数選択機能を有するsimd型マイクロプロセッサ | |
JPH06309349A (ja) | プログラム制御のプロセッサ | |
JP2008071037A (ja) | Simd型マイクロプロセッサ | |
WO2008077803A1 (en) | Simd processor with reduction unit | |
JPH1063647A (ja) | 行列演算装置 | |
JP2004192405A (ja) | Simd型プロセッサ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060221 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060829 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20061030 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20070424 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20070507 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110511 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120511 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120511 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130511 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140511 Year of fee payment: 7 |
|
LAPS | Cancellation because of no payment of annual fees |