CN114691474A - 程序检测方法及装置 - Google Patents
程序检测方法及装置 Download PDFInfo
- Publication number
- CN114691474A CN114691474A CN202011608587.6A CN202011608587A CN114691474A CN 114691474 A CN114691474 A CN 114691474A CN 202011608587 A CN202011608587 A CN 202011608587A CN 114691474 A CN114691474 A CN 114691474A
- Authority
- CN
- China
- Prior art keywords
- program
- thread
- memory
- read
- write
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 230000015654 memory Effects 0.000 claims abstract description 187
- 238000000034 method Methods 0.000 claims abstract description 43
- 238000012986 modification Methods 0.000 claims description 39
- 230000004048 modification Effects 0.000 claims description 39
- 238000004590 computer program Methods 0.000 claims description 16
- 230000004044 response Effects 0.000 claims description 7
- 238000001514 detection method Methods 0.000 abstract description 8
- 238000013461 design Methods 0.000 description 32
- 230000006870 function Effects 0.000 description 29
- 239000000872 buffer Substances 0.000 description 20
- 238000010586 diagram Methods 0.000 description 19
- 238000004458 analytical method Methods 0.000 description 14
- 238000012545 processing Methods 0.000 description 10
- 230000008569 process Effects 0.000 description 9
- 230000003068 static effect Effects 0.000 description 7
- 230000000694 effects Effects 0.000 description 6
- 238000012360 testing method Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 5
- 230000002860 competitive effect Effects 0.000 description 4
- 230000008439 repair process Effects 0.000 description 4
- 239000012536 storage buffer Substances 0.000 description 4
- 230000002159 abnormal effect Effects 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 238000010276 construction Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3612—Software analysis for verifying properties of programs by runtime analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3664—Environments for testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3696—Methods or tools to render software testable
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
-
- 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/81—Threshold
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请提供一种程序检测方法及装置,能够帮助用户快速完成程序运行在弱内存环境上的检查,可以提高程序的检测效率,可应用于程序检测中。该方法包括:接收用户提供的程序,根据查询参数和程序获得程序运行在弱内存环境上的结果。其中,查询参数用于指示程序的两条操作发生重排序的最大间隔。
Description
技术领域
本申请涉及通信领域,尤其涉及一种程序检测方法及装置。
背景技术
强内存模型(strong memory model)和弱内存模型(weakly ordered memorymodel)为两种存储模型。其中,强内存模型描述的是每一条指令都隐含获取(acquire)和释放(release)语义,获取语义可用于阻止读获取(read-acquire)和它之后的任何读写操作的乱序,释放语义可用于阻止写释放(write-release)和它之前的任何读写操作的乱序,即一个核(core)对内存进行的写操作序列可以被中央处理器(central processing unit,CPU)的其他核以相同的次序观察到。弱内存模型描述的是在一个独立的线程内,任意对内存的读写操作都可以与其它读写操作交换顺序,而不改变该线程的行为。
由于弱内存模型的软件生态环境的滞后,可能会导致基于强内存模型平台开发的程序,在移植到弱内存模型平台后,出现程序崩溃、重启或计算结果错误等异常现象。从而需要通过有经验的程序开发人员对程序进行反复测试、调试,来分析程序运行在弱内存模型平台的是否会发生异常。然而,上述程序崩溃、重启或计算结果错误等异常现象的复现概率低,受限于测试用例和测试环境,复现问题的成本高,并且对测试人员的专业能力要求很高。
发明内容
本申请实施例提供一种程序检测方法及装置,能够帮助用户快速完成程序运行在弱内存模型平台上的检查,可以提高程序的检测效率。
为达到上述目的,本申请采用如下技术方案:
第一方面,提供一种程序检测方法。该程序检测方法包括:接收用户提供的程序,根据查询参数和程序,获得程序运行在弱内存环境上的结果。其中,查询参数用于指示程序的两条操作发生重排序的最大间隔。
基于第一方面所述的程序检测方法,程序检测装置接收用户提供的程序,根据用于指示程序的两条操作发生重排序的最大间隔的查询参数和程序,便可获得程序运行在弱内存环境上的结果,能够帮助用户快速完成程序运行在弱内存环境上的检查,可以提高程序的检测效率,对用户的专业能力要求低。
在一种可能的设计方案中,上述根据查询参数和程序,获得程序运行在弱内存环境上的结果,可以包括:根据查询参数、程序的第一线程中的第一操作与第一线程中的第二操作的间隔、和程序的第二线程中的第三操作与第二线程中的第四操作的间隔,获得程序运行在弱内存环境上的结果。可选地,第一操作和第三操作可以为对同一变量进行的一对读写操作,第二操作和第四操作可以为对同一变量进行的一对读写操作,第一操作和第二操作可以为对不同变量进行的操作,第三操作和第四操作可以为对不同变量进行的操作。如此,不需要用户对程序进行测试,可以提高程序的检测效率。
在一种可能的设计方式中,第一方面提供的程序检测方法,还可以包括:采用内存读写模式查询规则,对程序的第一线程中的第一操作、第一线程中的第二操作、程序的第二线程中的第三操作和第二线程中的第四操作进行检测,获得程序运行在弱内存环境上的结果。
可选地,内存读写模式查询规则可以是根据查询参数确定的,内存读写模式查询规则可用于确定第一线程和第二线程在时间上是否发生重叠。如此,若程序满足内存读写模式查询规则,则结果为错误,如容易产生弱内存序问题;若不满足内存读写模式查询规则,则结果为正确,如在弱内存模型平台运行结果正确,不需要用户对程序进行反复测试,可以快速获得程序运行在弱内存环境的结果。
可选地,内存读写模式查询规则可以包括读读、写写乱序查询规则,和/或,读写、写读乱序查询规则。如此,可以检查包括至少两个线程,且一个线程包括读读操作和另一个线程包括写写操作的程序在弱内存环境上的运行结果,和/或,可以检查包括至少两个线程,且一个线程包括读写操作和另一个线程包括写读操作的程序在弱内存环境上的运行结果。
在一种可能的设计方式中,查询参数可以是用户确定的,查询参数可以包括片内写操作延迟。可选地,查询参数还可以包括跨NUMA写操作延迟和/或跨NUMA读操作延迟。如此,可以根据用户输入的查询参数进行内存读写模式查询。
在一种可能的设计方式中,第一方面提供的程序检测方法,还可以包括:获取查询参数对应的数值。其中,查询参数对应的数值可以包括片内写操作延迟对应的值。可选地,查询参数对应的数值还可以包括跨NUMA写操作延迟对应的值和/或跨NUMA读操作延迟对应的值。
可选地,弱内存环境可以为非统一内存访问架构(non-Uniform memory accessarchitecture,NUMA)的运行设备对应的运行环境。
在一种可能的设计方式中,第一方面提供的程序检测方法,还可以包括:向用户提供结果。其中,结果可以包括修改建议。如此,用户可根据修改建议手动修改程序,从而可以帮助用户快速定位程序中导致程序发生错误的位置,快速完成程序的修改,提高程序的修改效率。
可选地,结果可以包括:正确。或者,结果可以包括错误和/或修改建议。
可选地,修改建议可以包括需要修改的代码的位置信息,例如代码行号和/或程序文件名,修改建议可用于程序检测装置修改程序或用于用户手动修改程序。
在一种可能的设计方式中,第一方面提供的程序检测方法,还可以包括:响应于用户的确定指示,根据修改建议修改程序。如此,可以直接帮助用户完成程序的修改,进一步提高程序的修改效率。
第二方面,提供一种程序检测装置。该程序检测装置包括:接收单元和获取单元。其中,接收单元,用于接收用户提供的程序;获取单元,用于根据查询参数和程序,获得程序运行在弱内存环境上的结果。其中,查询参数用于指示程序的两条操作发生重排序的最大间隔。
在一种可能的设计方式中,获取单元,还用于根据查询参数、程序的第一线程中的第一操作与第一线程中的第二操作的间隔、和程序的第二线程中的第三操作与第二线程中的第四操作的间隔,获得程序运行在弱内存环境上的结果。可选地,第一操作和第三操作为对同一变量进行的一对读写操作,第二操作和第四操作为对同一变量进行的一对读写操作,第一操作和第二操作为对不同变量进行的操作,第三操作和第四操作为对不同变量进行的操作。
在一种可能的设计方式中,获取单元,还用于采用内存读写模式查询规则,对程序的第一线程中的第一操作、第一线程中的第二操作、程序的第二线程中的第三操作和第二线程中的第四操作进行检测,获得程序运行在弱内存环境上的结果。
可选地,内存读写模式查询规则可以是根据查询参数确定的,内存读写模式查询规则可用于确定第一线程和第二线程在时间上是否发生重叠。
在一种可能的设计方式中,内存读写模式查询规则可以包括读读、写写乱序查询规则,和/或,读写、写读乱序查询规则。
在一种可能的设计方式中,查询参数可以是用户确定的,查询参数可以包括片内写操作延迟。可选地,查询参数还可以包括跨NUMA写操作延迟和/或跨NUMA读操作延迟。如此,可以根据用户输入的查询参数进行内存读写模式查询。
在一种可能的设计方式中,获取单元,还用于获取查询参数对应的数值。其中,查询参数对应的数值可以包括片内写操作延迟对应的值。可选地,查询参数对应的数值还可以包括跨NUMA写操作延迟对应的值和/或跨NUMA读操作延迟对应的值。
可选地,弱内存环境可以为非统一内存访问架构NUMA的运行设备对应的运行环境。
在一种可能的设计方式中,第二方面所述的程序检测装置,还可以包括:输出单元。输出单元,用于向用户提供结果。其中,结果可以包括修改建议。
可选地,结果可以包括:正确。或者,结果可以包括错误和/或修改建议。
可选地,修改建议可以包括需要修改的代码的位置信息,例如代码行号和/或程序文件名,修改建议可用于程序检测装置修改程序或用于用户手动修改程序。
在一种可能的设计方式中,获取单元,还用于响应于用户的确定指示,根据修改建议修改程序。
在一种可能的设计方式中,程序检测装置可放置于云服务器中。
需要说明的是,接收单元和输出单元可以分开设置,也可以集成在一个模块中,即收发模块。本申请对于接收单元和输出单元的具体实现方式,不做具体限定。
可选地,第二方面所述的程序检测装置还可以包括存储模块,该存储模块存储有程序或指令。当获取单元执行该程序或指令时,使得程序检测装置可以执行如第一方面中任意一种可能的实现方式所述的程序检测方法。
需要说明的是,第二方面所述的程序检测装置可以是计算机设备、服务器或云服务器,也可以是可设置于计算机设备、服务器或云服务器的芯片(***)或其他部件或组件,本申请对此不做限定。
此外,第二方面所述的程序检测装置的技术效果可以参考第一方面所述的程序检测方法的技术效果,此处不再赘述。
第三方面,提供一种程序检测装置。该程序检测装置包括:处理器,该处理器与存储器耦合,存储器用于存储计算机程序;处理器用于执行存储器中存储的计算机程序,以使得该程序检测装置执行如第一方面中任意一种可能的实现方式所述的程序检测方法。
在一种可能的设计中,第三方面所述的程序检测装置还可以包括收发器。该收发器可以为收发电路或输入/输出端口。所述收发器可以用于该程序检测装置与其他设备通信。
在本申请中,第三方面所述的程序检测装置可以为计算机设备、服务器或云服务器,或者设置于计算机设备、服务器或云服务器内部的芯片或芯片***。
此外,第三方面所述的程序检测装置的技术效果可以参考第一方面中的任意一种实现方式所述的程序检测方法的技术效果,此处不再赘述。
第四方面,提供了一种芯片***,该芯片***具有弱内存环境,该芯片***包括处理器和输入/输出端口,所述处理器与包含指令的存储器耦合,用于控制所示芯片***实现第一方面中的任意一种实现方式所涉及的处理功能,所述输入/输出端口用于实现第一方面中的任意一种实现方式所涉及的收发功能。
在一种可能的设计中,该芯片***还包括存储器,该存储器用于存储实现第一方面所涉及功能的程序指令和数据。
该芯片***,可以由芯片构成,也可以包含芯片和其他分立器件。
第五方面,提供一种计算机可读存储介质,包括:该计算机可读存储介质中存储有计算机指令;当该计算机指令在计算机上运行时,使得该计算机执行如第一方面中任意一种可能的实现方式所述的程序检测方法。
第六方面,提供了一种包含指令的计算机程序产品,包括计算机程序或指令,当该计算机程序或指令在计算机上运行时,使得该计算机执行如第一方面中任意一种可能的实现方式所述的程序检测方法。
附图说明
图1为本申请实施例提供的程序检测方法的流程示意图一;
图2为本申请实施例提供的程序检测方法的应用示意图一;
图3为本申请实施例提供的程序检测方法的流程示意图二;
图4为本申请实施例提供的CPU的结构示意图一;
图5为本申请实施例提供的程序检测装置的界面示意图一;
图6为本申请实施例提供的程序的示例图;
图7为本申请实施例提供的程序检测装置的界面示意图二;
图8为本申请实施例提供的程序的分析示例图一;
图9为本申请实施例提供的程序的分析示例图二;
图10为本申请实施例提供的程序检测方法的应用示意图二;
图11为本申请实施例提供的程序检测装置的结构示意图一;
图12为本申请实施例提供的程序检测装置的结构示意图二。
具体实施方式
下面将结合附图,对本申请中的技术方案进行描述。
本申请将围绕可包括多个设备、组件、模块等的***来呈现各个方面、实施例或特征。应当理解和明白的是,各个***可以包括另外的设备、组件、模块等,并且/或者可以并不包括结合附图讨论的所有设备、组件、模块等。此外,还可以使用这些方案的组合。
另外,在本申请实施例中,“示例地”、“例如”等词用于表示作例子、例证或说明。本申请中被描述为“示例”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用示例的一词旨在以具体方式呈现概念。
本申请实施例中,“操作指令”、“操作”有时可以混用,应当指出的是,在不强调其区别时,其所要表达的含义是一致的。“语句”、“程序语句”、“代码”有时可以混用,应当指出的是,在不强调其区别时,其所要表达的含义是一致的。
在本申请的描述中,除非另有说明,“多个”的含义是指两个或两个以上。本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。
首先,为了便于理解,下面先对本申请实施例可能涉及的相关术语和概念进行介绍。
(1)全存储排序(total store ordering,TSO)一致性模型
TSO一致性模型描述的是中央处理器(central processing unit,CPU)中的多个核有且仅有一个全局的对内存写操作的顺序,TSO一致性模型属于强内存模型。
本申请实施例提供一种程序检测方法,能够用于检测程序运行在弱内存模型平台的正确性,如程序运行在高级精简指令集机器(Advanced RISC Machine,ARM)平台的正确性。该程序检测方法可以单独使用,也可以与第三方软件集成在一起使用。本申请实施例提供的程序检测装置,可以是计算机设备、服务器或云服务器等,也可以是应用于计算机设备、服务器或云服务器中的芯片或者其他具有程序检测功能的部件。
下面将结合图1-图10对本申请实施例提供的程序检测方法进行具体阐述。
图1为本申请实施例提供的程序检测方法的流程示意图一。本申请实施例提供的程序检测方法可用于检查编译型语言开发的软件,如C语言或C++语言等。
如图1所示,该程序检测方法包括如下步骤:
S101,接收用户提供的程序。
图2为本申请实施例提供的程序检测方法的应用示意图一。
如图2所示,程序检测装置接收用户提供的程序。以C/C++软件为例,该程序可以为C/C++软件源代码。该程序可以包括一个或多个线程。
可选地,本申请实施例提供的程序检测方法,可以包括:采用编译器,将用户提供的程序转变为中间代码(intermediate representation,IR)。
示例性地,以Clang/LLVM编译器为例,假设用户提供的程序为XXX.c,通过Clang/LLVM编译器编译该程序,产生中间代码,例如,clang-emit-llvm-c-g XXX.c-o XXX.bc。可选地,通过程序检测装置Weakmemcheck分析程序的中间文件XXX.bc。
结合图3中(a)或图3中(b),通过编译器编译用户提供的程序,生成中间代码IR,程序检测装置对中间代码进行分析,可以实现对源代码进行静态分析,不需要运行用户提供的程序,从而对用户软件无侵入,可以保证用户的程序的安全性且操作方便。
S102,根据查询参数和程序,获得程序运行在弱内存环境上的结果。
可选地,弱内存环境为非统一内存访问架构(non-Uniform memory accessarchitecture,NUMA)的运行设备对应的运行环境。
示例性地,弱内存环境可以为弱内存模型设备的运行环境、或弱内存模型平台等。
示例性地,查询参数用于指示程序的两条操作发生重排序的最大间隔。可选地,查询参数可以包括查询参数的类型和/或查询参数对应的数值。
在一些实施例中,查询参数的类型可以包括片内写操作延迟。示例性地,片内写操作延迟可以用于指示片内两条存储(store)指令发生重排序的最大间隔。
示例性地,内存指令可用于将寄存器中的数据保存到内存,片内写操作延迟可以用于检测NUMA节点内的两条或多条存储指令之间是否会发生重排序。关于NUMA节点可参照下述对图4的具体阐述。
可选地,查询参数的类型还可以包括跨NUMA写操作延迟和/或跨NUMA读操作延迟。示例性地,跨NUMA写操作延迟可用于指示跨NUMA节点的两条存储(store)指令发生重排序的最大间隔,跨NUMA读操作延迟可用于指示跨NUMA节点的两条装载(load)指令发生重排序的最大间隔,其中,跨NUMA节点的指令是指一个NUMA节点的处理访问另一个NUMA节点的内存的指令。
示例性地,装载指令可用于从内存中读取数据放入寄存器中,跨NUMA写操作延迟可以用于检测两个或多个NUMA节点之间的两条或多条存储指令之间是否会发生重排序,跨NUMA读操作延迟可以用于检测两个或多个NUMA节点之间的两条或多条装载指令之间是否会发生重排序。关于跨NUMA写操作延迟和跨NUMA读操作延迟可参照下述对图4的具体阐述。
在一些实施例中,查询参数对应的数值可以包括片内写操作延迟对应的值。
示例性地,假设将片内写操作延迟对应的值置为8,则两条存储指令发生重排序的最大间隔为8条内存操作指令。也就是说,若两条存储指令之间的间隔小于或等于8条内存操作指令,则认为这两条存储指令会发生重排序;若两条存储指令之间的间隔大于8条内存操作指令,则认为这两条存储指令不会发生重排序。其中,内存操作指令可以包括:存储(store)指令和/或装载(load)指令。
可选地,查询参数对应的数值还可以包括跨NUMA写操作延迟对应的值和/或跨NUMA读操作延迟对应的值。
示例性地,假设将跨NUMA写操作延迟对应的值置为8,则两条存储指令发生重排序的最大间隔为8条内存操作指令。也就是说,若两条存储指令之间的间隔小于或等于8条内存操作指令,则认为这两条存储指令会发生重排序;若两条存储指令之间的间隔大于8条内存操作指令,则认为这两条存储指令不会发生重排序。
类似地,假设将跨NUMA读操作延迟对应的值置为8,则两条装载指令发生重排序的最大间隔为8条内存操作指令。也就是说,若两条装载指令之间的间隔小于或等于8条内存操作指令,则认为这两条装载指令不会发生重排序;若两条装载指令之间的间隔超过8条内存操作指令,则认为这两条装载指令不会发生重排序。
可选地,查询参数的类型可以包括片内读操作延迟,查询参数对应的数值可以包括片内读操作延迟对应的值。示例性地,片内读操作延迟可以用于指示两条装载(load)指令发生重排序的最大间隔,片内读操作延迟可以用于检测NUMA节点内的两条或多条装载指令之间是否会发生重排序。关于片内读操作延迟的具体实现方式与上述片内写操作延迟类似,此处不再赘述。
需要说明的是,以程序中包括内存操作指令1和内存操作指令2为例,重排序可指内存操作指令1和内存操作指令2的先后执行顺序发生变化。例如,程序文件的代码中记载的顺序为内存操作指令1在内存操作指令2之前执行,若在弱内存环境中运行该程序,由于弱内存环境的特性,导致先执行内存操作指令2,再执行内存操作指令1。
在一些实施例中,可以根据查询参数进行内存读写模式查询。该查询参数用来描述CPU硬件的不同核在片内、外的内存读写延迟,并构造内存读写模式查询规则。
可选地,可以根据CPU的结构确定查询参数。
图4为本申请实施例提供的CPU的结构示意图一。
如图4所示,该CPU的包括两个内存(memory),内存0(memory0)和内存1(memory1),两个内存分别对应有核和缓存。memory0对应core0、core1、缓存cache0和cache1,核core0与缓存cache0之间对应一个存储缓存(Store Buffer),核core1与缓存cache1之间对应一个存储缓存(Store Buffer)。memory1对应core2、core3、cache2、和cache3,核core2与缓存cache2之间对应一个存储缓存(Store Buffer),核core3与缓存cache3之间对应一个存储缓存(Store Buffer)。可选地,内存0(memory0)和内存1(memory1)之间对应有跨NUMA装载缓存(NUMA Load Buffer)和/或跨NUMA存储缓存(NUMA Store Buffer)。例如,core0和core1可通过跨NUMA装载缓存对memory1进行读操作,core0和core1可通过跨NUMA存储缓存对memory1进行写操作。类似地,core2和core3可通过跨NUMA装载缓存对memory0进行读操作,core2和core3可通过跨NUMA存储缓存对memory0进行写操作。
结合图4,可将包括memory0、core0、core1、cache0和cache1、对应的Store Buffer的架构称为NUMA节点0,将NUMA节点0内部的core0或core1对NUMA节点0内部的内存(memory0)或缓存(cache0和cache1、对应的Store Buffer)的读操作称为片内读操作。例如,将core0对memory0的读操作称为片内读操作。将NUMA节点0内部的core0或core1对NUMA节点0内部的内存(memory0)或缓存(cache0和cache1、对应的Store Buffer)的写操作称为片内写操作。例如,将core0对memory0的写操作称为片内写操作。
类似地,可将包括memory1、core2、core3、cache2、和cache3、对应的Store Buffer的架构称为NUMA节点1,将NUMA节点1内部的core2或core3对NUMA节点1内部的内存(memory1)或缓存(cache2、cache3、和对应的Store Buffer)的读操作称为片内读操作。例如,将core2对memory1的读操作称为片内读操作。将NUMA节点1内部的core2或core3对NUMA节点1内部的内存(memory1)或缓存(cache2、cache3、和对应的Store Buffer)的写操作称为片内写操作。例如,将core2对memory1的写操作称为片内写操作。
示例性地,将NUMA节点0与NUMA节点1之间的内存操作称为跨NUMA的内存操作,内存操作包括读操作和/或写操作。例如,将NUMA节点0中core0对NUMA节点1中memory1的读操作称为跨NUMA读操作,将NUMA节点0中core0对NUMA节点1中memory1的写操作称为跨NUMA写操作。类似地,将NUMA节点1中core2对NUMA节点0中memory0的读操作称为跨NUMA读操作,将NUMA节点1中core2对NUMA节点0中memory0的写操作称为跨NUMA写操作,此处不一一列举。
示例性地,结合图4,若CPU包括存储缓存(Store Buffer),可以确定采用片内写操作延迟和/或片内写操作延迟对应的值。若CPU包括跨NUMA装载缓存(NUMA Load Buffer),可以确定采用跨NUMA写操作延迟和/或跨NUMA写操作延迟对应的值。若CPU包括跨NUMA存储缓存(NUMA Store Buffer),可以确定采用跨NUMA读操作延迟和/或跨NUMA读操作延迟对应的值。可选的,若CPU包括装载缓存(Load Buffer),可以确定采用片内读操作延迟和/或片内读操作延迟对应的值。其中,核core0与缓存cache0之间可对应有装载缓存(LoadBuffer),类似地,core1与cache1之间、core2与cache2之间、core3与cache3之间分别可对应有装载缓存(图4中未示出)。
在一些实施例中,查询参数可以是程序检测装置确定的。
示例性地,程序检测装置可以确定查询参数的类型,例如,采用片内写操作延迟,或采用跨NUMA写操作延迟和/或跨NUMA读操作延迟。
示例性地,程序检测装置可以确定查询参数对应的数值。例如,程序检测装置根据测试集测量得到查询参数对应的数值,如程序检测装置可以确定片内写操作延迟对应的值,还可以确定跨NUMA写操作延迟对应的值和/或跨NUMA读操作延迟对应的值。
在一些实施例中,查询参数可以是用户确定的。
结合图2,程序检测装置可以根据用户确定的查询参数对程序进行分析,获得程序运行在弱内存环境上的结果。
可选地,用户可以确定查询参数的类型。
示例性地,用户可以在程序检测装置的显示界面内输入查询参数。图5为本申请实施例提供的程序检测装置的界面示意图一。结合图5中(a),用户可以在显示界面的输入查询参数的区域中,输入查询参数对应的指令。例如,可以输入片内写操作延迟对应的指令StoreBuffer。可选地,还可以输入跨NUMA写操作延迟对应的指令NUMAStoreSize和/或跨NUMA读操作延迟对应的指令NUMALoadSize。
或者,示例性地,程序检测装置的显示界面可以包括片内写操作延迟的选择框,还可以包括跨NUMA写操作延迟的选择框和/或跨NUMA读操作延迟的选择框。示例性地,用户可以通过勾选查询参数的类型对应的选择框,来确定采用的查询参数的类型。结合图5中(b),用户可以勾选片内写操作延迟对应的选择框,以确定采用片内写操作延迟。类似地,用户可以用过勾选跨NUMA写操作延迟对应的选择框,以确定采用跨NUMA写操作延迟。若不采用跨NUMA读操作延迟,可以不对跨NUMA读操作延迟对应的选择框进行操作。
可选地,用户可以确定查询参数对应的数值。
结合图5中(a)或图5中(b),用户可以在各查询参数的类型对应的输入数值的区域输入对应的值。例如,用户可以在片内写操作延迟对应的输入数值的区域输入8。类似地,可以在跨NUMA写操作延迟对应的输入数值的区域输入8,可以在跨NUMA读操作延迟对应的输入数值的区域输入8。
需要说明的是,上述仅为本申请实施例提供的示例,本申请实施例不对查询参数是如何确定的进行限定。例如,查询参数的类型可以是程序检测装置确定的,查询参数对应的数值可以是用户确定的。或者,查询参数的类型是用户确定的,查询参数的数值是程序检测装置确定的。或者,程序检测装置确定查询参数的类型和/或查询参数对应的数值后,用户可以对查询参数的类型和/或查询参数对应的数值进行修改。
在一种可能的设计方式中,本申请实施例提供的程序检测方法,还可以包括:获取查询参数对应的数值。
可选地,查询参数对应的数值可以是预设置的,和/或,查询参数对应的数值可以是用户通过显示界面中查询参数的类型对应的输入数值区域提供的。
在一种可能的设计方式中,上述S102,可以包括:根据查询参数、程序的第一线程中的第一操作与第一线程中的第二操作的间隔,和程序的第二线程中的第三操作与第二线程中的第四操作的间隔,获得程序运行在弱内存环境上的结果。
可选地,第一操作和第三操作可以为对同一变量进行的一对读写操作,第二操作和第四操作可以为对同一变量进行的一对读写操作,第一操作和第二操作可以为对不同变量进行的操作,第三操作和第四操作可以为对不同变量进行的操作。例如,该变量可以为共享变量。一对操作可以为:第一操作为对第一变量的读操作,第三操作为对第一变量的写操作;或者,第一操作为对第一变量的写操作,第三操作为对第一变量的读操作。类似地,第二操作为对第二变量的读操作,第四操作为对第二变量的写操作;或者,第二操作为对第二变量的写操作,第四操作为对第二变量的读操作。第一变量可以包括全局变量、共享变量等,第二变量可以包括全局变量、共享变量等。
图6为本申请实施例提供的程序的示例图。
如图6所示,该程序包括第14行的第一线程thread1和第21行的第二线程thread2,可以计算thread1中对变量population写操作(第17行),和thread1中对变量syn_flag写操作(第18行)之间的间隔,可以计算thread2中对变量syn_flag的读操作(第23行),和thread2中对变量population的读操作(第24行)之间的间隔,根据查询参数和这两个间隔获得该程序运行在弱内存环境上的结果。
在一种可能的设计方式中,本申请实施例提供的程序检测方法,还可以包括:采用内存读写模式查询规则,对程序的第一线程中的第一操作、第一线程中的第二操作、程序的第二线程中的第三操作和第二线程中的第四操作进行检测,获得程序运行在弱内存环境上的结果。
示例性地,关于第一操作、第二操作、第三操作和第四操作的具体实现方式,可参照上述具体实现方式,此处不再赘述。
可选地,内存读写模式查询规则可以是根据查询参数确定的,内存读写模式查询规则可用于确定第一线程和第二线程在时间上是否发生重叠。
结合图6,可以采用内存读写模式查询规则对图6所示的程序中的thread1和thread2进行检测,获得该程序运行在弱内存环境上的结果。
示例性地,内存读写模式查询规则可以包括读读、写写乱序查询规则,和/或,读写、写读乱序查询规则。
示例性地,读读、写写乱序查询规则可以包括如下一项或多项条件:第一操作指令和第二操作指令为第一线程中相邻的两条操作指令,第一操作指令为对第一变量的写操作指令,第二操作指令为对第二变量的写操作指令,第三操作指令和第四操作指令为第二线程中相邻的两条操作指令,第三操作指令为对第一变量的读操作指令,第四操作指令为对第二变量的读操作指令;第一操作指令与第三操作指令是竞争关系,第二操作指令与第四操作指令是竞争关系;第一操作指令与第二操作指令之间的间隔小于片内写操作延迟对应的值与跨NUMA写操作延迟对应的值之和;和第三操作指令与第四操作指令之间的间隔小于跨NUMA读操作延迟对应的值。如此,可以采用读读、写写乱序查询规则,检查包括至少两个线程,且一个线程包括读读操作和另一个线程包括写写操作的程序在弱内存环境上的运行结果。
示例性地,读写、写读乱序查询规则可以包括如下一项或多项条件:第五操作指令和第六操作指令为第一线程中相邻的两条操作指令,第五操作指令为对第三变量的写操作指令,第六操作指令为对第四变量的读操作指令,且第七操作指令和第八操作指令为第二线程中相邻的两条操作指令,第七操作指令为对第三变量的读操作指令,第八操作指令为对第四变量的写操作指令;第五操作指令与第七操作指令是竞争关系,第六操作指令与第八操作指令是竞争关系;第五操作指令与第六操作指令之间的间隔小于片内写操作延迟对应的值与跨NUMA写操作延迟对应的值、跨NUMA读操作延迟对应的值之和,且第三操作指令与第八操作指令之间的间隔小于片内写操作延迟对应的值与跨NUMA写操作延迟对应的值、跨NUMA读操作延迟对应的值之和。如此,可以采用读写、写读乱序查询规则,检查包括至少两个线程,且一个线程包括读写操作和另一个线程包括写读操作的程序在弱内存环境上的运行结果。
具体地,竞争关系可以为两条操作指令的先后执行顺序会影响执行结果。第三变量可以包括全局变量、共享变量等,第四变量可以包括全局变量、共享变量等。
满足上述内存读写模式查询规则的程序语句可以被确定为在弱内存环境下因指令乱序而导致结果错误的危险语句。
如此,若程序满足内存读写模式查询规则,则结果为错误,如容易产生弱内存序问题;若不满足内存读写模式查询规则,则结果为正确,如在弱内存模型平台运行结果正确,不需要用户对程序进行反复测试,可以快速获得程序运行在弱内存环境的结果。
在一种可能的设计方式中,本申请实施例提供的程序检测方法,还可以包括:向用户提供结果。可选地,结果可以包括:正确。或者,结果可以包括错误和/或修改建议。
示例性地,正确可以指示程序可以在弱内存环境上正确运行,错误可以指示程序在弱内存环境上运行会出现程序崩溃、程序退出或程序计算结果错误等异常现象,修改建议可以包括需要修改的代码的位置信息,例如代码行号和/或程序文件名,修改建议可用于程序检测装置修改程序或用于用户手动修改程序,以使程序在弱内存环境上正确运行。如此,可以帮助用户快速定位程序中导致程序发生错误的位置,快速完成程序的修改,提高程序的修改效率。
可选地,若结果为正确,可以通过显示界面向用户显示检测结果。若结果为错误,可以通过显示界面向用户显示检测结果,和/或显示修改建议。
图7为本申请实施例提供的程序检测装置的界面示意图二。如图7所示,若结果为错误,可以在显示界面显示结果为错误、对应的程序文件名、和错误语句的代码行号等。
在一种可能的设计方式中,本申请实施例提供的程序检测方法,还可以包括:响应于用户的确定指示,根据修改建议修改程序。
结合图7,用户选择显示界面中确定修复区域,则程序检测装置可以响应于用户的确定指示,根据修改建议修改程序。或者,用户选择显示界面中不修复区域后,可以根据修改建议手动修改程序。如此,可以直接帮助用户完成程序的修改,进一步提高程序的修改效率。
基于图1所述的程序检测方法,程序检测装置接收用户提供的程序,根据查询参数和程序便可获得程序运行在弱内存环境上的结果,能够帮助用户快速完成程序运行在弱内存环境上的检查,可以提高程序的检测效率,对用户的专业能力要求低。
在一些实施例中,结合图3中(a)或图3中(b),本申请实施例提供的程序检查方法,还可以包括下述步骤一至步骤八。下面以程序包括第一线程和第二线程为例进行阐述。
步骤一,分析程序包括的多个变量中所有变量的别名关系。
结合图6和图8,分析图6所示的程序中所有变量的别名关系,可得到如图8所示的别名关系,{Beijing.Population Alias my_city->population},以及{Beijing.sync_flag Alias my_city->sync_flag}。
步骤二,对程序进行变量依赖分析。
示例性地,分析用户提供的程序中函数关系、变量依赖关系,并构建相关线程关系图、函数调用关系图。分析程序中使用的多线程相关应用程序接口(applicationprogramming interface,API),构造一种基于线程调用上下文、函数调用上下文的线程数据结构,以区别不同线程操作的上下文,分析变量依赖关系。其中,多线程相关API可以包括线程相关函数,如pthread_create、pthread_mutex_lock等。
结合图6和图8,对图6所示的程序进行变量依赖分析,可获得如图8所示的主函数main(包括其函数以及指令)、第一线程thread1(包括其函数以及指令)和第二线程thread2(包括其函数以及指令)。
如此,对程序进行分解,可以梳理出第一线程的函数调用上下文和第二线程的函数调用上下文,可以实现基于线程调用上下文、函数调用上下文的线程分析方法。
步骤三,分析程序中的第一变量。
示例性地,分析程序中的一个或多个第一变量,并区分一个或多个第一变量中每个第一变量访问的线程调用上下文和函数调用上下文,第一变量可以为第一线程和第二线程都包括的变量,第一变量可以包括共享变量、全局变量等。如此,可以实现基于线程调用上下文、函数调用上下文的共享变量访问点识别方法。示例性地,可基于别名分析算法完成共享变量的搜索,以提高效率,可以采用上下文编码技术,分析程序中的共享变量,以提高计算精度。
结合图6和图8,对图6所示的程序进行共享变量分析,可获得如图8所示的变量搜索结果my_city->population:{line 17,24,31}、my_city->sync_flag:{line 18,23,30}。
步骤四,分析程序中的锁变量。
示例性地,分析程序中任意一条语句是否使用锁变量。分析第一线程和第二线程都使用到的一个或多个互斥锁变量,并区分一个或多个互斥锁变量中每个互斥锁变量的线程调用上下文和函数调用上下文,可以采用上下文编码技术,分析程序中的锁变量,以提高计算精度。
结合图6和图8,对图6所示的程序进行锁变量分析,由于图6所示的程序中不包括锁变量,因此,图8中不包括锁变量的分析结果。
步骤五,分析包括第一变量的程序基本块并行发生的可能性。
示例性地,可以采用静态向量时间算法,分析程序中的包括第一变量的每个程序基本块(basic block,BB)中的每条语句的并行发生(may happen in parallel,MHP)的可能。对包括第一变量的读操作或写操作的程序基本块进行向量时间戳的构造,模拟这个程序基本块在该程序或该线程内执行的相对逻辑时间,可以实现以程序基本块为粒度,基于全程序线程调用上下文、函数调用上下文的并行分析方法。
结合图6和图8,对图6所示的程序进行MHP分析,可获得如图8所示的第一线程thread1的向量时间戳构造结果和第二线程thread2的向量时间戳构造结果,thread1的语句执行时间和thread2的语句执行时间存在重合,thread1的语句和thread2的语句可能并发执行。
图9为本申请实施例提供的程序的分析示例图二。图9为对图6所示的程序(如文件名为weekConsistency.c)的分析结果。
如图9所示,注释1:ST是Static Thread的缩写(Note1:ST means StaticThread)。注释2:精确地记录每个变量的调用字符串(Note2:We precisely record thecall string of each variable)。注释3:A(b)->C(d)等调用字符串的类型中,A表示调用方,b标识调用指令(note3:The style of call sting is A(b)->C(d)->....A meanscaller,b meas call instruction)。注释4:A(b)->C表示A采用指令b调用C(Note4:A(b)->C means that A calls C by instruction b)。
采用上述步骤五对图6所示的程序(如文件名为weekConsistency.c)的进行分析,可获得如下信息:对组包括:对全局变量population的写操作在thread1中(源码weekConsistency.c中的17行),对全局变量population的读操作在thread2中(源码weekConsistency.c中的24行);对组包括:对全局变量syrn_flag的写操作thread1中(源码weekConsistency.c中的18行),对全局变量syrn_flag的读操作在thread2中(源码weekConsistency.c中的23行)。其中,thread1的第17行语句与thread1的第18行语句之间的时间间隔,和thread2的第23行语句和thread2的第24行语句之间的时间间隔存在重合,thread1的语句和thread2的语句可能并发执行。
需要说明的是,上述步骤三至步骤五是对单个线程的内部进行分析的方法,可对程序中包括的第一线程和第二线程分别执行上述步骤三至步骤五。本申请不对具体实施方式进行限定,例如,可先对第一线程执行上述步骤三至步骤五,后再对第二线程执行上述步骤三至步骤五。或者,对第一线程执行上述步骤三后,对第二线程执行上述步骤三,类似地,对第一线程执行上述步骤四后,对第二线程执行上述步骤四。
需要说明的是,本申请实施例不对上述步骤三至步骤五的先后顺序进行限定。结合图3中(b),步骤三、步骤四和步骤五之间可以是并列的关系,步骤三、步骤四和步骤五的执行顺序,不影响各个步骤的对应的执行结果。
步骤六,对程序进行内存读写模式查询。
关于步骤六的具体实现方式,可参照上述采用内存读写模式查询规则,对程序的第一线程中的第一操作、第一线程中的第二操作、程序的第二线程中的第三操作和第二线程中的第四操作进行检测,获得程序运行在弱内存环境上的结果的具体阐述,此处不再赘述。
示例性地,结合图3中(b),可根据上述步骤三至步骤五的结果,对程序中的语句进行查询获得第一语句,该第一语句包括对同一个变量的读写操作、且该变量的读写操作未被写保护、且该变量的读写操作可能同时被第一线程和第二线程并发执行、且该变量的读写操作可能构成竞争关系。
结合图6和图8,对图6所示的程序进行内存读写模式查询,由于图6所示的程序中不包括危险语句,因此,图8中所示的结果可以包括正确。
步骤七,获得程序运行在弱内存环境上的结果。
示例性地,将第一语句标记为危险语句,危险语句也可称为危险代码,可根据危险代码和该危险代码中包括的操作类型确定修改建议。其中,修改建议可以包括危险代码的代码行号和/或程序文件名,操作类型可以包括写操作或读操作。
步骤八,向用户提供结果。
可选地,结果可以包括:正确。或者,结果可以包括错误和/或修改建议。关于S706的具体实现方式可参照上述相关阐述,此处不再赘述。
可选地,可以将危险代码的字体颜色转换为与程序中其它代码的字体颜色不同的颜色,并通过显示界面向用户显示。
图10为本申请实施例提供的程序检测方法的应用示意图二。如图10所示,假设用户提供的程序A为运行在强内存模型平台的程序,本申请实施例提供的程序检测装置采用本申请实施例提供的程序检测方法对程序A进行检测,获得结果为错误。用户手动或程序检测装置自动对程序A进行修改,如通过***内存屏蔽指令修复存在的问题,经编译器编译后,获得的程序A’可以正确运行在弱内存模型平台,可以提高程序检测以及修改的效率。
基于图3中(a)或图3中(b)所示的程序检测方法,可以静态分析用户提供的程序中对全局变量的读写操作以及相对时序关系,获得程序运行在弱内存环境上是否会存在问题,还可以获得存在问题代码的位置,并可帮助用户进行自动或手动修复,可以提高程序的检测以及修复效率。
以上结合图1-图10详细说明了本申请实施例提供的程序检测方法。以下结合图11-图12详细说明本申请实施例提供的程序检测装置。
图11是本申请实施例提供的程序检测装置的结构示意图一。该程序检测装置可适用于执行图1所示的程序检测方法中程序检测装置的功能。为了便于说明,图11仅示出了该程序检测装置的主要部件。
如图11所示,程序检测装置1100包括:接收单元1101和获取单元1102。其中,接收单元1101,用于接收用户提供的程序。获取单元1102,用于根据查询参数和程序,获得程序运行在弱内存环境上的结果。其中,查询参数用于指示程序的两条操作发生重排序的最大间隔。
在一种可能的设计方式中,获取单元1102,还用于根据查询参数、程序的第一线程中的第一操作与第一线程中的第二操作的间隔、和程序的第二线程中的第三操作与第二线程中的第四操作的间隔,获得程序运行在弱内存环境上的结果。可选地,第一操作和第三操作为对同一变量进行的一对读写操作,第二操作和第四操作为对同一变量进行的一对读写操作,第一操作和第二操作为对不同变量进行的操作,第三操作和第四操作为对不同变量进行的操作。
在一种可能的设计方式中,获取单元1102,还用于采用内存读写模式查询规则,对程序的第一线程中的第一操作、第一线程中的第二操作、程序的第二线程中的第三操作和第二线程中的第四操作进行检测,获得程序运行在弱内存环境上的结果。
可选地,内存读写模式查询规则可以是根据查询参数确定的,内存读写模式查询规则可用于确定第一线程和第二线程在时间上是否发生重叠。
在一种可能的设计方式中,内存读写模式查询规则可以包括读读、写写乱序查询规则,和/或,读写、写读乱序查询规则。
在一种可能的设计方式中,查询参数可以是用户确定的,查询参数可以包括片内写操作延迟。
可选地,查询参数还可以包括跨NUMA写操作延迟和/或跨NUMA读操作延迟。如此,可以根据用户输入的查询参数进行内存读写模式查询。
在一种可能的设计方式中,获取单元1102,还用于获取查询参数对应的数值。其中,查询参数对应的数值可以包括片内写操作延迟对应的值。
可选地,查询参数对应的数值还可以包括跨NUMA写操作延迟对应的值和/或跨NUMA读操作延迟对应的值。
可选地,弱内存环境可以为非统一内存访问架构NUMA的运行设备对应的运行环境。
在一种可能的设计方式中,程序检测装置1100还可以包括:输出单元1103。输出单元1103,用于向用户提供结果。其中,结果可以包括修改建议。
可选地,结果可以包括:正确。或者,结果可以包括错误和/或修改建议。
可选地,修改建议可以包括需要修改的代码的位置信息,例如代码行号和/或程序文件名,修改建议可用于程序检测装置修改程序或用于用户手动修改程序。
在一种可能的设计方式中,获取单元1102,还用于响应于用户的确定指示,根据修改建议修改程序。
在一种可能的设计方式中,程序检测装置1100可放置于云服务器中。
需要说明的是,接收单元1101和输出单元1103可以分开设置,也可以集成在一个模块中,即收发模块(图11中未示出)。本申请对于接收单元1101和输出单元1103的具体实现方式,不做具体限定。
可选地,程序检测装置1100还可以包括存储模块(图11中未示出),该存储模块存储有程序或指令。当获取单元1102执行该程序或指令时,使得程序检测装置1100可以执行图1所示的程序检测方法中程序检测装置的功能。
需要说明的是,程序检测装置1100可以是计算机设备、服务器或云服务器,也可以是可设置于计算机设备、服务器或云服务器的芯片(***)或其他部件或组件,本申请对此不做限定。
此外,图11所示的程序检测装置1100的技术效果可以参考图1所示的程序检测方法的技术效果,此处不再赘述。
图12是本申请实施例提供的程序检测装置的结构示意图二。该程序检测装置可以是计算机设备、服务器或云服务器,也可以是可设置于计算机设备、服务器或云服务器的芯片(***)或其他部件或组件,本申请对此不做限定。
如图12所示,程序检测装置1200可以包括处理器1201。可选地,程序检测装置1200还可以包括存储器1202和收发器1203。其中,处理器1201与存储器1202和收发器1203耦合,如可以通过通信总线连接。
下面结合图12对程序检测装置1200的各个构成部件进行具体的介绍:
处理器1201是程序检测装置1200的控制中心,可以是一个处理器,也可以是多个处理元件的统称。例如,处理器1201是一个或多个中央处理器(central processing unit,CPU),也可以是特定集成电路(application specific integrated circuit,ASIC),或者是被配置成实施本申请实施例的一个或多个集成电路,例如:一个或多个微处理器(digital signal processor,DSP),或,一个或者多个现场可编程门阵列(fieldprogrammable gate array,FPGA)。
其中,处理器1201可以通过运行或执行存储在存储器1202内的软件程序,以及调用存储在存储器1202内的数据,执行程序检测装置1200的各种功能。
在具体的实现中,作为一种实施例,处理器1201可以包括一个或多个CPU,例如图12中所示的CPU0和CPU1。
在具体实现中,作为一种实施例,程序检测装置1200也可以包括多个处理器,例如图12中所示的处理器1201和处理器1204。这些处理器中的每一个可以是一个单核处理器(single-CPU),也可以是一个多核处理器(multi-CPU)。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。
存储器1202可以是只读存储器(read-only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electrically erasable programmable read-only memory,EEPROM)、只读光盘(compactdisc read-only memory,CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器1202可以和处理器1201集成在一起,也可以独立存在,并通过程序检测装置1200的输入/输出端口(图12中未示出)与处理器1201耦合,本申请实施例对此不作具体限定。
其中,所述存储器1202用于存储执行本申请方案的软件程序,并由处理器1201来控制执行。上述具体实现方式可以参考上述方法实施例,此处不再赘述。
收发器1203,用于与其他设备之间的通信。此外,收发器1203可以包括接收器和发送器(图12中未单独示出)。其中,接收器用于实现接收功能,发送器用于实现发送功能。收发器1203可以和处理器1201集成在一起,也可以独立存在,并通过程序检测装置1200的输入/输出端口(图12中未示出)与处理器1201耦合,本申请实施例对此不作具体限定。
需要说明的是,图12中示出的程序检测装置1200的结构并不构成对该程序检测装置的限定,实际的程序检测装置可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
本申请实施例提供一种芯片***。该芯片***包括处理器和输入/输出端口,所述处理器用于实现上述方法实施例所涉及的处理功能,所述输入/输出端口用于实现上述方法实施例所涉及的收发功能。
在一种可能的设计中,该芯片***还包括存储器,该存储器用于存储实现上述方法实施例所涉及的功能的程序指令和数据。
该芯片***,可以由芯片构成,也可以包含芯片和其他分立器件。
本申请实施例提供一种计算机可读存储介质,包括:该计算机可读存储介质中存储有计算机指令;当该计算机指令在计算机上运行时,使得该计算机执行上述方法实施例所述的程序检测方法。
本申请实施例提供了一种包含指令的计算机程序产品,包括计算机程序或指令,当该计算机程序或指令在计算机上运行时,使得该计算机执行上述方法实施例所述的程序检测方法。
应理解,在本申请实施例中的处理器可以是中央处理单元(central processingunit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(digital signalprocessor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现成可编程门阵列(field programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
还应理解,本申请实施例中的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的随机存取存储器(random accessmemory,RAM)可用,例如静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data rate SDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(direct rambus RAM,DR RAM)。
上述实施例,可以全部或部分地通过软件、硬件(如电路)、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令或计算机程序。在计算机上加载或执行所述计算机指令或计算机程序时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质。半导体介质可以是固态硬盘。
应理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况,其中A,B可以是单数或者复数。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系,但也可能表示的是一种“和/或”的关系,具体可参考前后文进行理解。
本申请中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。
应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的***、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (19)
1.一种程序检测方法,其特征在于,包括:
接收用户提供的程序;
根据查询参数和所述程序,获得所述程序运行在弱内存环境上的结果;其中,所述查询参数用于指示所述程序的两条操作发生重排序的最大间隔。
2.根据权利要求1所述的程序检测方法,其特征在于,所述根据查询参数和所述程序,获得所述程序运行在弱内存环境上的结果,包括:
根据所述查询参数、所述程序的第一线程中的第一操作与所述第一线程中的第二操作的间隔、和所述程序的第二线程中的第三操作与所述第二线程中的第四操作的间隔,获得所述程序运行在所述弱内存环境上的结果;其中,所述第一操作和所述第三操作为对同一变量进行的一对读写操作,所述第二操作和所述第四操作为对同一变量进行的一对读写操作,所述第一操作和所述第二操作为对不同变量进行的操作,所述第三操作和所述第四操作为对不同变量进行的操作。
3.根据权利要求2所述的程序检测方法,其特征在于,还包括:
采用内存读写模式查询规则,对所述程序的第一线程中的第一操作、所述第一线程中的第二操作、所述程序的第二线程中的第三操作和所述第二线程中的第四操作进行检测,获得所述程序运行在所述弱内存环境上的结果。
4.根据权利要求3所述的程序检测方法,其特征在于,所述内存读写模式查询规则是根据所述查询参数确定的,所述内存读写模式查询规则用于确定所述第一线程和所述第二线程在时间上是否发生重叠。
5.根据权利要求1-4中任一项所述的程序检测方法,其特征在于,所述查询参数是所述用户确定的,所述查询参数包括片内写操作延迟。
6.根据权利要求1-5中任一项所述的程序检测方法,其特征在于,所述弱内存环境为非统一内存访问架构NUMA的运行设备对应的运行环境。
7.根据权利要求1-6中任一项所述的程序检测方法,其特征在于,还包括:
向所述用户提供所述结果,其中,所述结果包括修改建议。
8.根据权利要求7所述的程序检测方法,其特征在于,还包括:
响应于所述用户的确定指示,根据所述修改建议修改所述程序。
9.一种程序检测装置,其特征在于,包括:接收单元和获取单元;其中,
所述接收单元,用于接收用户提供的程序;
所述获取单元,用于根据查询参数和所述程序,获得所述程序运行在弱内存环境上的结果;其中,所述查询参数用于指示所述程序的两条操作发生重排序的最大间隔。
10.根据权利要求9所述的程序检测装置,其特征在于,
所述获取单元,还用于根据所述查询参数、所述程序的第一线程中的第一操作与所述第一线程中的第二操作的间隔、和所述程序的第二线程中的第三操作与所述第二线程中的第四操作的间隔,获得所述程序运行在所述弱内存环境上的结果;其中,所述第一操作和所述第三操作为对同一变量进行的一对读写操作,所述第二操作和所述第四操作为对同一变量进行的一对读写操作,所述第一操作和所述第二操作为对不同变量进行的操作,所述第三操作和所述第四操作为对不同变量进行的操作。
11.根据权利要求9所述的程序检测装置,其特征在于,
所述获取单元,还用于采用内存读写模式查询规则,对所述程序的第一线程中的第一操作、所述第一线程中的第二操作、所述程序的第二线程中的第三操作和所述第二线程中的第四操作进行检测,获得所述程序运行在所述弱内存环境上的结果。
12.根据权利要求11所述的程序检测装置,其特征在于,所述内存读写模式查询规则是根据所述查询参数确定的,所述内存读写模式查询规则用于确定所述第一线程和所述第二线程在时间上是否发生重叠。
13.根据权利要求9-12中任一项所述的程序检测装置,其特征在于,所述查询参数是所述用户确定的,所述查询参数包括片内写操作延迟。
14.根据权利要求9-13中任一项所述的程序检测装置,其特征在于,所述弱内存环境为非统一内存访问架构NUMA的运行设备对应的运行环境。
15.根据权利要求9-14中任一项所述的程序检测装置,其特征在于,还包括:输出单元;其中,
所述输出单元,用于向所述用户提供所述结果;其中,所述结果包括修改建议。
16.根据权利要求15所述的程序检测装置,其特征在于,
所述获取单元,还用于响应于所述用户的确定指示,根据所述修改建议修改所述程序。
17.根据权利要求9-16中任一项所述的程序检测装置,其特征在于,
所述程序检测装置放置于云服务器中。
18.一种程序检测装置,其特征在于,所述装置包括:处理器,所述处理器与存储器耦合;
所述存储器,用于存储计算机程序;
所述处理器,用于执行所述存储器中存储的所述计算机程序,以使得所述装置执行如权利要求1-8中任一项所述的程序检测方法。
19.一种计算机程序产品,其特征在于,所述计算机程序产品包括:计算机程序代码,当所述计算机程序代码在计算机上运行时,使得所述计算机执行如权利要求1-8中任一项所述的程序检测方法。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011608587.6A CN114691474A (zh) | 2020-12-29 | 2020-12-29 | 程序检测方法及装置 |
PCT/CN2021/123936 WO2022142595A1 (zh) | 2020-12-29 | 2021-10-14 | 程序检测方法及装置 |
EP21913340.2A EP4258121A4 (en) | 2020-12-29 | 2021-10-14 | PROGRAM DETECTION METHOD AND DEVICE |
US18/342,388 US20230367516A1 (en) | 2020-12-29 | 2023-06-27 | Program Detection Method and Apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011608587.6A CN114691474A (zh) | 2020-12-29 | 2020-12-29 | 程序检测方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114691474A true CN114691474A (zh) | 2022-07-01 |
Family
ID=82133018
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011608587.6A Pending CN114691474A (zh) | 2020-12-29 | 2020-12-29 | 程序检测方法及装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20230367516A1 (zh) |
EP (1) | EP4258121A4 (zh) |
CN (1) | CN114691474A (zh) |
WO (1) | WO2022142595A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115718622A (zh) * | 2022-11-25 | 2023-02-28 | 苏州睿芯通量科技有限公司 | 一种arm架构下的数据处理方法、装置及电子设备 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2240849B1 (en) * | 2008-02-06 | 2016-01-27 | Nxp B.V. | Data processing device and method for executing obfuscated programs |
US8909874B2 (en) * | 2012-02-13 | 2014-12-09 | International Business Machines Corporation | Memory reorder queue biasing preceding high latency operations |
CN104050043A (zh) * | 2014-06-17 | 2014-09-17 | 华为技术有限公司 | 基于共享缓存感知的虚拟机调度方法和装置 |
CN106201889A (zh) * | 2016-07-15 | 2016-12-07 | 国云科技股份有限公司 | 一种检查程序代码编写规范的***及其实现方法 |
CN107861830A (zh) * | 2017-12-01 | 2018-03-30 | 深圳乐信软件技术有限公司 | 应用程序崩溃的检测方法、装置、存储介质及移动终端 |
-
2020
- 2020-12-29 CN CN202011608587.6A patent/CN114691474A/zh active Pending
-
2021
- 2021-10-14 EP EP21913340.2A patent/EP4258121A4/en active Pending
- 2021-10-14 WO PCT/CN2021/123936 patent/WO2022142595A1/zh unknown
-
2023
- 2023-06-27 US US18/342,388 patent/US20230367516A1/en active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115718622A (zh) * | 2022-11-25 | 2023-02-28 | 苏州睿芯通量科技有限公司 | 一种arm架构下的数据处理方法、装置及电子设备 |
CN115718622B (zh) * | 2022-11-25 | 2023-10-13 | 苏州睿芯通量科技有限公司 | 一种arm架构下的数据处理方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
US20230367516A1 (en) | 2023-11-16 |
EP4258121A4 (en) | 2024-07-03 |
WO2022142595A1 (zh) | 2022-07-07 |
EP4258121A1 (en) | 2023-10-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7814378B2 (en) | Verification of memory consistency and transactional memory | |
US7779393B1 (en) | System and method for efficient verification of memory consistency model compliance | |
US10191836B2 (en) | Software watchpoints apparatus for variables stored in registers | |
Mador-Haim et al. | Generating litmus tests for contrasting memory consistency models | |
EP2485149A1 (en) | Symbolic execution and test generation for programs to be run on a graphic processor | |
US8397104B2 (en) | Creation of test plans | |
US8612944B2 (en) | Code evaluation for in-order processing | |
US20170010957A1 (en) | Method for Multithreaded Program Output Uniqueness Testing and Proof-Generation, Based on Program Constraint Construction | |
US20170220455A1 (en) | Test case generation using a constraint graph solver | |
US11789734B2 (en) | Padded vectorization with compile time known masks | |
US8359291B2 (en) | Architecture-aware field affinity estimation | |
US20140215483A1 (en) | Resource-usage totalizing method, and resource-usage totalizing device | |
US8392891B2 (en) | Technique for finding relaxed memory model vulnerabilities | |
US20140325489A1 (en) | Programmable symbolic execution based dynamic checker | |
US20230367516A1 (en) | Program Detection Method and Apparatus | |
US8412507B2 (en) | Testing the compliance of a design with the synchronization requirements of a memory model | |
US9158506B2 (en) | Loop abstraction for model checking | |
US11520682B2 (en) | Code coverage method for embedded system on chip | |
US10997060B2 (en) | Device, system, and method for detecting a defect in a computer program by generating and testing semantically equivalent computer program variants | |
CN115732025A (zh) | Ram访问冲突的验证方法及验证装置 | |
Garashchenko et al. | System of Combined Specialized Test Generators for the New Generation of VLIW DSP Processors with Elcore50 Architecture | |
Feljan et al. | The impact of intra-core and inter-core task communication on architectural analysis of multicore embedded systems | |
US11022649B2 (en) | Stabilised failure estimate in circuits | |
CN116643945B (zh) | 一种二级缓存的数据检测方法、***及计算机设备 | |
US20210232335A1 (en) | Inspection system, inspection method, and computer-readable recording medium recording inspection program |
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 |