CN104778299B - 并行微观交通仿真中非阻塞式的车辆移动方法 - Google Patents
并行微观交通仿真中非阻塞式的车辆移动方法 Download PDFInfo
- Publication number
- CN104778299B CN104778299B CN201510051451.2A CN201510051451A CN104778299B CN 104778299 B CN104778299 B CN 104778299B CN 201510051451 A CN201510051451 A CN 201510051451A CN 104778299 B CN104778299 B CN 104778299B
- Authority
- CN
- China
- Prior art keywords
- vehicle
- thread
- track
- section
- downstream
- 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.)
- Active
Links
Landscapes
- Traffic Control Systems (AREA)
Abstract
本发明公开了一种并行微观交通仿真中非阻塞式的车辆移动方法,该方法首先为每个路段中的车道创建一个车辆管理装置,用于管理车道上的车辆,并将组成路网的所有路段划分成多个组,每个组分配一个线程负责仿真车辆的状态。当车辆跨路段行驶时,则会带来并发与线程竞争问题,为解决这个问题,本方法利用一条硬件级的原子指令CAS指令,实现基于冲突检测的乐观并发策略,也就是非阻塞式的同步方案,避免了锁的使用,降低了并发仿真环境下线程间交互的性能损耗,使得整个微观交通仿真系统的性能有了明显提升,满足了城市规模道路交通系统的实时仿真需要。
Description
技术领域
本发明涉及系统仿真领域、微观交通仿真领域,尤其涉及一种并行环境下的微观交通仿真中非阻塞式的车辆移动方法。
背景技术
交通问题一直是一个严重的社会问题,制约着城市的发展。由于道路交通系统是一个复杂的巨系统,单纯的理论研究或实验方法都不能很好的胜任,而基于计算机仿真技术的微观交通仿真系统则是分析和解决交通问题的有效手段。由于微观交通仿真系统需要模拟每一辆车的行为,因此对计算机的性能要求较高,传统的微观交通仿真系统不能仿真大范围的交通系统。
目前已有的并行微观交通仿真方法分两类,一类是创建多个线程,每个线程完成特定的工作,但线程是非对称的,也就是每个线程负责不同的任务,因此难以平衡线程之间的负载,也不能使线程数量根据CPU核心数灵活增减;另一类并行仿真方法线程是对等的,但是在控制线程相互作用时使用了锁,即阻塞式的同步方案。无论哪种方案,都还没有达到硬件性能的极限,影响微观仿真系统性能的进一步提升。
发明内容
本发明的目的在于针对现有技术的不足,提供一种并行微观交通仿真中非阻塞式的车辆移动方法。
本发明的目的是通过以下技术方案来实现的:一种并行微观交通仿真中非阻塞式的车辆移动方法,包括以下步骤:
(1)仿真初始化阶段,包括以下子步骤:
(1.1)为每一个路段中的每一条车道创建一个车辆管理装置(以下简称LVC);
(1.2)将每一个路段映射到一个线程;
(2)仿真进行阶段,若车辆仅在路段内部移动,则不涉及线程间的交互,否则,若车辆从上游路段的车道进入下游路段中的车道,由于不同路段分属于不同的线程,因此会产生并发和竞争,此时需要执行以下操作:
(2.1)上游路段所处的线程将车辆从当前车道的LVC中除去,并将车辆标记为游离状态,表示车辆不再属于任何路段;
(2.2)上游路段所处的线程将车辆提交到下游车道的缓冲区中;
(2.3)下游路段的线程从缓冲区中提取车辆并把车辆加入到下游车道的LVC中,从而在并发环境下高性能地实现车辆的跨路段移动。
进一步地,所述步骤1.1中,每个LVC与每个路段中的每条车道是一一对应关系,用于管理车道上的车辆,LVC由两部分组成:一个缓冲区,最多容纳一个车辆对象的指针,用于保存刚刚从车道上游新进入的车辆;一个车辆容器,用于保存车道上的车辆,车辆按位置的先后顺序排序。
进一步地,所述步骤1.2具体为:首先确定线程数量,用户可通过参数指定线程数,若未指定,则默认线程数量即为CPU核心数量,假设线程数量为n,则创建n个线程,存放在线程池之中;接下来把整个路网包含的所有路段分为n组,每组固定分配给一个线程,组内所有路段中的车辆状态更新由该线程驱动;路段分组方法没有特殊要求,只需要保证每个组的路段数尽可能相等,以使每个线程负载均衡。
进一步地,所述步骤2.2中,所述下游路段车道对应的缓冲区属于临界资源,上游线程将车辆提交到该缓冲区使用的是一种基于冲突检测的乐观并发策略,也就是非阻塞式同步(Non-Blocking Synchronization)方案,不使用锁,具体为:利用CAS指令,上游线程将车辆与缓冲区中的值进行一次原子交换,若交换得到空值,则表示原缓冲区为空,表示车辆已经成功置入缓冲区中;否则上游线程交换得到另一辆车,说明缓冲区中已有其它车辆,表示车辆发生碰撞,流程终止;所述CAS(compare-and-swap)指令为硬件级的原子指令,CAS指令包含3个操作数:内存地址V,旧的预期值A,新值B,当且仅当V中原有的值和A值相等时,处理器用B值更新V中存储的值,否则就不执行更新,指令的返回值视硬件的不同或者返回一个布尔值表示是否更新成功,或者返回V中的旧值(不是新值B),上述整个操作是原子性的。
进一步地,所述步骤2.3中,下游路段所处的线程从缓冲区中获取车辆同样使用CAS指令,具体为:下游线程将空值与缓存区中的值进行一次原子交换,交换后下游线程得到原缓冲区中的值(车辆),而缓冲区被置空;若下游线程交换后仍为空值,说明缓存区中原本就没有车,此时终止流程;否则,下游线程得到从上游线程驶入的车辆,此时应将车辆加入到下游车道的LVC的车辆容器中,并更新车辆的位置状态为隶属于下游车道,同时进行安全性检查;安全性检查指的是判断车辆位置是否与前面车辆重叠,若重叠表示车辆发生碰撞,此时终止流程。
与现有技术相比,本发明的有益效果是:1)线程之间是对称的,平等的,可以任意增加或减少线程数量,可以完全利用不同核心数量的CPU;2)显著提高了车辆移动的性能,从而提高了微观交通仿真的整体性能,利用硬件级的原子指令,完全避免了锁的使用,消除了线程之间的同步开销,在普通4核心电脑上支持超过100万台车辆的仿真,满足城市规模交通的实时仿真。
附图说明
图1是车道上车辆管理装置(LVC)的结构示意图;
图2是上游车道的线程将车辆提交给下游车道的流程图;
图3是下游车道的线程接收车辆的流程图。
具体实施方式
下面结合附图对本发明作进一步详细说明。
本发明一种并行微观交通仿真中非阻塞式的车辆移动方法,包含以下步骤:
(1)仿真初始化阶段,包括以下子步骤:
(1.1)为每一个路段中的每一条车道创建一个车辆管理装置(LVC)。
车辆管理装置(以下简称LVC)用于管理车道上的车辆,其结构如图1所示,由两部分组成:一个缓冲区,最多容纳一个车辆对象的指针,用于保存刚刚从车道上游新进入的车辆;一个车辆容器,用于保存车道上的车辆,车辆按位置的先后顺序排序。仿真初始化阶段需要为每个路段中的每条车道创建一个LVC,LVC与车道是一一对应关系。
(1.2)将每一个路段映射到一个线程。
该步骤首先要确定线程数量,用户可通过参数指定线程数,若未指定,则默认线程数量即为CPU核心数量,假设线程数量为n,则创建n个线程,存放在线程池之中,以供后续使用。接下来把整个路网包含的所有路段分为n组,每组固定分配给一个线程,组内所有路段中的车辆状态更新由该线程驱动。路段分组方法没有特殊要求,只需要保证每个组的路段数尽可能相等,以使每个线程负载均衡。
(2)仿真行进阶段,当车辆在路段之内移动时,不产生进程间的交互,故不需要额外的同步措施。但是当车辆从一个路段进入另一个路段时,由于不同路段分属于不同的线程,因此会产生并发和竞争,此时需要执行以下步骤,即完成非阻塞式的车辆移动:
(2.1)上游路段所处的线程将车辆从当前车道的LVC中除去,并将车辆标记为游离状态,表示车辆不再属于任何路段。
上游线程将车辆从上游车道的LVC中删除,并将车辆位置更新为游离状态,表示不再属于任何路段。车辆在跨路段移动过程中是不属于任何路段的,只有在移动完成后才会属于某个特定的路段。因此在移动开始时需要先把车辆的位置更新为游离状态。
(2.2)上游路段所处的线程将车辆提交到下游车道的缓冲区中。
下游车道LVC的缓冲区属于临界资源,上游线程将车辆提交到该缓冲区时本发明使用的是一种基于冲突检测的乐观并发策略,也就是非阻塞式同步(Non-BlockingSynchronization)方案,不使用锁。具体为:
i)利用一条硬件级的原子指令:compare-and-swap(CAS)指令,CAS指令包含3个操作数:内存地址V,旧的预期值A,新值B,当且仅当V中原有的值和A值相等时,处理器用B值更新V中存储的值,否则就不执行更新,指令的返回值视硬件的不同或者返回一个布尔值表示是否更新成功,或者返回V中的旧值(不是新值B),最后上述整个操作是原子性的。目前大部分微处理器都已经提供了CAS指令,如x86,IA64中的CMPXCHG指令。
ii)利用CAS指令,上游线程将车辆与缓冲区中的值进行一次原子交换。若交换得到空值,则表示原缓冲区为空,表示车辆已经成功置入缓冲区中;否则上游线程交换得到另一辆车,说明缓冲区中已有其它车辆,表示车辆发生碰撞,流程终止。
步骤(2.1)、(2.2)的过程如图2所示。
(2.3)下游路段所处的线程从缓冲区中获取车辆并把车辆加入到LVC中。
下游线程从缓冲区提取车辆也是使用CAS指令,下游线程将空值与缓存区中的值进行一次原子交换,交换后下游线程得到原缓冲区中的值(车辆),而缓冲区被置空。另一方面,若下游线程交换后仍为空值,说明缓存区中原本就没有车,此时应该终止流程。否则,下游线程得到从上游线程驶入的车辆,此时应将车辆加入到下游车道的LVC的车辆容器中,并更新车辆状态,同时进行安全性检查。其中更新车辆状态指的是将车辆位置更新为属于下游路段,安全性检查检查指的是判断车辆位置是否与前面车辆重叠,若重叠表示车辆发生碰撞,此时应终止流程。整个过程如图3所示。
Claims (3)
1.一种并行微观交通仿真中非阻塞式的车辆移动方法,其特征在于,包括以下步骤:
(1)仿真初始化阶段,包括以下子步骤:
(1.1)为每一个路段中的每一条车道创建一个车辆管理装置LVC;
(1.2)将每一个路段映射到一个线程;
(2)仿真进行阶段,若车辆仅在路段内部移动,则不涉及线程间的交互,否则,若车辆从上游路段的车道进入下游路段中的车道,执行以下操作:
(2.1)上游路段所处的线程将车辆从当前车道的LVC中除去,并将车辆标记为游离状态,表示车辆不再属于任何路段;
(2.2)上游路段所处的线程将车辆提交到下游车道的缓冲区中;具体为:利用compare-and-swap(CAS)指令,上游线程将车辆与下游车道缓冲区中的值进行一次原子交换,若交换得到空值,则表示原缓冲区为空,表示车辆已经成功放入缓冲区中;否则上游线程交换得到另一辆车,说明缓冲区中已有其它车辆,表示车辆发生碰撞,流程终止;
(2.3)下游路段的线程从缓冲区中提取车辆并把车辆加入到下游车道的LVC中,从而在并发环境下高性能地实现车辆的跨路段移动;具体为:利用CAS指令,下游线程将空值与缓存区中的值进行一次原子交换,交换后下游线程得到缓冲区中的值,而缓冲区被换入空值;交换得到两种结果:a)若下游线程交换得到空值,说明缓冲区中原本就没有车辆,此时终止流程;b)若下游线程交换得到的值非空,则该值即为从上游车道驶入的车辆,此时将车辆加入到下游车道的LVC中,将车辆状态更新为属于下游路段。
2.根据权利要求1所述的并行微观交通仿真中非阻塞式的车辆移动方法,其特征在于,所述步骤(1.1)中,每个LVC与每个路段中的每条车道是一一对应关系,用于管理车道上的车辆,LVC由两部分组成:一个缓冲区,最多容纳一个车辆对象的指针,用于保存刚刚从车道上游新进入的车辆;一个车辆容器,用于保存车道上的车辆,车辆按位置的先后顺序排序。
3.根据权利要求1所述的并行微观交通仿真中非阻塞式的车辆移动方法,其特征在于,所述步骤(1.2)具体为:首先确定线程数量,用户可通过参数指定线程数,若未指定,则默认线程数量即为CPU核心数量,假设线程数量为n,则创建n个线程,存放在线程池之中;接下来把整个路网包含的所有路段分为n组,每组固定分配给一个线程,组内所有路段中的车辆状态更新由该线程驱动;路段分组方法需保证每个组的路段数尽可能相等,以使每个线程负载均衡。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510051451.2A CN104778299B (zh) | 2015-02-01 | 2015-02-01 | 并行微观交通仿真中非阻塞式的车辆移动方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510051451.2A CN104778299B (zh) | 2015-02-01 | 2015-02-01 | 并行微观交通仿真中非阻塞式的车辆移动方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104778299A CN104778299A (zh) | 2015-07-15 |
CN104778299B true CN104778299B (zh) | 2017-08-25 |
Family
ID=53619760
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510051451.2A Active CN104778299B (zh) | 2015-02-01 | 2015-02-01 | 并行微观交通仿真中非阻塞式的车辆移动方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104778299B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114611337B (zh) * | 2022-05-11 | 2022-09-23 | 深圳市城市交通规划设计研究中心股份有限公司 | 一种分布式交通仿真方法、装置及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5801943A (en) * | 1993-07-23 | 1998-09-01 | Condition Monitoring Systems | Traffic surveillance and simulation apparatus |
CN101464923A (zh) * | 2009-01-16 | 2009-06-24 | 天津大学 | 面向交通控制、诱导及其协调的仿真智能交通系统 |
CN103065463A (zh) * | 2012-12-20 | 2013-04-24 | 青岛海信网络科技股份有限公司 | 交通控制仿真系统及方法 |
CN104269074A (zh) * | 2014-09-04 | 2015-01-07 | 中山大学 | 一种用于十字路口的分布式交通控制机制 |
-
2015
- 2015-02-01 CN CN201510051451.2A patent/CN104778299B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5801943A (en) * | 1993-07-23 | 1998-09-01 | Condition Monitoring Systems | Traffic surveillance and simulation apparatus |
CN101464923A (zh) * | 2009-01-16 | 2009-06-24 | 天津大学 | 面向交通控制、诱导及其协调的仿真智能交通系统 |
CN103065463A (zh) * | 2012-12-20 | 2013-04-24 | 青岛海信网络科技股份有限公司 | 交通控制仿真系统及方法 |
CN104269074A (zh) * | 2014-09-04 | 2015-01-07 | 中山大学 | 一种用于十字路口的分布式交通控制机制 |
Non-Patent Citations (1)
Title |
---|
基于多核的并行混合交通微观仿真系统;李珊珊等;《华南理工大学学报 (自然科学版 )》;20120228;第40卷(第2期);57-62 * |
Also Published As
Publication number | Publication date |
---|---|
CN104778299A (zh) | 2015-07-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104866374A (zh) | 基于多任务的离散事件并行仿真及时间同步方法 | |
Liu et al. | Coordinated control method of virtually coupled train formation based on multi agent system | |
CN107085743A (zh) | 一种基于国产众核处理器的深度学习算法实现方法与平台 | |
CN106055590A (zh) | 基于大数据及图数据库的电力网络数据处理方法和系统 | |
CN102054355B (zh) | 适用于大规模交通流仿真的虚拟车辆路由方法 | |
CN106776455A (zh) | 一种单机多gpu通信的方法及装置 | |
CN104778299B (zh) | 并行微观交通仿真中非阻塞式的车辆移动方法 | |
CN109214512A (zh) | 一种深度学习的参数交换方法、装置、服务器及存储介质 | |
CN106557611A (zh) | 分布式交通网络仿真平台的动态负载均衡算法研究及应用 | |
CN101727562B (zh) | 交通系统多分辨率建模仿真系统与方法 | |
Li et al. | Territory, the state and geopolitics of mega city-region development in China | |
CN104882007A (zh) | 基于流计算的交通信号控制系统搭建方法及控制系统 | |
CN106598696A (zh) | 一种虚拟机之间数据交互的方法及装置 | |
CN103491018B (zh) | 一种大规模行为模拟应用中的负载均衡方法 | |
CN106021794A (zh) | 一种交通系统多分辨率仿真建模方法 | |
CN102110151A (zh) | 出帐系统的Petri网模型的分析方法 | |
CN109522630A (zh) | 一种基于对角加边形式的电力系统暂态稳定仿真并行计算方法 | |
CN104424123A (zh) | 一种无锁数据缓冲区及其使用方法 | |
CN112365704A (zh) | 基于Petri网的道路交通建模方法、系统、介质及终端 | |
Bodoh et al. | Performance experiments with the high level architecture and the total airport and airspace model (TAAM) | |
CN105653501A (zh) | 一种加速克里金插值的方法 | |
CN103716396B (zh) | 一种涂鸦方法 | |
CN110059378A (zh) | 一种基于GPU并行计算的自动制造系统Petri网状态生成方法 | |
CN106897148A (zh) | 一种生成微下冲气流场的系统和方法 | |
CN103246564B (zh) | 一种面向云数据中心的大规模虚拟机快速迁移决策方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |