CN101196827A - 一种并行模拟器及方法 - Google Patents

一种并行模拟器及方法 Download PDF

Info

Publication number
CN101196827A
CN101196827A CNA2007103046539A CN200710304653A CN101196827A CN 101196827 A CN101196827 A CN 101196827A CN A2007103046539 A CNA2007103046539 A CN A2007103046539A CN 200710304653 A CN200710304653 A CN 200710304653A CN 101196827 A CN101196827 A CN 101196827A
Authority
CN
China
Prior art keywords
module
entity
communication
thread
parallel
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.)
Granted
Application number
CNA2007103046539A
Other languages
English (en)
Other versions
CN100524221C (zh
Inventor
陈明宇
许建卫
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Computing Technology of CAS
Original Assignee
Institute of Computing Technology of CAS
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Institute of Computing Technology of CAS filed Critical Institute of Computing Technology of CAS
Priority to CNB2007103046539A priority Critical patent/CN100524221C/zh
Publication of CN101196827A publication Critical patent/CN101196827A/zh
Application granted granted Critical
Publication of CN100524221C publication Critical patent/CN100524221C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明涉及计算机领域,公开了一种并行模拟器及方法。本发明的一种并行模拟器及方法将并行模拟器中的同步、通信以及调度等功能集成在一起,形成一个框架,同时,向用户提供基本应用编程接口API,用户只需在满足所述框架约束的前提下调用所述基本应用编程接口API,就可以实现所述并行模拟器中的功能。

Description

一种并行模拟器及方法
技术领域
本发明涉及计算机领域,特别是一种并行模拟器及方法。
背景技术
模拟器是科研人员在研究计算机体系结构的过程中所需要的重要工具,执行驱动的系统模拟器由于具有模拟精度高、可以开发调试系统软件等特点,在很多方面都得到了广泛的使用。目前,限制系统模拟器使用的主要因素是模拟器的运行速度,功能级模拟器的解释型减速比一般在1000倍左右,而时钟级模拟器则比功能级模拟器还要慢1~2个数量级。由于目前单处理器正逐渐由单核向多核发展,高性能计算机的规模已经到了上万甚至几十万个节点,因此而导致的目标系统的规模增大使得模拟器的速度问题更为明显。
为了加速模拟器的运行,在串行模拟中,常常会采用穿线码技术和二进制翻译技术,如果目标系统中的指令集和宿主机指令集相同,还可以采用直接执行技术。但是,在这些加速手段中,忽略了指令执行的细节,因此这些加速手段只对功能级模拟器有效。由于在目标系统是多处理器的情况下,串行模拟器只能将多个处理器按照一定的次序进行排序,然后进行串行执行,而无法模拟出多处理器中进行并发执行的情况,因此使用串行模拟器来模拟多处理器的目标系统时,其模拟结果会发生失真。
随着技术的进步,为了解决串行模拟器进行模拟时的限制,同时为了充分利用现有多机、多处理器系统的能力,并行模拟器逐渐出现并运用在了科研之中。在并行模拟器中,通常会对目标系统的一个节点使用一个进程来模拟,依靠多个进程之间协作完成目标系统的模拟(L.Ceze,K.Strauss,G.Almasi,P.J.Bohrer,J.R.Brunheroto,C.Cascaval,J.G.Castanos,D.Lieber,X.Martorell,J.E.Moreira,A.Sanomiya,and E.Schenfeld.Full Circle:Simulating Linux Clusters onLinux Clusters.In Proceedings of the Fourth LCI International Conference onLinux Clusters:The HPC Revolution 2003.),但是,在模拟大规模系统的实现方案中仍然缺乏严格的时钟同步管理等机制的支持。
发明内容
本发明的目的在于,提供一种并行模拟器及方法,以解决现有的并行模拟器中生产率、可重用性及同步等方面存在的问题。
为了实现上述目的,本发明提供了一种并行模拟器,包括仿真内核模块以及模拟子模块,所述仿真内核模块用于实现负载部署、内存管理、负载同步、通信、调度以及提供应用编程接口功能,所述模拟子模块用于通过所述仿真内核模块提供的应用编程接口功能,调用所述仿真内核模块提供的功能。
较佳的,在所述并行模拟器中,所述仿真内核模块中,包括负载部署模块、负载同步模块、通信模块、调度模块、内存管理模块以及应用编程接口模块;
所述负载部署模块,用于根据负载情况和宿主机的能力将目标系统中所存在的实体分配到不同的处理器或不同的节点上;
所述负载同步模块,用于实现经过所述负载部署模块分配后的在不同处理器或不同的节点中执行的实体的同步执行;
所述通信模块,用于实现所述实体之间的通信;
所述调度模块,用于实现所述实体之间以及每个所述实体中的部件之间的调度;
所述内存管理模块,用于实现对缓冲区的管理;
所述应用编程接口模块,用于储存和管理应用编程接口函数。
较佳的,在所述并行模拟器中,每个所述宿主机上运行一个进程,每个进程根据宿主机处理器个数启动相应的线程,每个处理器上启动一个线程,所述负载部署模块用于根据所述宿主机处理器的个数,将系统负载中的实体平均的分配到与所述宿主机的处理器相对应的线程中运行。
较佳的,在所述并行模拟器中,所述负载同步模块采用PDES保守同步机制以实现经过所述负载部署模块分配后的在不同处理器或不同的节点中执行的实体的同步执行。
较佳的,在所述并行模拟器中,所述负载同步模块为所述实体中的每个部件隐藏的增加一个同步部件,所述同步部件用于对与其相对应的部件进行阻塞和唤醒操作,以实现同步的目的。
较佳的,在所述并行模拟器中,所述通信模块通过在所述实体之间采用通信层、同步层和用户层三个层次的栈结构以实现所述实体之间的通信;
其中,所述用户层用于传输用户自定义的数据,所述同步层用以辅助实现所述负载同步模块的同步功能,所述通信层用于屏蔽所述并行模拟器中的不同进程。
较佳的,在所述并行模拟器中,所述通信模块在实现所述实体之间的通信时,对于同一个进程内部的通信,采取传递指针的方式进行通信,对于不同进程之间的通信,采取调用MPI函数的方式进行通信。
较佳的,在所述并行模拟器中,所述通信模块在实现所述实体之间的通信时,通过在所述通信层中设置一发送接收模块并让所述发送接收模块与所述实体共同参与调度执行的方式,以实现所述不同进程之间的安全通信。
较佳的,在所述并行模拟器中,所述发送接收模块还用于为每一个线程分配一个先进先出队列,将每个线程要发送或接收的消息存放在相应的队列中,以避免线程间的竞争。
较佳的,在所述并行模拟器中,所述调度模块通过为所述宿主机上的每个线程设置用户级调度器的方式实现调度本线程中的实体运行。
较佳的,在所述并行模拟器中,所述用户级调度器采用两级调度的方式,分别对所述实体和所述部件进行调度。
较佳的,在所述并行模拟器中,所述用户级调度器还用于对每个部件设置阻塞标识,对于阻塞标识设置为真的单元不参与调度,以辅助实现所述线程间的同步。
较佳的,在所述并行模拟器中,所述内存管理模块对每个线程的缓冲区采用多缓冲、原子计数的方法实现对缓冲区的管理。
为了实现上述目的,本发明还公开了一种并行模拟方法,包括以下步骤:
步骤100,设置负载部署模块;
步骤200,设置内存管理模块;
步骤300,设置负载同步模块、设置通信模块以及设置调度模块;
步骤400,设置应用编程接口模块;
步骤500,设置模拟子模块。
较佳的,在所述并行模拟方法中,所述步骤300中,设置负载同步模块、设置通信模块以及设置调度模块可以同时进行,也可以按照任意的顺序进行。
较佳的,在所述并行模拟方法中:
所述负载部署模块,用于根据负载情况和宿主机的能力将目标系统中所存在的实体分配到不同的处理器或不同的节点上;
所述负载同步模块,用于实现经过所述负载部署模块分配后的在不同处理器或不同的节点中执行的实体的同步执行;
所述通信模块,用于实现所述实体之间的通信;
所述调度模块,用于实现所述实体之间以及每个所述实体中的部件之间的调度;
所述内存管理模块,用于实现对缓冲区的管理;
所述应用编程接口模块,用于储存和管理应用编程接口函数。
较佳的,在所述并行模拟方法中,每个所述宿主机上运行一个进程,每个进程根据宿主机处理器个数启动相应的线程,每个处理器上启动一个线程,所述负载部署模块用于根据所述宿主机处理器的个数,将系统负载中的实体平均的分配到与所述宿主机的处理器相对应的线程中运行。
较佳的,在所述并行模拟方法中,所述负载同步模块采用PDES保守同步机制以实现经过所述负载部署模块分配后的在不同处理器或不同的节点中执行的实体的同步执行。
较佳的,在所述并行模拟方法中,所述负载同步模块为所述实体中的每个部件隐藏的增加一个同步部件,所述同步部件用于对与其相对应的部件进行阻塞和唤醒操作,以实现同步的目的。
较佳的,在所述并行模拟方法中,所述通信模块通过在所述实体之间采用通信层、同步层和用户层三个层次的栈结构以实现所述实体之间的通信;
其中,所述用户层用于传输用户自定义的数据,所述同步层用以辅助实现所述负载同步模块的同步功能,所述通信层用于屏蔽所述并行模拟器中的不同进程。
较佳的,在所述并行模拟方法中,所述通信模块在实现所述实体之间的通信时,对于同一个进程内部的通信,采取传递指针的方式进行通信,对于不同进程之间的通信,采取调用MPI函数的方式进行通信。
较佳的,在所述并行模拟方法中,所述通信模块在实现所述实体之间的通信时,通过在所述通信层中设置一发送接收模块并让所述发送接收模块与所述实体共同参与调度执行的方式,以实现所述不同进程之间的安全通信。
较佳的,在所述并行模拟方法中,所述发送接收模块还用于为每一个线程分配一个先进先出队列,将每个线程要发送或接收的消息存放在相应的队列中,以避免线程间的竞争。
较佳的,在所述并行模拟方法中,所述调度模块通过为所述宿主机上的每个线程设置用户级调度器的方式实现调度本线程中的实体运行。
较佳的,在所述并行模拟方法中,所述用户级调度器采用两级调度的方式,分别对所述实体和所述部件进行调度。
较佳的,在所述并行模拟方法中,所述用户级调度器还用于对每个部件设置阻塞标识,对于阻塞标识设置为真的单元不参与调度,以辅助实现所述线程间的同步。
较佳的,在所述并行模拟方法中,所述内存管理模块对每个线程的缓冲区采用多缓冲、原子计数的方法实现对缓冲区的管理。
本发明的有益效果是:
高生产率:模拟子模块编写者可以不用考虑并行模拟器如何在宿主机系统上进行部署,如何进行负载分配,不同子模块之间如果进行时钟同步以及不同子模块之间如何进行通信优化等问题。
高可重用性:只要是遵循仿真内核模块的约束,并使用仿真内核模块提供的应用编程接口API进行编写的部件模拟子单元都可以方便的加入到并行框架中形成可以模拟新功能的并行模拟器,而不用重新考虑加入新功能后并行模拟器如何设计。
便于调试:由于并行部分的功能和子模块的功能分离,并行功能的调试集中在框架部分,而基本功能的调试集中在基本模块中。这种分离可以使调试时排除无关因素的干扰,提高调试效率。
便于并行优化:由于框架部分被所有的模拟子模块共用,所以可以对框架部分做重点优化,这些优化效果将对于所有模拟子模块都可以显现。
附图说明
图1为本发明的并行模拟器的框架图;
图2为本发明中的实体与部件的关系示意图;
图3为本发明中程序运行时的任务部署图;
图4为本发明中实现同步的示意图;
图5为本发明中用以实现实体间通信的通信栈的示意图;
图6为本发明中的消息包的格式示意图;
图7为本发明中进行通信的框架图;
图8为本发明中每个线程的用户级调度器的结构图;
图9为本发明中的线程缓冲区的结构图
图10为本发明中的并行模拟方法的流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明的一种并行模拟器及方法进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
请参照图1所示,此为本发明的并行模拟器的框架图。本发明中的并行模拟器10中,包括仿真内核(simulation kernel,simk)模块11(框架)以及模拟子模块12。所述仿真内核模块11,用于实现类似于操作系统的功能,在本发明的具体实施例中,所述仿真内核模块11用于实现所述并行模拟器10中的负载部署、内存管理、负载同步、通信、调度以及提供应用编程接口功能,并将上述功能提供给所述模拟子模块12;所述模拟子模块12,用于实现类似于用户进程的功能,在本发明的具体实施例中,所述模拟子模块12通过应用编程接口API(类似于系统调用)的形式调用所述仿真内核模块11所提供的功能。
所述仿真内核模块11中,包括负载部署模块111、负载同步模块112、通信模块113、调度模块114、内存管理模块115以及应用编程接口API模块116。
所述仿真内核模块11中的负载部署模块111,用于根据负载情况和宿主机的能力将目标系统中所存在的实体分配到不同的处理器或不同的节点上,具体而言,所述负载部署模块111获取所有宿主机的信息,根据负载平衡的原则将目标任务尽可能均匀的分配到宿主机的不同线程上。
其中,在所述目标系统中,存在有多个实体,在所述仿真内核模块11中称这些实体为LE,其中,每个实体LE对应于实际系统中的一个多核CPU或者一个北桥芯片,它们之间的关系比较松散,一个实体LE内部结构的改变不会影响到其他实体LE的内部结构。在一个实体LE内部,可能会有一个或多个子实体,假如实体LE相当于一个CPU或一个北桥芯片,则所述子实体可以是所述CPU内部的一个处理器核或一个北桥芯片的各个端口,这些子实体在所述仿真内核模块11中被称为部件component,一个实体LE内部的部件component之间的关系比较紧密。请参照图2所示,此为实体LE与部件component的关系示意图,每个部件component属于一个实体LE,每个实体LE包含一个或多个部件component。所述仿真内核模块11中的任务分配以实体LE为最小粒度,根据负载情况和宿主机能力将实体LE分配到不同处理器或不同节点上。
同时,由于所述并行模拟器10采用了密集型同步的方式,因此如果某个实体LE长时间得不到执行的话,整个并行模拟器10的模拟性能都会急剧的下降。在所述并行模拟器10运作时,目标模拟器是一个多进程多线程程序,而目前的linux中运行多线程时的周期非常长,实验表明,如果两个以上模拟器线程争用一个CPU的话,实际上每个线程在运行时只有不足1%的时间真正用于运行程序,其余的时间全部被花费在了等待另一个线程中。因此,在所述仿真内核模块11设计中,采取了根据宿主机处理器个数来产生线程的方式。更进一步,为了防止线程在不同的处理器上来回切换,每个模拟器线程都被绑定在处理器上。请参照图3,此为程序运行时的任务部署图。图中每个宿主机节点上都运行一个进程,每个进程根据宿主机处理器个数启动相应的线程,每个处理器上启动一个线程。将系统负载中的实体LE平均的分配到这些线程上,从而由所有线程一起完成模拟任务。
所述仿真内核模块11中的负载同步模块112,用于实现经过所述负载部署模块111分配后的在不同处理器的进程或线程之间执行的实体(主要是指所述实体中的部件)的同步执行。
在实际物理系统中,不同的部件之间总是同步的,也就是说假如部件C1和部件C2的时钟频率分别为f1和f2,那么当部件C1推进了n1个周期的同时,部件C2推进了n2个周期,并且n2/n1=f2/f1。与在实际物理系统中不同,在并行模拟器中,如果部件C1和部件C2被分配到不同的处理器上执行,由于处理器负载的差异或由于其它干扰,当部件C1推进了n1周期而部件C2推进了n2个周期时,很可能n2/n1≠f2/f1。因此,在并行模拟器中需要解决的一个关键问题就是如何在不同进程或线程上的实体之间实现同步。
在本发明的仿真内核模块11中,在实现所述实体LE间的同步时,采用了PDES保守同步机制(R.M.Fujimoto.Parallel discrete-event simulation.Communications of the ACM,33(10):30--53,October 1990)。与保守同步机制相对应的另一种同步机制是乐观同步机制,所述保守同步机制与乐观同步机制的区别在于,保守同步机制要求所有的消息都按序收发,而乐观同步机制则允许乱序,即一旦收到滞后的消息,就将整个系统的状态回滚,以此保证整个系统中时序的正确。但是,如果采用乐观同步机制,首先,由于模拟器中的状态信息较多,实现回滚的开销会非常大;同时,由于实现回滚需要保存状态,而保存状态要么需要由用户来完成,要么需要由仿真内核模块11解析用户消息以分析状态信息,因而无论如何都无法实现一个灵活通用的模拟核心。因此,在本发明的仿真内核模块11中,采用了保守同步机制来实现不同进程或线程上模块之间的同步。
如图4所示,此为本发明中实现同步的示意图。在本发明的具体实施例中,为了对实体LE屏蔽其它实体LE之间的同步细节,所述仿真内核模块11为每个部件隐藏的增加了一个同步部件(sync component),所述同步部件实质上是一个用软件实现的同步模块,其用于对与其相对应的部件进行阻塞和唤醒操作,从而实现同步的目的。同时,所述同步部件还可以用于接收其他的部件发给与所述同步部件相对应的部件的信息,将所述信息缓存在队列中,以等待所述部件使用。
所述仿真内核模块11中的通信模块113,用于实现所述目标实体LE之间的通信。
本发明的所述仿真内核模块11中,在实体LE之间采用通信层、同步层和用户层三个层次的栈结构以实现通信。请参照图5所示,此为本发明中用以实现实体间通信的通信栈的示意图。其中,用户层用于传输用户自定义的数据;同步层用以辅助实现所述仿真内核模块11系统中的同步功能;通信层则主要用于屏蔽模拟系统中的不同进程,从而实现对用户透明的消息传输。
请参照图6所示,此为本发明的所述实体LE间进行通信所使用的消息包的格式示意图。所述消息包实质上是缓冲区,其中,dest id域以及len域属于通信层,type域以及tick域属于同步层,user data域属于用户层。同步层中的type域用来表示消息是同步层消息(所述同步层消息是所述仿真内核模块11用来同步用的NULL消息,对用户不可见)还是用户层消息,只有用户层消息才对用户可见,对于用户层进一步定义的消息类型,在仿真内核模块11层次不可见。通信层的dest id域用来标识消息要发向哪个部件,len域表明了缓冲区总长度。dest id域主要作用在于区分消息的目的端和发送端是否位于同一个进程内部,对于同一个进程内部的部件通信,消息发送只是简单的传递指针,并没有真实的数据拷贝,对于不同进程之间的消息交互,则需要调用MPI(消息传递接口)函数进行消息传递,在本发明的具体实施例中,使用的是根据MPI标准1.1实现的MPICH库1.2.7p1版本中的函数以实现上述技术方案。
由于模拟器是一个多进程多线程程序,而MPICH库是非线程安全的通信库,因此,本发明在通信层中提供了一个发送接收(SR)软件模块,用以解决线程安全的问题。当所述实体的部件之间进行通信的时候,在通信层判断所述消息包(缓冲区)dest id是否位于本进程内,如果位于本进程内,则直接将缓冲区指针发送过去。如果不是,则把缓冲区指针放入SR软件模块中。而后,所述SR软件模块像硬件实体一样参与调度执行,当执行到所述SR软件模块时,统一将本进程所有要发送的消息包(缓冲区)发送出去,并集中的把所有发往本进程的消息接收回来。这样,一方面解决了MPI的非线程安全问题,另一方面,对于每条消息,在本进程中都存在接收者(本进程中的部件或SR软件模块),从而实现了消息收发的统一。请参照图7所示,此为本发明中进行通信的框架图。当设置了所述SR软件模块后,所述仿真内核模块11可以透明的实现在进程内的实体LE之间采用共享内存的方式进行通信,在进程间采用消息传递的方式进行通信。
在所述并行模拟器10中,由于模拟器中每个进程都有多个线程,而每个线程中的实体LE都可能和其它进程中的实体LE通信,因此多线程可能同时向SR软件模块发送消息。为了提高效率,避免锁的使用,在本发明的具体实施例中,在SR软件模块中为每一个线程分配了一个先进先出队列,每个线程要发送或接收的消息都放在相应的队列中,这样通过以空间换时间的方法来避免线程间的竞争,从而提高所述仿真内核模块11的效率。
在本发明中,由于SR软件模块的存在,所有实体LE间的交互都可以在本进程内找到接收载体,因此消息的收发都可以采用“直接放入”的方式。所述直接放入,指的是消息由发送者发出后不在通信库中进行缓存,而是直接放入接收者的接收缓存中。在本发明的仿真内核模块11中,使用了图4中所示的同步部件来缓存发送给相应部件的消息。在所述部件调用消息接收函数recv时,直接从自己的同步部件中取出即可,整个消息发送过程中没有进行多余的缓冲区拷贝。
所述仿真内核模块11中的调度模块114,用于实现所述实体LE之间以及每个所述实体LE中的部件之间的调度。
在本发明中,当所述并行模拟器10运行时,每个线程都会被分配一个或多个实体LE。在所述仿真内核模块11中,每个线程有一个用户级调度器来调度本线程中的实体LE运行。由于目标系统被划分为实体LE和部件component两个层次,因此所述用户级调度器也采用两级调度的方式。请参照图8所示,此为本发明中每个线程的用户级调度器的结构图。如图8所示,所述用户级调度器的两级调度分别为实体LE调度和部件component调度,这两级调度策略之间互相独立,互不干扰。
同时,由于不同的实体LE或部件component被分配在不同的线程上,而逻辑上关联的部件component之间需要频繁的交互,比如需要收到对方的一条消息才能继续执行,或者由于需要时钟同步而等待对方推进时钟等,但是,不同线程之间的运行速度可能会存在差异,因此,在某一轮调度中,本线程中的部件component可能由于需要等待其它线程中的部件component而没有任务可以执行,如果这些没有任务可以执行的部件component也一起参与调度的话,将会带来模拟器效率的下降。因此,在本发明中,所述用户级调度器为每个调度单元(部件)都设置阻塞(block)标识,对于阻塞block标识设置为真(true)的单元本轮不参与调度。在所述仿真内核模块11中,设置block标识为true的操作称为阻塞,设置block标识为false的操作称为唤醒。部件component的阻塞时机发生在部件component调用sync_set_tick函数的时候,所述sync_set_tick函数是部件component告诉所述仿真内核模块11自己的当前时钟值,所述仿真内核模块11判断所述部件component的当前时间是否已经到达一个设定的阈值,如果到达,则把它阻塞。部件component的唤醒时机发生在所述仿真内核模块11接收到一个消息的时候。如果所述消息中携带的时间戳大于接收部件component的阈值,则把接收部件component唤醒。
所述仿真内核模块11中的内存管理模块115,用于实现缓冲区的管理。
如前所述,在本发明中,所述仿真内核模块11中的消息传递在进程内并没有缓冲区拷贝的过程,对于缓冲区的使用是由消息发送者申请缓冲区,消息使用者释放缓冲区。其中,由于消息发送者和消息接收者常常位于不同的线程中,因而就会出现多个线程同时对缓冲区进行操作的情况,当遇到这种情况时,通常的做法是借助于锁机制来使不同的线程对缓冲区分别进行互斥的操作,这种做法可以保证缓冲区的完整性,但是,采用锁机制会对模拟器的性能造成影响,尤其在线程数较多的情况下,这种影响就显得更为明显。在本发明中,所述仿真内核模块11中对每个线程的缓冲区采用多缓冲、原子计数的方法实现了高效的lock-free缓冲区管理策略。请参照图9所示,此为本发明中的线程缓冲区的结构图。在本发明的具体实施例中,为每个线程开辟了多个缓冲区,这些缓冲区循环进行使用。其中缓冲区操作流程如下所示:
缓冲区分配:在每个缓冲区中,设置一个当前current指针和一个计数器cnt,所述当前current指针指向当前可以分配的地址空间,所述计数器的初始值为0。每次有新的请求到达时,从所述当前current指针处分配地址空间,并把计数器cnt的计数原子增加1。
缓冲区释放:每次释放一个缓冲区时,只需简单的将计数器cnt的计数原子减1,而所述当前current的值并不发生改变。如果计数器cnt的值减为0,则表示该缓冲区再次可用,此时将所述当前current指针重新指向缓冲区的头部即可。
采用上述方法实现的缓冲区分配和释放,操作过程简单,不需要维护复杂的分配信息来记录已经分配出去的缓冲区,也不需要采用复杂的回收算法来对释放的缓冲区进行标识、合并等操作。
所述仿真内核模块11中的应用编程接口API模块116,用于储存和管理应用编程接口函数,所述并行模拟器10中的模拟子模块12可以通过调用所述应用编程接口模块116,来使用所述仿真内核模块11所提供的功能。
其中,所述应用编程接口函数包括以下种类:
register:初始化函数,使用所述仿真内核模块11的部件需要先向所述仿真内核模块11注册,以便让所述仿真内核模块11进行初始化。
get_buf,release_buf:用来申请和释放缓冲区,这些缓冲区用于部件component之间的信息交换。
send,recv:用来发送和接收消息。其中,send操作将消息直接放入接收者的同步sync部件,recv操作则从相对应的同步sync部件中取出消息。
set_tick,get_tick:用于部件和仿真内核模块11之间交换时钟信息,其中,set_tick操作是使部件告知仿真内核模块11自己的时钟,仿真内核模块11会据此判断是否需要将部件阻塞。get_tick操作则是部件询问仿真内核模块11得到的允许运行的最大时钟。
请参照图10,此为本发明的一种并行模拟方法的流程图。本发明中的一种并行模拟方法,包括以下步骤:
步骤S100,设置负载部署模块,所述负载部署模块获取所有宿主机信息,根据负载平衡的原则将目标任务尽可能均匀的分配到宿主机的不同线程上,各个实体进行任务初始化。
步骤S200,设置内存管理模块,根据线程个数初始化内存管理模块。
步骤S300,设置负载同步模块,为每个实体中的每个部件创建同步部件。
步骤S400,设置通信模块,根据所有实体的任务部署情况,建立模块间的通信对应关系。
步骤S500,设置调度模块,为每个线程设置用户级调度器,设置与每个所述用户级调度器相关的数据结构。
步骤S600,设置应用编程接口模块,以将在之前步骤中所设定的模块可以实现的功能提供给用户(模拟子模块)。
步骤S700,设置模拟子模块。
其中,步骤S300至步骤S500为同一层次的步骤,其可以同时进行,也可以按照任意顺序进行。
上述一种并行模拟方法中所涉及的各种模块的作用及原理等,请参见前述的对所述并行模拟器的描述,在此不再赘述。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。

Claims (27)

1.一种并行模拟器,其特征在于,包括仿真内核模块以及模拟子模块,所述仿真内核模块用于实现负载部署、内存管理、负载同步、通信、调度以及提供应用编程接口功能,所述模拟子模块用于通过所述仿真内核模块提供的应用编程接口功能,调用所述仿真内核模块提供的功能。
2.根据权利要求1所述的一种并行模拟器,其特征在于,所述仿真内核模块中,包括负载部署模块、负载同步模块、通信模块、调度模块、内存管理模块以及应用编程接口模块;
所述负载部署模块,用于根据负载情况和宿主机的能力将目标系统中所存在的实体分配到不同的处理器或不同的节点上;
所述负载同步模块,用于实现经过所述负载部署模块分配后的在不同处理器或不同的节点中执行的实体的同步执行;
所述通信模块,用于实现所述实体之间的通信;
所述调度模块,用于实现所述实体之间以及每个所述实体中的部件之间的调度;
所述内存管理模块,用于实现对缓冲区的管理;
所述应用编程接口模块,用于储存和管理应用编程接口函数。
3.根据权利要求2所述的一种并行模拟器,其特征在于,每个所述宿主机上运行一个进程,每个进程根据宿主机处理器个数启动相应的线程,每个处理器上启动一个线程,所述负载部署模块用于根据所述宿主机处理器的个数,将系统负载中的实体平均的分配到与所述宿主机的处理器相对应的线程中运行。
4.根据权利要求2所述的一种并行模拟器,其特征在于,所述负载同步模块采用PDES保守同步机制以实现经过所述负载部署模块分配后的在不同处理器或不同的节点中执行的实体的同步执行。
5.根据权利要求2所述的一种并行模拟器,其特征在于,所述负载同步模块为所述实体中的每个部件隐藏的增加一个同步部件,所述同步部件用于对与其相对应的部件进行阻塞和唤醒操作,以实现同步的目的。
6.根据权利要求2所述的一种并行模拟器,其特征在于,所述通信模块通过在所述实体之间采用通信层、同步层和用户层三个层次的栈结构以实现所述实体之间的通信;
其中,所述用户层用于传输用户自定义的数据,所述同步层用以辅助实现所述负载同步模块的同步功能,所述通信层用于屏蔽所述并行模拟器中的不同进程。
7.根据权利要求6所述的一种并行模拟器,其特征在于,所述通信模块在实现所述实体之间的通信时,对于同一个进程内部的通信,采取传递指针的方式进行通信,对于不同进程之间的通信,采取调用MPI函数的方式进行通信。
8.根据权利要求7所述的一种并行模拟器,其特征在于,所述通信模块在实现所述实体之间的通信时,通过在所述通信层中设置一发送接收模块并让所述发送接收模块与所述实体共同参与调度执行的方式,以实现所述不同进程之间的安全通信。
9.根据权利要求8所述的一种并行模拟器,其特征在于,所述发送接收模块还用于为每一个线程分配一个先进先出队列,将每个线程要发送或接收的消息存放在相应的队列中,以避免线程间的竞争。
10.根据权利要求2所述的一种并行模拟器,其特征在于,所述调度模块通过为所述宿主机上的每个线程设置用户级调度器的方式实现调度本线程中的实体运行。
11.根据权利要求10所述的一种并行模拟器,其特征在于,所述用户级调度器采用两级调度的方式,分别对所述实体和所述部件进行调度。
12.根据权利要求11所述的一种并行模拟器,其特征在于,所述用户级调度器还用于对每个部件设置阻塞标识,对于阻塞标识设置为真的单元不参与调度,以辅助实现所述线程间的同步。
13.根据权利要求2所述的一种并行模拟器,其特征在于,所述内存管理模块对每个线程的缓冲区采用多缓冲、原子计数的方法实现对缓冲区的管理。
14.一种并行模拟方法,其特征在于,包括以下步骤:
步骤100,设置负载部署模块;
步骤200,设置内存管理模块;
步骤300,设置负载同步模块、设置通信模块以及设置调度模块;
步骤400,设置应用编程接口模块;
步骤500,设置模拟子模块。
15.根据权利要求14所述的一种并行模拟方法,其特征在于,所述步骤300中,设置负载同步模块、设置通信模块以及设置调度模块可以同时进行,也可以按照任意的顺序进行。
16.根据权利要求14所述的一种并行模拟方法,其特征在于:
所述负载部署模块,用于根据负载情况和宿主机的能力将目标系统中所存在的实体分配到不同的处理器或不同的节点上;
所述负载同步模块,用于实现经过所述负载部署模块分配后的在不同处理器或不同的节点中执行的实体的同步执行;
所述通信模块,用于实现所述实体之间的通信;
所述调度模块,用于实现所述实体之间以及每个所述实体中的部件之间的调度;
所述内存管理模块,用于实现对缓冲区的管理;
所述应用编程接口模块,用于储存和管理应用编程接口函数。
17.根据权利要求16所述的一种并行模拟方法,其特征在于,每个所述宿主机上运行一个进程,每个进程根据宿主机处理器个数启动相应的线程,每个处理器上启动一个线程,所述负载部署模块用于根据所述宿主机处理器的个数,将系统负载中的实体平均的分配到与所述宿主机的处理器相对应的线程中运行。
18.根据权利要求16所述的一种并行模拟方法,其特征在于,所述负载同步模块采用PDES保守同步机制以实现经过所述负载部署模块分配后的在不同处理器或不同的节点中执行的实体的同步执行。
19.根据权利要求16所述的一种并行模拟方法,其特征在于,所述负载同步模块为所述实体中的每个部件隐藏的增加一个同步部件,所述同步部件用于对与其相对应的部件进行阻塞和唤醒操作,以实现同步的目的。
20.根据权利要求16所述的一种并行模拟方法,其特征在于,所述通信模块通过在所述实体之间采用通信层、同步层和用户层三个层次的栈结构以实现所述实体之间的通信;
其中,所述用户层用于传输用户自定义的数据,所述同步层用以辅助实现所述负载同步模块的同步功能,所述通信层用于屏蔽所述并行模拟器中的不同进程。
21.根据权利要求20所述的一种并行模拟方法,其特征在于,所述通信模块在实现所述实体之间的通信时,对于同一个进程内部的通信,采取传递指针的方式进行通信,对于不同进程之间的通信,采取调用MPI函数的方式进行通信。
22.根据权利要求21所述的一种并行模拟方法,其特征在于,所述通信模块在实现所述实体之间的通信时,通过在所述通信层中设置一发送接收模块并让所述发送接收模块与所述实体共同参与调度执行的方式,以实现所述不同进程之间的安全通信。
23.根据权利要求22所述的一种并行模拟方法,其特征在于,所述发送接收模块还用于为每一个线程分配一个先进先出队列,将每个线程要发送或接收的消息存放在相应的队列中,以避免线程间的竞争。
24.根据权利要求16所述的一种并行模拟方法,其特征在于,所述调度模块通过为所述宿主机上的每个线程设置用户级调度器的方式实现调度本线程中的实体运行。
25.根据权利要求24所述的一种并行模拟方法,其特征在于,所述用户级调度器采用两级调度的方式,分别对所述实体和所述部件进行调度。
26.根据权利要求25所述的一种并行模拟方法,其特征在于,所述用户级调度器还用于对每个部件设置阻塞标识,对于阻塞标识设置为真的单元不参与调度,以辅助实现所述线程间的同步。
27.根据权利要求16所述的一种并行模拟方法,其特征在于,所述内存管理模块对每个线程的缓冲区采用多缓冲、原子计数的方法实现对缓冲区的管理。
CNB2007103046539A 2007-12-28 2007-12-28 一种并行模拟器及方法 Expired - Fee Related CN100524221C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2007103046539A CN100524221C (zh) 2007-12-28 2007-12-28 一种并行模拟器及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2007103046539A CN100524221C (zh) 2007-12-28 2007-12-28 一种并行模拟器及方法

Publications (2)

Publication Number Publication Date
CN101196827A true CN101196827A (zh) 2008-06-11
CN100524221C CN100524221C (zh) 2009-08-05

Family

ID=39547260

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2007103046539A Expired - Fee Related CN100524221C (zh) 2007-12-28 2007-12-28 一种并行模拟器及方法

Country Status (1)

Country Link
CN (1) CN100524221C (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101873338A (zh) * 2009-04-27 2010-10-27 华为技术有限公司 并行模拟的事件同步方法以及模拟器
CN102207892A (zh) * 2011-05-27 2011-10-05 清华大学 一种动态可重构处理器内子单元间进行同步的方法
CN102467406A (zh) * 2010-11-09 2012-05-23 无锡江南计算技术研究所 多处理器结构的模拟方法及模拟器
CN103164338A (zh) * 2013-03-25 2013-06-19 华为技术有限公司 并发处理系统的模拟方法及装置
CN103207804A (zh) * 2013-04-07 2013-07-17 杭州电子科技大学 基于集群作业日志的MapReduce负载模拟方法
WO2013117065A1 (zh) * 2012-02-09 2013-08-15 中兴通讯股份有限公司 一种视频处理方法和系统、ivw和ivu
CN104572881A (zh) * 2014-12-23 2015-04-29 国家电网公司 基于多任务并发的配网图模导入方法
CN105930210A (zh) * 2012-12-05 2016-09-07 北京奇虎科技有限公司 Mpi函数调用方法和装置
CN106775597A (zh) * 2016-12-06 2017-05-31 复旦大学 一种松耦合结构的并行多核全系统模拟器
CN110825438A (zh) * 2018-08-10 2020-02-21 北京百度网讯科技有限公司 用于模拟人工智能芯片的数据处理的方法和装置
CN112380017A (zh) * 2020-11-30 2021-02-19 成都虚谷伟业科技有限公司 一种基于松散内存释放的内存管理系统

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5946472A (en) * 1996-10-31 1999-08-31 International Business Machines Corporation Apparatus and method for performing behavioral modeling in hardware emulation and simulation environments
US6074427A (en) * 1997-08-30 2000-06-13 Sun Microsystems, Inc. Apparatus and method for simulating multiple nodes on a single machine
JP4717492B2 (ja) * 2005-04-12 2011-07-06 富士通株式会社 マルチコアモデルシミュレータ
CN100336034C (zh) * 2005-04-22 2007-09-05 上海海事大学 嵌入式实时仿真平台
CN1900905A (zh) * 2005-07-24 2007-01-24 华为技术有限公司 测试描述语言的实现方法及其装置

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101873338A (zh) * 2009-04-27 2010-10-27 华为技术有限公司 并行模拟的事件同步方法以及模拟器
CN102467406A (zh) * 2010-11-09 2012-05-23 无锡江南计算技术研究所 多处理器结构的模拟方法及模拟器
CN102467406B (zh) * 2010-11-09 2014-04-16 无锡江南计算技术研究所 多处理器结构的模拟方法及模拟器
CN102207892A (zh) * 2011-05-27 2011-10-05 清华大学 一种动态可重构处理器内子单元间进行同步的方法
CN102207892B (zh) * 2011-05-27 2013-03-27 清华大学 一种动态可重构处理器内子单元间进行同步的方法
WO2013117065A1 (zh) * 2012-02-09 2013-08-15 中兴通讯股份有限公司 一种视频处理方法和系统、ivw和ivu
CN105930210B (zh) * 2012-12-05 2019-02-26 北京奇虎科技有限公司 Mpi函数调用方法和装置
CN105930210A (zh) * 2012-12-05 2016-09-07 北京奇虎科技有限公司 Mpi函数调用方法和装置
CN103164338A (zh) * 2013-03-25 2013-06-19 华为技术有限公司 并发处理系统的模拟方法及装置
CN103164338B (zh) * 2013-03-25 2016-03-30 华为技术有限公司 并发处理系统的模拟方法及装置
CN103207804A (zh) * 2013-04-07 2013-07-17 杭州电子科技大学 基于集群作业日志的MapReduce负载模拟方法
CN103207804B (zh) * 2013-04-07 2016-03-30 杭州电子科技大学 基于集群作业日志的MapReduce负载模拟方法
CN104572881A (zh) * 2014-12-23 2015-04-29 国家电网公司 基于多任务并发的配网图模导入方法
CN106775597A (zh) * 2016-12-06 2017-05-31 复旦大学 一种松耦合结构的并行多核全系统模拟器
CN110825438A (zh) * 2018-08-10 2020-02-21 北京百度网讯科技有限公司 用于模拟人工智能芯片的数据处理的方法和装置
CN110825438B (zh) * 2018-08-10 2022-07-19 北京百度网讯科技有限公司 用于模拟人工智能芯片的数据处理的方法和装置
CN112380017A (zh) * 2020-11-30 2021-02-19 成都虚谷伟业科技有限公司 一种基于松散内存释放的内存管理系统
CN112380017B (zh) * 2020-11-30 2024-04-09 成都虚谷伟业科技有限公司 一种基于松散内存释放的内存管理系统

Also Published As

Publication number Publication date
CN100524221C (zh) 2009-08-05

Similar Documents

Publication Publication Date Title
CN100524221C (zh) 一种并行模拟器及方法
Meng et al. The Uintah framework: A unified heterogeneous task scheduling and runtime system
Baruah Optimal utilization bounds for the fixed-priority scheduling of periodic task systems on identical multiprocessors
Marjanović et al. Overlapping communication and computation by using a hybrid MPI/SMPSs approach
Charousset et al. Revisiting actor programming in C++
Meng et al. Dynamic task scheduling for the uintah framework
CN101751289B (zh) 一种嵌入式实时操作系统的混合调度方法
CN102135949B (zh) 基于图形处理器的计算网络系统、方法及装置
WO2007078300A2 (en) Architecture of ticc-ppde, a new paradigm for parallel programming
Schonbein et al. Measuring multithreaded message matching misery
Alchieri et al. Early scheduling in parallel state machine replication
CN103823720A (zh) 用于同步代码的发散区域中的线程的系统和方法
Castillo et al. Optimizing computation-communication overlap in asynchronous task-based programs
Lv et al. P-GAS: Parallelizing a cycle-accurate event-driven many-core processor simulator using parallel discrete event simulation
Sahasrabudhe et al. Optimizing the hypre solver for manycore and GPU architectures
CN103412739A (zh) 一种基于地震数据处理的数据传输方法及系统
He et al. Real-time scheduling in mapreduce clusters
CN104360962B (zh) 匹配于高性能计算机结构的多级嵌套数据传输方法与系统
Perumalla et al. Discrete event execution with one-sided and two-sided gvt algorithms on 216,000 processor cores
CN109074289A (zh) 子组间数据共享
Gil-Costa et al. Modelling search engines performance using coloured petri nets
Zhang et al. Design of a multithreaded Barnes-Hut algorithm for multicore clusters
Gustavson et al. Distributed SBP cholesky factorization algorithms with near-optimal scheduling
Santoro et al. Transparent optimistic synchronization in the high-level architecture via time-management conversion
Grant et al. Networks and MPI for cluster computing

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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20090805

Termination date: 20191228

CF01 Termination of patent right due to non-payment of annual fee