TW项目后端GPU加速、DPDK网络加速

针对TW项目中战斗计算效率问题,提出多线程计算+战斗线程与CPU内核绑定及GPU计算两种方案。前者简单易实现,后者虽开发难度大但能显著提升计算效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TW项目后端加速
一、问题描述
    对于回合制游戏,战斗每秒运行一次(一个回合),在这一次战斗中要进行所有的军队(army)的攻击、反击和将领(英雄)的技能的计算。大致的计算方法如下:
    军队攻击:
    for 所有军队
        for 军队中所有的不同兵种
            for 被攻击军队的兵种
                计算当前增益、互克等
            计算当前兵种总攻击,被攻击军队防御和反击
        按计算公式计算当前军队总伤害
        按计算公式计算被攻击军队的反击伤害
    虽然计算公式不会特别复杂,但是如果军队数量比较多的时候,战斗计算线程就会较卡。通过计算,当有5000个部队同时战斗的时候,这样战斗线程就会运行几十甚至100多毫秒。而当前的战斗结果(战报)发送给前端,也要花费较长时间。上述问题会导致服务器在战斗发生比较频繁、比较集中的时候

二、战斗运算的解决方案
    1、多线程计算+战斗线程与CPU内核绑定(https://github.com/OpenHFT/Java-Thread-Affinity.git)
        优点:实现简单,不增加运营成本
        缺点:需要加锁,极端情况也会比较卡。
        结论:在需要快速实现和团队能力有限的情况下采用这个方法。
    2、GPU计算(CUDA)
        优点:由于可以用GPU进行并行运算,所以战斗运算所用的GPU时钟周期为0毫秒。
        缺点:开发相当困难,相关代码要大量改进,需要有较高的技术水平的人才能开发。
        结论:经实际测试,CPU的计算能力是GPU的5-10倍,CUDA编程时用GPU计算最重要的就是尽量少次数的内存传输(Device<->Host)、减少不同数据之间的逻辑耦合。用N卡的GeForce系列显卡运算的话,CPU也要同时运算,GPU的运算结果用于显示,CPU的运算结果用于实际计算。在团队工期不是特别紧张、有相关技术的时候可以采用这个方法。

三、网络并发的解决方案
    1、修改TCP/IP底层为DPDK,TCP这一层采用MTCP,同时使用KCP代替UDP收发大部分游戏内逻辑消息。
    2、不同的战斗区域,可以分开计算,然后分开发结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐鹏V

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值