JP6957528B2 - Redundant thread fingerprinting with compiler insert translation code - Google Patents
Redundant thread fingerprinting with compiler insert translation code Download PDFInfo
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1479—Generic software techniques for error detection or fault masking
- G06F11/1492—Generic software techniques for error detection or fault masking by run-time replication performed by the application software
- G06F11/1494—N-modular type
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/1629—Error detection by comparing the output of redundant processing systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/453—Data distribution
- G06F8/454—Consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/1629—Error detection by comparing the output of redundant processing systems
- G06F11/1633—Error detection by comparing the output of redundant processing systems using mutual exchange of the output between the redundant processing components
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/805—Real-time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/83—Indexing 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)を必要とする。 Processing units such as central processing units (CPUs), graphics processing units (GPUs), and accelerated processing units (APUs) include multiple computing units (APUs) to process multiple instructions simultaneously or in parallel. For example, a processor core) is implemented. For example, a GPU may be implemented using a plurality of computing units, each containing a plurality of processing elements for executing instruction streams (conventionally referred to as "work items" or "threads") simultaneously or in parallel. A computer operating according to a single instruction multiple data (SIMD) architecture executes the same instruction with different data sets. The number of threads that can be executed simultaneously or in parallel on a processing device such as a GPU can range from tens to thousands of threads, and engineers can use two-dimensional (2D) or three threads that are typically implemented on a GPU. We would like to use this function for applications other than two-dimensional (3D) graphics applications. However, general purpose applications require a higher level of fault tolerance than traditional graphics applications to avoid application errors and system crashes.
添付の図面を参照することによって、本開示をより良く理解することができ、その多くの特徴及び利点が当業者に明らかとなるであろう。異なる図面において同一の参照符号が使用されている場合、類似又は同一のアイテムが示されている。 By referring to the accompanying drawings, the present disclosure will be better understood and many features and advantages thereof will be apparent to those skilled in the art. Similar or identical items are indicated when the same reference code is used in different drawings.
冗長マルチスレッド(RMT:Redundant multithreading)を使用して、2つ以上の冗長スレッドを異なる処理要素で実行し、次に冗長スレッドの結果を比較してエラーを検出することによって、処理装置の信頼性を向上させることができる。同じデータに対して同じ命令を実行する2つの冗長スレッドによって生成された結果間の相違を検出することによって、少なくとも1つの冗長スレッドにエラーがあることが示される。同じデータに対して同じ命令を実行する3つ以上の冗長スレッドによって生成された結果間の類似点及び相違点を用いて、例えば3つ以上の結果に適用される投票方式を使用することによって、エラーを検出し、場合によってはエラーを訂正することができる。RMTエラー検出又は訂正をサポートするために冗長スレッド間でデータを受け渡すメカニズムは、かなりのオーバーヘッドを招く。例えば、スピンロックメカニズムを使用して、冗長スレッド間のデータ及びメッセージの受け渡しを同期させてもよい。RMTシステムの性能は、少なくとも部分的には、従来のRMTシステムが、エラーを含む可能性があるデータを記憶するのを避けるために、各ストア命令(又は他のイベントトリガ)の前に、冗長スレッドによって生成された結果を比較するため、オーバーヘッドによって著しく低下する可能性がある。 Processing device reliability by using Redundant multithreading (RMT) to run two or more redundant threads on different processing elements and then comparing the results of the redundant threads to detect errors. Can be improved. By detecting the difference between the results produced by two redundant threads executing the same instruction on the same data, it is indicated that at least one redundant thread has an error. Using similarities and differences between results generated by three or more redundant threads executing the same instructions on the same data, for example by using a voting system that applies to three or more results. It can detect errors and, in some cases, correct them. The mechanism for passing data between redundant threads to support RMT error detection or correction introduces considerable overhead. For example, a spinlock mechanism may be used to synchronize the passing of data and messages between redundant threads. The performance of the RMT system is redundant, at least in part, before each store instruction (or other event trigger) to avoid the traditional RMT system storing data that may contain errors. Overhead can be significantly reduced as the results produced by the threads are compared.
比較用のイベントトリガ(例えば、冗長スレッドによるストア命令の実行等)が以前の結果の比較から設定可能な回数(例えば2回以上)だけ発生したか否かに応じて、冗長スレッドによって実行された演算結果の比較を選択的にバイパスすることによって、ソフトウェア実装されたRMTエラー検出又は訂正メカニズムのオーバーヘッドを、エラー検出精度を低下させることなく減らすことができる。スレッドによって生成された結果を、以前に符号化された値又はスレッドに関連する初期値と共にハッシュして、符号化値を冗長スレッド毎に生成することによって、エラーを検出する確率を大幅に低下させることなく、以前の演算の結果を後続の比較のために記憶するのに伴うオーバーヘッドを減らすことができる。符号化値は、複数のイベントトリガに関連する複数の結果を表す各スレッドのフィンガープリントを形成する。冗長スレッドのフィンガープリントの値は、冗長スレッドでいくつかのイベントトリガが発生した後に共有及び比較される。冗長スレッドのフィンガープリントの値が異なる場合にはエラーが検出され、これにより、バリエーションによってはエラー回復処理がトリガされる。冗長スレッドは、3つ以上の冗長スレッドを含むことができ、その場合、投票方式を使用して、フィンガープリントの最頻値を正しい値として選択することによって、エラー訂正を実行する。フィンガープリントのいくつかの実施形態では、記憶される結果及び記憶される値のアドレスを以前のフィンガープリントの値と共にハッシュすることによって、計算される。 It was executed by the redundant thread depending on whether the event trigger for comparison (for example, execution of the store instruction by the redundant thread) occurred a set number of times (for example, two or more times) from the comparison of the previous result. By selectively bypassing the comparison of the calculation results, the overhead of the software-implemented RMT error detection or correction mechanism can be reduced without degrading the error detection accuracy. By hashing the thread-generated results with previously encoded values or thread-related initial values and generating encoded values for each redundant thread, the probability of detecting an error is greatly reduced. Without having to, the overhead associated with storing the results of previous operations for subsequent comparisons can be reduced. The encoded value forms a fingerprint of each thread that represents multiple results associated with multiple event triggers. Redundant thread fingerprint values are shared and compared after several event triggers have occurred in the redundant thread. If the redundant thread fingerprint values are different, an error is detected, which triggers error recovery processing depending on the variation. Redundant threads can include three or more redundant threads, in which case error correction is performed by using a voting method to select the most frequent fingerprint value as the correct value. In some embodiments of the fingerprint, it is calculated by hashing the address of the stored result and the stored value with the value of the previous fingerprint.
いくつかのバリエーションでは、コンパイラを使用して、冗長スレッドによって実行されるプログラムコードをフィンガープリント方式に変換する。変換コードによって、冗長スレッドは、共有及び比較演算を選択的にバイパスし、バイパスされた共有及び比較演算に対する符号化値を、単一の符号化されたフィンガープリントにひとまとめにする。例えば、共有及び比較演算のイベントトリガがストア命令である場合、コンパイラは、コードを挿入して、冗長スレッドによって記憶される結果と、対応する以前のフィンガープリントの値と、をハッシュするのに使用されるコードのルックアップテーブルを生成する。また、コンパイラは、冗長スレッド毎のカウンタを初期化する。カウンタは、冗長スレッドがイベントトリガを実行したことに応じてインクリメントされ、共有及び比較演算がバイパスされた回数を判別するために使用される。また、コンパイラは、ハッシュを実行し、冗長スレッドのフィンガープリント変数の値の比較をバイパス又は実行するかをチェックし、冗長スレッドのフィンガープリント変数の値を共有及び比較し、プログラムコードを終了する前に未処理の共有及び比較演算を実行するか否かを判別するために、変換コードを挿入する。 In some variations, a compiler is used to translate the program code executed by redundant threads into a fingerprint scheme. The translation code selectively bypasses the sharing and comparison operations and bundles the encoded values for the bypassed sharing and comparison operations into a single coded fingerprint. For example, if the shared and compare operation event trigger is a store instruction, the compiler can insert code to hash the result stored by the redundant thread with the corresponding previous fingerprint value. Generate a lookup table of the code to be compiled. The compiler also initializes the counter for each redundant thread. Counters are incremented in response to redundant threads performing event triggers and are used to determine how many times sharing and comparison operations have been bypassed. The compiler also executes the hash, checks whether to bypass or compare the values of the fingerprint variables of the redundant threads, shares and compares the values of the fingerprint variables of the redundant threads, and before terminating the program code. Insert a conversion code in to determine whether to perform unprocessed sharing and comparison operations.
図1は、いくつかの実施形態による、加速処理装置100のブロック図である。加速処理装置(APD:accelerated processing device)100を用いて、様々なタイプの処理装置(例えば、中央処理装置(CPU)、グラフィックス処理装置(GPU)、汎用GPU(GPGPU)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)等)を実装することができる。APD100は、1つ以上の仮装マシン(例えば、コンピュータシステムの動作をエミュレートし、アプリケーションを実行するためのプラットフォームを提供する低レベル仮想マシン(LLVM)等)を実装するように構成され得る。また、APD100は、オペレーティングシステムを実装するように構成されており、いくつかの実施形態では、各仮装マシンは、オペレーティングシステムの個別のインスタンスを実行する。さらに、APD100は、例えば、ピクセル演算、幾何学的計算、例えば画像レンダリング等を含むグラフィックスパイプライン演算等の演算を行うカーネルを実行するように構成されている。また、APD100は、映像操作(video operations)、物理シミュレーション、計算流体力学等の非グラフィックス処理演算を実行することができる。 FIG. 1 is a block diagram of the acceleration processing apparatus 100 according to some embodiments. Various types of processing devices (eg, central processing unit (CPU), graphics processing unit (GPU), general-purpose GPU (GPGPU), integrated circuits for specific applications) using an accelerated processing device (APD) 100. (ASIC), field programmable gate array (FPGA), digital signal processor (DSP), etc.) can be implemented. The APD100 may be configured to implement one or more fake machines, such as a low-level virtual machine (LLVM) that emulates the behavior of a computer system and provides a platform for running applications. The APD100 is also configured to implement an operating system, and in some embodiments, each masquerade machine runs a separate instance of the operating system. Further, the APD 100 is configured to execute, for example, a kernel that performs operations such as pixel operations, geometric calculations, such as graphics pipeline operations including image rendering and the like. In addition, the APD100 can perform non-graphics processing operations such as video operations, physics simulation, and computational fluid dynamics.
APD100は、複数の計算ユニット101,102,103を含み、これらは本明細書においてまとめて「計算ユニット101〜103」と呼ばれる。計算ユニット101〜103は、同じカーネルの異なるインスタンスを同時に実行するパイプラインとして動作するように構成することができる。例えば、計算ユニット101〜103のいくつかの変形例では、異なるデータを使用して同じ命令を並行して実行する単一命令複数データ(SIMD)プロセッサコアであってもよい。APD100のいくつかの実施形態は、より多くの又はより少ない計算ユニット101〜103を実装してもよい。
The APD 100 includes a plurality of
計算ユニット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を含む。
The calculation unit 101 includes
各処理要素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)等を使用して実装することができる。
Each processing element 105-107 executes a separate instance of the kernel. An instance of the kernel executed by processing elements 105-107 may be called a work item, task or thread. In some variants, the instructions executed by the thread and the data manipulated by the instructions are accessed from the LDS 110. Then, the result of the operation executed by the thread is stored in the LDS 110. Further, the
また、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)等を使用して実装することができる。 Further, the APD 100 includes a global data store (GDS) 120 which is a memory visible from all the calculation units 101 to 103 mounted on the APD 100. As used herein, the term "visible" means that compute units 101-103 perform a store to write information to memory, or a load to read information from memory, for example. This indicates that the information in the GDS 120 can be accessed. Therefore, by using the GDS 120, it becomes possible to facilitate sharing between threads executed by the processing elements of the calculation units 101 to 103. Some embodiments of the GDS 120 are also visible to other processing devices that may be interconnected to the APD 100. For example, the GDS 120 may be visible to a CPU (not shown in FIG. 1) connected to the APD 100. The GDS 120 can be implemented using a dynamic random access memory (DRAM), an embedded DRAM (eDRAM), a phase change memory (PCM), or the like.
冗長スレッドは、APD100内の処理要素105〜107によって実行される。冗長スレッドによって実行された演算の結果を符号化することによって、冗長スレッド毎にフィンガープリントを生成することができる。そして、冗長スレッドによって実行された演算の結果又は冗長スレッドのフィンガープリントを比較して、冗長スレッドの実行中に発生したエラーを検出(又は、場合によっては訂正)することができる。結果又は関連するフィンガープリントの比較は、通常、ストア命令等のトリガイベントに応じて実行され、これにより、結果をメモリに収容する前にエラーが検出又は訂正される。APD100のいくつかの実施形態は、比較用のイベントトリガが、結果の符号化値の以前の比較から設定可能な回数だけ発生したか否かに応じて、冗長スレッドのフィンガーの比較を選択的にバイパスするように構成されている。設定可能な回数は、2以上の値に設定することができる。 Redundant threads are executed by processing elements 105-107 in the APD100. A fingerprint can be generated for each redundant thread by encoding the result of the operation performed by the redundant thread. Then, the result of the operation executed by the redundant thread or the fingerprint of the redundant thread can be compared to detect (or correct in some cases) an error generated during execution of the redundant thread. Comparison of results or associated fingerprints is typically performed in response to a trigger event such as a store instruction, which detects or corrects an error before storing the result in memory. In some embodiments of the APD100, the comparison of redundant thread fingers is selectively performed depending on whether the event trigger for comparison has occurred a configurable number of times from the previous comparison of the resulting coded values. It is configured to bypass. The number of times that can be set can be set to a value of 2 or more.
図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内の他のスレッドと同期することができる。
FIG. 2 is a block diagram showing a
ワークグループ210〜212は、対応する計算ユニットで実行されるように割り当てられている。例えば、ワークグループ210は、図1に示す計算ユニット101で実行され、ワークグループ211は、図1に示す計算ユニット102で実行され、ワークグループ212は、図1に示す計算ユニット103で実行され得る。ワークグループ210〜212内のスレッドは、割り当てられた計算ユニット内の対応する処理要素で実行されるようにスケジューリングされる。例えば、スレッド215は、図1に示す処理要素105で実行されるようにスケジューリングすることができ、スレッド216は、図1に示す処理要素106で実行されるようにスケジューリングすることができ、スレッド217は、図1に示す処理要素107で実行されるようにスケジューリングすることができる。
Workgroups 210-212 are assigned to run in the corresponding compute units. For example, the
冗長マルチスレッド(RMT)は、スレッド215〜217等のスレッドの処理中に発生するエラーを検出し、場合によっては訂正するために、APD100によって実行される。冗長スレッドは、同じデータを使用して同じ命令を実行するために、複数のスレッドをインスタンス化することによって生成される。冗長スレッドは、異なる処理要素で実行される。グローバル識別子、又は、グループ識別子及びローカル識別子の組み合わせは、対応するスレッドによって処理されるデータを示している。例えば、スレッドのグローバル識別子を使用して、メモリアドレスを計算し、スレッドの制御を決定することができる。したがって、2つのスレッドが同じデータに対して同じカーネルコードを実行するように、複数のスレッドのグローバル識別子(又は、グループ識別子及びローカル識別子の組み合わせ)を単一のグローバル識別子にマッピングすることによって、冗長スレッドを生成することができる。ソフトウェア実装RMT技術は、米国特許第9,274,904号に開示されており、その全体は、引用することによって本明細書に組み込まれる。比較用のイベントトリガが、結果の符号化値の以前の比較から設定可能な回数だけ発生したか否かに応じて、冗長スレッドによって実行された演算の結果の符号化値(フィンガープリントとも呼ばれ得る)の比較を選択的にバイパスすることによって、ソフトウェア実装RMT技術によって生じるオーバーヘッドを低減することができる。 Redundant multithreading (RMT) is performed by the APD100 to detect and, in some cases, correct errors that occur during the processing of threads such as threads 215-217. Redundant threads are created by instantiating multiple threads to execute the same instruction with the same data. Redundant threads run on different processing elements. The global identifier, or combination of group and local identifiers, indicates the data processed by the corresponding thread. For example, the thread's global identifier can be used to calculate the memory address and determine thread control. Therefore, by mapping the global identifiers (or combinations of group and local identifiers) of multiple threads to a single global identifier so that two threads execute the same kernel code for the same data, it is redundant. Threads can be spawned. Software-implemented RMT technology is disclosed in US Pat. No. 9,274,904, which is incorporated herein by reference in its entirety. The coded value (also known as the fingerprint) of the result of an operation performed by a redundant thread, depending on whether the event trigger for comparison has occurred a set number of times since the previous comparison of the coded value of the result. By selectively bypassing the (obtain) comparison, the overhead caused by software-implemented RMT technology can be reduced.
図3は、いくつかの実施形態による、フィンガープリントの以前の比較以降に生じたイベントトリガの数に基づいて、フィンガープリントの比較を選択的にバイパスするAPD300のブロック図である。APD300は、図1に示すAPD100のいくつかの実施形態を実装するために使用される。APD300はカーネル305を実行するように構成されている。スレッド310,315は、同じデータに対して同じ命令を実行するカーネル305の冗長インスタンスを表している。いくつかの実施形態では、スレッド310,315は、同じ識別子(例えば、同じグローバル識別子、グループ識別子又はローカル識別子)によって識別される。図3には、2つのスレッド310,315が示されているが、他の実施形態では、より多くの冗長スレッドを含んでもよい。
FIG. 3 is a block diagram of the
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等のグローバルデータ記憶部とすることができる。
The
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の使用を必要としない他のアルゴリズム(例えば、排他的論理和演算等に基づくハッシュアルゴリズム)を使用してハッシュを行う。 The compiler implemented by APD300 inserts the conversion code into the program code defined by kernel 305 during compilation. When the translation code is executed by threads 310,315, it selectively bypasses threads 310,315 to compare the fingerprints generated by threads 310,315 based on the execution result of part or block of the program code. Let me. Threads 310,315 selectively bypass the fingerprint comparison, depending on whether the comparison event trigger has occurred a setable number of times since the previous fingerprint comparison. In some embodiments, the compiler inserts a translation code that causes one or more of threads 310,315 to have a lookup table 345 containing code values used to hash the results to generate fingerprints. do. For example, an 8-bit array of 256 elements can be allocated to the thread group's local shared memory space to form a lookup table 345. Further, the conversion code can initialize the code value in the lookup table 345 to one or more of threads 310 and 315. For example, one or more of threads 310,315 can insert 256 8-bit unique cache elements into the array forming the lookup table 345. Alternatively, some embodiments perform hashing using another algorithm that does not require the use of a lookup table 345 (eg, a hash algorithm based on an exclusive OR or the like).
プログラムコードに挿入された変換コードは、フィンガープリントの値を記憶するために、対応するレジスタ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を例えばゼロ等のデフォルト値に初期化することができる。 The conversion code inserted into the program code includes a register initialization code that initializes the corresponding registers 350,355 to threads 310,315 to store the fingerprint value. For example, threads 310,315 can allocate registers 350,355 in the corresponding private memories 330,335. In addition, threads 310 and 315 can use the code values stored in the lookup table 345 to initialize the fingerprint values stored in the registers 350 and 355. The conversion code also provides threads 310,315 with corresponding counters 360,365 used to count the number of times threads 310,315 bypassed the comparison of fingerprint values in response to event triggers such as store instructions. Includes a counter initialization code to initialize to. Threads 310, 315 can initialize counters 360, 365 to default values such as zero.
変換コードは、スレッド310、315に、現在の結果の値(及び、場合によっては、結果を記憶する場所のアドレス)を、対応するレジスタ350,355に記憶された現在のフィンガープリントの値とハッシュさせるハッシュコードを含む。例えば、スレッド310,315が以前のフィンガープリント値の比較をバイパスしていない場合、現在の結果の値(例えば、メモリに記憶される値等)及び記憶場所のアドレスは、対応するレジスタ350,355に記憶されたフィンガープリントの初期値とハッシュされる。他の例では、スレッド310,315が以前のフィンガープリント値の比較を既に1回以上バイパスしている場合、現在の結果の値及びアドレスは、現在のフィンガープリント値とハッシュされる。現在のフィンガープリント値は、以前の比較をバイパスしたことに応じてフィンガープリントとハッシュされた以前の結果の値及びアドレスに基づいて以前に生成されたものである。スキップチェックは、変換コードに含まれており、カウンタ360,365の値と、比較をバイパスするか比較を実行するかを示す設定可能な値と、を比較するために使用される。設定可能な値は、1より大きい値に設定される。設定可能な値が大きいほど、APD300によるエラー検出を行うのに使用される共有及び比較アルゴリズムによって生じるオーバーヘッドを低減させることができる。 The conversion code has the current result value (and, in some cases, the address of the location where the result is stored) stored in threads 310,315 and the current fingerprint value stored in the corresponding registers 350,355. Includes the hash code to make. For example, if threads 310,315 have not bypassed the comparison of previous fingerprint values, the current result value (eg, a value stored in memory, etc.) and the address of the storage location will be in the corresponding registers 350,355. Hashed with the initial value of the fingerprint stored in. In another example, if threads 310,315 have already bypassed the previous fingerprint value comparison more than once, the current result value and address will be hashed with the current fingerprint value. The current fingerprint value is previously generated based on the value and address of the previous result hashed with the fingerprint in response to bypassing the previous comparison. The skip check is included in the conversion code and is used to compare the value of counters 360,365 with a configurable value that indicates whether to bypass or perform the comparison. The value that can be set is set to a value greater than 1. The larger the configurable value, the less overhead the sharing and comparison algorithms used to perform error detection with the APD300.
また、変換コードは、エラー検出又は訂正のために値を比較できるように、対応するレジスタ350,355内の値をスレッド310,315に共有させる共有及び比較コードを含む。例えば、スレッド310によって実行されたスキップチェックが、カウンタ360の値が設定可能な値以上であることを示す場合、スレッド310は、フィンガープリントの値を、レジスタ350から、メモリ340内に実装された共有バッファ370にコピーすることによって、レジスタ350に記憶されたフィンガープリントを共有することができる。同期、スピンロック又は他の技術を使用して、共有バッファ370の使用を調整してもよい。また、スレッド315によって実行されるスキップチェックは、カウンタ365の値が設定可能な値以上であることを示す。そして、スレッド315は、スレッド310に関連する共有されたフィンガープリントの値にアクセスし、共有されたフィンガープリントを、レジスタ355に記憶されたフィンガープリントの値と比較することができる。2つの値が等しい場合、APD300は、エラーが発生していないと判別する。2つの値が異なる場合、APD300は、エラーが発生したと判別し、エラー訂正を含むエラー手順を開始することができる。
The conversion code also includes a sharing and comparison code that causes threads 310 and 315 to share the values in the corresponding registers 350 and 355 so that the values can be compared for error detection or correction. For example, if the skip check performed by thread 310 indicates that the value of counter 360 is greater than or equal to the configurable value, thread 310 has implemented the fingerprint value from register 350 into memory 340. By copying to the shared buffer 370, the fingerprint stored in the register 350 can be shared. The use of shared buffer 370 may be adjusted using synchronization, spinlock or other techniques. Further, the skip check executed by the thread 315 indicates that the value of the counter 365 is equal to or greater than the settable value. Thread 315 can then access the shared fingerprint value associated with thread 310 and compare the shared fingerprint with the fingerprint value stored in register 355. If the two values are equal, the APD300 determines that no error has occurred. If the two values are different, the
図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に遭遇するカーネルの異なるインスタンスをもたらす可能性があるループ、条件付き命令、分岐命令等を含むことができる。
FIG. 4 is a diagram showing modification of the
プログラムコード400は、コンパイル中にコンパイラによって変換される。例えば、コンパイラのいくつかの変形例は、プログラムコード400内の最初のコードブロック401の前にテーブル生成コード410を挿入し、その結果、修正されたプログラムコード415を実行するスレッドは、図3に示すルックアップテーブル345等のテーブルを割り当てて初期化する。テーブル生成コード410のいくつかの実施形態は、32ビット巡回冗長検査(CRC)ハッシュルーチンを実装し、CRCハッシュルーチンに使用される符号化値を記憶するために256要素の8ビット配列を割り当てる。例えば、テーブルを割り当ててデータを入力するためのテーブル生成コード410は、以下の擬似コードで記述することができる。
さらに、コンパイラは、図3に示すカウンタ360,365等のカウンタを初期化するのに使用されるカウンタ初期化コード425を挿入することによって、プログラムコード400を、修正されたプログラムコード420に変換する。また、修正されたプログラムコード420は、イベントトリガ402,404の各々の後に挿入されるハッシュコード430,431を含む。ハッシュコード430,431は、イベントトリガ402,404に関連する結果をハッシュして、対応するスレッドのフィンガープリントを表す符号化値をイベントトリガ402,404の後に形成するのに使用される。ハッシュコード430,431の例は、以下の擬似コードで記述することができる。
スキップチェックコード435,436を挿入して、プログラムコード400を実行するスレッドが、1つ以上の対応する冗長スレッドと最後に共有及び比較してから設定可能な回数だけイベントトリガ402,404に遭遇したか否かを判別する。共有及び比較コード440,441は、プログラムコード400を実行するスレッドに、そのフィンガープリント値を、1つ以上の冗長スレッドによって計算されたフィンガープリント値と共有及び比較させるために挿入される。共有及び比較コード440,441は、対応するスキップチェックコード435,436が、最後にスレッドを共有及び比較してからスレッドが設定可能な数のイベントトリガ402,404に遭遇したことを示す場合にのみ実行される。
A thread that inserts skip check codes 435 and 436 and executes
最後に変換されたコード445は、スレッドが終了ブロック406においてプログラムコード400を終了する前に、実行する必要がある未処理の共有及び比較演算が存在するか否かを判別するのに使用される終了チェック450を挿入することによって、生成される。
The last converted
図5は、いくつかの実施形態による、エラーを検出するために冗長スレッド間で共有及び比較演算を選択的にバイパス又は実行する方法500のフロー図である。方法500は、図1に示すAPD100又は図3に示すAPD300のいくつかの実施形態において実施される。APDは、APDに実装された対応する処理要素に割り当てられた複数のスレッドを使用して、カーネルの複数のインスタンスを実行するように構成されている。APD内のコンパイラは、カーネル内のプログラムコードを変換して、カーネルのインスタンスを実行するスレッドに共有及び比較演算を選択的にバイパス又は実行させる変換コードを生成する。例えば、コンパイラは、図4に示すように、プログラムコードを変換することができる。
FIG. 5 is a flow diagram of a
ブロック505において、APDは、実行されるスレッドを識別し、識別されたスレッドに対して冗長な1つ以上のスレッドを生成する。本明細書で説明したように、冗長スレッドは、同じ識別子(例えば、グローバル識別子、グループ識別子又はローカル識別子等)を使用して識別することができる。APDは、冗長スレッドを異なる処理要素に割り当てる。ブロック510において、冗長スレッドが異なる処理要素で実行される。冗長スレッドは、同時に又は並行して実行することができ、冗長スレッドのいくつかの実施形態では同期している。
At
ブロック515において、スレッドは、エラーを検出又は訂正するために共有及び比較演算を潜在的にトリガするイベントトリガ(例えば、ストア命令等)を検出する。ブロック520において、スレッドは、イベントトリガを検出したことに応じて、対応するカウンタをインクリメントする。ブロック525において、スレッドは、イベントトリガに関連する結果(例えば、ストア命令に応じて記憶されたデータ等)のハッシュ値を、対応するフィンガープリントにひとまとめにする。例えば、いくつかの変形例では、スレッドは、結果の値を、以前のイベントトリガの結果に基づいて生成された以前のフィンガープリントとハッシュする。また、スレッドは、他の情報(例えば、ストア命令によって示されたデータを記憶する場所のアドレス等)を、フィンガープリントとハッシュすることができる。
At block 515, the thread detects an event trigger (eg, a store instruction, etc.) that potentially triggers a sharing and comparison operation to detect or correct an error. At
判別ブロック530において、スレッドは、冗長スレッド間で共有及び比較演算を行う前に、カウンタの値を、共有及び比較演算がバイパスされる設定可能な数を示す閾値と比較する。カウンタが閾値以下の場合、方法500は、ブロック510に移行して、スレッドの実行を継続する。カウンタが閾値より大きい場合、ブロック535において、スレッドが共有及び比較演算を実行して、冗長スレッドのフィンガープリントが一致するか否かを判別する。APDは、フィンガープリントが一致しない場合、エラーが発生したと判別することができる。APDは、ブロック535において実行される共有及び比較演算中にエラーが検出された場合、エラー報告又は回復を実行することができる。ブロック540において、スレッドは、対応するカウンタの値をリセットする。そして、方法500は、ブロック510に移行して、スレッドの実行を継続する。
In the determination block 530, the thread compares the value of the counter with a threshold indicating a configurable number of bypassed sharing and comparing operations before performing the sharing and comparing operations between redundant threads. If the counter is below the threshold,
図6は、いくつかの実施形態による、プログラムコードを終了する前に冗長スレッド間の共有及び比較演算を実行すべきか否かを判別するために終了チェックを実行する方法600のフロー図である。方法600は、図1に示すAPD100又は図3に示すAPD300のいくつかの実施形態において実施される。APDは、APDに実装された対応する処理要素に割り当てられた複数のスレッドを使用して、カーネルの複数のインスタンスを実行するように構成されている。APDのコンパイラは、カーネル内のプログラムコードを変換して、終了チェックを挿入する。例えば、コンパイラは、図4に示すように、終了チェック450を挿入するようにプログラムコード400を変換することができる。
FIG. 6 is a flow diagram of a
ブロック605において、冗長スレッドが異なる処理要素で実行される。冗長スレッドは、同時に又は並行して実行することができ、冗長スレッドのいくつかの実施形態では同期している。ブロック610において、スレッドは終了条件を検出する。判別ブロック615において、スレッドは、終了条件を検出したことに応じて、対応するカウンタの値をチェックする。カウンタの値がゼロ(又は、他のデフォルト値)より大きい場合、すなわち、冗長スレッド間で最後に共有及び比較演算が行われてから共有及び比較演算が少なくとも1回バイパスされた場合、方法は、ブロック620に移行する。ブロック620において、スレッドは、フィンガープリントの現在の値に基づいて共有及び比較を行う。そして、方法600はブロック625に移行して、スレッドが終了コードを実行する。カウンタの値がゼロ(又は、他のデフォルト値)に等しい場合、すなわち、未処理の共有及び比較演算が存在しない場合、方法600はブロック625に直接移行して、スレッドが終了コードを実行する。
In block 605, redundant threads are executed with different processing elements. Redundant threads can run simultaneously or in parallel and are synchronized in some embodiments of redundant threads. At
いくつかの実施形態では、上述した技術の特定の態様は、ソフトウェアを実行する処理システムの1つ以上のプロセッサによって実装され得る。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され又は有形に具現化された実行可能命令の1つ以上のセットを含む。ソフトウェアは、1つ以上のプロセッサによって実行されると、上述した技術の1つ以上の態様を実施するように1つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶装置、フラッシュメモリ等の固体記憶装置、キャッシュ、ランダムアクセスメモリ(RAM)、又は、他の不揮発性メモリ装置等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶される実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈され若しくは実行可能な他の命令フォーマットであってもよい。 In some embodiments, certain aspects of the techniques described above may be implemented by one or more processors in a processing system running software. The software includes one or more sets of executable instructions stored or tangibly embodied in a non-temporary computer-readable storage medium. When executed by one or more processors, the software can include instructions and specific data that operate on one or more processors to implement one or more aspects of the techniques described above. Non-temporary computer-readable storage media can include, for example, magnetic or optical disk storage devices, solid-state storage devices such as flash memory, caches, random access memory (RAM), or other non-volatile memory devices. Executable instructions stored on a non-temporary computer-readable storage medium may be source code, assembly language code, object code, or other instruction format that can be interpreted or executed by one or more processors. ..
概要的な説明において上述した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があること、1つ以上のさらなるアクティビティが実行され、1つ以上のさらなる要素が含まれ得ることに留意されたい。さらに、アクティビティを列挙する順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、以下の特許請求の範囲に記載されるように本発明の範囲から逸脱することなく、様々な変更及び変形を行うことが可能であることを理解するであろう。したがって、本明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、かかる変更の全てが本発明の範囲内に含まれることを意図している。 Not all activities or elements mentioned above are required in the general description, and some specific activities or devices may not be required, and one or more additional activities are performed, 1 Note that one or more additional elements may be included. Moreover, the order in which activities are listed is not necessarily the order in which they are executed. The concept has also been described with reference to specific embodiments. However, one of ordinary skill in the art will appreciate that various modifications and modifications can be made without departing from the scope of the invention as described in the claims below. Therefore, the specification and drawings should be considered in an exemplary sense rather than a limiting sense, and all such modifications are intended to be within the scope of the present invention.
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上記のように説明した。しかしながら、利益、利点、問題に対する解決手段、及び、何等かの利益、利点、解決手段を生じさせ又は顕著にし得る機能は、何れか又は全ての請求項の重要な、必須の、不可欠な特徴として解釈されるべきではない。さらに、本明細書の教示の恩恵を受ける当業者は、開示された発明を、異なるが当業者に明らかな同等の方式で変更及び実施することができるので、上述した特定の実施形態は例示に過ぎない。以下の特許請求の範囲に記述されているもの以外に、本明細書に示される構成又は設計の詳細に対する限定を意図していない。したがって、上記に開示された特定の実施形態は変更されてもよいし、修正されてもよく、このような変形形態の全ては、開示された発明の範囲内にあるとみなされることが明らかである。よって、本明細書で求められる保護は、以下の特許請求の範囲に記載のとおりである。 Benefits, other benefits and solutions to problems have been described above for a particular embodiment. However, benefits, benefits, solutions to problems, and features that can give rise to or make any benefit, benefits, solutions, as important, essential, and essential features of any or all claims. Should not be interpreted. Moreover, the particular embodiments described above are exemplified, as those skilled in the art benefiting from the teachings herein can modify and implement the disclosed inventions in a different but equivalent manner apparent to those skilled in the art. Not too much. No limitation is intended to limit the configuration or design details presented herein, other than those described in the claims below. Therefore, it is clear that the particular embodiments disclosed above may be modified or modified, and all such variants are considered to be within the scope of the disclosed invention. be. Therefore, the protection required herein is as described in the claims below.
Claims (15)
前記計算ユニットの冗長スレッドによって実行された演算の結果の少なくとも1回の比較を選択的にバイパスすることであって、前記選択的にバイパスすることは、前記冗長スレッドによって以前に実行された少なくとも1つの演算の結果の以前の比較以降に設定可能な回数だけ前記イベントトリガが発生したと判別したことに基づいて行われる、ことを含む、
方法。 One or more processing elements of a compute unit respond to an event trigger on the one or more processing elements.
The selective bypass is to selectively bypass at least one comparison of the results of operations performed by the redundant thread of the compute unit, and the selective bypass is at least one previously performed by the redundant thread. It is performed based on the determination that the event trigger has occurred a set number of times since the previous comparison of the results of one operation.
Method.
請求項1の方法。 The number of times that can be set is greater than 1.
The method of claim 1.
請求項1又は2の方法。 The event trigger is a store instruction executed by the redundant thread to store the result in memory.
The method of claim 1 or 2.
請求項1〜3の何れかの方法。 Further comprising generating a coded value of the result by hashing the result with at least one of a previous coded value and an initial value.
The method according to any one of claims 1 to 3.
請求項1〜4の何れかの方法。 Further comprising modifying the program code executed by the redundant threads by inserting code during compilation to generate a look-up table of code values used to hash the results.
The method according to any one of claims 1 to 4.
請求項5の方法。 Modifying the program code during the compilation further includes initializing the counters for each redundant thread, each counter being incremented in response to the redundant thread executing the event trigger, and the counters of the counter. The value is compared to the configurable number of times to determine whether to selectively bypass the at least one comparison.
The method of claim 5.
請求項6の方法。 Modifying the program code during the compilation hashes the result to generate a coded value, compares the value of the counter with the configurable number of times, and selectively bypasses the at least one comparison. A code for sharing and comparing the coded value among the redundant threads is inserted according to the determination of whether or not to perform the event trigger and the determination that the event trigger for comparison has occurred the settable number of times. Including more to do,
The method of claim 6.
請求項7の方法。 Modifying the program code during the compilation further means inserting code to determine whether the redundant thread will perform unprocessed sharing and comparison operations before terminating the program code. include,
7. The method of claim 7.
前記第1スレッドに対して冗長な少なくとも1つの第2スレッドを実行するための少なくとも1つの第2処理要素と、を備え、
前記第1スレッド及び前記少なくとも1つの第2スレッドは、前記第1スレッド及び前記少なくとも1つの第2スレッドによって実行された演算の結果の比較を選択的にバイパスし、前記比較を選択的にバイパスすることは、前記比較用のイベントトリガに応じて、冗長スレッドによって以前に実行された少なくとも1回の演算の結果の以前の比較以降に設定可能な回数だけ前記イベントトリガが発生したと判別したことに基づいて行われる、
装置。 The first processing element for executing the first thread and
It includes at least one second processing element for executing at least one second thread that is redundant with respect to the first thread.
The first thread and the at least one second thread selectively bypass the comparison of the results of operations performed by the first thread and the at least one second thread, and selectively bypass the comparison. That is, in response to the event trigger for comparison , it is determined that the event trigger has occurred a set number of times since the previous comparison of the results of at least one operation previously executed by the redundant thread. Based on ,
Device.
請求項9の装置。 The event trigger is a store instruction executed by the redundant thread to store the result.
The device of claim 9.
請求項9又は10の装置。 The first thread and the at least one second thread generate a coded value by hashing the result with at least one of a previous coded value and an initial value.
The device of claim 9 or 10.
前記複数の処理要素は、前記結果をハッシュして符号化値を生成するのに使用されるコード値のルックアップテーブルを生成するためにコンパイル中にコードを挿入することによって、前記第1スレッド及び前記少なくとも1つの第2スレッドによって実行されるプログラムコードを修正するように構成されたコンパイラを実装する、
請求項9〜11の何れかの装置。 A plurality of processing elements including the first processing element and at least one second processing element are further provided.
The first thread and the plurality of processing elements include the first thread and by inserting code during compilation to generate a look-up table of code values used to hash the results and generate encoded values. Implements a compiler configured to modify the program code executed by at least one second thread.
The device according to any one of claims 9 to 11.
前記コンパイラは、前記カウンタを初期化するように構成されており、前記第1スレッド又は前記少なくとも1つの第2スレッドは、前記イベントトリガを実行したことに応じて対応するカウンタをインクリメントし、前記カウンタの値は、前記少なくとも1回の比較を選択的にバイパスするか否かを判別するために、前記設定可能な回数と比較される、
請求項12の装置。 Further comprising memory configured to implement counters for said first thread and said at least one second thread.
The compiler is configured to initialize the counter, and the first thread or at least one second thread increments the corresponding counter in response to executing the event trigger, and the counter The value of is compared to the configurable number of times to determine whether to selectively bypass the at least one comparison.
The device of claim 12.
請求項13の装置。 The compiler hashes the results, compares the value of the counter with the configurable number of times to determine whether to selectively bypass the at least one comparison, and the event trigger for the comparison It is configured to insert a code for sharing and comparing the encoded value between the first thread and the at least one second thread in response to the determination that the occurrence has occurred a set number of times. ing,
The device of claim 13.
請求項14の装置。 The compiler is to insert code to determine whether the first thread and at least one second thread perform unprocessed sharing and comparison operations before terminating the program code. It is configured,
The device of claim 14.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/188,304 | 2016-06-21 | ||
US15/188,304 US10013240B2 (en) | 2016-06-21 | 2016-06-21 | Fingerprinting of redundant threads using compiler-inserted transformation code |
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 (en) | 2019-09-12 |
JP6957528B2 true JP6957528B2 (en) | 2021-11-02 |
Family
ID=60659566
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2018565057A Active JP6957528B2 (en) | 2016-06-21 | 2017-06-21 | Redundant thread fingerprinting with compiler insert translation code |
Country Status (6)
Country | Link |
---|---|
US (1) | US10013240B2 (en) |
EP (1) | EP3472698B1 (en) |
JP (1) | JP6957528B2 (en) |
KR (1) | KR102410349B1 (en) |
CN (1) | CN109313551B (en) |
WO (1) | WO2017223189A1 (en) |
Families Citing this family (11)
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 (en) * | 2018-02-05 | 2022-01-04 | 武汉斗鱼网络科技有限公司 | Code synchronization method, device, computer readable medium and terminal |
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 |
GB2579591B (en) * | 2018-12-04 | 2022-10-26 | Imagination Tech Ltd | Buffer checker |
GB2579590B (en) | 2018-12-04 | 2021-10-13 | Imagination Tech Ltd | Workload repetition redundancy |
CN112668004B (en) * | 2019-10-16 | 2022-06-21 | 武汉斗鱼网络科技有限公司 | LLVM-based function verification method and related device |
CN112463218B (en) * | 2020-11-27 | 2022-12-09 | 成都海光微电子技术有限公司 | Instruction emission control method and circuit, data processing method and circuit |
GB2619357A (en) * | 2022-05-30 | 2023-12-06 | Advanced Risc Mach Ltd | Data processors |
Family Cites Families (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7716668B2 (en) * | 2002-12-16 | 2010-05-11 | Brooktree Broadband Holding, Inc. | 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 |
US9594648B2 (en) * | 2008-12-30 | 2017-03-14 | Intel Corporation | Controlling non-redundant execution in a redundant multithreading (RMT) processor |
US9081688B2 (en) * | 2008-12-30 | 2015-07-14 | Intel Corporation | Obtaining data for redundant multithreading (RMT) execution |
US10235220B2 (en) * | 2012-01-23 | 2019-03-19 | Advanced Micro Devices, Inc. | Multithreaded computing |
JP5850774B2 (en) | 2012-03-22 | 2016-02-03 | ルネサスエレクトロニクス株式会社 | Semiconductor integrated circuit device and system using the same |
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 (en) * | 2013-06-28 | 2017-02-01 | 中国科学院计算技术研究所 | Method and system for increasing dynamic redundant multithreading performance and reducing power consumption overhead |
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 |
-
2016
- 2016-06-21 US US15/188,304 patent/US10013240B2/en active Active
-
2017
- 2017-06-21 KR KR1020187036106A patent/KR102410349B1/en active IP Right Grant
- 2017-06-21 EP EP17816132.9A patent/EP3472698B1/en active Active
- 2017-06-21 JP JP2018565057A patent/JP6957528B2/en active Active
- 2017-06-21 CN CN201780036459.9A patent/CN109313551B/en active Active
- 2017-06-21 WO PCT/US2017/038524 patent/WO2017223189A1/en unknown
Also Published As
Publication number | Publication date |
---|---|
EP3472698A4 (en) | 2020-02-26 |
US20170364332A1 (en) | 2017-12-21 |
US10013240B2 (en) | 2018-07-03 |
JP2019526102A (en) | 2019-09-12 |
KR20190010592A (en) | 2019-01-30 |
EP3472698B1 (en) | 2023-01-11 |
KR102410349B1 (en) | 2022-06-17 |
CN109313551B (en) | 2021-02-23 |
WO2017223189A1 (en) | 2017-12-28 |
CN109313551A (en) | 2019-02-05 |
EP3472698A1 (en) | 2019-04-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6957528B2 (en) | Redundant thread fingerprinting with compiler insert translation code | |
US20190146817A1 (en) | Binding constants at runtime for improved resource utilization | |
US11494265B2 (en) | Securing against errors in an error correcting code (ECC) implemented in an automotive system | |
US8606791B2 (en) | Concurrently accessed hash table | |
EP3757860B1 (en) | Providing improved efficiency for metadata usages | |
JP2020091868A (en) | Workload repetition redundancy | |
CN109661652A (en) | Use the abnormality detection of system call sequence | |
US11347698B2 (en) | Garbage collection for hash-based data structures | |
JP6205168B2 (en) | System and method for parallel model checking utilizing parallel structured duplicate detection | |
CN107908954B (en) | Method for dynamically detecting memory overflow on GPU (graphics processing Unit) based on address compression technology | |
JP2012508425A (en) | Poison bit error check code technique | |
KR20150117522A (en) | Graphics state manage apparatus and method | |
US10496433B2 (en) | Modification of context saving functions | |
US20220269675A1 (en) | Hash-based data structure | |
US20200264873A1 (en) | Scalar unit with high performance in crypto operation | |
US20180150405A1 (en) | Data type management | |
JP5238876B2 (en) | Information processing apparatus and information processing method | |
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 | |
JP5389733B2 (en) | Extraction apparatus and extraction method | |
JP2014109825A (en) | Memory access device |
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 |