一种多人在线网络游戏服务器的并行优化技术的制作方法

文档序号:7741440阅读:317来源:国知局
专利名称:一种多人在线网络游戏服务器的并行优化技术的制作方法
技术领域
本发明涉及一种利用多处理器在多人在线网络游戏中的服务器端的优化技术
背景技术
基于客户端服务器模式的多人在线网络游戏中,服务器需要把一个客户端产生的消息转发给其它的客户端。事实上并不是所有客户端都关心该消息,转发无用消息引起了网络带宽过度占用和资源大量消耗,从而使得网络带宽和资源成为影响响应延时和服务器帧速率的瓶颈。兴趣管理技术通过计算对事件感兴趣的客户端的方法,在增加处理器负载的前提下,有效缓解了带宽占用和资源消耗。 兴趣过滤技术产生于支持DIS (Distributed Interactive Simulation)协议的实时分布仿真系统中,主要在军事仿真、多人在线游戏等领域得到运用,如ModSAF(ModularSemi-Automated Forces)是一个面向美国军队的构造模拟系统,产生在90年代。NPSNET(Naval Postgraduate School NET) [6]采用六边形网格来近似表达实际的圆形"感兴趣区域"。当实体前向运动时,在它加入新网格的前沿边之后,离开老网格的尾沿边之前,该网格的半径即为实体的"感兴趣区域"。 兴趣管理技术通过计算实体感兴趣的区域(A0I)过滤了无用的消息的同时增加了服务器的计算负载。 为了能够支持大量的计算负载,多服务器技术是一种解决方案,多服务器技术将虚拟场景划分成若干区域,每个服务器负责一个区域,在区域和区域之间以维护影子对象的方法实现无缝的移动。然而维护多服务器的数据同步增加了额外的计算开销和网络负载。 近年来新兴的单芯片多核体系结构是对多线程的芯片级别支持的一种大规模并行技术。使服务器的流程并行化,充分利用多处理器的计算能力可增加服务器支持的玩家数量。 为了快速开发利用这种芯片的并行性而获取更高性能的并行应用程序需要采用合适的编程模型。0penMP作为编写共享内存系统的并行程序的工业标准成为一个合理的候选者。OpenMP起源于ANSI标准,它具有简单、移植性好和可扩展等优点,是共享存储系统编程的一个工业标准。OpenMP并不是一门新的语言,它是对基本语言(如Fortan77、 01^肌90、(:、[++等)的扩展。OpenMP规范中定义的制导指令、运行库和环境变量,能够使用户在保证程序的可移植性的前提下,按照标准将已有的串行程序逐步并行化。
本发明将服务器流程并行化,运用0penMP将并行后的算法进行了实现。

发明内容
本发明要解决的技术问题是在多人在线网络游戏中,克服了服务器串行流程只能利用单处理器的不足,能够充分利用多处理器的资源。
本发明采用的技术方案为将服务器的兴趣过滤、同步信息等流程并行化,其特点
3在于包括了以下四个步骤 (1)基于分组任务的模式并行处理生成实体兴趣区域更新散列表和同步散列表这 两个任务。运用这两个散列表能够使服务器不必逐帧计算实体的兴趣区域和同步实体的信 息从而增加服务器可以承担的玩家数量; (2)基于数据的分解模式并行计算实体的兴趣列表,该兴趣列表记录了哪些客户 端对该实体感兴趣; (3)基于数据的分解模式并行处理服务器的游戏逻辑,游戏逻辑包括实体位置更 新、毁伤计算、碰撞检测等; (4)基于数据的分解模式并行同步客户端和服务器的信息。 所述实体兴趣区域更新散列表和同步散列表记录的是每一帧需要更新兴趣区域 和需要同步实体信息的两个二维数组。 假设服务器要求在k帧内遍历所有的实体并进行兴趣区域实体更新,并假设有N 个实体,则每一帧需要更新的实体数为N/k个。为了支持并行数据分解模式,这里设计了一 个二维数组AoIRefreshTable".来存储每帧需要更新的实体列表。假如c表示当前帧数,一 维数组AoIRefreshTablei表示第i = c% k帧时需要更新的实体列表。图1为当k等于30 时的兴趣区域更新散列表。 此外基于类似的策略,服务器端每一帧按照一定逻辑维护的实体状态,这些逻 辑包括物理规则、游戏规则等,但不必逐帧对客户端进行实体状态更新,可以隔帧进行同 步(包括位置信息、运动状态等)。假设同步的周期为s帧,服务器采用一个二维数组 SYNRefreshTableij来存储每帧需要同步的实体列表。假设c表示当前帧数, 一维数组 SYNRefreshTablei表示第i = c% s帧时需要同步的实体列表。 运用这两个数组,不必每帧所有实体的兴趣区域和同步所有实体的信息,降低了 网络和处理器的负载。 如果实体的数量有变动(如果有玩家退出、登陆、实体销毁等),则需要从新生成
实体兴趣区域更新散列表和生成实体同步散列表,生成过程对于同一帧无依赖性,可以使
用了 OpenMP的section编译制导语句,基于分组任务的分解模式进行任务并行。 所述并行计算实体的兴趣列表中,兴趣列表记录了哪些客户端对该实体感兴趣。 在传统的的服务器流程中需要串行的计算所有实体的兴趣区域。 为了突破以上限制,本发明使用兴趣区域更新散列表AoIRefreshTable来记录该
帧需要计算兴趣区域的实体,假设服务器要求在k帧内遍历所有的实体并进行兴趣区域实
体更新,并假设有N个实体,则每一帧需要更新的实体数为N/k个。需要更新的实体数由N
个减少到了 N/k个。 这N/k个实体的兴趣区域的更新互相之间没有数据相关性和顺序相关性。可以使 用基于数据的分解模式进行并行优化。例如在一个有两个处理器的服务器上,可以用处理 器1计算[1, N/2k-l]这N/2k-l个实体,处理器2计算[N/2k, N/k]这些实体,这样实现了 数据的并行处理。 所述并行处理服务器的游戏逻辑是并行计算实体位置更新、毁伤计算、碰撞检测
等 服务器在每一帧需要处理所有实体的游戏逻辑,假设整个虚拟场景有N个实体,在在传统的的服务器流程中需要依次对这N个实体进行处理。 因为实体的计算游戏逻辑的过程中,互相之间没有相关性,本发明中基于数据的 分解模式进行并行优化。例如在一个有两个处理器的服务器上,可以用处理器l计算[1, N/2-1]这N/2-1个实体,处理器2计算[N/2, N]这些实体,这样实现了数据的并行处理。
所述并行同步客户端和服务器的信息是并行计算客户端的变化,并将这些变化和 客户端保持同步。 在传统的服务器流程中,服务器需要每一帧串行的同步所有实体的信息。 基于类似并行更新兴趣区域的策略,本发明使用实体同步散列表
SYNRefreshTable来记录该帧需要计同步的实体,假设服务器有N个实体,要求在k帧内遍
历所有的实体并进行同步,则每一帧需要同步的实体数为N/k个。需要同步的实体数由N
个减少到了 N/k个。这N/k个实体的兴趣区域的更新互相之间没有数据相关性和顺序相关
性。采用和并行计算实体的兴趣列表相同的策略进行同步并行化。


图1为本发明所使用的服务器帧速率为30帧时的更新散列表;
图2为不使用并行优化的传统的服务器流程图;
图3为本发明使的服务器流程图;
图4为本发明实现的网络游戏原型; 图5为使用本发明的更新散列表,在特定情况下改变更新周期为1, 2, 4, 8, 15, 30 时,服务器端的CPU占用率; 图6为本发明在特定情况下,在多处理器上的性能表现数据。
具体实施例方式
为了实现和验证本发明,我们设计实现了即时战略类型的在线游戏原型TankWar 0. l,游戏的客户端程序使用Microsoft DirectX编程接口,实现了简单的三维场景绘制 包括基于高度图的地形网格生成、动态纹理的天空盒。客户端的界面如图4所示。
游戏的服务器端采用基于OpenMP编程接口将算法进行处理。处理过程利用 0penMP的for、 section等编译制导语句。 首先,服务器端接收并处理玩家消息。这一步服务器接收客户端的消息,并对消息 做出响应。例如消息为新加入玩家消息,直接在玩家链表中加入玩家实体并通知别的客户 端有玩家加入。并通知感兴趣的玩家实体删除消息。如果是移动物体的消息,把该物体标 记为移动的,并且给物体的目的地、速度等赋值。 第二步如果实体的数量有变动则并行生成实体兴趣区域更新散列表和同步散列 表,这里设计了一个二维数组AoIRefreshTableij来存储每帧需要更新的实体列表。假如 c表示当前帧数,一维数组AoIRefreshTablei表示第i = c% k帧时需要更新的实体列表。 图1为当k等于30时的兴趣区域更新散列表。生成同步散列表的实现和生成实体兴趣区 域更新散列表的方法相同,采用一个二维数组SYNRefreshTableij来存储每帧需要同步的 实体列表。,一维数组SYNRefreshTablei表示第i = c% s帧时需要同步的实体列表。这两 个步骤使用了 0penMP的section编译制导语句,基于分组任务的分解模式进行任务并行。实现的伪代码如下 if (objModified) { 〃如果有物体变动,更新兴趣列表更新列散表同步列散表
#pragma omp sections private (i) { #pragma omp section 〃更新兴趣列表更新列散表 for(0bjecti ;in objArray) A0IFreshTable[i% MFrame]. push_back(0bjecti); Spragma omp section 〃更新同步列散表 for(0bjecti ;in objArray) SYNFreshTable [i % SYNFrame]. push—back (0b ject》; } objModified = false ; } 第三步更新兴趣列表,将兴趣列表前后的变化通知给客户端玩家。每个实体有
个NewAoIList和LastAoIList分别记录这一帧(服务器本次计算循环)和上一帧(服务 器上一次计算循环)中对该实体感兴趣的其它实体的集合。 在更新完实体的兴趣区域后,更新玩家的发现实体和实体离开的消息,对于实体 在objANewAoIList中,而不在objA的LastAoIList中。贝U向objA的所属玩家playerA发 送发现实体消息。反之对于实体在ob jA的LastAoIList中,而不在ob jA的NewAoIList中。 则向objA的所属玩家playerA发送实体离开的消息。 计算兴趣列表和兴趣列表前后的变化通知给客户端玩家采用0penMP的for编译 制导语句,基于数据的分解模式进行任务并行。 第四步处理服务器游戏逻辑。在这步处理攻击,毁伤计算,碰撞检测等信息。这一 步采用omp for指令展开到多个线程上执行,实现数据的并行计算。 第五步更新玩家实体状态。经过前面步骤计算后,服务器端的实体状态发生变化 (如位置信息、运动状态等),这一步根据实体状态同散列表SYNRefreshTable里的信息对 玩家实体进行状态更新,采用omp for指令将展开到多个线程上执行,实现数据的并行计算。 上述实现伪代码如下 #pragma omp for 〃更新这一帧需要更新的兴趣列表,并反馈给客户端 for (0bjecti ;in AOIFreshTable[framecount% IMFrame]) { GenerateAOIList (0b ject》;〃 更新这一帧需要更新的兴趣 列表 ReflectPlayerAOI (Object》; }〃反馈给客户端 #pragma omp for 〃并行处理,这一帧的服务器逻辑,如碰撞、移动(可以在这里处理攻 击等信息) for (0bjecti ;in objArray) Handlelxigic(Objecti); #pragma omp for 〃同步这一帧需要同步的客户端 for (Object ;in SYNFreshTable[framecount% SYNFrame]) SynchPlayer(0bjecti); 图3为采用上述发明并行优化后的服务器端在两个处理器上的流程图,可以对比 串行流程(图2)对比串行和并行的差异。 如图5所示,是兴趣区域更新周期IMFrame的取值对服务器CPU的负载的影B向。本 测试在局域网中实现,保证服务器帧速为25帧每秒。设置位置同步周期为50,即50帧同 步一次位置信息,局域网中共启动25个客户端,每个客户端加入200个实体。在服务器端 线程数等于处理器个数的时候,改变实体的被感兴趣玩家列表的更新周期IMFrame,测试服 务器端CPU的占用率。测试数据可以看出实体的被感兴趣玩家列表的更新周期MFrame和 CPU的负载成的反比例关系。由此可以看出兴趣区域更新散列表的发明能够很大程度上降 低服务器的计算负载。 图6为该发明在多处理器服务器上的性能表现,设置位置同步周期为50,即50帧 同步一次位置信息。为了增加CPU的负载,服务器端每帧进行兴趣过滤。局域网中共启动 25个客户端,每个客户端依次加入200个实体。分别测试在不同服务器上串行算法(单线 程)和并行算法(线程为处理器个数二倍时)服务器可以保持的最大帧速并计算加速比和 CPU有效使用率。 加速比S(P)为程序在串行情况下的执行时间和并行执行时间的比值,定义如为
<formula>formula see original document page 7</formula> 效率E(P)的定义为加速比除以处理器个数,如下公式所示,其中P为处理器个数。 <formula>formula see original document page 7</formula> 其中T(l)为串行时每帧耗时,T(P)为并行程序的耗时。 测试说明了采用OpenMP进行并行优化后,充分的利用了 CPU的资源,使得服务能 够保持的最大帧速得以提升。当线程数大于CPU的核数的时候,因为线程派生聚合的开销 性能不会上升反而会有少量下降,如表6. 6中,在4处理器的服务器上,8线程的时候性能 比4线程时略有降。这说明了该发明在能够在多处理器服务器上使得服务器性能提升,在 多人在线网络游戏中能够得到运用。
权利要求
一种多人在线网络游戏服务器的并行优化方法,其特征在于包括以下四个步骤(1)基于分组任务的模式并行的处理,生成实体兴趣区域更新散列表和同步散列表;运用这两个散列表使服务器不必逐帧计算实体的兴趣区域和同步实体的信息从而增加服务器可以承担的玩家数量;(2)根据步骤(1)中获得的兴趣区域更新散列表,基于数据的分解模式并行计算实体的兴趣列表,所述兴趣列表记录了对该实体感兴趣的客户端;(3)基于数据的分解模式并行处理服务器的游戏逻辑,游戏逻辑包括实体位置更新、毁伤计算、碰撞检测;(4)根据步骤(1)中获得的同步散列表,基于数据的分解模式并行同步客户端和服务器的信息。
2. 根据权利要求1所述的一种多人在线网络游戏服务器的并行优化方法,其特征在于所述不必逐帧计算实体的兴趣区域和同步实体的信息具体在于(1) 采用隔帧兴趣区域实体更新策略假设服务器要求在k帧内遍历所有的实体并进行兴趣区域实体更新,并假设有N个实体,则每一帧需要更新的实体数为N/k个;(2) 如果实体个数有变动,则计算兴趣区域更新散列表和同步散列表,这两个列表分别记录了每一帧需要更新和同步的实体,保存在一个二维数组里;(3) 基于类似的策略,服务器端逐帧按照一定逻辑维护实体状态,这些逻辑包括物理规则、游戏规则,但不逐帧对客户端进行实体状态更新,而是隔帧进行同步。
3. 根据权利要求1所述的一种多人在线网络游戏服务器的并行优化方法,其特征在于,所述基于分组任务的模式并行的处理和基于数据的分解模式的并行处理服务器的游戏逻辑(1) 生成实体兴趣区域更新散列表和更新同步散列表的过程,相互间没有先后依赖性,也没有数据依赖性。因此基于分组任务的模式进行并行处理;(2) 计算实体的兴趣列表,处理服务器的游戏逻辑,同步客户端和服务器的信息这三个步骤需要处理多个实体,被处理的实体互相之间没有先后依赖性,也没有数据依赖性,因此基于数据的分解模式并行处理。
全文摘要
多人在线网络游戏服务器的并行优化方法,包括以下四个步骤基于分组任务的模式使生成实体兴趣区域更新散列表和同步散列表这两个任务能够并行的处理。这两个散列表能够使服务器不必逐帧计算实体的兴趣区域和同步实体的信息;基于数据的分解模式并行计算每个实体的兴趣列表,该兴趣列表记录了哪些客户端对该实体感兴趣;基于数据的分解模式并行处理服务器的游戏逻辑,游戏逻辑包括实体位置更新、毁伤计算、碰撞检测等;基于数据的分解模式并行同步客户端和服务器的信息。本发明通过将兴趣过滤、服务器逻辑处理等计算负载分配到多个处理上,提高了游戏的实时性,增加了可负载的玩家的数量。
文档编号H04L29/06GK101795275SQ20101010524
公开日2010年8月4日 申请日期2010年2月3日 优先权日2010年2月3日
发明者杨硕磊, 王莉莉, 赵沁平, 郝爱民 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1