JP6957528B2 - コンパイラ挿入変換コードを用いた冗長スレッドのフィンガープリンティング - Google Patents

コンパイラ挿入変換コードを用いた冗長スレッドのフィンガープリンティング Download PDF

Info

Publication number
JP6957528B2
JP6957528B2 JP2018565057A JP2018565057A JP6957528B2 JP 6957528 B2 JP6957528 B2 JP 6957528B2 JP 2018565057 A JP2018565057 A JP 2018565057A JP 2018565057 A JP2018565057 A JP 2018565057A JP 6957528 B2 JP6957528 B2 JP 6957528B2
Authority
JP
Japan
Prior art keywords
thread
comparison
redundant
value
code
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.)
Active
Application number
JP2018565057A
Other languages
English (en)
Other versions
JP2019526102A (ja
Inventor
アイ. ロウェル ダニエル
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.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
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 Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2019526102A publication Critical patent/JP2019526102A/ja
Application granted granted Critical
Publication of JP6957528B2 publication Critical patent/JP6957528B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1479Generic software techniques for error detection or fault masking
    • G06F11/1492Generic software techniques for error detection or fault masking by run-time replication performed by the application software
    • G06F11/1494N-modular type
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1629Error detection by comparing the output of redundant processing systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/453Data distribution
    • G06F8/454Consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1629Error detection by comparing the output of redundant processing systems
    • G06F11/1633Error detection by comparing the output of redundant processing systems using mutual exchange of the output between the redundant processing components
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/805Real-time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/83Indexing scheme relating to error detection, to error correction, and to monitoring the solution involving signatures

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Devices For Executing Special Programs (AREA)
  • Retry When Errors Occur (AREA)

Description

中央処理装置(CPU)、グラフィックス処理装置(GPU)及び加速処理装置(APU:accelerated processing unit)等の処理ユニットには、複数の命令を同時に又は並行して処理するために複数の計算装置(例えば、プロセッサコア)が実装されている。例えば、GPUは、命令ストリーム(従来、「ワークアイテム」又は「スレッド」と呼ばれる)を同時に又は並行して実行するための複数の処理要素をそれぞれ含む複数の計算装置を用いて実装され得る。単一命令複数データ(SIMD)アーキテクチャに従って動作する計算装置は、異なるデータセットを用いて同じ命令を実行する。GPU等の処理装置上で同時に又は並行して実行可能なスレッドの数は、数十スレッドから数千スレッドに及ぶ場合があり、エンジニアは、GPUに通常実装されている2次元(2D)又は3次元(3D)のグラフィックスアプリケーション以外のアプリケーションにもこの機能を利用したいと考えている。しかしながら、汎用アプリケーションは、アプリケーションエラーやシステムクラッシュを回避するために、従来のグラフィックスアプリケーションよりも高いレベルの耐障害性(fault tolerance)を必要とする。
添付の図面を参照することによって、本開示をより良く理解することができ、その多くの特徴及び利点が当業者に明らかとなるであろう。異なる図面において同一の参照符号が使用されている場合、類似又は同一のアイテムが示されている。
いくつかの実施形態による、加速処理装置のブロック図である。 いくつかの実施形態による、図1に示す加速処理装置上で実行可能なスレッドのグループの階層構造を示すブロック図である。 いくつかの実施形態による、フィンガープリントの以前の比較以降に生じたイベントトリガの数に基づいて、冗長スレッドのフィンガープリントの比較を選択的にバイパスする加速処理装置のブロック図である。 いくつかの実施形態による、プログラムコードのコンパイル中にコンパイラによって挿入される変換コードによるプログラムコードの修正を示す図である。 いくつかの実施形態による、エラーを検出するために冗長スレッド間で共有及び比較演算を選択的にバイパス又は実行する方法のフロー図である。 いくつかの実施形態による、プログラムコードを終了する前に冗長スレッド間で共有及び比較演算を実行するか否かを判別するために終了チェックを実行する方法のフロー図である。
冗長マルチスレッド(RMT:Redundant multithreading)を使用して、2つ以上の冗長スレッドを異なる処理要素で実行し、次に冗長スレッドの結果を比較してエラーを検出することによって、処理装置の信頼性を向上させることができる。同じデータに対して同じ命令を実行する2つの冗長スレッドによって生成された結果間の相違を検出することによって、少なくとも1つの冗長スレッドにエラーがあることが示される。同じデータに対して同じ命令を実行する3つ以上の冗長スレッドによって生成された結果間の類似点及び相違点を用いて、例えば3つ以上の結果に適用される投票方式を使用することによって、エラーを検出し、場合によってはエラーを訂正することができる。RMTエラー検出又は訂正をサポートするために冗長スレッド間でデータを受け渡すメカニズムは、かなりのオーバーヘッドを招く。例えば、スピンロックメカニズムを使用して、冗長スレッド間のデータ及びメッセージの受け渡しを同期させてもよい。RMTシステムの性能は、少なくとも部分的には、従来のRMTシステムが、エラーを含む可能性があるデータを記憶するのを避けるために、各ストア命令(又は他のイベントトリガ)の前に、冗長スレッドによって生成された結果を比較するため、オーバーヘッドによって著しく低下する可能性がある。
比較用のイベントトリガ(例えば、冗長スレッドによるストア命令の実行等)が以前の結果の比較から設定可能な回数(例えば2回以上)だけ発生したか否かに応じて、冗長スレッドによって実行された演算結果の比較を選択的にバイパスすることによって、ソフトウェア実装されたRMTエラー検出又は訂正メカニズムのオーバーヘッドを、エラー検出精度を低下させることなく減らすことができる。スレッドによって生成された結果を、以前に符号化された値又はスレッドに関連する初期値と共にハッシュして、符号化値を冗長スレッド毎に生成することによって、エラーを検出する確率を大幅に低下させることなく、以前の演算の結果を後続の比較のために記憶するのに伴うオーバーヘッドを減らすことができる。符号化値は、複数のイベントトリガに関連する複数の結果を表す各スレッドのフィンガープリントを形成する。冗長スレッドのフィンガープリントの値は、冗長スレッドでいくつかのイベントトリガが発生した後に共有及び比較される。冗長スレッドのフィンガープリントの値が異なる場合にはエラーが検出され、これにより、バリエーションによってはエラー回復処理がトリガされる。冗長スレッドは、3つ以上の冗長スレッドを含むことができ、その場合、投票方式を使用して、フィンガープリントの最頻値を正しい値として選択することによって、エラー訂正を実行する。フィンガープリントのいくつかの実施形態では、記憶される結果及び記憶される値のアドレスを以前のフィンガープリントの値と共にハッシュすることによって、計算される。
いくつかのバリエーションでは、コンパイラを使用して、冗長スレッドによって実行されるプログラムコードをフィンガープリント方式に変換する。変換コードによって、冗長スレッドは、共有及び比較演算を選択的にバイパスし、バイパスされた共有及び比較演算に対する符号化値を、単一の符号化されたフィンガープリントにひとまとめにする。例えば、共有及び比較演算のイベントトリガがストア命令である場合、コンパイラは、コードを挿入して、冗長スレッドによって記憶される結果と、対応する以前のフィンガープリントの値と、をハッシュするのに使用されるコードのルックアップテーブルを生成する。また、コンパイラは、冗長スレッド毎のカウンタを初期化する。カウンタは、冗長スレッドがイベントトリガを実行したことに応じてインクリメントされ、共有及び比較演算がバイパスされた回数を判別するために使用される。また、コンパイラは、ハッシュを実行し、冗長スレッドのフィンガープリント変数の値の比較をバイパス又は実行するかをチェックし、冗長スレッドのフィンガープリント変数の値を共有及び比較し、プログラムコードを終了する前に未処理の共有及び比較演算を実行するか否かを判別するために、変換コードを挿入する。
図1は、いくつかの実施形態による、加速処理装置100のブロック図である。加速処理装置(APD:accelerated processing device)100を用いて、様々なタイプの処理装置(例えば、中央処理装置(CPU)、グラフィックス処理装置(GPU)、汎用GPU(GPGPU)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)等)を実装することができる。APD100は、1つ以上の仮装マシン(例えば、コンピュータシステムの動作をエミュレートし、アプリケーションを実行するためのプラットフォームを提供する低レベル仮想マシン(LLVM)等)を実装するように構成され得る。また、APD100は、オペレーティングシステムを実装するように構成されており、いくつかの実施形態では、各仮装マシンは、オペレーティングシステムの個別のインスタンスを実行する。さらに、APD100は、例えば、ピクセル演算、幾何学的計算、例えば画像レンダリング等を含むグラフィックスパイプライン演算等の演算を行うカーネルを実行するように構成されている。また、APD100は、映像操作(video operations)、物理シミュレーション、計算流体力学等の非グラフィックス処理演算を実行することができる。
APD100は、複数の計算ユニット101,102,103を含み、これらは本明細書においてまとめて「計算ユニット101〜103」と呼ばれる。計算ユニット101〜103は、同じカーネルの異なるインスタンスを同時に実行するパイプラインとして動作するように構成することができる。例えば、計算ユニット101〜103のいくつかの変形例では、異なるデータを使用して同じ命令を並行して実行する単一命令複数データ(SIMD)プロセッサコアであってもよい。APD100のいくつかの実施形態は、より多くの又はより少ない計算ユニット101〜103を実装してもよい。
計算ユニット101は、処理要素105,106,107(本明細書においてまとめて「処理要素105〜107」と呼ばれる)を含む。処理要素105〜107のいくつかの実施形態は、計算ユニット101内の処理要素105〜107による実行のためにスケジューリングされた命令によって示される算術演算及び論理演算を実行するように構成されている。また、計算ユニット101は、例えばローカルデータ記憶部(LDS:local data store)110等のメモリを含む。LDS110に記憶された命令又はデータは、処理要素105〜107からは見えるが、計算ユニット102,103上のエンティティからは見えない。したがって、LDS110は、計算ユニット101の処理要素105〜107間での共有を可能にする。LDS110は、ダイナミックランダムアクセスメモリ(DRAM)、組み込みDRAM(eDRAM)、相変化メモリ(PCM)等を使用して実装することができる。明瞭にするために、図1には、計算ユニット101に実装された処理要素105〜107及びLDS110のみが示されている。しかしながら、計算ユニット102,103も対応する処理要素及び対応するLDSを含む。
各処理要素105〜107は、カーネルの個別のインスタンスを実行する。処理要素105〜107によって実行されるカーネルのインスタンスは、ワークアイテム、タスク又はスレッドと呼ばれ得る。いくつかの変形例では、スレッドによって実行される命令、及び、命令によって操作されるデータは、LDS110からアクセスされる。そして、スレッドによって実行された演算の結果は、LDS110に記憶される。また、処理要素105〜107は、プライベートメモリ115,116,117を含み、これらは本明細書においてまとめて「メモリ115〜117」と呼ばれる。各処理要素105〜107のメモリ115〜117は、対応する処理要素105〜107からしか見えない。例えば、メモリ115は、処理要素105からしか見えず、処理要素106,107からは見えない。メモリ115〜117は、ダイナミックランダムアクセスメモリ(DRAM)、組み込みDRAM(eDRAM)、相変化メモリ(PCM)等を使用して実装することができる。
また、APD100は、APD100に実装される全ての計算ユニット101〜103から見えるメモリであるグローバルデータ記憶部(GDS:global data store)120を含む。本明細書で使用される場合、「見える」という用語は、計算ユニット101〜103が、例えば、メモリに情報を書き込むためにストアを実行する、又は、メモリから情報を読み出すためにロードを実行することによって、GDS120内の情報にアクセスできることを示している。したがって、GDS120を使用することによって、計算ユニット101〜103の処理要素によって実行されているスレッド間の共有を容易にすることが可能になる。GDS120のいくつかの実施形態は、APD100に相互接続され得る他の処理装置からも見える。例えば、GDS120は、APD100に接続されているCPU(図1には示されていない)から見えてもよい。GDS120は、ダイナミックランダムアクセスメモリ(DRAM)、組み込みDRAM(eDRAM)、相変化メモリ(PCM)等を使用して実装することができる。
冗長スレッドは、APD100内の処理要素105〜107によって実行される。冗長スレッドによって実行された演算の結果を符号化することによって、冗長スレッド毎にフィンガープリントを生成することができる。そして、冗長スレッドによって実行された演算の結果又は冗長スレッドのフィンガープリントを比較して、冗長スレッドの実行中に発生したエラーを検出(又は、場合によっては訂正)することができる。結果又は関連するフィンガープリントの比較は、通常、ストア命令等のトリガイベントに応じて実行され、これにより、結果をメモリに収容する前にエラーが検出又は訂正される。APD100のいくつかの実施形態は、比較用のイベントトリガが、結果の符号化値の以前の比較から設定可能な回数だけ発生したか否かに応じて、冗長スレッドのフィンガーの比較を選択的にバイパスするように構成されている。設定可能な回数は、2以上の値に設定することができる。
図2は、いくつかの実施形態による、スレッドのグループの階層構造200を示すブロック図である。階層構造200のいくつかの変形例は、図1に示すAPD100によって同時に又は並行して実行されるスレッドを表す。階層構造200は、図1に示す処理要素105〜107等の処理要素によって実行可能なプログラムコードを表すカーネル205を含む。カーネル205のインスタンスは、ワークグループ210,211,212にグループ分けされ、これらは本明細書においてまとめて「ワークグループ210〜212」と呼ばれる。各ワークグループ210〜212は、ワークグループ内のスレッド数を定義するローカルサイズと、ワークグループ210〜212の各々を一意に識別するグループ識別子と、を有する。いくつかの実施形態では、ワークグループ210〜212は、同時に又は並行して実行される関連スレッドの集合である。例えば、ワークグループ210はスレッド215,216,217を含み、これらは本明細書においてまとめて「スレッド215〜217」と呼ばれる。スレッド215〜217には、ワークグループ210内のスレッド215〜217を識別する異なるローカル識別子が割り当てられている。また、スレッド215〜217には、全てのワークグループ210〜212に割り当てられたスレッドに亘ってスレッド215〜217をグローバルに識別するグローバル識別子も割り当てられている。各ワークグループ210〜212内のスレッドは、対応するワークグループ210〜212内の他のスレッドと同期することができる。
ワークグループ210〜212は、対応する計算ユニットで実行されるように割り当てられている。例えば、ワークグループ210は、図1に示す計算ユニット101で実行され、ワークグループ211は、図1に示す計算ユニット102で実行され、ワークグループ212は、図1に示す計算ユニット103で実行され得る。ワークグループ210〜212内のスレッドは、割り当てられた計算ユニット内の対応する処理要素で実行されるようにスケジューリングされる。例えば、スレッド215は、図1に示す処理要素105で実行されるようにスケジューリングすることができ、スレッド216は、図1に示す処理要素106で実行されるようにスケジューリングすることができ、スレッド217は、図1に示す処理要素107で実行されるようにスケジューリングすることができる。
冗長マルチスレッド(RMT)は、スレッド215〜217等のスレッドの処理中に発生するエラーを検出し、場合によっては訂正するために、APD100によって実行される。冗長スレッドは、同じデータを使用して同じ命令を実行するために、複数のスレッドをインスタンス化することによって生成される。冗長スレッドは、異なる処理要素で実行される。グローバル識別子、又は、グループ識別子及びローカル識別子の組み合わせは、対応するスレッドによって処理されるデータを示している。例えば、スレッドのグローバル識別子を使用して、メモリアドレスを計算し、スレッドの制御を決定することができる。したがって、2つのスレッドが同じデータに対して同じカーネルコードを実行するように、複数のスレッドのグローバル識別子(又は、グループ識別子及びローカル識別子の組み合わせ)を単一のグローバル識別子にマッピングすることによって、冗長スレッドを生成することができる。ソフトウェア実装RMT技術は、米国特許第9,274,904号に開示されており、その全体は、引用することによって本明細書に組み込まれる。比較用のイベントトリガが、結果の符号化値の以前の比較から設定可能な回数だけ発生したか否かに応じて、冗長スレッドによって実行された演算の結果の符号化値(フィンガープリントとも呼ばれ得る)の比較を選択的にバイパスすることによって、ソフトウェア実装RMT技術によって生じるオーバーヘッドを低減することができる。
図3は、いくつかの実施形態による、フィンガープリントの以前の比較以降に生じたイベントトリガの数に基づいて、フィンガープリントの比較を選択的にバイパスするAPD300のブロック図である。APD300は、図1に示すAPD100のいくつかの実施形態を実装するために使用される。APD300はカーネル305を実行するように構成されている。スレッド310,315は、同じデータに対して同じ命令を実行するカーネル305の冗長インスタンスを表している。いくつかの実施形態では、スレッド310,315は、同じ識別子(例えば、同じグローバル識別子、グループ識別子又はローカル識別子)によって識別される。図3には、2つのスレッド310,315が示されているが、他の実施形態では、より多くの冗長スレッドを含んでもよい。
APD300は、冗長スレッドを実行するための処理要素320,325を含む。各処理要素320,325は、対応するプライベートメモリ330,335を含む。図3には、2つの処理要素320,325が示されているが、APD300のいくつかの実施形態では、より多くの処理要素を含んでもよい。また、APD300は、処理要素320,325の両方から見えるメモリ340を含む。例えば、処理要素320,325が同じ計算ユニットに実装される場合、メモリ340は、図1に示すLDS110等のローカルデータ記憶部とすることができる。他の例では、処理要素320,325が異なる計算ユニットに実装される場合、メモリ340は、図1に示すGDS120等のグローバルデータ記憶部とすることができる。
APD300によって実装されるコンパイラは、コンパイル中に、変換コードを、カーネル305によって定義されたプログラムコードに挿入する。変換コードは、スレッド310,315によって実行されると、スレッド310,315に、プログラムコードの一部又はブロックの実行結果に基づいてスレッド310,315によって生成されたフィンガープリントの比較を選択的にバイパスさせる。スレッド310,315は、比較用のイベントトリガが、以前のフィンガープリントの比較以降に設定可能な回数だけ発生したか否かに応じて、フィンガープリントの比較を選択的にバイパスする。いくつかの実施形態では、コンパイラは、フィンガープリントを生成するために結果をハッシュするのに用いられるコード値を含むルックアップテーブル345を、スレッド310,315の1つ以上に割り当てさせる変換コードを挿入する。例えば、256要素の8ビット配列をスレッドグループのローカル共有メモリ空間に割り当てて、ルックアップテーブル345を形成することができる。また、変換コードは、スレッド310,315の1つ以上に、ルックアップテーブル345内のコード値を初期化させることができる。例えば、スレッド310,315の1つ以上は、256個の8ビットの一意のキャッシュ要素(unique cache elements)を、ルックアップテーブル345を形成する配列に挿入することができる。或いは、いくつかの実施形態は、ルックアップテーブル345の使用を必要としない他のアルゴリズム(例えば、排他的論理和演算等に基づくハッシュアルゴリズム)を使用してハッシュを行う。
プログラムコードに挿入された変換コードは、フィンガープリントの値を記憶するために、対応するレジスタ350,355をスレッド310,315に初期化させるレジスタ初期化コードを含む。例えば、スレッド310,315は、対応するプライベートメモリ330,335内のレジスタ350,355を割り当てることができる。また、スレッド310,315は、ルックアップテーブル345に記憶されたコード値を使用して、レジスタ350,355に記憶されたフィンガープリントの値を初期化することができる。また、変換コードは、スレッド310,315が例えばストア命令等のイベントトリガに応じたフィンガープリント値の比較をバイパスした回数をカウントするのに使用される対応するカウンタ360,365を、スレッド310,315に初期化させるカウンタ初期化コードを含む。スレッド310,315は、カウンタ360,365を例えばゼロ等のデフォルト値に初期化することができる。
変換コードは、スレッド310、315に、現在の結果の値(及び、場合によっては、結果を記憶する場所のアドレス)を、対応するレジスタ350,355に記憶された現在のフィンガープリントの値とハッシュさせるハッシュコードを含む。例えば、スレッド310,315が以前のフィンガープリント値の比較をバイパスしていない場合、現在の結果の値(例えば、メモリに記憶される値等)及び記憶場所のアドレスは、対応するレジスタ350,355に記憶されたフィンガープリントの初期値とハッシュされる。他の例では、スレッド310,315が以前のフィンガープリント値の比較を既に1回以上バイパスしている場合、現在の結果の値及びアドレスは、現在のフィンガープリント値とハッシュされる。現在のフィンガープリント値は、以前の比較をバイパスしたことに応じてフィンガープリントとハッシュされた以前の結果の値及びアドレスに基づいて以前に生成されたものである。スキップチェックは、変換コードに含まれており、カウンタ360,365の値と、比較をバイパスするか比較を実行するかを示す設定可能な値と、を比較するために使用される。設定可能な値は、1より大きい値に設定される。設定可能な値が大きいほど、APD300によるエラー検出を行うのに使用される共有及び比較アルゴリズムによって生じるオーバーヘッドを低減させることができる。
また、変換コードは、エラー検出又は訂正のために値を比較できるように、対応するレジスタ350,355内の値をスレッド310,315に共有させる共有及び比較コードを含む。例えば、スレッド310によって実行されたスキップチェックが、カウンタ360の値が設定可能な値以上であることを示す場合、スレッド310は、フィンガープリントの値を、レジスタ350から、メモリ340内に実装された共有バッファ370にコピーすることによって、レジスタ350に記憶されたフィンガープリントを共有することができる。同期、スピンロック又は他の技術を使用して、共有バッファ370の使用を調整してもよい。また、スレッド315によって実行されるスキップチェックは、カウンタ365の値が設定可能な値以上であることを示す。そして、スレッド315は、スレッド310に関連する共有されたフィンガープリントの値にアクセスし、共有されたフィンガープリントを、レジスタ355に記憶されたフィンガープリントの値と比較することができる。2つの値が等しい場合、APD300は、エラーが発生していないと判別する。2つの値が異なる場合、APD300は、エラーが発生したと判別し、エラー訂正を含むエラー手順を開始することができる。
図4は、いくつかの実施形態による、プログラムコード400のコンパイル中にコンパイラによって挿入される変換コードによるプログラムコード400の修正を示す図である。プログラムコード400は、図2に示すカーネル205又は図3に示すカーネル305等のカーネルに含まれるコードの一部とすることができる。プログラムコード400は、コードブロック401と、イベントトリガ402と、コードブロック403と、イベントトリガ404と、コードブロック405と、終了コード406と、を含む。イベントトリガ402,404は、エラーを検出又は訂正するために冗長スレッドのフィンガープリントを比較するのに使用される共有及び比較演算をトリガする命令である。例えば、イベントトリガ402,404は、値をある場所及びメモリに記憶するのに使用されるストア命令とすることができる。したがって、記憶される値は、イベントトリガの結果であり、この値を用いて、例えば、記憶された値及び記憶場所のアドレスを、以前のフィンガープリントの値又は初期値と共にハッシュすることによって、対応するスレッドのフィンガープリントを決定する。プログラムコード400を実行するスレッドが遭遇するイベントトリガ402,404の数は、確定的であってもよいし非確定的であってもよい。例えば、コードブロック401,403,405は、プログラムコード400の実行中に異なる数のイベントトリガ402,404に遭遇するカーネルの異なるインスタンスをもたらす可能性があるループ、条件付き命令、分岐命令等を含むことができる。
プログラムコード400は、コンパイル中にコンパイラによって変換される。例えば、コンパイラのいくつかの変形例は、プログラムコード400内の最初のコードブロック401の前にテーブル生成コード410を挿入し、その結果、修正されたプログラムコード415を実行するスレッドは、図3に示すルックアップテーブル345等のテーブルを割り当てて初期化する。テーブル生成コード410のいくつかの実施形態は、32ビット巡回冗長検査(CRC)ハッシュルーチンを実装し、CRCハッシュルーチンに使用される符号化値を記憶するために256要素の8ビット配列を割り当てる。例えば、テーブルを割り当ててデータを入力するためのテーブル生成コード410は、以下の擬似コードで記述することができる。
Figure 0006957528
さらに、コンパイラは、図3に示すカウンタ360,365等のカウンタを初期化するのに使用されるカウンタ初期化コード425を挿入することによって、プログラムコード400を、修正されたプログラムコード420に変換する。また、修正されたプログラムコード420は、イベントトリガ402,404の各々の後に挿入されるハッシュコード430,431を含む。ハッシュコード430,431は、イベントトリガ402,404に関連する結果をハッシュして、対応するスレッドのフィンガープリントを表す符号化値をイベントトリガ402,404の後に形成するのに使用される。ハッシュコード430,431の例は、以下の擬似コードで記述することができる。
Figure 0006957528
スキップチェックコード435,436を挿入して、プログラムコード400を実行するスレッドが、1つ以上の対応する冗長スレッドと最後に共有及び比較してから設定可能な回数だけイベントトリガ402,404に遭遇したか否かを判別する。共有及び比較コード440,441は、プログラムコード400を実行するスレッドに、そのフィンガープリント値を、1つ以上の冗長スレッドによって計算されたフィンガープリント値と共有及び比較させるために挿入される。共有及び比較コード440,441は、対応するスキップチェックコード435,436が、最後にスレッドを共有及び比較してからスレッドが設定可能な数のイベントトリガ402,404に遭遇したことを示す場合にのみ実行される。
最後に変換されたコード445は、スレッドが終了ブロック406においてプログラムコード400を終了する前に、実行する必要がある未処理の共有及び比較演算が存在するか否かを判別するのに使用される終了チェック450を挿入することによって、生成される。
図5は、いくつかの実施形態による、エラーを検出するために冗長スレッド間で共有及び比較演算を選択的にバイパス又は実行する方法500のフロー図である。方法500は、図1に示すAPD100又は図3に示すAPD300のいくつかの実施形態において実施される。APDは、APDに実装された対応する処理要素に割り当てられた複数のスレッドを使用して、カーネルの複数のインスタンスを実行するように構成されている。APD内のコンパイラは、カーネル内のプログラムコードを変換して、カーネルのインスタンスを実行するスレッドに共有及び比較演算を選択的にバイパス又は実行させる変換コードを生成する。例えば、コンパイラは、図4に示すように、プログラムコードを変換することができる。
ブロック505において、APDは、実行されるスレッドを識別し、識別されたスレッドに対して冗長な1つ以上のスレッドを生成する。本明細書で説明したように、冗長スレッドは、同じ識別子(例えば、グローバル識別子、グループ識別子又はローカル識別子等)を使用して識別することができる。APDは、冗長スレッドを異なる処理要素に割り当てる。ブロック510において、冗長スレッドが異なる処理要素で実行される。冗長スレッドは、同時に又は並行して実行することができ、冗長スレッドのいくつかの実施形態では同期している。
ブロック515において、スレッドは、エラーを検出又は訂正するために共有及び比較演算を潜在的にトリガするイベントトリガ(例えば、ストア命令等)を検出する。ブロック520において、スレッドは、イベントトリガを検出したことに応じて、対応するカウンタをインクリメントする。ブロック525において、スレッドは、イベントトリガに関連する結果(例えば、ストア命令に応じて記憶されたデータ等)のハッシュ値を、対応するフィンガープリントにひとまとめにする。例えば、いくつかの変形例では、スレッドは、結果の値を、以前のイベントトリガの結果に基づいて生成された以前のフィンガープリントとハッシュする。また、スレッドは、他の情報(例えば、ストア命令によって示されたデータを記憶する場所のアドレス等)を、フィンガープリントとハッシュすることができる。
判別ブロック530において、スレッドは、冗長スレッド間で共有及び比較演算を行う前に、カウンタの値を、共有及び比較演算がバイパスされる設定可能な数を示す閾値と比較する。カウンタが閾値以下の場合、方法500は、ブロック510に移行して、スレッドの実行を継続する。カウンタが閾値より大きい場合、ブロック535において、スレッドが共有及び比較演算を実行して、冗長スレッドのフィンガープリントが一致するか否かを判別する。APDは、フィンガープリントが一致しない場合、エラーが発生したと判別することができる。APDは、ブロック535において実行される共有及び比較演算中にエラーが検出された場合、エラー報告又は回復を実行することができる。ブロック540において、スレッドは、対応するカウンタの値をリセットする。そして、方法500は、ブロック510に移行して、スレッドの実行を継続する。
図6は、いくつかの実施形態による、プログラムコードを終了する前に冗長スレッド間の共有及び比較演算を実行すべきか否かを判別するために終了チェックを実行する方法600のフロー図である。方法600は、図1に示すAPD100又は図3に示すAPD300のいくつかの実施形態において実施される。APDは、APDに実装された対応する処理要素に割り当てられた複数のスレッドを使用して、カーネルの複数のインスタンスを実行するように構成されている。APDのコンパイラは、カーネル内のプログラムコードを変換して、終了チェックを挿入する。例えば、コンパイラは、図4に示すように、終了チェック450を挿入するようにプログラムコード400を変換することができる。
ブロック605において、冗長スレッドが異なる処理要素で実行される。冗長スレッドは、同時に又は並行して実行することができ、冗長スレッドのいくつかの実施形態では同期している。ブロック610において、スレッドは終了条件を検出する。判別ブロック615において、スレッドは、終了条件を検出したことに応じて、対応するカウンタの値をチェックする。カウンタの値がゼロ(又は、他のデフォルト値)より大きい場合、すなわち、冗長スレッド間で最後に共有及び比較演算が行われてから共有及び比較演算が少なくとも1回バイパスされた場合、方法は、ブロック620に移行する。ブロック620において、スレッドは、フィンガープリントの現在の値に基づいて共有及び比較を行う。そして、方法600はブロック625に移行して、スレッドが終了コードを実行する。カウンタの値がゼロ(又は、他のデフォルト値)に等しい場合、すなわち、未処理の共有及び比較演算が存在しない場合、方法600はブロック625に直接移行して、スレッドが終了コードを実行する。
いくつかの実施形態では、上述した技術の特定の態様は、ソフトウェアを実行する処理システムの1つ以上のプロセッサによって実装され得る。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され又は有形に具現化された実行可能命令の1つ以上のセットを含む。ソフトウェアは、1つ以上のプロセッサによって実行されると、上述した技術の1つ以上の態様を実施するように1つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶装置、フラッシュメモリ等の固体記憶装置、キャッシュ、ランダムアクセスメモリ(RAM)、又は、他の不揮発性メモリ装置等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶される実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈され若しくは実行可能な他の命令フォーマットであってもよい。
概要的な説明において上述した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があること、1つ以上のさらなるアクティビティが実行され、1つ以上のさらなる要素が含まれ得ることに留意されたい。さらに、アクティビティを列挙する順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、以下の特許請求の範囲に記載されるように本発明の範囲から逸脱することなく、様々な変更及び変形を行うことが可能であることを理解するであろう。したがって、本明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、かかる変更の全てが本発明の範囲内に含まれることを意図している。
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上記のように説明した。しかしながら、利益、利点、問題に対する解決手段、及び、何等かの利益、利点、解決手段を生じさせ又は顕著にし得る機能は、何れか又は全ての請求項の重要な、必須の、不可欠な特徴として解釈されるべきではない。さらに、本明細書の教示の恩恵を受ける当業者は、開示された発明を、異なるが当業者に明らかな同等の方式で変更及び実施することができるので、上述した特定の実施形態は例示に過ぎない。以下の特許請求の範囲に記述されているもの以外に、本明細書に示される構成又は設計の詳細に対する限定を意図していない。したがって、上記に開示された特定の実施形態は変更されてもよいし、修正されてもよく、このような変形形態の全ては、開示された発明の範囲内にあるとみなされることが明らかである。よって、本明細書で求められる保護は、以下の特許請求の範囲に記載のとおりである。

Claims (15)

  1. 計算ユニットの1つ以上の処理要素が、前記1つ以上の処理要素に対するイベントトリガに応じて、
    前記計算ユニットの冗長スレッドによって実行された演算の結果の少なくとも1回の比較を選択的にバイパスすることであって、前記選択的にバイパスすることは、前記冗長スレッドによって以前に実行された少なくとも1つの演算の結果の以前の比較以降に設定可能な回数だけ前記イベントトリガが発生したと判別したことに基づいて行われる、ことを含む、
    方法。
  2. 前記設定可能な回数は1よりも大きい、
    請求項1の方法。
  3. 前記イベントトリガは、前記結果をメモリに記憶するために前記冗長スレッドによって実行されるストア命令である、
    請求項1又は2の方法。
  4. 前記結果を、以前の符号化値及び初期値のうち少なくとも1つと共にハッシュすることによって、前記結果の符号化値を生成することをさらに含む、
    請求項1〜3の何れかの方法。
  5. 前記結果をハッシュするのに使用されるコード値のルックアップテーブルを生成するためにコンパイル中にコードを挿入することによって、前記冗長スレッドによって実行されるプログラムコードを修正することをさらに含む、
    請求項1〜4の何れかの方法。
  6. 前記コンパイル中にプログラムコードを修正することは、前記冗長スレッド毎にカウンタを初期化することをさらに含み、前記冗長スレッドが前記イベントトリガを実行したことに応じて各カウンタがインクリメントされ、前記カウンタの値は、前記少なくとも1回の比較を選択的にバイパスするか否かを判別するために、前記設定可能な回数と比較される、
    請求項5の方法。
  7. 前記コンパイル中にプログラムコードを修正することは、前記結果をハッシュして符号化値を生成し、前記カウンタの値を前記設定可能な回数と比較して前記少なくとも1回の比較を選択的にバイパスするか否かを判別し、前記比較用のイベントトリガが前記設定可能な回数だけ発生したと判別したことに応じて、前記冗長スレッド間で前記符号化値を共有及び比較するためのコードを挿入することをさらに含む、
    請求項6の方法。
  8. 前記コンパイル中にプログラムコードを修正することは、前記冗長スレッドが前記プログラムコードを終了する前に、未処理の共有及び比較演算を実行するか否かを判別するためのコードを挿入することをさらに含む、
    請求項7の方法。
  9. 第1スレッドを実行するための第1処理要素と、
    前記第1スレッドに対して冗長な少なくとも1つの第2スレッドを実行するための少なくとも1つの第2処理要素と、を備え、
    前記第1スレッド及び前記少なくとも1つの第2スレッドは、前記第1スレッド及び前記少なくとも1つの第2スレッドによって実行された演算の結果の比較を選択的にバイパスし、前記比較を選択的にバイパスすることは、前記比較用のイベントトリガに応じて、冗長スレッドによって以前に実行された少なくとも1回の演算の結果の以前の比較以降に設定可能な回数だけ前記イベントトリガが発生したと判別したことに基づいて行われる
    装置。
  10. 前記イベントトリガは、前記結果を記憶するために前記冗長スレッドによって実行されるストア命令である、
    請求項9の装置。
  11. 前記第1スレッド及び前記少なくとも1つの第2スレッドは、前記結果を、以前の符号化値及び初期値のうち少なくとも1つと共にハッシュすることによって、符号化値を生成する、
    請求項9又は10の装置。
  12. 前記第1処理要素と、前記少なくとも1つの第2処理要素と、を含む複数の処理要素をさらに備え、
    前記複数の処理要素は、前記結果をハッシュして符号化値を生成するのに使用されるコード値のルックアップテーブルを生成するためにコンパイル中にコードを挿入することによって、前記第1スレッド及び前記少なくとも1つの第2スレッドによって実行されるプログラムコードを修正するように構成されたコンパイラを実装する、
    請求項9〜11の何れかの装置。
  13. 前記第1スレッド及び前記少なくとも1つの第2スレッドのためのカウンタを実装するように構成されたメモリをさらに備え、
    前記コンパイラは、前記カウンタを初期化するように構成されており、前記第1スレッド又は前記少なくとも1つの第2スレッドは、前記イベントトリガを実行したことに応じて対応するカウンタをインクリメントし、前記カウンタの値は、前記少なくとも1回の比較を選択的にバイパスするか否かを判別するために、前記設定可能な回数と比較される、
    請求項12の装置。
  14. 前記コンパイラは、前記結果をハッシュし、前記カウンタの値を前記設定可能な回数と比較して前記少なくとも1回の比較を選択的にバイパスするか否かを判別し、前記比較用のイベントトリガが前記設定可能な回数だけ発生したと判別したことに応じて、前記第1スレッド及び前記少なくとも1つの第2スレッドの間で前記符号化値を共有及び比較するためのコードを挿入するように構成されている、
    請求項13の装置。
  15. 前記コンパイラは、前記第1スレッド及び前記少なくとも1つの第2スレッドが前記プログラムコードを終了する前に、未処理の共有及び比較演算を実行するか否かを判別するためのコードを挿入するように構成されている、
    請求項14の装置。
JP2018565057A 2016-06-21 2017-06-21 コンパイラ挿入変換コードを用いた冗長スレッドのフィンガープリンティング Active JP6957528B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/188,304 US10013240B2 (en) 2016-06-21 2016-06-21 Fingerprinting of redundant threads using compiler-inserted transformation code
US15/188,304 2016-06-21
PCT/US2017/038524 WO2017223189A1 (en) 2016-06-21 2017-06-21 Fingerprinting of redundant threads using compiler-inserted transformation code

Publications (2)

Publication Number Publication Date
JP2019526102A JP2019526102A (ja) 2019-09-12
JP6957528B2 true JP6957528B2 (ja) 2021-11-02

Family

ID=60659566

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018565057A Active JP6957528B2 (ja) 2016-06-21 2017-06-21 コンパイラ挿入変換コードを用いた冗長スレッドのフィンガープリンティング

Country Status (6)

Country Link
US (1) US10013240B2 (ja)
EP (1) EP3472698B1 (ja)
JP (1) JP6957528B2 (ja)
KR (1) KR102410349B1 (ja)
CN (1) CN109313551B (ja)
WO (1) WO2017223189A1 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10042687B2 (en) * 2016-08-08 2018-08-07 Advanced Micro Devices, Inc. Paired value comparison for redundant multi-threading operations
US10467390B1 (en) 2016-08-18 2019-11-05 Snap Inc. Cyclically dependent checks for software tamper-proofing
US10817289B2 (en) * 2017-10-03 2020-10-27 Nvidia Corp. Optimizing software-directed instruction replication for GPU error detection
CN108228256B (zh) * 2018-02-05 2022-01-04 武汉斗鱼网络科技有限公司 代码同步方法、装置、计算机可读介质及终端
US10540260B2 (en) * 2018-02-23 2020-01-21 Intel Corporation Dynamic instruction latency management in SIMD machines
US10691430B2 (en) * 2018-08-27 2020-06-23 Intel Corporation Latency scheduling mehanism
GB2579590B (en) 2018-12-04 2021-10-13 Imagination Tech Ltd Workload repetition redundancy
GB2579591B (en) * 2018-12-04 2022-10-26 Imagination Tech Ltd Buffer checker
CN112668004B (zh) * 2019-10-16 2022-06-21 武汉斗鱼网络科技有限公司 一种基于llvm的函数校验方法及相关装置
CN112463218B (zh) * 2020-11-27 2022-12-09 成都海光微电子技术有限公司 指令发射控制方法及电路、数据处理方法及电路
GB2619357A (en) * 2022-05-30 2023-12-06 Advanced Risc Mach Ltd Data processors

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004059481A2 (en) * 2002-12-16 2004-07-15 Globespanvirata Incorporated System and method for scheduling thread execution
US7243262B2 (en) * 2003-08-29 2007-07-10 Intel Corporation Incremental checkpointing in a multi-threaded architecture
US7861228B2 (en) * 2003-12-03 2010-12-28 Hewlett-Packard Development Company, L.P. Variable delay instruction for implementation of temporal redundancy
US20050193283A1 (en) * 2003-12-30 2005-09-01 Reinhardt Steven K. Buffering unchecked stores for fault detection in redundant multithreading systems using speculative memory support
US7353365B2 (en) 2004-09-29 2008-04-01 Intel Corporation Implementing check instructions in each thread within a redundant multithreading environments
US7321989B2 (en) 2005-01-05 2008-01-22 The Aerospace Corporation Simultaneously multithreaded processing and single event failure detection method
US7774787B2 (en) * 2005-01-11 2010-08-10 Microsoft Corporation Method for specifying and verifying multi-threaded object-oriented programs with invariants
US7624448B2 (en) * 2006-03-04 2009-11-24 21St Century Technologies, Inc. Intelligent intrusion detection system utilizing enhanced graph-matching of network activity with context data
US8266697B2 (en) * 2006-03-04 2012-09-11 21St Century Technologies, Inc. Enabling network intrusion detection by representing network activity in graphical form utilizing distributed data sensors to detect and transmit activity data
US8190982B2 (en) * 2006-09-29 2012-05-29 University Of Connecticut Error-tolerant multi-threaded memory systems with reduced error accumulation
US8484516B2 (en) * 2007-04-11 2013-07-09 Qualcomm Incorporated Inter-thread trace alignment method and system for a multi-threaded processor
US7865770B2 (en) * 2008-01-10 2011-01-04 Advanced Micro Devices, Inc. Processor including efficient signature generation for logic error protection
US8359578B2 (en) * 2008-10-01 2013-01-22 Nec Laboratories America, Inc. Symbolic reduction of dynamic executions of concurrent programs
US9081688B2 (en) * 2008-12-30 2015-07-14 Intel Corporation Obtaining data for redundant multithreading (RMT) execution
US9594648B2 (en) * 2008-12-30 2017-03-14 Intel Corporation Controlling non-redundant execution in a redundant multithreading (RMT) processor
US10235220B2 (en) * 2012-01-23 2019-03-19 Advanced Micro Devices, Inc. Multithreaded computing
JP5850774B2 (ja) 2012-03-22 2016-02-03 ルネサスエレクトロニクス株式会社 半導体集積回路装置及びそれを用いたシステム
US9047192B2 (en) 2012-12-21 2015-06-02 Advanced Micro Devices, Inc. Signature-based store checking buffer
US9026847B2 (en) 2012-12-21 2015-05-05 Advanced Micro Devices, Inc. Hardware based redundant multi-threading inside a GPU for improved reliability
US9274904B2 (en) * 2013-06-18 2016-03-01 Advanced Micro Devices, Inc. Software only inter-compute unit redundant multithreading for GPUs
CN103699458B (zh) * 2013-06-28 2017-02-01 中国科学院计算技术研究所 一种提高动态冗余多线程性能和降低功耗开销的方法及系统
US9317379B2 (en) * 2014-01-24 2016-04-19 International Business Machines Corporation Using transactional execution for reliability and recovery of transient failures
US9535696B1 (en) * 2016-01-04 2017-01-03 International Business Machines Corporation Instruction to cancel outstanding cache prefetches

Also Published As

Publication number Publication date
WO2017223189A1 (en) 2017-12-28
CN109313551A (zh) 2019-02-05
KR20190010592A (ko) 2019-01-30
EP3472698B1 (en) 2023-01-11
KR102410349B1 (ko) 2022-06-17
US20170364332A1 (en) 2017-12-21
CN109313551B (zh) 2021-02-23
JP2019526102A (ja) 2019-09-12
US10013240B2 (en) 2018-07-03
EP3472698A1 (en) 2019-04-24
EP3472698A4 (en) 2020-02-26

Similar Documents

Publication Publication Date Title
JP6957528B2 (ja) コンパイラ挿入変換コードを用いた冗長スレッドのフィンガープリンティング
KR102098548B1 (ko) 블록체인에서 블록 데이터를 검증하기 위한 방법 및 장치
US11263520B2 (en) Instruction generation process multiplexing method and device
US20210124644A1 (en) Securing against errors in an error correcting code (ecc) implemented in an automotive system
US8606791B2 (en) Concurrently accessed hash table
CN107807839B (zh) 一种修改虚拟机内存数据的方法、装置及电子设备
KR101105474B1 (ko) 범위 검출을 수행하기 위한 명령어 및 로직
EP3757860A1 (en) Providing improved efficiency for metadata usages
JP2020091868A (ja) 作業負荷の繰り返し冗長化
CN109661652A (zh) 使用系统调用序列的异常检测
JP5507573B2 (ja) ポイズン・ビット・エラー検査コード手法
CN109074256A (zh) 在执行向量操作时管理地址冲突的装置及方法
JP6205168B2 (ja) 並列構造化重複検出を利用する並列モデル検査のためのシステムおよび方法
US9734620B2 (en) Apparatus and method for graphics state management
US20210103564A1 (en) Garbage collection for hash-based data structures
CN107908954B (zh) 一种基于地址压缩技术的动态检测gpu上内存溢出的方法
US10496433B2 (en) Modification of context saving functions
US12019629B2 (en) Hash-based data structure
US20130166887A1 (en) Data processing apparatus and data processing method
Soroushnia et al. High performance pattern matching on heterogeneous platform
CN109871355B (zh) 一种快照元数据存储方法、装置及设备、介质
US20140344793A1 (en) Apparatus and method for executing code
US11630667B2 (en) Dedicated vector sub-processor system
US10078586B2 (en) Out-of-range reference detection device, method, and recording medium
US20240184670A1 (en) Alias-free tagged error correcting codes for machine memory operations

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200616

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210430

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210601

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210826

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20211006

R150 Certificate of patent or registration of utility model

Ref document number: 6957528

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150