JP2018200692A - ベクトルプロセッサの配列ソート方法 - Google Patents

ベクトルプロセッサの配列ソート方法 Download PDF

Info

Publication number
JP2018200692A
JP2018200692A JP2018099367A JP2018099367A JP2018200692A JP 2018200692 A JP2018200692 A JP 2018200692A JP 2018099367 A JP2018099367 A JP 2018099367A JP 2018099367 A JP2018099367 A JP 2018099367A JP 2018200692 A JP2018200692 A JP 2018200692A
Authority
JP
Japan
Prior art keywords
group
array
sorting
elements
vector processor
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.)
Granted
Application number
JP2018099367A
Other languages
English (en)
Other versions
JP7241470B2 (ja
Inventor
賢 弼 金
Hyun Pil Kim
賢 弼 金
ヒョン 宇 沈
Hyun Woo Sim
ヒョン 宇 沈
成 祐 安
Seong Woo Ahn
成 祐 安
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Samsung Electronics Co Ltd
Original Assignee
Samsung Electronics Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Samsung Electronics Co Ltd filed Critical Samsung Electronics Co Ltd
Publication of JP2018200692A publication Critical patent/JP2018200692A/ja
Application granted granted Critical
Publication of JP7241470B2 publication Critical patent/JP7241470B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • G06F15/8092Array of vector units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3816Instruction alignment, e.g. cache line crossing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Algebra (AREA)
  • Complex Calculations (AREA)
  • Multi Processors (AREA)
  • Advance Control (AREA)
  • Design And Manufacture Of Integrated Circuits (AREA)

Abstract

【課題】演算速度とリソース使用量を減らして効率の良いベクトルプロセッサの配列ソート方法を提供する。【解決手段】複数の要素を含むベクトルデータ形式の配列をロードする段階と、配列を半分に分割して第1グループを形成し、第1グループのi番目(iは自然数)の要素同士をソートする段階と、第n(nは自然数)グループをそれぞれ半分に分割して第(n+1)グループを形成し、第(n+1)グループのうちの隣り合うグループのj番目(jは自然数)の要素同士をソートする段階と、第(n+1)グループが1つの要素のみを含む前まで、分割及び要素同士のソートを反復する段階と、第(n+1)グループが1つの要素のみを含むと、第(n+1)グループのうちの隣り合うグループの要素同士をソートする段階と、を有し、第1グループのi番目の要素同士をソートする段階は、SIMD処理方式で処理する段階を含む。【選択図】 図2

Description

本発明は、ベクトルプロセッサの配列ソート方法に関し、特に、演算速度とリソース使用量を減らして効率を向上したベクトルプロセッサの配列ソート方法に関する。
降順や昇順などの配列(sequence)のソートは、多くのシステムで使用される基本的な関数である。
クイックソートのように「O(nlog(n))」の演算複雑度を持つ速いソートは、個別的な要素を操作する方式なので、SIMD(Single Instruction Multiple Data)やSIMT(Single Instruction Multiple Thread)を用いるベクトルプロセッサに適用するには困難がある。
このため、ほとんどのベクトルプロセッサやマルチコアではマージソート(merge sorting)を多く使用するが、マージソートは、既にソートされたデータに対して速い特性を持っているので、併合以前にグループ化された要素の速いソートが必要である。
一般に、バイナリツリー構造のマージソートを使用する場合、その複雑度はデータ集合サイズ(N)の「O(NlogN)」に比例する。
図1は、従来の一般なマージソートを説明するための図である。
図1では要素の個数N=8の配列を昇順にソートする方法を例示的に示している。
図1を参照すると、マージソートは配列をまず分割(divide)する。
既存のスカラプロセッサでは、分割することも別に作業が必要であるが、ベクトルプロセッサでは、それぞれの要素がベクトル構造で連結されているので、分割作業を別に必要としないこともある。
よって、N個の要素からなる配列のローディングのみで分割作業は完了でき得る。
次いで、分割された要素のうち、隣り合う要素同士がソートをする。
これをマージ(merge)段階といい、細分化してマージ段階中の統治(Conquer)段階と命名することができる。
つまり、「8」と「3」の場合は、「3」が「8」よりも小さいので、順序が変わって「38」にソートできる。「2」と「9」の場合は、「2」が「9」よりも小さいので、そのまま「29」にソートされる。
このとき、それぞれの要素をバッファに取り込んで呼び出さなければならないので、N回の呼び出しレベルが達成される。
すなわち、最大N、O(N)の複雑度を持ち得る。
続いて、ソートされた部分配列同士を結合(combine)する。
このような結合段階は、マージ段階中の一部であり得る。
このとき、隣り合うサブ配列である「38」と「29」はソートされた「2389」に結合され、「17」と「45」は「1457」と結合され得る。
このとき、「38」と「29」との結合は、「3」と「2」、「9」を比較し、「8」と「9」を比較する3回の比較が必要なので、3回の呼び出しレベルが必要である。
また、「17」と「45」の結合は、「1」と「4」、「5」を比較し、「7」と「4」、「5」を比較しなければならないので、4回の呼び出しレベルが必要である。
つまり、2つの配列同士の比較は、最悪の場合には4の呼び出しレベルが必要なので、全体的に最大8の呼び出しレベルが必要である。
すなわち、複雑度はO(N)になり得る。
最後に、「2389」と「1457」とを結合する場合、「2」は「1」、「4」、「5」、「7」と比較し、「3」は「4」、「5」、「7」と比較し、「8」は「4」、「5」、「7」と比較するが、「9」はあえて比較する必要がない。
但し、配列の配置が異なる場合、最大N回の比較が必要であり、この場合にも、複雑度はO(N)になり得る。
よって、それぞれの段階で最大N回の呼び出しレベルが必要であり、各段階の複雑度はO(N)であると見られる。
N個の配列が2個ずつに分けられて一つの要素に分解されることはlog(N)回行われ、逆に、それぞれの要素が全体のソートされた配列に結合されることもlog(N)回行われ得る。
よって、最悪の場合、全体的にN×log(N)回の呼び出しレベルが必要である。
これは、全体的なマージソートの複雑度がO(N×log(N))の複雑度を持つことを意味し、これは効率の悪い演算であり、より効率の良い演算が課題となっている。
したがって、このような高い複雑度のソート方式よりもさらに低い複雑度のソート方式を使用できれば、演算速度及びメモリなどのリソース使用量を減らして効率の良い演算が可能である。
本発明は上記従来の配列ソート方法における問題点に鑑みてなされたものであって、本発明の課題は、演算速度とリソース使用量を減らして効率の良いベクトルプロセッサの配列ソート方法を提供することにある。
上記課題を達成するためになされた本発明によるベクトルプロセッサの配列ソート方法は、複数の要素(element)を含むベクトルデータ形式の配列(sequence)をロード(load)する段階と、前記配列を半分に分割して第1グループを形成し、前記第1グループのi番目(iは自然数)の要素同士をソートする段階と、第n(nは自然数)グループをそれぞれ半分に分割して第(n+1)グループを形成し、前記第(n+1)グループのうちの隣り合うグループのj番目(jは自然数)の要素同士をソートする段階と、前記第(n+1)グループが1つの要素のみを含む前まで、前記分割及び要素同士のソートを反復する段階と、前記第(n+1)グループが1つの要素のみを含むと、前記第(n+1)グループのうちの隣り合うグループの要素同士をソートする段階と、を有し、前記第1グループのi番目の要素同士をソートする段階は、SIMD(Single Instruction Multiple Data)処理方式で処理する段階を含む、ことを特徴とする。
また、上記課題を達成するためになされた本発明によるベクトルプロセッサの配列ソート方法は、N個(Nは2、nは自然数)の要素を含むベクトルデータ形式の配列をロードする(a)段階と、前記配列を、それぞれ互いに同じN/(2)個の要素を有するグループにグループ化し、それぞれのグループのうちの隣り合うグループ同士でi番目(iはN/(2)よりも小さい自然数)の要素をソートする(b)段階と、を有し,前記(b)段階は、パーミュテーション演算を用いて、前記配列と順序が変わったコピー配列を生成する(c)段階と、
前記配列と前記コピー配列に対してMin演算及びMax演算を行う(d)段階とを含み、
前記それぞれのグループのうちの隣り合うグループ同士でi番目の要素をソートする段階は、SIMD処理方式で処理する段階を含むことを特徴とする。
また、上記課題を達成するためになされた本発明によるベクトルプロセッサの配列ソート方法は、それぞれ別個の演算ユニットを含む複数のスロットと、前記複数のスロットが互いに共有するレジスタとを含むベクトルプロセッサの配列ソート方法において、N個(Nは2、nは自然数)の要素を含むベクトルデータ形式の配列をロードする(a)段階と、前記配列を、それぞれ互いに同じN/(2)個の要素を有するグループにグループ化し、それぞれのグループのうちの隣り合うグループ同士でi番目(iは自然数)の要素をソートする(b)段階と、を有し、前記(b)段階は、前記複数のスロットによって並列処理され、前記ソートは、SIMD処理方式で処理されることを特徴とする。
本発明に係るベクトルプロセッサの配列ソート方法によれば、既存のマージソートの複雑度に比べて一層低い複雑度を持つことができるという効果がある。
従来のマージソートの一例を説明するための図である。 本発明の実施形態に係るベクトルプロセッサの配列ソート方法を説明するためのフローチャートである。 本発明の実施形態に係るベクトルプロセッサの配列ソート方法を説明するための図である。 本発明の実施形態に係るベクトルプロセッサの配列ソート方法を説明するための図である。 本発明の実施形態に係るベクトルプロセッサの配列ソート方法を説明するための図である。 本発明の実施形態に係るベクトルプロセッサの配列ソート方法を説明するための図である。 本発明の実施形態に係るベクトルプロセッサの配列ソート方法が実行されるベクトルプロセッサの構造を説明するためのブロック図である。 図4のベクトルプロセッサの構造を説明するためのブロック図である。 本発明の実施形態に係るベクトルプロセッサのデータ移動アーキテクチャの概念を説明するための図である。 本発明の実施形態に係るベクトルプロセッサの配列ソート方法に使用されるパーミュテーション回路を説明するための図である。 本発明の実施形態に係るベクトルプロセッサの配列ソート方法に使用されるMin/Max回路を説明するための図である。 本発明の実施形態に係るベクトルプロセッサの配列ソート方法を説明するための図である。 本発明の実施形態に係るベクトルプロセッサの配列ソート方法の実現のためのコマンドセットを説明するための表である。 本発明の実施形態に係るベクトルプロセッサの配列ソート方法の実現のためのコマンド使用を説明するための例示図である。 本発明の実施形態に係るベクトルプロセッサの配列ソート方法の実現のためのコマンド使用を説明するための例示図である。 本発明の実施形態に係るベクトルプロセッサの配列ソート方法の実現のためのコマンド使用を説明するための例示図である。 本発明の実施形態に係るベクトルプロセッサの配列ソート方法の実現のためのコマンド使用を説明するための例示図である。
次に、本発明に係るベクトルプロセッサの配列ソート方法を実施するための形態の具体例を図面を参照しながら説明する。
以下、図2及び図3a〜図3dを参照して、本発明の実施形態に係るベクトルプロセッサの配列ソート方法を説明する。
図2は本発明の実施形態に係るベクトルプロセッサの配列ソート方法を説明するためのフローチャートであり、図3a〜図3dは本発明の実施形態に係るベクトルプロセッサの配列ソート方法を説明するための図である。
図3a〜図3dでは、16個の要素を有する配列をソートすることを例示的に示す。但し、これに限定されない。
図2を参照すると、まず、ベクトルデータを入力する(ステップS100)。
ベクトルデータはソートされていない配列データであり得る。
ソートされていない配列データは、合計N個の要素を有する。
このとき、N=2、ここで、nは自然数であり得る。但し、これに限定されない。
Nが2ではない場合には、ダミー要素が加わって2の形式に合わせられ得る。
それぞれのN個の要素は、互いに異なるSIMDレーンで演算できる。
よって、配列のSIMDレーン数はN個以上であり得る。
具体的には、図3aを参照すると、例示的に、0〜Fの合計16個の要素を有する配列を入力することができる。
これは一つの例示に過ぎず、本発明における要素の個数は限定されない。
このとき、入力は、新たにデータを入力するか、予め格納されたメモリからデータをロードすることを含む。
図3aでは、例示的に[1、6、14、3、12、10、15、5、7、2、8、11、16、4、13、9]の配列をソートすることを示す。
再び図2を参照すると、配列を二つのグループに分離する(ステップS200)。
具体的には、図3aを参照すると、第1段階(Stage1)で、配列は第(1−1) グループG(1−1)と第(1−2)グループG(1−2)に分離する。
第(1−1)グループG(1−1)及び第(1−2)グループG(1−2)は、配列が半分に分けられて形成される。
よって、第(1−1)グループG(1−1)及び第(1−2)グループG(1−2)はそれぞれN/2、すなわち8つの要素を有する。
分けられた第(1−1)グループG(1−1)及び第(1−2)グループG(1−2)は、それぞれ“0”〜“7”の番号を持つ要素を有する。
追って、それぞれの同じ番号の要素同士で比較ソートを行う。
再び図2を参照すると、グループの各要素を比較する(ステップS300)。
具体的に、図3aを参照すると、第(1−1)グループG(1−1)と第(1−2)グループG(1−2)とを互いに比較する。
第(1−1)グループG(1−1)と第(1−2)グループG(1−2)との比較はそれぞれの要素の比較であり得る。
すなわち、第(1−1)グループG(1−1)の“0”〜“7”の番号を持つ要素と、第(1−2)グループG(1−2)の“0”〜“7”の番号を持つ要素とを互いに同じ番号同士で比較してソートすることを意味する。
つまり、例えば、第(1−1)グループG(1−1)の“0”番要素である「1」と、第(1−2)グループG(1−2)の“0”番要素である「7」とを比較する。
このとき、「1」が「7」よりも小さいので、お互いの位置はそのまま維持される。
一方、第(1−1)グループG(1−1)の“1”番要素である「6」と、第(1−2)グループG(1−2)の“1”番要素である「2」とを比較すると、「6」が「2」よりも大きいので、お互いの位置を入れ替える。つまり、
「2」は第(1−1)グループG(1−1)に属し、「6」は第(1−2)グループG(1−2)に属することになる。
このような方式によって、第1段階(Stage1)で2つのグループを通じた要素ソートの結果、配列は[1、「2」、「8」、3、12、「4」、「13」、5、7、「6」、「14」、11、16、「10」、「15」、9]にソートされる。
再び図2を参照すると、各グループの要素の個数が1個よりも大きいかを判断する(ステップS400)。
これは追って1つの要素が残っているときまでグループを分割し続けるための判断段階である。
もし要素が1つだけ残っている場合、それ以上グループを分割することができないので、グループの分割を終了する。
図3aを参照すると、各グループの要素が8個なので、1つよりも大きい。
よって、グループの分割が終了しない。
再び図2を参照すると、各グループを二つのサブグループに分割する(ステップS500)。
具体的には、図3bを参照すると、第(1−1)グループG(1−1)は第(2−1)グループG(2−1)と第(2−2)グループG(2−2)に分割し、第(1−2)グループG(1−2)は第(2−3)グループG(2−3)と第(2−4)グループG(2−4)に分割する。
第(2−1)グループG(2−1)、第(2−2)グループG(2−2)、第(2−3)グループG(2−3)、及び第(2−4)グループG(2−4)は、それぞれ、第(1−1)グループG(1−1)及び第(1−2)グループG(1−2)の要素の個数の半分である4つの要素を有する。
第2段階(Stage2)では、4つのグループの要素ソートを行う。
4つのグループは、それぞれ“0”から“3”までの番号を持つ4つの要素を有する。
再び図2を参照すると、1番目のグループからすぐ隣り合うグループの要素同士の比較を行う(ステップS600)。
具体的には、図3bを参照すると、第(2−1)グループG(2−1)と第(2−2)グループG(2−2)とを互いに比較し、第(2−3)グループG(2−3)と第(2−4)グループG(2−4)を互いに比較する。
すなわち、第(2−1)グループG(2−1)と第(2−2)グループG(2−2)の同じ番号を持つ要素同士を互いに比較し、第(2−3)グループG(2−3)と第(2−4)グループG(2−4)の同じ番号を持つ要素同士を互いに比較する。
このような方式によって、配列は[1、2、8、3、12、4、13、5、7、6、14、「9」、16、10、15、11]にソートされる。
再び図2を参照すると、2番目のグループから隣り合うグループ同士の比較を行う(ステップS700)。
具体的には、図3bを参照すると、1番目のグループ及び最後のグループを除いて第(2−2)グループG(2−2)と第(2−3)グループG(2−3)の要素同士を互いに比較する。
これにより、配列は[1、2、8、3、「7」、4、13、5、「12」、6、14、9、16、10、15、11]にソートされる。
再び図2を参照すると、比較の結果が以前と同一であるか否かを判断する(ステップS800)。
もし比較結果が以前と同一である場合には、現在の段階、すなわち第2段階(Stage2)が終了し、新しい段階、すなわち図3cの第3段階(Stage3)に進行する。
第3段階(Stage3)は、現在のグループが再び分割される段階を意味する。
具体的に、図3bを参照すると、配列は「7」と「12」の部分がソートされて以前と同一ではないので、まだ第3段階(Stage3)に進行せず、第2段階(Stage2)にとどまる。
再び図2を参照すると、最大ソート回数に到達したか否かを判断する(ステップS900)。
最大ソート回数とは、各段階ごとに、予め定められたソート回数分だけソートを行い、次の段階に進むように定義された値である。
最大ソート回数は、何番目の段階であるかによって定められ得る。
すなわち、第1段階(Stage1)では1回の最大ソート回数を有し、第2段階(Stage2)では2回の最大ソート回数を有する。
また、第3段階では4回の最大ソート回数を有し、第4段階(Stage4)では6回の最大ソート回数を有することができる。
これを一般化すると、第1段階では1回の最大ソート回数を有し、第1段階を除く第k段階では2×(k−1)回の最大ソート回数を有することができる。
配列の要素の個数がN=2なので、第k段階では、各グループは2(nk)個の要素を有し、2個のグループが形成され得る。
すなわち、図2のステップS800及びステップS900の段階を考察すると、最大ソート回数の範囲内でソートが予め終了することができる。
すなわち、これを複雑度に結び付けて考えてみると、最後の第n段階では、複雑度がO(2×(log(N)−1))になる。
全体複雑度については後で再び説明する。
具体的には、図3bを参照すると、第2段階(Stage2)は、最大ソート回数である2に達したので、さらにソートせずに、第3段階(Stage3)に進む。
再び図2を参照すると、ステップS900で最大ソート回数に到達したので、ステップを戻って、要素の個数が1つより大きいかを判断し(ステップS400)、各グループを二つのサブグループに分割する(ステップS500)。
具体的には、図3cを参照すると、第(2−1)グループG(2−1)は第(3−1)グループG(3−1)と第(3−2)グループG(3−2)に分割し、第(2−2)グループG(2−2)は第(3−3)グループG(3−3)と第(3−4)グループG(3−4)に分割する。
第(2−3)グループG(2−3)は第(3−5)グループG(3−5)と第(3−6)グループG(3−6)に分割し、第(2−4)グループG(2−4)は第(3−7)グループG(3−7)と第(3−8)グループG(3−8)に分割する。
第(3−1)グループG(3−1)、第(3−2)グループG(3−2)、第(3−3)グループG(3−3)、第(3−4)グループG(3−4)、第(3−5)グループG(3−5)、第(3−6)グループG(3−6)、第(3−7)グループG(3−7)、及び第(3−8)グループG(3−8)は、それぞれ、第(2−1)グループG(2−1)、第(2−2)グループG(2−2)、第(2−3)グループG(2−3)及び第(2−4)グループG(2−4)の要素の個数の半分である2つの要素を有する。
第3段階(Stage3)では、8つのグループの要素ソートを行う。
8つのグループは、それぞれ“0”から“1”までの番号を持つ2つの要素を有する。
再び図2を参照すると、1番目のグループからすぐ隣り合うグループの要素同士の比較を行う(ステップS600)。
具体的には、図3cを参照すると、第(3−1)グループG(3−1)と第(3−2)グループG(3−2)とを互いに比較し、第(3−3)グループG(3−3)と第(3−4)グループG(3−4)とを互いに比較する。
また、第(3−5)グループG(3−5)と第(3−6)グループG(3−6)とを互いに比較し、第(3−7)グループG(3−7)と第(3−8)グループG(3−8)とを互いに比較する。
すなわち、第(3−1)グループG(3−1)と第(3−2)グループG(3−2)の同じ番号を持つ要素同士を互いに比較し、第(3−3)グループG(3−3)と第(3−4)グループG(3−4)の同じ番号を持つ要素同士を互いに比較する。
また、第(3−5)グループG(3−5)と第(3−6)グループG(3−6)の同じ番号を持つ要素同士を互いに比較し、第(3−7)グループG(3−7)と第(3−8)グループG(3−8)の同じ番号を持つ要素同士を互いに比較する。
このような方式によって、配列は[1、2、8、3、「7」、4、13、5、「12」、6、14、9、「15」、10、「16」、11]にソートされる。
再び図2を参照すると、2番目のグループから隣り合うグループ同士の比較を行う(ステップS700)。
具体的には、図3cを参照すると、1番目のグループ及び最後のグループを除いて第(3−2)グループG(3−2)と第(3−3)グループG(3−3)の要素同士を互い比較し、第(3−4)グループG(3−4)と第(3−5)グループG(3−5)の要素同士を互いに比較し、第(3−6)グループG(3−6)と第(3−7)グループG(3−7)の要素同士を互いに比較する。
これにより、配列は[1、2、「7」、3、「8」、4、「12」、5、「13」、6、14、9、「15」、10、「16」、11]にソートされる。
再度図2及び図3cを参照すると、比較結果が以前と同一ではなく(ステップS800)、最大ソート回数(第3段階では4回の最大ソート回数)に達してもいない(ソート2回)ので(ステップS900)、ステップを戻り、再び1番目のグループから隣り合うグループの要素比較を行う(ステップS600)。
これにより、配列は[1、2、7、3、8、4、12、5、13、6、14、9、15、10、16、11]にソートされる。
上述した説明では、比較結果が以前と同一であるか否かを判断する段階(ステップS800)がステップS600とステップS700の2つの段階をすべて経た後に行われるようにしたが、これに限定されない。
ステップS800段階は、ステップS600段階とステップS700段階との間で行われてもよく、ステップS700段階の直後に行われてもよく、ステップS600段階とステップS700段階が行われた直後ごとに行われてもよい。
ソートされた配列が以前結果と同一なので、第3段階(Stage3)は終了し、第4段階に進行する。
このとき、最大ソート回数には到達していないが、これを判断する必要はない。
再び図2を参照すると、再びステップを戻って、要素の個数が1つより大きいかを判断し(ステップS400)、各グループを二つのサブグループに分割する(ステップS500)。
具体的に、図3dを参照すると、それぞれのグループはそれぞれ1つの要素に分割される。
つまり、要素1個が自らがグループを成す。よって、合計16個のグループがあり、グループはそれぞれ1つの要素を有する。
再び図2を参照すると、1番目のグループからすぐ隣り合うグループの要素同士の比較を行う(ステップS600)。
具体的に、図3dを参照すると、例えば、「1」と「2」とを比較し、「7」と「3」とを比較する。
このように、順次隣り合う要素同士を互いに比較してソートする。
このような方式によって、配列は[1、2、「3」、「7」、「4」、「8」、「5」、「12」、「6」、「13」、「9」、「14」、「10」、「15」、「11」、「16」]にソートされる。
再び図2を参照すると、2番目のグループから隣り合うグループ同士の比較を行う(ステップS700)。
具体的に、図3dを参照すると、1番目の要素及び最後の要素を除いて、隣接する要素を互いに比較する。
例えば、「2」と「3」とを比較し、「7」と「4」とを比較する。
このような方式によって、配列は[1、2、3、「4」、「7」、「5」、「8」、「6」、「12」、「9」、「13」、「10」、「14」、「11」、「15」、16]にソートされる。
図2及び図3dを参照すると、比較結果が以前と同一ではなく(ステップS800)、最大ソート回数(第4段階では6回の最大ソート回数)に到達してもいないので(ステップS900)、再びステップを戻って、1番目のグループから隣り合うグループの要素の比較を行う(ステップS600)。
これにより、配列は[1、2、3、4、「5」、「7」、「6」、「8」、「9」、「12」、「10」、「13」、「11」、「14」、15、16]にソートされる。
再び図2を参照すると、2番目のグループから隣り合うグループ同士の比較を行う(ステップS700)。
具体的に、図3dを参照すると、1番目の要素と最後の要素を除いて、隣接する要素を互いに比較する。
たとえば、「2」と「3」とを比較し、「4」と「5」とを比較する。
このような方式によって、配列は[1、2、3、4、5、「6」、「7」、「8」、「9」、「10」、「12」、「11」、「13」、14、15、16]にソートされる。
図2及び図3dを参照すると、比較結果が以前と同一ではなく(ステップS800)、最大ソート回数に達してもいないので(ステップS900)、再びステップを戻って、1番目のグループから隣り合うグループの要素比較を行う(ステップS600)。
これにより、配列は[1、2、3、4、5、6、7、8、9、10、「11」、「12」、13、14、15、16]にソートされる。
再び図2を参照すると、2番目のグループから隣り合うグループ同士の比較を行う(ステップS700)。
具体的には、図3dを参照すると、1番目の要素と最後の要素を除いて、隣接する要素を互いに比較する。
たとえば、「2」と「3」とを比較し、「4」と「5」とを比較する。
このような方式により、配列は[1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16]にソートされる。
再び図2を参照すると、比較結果が以前と同一であり(ステップS800)、要素の個数が1よりも大きくないので(ステップS400)、ソートを終了する。
図3a〜図3d及び図2を参照すると、配列全体の大きさはN=2ので、第1段階(Stage1)を除いた第k段階でのソート回数は最大2×(k−1)回であり、最後の第n段階での最大ソート回数はn=log(N)によって2×(log(N)−1)になる。
したがって、第1段階(Stage1)を除いた全体ソート回数は、数列の和によって、2+4+6+…+2×(log2(N)−1)=[2+2×{log(N)−1}]×{log2(N)−1}/2で表すことができ、第1段階(Stage1)の1番を加えると、1+2+4+6+…+2×(log2(N)−1)=1+[2+2×{log(N)−1}]×{log2(N)−1}/2≒{log2(N)}であって、近似が可能である。
したがって、本発明の実施形態に係るベクトルプロセッサの配列ソート方法は、既存のマージソートのO(N×log(N))の複雑度に比べて一層低いO({log2(N)})の複雑度を持つことができる。
図3a〜図3d及び図2では、トップダウン(top down)方式で漸次分解するソートを説明したが、これとは逆に、ボトムアップ(bottom up)方式でもソートを行うことができる。
ボトムアップ方式の場合にも、従来のマージソートのO(N*log(N))の複雑度に比べて一層低いO({log2(N)})の複雑度を持つことができるので、ソートの効率を高めることができる。
以下、図4〜図6を参照して、本発明の実施形態に係るベクトルプロセッサの配列ソート方法が実行されるベクトルプロセッサを説明する。
図4は本発明の実施形態に係るベクトルプロセッサの配列ソート方法が実行されるベクトルプロセッサの構造を説明するためのブロック図であり、図5は図4のベクトルプロセッサの構造を説明するためのブロック図であり、図6は本発明の実施形態に係るベクトルプロセッサのデータ移動アーキテクチャの概念を説明するための図である。
図4を参照すると、ベクトルプロセッサは、プロセッサ200、コントローラ300、及びメモリバス100を含む。
プロセッサ200は、算術演算を行うプロセッサである。
本発明の実施形態において、プロセッサ200は、予測(prediction)演算、ベクトルパーミュート(vector permute)演算、ベクトルビット操作(vector bit manipulation)演算、バタフライ(butterfly)演算、ソート(sorting)演算などのベクトル特化コマンドを含むベクトル演算処理に特化したベクトルプロセッサで実現できる。
本発明の実施形態において、プロセッサ200は、SIMD(Single Instruction Multiple Data)及び多重スロットVLIW(Very Long Instruction Word)構造を採用することができる。
プロセッサ200は、レジスタ(212、214)を含み、レジスタ(212、214)を用いて算術演算を行う。
本発明の実施形態において、レジスタ(212、214)は、SR(Scalar Register)212及びVR(Vector Register)214のうちの少なくとも一つを含むことができる。
ここで、SR212はプロセッサ200のスカラ演算に使用されるレジスタであり、VR214はプロセッサ200のベクトル演算に使用されるレジスタである。
図5を参照すると、プロセッサ200は、フェッチユニット220及びデコーダ230を含む。
デコーダ230は、フェッチユニット220から提供されたインストラクションをデコードする。
本発明の実施形態において、インストラクションは、VLIWに応じて3つのスロット(slot)(240a、240b、240c)によって処理される。
例えば、フェッチユニット220からフェッチされたインストラクションが96ビットである場合、デコーダ230は、フェッチされたインストラクションをそれぞれ32ビットからなる3つのインストラクションにデコードし、3つのインストラクションは、それぞれのスロット(240a、240b、240c)によって処理される。
本実施形態では、説明のための一例として、フェッチされたインストラクションが3つのインストラクションにデコードされて3つのスロットによって処理するものを示したが、本発明の範囲はこれに限定されるものではなく、インストラクションは、2つ以上の任意の個数のスロットによって処理できるように実現してもよい。
本実施形態において、3つのスロット(240a、240b、240c)はすべて同時に実行可能であり、このような並列処理を効率よく行うために、スカラ機能ユニット(Scalar Functional Unit:SFU)(242a、242b、242c)、ベクトル機能ユニット(Vector Functional Unit:VFU)(244a、244b、244c)、移動ユニット(MoVe unit:MV)(246a、246b、246c)が3つのスロット(240a、240b、240c)に効率よく配置される。
具体的に、第1スロット240aはSFU242a、VFU244a、及びMV246aを含み、第2スロット240bはSFU242b、VFU244b、及びMV246bを含み、また、第3スロット240cはSFU242c、VFU244c、及びMV246cを含む。
そして、プロセッサ200は、各スロット(240a、240b、240c)に含まれているMV(246a、246b、246c)を用いてお互いのデータを共有することができる。
一方、SFU(242a、242b、242c)によって処理された結果は、図4で説明したSR212に格納し、VFU(244a、244b、244c)によって処理された結果は、図4で説明したVR214に格納する。
もちろん、SR212及びVR214に格納された結果は必要に応じてプロセッサ200によって使用できる。
しかし、図5に示した構成は、以下で本発明の様々な実施形態についての説明の便宜のための一例に過ぎなく、本発明の範囲がこれに限定されないのは当該技術分野における通常の技術者にとって自明である。
図6は、本発明の実施形態に係るベクトルプロセッサのデータ移動アーキテクチャの概念を説明するための図である。
図6を参照すると、本発明の実施形態に係るベクトルプロセッサのデータ移動アーキテクチャは、メモリ階層105、レジスタファイル110、データ配置レイヤー130、複数のALU160、及びこれらの要素を全体的に制御する制御部170を含む。
ここで、メモリ階層105は、メモリインターフェース(memory interface)を提供する。
先立って図4に関連して説明したメモリ装置、メモリバス100などがメモリ階層105に対応する。
レジスタファイル110は、図5に関連して先立って説明した、SR212及びVR214を含むレジスタ(212、214)に対応する。
データ配置レイヤー130は、プロセッサ200が処理するさまざまなサイズのデータ(例えば、マトリックス)に対する演算を効率よく行うためのデータパターンを生成する。
上記アーキテクチャは、複数のALU160が共有することが可能なレジスタ(212、214)を用いて精巧なフロー制御及び複雑な算術演算の実行を可能にしながらも、データ配置レイヤー130を用いて、レジスタ(212、214)に格納されたデータをパターン化することにより、入力データの再使用性を向上させることができる。
図4〜図6のベクトルプロセッサを用いれば、本発明の実施形態に係る配列ソート方法はより効率よく演算できる。
つまり、図3a〜図3dに示した配列ソート方法は、それぞれのグループごとに、データ依存度なしでソートを同時に行うので、これをVLIWの並列処理で行うことができる。
すなわち、例えば、図3bに示した第(2−1)グループG(2−1)と第(2−2)グループG(2−2)のソート、及び第(2−3)グループG(2−3)と第(2−4)グループG(2−4)のソートは、互いにデータ依存度が全くないので、同時に互いに異なるスロットでこれを処理することができる。
これにより、一層速い速度と一層高い効率で配列のソートを完了することができる。
さらに、データ依存度のある順次演算でも、レジスタがそれぞれのスロットごとに共有されるので、メモリの呼び出しを必要とすることなく、互いに異なるスロットの機能ユニットが作業を互いに渡しながら完了することができる。
つまり、段階ごとに最適の演算を行うことができるスロットから作業を引き渡されて行うことができる。
これにより、全体的なソート演算の効率を大幅に高めることができる。
以下、図3a〜図3d、図7及び図8を参照して、本発明の実施形態に係るベクトルプロセッサの配列ソート方法の演算について説明する。
図7は、本発明の実施形態に係るベクトルプロセッサの配列ソート方法に使用されるパーミュテーション回路を説明するための図であり、図8は、本発明の実施形態に係るベクトルプロセッサの配列ソート方法に使用されるMin/Max回路を説明するための図である。
図7を参照すると、パーミュテーション回路は、ベクトルレジスタ20、マルチプレクサ選択信号10、及び第1〜第8マルチプレクサ(M1〜M8)を含む。
ベクトルレジスタ20は、パーミュテーション回路に入力されるインプットデータ(I1〜I8)を提供し、追ってパーミュテーション回路から出力されるアウトプットデータ(O1〜O8)を格納する。
ベクトルレジスタ20は、図4〜図6のVR214又はレジスタファイル110に該当し得る。
ベクトルレジスタ20は、マルチプレクサ選択信号10も提供する。
これにより、第1〜第8マルチプレクサ(M1〜M8)は、インプットデータ(I1〜I8)を、マルチプレクサ選択信号10によって配置を変えてアウトプットデータ(O1〜O8)として出力する。
本実施形態において、インプットデータ(I1〜I8)とアウトプットデータ(O1〜O8)が8つの要素を有するベクトルデータの形式を持ち、第1〜第8マルチプレクサ(M1〜M8)が8つのマルチプレクサを含むが、これは一つの例示に過ぎず、これらに限定されない。
つまり、ベクトルデータの個数やマルチプレクサの個数は必要に応じていくらでも変更できる。
インプットデータ(I1〜I8)とアウトプットデータ(O1〜O8)は、ベクトルデータであって、それぞれの要素が別個のSIMDレーンによって処理される。
これにより、ベクトルプロセッサは、スカラプロセスとは異なり、速い演算速度を示すことができる。
第1〜第8マルチプレクサ(M1〜M8)は、インプットデータ(I1〜I8)の8つの要素すべてを入力として受け、これをアウトプットデータ(O1〜O8)として出力する。
図8は、本発明の実施形態に係るベクトルプロセッサの配列ソート方法に使用されるMin/Max回路を説明するための図である。
図8を参照すると、Min/Max回路は、ベクトルレジスタ20、ベクトルコントロールレジスタ30、及びMin/Max演算器40を含む。
ベクトルレジスタ20は、Min/Max回路に入力されるD1とD2を提供し、追ってMin/Max回路から出力されるD0を格納する。
ベクトルレジスタ20は、図4〜図6のVR214又はレジスタファイル110に該当する。
ベクトルコントロールレジスタ30は、図8では別個に示したが、ベクトルレジスタ20と統合されて構成されてもよい。
ベクトルコントロールレジスタ30は、Min/Max演算器のコントロール信号であるコントロールベクトルVcを格納し、これをMin/Max演算器40に提供する。
Min/Max演算器40は複数であり得る。
SIMD処理方式に応じて、D1、D2、及びD0がN個の要素を有するベクトルデータである場合、Min/Max演算器40もN個であり得る。
図では全部で16個のMin/Max演算器40が示したが、これは一つの例示に過ぎず、これに限定されるものではない。
Min/Max演算器40は、D1とD2の要素それぞれを比較して最大値又は最小値を出力する。
このとき、最大値を出力するか、最小値を出力するかは、コントロールベクトルVcによって定められ得る。
Min/Max演算器40は、減算器41とマルチプレクサ43を含み得る。
減算器41は、D1とD2の要素の入力を受けて両者間の差を出力する。
マルチプレクサ43は、上記両者間の差の符号に応じて、D1とD2の要素のうち、どの値が最大値であるか、どの値が最小値であるかを判断する。
これはD1とD2の要素の差の符号情報を持っているLSB(least significant bit)によって容易に判断することができる。
このとき、コントロールベクトルVcがコントロール信号ctrlとしてマルチプレクサ43に入力され、これに応じて、D1及びD2のいずれかの値が最大値もしくは最小値として出力される。
本発明の実施形態に係るベクトルプロセッサの配列ソート方法は、パーミュテーション回路とMin/Max回路を用いて要素同士のソートを行うことができる。
具体的には、図3a、図7及び図8を参照すると、提供される配列[1、6、14、3、12、10、15、5、7、2、8、11、16、4、13、9]に対して、パーミュテーション回路はコピー配列[7、2、8、11、16、4、13、9、1、6、14、3、12、10、15、5]を出力する。
つまり、インプットデータ(I1〜I8)は上記配列であり、アウトプットデータ(O1〜O8)は上記コピー配列であり得る。
このとき、マルチプレクサ選択信号10は、[0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F]の配列に対して、[8、9、A、B、C、D、E、F、0、1、2、3、4、5、6、7]で表され、これは2つのグループ、すなわち、第(1−1)グループG(1−1)と第(1−2)グループG(1−2)が位置を入れ替えたことを意味する。
また、ベクトルレジスタ20は、このようなコピー配列を格納してMin/Max回路に提供する。
Min/Max回路は、配列[1、6、14、3、12、10、15、5、7、2、8、11、16、4、13、9]をD1とし、コピー配列[7、2、8、11、16、4、13、9、1、6、14、3、12、10、15、5]をD2とする。
これにより、Min/Max演算器40は第(1−1)グループG(1−1)と第(1−2)グループG(1−2)の同じ番号の要素同士の比較を行うことができる。
このとき、コントロールベクトルVcは、要素が「0」である場合にはmin値、要素が「1」である場合にはmax値を意味するとすれば、[0、0、0、0、0、0、0、0、1、1、1、1、1、1、1、1]であり得る。もちろん、これは昇順の場合であり、降順の場合には、コントロールベクトルVcは[1、1、1、1、1、1、1、1、0、0、0、0、0、0、0、0]になる。
したがって、D0の前半部はmin値が出力され、後半部はmax値が出力される。
すなわち、このようなパーミュテーション演算とMin/Max演算を介して、グループソートの段階を単に2つの段階で簡単に行うことができる。
このようなMin/Max回路とパーミュテーション回路は、単にマルチプレクサと減算器などの共用の演算装置を用いてSIMD演算を行うので、ソートのための専用ハードウェアがなくても公共のベクトルプロセッサを介していくらでも実現できる。
さらに、上述した複雑度の面でも優れるので、非常に効率よくソートを行うことができる。
以下、図9を参照して、本発明の実施形態に係るベクトルプロセッサの配列ソート方法を説明する。
上述した説明と重複する部分は簡略にするか或いは省略する。
図9は、本発明の実施形態に係るベクトルプロセッサの配列ソート方法を説明するための図である。
図9を参照して、SIMDレーンより多くのデータをソートする場合の配列ソート方法を説明する。
SIMDレーンの個数が16個であるとき、32個の要素を有する配列をソートすることを想定する。
まず、32個の要素なので、2つのベクトルデータに分けて入力する。
すなわち、それぞれ16個の要素を有する第1配列S1と第2配列S2に入力或いはロードする。
第1配列S1と第2配列S2は、それぞれ、図3a〜図3dで説明した本発明の実施形態に係る配列ソート方法でそれぞれソートする。
このとき、本発明の実施形態に係るベクトルプロセッサは、互いに異なるスロットでVLIWモードにて第1配列S1及び第2配列S2を並列的にソートする。但し、これに限定されるものではない。
続いて、第1配列S1は、それぞれ8つの要素を有する第1グループG1及び第2グループG2と定義する。
第2配列S2は、それぞれ8つの要素を有する第3グループG3及び第4グループG4と定義する。
次いで、第1グループG1と第3グループG3とを連結する第3配列S3、及び第2グループG2と第4グループG4とを連結する第4配列S4を形成する。
続いて、第3配列S3と第4配列S4を、本発明の実施形態に係る配列ソート方法によってそれぞれソートする。
このとき、本発明の実施形態に係るベクトルプロセッサは、互いに異なるスロットでVLIWモードにて第3配列S3及び第4配列S4を並列的にソートする。但し、これに限定されるものではない。
ソートされた後の第3配列S3は、それぞれ8つの要素を有する第5グループG5と第6グループG6を含む。
また、ソートされた後の第4配列S4は、それぞれ8つの要素を有する第7グループG7と第8グループG8を含む。
次いで、第6グループG6と第7グループG7とを連結する第5配列S5を形成する。
続いて、第5配列S5を本発明の実施形態による配列ソート方法でソートする。
これにより、第5グループG5、第5配列S5、及び第8グループG8の順に、合計32個の要素を有するデータがソートされる。
図10は本発明の実施形態に係るベクトルプロセッサの配列ソート方法の実現のためのコマンドセットを説明するための表である。
一般なベクトルプロセッサは、min値又はmax値の処理のための関数を支援するが、すべてのSIMDレーンに同じ演算が実行できる。
すなわち、全体レーンに対してmin値及びmax値のうちのいずれか一つのみを見つける形式である。
この場合、同一演算をもう一度さらに行うことでmin値とmax値をすべて見つけることができるので、追加のオーバーヘッドが発生する。
本発明では、SIMDレーンの予測演算(predication−ベクトルプロセッサのSIMDレーンのうち、特定のレーンのみ該当演算を行うこと)のために存在するベクトルコントロールレジスタを活用してmin値とmax値を同時に処理することができる。
図10を参照すると、図7及び図8で実現されたパーミュテーション又はMin/Maxコマンドが実現されることが分かる。
以下、図11a〜図11dを参照して、図10のコマンドと図7及び図8の回路を用いて配列をソートすることを説明する。
図11a〜図11dは、本発明の実施形態に係るベクトルプロセッサの配列ソート方法の実現のためのコマンド使用を説明するための例示図である。
図11a〜図11dは、図3a〜図3dのソートにコマンドに対する付加的な表示をした図である。
図11aを参照すると、まず、「ld」コマンドを用いてv3のベクトルをロードする。
このとき、v3は図7のマルチプレクサ選択信号10である。
すなわち、2つのグループの位置を互いに入れ替えるパーミュテーション演算のための第1〜第8マルチプレクサ(M1〜M8)の選択信号である。
続いて、「vpmt」コマンドを介してv1のコピー配列を形成する。
次いで、「ld」コマンドを介してvcをロードする。
vcは図8のMin/Max演算器40のコントロールベクトルVcである。
すなわち、Min/Max演算の出力結果、配列の前半部はmin値(0)であり、後半部はmax値(1)であることを意味するベクトルである。
続いて、「vminmax」コマンドを介して、v1に、第1段階(Stage1)のグループソートをした値を格納する。
次いで、4つのグループのために、v3を再びロードし(「ld」コマンド)、これをパーミュテーションした結果をv2へ出力する(「vpmt」コマンド)。
続いて、vcをロードし、2つのグループずつmin値とmax値が表示されなければならないので、vcは[0、0、0、0、1、1、1、1、0、0、0、0、1、1、1、1]のようにロードされる。
次に、v0に再びMin/Max演算値を格納する(「vminmax」コマンド)。
このとき、それぞれのld、vpmt、vminmaxなどのコマンドは、互いに異なるスロットによって動作することができる。それぞれのスロットは、レジスタを共有するので、メモリにオーバーヘッドを増加させずに並列処理が可能である。
図11bを参照すると、これも同様の方式で、ld、vpmt、ld、vminmaxのコマンドを実行する。
もしグループのうち1番目のグループと最後のグループが除かれてソートされる場合には、図7のマルチプレクサ選択信号10のためのv3が[0、1、2、3、8、9、A、B、4、5、6、7、C、D、E、F]のようにロードされる。
これは1番目のグループと最後のグループの要素を変えなくて、Min/Max演算において1番目のグループ及び最後のグループの要素が変更されないようにするためである。
図11c及び図11dにおいても、これらと同様にコマンドを用いて演算できる。
尚、本発明は、上述の実施形態に限られるものではない。本発明の技術的範囲から逸脱しない範囲内で多様に変更実施することが可能である。
10 マルチプレクサ選択信号
20 ベクトルレジスタ
30 ベクトルコントロールレジスタ
40 Min/Max演算器
41 減算器
43 マルチプレクサ
100 メモリバス
105 メモリ階層
110 レジスタファイル
130 データ配置レイヤー
160(160a〜d) ALU
170 制御部
200 プロセッサ
212 (SR)レジスタ
214 (VR)レジスタ
220 フェッチユニット
230 デコーダ
240a、240b、240c (第1〜第3)スロット
242a、242b、242c スカラ機能ユニット(SFU)
244a、244b、244c ベクトル機能ユニット(VFU)
246a、246b、246c 移動ユニット(MV)
300 コントローラ

Claims (20)

  1. 複数の要素(element)を含むベクトルデータ形式の配列(sequence)をロード(load)する段階と、
    前記配列を半分に分割して第1グループを形成し、前記第1グループのi番目(iは自然数)の要素同士をソートする段階と、
    第n(nは自然数)グループをそれぞれ半分に分割して第(n+1)グループを形成し、前記第(n+1)グループのうちの隣り合うグループのj番目(jは自然数)の要素同士をソートする段階と、
    前記第(n+1)グループが1つの要素のみを含む前まで、前記分割及び要素同士のソートを反復する段階と、
    前記第(n+1)グループが1つの要素のみを含むと、前記第(n+1)グループのうちの隣り合うグループの要素同士をソートする段階と、を有し、
    前記第1グループのi番目の要素同士をソートする段階は、SIMD(Single Instruction Multiple Data)処理方式で処理する段階を含む、ことを特徴とするベクトルプロセッサの配列ソート方法。
  2. 前記配列は、N=2個の要素を含むことを特徴とする請求項1に記載のベクトルプロセッサの配列ソート方法。
  3. 前記分割及び要素同士のソートを反復する段階は、前記分割が前記第(n+1)グループを22m個に形成する分割である場合、前記要素同士のソートを最大2m回行う段階を含むことを特徴とする請求項2に記載のベクトルプロセッサの配列ソート方法。
  4. 前記要素同士のソートを2m回行う段階は、全体グループのうちの隣り合うグループの要素同士のソートを行う第1ソートを行う段階と、
    前記第1ソートの後に、前記全体グループのうち、1番目のグループと最後のグループを除いて残りのグループにおける隣り合うグループの要素同士のソートを行う第2ソートを行う段階と、
    前記第1及び第2ソートを行う段階を、m回繰り返すことを特徴とする請求項3に記載のベクトルプロセッサの配列ソート方法。
  5. 前記配列をロードする段階は、互いに同じ大きさの第1及び第2配列をロードする段階を含み、
    前記第1配列を第1グループと第2グループに分割する段階と、
    前記第2配列を第3グループと第4グループに分割する段階と、
    前記第1グループと第3グループとを連結した第3配列、及び前記第2グループと前記第4グループとを連結した第4配列を定義する段階と、
    前記第3及び第4配列をそれぞれソートする段階と、
    前記第3配列を第5グループと第6グループに分割する段階と、
    前記第4配列を第7グループと第8グループに分割する段階と、
    前記第6グループと第7グループとを連結した第5配列を定義する段階と、
    前記第5配列をソートして前記第5グループ、前記第5配列、及び前記第8グループの順にソートを完成する段階と、をさらに有し、
    前記第3配列をソートする段階は、前記分割及び要素同士のソートを反復する段階を含むことを特徴とする請求項1に記載のベクトルプロセッサの配列ソート方法。
  6. 前記ベクトルプロセッサは、それぞれ別途のファンクションユニットを含む複数のスロットを含み、
    前記第3及び第4配列をソートする段階は、前記第3及び第4配列を互いに異なるスロットのファンクションユニットを用いてソートする段階を含むことを特徴とする請求項5に記載のベクトルプロセッサの配列ソート方法。
  7. 前記ベクトルプロセッサは、VLIW(Very Long Instruction Word)インストラクションを行い、
    前記VLIWインストラクションは、第1及び第2インストラクションを含み、前記第1及び第2インストラクションは、それぞれ前記第3及び第4配列をソートするインストラクションであり、
    前記第3及び第4配列をソートする段階は、前記第1及び第2インストラクションが、前記互いに異なるスロットのファンクションユニットに伝達され、前記互いに異なるスロットのファンクションユニットがそれぞれ前記第3及び第4配列をソートする段階を含むことを特徴とする請求項6に記載のベクトルプロセッサの配列ソート方法。
  8. 前記第4及び第5配列をソートする段階は、それぞれ、前記(第4又は第5)配列を半分に分割してグループを形成し、前記グループのk番目(kは自然数)の要素同士をソートする段階と、
    前記グループをそれぞれ半分に分割して新しいグループを形成し、前記新しいグループのうちの隣り合うグループのl番目(lは自然数)の要素同士をソートする段階と、
    前記新しいグループが1つの要素のみ含む前まで、前記分割及び要素同士のソートを反復する段階と、
    前記新しいグループが1つの要素のみを含むと、前記新しいグループのうちの隣り合うグループの要素同士をソートする段階を含むことを特徴とする請求項5に記載のベクトルプロセッサの配列ソート方法。
  9. 前記配列を半分に分割して第1グループを形成し、前記第1グループのi番目の要素同士をソートする段階は、パーミュテーション(permutation)演算を用いて、前記配列と順序が変更されたコピー配列を生成する段階と、
    前記配列と前記コピー配列に対してMin演算及びMax演算を行う段階と、を含むことを特徴とする請求項1に記載のベクトルプロセッサの配列ソート方法。
  10. 前記Min演算及びMax演算は同時に行われることを特徴とする請求項9に記載のベクトルプロセッサの配列ソート方法。
  11. N個(Nは2、nは自然数)の要素を含むベクトルデータ形式の配列をロードする(a)段階と、
    前記配列を、それぞれ互いに同じN/(2)個の要素を有するグループにグループ化し、それぞれのグループのうちの隣り合うグループ同士でi番目(iはN/(2)よりも小さい自然数)の要素をソートする(b)段階と、を有し、
    前記(b)段階は、パーミュテーション演算を用いて、前記配列と順序が変わったコピー配列を生成する(c)段階と、
    前記配列と前記コピー配列に対してMin演算及びMax演算を行う(d)段階とを含み、
    前記それぞれのグループのうちの隣り合うグループ同士でi番目の要素をソートする段階は、SIMD処理方式で処理する段階を含むことを特徴とするベクトルプロセッサの配列ソート方法。
  12. 前記(c)段階の前記コピー配列は、前記配列における、前記グループのうち互いに要素をソートする隣接グループ同士の位置が互いに変更された配列であることを特徴とする請求項11に記載のベクトルプロセッサの配列ソート方法。
  13. 前記(d)段階で、前記配列における互いにMin演算及びMax演算を行わない部分は、前記コピー配列及び前記配列で互いに同一の要素を有することを特徴とする請求項12に記載のベクトルプロセッサの配列ソート方法。
  14. 前記(b)段階は、n=1、2、…、logNのときのそれぞれに対して繰り返し行われることを特徴とする請求項11に記載のベクトルプロセッサの配列ソート方法。
  15. 前記(b)段階は、n=1のときに対しては1回、
    n=2、…、logNのときに対してはそれぞれ2(n−1)回反復して隣接グループ同士で要素をソートする段階を含むことを特徴とする請求項14に記載のベクトルプロセッサの配列ソート方法。
  16. 2(n−1)回反復して隣接グループ同士で要素をソートする段階は、全体グループのうち、隣り合うグループの要素同士のソートを行う第1ソート段階と、
    前記全体グループのうち、1番目のグループと最後のグループを除いて残りのグループにおける隣り合うグループの要素同士のソートを行う第2ソート段階と、
    前記第1ソート段階及び第2ソート段階を最大(n−1)回繰り返す段階と、を含むことを特徴とする請求項15に記載のベクトルプロセッサの配列ソート方法。
  17. 前記配列は、互いに同じ大きさの前半部と後半部を含み、
    前記(d)段階は、コントロールシグナルベクトルによってmin値とmax値を選択するMin演算及びMax演算を使用し、
    前記コントロールシグナルベクトルは、前記前半部及び後半部に互いに異なる値を有することを特徴とする請求項11に記載のベクトルプロセッサの配列ソート方法。
  18. 前記Min演算及びMax演算は、減算器と、
    前記減算器の出力、前記コントロールシグナルベクトル、及び前記配列及び前記コピー配列の要素を入力として、前記配列及び前記コピー配列の要素のうちのいずれかを出力するマルチプレクサとを含むMin/Max回路によって演算されることを特徴とする請求項17に記載のベクトルプロセッサの配列ソート方法。
  19. それぞれ別個の演算ユニットを含む複数のスロットと、前記複数のスロットが互いに共有するレジスタとを含むベクトルプロセッサの配列ソート方法において、
    N個(Nは2、nは自然数)の要素を含むベクトルデータ形式の配列をロードする(a)段階と、
    前記配列を、それぞれ互いに同じN/(2)個の要素を有するグループにグループ化し、それぞれのグループのうちの隣り合うグループ同士でi番目(iは自然数)の要素をソートする(b)段階と、を有し、
    前記(b)段階は、前記複数のスロットによって並列処理され、
    前記ソートは、SIMD処理方式で処理されることを特徴とするベクトルプロセッサの配列ソート方法。
  20. 前記(b)段階は、n=1、2、…、logNのときのそれぞれに対して繰り返し行われることを特徴とする請求項19に記載のベクトルプロセッサの配列ソート方法。
JP2018099367A 2017-05-25 2018-05-24 ベクトルプロセッサの配列ソート方法 Active JP7241470B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR10-2017-0064502 2017-05-25
KR1020170064502A KR102343652B1 (ko) 2017-05-25 2017-05-25 벡터 프로세서의 서열 정렬 방법

Publications (2)

Publication Number Publication Date
JP2018200692A true JP2018200692A (ja) 2018-12-20
JP7241470B2 JP7241470B2 (ja) 2023-03-17

Family

ID=64401213

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018099367A Active JP7241470B2 (ja) 2017-05-25 2018-05-24 ベクトルプロセッサの配列ソート方法

Country Status (5)

Country Link
US (3) US10372451B2 (ja)
JP (1) JP7241470B2 (ja)
KR (1) KR102343652B1 (ja)
CN (1) CN108959179B (ja)
TW (1) TWI771373B (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9606803B2 (en) 2013-07-15 2017-03-28 Texas Instruments Incorporated Highly integrated scalable, flexible DSP megamodule architecture
US11106462B2 (en) * 2019-05-24 2021-08-31 Texas Instruments Incorporated Method and apparatus for vector sorting
CN111949241B (zh) * 2019-05-15 2024-04-12 瑞昱半导体股份有限公司 排序装置
JP7263994B2 (ja) * 2019-09-17 2023-04-25 富士通株式会社 情報処理方法及び最適化プログラム
US11036506B1 (en) * 2019-12-11 2021-06-15 Motorola Solutions, Inc. Memory systems and methods for handling vector data
CN112861145B (zh) * 2021-01-06 2023-12-12 华控清交信息科技(北京)有限公司 一种数据处理方法、装置和用于数据处理的装置
US11366783B1 (en) 2021-03-29 2022-06-21 SambaNova Systems, Inc. Multi-headed multi-buffer for buffering data for processing
US11204889B1 (en) 2021-03-29 2021-12-21 SambaNova Systems, Inc. Tensor partitioning and partition access order
US11709611B2 (en) 2021-10-26 2023-07-25 SambaNova Systems, Inc. Determining and using memory unit partitioning solutions for reconfigurable dataflow computing systems

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05189202A (ja) * 1992-01-10 1993-07-30 Fujitsu Ltd 並列ソート方式
JP2005527038A (ja) * 2002-05-24 2005-09-08 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ スカラー/ベクトルプロセッサ
JP2009199439A (ja) * 2008-02-22 2009-09-03 Nec Corp マージソート処理方法、マージソート処理装置、及びマージソート処理プログラム
US20130212354A1 (en) * 2009-09-20 2013-08-15 Tibet MIMAR Method for efficient data array sorting in a programmable processor

Family Cites Families (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6324638B1 (en) * 1999-03-31 2001-11-27 International Business Machines Corporation Processor having vector processing capability and method for executing a vector instruction in a processor
JP2001014139A (ja) 1999-06-28 2001-01-19 Nec Corp ワークファイルを使用するマルチスレッドソート処理方式及び処理方法
US6557096B1 (en) * 1999-10-25 2003-04-29 Intel Corporation Processors with data typer and aligner selectively coupling data bits of data buses to adder and multiplier functional blocks to execute instructions with flexible data types
US20050188182A1 (en) * 1999-12-30 2005-08-25 Texas Instruments Incorporated Microprocessor having a set of byte intermingling instructions
US6745319B1 (en) 2000-02-18 2004-06-01 Texas Instruments Incorporated Microprocessor with instructions for shuffling and dealing data
US7386842B2 (en) 2004-06-07 2008-06-10 International Business Machines Corporation Efficient data reorganization to satisfy data alignment constraints
US20070011441A1 (en) * 2005-07-08 2007-01-11 International Business Machines Corporation Method and system for data-driven runtime alignment operation
WO2009131497A1 (en) 2008-04-21 2009-10-29 Telefonaktiebolaget L M Ericsson (Publ) Method for enabling communication between a user equipment and an ims gateway
US8417921B2 (en) * 2008-08-15 2013-04-09 Apple Inc. Running-min and running-max instructions for processing vectors using a base value from a key element of an input vector
GB2464292A (en) * 2008-10-08 2010-04-14 Advanced Risc Mach Ltd SIMD processor circuit for performing iterative SIMD multiply-accumulate operations
US9652231B2 (en) * 2008-10-14 2017-05-16 International Business Machines Corporation All-to-all permutation of vector elements based on a permutation pattern encoded in mantissa and exponent bits in a floating-point SIMD architecture
WO2010082529A1 (ja) 2009-01-13 2010-07-22 日本電気株式会社 Simd型並列データ処理装置及びデータソート方法並びにプロセッシングエレメント
KR101662769B1 (ko) 2010-03-09 2016-10-05 삼성전자주식회사 고속 정렬 장치 및 방법
WO2013089709A1 (en) * 2011-12-14 2013-06-20 Intel Corporation System, apparatus and method for generating a loop alignment count or a loop alignment mask
JP5834997B2 (ja) * 2012-02-23 2015-12-24 株式会社ソシオネクスト ベクトルプロセッサ、ベクトルプロセッサの処理方法
US9575753B2 (en) * 2012-03-15 2017-02-21 International Business Machines Corporation SIMD compare instruction using permute logic for distributed register files
EP2831691A4 (en) * 2012-03-30 2015-11-25 Intel Corp METHOD AND APPARATUS FOR FUSIONING AND SORTING SMALLER SORTED VECTORS IN LARGER SORTING VECTORS
US9098265B2 (en) * 2012-07-11 2015-08-04 Arm Limited Controlling an order for processing data elements during vector processing
US9342479B2 (en) * 2012-08-23 2016-05-17 Qualcomm Incorporated Systems and methods of data extraction in a vector processor
US9606961B2 (en) * 2012-10-30 2017-03-28 Intel Corporation Instruction and logic to provide vector compress and rotate functionality
WO2014098845A1 (en) * 2012-12-19 2014-06-26 Intel Corporation Vector mask driven clock gating for power efficiency of a processor
US9405538B2 (en) 2012-12-28 2016-08-02 Intel Corporation Functional unit having tree structure to support vector sorting algorithm and other algorithms
KR20140092135A (ko) 2013-01-15 2014-07-23 한국전자통신연구원 빅 데이터를 위한 병렬 정렬 방법 및 장치
US9632781B2 (en) * 2013-02-26 2017-04-25 Qualcomm Incorporated Vector register addressing and functions based on a scalar register data value
US9477999B2 (en) * 2013-09-20 2016-10-25 The Board Of Trustees Of The Leland Stanford Junior University Low power programmable image processor
KR102122406B1 (ko) 2013-11-06 2020-06-12 삼성전자주식회사 셔플 명령어 처리 장치 및 방법
US9977676B2 (en) * 2013-11-15 2018-05-22 Qualcomm Incorporated Vector processing engines (VPEs) employing reordering circuitry in data flow paths between execution units and vector data memory to provide in-flight reordering of output vector data stored to vector data memory, and related vector processor systems and methods
US9740659B2 (en) * 2014-03-19 2017-08-22 International Business Machines Corporation Merging and sorting arrays on an SIMD processor
KR102310246B1 (ko) 2014-04-23 2021-10-08 삼성전자주식회사 세컨더리 인덱스 생성 방법 및 세컨더리 인덱스 저장 장치
CN106462386B (zh) * 2014-05-30 2019-09-13 华为技术有限公司 排序分布式输入数据的排序方法和处理系统
KR101573618B1 (ko) 2014-07-04 2015-12-01 한양대학교 산학협력단 메모리 구조에 기반한 외부 퀵 정렬의 방법 및 장치
US9910670B2 (en) * 2014-07-09 2018-03-06 Intel Corporation Instruction set for eliminating misaligned memory accesses during processing of an array having misaligned data rows
EP3001306A1 (en) * 2014-09-25 2016-03-30 Intel Corporation Bit group interleave processors, methods, systems, and instructions
JP2016091488A (ja) 2014-11-11 2016-05-23 アズビル株式会社 データソート方法およびプログラム
GB2538119B8 (en) * 2014-11-21 2020-10-14 Intel Corp Apparatus and method for efficient graphics processing in virtual execution environment
US9870339B2 (en) * 2015-06-26 2018-01-16 Intel Corporation Hardware processors and methods for tightly-coupled heterogeneous computing

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05189202A (ja) * 1992-01-10 1993-07-30 Fujitsu Ltd 並列ソート方式
JP2005527038A (ja) * 2002-05-24 2005-09-08 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ スカラー/ベクトルプロセッサ
JP2009199439A (ja) * 2008-02-22 2009-09-03 Nec Corp マージソート処理方法、マージソート処理装置、及びマージソート処理プログラム
US20130212354A1 (en) * 2009-09-20 2013-08-15 Tibet MIMAR Method for efficient data array sorting in a programmable processor

Also Published As

Publication number Publication date
TWI771373B (zh) 2022-07-21
US20190303149A1 (en) 2019-10-03
JP7241470B2 (ja) 2023-03-17
CN108959179B (zh) 2023-12-01
KR20180129058A (ko) 2018-12-05
US20190303148A1 (en) 2019-10-03
US10372451B2 (en) 2019-08-06
US11068265B2 (en) 2021-07-20
US11442728B2 (en) 2022-09-13
US20180341487A1 (en) 2018-11-29
TW201901412A (zh) 2019-01-01
KR102343652B1 (ko) 2021-12-24
CN108959179A (zh) 2018-12-07

Similar Documents

Publication Publication Date Title
JP7241470B2 (ja) ベクトルプロセッサの配列ソート方法
US9405538B2 (en) Functional unit having tree structure to support vector sorting algorithm and other algorithms
WO2022046570A1 (en) Vector processor architectures
US5704052A (en) Bit processing unit for performing complex logical operations within a single clock cycle
CN112507284A (zh) 稀疏矩阵乘法在可重构处理器阵列上的实现方法及装置
JP2008047031A (ja) 並列演算装置
JPWO2005098612A1 (ja) 重要成分優先計算方式ならびに装置
CN112667291A (zh) Risc-v指令集移位指令实现电路
JP2518293B2 (ja) デ−タフロ−プロセツサ
KR102295677B1 (ko) 연속적인 데이터 병렬처리가 가능한 병렬 처리장치
CN110008436B (zh) 基于数据流架构的快速傅里叶变换方法、系统和存储介质
US5192882A (en) Synchronization circuit for parallel processing
WO2019156060A1 (ja) 並列ユニオン制御装置、並列ユニオン制御方法、および記憶媒体
US20230129750A1 (en) Performing a floating-point multiply-add operation in a computer implemented environment
US7587582B1 (en) Method and apparatus for parallel arithmetic operations
US20210312325A1 (en) Mixed-precision neural processing unit (npu) using spatial fusion with load balancing
GB2523805A (en) Data processing apparatus and method for performing vector scan operation
US7743231B2 (en) Fast sparse list walker
US5880978A (en) Method and apparatus for creating an output vector from an input vector
KR102358612B1 (ko) 연속적인 데이터 병렬처리가 가능한 병렬 처리장치
US8510357B1 (en) Logic structures and methods supporting pipelined multi-operand adders
JPS607531A (ja) 論理シミユレ−シヨン装置
JPH04184535A (ja) 並列演算装置
JP2024538012A (ja) コンピュータ実装環境における浮動小数点積和演算の実行
Grushin Fast minimum and maximum selection

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210510

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220531

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220614

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20220914

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20221027

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: 20230207

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230307

R150 Certificate of patent or registration of utility model

Ref document number: 7241470

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150