CN115599534A - 数据竞争检测方法、***、集群及介质 - Google Patents
数据竞争检测方法、***、集群及介质 Download PDFInfo
- Publication number
- CN115599534A CN115599534A CN202110774706.3A CN202110774706A CN115599534A CN 115599534 A CN115599534 A CN 115599534A CN 202110774706 A CN202110774706 A CN 202110774706A CN 115599534 A CN115599534 A CN 115599534A
- Authority
- CN
- China
- Prior art keywords
- api
- memory access
- undefined
- instruction
- data
- 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
- 238000001514 detection method Methods 0.000 title claims abstract description 276
- 238000000034 method Methods 0.000 claims description 42
- 230000003068 static effect Effects 0.000 claims description 17
- 238000005516 engineering process Methods 0.000 abstract description 4
- 230000006870 function Effects 0.000 description 12
- 238000010586 diagram Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 238000011161 development Methods 0.000 description 7
- 239000008186 active pharmaceutical agent Substances 0.000 description 6
- 238000004590 computer program Methods 0.000 description 6
- 239000003607 modifier Substances 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 101100379633 Xenopus laevis arg2-a gene Proteins 0.000 description 4
- 101150088826 arg1 gene Proteins 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 101150026173 ARG2 gene Proteins 0.000 description 2
- 101100005166 Hypocrea virens cpa1 gene Proteins 0.000 description 2
- 101100379634 Xenopus laevis arg2-b gene Proteins 0.000 description 2
- 239000000872 buffer Substances 0.000 description 2
- 238000002372 labelling Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 238000002054 transplantation Methods 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000004904 shortening Methods 0.000 description 1
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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请提供了一种数据竞争检测方法,包括如下步骤:对于包括对未定义的应用程序接口API的调用指令的候选指令对,通过获取未定义的API的内存访问属性,然后基于候选指令对中的指令的操作数和上述内存访问属性进行数据竞争检测,获得用于表征候选指令对中的指令是否产生数据竞争的检测结果。如此解决了相关技术难以对未定义的API进行数据竞争检测的问题,提高了数据竞争检测的准确度,降低了误报率。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据竞争检测方法、***、集群以及计算机可读存储介质、计算机程序产品。
背景技术
随着计算机技术的不断发展,逐渐产生了许多新的硬件架构。为了兼容新的硬件架构,许多开发者需要将应用由一种硬件架构移植到另一种硬件架构。不同硬件架构的内存访问模式可以是不同的。例如,一些硬件架构的内存访问模式为弱内存序(weakly-ordered memory)模式。弱内存序模式是指在独立的一个线程内,任意对内存的读写操作都可以与其它读写操作交换顺序,而不改变线程的行为。又例如,另一些硬件架构的内存访问模式为内存一致性(total store ordering,TSO)模式。TSO模式是指中央处理器(centralprocessing unit,CPU)中所有的核(core)有且仅有一个全局对内存写操作的顺序。
开发者将应用移植到具有不同内存访问模式的硬件架构时,会产生数据竞争(data race)等致命错误。数据竞争是指在多线程程序中,两个或两个以上的线程并发访问相同内存,这些线程未使用互斥锁控制对内存的访问,而是至少有一个线程处于等待状态。为此,业界提出了数据竞争检测方案,以提前检出数据竞争。
目前,业界主要通过静态检测工具进行数据竞争检测。其中,静态检测工具依赖于编译器产生的中间表示(intermediate representation,IR)文件。IR文件包括指令(instruction)。静态检测工具可以建立应用的进程间执行流图,通过别名分析(aliasanalysis)找到线程共同访问相同内存的变量集合,然后基于数据竞争条件判断是否产生数据竞争,确定产生数据竞争的指令。然而,静态分析工具是基于载入/存储(load/store)等显式内存访问指令进行分析,对于未定义的应用程序接口(application programminginterface,API),由于缺乏显式内存访问指令,难以实现数据竞争分析。
发明内容
本申请提供了一种数据竞争检测方法,该方法通过获取未定义的API的内存访问属性,然后基于该内存访问属性对候选指令对是否产生数据竞争进行检测,由此解决了相关技术中难以对未定义的API进行数据竞争检测的问题,提升了数据竞争检测的准确度,降低了数据竞争检测的误报率。本申请还提供了上述方法对应的***、集群、计算机可读存储介质以及计算机程序产品。
第一方面,本申请提供了一种数据竞争检测方法。该方法可以由数据竞争检测***执行。其中,数据竞争检测***可以是软件***,该软件***可以部署在计算设备集群中,计算设备集群运行该软件***,从而执行上述数据竞争检测方法。在一些可能的实现方式中,数据竞争检测***也可以是硬件***,该硬件***具有数据竞争检测的功能。
具体地,数据竞争检测***获取候选指令对,该候选指令对中的指令来自应用的并发线程,例如是来自并发线程编译得到的IR文件。候选指令对中的指令包括对未定义的API的调用指令。考虑到调用指令不是显式内存访问指令,数据竞争检测***可以根据上述未定义的API获得内存访问属性,然后根据该候选指令对中的指令的操作数以及上述内存访问属性进行检测,获得检测结果。该检测结果用于表征上述候选指令对中的指令是否产生数据竞争。
该方法中,数据竞争检测***通过获取未定义的API的内存访问属性,然后基于该内存访问属性对候选指令对是否产生数据竞争进行检测,而不局限于对显式内存访问指令进行数据竞争检测,由此解决了相关技术中难以对未定义的API进行数据竞争检测的问题。该方法提升了数据竞争检测的准确度,降低了数据竞争检测的误报率。
在一些可能的实现方式中,内存访问属性可以通过查询API模型库获得。其中,API模型库是对API的内存访问模型进行管理的数据库。API模型库可以包括至少一个已知API的内存访问模型。每个已知API的内存访问模型包括该已知API的内存访问属性。已知API是指已知上述内存访问模型或者内存访问属性的API。当未定义的API在API模型库中命中时,数据竞争检测***可以从API模型库获得该未定义的API的内存访问属性。
其中,内存访问属性用于描述内存访问行为的类型。例如,内存访问属性可以包括载入(load)、存储(store)、载入并存储(load-store)、无操作(non operation,NOP)和可变参标记中的一种或多种。其中,载入表征读取对象值或者读取指针所指对象值,存储表征对指针所指对象写入值,载入并存储表征同时具备载入属性和存储属性,例如可以表示对指针所指对象既有读取操作,也有写入操作,无操作表征不涉及内存的操作(例如格式化字符串等操作)。可变参标记可以通过如下符号“…”表示,可变参标记可以与载入、存储或者载入并存储等属性之一进行组合,以统一表示所有可变参(例如是数目不定的参数)的属性。
该方法中,通过预先构建API模型库,并通过查询API模型库的方式,可以提高获得内存访问属性的效率,而且查询操作无需消耗大量的计算资源,降低了成本。
在一些可能的实现方式中,未定义的API的内存访问属性包括该未定义的API的参数的内存访问属性。如此,可以将数据竞争检测的粒度由函数级别缩小到参数级别,通过对参数的内存访问属性分别进行匹配,可以进一步提高数据竞争检测的准确度,降低了数据竞争检测的误报率。
在一些可能的实现方式中,API模型库可以被承载在配置文件或者是直接被硬编码。其中,硬编码是指将数据(例如是API模型库)直接嵌入到程序或其他可执行对象的源代码中。
当API模型库被承载在配置文件中时,数据竞争检测***还可以先加载配置文件,以加载API模型库至内存。如此可以实现数据竞争检测逻辑与API模型库分离,从而实现独立维护数据竞争检测逻辑与API模型库,提高了数据竞争检测***的便捷性和可用性。
当API模型库被硬编码时,API模型库可以在数据竞争检测***启动时被加载至内存。与通过加载配置文件的方式加载API模型库相比,该方法可以缩短加载时间,提高数据竞争检测的效率。
在一些可能的实现方式中,所述未定义的API的内存访问属性根据所述未定义的API的声明确定。其中,未定义的API的声明用于向编译器通知该未定义的API的名称、类型以及参数(例如是形式参数,简称形参)的类型、个数和顺序,以便于调用该未定义的API时,可以基于该声明进行检查。例如检查未定义的API的名称、类型以及参数的类型、个数、顺序是否正确。
在具体实现时,数据竞争检测***可以直接根据未定义的API的声明确定该未定义的API的内存访问属性,也可以先查询API模型库,当API模型库中未查找到上述未定义的API的内存访问模型时,再根据未定义的API的声明确定未定义的API的内存访问属性。
该方法中,通过API的声明也能快速获得内存访问属性,提高了获得内存访问属性的效率,进而提高了数据竞争检测的效率。
在一些可能的实现方式中,未定义的API的声明表征未定义的API不可修改时,数据竞争检测***可以确定所述内存访问属性为载入,否则确定所述内存访问属性为载入并存储。其中,载入表征读取对象值或者读取指针所指对象值,载入并存储表征同时具备载入属性和存储属性,例如可以表示对指针所指对象既有读取操作,也有写入操作。
在一些示例中,未定义的API的声明中API被设定修饰词如const修饰,则数据竞争检测***可以确定整个未定义的API的内存访问属性为载入,该未定义的API的所有参数的内存访问属性为载入。当未定义的API的声明中参数被设定修饰词如const修饰时,确定该参数的内存访问属性为载入。当未定义的API的声明中参数被其他修饰词修饰时,确定该参数的内存访问属性为载入并存储。
与基于保守策略确定未定义的API的内存访问属性相比,该方法可以准确识别未定义的API的内存访问属性,即准确识别未定义的API对变量(例如为指针所指对象)的读写操作,因而可以提高数据竞争检测的准确度,降低误报率。
在一些可能的实现方式中,候选指令对中的指令的操作数指示访问相同的全局变量,且该候选指令对中的指令的内存访问属性满足数据竞争条件时,检测结果为该候选指令对中的指令产生数据竞争。
其中,数据竞争条件可以是访问相同的全局变量的候选指令对中至少有一个指令指示执行存储操作,即指示对变量(例如为指针所指对象)的写操作。其中,候选指令对中至少有一个指令指示执行存储操作可以包括以下多种情况。第一种情况,一个指令指示执行存储操作,另一个指令指示执行载入操作。第二种情况,两个指令均指示执行存储操作。第三种情况,一个指令指示执行存储操作,另一个指令指示无操作(具体是无内存访问操作)。
需要说明,以上三种情况仅仅是符合数据竞争条件的候选指令对的一些示例,在本申请实施例其他可能的实现方式中,还可以包括其他符合数据竞争条件的候选指令对。
在该方法中,数据竞争检测***在候选指令对访问相同的全局变量时,通过简单的比较操作,具体是比较候选指令对中的指令的内存访问属性是否满足数据竞争条件,即可实现数据竞争检测,降低了检测的复杂度,提高了检测的效率。
在一些可能的实现方式中,数据竞争检测***还可以向用户呈现提示信息。该提示信息用于提示所述候选指令对中的指令产生数据竞争。其中,提示信息可以是检测报告。该检测报告具体可以包括存在数据竞争的指令对。进一步地,检测报告还可以包括误报的指令对,例如是静态检测工具的检测结果为存在数据竞争,而数据竞争检测***的检测结果为不存在数据竞争的指令对。当然,提示信息也可以是其他用于提示候选指令对中的指令产生数据竞争的信息,例如提示信息可以是注解或注释等。
其中,注解或注释等信息可以帮助用户(例如是开发者)快速定位产生数据竞争的候选指令对,以便于用户可以基于该注解或注释信息尽快完善代码。检测报告则可以为用户提供详细的、完整的检测信息,为用户开发应用或移植应用提供帮助。
在一些可能的实现方式中,候选指令对包括至少一个对未定义的API的调用指令。例如,候选指令对可以包括一个对未定义的API的调用指令和一个显式内存访问指令(例如是载入指令或存储指令)。又例如,候选指令对可以包括两个对未定义的API的调用指令。也即候选指令对可以是如下模式的指令对中的一种或多种:存储和调用模式的指令对、载入和调用模式的指令对以及调用和调用模式的指令对。
该方法中,数据竞争检测***可以实现对不同模式的指令对进行数据竞争检测,具有较高的实用性。
在一些可能的实现方式中,候选指令对为静态检测工具检测的、存在数据竞争风险的指令对。也即,数据竞争检测***可以和静态检测工具结合使用,例如作为静态检测工具的辅助工具,将静态检测工具检测的、存在数据竞争风险的指令对作为候选指令对,对该候选指令对进行进一步地精准检测。如此,一方面可以提高数据竞争检测准确度,另一方面可以减少数据竞争检测***需要检测的指令对的数量,降低数据竞争检测***的处理压力。
在一些可能的实现方式中,候选指令对也可以是数据竞争检测***直接根据应用的并发线程确定的。数据竞争检测***可以不与静态检测工具结合,而是直接独立地进行数据竞争检测,简化了数据竞争检测的流程,降低了数据竞争检测的复杂度。
在一些可能的实现方式中,所述应用可以为由第一硬件架构移植到第二硬件架构的应用,所述第一硬件架构和所述第二硬件架构的内存访问模式属于不同类型。其中,第一硬件架构例如可以是x86架构,x86架构是指基于8086且向后兼容的中央处理器指令集架构。第二硬件架构例如可以是高级精简指令集机器(Advanced RISC Machine,ARM)架构。
通过该方法,可以实现移植应用的数据竞争检测,为应用移植提供帮助。
在另一些可能的实现方式中,所述应用也可以为用户针对新的硬件架构开发的应用。如此,该方法还可以实现针对新的硬件架构开发的应用的数据竞争检测,为应用开发提供帮助。
第二方面,本申请提供了一种数据竞争检测***。该***包括:
指令获取单元,用于获取候选指令对,所述候选指令对中的指令来自应用的并发线程,所述候选指令对中的指令包括对未定义的应用程序编程接口API的调用指令;
属性确定单元,用于根据所述未定义的API获得所述未定义的API的内存访问属性;
检测单元,用于根据所述候选指令对中的指令的操作数以及所述内存访问属性进行检测,获得检测结果,所述检测结果用于表征所述候选指令对中的指令是否产生数据竞争。
在一些可能的实现方式中,所述未定义的API的内存访问属性通过查找API模型库获得,所述API模型库包括至少一个已知API的内存访问模型,每个已知API的内存访问模型包括所述已知API的内存访问属性。
在一些可能的实现方式中,所述未定义的API的内存访问属性包括所述未定义的API的参数的内存访问属性。
在一些可能的实现方式中,所述API模型库被承载在配置文件或者被硬编码。
在一些可能的实现方式中,所述内存访问属性根据所述未定义的API的声明确定。
在一些可能的实现方式中,所述未定义的API的声明表征所述未定义的API不可修改时,确定所述未定义的API的内存访问属性为载入,否则确定所述未定义的API的内存访问属性为载入并存储。
在一些可能的实现方式中,所述候选指令对中的指令的操作数指示访问相同的全局变量,且所述候选指令对中的指令的内存访问属性满足数据竞争条件时,所述检测结果为所述候选指令对中的指令产生数据竞争。
在一些可能的实现方式中,所述***还包括:
提示单元,用于向用户呈现提示信息,所述提示信息用于提示所述候选指令对中的指令产生数据竞争。
在一些可能的实现方式中,所述候选指令对包括如下模式的指令对中的一种或多种:存储和调用模式的指令对、载入和调用模式的指令对以及调用和调用模式的指令对。
第三方面,本申请提供一种计算设备集群,所述计算设备集群包括至少一台计算设备。计算设备包括处理器和存储器。所述处理器、所述存储器进行相互的通信。所述处理器用于执行所述存储器中存储的指令,以使得计算设备集群执行如第一方面或第一方面的任一种实现方式中的数据竞争检测方法。
第四方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,所述指令指示设备执行上述第一方面或第一方面的任一种实现方式所述的数据竞争检测方法。
第五方面,本申请提供了一种包含指令的计算机程序产品,当其在设备上运行时,使得设备执行上述第一方面或第一方面的任一种实现方式所述的数据竞争检测方法。
本申请在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。
附图说明
为了更清楚地说明本申请实施例的技术方法,下面将对实施例中所需使用的附图作以简单地介绍。
图1为本申请实施例提供的一种数据竞争检测方法的***架构图;
图2为本申请实施例提供的一种计算设备集群的结构示意图;
图3为本申请实施例提供的一种数据竞争检测方法的流程图;
图4为本申请实施例提供的一种数据竞争检测方法的流程示意图;
图5为本申请实施例提供的一种数据竞争检测***的结构示意图。
具体实施方式
本申请实施例中的术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。
首先对本申请实施例中所涉及到的一些技术术语进行介绍。
应用移植,具体是指将应用由一种硬件架构迁移到另一种硬件架构,从而使得该应用在上述另一种硬件架构上正常运行。其中,硬件架构包括计算机等硬件设备的处理器架构。根据处理器架构对应的指令集可以将硬件架构分为不同类型。不同类型的硬件架构可以具有不同的内存访问模式。
内存访问模式用于定义硬件对存储器的访问所遵循的约束条件。具体地,为了提高硬件载入和存储性能,硬件设计人员通常在硬件中增加存储缓冲区,为存储指令提供缓冲。该存储缓冲区的存在,使得存储指令与之后的载入指令可以发生乱序。当CPU中所有的核有且仅有一个全局对内存写操作的顺序,即内存有一个全局的存储顺序,则内存访问模式为TSO一致性模式。相对地,硬件不保证程序指令顺序与硬件全局顺序一致,则内存访问模式为弱内存序模式。
并发编程,是指将任务进行高效拆分,然后分别进行编程,以使得应用能够并发执行,从而缩短应用的运行时间的编程方式。并发编程的一种实现方式是拆分任务,并将拆分后的任务分配给多个线程,这种方式也称作多线程并发编程。基于多线程并发编程方式所得的应用程序为多线程程序。该多线程程序运行时可以产生并发线程。并发线程是指在一个时间段内同时执行的多个线程。需要说明,一个时间段可以包括至少一个单位时间,该单位时间例如可以是CPU的一个时间片。
针对静态检测工具难以对并发线程中未定义的API进行数据竞争检测的问题,本申请实施例提供了一种数据竞争检测方法。该方法可以由数据竞争检测***执行。其中,数据竞争检测***可以是软件***,该软件***可以部署在计算设备集群中,计算设备集群运行该软件***,从而执行上述数据竞争检测方法。在一些可能的实现方式中,数据竞争检测***也可以是硬件***,该硬件***具有数据竞争检测的功能。为了便于描述,下文以数据竞争检测***为软件***进行示例说明。
具体地,数据竞争检测***获取候选指令对,例如根据应用的并发线程获取候选指令对,该候选指令对中的指令包括对未定义的API的调用指令,然后数据竞争检测***根据未定义的API获得内存访问属性,接着数据竞争检测***可以根据候选指令对中的指令的操作数以及上述内存访问属性进行检测,获得用于表征候选指令对中的指令是否产生数据竞争的检测结果。
该方法中,数据竞争检测***通过获取未定义的API的内存访问属性,例如通过查找预先建立的API模型库,以获得未定义的API的内存访问模型,从而获得未定义的API的内存访问属性,然后基于该内存访问属性对候选指令对是否产生数据竞争进行检测,由此解决了相关技术中难以对未定义的API进行数据竞争检测的问题。该方法提升了数据竞争检测的准确度,降低了数据竞争检测的误报率。
本申请实施例的数据竞争检测***可以独立运行,也可以作为程序代码检查的插件或功能模块集成于第三方开发工具,以用于对应用的并发线程进行数据竞争检测。其中,第三方开发工具例如可以是集成开发环境(integrated development environment,IDE)。
数据竞争检测***可以应用于不同场景对是否产生数据竞争进行检测。例如,将应用由一种硬件架构移植到另一种硬件架构时,数据竞争检测***可以根据移植到上述另一种硬件架构的应用的并发线程,获取候选指令对,并对候选指令对中的指令进行数据竞争检测。又例如,在开发针对某种硬件架构(例如是新的硬件架构)的应用时,数据竞争检测***可以根据应用的并发线程,获取候选指令对,并对候选指令对中的指令进行数据竞争检测。数据竞争检测***进行数据竞争检测所得的检测结果可以为用户(例如是开发者)移植应用或者开发应用提供帮助。
为了使得本申请的技术方案更加清楚、易于理解,下面结合附图对本申请实施例提供的数据竞争检测方法的***架构进行示例说明。
参见图1所示的数据竞争检测方法的***架构图,开发者可以通过IDE10移植应用12。其中,IDE10包括数据竞争检测***100和编译器1000。应用12包括并发线程,例如是线程1和线程2。
具体地,IDE10中的编译器1000可以对线程1的代码块和线程2的代码块进行编译,得到IR文件。该IR文件包括多个指令。IDE10中的数据竞争检测***100可以获取候选指令对。在一些实施例中,数据竞争检测***100可以从IR文件中获取候选指令对,该候选指令对包括与线程1的代码块对应的第一指令和与线程2的代码块对应的第二指令。候选指令对中的指令(例如第一指令和/或第二指令)包括对未定义的API的调用指令。
其中,API可以是函数对外暴露的一种接口。当API用于表征函数时,API可以通过函数名进行调用(call)。进一步地,函数包括参数时,API可以通过函数名和参数名进行调用。未定义的API具体是指未在源文件中定义的API。未定义的API可以是第三方库中的API,也可以是***库中的API,或者是自定义库中的API。
然后,数据竞争检测***100可以根据上述未定义的API获得内存访问属性。其中,内存访问属性用于描述内存访问行为的类型。例如,内存访问属性可以包括载入(load)、存储(store)、载入并存储(load-store)、无操作(non operation,NOP)和可变参标记中的一种或多种。其中,load表征读取对象值或者读取指针所指对象值,store表征对指针所指对象写入值,load-store表征同时具备load属性和store属性,例如表征对指针所指对象既有读取操作,也有写入操作,NOP表征不涉及内存的操作(例如格式化字符串等操作)。可变参标记可以通过如下符号“…”表示,可变参标记可以与load、store或者load-store属性之一进行组合,以统一表示所有可变参(例如是数目不定的参数)的属性。
在具体实现时,数据竞争检测***100可以查询预先建立的API模型库。API模型库是对已知API的内存访问模型进行管理的数据库。API模型库包括至少一个已知API的内存访问模型。每个已知API的内存访问模型包括该已知API的内存访问属性。其中,一个已知API的内存访问属性可以包括该已知API的参数的内存访问属性。例如,一个包括n个参数的已知API的内存访问模型可以表示为API name(参数1的内存访问属性,参数2的内存访问属性,…,参数n的内存访问属性)。
当API模型库中包括上述未定义的API的内存访问模型时,数据竞争检测***100可以根据该内存访问模型获得未定义的API的内存访问属性。当API模型库中不包括上述未定义的API的内存访问模型时,数据竞争检测***100可以根据该未定义的API的声明获得该未定义的API的内存访问属性。其中,未定义的API的声明用于向编译器通知该未定义的API的名称、类型以及参数(例如是形式参数,简称形参)的类型、个数和顺序,以便于调用该未定义的API时,可以基于该声明进行检查。当该未定义的API的声明表征该未定义的API不可修改时,确定内存访问属性为load,否则确定内存访问属性为load-store。
例如未定义的API的声明中API被const修饰,则可以确定整个未定义的API的内存访问属性为load,该未定义的API的所有参数的内存访问属性为load。当未定义的API的声明中参数被const修饰时,确定该参数的内存访问属性为load,当未定义的API的声明中参数被其他修饰词修饰时,确定该参数的内存访问属性为load-store。
接着数据竞争检测***100根据候选指令对中的指令的操作数以及内存访问属性进行检测,获得检测结果。该检测结果用于表征候选指令对中的指令是否产生数据竞争。其中,数据竞争检测***100可以根据候选指令对中的指令的操作数,确定指令对中指令的操作数是否指向相同内存,若是,则可以根据内存访问属性确定候选指令对是否满足数据竞争条件。当候选指令对满足数据竞争条件时,表明数据指令对中的指令产生数据竞争。其中,数据竞争条件可以是候选指令对中至少有一个指令执行store操作。例如,数据竞争条件可以为,候选指令对中的第一指令对一个内存中的全局变量执行load操作,候选指令对中的第二指令对相同内存中的全局变量执行store操作。
以上对数据竞争检测***100进行数据竞争检测的过程进行了详细说明。接下来,对数据竞争检测***100的部署方式进行详细说明。
在一些可能的实现方式中,数据竞争检测***100可以部署在云环境中,具体为云环境上的一个或多个计算设备(例如:中心服务器)。其中,云环境指示云服务提供商拥有的,用于提供计算、存储、通信资源的中心计算设备集群。数据竞争检测***100也可以部署在边缘环境中,具体为边缘环境中的一个或多个计算设备(边缘计算设备)上,边缘计算设备可以为服务器、计算盒子等。数据竞争检测***100还可以部署在终端设备,该终端设备包括但不限于台式机、笔记本电脑或者智能手机。
进一步地,数据竞争检测***100可以包括多个部分,例如包括多个子***或者多个功能单元。数据竞争检测***100的各个部分可以分布式地部署在不同环境中。例如,可以在云环境、边缘环境、终端设备中的三个环境,或其中任意两个环境上分别部署数据竞争检测***100的一部分。
以数据竞争检测***100部署在云环境中进行示例说明。在一些实施例中,云服务提供商可以直接提供软件即服务(software as a service,SaaS)产品。具体地,云服务提供商可以在中心计算设备集群中部署数据竞争检测***100,以向用户提供数据竞争检测的云服务。在另一些实施例中,云服务提供商可以提供平台即服务(platform as aservice,PaaS)产品。具体地,云服务提供商可以提供平台,然后由用户自行在平台上部署数据竞争检测***100,进而向用户提供数据竞争检测的云服务。
类似地,云服务提供商可以提供基础设施即服务(infrastructure as aservice,IaaS)产品。具体地,云服务提供商可以提供基础设施,用户基于该基础设施部署平台,例如是开发平台,然后部署数据竞争检测***100,从而向用户提供数据竞争检测的云服务。云服务提供商可以提供基础设施即服务(infrastructure as a service,IaaS)产品。
当云服务提供商以SaaS形式提供云服务时,还可以将数据竞争检测的云服务作为云集成开发环境(cloud integrated development environment,cloud IDE)的增值服务。用户在获得cloud IDE后,还可以购买或租赁数据竞争检测的云服务,以用于对应用12的并发线程进行数据竞争检测。
考虑到代码安全性,数据竞争检测***100的开发者或所有者也可以发布数据竞争检测***100的软件包。用户可以在自有设备如自有数据中心的服务器或者终端设备上执行上述软件包,以安装数据竞争检测***100。当数据竞争检测***100安装成功时,用户可以运行数据竞争检测***100以执行数据竞争检测方法。需要说明的是,数据竞争检测***100的开发者或所有者发布的软件包还可以是免安装的软件包,如此,用户可以直接运行数据竞争检测***100以执行数据竞争检测方法。
以上对数据竞争检测***100的部署方式进行了详细说明,下面将结合附图对用于部署数据竞争检测***100的计算设备集群进行示例说明。
参见图2所示的计算设备集群的结构示意图,计算设备集群20包括至少一台计算设备200。图2以计算设备集群20包括多台计算设备200进行示例说明。计算设备200包括总线201、处理器202、通信接口203和存储器204。处理器202、存储器204和通信接口203之间通过总线201通信。
总线201可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图2中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
处理器202可以为中央处理器(central processing unit,CPU)、图形处理器(graphics processing unit,GPU)、微处理器(micro processor,MP)或者数字信号处理器(digital signal processor,DSP)等处理器中的任意一种或多种。
通信接口203用于与外部通信。例如,通信接口203可以用于获取候选指令对,或者是输出对候选指令对进行数据竞争检测所得的检测结果。
存储器204可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,RAM)。存储器204还可以包括非易失性存储器(non-volatilememory),例如只读存储器(read-only memory,ROM),快闪存储器,硬盘驱动器(hard diskdrive,HDD)或固态驱动器(solid state drive,SSD)。
存储器204中存储有可执行代码,处理器202执行该可执行代码以执行前述数据竞争检测方法的步骤。其中,数据竞争检测***100部署在包括多台计算设备200的计算设备集群20中时,每台计算设备200的处理器202可以执行存储器204中存储的可执行代码,以执行数据竞争检测方法的部分步骤。
接下来,从数据竞争检测***100的角度,结合附图对本申请实施例提供的数据竞争检测方法进行详细说明。
参见图3所示的数据竞争检测方法的流程图,该方法包括:
S302:数据竞争检测***100获取候选指令对。
候选指令对是指待进行数据竞争检测的指令对。候选指令对中的指令来自应用的并发线程。例如,数据竞争检测***100可以从编译器1000对应用的并发线程进行编译所得IR文件中,获得候选指令对。
候选指令对中的指令包括对未定义的API的调用指令。未定义的API可以是第三方库中的API,也可以是***库中的API,或者是自定义库中的API。候选指令对中对未定义的API的调用指令可以为一个或多个。在一些实施例中,候选指令对可以包括一个载入指令和一个调用指令,即候选指令对可以为载入和调用(load-call)模式的指令对。在另一些实施例中,候选指令对可以包括一个存储指令和一个调用指令,即候选指令对可以为存储和调用(store-call)模式的指令对。当然,候选指令对可以包括两个调用指令,即候选指令对可以为调用和调用(call-call)模式的指令对。
其中,应用可以是用户开发或移植的应用。在一些实施例中,数据竞争检测***100可以在用户(例如开发者)开发针对某种硬件架构(例如是新的硬件架构)的应用时,获取应用的并发线程编译所得的IR文件中的候选指令对。在另一些实施例中,数据竞争检测***100可以在用户将应用由第一硬件架构移植到第二硬件架构时,获取应用的并发线程编译所得的IR文件中的候选指令对。
在一些可能的实现方式中,该数据竞争检测***100可以与静态检测工具结合使用。例如,静态检测工具可以先对应用的并发线程进行数据竞争检测,得到存在数据竞争风险的指令对。然后数据竞争检测***100可以将静态检测工具检测的、存在数据竞争风险的指令对作为候选指令对,对该候选指令对进行进一步地精准检测。如此,一方面可以提高数据竞争检测准确度,另一方面可以减少数据竞争检测***100需要检测的指令对的数量,降低数据竞争检测***100的处理压力。
在另一些可能的实现方式中,数据竞争检测***100也可以独立使用。例如,数据竞争检测***100可以直接从应用的并发线程编译所得的IR文件中获取候选指令对,以进行数据竞争检测。
S304:数据竞争检测***100从API模型库中查找未定义的API的内存访问模型。若查找成功,则执行S306;若查找失败,则执行S308。
API模型库是对已知API的内存访问模型进行管理的数据库。API模型库中包括至少一个已知API的内存访问模型。每个已知API的内存访问模型包括所述已知API的内存访问属性。已知API包括参数时,已知API的内存访问属性可以包括该已知API的参数的内存访问属性。其中,已知API的内存访问模型可以预先构建,例如可以根据已知API的定义,对已知API的读写操作进行建模得到。进一步地,已知API包括参数时,已知API的内存访问模型还可以根据已知API的定义,对已知API的参数的读写操作进行建模得到。
为了便于理解,本申请实施例还提供了一个已知API以及该已知API的内存访问模型进行示例说明。在该示例中,已知API为***库中的API,即***API,该***API具体可以表示为Type SystemAPI0(Type arg0,Type arg1,Type arg2)。其中,Type为修饰符,用于修饰已知API或已知API的参数的类型,agr为argument的简写,用于表示参数。对该已知API的参数的读写操作进行建模可以得到该已知API的内存访问模型,具体可以表示为SystemAPI0(load,NOP,store)。其中,load为arg0的内存访问属性,NOP为arg1的内存访问属性,store为arg2的内存访问属性。
API模型库可以被承载在配置文件中,或者是直接被硬编码。其中,硬编码是指将数据(例如是API模型库)直接嵌入到程序或其他可执行对象的源代码中。当API模型库被承载在配置文件中时,数据竞争检测***100还可以先加载配置文件,以加载API模型库至内存。当API模型库被硬编码时,API模型库可以在数据竞争检测***100启动时被加载至内存。
数据竞争检测***100可以从API模型库中查找候选指令对中未定义的API的内存访问模型。当查找成功时,数据竞争检测***100可以执行S306;当查找失败时,数据竞争检测***100可以执行S308。
S306:数据竞争检测***100获取未定义的API的内存访问模型,未定义的API的内存访问模型包括未定义的API的内存访问属性。
具体地,数据竞争检测***100查找成功,则表明API模型库中包括上述未定义的API的内存访问模型,数据竞争检测***100可以从API模型库获取未定义的API的内存访问模型。
数据竞争检测***100可以将未定义的API的内存访问模型与未定义的API和/或未定义的API的参数建立关联,从而实现对未定义的API和/或未定义的API的参数的属性标注。以SystemAPI0进行示例说明,数据竞争检测***100可以将SystemAPI0的内存访问模型SystemAPI0(load,NOP,store)与SystemAPI0的参数arg0、arg1、arg2建立关联,从而标注arg0的内存访问属性为load,arg1的内存访问属性为NOP,arg2的内存访问属性为store。
S308:数据竞争检测***100根据未定义的API的声明,获得未定义的API的内存访问属性。
具体地,数据竞争检测***100查找失败,则表明API模型库中不包括上述未定义的API的内存访问模型,数据竞争检测***100可以通过其他方式获得未定义的API的内存访问属性。
其中,数据竞争检测***100可以根据未定义的API的声明,获得该未定义的API和/或该未定义的API的参数的内存访问属性。具体地,数据竞争检测***100可以确定未定义的AP和/或该未定义的API的参数是否被声明为不可修改(例如未定义的API和/或未定义的API的参数被const修饰时,则认为不可修改),若是,则将被声明为不可修改的API和/或API的参数的内存访问属性确定为load,若否,则将未被声明为不可修改的API和/或API的参数的内存访问属性确定为load-store。
上述S304至S308为数据竞争检测***100根据未定义的API获得内存访问属性的一些实现方式,在本申请实施例其他可能的实现方式中,也可以通过其他方式获得未定义的API和/或未定义的API的参数的内存访问属性。
S310:数据竞争检测***100根据候选指令对中指令的操作数以及内存访问属性进行检测,获得检测结果。
具体地,候选指令对中的指令的操作数指示访问相同的全局变量,且所述候选指令对中的指令的内存访问属性满足数据竞争条件时,检测结果为候选指令对中的指令产生数据竞争。
数据竞争条件可以是访问相同全局变量的候选指令对中至少有一个指令指示执行store操作。基于此,数据竞争条件例如可以是候选指令对中一个指令包括的API和/或API的参数的内存访问属性为load,另一个指令包括的API和/或API的参数的内存访问属性为store。当数据竞争检测***100获得的内存访问属性满足上述数据竞争条件时,则检测结果为候选指令对中的指令产生数据竞争。当数据竞争检测***100获得的内存访问属性不满足上述数据竞争条件时,则检测结果为候选指令对中的指令不产生数据竞争。
在一些可能的实现方式中,数据竞争检测***100可以先根据候选指令对中指令的操作数确定候选指令对中的指令是否访问相同内存中的相同全局变量。若候选指令对中的指令访问相同内存中的相同全局变量,则数据竞争检测***100可以根据内存访问属性进行判断,例如是判断内存访问属性是否满足数据竞争条件,从而获得检测结果。若候选指令对中的指令不是访问相同内存中的相同全局变量,例如访问局部变量,或者是访问不同全局变量,则可以结束当前流程,获得候选指令对中的指令不产生数据竞争的检测结果。
其中,指针所指对象是否指向相同内存中的全局变量可以通过别名分析(aliasanalysis)实现。具体地,数据竞争检测***100可以通过别名分析中的流敏感分析、流不敏感分析、上下文敏感分析、上下文不敏感分析等技术,判断候选指令对中的指令的操作数所表示的指针所指对象是否指向相同的全局内存。
在一些可能的实现方式中,数据竞争检测***100还可以根据检测结果输出检测报告。该检测报告具体可以包括存在数据竞争的指令对。进一步地,检测报告还可以包括误报的指令对,例如是静态检测工具的检测结果为存在数据竞争,而数据竞争检测***100的检测结果为不存在数据竞争的指令对。
数据竞争检测***100可以向用户呈现上述检测报告,以对用户进行提示。需要说明的是,检测报告仅仅是数据竞争检测***100向用户呈现的提示信息的一种具体实现,在本申请实施例其他可能的实现方式中,提示信息还可以是其他用于提示候选指令对中的指令产生数据竞争的信息,例如提示信息可以是注解或注释等。
基于上述内容描述,本申请实施例提供了一种数据竞争检测方法。该方法中,数据竞争检测***100可以根据候选指令对中对未定义的API的调用指令获取内存访问属性,例如是根据API模型库获得内存访问属性,然后基于候选指令对中的指令的操作数以及上述内存访问属性进行数据竞争检测,由此解决了相关技术中难以对包括未定义的API的候选指令对进行数据竞争检测的问题。而且,该方法可以将数据竞争检测的粒度由函数级别缩小到参数级别,对store-call、load-call和call-call等模式下的候选指令对采用参数属性全匹配算法,具体是对候选指令对中API的全部参数进行属性匹配,从而提高数据竞争检测的准确度,降低了数据竞争检测的误报率。
此外,上述API模型被承载在配置文件中时,可以实现数据竞争检测逻辑与API模型库分离,如此可以实现独立维护数据竞争检测逻辑与API模型库,提高了数据竞争检测***100的便捷性和可用性。
图3所示实施例对数据竞争检测方法的具体实现进行了详细说明,接下来,结合一个具体示例对数据竞争检测过程进行介绍。
参见图4所示的数据竞争检测的流程示意图,在该示例中,应用包括并发线程,具体为线程1和线程2。对线程1的代码块和线程2的代码块编译所得的IR文件包括与线程1对应的load指令和与线程2对应的call指令。数据竞争检测***100可以提取call指令调用的未定义的API,获得该未定义的API的声明。
本实施例假定call指令调用的未定义的API是名称为sscanf的API。数据竞争检测***100可以查询API模型库。当API模型库中包括sscanf的内存访问模型时,数据竞争检测***100可以从API模型库中获得该sscanf的内存访问模型。数据竞争检测***100可以将该内存访问模型和sscanf的参数建立关联,从而对sscanf的参数进行属性标注。
在该示例中,call指令调用的sscanf的参数的内存访问属性如下所示:
%22-load;
%23-NOP;
%6-store;
%7-store;
%8-store;
%9-store;
其中,百分数为指令的操作数,用于表示指针所指对象。load、NOP或者store等为内存访问属性。
类似地,load指令中参数的内存访问属性如下所示:
145%-load;
数据竞争检测***100可以将候选指令对中一个指令的操作数%145分别与候选指令对中另一个指令的操作数%22、%23、%6、%7、%8、%9分别进行别名分析,以确定是否指向相同内存中的相同全局变量。
本实施例假定%145与%22指向相同内存中的相同全局变量,则数据竞争检测***100可以进一步判断内存访问属性是否满足数据竞争条件,例如是否满足一个指令中API对应的参数的内存访问属性为load,另一个指令中API对应的参数的内存访问属性为store。在该示例中,%145表征的参数和%22表征的参数的内存访问属性不满足数据竞争条件,二者不会产生数据竞争。
进一步地,数据竞争检测***100可以基于上述方法对剩余的参数进行检测。该实施例中,由于sscanf函数的后续参数如%23表征的参数的内存访问属性为NOP,而%6、%7、%8、%9表征的参数的内存访问属性是store,但是%6、%7、%8、%9指向局部变量,均不符合数据竞争条件。
基于此,数据竞争检测***100可以确定候选指令对中的指令未产生数据竞争。
上文结合图1至图4对本申请实施例提供的数据竞争检测方法进行了详细介绍,下面将结合附图对本申请实施例提供的***进行介绍。
参见图5所示的数据竞争检测***100的结构示意图,该***100包括:
指令获取单元502,用于获取候选指令对,所述候选指令对中的指令来自应用的并发线程,所述候选指令对中的指令包括对未定义的应用程序编程接口API的调用指令;
属性确定单元504,用于根据所述未定义的API获得所述未定义的API的内存访问属性;
检测单元506,用于根据所述候选指令对中的指令的操作数以及所述内存访问属性进行检测,获得检测结果,所述检测结果用于表征所述候选指令对中的指令是否产生数据竞争。
在一些可能的实现方式中,所述未定义的API的内存访问属性通过查找API模型库获得,所述API模型库包括至少一个已知API的内存访问模型,每个已知API的内存访问模型包括所述已知API的内存访问属性。
在一些可能的实现方式中,所述未定义的API的内存访问属性包括所述未定义的API的参数的内存访问属性。
在一些可能的实现方式中,所述API模型库被承载在配置文件或者被硬编码。
在一些可能的实现方式中,所述未定义的API的内存访问属性根据所述未定义的API的声明确定。
在一些可能的实现方式中,所述未定义的API的声明表征所述未定义的API不可修改时,确定所述未定义的API的内存访问属性为载入,否则确定所述未定义的API的内存访问属性为载入并存储。
在一些可能的实现方式中,所述候选指令对中的指令的操作数指示访问相同的全局变量,且所述候选指令对中的指令的内存访问属性满足数据竞争条件时,所述检测结果为所述候选指令对中的指令产生数据竞争。
在一些可能的实现方式中,所述***100还包括:
提示单元,用于向用户呈现提示信息,所述提示信息用于提示所述候选指令对中的指令产生数据竞争。
在一些可能的实现方式中,所述候选指令对包括如下模式的指令对中的一种或多种:存储和调用模式的指令对、载入和调用模式的指令对以及调用和调用模式的指令对。
根据本申请实施例的数据竞争检测***100可对应于执行本申请实施例中描述的方法,并且数据竞争检测***100的各个模块/单元的上述和其它操作和/或功能分别为了实现图3所示实施例中的各个方法的相应流程,为了简洁,在此不再赘述。
本申请实施例还提供了一种计算机可读存储介质。所述计算机可读存储介质可以是计算设备能够存储的任何可用介质或者是包含一个或多个可用介质的数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘)等。该计算机可读存储介质包括指令,所述指令指示计算设备执行上述应用于数据竞争检测***100的数据竞争检测方法。
本申请实施例还提供了一种计算机程序产品。所述计算机程序产品包括一个或多个计算机指令。在计算设备上加载和执行所述计算机指令时,全部或部分地产生按照本申请实施例所述的流程或功能。
所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机或数据中心进行传输。
所述计算机程序产品可以为一个软件安装包,在需要使用前述数据竞争检测方法的任一方法的情况下,可以下载该计算机程序产品并在计算设备上执行该计算机程序产品。
上述各个附图对应的流程或结构的描述各有侧重,某个流程或结构中没有详述的部分,可以参见其他流程或结构的相关描述。
Claims (24)
1.一种数据竞争检测方法,其特征在于,所述方法包括:
获取候选指令对,所述候选指令对中的指令来自应用的并发线程,所述候选指令对中的指令包括对未定义的应用程序编程接口API的调用指令;
根据所述未定义的API获得所述未定义的API的内存访问属性;
根据所述候选指令对中的指令的操作数以及所述内存访问属性进行检测,获得检测结果,所述检测结果用于表征所述候选指令对中的指令是否产生数据竞争。
2.根据权利要求1所述的方法,其特征在于,所述未定义的API的内存访问属性通过查询API模型库获得,所述API模型库包括至少一个已知API的内存访问模型,每个已知API的内存访问模型包括所述已知API的内存访问属性。
3.根据权利要求2所述的方法,其特征在于,所述未定义的API的内存访问属性包括所述未定义的API的参数的内存访问属性。
4.根据权利要求2或3所述的方法,其特征在于,所述API模型库被承载在配置文件或者被硬编码。
5.根据权利要求1所述的方法,其特征在于,所述未定义的API的内存访问属性根据所述未定义的API的声明确定。
6.根据权利要求5所述的方法,其特征在于,所述未定义的API的声明表征所述未定义的API不可修改时,确定所述未定义的API的内存访问属性为载入,否则确定所述未定义的API的内存访问属性为载入并存储。
7.根据权利要求1至6任一项所述的方法,其特征在于,所述候选指令对中的指令的操作数指示访问相同的全局变量,且所述候选指令对中的指令的内存访问属性满足数据竞争条件时,所述检测结果为所述候选指令对中的指令产生数据竞争。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
向用户呈现提示信息,所述提示信息用于提示所述候选指令对中的指令产生数据竞争。
9.根据权利要求1至8任一项所述的方法,其特征在于,所述候选指令对包括如下模式的指令对中的一种或多种:存储和调用模式的指令对、载入和调用模式的指令对、以及调用和调用模式的指令对。
10.根据权利要求1至9任一项所述的方法,其特征在于,所述候选指令对为静态检测工具检测的、存在数据竞争风险的指令对。
11.根据权利要求1至10任一项所述的方法,其特征在于,所述应用为由第一硬件架构移植到第二硬件架构的应用,所述第一硬件架构和所述第二硬件架构的内存访问模式属于不同类型。
12.一种数据竞争检测***,其特征在于,所述***包括:
指令获取单元,用于获取候选指令对,所述候选指令对中的指令来自应用的并发线程,所述候选指令对中的指令包括对未定义的应用程序编程接口API的调用指令;
属性确定单元,用于根据所述未定义的API获得所述未定义的API的内存访问属性;
检测单元,用于根据所述候选指令对中的指令的操作数以及所述内存访问属性进行检测,获得检测结果,所述检测结果用于表征所述候选指令对中的指令是否产生数据竞争。
13.根据权利要求12所述的***,其特征在于,所述未定义的API的内存访问属性通过查找API模型库获得,所述API模型库包括至少一个已知API的内存访问模型,每个已知API的内存访问模型包括所述已知API的内存访问属性。
14.根据权利要求13所述的***,其特征在于,所述未定义的API的内存访问属性包括所述未定义的API的参数的内存访问属性。
15.根据权利要求13或14所述的***,其特征在于,所述API模型库被承载在配置文件或者被硬编码。
16.根据权利要求12所述的***,其特征在于,所述未定义的API的内存访问属性根据所述未定义的API的声明确定。
17.根据权利要求16所述的***,其特征在于,所述未定义的API的声明表征所述未定义的API不可修改时,确定所述未定义的API的内存访问属性为载入,否则确定所述未定义的API的内存访问属性为载入并存储。
18.根据权利要求12至17任一项所述的***,其特征在于,所述候选指令对中的指令的操作数指示访问相同的全局变量,且所述候选指令对中的指令的内存访问属性满足数据竞争条件时,所述检测结果为所述候选指令对中的指令产生数据竞争。
19.根据权利要求18所述的***,其特征在于,所述***还包括:
提示单元,用于向用户呈现提示信息,所述提示信息用于提示所述候选指令对中的指令产生数据竞争。
20.根据权利要求12至19任一项所述的***,其特征在于,所述候选指令对包括如下模式的指令对中的一种或多种:存储和调用模式的指令对、载入和调用模式的指令对或者调用和调用模式的指令对。
21.根据权利要求12至20任一项所述的***,其特征在于,所述候选指令对为静态检测工具检测的、存在数据竞争风险的指令对。
22.根据权利要求12至21任一项所述的***,其特征在于,所述应用为由第一硬件架构移植到第二硬件架构的应用,所述第一硬件架构和所述第二硬件架构的内存访问模式属于不同类型。
23.一种计算设备集群,其特征在于,所述计算设备集群包括至少一台计算设备,所述计算设备包括处理器和存储器,所述存储器中存储有计算机可读指令,所述处理器执行所述计算机可读指令,以使得所述计算设备集群执行如权利要求1至11中任一项所述的数据竞争检测方法。
24.一种计算机可读存储介质,其特征在于,包括计算机可读指令,当所述计算机可读指令在计算机上运行时,使得所述计算机执行如权利要求1至11中任一项所述的数据竞争检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110774706.3A CN115599534A (zh) | 2021-07-08 | 2021-07-08 | 数据竞争检测方法、***、集群及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110774706.3A CN115599534A (zh) | 2021-07-08 | 2021-07-08 | 数据竞争检测方法、***、集群及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115599534A true CN115599534A (zh) | 2023-01-13 |
Family
ID=84840349
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110774706.3A Pending CN115599534A (zh) | 2021-07-08 | 2021-07-08 | 数据竞争检测方法、***、集群及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115599534A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116028118A (zh) * | 2023-01-31 | 2023-04-28 | 南京砺算科技有限公司 | 保障数据一致性的指令执行方法及图形处理器、介质 |
-
2021
- 2021-07-08 CN CN202110774706.3A patent/CN115599534A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116028118A (zh) * | 2023-01-31 | 2023-04-28 | 南京砺算科技有限公司 | 保障数据一致性的指令执行方法及图形处理器、介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102163501B1 (ko) | 애플리케이션 내의 대역외 프레임워크 라이브러리 | |
CN108027722B (zh) | 在编译和部署中动态更新应用 | |
US8347272B2 (en) | Call graph dependency extraction by static source code analysis | |
US10152309B2 (en) | Cross-library framework architecture feature sets | |
US10241784B2 (en) | Hierarchical directives-based management of runtime behaviors | |
US8522218B2 (en) | Cross-module inlining candidate identification | |
US10261889B2 (en) | Techniques for edit-and-continue and enhanced optimized debugging on optimized code | |
EP3123315B1 (en) | Hierarchical directives-based management of runtime behaviors | |
JP5893038B2 (ja) | ユーザ定義型のコンパイル時境界検査 | |
US9817643B2 (en) | Incremental interprocedural dataflow analysis during compilation | |
US8843920B2 (en) | Systems and methods for deferring software implementation decisions until load time | |
JP2014529832A (ja) | 変換コンテンツ・アウェア・データー・ソース管理 | |
US9715440B2 (en) | Test scope determination based on code change(s) | |
CN107463485B (zh) | 基于方法栈的日志获取方法、装置和终端 | |
JP6385471B2 (ja) | 移行および遠隔ランタイム統合 | |
CN115599534A (zh) | 数据竞争检测方法、***、集群及介质 | |
JP7410269B2 (ja) | テスト・ベクタを使用した高水準コンストラクトの最適化の自動検証 | |
US11573777B2 (en) | Method and apparatus for enabling autonomous acceleration of dataflow AI applications | |
KR20200139698A (ko) | 더 빠른 쇼트 서킷을 위한 복합 조건문 재정렬 | |
KR20180048518A (ko) | 패키지 파일에 대한 기능 확장 방법 및 시스템 | |
US20240160436A1 (en) | Software development tool installation and command routing | |
EP3164800B1 (en) | Bridging a module system and a non-module system |
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 |