CN1300699C - 并行程序可视化调试方法 - Google Patents
并行程序可视化调试方法 Download PDFInfo
- Publication number
- CN1300699C CN1300699C CNB2004100665779A CN200410066577A CN1300699C CN 1300699 C CN1300699 C CN 1300699C CN B2004100665779 A CNB2004100665779 A CN B2004100665779A CN 200410066577 A CN200410066577 A CN 200410066577A CN 1300699 C CN1300699 C CN 1300699C
- Authority
- CN
- China
- Prior art keywords
- message
- node
- time
- communication
- chained list
- 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
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种并行程序可视化调试方法,是针对使用本地区域机器/消息传递接口 LAM/MPI平台运行的MPI程序进行调试方法的改进,提取LAM/MPI平台上程序运行期间进程间通讯消息的详细信息,并通过这些信息来计算出各个类型的通讯函数上面花费的时间,并可视化显示出结果。同时通过提出各个节点的消息的信息来反映出各个节点的中央处理器运行状态,并通过时间的顺序,来连续显示各个物理节点的运行状态。本发明能更好的调整进程在不同节点的分布使更有效的利用CPU,能减少物理节点间通讯次数的调试作用,帮助发现所调试的程序问题的所在并解决问题。
Description
技术领域
本发明涉及一种并行程序可视化调试方法,用于对并行语言MPI(消息传递接口)程序进行可视化调试,属于计算机并行程序调试工具和调试环境领域。
背景技术
目前针对不同的体系结构和并行语言,存在的调试环境也很多。尤其很多厂商,也会提供针对自己机器的调试工具,但是都不是可视化工具,通用的集合功能比较全面的工具很少,对于平台的依赖性也很大。目前国外有很多关于并行语言MPI和PVM(并行虚拟机)的程序的调试工具,例如:Total View 4.0Multi-process Debugger(全部可视化多进程调试器)是目前功能最全面的跨平台的并行语言调试工具,是Etnus公司研发的非开放源代码的并行可视化调试工具,已经实现了对并行程序的可视化代码级跟踪,多线程进程调试。Vampir(可视化跟踪分析MPI程序)并行调试工具主要功能侧重在并行程序的执行结果分析,通过可视化看到并行程序的一些消息互发和最后信息的统计,来发现问题的所在,重点也是进程间相互通信这一部分。Vampir最开始由Dresden科学技术大学研制,最后被德国的PALLAS公司用以商业用途,是受版权保护的非开放原代码软件。XMPI(可视化消息传递接口调试工具)是一个基于X/Motif的图形用户界面,用来运行、调试和可视化MPI程序的工具。在运行时,XMPI可以实时监视各个运行进程的状态以及它们之间的消息传递状况,并将这些信息保存入跟踪文件中;又可以读入跟踪文件,回放程序运行时的状况;并且以图形化界面来显示和回放。另外XMPI是公开源码的可视化并行调试工具,其基于的底层LAM/MPI(本地区域机器/消息传递接口)也是一个公开源码的实现MPI标准的实现。XMPI是在LAM/MPI的基础上实现的。目前最高的版本是xmpi-2.2.3b8。(具体的参考工具是xmpi-2.2.3b8和LAM/MPI7.0.4版本的工具包和源代码包。工具介绍网址:
http://www.lam-mpi.org/software/xmpi/)可以看出目前存在的专门针对并行语言MPI的调试工具里面只有XMPI是实现了专门针对LAM/MPI程序的可视化的调试,其余的Totalview和Vampir两个并行程序可视化调试工具都是非开放源代码的。所以到目前为止,对于LAM/MPI程序如何实现可视化调试方法中,只有XMPI提出了公开的解决方法实现。但是XMPI本身有很多不足的地方,使得它对LAM/MPI程序的调试有很多欠缺的地方。即使在目前的最高版本的xmpi-2.2.3b8当中,也存在以下不足:
1.没有对通信消息分类,也没有计算各个类型通信所花费的时间。由此在调试程序当中,无法发现哪些函数花费的时间最多,也就无法来优化程序的设计,使程序运行后,在消息通讯上面花费的时间最少,更好的提高程序运行的效率和缩短执行的时间。
2.没有对进程分配到哪个物理节点上进行计算和相互通讯,也没有这些进程具体的运行状态记录和回放。由此在程序运行期间,无法知道各个进程在不同的物理节点上面进程运行的情况,也无法反映物理节点工作的负载情况以及这个物理节点的通讯情况,以致于无法调整进程在物理节点的分布来提高程序运行的效率和更合理的分配进程。
发明内容
本发明的目的在于针对现有技术的不足,提出一种并行程序可视化调试方法,能够对通讯消息的分类、各类通讯消息的累积花费时间,以及程序运行期间物理节点运行状态进行可视化显示。
为实现这样的目的,本发明针对使用LAM/MPI(消息传递接口)平台运行的MPI程序进行调试方法的改进,提取LAM/MPI平台上程序运行期间进程间通讯消息的详细信息,并通过这些信息来计算出各个类型的通讯函数上面花费的时间,并可视化显示出结果。同时通过提出各个节点的消息的信息来反映出各个节点的CPU(中央处理器)运行状态,并通过时间的顺序,来连续显示各个物理节点的运行状态。
本发明的方法具体包括如下步骤:
1、首先定义一个节点消息结构体链表,其中包括本结构体链表所在物理节点号、本结构体链表所在的进程号、一个具体通讯信息记录的链表头。
2、针对进程通讯中的每一个消息,定义一个消息记录的结构体来记录一个进程通讯中的一个消息的具体属性,包括:消息类型、消息个数、消息来源、目的地、消息的通讯时间和消息的内容,把所有进程之间通讯形成的消息记录的结构体挂在节点消息结构体链表的通讯新型记录的链表头上面,使之形成消息记录的链表。
3、定义全局存储消息结构体,其中包括:物理节点号、进程号、以及各个节点的消息链表头。把各个节点各自存储的节点消息结构体链表汇总到统一的全局存储消息结构体。
4、把这个汇总的全局存储消息结构体写入到一个记录消息的文件当中,作为永久保存数据的形式,便于程序运行结束后,重现消息收发的全过程。
5、定义全局调试信息存储变量,其中内容包括:整个所有各个节点的进程总数、所有进程的各个节点的进程的链表、信息记录的最小时间点和最后记录结束的时间。统一把全局存储消息结构体对象存放到这一个全局调试信息存储变量中。全局调试信息存储变量的信息格式是已经经过初步整合的便于调试用的信息。
6、利用LAM/MPI提供的API,把各个节点的信息转到全局调试信息存储变量当中。
7、遍历这个全局调试信息存储变量中记录的链表的值,把这些链表当中记录的消息,进行一一读取,根据记录的消息的其中一个属性:顶层调用函数名、来进行消息分类、并且读出这个消息发送的时间。根据这个消息的目的地的节点号记录,去查找目的地节点号的链表,找到这个消息接收时候的系统时间。把消息发送时的系统时间减去消息接收时的系统时间,根据得到的时间差确定顶层调用函数名这个消息从发送到接收所需时间。把所有以顶层调用函数名调用发送的消息所花费的时间进行累计,确定并行程序运行期间花费在此顶层调用函数上面的时间。
8、定义节点状态结构体,内容包括:各个进程所在物理节点号、进程号、进程的状态,进程的通讯时的开始时候系统时间以及持续的时间。
9、遍历全局调试信息存储变量里面信息,提取出来放到节点状态结构体里面,并形成链表。
10、以某个时间点作为基准来查询记录消息内容的节点状态结构体链表,查看这个时间点是否有通讯存在来确定节点的状态。节点状态可以分成四个状态:计算状态、节点系统自己运行的开销状态、节点通讯的等待状态或系统处于无任务的状态。统计每个物理节点,以及这个节点上面在每个时间点的机器运行的状态。在一个节点上面可能运行多个进程,根据这多个进程在同一个时间点的不同状态来计算出此物理节点的运算状态。状态的优先级别是:节点计算状态,节点的系统开销状态,节点的等待状态或节点的无任务进程状态依次递减。找到所有进程当中最高优先级的那个状态,作为此物理节点的工作状态。
11、通过基于linux下图形界面的开发库X/Motif的图形用户界面,来把顶层调用函数名及其花费在消息发送接收上的时间的统计以及随着时间点的推移,就可以获得各个物理节点的运行状态的变化情况,做成效果图。
通过以上的步骤实施,可以获得消息分类统计运行开销时间的可视化图和物理节点的运行状态变化显示图,使其能够在调试和运行并行程序MPI的时候,通过观察不同类型消息的时间花费和某个节点的状态变化。这样可以了解并行程序在运行期间,是有多少时间消耗在进程间通讯,以及在哪些标准函数通讯当中消耗的时间比较多,同时通过监控物理节点的运行状况,来更好的调整进程的在不同节点的分布使得能够最佳有效的利用CPU,减少物理节点间通讯次数的调试作用,最终可以发现所调试的程序问题的所在,并解决问题,达到了帮助发现并行程序问题的调试功能。尤其是在推出了MPI-2的标准以后,对于物理节点的工作状态监控,动态加入和删除节点的时时监控的意义就更是重大了。
附图说明
图1为本发明实施例通过分类统计不同通讯函数开销时间的可视化效果图。
图2为本发明实施例物理节点动态显示的效果图。
具体实施方式
1、首先定义一个节点消息结构体链表,其中包括本链表所在物理节点号trs_node、本结构体链表所在的进程号trs_pid、一个具体通讯信息记录的链表头tracchainhead。
节点消息结构体链表的结构为:struct nodetrace{
●trs_node:本链表所在的物理节点号,其类型是int4型
●trs_pid:形成消息记录链表的进程号,其类型是int4型
●struct tracchainhead*tracehead:通讯信息记录的链表头,其类型由下面具体定义。
定义链表头tracchainhead:包括:消息的时间trr_time类型为int4,消息类型trr_type类型为int4,消息记录的结构体数组msg。
2、针对进程通讯中的每一个消息,定义一个消息记录的结构体structtracemsg来记录一个进程通讯中的一个消息的具体属性,包括:消息类型topfunction类型是int4,消息个数count类型是int4型,消息来源mrank类型是int4型,目的地peer类型是int4型,消息的通讯时间syst类型是int4型和消息的内容cid类型是int4型等等,把所有进程之间通讯形成的消息记录的结构体挂在节点消息结构体链表的通讯新型记录的链表头上面,使之形成消息记录的链表。
这个消息记录的结构体具体的专业定义如下:
struct tracemsg:表示每一个消息的详细信息!
■Topfunc:最顶层的调用函数,类型是int4
■Wrapfunc:下一层的包装函数,类型是int4
■syst:使用的记录消息的系统时间,类型是int4
■Blkt:记录消息受阻塞的时间,类型是int4
■Peer:发送,接受的进程号,类型是int4
■Tag:唯一标识符,类型是int4
■cid:上下文ID,类型是int4
■dtype:数据类型标签,类型是int4
■count:数据个数,类型是int4
■mrank:对应发送或是接受的那个进程的号码,类型是int4
■mtag:对应发送或是接受的那个进程的唯一标识符,类型是int4
■seqnum:顺序值,类型是int 4
3.定义全局存储消息结构体,其中包括:物理节点号pgs_node,进程号gps_pid,以及各个节点的消息链表头nodetrace。把各个节点各自存储的节点消息结构体链表汇总到统一的全局存储消息结构体。
定义全局存储消息结构体:struct globaltraceinfor
●gps_node:节点号,类型是int4
●gps_pid:进程号,类型是int4
●nodetrace*nodetrace:节点消息结构体链表,类型是int4
4.当所有节点运行完毕后,各个节点都有链表来记录本节点的具体信息,并统一存到一个tracefile里面,用于以后的消息回放。
5.定义全局调试信息存储变量turinginfo,其中内容包括:整个所有各个节点的进程总数nproc,所有进程的各个节点的进程的链表procs,信息记录的最小时间点mintime和类型double,最后记录结束的时间点maxtime和类型double。统一把全局存储消息结构体对象存放到这一个全局调试信息存储变量中。全局调试信息存储变量的信息格式是已经经过初步整合的便于调试用的信息。全局调试信息存储变量具体的结构体定义:
struct turinginfo
●nprocs:进程数,类型iht
●procs:进程链表,类型xmproc
●mintime:记录消息的开始时间,类型double
●maxtime:记录消息的最后时间,类型double
●curtime:当前消息,类型double
●minlapse:消息的最短开销时间,类型double
6.首先把信息转到全局变量turinginfo当中:由XMPI这个可视化调试工具读取LAM/MPI在运行一个并行程序结束后生成的tracefile文件,读出程序运行当中消息互发的记录信息,并重新回放显示出来。在xmpi里面显示trace的消息互发内容,包括从哪里读到了这些trace信息,如何的提取信息来显示的。当并行程序运行完毕之后,LAM/MPI环境已经记录的各个节点消息通讯的详细记录都记录在文件当中,并且按照不同节点的链表进行分类。使用LAM/MPI环境提供API:lamtr_parse_world(&nprocess,&world)把所有的链表读到world(struct globaltraceinfor结构体)这个结构体链表当中,nprocess表示存在多少个链表。得到了world,通过操作world来获取,因为各个节点都存在记录自己节点的链表,通过使用get_mpi_world(int4 world_n,struct globaltraceinfor*world,structglobaltraceinfor*mpiworld)这个函数把各个节点的信息统一提取发送到调用这个API的节点并存入mpiworld,再通过使用db_init(nproes,world)这个xmpi系统函数来调用把globaltraceinfor转换成全局存储消息结构体,它是xmdb结构体类型。
7.遍历这个全局调试信息存储变量中记录的链表的值,把这些链表当中记录的消息,进行一一读取,根据记录的消息的其中一个属性:顶层调用函数名,来进行消息分类,并且读出这个消息发送的时间。根据这个消息的目的地的节点号记录,去查找目的地节点号的链表,找到这个消息接收时候的系统时间。把消息发送时的系统时间减去消息接收时的系统时间,根据得到的时间差确定顶层调用函数触发的消息从发送到接收所需时间。
使用一个函数来完成这个功能:double Totaltime(structturinginfo dbase,int functionname){
int iprocess;//记录整个所有进程运行期间的进程数目。
struct xmdbproc*proc;//用来记录进程的链表。
struct xmdbtr*dbtrace;//用来记录每个进程里面消息的链表。
struct xmdbenv db_envelop;//记录每个消息具体的属性。
double totaltime=0;//用来记录某个通信函数具体花费的时间
proc=base.xdb_procs;
for(iprocess=0;iprocess<dbase.nprocs;iprocess++)/*循环遍历查找所有进程来检查每一个消息的属性*/{for(int j=0;j<al_count(proc.*traces);j++)//循环遍历每个进程中的通讯消息数目。
{dbtrace=(structxmdbtr*)proc(iprocess).xdbp_curtrace;//db_envelop=dbtrace.xdbt_envelop;//来获得每个消息的具体属性值
if(db_envelop.xdbe_func==functionname)/*比较这个消息是否是我们要统计的那个函数的名称*/
totaltime=totaltime+db_envelop.xdbt_blktotal;//如果是,就累加它的花费时间.
}}
return totaltime;}
就可以得到任何一个通讯函数的总时间。
8.定义结构体节点状态结构体:xmnodestate。包括了物理节点号xmn_nodeid,进程节点号xmn_rank,消息起始时间点xmn_time,消息的开销时间xmn_lapse,进程的状态xmn_state。
节点状态结构体:struct xmnodestate
●xmn_nodeid:物理节点号码,类型int
●xmn_rank:进程节点号码,类型int
●xmn_time:消息的起始时间点,类型double
●xmn_lapse:消息的开销时间,类型double
●xmn_state:进程的状态,类型int
9.遍历全局调试信息存储变量里面,并提取信息来放到节点状态结构体里面,并形成链表。
int xmpi_db_getnodetraces(double t1,double t2,
struct xmnodestate**ptraces)
{ //定义变量
double curtime;/*当前的时间*/
struct xmnodestate*traces;/*消息状态连表*/
struct xmnodestate*etraces;/*扩展链表空间*/
struct xmdbproc*proc;/*进程*/
/*
*把提取消息的时间点设到当前的位置
*/
curtime=dbase.curtime;
xmpi_db_settime(t1);/**循环遍历dbase中的进程链表*/
proc=dbase.xdb_procs;//从dbase里面提取进程消息链表(e)
for(i=0;i<dbase.nprocs;++i,++proc){
trlist=proc->xdbp_traces;//一一提取消息出来/*
*把在时间t1,t2之间的消息提取出来,形成消息状态链表
*/
p=proc->xdbp_curtrace;
for(;p&&(p->xdbt_time<=t2);
p=(struct xmdbtr*)al_next(trlist,(char*)p)){
}/*
*把进程链表的消息数据提取到xmnodestate结构体里面
*/
traces[n].xmn_nodeid=proc->xdbp_node;//放到结构体里面
traces[n].xmn_rank=p->xdbt_grank;//放到结构体里面
traces[n].xmn_state=p->xdbt_state;//放到结构体里面
traces[n].xmn_time=p->xdbt_time;//放到结构体里面
traces[n].xmn_lapse=p->xdbt_lapse;//放到结构体里面
++n;
}}
*ptraces=traces;
xmpi_db_settime(curtime);
return(n);}
10、以某个时间点作为基准来查询记录消息内容的节点状态结构体链表,查看这个时间点是否有通讯存在来确定节点的状态。节点状态可以分成四个状态:计算状态,节点系统自己运行的开销状态,节点通讯的等待状态,系统处于等待的状态。统计每个物理节点,以及这个节点上面在每个时间点的机器运行的状态。在一个节点上面可能运行多个进程,根据这多个进程在同一个时间点的不同状态来计算出此物理节点的运算状态。状态的优先级别是:节点计算状态,节点的系统开销状态,节点的等待状态,节点的无任务进程状态依次递减。所以找到所有进程当中最高优先级的那个状态,就是此物理节点的工作状态。这样可以获得任何一个时间点的,某个节点的机器状态信息,是计算状态或是等待状态。通过这种方式,可以获得整个并行运行环境当中,各个节点的同一个时间点的运行状态。
11、通过基于X/Motif(linux下图形界面的开发库)的图形用户界面,来把顶层调用函数名及其花费在消息发送接收上的时间的统计以及随着时间点的推移,就可以获得各个物理节点的运行状态的变化情况,做成效果图。
图1为分类统计不同通讯函数开销时间的可视化效果图。
■在通讯函数:
◆mpi_recv上耗费0.813秒
◆mpi_wait上耗费的时间0.115秒等等
■把所有的通讯时间相加和把所用用于计算的时间相加可以累计得到:
◆整个程序运行期间计算的时间是:2.028秒
◆整个程序运行期间MPI通讯函数:2.109秒
图2为物理节点动态显示的效果图。
可以通过可视化的效果图2看出,在并行程序运行期间,各个节点参与运行的机器都有哪些,各个节点在同一时刻机器运行状态。绿色表示参与计算,黄色表示系统本身开销时间,红色表示系统通讯等待状态。各个物理节点出于不同状态所标注的颜色不同,之后根据时间的推移不同的颜色变换,来显示各个节点的状态的变化。首先启动LAM/MPI环境,启动了两个节点:一个是N0,本地的机器名grid.cs.sjtu.edu.cn的节点,另一个是N1,在cluster环境下的远程节点may.cs.sjtu.edu.cn。两个物理节点运行五个并行程序。由粉线圈出的部分就是新增的物理节点工作状态显示的模块,由图2可以看出进程0、2、4被分配给本地节点,而进程1、3被分配给参与并行计算的cluster环境下的may.cs.sjtu.edu.cn这个节点上面。可以看出并行程序的所有进程运行的时间是在0.000040s和0.002547s之间,随着时间的推移到了图中所示的粗的白线位置0.000624s时候,两个物理节点的状态是本节点处于运行状态(浅色),远程的may.cs.sjtu.edu.cn节点处于等待(深色)状态。本实施例是使用的MPI程序中,所有进程间都要至少通讯一次的alltoall标尺程序做的测试和效果的显示。
Claims (1)
1、一种并行程序可视化调试方法,其特征在于包括如下步骤:
1)首先定义一个节点消息结构体链表,其中包括本结构体链表所在物理节点号、本结构体链表所在的进程号、一个具体通讯信息记录的链表头;
2)针对进程通讯中的每一个消息,定义一个消息记录的结构体来记录一个进程通讯中的一个消息的具体属性,包括消息类型、消息个数、消息来源、目的地、消息的通讯时间和消息的内容,把所有进程之间通讯形成的消息记录的结构体挂在节点消息结构体链表的通讯新型记录的链表头上面,使之形成消息记录的链表;
3)定义全局存储消息结构体,其中包括物理节点号、进程号以及各个节点的消息链表头,把各个节点各自存储的节点消息结构体链表汇总到统一的全局存储消息结构体;
4)把这个汇总的全局存储消息结构体写入到一个记录消息的文件当中,作为永久保存数据的形式,便于程序运行结束后,重现消息收发的全过程;
5)定义全局调试信息存储变量,其中内容包括:整个所有各个节点的进程总数、所有进程的各个节点的进程的链表、信息记录的最小时间点和最后记录结束的时间,统一把全局存储消息结构体对象存放到这一个全局调试信息存储变量中,全局调试信息存储变量的信息格式是已经经过初步整合的便于调试用的信息;
6)利用本地区域机器/消息传递接口提供的应用程序接口,把各个节点的信息转到全局调试信息存储变量当中;
7)遍历这个全局调试信息存储变量中记录的链表的值,把这些链表当中记录的消息进行一一读取,根据记录的消息的其中一个属性:顶层调用函数名,来进行消息分类,并且读出这个消息发送的时间,根据这个消息的目的地的节点号记录,去查找目的地节点号的链表,找到这个消息接收时候的系统时间,把消息发送时的系统时间减去消息接收时的系统时间,根据得到的时间差确定顶层调用函数名这个消息从发送到接收所需时间,把所有以顶层调用函数名调用发送的消息所花费的时间进行累计,确定并行程序运行期间花费在此顶层调用函数上面的时间;
8)定义节点状态结构体,内容包括各个进程所在物理节点号、进程号、进程的状态、进程开始通讯时的系统时间以及通讯持续的时间;
9)遍历全局调试信息存储变量里面信息,提取出来放到节点状态结构体里面,并形成链表;
10)以某个时间点作为基准来查询记录消息内容的节点状态结构体链表,查看这个时间点是否有通讯存在来确定节点的状态:计算状态、节点系统自己运行的开销状态、节点通讯的等待状态或系统处于等待的状态,统计每个物理节点以及这个节点上面在每个时间点的机器运行的状态,根据一个节点上面可能运行的多个进程在同一个时间点的不同状态来计算出此物理节点的运算状态,状态的优先级别依次递减是:节点计算状态、节点的系统开销状态、节点的等待状态、节点的无任务进程状态,找到所有进程当中最高优先级的那个状态作为此物理节点的工作状态;
11)通过基于linux下图形界面的开发库X/Motif的图形用户界面,把顶层调用函数名及其花费在消息发送接收上的时间的统计以及随着时间点的推移,获得各个物理节点的运行状态的变化情况,做成效果图。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2004100665779A CN1300699C (zh) | 2004-09-23 | 2004-09-23 | 并行程序可视化调试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2004100665779A CN1300699C (zh) | 2004-09-23 | 2004-09-23 | 并行程序可视化调试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1588323A CN1588323A (zh) | 2005-03-02 |
CN1300699C true CN1300699C (zh) | 2007-02-14 |
Family
ID=34604036
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004100665779A Expired - Fee Related CN1300699C (zh) | 2004-09-23 | 2004-09-23 | 并行程序可视化调试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1300699C (zh) |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101404696B (zh) * | 2008-11-03 | 2012-10-10 | 中兴通讯股份有限公司 | 可视化业务流程跟踪方法和系统、业务流程处理系统 |
CN101571814B (zh) * | 2009-06-01 | 2011-08-24 | 中国科学院计算技术研究所 | 基于消息传递接口的设备的通信行为信息提取方法及系统 |
US8539456B2 (en) * | 2009-06-30 | 2013-09-17 | Intel Corporation | Automatic conversion of MPI source code programs into MPI thread-based programs |
CN101620549B (zh) * | 2009-08-13 | 2014-03-19 | 恒生电子股份有限公司 | 一种性能分析方法及装置 |
CN102419751A (zh) * | 2010-09-28 | 2012-04-18 | 迈普通信技术股份有限公司 | 配置脚本快速收集方法及网络通信设备 |
CN102063368B (zh) * | 2010-12-16 | 2013-03-27 | 国网电力科学研究院 | 基于命名变量的全景数据在线实时调试方法 |
CN102169436B (zh) * | 2011-05-10 | 2014-04-09 | 清华大学 | 用于集成电路制造设备的通用控制内核系统 |
CN102789413B (zh) * | 2011-05-23 | 2016-02-17 | 同济大学 | 一种并行程序的调试系统及方法 |
CN102270131A (zh) * | 2011-06-29 | 2011-12-07 | 深圳市博康智能信息技术有限公司 | 一种调试信息统一管理系统 |
CN103577301B (zh) * | 2012-07-20 | 2017-12-05 | 腾讯科技(深圳)有限公司 | 一种显示进程信息的方法和终端 |
CN102929780B (zh) * | 2012-11-06 | 2015-11-18 | 无锡江南计算技术研究所 | 基于应用逻辑序的并行程序调试方法和装置 |
CN104468157B (zh) * | 2013-09-16 | 2020-01-17 | 上海斐讯数据通信技术有限公司 | 分发包方法 |
CN104461876B (zh) * | 2014-11-26 | 2017-09-22 | 北京航空航天大学 | 一种基于运行快照序列的并行程序重现调试方法 |
CN105808436A (zh) * | 2016-03-10 | 2016-07-27 | 成都广达新网科技股份有限公司 | 一种用于eoc局端的调试打印集中管理系统及其工作方法 |
CN105843629B (zh) * | 2016-04-20 | 2019-03-12 | 中国电子科技集团公司第二十八研究所 | 一种指挥控制系统软件模拟消息产生方法及装置 |
CN108021495B (zh) * | 2016-11-03 | 2021-05-14 | 北京计算机技术及应用研究所 | 基于回放的代码调试方法 |
CN108984212B (zh) * | 2017-05-31 | 2021-06-25 | 腾讯科技(深圳)有限公司 | 一种关闭进程的方法以及电子设备 |
CN108132872B (zh) * | 2018-01-10 | 2020-04-03 | 成都信息工程大学 | 基于并行超算网格云平台的grapes系统优化方法 |
CN109144893A (zh) * | 2018-09-11 | 2019-01-04 | 郑州云海信息技术有限公司 | 一种与非易失性内存储器进程交互的方法与装置 |
JP6890738B2 (ja) * | 2019-02-26 | 2021-06-18 | 三菱電機株式会社 | 情報処理装置、情報処理方法及び情報処理プログラム |
CN112540907B (zh) * | 2019-09-20 | 2022-11-25 | 无锡江南计算技术研究所 | 面向异构众核上并行程序的可视化调试方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08185340A (ja) * | 1994-12-27 | 1996-07-16 | Toshiba Corp | 並列プログラムデバッグ方法および並列プログラム可視化装置 |
JP2001229048A (ja) * | 2000-02-15 | 2001-08-24 | Nec Corp | デバッグ装置、デバッグ方法、および、デバッグ用プログラムを記録した記録媒体 |
-
2004
- 2004-09-23 CN CNB2004100665779A patent/CN1300699C/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08185340A (ja) * | 1994-12-27 | 1996-07-16 | Toshiba Corp | 並列プログラムデバッグ方法および並列プログラム可視化装置 |
JP2001229048A (ja) * | 2000-02-15 | 2001-08-24 | Nec Corp | デバッグ装置、デバッグ方法、および、デバッグ用プログラムを記録した記録媒体 |
Also Published As
Publication number | Publication date |
---|---|
CN1588323A (zh) | 2005-03-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1300699C (zh) | 并行程序可视化调试方法 | |
CN1308826C (zh) | 用于smt处理器上的cpi调度的系统和方法 | |
CN1704908A (zh) | 定位程序异常的方法 | |
CN1828541A (zh) | Java操作系统中定时任务的实现方法 | |
CN101036127A (zh) | 源码检查器、方法、程序以及存储介质 | |
CN1680944A (zh) | 模拟装置和设计半导体集成电路的方法 | |
CN1916842A (zh) | 构件化软件系统中实现反射机制的构件封装方法 | |
CN1949185A (zh) | 异构环境下支持多语言多平台的并行调试及性能分析方法 | |
CN1815499A (zh) | 工作排程管理系统与方法 | |
CN1684035A (zh) | 优先级绑定 | |
CN1490718A (zh) | 多重处理环境中透明动态优化的方法和系统 | |
CN1655118A (zh) | 处理器和编译器 | |
CN1767453A (zh) | 自动测试方法和系统 | |
CN1304178C (zh) | 一种多机械臂机器人关节间的碰撞检测方法 | |
CN1834907A (zh) | 在运行时期间优化计算机程序的系统与方法 | |
CN1282085C (zh) | 一种嵌入式系统多任务并发调试的方法 | |
CN1889048A (zh) | 组件的实现方法以及系统 | |
CN1805424A (zh) | 一种网格模拟方法及其模拟器 | |
CN100346315C (zh) | 基于脚本的三维建模软件自动测试方法 | |
CN1744092A (zh) | 一种自动调度逻辑仿真与代码覆盖率分析的方法与系统 | |
CN1172986A (zh) | 实时控制系统 | |
CN1863085A (zh) | 保证网管和网元配置数据一致性的方法及系统 | |
CN1529858A (zh) | 计算系统 | |
CN101046745A (zh) | 控制界面上控件之间关系的方法、装置及控件显示系统 | |
CN101030884A (zh) | 电信网络资源oss系统中独占性资源的调度方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20070214 Termination date: 20091023 |