CN109313551B - 使用编译器插入的转换代码对冗余线程进行指纹识别的方法和设备 - Google Patents

使用编译器插入的转换代码对冗余线程进行指纹识别的方法和设备 Download PDF

Info

Publication number
CN109313551B
CN109313551B CN201780036459.9A CN201780036459A CN109313551B CN 109313551 B CN109313551 B CN 109313551B CN 201780036459 A CN201780036459 A CN 201780036459A CN 109313551 B CN109313551 B CN 109313551B
Authority
CN
China
Prior art keywords
thread
redundant
comparison
value
threads
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
CN201780036459.9A
Other languages
English (en)
Other versions
CN109313551A (zh
Inventor
丹尼尔·I·洛厄尔
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 CN109313551A publication Critical patent/CN109313551A/zh
Application granted granted Critical
Publication of CN109313551B publication Critical patent/CN109313551B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • 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/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)

Abstract

第一处理元件被配置为执行第一线程,并且一个或多个第二处理元件被配置为执行对所述第一线程来说是冗余的一个或多个第二线程。所述第一线程和所述一个或多个第二线程将根据自从对结果的先前编码值的先前比较以来,用于所述比较的事件触发器是否已经发生了可配置的次数,选择性地绕过对由所述第一线程和所述一个或多个第二线程执行的运算的结果的一个或多个比较。例如,基于当前运算和一个或多个先前运算的结果的散列(或编码)值来执行所述比较。

Description

使用编译器插入的转换代码对冗余线程进行指纹识别的方法 和设备
背景技术
相关技术的描述
诸如中央处理单元(CPU)、图形处理单元(GPU)和加速处理单元(APU)之类的处理单元实现多个计算单元(例如,处理器核)以同时或并行地处理多个指令。例如,GPU可以使用多个计算单元来实现,每个计算单元都包括用于同时或并行地执行指令流(通常称为“工作项”或“线程”)的多个处理元件。根据单指令多数据(SIMD)架构运算的计算单元使用不同的数据集来执行相同的指令。可以在诸如GPU之类的处理单元上同时或并行执行的线程数可以从数十个线程到数千个线程,工程师们渴望将这种能力用于超出通常在GPU上实现的二维(2-D)或三维(3-D)图形应用程序的应用程序。但是,通用应用程序需要比传统图形应用程序更高级别的容错能力,以避免应用程序错误或系统崩溃。
附图说明
通过参考附图,可以更好地理解本公开,并且其众多特征和优点对于本领域技术人员而言将显而易见。在不同附图中使用相同的附图标记表示相似或相同的项目。
图1是根据一些实施方案的加速处理装置的框图。
图2是根据一些实施方案的可以在图1所示的加速处理装置上执行的线程分组的层次结构的框图。
图3是根据一些实施方案的加速处理装置的框图,该加速处理装置基于自从对指纹的先前比较以来发生的事件触发器的数量来选择性地绕过对冗余线程的指纹的比较。
图4是示出根据一些实施方案的在程序代码编译期间由编译器插入的转换代码对程序代码的修改的图。
图5是根据一些实施方案的用于选择性地绕过或执行在冗余线程之间的共享和比较运算(share-and-compare operation)以检测错误的方法的流程图。
图6是根据一些实施方案的用于执行退出检查以确定在退出程序代码之前是否在冗余线程之间执行共享和比较运算的方法的流程图。
具体实施方式
冗余多线程(RMT)可用于通过在不同处理元件上执行两个或更多个冗余线程,然后比较冗余线程的结果来检测错误,从而提高处理单元的可靠性。通过检测由对相同数据执行相同指令的两个冗余线程产生的结果之间的差异,可指出至少一个冗余线程中的错误。由对相同数据执行相同指令的三个或更多个冗余线程产生的结果之间的相似性和差异可以用于检测错误并且可能纠正错误,例如,使用应用于三个或更多个结果的投票方案。在冗余线程之间传递数据以支持RMT错误检测或纠正的机制会产生显著的开销。例如,自旋锁机制可用于同步冗余线程之间的数据和消息传递。RMT系统的性能可能会因开销而显著降低,至少部分是因为典型的RMT系统会在每个存储指令(或其他事件触发器)之前比较冗余线程产生的结果,以避免存储可能包含错误的数据。
通过根据自从对结果的先前比较以来,用于比较的事件触发器(例如冗余线程执行存储指令)是否已经发生了可配置的次数(例如,不止一次),选择性地绕过对由冗余线程执行的运算结果的比较,可以减少软件实现的RMT错误检测或纠正机制的开销,而不会降低错误检测精度。通过将线程所产生的结果与先前编码的值或与线程相关联的初始值一起散列,以便为每个冗余线程产生编码值,可以减少与存储先前运算的结果以用于后续比较相关联的开销,而不会显著降低检测到错误的概率。编码值形成代表与多个事件触发器相关联的多个结果的每个线程的指纹。在冗余线程遇到多个事件触发器之后,共享和比较冗余线程的指纹值。如果冗余线程的指纹值不同,则检测到错误,这会在某些变型中触发错误恢复过程。冗余线程可以包括两个以上的冗余线程,在这种情况下,投票方案用于通过选择指纹的最常见值作为正确值来执行纠错。指纹的一些实施方案通过将待存储的结果和存储值的地址与指纹的先前值进行散列来计算。
在某些变型中,编译器用于将冗余线程执行的程序代码转换为指纹识别方案。转换代码使冗余线程选择性地绕过共享和比较运算,并将绕过的共享和比较运算的编码值合并为单个编码指纹。例如,当共享和比较运算的事件触发器是存储指令时,编译器插入代码以生成代码的查找表,所述代码用于散列将由冗余线程存储的结果和指纹的相应先前值。编译器还为每个冗余线程初始化计数器。计数器响应于冗余线程执行事件触发器而递增,并用于确定已经绕过共享和比较运算的次数。编译器还插入转换代码以执行散列,以检查是绕过还是执行冗余线程的指纹变量的值的比较,以共享和比较冗余线程的指纹变量的值,以及以确定是否在退出程序代码之前执行未完成的共享和比较运算。
图1是根据一些实施方案的加速处理装置100的框图。加速处理装置(APD)100可用于实现不同类型的处理单元,例如中央处理单元(CPU)、图形处理单元(GPU)、通用GPU(GPGPU)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)等。APD100可以被配置为实现一个或多个虚拟机,诸如模拟计算机系统的运算并提供用于执行应用程序的平台的低级虚拟机(LLVM)。APD 100还被配置为实现操作系统,并且在一些实施方案中,每个虚拟机都执行操作系统的单独实例。APD 100还被配置为执行内核,例如,以执行诸如图形管道运算之类的运算,包括像素运算、几何计算、图像渲染等。APD 100还可以执行非图形处理运算,诸如视频运算、物理模拟、计算流体动力学等。
APD 100包括多个计算单元101、102、103,本文统称为“计算单元101-103”。计算单元101-103可以被配置为作为同时执行相同内核的不同实例化的管道而运算。例如,计算单元101-103的一些变型是单指令多数据(SIMD)处理器核,其使用不同的数据并行地执行相同的指令。APD 100的一些实施方案实现更多或更少的计算单元101-103。
计算单元101包括处理元件105、106、107(本文统称为“处理元件105-107”)。处理元件105-107的一些实施方案被配置为执行算术和逻辑运算,所述算术和逻辑运算由被调度以由计算单元101中的处理元件105-107执行的指令指出。计算单元101还包括诸如本地数据存储(LDS)110之类的存储器。存储在LDS 110中的指令或数据对处理元件105-107可见,但对计算单元102、103上的实体不可见。因此,LDS 110使得能够实现计算单元101上的处理元件105-107之间的共享。可以使用动态随机存取存储器(DRAM)、嵌入式DRAM(eDRAM)、相变存储器(PCM)等来实现LDS 110。为了清楚起见,在图1中仅示出了在计算单元101上实现的处理元件105-107和LDS110。然而,计算单元102和103还包括相应的处理元件和相应的LDS。
每个处理元件105-107都执行内核的单独实例化。由处理元件105-107执行的内核的实例化可以称为工作项、任务或线程。在一些变型中,从LDS 110访问由线程执行的指令和由指令运算的数据。然后,由线程执行的运算的结果存储在LDS 110中。处理元件105-107还包括专用存储器115、116、117,本文统称为“存储器115-117”。每个处理元件105-107上的存储器115-117仅对对应的处理元件105-107可见。例如,存储器115仅对处理元件105可见,而对处理元件106、107不可见。可以使用动态随机存取存储器(DRAM)、嵌入式DRAM(eDRAM)、相变存储器(PCM)等来实现存储器115-117。
APD 100还包括全局数据存储(GDS)120,其是对由APD 100实现的所有计算单元101-103都可见的存储器。如本文所用,术语“可见”表示计算单元101-103能够访问GDS 120中的信息,例如,通过执行存储以将信息写入存储器或执行加载以从存储器读取信息。因此,GDS 120可用于促进由计算单元101-103上的处理元件执行的线程之间的共享。GDS 120的一些实施方案对于可以互连到APD 100的其他处理单元也是可见的。例如,GDS 120对于连接到APD 100的CPU(图1中未示出)也是可见的。可以使用动态随机存取存储器(DRAM)、嵌入式DRAM(eDRAM)、相变存储器(PCM)等来实现GDS120。
冗余线程由APD 100中的处理元件105-107执行。可以通过编码由线程执行的运算的结果来为每个冗余线程创建指纹。然后,可以比较由冗余线程执行的运算的结果或冗余线程的指纹,以检测(或在某些情况下纠正)在冗余线程的执行期间发生的错误。通常响应于诸如存储指令之类的触发事件来执行结果或相关指纹的比较,以便在将结果提交到存储器之前检测或纠正任何错误。APD 100的一些实施方案被配置为根据自从对结果的编码值的先前比较以来,用于比较的事件触发器是否已经发生了可配置的次数,来选择性地绕过冗余线程的指纹的比较。可配置的次数可以设置为大于或等于2的值。
图2是根据一些实施方案的线程分组的层次结构200的框图。层次结构200的一些变型表示由图1所示的APD 100同时或并行执行的线程。层次结构200包括内核205,该内核表示可以由诸如图1所示的处理元件105-107之类的处理元件执行的程序代码。内核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上执行。
APD 100实现冗余多线程(RMT)以检测并且在一些情况下纠正在对线程(例如线程215-217)进行处理期间发生的错误。通过实例化多于一个线程来创建冗余线程以使用相同的数据执行相同的指令。冗余线程在不同的处理器元件上执行。全局标识符、或组标识符和本地标识符的组合指出将由对应线程处理的数据。例如,线程的全局标识符可用于计算存储器地址并为线程做出控制决策。因此,可以通过将多于一个线程的全局标识符(或组标识符和本地标识符的组合)映射到单个全局标识符来创建冗余线程,以便两个线程对相同数据执行相同的内核代码。在美国专利No.9,274,904中公开了软件实现的RMT技术,该专利的全部内容通过引用并入本文。软件实现的RMT技术引起的开销可以通过根据自从对结果的编码值的先前比较以来,用于比较的事件触发器是否已经发生了可配置的次数,选择性地绕过冗余线程执行的运算结果的编码值(也可以称为指纹)的比较而减少。
图3是根据一些实施方案的APD 300的框图,该APD基于自从对指纹的先前比较以来发生的事件触发器的数量来选择性地绕过指纹的比较。APD 300用于实现图1所示的APD100的一些实施方案。APD 300被配置为执行内核305。线程310、315表示内核305的对相同数据执行相同指令的冗余实例化。在一些实施方案中,线程310、315由相同的标识符,例如相同的全局标识符、组标识符或本地标识符来标识。尽管图3中示出了两个线程310、315,但是,其他实施方案可以包括更多的冗余线程。
APD 300包括用于执行冗余线程的处理元件320、325。每个处理元件320、325都包括对应的专用存储器330、335。尽管图3中示出了两个处理元件320、325,但是,APD 300的一些实施方案也可以包括更多的处理元件。APD 300还包括对处理元件320、325两者都可见的存储器340。例如,如果处理元件320、325是由相同的计算单元实现的,则存储器340可以是本地数据存储,例如图1所示的LDS 110。又如,如果处理元件320、325是在不同的计算单元上实现的,则存储器340可以是全局数据存储,例如图1所示的GDS 120。
由APD 300实现的编译器在编译期间将转换代码插入到由内核305定义的程序代码中。当由线程310、315执行时,转换代码使线程310、315基于执行程序代码的某些部分或某些块的结果,选择性地绕过对由线程310、315生成的指纹的比较。线程310、315根据自从对指纹的先前比较以来用于比较的事件触发器是否已经发生了可配置的次数,选择性地绕过指纹比较。在一些实施方案中,编译器插入转换代码,该转换代码使得线程310、315中的一个或多个分配查找表345,该查找表包括用于对结果进行散列以生成指纹的代码值。例如,可以将256元素8位阵列分配给线程组本地共享存储器空间以形成查找表345。转换代码还可以使线程310、315中的一个或多个初始化查找表345中的代码值。例如,线程310、315中的一个或多个可以将256个8位唯一性高速缓存元素插入到形成查找表345的阵列中。一些实施方案使用不需要使用查找表345的其他算法(诸如基于异或运算的散列算法等)来替代性地执行散列。
插入到程序代码中的转换代码包括寄存器初始化代码,该寄存器初始化代码使线程310、315初始化相应的寄存器350、355以存储指纹的值。例如,线程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已经绕过对指纹值的一个或多个先前比较,则结果的当前值和地址被散列成指纹的当前值,该指纹的当前值是先前基于响应于绕过先前比较而散列成指纹的结果的先前值和地址而生成的。跳转检查包括在转换代码中,并用于将计数器360、365的值与可配置值进行比较,该可配置值指出是绕过比较还是执行比较。该可配置值设置为大于1的值。可配置值越大,就越多地减少由APD 300执行错误检测所用的共享和比较算法所引起的开销。
转换代码还包括共享和比较代码,该共享和比较代码使线程310、315共享相应寄存器350、355中的值,以便可以比较这些值以进行错误检测或纠正。例如,如果由线程310执行的跳转检查指出计数器360的值等于或大于可配置值,则线程310可以通过将指纹值从寄存器350复制到在存储器340中实现的共享缓冲器370来共享存储在寄存器350中的指纹。可以使用同步、自旋锁或其他技术来协调共享缓冲器370的使用。由线程315执行的跳转检查还指出计数器365的值等于或大于可配置值。然后,线程315可以访问与线程310相关联的指纹的共享值,并将共享指纹与存储在寄存器355中的指纹的值进行比较。如果两个值相等,则APD 300确定没有发生错误。如果两个值不同,则APD 300确定发生了错误,并且APD 300可以启动包括纠错的错误过程。
图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)散列例程,并分配256元素8位阵列以存储用于CRC散列例程的编码值。例如,用于分配和填充表的表生成代码410可以以伪代码如下编写:
Figure GDA0002390464140000101
编译器通过插入用于初始化计数器(例如图3所示的计数器360、365)的计数器初始化代码425,而进一步将程序代码400转换为修改的程序代码420。修改的程序代码420还包括在每个事件触发器402、404之后插入的散列码430、431。散列码430、431用于散列与事件触发器402、404相关联的结果,以形成表示事件触发器402、404之后的对应线程的指纹的编码值。散列码430、431的示例以伪代码如下编写:
Figure GDA0002390464140000102
插入跳转检查代码435、436以确定自从上一次与一个或多个相应的冗余线程共享和比较以来执行程序代码400的线程是否遇到了可配置数量的事件触发器402、404。插入共享和比较代码440、441以使执行程序代码400的线程执行其指纹值与由一个或多个冗余线程计算出的指纹值的共享和比较。仅当相应的跳转检查代码435、436指出线程自从线程的上一次共享和比较以来遇到可配置数量的事件触发器402、404时,才执行共享和比较代码440、441。
通过插入退出检查450来生成最终转换代码445,该退出检查用于确定在线程在退出块406退出程序代码400之前是否存在需要执行的任何未完成的共享和比较运算。
图5是根据一些实施方案的用于选择性地绕过或执行在冗余线程之间的共享和比较运算以检测错误的方法500的流程图。方法500在图1所示的APD 100或图3所示的APD 300的一些实施方案中实现。APD被配置为使用分配给在APD中实现的对应处理元件的多个线程来执行内核的多个实例化。APD中的编译器转换内核中的程序代码以生成转换代码,该转换代码使得执行内核的实例化的线程选择性地绕过或执行共享和比较运算。例如,编译器可以以图4所示的方式来转换程序代码。
在框505处,APD识别用于执行的线程并生成对所识别的线程来说是冗余的一个或多个线程。如本文所讨论的,可以使用相同的标识符(例如全局标识符、组标识符或本地标识符)来标识冗余线程。APD将冗余线程分配给不同的处理元件。在框510处,在不同的处理元件上执行冗余线程。冗余线程可以同时或并行地执行,并且冗余线程的一些实施方案是同步的。
在框515处,线程检测可能触发共享和比较运算以检测或纠正错误的事件触发器(诸如存储指令)。在框520处,线程响应于检测到事件触发器而递增对应的计数器。在框525处,线程将与事件触发器相关联的结果的散列值(诸如响应于存储指令而存储的数据)合并为对应的指纹。例如,在一些变型中,线程将结果的值散列成基于事件触发器的先前结果而生成的先前指纹。线程还可以将其他信息(例如存储由存储指令指出的数据的位置的地址)散列成指纹。
在判定框530处,线程将计数器中的值与阈值进行比较,该阈值指出在冗余线程之间执行共享和比较运算之前要绕过共享和比较运算的可配置次数。如果计数器小于或等于阈值,则方法500前进到框510并继续执行线程。如果计数器大于阈值,则线程在框535处执行共享和比较运算以确定冗余线程的指纹是否匹配。如果指纹不匹配,则APD可以确定发生了错误。如果在框535处执行的共享和比较运算期间检测到错误,则APD可以执行错误报告或恢复。在框540处,线程重置其对应计数器的值。然后,方法500前进到框510并继续执行线程。
图6是根据一些实施方案的用于执行退出检查以确定在退出程序代码之前是否在冗余线程之间执行共享和比较运算的方法600的流程图。方法600在图1所示的APD 100或图3所示的APD 300的一些实施方案中实现。APD被配置为使用分配给在APD中实现的对应处理元件的多个线程来执行内核的多个实例化。APD中的编译器转换内核中的程序代码以插入退出检查。例如,编译器可以以图4所示的方式转换程序代码400,以插入退出检查450。
在框605处,在不同的处理元件上执行冗余线程。冗余线程可以同时或并行地执行,并且冗余线程的一些实施方案是同步的。在框610处,线程检测退出条件。在判定框615,线程响应于检测到退出条件而检查其对应计数器的值。如果计数器的值大于零(或某个其他默认值),表示自从在冗余线程之间执行上一次共享和比较运算后至少绕过了一次共享和比较运算,则该方法前进到框620。在框620处,线程基于其指纹的当前值执行共享和比较。然后,方法600前进到框625,并且线程执行退出代码。如果计数器的值等于零(或某个其他默认值),表示不存在未完成的共享和比较运算,则方法600直接前进到块625,并且线程执行退出代码。
在一些实施方案中,上述技术的某些方面可以由执行软件的处理系统的一个或多个处理器实现。软件包括存储或以其他方式有形地体现在非暂时性计算机可读存储介质上的一组或多组可执行指令。软件可以包括指令和某些数据,当由一个或多个处理器执行时,这些指令和数据操纵一个或多个处理器以执行上述技术的一个或多个方面。非暂时性计算机可读存储介质可包括例如磁盘或光盘存储装置、诸如闪存之类的固态存储装置、高速缓存、随机存取存储器(RAM)或者一个或多个其他非易失性存储装置等等。存储在非暂时性计算机可读存储介质上的可执行指令可以是源代码、汇编语言代码、目标代码或由一个或多个处理器解释或以其他方式可执行的其他指令格式。
注意,并非需要在上文一般描述中描述的所有活动或元素,可能不需要特定活动或装置的一部分,并且可以执行一个或多个另外的活动,或者除了所描述的那些元素之外还包括其他元素。此外,活动的列出顺序不一定是它们的执行顺序。另外,已参考具体实施方案描述了某些概念。然而,本领域普通技术人员认识到,在不脱离如下面的权利要求所阐述的本公开的范围的情况下,可以进行各种修改和改变。因此,说明书和附图应被视为说明性而非限制性的含义,并且所有这些修改旨在包括在本公开的范围内。
上面已经针对具体实施方案描述了益处、其他优点和问题的解决方案。然而,这些益处、优点、问题的解决方案以及可能会导致任何益处、优点或解决方案发生或变得更加明显的任何特征不应被解释为任何或所有权利要求的关键、必需或必要特征。此外,上文公开的特定实施方案仅是说明性的,因为所公开的主题可以以对受益于本文教导的本领域技术人员而言显而易见的不同但等效的方式进行修改和实践。除了在下面的权利要求中描述的之外,对于本文所示的构造或设计的细节没有限制。因此显然的是,可以改变或修改上文公开的特定实施方案,并且所有这些变化都被认为在所公开的主题的范围内。因此,本文寻求的保护如下面的权利要求中所述。

Claims (20)

1.一种加速处理方法,包括:
在相应的处理元件上执行冗余线程;
通过将由所述冗余线程执行的运算的结果与先前编码值和初始值中的至少一个进行散列来生成所述结果的编码值,其中响应于所述冗余线程执行用于比较所述结果的事件触发器来生成所述编码值;以及
根据自从对所述结果的先前编码值的先前比较以来,所述事件触发器是否已经发生了可配置的次数,选择性地绕过对所述编码值的至少一次比较。
2.如权利要求1所述的方法,其中所述可配置的次数大于1。
3.如权利要求1所述的方法,其中所述事件触发器是由所述冗余线程执行以将所述结果存储到存储器中的存储指令。
4.如权利要求1所述的方法,其中在所述相应的处理元件上执行所述冗余线程包括在所述相应的处理元件上同时执行所述冗余线程。
5.如权利要求1所述的方法,还包括:
通过在编译期间插入代码来修改将由所述冗余线程执行的程序代码,以生成用于对所述结果进行散列的代码值的查找表。
6.如权利要求5所述的方法,其中在编译期间修改所述程序代码还包括为每个所述冗余线程初始化计数器,其中每个计数器都响应于所述冗余线程执行所述事件触发器而递增,并且其中将所述计数器的值与所述可配置的次数进行比较,以确定是否选择性地绕过所述至少一次比较。
7.如权利要求6所述的方法,其中在编译期间修改所述程序代码还包括插入代码以对所述结果进行散列以生成所述编码值,以将所述计数器的值与所述可配置的次数进行比较以确定是否选择性地绕过所述至少一次比较,以及以响应于确定用于所述比较的所述事件触发器已经发生了所述可配置的次数而在所述冗余线程之间共享和比较所述编码值。
8.如权利要求7所述的方法,其中在编译期间修改所述程序代码还包括插入代码以确定在所述冗余线程退出所述程序代码之前是否要执行未完成的共享和比较运算。
9.一种加速处理设备,包括:
用于执行第一线程的第一处理元件;以及
用于执行对所述第一线程来说是冗余的至少一个第二线程的至少一个第二处理元件,其中所述第一处理元件和所述至少一个第二处理元件通过将由所述第一线程和所述至少一个第二线程执行的运算的结果与先前编码值和初始值中的至少一个进行散列来编码所述结果的值,其中响应于所述第一线程和所述至少一个第二线程执行用于比较所述结果的事件触发器来生成所述编码值,以及其中所述第一处理元件和所述至少一个第二处理元件将根据自从对所述结果的先前编码值的先前比较以来,所述事件触发器是否已经发生了可配置的次数,选择性地绕过对所述编码值的至少一次比较。
10.如权利要求9所述的设备,其中所述可配置的次数大于1。
11.如权利要求9所述的设备,其中所述事件触发器是由所述冗余线程执行以存储所述结果的存储指令。
12.如权利要求9所述的设备,其中分别通过所述第一处理元件和所述至少一个第二处理元件同时执行所述第一线程和所述至少一个第二线程。
13.如权利要求9所述的设备,还包括:
包含所述第一处理元件和所述至少一个第二处理元件的多个处理元件,其中所述多个处理元件实现编译器,所述编译器被配置为通过在编译期间插入代码来修改将由所述第一线程和所述至少一个第二线程执行的程序代码,以生成代码值的查找表,所述代码值用于对所述结果进行散列以生成所述编码值。
14.如权利要求13所述的设备,还包括:
存储器,其被配置为实现所述第一线程和所述至少一个第二线程的计数器,其中所述编译器被配置为初始化所述计数器,其中所述第一线程或所述至少一个第二线程响应于执行所述事件触发器而递增相应的计数器,并且其中将所述计数器的值与所述可配置的次数进行比较,以确定是否选择性地绕过所述至少一次比较。
15.如权利要求14所述的设备,其中所述编译器被配置为插入代码以对所述结果进行散列,以将所述计数器的值与所述可配置的次数进行比较以确定是否选择性地绕过所述至少一次比较,以及以响应于确定用于所述比较的所述事件触发器已经发生了所述可配置的次数而在所述第一线程与所述至少一个第二线程之间共享和比较所述编码值。
16.如权利要求15所述的设备,其中所述编译器被配置为插入代码以确定在所述第一线程和所述至少一个第二线程退出所述程序代码之前是否要执行未完成的共享和比较运算。
17.一种非暂时性计算机可读介质,其包含一组可执行指令,所述一组可执行指令用于操纵至少一个处理器元件以:
在相应的处理元件上执行冗余线程;
通过将由所述冗余线程执行的运算的结果与先前编码值和初始值中的至少一个进行散列来生成所述结果的编码值,其中响应于所述冗余线程执行用于比较所述结果的事件触发器来生成所述编码值;以及
根据自从对所述结果的先前编码值的先前比较以来,所述事件触发器是否已经发生了可配置的次数,选择性地绕过对所述编码值的至少一次比较。
18.如权利要求17所述的非暂时性计算机可读介质,其中所述至少一个处理器元件用于为所述冗余线程中的每一个初始化计数器,其中每个计数器响应于所述冗余线程执行所述事件触发器而递增,以及其中将所述计数器的值与所述可配置次数进行比较,以确定是否选择性地绕过所述至少一个比较。
19.如权利要求18所述的非暂时性计算机可读介质,其中所述至少一个处理器元件用于插入代码以将所述结果与先前编码值和初始值中的至少一个进行散列以生成编码值,以将所述计数器的值与所述可配置的次数进行比较,以确定是否选择性地绕过所述至少一个比较,以及以响应于确定用于所述比较的所述事件触发器已经发生了所述可配置的次数而在所述冗余线程之间共享和比较所述编码值。
20.如权利要求19所述的非暂时性计算机可读介质,其中所述至少一个处理器元件用于插入代码以确定在所述冗余线程退出程序代码之前是否要执行未完成的共享和比较运算。
CN201780036459.9A 2016-06-21 2017-06-21 使用编译器插入的转换代码对冗余线程进行指纹识别的方法和设备 Active CN109313551B (zh)

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
CN109313551A CN109313551A (zh) 2019-02-05
CN109313551B true CN109313551B (zh) 2021-02-23

Family

ID=60659566

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201780036459.9A Active CN109313551B (zh) 2016-06-21 2017-06-21 使用编译器插入的转换代码对冗余线程进行指纹识别的方法和设备

Country Status (6)

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

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
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 (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

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103699458A (zh) * 2013-06-28 2014-04-02 中国科学院计算技术研究所 一种降低动态冗余多线程性能和功耗开销的方法及系统

Family Cites Families (22)

* Cited by examiner, † Cited by third party
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 (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
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

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103699458A (zh) * 2013-06-28 2014-04-02 中国科学院计算技术研究所 一种降低动态冗余多线程性能和功耗开销的方法及系统

Also Published As

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

Similar Documents

Publication Publication Date Title
CN109313551B (zh) 使用编译器插入的转换代码对冗余线程进行指纹识别的方法和设备
US11494265B2 (en) Securing against errors in an error correcting code (ECC) implemented in an automotive system
US9524163B2 (en) Computer processor employing hardware-based pointer processing
JP7433029B2 (ja) 作業負荷の繰り返し冗長化
US11409597B2 (en) System and methods for hardware-software cooperative pipeline error detection
US20200293425A1 (en) Determining diagnostic coverage for memory using redundant execution
US20190311251A1 (en) Instruction generation process multiplexing method and device
CN109582484B (zh) 防范在汽车系统中实现的纠错码(ecc)中的错误
US20190146817A1 (en) Binding constants at runtime for improved resource utilization
EP3757860B1 (en) Providing improved efficiency for metadata usages
TW201732592A (zh) 用於多位元錯誤偵測和校正之裝置和方法
US10817289B2 (en) Optimizing software-directed instruction replication for GPU error detection
CN103988174A (zh) 无需额外寄存器执行寄存器重命名的数据处理设备和方法
CN107908954B (zh) 一种基于地址压缩技术的动态检测gpu上内存溢出的方法
US20220269675A1 (en) Hash-based data structure
US20170075817A1 (en) Memory corruption prevention system
US20100011183A1 (en) Method and device for establishing an initial state for a computer system having at least two execution units by marking registers
US20180150405A1 (en) Data type management
US20130166887A1 (en) Data processing apparatus and data processing method
JP7489954B2 (ja) 処理システム内の処理タスク
US11630667B2 (en) Dedicated vector sub-processor system
US20220222183A1 (en) Tagless implicit integrity with multi-perspective pattern search
US20200159922A1 (en) Method, Device, and System for using Variants of Semantically Equivalent Computer Source Code to Protect Against Cyberattacks
CN116670641A (zh) 分裂随机数生成器

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant