程序的线程关系确定方法、设备及系统的制作方法

文档序号:6489721阅读:222来源:国知局
程序的线程关系确定方法、设备及系统的制作方法
【专利摘要】本发明提供一种程序的线程关系确定方法、设备及系统,包括:检测系统中的第一线程发生由第一处理器至第二处理器的迁移,第一线程为第一处理器执行的目标并行程序中的一个线程,迁移到第二处理器后的第一线程作为第二线程;确定第一线程和第二线程之间的序关系。从而实现对操作系统调度而引起的同一软件线程在不同处理器上迁移的确认,进而可以确定线程迁移前后的序关系,并提高了并行程序调试的准确性。
【专利说明】程序的线程关系确定方法、设备及系统
【技术领域】
[0001]本发明涉及信息【技术领域】,尤其涉及一种程序的线程关系确定方法、设备及系统。【背景技术】
[0002]随着科技的发展,片上多处理器逐渐成为了处理器设计的主流,同时并行编程的运用也越来越多。然而并行编成在带来了高效之外,还存在难以调试的问题,主要原因有:调试工作依赖于程序的重复执行,然而并行程序具有天然的不确定性(I/o、中断、DMA与访问内存冲突),导致并行程序多次执行的行为不一致,程序中的错误无法重现。这种在并发系统中的不确定性,使并行程序的调试变得非常复杂。为了解决并行程序难以重现的问题,比较直观的方法是记录下并行程序执行过程中所有的不确定性因素,当需要重现并行程序的执行时,重放出来。其中,该工作主要分为面向全系统的确定性记录与重放和面向用户层应用的确定性记录与重放。
[0003]现有技术中,根据缓存一致性协议的消息来建立优先(“happen-before”)关系,当处理器a收到来自处理器b的缓存一致性消息时,在处理器a的后继集合中b对应的位置写入I,在处理器b收到a的缓存一致性应答消息时,在处理器b的前驱集合中a对应的位置写入I,如此建立a —b的“happen-before”关系。
[0004]然而,现有技术仅能获取由缓存一致性消息而导致的访问内存冲突,从而导致对并行程序的调试不准确。

【发明内容】

[0005]本发明提供一种程序的线程关系确定方法、设备及系统,以提高并行程序调试的准确性。
[0006]第一个方面,本发明实施例提供一种程序的线程关系确定方法,包括:检测系统中的第一线程发生由第一处理器至第二处理器的迁移,第一线程为第一处理器执行的目标并行程序中的一个线程,迁移到所述第二处理器后的第一线程作为第二线程;确定所述第一线程和所述第二线程之间的序关系。
[0007]结合第一个方面,在第一种可能的实现方式中,所述检测系统中的第一线程发生由第一处理器至第二处理器的迁移,包括:检测所述第一线程发生挂起;记录所述第一处理器的处理器标识;当所述第一线程重新执行时,判断所述第一处理器的处理器标识与当前执行所述第一线程的处理器的处理器标识是否一致,若不一致,则确定第一线程发生迁移,且当前执行所述第一线程的处理器为所述第二处理器。
[0008]结合第一个方面或是第一个方面的第一种可能的实现方式,在第二种可能的实现方式中,所述检测系统中的第一线程发生由第一处理器至第二处理器的迁移之后,还包括:记录所述第一线程和所述第二线程之间的序关系。
[0009]结合第一个方面的第二种可能的实现方式,在第三种可能的实现方式中,所述检测所述第一线程发生挂起之后,还包括:确定所述第一线程与至少一个第三线程的序关系,所述第三线程为所述目标并行程序中除所述第一线程之外在所述第一处理器上执行的线程。
[0010]结合第一个方面的第三种可能的实现方式,在第四种可能的实现方式中,所述检测所述第一线程发生挂起之后,还包括:记录所述第一线程的序关系;记录所述第一线程与所述第一处理器的映射关系。
[0011]结合第一个方面、第一个方面的第一种可能的实现方式、第一个方面的第二种可能的实现方式、第一个方面的第三种可能的实现方式或者第一个方面的第四种可能的实现方式中的任意一种,在第五种可能的实现方式中,所述检测系统中的第一线程发生由第一处理器至第二处理器的迁移之前,还包括:判断所述第一处理器执行的并行程序的页表基址与设定的页表基址是否相同,若相同,则将所述并行程序作为所述目标程序。
[0012]结合第一个方面、第一个方面的第一种可能的实现方式、第一个方面的第二种可能的实现方式、第一个方面的第三种可能的实现方式、第一个方面的第四种的实现方式或者第一个方面的第五种的实现方式的任意一种,在第六种可能的实现方式中,还包括:从所述第一处理器获取所述目标并行程序的指令;接收系统中的第三处理器发送的缓存一致性消息,所述缓存一致性消息中携带所述第三处理器访问的内存地址;判断所述内存地址与所述指令所使用的数据地址是否相同,若相同,则确定所述指令对应的线程与所述缓存一致性消息对应的线程的序关系。
[0013]结合第一个方面的第六种可能的实现方式,在第七种可能的实现方式中,还包括:记录所述指令对应的线程与所述第一处理器的映射关系及所述指令对应的线程的序关系。
[0014]第二个方面,本发明实施例提供一种程序的线程关系确定设备,包括:检测模块,用于检测系统中的第一线程发生由第一处理器至第二处理器的迁移,第一线程为第一处理器执行的目标并行程序中的一个线程,迁移到所述第二处理器后的第一线程作为第二线程;确定模块,用于确定所述第一线程和所述第二线程之间的序关系。
[0015]结合第二个方面,在第一种可能的实现方式中,所述检测模块,包括:检测单元,用于检测所述第一线程发生挂起;软件线程控制单元,用于记录所述第一处理器的处理器标识;判断单元,用于当所述第一线程重新执行时,判断所述第一处理器的处理器标识与当前执行所述第一线程的处理器的处理器标识是否一致,若不一致,则确定当前执行所述第一线程的处理器为所述第二处理器。
[0016]结合第二个方面或是第二个方面的第一种可能的实现方式,在第二种可能的实现方式中,所述的设备,还包括:日志产生模块,用于记录所述第一线程和所述第二线程之间的序关系。
[0017]结合第二个方面的第二种可能的实现方式,在第三种可能的实现方式中,所述日志产生模块,还用于确定所述第一线程与至少一个第三线程的序关系,所述第三线程为所述目标并行程序中除所述第一线程之外在所述第一处理器上执行的线程。
[0018]结合第二个方面的第三种可能的实现方式,在第四种可能的实现方式中,所述日志产生模块,还用于记录所述第一线程的序关系及所述第一线程与所述第一处理器的映射关系。
[0019]结合第二个方面、第二个方面的第一种可能的实现方式、第二个方面的第二种可能的实现方式、第二个方面的第三种可能的实现方式或者第二个方面的第四种可能的实现方式中的任意一种,在第五种可能的实现方式中,所述的设备,还包括:判断模块,用于判断所述第一处理器执行的并行程序的页表基址与设定的页表基址是否相同,若相同,则将所述并行程序作为所述目标程序。
[0020]结合第二个方面、第二个方面的第一种可能的实现方式、第二个方面的第二种可能的实现方式、第二个方面的第三种可能的实现方式、第二个方面的第四种的实现方式或者第二个方面的第五种的实现方式的任意一种,在第六种可能的实现方式中,所述的设备,其特征在于,还包括:获取模块,用于从所述第一处理器获取所述目标并行程序的指令;接收模块,用于接收系统中的第三处理器发送的缓存一致性消息,所述缓存一致性消息中携带所述第三处理器访问的内存地址;第二判断模块,用于判断所述内存地址与所述指令所使用的数据地址是否相同,若相同,则确定所述指令对应的线程与所述缓存一致性消息对应的线程的序关系。
[0021]结合第二个方面的第六种可能的实现方式,在第七种可能的实现方式中,所述的设备,所述日志产生模块,还用于记录所述指令对应的线程与所述第一处理器的映射关系及所述指令对应的线程的序关系。
[0022]第三个方面,本发明实施例提供一种网络设备,包括:多个处理器和至少第二个方面到第二个方面的第七种可能的实现方式中的任意一种所述的基于程序的线程关系确定设备。
[0023]第四个方面,本发明实施例提供一种程序的线程关系确定设备,其特征在于,包括:线程调度相关寄存器,用于检测系统中的第一线程发生由第一处理器至第二处理器的迁移,第一线程为第一处理器执行的目标并行程序中的一个线程,迁移到所述第二处理器后的第一线程作为第二线程;前驱后继寄存器,用于确定所述第一线程和所述第二线程之间的序关系。
[0024]结合第四个方面,在第一种可能的实现方式中,所述线程调度相关寄存器,还包括:检测器,用于检测所述第一线程发生挂起;软件线程控制器,用于记录所述第一处理器的处理器标识;判断器,用于当所述第一线程重新执行时,判断所述第一处理器的处理器标识与当前执行所述第一线程的处理器的处理器标识是否一致,若不一致,则确定当前执行所述第一线程的处理器为所述第二处理器。
[0025]结合第四个方面或是第四个方面的第一种可能的实现方式,在第二种可能的实现方式中,所述的设备,还包括:日志产生器,记录所述第一线程和所述第二线程之间的序关系。
[0026]结合第四个方面的第二种可能的实现方式,在第三种可能的实现方式中,所述日志产生器,还用于确定所述第一线程与至少一个第三线程的序关系,所述第三线程为所述目标并行程序中除所述第一线程之外在所述第一处理器上执行的线程。
[0027]结合第四个方面的第三种可能的实现方式,在第四种可能的实现方式中,所述日志产生器,还用于记录所述第一线程的序关系及所述第一线程与所述第一处理器的映射关系。
[0028]结合第四个方面、第四个方面的第一种可能的实现方式、第四个方面的第二种可能的实现方式、第四个方面的第三种可能的实现方式或者第四个方面的第四种可能的实现方式中的任意一种,在第五种可能的实现方式中,所述的设备,其特征在于,所述设备,还包括:判断器,用于判断所述第一处理器执行的并行程序的页表基址与设定的页表基址是否相同,若相同,则将所述并行程序作为所述目标程序。
[0029]结合第四个方面、第四个方面的第一种可能的实现方式、第四个方面的第二种可能的实现方式、第四个方面的第三种可能的实现方式、第四个方面的第四种的实现方式或者第四个方面的第五种的实现方式的任意一种,在第六种可能的实现方式中,所述的设备,其特征在于,还包括:获取器,用于从所述第一处理器获取所述目标并行程序的指令;接收器,用于接收系统中的第三处理器发送的缓存一致性消息,所述缓存一致性消息中携带所述第三处理器访问的内存地址;第二判断器,用于判断所述内存地址与所述指令所使用的数据地址是否相同,若相同,则确定所述指令对应的线程与所述缓存一致性消息对应的线程的序关系。
[0030]结合第四个方面的第六种可能的实现方式,在第七种可能的实现方式中,所述的设备,所述日志产生器,还用于。
[0031]第五个方面,本发明实施例提供一种网络设备,包括:多个处理器和至少一个第四方面到第四方面的第七种可能的实现方式中的任意一种的基于程序的线程关系确定设备。
[0032]本发明提供的程序的线程关系确定方法、设备及系统,通过检测系统中的第一处理器执行的目标并行程序中的第一线程迁移至第二处理器,迁移到第二处理器后的第一线程作为第二线程,并确定第一线程和第二线程之间的序关系,从而实现对因操作系统调度而引起的线程迁移所产生访问内存地址的冲突的记录,进而提高了对并行程序的调试的准确性。
【专利附图】

【附图说明】
[0033]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0034]图1为本发明程序的线程关系确定方法实施例一的流程图;
[0035]图2为本发明程序的线程关系确定方法实施例二的流程图;
[0036]图3为本发明程序的线程关系确定方法实施例的线程与处理单元映射关系示意图;
[0037]图4为本发明程序的线程关系确定方法的日志保存序关系的数据格式示意图;
[0038]图5为本发明程序的线程关系确定方法的线程与处理器映射关系的格式示意图;
[0039]图6为本发明程序的线程关系确定方法实施例三的流程图;
[0040]图7为本发明程序的线程关系确定设备实施例一的结构示意图;
[0041]图8为本发明程序的线程关系确定设备实施例二的结构示意图;
[0042]图9为本发明程序的线程关系确定设备实施例三的结构示意图;
[0043]图10为本发明程序的线程关系确定设备实施例四的结构示意图;
[0044]图11为本发明程序的线程关系确定设备实施例五的结构示意图;
[0045]图12为本发明的程序的线程关系确定设备的实施例六的结构示意图;
[0046]图13为本发明的程序的线程关系确定设备的实施例七的结构示意图;[0047]图14为本发明的程序的线程关系确定设备的实施例八的结构示意图。
【具体实施方式】
[0048]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0049]本发明实施例提供的程序的线程关系确定方法具体可以应用于多核处理器运行至少一个进程时,操作系统对同一个进程的多个软件线程的调度所引起的序关系的记录。程序的线程关系确定方法具体可以通过运行时管理软件与程序的线程关系确定的硬件设备协同完成,并将操作系统对同一个进程的多个软件线程的调度所引起的“happen-before”关系进行记录,以在程序员后续的调试过程中进行重放,并保证程序的执行序遵照原始的执行。以下以多核处理器为例,对本实施例提供的程序的线程关系确定方法及其设备进行详细地说明。
[0050]图1为本发明程序的线程关系确定方法实施例一的流程图,如图1所示,本实施例提供的发明程序的线程关系确定方法具体包括如下步骤:
[0051]S11、检测系统中的第一处理器执行的目标并行程序中的第一线程迁移至第二处理器,迁移到第二处理器后的第一线程作为第二线程;
[0052]本实施例的系统为多核处理器与运行时管理软件协同工作的软件系统,本步骤的执行主体是线程调度相关寄存器,多核处理器是在一枚处理器中集成两个或多个完整的计算引擎(内核),即该多核处理器包括有多个独立的处理器,并且每个独立的处理器由一组硬件设备组成。也就是说,N核处理器可以包括相互独立的第一处理器、第二处理器、第三处理器、直到第N处理器,其中,N为大于I的正整数。
[0053]运行时管理软件通过对来自系统的应用程序进行过滤,以获取关注的用户态程序,本实施例中运行时管理软件可以获取多核处理器的第一处理器正在执行的目标并行程序中的第一线程,其中,目标并行程序是本实施例所关注的用户并行进程,通常进程可以分为系统进程和用户进程,系统进程是用于完成操作系统的各种功能的进程,也就是处于运行状态下的操作系统本身;用户进程是由用户启动的进程。操作系统中,进程又被细化为线程,即一个进程下有多个能独立运行的更小的单位。也就是说,运行时管理软件获取到系统的目标并行程序是用户启动的进程,并且该进程包括有多个并行线程。
[0054]本实施例中的第一线程是软件线程,线程调度相关寄存器可以判断正在第一处理上执行的该程序中的第一线程是否挂起,在确定第一线程挂起后,其他线程可以执行在第一处理上,其中,其它线程可以是该程序中的其它线程,也可以是其它程序中的线程。当第一线程被切换回执行态时,判断正在执行第一线程的处理器与挂起前执行第一线程的处理器是否相同,如果不同,则确定第一线程发生迁移,并将正在执行第一线程的本地处理器确定为第二处理器,同时将迁移到第二处理器后的第一软件线程作为第二软件线程。在第一线程发生迁移至第二处理器后,可能产生处理器之间的访存一致性冲突,本实施例中的访存是指访问内存地址,因而需要记录第一线程和第二线程之间的序关系,即向第一处理器的前驱后继寄存器发送强制建立“happen-before”关系的请求,并强制建立序关系;如果相同,则不发送强制建立“happen-before”关系的请求,并继续执行第一线程的操作。
[0055]S12、确定第一线程和第二线程之间的序关系。
[0056]前驱后继寄存器可以确定第一线程和第二线程之间的序关系,具体来讲,在第一线程发生迁移至第二处理器后,可能产生处理器之间的访存一致性冲突,因此第二处理器会向第一处理器的日志产生模块发送强制建立“happen-before”关系的请求,于是在第一处理器的后继集合中第二处理器对应的位置写入1,同时第一处理器向第二处理器发送缓存一致性应答消息;在第二处理器接收到第一处理器的缓存一致性应答消息后,在第二处理器的前驱集合中的第一处理器对应的位置写入1,如此建立第一线程和第二线程之间“happen-before”的序关系。同时可以将第一线程和第二线程之间“happen-before”的序关系存储在硬件的日志目录压缩表中,也可以存储在软件的数据库中,以方便程序员后续的调试过程中进行对该记录进行重放,并保证程序的执行序关系遵照原始的序关系执行。
[0057]本实施例,通过线程调度相关寄存器检测系统中的第一处理器执行的目标并行程序中的第一线程迁移至第二处理器,再由前驱后继寄存器确定第一线程和第二线程之间的序关系,从而实现对操作系统调度而引起的同一软件线程在不同处理器上迁移的确认,进而可以确定线程迁移前后的序关系,并减少并行程序调试中访存冲突的几率,提高了并行程序调试的准确性。
[0058]下面采用几个具体的实施例,对图1所示方法实施例的技术方案进行详细说明。
[0059]图2为本发明程序的线程关系确定方法实施例二的流程图,如图2所示,在图1所示实施例的基础上,本实施例提供了检测系统中的第一处理器执行的目标并行程序中的第一线程迁移至第二处理器的一种可行实施方式,具体包括:
[0060]S111、检测第一线程发生挂起;
[0061]具体的,线程调度相关寄存器可以判断正在执行的该程序中的第一线程是否挂起,举例来说,目前商业处理器提供的软件线程号寄存器可以判断软件线程是否挂起。
[0062]S112、记录第一处理器的处理器标识;
[0063]当线程挂起时,运行时管理软件清空前驱后继寄存器与访存地址踪迹寄存器的信息,并将该些信息存入日志压缩目录表,同时将该处理器的处理器标示写入软件线程的控制块中,也就是说,可以在由内核支持的用户线程的轻量级进程软件数据结构中增加的一个域中写入该处理器的处理器标识,该标识可以是处理器号,并进行记录与存储。
[0064]S113、当第一线程重新执行时,判断第一处理器的处理器标识与当前执行第一线程的处理器的处理器标识是否一致,若不一致,则确定当前执行第一线程的处理器为第二处理器。
[0065]当第一线程重新执行时,将软件线程的控制块中保存的挂起时写入在线程调度相关寄存器中的第一处理器的处理器标识与当前正在执行切回的第一线程的本地处理器的处理器标识进行比较,如果不一致,则确定第一线程发生迁移,并将当前执行第一线程的本地处理器确定为第二处理器。如果一致,则确定第一线程没有发生迁移,从而继续当前第一线程的操作。
[0066]本实施例,通过在检测到第一线程挂起后记录下第一处理器的处理器标示,并在第一线程重新执行时,确定第一处理器的处理器标识与当前执行第一线程的处理器的处理器标识不一致,并确定第一线程发生迁移,从而实现因操作系统调度而引起的同一软件线程在不同处理器上迁移的确认,进而可以有效的避免因线程引起的访问内存地址的冲突。
[0067]图3为本发明程序的线程关系确定方法实施例的线程与处理单元映射关系示意图。如图3所示,多核处理器可以包括相互独立的处理器O、处理器1、处理器2、处理器3,在处理器0上执行的指令块可以包括在处理器0上执行的线程a、在处理器I上执行的线程b、在处理器2上执行的线程c和在处理器3上执行的线程d,在线程调度相关寄存器判断正在执行的线程b挂起时,运行时管理软件清空前驱后继寄存器与访存地址踪迹寄存器的信息,并将该些信息存入日志压缩目录表中。当线程e迁移到处理器I上执行时,同样记录线程与处理器之间的映射关系,和处理单元之间的序关系。因此本发明可以同时记录下了不同阶段,处理单元与活动线程之间的关系。
[0068]在一种实施场景下,检测系统中的第一处理器执行的目标并行程序中的第一线程迁移至第二处理器,迁移到第二处理器后的第一线程作为第二线程之后,还可以具体包括下述操作:
[0069]记录第一线程和第二线程之间的序关系。
[0070]具体的,在线程调度相关寄存器检测到第一处理器执行的第一线程迁移至第二处理器作为第二线程之后,可能在多核处理器内的多个处理器访问的内存地址上产生冲突。第二处理器可以向第一处理器的日志产生模块发送强制建立“happen-before”关系的请求,在第一处理器的后继集合中第二处理器对应的位置可以写入1,即记录第一线程与第一处理器的映射关系,同时第一处理器可以向第二处理器发送缓存一致性应答消息;在第二处理器接收到第一处理器的缓存一致性应答消息后,可以在第二处理器的前驱集合中的第一处理器对应的位置写入1,即记录第二线程与第二处理器的映射关系;接着第二处理器的日志产生模块根据接收到的强制建立“happen-before”关系的请求信息,确定第二处理上执行的第二线程可能会产生访问内存地址的冲突,进而将前驱后继寄存器中的记录经过日志目录压缩表压缩后记录在设置在外部的日志中,即在日志中记录第一线程和第二线程之间的序关系。
[0071]本实施里的前驱后继寄存器可以是多项的数据结构,包括N个前驱寄存器与N个后继寄存器,N为独立处理单元个数,N为大于I的正整数,前驱后继寄存器可以存储最近使用的N个值,每一项可以对应多核处理器内的一个处理器,并可以采用不频繁使用项替换算法对所存储的值进行替换,本实施例不限于该算法对前驱后继寄存器存储的值进行替换。
[0072]在将前驱后继寄存器中的记录存储到日志之前,可以利用前驱寄存器组的值、后继寄存器的值或是前驱后继寄存器的值在日志压缩目录表中查找,该日志压缩目录表记录有本次需要记录到日志之前一段时间的前驱后继寄存器的值。如果查找到在日志压缩目录表中的值与准备存储到外部日志的值相同,则在外部日志中存储日志压缩目录表的索引,同时更新该日志压缩目录表;如果没有查找到,则存入完整的前驱后继寄存器的值在外部日志,并更新该日志压缩目录表。
[0073]图4为本发明程序的线程关系确定方法的日志保存序关系的数据格式示意图。如图4所不,在日志中记录的序关系项,具体可以包括:最闻位(bit25)为该记录的映射关系的类型,映射关系的类型是序关系项时,设置为I ;与最高位相邻的次高位(bit24)为前驱寄存器是否在压缩目录表中命中,与次高位相邻的一位(bit23)为后继寄存器是否在压缩目录表中命中;bit22至bit8的位置可以记录逻辑时间;bit7至bit4的位置可以记录前驱关系,最后的4为,bit3至bitO的位置可以记录后继关系,其中,前驱关系或者后继关系保存在目录表中的索引,如果命中则设置为1,否则设置为O ;前驱关系或者后继关系保存完整的内容。
[0074]本实施例,通过对第一处理器上执行的第一线程迁移至第二处理器上作为第二线程的线程之间的序关系的记录,实现了对线程的迁移的记录,进而可以减少并行程序调试中访存冲突的几率,进一步的提高了并行程序调试的准确性。
[0075]在另一种实施场景下,检测第一线程发生挂起之后,还可以具体包括下述操作:
[0076]记录第一线程与第一处理器的映射关系。
[0077]记录第一线程的序关系;
[0078]具体的,当线程调度相关寄存器检测到第一处理器上的第一线程发生挂起之后,可能会在重新执行第一线程时在多核处理器内的多个处理器访问的内存地址上产生冲突。日志产生模块可以记录第一线程与第一处理器的映射关系,在日志产生模块记录第一线程与第一处理器的映射关系后,日志产生模块可以将该些记录存储日志中。图5为本发明程序的线程关系确定方法的线程与处理器映射关系的格式示意图。如图5所示,记录在日志中的线程与处理器映射关系项的结构具体为,最高位表示该日志项的类型,当是线程与处理单元映射关系项时设置为0,后续多位,保存线程号,本发明中为了减少同步开销,使用了分布式的线程与处理器映射关系表,当同一处理器发生同进程的不同线程的切换时,将线程与处理器映射关系表保存在日志中,在重放时,可以根据日志中记录的第一线程与第一处理器的映射关系及序关系重构全局映射关系表。
[0079]运行时管理软件通过日志压缩目录表将前驱后继寄存器中记录的第一线程的序关系压缩在日志中,将前驱后继寄存器中记录的值以序关系项的方式记录,具体结构与上述实施例中说明的相同,在此不再赘述。
[0080]在另一种实施场景下,检测第一线程发生挂起之后,还可以具体包括下述操作:
[0081]确定第一线程与至少一个第三线程的序关系,第三线程为目标并行程序中除第一线程之外在第一处理器上执行的线程。
[0082]具体的,线程调度相关寄存器检测到在第一处理器上的第一线程发生挂起,同时检测到在第一处理器上开始执行第三线程,其中,第三线程与第一线程可以是同一目标并行程序中的不同线程,也可以是其它进程中线程。
[0083]相应的,在本实施例中,检测第一线程发生挂起之后,还可以具体包括:
[0084]记录第一线程的序关系;
[0085]记录第一线程与第一处理器的映射关系。
[0086]本实施例中,在记录第一线程与第一处理器的映射关系之前,可以先确定第一线程的序关系及记录第一线程与第一处理器的映射关系。确定方式和记录方式及在日志中存储的结构与上述实施例中说明的相同,在此不再赘述。同样的,在第一处理器上开始执行的第三线程,如果第三线程在第一处理器上发生迁移,可以与上述实施例相同的方法进行确定与记录第三线程的序关系,如果第三线程在第一处理器上发生挂起,可以与上述实施例相同的方法进行确定与记录第三线程的序关系及第三线程与第一处理器及迁移到的第二处理器的映射关系。[0087]在又一个实施场景下,检测系统中的第一处理器执行的目标并行程序中的第一线程迁移至第二处理器之前,还可以具体包括下述操作:
[0088]判断第一处理器执行的并行程序的页表基址与设定的页表基址是否相同,若相同,则将并行程序作为目标程序。
[0089]具体的,访存地址踪迹寄存器判断第一处理器执行的并行程序的页表基址与设定的页表基址是否相同,每个处理器中有一个访存地址踪迹寄存器,并设置在CPU内部,其中,运行时管理软件将需要关注的并行程序的页表基址写入并行程序页表基址寄存器中,当运行时管理软件检查到指令流水线中的指令提交时,访存地址踪迹寄存器对并行程序页表基址寄存器中的页表地址与多核处理器自身具有的页表基址寄存器的页表基址进行判断,若页表基址相同,则将并行程序页表基址寄存器的页表基址写入访存地址踪迹寄存器中,若页表基址相同,则不将该页表基址写入在访存地址踪迹寄存器中,从而过滤掉与访存冲突无关的页表基址。
[0090]本实施例通过访存地址踪迹寄存器判断第一处理器执行的并行程序的页表基址与设定的页表基址是否相同,并将相同的页表基址则的并行程序作为目标程序,从而可以利用硬件记录的需要关注的用户态并行程序,过滤掉系统态与其它并行程序的无用信息。进而大大的节省了日志开销,并减小对并行程序运行时性能的影响。
[0091]图6为本发明程序的线程关系确定方法实施例三的流程图。如图6所示,本实施例还可以具体包括:
[0092]S131、从第一处理器获取目标并行程序的指令;
[0093]S132、接收系统中的第三处理器发送的缓存一致性消息,缓存一致性消息中携带第三处理器访问的内存地址;
[0094]S133、判断内存地址与指令所使用的数据地址是否相同,若相同,则确定指令对应的线程与缓存一致性消息对应的线程的序关系。
[0095]具体的,第一处理器的日志产生模块接收到第三处理器发送的缓存一致性消息,该缓存一致性消息可以是访存地址踪迹寄存器与缓存一致性协议协同捕获的,一致性协议主要有总线的侦听协议和基于目录的目录协议,该消息可以是数据请求消息或是数据无效消息,其中,数据请求消息是用以多核处理器的不同处理器之间的请求数据一致的消息,数据无效消息用以请求无效掉其他处理器的数据。日志产生模块从缓存一致性消息中获得发送该缓存一致性消息的处理器信息,即第三处理器,并在第一处理器的前驱后继寄存器和第二处理器的前驱后继寄存器中分别记录第三处理器与第一处理器的“happen-before”关系。
[0096]硬件设备中的日志产生模块根据缓存一致性消息获得第三处理器访问的内存地址,并将该访问的内存地址与访存地址踪迹寄存器中记录访问的内存地址进行比较,如果访问的内存地址相同,则确定访问内存地址会产生冲突,日志产生模块将前驱后继寄存器和指令数寄存器的记录通过日志压缩目录表压缩到日志中,并以指令对应的线程与缓存一致性消息对应的线程的序关系的形式存储。运行时管理软件清空指令数寄存器、前驱后继寄存器与访存地址踪迹寄存器的记录,并向第三处理器回复一致性消息。如果访问的内存地址相同,则确定访问内存地址不会产生冲突,可以继续当前的操作,不做任何情况或是压缩到日志的操作。[0097]相应的,本实施例中,程序的线程关系确定的方法还可以包括:
[0098]记录指令对应的线程与第一处理器的映射关系及指令对应的线程的序关系。
[0099]具体的,硬件的访存地址踪迹寄存器可以根据缓存一致性协议获取可能产生冲突的情况,第一处理器的日志产生模块接收到第三处理器的缓存一致性消息后,在第一处理器的后继集合中第三处理器对应的位置写入1,即记录指令对应的线程与第三处理器的映射关系,同时第一处理器向第三处理器发送缓存一致性应答消息;在第三处理器接收到第一处理器的缓存一致性应答消息后,在第三处理器的前驱集合中的第一处理器对应的位置写入1,即指令对应的线程与第一处理器的映射关系;确定第一处理上执行的指令对应的线程会产生访问内存地址的冲突,进而将第一处理器和第二处理器上的前驱后继寄存器中的记录经过日志目录压缩表压缩后记录在设置在外部的日志中,即在日志中记录指令对应的线程与第一处理器的映射关系和指令对应的线程与第三处理器的映射关系。
[0100]图7为本发明程序的线程关系确定设备实施例一的结构示意图。如图7所示,程序的线程关系确定设备包括:
[0101]检测模块61,用于检测系统中的第一处理器执行的目标并行程序中的第一线程迁移至第二处理器,迁移到第二处理器后的第一线程作为第二线程;
[0102]确定模块62,用于确定第一线程和第二线程之间的序关系。
[0103]本实施例的程序的线程关系确定设备,可以用于执行图1所示方法实施例的技术方案,其实现原理类似,此处不再赘述。
[0104]本实施例提供的程序的线程关系确定设备通过检测模块和确定模块的设置,可以通过检测模块检测系统中的第一处理器执行的目标并行程序中的第一线程迁移至第二处理器,再由确定模块确定第一线程和第二线程之间的序关系,从而实现对操作系统调度而引起的同一软件线程在不同处理器上迁移的确认,进而可以确定线程迁移前后的序关系,并提高了并行程序调试的准确性。
[0105]图8为本发明程序的线程关系确定设备实施例二的结构示意图。如图8所示,在图7所示实施例的基础上,本实施例的检测模块61,可以包括:
[0106]检测单元611,用于检测第一线程发生挂起;
[0107]软件线程控制单元612,用于记录第一处理器的处理器标识;
[0108]判断单元613,用于当第一线程重新执行时,判断第一处理器的处理器标识与当前执行第一线程的处理器的处理器标识是否一致,若不一致,则确定当前执行第一线程的处理器为第二处理器。
[0109]本实施例的程序的线程关系确定设备,可以用于执行图2所示方法实施例的技术方案,其实现原理类似,此处不再赘述。
[0110]本实施例提供的程序的线程关系确定设备通过检测单元、软件线程控制单元和判断单元的设置,可以通过在检测到第一线程挂起后记录下第一处理器的处理器标示,并在第一线程重新执行时,确定第一处理器的处理器标识与当前执行第一线程的处理器的处理器标识不一致,从而确定第一线程发生迁移,从而实现因操作系统调度而引起的同一软件线程在不同处理器上迁移的确认,进而可以有效的避免因线程引起的访问内存地址的冲关。
[0111]图9为本发明程序的线程关系确定设备实施例三的结构示意图。如图9所示,在图8所示实施例的基础上,本实施例还可以包括:
[0112]日志产生模块63,记录第一线程和第二线程之间的序关系。
[0113]进一步的,日志产生模块63,还可以具体用于确定第一线程与至少一个第三线程的序关系,第三线程为目标并行程序中除第一线程之外在第一处理器上执行的线程。
[0114]进一步的,日志产生模块63,还可以包括:用于记录第三线程与第一处理器的映身寸关系。
[0115]本实施例的程序的线程关系确定设备,可以用于执行上述方法实施例的技术方案,其实现原理类似,此处不再赘述。
[0116]图10为本发明程序的线程关系确定设备实施例四的结构示意图。如图10所示,本实施例还可以包括:
[0117]判断模块64,用于判断第一处理器执行的并行程序的页表基址与设定的页表基址是否相同,若相同,则将并行程序作为目标程序。
[0118]本实施例的程序的线程关系确定设备,可以用于执行上述方法实施例的技术方案,其实现原理类似,此处不再赘述。
[0119]本实施例通过访存地址踪迹寄存器判断第一处理器执行的并行程序的页表基址与设定的页表基址是否相同,并将相同的页表基址则的并行程序作为目标程序,从而可以利用硬件记录的需要关注的用户态并行程序,过滤掉系统态与其它并行程序的无用信息。进而大大的节省了日志开销,并减小对并行程序运行时性能的影响。
[0120]图11为本发明程序的线程关系确定设备实施例五的结构示意图。如图11所示,本实施例还可以包括:
[0121]获取模块71,用于从第一处理器获取目标并行程序的指令;
[0122]接收模块72,用于接收系统中的第三处理器发送的缓存一致性消息,缓存一致性消息中携带第三处理器访问的内存地址;
[0123]第二判断模块73,用于判断内存地址与指令所使用的数据地址是否相同,若相同,则确定指令对应的线程与缓存一致性消息对应的线程的序关系。
[0124]进一步的,该设备还可以包括:
[0125]日志产生模块63,还用于记录所述指令对应的线程与所述第一处理器的映射关系及所述指令对应的线程的序关系。
[0126]本实施例的程序的线程关系确定设备,可以用于执行上述方法实施例的技术方案,其实现原理与效果类似,此处不再赘述。
[0127]本实施例的基于程序的线程关系确定设备的系统,具体可以包括:如上述实施例所述的基于程序的线程关系确定设备。可以用于执行上述方法实施例的技术方案,其实现原理类似,此处不再赘述。
[0128]本实施例,通过线程调度相关寄存器检测系统中的第一处理器执行的目标并行程序中的第一线程迁移至第二处理器,再由前驱后继寄存器确定第一线程和第二线程之间的序关系,从而实现对因操作系统调度而引起的同一软件线程在不同处理器上迁移的确认,同时对线程迁移前后的序关系进行存储后,进而提高了并行程序调试的准确性。
[0129]图12为本发明的程序的线程关系确定设备的实施例六的结构示意图,如图12所示,本实施例的程序的线程关系确定设备包括至少一个CPU1101,至少一个网络接口 1104或者其他用户接口 1103,存储器1105,和至少一通信总线1102。通信总线1102用于实现各装置之间的连接通信。该程序的线程关系确定设备可选的包含用户接口 1103,包括显示器,键盘或者点击设备。存储器1105可能包含高速RAM存储器,也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1105可选的可以包含至少一个位于远离前述CPU1101的存储装置。在一些实施方式中,存储器1105存储了如下的元素,编码,模块或者数据结构,或者他们的子集,或者他们的扩展集:
[0130]操作系统1106,包含各种程序,用于实现各种基础业务以及处理基于硬件的任务;
[0131]线程调度相关寄存器1161,用于检测系统中的第一处理器执行的目标并行程序中的第一线程迁移至第二处理器,迁移到第二处理器后的第一线程作为第二线程;
[0132]前驱后继寄存器1162,用于确定第一线程和第二线程之间的序关系。
[0133]本实施例的程序的线程关系确定设备,可以用于执行图1所示方法实施例的技术方案,其实现原理类似,此处不再赘述。
[0134]本实施例提供的程序的线程关系确定设备通过线程调度相关寄存器和前驱后继寄存器的设置,可以通过线程调度相关寄存器检测系统中的第一处理器执行的目标并行程序中的第一线程迁移至第二处理器,再由前驱后继寄存器确定第一线程和第二线程之间的序关系,从而实现对操作系统调度而引起的同一软件线程在不同处理器上迁移的确认,进而可以确定线程迁移前后的序关系,并提高了并行程序调试的准确性。
[0135]图13为本发明的程序的线程关系确定设备的实施例七的结构示意图。如图13所示,本实施例的程序的线程关系确定设备包括至少一个CPU1101,至少一个网络接口 1104或者其他用户接口 1103,存储器1105,和至少一通信总线1102。通信总线1102用于实现各装置之间的连接通信。该程序的线程关系确定设备可选的包含用户接口 1103,包括显示器,键盘或者点击设备。存储器1105可能包含高速RAM存储器,也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1105可选的可以包含至少一个位于远离前述CPU1101的存储装置。在一些实施方式中,存储器1105存储了如下的元素,编码,模块或者数据结构,或者他们的子集,或者他们的扩展集:
[0136]操作系统1106,包含各种程序,用于实现各种基础业务以及处理基于硬件的任务;
[0137]检测器12611,用于检测第一线程发生挂起;
[0138]软件线程控制器12612,用于记录第一处理器的处理器标识;
[0139]判断器12613,用于当第一线程重新执行时,判断第一处理器的处理器标识与当前执行第一线程的处理器的处理器标识是否一致,若不一致,则确定当前执行第一线程的处理器为第二处理器。
[0140]前驱后继寄存器1162,用于确定第一线程和第二线程之间的序关系。
[0141]日志产生器1263,记录所述第一线程和所述第二线程之间的序关系。
[0142]进一步的,日志产生器1263,还可以具体用于确定第一线程与至少一个第三线程的序关系,第三线程为目标并行程序中除第一线程之外在第一处理器上执行的线程。
[0143]进一步的,日志产生器1263,还可以包括:用于记录第三线程与第一处理器的映射关系。[0144]本实施例的程序的线程关系确定设备,可以用于执行图2所示方法实施例的技术方案,其实现原理类似,此处不再赘述。
[0145]本实施例提供的程序的线程关系确定设备通过检测单元、软件线程控制单元和判断单元的设置,可以通过在检测到第一线程挂起后记录下第一处理器的处理器标示,并在第一线程重新执行时,确定第一处理器的处理器标识与当前执行第一线程的处理器的处理器标识不一致,从而确定第一线程发生迁移,从而实现因操作系统调度而引起的同一软件线程在不同处理器上迁移的确认,进而可以有效的避免因线程引起的访问内存地址的冲关。
[0146]图14为本发明的程序的线程关系确定设备的实施例八的结构示意图。如图14所示,本实施例的程序的线程关系确定设备包括至少一个CPU1101,至少一个网络接口 1104或者其他用户接口 1103,存储器1105,和至少一通信总线1102。通信总线1102用于实现各装置之间的连接通信。该程序的线程关系确定设备可选的包含用户接口 1103,包括显示器,键盘或者点击设备。存储器1105可能包含高速RAM存储器,也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1105可选的可以包含至少一个位于远离前述CPU1101的存储装置。在一些实施方式中,存储器1105存储了如下的元素,编码,模块或者数据结构,或者他们的子集,或者他们的扩展集:
[0147]操作系统1106,包含各种程序,用于实现各种基础业务以及处理基于硬件的任务;
[0148]获取器1371,用于从第一处理器获取所述目标并行程序的指令;
[0149]接收器1372,用于接收系统中的第三处理器发送的缓存一致性消息,所述缓存一致性消息中携带第三处理器访问的内存地址;
[0150]第二判断器1373,用于判断内存地址与指令所使用的数据地址是否相同,若相同,则确定指令对应的线程与缓存一致性消息对应的线程的序关系。
[0151]日志产生器1263,用于记录记录指令对应的线程与述第一处理器的映射关系及指令对应的线程的序关系。
[0152]本实施例的程序的线程关系确定设备,可以用于执行上述方法实施例的技术方案,其实现原理类似,此处不再赘述。
[0153]本实施例的网络设备的系统,具体可以包括:多个处理器和至少如上述实施例所述基于程序的线程关系确定设备。可以用于执行上述方法实施例的技术方案,其实现原理类似,此处不再赘述。
[0154]本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0155]最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
【权利要求】
1.一种程序的线程关系确定方法,其特征在于,包括: 检测系统中的第一线程发生由第一处理器至第二处理器的迁移,第一线程为第一处理器执行的目标并行程序中的一个线程,迁移到所述第二处理器后的第一线程作为第二线程; 确定所述第一线程和所述第二线程之间的序关系。
2.根据权利要求1所述的方法,其特征在于,所述检测系统中的第一线程发生由第一处理器至第二处理器的迁移,包括: 检测所述第一线程发生挂起; 记录所述第一处理器的处理器标识; 当所述第一线程重新执行时,判断所述第一处理器的处理器标识与当前执行所述第一线程的处理器的处理器标识是否一致,若不一致,则确定第一线程发生迁移,且当前执行所述第一线程的处理 器为所述第二处理器。
3.根据权利要求1或2所述的方法,其特征在于,所述检测系统中的第一线程发生由第一处理器至第二处理器的迁移之后,还包括: 记录所述第一线程和所述第二线程之间的序关系。
4.根据权利要求2所述的方法,其特征在于,所述检测所述第一线程发生挂起之后,还包括: 确定所述第一线程与至少一个第三线程的序关系,所述第三线程为所述目标并行程序中除所述第一线程之外在所述第一处理器上执行的线程。
5.根据权利要求4所述的方法,其特征在于,所述检测所述第一线程发生挂起之后,还包括: 记录所述第一线程的序关系; 记录所述第一线程与所述第一处理器的映射关系。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述检测系统中的第一线程发生由第一处理器至第二处理器的迁移之前,还包括: 判断所述第一处理器执行的并行程序的页表基址与设定的页表基址是否相同,若相同,则将所述并行程序作为所述目标程序。
7.根据权利要求1-6任一项所述的方法,其特征在于,还包括: 从所述第一处理器获取所述目标并行程序的指令; 接收系统中的第三处理器发送的缓存一致性消息,所述缓存一致性消息中携带所述第三处理器访问的内存地址; 判断所述内存地址与所述指令所使用的数据地址是否相同,若相同,则确定所述指令对应的线程与所述缓存一致性消息对应的线程的序关系。
8.根据权利要求7所述的方法,其特征在于,还包括: 记录所述指令对应的线程与所述第一处理器的映射关系及所述指令对应的线程的序关系。
9.一种程序的线程关系确定设备,其特征在于,包括: 检测模块,用于检测系统中的第一线程发生由第一处理器至第二处理器的迁移,第一线程为第一处理器执行的目标并行程序中的一个线程,迁移到所述第二处理器后的第一线程作为第二线程; 确定模块,用于确定所述第一线程和所述第二线程之间的序关系。
10.根据权利要求9所述的设备,其特征在于,所述检测模块,包括: 检测单元,用于检测所述第一线程发生挂起; 软件线程控制单元,用于记录所述第一处理器的处理器标识; 判断单元,用于当所述第一线程重新执行时,判断所述第一处理器的处理器标识与当前执行所述第一线程的处理器的处理器标识是否一致,若不一致,则确定当前执行所述第一线程的处理器为所述第二处理器。
11.根据权利要求9或10所述的设备,其特征在于,还包括: 日志产生模块,用于记录所述第一线程和所述第二线程之间的序关系。
12.根据权利要求10所述的设备,其特征在于,所述日志产生模块,还用于确定所述第一线程与至少一个第三线程的序关系,所述第三线程为所述目标并行程序中除所述第一线程之外在所述第一处理器上执行的线程。
13.根据权利要求12所述的设备,其特征在于,所述日志产生模块,还用于记录所述第一线程的序关系及所述第一线程与所述第一处理器的映射关系。
14.根据权利要求9-13任一项所述的设备,其特征在于,还包括: 判断模块,用于判断所述第一处理器执行的并行程序的页表基址与设定的页表基址是否相同,若相同,则将所述并行程序作为所述目标程序。
15.根据权利要求9-14任一项所述的设备,其特征在于,还包括: 获取模块,用于从所述第一处理器获取所述目标并行程序的指令; 接收模块,用于接收系统中的第三处理器发送的缓存一致性消息,所述缓存一致性消息中携带所述第三处理器访问的内存地址; 第二判断模块,用于判断所述内存地址与所述指令所使用的数据地址是否相同,若相同,则确定所述指令对应的线程与所述缓存一致性消息对应的线程的序关系。
16.根据权利要求15所述的设备,其特征在于,所述日志产生模块,还用于记录所述指令对应的线程与所述第一处理器的映射关系及所述指令对应的线程的序关系。
17.—种网络设备,其特征在于,包括:多个处理器和至少一个如权利要求9-16任一所述的基于程序的线程关系确定设备。
18.—种程序的线程关系确定设备,其特征在于,包括: 线程调度相关寄存器,用于检测系统中的第一线程发生由第一处理器至第二处理器的迁移,第一线程为第一处理器执行的目标并行程序中的一个线程,迁移到所述第二处理器后的第一线程作为第二线程; 前驱后继寄存器,用于确定所述第一线程和所述第二线程之间的序关系。
19.根据权利要求18所述的设备,其特征在于,所述线程调度相关寄存器,还包括: 检测器,用于检测所述第一线程发生挂起; 软件线程控制器,用于记录所述第一处理器的处理器标识; 判断器,用于当所述第一线程重新执行时,判断所述第一处理器的处理器标识与当前执行所述第一线程的处理器的处理器标识是否一致,若不一致,则确定当前执行所述第一线程的处理器为所述第二处理器。
20.根据权利要求18或19所述的设备,其特征在于,还包括: 日志产生器,记录所述第一线程和所述第二线程之间的序关系。
21.根据权利要求20所述的设备,其特征在于,所述日志产生器,还用于确定所述第一线程与至少一个第三线程的序关系,所述第三线程为所述目标并行程序中除所述第一线程之外在所述第一处理器上执行的线程。
22.根据权利要求21所述的设备,其特征在于,所述日志产生器,还用于记录所述第一线程的序关系及所述第一线程与所述第一处理器的映射关系。
23.根据权利要求19-22任一项所述的设备,其特征在于,所述设备,还包括: 判断器,用于判断所述第一处理器执行的并行程序的页表基址与设定的页表基址是否相同,若相同,则将所述并行程序作为所述目标程序。
24.根据权利要求19-23任一项所述的设备,其特征在于,还包括: 获取器,用于从所述第一处理器获取所述目标并行程序的指令; 接收器,用于接收系统中的第三处理器发送的缓存一致性消息,所述缓存一致性消息中携带所述第三处理器访问的内存地址; 第二判断器,用于判断所述内存地址与所述指令所使用的数据地址是否相同,若相同,则确定所述指令对应的线程与所述缓存一致性消息对应的线程的序关系。
25.根据权利要求24所述的设备,其特征在于,所述日志产生器,还用于。
26.—种网络设备,其特征在于,包括:多个处理器和至少一个如权利要求18-25任一所述的基于程序的线程关系确定设备。
【文档编号】G06F9/38GK103729166SQ201210382173
【公开日】2014年4月16日 申请日期:2012年10月10日 优先权日:2012年10月10日
【发明者】唐士斌, 宋风龙, 王达, 范东睿 申请人:华为技术有限公司, 中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1