CN105117369B - 一种基于异构平台的多种并行错误检测系统 - Google Patents
一种基于异构平台的多种并行错误检测系统 Download PDFInfo
- Publication number
- CN105117369B CN105117369B CN201510468604.3A CN201510468604A CN105117369B CN 105117369 B CN105117369 B CN 105117369B CN 201510468604 A CN201510468604 A CN 201510468604A CN 105117369 B CN105117369 B CN 105117369B
- Authority
- CN
- China
- Prior art keywords
- memory access
- detection
- processing unit
- graphics processing
- address
- 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.)
- Expired - Fee Related
Links
Landscapes
- Multi Processors (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明属于并行处理器技术领域,具体涉及一种基于异构处理平台的多种并行错误检测系统。本发明主要利用异构平台上通用图形处理器强大的并行计算能力与可编程性,来同时检测主流的多种并行错误,包括数据竞争,原子性违背和顺序违背。设计复杂度方面,本发明只需要较平滑的硬件复杂度,并且不需要改变片上关键路径(如高速缓存或者缓存一致性)的逻辑,只添加访存收集模块和访存预处理模块,分别来收集可能导致并行错误的访存指令和提供错误检测的相关信息,错误检测的算法则利用通用图形处理器来实现高度并行。本发明提供的硬件架构能够在程序运行过程中发现并行错误,并且只带来很小的运行开销。
Description
技术领域
本发明属于并行处理器技术领域,具体涉及一种基于异构平台(通用处理器和图形处理器混合架构)处理能力的多种并行错误检测系统。
背景技术
随着计算机科技的发展,多核处理器愈发普遍。日常生活中,台式机、笔记本电脑、平板电脑,甚至是手机,都已经配备了多核处理器。单一芯片上处理器核数的增多,带来了潜在的计算能力。为了充分利用多核设备上的计算资源,并行程序得到了普遍的应用。然而,受困于并行程序错误,编写正确的并行程序并非易事。一方面,程序员习惯于串行化的思考方式,导致了编写并行程序时容易产生错误;另一方面,并行程序的不确定性导致了调试过程中的并行程序空间难以重现,增加了调试的难度。难以调试的并行程序错误对软件的可靠性构成了严重的威胁,甚至造成了许多严重的事故和巨大的财产损失。例如,2003年美国东北地区的大面积停电事故,影响了超过5000万人。又如,2012年脸谱公司的IPO故障事故,造成了数亿美元的经济损失。
此外,并行错误的多样性加剧了检测的复杂性。目前主流的并行错误有数据竞争、原子性违背和顺序违背等多种类型。而且,较之串行错误,由于并行程序的不确定性,往往使得错误场景难以重现,导致了并行错误更加难以定位与检测。为了检测并行错误,学术界与工业界提出了许多解决方案与工具,它们可以被分为两类:软件检测工具与硬件检测架构。软件检测工具一般通过程序插桩来获取程序运行时状态,而后对该状态进行检测分析。这类工具往往不得不承受插桩带来的巨大性能负载。为了提高性能,一些研究使用了采样技术,即仅仅检测整个程序的一部分,但这种方式通常会损失检测精度。另一方面,硬件架构通过特定硬件收集程序运行状态,从而避免了插桩带来的性能负载。然而,硬件架构往往仅针对于某种特定类型的并行错误,从而限制了它们的灵活性与通用性。之前的工作指出,同一个并行程序中往往会隐藏着多于一种的并行错误,即便如MySQL这类成熟的商用软件也无法幸免。当程序员进行调试的时候,他们往往并不清楚代码中到底包含的是哪一种并行错误,一种种尝试不同类型的错误检测工具显得非常笨重而不灵活。因此,目前该领域急切需要一种能够同时检测多种并行错误的硬件架构。
如今,通用处理器与图形处理器结合的体系架构愈发流行,这为并行错误检测提供了崭新的机会。一方面,通用图形处理器包含了大量的通用计算单元。而且,在程序员进行调试时,这些计算单元往往是空闲的。另一方面,并行错误虽然表现形式不同,但本质上都是由于共享资源的使用不合理引起的。因此,检测所需的程序状态的关注点都在于访存记录(特别是共享的访存记录),使得检测流程在前端收集方面存在一定的相似性。再者,检测流程的后端,即并行错误的检测算法,拥有良好的计算并行度与数据并行度。因此,错误检测算法较为适合部署到通用图形处理器上进行,以利用通用图形处理器上丰富的并行计算资源。而且,通用图形处理器具有可编程性,也可以较为灵活地适用于不同类型的错误检测算法。因此,本发明致力于利用异构平台处理器,来设计一种针对多种并行错误检测的体系架构。
发明内容
本发明的目的在于对目前主流的多种并行错误提供一种基于中央处理器-通用图形处理器的检测系统。
本发明提出的基于中央处理器-通用图形处理器的多种并行错误检测系统,是对当前主流的异构平台体系架构的一种扩展,使之能够支持多种并行错误的检测。具体是在当前主流的异构平台体系架构基础上添加两个简易硬件模块(如图1所示):访存收集模块和访存预处理模块,从而建立整个并行错误检测的体系;其中,所述访存收集模块在检测流程的上游,位于每个处理器内,负责访存收集;所述访存预处理模块接收访存收集模块收集的访存信息,经预处理后将它们记录成为历史信息,然后发送至通用图形处理器进行错误检测;通用图形处理器在检测流程下游,接收访存预处理模块发送来的访存信息并进行相应算法的检测。
本发明中,访存收集模块位于每个中央处理器核内,如图2所示。它从重排序缓冲区中收集标识的操作或是访存指令。每条指令都会通过旁路发送到访存收集模块。访存收集模块判断该指令是否是标识的操作或者访存指令,如果是,则将它保存至访存收集模块的访存收集缓冲区。每条收集的访存包含以下三个部分:(1)访存的程序计数器;(2)访存地址;(3)访存类型,如读取,存储或者是顺序违背中的操作类型(文件打开,关闭,读取等等)。当访存收集模块的收集缓冲区满,访存收集模块便将收集缓冲区内的访存通过片上网络发送至访存预处理模块。
本发明中,访存预处理模块位于片上,中央处理器与通用图形处理器之间,与片上总线互联,如图3所示。由于检测数据竞争和顺序违背所使用的happens-before算法需要访存的时间戳信息、检测原子性违背的ColorSafe算法需要颜色签名赋值信息;同时,这些检测算法都需要维护历史访存,以供检测时比较分析。因此,访存预处理模块的主要作用在于为错误检测生成必要的信息。首先,汇总访存收集模块收集的访存;而后,进行必要的预处理(如时间戳赋值,颜色签名赋值等,历史信息维护);最后,将访存发送至通用图形处理器进行检测。由于通用图形处理器在检测时需要访问位于访存预处理模块的历史信息,较之分布式的访存预处理模块设计,集中式的访存预处理模块设计更利于通用图形处理器读取时的带宽与速度优化。因此,本发明采用了集中式的访存预处理模块设计。
本发明中,所述通用图形处理器上的并行错误检测:当访存由访存预处理模块发送至通用图形处理器后,通用图形处理器将根据所需要检测的错误类型,应用相应的检测算法进行检测。每条待检测访存都被发送至通用图形处理器端,通用图形处理器端将待检测访存的地址与历史信息中其它核(线程)的访存进行比较,以此确定是否存在并行错误。由于检测过程有着良好的并行度,不论是哪种错误的检测,本发明都可以将每条访存的检测处理器运行检测过程中不需要额外的同步操作,可以最大程度地并行化。
本发明在上述基本体系架构设计之外,为了进一步提高本发明的性能,本发明还引入了三种优化策略。一、地址过滤,过滤不可能引发并行错误的私有地址,旨在提高处理效率;二、避免共享内存被替换(即避免历史记录中的共享访存被替换),旨在提高检测精确度;三、判断并标识“最后写”访存,利用happens-before算法的传递性性质,减少检测负载,旨在提高处理效率。
所述地址过滤,是使用计数布隆过滤器,通过该计数布隆过滤器,在访存被发送到通用图形处理器前,本发明首先将它与其它核(线程)的布隆过滤器进行比较,判断该访存是否在其它核(线程)中出现。如果是,则该访存是共享访存,需要进行后续的比较处理;否则,该访存是私有访存,不会引发数据竞争。由于大部分的访存都是私有的,所以都会被过滤掉。因此,通过该过滤器,通用图形处理器上大部分的计算负载可以被避免。
所述避免共享内存被替换,其措施是在历史访存缓冲区中为每个记录添加了一个共享标识位(因为并行错误仅关注共享访存),以此表明该访存记录是否是共享的。当历史缓冲区发生替换时,优先替换非共享的访存记录。凭借该策略,本发明可以保留更多有用的共享访存记录。
所述“最后写”策略,一方面,对于同一线程的所有访存,后续的访存必然发生在先前访存之后,因此,对于同一地址,本发明使用后续访存替换先前访存;另一方面,通过通用图形处理器的反馈happens-before关系,识别线程间同一地址访存的“最后写”,使用后续访存替换先前访存。
本发明主要利用异构平台上通用图形处理器强大的并行计算能力与可编程性,来同时检测主流的多种并行错误,包括数据竞争,原子性违背和顺序违背。设计复杂度方面,本发明只需要较平滑的硬件复杂度,并且不需要改变片上关键路径(如高速缓存或者缓存一致性)的逻辑,只添加访存收集模块和访存预处理模块,分别来收集可能导致并行错误的访存指令和提供错误检测的相关信息,错误检测的算法则利用通用图形处理器来实现高度并行。本发明提供的硬件架构能够在程序运行过程中发现并行错误,并且只带来很小的运行开销。
附图说明
图1、硬件扩展概览。
图2、访存收集模块概览。
图3、访存预处理模块概览。
图4、哈希表历史记录。
图5、颜色签名历史记录。
图6、检测算法在通用图形处理器上的映射。
具体实施方式
下面将结合附图说明及算法伪代码,对本发明中的技术进行详细描述。本发明主要利用了异构平台中图形处理器强大的并行计算能力与可编程性。在通用处理器端收集访存记录,通过片上互联总线将记录发送至图形处理器端,最后在图形处理器端进行错误检测。在此基础上,本发明利用:(1)利用布隆过滤器过滤安全访存记录;(2)避免共享访存被替换;(3)“最后写”识别简化检测工作,这三种优化策略提升检测速度与检测精确性。
一、多种并行错误检测所需的异构平台的实现
首先,为了提高普适性,本发明关注于目前主流的并行错误:数据竞争、原子性违背和顺序违背,三者超过了目前所有非死锁并行错误的97%。
在此基础上,为了洞察各个检测算法间的共性与如何将算法部署至通用图形处理器,本发明首先对这三种并行错误与它们主流检测算法(happens-before算法和ColorSafe算法)进行总结分析。
分析发现这三种错误有着相似的诱因:由于共享变量或者资源的不合理的访问引发。因此,检测并行错误所需的基本信息是一致的。由附录所示,上述算法可以被分为三个步骤:(1)访存收集;(2)访存预处理;(3)错误检测。在访存收集阶段,内存访问及相关操作将随着程序执行被收集。而后,在访存预处理阶段,访存将被赋予相关的信息(如访问点的时间戳,颜色等),同时,维护访存的历史信息,供后续检测。最后,在检测阶段,针对不同的错误类型,运行不同的检测算法(如happens-before算法或者ColorSafe算法)。
由于在happens-before算法检测中,每条访存都与其它所有线程的访存进行一一比较,其中的计算复杂度会随着线程数的增长而增长。这意味着若是使用中央处理器进行错误检测,当线程数急剧增长时,将导致巨大的性能负载。这也是之前的硬件解决方案一般仅仅基于小规模的线程数目(如4个或者8个线程)。此外,相比happens-before算法检测,由于ColorSafe算法将所有其它线程的历史统一记录为“远程签名”,不进行一一比较,因此不存在这方面的扩展性和伸缩性问题。
同时本发明对当前主流的异构平台进行了扩展,使之能够支持多种并行错误的检测。本发明的总体架构如图1所示。具体来说,本发明的扩展包括:访存收集模块和访存预处理模块。访存收集模块位于每个中央处理器核内,负责收集运行时的访存信息,并将它们发送到访存预处理模块,对应于附录算法的访存收集部分。访存预处理模块位于片上,中央处理器与通用图形处理器之间,与片上总线互联;访存预处理模块接收访存收集模块发来的信息,预处理后将它们记录至进历史信息,而后发送至通用图形处理器进行错误检测,对应于附录算法3的访存预处理部分。
访存收集模块
由于并行错误由共享访存的不合理的使用引起,因此,要检测并行错误,必须收集程序运行时的访存信息。访存收集模块的作用就在于此。访存收集模块是本错误检测架构的上游,位于每个中央处理器核内,负责收集检测所需的运行时信息,并将它们发送到下游访存预处理处理模块,如图2所示。访存收集模块收集的检测必要的信息包括包含以下三个部分:(1)访存的程序计数器;(2)访存地址;(3)访存类型,如读取,存储或者是顺序违背中的操作类型(文件打开,关闭,读取等等)。当访存收集模块的收集缓冲区满,访存收集模块便将收集缓冲区内的访存通过片上网络发送至访存预处理模块。为了在发送时间内不阻塞访存收集模块的收集,本发明采用了双缓冲区轮转收集的策略。当其中当前收集缓冲区处于发送状态时,访存收集模块便使用另一个收集缓冲区继续访存收集。只有两个收集缓冲区都处于发送状态时,访存收集模块才会通知中央处理器阻塞,以等待发送结束继续收集访存。
访存预处理模块
访存预处理模块对应于附录中并行错误检测算法的访存预处理部分。如附录算法讨论,检测数据竞争和顺序违背所使用的happens-before算法需要访存的时间戳信息、检测原子性违背的ColorSafe算法需要颜色签名赋值信息;同时,这些检测算法都需要维护历史访存,以供检测时比较分析。因此,访存预处理模块的主要作用在于为错误检测生成必要的信息。访存预处理模块的主要流程为:首先,汇总访存收集模块收集的访存;而后,进行必要的预处理(如时间戳赋值,颜色签名赋值等,历史信息维护);最后,将访存发送至通用图形处理器进行检测,如图3所示。
根据图3所示,本发明通过历史信息缓冲区存储程序的历史运行状态。由于支持多种错误的检测,历史信息缓冲区也根据错误类型分类:一个是用于数据竞争与顺序违背检测的访存缓冲区,另一个是用于原子性违背检测的颜色签名缓冲区。
所述访存缓冲区方面,它按照访存所属的线程号进行分组,以便比较时避开同线程的访存记录。然后,为了迅速确定是否存在同地址的历史访存,每组同线程的访存都根据其地址进行哈希(如图4所示)。访存缓冲区组织成一个哈希表,哈希函数是基于地址设计的,哈希表项为一个先进先出队列,用于存储哈希至同一表项的访存。通过该设计,检测时便可以迅速确定相同地址的存在与否。最后,因为读操作间是不会产生数据竞争的,因此,为了迅速过滤掉不需要检测的“读取-读取”检测,每个哈希表项按照访存是“读取”还是“写入”组织成两个不同的先进先出队列。整个检测的流程如下:通用图形处理器对当前的访存的地址进行哈希,获取其所属的哈希表项。根据该表项到其它线程的访存缓冲区中遍历先进先出队列,以判断是否存在相同地址的访问。若当前访存为“读取”操作,则仅需要遍历“写入”队列;若当前访存为“写入”操作,则需要遍历“读取”和“写入”两个队列。完成遍历后,若存在相同地址,则比较时间戳判定是否存在数据竞争。
所述颜色签名缓冲区方面,访存预处理模块按照如下流程维护颜色签名:首先,访存预处理模块在接收访存时已经从颜色快表中获取了该访存所属的颜色。然后,访存预处理模块对当前接收的访存数计数,每一定数量(400条)的访存数将划分为一个执行段。该段中的所有访存,将根据它们的类型(本地读,本地写,异地读,异地写),将颜色号通过布隆过滤器被压缩到相应的(本地读,本地写,异地读,异地写)颜色签名。每四个颜色签名形成一个历史信息块,代表了当前执行段的颜色访问情况。因此,整个颜色签名缓冲区的设计便如图5所示。与访存缓冲区相似,访存预处理模块为每个核(线程),维护它的颜色签名缓冲区。
通用图形处理器上的并行错误检测
当访存由访存预处理模块发送至通用图形处理器后,通用图形处理器根据所需要检测的错误类型,应用相应的检测算法进行检测。接下来,将描述错误检测算法的具体流程。对于数据竞争和顺序违背错误,其检测算法都是基于happens-before算法,因此将一起叙述;对于顺序违背错误,将描述其ColorSafe算法的检测流程。此后,将描述检测算法流程在通用图形处理器上的并行映射。最后,将描述三种错误同时检测时的算法流程。
对于数据竞争的检测:每条待检测访存都被发送至图形处理器端,图形处理器端将待检测访存的地址与时间戳与历史信息中其它核(线程)的访存进行比较,以此确定是否存在数据竞争。以下是该过程的详细说明:
首先,每条访存都在其它核(线程)的访存缓冲区中进行比较检测。根据地址进行哈希,以便快速定位所需遍历队列。
然后,完成哈希定位后,如果当前待检测访存为“读取”,则仅需要遍历“写入”队列;如果为“写入”,则需要遍历“读取”和“写入”两个队列。如果不存在相同地址,则不存在数据竞争,检测结束。否则进入下一步。
最后,对于同地址的历史访存比较时间戳,若二者的时间戳存在先后关系,则证明二者间存在同步操作,没有数据竞争;若不存在先后关系,则报告一个数据竞争。
对于顺序违背的检测:访存预处理模块将所有待检测操作传送至通用图形处理器端,通用图形处理器端同样对照访存缓冲区进行时间戳先后关系的检测,具体流程与数据竞争检测相同。唯一区别在于,确定存在先后关系后,通用图形处理器将进一步确定该先后关系是否与预先设定的合理顺序相同,若相同,则为合理顺序;否则,则报告错误(如确定出“文件读取”发生在“文件打开”之前,虽然二者存在先后关系,但其顺序不合理,所以报告出一个顺序违背)。
对于原子性违背的检测:访存预处理模块将所有标识颜色的访存发送至通用图形处理器端。通用图形处理器端按如下步骤进行错误检测。
首先,每条待检测访存只与自身核(线程)的颜色签名缓冲区记录进行比较。
然后,由当前颜色签名缓冲区中最早的本地读/写的颜色签名开始,选取所有可能发生在每条待检测访存与本地读、写的颜色签名间的异地读/写颜色签名。
最后,通用图形处理器将本地读/写的颜色签名,每条待检测访存和异地读/写颜色签名三者的颜色签名做交集,以此来判断原子性是否被远端线程的读写都打破。若交集为空,则证明不存在对相同原子区块的访问,不存在原子性违背(访问的区域互不相交);否则,则报告原子性违背(有对同一区域的本地两次先后访问被远端访问插入)。
而且,以上的三者取交集操作将从本地最早的记录遍历至最晚记录,以覆盖所有可能存在的远端访问插入(即原子性违背)。
通用图形处理器上的并行映射
由于检测过程有着良好的并行度,不论是哪种错误的检测,本发明都可以将每条访存的检测部署到一个通用图形处理器线程上,各条访存的检测过程相互独立,因此通用图形处理器运行检测过程中不需要额外的同步操作,可以最大程度地并行化。具体过程如下:
在通用图形处理器端,所有需要比较的访存信息都被预分成块。不同块的访存将被部署到不同的多流处理器上运行(如图6(a)所示)。同一块中,每一条访存都部署到一个通用图形处理器线程上,在一个多流处理器上执行(如图6(b)所示)。由于32个通用图形处理器线程可以形成一个线程集(warp),同一个多流处理器可以并发运行多个线程集。因此,通用图形处理器可以通过多个线程集的切换来掩盖访问全局内存造成的延迟。
多种并行错误的同时检测:本发明实现了通用图形处理器版本的三种错误的独立检测算法。由于这仅是软件层面上的指令流,本发明可以灵活地在通用图形处理器上根据不同错误的检测需求切换不同的检测算法。再者,本发明也可以对于同一条访存同时应用三种检测算法进行检测。为了支持该特性,本发明扩展了访存的数据结构,使用额外的一个标志域来标识当前访存需要何种类型的错误检测。同时,本发明将三种错误的检测算法重写成一个完整的检测流程,以此方式避免了通用图形处理器在开启同时检测时在各种不同的检测算法(通用图形处理器上称为运行内核)来回切换,影响检测效率。完整的检测流程组织如下:happens-before算法首先被调用,来检测数据竞争和顺序违背;而后,ColorSafe算法被调用,用来检测原子性违背。
二、旨在提高检测效率与精确性的三项优化策略
在基础设计之外,本发明还采用了三项优化策略,以此来提高检测的效率与精确性。首先,本发明采用了布隆过滤器,通过它来识别并过滤掉私有地址,提高检测效率;然后,本发明通过通用图形处理器检测反馈标识共享访存,尽可能地降低共享访存被替换的可能性,以此提高检测精确性;最后,本发明利用happens-before关系的传递性,通过只比较“最后写”的策略,提高检测效率。
使用计数布隆过滤器的优化策略:本发明通过使用计数歩隆过滤器,利用多个哈希函数将地址数据映射成多个位向量,从而将存在性判断时涉及的昂贵的集合操作转换成了快速的位操作。通过该计数歩隆过滤器,在访存被发送到通用图形处理器前,本发明首先将它与其它核(线程)的歩隆过滤器进行比较,判断该访存是否在其它核(线程)中出现。如果是,则该访存是共享访存,需要进行后续的比较处理;否则,该访存是私有访存,不会引发数据竞争。由于大部分的访存都是私有的,所以都会被过滤掉。因此,通过该过滤器,通用图形处理器上大部分的计算负载可以被避免。
避免共享内存被替换的优化策略:并行错误检测中,只有共享访存才是有效的。因此,为了尽可能多地保存共享访存,本发明在历史访存缓冲区中为每个记录添加了一个共享标识位,以此表明该访存记录是否是共享的。当通用图形处理器完成一些访存的检测后,通用图形处理器会将共享访存反馈给访存预处理模块。而后,访存预处理模块根据反馈标识出共享的访存记录。当历史缓冲区发生替换时,会优先替换非共享的访存记录。凭借该策略,本发明可以保留更多有用的共享访存记录。
“最后写”的优化策略:共享的访存变量往往存在于多个线程之中。若这些变量间存在happens-before关系,则不需要与所有线程的访存进行比较,可以仅仅通过比较“最后写”来判断是否存在数据竞争。举例说明如下,当x和y是对地址A的访存操作,其中x为读操作,y为写操作,x发生在y之前(x -> y)。因此,y为地址A的“最后写”操作。这时候,发生了z,一个新的对地址A的访存操作。可以通过happens-before关系的传递性得出结论:若有y发生在z之前(y -> z),则必然有x发生在z之前(x -> z),则该情况不存在数据竞争;若y与z间不存在happens-before关系,则为一个数据竞争。因此,“最后写”的识别与检测可以有效应用于数据竞争检测中。本发明通过该手段从两个方面做出优化:一个方面是对于同一线程的所有访存,后续的访存必然发生在先前访存之后,因此,对于同一地址,本发明使用后续访存替换先前访存。另一方面是,本发明通过通用图形处理器的反馈happens-before关系。通过解析该happens-before关系,本发明能够线程间同一地址访存的“最后写”,并清理其它不是“最后写”的访存记录。因此,通过该策略,本发明从检测精确性与检测速度两方面进行了改进。
附录:并行错误检测算法伪代码
1: for all cores do
2: /* 内存访问记录收集 */
3: Record memory and synchronization traces.
4:
5: /* 内存访问记录预处理 */
6: for Each collected trace do
7: Generate timestamp and insert into history buffer.
8: end for
9:
10: /* 错误检测 */
11: for Each collected trace address do
12: for all other cores do
13: Search same address in this core’s history buffer.
14: Compare timestamps to check HB relation orintersection.
15: end for
16: end for
17:
18: end for
Claims (5)
1.一种基于异构平台的多种并行错误检测系统,其特征在于:是在当前主流的异构平台体系架构基础上添加两个简易硬件模块:访存收集模块和访存预处理模块,从而建立整个并行错误检测的系统;其中,所述访存收集模块在检测流程的上游,位于每个处理器内,负责访存收集;所述访存预处理模块接收访存收集模块收集的访存信息,经预处理后将它们记录成为历史信息,然后发送至通用图形处理器进行错误检测;通用图形处理器在检测流程下游,接收访存预处理模块发送来的访存信息并进行相应算法的检测;
此外, 还引入了三种优化策略:一、地址过滤,过滤不可能引发并行错误的私有地址,以提高处理效率;二、避免共享内存被替换即避免历史记录中的共享访存被替换,以提高检测精确度;三、判断并标识“最后写”访存,利用happens-before算法的传递性性质,减少检测负载,以提高处理效率;其中:
所述地址过滤,是使用计数布隆过滤器,通过该计数布隆过滤器,在访存被发送到通用图形处理器前,首先将它与其它核或线程的布隆过滤器进行比较,判断该访存是否在其它核或线程中出现;如果是,则该访存是共享访存,需要进行后续的比较处理;否则,该访存是私有访存,不会引发数据竞争;
所述避免共享内存被替换,其措施是在历史访存缓冲区中为每个记录添加了一个共享标识位,以此表明该访存记录是否是共享的;当历史缓冲区发生替换时,优先替换非共享的访存记录;
所述“最后写”策略,一方面,对于同一线程的所有访存,后续的访存发生在先前访存之后,因此,对于同一地址,使用后续访存替换先前访存;另一方面,通过通用图形处理器的反馈happens-before关系,识别线程间同一地址访存的“最后写”,使用后续访存替换先前访存。
2.根据权利要求1所述的基于异构平台的多种并行错误检测系统,其特征在于:所述访存收集模块位于每个中央处理器核内,它从重排序缓冲区中收集标识的操作或是访存指令;每条指令都通过旁路发送到访存收集模块;访存收集模块判断该指令是否是标识的操作或者访存指令,如果是,则将它保存至访存收集模块的访存收集缓冲区;
每条收集的访存包含以下三个部分:(1)访存的程序计数器;(2)访存地址;(3)访存类型,包括读取、存储或者是顺序违背中的操作类型;当访存收集模块的收集缓冲区满,访存收集模块便将收集缓冲区内的访存通过片上网络发送至访存预处理模块;
所述访存预处理模块位于片上,中央处理器与通用图形处理器之间,与片上总线互联;由于检测数据竞争和顺序违背所使用的happens-before算法需要访存的时间戳信息、检测原子性违背的ColorSafe算法需要颜色签名赋值信息;同时,这些检测算法都需要维护历史访存,以供检测时比较分析;因此,访存预处理模块的主要作用在于为错误检测生成必要的信息;首先,汇总访存收集模块收集的访存;然后,进行必要的预处理,包括:时间戳赋值,颜色签名赋值,历史信息维护;最后,将访存发送至通用图形处理器进行检测。
3.根据权利要求1所述的基于异构平台的多种并行错误检测系统,其特征在于:所述通用图形处理器上的并行错误检测:当访存由访存预处理模块发送至通用图形处理器后,通用图形处理器将根据所需要检测的错误类型,应用相应的检测算法进行检测;每条待检测访存都被发送至通用图形处理器端,通用图形处理器端将待检测访存的地址与历史信息中其它核或线程的访存进行比较,以此确定是否存在并行错误。
4.根据权利要求3所述的基于异构平台的多种并行错误检测系统,其特征在于:通过历史信息缓冲区存储程序的历史运行状态,并把历史信息缓冲区根据错误类型分类:一个是用于数据竞争与顺序违背检测的访存缓冲区,另一个是用于原子性违背检测的颜色签名缓冲区;
所述访存缓冲区方面,按照访存所属的线程号进行分组,以便比较时避开同线程的访存记录;然后,为了迅速确定是否存在同地址的历史访存,每组同线程的访存都根据其地址进行哈希;访存缓冲区组织成一个哈希表,哈希函数是基于地址设计的,哈希表项为一个先进先出队列,用于存储哈希至同一表项的访存;最后,为了迅速过滤掉不需要检测的“读取-读取”检测,每个哈希表项按照访存是“读取”还是“写入”组织成两个不同的先进先出队列;整个检测的流程如下:通用图形处理器对当前的访存的地址进行哈希,获取其所属的哈希表项;根据该表项到其它线程的访存缓冲区中遍历先进先出队列,以判断是否存在相同地址的访问;若当前访存为“读取”操作,则仅需要遍历“写入”队列;若当前访存为“写入”操作,则需要遍历“读取”和“写入”两个队列;完成遍历后,若存在相同地址,则比较时间戳判定是否存在数据竞争;
所述颜色签名缓冲区方面,访存预处理模块按照如下流程维护颜色签名:首先,访存预处理模块在接收访存时已经从颜色快表中获取了该访存所属的颜色;然后,访存预处理模块对当前接收的访存数计数,每一定数量的访存数将划分为一个执行段,该段中的所有访存,将根据它们的类型:本地读、本地写、异地读、异地写,将颜色号通过布隆过滤器被压缩到相应的本地读、本地写、异地读、异地写的颜色签名;每四个颜色签名形成一个历史信息块,代表当前执行段的颜色访问情况。
5.根据权利要求4所述的基于异构平台的多种并行错误检测系统,其特征在于:所述通用图形处理器上的并行错误检测,是当访存由访存预处理模块发送至通用图形处理器后,通用图形处理器根据需要检测的错误类型,应用相应的检测算法进行检测:
对于数据竞争的检测:每条待检测访存都被发送至图形处理器端,图形处理器端将待检测访存的地址与时间戳与历史信息中其它核或线程的访存进行比较,以此确定是否存在数据竞争,具体过程为:
首先,每条访存都在其它线程的访存缓冲区中进行比较检测,根据地址进行哈希,以便快速定位所需遍历队列;
然后,完成哈希定位后,如果当前待检测访存为“读取”,则仅需要遍历“写入”队列;如果为“写入”,则需要遍历“读取”和“写入”两个队列;如果不存在相同地址,则不存在数据竞争,检测结束;否则进入下一步;
最后,对于同地址的历史访存比较时间戳,若二者的时间戳存在先后关系,则证明二者间存在同步操作,没有数据竞争;若不存在先后关系,则报告一个数据竞争;
对于顺序违背的检测:访存预处理模块将所有待检测操作传送至通用图形处理器端,通用图形处理器端同样对照访存缓冲区进行时间戳先后关系的检测,具体流程与数据竞争检测基本相同,唯一区别在于,确定存在先后关系后,通用图形处理器将进一步确定该先后关系是否与预先设定的合理顺序相同,若相同,则为合理顺序;否则,则报告错误;
对于原子性违背的检测:访存预处理模块将所有标识颜色的访存发送至通用图形处理器端;通用图形处理器端按如下步骤进行错误检测:
首先,每条待检测访存只与自身线程的颜色签名缓冲区记录进行比较;
然后,由当前颜色签名缓冲区中最早的本地读/写的颜色签名开始,选取所有可能发生在每条待检测访存与本地读、写的颜色签名间的异地读/写颜色签名;
最后,通用图形处理器将本地读/写的颜色签名,每条待检测访存和异地读/写颜色签名三者的颜色签名做交集,以此来判断原子性是否被远端线程的读写都打破;若交集为空,则证明不存在对相同原子区块的访问,不存在原子性违背即访问的区域互不相交;否则,则报告原子性违背即有对同一区域的本地两次先后访问被远端访问插入。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510468604.3A CN105117369B (zh) | 2015-08-04 | 2015-08-04 | 一种基于异构平台的多种并行错误检测系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510468604.3A CN105117369B (zh) | 2015-08-04 | 2015-08-04 | 一种基于异构平台的多种并行错误检测系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105117369A CN105117369A (zh) | 2015-12-02 |
CN105117369B true CN105117369B (zh) | 2017-11-10 |
Family
ID=54665365
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510468604.3A Expired - Fee Related CN105117369B (zh) | 2015-08-04 | 2015-08-04 | 一种基于异构平台的多种并行错误检测系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105117369B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105653243B (zh) * | 2015-12-23 | 2018-03-30 | 北京大学 | 一种通用图形处理器多任务并发执行的任务派发方法 |
CN109635568B (zh) * | 2018-11-26 | 2023-05-26 | 华中科技大学 | 一种基于静态分析和模糊测试相结合的并发漏洞检测方法 |
CN110059014B (zh) * | 2019-04-28 | 2022-09-27 | 西安邮电大学 | 一种并发程序数据竞争指令级定位方法 |
CN112364600B (zh) * | 2019-07-25 | 2022-06-17 | 中国科学院软件研究所 | 一种处理器微架构设计验证方法 |
CN113407447B (zh) * | 2021-06-15 | 2022-09-27 | 西安邮电大学 | 一种自适应轻量级动态混合数据竞争检测方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8417919B2 (en) * | 2008-09-12 | 2013-04-09 | Wisconsin Alumni Research Foundation | Assigning different serialization identifier to operations on different data set for execution in respective processor in multi-processor system |
CN103365776A (zh) * | 2013-06-28 | 2013-10-23 | 中国科学院计算技术研究所 | 基于确定性重放的并行系统弱一致性的验证方法和系统 |
CN103430145A (zh) * | 2011-03-15 | 2013-12-04 | 英特尔公司 | 页面错误应对机制 |
CN103488563A (zh) * | 2013-09-05 | 2014-01-01 | 龙芯中科技术有限公司 | 并行程序的数据竞争检测方法、装置及多核处理系统 |
CN103729291A (zh) * | 2013-12-23 | 2014-04-16 | 华中科技大学 | 一种基于同步关系的并行动态数据竞争检测系统 |
-
2015
- 2015-08-04 CN CN201510468604.3A patent/CN105117369B/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8417919B2 (en) * | 2008-09-12 | 2013-04-09 | Wisconsin Alumni Research Foundation | Assigning different serialization identifier to operations on different data set for execution in respective processor in multi-processor system |
CN103430145A (zh) * | 2011-03-15 | 2013-12-04 | 英特尔公司 | 页面错误应对机制 |
CN103365776A (zh) * | 2013-06-28 | 2013-10-23 | 中国科学院计算技术研究所 | 基于确定性重放的并行系统弱一致性的验证方法和系统 |
CN103488563A (zh) * | 2013-09-05 | 2014-01-01 | 龙芯中科技术有限公司 | 并行程序的数据竞争检测方法、装置及多核处理系统 |
CN103729291A (zh) * | 2013-12-23 | 2014-04-16 | 华中科技大学 | 一种基于同步关系的并行动态数据竞争检测系统 |
Non-Patent Citations (1)
Title |
---|
并行程序错误调试技术研究综述;戴卓方,张为华;《计算机系统应用》;20141015;第23卷(第10期);说明书第4-6页 * |
Also Published As
Publication number | Publication date |
---|---|
CN105117369A (zh) | 2015-12-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105117369B (zh) | 一种基于异构平台的多种并行错误检测系统 | |
US9286186B2 (en) | Trace-data processing and profiling device | |
US7970755B2 (en) | Test execution of user SQL in database server code | |
US7836435B2 (en) | Checking for memory access collisions in a multi-processor architecture | |
CN103299273B (zh) | 数据处理装置的追踪 | |
EP2485149A1 (en) | Symbolic execution and test generation for programs to be run on a graphic processor | |
CN107220121B (zh) | 一种numa架构下沙箱环境测试方法及其系统 | |
Schulz | Extracting critical path graphs from MPI applications | |
CN106649119A (zh) | 流计算引擎的测试方法及装置 | |
CN107003894A (zh) | 用于硬件事务内存程序的剖析器的装置和方法 | |
CN110287123A (zh) | 一种绕过ios系统调试检测的方法及装置 | |
US20090328045A1 (en) | Technique for finding relaxed memory model vulnerabilities | |
Brunst et al. | Comprehensive performance tracking with vampir 7 | |
CN111367786A (zh) | 一种符号执行方法、电子设备以及存储介质 | |
CN109669858A (zh) | 程序死锁的测试方法、装置和设备 | |
Prevot et al. | Leveraging GPUs for effective clause sharing in parallel SAT solving | |
Adhinarayanan et al. | An automated framework for characterizing and subsetting GPGPU workloads | |
CN103455364B (zh) | 一种多核环境并行程序Cache性能在线获取系统及方法 | |
US11768754B2 (en) | Parallel program scalability bottleneck detection method and computing device | |
CN108363660A (zh) | 一种测试程序生成方法和装置 | |
US10949330B2 (en) | Binary instrumentation to trace graphics processor code | |
EP2972880A1 (en) | Kernel functionality checker | |
Kunkel et al. | Understanding metadata latency with MDWorkbench | |
CN103577312B (zh) | 一种软件的时间性能的检测方法及装置 | |
CN104081352B (zh) | 用于生物学分析的机电系统的作业调度程序 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20171110 Termination date: 20200804 |
|
CF01 | Termination of patent right due to non-payment of annual fee |