管理并发谓词表达式的方法和装置的制造方法

文档序号:9355153阅读:341来源:国知局
管理并发谓词表达式的方法和装置的制造方法
【技术领域】
[0001]本公开内容大体上涉及多线程调试,并且更特别地涉及管理并发谓词表达式的方法和装置。
【背景技术】
[0002]近年来,多核处理器已经存在于电子设备市场中以提高计算机、平板电脑、移动电话和/或车辆计算机系统的性能。为了利用具有多个核和/或多个处理器的计算平台和/或设备,在这样的系统/设备上执行的代码需要增加(例如,最大化)允许每个可用核或处理器独立于任何其它核或处理器来执行的机会。一些代码开发者和/或软件工程师把多核/多处理器代码开发称为并行编程。
【附图说明】
[0003]图1说明具有两个线程的示例伪代码程序。
[0004]图2是用于在多线程程序中识别并发违例的示例并发谓词表达式运算符以及对应定义的表。
[0005]图3说明使用并发谓词表达式来识别并发违例的具有两个线程的示例伪代码程序。
[0006]图4是用于在多线程程序中管理并发谓词表达式并且识别并发违例的示例并发谓词表达式运行时系统的示意图。
[0007]图5是用于在多线程程序中管理对并发谓词表达式的监视的示例数据结构。
[0008]图6A、6B和7是表示可以被执行以管理并发谓词表达式的示例机器可读指令的流程图。
[0009]图8是示例处理器平台的框图,所述示例处理器平台可以执行图6A、6B和7的示例机器可读指令以实现图4的示例并发谓词表达式运行时系统和图5的示例数据结构。
【具体实施方式】
[0010]示例计算平台包含诸如微处理器之类的中央处理单元(CPU),其与计算平台的一个或更多个存储器通信并且执行由软件(代码)规定的指令以执行一个或更多个计算任务。一些示例计算平台和/或设备在同一计算机系统/设备中采用多个处理器(例如,CPU)。多个处理器中的每一个可以以独立于任何其它处理器的方式与存储器通信并且执行指令,从而当与仅具有单个处理器的计算平台/设备相比较时允许一个或更多个计算任务更快地被完成。一些示例处理器包含两个或更多个核,在这些核中每个核可以作为在单个物理处理器封装上所包含的单独的CPU进行操作,并且以独立于该处理器封装的其它核的方式执行指令。计算系统和/或设备可以采用多个处理器和/或多个核的任何组合以增加可用CPU的数目,从而当与单个CPU系统/设备相比较时提高系统/设备性能。
[0011]经由多个处理器芯片和/或经由具有多个核的一个或更多个处理器芯片而采用多个CPU的设备和/或平台架构在并行编程适当地管理每个处理器/核时促进提高的性能。为了简短起见以及如在此所使用的,核可以指代单独的集成电路封装中的多个处理器和/或在单个物理处理器封装之内所包含的具有两个或更多个核的处理器。也为了简短起见,设备、平台和平台架构在此将可互换地被提到。虽然并行编程可以促进单独的核的同时使用,但是这样的并行编程可能导致非确定性问题。当程序针对在单独的核上的两个或更多个执行(例如,两个或更多个线程)具有同样的输入、但是结果不同时,该程序是非确定性的。在当在不同步的情况下两个或更多个线程访问相同存储单元并且所述访问中的至少一个是写操作时并行程序返回非确定性结果的时候,这样的状况特别明显。例如,当两个或更多个单独的线程在基本上相同的时间执行并且使用存储在共享存储器中的相同变量的时候。例如,第一线程可以计算变量的第一值。然而,由于第二线程正独立于第一线程执行,所以变量值可能随时被第二线程访问和处理(例如,改变)。因而,第一线程可以计算例如变量的为O的值、将结果存储在存储器中,并且然后第二线程可能将该变量作为除法运算的分母处理,从而引起平台的除以零的错误。
[0012]上面的示例识别许多状况之一,其中多线程程序的适当操作要求特定线程的一个或更多个操作相对于一个或更多个其它线程的操作按特定的次序来执行。例如,访问相同存储单元的两个或更多个示例线程可以依靠共享存储单元中存在的特定值以便防止平台的错误行为(例如,不正确的值、除以零错误等等)。与相对于单独线程指令的线程指令有关的错误在此被称为并发错误和/或并发违例。修复并发错误典型地包括当两个或更多个线程在平台上执行时重新产生对并发错误有责任的漏洞(bug)。在串行程序(S卩,仅使用一个线程执行的程序)的上下文中进行调试可以是相对直接的,因为顺序地步进通过代码行的过程最终揭示漏洞。另一方面,顺序地步进通过并行程序(其中两个或更多个线程是有效的)可能或者不能揭示基于第二或其它线程的漏洞。第一线程与第二线程之间的代码执行次序可能基于任何数目的因素而不同,所述因素诸如例如是线程初始化时间的相对差异和与可能引起不同执行持续时间的第一和/或第二线程相关联的不同输入。为了确保确定性并行程序执行,应用了同步技术的使用。例如,同步可以经由锁、事务、监视器、屏障(barriers)、互斥器等被采用。然而,当未使用同步时和/或当不正确地/不适当地使用同步时,可能导致非确定性。不是在每次执行程序(例如,代码块)时都出现的漏洞被称为非确定性的。
[0013]图1说明示例多线程应用100(以伪代码写的程序),其中并发地执行的线程可能导致平台故障。在图1的所说明示例中,第一线程102包括六(6)行代码(即山-M5P L7-L9),以及第二线程104包括三(3)行代码(S卩,L4-L6)。如果第一线程102首先开始执行,在行L1获取锁以防止一个或更多个其它线程(例如,第二线程104)在行1^访问变量y。在L 3执行解锁操作以把对变量I的访问让给一个或更多个其它线程之前,在行1^计算变量y的值。然而,如果示例第一线程102计算出变量y的为零的值,则示例第二线程104将在行1^5招致除以零错误。
[0014]上面的示例除以零并发漏洞特别难以检测,因为执行第一线程102和第二线程104的示例平台不可能总是以第一线程102的行L1开始。在一些示例中,第二线程104可以在第一线程102的任何代码之前开始执行,这在变量y的值为非零时不会导致除以零错误。在其它示例中,在第二线程104的行L4开始执行之前,所有的行L ^!^和L 7-L9n:以在第一线程102中执行,在该情况下除以零错误将不出现,因为当第一线程检测到零值时变量y的值被重新设定为I (见行L7-L9)。第一线程102和第二线程104可能不相对于彼此以同步方式执行,这可能导致在一些实例中但是不在其它实例中出现并发漏洞。在又一示例中,第一线程102和第二线程104可以相对于彼此以同步方式进行操作,其中calculateO总是返回O或者从不返回0,因此漏洞将总是出现或从不出现。
[0015]第一线程102与第二线程104之间的示例同步方式可以基于对应计算平台的同质和/或非瞬时条件(例如,所有平台输入都是静态的)而出现。在第一线程102和第二线程104在没有检测到和/或以别的方式观测到(多个)平台错误的情况下以相对同步的方式进行操作的这样的状况下,虚假的安全感可能导致不稳定代码的发布和/或部署。在其它示例中,与平台相关联的瞬时条件和/或输入、第一线程102和/或第二线程104可能引起并发漏洞的间歇性出现。
[0016]为了对多线程代码进行故障检修(调试),在此公开了将一个或更多个表达式插入到代码中以测试并发违例的示例方法、装置、系统和/或制造品。如在此所公开的,将并发谓词表达式(CPEs)插入到正在经受评估的代码(例如,第一线程102和第二线程104)中以检测足以重新产生并发错误(漏洞)的条件。在一些状况下,在违例/漏洞(例如并发漏洞)出现之前必须满足特定条件的次序(并发),按该次序特定条件在此有时被称为先行发生关系(happens-before relat1nships)。换言之,对于要出现并发漏洞必须满足来自第一线程(例如,第一线程102)和第二线程(例如第二线程104)的条件的时间次序。所要求的条件被称为谓词,所述谓词是返回真或假的布尔条件。CPE的表达式反映一组有序的谓词。
[0017]示例CPE可以由编译器转换为可执行代码和/或指令以控制多线程程序的线程的调度和/或定位出现违例的代码的部分。在图2的所说明示例中,示出了具有不同运算符的几个示例CPE定义200。第一示例表达式202 (pl〈p2)包括第一谓词pl、第二谓词p2和运算符“〈”。第一示例表达式202说明谓词pi必须在p2满足之前被满足。换言之,与第一谓词Pl相关联的布尔条件(例如,变量y==0)必须在时间上早于与第二谓词p2相关联的布尔条件。另外,在此所公开的示例方法、装置、系统和/或制造品将不注意P2的状态除非并且直到满足pi。
[0018]第二示例表达式204 (pi <& p2)也包括第一谓词pi和第二谓词P2,以及包括运算符第二示例表达式204说明谓词pi必须在p2满足之前被满足,并且必须保持为真直到满足P2的时刻。第三示例表达式
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1