JP2023030745A - 計算機および計算方法 - Google Patents

計算機および計算方法 Download PDF

Info

Publication number
JP2023030745A
JP2023030745A JP2021136048A JP2021136048A JP2023030745A JP 2023030745 A JP2023030745 A JP 2023030745A JP 2021136048 A JP2021136048 A JP 2021136048A JP 2021136048 A JP2021136048 A JP 2021136048A JP 2023030745 A JP2023030745 A JP 2023030745A
Authority
JP
Japan
Prior art keywords
sub
register
vector
registers
vectors
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.)
Pending
Application number
JP2021136048A
Other languages
English (en)
Inventor
宏 中尾
Hiroshi Nakao
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2021136048A priority Critical patent/JP2023030745A/ja
Priority to US17/751,880 priority patent/US20230065733A1/en
Publication of JP2023030745A publication Critical patent/JP2023030745A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/02Comparing digital values
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • G06F7/78Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor
    • 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/30029Logical and Boolean instructions, e.g. XOR, NOT
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • 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]
    • 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]
    • G06F9/38873Iterative single instructions 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)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

【課題】レジスタ内のサブレジスタ間での加算処理を最小限にして最近接一致ベクトルの検索効率を向上する。【解決手段】複数の第2ベクトルをレジスタのサブレジスタサイズと等しいサブベクトルに分割し、複数の第2ベクトルのサブベクトルのグループ単位で読み出し可能にメモリに順次配置し、第1ベクトルのサブベクトルの1つを第1レジスタの複数のサブレジスタに転送する第1処理と、転送した第1ベクトルのサブベクトルに対応する複数の第2ベクトルのサブベクトルを、第2レジスタの複数のサブレジスタに転送する第2処理と、第1および第2レジスタにおいて互いに対応するサブレジスタ内のサブベクトルのビット値の不一致数を算出して積算する第3処理と、を第1ベクトルの全てのサブベクトルに対して繰り返し実行し、算出した不一致数の積算値が最も小さい第2ベクトルを最近接一致ベクトルと判定する。【選択図】図2

Description

本発明は、計算機および計算方法に関する。
1つの命令で複数のデータを並列に処理するSIMD(Single Instruction Multiple Data)演算命令をサポートした演算処理装置が知られている。この種の演算処理装置では、例えば、メモリマトリクスから複数組のデータが一括に読み出されて複数の演算器で並列に演算が実行され、複数組の演算結果データがメモリマトリクスに一括に書き込まれる(例えば、特許文献1参照)。また、この種の演算処理装置は、SIMD演算用のレジスタを使用して実行した比較演算の結果が全て同じ場合、条件フラグレジスタをセットする回路を有する(例えば、特許文献2参照)。
同一のプログラムを実行する複数のスレッドで複数の異なるデータを並列に処理する場合、複数のスレッドは、同期用のハードバリアにより各スレッドの処理が終了するまで次の処理の実行を待つ(例えば、特許文献3参照)。SIMDによる縮約操作を実行するマルチスレッドコンピュータは、スレッドで使用するレーンを入れ替えるクロスバーと、クロスバーを制御するクロスバーコントローラとを有する(例えば、特許文献4参照)。
特開2018-156119号公報 特開2004-118470号公報 米国特許第7788468号明細書 米国特許第8200940号明細書
ところで、シードベクトルに最も近い最近接一致ベクトルを複数の情報ベクトルから検索する場合、例えば、計算機は、シードベクトルの各要素のビット値と1つの情報ベクトルの各要素のビット値とを比較し、ビット値が異なる要素の数を積算する。計算機は、複数の情報ベクトルの各々について、ビット値の比較とビット値が異なる要素の数の積算とを実行する。そして、計算機は、積算値が最も少ない情報ベクトルを最近接一致ベクトルと判定する。
シードベクトルに対してビット値が異なる要素の数を、SIMDレジスタを使用して情報ベクトル毎に算出する場合、計算機は、SIMDレジスタ内の複数のサブレジスタに保持される部分的な積算値をサブレジスタ間で加算する。しかしながら、SIMDレジスタに含まれるサブレジスタ間での加算に掛かるクロックサイクル数は、SIMDレジスタ間でのサブレジスタ同士の加算に掛かるクロックサイクル数に比べて多い。このため、SIMDレジスタ内の複数のサブレジスタに保持される部分的な積算値をサブレジスタ間で加算する最近接一致ベクトルを検索手法は、演算効率が低く、検索時間が長くなる。
1つの側面では、本発明は、レジスタ内のサブレジスタ間での加算処理を最小限にして最近接一致ベクトルの検索効率を向上することを目的とする。
一つの観点によれば、計算機は、演算に使用する複数のデータをそれぞれ保持する複数のサブレジスタを各々含む複数のレジスタと、前記複数のサブレジスタにそれぞれ保持されるデータの演算を並列に実行する演算器と、第1ベクトルおよび前記第1ベクトルと比較される複数の第2ベクトルを保持可能なメモリと、を有する計算機であって、前記複数の第2ベクトルを前記サブレジスタのサイズと等しいサブベクトルにそれぞれ分割し、前記複数の第2ベクトルのサブベクトルを各々含む複数のサブベクトルグループを、サブベクトルグループ単位で読み出し可能に前記メモリに順次配置し、前記メモリに保持された前記第1ベクトルのサブベクトルの1つを前記複数のレジスタのうちの第1レジスタの複数のサブレジスタに転送する第1処理と、前記メモリに保持された、前記第1ベクトルの転送したサブベクトルに対応する前記複数の第2ベクトルのサブベクトルを、前記複数のレジスタのうちの第2レジスタの複数のサブレジスタにそれぞれ転送する第2処理と、前記第1レジスタおよび前記第2レジスタにおいて、互いに対応するサブレジスタが保持するサブベクトルのビット値の不一致数を算出して積算する第3処理と、を前記第1ベクトルの全てのサブベクトルに対して繰り返し実行し、算出した前記不一致数の積算値が最も小さい第2ベクトルを最近接一致ベクトルと判定する。
レジスタ内のサブレジスタ間での加算処理を最小限にして最近接一致ベクトルの検索効率を向上することができる。
一実施形態における計算機の一例を示すブロック図である。 図1の計算機の動作の一例を示す説明図である。 別の実施形態における計算機の一例を示すブロック図である。 図3の計算機による最近接一致ベクトルの検索の概要を示す説明図である。 図3のSIMDレジスタと、データメモリ領域に保持されるデータとの一例を示す説明図である。 図3の計算機により最近接一致ベクトルを検索する例を示す説明図である。 図6の最近接一致ベクトルの検索の続きを示す説明図である。 図7の最近接一致ベクトルの検索の続きを示す説明図である。 図8の最近接一致ベクトルの検索の続きを示す説明図である。 図3のデータメモリ領域に保持されるデータの別の例を示す説明図である。 図10の配列のデータを使用して最近接一致ベクトルを検索する例を示す説明図である。 図11の式(1)中の和sum(i)を算出する例を示す説明図である。 図11の式(1)で得られる総和S(0)-S(7)の最小値を算出する例を示す説明図である。 図13で算出した最小の相違ビット数に対応する情報ベクトルを検索する例を示す説明図である。 別の実施形態における計算機においてベクトル長が可変の場合の調整例を示す説明図である。 図15のベクトル長の調整後のデータをデータメモリ領域に格納する例を示す説明図である。 別の実施形態における計算機において情報ベクトルを更新する例を示す説明図である。
以下、図面を参照して、実施形態が説明される。
図1は、一実施形態における計算機の一例を示す。図1に示す計算機1は、演算処理装置2およびメモリ7を有する。例えば、演算処理装置2は、SIMD演算命令を使用して、複数の積和演算等を並列に実行可能なプロセッサである。演算処理装置2は、複数のSIMDレジスタ4(4a、4b、4c、4d、...)を含むレジスタファイル3と、演算器6とを有する。各SIMDレジスタ4は、演算対象のデータがそれぞれ格納される複数のサブレジスタ5(5a、5b、5c、5d)を含む。なお、図1では、各SIMDレジスタ4には、4個のサブレジスタ5が割り当てられるが、各SIMDレジスタ4に割り当てられるサブレジスタ5の数は、SIMD演算命令の種別により変化する。以下では、SIMDレジスタ4は、単にレジスタとも称される。
例えば、演算器6は、演算処理装置2に投入されるSIMD演算命令に基づいて、サブレジスタ5に保持されているデータのレジスタ4間での算術演算(加算または乗算等)を実行する。また、演算器6は、SIMD演算命令に基づいて、レジスタ4内の各サブレジスタ5に保持されているデータの論理演算(アンド、オア、排他的論理和等)を実行する。
メモリ7は、シードベクトルV1と複数の情報ベクトルV20、V21、V22、V23とを保持する記憶領域を有する。図1に示す例では、シードベクトルV1および情報ベクトルV2のベクトル長(ビット長)は、レジスタ4のビット幅に等しいが、レジスタ4のビット幅より大きくてもよい。以下では、情報ベクトルV20、V21、V22、V23を区別せずに説明する場合、情報ベクトルV2とも称される。シードベクトルV1は、第1ベクトルの一例であり、情報ベクトルV2は、第2ベクトルの一例である。
シードベクトルV1は、サブレジスタ5のサイズ(ビット幅)と等しいサイズのデータV1a、V1b、V1c、V1dを含む。データV1a、V1b、V1c、V1dの各々は、サブベクトルの一例である。
情報ベクトルV20は、サブレジスタ5のサイズと等しいサイズに分割されたデータV20a、V20b、V20c、V20dを含む。情報ベクトルV21は、サブレジスタ5のサイズと等しいサイズに分割されたデータV21a、V21b、V21c、V21dを含む。情報ベクトルV22は、サブレジスタ5のサイズと等しいサイズに分割されたデータV22a、V22b、V22c、V22dを含む。情報ベクトルV23は、サブレジスタ5のサイズと等しいサイズに分割されたデータV23a、V23b、V23c、V23dを含む。データV20a-20d、V21a-V21d、V22a-V22d、V23a-V23dの各々は、サブベクトルの一例である。
例えば、計算機1は、計算機1の外部から受信するシードベクトルV1および情報ベクトルV2をメモリ7に配置する。計算機1は、シードベクトルV1を、メモリ7においてアドレスが連続する領域に配置する。計算機1は、情報ベクトルV20-V23のデータV20a、V21a、V22a、V23aを、メモリ7においてアドレスが連続する領域に配置する。計算機1は、情報ベクトルV20-V23のデータV20b、V21b、V22b、V23bを、メモリ7においてアドレスが連続する領域に配置する。
計算機1は、情報ベクトルV20-V23のデータV20c、V21c、V22c、V23cを、メモリ7においてアドレスが連続する領域に配置する。計算機1は、情報ベクトルV20-V23のデータV20d、V21d、V22d、V23dを、メモリ7においてアドレスが連続する領域に配置する。このように、計算機1は、各情報ベクトルV20-V23をサブレジスタ5のサイズで折り返してメモリ7に順次配置する。
データV20a、V21a、V22a、V23aおよびデータV20b、V21b、V22b、V23bのそれぞれは、サブベクトルグループの一例である。データV20c、V21c、V22c、V23cおよびデータV20d、V21d、V22d、V23dのそれぞれは、サブベクトルグループの一例である。演算処理装置2は、サブベクトルグループ単位でメモリ7から情報ベクトルV20-V23を並列に読み出し可能である。
例えば、演算処理装置2が、転送元のソースアドレスがAaで転送先がレジスタ4aのロード命令をフェッチしたとする。この場合、演算処理装置2は、シードベクトルV1のデータV1a、V1b、V1c、V1dをレジスタ4aのサブレジスタ5a、5b、5c、5dにそれぞれ格納する。演算処理装置2が、転送元のソースアドレスがAbで転送先がレジスタ4bのロード命令をフェッチしたとする。この場合、演算処理装置2は、情報ベクトルV20のデータV20aおよび情報ベクトルV21のデータV21aをレジスタ4bのサブレジスタ5a、5bにそれぞれ格納する。また、演算処理装置2は、」情報ベクトルV22のデータV22aおよび情報ベクトルV23のデータV23aをレジスタ4bのサブレジスタ5c、5dにそれぞれ格納する。
図2は、図1の計算機1の動作の一例を示す説明図である。図2では、情報ベクトルV20-V23のうち、シードベクトルV1に最も近い最近接一致ベクトルを検索する例が示される。図2に示す動作は、計算機1の計算方法の一例を示しており、演算処理装置2が最近接一致ベクトルの検索プログラムを実行することで実現される。特に断らない限り、検索プログラムに含まれる算術演算および論理演算を実行する演算命令は、SIMD演算命令であり、サブレジスタ5a-5dに保持されたデータが並列に処理される。
まず、演算処理装置2は、シードベクトルV1のデータV1aをレジスタ4aのサブレジスタ5a、5b、5c、5dにブロードキャストする(図2(a))。データV1aをレジスタ4aのサブレジスタ5a、5b、5c、5dにブロードキャストする処理は、第1処理の一例である。データV1aが転送されるレジスタ4aは、第1レジスタの一例である。
次に、演算処理装置2は、情報ベクトルV20-V23のデータV20a、V21a、V22a、V23aをレジスタ4bのサブレジスタ5a、5b、5c、5dに転送する(図2(b))。データV20a、V21a、V22a、V23aをレジスタ4bのサブレジスタ5a、5b、5c、5dに転送する処理は、第2処理の一例である。データV20a、V21a、V22a、V23aが転送されるレジスタ4bは、第2レジスタの一例である。
次に、演算処理装置2は、レジスタ4a、4bのサブレジスタ5に保持されたデータの各ビットの排他的論理和xor0a、xor1a、xor2a、xor3aを算出し、レジスタ4cに格納する(図2(c))。例えば、排他的論理和xor0aにおいて論理値1のビットは、シードベクトルV1のデータV1aと情報ベクトルのV20のデータV20aにおいて、ビット値が互いに異なるビットを示す。排他的論理和xor1aにおいて論理値1のビットは、シードベクトルV1のデータV1aと情報ベクトルのV21のデータV21aにおいて、ビット値が互いに異なるビットを示す。
次に、演算処理装置2は、各サブレジスタ5の論理値1のビット数を算出するPOPCNT命令を実行し、実行結果をレジスタ4dに格納する(図2(d))。POPCNT命令の実行により、シードベクトルV1のデータV1aと、情報ベクトルV20-V23の各データV20a-V23aとにおいて、ビット値が互いに異なるビット数が算出される。以下では、ビット値が互いに異なるビット数は、相違ビット数とも称される。相違ビット数は、不一致数の一例である。図2に示す例では、データV1aとデータV20a-V23aとの相違ビット数は、それぞれ"4"、"8"、"3"、"6"であるとする。
次に、演算処理装置2は、レジスタ4dに保持された相違ビット数をレジスタ4hに格納する(図2(e))。なお、レジスタ4dに保持された相違ビット数のレジスタ4hへの格納は、例えば、"0"に初期化されたレジスタ4hのサブレジスタの値とレジスタ4dのサブレジスタの値とを加算(積算)することで実行されてもよい。排他的論理和を算出する処理と、論理値1のビット数を算出する処理と、レジスタ4hのサブレジスタの値およびレジスタ4dのサブレジスタの値を積算する処理とは、第3処理の一例である。
この後、演算処理装置2は、シードベクトルV1の他の全てのデータV1b、V1c、V1dに対して、図2(a)-図2(d)と同様の処理を繰り返し実行する。例えば、演算処理装置2は、データV1bをレジスタ4aのサブレジスタ5a、5b、5c、5dにブロードキャストする。演算処理装置2は、データV1bと情報ベクトルV20-V23のデータV20b、V21b、V22b、V23bとの相違ビット数"3"、"5"、"1"、"6"を算出し、レジスタ4eに格納する(図2(f))。次に、演算処理装置2は、レジスタ4h、4eのサブレジスタ5a-5dに保持されたデータ同士を加算命令ADDにより加算し、レジスタ4hに上書きする(図2(g))。
演算処理装置2は、データV1cをレジスタ4aのサブレジスタ5a、5b、5c、5dにブロードキャストする。演算処理装置2は、データV1cと情報ベクトルV20-V23のデータV20c、V21c、V22c、V23cとの相違ビット数"2"、"9"、"7"、"4"を算出し、レジスタ4fに格納する(図2(h))。次に、演算処理装置2は、レジスタ4h、4fのサブレジスタ5a-5dに保持されたデータ同士を加算命令ADDにより加算し、レジスタ4hに上書きする(図2(i))。
演算処理装置2は、データV1dをレジスタ4aのサブレジスタ5a、5b、5c、5dにブロードキャストする(図2(j))。演算処理装置2は、情報ベクトルV20-V23のデータV20d、V21d、V22d、V23dをレジスタ4bのサブレジスタ5a、5b、5c、5dにロードする(図2(k))。
次に、演算処理装置2は、レジスタ4a、4bのサブレジスタ5に保持されたデータの排他的論理和を算出した後、相違ビット数"2"、"4"、"1"、"8"を算出し、レジスタ4gに格納する(図2(l))。次に、演算処理装置2は、レジスタ4h、4gのサブレジスタ5a-5dに保持されたデータ同士を加算命令ADDにより加算し、レジスタ4hに上書きする(図2(m))。レジスタ4hの各サブレジスタ5a-5dに保持された値は、各情報ベクトルV20、V21、V22、V23の全体の相違ビット数の積算値を示す。各情報ベクトルV20、V21、V22、V23の相違ビット数の積算値がそれぞれ格納されるレジスタ4d、4e、4f、4gは、第3レジスタの一例である。各情報ベクトルV20、V21、V22、V23の全体の相違ビット数の積算値がそれぞれ格納されるレジスタ4hは、第4レジスタの一例である。
次に、演算処理装置2は、レジスタ4hの各サブレジスタ5a-5dに保持された相違ビット数の積算値の最小値(MIN)を算出し、レジスタ4lの全てのサブレジスタ5a-5dに格納する(図2(n))。図2に示す例では、最小値は"11"である。そして、演算処理装置2は、レジスタ4lの各サブレジスタ5a-5dに保持されたデータを、レジスタ4hの各サブレジスタ5a-5dに保持されたデータと比較し、相違ビット数の最小値が情報ベクトルV20に対応することを判定する。そして、演算処理装置2は、シードベクトルV1に最も近い最近接一致ベクトルが情報ベクトルV20であると判定する(図2(o))。
以上、この実施形態では、計算機1は、各情報ベクトルV20-V23をサブレジスタ5のサイズで折り返してメモリ7に配置する。そして、計算機1は、例えば、レジスタ4aのサブレジスタ5にブロードキャストしたシードベクトルV1のデータV1aと、レジスタ4bのサブレジスタ5に格納したデータV20a、V21a、V22a、V23aとの相違ビット数を算出し、積算する。
これにより、計算機1は、POPCNT命令を除き、SIMDレジスタ4内のサブレジスタ5間での加算処理を実行しない。例えば、各情報ベクトルV2の部分的な積算値の加算は、異なるSIMDレジスタ4間での加算命令ADDを使用して実行される。したがって、SIMDレジスタ4内のサブレジスタ5間での加算処理を多用する場合に比べて、最近接一致ベクトルの検索に掛かるクロックサイクル数を削減することができる。この結果、最近接一致ベクトルの検索効率を向上することができ、検索時間を短縮することができる。
演算処理装置2は、情報ベクトルV20-V23の一部であるサブベクトルとシードベクトルV1の一部であるサブベクトルとの相違ビット数をSIMDレジスタ4d、4e、4f、4gにそれぞれ保持し、SIMDレジスタ4hに足し込む。これにより、SIMDレジスタ4内のサブレジスタ5間での加算処理を多用することなく、異なるSIMDレジスタ4間での加算命令ADDを使用して、各情報ベクトルV20-V23の相違ビット数を積算することができる。
図3は、別の実施形態における計算機の一例を示す。上述した実施形態と同様の要素および動作については、詳細な説明は省略する。図3に示す計算機100は、演算処理装置200、メインメモリ300およびストレージ400を有する。例えば、計算機100は、サーバ等の情報処理装置でもよく、メインフレームまたはスーパーコンピュータ等でもよい。また、ストレージ400は、計算機100の外部に配置されてもよい。
演算処理装置200は、命令キャッシュ10、メモリインタフェース20、命令デコーダ30、データキャッシュ40、メモリインタフェース50、レジスタファイル60、演算器70およびクロック生成器80を有する。レジスタファイル60は、複数のレジスタ62および複数のSIMDレジスタ64を有する。メインメモリ300は、命令コードを記憶するコードメモリ領域310とシードベクトルAおよび複数の情報ベクトルBを記憶するデータメモリ領域320とを有する。
命令キャッシュ10は、コードメモリ領域310に記憶されている命令コードの一部を記憶可能である。メモリインタフェース20は、命令キャッシュ10にデコード対象の命令コードが記憶されている場合、命令キャッシュ10からデコード対象の命令コードを読み出し、読み出した命令コードを命令デコーダ30に出力する。メモリインタフェース20は、命令キャッシュ10にデコード対象の命令コードが記憶されていない場合、メインメモリ300からデコード対象の命令コードを読み出して命令デコーダ30に出力し、読み出した命令コードを命令キャッシュ10に格納する。
データキャッシュ40は、データメモリ領域320に記憶されているシードベクトルAおよび情報ベクトルBの一部を記憶可能である。メモリインタフェース50は、データキャッシュ40に読み出し対象のデータが記憶されている場合、データキャッシュ40から読み出し対象のデータを読み出し、読み出したデータをレジスタファイル60に出力する。メモリインタフェース50は、データキャッシュ40に読み出し対象のデータが記憶されていない場合、メインメモリ300から読み出し対象のデータを読み出してレジスタファイル60に出力し、読み出したデータをデータキャッシュ40に格納する。
なお、記憶容量が大きいデータキャッシュ40を演算処理装置200の外部に配置し、最近接一致ベクトルの検索に使用するシードベクトルAおよび情報ベクトルBの全てのデータを、データキャッシュ40に保持してもよい。
例えば、データキャッシュ40において、メインメモリ300に対するデータの読み書きの単位であるキャッシュラインサイズは256ビットである。そして、メモリインタフェース50は、256ビットのデータを1クロックサイクルでSIMDレジスタ64に読み書きできる。なお、この実施形態では、レジスタファイル60からデータキャッシュ40にデータを書き込む処理についての説明がされないため、データの書き込み動作の説明は省略される。
各レジスタ62は、例えば、64ビット幅を有し、メモリインタフェース50または演算器70によりアクセスされる。各SIMDレジスタは、例えば、256ビット幅を有し、メモリインタフェース50または演算器70によりアクセスされる。例えば、演算器70は、256ビットのデータを1クロックサイクルでSIMDレジスタ64に読み書きできる。
演算器70は、命令デコーダ30でデコードされた命令に基づいて動作し、算術演算、論理演算およびレジスタアクセスを実行する。例えば、演算器70は、算術演算または論理演算としてSIMD演算命令を実行する場合、256ビット単位でSIMDレジスタ64にアクセス可能である。クロック生成器80は、演算処理装置200の外部から供給される図示しないクロックに基づいて、演算処理装置200を動作させるクロックを生成し、生成したクロックを、演算器70等のクロック同期回路とメインメモリ300とに出力する。
以下では、説明の簡単化のため、各SIMDレジスタ64に転送されるデータは、メインメモリ300から読み出されるとする。なお、シードベクトルAおよび情報ベクトルBがデータキャッシュ40に保持可能な場合、各SIMDレジスタ64に転送されるデータは、データキャッシュ40から読み出されてもよい。この場合、以下の説明のデータメモリ領域320は、データキャッシュ40に読み替えればよい。
図4は、図3の計算機100による最近接一致ベクトルの検索の概要を示す。計算機100は、nビットのシードベクトルAの各ビットa0、a1、...、an-1と、m個のnビットの情報ベクトルB0からBm-1の各々の各ビット(例えば、b0j、b1j、...、bn-1j)とを比較する。例えば、計算機100は、シードベクトルAと各情報ベクトルBとのビット毎の排他的論理和演算xorを実行し、排他的論理和演算xorの結果が論理値1になるビットの総和(ビット数)を算出する。排他的論理和演算xorの結果の論理値1は、シードベクトルAと各情報ベクトルBとにおいてビットの論理値が互いに相違することを示す。そして、計算機100は、論理値1のビット数が最小の情報ベクトルBをシードベクトルAに最も近い最近接一致ベクトルと判定する。
図5は、図3のSIMDレジスタ64と、データメモリ領域320に保持されるデータとの一例を示す。SIMDレジスタ64(64a、64b、...)は、8個の32ビットのサブレジスタR(R0、R1、R2、...、R7)を含む。
データメモリ領域320には、例えば、10016ビットのシードベクトルAと、10016ビットの8個の情報ベクトルB0-B7とが記憶される。なお、シードベクトルAおよび情報ベクトルBのビット長は、10016ビットに限定されず、データメモリ領域320に記憶される情報ベクトルBは、8個に限定されない。シードベクトルAおよび情報ベクトルBのデータメモリ領域320への配置方法は、上述した実施形態(図1)と同様である。
計算機100は、シードベクトルAを、データメモリ領域320に割り当てられた連続するアドレスWA-0からアドレスWA-39に256ビットずつ配置する。各アドレスWAに対応する256ビットのデータは、SIMDレジスタ64のサブレジスタRに対応する8個の32ビットのデータA(例えば、データA-0、A-1、...、A-7)を含む。なお、計算機100は、アドレスWA-39に、最終のデータA-312のみを配置する。
情報ベクトルB0-B7は、サブレジスタR0-R7にそれぞれ対応して、アドレスW0-0からアドレスW0-312に32ビットずつ保持される。これにより、図3の演算処理装置200は、データメモリ領域320に対する1回の読み出しアクセスにより、8個の情報ベクトルB0-B7の32ビットを同時に取得することができる。
図6から図9は、図3の計算機100により最近接一致ベクトルを検索する例を示す。図6から図9に示す動作は、計算機100の計算方法の一例を示しており、演算処理装置200が最近接一致ベクトルの検索プログラムを実行することで実現される。検索プログラムの実行にはSIMD演算命令が使用される。図6から図8において、"1CLK"、"2CLK"等は、動作の実行に掛かるクロックサイクル数を示す。但し、クロックサイクル数には、メモリアクセスに掛かるクロックサイクルは含まれない。以下では、SIMDレジスタ64は、単にレジスタ64とも称される。
図6は、シードベクトルAの32ビットのデータA0と8個の情報ベクトルBの32ビットのデータB*-0-0との相違ビット数を算出する動作を示す。符号*は、"0"から"7"のいずれかを示す。まず、演算処理装置200は、シードベクトルAのデータA-0をレジスタ64aの各サブレジスタR0-R7にブロードキャストする(図6(a))。シードベクトルAのデータA0をレジスタ64aのサブレジスタR0-R7にブロードキャストする処理は、第1処理の一例である。次に、演算処理装置200は、情報ベクトルB0-B7のデータB0-0-0、B1-0-0、...、B7-0-0をレジスタ64bのサブレジスタR0-R7にロードする(図6(b))。レジスタ64aは、第1レジスタの一例であり、レジスタ64bは、第2レジスタの一例である。情報ベクトルB0-B7のデータB0-0-0、B1-0-0、...、B7-0-0をレジスタ64bのサブレジスタR0-R7にロードする処理は、第2処理の一例である。
次に、演算処理装置200は、レジスタ64a、64bのサブレジスタR0-R7に保持されたデータの排他的論理和演算XORを実行し、レジスタ64cに格納する(図6(c))。図6に示す例では、レジスタ64cのサブレジスタR0、R1、R2、R7に"0000h"、"0040h"、"0110h、"AA51h"(hは16進数を示す)がそれぞれ格納される。
次に、演算処理装置200は、各サブレジスタR0-R7の論理値1のビット数を算出するPOPCNT命令を実行し、演算結果をレジスタ64dに格納する(図6(d))。図6に示す例では、シードベクトルAのデータA0と、情報ベクトルB0、B1、B2、...、B7のデータB0-0-0、B1-0-0、B2-0-0、...、B7-0-0との相違ビット数は、それぞれ"0"、"1"、"2"、...、"7"である。レジスタ64dは、第3レジスタの一例である。
次に、演算処理装置200は、レジスタ64dの各サブレジスタRの値とレジスタ64eの各サブレジスタRの値とを加算する加算命令ADDを実行し、演算結果をレジスタ64eの各サブレジスタRに格納する(図6(e))。なお、レジスタ64eの初期値は"0"である。レジスタ64eは、第4レジスタの一例である。排他的論理和演算XORを実行する処理と、論理値1のビット数を算出する処理と、レジスタ64dのサブレジスタの値をレジスタ64eのサブレジスタに積算する処理とは、第3処理の一例である。
そして、演算処理装置200は、図6に示す動作を313回ループすることで、シードベクトルAの各データA0-A312に対応する相違ビット数を算出し、算出した相違ビット数をレジスタ64eのサブレジスタR0-R7を使用して積算する。この結果、レジスタ64eのサブレジスタR0-R7には、各情報ベクトルB0-B7の10016ビット中の相違ビット数が格納される。図6に示す各情報ベクトルB0-B7の32ビットの相違ビット数の1回の算出には、カウンタの更新とループの終了判定とに掛かる2クロックサイクルを含めて7クロックサイクルが掛かる。このため、情報ベクトルB0-B7の各々の10016ビットの相違ビット数の算出には、313回のループで2191クロックサイクルが掛かる。
次に、図7において、演算処理装置200は、図6で算出した各情報ベクトルB0-B7の相違ビット数のうちの最小値を算出する。まず、演算処理装置200は、レジスタ64eの値をレジスタ64fにコピー(CPY)する(図7(a))。ここで、図6で算出した各情報ベクトルB0-B7の10016ビット中の相違ビット数は、0123h、0234h、0345h、0456h、0567h、0678h、0789h、089Ahであるとする。レジスタ64fは、第5レジスタの一例である。
次に、演算処理装置200は、レジスタ64fに保持されたデータを32ビット右ローテートし、レジスタ64gに格納する(図7(b))。レジスタ64gは、第6レジスタの一例である。次に、演算処理装置200は、レジスタ64fのサブレジスタR0-R7に保持された32ビットの相違ビット数と、レジスタ64gのサブレジスタR0-R7に保持されたローテート後の32ビットの相違ビット数との最小値演算命令MINを実行する。そして、演算処理装置200は、演算結果をレジスタ64fに格納する(図7(c))。
次に、演算処理装置200は、レジスタ64fに保持されたデータを64ビット右ローテートし、レジスタ64gに格納する(図7(d))。次に、演算処理装置200は、レジスタ64fのサブレジスタR0-R7に保持された32ビットの相違ビット数と、レジスタ64gのサブレジスタR0-R7に保持されたローテート後の32ビットの相違ビット数との最小値演算命令MINを実行する(不図示)。演算処理装置200は、演算結果をレジスタ64fに格納する(不図示)。
次に、演算処理装置200は、レジスタ64fに保持されたデータを128ビット右ローテートし、レジスタ64gに格納する(図7(e))。次に、演算処理装置200は、レジスタ64fのサブレジスタR0-R7に保持された32ビットの相違ビット数と、レジスタ64gのサブレジスタR0-R7に保持されたローテート後の32ビットの相違ビット数との最小値演算命令MINを実行する(不図示)。演算処理装置200は、演算結果をレジスタ64fに格納する(図7(f))。
図7に示す例では、"0123h"が相違ビット数の最小値として求まる。しかしながら、最小の相違ビット数"0123h"が情報ベクトルB0-B7の何れに対応するかは不明である。そこで、演算処理装置200は、図8において、最小相違ビット数"0123h"が情報ベクトルB0-B7の何れに対応するかを判定する。
図8において、演算処理装置200は、レジスタ64eの各サブレジスタR0-R7に保持された各情報ベクトルB0-B7の相違ビット数と、レジスタ64fの各サブレジスタR0-R7に保持された最小の相違ビット数とを比較する(図8(a))。相違ビット数は、比較命令CMPを実行することで比較される。演算処理装置200は、比較結果が一致するとき、マスクレジスタMSKREGの対応するビットを"1"にセットし、比較結果が一致しないとき、マスクレジスタMSKREGの対応するビットを"0"にリセットする(図8(b))。
演算処理装置200は、マスクレジスタMSKREGの"1"に対応するポインタ値POINTと最小の相違ビット数MINとのペアを最小値テーブルMINTBLに格納する(図8(c))。ポインタ値POINTは、マスクレジスタMSKREGの"1"のビット位置にオフセット値offsetを加えた値である。ポインタ値POINTは、最小の相違ビット数MINの情報ベクトルBに対応する識別情報の一例である。最小値テーブルMINTBLは、保持部の一例である。
オフセット値offsetは、初期値が"0"であり、8個の情報ベクトルB毎に"+8"される。そして、演算処理装置200は、8個の情報ベクトルBの最小の相違ビット数MINを算出する毎に、ポインタ値POINTと最小の相違ビット数MINとのペアとを最小値テーブルMINTBLに格納する。最小値テーブルMINTBLは、演算処理装置200に搭載される内蔵RAMに割り当てられてもよい。
例えば、最小値テーブルMINTBLの0行目には、図6および図7の動作で取得された8個の情報ベクトルB0-B7のいずれかを示すポインタ値POINTと、最小の相違ビット数MINとが格納される。最小値テーブルMINTBLの1行目には8個の情報ベクトルB8-B15のいずれかを示すポインタ値POINTと、最小の相違ビット数MINとが格納される。図8に示す例では、最小値テーブルMINTBLは、10万個のポインタ値POINTと最小の相違ビット数MINとのペアが格納される領域を有する。これにより、演算処理装置200は、最大で80万個の情報ベクトルBをシードベクトルAと比較し、情報ベクトルBの少なくともいずれかを最近接一致ベクトルとして検出できる。
次に、図9において、演算処理装置200は、図8の最小値テーブルMINTBLに格納した情報に基づいて、最近接一致ベクトルを検索する処理を実行する。まず、図9(A)において、演算処理装置200は、例えば、図7に示した手法により、最小値テーブルMINTBLの8行毎に、8個の最小の相違ビット数MINのうち、最も小さい相違ビット数を求める。これにより、最小値テーブルMINTBLのサイズを、図9(B)の1.25万行に圧縮することができる。
次に、演算処理装置200は、図9(B)の最小値テーブルMINTBLの8行毎に、8個の最小の相違ビット数MINのうち、最も小さい相違ビット数を求め、最小値テーブルMINTBLのサイズを、図9(c)の1600行に圧縮する。さらに、演算処理装置200は、最小値テーブルMINTBLの8行毎に最も小さい相違ビット数を求める処理を繰り返すことで、80万個の情報ベクトルBの中から最近接一致ベクトルを検出する。
図10は、図3のデータメモリ領域320に保持されるデータの別の例を示す。図10では、各情報ベクトルB0-B7は、シードベクトルAと同様に、データメモリ領域320に割り当てられた連続する40個のアドレスWB毎に256ビットずつ保持される。なお、図10では、シードベクトルAおよび情報ベクトルBのビット長を10240ビットとしているが、図5と同様に、10016ビットとしてもよい。
図11は、図10の配列のデータを使用して最近接一致ベクトルを検索する例を示す。図6と同様の動作については、詳細な説明は省略する。まず、演算処理装置200は、シードベクトルAのデータA-0-0からA-0-7をレジスタ64aの各サブレジスタR0-R7にロードする(図11(a))。次に、演算処理装置200は、情報ベクトルB0のデータB0-0-0からB0-0-7をレジスタ64bのサブレジスタR0-R7にロードする(図11(b))。
次に、演算処理装置200は、レジスタ64a、64bのサブレジスタR0-R7に保持されたデータの排他的論理和演算XORを実行し、演算結果をレジスタ64bに格納する(図11(c))。次に、演算処理装置200は、POPCNT命令を実行し、レジスタ64bの各サブレジスタR0-R7の論理値1のビット数を算出し、レジスタ64bに格納する(図11(d))。図11(a)から図11(d)までの1回の処理に4クロックサイクルが掛かる。
そして、演算処理装置200は、図11中の式(1)に示すように、図11(a)~図11(d)の処理と、レジスタ64bのサブレジスタR0-R7に格納された相違ビット数の和sum(i)を算出する処理とを40回繰り返す。これにより、演算処理装置200は、1つの情報ベクトルB0の相違ビット数の総和S(j)を算出する。式(1)において、符号kは、レジスタ64bのサブレジスタR0-R7の番号を示す。符号iは、図10のデータメモリ領域320の1つアドレスWBからレジスタ64bにロードされる256ビットの情報ベクトルBを示す。符号jは、情報ベクトルBの識別番号を示す。
図12は、図11の式(1)中の和sum(i)を算出する例を示す。まず、演算処理装置200は、hadd命令を実行し、レジスタ64bに保持されている8個の相違ビット数を2つのサブレジスタR毎に加算する(図12(a))。次に、演算処理装置200は、Valignd命令を実行し、レジスタ64bに保持されているデータを64ビット右ローテートし、サブレジスタR4、R5のデータとサブレジスタR6、R7のデータとを入れ替える(図12(b))。
次に、演算処理装置200は、hadd命令を実行し、レジスタ64bに保持されている8個のデータを2つのサブレジスタR毎に加算する(図12(c))。次に、演算処理装置200は、hadd命令を実行し、レジスタ64bに保持されている8個のデータを2つのサブレジスタR毎に加算する(図12(d))。
これにより、レジスタ64bの全てのサブレジスタR0-R7に、和sum(i)が保持される。和sum(i)の算出には、iカウンタの更新とループの終了判定とに掛かる2クロックサイクルを含めて9クロックサイクルが掛かる。このように、レジスタ64に含まれるサブレジスタR間での加算に掛かるクロックサイクル数(="7")は、レジスタ64間でのサブレジスタR同士の加算に掛かるクロックサイクル数(="1")に比べて多い。
図11および図12に示す1回の処理には13クロックが掛かる。図11および図12に示す処理は、図10のアドレスWB毎に40回実行されるため、1個の情報ベクトルBの相違ビット数の算出には520クロックサイクルが掛かる。この結果、8個の情報ベクトルBの相違ビット数の算出には、jカウンタの更新とループの終了判定とを含めて、4176クロックサイクルが掛かる。これは、図6で説明した2191クロックサイクル数に比べて1985クロックサイクル多い(約1.9倍)。換言すれば、図6で説明した算出方法は、図11および図12に示す算出方法の52%のクロックサイクル数で8個の情報ベクトルBの総ビット数を求めることができる。
図13は、図11の式(1)で得られる総和S(0)-S(7)の最小値を算出する例を示す。図13の処理で使用するレジスタ64を識別する符号tは、任意の整数である。まず、演算処理装置200は、情報ベクトルB0の相違ビット数の総和S(0)と情報ベクトルB1の相違ビット数の総和S(1)との最小値S(min1)を算出する。次に、演算処理装置200は、最小値S(min1)と情報ベクトルB2の相違ビット数の総和S(2)との最小値S(min2)を算出する。
同様に、演算処理装置200は、最小値S(min2)と総和S(3)との最小値S(min3)、最小値S(min3)と総和S(4)との最小値S(min4)、最小値S(min4)と総和S(5)との最小値S(min5)を算出する。さらに、演算処理装置200は、最小値S(min5)と総和S(6)との最小値S(min6)および最小値S(min6)と総和S(7)との最小値S(min7)を算出する。そして、演算処理装置200は、総和S(0)-S(7)のうちの最小値を最小値S(min7)として算出する。図13の最小値S(min7)の算出に7クロックサイクルが掛かる。
図14は、図13で算出した最小の相違ビット数に対応する情報ベクトルBを検索する例を示す。演算処理装置200は、最小値S(min7)と各情報ベクトルBの総和S(0)-S(7)とが一致するまで比較を続ける。平均で4回の比較で最小の相違ビット数に対応する情報ベクトルBが求まるとすると、各回の比較とカウンタの更新とにそれぞれ1クロックサイクルが掛かるため、平均8クロックサイクルが掛かる。
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。例えば、SIMDレジスタ64内のサブレジスタR間での加算処理を多用する場合に比べて、最近接一致ベクトルの検索に掛かるクロックサイクル数を削減することができる。この結果、最近接一致ベクトルの検索効率を向上することができ、検索時間を短縮することができる。
さらに、この実施形態では、図7に示したように、右ローテート処理と最小値演算命令MINとの実行により、SIMDレジスタ64のサブレジスタRに保持されたデータのうちの最小値を検出することができる。
計算機100は、情報ベクトルBの数がSIMDレジスタ64のサブレジスタRの数より多い場合、サブレジスタRの数と同じ数の情報ベクトルB毎に最小の相違ビット数を求める。そして、計算機100は、最小の相違ビット数を、情報ベクトルBを識別するポインタ値POINTとともに最小値テーブルMINTBLに格納する。これにより、計算機100は、シードベクトルAと比較する情報ベクトルBの数にかかわりなく、最近接一致ベクトルを検出できる。
図15は、別の実施形態における計算機においてベクトル長が可変の場合の調整例を示す。この実施形態の計算機100は、情報ベクトルBの少なくともいずれかのサイズ(ビット長、ベクトル長)がシードベクトルAのサイズより大きいことを除き、図3の計算機100と同様である。また、この実施形態では、シードベクトルAと比較する情報ベクトルBの数が、SIMDレジスタ64のサブレジスタR0-R7の数(=8)で割り切れないとする。
この場合、計算機100は、図3のデータメモリ領域320に格納されたシードベクトルAおよび情報ベクトルBの少なくともいずれにビット値を追加する処理を実行する。例えば、計算機100は、ビット長が最も大きい情報ベクトルBlongに合わせてシードベクトルAに論理値0を追加し、他の情報ベクトルBに論理値0と反対の論理値1を追加する。シードベクトルAに追加する論理値0は、第1論理値の一例であり、他の情報ベクトルBに追加する論理値1は、第2論理値の一例である。
シードベクトルAに追加するビット値と情報ベクトルBに追加するビット値とを互いに逆の論理にすることで、最近接一致ベクトルの判定に影響を与えることを抑制することができる。なお、追加する最大のビット長は、情報ベクトルBlongのビット長よりも十分に短いことが望ましい(例えば、10%程度以下)。なお、計算機100は、シードベクトルAに論理値1を追加し、他の情報ベクトルBに論理値0を追加してもよい。
さらに、情報ベクトルBの数が、SIMDレジスタ64のサブレジスタR0-R7の数で割り切れない場合、計算機100は、情報ベクトルBを埋められないサブレジスタRの余りの部分に情報ベクトルBrem1-Bremnをダミーデータとして追加する。情報ベクトルBrem1-Bremnの各ビットの論理値1は、上記他の情報ベクトルBに追加される論理値1と同じである。
これにより、計算機100は、全てのサブレジスタR0-R7を常に使用して最近接一致ベクトルを検索できる。したがって、計算機100は、サブレジスタRの余りに応じて使用するサブレジスタRの数を変更することなく、サブレジスタRを使用した演算処理を実行できる。この結果、サブレジスタRの余りに応じて使用するサブレジスタRの数の変更する場合に比べて、最近接一致ベクトルの検索プログラムを簡易にすることができる。
図16は、図15のベクトル長の調整後のデータをデータメモリ領域320に格納する例を示す。図5と同様の要素については、詳細な説明は省略する。計算機100は、図16に網掛けで示すように、情報ベクトルBlongのビット長に合わせて、シードベクトルAおよび他の情報ベクトルBの末尾に論理値1または論理値0のダミーデータを埋め込む処理を実行する。
また、計算機100は、図16に網掛けで示すように、情報ベクトルBを埋められないサブレジスタRの余りの部分に情報ベクトルBrem1-Bremn(論理値1)をダミーデータとして埋め込む。そして、計算機100は、図6から図9に示したように、最近接一致ベクトルを検索する処理を実行する。
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。さらに、この実施形態では、計算機100は、情報ベクトルBの少なくともいずれかのサイズがシードベクトルAのサイズより大きい場合、ビット値を埋め込んでベクトル長を合わせる処理を、最近接一致ベクトルの検索前に実行する。また、情報ベクトルBを埋められないサブレジスタRの余りの部分に情報ベクトルBrem1-Bremn(論理値1)を埋め込む処理を、最近接一致ベクトルの検索前に実行する。
これにより、計算機100は、図6から図9に示した動作により、最近接一致ベクトルを検索できる。換言すれば、計算機100は、情報ベクトルBがシードベクトルAより長い場合、または、情報ベクトルBを埋められないサブレジスタRがある場合にも、検索プログラムを変更することなく、最近接一致ベクトルを検索できる。
また、シードベクトルAに埋め込む論理値と情報ベクトルBに埋め込む論理値とを互いに逆にすることで、最近接一致ベクトルの判定に影響を与えることを抑制することができる。
図17は、別の実施形態における計算機において情報ベクトルを更新する例を示す。図17の処理を実行する計算機100は、図3に示す計算機100と同様であり、図6から図9に示す処理を実行可能である。
例えば、深層学習では、推論時の認識率を向上するため、ニューラルネットワークの演算に使用する重み等のパラメータが更新される。計算機100が深層学習に最近接一致ベクトルを利用する場合、情報ベクトルBは、学習の進行にしたがい、更新または追加される場合がある。
図17に示す例では、計算機100は、ベクトルB0、Bp0、Bq0に対して最頻値または平均等の任意の演算を実行し、新たな情報ベクトルBnew0を生成する。そして、計算機100は、情報ベクトルB0を情報ベクトルBnew0に差し替えることで更新する。
また、計算機100は、情報ベクトルB1、Bp1、Bq1に対して任意の演算を実行し、新たな情報ベクトルBnew1を生成する。そして、計算機100は、情報ベクトル群B0からBm-1に、新たな情報ベクトルBnew1を追加する。
情報ベクトルBの更新または追加は、部分的に実行される。このため、計算機100は、図5に示すデータメモリ領域320に記憶された情報ベクトルBの全体をアクセスせずに、部分的にアクセスすることで更新処理または追加処理を実行できる。したがって、図5に示すように1つのアドレスWAに対応して複数の情報ベクトルBが配置される場合にも、計算機100は、1つのアドレスWAに対応して1つの情報ベクトルBが配置される場合と同様に、情報ベクトルBの更新処理または追加処理を実行できる。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
1 計算機
2 演算処理装置
3 レジスタファイル
4(4a、4b、4c、4d、...) レジスタ
5(5a、5b、5c、5d) サブレジスタ
6 演算器
7 メモリ
10 命令キャッシュ
20 メモリインタフェース
30 命令デコーダ
40 データキャッシュ
50 メモリインタフェース
60 レジスタファイル
62 レジスタ
64 SIMDレジスタ
70 演算器
80 クロック生成器
100 計算機
200 演算処理装置
300 メインメモリ
310 コードメモリ領域
320 データメモリ領域
400 ストレージ
MINTBL 最小値テーブル
MSKREG マスクレジスタ
V1 シードベクトル
V2(V20、V21、V22、V23) 情報ベクトル

Claims (7)

  1. 演算に使用する複数のデータをそれぞれ保持する複数のサブレジスタを各々含む複数のレジスタと、前記複数のサブレジスタにそれぞれ保持されるデータの演算を並列に実行する演算器と、第1ベクトルおよび前記第1ベクトルと比較される複数の第2ベクトルを保持可能なメモリと、を有する計算機であって、
    前記複数の第2ベクトルを前記サブレジスタのサイズと等しいサブベクトルにそれぞれ分割し、前記複数の第2ベクトルのサブベクトルを各々含む複数のサブベクトルグループを、サブベクトルグループ単位で読み出し可能に前記メモリに順次配置し、
    前記メモリに保持された前記第1ベクトルのサブベクトルの1つを前記複数のレジスタのうちの第1レジスタの複数のサブレジスタに転送する第1処理と、前記メモリに保持された、前記第1ベクトルの転送したサブベクトルに対応する前記複数の第2ベクトルのサブベクトルグループを、前記複数のレジスタのうちの第2レジスタの複数のサブレジスタに転送する第2処理と、前記第1レジスタおよび前記第2レジスタにおいて、互いに対応するサブレジスタが保持するサブベクトルのビット値の不一致数を算出して積算する第3処理と、を前記第1ベクトルの全てのサブベクトルに対して繰り返し実行し、
    算出した前記不一致数の積算値が最も小さい第2ベクトルを最近接一致ベクトルと判定する
    計算機。
  2. 前記第3処理において、サブベクトル毎のビット値の不一致数を、第3レジスタの対応するサブレジスタに格納し、前記第3レジスタのサブレジスタに格納した前記不一致数を、第4レジスタのサブレジスタにそれぞれ積算し、
    最も小さい値を保持する前記第4レジスタのサブレジスタに対応する第2ベクトルを最近接一致ベクトルと判定する
    請求項1に記載の計算機。
  3. 前記第4レジスタのサブレジスタに保持された前記不一致数の積算値を第5レジスタのサブレジスタにコピーし、
    前記第5レジスタのサブレジスタの値をローテートして第6レジスタのサブレジスタにそれぞれ格納し、前記第5レジスタと前記第6レジスタとにおいて対応するサブレジスタの値のうち小さい値を前記第5レジスタのサブレジスタに格納する処理を、前記第5レジスタのサブレジスタに同じ値が保持されるまで繰り返し実行し、
    前記第5レジスタのサブレジスタに保持された値を前記不一致数の積算値の最小値と判定する
    請求項2に記載の計算機。
  4. 前記第1ベクトルと比較する前記第2ベクトルの数が前記第2レジスタのサブレジスタの数より多い場合、前記第2レジスタのサブレジスタの数と等しい数の前記第2ベクトルのグループ毎に前記第1処理から前記第3処理を実行し、
    前記グループ毎に算出した積算値のうちの最小の積算値を、積算値が最小の第2ベクトルに対応する識別情報とともに保持部に保持し、
    前記保持部に保持された積算値のうち、最小の積算値に対応する識別情報により示される第2ベクトルを最近接一致ベクトルと判定する
    請求項1ないし請求項3のいずれか1項に記載の計算機。
  5. 前記複数の第2ベクトルの少なくともいずれかのサイズが前記第1ベクトルのサイズより大きい場合、
    前記第1ベクトルに第1論理値を追加することで、前記第1ベクトルのサイズを、サイズが最も大きい第2ベクトルのサイズに合わせ、サイズを合わせた第1ベクトルを前記メモリに配置し、
    サイズが最も大きい第2ベクトルを除く他の第2ベクトルに前記第1論理値と反対の第2論理値を追加することで、前記他の第2ベクトルのサイズを、最も大きい第2ベクトルのサイズに合わせ、サイズを合わせた第2ベクトルをサイズが最も大きい第2ベクトルとともに前記メモリに配置する
    請求項1ないし請求項4のいずれか1項に記載の計算機。
  6. 前記第2ベクトルの数が前記レジスタのサブレジスタの数で割り切れない場合、前記第2ベクトルのサブベクトルを格納しないサブレジスタに前記第2論理値を格納する
    請求項5に記載の計算機。
  7. 演算に使用する複数のデータをそれぞれ保持する複数のサブレジスタを各々含む複数のレジスタと、前記複数のサブレジスタにそれぞれ保持されるデータの演算を並列に実行する演算器と、第1ベクトルおよび前記第1ベクトルと比較される複数の第2ベクトルを保持可能なメモリと、を有する計算機の計算方法であって、
    前記複数の第2ベクトルを前記サブレジスタのサイズと等しいサブベクトルにそれぞれ分割し、前記複数の第2ベクトルのサブベクトルを各々含む複数のサブベクトルグループを、サブベクトルグループ単位で読み出し可能に前記メモリに順次配置し、
    前記メモリに保持された前記第1ベクトルのサブベクトルの1つを前記複数のレジスタのうちの第1レジスタの複数のサブレジスタに転送する第1処理と、前記メモリに保持された、前記第1ベクトルの転送したサブベクトルに対応する前記複数の第2ベクトルのサブベクトルグループを、前記複数のレジスタのうちの第2レジスタの複数のサブレジスタに転送する第2処理と、前記第1レジスタおよび前記第2レジスタにおいて、互いに対応するサブレジスタが保持するサブベクトルのビット値の不一致数を算出して積算する第3処理と、前記第1ベクトルの全てのサブベクトルに対して繰り返し実行し、
    算出した前記不一致数の積算値が最も小さい第2ベクトルを最近接一致ベクトルと判定する
    計算方法。
JP2021136048A 2021-08-24 2021-08-24 計算機および計算方法 Pending JP2023030745A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2021136048A JP2023030745A (ja) 2021-08-24 2021-08-24 計算機および計算方法
US17/751,880 US20230065733A1 (en) 2021-08-24 2022-05-24 Calculator and calculation method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2021136048A JP2023030745A (ja) 2021-08-24 2021-08-24 計算機および計算方法

Publications (1)

Publication Number Publication Date
JP2023030745A true JP2023030745A (ja) 2023-03-08

Family

ID=85287971

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021136048A Pending JP2023030745A (ja) 2021-08-24 2021-08-24 計算機および計算方法

Country Status (2)

Country Link
US (1) US20230065733A1 (ja)
JP (1) JP2023030745A (ja)

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5717616A (en) * 1993-02-19 1998-02-10 Hewlett-Packard Company Computer hardware instruction and method for computing population counts
US6782054B2 (en) * 2001-04-20 2004-08-24 Koninklijke Philips Electronics, N.V. Method and apparatus for motion vector estimation
US7869516B2 (en) * 2003-03-31 2011-01-11 Hewlett-Packard Development Company, L.P. Motion estimation using bit-wise block comparisons for video compresssion
US7274825B1 (en) * 2003-03-31 2007-09-25 Hewlett-Packard Development Company, L.P. Image matching using pixel-depth reduction before image comparison
US20040249474A1 (en) * 2003-03-31 2004-12-09 Lee Ruby B. Compare-plus-tally instructions
GB2443667A (en) * 2006-11-10 2008-05-14 Tandberg Television Asa Obtaining a motion vector for a partition of a macroblock in block-based motion estimation
US8286172B2 (en) * 2008-10-02 2012-10-09 Nec Laboratories America, Inc. Systems and methods for implementing best-effort parallel computing frameworks
US8387065B2 (en) * 2009-04-16 2013-02-26 International Business Machines Corporation Speculative popcount data creation
US20150169644A1 (en) * 2013-01-03 2015-06-18 Google Inc. Shape-Gain Sketches for Fast Image Similarity Search
US9495155B2 (en) * 2013-08-06 2016-11-15 Intel Corporation Methods, apparatus, instructions and logic to provide population count functionality for genome sequencing and alignment
US9513907B2 (en) * 2013-08-06 2016-12-06 Intel Corporation Methods, apparatus, instructions and logic to provide vector population count functionality
US10042813B2 (en) * 2014-12-15 2018-08-07 Intel Corporation SIMD K-nearest-neighbors implementation
US10146537B2 (en) * 2015-03-13 2018-12-04 Micron Technology, Inc. Vector population count determination in memory
US11604834B2 (en) * 2020-05-08 2023-03-14 Intel Corporation Technologies for performing stochastic similarity searches in an online clustering space

Also Published As

Publication number Publication date
US20230065733A1 (en) 2023-03-02

Similar Documents

Publication Publication Date Title
US4363091A (en) Extended address, single and multiple bit microprocessor
US8583898B2 (en) System and method for managing processor-in-memory (PIM) operations
KR101595637B1 (ko) 벡터 친숙형 명령어 형식 및 그의 실행
KR101581177B1 (ko) 단일 명령 다중 데이터(simd)데이터 처리기에서 확장된 어드레싱 모드들의 제공
US5390307A (en) Apparatus for a multi-data store or load instruction for transferring multiple contiguous storage locations in one transfer operation
CN111177647A (zh) 实行16位浮点矩阵点积指令的系统和方法
CN111381880B (zh) 一种处理器、介质和处理器的操作方法
JP2024038122A (ja) 行列演算アクセラレータの命令のための装置、方法、およびシステム
JP7244046B2 (ja) 遠隔アトミックオペレーションの空間的・時間的マージ
KR101851439B1 (ko) 충돌 검출을 수행하고, 레지스터의 콘텐츠를 다른 레지스터의 데이터 구성요소 위치들로 브로드캐스트하기 위한 시스템들, 장치들 및 방법들
CN115686633A (zh) 用于实现链式区块操作的系统和方法
CN114153498A (zh) 用于加载片寄存器对的系统和方法
CN106030514B (zh) 用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法
JP6807073B2 (ja) 高速ベクトルによる動的なメモリ競合検出
CN112148251A (zh) 跳过无意义的矩阵运算的系统和方法
Osvik Speeding up Serpent.
CN108292228B (zh) 用于基于通道的步进收集的系统、设备和方法
CN111752618A (zh) 浮点加法器的交错流水线
CN114327362A (zh) 大规模矩阵重构和矩阵-标量操作
CN116860334A (zh) 用于计算两个区块操作数中的半字节的数量积的系统和方法
CN114691217A (zh) 用于8位浮点矩阵点积指令的装置、方法和系统
CN110321161B (zh) 使用simd指令的向量函数快速查表法、系统及介质
CN113924550A (zh) 直方图运算
US8826252B2 (en) Using vector atomic memory operation to handle data of different lengths
JP2023030745A (ja) 計算機および計算方法